Laravel hè una applicazione pensata per esse lucale, per adattà à diverse lingue è culture. A localizazione adatta l'applicazioni internaziunali à una lingua specifica per mezu di a traduzzione.
localhost
. Se no, rimpiazzà localhost
cù u vostru nome di duminiu o indirizzu IP (secondu a vostra installazione).In Laravel, cum'è in parechji altri frameworks, pudemu almacenà traduzioni per diverse lingue in schedari separati. Ci hè dui modi per urganizà i schedarii di traduzzione Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Per e lingue chì sò diffirenti per u territoriu, duvete nome directory/file
di a lingua sicondu ISO 15897. Per esempiu, per l'inglese britannicu avete aduprà en_GB
una volta per tutte en-gb
. In questu articulu, avemu da fucalizza nantu à u sicondu approcciu, ma u stessu passa per u primu (cù l'eccezzioni di cumu i chjavi di traduzzione sò chjamati è recuperati).
Avà, andemu à resources/views/welcome.blade.php
file è rimpiazzà u cuntenutu di u body
taggate cù u nostru, cusì:
<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>
Cuminciaremu per preparà u nostru missaghju di benvenuta per a localizazione, chì hè veramente faciule in Laravel. Tuttu ciò chì duvete fà hè di rimpiazzà u testu "Benvenutu à u nostru situ web" cù u seguente codice: {{ __('Welcome to our website') }}
. Questu hà urdinatu à Laravel per vede "Benvenutu à u nostru situ web" per difettudefinita è cercate traduzzioni di sta stringa se una lingua altru ch'è l'inglese hè stabilita (avemu da esse più tardi). L'inglese serà stabilitu cum'è a lingua predeterminatadefinite di a nostra app, dunque per difettudefinita vi simpricimenti mustrà u testu "Benvenuti à u nostru situ". Se u locale hè diversu, pruveremu di circà a traduzzione currispundente chì serà creata in un mumentu.
Ma cumu Laravel sapi quale hè a lingua attuale o chì lingue sò dispunibili in l'applicazione? Face questu fighjendu a cunfigurazione lucale in l'app config/app.php
. Aprite stu schedariu è cercate sti dui chjavi di array associative:
/*
|--------------------------------------------------------------------------
| 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',
A descrizzione mostrata sopra à e chjave deve esse auto-esplicativa, ma in corta, a chjave locale
cuntene a stanza di predefinite di a vostra applicazione (almenu, se nisun altru locale hè statu stabilitu in u codice). È u fallback_locale
hè attivatu se avemu stabilitu una stanza inesistente in a nostra applicazione.
Mentre avemu stu schedariu apertu, aghjustemu una nova chjave per a nostra comodità elencu tutti i locali chì a nostra applicazione supporterà. Utilizemu questu dopu quandu aghjunghjemu un switcher locale. Tuttavia, questu hè un compitu facultativu postu chì Laravel ùn ci hè micca bisognu di fà.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Avà a nostra applicazione supporta trè lingue: inglese, talianu è francese.
Avà chì avemu stabilitu tutti i locali cù quale avemu da travaglià, pudemu andà avanti è passà à traduzzione di u nostru messagiu di pre benvenutudefinotte.
Cuminciamu per aghjunghje novi schedarii di localizazione à u cartulare resources/lang
. Prima, crea un schedariu resources/lang/it.json
è aghjunghje e traduzzioni currispundenti, cum'è seguente:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Dopu, crea un schedariu resources/lang/fr.json
:
{
"Benvenuti à u nostru situ web": "Benvenuti à u nostru situ"
}
Comu pudete vede, avemu sempre riferitu à u messagiu predefinite chì avemu aghjustatu in u schedariu welcome.blade.php
(chì era {{ __('Welcome to our website') }}
). U mutivu perchè ùn avemu micca da creà un en.json
Hè perchè Laravel sà digià quali missaghji passemu da pre-settingdefifinitu cù a funzione __()
sò per i nostri pre lucalidefinitu fr.
À questu puntu, Laravel ùn sapi micca cumu cambià u locu, cusì per avà facemu e traduzioni direttamente in u percorsu. Edite u percorsu pre benvenutudefifinitu cum'è mostra quì sottu:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Avà pudemu visità u nostru situ web, specificendu qualsiasi di e lingue dispunibili cum'è u primu segmentu di strada: per esempiu, localhost/ru
o localhost/fr
. Duvete vede u cuntenutu localizatu. In casu chì specificate un locale micca supportatu o ùn specificate micca un locale in tuttu, Laravel aduprà en
per paràmetru predeterminatudefinita.
Cambia u locale per ogni ligame di u situ ùn pò micca esse ciò chì vulete è ùn pò micca vede cusì pulitu esteticu. Hè per quessa chì eseguiremu u paràmetru di a lingua per mezu di un cambiatore di lingua speciale è aduprà a sessione d'utilizatore per vede u cuntenutu traduttu. Dunque, crea un novu middleware in u app/Http/Middleware/Localization.php
file o in esecuzione 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);
}
}
Stu middleware indicà à Laravel per utilizà a locale scelta da l'utilizatore se sta selezzione hè presente in a sessione.
Siccomu avemu bisognu di sta operazione per esse realizatu nantu à ogni dumanda, avemu ancu bisognu di aghjunghje à a pila di pre middlewaredefifinitu in app/http/Kernel.php
per il web
gruppu 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 */
],
In seguitu, avemu bisognu di aghjunghje una strada per cambià u locale. Utilizemu una strada di chjude, ma pudete aduprà esattamente u listessu codice in u vostru controller se vulete:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Inoltre, ùn vi scurdate di caccià u toggle locale aghjuntu prima in u nostru percorsu di pre benvenutudefinotte:
Route::get('/', function () {
return view('welcome');
});
Una volta questu hè fattu, l'unicu modu per l'utilizatore per cambià a lingua attualmente stabilita hè di entre localhost/language/{locale}
. U locale
A selezzione serà almacenata in a sessione è redirigerà l'utilizatori da induve venenu (verificate u Localization
middleware). Per pruvà, andate à localhost/language/ru
(sempre chì a vostra cookie di sessione hè presente in u vostru navigatore) è vi vede u cuntenutu traduttu. Pudete spustà liberamente in u situ web o pruvate à rinfriscà a pagina è vede chì a lingua scelta hè cunservata.
Avà avemu bisognu di creà qualcosa chì l'utilizatore pò cliccà per cambià a lingua invece di inserisce manualmente i codici locali in l'URL. Per fà questu, aghjustemu un cuntrollu di lingua assai simplice. Dunque, creanu un novu resources/views/partials/language_switcher.blade.php
schedariu cù u codice seguente:
<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>
Includite u cambiatore di novu creatu in a vista "benvenuta":
<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>
Aprite u app/Providers/AppServiceProvider.php
file è aghjunghje u codice per sparte quandu u nostru cambiatore di lingua hè cumpostu. In particulare, sparteremu i paràmetri locali attuali chì ponu accede cum'è un schedariu {{ $current_locale }}
.
Avemu da travaglià principalmente cun resources/views/welcome.blade.php
, cusì tuttu deve accade in a nostra vista di benvenuta, salvu chì altrimenti specificatu.
Per esempiu, salutemu u nostru utilizatore imaginariu (Amanda) invece di vede solu un missaghju genericu:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Per piacè nutate chì avemu usatu u nome cù a prima lettera minuscule, ma u placeholder cù a prima lettera maiuscola. In questu modu, Laravel pò aiutà à capitalizà automaticamente a parolla attuale. Questu succede se u placeholder principia cù una lettera maiuscola, per esempiu, :Name
produce "Caroline" o una parola pienamente capitalizzata, :NAME
, produce "CAROLINE".
Avemu ancu aghjurnà i nostri schedarii di traduzzione resources/lang/fr.json
e resources/lang/it.json
, cum'è per u mumentu, vedemu solu a versione inglese in ogni locu postu chì e chjave di traduzzione ùn currispondenu micca à e traduzzioni.
Francese:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Talianu:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Per vede a pluralizazione in azzione, aghjunghje un novu paràgrafu di testu.
Per fà a pluralizazione, avete bisognu di utilizà a funzione trans_choice
una volta per tutte __()
, per esempiu:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Comu pudete vede, i formi plurali sò separati da a |
.
Avà, chì si avemu bisognu di più forme plurali ?
Questu hè ancu pussibule:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
In questu casu, permettenu numeri 0
, 1
, è da 2
a 19
, è infine da 20 in poi. Di sicuru, pudete aghjunghje tante regule quantu avete bisognu.
Allora, chì s'è no vulemu placeholders in i nostri formi plurali ?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Pudemu ancu aduprà u cuntu passatu in `trans_choice` se ne necessariu usendu un placeholder :count
spiciali:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Infine, ùn vi scurdate di aghjurnà i vostri fugliali di traduzzione cù qualsiasi cambiamenti chì avete fattu à a traduzzione di basa.
Talianu:
{
"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"
}
Francese:
{
"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"
}
Per truvà e date, avemu da sfruttà u putere di Carbon , chì vene cun Laravel per difettudefinita. Scuprite u Documentation carbone ; pudete fà assai cose interessanti. Per esempiu, pudemu stabilisce a nostra localizazione cù e regule di data è ora.
Per u nostru esempiu simplice, mustraremu a data attuale localizzata per a lingua scelta. In u nostru routes/web.php
, aghjurnà u percorsu di a pagina di benvenuta è passemu u missaghju di data localizzata à a nostra view
Benvenuti:
<?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
]);
});
Aghjurnemu resources/views/welcome.blade.php
aghjunghjendu a visualizazione di a data, cum'è questu:
{{ __('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 }}
Pruvate di cambià a lingua in a pagina iniziale di localhost
, videremu chì e date sò avà localizzate, per esempiu:
In parechji paesi, a ghjente usa diversi formati per rapprisintà numeri, per esempiu:
Dunque, per riflette queste differenzi in a vostra app Laravel, pudete aduprà NumberFormatter in u modu seguenti:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Pudete ancu scrive u numeru in una lingua particulare è vede qualcosa cum'è "centu vinti trè mila, centu vinti trè punti unu dui":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Inoltre, NumberFormatter permette di localizà facilmente e valute, per esempiu:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Allora per fr
vi vede Euro, mentri per en_US
a valuta serà in dollari americani.
Ercole Palmeri
Sviluppà e cumpetenze di u mutore fine attraversu u culore prepara i zitelli per e cumpetenze più cumplesse cum'è a scrittura. Per culori…
U settore navale hè un veru putere ecunomicu glubale, chì hà navigatu versu un mercatu di 150 miliardi ...
Lunedì, u Financial Times hà annunziatu un accordu cù OpenAI. FT licenze u so ghjurnalismu mundiale ...
Milioni di persone paganu per i servizii di streaming, paghendu tariffi di abbonamentu mensili. Hè una opinione cumuna chì voi ...