Laravel je aplikace navržená tak, aby byla místní, aby se přizpůsobila různým jazykům a kulturám. Lokalizace přizpůsobuje internacionalizované aplikace konkrétnímu jazyku prostřednictvím překladu.
localhost
. Pokud ne, vyměňte localhost
s vaším vlastním názvem domény nebo IP adresou (v závislosti na vaší instalaci).V Laravelu, stejně jako v mnoha jiných frameworkech, můžeme ukládat překlady pro různé jazyky do samostatných souborů. Překladové soubory Laravel lze uspořádat dvěma způsoby:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;U jazyků, které se liší podle území, byste je měli pojmenovat directory/file
jazyka podle ISO 15897. Například pro britskou angličtinu byste použili en_GB
namísto en-gb
. V tomto článku se zaměříme na druhý přístup, ale totéž platí pro první (kromě toho, jak jsou pojmenovány a načteny překladové klíče).
Nyní pojďme k resources/views/welcome.blade.php
a nahraďte obsah souboru body
označte naším, takto:
<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>
Začneme přípravou naší uvítací zprávy o lokalizaci, což je v Laravelu opravdu snadné. Jediné, co musíte udělat, je nahradit text „Vítejte na našem webu“ následujícím kódem: {{ __('Welcome to our website') }}
. Tím dá Laravel pokyn, aby ve výchozím nastavení zobrazoval „Vítejte na našem webu“.definite a vyhledejte překlady tohoto řetězce, pokud je nastaven jiný jazyk než angličtina (k tomu se dostaneme později). Jako výchozí jazyk bude nastavena angličtinadefinish naší aplikace, takže ve výchozím nastavenídefiNa konci jednoduše zobrazíme text „Vítejte na našem webu“. Pokud je národní prostředí jiné, pokusíme se najít odpovídající překlad a ten se za chvíli vytvoří.
Jak ale Laravel ví, který jazyk je aktuální nebo které jazyky jsou v aplikaci dostupné? Dělá to tak, že se podíváte na místní konfiguraci v aplikaci config/app.php
. Otevřete tento soubor a vyhledejte tyto dva klíče asociativního pole:
/*
|--------------------------------------------------------------------------
| 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',
Popisy zobrazené nad klávesami by měly být samozřejmé, ale zkrátka klíčové locale
obsahuje místní predefinish vaší aplikace (alespoň pokud v kódu nebylo nastaveno jiné národní prostředí). A fallback_locale
aktivuje se v případě, že v naší aplikaci nastavíme neexistující národní prostředí.
Zatímco máme tento soubor otevřený, přidejte nový klíč pro naše pohodlí se seznamem všech lokalit, které bude naše aplikace podporovat. To použijeme později při přidávání místního přepínače. Toto je však volitelný úkol, protože Laravel nevyžaduje, abychom to dělali.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Nyní naše aplikace podporuje tři jazyky: angličtinu, italštinu a francouzštinu.
Nyní, když jsme stanovili všechna národní prostředí, se kterými budeme pracovat, můžeme pokračovat a přejít k překladu naší předběžné uvítací zprávydefinoc.
Začněme přidáním nových lokalizačních souborů do složky resources/lang
. Nejprve vytvořte soubor resources/lang/it.json
a přidejte odpovídající překlady takto:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Dále vytvořte soubor resources/lang/fr.json
:
{
"Vítejte na našem webu": “Vítejte na našich stránkách”
}
Jak vidíte, vždy odkazujeme na předběžnou zprávudefinito, které jsme přidali do souboru welcome.blade.php
(který byl {{ __('Welcome to our website') }}
). Důvod, proč nemusíme vytvářet soubor en.json
je to proto, že Laravel již ví, které zprávy předáváme přednastavenímdefiskončil ve funkci __()
jsou pro naše místní predefinito en.
V tuto chvíli Laravel neví, jak změnit národní prostředí, takže prozatím udělejme překlady přímo uvnitř cesty. Upravte uvítací cestu predefihotovo, jak je znázorněno níže:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Nyní můžeme navštívit naše webové stránky, přičemž jako první segment cesty uvedeme kterýkoli z dostupných jazyků: např. localhost/ru
o localhost/fr
. Měli byste vidět lokalizovaný obsah. V případě, že zadáte nepodporované národní prostředí nebo neuvedete národní prostředí vůbec, použije Laravel en
ve výchozím stavudefinita.
Přepínání národního prostředí pro každý odkaz na web nemusí být to, co chcete, a nemusí to vypadat tak čistě esteticky. Proto provedeme nastavení jazyka pomocí speciálního přepínače jazyků a použijeme uživatelskou relaci k zobrazení přeloženého obsahu. Vytvořte proto nový middleware uvnitř app/Http/Middleware/Localization.php
souboru nebo spuštěním 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);
}
}
Tento middleware dá Laravelu pokyn k použití uživatelem vybraného národního prostředí, pokud je tento výběr v relaci přítomen.
Protože to potřebujeme udělat u každého požadavku, musíme to také přidat do před middlewarového zásobníkudefiskončil v app/http/Kernel.php
pro web
skupina middlewaru:
* 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 */
],
Dále musíme přidat cestu ke změně národního prostředí. Používáme uzavírací cestu, ale pokud chcete, můžete použít přesně stejný kód uvnitř ovladače:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Nezapomeňte také odstranit přepínač národního prostředí, který byl dříve přidán do naší předběžné uvítací cestydefinoc:
Route::get('/', function () {
return view('welcome');
});
Jakmile to provedete, jediným způsobem, jak může uživatel změnit aktuálně nastavený jazyk, je zadání localhost/language/{locale}
. The locale
výběr bude uložen v rámci relace a přesměruje uživatele tam, odkud přišli (zaškrtněte políčko Localization
middleware). Chcete-li to vyzkoušet, přejděte na localhost/language/ru
(pokud je váš soubor cookie relace přítomen ve vašem prohlížeči) a uvidíte přeložený obsah. Po webu se můžete libovolně pohybovat nebo zkusit stránku obnovit a uvidíte, že zvolený jazyk zůstane zachován.
Nyní musíme vytvořit něco, na co může uživatel kliknout a změnit jazyk namísto ručního zadávání místních kódů do adresy URL. K tomu přidáme velmi jednoduchou kontrolu jazyka. Proto vytvořte nový resources/views/partials/language_switcher.blade.php
soubor s následujícím kódem:
<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>
Zahrnout nově vytvořený přepínač do „uvítacího“ zobrazení:
<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>
Otevři app/Providers/AppServiceProvider.php
soubor a přidejte kód, který chcete sdílet, až bude vytvořen náš přepínač jazyků. Konkrétně budeme sdílet aktuální národní prostředí, ke kterému lze přistupovat jako k souboru {{ $current_locale }}
.
Budeme hlavně pracovat s resources/views/welcome.blade.php
, takže vše se musí stát v našem uvítacím pohledu, pokud není uvedeno jinak.
Řekněme například ahoj naší imaginární uživatelce (Amandě) místo pouhého zobrazení obecné zprávy:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Všimněte si, že jsme použili název s prvním písmenem malým písmem, ale zástupný znak s prvním písmenem velkým. Tímto způsobem vám Laravel může pomoci automaticky psát velkými písmeny skutečné slovo. K tomu dojde, pokud zástupný symbol začíná velkým písmenem, např. :Name
vytvoří „Caroline“ nebo slovo s velkými písmeny, :NAME
, vyrábí „CAROLINE“.
Aktualizujeme také naše překladové soubory resources/lang/fr.json
e resources/lang/it.json
, protože v tuto chvíli všude uvidíme pouze anglickou verzi, protože překladové klíče neodpovídají překladům.
Francouzština:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Italština:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Chcete-li vidět pluralizaci v akci, přidejte nový odstavec textu.
Chcete-li provést pluralizaci, musíte použít funkci trans_choice
namísto __()
, například:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Jak vidíte, tvary v množném čísle jsou odděleny a |
.
Co když potřebujeme více tvarů množného čísla?
To je také možné:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
V tomto případě povolujeme čísla 0
, 1
a od 2
a 19
a nakonec od 20. Samozřejmě můžete přidat tolik pravidel, kolik potřebujete.
Co když tedy chceme zástupné symboly v našem množném čísle?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
V případě potřeby můžeme také použít počet předaný v `trans_choice` pomocí zástupného symbolu :count
speciální:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Nakonec nezapomeňte aktualizovat své překladové soubory se všemi změnami, které jste provedli v základním překladu.
Italština:
{
"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"
}
Francouzština:
{
"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"
}
K vyhledání termínů využijeme sílu Uhlík , který je standardně dodáván s Laravelemdefinita. Podívejte se na Karbonová dokumentace ; můžete dělat spoustu zajímavých věcí. Můžeme například nastavit naše národní prostředí pomocí pravidel pro datum a čas.
Pro náš jednoduchý příklad ukážeme aktuální datum lokalizované pro vybraný jazyk. V našem routes/web.php
, aktualizujeme cestu k uvítací stránce a předáme lokalizovanou datovou zprávu naší view
Vítejte:
<?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
]);
});
Pojďme aktualizovat resources/views/welcome.blade.php
přidání zobrazení data, například:
{{ __('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 }}
Pokus o změnu jazyka na domovské stránce localhost
, uvidíme, že data jsou nyní lokalizována, například:
V různých zemích lidé používají k vyjádření čísel různé formáty, například:
Proto, abyste tyto rozdíly odráželi ve vaší aplikaci Laravel, můžete použít NumberFormatter následujícím způsobem:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Můžete také napsat číslo v konkrétním jazyce a zobrazit něco jako „sto dvacet tři tisíce sto dvacet tři čárka jedna dva“:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
NumberFormatter vám navíc umožňuje snadno najít měny, například:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Tak pro fr
uvidíte eura, zatímco pro en_US
měna bude v amerických dolarech.
Ercole Palmeri
Rozvíjení jemné motoriky prostřednictvím vybarvování připravuje děti na složitější dovednosti, jako je psaní. Barvit…
Námořní sektor je skutečnou globální ekonomickou velmocí, která se dostala na 150miliardový trh...
Minulé pondělí Financial Times oznámily dohodu s OpenAI. FT licencuje svou prvotřídní žurnalistiku…
Miliony lidí platí za streamovací služby a platí měsíční předplatné. Je obecný názor, že jste…