Laravel yerli olmaq, müxtəlif dillərə və mədəniyyətlərə uyğunlaşmaq üçün hazırlanmış bir proqramdır. Lokallaşdırma beynəlxalq tətbiqləri tərcümə vasitəsilə konkret dilə uyğunlaşdırır.
localhost
. Əgər yoxsa, dəyişdirin localhost
öz domen adınız və ya IP ünvanınızla (quraşdırmağınızdan asılı olaraq).Laravel-də, bir çox digər çərçivələrdə olduğu kimi, biz müxtəlif dillər üçün tərcümələri ayrı-ayrı fayllarda saxlaya bilərik. Laravel tərcümə fayllarını təşkil etməyin iki yolu var:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Ərazisinə görə fərqlənən dillər üçün onları adlandırmalısınız directory/file
ISO 15897-yə uyğun dilin. Məsələn, Böyük Britaniya İngilis dili üçün istifadə edərdiniz en_GB
əvəzinə en-gb
. Bu məqalədə diqqətimizi ikinci yanaşmaya yönəldəcəyik, lakin eyni şey birinciyə də aiddir (tərcümə açarlarının necə adlandırıldığı və götürülməsi istisna olmaqla).
İndi isə gedək resources/views/welcome.blade.php
faylı və məzmununu dəyişdirin body
bizimkilərlə belə etiketləyin:
<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-də həqiqətən asan olan lokalizasiya salamlama mesajımızı hazırlamaqla başlayacağıq. Bunun üçün sadəcə “Veb saytımıza xoş gəlmisiniz” mətnini aşağıdakı kodla əvəz etmək kifayətdir: {{ __('Welcome to our website') }}
. Bu, Laravel-ə defolt olaraq "Veb-saytımıza xoş gəlmisiniz" yazısını göstərməyi tapşıracaqdefinite və ingilis dilindən başqa bir dil təyin olunarsa, bu sətirin tərcümələrini axtarın (bunu sonra öyrənəcəyik). İngilis dili standart dil olaraq təyin olunacaqdefiTətbiqimizə uyğundur, buna görə də standart parametrdirdefiSonda sadəcə olaraq “Veb saytımıza xoş gəlmisiniz” mətnini göstərəcəyik. Lokal fərqlidirsə, uyğun tərcüməni tapmağa çalışacağıq və o, bir anda yaradılacaq.
Bəs Laravel hansı dilin cari olduğunu və ya tətbiqdə hansı dillərin mövcud olduğunu necə bilir? Bunu tətbiqdə yerli konfiqurasiyaya baxaraq edir config/app.php
. Bu faylı açın və bu iki assosiativ massiv açarını axtarın:
/*
|--------------------------------------------------------------------------
| 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çarların yuxarısında göstərilən təsvirlər öz-özünə izahlı olmalıdır, lakin bir sözlə, açardır locale
yerli pre ehtiva edirdefiTətbiqinizin nish (ən azı, əgər kodda başqa dil təyin olunmayıbsa). Və fallback_locale
tətbiqimizdə mövcud olmayan bir yerli təyin etdiyimiz halda aktivləşdirilir.
Bu fayl açıq olduğu halda, rahatlığımız üçün tətbiqimizin dəstəkləyəcəyi bütün dilləri sadalayan yeni açar əlavə edək. Bundan sonra yerli dəyişdirici əlavə edərkən istifadə edəcəyik. Bununla belə, bu, isteğe bağlı bir işdir, çünki Laravel bunu etməyimizi tələb etmir.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
İndi proqramımız üç dili dəstəkləyir: İngilis, İtalyan və Fransız.
İndi işləyəcəyimiz bütün dilləri təyin etdik, biz davam edə və ilk salamlama mesajımızı tərcümə etməyə davam edə bilərik.defigecə.
Qovluğa yeni lokalizasiya faylları əlavə etməklə başlayaq resources/lang
. Əvvəlcə bir fayl yaradın resources/lang/it.json
və müvafiq tərcümələri aşağıdakı kimi əlavə edin:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Sonra, bir fayl yaradın resources/lang/fr.json
:
{
"Veb saytımıza xoş gəlmisiniz": “Saytımıza xoş gəlmisiniz”
}
Gördüyünüz kimi, biz həmişə ön mesaja müraciət edirikdefifayla əlavə etdiyimiz nito welcome.blade.php
(bu idi {{ __('Welcome to our website') }}
). Fayl yaratmamağımızın səbəbi en.json
çünki Laravel əvvəlcədən təyin etməklə hansı mesajları ötürəcəyimizi artıq bilirdefifunksiyasını tamamladı __()
onlar yerli önümüz üçündirdefinito en.
Bu nöqtədə, Laravel yerliləri necə dəyişdirəcəyini bilmir, ona görə də hələlik tərcümələri birbaşa yolun daxilində edək. Qarşılama yolunu əvvəlcədən dəyişdirindefiaşağıda göstərildiyi kimi kəsildi:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
İndi mövcud dillərdən hər hansı birini birinci yol seqmenti kimi göstərərək veb saytımıza daxil ola bilərik: məsələn, localhost/ru
o localhost/fr
. Lokallaşdırılmış məzmunu görməlisiniz. Dəstəklənməyən lokali qeyd etsəniz və ya ümumiyyətlə yerli təyin etməsəniz, Laravel istifadə edəcək en
default olaraqdefinita.
Hər bir sayt bağlantısı üçün yerli dilin dəyişdirilməsi istədiyiniz kimi olmaya bilər və estetik cəhətdən təmiz görünməyə bilər. Buna görə də biz dil parametrlərini xüsusi dil dəyişdiricisi vasitəsilə edəcəyik və tərcümə edilmiş məzmunu göstərmək üçün istifadəçi seansından istifadə edəcəyik. Buna görə də, daxilində yeni bir ara proqram yaradın app/Http/Middleware/Localization.php
faylı və ya işlətməklə 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);
}
}
Bu ara proqram Laravel-ə seansda bu seçim mövcud olarsa, istifadəçinin seçilmiş dilini istifadə etməyi tapşıracaq.
Hər sorğuda bunu etməli olduğumuz üçün, biz də onu əvvəlcədən orta proqram yığınına əlavə etməliyikdefi-də bitirdi app/http/Kernel.php
uğrunda web
orta proqram qrupu:
* 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 */
],
Sonra, yerli dili dəyişdirmək üçün bir yol əlavə etməliyik. Biz bağlanma yolundan istifadə edirik, lakin istəsəniz, nəzarət cihazınızda eyni kodu istifadə edə bilərsiniz:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Həmçinin, öncədən qarşılama yolumuza əlavə edilmiş yerli seçim keçidini silməyi unutmayındefigecə:
Route::get('/', function () {
return view('welcome');
});
Bu edildikdən sonra istifadəçinin hazırda təyin edilmiş dili dəyişməsinin yeganə yolu daxil olmaqdır localhost/language/{locale}
. The locale
seçim sessiya ərzində saxlanacaq və istifadəçiləri gəldikləri yerə yönləndirəcək ( Localization
ara proqram). Bunu sınamaq üçün keçin localhost/language/ru
(sessiya kukisi brauzerinizdə mövcud olduğu müddətcə) və tərcümə edilmiş məzmunu görəcəksiniz. Siz vebsaytda sərbəst hərəkət edə və ya səhifəni yeniləməyə cəhd edə və seçilmiş dilin qorunub saxlandığını görə bilərsiniz.
İndi biz istifadəçinin URL-yə yerli kodları əl ilə daxil etmək əvəzinə dili dəyişdirmək üçün klikləyə biləcəyi bir şey yaratmalıyıq. Bunun üçün çox sadə dil yoxlayıcısı əlavə edəcəyik. Buna görə də yenisini yaradın resources/views/partials/language_switcher.blade.php
aşağıdakı kodla fayl:
<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>
Yeni yaradılmış dəyişdiricini "xoş gəldin" görünüşünə daxil edin:
<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>
açın app/Providers/AppServiceProvider.php
faylı açın və dil dəyişdiricimiz nə vaxt yaradılacaq paylaşmaq üçün kodu əlavə edin. Konkret olaraq, fayl kimi əldə edilə bilən cari dili paylaşacağıq {{ $current_locale }}
.
Biz əsasən işləyəcəyik resources/views/welcome.blade.php
, buna görə də başqa cür göstərilmədiyi təqdirdə hər şey xoş baxışımızda baş verməlidir.
Məsələn, ümumi bir mesaj göstərmək əvəzinə xəyali istifadəçimizə (Amanda) salam deyək:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Qeyd edək ki, biz adı kiçik hərflə, lakin ilk hərfi böyük hərflə olan yer tutucudan istifadə etdik. Bu yolla, Laravel sizə avtomatik olaraq həqiqi sözü böyük hərflə yazmağa kömək edə bilər. Bu, yertutan böyük hərflə başladıqda baş verəcək, məsələn, :Name
"Caroline" və ya tam böyük hərflə yazılmış söz yaradır, :NAME
, “CAROLINE” istehsal edir.
Biz həmçinin tərcümə fayllarımızı yeniləyirik resources/lang/fr.json
e resources/lang/it.json
, tərcümə düymələri tərcümələrə uyğun gəlmədiyi üçün hazırda biz yalnız ingiliscə versiyasını hər yerdə görəcəyik.
Fransız dili:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
İtalyan:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Plürallaşdırmanın fəaliyyətdə olduğunu görmək üçün mətnə yeni abzas əlavə edək.
Plüralizasiyanı həyata keçirmək üçün funksiyadan istifadə etməlisiniz trans_choice
əvəzinə __()
, misal üçün:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Göründüyü kimi, cəm formaları a ilə ayrılır |
.
İndi bir neçə cəm formasına ehtiyacımız olsa nə olar?
Bu da mümkündür:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Bu halda biz nömrələrə icazə veririk 0
, 1
və 2
a 19
, və nəhayət, 20-dən sonra. Əlbəttə ki, istədiyiniz qədər qayda əlavə edə bilərsiniz.
Bəs biz cəm formalarımızda yer tutucuları istəsək nə olar?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Lazım gələrsə, yertutandan istifadə edərək "trans_seçim"də keçən saydan da istifadə edə bilərik :count
xüsusi:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Nəhayət, əsas tərcümədə etdiyiniz dəyişikliklərlə tərcümə fayllarınızı yeniləməyi unutmayın.
İtalyan:
{
"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"
}
Fransız dili:
{
"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"
}
Tarixləri tapmaq üçün gücündən istifadə edəcəyik Karbon , standart olaraq Laravel ilə gəlirdefinita. yoxlayın Karbon sənədləri ; çox maraqlı şeylər edə bilərsiniz. Məsələn, biz yerlimizi tarix və vaxt qaydaları ilə təyin edə bilərik.
Sadə nümunəmiz üçün seçilmiş dil üçün lokallaşdırılmış cari tarixi göstərəcəyik. Bizim routes/web.php
, biz salamlama səhifəsinin yolunu yeniləyirik və lokallaşdırılmış tarix mesajını özümüzə ötürürük view
xoş gəlmisiniz:
<?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
]);
});
Gəlin yeniləyək resources/views/welcome.blade.php
tarix ekranının əlavə edilməsi, məsələn:
{{ __('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 }}
Əsas səhifəsində dili dəyişməyə çalışırıq localhost
, tarixlərin indi lokallaşdırıldığını görəcəyik, məsələn:
Müxtəlif ölkələrdə insanlar rəqəmləri təmsil etmək üçün müxtəlif formatlardan istifadə edirlər, məsələn:
Buna görə də, bu fərqləri Laravel tətbiqinizdə əks etdirmək üçün istifadə edə bilərsiniz NumberFormatter aşağıdakı şəkildə:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Siz həmçinin nömrəni müəyyən bir dildə yaza və “yüz iyirmi üç min yüz iyirmi üç nöqtə bir iki” kimi bir şey göstərə bilərsiniz:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Bundan əlavə, NumberFormatter sizə valyutaların yerini asanlıqla tapmağa imkan verir, məsələn:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Belə ki, üçün fr
üçün isə Avro görəcəksiniz en_US
valyuta ABŞ dollarında olacaq.
Ercole Palmeri
Kataniya poliklinikasında Apple Vision Pro kommersiya görüntüləyicisi ilə oftalmoplastika əməliyyatı həyata keçirilib...
Rəngləmə yolu ilə incə motor bacarıqlarının inkişafı uşaqları yazı kimi daha mürəkkəb bacarıqlara hazırlayır. Rəngləmək üçün…
Dəniz sektoru 150 milyardlıq bazara doğru irəliləyən əsl qlobal iqtisadi gücdür...
Keçən bazar ertəsi Financial Times OpenAI ilə müqavilə elan etdi. FT dünya səviyyəli jurnalistikasına lisenziya verir...