A Laravel egy helyi alkalmazás, amely alkalmazkodik a különböző nyelvekhez és kultúrákhoz. A lokalizáció egy adott nyelvre szabja a nemzetközi alkalmazásokat fordítás révén.
localhost
. Ha nem, cserélje ki localhost
saját domain nevével vagy IP-címével (a telepítéstől függően).A Laravelben, csakúgy, mint sok más keretrendszerben, külön fájlokban tárolhatjuk a különböző nyelvek fordításait. A Laravel fordítási fájlok rendezésének két módja van:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Azon nyelvek esetében, amelyek területenként különböznek, meg kell nevezni őket directory/file
Például a brit angolhoz használja en_GB
ahelyett en-gb
. Ebben a cikkben a második megközelítésre összpontosítunk, de ugyanez vonatkozik az elsőre is (kivéve a fordítási kulcsok elnevezését és lekérését).
Most pedig menjünk a resources/views/welcome.blade.php
fájlt, és cserélje ki a tartalmát body
jelölje meg a miénkkel, így:
<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>
Kezdjük azzal, hogy elkészítjük a lokalizációs üdvözlő üzenetünket, ami Laravelben nagyon egyszerű. Nem kell mást tennie, mint az „Üdvözöljük weboldalunkon” szöveget a következő kódra cserélni: {{ __('Welcome to our website') }}
. Ez arra utasítja a Laravelt, hogy alapértelmezés szerint jelenítse meg az „Üdvözöljük weboldalunkon” üzenetetdefinite, és keresse meg ennek a karakterláncnak a fordítását, ha az angoltól eltérő nyelv van beállítva (erre később térünk ki). Az angol lesz az alapértelmezett nyelvdefinish alkalmazásunkból, tehát alapértelmezés szerintdefiA végén egyszerűen megjelenítjük az „Üdvözöljük weboldalunkon” szöveget. Ha a nyelv eltér, megpróbáljuk megtalálni a megfelelő fordítást, és pillanatok alatt elkészül.
De honnan tudja a Laravel, hogy melyik az aktuális nyelv, vagy mely nyelvek érhetők el az alkalmazásban? Ezt az alkalmazás helyi konfigurációjának megtekintésével teszi config/app.php
. Nyissa meg ezt a fájlt, és keresse meg ezt a két asszociatív tömbkulcsot:
/*
|--------------------------------------------------------------------------
| 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 billentyűk felett látható leírásoknak magától értetődőnek kell lenniük, de röviden a kulcs locale
tartalmazza a helyi elődefinish (legalábbis, ha nincs más területi beállítás beállítva a kódban). És a fallback_locale
akkor aktiválódik, ha nem létező területi beállítást adunk meg az alkalmazásunkban.
Amíg ez a fájl nyitva van, adjunk hozzá egy új kulcsot a kényelmünk érdekében, amely felsorolja az alkalmazásunk által támogatott összes területet. Később ezt fogjuk használni, amikor helyi kapcsolót adunk hozzá. Ez azonban nem kötelező feladat, mivel Laravel nem követeli meg tőlünk.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Most az alkalmazásunk három nyelvet támogat: angol, olasz és francia.
Most, hogy létrehoztuk az összes területet, amellyel dolgozni fogunk, folytathatjuk az előzetes üdvözlő üzenetünk fordítását.defivége.
Kezdjük azzal, hogy új lokalizációs fájlokat adunk a mappához resources/lang
. Először hozzon létre egy fájlt resources/lang/it.json
és adja hozzá a megfelelő fordításokat az alábbiak szerint:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Ezután hozzon létre egy fájlt resources/lang/fr.json
:
{
"Üdvözöljük weboldalunkon": “Üdvözöljük oldalunkon”
}
Amint látja, mindig az előzetes üzenetre hivatkozunkdefinito, amelyet hozzáadtunk a fájlhoz welcome.blade.php
(amely volt {{ __('Welcome to our website') }}
). Az ok, amiért nem kell fájlt létrehoznunk en.json
Ez azért van, mert Laravel már tudja, hogy mely üzeneteket továbbítjuk az előre beállítássaldefibefejezte a funkciót __()
azok a mi helyi elődefinito en.
Jelenleg Laravel nem tudja, hogyan változtassa meg a területi beállításokat, ezért most végezzük el a fordításokat közvetlenül az útvonalon belül. Módosítsa az üdvözlő útvonalat előredefiaz alábbiak szerint készült:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Most már meglátogathatjuk webhelyünket, és az elérhető nyelvek bármelyikét megadjuk első útvonalszegmensként: pl. localhost/ru
o localhost/fr
. Látnia kell a lokalizált tartalmat. Ha nem támogatott területi beállítást ad meg, vagy egyáltalán nem ad meg, a Laravel ezt fogja használni en
alapértelmezés szerintdefinita.
Előfordulhat, hogy az egyes webhelyhivatkozások nyelv- és országkódjának váltása nem az, amit szeretne, és esztétikailag nem is néz ki olyan tisztán. Ezért a nyelv beállítását egy speciális nyelvváltón keresztül végezzük el, és a felhasználói munkamenet segítségével jelenítjük meg a lefordított tartalmat. Ezért hozzon létre egy új köztes szoftvert a app/Http/Middleware/Localization.php
fájl vagy futtatással 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);
}
}
Ez a köztes szoftver arra utasítja a Laravelt, hogy használja a felhasználó által kiválasztott területi beállítást, ha ez a kijelölés jelen van a munkamenetben.
Mivel ezt minden kérésnél meg kell tennünk, hozzá kell adnunk a köztes szoftver előtti veremhez isdefibefejezte app/http/Kernel.php
az web
köztes szoftver csoport:
* 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 */
],
Ezután hozzá kell adnunk egy elérési utat a területi beállítás megváltoztatásához. Lezárási útvonalat használunk, de ha szeretné, pontosan ugyanazt a kódot használhatja a vezérlőn belül:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Ezenkívül ne felejtse el eltávolítani a területi beállítás kapcsolót, amelyet korábban hozzáadtunk az előzetes üdvözlő útvonalhozdefivége:
Route::get('/', function () {
return view('welcome');
});
Ha ez megtörtént, a felhasználó csak a beírással módosíthatja az aktuálisan beállított nyelvet localhost/language/{locale}
. A locale
A kijelölés a munkameneten belül tárolódik, és átirányítja a felhasználókat oda, ahonnan jöttek (ellenőrizze a Localization
köztes szoftver). Ha kipróbálni szeretné, menjen a címre localhost/language/ru
(amíg a munkamenet cookie jelen van a böngészőjében), és látni fogja a lefordított tartalmat. Szabadon mozoghat a webhelyen, vagy megpróbálhatja frissíteni az oldalt, és megnézheti, hogy a kiválasztott nyelv megmarad.
Most létre kell hoznunk valamit, amelyre kattintva a felhasználó megváltoztathatja a nyelvet ahelyett, hogy manuálisan írná be a helyi kódokat az URL-be. Ehhez egy nagyon egyszerű nyelvellenőrzőt adunk hozzá. Ezért hozzon létre egy újat resources/views/partials/language_switcher.blade.php
fájl a következő kóddal:
<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>
Szerelje be az újonnan létrehozott kapcsolót az "üdvözlő" nézetbe:
<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>
Nyissa meg a app/Providers/AppServiceProvider.php
fájlt, és adja hozzá a kódot a megosztáshoz, amikor a nyelvváltónk elkészül. Pontosabban, megosztjuk az aktuális területi beállítást, amely fájlként érhető el {{ $current_locale }}
.
Főleg együtt fogunk dolgozni resources/views/welcome.blade.php
, ezért mindennek a mi üdvözlő nézetünkben kell történnie, hacsak nincs másképp megadva.
Például köszöntsük képzeletbeli felhasználónkat (Amandát) ahelyett, hogy csak egy általános üzenetet jelenítenénk meg:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Vegye figyelembe, hogy a nevet az első betűvel kisbetűvel, de a helyőrzőt az első betűvel nagybetűvel használtuk. Ily módon a Laravel segíthet abban, hogy az aktuális szót automatikusan nagybetűvel írhassa. Ez akkor történik meg, ha a helyőrző nagybetűvel kezdődik, például :Name
„Caroline” vagy teljesen nagybetűs szót állít elő, :NAME
, „CAROLINE”-t gyárt.
Frissítjük fordítási fájljainkat is resources/lang/fr.json
e resources/lang/it.json
, mivel jelenleg csak az angol verziót fogjuk látni bárhol, mivel a fordítási kulcsok nem egyeznek a fordításokkal.
Francia:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Olasz:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
A pluralizáció működés közbeni megjelenítéséhez adjunk hozzá egy új bekezdést a szöveghez.
A többes szám végrehajtásához a függvényt kell használni trans_choice
ahelyett __()
, például:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Mint látható, a többes számú alakokat a választja el |
.
Mi van akkor, ha több többes számú alakra van szükségünk?
Ez is lehetséges:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Ebben az esetben engedélyezzük a számokat 0
, 1
és innen 2
a 19
, végül 20-tól. Természetesen annyi szabályt adhat hozzá, amennyit csak akar.
Tehát mi van, ha többes számban szeretnénk a helyőrzőket?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Szükség esetén helyőrzővel is használhatjuk a `trans_choice`-ban átadott számot :count
különleges:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Végül ne felejtse el frissíteni a fordítási fájljait az alap fordításon végrehajtott változtatásokkal.
Olasz:
{
"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"
}
Francia:
{
"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"
}
A dátumok meghatározásához kihasználjuk az erejét Szén , amely alapértelmezés szerint a Laravelhez tartozikdefinita. Nézze meg a Carbon dokumentáció ; sok érdekes dolgot csinálhatsz. Például beállíthatjuk a területünket dátum és idő szabályokkal.
Egyszerű példánkban megmutatjuk az aktuális dátumot a kiválasztott nyelvre lokalizálva. Miénkben routes/web.php
, frissítjük az üdvözlő oldal elérési útját, és továbbítjuk a honosított dátum üzenetet a miénknek view
Üdvözöljük:
<?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
]);
});
Frissítsünk resources/views/welcome.blade.php
dátum megjelenítés hozzáadása, például:
{{ __('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 }}
Megpróbálja megváltoztatni a nyelvet a kezdőlapon localhost
, látni fogjuk, hogy a dátumok most lokalizáltak, például:
A különböző országokban az emberek különböző formátumokat használnak a számok megjelenítésére, például:
Ezért, hogy tükrözze ezeket a különbségeket a Laravel alkalmazásban, használhatja Számformázó a következő módon:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Leírhatja a számot egy adott nyelven is, és valami ilyesmit jeleníthet meg: „százhuszonháromezer-százhuszonhárom pont egy kettő”:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Ezenkívül a NumberFormatter lehetővé teszi a pénznemek könnyű megtalálását, például:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Így fr
eurót fog látni, míg a en_US
a pénznem amerikai dollár lesz.
Ercole Palmeri
A finom motoros készségek színezéssel történő fejlesztése felkészíti a gyerekeket olyan összetettebb készségekre, mint az írás. Kiszínezni…
A haditengerészeti szektor igazi világgazdasági hatalom, amely egy 150 milliárdos piac felé navigált...
Múlt hétfőn a Financial Times bejelentette, hogy megállapodást köt az OpenAI-val. Az FT engedélyezi világszínvonalú újságírását…
Emberek milliói fizetnek a streaming szolgáltatásokért, havi előfizetési díjat fizetve. Általános vélemény, hogy Ön…