Laravel se yon aplikasyon ki fèt pou lokal, pou adapte yo ak divès lang ak kilti. Lokalizasyon adapte aplikasyon entènasyonalize nan yon lang espesifik atravè tradiksyon.
localhost
. Si ou pa, ranplase localhost
ak pwòp non domèn ou oswa adrès IP ou (selon enstalasyon w).Nan Laravel, menm jan ak anpil lòt kad, nou ka estoke tradiksyon pou diferan lang nan dosye separe. Gen de fason yo òganize dosye tradiksyon Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Pou lang ki diferan selon teritwa, ou ta dwe nonmen yo directory/file
nan lang nan dapre ISO 15897. Pou egzanp, pou angle UK ou ta itilize en_GB
olye pou yo en-gb
. Nan atik sa a, nou pral konsantre sou dezyèm apwòch la, men menm bagay la tou ale pou premye a (eksepte pou jan kle tradiksyon yo nonmen ak rekipere).
Koulye a, ann ale nan la resources/views/welcome.blade.php
ranpli epi ranplase sa ki nan body
tag ak nou, tankou sa 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>
Nou pral kòmanse pa prepare mesaj akeyi lokalizasyon nou an, ki vrèman fasil nan Laravel. Tout sa ou dwe fè se ranplase tèks "Byenveni sou sit entènèt nou an" ak kòd sa a: {{ __('Welcome to our website') }}
. Sa a pral enstwi Laravel montre "Byenveni sou sit entènèt nou an" pa defaultdefinita epi chèche tradiksyon fisèl sa a si yo mete yon lòt lang ki pa angle (n ap jwenn sa pita). Angle pral tabli kòm lang defaultdefinite nan aplikasyon nou an, Se poutèt sa pa defaultdefinita nou pral tou senpleman montre tèks la "Byenveni sou sit entènèt nou an". Si lokal la diferan, nou pral eseye chèche tradiksyon ki koresponn lan ki pral kreye nan yon moman.
Men, ki jan Laravel fè konnen ki lang aktyèl la oswa ki lang ki disponib nan aplikasyon an? Li fè sa lè w gade konfigirasyon lokal la nan app a config/app.php
. Louvri fichye sa a epi chèche de kle etalaj asosyasyon sa yo:
/*
|--------------------------------------------------------------------------
| 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',
Deskripsyon yo montre pi wo a kle yo ta dwe pwòp tèt ou-eksplikasyon, men nan kout, kle a locale
gen chanm pre adefinan aplikasyon w lan (omwen, si pa gen okenn lòt lokal ki tabli nan kòd la). Ak la fallback_locale
li aktive nan ka nou mete yon lokal ki pa egziste nan aplikasyon nou an.
Pandan ke nou gen dosye sa a louvri, ann ajoute yon nouvo kle pou konvenyans nou lis tout lokal aplikasyon nou an pral sipòte. Nou pral itilize sa pita lè nou ajoute yon switcher lokal. Sepandan, sa a se yon travay opsyonèl kòm Laravel pa mande pou nou fè li.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Koulye a, aplikasyon nou an sipòte twa lang: angle, Italyen ak franse.
Kounye a ke nou te etabli tout lokal nou pral travay avèk yo, nou ka ale pi devan epi ale nan tradui mesaj pre akeyi nou an.definwit.
Ann kòmanse pa ajoute nouvo dosye lokalizasyon nan katab la resources/lang
. Premyèman, kreye yon dosye resources/lang/it.json
epi ajoute tradiksyon korespondan yo, jan sa a:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Apre sa, kreye yon dosye resources/lang/fr.json
:
{
"Byenveni sou sit entènèt nou an": "Byenveni sou sit nou an"
}
Kòm ou ka wè, nou toujou al gade nan pre mesaj ladefinite ke nou te ajoute nan dosye a welcome.blade.php
(ki te {{ __('Welcome to our website') }}
). Rezon ki fè nou pa bezwen kreye yon dosye en.json
Se paske Laravel deja konnen ki mesaj nou pase nan pre-settingdefifini ak fonksyon an __()
yo se pou pre lokal nou andefinito en.
Nan pwen sa a, Laravel pa konnen ki jan yo chanje lokalizasyon, kidonk pou kounye a nou fè tradiksyon yo dirèkteman nan chemen an. Edit chemen akeyidefifini jan yo montre anba a:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Nou kapab kounye a vizite sit entènèt nou an, espesifye nenpòt nan lang ki disponib kòm premye segman chemen an: pou egzanp, localhost/ru
o localhost/fr
. Ou ta dwe wè kontni an lokalize. Nan ka ou presize yon lokal ki pa sipòte oswa ou pa presize yon lokal ditou, Laravel pral itilize en
pa anviwònman defaultdefinita.
Chanje lokal la pou chak lyen sit ka pa sa ou vle, epi li ka pa sanble pwòp estetik. Se poutèt sa nou pral fè anviwònman lang nan yon switcher espesyal lang epi sèvi ak sesyon itilizatè a montre kontni an tradui. Se poutèt sa, kreye yon nouvo middleware anndan an app/Http/Middleware/Localization.php
dosye oswa pa kouri 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);
}
}
Middleware sa a pral enstwi Laravel pou l sèvi ak lokal itilizatè a chwazi si seleksyon sa a prezan nan sesyon an.
Depi nou bezwen operasyon sa a dwe fèt sou chak demann, nou bezwen tou ajoute li nan pile pre middleware ladefifini nan app/http/Kernel.php
pou web
gwoup 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 */
],
Apre sa, nou bezwen ajoute yon chemen pou chanje lokal la. Nou ap itilize yon chemen fèmen, men ou ka itilize egzakteman menm kòd la andedan kontwolè w la si ou renmen:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Epitou, pa bliye retire baskil lokal la te ajoute deja nan chemen pre akeyi nou andefinwit:
Route::get('/', function () {
return view('welcome');
});
Yon fwa sa a se fè, sèl fason pou itilizatè a chanje lang lan kounye a se pa antre localhost/language/{locale}
. La locale
seleksyon an pral estoke nan sesyon an epi yo pral redireksyon itilizatè yo nan kote yo soti (tcheke la Localization
middleware). Pou eseye li, ale nan localhost/language/ru
(osi lontan ke bonbon sesyon ou a prezan nan navigatè w la) epi w ap wè kontni an tradui. Ou ka deplase atravè sit entènèt la lib oswa eseye rafrechi paj la epi wè ke lang yo chwazi a konsève.
Koulye a, nou bezwen kreye yon bagay ke itilizatè a ka klike sou chanje lang nan olye pou yo manyèlman antre kòd lokal yo nan URL la. Pou fè sa, nou pral ajoute yon chèk lang trè senp. Se poutèt sa, kreye yon nouvo resources/views/partials/language_switcher.blade.php
dosye ak kòd sa a:
<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>
Mete switcher ki fèk kreye a nan gade "byenveni":
<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>
Louvri a app/Providers/AppServiceProvider.php
dosye epi ajoute kòd la pou pataje lè switcher lang nou an pral konpoze. Espesyalman, nou pral pataje lokal aktyèl la ki ka jwenn aksè kòm yon dosye {{ $current_locale }}
.
Nou pral sitou travay avèk resources/views/welcome.blade.php
, Se konsa, tout bagay dwe rive nan opinyon akeyi nou sof si yo espesifye otreman.
Pou egzanp, ann di bonjou itilizatè imajinè nou an (Amanda) olye pou yo jis montre yon mesaj jenerik:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Remake byen ke nou te itilize non an ak premye lèt la an miniskil, men anplasman an ak premye lèt la an majiskil. Nan fason sa a, Laravel ka ede w otomatikman kapitalize mo aktyèl la. Sa a pral rive si placeholder la kòmanse ak yon lèt majiskil, pou egzanp, :Name
pwodui "Caroline" oswa yon mo konplètman ekri majiskil, :NAME
, pwodui "CAROLINE".
Nou mete ajou dosye tradiksyon nou yo tou resources/lang/fr.json
e resources/lang/it.json
, kòm nan moman sa a nou pral sèlman wè vèsyon an angle nenpòt kote kòm kle tradiksyon yo pa matche ak tradiksyon yo.
franse:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Italyen:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Pou wè pluralizasyon an aksyon, ann ajoute yon nouvo paragraf tèks.
Pou fè plirizasyon, ou dwe itilize fonksyon an trans_choice
olye pou yo __()
, pa egzanp:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Kòm ou ka wè, fòm pliryèl yo separe pa yon |
.
Kounye a, e si nou bezwen plizyè fòm pliryèl?
Sa a posib tou:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Nan ka sa a, nou pèmèt nimewo 0
, 1
, ak soti nan 2
a 19
, epi finalman soti nan 20 ivè. Natirèlman, ou ka ajoute kòm anpil règ jan ou bezwen.
Se konsa, e si nou vle placeholders yo nan fòm pliryèl nou an?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Nou kapab tou itilize konte yo pase nan `trans_choice` si sa nesesè lè l sèvi avèk yon plas :count
espesyal:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Finalman, pa bliye mete ajou fichye tradiksyon ou yo ak nenpòt chanjman ou fè nan tradiksyon debaz la.
Italyen:
{
"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"
}
franse:
{
"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"
}
Pou jwenn dat, nou pral exploiter pouvwa a Kabòn , ki vini ak Laravel pa defaultdefinita. Tcheke la Dokiman kabòn ; ou ka fè anpil bagay enteresan. Pou egzanp, nou ka mete lokal nou an ak règ dat ak lè.
Pou egzanp senp nou an, nou pral montre dat aktyèl la lokalize pou lang yo chwazi a. Nan nou routes/web.php
, nou mete ajou chemen paj akeyi a epi nou pase mesaj dat lokalize a bay pa nou view
Byenveni:
<?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
]);
});
Ann mete ajou resources/views/welcome.blade.php
ajoute ekspozisyon dat, tankou sa 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 }}
Eseye chanje lang nan paj kay la nan localhost
, nou pral wè ke dat yo kounye a lokalize, pou egzanp:
Nan diferan peyi, moun sèvi ak diferan fòma pou reprezante nimewo, pa egzanp:
Se poutèt sa, pou reflete diferans sa yo nan aplikasyon Laravel ou a, ou ka itilize NumberFormatter nan fason sa a:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Ou kapab tou ekri nimewo a nan yon lang patikilye epi montre yon bagay tankou " sanventtwa mil sanvenntwa pwen youn de ":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Anplis de sa, NumberFormatter pèmèt ou byen fasil jwenn lajan, pou egzanp:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Se konsa pou fr
ou pral wè Ero, pandan y ap pou en_US
lajan an pral an dola ameriken.
Ercole Palmeri
Microsoft Excel se zouti referans pou analiz done, paske li ofri anpil karakteristik pou òganize seri done,...
Walliance, SIM ak platfòm nan mitan lidè yo nan Ewòp nan domèn nan Crowdfunding Imobilye depi 2017, anonse fini an ...
Filaman se yon kad devlopman "akselere" Laravel, ki bay plizyè konpozan plen pil. Li fèt pou senplifye pwosesis la nan...
«Mwen dwe retounen pou konplete evolisyon mwen an: mwen pral pwojte tèt mwen andedan òdinatè a epi mwen pral vin pi enèji. Yon fwa etabli nan...
Google DeepMind ap prezante yon vèsyon amelyore nan modèl entèlijans atifisyèl li yo. Nouvo modèl amelyore bay non sèlman...
Laravel, pi popilè pou sentaks elegant li yo ak karakteristik pwisan, tou bay yon fondasyon solid pou achitekti modilè. La…
Cisco ak Splunk ap ede kliyan akselere vwayaj yo nan Sant Operasyon Sekirite (SOC) nan tan kap vini an ak...
Ransomware te domine nouvèl la pou de dènye ane yo. Pifò moun konnen byen ke atak...