Laravel adalah aplikasi yang direka untuk menjadi tempatan, untuk menyesuaikan diri dengan pelbagai bahasa dan budaya. Penyetempatan menyesuaikan aplikasi antarabangsa kepada bahasa tertentu melalui terjemahan.
localhost
. Jika tidak, ganti localhost
dengan nama domain atau alamat IP anda sendiri (bergantung pada pemasangan anda).Dalam Laravel, sama seperti dalam banyak rangka kerja lain, kami boleh menyimpan terjemahan untuk bahasa yang berbeza dalam fail berasingan. Terdapat dua cara untuk mengatur fail terjemahan Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Untuk bahasa yang berbeza mengikut wilayah, anda harus menamakannya directory/file
bahasa mengikut ISO 15897. Sebagai contoh, untuk Bahasa Inggeris UK anda akan gunakan en_GB
bukannya en-gb
. Dalam artikel ini, kami akan menumpukan pada pendekatan kedua, tetapi perkara yang sama berlaku untuk yang pertama (kecuali cara kekunci terjemahan dinamakan dan diambil semula).
Sekarang, mari kita pergi ke resources/views/welcome.blade.php
fail dan gantikan kandungan body
tag dengan kami, seperti:
<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>
Kami akan mulakan dengan menyediakan mesej alu-aluan penyetempatan kami, yang sangat mudah dalam Laravel. Apa yang anda perlu lakukan ialah menggantikan teks "Selamat datang ke tapak web kami" dengan kod berikut: {{ __('Welcome to our website') }}
. Ini akan mengarahkan Laravel untuk memaparkan "Selamat Datang ke tapak web kami" secara lalaidefinite dan cari terjemahan rentetan ini jika bahasa selain bahasa Inggeris ditetapkan (kita akan mendapatkannya kemudian). Bahasa Inggeris akan ditetapkan sebagai bahasa lalaidefitamat apl kami, jadi mengikut tetapan lalaidefiPada akhirnya kami hanya akan memaparkan teks "Selamat datang ke laman web kami". Jika tempat itu berbeza, kami akan cuba mencari terjemahan yang sepadan dan ia akan dibuat dalam seketika.
Tetapi bagaimana Laravel mengetahui bahasa semasa atau bahasa mana yang tersedia dalam aplikasi? Ia melakukan ini dengan melihat konfigurasi setempat dalam apl config/app.php
. Buka fail ini dan cari dua kekunci tatasusunan bersekutu ini:
/*
|--------------------------------------------------------------------------
| 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',
Perihalan yang ditunjukkan di atas kunci harus jelas, tetapi secara ringkasnya, kuncinya locale
mengandungi pra tempatandefiakhir aplikasi anda (sekurang-kurangnya, jika tiada tempat lain telah ditetapkan dalam kod). Dan juga fallback_locale
ia diaktifkan sekiranya kami menetapkan tempat yang tidak wujud dalam aplikasi kami.
Semasa kami membuka fail ini, mari tambah kunci baharu untuk kemudahan kami menyenaraikan semua tempat yang akan disokong oleh aplikasi kami. Kami akan menggunakan ini kemudian apabila menambah penukar setempat. Walau bagaimanapun, ini adalah tugas pilihan kerana Laravel tidak memerlukan kami melakukannya.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Kini aplikasi kami menyokong tiga bahasa: Inggeris, Itali dan Perancis.
Memandangkan kami telah menyediakan semua tempat yang akan kami bekerjasama, kami boleh meneruskan dan meneruskan menterjemah mesej pra alu-aluan kamidefimalam.
Mari mulakan dengan menambah fail penyetempatan baharu pada folder resources/lang
. Pertama, buat fail resources/lang/it.json
dan tambah terjemahan yang sepadan, seperti berikut:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Seterusnya, buat fail resources/lang/fr.json
:
{
"Selamat datang ke laman web kami": “Selamat datang ke laman web kami”
}
Seperti yang anda lihat, kami sentiasa merujuk kepada mesej pradefinito yang kami tambah dalam fail welcome.blade.php
(yang {{ __('Welcome to our website') }}
). Sebab mengapa kita tidak perlu membuat fail en.json
itu kerana Laravel sudah mengetahui mesej yang kita lalui melalui pra tetapandefiselesai pada majlis tersebut __()
mereka adalah untuk pra tempatan kitadefiini en.
Pada ketika ini, Laravel tidak tahu cara menukar tempat, jadi buat masa ini, mari lakukan terjemahan terus di dalam laluan. Ubah suai laluan selamat datang pradefiselesai seperti yang ditunjukkan di bawah:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Kini kami boleh melawati tapak web kami, menyatakan mana-mana bahasa yang tersedia sebagai segmen laluan pertama: contohnya, localhost/ru
o localhost/fr
. Anda sepatutnya melihat kandungan setempat. Sekiranya anda menentukan tempattempat yang tidak disokong atau tidak menyatakan tempattempat sama sekali, Laravel akan menggunakan en
secara lalaidefinita.
Menukar tempat untuk setiap pautan tapak mungkin bukan perkara yang anda mahukan dan ia mungkin tidak kelihatan bersih dari segi estetika. Itulah sebabnya kami akan melakukan tetapan bahasa melalui penukar bahasa khas dan menggunakan sesi pengguna untuk memaparkan kandungan yang diterjemahkan. Oleh itu, cipta perisian tengah baharu di dalam app/Http/Middleware/Localization.php
fail atau dengan menjalankan 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);
}
}
Perisian tengah ini akan mengarahkan Laravel untuk menggunakan tempat yang dipilih pengguna jika pilihan ini hadir dalam sesi.
Oleh kerana kita memerlukan ini untuk dilakukan pada setiap permintaan, kita juga perlu menambahkannya pada tindanan pra middlewaredefiselesai dalam app/http/Kernel.php
untuk web
kumpulan 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 */
],
Seterusnya, kita perlu menambah laluan untuk menukar tempat. Kami menggunakan laluan penutupan, tetapi anda boleh menggunakan kod yang sama di dalam pengawal anda jika anda suka:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Selain itu, jangan lupa untuk mengalih keluar togol setempat yang telah ditambahkan sebelum ini dalam laluan pra alu-aluan kamidefimalam:
Route::get('/', function () {
return view('welcome');
});
Setelah ini dilakukan, satu-satunya cara untuk pengguna menukar bahasa yang ditetapkan pada masa ini adalah dengan memasukkan localhost/language/{locale}
. The locale
pemilihan akan disimpan dalam sesi dan akan mengubah hala pengguna ke tempat asal mereka (semak Localization
perisian tengah). Untuk mencubanya, pergi ke localhost/language/ru
(selagi kuki sesi anda ada dalam penyemak imbas anda) dan anda akan melihat kandungan yang diterjemahkan. Anda boleh bergerak di sekitar tapak web dengan bebas atau cuba memuat semula halaman dan melihat bahawa bahasa yang dipilih dipelihara.
Sekarang kita perlu mencipta sesuatu yang pengguna boleh klik untuk menukar bahasa dan bukannya memasukkan kod tempatan secara manual ke dalam URL. Untuk melakukan ini, kami akan menambah penyemak bahasa yang sangat mudah. Oleh itu, buat yang baru resources/views/partials/language_switcher.blade.php
fail dengan kod berikut:
<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>
Sertakan penukar yang baru dibuat dalam paparan "selamat datang":
<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>
Buka app/Providers/AppServiceProvider.php
fail dan tambahkan kod untuk dikongsi apabila penukar bahasa kami akan digubah. Khususnya, kami akan berkongsi tempat semasa yang boleh diakses sebagai fail {{ $current_locale }}
.
Kami terutamanya akan bekerjasama dengan resources/views/welcome.blade.php
, jadi segala-galanya mesti berlaku dalam pandangan dialu-alukan kami melainkan dinyatakan sebaliknya.
Sebagai contoh, mari kita bertanya khabar kepada pengguna khayalan kita (Amanda) dan bukannya hanya memaparkan mesej generik:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Ambil perhatian bahawa kami menggunakan nama dengan huruf pertama dalam huruf kecil, tetapi pemegang tempat dengan huruf pertama dalam huruf besar. Dengan cara ini, Laravel boleh membantu anda menggunakan huruf besar perkataan sebenar secara automatik. Ini akan berlaku jika pemegang tempat bermula dengan huruf besar, contohnya, :Name
menghasilkan "Caroline" atau perkataan besar penuh, :NAME
, menghasilkan "CAROLINE".
Kami juga mengemas kini fail terjemahan kami resources/lang/fr.json
e resources/lang/it.json
, pada masa ini kami hanya akan melihat versi bahasa Inggeris di mana-mana sahaja kerana kunci terjemahan tidak sepadan dengan terjemahan.
Perancis:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Bahasa Itali:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Untuk melihat pemajmukan dalam tindakan, mari tambah perenggan teks baharu.
Untuk melakukan pemajmukan, anda mesti menggunakan fungsi tersebut trans_choice
bukannya __()
, sebagai contoh:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Seperti yang anda lihat, bentuk jamak dipisahkan oleh a |
.
Sekarang, bagaimana jika kita memerlukan pelbagai bentuk jamak?
Ini juga mungkin:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Dalam kes ini, kami membenarkan nombor 0
, 1
, dan dari 2
a 19
, dan akhirnya dari 20 dan seterusnya. Sudah tentu, anda boleh menambah seberapa banyak peraturan yang anda perlukan.
Jadi bagaimana jika kita mahu pemegang tempat dalam bentuk jamak kita?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Kami juga boleh menggunakan kiraan yang diluluskan dalam `trans_choice` jika perlu menggunakan ruang letak :count
istimewa:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Akhir sekali, jangan lupa untuk mengemas kini fail terjemahan anda dengan sebarang perubahan yang anda buat pada terjemahan asas.
Bahasa Itali:
{
"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"
}
Perancis:
{
"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"
}
Untuk mencari tarikh, kami akan memanfaatkan kuasa Carbon , yang disertakan dengan Laravel secara lalaidefinita. Semak Dokumentasi karbon ; anda boleh melakukan banyak perkara yang menarik. Sebagai contoh, kita boleh menetapkan tempat kita dengan peraturan tarikh dan masa.
Untuk contoh mudah kami, kami akan menunjukkan tarikh semasa yang disetempatkan untuk bahasa yang dipilih. Dalam kami routes/web.php
, kami mengemas kini laluan halaman alu-aluan dan menghantar mesej tarikh setempat kepada kami view
selamat datang:
<?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
]);
});
Jom update resources/views/welcome.blade.php
menambah paparan tarikh, seperti:
{{ __('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 }}
Cuba menukar bahasa di halaman utama localhost
, kita akan melihat bahawa tarikh kini disetempatkan, sebagai contoh:
Di negara yang berbeza, orang menggunakan format yang berbeza untuk mewakili nombor, contohnya:
Oleh itu, untuk mencerminkan perbezaan ini dalam apl Laravel anda, anda boleh menggunakan NumberFormatter dengan cara berikut:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Anda juga boleh menulis nombor dalam bahasa tertentu dan memaparkan sesuatu seperti "seratus dua puluh tiga ribu seratus dua puluh tiga titik satu dua":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Selain itu, NumberFormatter membolehkan anda mencari mata wang dengan mudah, contohnya:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Jadi untuk fr
anda akan melihat Euro, manakala untuk en_US
mata wang akan berada dalam dolar AS.
Ercole Palmeri
Sektor tentera laut adalah kuasa ekonomi global yang sebenar, yang telah menavigasi ke arah pasaran 150 bilion...
Isnin lalu, Financial Times mengumumkan perjanjian dengan OpenAI. FT melesenkan kewartawanannya bertaraf dunia…
Berjuta-juta orang membayar untuk perkhidmatan penstriman, membayar yuran langganan bulanan. Adalah menjadi pendapat umum bahawa anda…
Coveware oleh Veeam akan terus menyediakan perkhidmatan tindak balas insiden pemerasan siber. Coveware akan menawarkan keupayaan forensik dan pemulihan…