Ларавел је апликација дизајнирана да буде локална, да се прилагоди различитим језицима и културама. Локализација прилагођава интернационализоване апликације одређеном језику кроз превод.
localhost
. Ако не, замените localhost
са сопственим именом домена или ИП адресом (у зависности од ваше инсталације).У Ларавел-у, баш као иу многим другим оквирима, можемо да складиштимо преводе за различите језике у одвојеним датотекама. Постоје два начина за организовање Ларавел преводних датотека:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;За језике који се разликују по територији, требало би да их именујете directory/file
језика према ИСО 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>
Почећемо са припремом наше поруке добродошлице за локализацију, која је у Ларавелу заиста лака. Све што треба да урадите је да замените текст „Добро дошли на нашу веб страницу“ следећим кодом: {{ __('Welcome to our website') }}
. Ово ће упутити Ларавел да подразумевано прикаже „Добро дошли на нашу веб локацију“.defiните и потражите преводе овог стринга ако је подешен језик који није енглески (до тога ћемо доћи касније). Енглески ће бити постављен као подразумевани језикdefiкрај наше апликације, тако да је подразумевано подешавањеdefiНа крају ћемо једноставно приказати текст „Добро дошли на нашу веб страницу“. Ако је локализација другачија, покушаћемо да пронађемо одговарајући превод и он ће бити креиран за тренутак.
Али како Ларавел зна који је тренутни језик или који су језици доступни у апликацији? То ради гледањем у локалну конфигурацију у апликацији 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
активира се у случају да у нашој апликацији поставимо непостојећи локал.
Док имамо отворену ову датотеку, хајде да додамо нови кључ ради наше погодности наводећи све локације које ће наша апликација подржавати. Ово ћемо касније користити када додајемо локални прекидач. Међутим, ово је опциони задатак јер Ларавел не захтева од нас да то урадимо.
/*
|--------------------------------------------------------------------------
| 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
:
{
„Добро дошли на нашу веб страницу“: “Добро дошли на наш сајт”
}
Као што видите, увек се позивамо на претпорукуdefiнито који смо додали у датотеку welcome.blade.php
(који је био {{ __('Welcome to our website') }}
). Разлог зашто не морамо да креирамо датотеку en.json
то је зато што Ларавел већ зна које поруке прослеђујемо унапредdefiзавршио на функцији __()
они су за наше локалне преdefiнито ен.
У овом тренутку, Ларавел не зна како да промени локализацију, па за сада, хајде да урадимо преводе директно унутар путање. Измените путању добродошлице пре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
. Требало би да видите локализовани садржај. У случају да наведете неподржани локал или га уопште не наведете, Ларавел ће користити 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);
}
}
Овај средњи софтвер ће упутити Ларавел-у да користи језик који је изабрао корисник ако је овај избор присутан у сесији.
Пошто то треба да урадимо на сваки захтев, такође морамо да га додамо у пре међуверски стек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
(све док је ваш колачић сесије присутан у вашем претраживачу) и видећете преведени садржај. Можете се слободно кретати по веб локацији или покушати да освежите страницу и видите да је изабрани језик сачуван.
Сада морамо да креирамо нешто на шта корисник може да кликне да промени језик уместо да ручно унесе локалне кодове у УРЛ. Да бисмо то урадили, додаћемо врло једноставну проверу језика. Стога, креирајте нову 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']) }}
Имајте на уму да смо користили име са првим словом малим словима, али чувар места са првим словом великим. На овај начин, Ларавел вам може помоћи да аутоматски пишете стварну реч великим словом. Ово ће се десити ако чувар места почиње великим словом, на пример, :Name
производи „Царолине“ или реч која је написана великим словом, :NAME
, производи “ЦАРОЛИНЕ”.
Такође ажурирамо наше преводилачке датотеке 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']) }}
Такође можемо да користимо број прослеђен у `транс_цхоице` ако је потребно помоћу чувара места :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"
}
Да бисмо лоцирали датуме, искористићемо моћ Угљеник , који подразумевано долази са Ларавел-ом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
, видећемо да су датуми сада локализовани, на пример:
У различитим земљама људи користе различите формате за представљање бројева, на пример:
Стога, да бисте одразили ове разлике у вашој Ларавел апликацији, можете да користите НумберФорматтер на следећи начин:
<?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);
Поред тога, НумберФорматтер вам омогућава да лако лоцирате валуте, на пример:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Дакле за fr
видећете евра, док за en_US
валута ће бити у америчким доларима.
Ercole Palmeri
Развијање финих моторичких вештина кроз бојење припрема децу за сложеније вештине попут писања. Боји…
Поморски сектор је права глобална економска сила, која је кренула ка тржишту од 150 милијарди...
Прошлог понедељка, Финанциал Тимес је објавио договор са ОпенАИ. ФТ лиценцира своје новинарство светске класе…
Милиони људи плаћају услуге стриминга, плаћајући месечне претплате. Увријежено је мишљење да сте…