Laravel este o aplicație concepută pentru a fi locală, pentru a se adapta la diverse limbi și culturi. Localizarea adaptează aplicațiile internaționalizate la o anumită limbă prin traducere.
localhost
. Dacă nu, înlocuiți localhost
cu propriul nume de domeniu sau adresa IP (în funcție de instalarea dvs.).În Laravel, la fel ca în multe alte cadre, putem stoca traduceri pentru diferite limbi în fișiere separate. Există două moduri de a organiza fișierele de traducere Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Pentru limbile care diferă în funcție de teritoriu, ar trebui să le denumiți directory/file
a limbii conform ISO 15897. De exemplu, pentru engleza britanică ați folosi en_GB
in loc de en-gb
. În acest articol, ne vom concentra pe cea de-a doua abordare, dar același lucru este valabil și pentru prima (cu excepția modului în care sunt denumite și preluate cheile de traducere).
Acum, să trecem la resources/views/welcome.blade.php
fișier și înlocuiți conținutul fișierului body
etichetați cu ale noastre, așa:
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
Welcome to our website
</div>
</div>
</div>
</body>
Vom începe prin a pregăti mesajul nostru de bun venit pentru localizare, care este foarte ușor în Laravel. Tot ce trebuie să faceți este să înlocuiți textul „Bine ați venit pe site-ul nostru” cu următorul cod: {{ __('Welcome to our website') }}
. Acest lucru va instrui Laravel să afișeze „Bine ați venit pe site-ul nostru” în mod implicitdefinite și căutați traduceri ale acestui șir dacă este setată o altă limbă decât engleza (vom ajunge la asta mai târziu). Engleza va fi setată ca limbă implicitădefifinalizarea aplicației noastre, deci prin setare implicitădefiLa sfârșit vom afișa pur și simplu textul „Bine ați venit pe site-ul nostru”. Dacă locația este diferită, vom încerca să găsim traducerea potrivită și va fi creată într-un moment.
Dar de unde știe Laravel care este limba curentă sau ce limbi sunt disponibile în aplicație? Face acest lucru uitându-se la configurația locală din aplicație config/app.php
. Deschideți acest fișier și căutați aceste două chei de matrice asociative:
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
Descrierile afișate deasupra tastelor ar trebui să se explice de la sine, dar pe scurt, cheia locale
conţine pre localdefifinalizarea aplicației dvs. (cel puțin, dacă nu a fost setată nicio altă localitate în cod). Si fallback_locale
este activat în cazul în care setăm un local inexistent în aplicația noastră.
În timp ce avem acest fișier deschis, să adăugăm o cheie nouă pentru confortul nostru, listând toate locațiile pe care le acceptă aplicația noastră. Vom folosi acest lucru mai târziu când adăugăm un comutator local. Cu toate acestea, aceasta este o sarcină opțională, deoarece Laravel nu ne cere să o facem.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Acum, aplicația noastră acceptă trei limbi: engleză, italiană și franceză.
Acum că am stabilit toate locațiile cu care vom lucra, putem merge mai departe și trecem la traducerea mesajului nostru prealabil de bun venitdefinoaptea.
Să începem prin a adăuga noi fișiere de localizare în folder resources/lang
. Mai întâi, creați un fișier resources/lang/it.json
și adăugați traducerile corespunzătoare, după cum urmează:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Apoi, creați un fișier resources/lang/fr.json
:
{
"Bine ati venit pe site-ul nostru": „Bine ați venit pe site-ul nostru”
}
După cum puteți vedea, ne referim întotdeauna la mesajul prealabildefinito pe care l-am adăugat în fișier welcome.blade.php
(care era {{ __('Welcome to our website') }}
). Motivul pentru care nu trebuie să creăm un fișier en.json
pentru că Laravel știe deja ce mesaje trecem prin pre-setaredefiterminat la funcţie __()
sunt pentru preul nostru localdefinito en.
În acest moment, Laravel nu știe cum să schimbe locațiile, așa că, deocamdată, să facem traducerile direct în interiorul căii. Modificați calea de bun venit înaintedefiterminat după cum se arată mai jos:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Acum putem vizita site-ul nostru web, specificând oricare dintre limbile disponibile ca prim segment de cale: de exemplu, localhost/ru
o localhost/fr
. Ar trebui să vedeți conținutul localizat. În cazul în care specificați o locație neacceptată sau nu specificați deloc o localitate, Laravel va folosi en
în mod implicitdefinita.
Schimbarea locației pentru fiecare link de site ar putea să nu fie ceea ce doriți și poate să nu arate la fel de curat din punct de vedere estetic. De aceea, vom face setarea limbii printr-un comutator special de limbă și vom folosi sesiunea utilizator pentru a afișa conținutul tradus. Prin urmare, creați un nou middleware în interiorul app/Http/Middleware/Localization.php
fișier sau rulând artisan make:middleware Localization
.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
Acest middleware va instrui Laravel să folosească localul selectat de utilizator dacă această selecție este prezentă în sesiune.
Deoarece trebuie să facem acest lucru la fiecare solicitare, trebuie să-l adăugăm și la stiva de pre middlewaredefiterminat în app/http/Kernel.php
pentru web
grup middleware:
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Localization::class, /* <--- add this */
],
Apoi, trebuie să adăugăm o cale pentru a schimba localitatea. Folosim o cale de închidere, dar puteți folosi exact același cod în interiorul controlerului, dacă doriți:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
De asemenea, nu uitați să eliminați comutatorul local adăugat anterior în calea noastră de bun venitdefinoapte:
Route::get('/', function () {
return view('welcome');
});
Odată făcut acest lucru, singura modalitate prin care utilizatorul poate schimba limba setată în prezent este introducerea localhost/language/{locale}
. locale
selecția va fi stocată în cadrul sesiunii și va redirecționa utilizatorii către locul de unde au venit (bifați Localization
middleware). Pentru a o încerca, accesați localhost/language/ru
(atâta timp cât cookie-ul dvs. de sesiune este prezent în browser) și veți vedea conținutul tradus. Vă puteți deplasa liber pe site sau puteți încerca să reîmprospătați pagina și să vedeți că limba selectată este păstrată.
Acum trebuie să creăm ceva pe care utilizatorul să poată face clic pentru a schimba limba în loc să introducem manual coduri locale în adresa URL. Pentru a face acest lucru, vom adăuga un verificator de limbaj foarte simplu. Prin urmare, creați un nou resources/views/partials/language_switcher.blade.php
fisier cu urmatorul cod:
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
@foreach($available_locales as $locale_name => $available_locale)
@if($available_locale === $current_locale)
<span class="ml-2 mr-2 text-gray-700">{{ $locale_name }}</span>
@else
<a class="ml-1 underline ml-2 mr-2" href="language/{{ $available_locale }}">
<span>{{ $locale_name }}</span>
</a>
@endif
@endforeach
</div>
Includeți comutatorul nou creat în vizualizarea „bun venit”:
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
@include('partials/language_switcher')
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
{{ __('Welcome to our website') }}
</div>
</div>
</div>
</body>
Deschide app/Providers/AppServiceProvider.php
fișier și adăugați codul de partajat când va fi compus comutatorul nostru de limbi. Mai exact, vom partaja localitatea curentă care poate fi accesată ca fișier {{ $current_locale }}
.
Vom lucra în principal cu resources/views/welcome.blade.php
, așa că totul trebuie să se întâmple în viziunea noastră binevenită, dacă nu este specificat altfel.
De exemplu, să salutăm utilizatorul nostru imaginar (Amanda) în loc să afișăm doar un mesaj generic:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Rețineți că am folosit numele cu prima literă în minuscule, dar substituentul cu prima literă în majuscule. În acest fel, Laravel vă poate ajuta să scrieți automat cu majuscule cuvântul real. Acest lucru se va întâmpla dacă substituentul începe cu o literă mare, de exemplu, :Name
produce „Caroline” sau un cuvânt cu majuscule, :NAME
, produce „CAROLINE”.
De asemenea, ne actualizăm fișierele de traducere resources/lang/fr.json
e resources/lang/it.json
, deoarece în acest moment vom vedea doar versiunea în limba engleză oriunde, deoarece cheile de traducere nu se potrivesc cu traducerile.
Limba franceza:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Italiană:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Pentru a vedea pluralizarea în acțiune, să adăugăm un nou paragraf de text.
Pentru a efectua pluralizarea, trebuie să utilizați funcția trans_choice
in loc de __()
, de exemplu:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
După cum puteți vedea, formele de plural sunt separate prin a |
.
Acum, ce se întâmplă dacă avem nevoie de mai multe forme de plural?
Acest lucru este, de asemenea, posibil:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
În acest caz, permitem numere 0
, 1
, și din 2
a 19
, și în final de la 20 încolo. Desigur, puteți adăuga oricâte reguli aveți nevoie.
Deci, ce se întâmplă dacă vrem substituenții în formele noastre de plural?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
De asemenea, putem folosi numărul transmis în `trans_choice` dacă este necesar folosind un substituent :count
special:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
În cele din urmă, nu uitați să actualizați fișierele de traducere cu orice modificări pe care le-ați făcut la traducerea de bază.
Italiană:
{
"Welcome to our website, :Name": "Benvenuto nel nostro sito, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Nessuna mela|{1} C'è:count mela|[2,19] Ci sono :count mele"
}
Limba franceza:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Il n'y a pas de pommes|{1} Il n'y :form :count pomme|[2,19] Il y :form :count pommes"
}
Pentru a localiza datele, vom valorifica puterea Carbon , care vine cu Laravel în mod implicitdefinita. Verificați Documentație de carbon ; poți face o mulțime de lucruri interesante. De exemplu, putem seta locația noastră cu reguli de dată și oră.
Pentru exemplul nostru simplu, vom afișa data curentă localizată pentru limba selectată. În a noastră routes/web.php
, actualizăm calea paginii de întâmpinare și transmitem mesajul de dată localizat către al nostru view
Bine ati venit:
<?php
Route::get('/', function () {
$today = \Carbon\Carbon::now()
->settings(
[
'locale' => app()->getLocale(),
]
);
// LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
$dateMessage = $today->isoFormat('dddd, LL');
return view('welcome', [
'date_message' => $dateMessage
]);
});
Să actualizăm resources/views/welcome.blade.php
adăugarea afișării datei, așa:
{{ __('Welcome to our website, :Name', ['name' => 'amanda']) }}
<br>
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}
Încercarea de a schimba limba de pe pagina de pornire a localhost
, vom vedea că datele sunt acum localizate, de exemplu:
În diferite țări, oamenii folosesc diferite formate pentru a reprezenta numere, de exemplu:
Prin urmare, pentru a reflecta aceste diferențe în aplicația dvs. Laravel, puteți utiliza NumberFormatter in felul urmator:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
De asemenea, puteți scrie numărul într-o anumită limbă și puteți afișa ceva de genul „o sută douăzeci și trei mii o sută douăzeci și trei virgulă unu doi”:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
În plus, NumberFormatter vă permite să localizați cu ușurință monede, de exemplu:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Prin urmare fr
vei vedea euro, in timp ce pt en_US
moneda va fi în dolari americani.
Ercole Palmeri
Milioane de oameni plătesc pentru serviciile de streaming, plătind taxe lunare de abonament. Este o părere comună că tu...
Coveware de la Veeam va continua să ofere servicii de răspuns la incidente de extorcare cibernetică. Coveware va oferi capacități criminalistice și de remediere...
Întreținerea predictivă revoluționează sectorul petrolului și gazelor, cu o abordare inovatoare și proactivă a managementului uzinelor...
CMA din Marea Britanie a emis un avertisment cu privire la comportamentul Big Tech pe piața inteligenței artificiale. Acolo…