Laravel minangka aplikasi sing dirancang kanggo dadi lokal, kanggo adaptasi karo macem-macem basa lan budaya. Pelokalan ngarang aplikasi internasional menyang basa tartamtu liwat terjemahan.
localhost
. Yen ora, ganti localhost
nganggo jeneng domain utawa alamat IP sampeyan dhewe (gumantung saka instalasi sampeyan).Ing Laravel, kaya ing pirang-pirang kerangka kerja liyane, kita bisa nyimpen terjemahan kanggo macem-macem basa ing file sing kapisah. Ana rong cara kanggo ngatur file terjemahan Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Kanggo basa sing beda-beda miturut wilayah, sampeyan kudu menehi jeneng directory/file
saka basa miturut ISO 15897. Contone, kanggo Inggris Inggris sampeyan bakal nggunakake en_GB
tinimbang en-gb
. Ing artikel iki, kita bakal fokus ing pendekatan kapindho, nanging padha karo sing pisanan (kajaba carane tombol terjemahan dijenengi lan dijupuk).
Saiki ayo padha menyang resources/views/welcome.blade.php
file lan ngganti isi ing body
tag karo kita, kaya iki:
<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>
Kita bakal miwiti kanthi nyiapake pesen sambutan lokalisasi, sing gampang banget ing Laravel. Sampeyan mung kudu ngganti teks "Welcome to our website" kanthi kode ing ngisor iki: {{ __('Welcome to our website') }}
. Iki bakal nuntun Laravel kanggo nampilake "Welcome to our website" minangka standardefinite lan goleki terjemahan saka string iki yen basa liyane saka Inggris wis disetel (kita bakal ngerti mengko). Inggris bakal disetel minangka basa standardefinish saka app kita, supaya kanthi setelan gawandefiIng pungkasan kita mung bakal nampilake teks "Welcome to our website". Yen lokal beda, kita bakal nyoba golek terjemahan sing cocog lan bakal digawe ing wayahe.
Nanging kepiye Laravel ngerti basa sing saiki utawa basa sing kasedhiya ing aplikasi kasebut? Iki ditindakake kanthi ndeleng konfigurasi lokal ing app config/app.php
. Bukak file iki lan goleki rong tombol array asosiatif iki:
/*
|--------------------------------------------------------------------------
| 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',
Katrangan sing ditampilake ing ndhuwur kunci kudu jelas, nanging ing cendhak, kunci locale
ngandhut pra lokaldefinish saka aplikasi sampeyan (paling ora, yen ora ana lokal liyane wis disetel ing kode). Karo fallback_locale
diaktifake yen kita nyetel lokal sing ora ana ing aplikasi kita.
Nalika file iki mbukak, ayo tambahake kunci anyar kanggo nggawe dhaptar kabeh lokal sing bakal didhukung aplikasi. Kita bakal nggunakake iki mengko nalika nambah switcher lokal. Nanging, iki minangka tugas opsional amarga Laravel ora mbutuhake kita nindakake.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Saiki aplikasi kita ndhukung telung basa: Inggris, Italia lan Prancis.
Saiki kita wis nggawe kabeh lokal sing bakal digarap, kita bisa nerusake nerjemahake pesen sadurunge sambutan.defibengi.
Ayo miwiti kanthi nambah file lokalisasi anyar menyang folder kasebut resources/lang
. Pisanan, nggawe file resources/lang/it.json
lan tambahake terjemahan sing cocog, kaya ing ngisor iki:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Sabanjure, nggawe file resources/lang/fr.json
:
{
"Sugeng rawuh ing situs web kita": "Sugeng rawuh ing situs kita"
}
Kaya sing sampeyan ngerteni, kita tansah ngrujuk marang pesen sadurungedefiiki sing ditambahake ing file kasebut welcome.blade.php
(kang wis {{ __('Welcome to our website') }}
). Alesan kenapa kita ora kudu nggawe file en.json
iku amarga Laravel wis ngerti pesen sing kita lewati dening pra-setelandefirampung ing fungsi __()
padha kanggo pra lokal kitadefiiki en.
Ing wektu iki, Laravel ora ngerti carane ngganti lokal, mula saiki, ayo nindakake terjemahan langsung ing dalan. Ngowahi dalan sambutan pradefiwis rampung kaya ing ngisor iki:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Saiki kita bisa ngunjungi situs web kita, nemtokake basa sing kasedhiya minangka segmen jalur pertama: contone, localhost/ru
o localhost/fr
. Sampeyan kudu ndeleng konten sing dilokalisasi. Yen sampeyan nemtokake lokal sing ora didhukung utawa ora nemtokake lokal, Laravel bakal nggunakake en
kanthi gawandefinita.
Ngalih lokal kanggo saben pranala situs bisa uga ora kaya sing dikarepake, lan bisa uga ora katon resik kanthi estetis. Pramila kita bakal nindakake setelan basa liwat pamilih basa khusus lan nggunakake sesi pangguna kanggo nampilake konten sing diterjemahake. Mulane, nggawe middleware anyar nang app/Http/Middleware/Localization.php
file utawa kanthi mlaku 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);
}
}
Middleware iki bakal nuntun Laravel kanggo nggunakake lokal sing dipilih pangguna yen pilihan iki ana ing sesi kasebut.
Amarga iki kudu ditindakake ing saben panyuwunan, kita uga kudu nambahake menyang tumpukan pre middlewaredefirampung ing app/http/Kernel.php
saben il web
klompok middleware:
* 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 */
],
Sabanjure, kita kudu nambah path kanggo ngganti lokal. Kita nggunakake jalur penutupan, nanging sampeyan bisa nggunakake kode sing padha ing controller yen sampeyan seneng:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Uga, aja lali mbusak pilihan lokal sing sadurunge ditambahake ing jalur pra sambutandefibengi:
Route::get('/', function () {
return view('welcome');
});
Yen wis rampung, siji-sijine cara kanggo pangguna ngganti basa sing wis disetel yaiku kanthi ngetik localhost/language/{locale}
. Ing locale
pilihan bakal disimpen ing sesi lan bakal pangalihan pangguna menyang ngendi asale (priksa file Localization
middleware). Kanggo nyoba, pindhah menyang localhost/language/ru
(anggere cookie sesi sampeyan ana ing browser sampeyan) lan sampeyan bakal weruh isi terjemahan. Sampeyan bisa ngubengi situs web kanthi bebas utawa nyoba refresh kaca lan ndeleng manawa basa sing dipilih dilestarekake.
Saiki kita kudu nggawe soko sing bisa diklik pangguna kanggo ngganti basa tinimbang ngetik kode lokal kanthi manual menyang URL. Kanggo nindakake iki, kita bakal nambah pamriksa basa sing gampang banget. Mulane, nggawe anyar resources/views/partials/language_switcher.blade.php
file kanthi kode ing ngisor iki:
<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>
Kalebu switcher sing mentas digawe ing tampilan "welcome":
<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>
Bukak ing app/Providers/AppServiceProvider.php
file lan nambah kode kanggo nuduhake nalika switcher basa kita bakal dumadi. Khusus, kita bakal nuduhake lokal saiki sing bisa diakses minangka file {{ $current_locale }}
.
Kita bakal utamané bisa karo resources/views/welcome.blade.php
, supaya kabeh kudu kelakon ing tampilan sambutan kita kajaba kasebut.
Contone, ayo ngucapake salam marang pangguna khayalan (Amanda) tinimbang mung nampilake pesen umum:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Elinga yen kita nggunakake jeneng karo huruf pisanan ing huruf cilik, nanging placeholder karo huruf pisanan ing huruf gedhe. Kanthi cara iki, Laravel bisa nulungi sampeyan kanthi otomatis nggawe huruf kapital tembung sing bener. Iki bakal kelakon yen placeholder diwiwiti nganggo huruf gedhe, contone, :Name
ngasilake "Caroline" utawa tembung kanthi huruf kapital, :NAME
, ngasilake "CAROLINE".
Kita uga nganyari file terjemahan resources/lang/fr.json
e resources/lang/it.json
, amarga saiki kita mung bakal ndeleng versi Inggris ing ngendi wae amarga tombol terjemahan ora cocog karo terjemahan.
Prancis:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Italia:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Kanggo ndeleng pluralisasi ing tumindak, ayo nambah paragraf anyar teks.
Kanggo nindakake pluralisasi, sampeyan kudu nggunakake fungsi kasebut trans_choice
tinimbang __()
, Tuladhane:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Minangka sampeyan bisa ndeleng, wangun jamak dipisahake dening a |
.
Saiki, kepiye yen kita butuh macem-macem bentuk jamak?
Iki uga bisa:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Ing kasus iki, kita ngidini nomer 0
, 1
, lan saka 2
a 19
, lan pungkasane wiwit 20. Mesthi, sampeyan bisa nambah minangka akeh aturan sing perlu.
Dadi, yen kita pengin placeholders ing wangun jamak kita?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Kita uga bisa nggunakake count liwati ing `trans_choice` yen perlu nggunakake placeholder :count
khusus:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Pungkasan, aja lali nganyari file terjemahan kanthi owah-owahan sing sampeyan lakoni ing terjemahan dhasar.
Italia:
{
"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"
}
Prancis:
{
"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"
}
Kanggo nemokake tanggal, kita bakal nggunakake daya saka Karbon , sing dilengkapi karo Laravel minangka standardefinita. Priksa metu ing Dokumentasi karbon ; sampeyan bisa nindakake akeh perkara sing menarik. Contone, kita bisa nyetel lokal kita karo aturan tanggal lan wektu.
Kanggo conto prasaja, kita bakal nuduhake tanggal saiki sing dilokalisasi kanggo basa sing dipilih. Ing kita routes/web.php
, kita nganyari path kaca sambutan lan ngirim pesen tanggal lokal kanggo kita view
sugeng rawuh:
<?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
]);
});
Ayo nganyari resources/views/welcome.blade.php
nambah tampilan tanggal, kaya mangkene:
{{ __('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 }}
Nyoba ngganti basa ing kaca ngarep saka localhost
, kita bakal weruh yen tanggal saiki wis dilokalisasi, contone:
Ing macem-macem negara, wong nggunakake macem-macem format kanggo makili nomer, contone:
Mula, kanggo nggambarake prabédan kasebut ing aplikasi Laravel, sampeyan bisa nggunakake NumberFormatter kanthi cara ing ngisor iki:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Sampeyan uga bisa nulis nomer kasebut ing basa tartamtu lan nampilake kaya "satus rong puluh telu ewu satus rong puluh telu koma siji":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Kajaba iku, NumberFormatter ngidini sampeyan nemokake mata uang kanthi gampang, contone:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Dadi kanggo fr
sampeyan bakal weruh Euros, nalika kanggo en_US
mata uang bakal ing dolar AS.
Ercole Palmeri
Operasi ophthalmoplasty nggunakake penampil komersial Apple Vision Pro ditindakake ing Poliklinik Catania…
Ngembangake katrampilan motorik sing apik liwat pewarnaan nyiapake bocah kanggo katrampilan sing luwih rumit kaya nulis. Kanggo mewarnai…
Sektor angkatan laut minangka kekuwatan ekonomi global sing sejatine, sing wis ngarahake pasar 150 milyar ...
Senin kepungkur, Financial Times ngumumake kesepakatan karo OpenAI. FT menehi lisensi jurnalisme kelas donya…