Laravel - гэта лакальнае прыкладанне, якое адаптуецца да розных моў і культур. Лакалізацыя адаптуе інтэрнацыяналізаваныя прыкладанні да пэўнай мовы праз пераклад.
localhost
. Калі няма, заменіце localhost
з вашым уласным даменным імем або IP-адрасам (у залежнасці ад вашай устаноўкі).У Laravel, як і ў многіх іншых фрэймворках, мы можам захоўваць пераклады для розных моў у асобных файлах. Ёсць два спосабы арганізаваць файлы перакладу Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Для моў, якія адрозніваюцца па тэрыторыі, вы павінны іх назваць directory/file
мовы ў адпаведнасці з ISO 15897. Напрыклад, для брытанскай англійскай мовы вы б выкарысталі en_GB
замест en-gb
. У гэтым артыкуле мы спынімся на другім падыходзе, але тое ж самае тычыцца і першага (за выключэннем таго, як ключы перакладу называюцца і здабываюцца).
Зараз пяройдзем да resources/views/welcome.blade.php
файл і замяніць змесціва body
пазначце наш, напрыклад:
<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>
Мы пачнем з падрыхтоўкі нашага прывітальнага паведамлення аб лакалізацыі, што вельмі проста ў Laravel. Усё, што вам трэба зрабіць, гэта замяніць тэкст «Вітаем на нашым сайце» наступным кодам: {{ __('Welcome to our website') }}
. Гэта загадае Laravel паказаць «Сардэчна запрашаем на наш сайт» па змаўчанніdefinite і шукайце пераклады гэтага радка, калі ўсталявана іншая мова, акрамя англійскай (мы вернемся да гэтага пазней). У якасці мовы па змаўчанні будзе ўстаноўлена англійскаяdefiканец нашага прыкладання, таму па змаўчанніdefiУ канцы мы проста адлюструем тэкст «Сардэчна запрашаем на наш сайт». Калі мова адрозніваецца, мы паспрабуем знайсці адпаведны пераклад, і ён будзе створаны ў бліжэйшы час.
Але як Laravel ведае, якая мова бягучая або якія мовы даступныя ў дадатку? Ён робіць гэта, праглядаючы лакальную канфігурацыю ў дадатку config/app.php
. Адкрыйце гэты файл і знайдзіце гэтыя два ключы асацыятыўнага масіва:
/*
|--------------------------------------------------------------------------
| 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',
Апісанні, паказаныя над ключамі, павінны быць зразумелымі, але карацей кажучы, ключ locale
змяшчае мясцовы прэdefiканца вашага прыкладання (прынамсі, калі ў кодзе не была ўстаноўлена іншая мова). І fallback_locale
ён актывуецца, калі мы ўсталёўваем неіснуючую лакаль у нашым дадатку.
Пакуль у нас адкрыты гэты файл, давайце для зручнасці дададзім новы ключ са спісам усіх моў, якія будзе падтрымліваць наша дадатак. Мы будзем выкарыстоўваць гэта пазней пры даданні лакальнага камутатара. Аднак гэта неабавязковая задача, бо Laravel не патрабуе ад нас яе выканання.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Зараз наша дадатак падтрымлівае тры мовы: англійскую, італьянскую і французскую.
Цяпер, калі мы ўсталявалі ўсе лакалі, з якімі будзем працаваць, мы можам перайсці да перакладу нашага папярэдняга прывітальнага паведамленняdefiканец.
Давайце пачнем з дадання новых файлаў лакалізацыі ў тэчку resources/lang
. Спачатку стварыце файл resources/lang/it.json
і дадайце адпаведныя пераклады наступным чынам:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Далей стварыце файл resources/lang/fr.json
:
{
«Вітаем на нашым сайце»: «Вітаем на нашым сайце»
}
Як бачыце, мы заўсёды спасылаемся на папярэдняе паведамленнеdefinito, які мы дадалі ў файл welcome.blade.php
(які быў {{ __('Welcome to our website') }}
). Прычына, па якой нам не трэба ствараць файл en.json
гэта таму, што Laravel ужо ведае, якія паведамленні мы перадаём, па папярэдніх наладахdefiскончыўся на функцыю __()
яны для нашых мясцовых прэdefinito en.
На дадзены момант Laravel не ведае, як змяніць лакалі, так што пакуль давайце зробім пераклад непасрэдна ўнутры шляху. Змяніць шлях прывітання папярэднеdefiзавершана, як паказана ніжэй:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Цяпер мы можам наведаць наш сайт, указаўшы любую з даступных моў у якасці першага сегмента шляху: напрыклад, localhost/ru
o localhost/fr
. Вы павінны ўбачыць лакалізаваны кантэнт. У выпадку, калі вы ўказваеце лакаль, якая не падтрымліваецца, або ўвогуле не ўказваеце лакаль, Laravel будзе выкарыстоўваць en
па змаўчанніdefiніта.
Пераключэнне лакалі для кожнай спасылкі на сайт можа быць не такім, як вы хочаце, і гэта можа выглядаць не так чыста эстэтычна. Вось чаму мы будзем рабіць налады мовы праз спецыяльны пераключальнік моў і выкарыстоўваць карыстальніцкі сеанс для адлюстравання перакладзенага кантэнту. Таму стварыце новае прамежкавае праграмнае забеспячэнне ўнутры app/Http/Middleware/Localization.php
файл або запусціўшы 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);
}
}
Гэта прамежкавае праграмнае забеспячэнне загадае Laravel выкарыстоўваць абраны карыстальнікам лакаль, калі гэты выбар прысутнічае ў сеансе.
Паколькі нам трэба, каб гэта рабілася пры кожным запыце, нам таксама трэба дадаць яго ў папярэдні стэк прамежкавага праграмнага забеспячэнняdefiскончыў ст app/http/Kernel.php
для web
група прамежкавага праграмнага забеспячэння:
* 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 */
],
Далей нам трэба дадаць шлях для змены лакалі. Мы выкарыстоўваем шлях закрыцця, але вы можаце выкарыстоўваць сапраўды такі ж код у вашым кантролеры, калі хочаце:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Таксама не забудзьцеся выдаліць пераключальнік лакалі, які раней быў дададзены ў наш шлях перад прывітаннемdefiноч:
Route::get('/', function () {
return view('welcome');
});
Пасля таго, як гэта зроблена, адзіны спосаб для карыстальніка змяніць усталяваную мову - гэта ўвесці localhost/language/{locale}
. locale
выбар будзе захоўвацца ў сеансе і будзе перанакіроўваць карыстальнікаў туды, адкуль яны прыйшлі (адзначце Localization
прамежкавае праграмнае забеспячэнне). Каб паспрабаваць, перайдзіце на localhost/language/ru
(пакуль у вашым браўзеры знаходзіцца файл cookie сесіі), і вы ўбачыце перакладзены змест. Вы можаце свабодна перамяшчацца па вэб-сайце або паспрабаваць абнавіць старонку і пераканацца, што абраная мова захавана.
Цяпер нам трэба стварыць нешта, на што карыстальнік можа націснуць, каб змяніць мову, а не ўручную ўводзіць мясцовыя коды ў URL. Для гэтага мы дадамо вельмі просты інструмент праверкі мовы. Таму ствараем новы resources/views/partials/language_switcher.blade.php
файл з наступным кодам:
<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>
Уключыце толькі што створаны камутатар у прагляд «прывітання»:
<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>
Адкрыйце app/Providers/AppServiceProvider.php
файл і дадайце код, каб падзяліцца, калі будзе складзены наш пераключальнік моў. У прыватнасці, мы абагульваем бягучую лакаль, да якой можна атрымаць доступ як да файла {{ $current_locale }}
.
У асноўным мы будзем працаваць з resources/views/welcome.blade.php
, таму ўсё павінна адбывацца ў нашым вітальным выглядзе, калі не пазначана іншае.
Напрыклад, давайце павітаемся з нашым уяўным карыстальнікам (Аманда) замест таго, каб проста паказваць агульнае паведамленне:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Звярніце ўвагу, што мы выкарыстоўвалі назву з першай літарай у малым рэгістры, але запаўняльнік з першай літарай у вялікім. Такім чынам, Laravel можа дапамагчы вам аўтаматычна пісаць сапраўднае слова з вялікай літары. Гэта адбудзецца, калі запаўняльнік пачынаецца з вялікай літары, напрыклад, :Name
стварае слова "Караліна" або слова з вялікай літары, :NAME
, вырабляе «CAROLINE».
Мы таксама абнаўляем файлы перакладаў resources/lang/fr.json
e resources/lang/it.json
, таму што на дадзены момант мы будзем бачыць толькі ангельскую версію ў любым месцы, паколькі ключы перакладу не супадаюць з перакладамі.
французская:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Італьянскі:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Каб убачыць множны лік у дзеянні, давайце дадамо новы абзац тэксту.
Каб зрабіць множны лік, вы павінны выкарыстоўваць функцыю trans_choice
замест __()
, напрыклад:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Як бачыце, формы множнага ліку аддзяляюцца а |
.
А што, калі нам спатрэбіцца некалькі формаў множнага ліку?
Гэта таксама магчыма:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
У гэтым выпадку мы дапускаем лічбы 0
, 1
, і ад 2
a 19
, і, нарэшце, з 20 і далей. Вядома, вы можаце дадаць колькі заўгодна правілаў.
Дык што, калі мы хочам, каб запаўняльнікі былі ў нашых формах множнага ліку?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Мы таксама можам выкарыстоўваць колькасць, перададзенае ў `trans_choice`, калі неабходна, выкарыстоўваючы запаўняльнік :count
асаблівы:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Нарэшце, не забудзьце абнавіць свае файлы перакладу любымі зменамі, якія вы ўнеслі ў базавы пераклад.
Італьянскі:
{
"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"
}
французская:
{
"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"
}
Каб знайсці даты, мы будзем выкарыстоўваць моц Вуглярод , які пастаўляецца з Laravel па змаўчанніdefiніта. Праверце Вугляродная дакументацыя ; вы можаце зрабіць шмат цікавага. Напрыклад, мы можам усталяваць наш лакаль з правіламі даты і часу.
Для нашага простага прыкладу мы пакажам бягучую дату, лакалізаваную для выбранай мовы. У нашым routes/web.php
, мы абнаўляем шлях да старонкі прывітання і перадаем нашаму лакалізаванае паведамленне даты view
вітаем:
<?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
]);
});
Давайце абнаўляць resources/views/welcome.blade.php
даданне дысплея даты, напрыклад:
{{ __('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 }}
Спроба змяніць мову на галоўнай старонцы localhost
, мы ўбачым, што даты цяпер лакалізаваныя, напрыклад:
У розных краінах людзі выкарыстоўваюць розныя фарматы для прадстаўлення лікаў, напрыклад:
Такім чынам, каб адлюстраваць гэтыя адрозненні ў вашым дадатку Laravel, вы можаце выкарыстоўваць NumberFormatter наступным чынам:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Вы таксама можаце напісаць лік на пэўнай мове і адлюстраваць нешта накшталт «сто дваццаць тры тысячы сто дваццаць тры коска адзін два»:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Акрамя таго, NumberFormatter дазваляе лёгка знаходзіць валюты, напрыклад:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Такім чынам, для fr
вы ўбачыце еўра, у той час як для en_US
валюта будзе ў доларах ЗША.
Ercole Palmeri
Ваенна-марскі сектар - гэта сапраўдная глабальная эканамічная сіла, якая перайшла да 150-мільярднага рынку...
У мінулы панядзелак Financial Times абвясціла аб здзелцы з OpenAI. FT ліцэнзуе сваю журналістыку сусветнага ўзроўню...
Мільёны людзей плацяць за струменевыя паслугі, плацячы штомесячную абаненцкую плату. Распаўсюджана меркаванне, што вы…
Coveware ад Veeam працягне прадастаўляць паслугі рэагавання на інцыдэнты кібервымагальніцтва. Coveware будзе прапаноўваць судова-медыцынскую экспертызу і магчымасці выпраўлення…