Laravel hija applikazzjoni mfassla biex tkun lokali, biex tadatta għal diversi lingwi u kulturi. Il-lokalizzazzjoni tfassal applikazzjonijiet internazzjonalizzati għal lingwa speċifika permezz tat-traduzzjoni.
localhost
. Jekk le, ibdel localhost
bl-isem tad-dominju jew l-indirizz IP tiegħek stess (skond l-installazzjoni tiegħek).F'Laravel, bħal f'ħafna oqfsa oħra, nistgħu naħżnu traduzzjonijiet għal lingwi differenti f'fajls separati. Hemm żewġ modi kif torganizza l-fajls tat-traduzzjoni Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Għal lingwi li jvarjaw skont it-territorju, għandek issemmihom directory/file
tal-lingwa skont ISO 15897. Pereżempju, għall-Ingliż tar-Renju Unit tuża en_GB
minflok en-gb
. F'dan l-artikolu, aħna ser niffukaw fuq it-tieni approċċ, iżda l-istess jgħodd għall-ewwel (ħlief għal kif iċ-ċwievet tat-traduzzjoni huma msemmija u rkuprati).
Issa, ejja mmorru għall- resources/views/welcome.blade.php
fajl u ibdel il-kontenut tal- body
tikketta ma tagħna, bħal hekk:
<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>
Nibdew billi nippreparaw il-messaġġ ta' merħba tal-lokalizzazzjoni tagħna, li huwa tassew faċli f'Laravel. Kull ma trid tagħmel hu li tissostitwixxi t-test "Merħba fil-websajt tagħna" bil-kodiċi li ġej: {{ __('Welcome to our website') }}
. Dan jagħti struzzjonijiet lil Laravel biex juri "Merħba fil-websajt tagħna" b'mod awtomatikudefinite u fittex traduzzjonijiet ta' din is-sekwenza jekk tkun stabbilita lingwa oħra għajr l-Ingliż (na naslu għal dan aktar tard). L-Ingliż se jkun issettjat bħala l-lingwa defaultdefinish tal-app tagħna, għalhekk b'issettjar awtomatikudefiFl-aħħar aħna sempliċement nuru t-test "Merħba fil-websajt tagħna". Jekk il-lokal huwa differenti, aħna nippruvaw insibu t-traduzzjoni li taqbel u din tinħoloq f'waqtu.
Imma Laravel kif jaf liema hija l-lingwa attwali jew liema lingwi huma disponibbli fl-applikazzjoni? Jagħmel dan billi tħares lejn il-konfigurazzjoni lokali fl-app config/app.php
. Iftaħ dan il-fajl u fittex dawn iż-żewġ ċwievet ta' firxa assoċjattiva:
/*
|--------------------------------------------------------------------------
| 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',
Id-deskrizzjonijiet murija fuq iċ-ċwievet għandhom jispjegaw lilhom infushom, iżda fil-qosor, iċ-ċavetta locale
fih il-pre lokalidefil-applikazzjoni tiegħek (mill-inqas, jekk l-ebda lokalizzazzjoni oħra ma tkun ġiet stabbilita fil-kodiċi). U il fallback_locale
huwa attivat f'każ li nissettjaw lokalità ineżistenti fl-applikazzjoni tagħna.
Filwaqt li għandna dan il-fajl miftuħ, ejja nżidu ċavetta ġdida għall-konvenjenza tagħna li telenka l-lokalijiet kollha li l-applikazzjoni tagħna se tappoġġja. Se nużaw dan aktar tard meta nżidu switcher lokali. Madankollu, dan huwa kompitu fakultattiv peress li Laravel ma jeħtieġx li nagħmluh.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Issa l-applikazzjoni tagħna tappoġġja tliet lingwi: Ingliż, Taljan u Franċiż.
Issa li waqqafna l-lokalitajiet kollha li se nkunu qed naħdmu magħhom, nistgħu nimxu 'l quddiem u nkomplu nittraduċu l-messaġġ ta' qabel il-merħba tagħnadefilejla.
Nibdew billi nżidu fajls ta' lokalizzazzjoni ġodda mal-folder resources/lang
. L-ewwel, oħloq fajl resources/lang/it.json
u żid it-traduzzjonijiet korrispondenti, kif ġej:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Sussegwentement, oħloq fajl resources/lang/fr.json
:
{
"Merħba fil-websajt tagħna": "Merħba fis-sit tagħna"
}
Kif tistgħu taraw, aħna dejjem nirreferu għall-messaġġ minn qabeldefinito li żidna fil-fajl welcome.blade.php
(li kien {{ __('Welcome to our website') }}
). Ir-raġuni għaliex m'għandniex għalfejn noħolqu fajl en.json
huwa għaliex Laravel diġà jaf liema messaġġi ngħaddu minn pre settingdefilest fil-funzjoni __()
huma għal pre lokali tagħnadefinito en.
F'dan il-punt, Laravel ma jafx kif ibiddel il-lokal, għalhekk għalissa, ejja nagħmlu t-traduzzjonijiet direttament ġewwa l-mogħdija. Immodifika l-mogħdija ta 'merħba minn qabeldefilest kif muri hawn taħt:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Issa nistgħu nżuru l-websajt tagħna, billi nispeċifikaw kwalunkwe mil-lingwi disponibbli bħala l-ewwel segment tal-passaġġ: pereżempju, localhost/ru
o localhost/fr
. Għandek tara l-kontenut lokalizzat. Fil-każ li tispeċifika lokalità mhux appoġġjata jew ma tispeċifikax lokalità xejn, Laravel juża en
awtomatikamentdefinita.
Li taqleb il-lokal għal kull link tas-sit jista 'ma jkunx dak li trid, u jista' ma jidhirx daqshekk nadif estetikament. Huwa għalhekk li se nagħmlu l-issettjar tal-lingwa permezz ta 'swiċċ tal-lingwa speċjali u nużaw is-sessjoni tal-utent biex nuru l-kontenut tradott. Għalhekk, toħloq middleware ġdid ġewwa l- app/Http/Middleware/Localization.php
fajl jew billi taħdem 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);
}
}
Dan il-middleware se jagħti struzzjonijiet lil Laravel biex juża l-lokal magħżul mill-utent jekk din l-għażla tkun preżenti fis-sessjoni.
Peress li għandna bżonn li dan isir fuq kull talba, irridu wkoll inżiduha mal-munzell ta 'qabel il-middlewaredefilest fi app/http/Kernel.php
għal web
grupp 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 */
],
Sussegwentement, irridu nżidu mogħdija biex nibdlu l-lokal. Qed nużaw mogħdija tal-għeluq, imma tista' tuża eżattament l-istess kodiċi ġewwa l-kontrollur tiegħek jekk tixtieq:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Barra minn hekk, tinsiex tneħħi l-toggle tal-lokal miżjud preċedentement fil-mogħdija ta' qabel il-merħba tagħnadefilejla:
Route::get('/', function () {
return view('welcome');
});
Ladarba dan isir, l-uniku mod biex l-utent ibiddel il-lingwa stabbilita bħalissa huwa billi jidħol localhost/language/{locale}
. Il locale
l-għażla se tinħażen fis-sessjoni u se tindirizza mill-ġdid lill-utenti lejn fejn ġew (iċċekkja l- Localization
middleware). Biex tipprovaha, mur fuq localhost/language/ru
(sakemm il-cookie tas-sessjoni tiegħek tkun preżenti fil-browser tiegħek) u tara l-kontenut tradott. Tista 'timxi madwar il-websajt liberament jew tipprova taġġorna l-paġna u tara li l-lingwa magħżula tiġi ppreservata.
Issa rridu noħolqu xi ħaġa li l-utent jista 'jikklikkja biex ibiddel il-lingwa minflok iddaħħal manwalment kodiċijiet lokali fil-URL. Biex tagħmel dan, aħna ser inżidu kontrollur tal-lingwa sempliċi ħafna. Għalhekk, toħloq ġdid resources/views/partials/language_switcher.blade.php
fajl bil-kodiċi li ġej:
<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>
Inkludi l-iswiċċ maħluq ġdid fil-veduta "merħba":
<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>
Iftaħ il- app/Providers/AppServiceProvider.php
fajl u żid il-kodiċi biex taqsam meta se jkun magħmul is-swiċċ tal-lingwa tagħna. Speċifikament, aħna se naqsmu l-lokal attwali li jista 'jiġi aċċessat bħala fajl {{ $current_locale }}
.
Aħna se naħdmu prinċipalment magħhom resources/views/welcome.blade.php
, għalhekk kollox għandu jiġri fil-fehma tagħna merħba sakemm ma jkunx speċifikat mod ieħor.
Pereżempju, ejja ngħidu bonjour lill-utent immaġinarju tagħna (Amanda) minflok ma nuru messaġġ ġeneriku:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Innota li użajna l-isem bl-ewwel ittra b'ittri żgħar, iżda l-placeholder bl-ewwel ittra f'ittri kbar. Dan il-mod, Laravel jista 'jgħinek awtomatikament tikkapitalizza l-kelma attwali. Dan jiġri jekk il-placeholder jibda b'ittra kbira, pereżempju, :Name
jipproduċi "Caroline" jew kelma b'kapitalizzazzjoni sħiħa, :NAME
, tipproduċi “CAROLINE”.
Aħna naġġornaw ukoll il-fajls tat-traduzzjoni tagħna resources/lang/fr.json
e resources/lang/it.json
, peress li bħalissa se naraw biss il-verżjoni bl-Ingliż kullimkien peress li ċ-ċwievet tat-traduzzjoni ma jaqblux mat-traduzzjonijiet.
Franċiż:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Taljan:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Biex tara l-pluralizzazzjoni fl-azzjoni, ejja nżidu paragrafu ġdid tat-test.
Biex twettaq pluralizzazzjoni, trid tuża l-funzjoni trans_choice
minflok __()
, pereżempju:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Kif tistgħu taraw, il-forom tal-plural huma separati b’a |
.
Issa, x'jiġri jekk neħtieġu forom multipli plurali?
Dan huwa possibbli wkoll:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
F'dan il-każ, inħallu n-numri 0
, 1
, u minn 2
a 19
, u finalment minn 20 'il quddiem. Naturalment, tista 'żżid regoli kemm għandek bżonn.
Allura x'jiġri jekk irridu l-placeholders fil-forom plurali tagħna?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Nistgħu wkoll nużaw l-għadd mgħoddi f'`trans_choice` jekk meħtieġ billi tuża placeholder :count
speċjali:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Fl-aħħarnett, tinsiex taġġorna l-fajls tat-traduzzjoni tiegħek bi kwalunkwe tibdil li għamilt fit-traduzzjoni bażi.
Taljan:
{
"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"
}
Franċiż:
{
"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"
}
Biex issib dati, aħna se jisfruttaw il-qawwa ta Karbonju , li jiġi ma 'Laravel awtomatikamentdefinita. Iċċekkja l- Dokumentazzjoni tal-karbonju ; tista' tagħmel ħafna affarijiet interessanti. Pereżempju, nistgħu nissettjaw il-lokal tagħna bir-regoli tad-data u l-ħin.
Għall-eżempju sempliċi tagħna, aħna ser nuru d-data kurrenti lokalizzata għall-lingwa magħżula. Fil tagħna routes/web.php
, aħna naġġornaw il-mogħdija tal-paġna ta’ merħba u ngħaddu l-messaġġ tad-data lokalizzat lil tagħna view
merħba:
<?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
]);
});
Ejja naġġornaw resources/views/welcome.blade.php
iż-żieda tad-data, bħal hekk:
{{ __('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 }}
Jipprova tbiddel il-lingwa fuq il-paġna ewlenija ta' localhost
, se naraw li d-dati issa huma lokalizzati, pereżempju:
F'pajjiżi differenti, in-nies jużaw formati differenti biex jirrappreżentaw in-numri, pereżempju:
Għalhekk, biex tirrifletti dawn id-differenzi fl-app Laravel tiegħek, tista 'tuża NumberFormatter bil-mod li ġej:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Tista’ wkoll tikteb in-numru f’lingwa partikolari u turi xi ħaġa bħal “mija tlieta u għoxrin elf mija tlieta u għoxrin punt wieħed tnejn”:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Barra minn hekk, NumberFormatter jippermettilek issib muniti faċilment, pereżempju:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Allura għal fr
tara Ewro, filwaqt li g[al en_US
il-munita se tkun f'dollari Amerikani.
Ercole Palmeri
Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...
Il-manutenzjoni ta’ tbassir qed tirrivoluzzjona s-settur taż-żejt u l-gass, b’approċċ innovattiv u proattiv għall-ġestjoni tal-impjant...
Is-CMA tar-Renju Unit ħarġet twissija dwar l-imġieba ta 'Big Tech fis-suq tal-intelliġenza artifiċjali. Hemm…
Id-Digriet "Case Green", ifformulat mill-Unjoni Ewropea biex itejjeb l-effiċjenza enerġetika tal-bini, ikkonkluda l-proċess leġiżlattiv tiegħu bi...