Laravel on rakendus, mis on loodud olema kohalik, kohanema erinevate keelte ja kultuuridega. Lokaliseerimine kohandab rahvusvahelised rakendused tõlke abil konkreetse keele jaoks.
localhost
. Kui ei, siis asenda localhost
oma domeeninime või IP-aadressiga (olenevalt teie installist).Laravelis, nagu paljudes teistes raamistikes, saame salvestada erinevate keelte tõlked eraldi failidesse. Laraveli tõlkefailide korraldamiseks on kaks võimalust:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Keelte puhul, mis erinevad territooriumilt, peaksite neile nime andma directory/file
ISO 15897 järgi. Näiteks Ühendkuningriigi inglise keele jaoks kasutaksite en_GB
selle asemel en-gb
. Selles artiklis keskendume teisele lähenemisviisile, kuid sama kehtib ka esimese kohta (v.a tõlkevõtmete nimetamine ja otsimine).
Nüüd lähme juurde resources/views/welcome.blade.php
faili ja asendage selle sisu body
märgi meie omaga, näiteks nii:
<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>
Alustuseks valmistame ette oma lokaliseerimise tervitussõnumi, mis on Laravelis väga lihtne. Kõik, mida pead tegema, on asendada tekst “Tere tulemast meie veebisaidile” järgmise koodiga: {{ __('Welcome to our website') }}
. See annab Laravelile korralduse kuvada vaikimisi "Tere tulemast meie veebisaidile".definite ja otsige selle stringi tõlkeid, kui on määratud mõni muu keel peale inglise keele (selle juurde jõuame hiljem). Vaikekeeleks määratakse inglise keeldefinish meie rakendusest, seega vaikeseadenadefiLõpus kuvame lihtsalt teksti "Tere tulemast meie veebisaidile". Kui lokaat on erinev, proovime leida sobiva tõlke ja see luuakse hetkega.
Aga kuidas Laravel teab, milline on praegune keel või millised keeled on rakenduses saadaval? See teeb seda, vaadates rakenduse kohalikku konfiguratsiooni config/app.php
. Avage see fail ja otsige kahte assotsiatiivset massiivi võtit:
/*
|--------------------------------------------------------------------------
| 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',
Klahvide kohal näidatud kirjeldused peaksid olema iseenesestmõistetavad, kuid lühidalt öeldes võti locale
sisaldab kohalikku predefinish teie rakendusest (vähemalt juhul, kui koodis pole muud lokaati määratud). Ja fallback_locale
see aktiveeritakse juhul, kui määrame oma rakenduses olematu lokaadi.
Kui see fail on avatud, lisame mugavuse huvides uue võtme, mis loetleb kõik lokaadid, mida meie rakendus toetab. Kasutame seda hiljem kohaliku vahetaja lisamisel. See on aga valikuline ülesanne, kuna Laravel ei nõua meilt seda.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Nüüd toetab meie rakendus kolme keelt: inglise, itaalia ja prantsuse keelt.
Nüüd, kui oleme kindlaks määranud kõik lokaadid, millega töötame, saame jätkata ja liikuda edasi meie tervitussõnumi tõlkimisegadefiõhtune.
Alustame uute lokaliseerimisfailide lisamisega kausta resources/lang
. Esiteks looge fail resources/lang/it.json
ja lisage vastavad tõlked järgmiselt:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Järgmisena looge fail resources/lang/fr.json
:
{
"Tere tulemast meie veebisaidile": "Tere tulemast meie saidile"
}
Nagu näete, viitame alati eelsõnumiledefinito, mille me faili lisasime welcome.blade.php
(mis oli {{ __('Welcome to our website') }}
). Põhjus, miks me ei pea faili looma en.json
see on sellepärast, et Laravel juba teab, milliseid sõnumeid me eelseadistustega edastamedefilõpetanud funktsiooniga __()
need on meie kohaliku predefinito en.
Praegu Laravel ei tea, kuidas lokaate muuta, nii et praegu teeme tõlked otse tee sees. Muutke tervitusrada eelnevaltdefiviimistletud nagu allpool näidatud:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Nüüd saame külastada oma veebisaiti, määrates esimeseks teelõiguks mis tahes saadaolevatest keeltest: näiteks localhost/ru
o localhost/fr
. Peaksite nägema lokaliseeritud sisu. Kui määrate toetamata lokaadi või ei määra seda üldse, kasutab Laravel en
algseltdefinita.
Iga saidi lingi lokaadi vahetamine ei pruugi olla see, mida soovite ja see ei pruugi esteetiliselt nii puhas välja näha. Seetõttu seadistame keele spetsiaalse keelelüliti kaudu ja kasutame tõlgitud sisu kuvamiseks kasutajaseanssi. Seetõttu looge sees uus vahevara app/Http/Middleware/Localization.php
faili või käivitades 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);
}
}
See vahevara juhendab Laravelit kasutama kasutaja valitud lokaati, kui see valik on seansil olemas.
Kuna seda tuleb teha iga taotluse korral, peame selle lisama ka vahevara-eelsesse virnadefilõpetas sisse app/http/Kernel.php
per il web
vahevara grupp:
* 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 */
],
Järgmisena peame lokaadi muutmiseks lisama tee. Kasutame sulgemisteed, kuid soovi korral saate oma kontrolleris kasutada täpselt sama koodi.
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Ärge unustage ka eemaldada lokaadi lülitit, mis on eelnevalt meie tervitusteele lisatuddefiõhtupoolik:
Route::get('/', function () {
return view('welcome');
});
Kui see on tehtud, saab kasutaja praegu määratud keelt muuta ainult sisestades localhost/language/{locale}
. The locale
valik salvestatakse seansi sees ja see suunab kasutajad sinna, kust nad tulid (kontrollige Localization
vahevara). Selle proovimiseks minge aadressile localhost/language/ru
(nii kaua kui teie seansiküpsis on teie brauseris olemas) ja näete tõlgitud sisu. Veebilehel saab vabalt ringi liikuda või proovida lehte värskendada ja vaadata, et valitud keel säiliks.
Nüüd peame looma midagi, millel kasutaja saab klõpsata keele muutmiseks, selle asemel, et URL-i kohalikke koode käsitsi sisestada. Selleks lisame väga lihtsa keelekontrolli. Seetõttu looge uus resources/views/partials/language_switcher.blade.php
faili järgmise koodiga:
<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>
Kaasake vastloodud lüliti tervitusvaatesse:
<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>
Ava app/Providers/AppServiceProvider.php
faili ja lisage jagamiseks kood, kui meie keelevahetaja koostatakse. Täpsemalt jagame praegust lokaadi, millele pääseb juurde failina {{ $current_locale }}
.
Peamiselt töötame koos resources/views/welcome.blade.php
, seega peab kõik toimuma meie tervitusvaates, kui pole teisiti määratud.
Näiteks tervitame oma kujuteldavat kasutajat (Amanda), selle asemel, et kuvada lihtsalt üldist sõnumit:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Pange tähele, et kasutasime nime, mille esimene täht on väiketähtedega, kuid kohatäit, mille esimene täht on suurtähtedega. Nii saab Laravel aidata teil tegelikku sõna automaatselt suurtähtedega kirjutada. See juhtub siis, kui kohatäide algab näiteks suure tähega, :Name
loob "Caroline" või täistähtedega sõna, :NAME
, toodab “CAROLINE”.
Samuti värskendame oma tõlkefaile resources/lang/fr.json
e resources/lang/it.json
, kuna praegu näeme ainult ingliskeelset versiooni, kuna tõlkeklahvid ei ühti tõlgetega.
prantsuse keel:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Itaalia:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Mitmuse toimimise nägemiseks lisame tekstile uue lõigu.
Mitmuse tegemiseks peate kasutama funktsiooni trans_choice
selle asemel __()
, näiteks:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Nagu näete, eraldatakse mitmuse vormid tähega a |
.
Mis siis, kui vajame mitut mitmuse vormi?
See on samuti võimalik:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Sel juhul lubame numbreid 0
, 1
ja alates 2
a 19
ja lõpuks alates 20. aastast. Loomulikult saate lisada nii palju reegleid kui vaja.
Mis siis, kui tahame kohatäitjaid mitmuse vormides?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Vajadusel saame kohahoidja abil kasutada ka parameetris „trans_choice” edastatud arvu :count
eriline:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Lõpuks ärge unustage värskendada oma tõlkefaile põhitõlkes tehtud muudatustega.
Itaalia:
{
"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"
}
prantsuse keel:
{
"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"
}
Kuupäevade leidmiseks kasutame jõudu Süsinik , mis on vaikimisi Laraveliga kaasasdefinita. Tutvuge Süsiniku dokumentatsioon ; saate teha palju huvitavaid asju. Näiteks saame määrata oma lokaadi kuupäeva ja kellaaja reeglitega.
Meie lihtsa näite jaoks näitame valitud keele jaoks lokaliseeritud praegust kuupäeva. Meie routes/web.php
, värskendame tervituslehe teed ja edastame lokaliseeritud kuupäevateate meie omale view
Tere tulemast:
<?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
]);
});
Värskendame resources/views/welcome.blade.php
kuupäeva kuva lisamine, näiteks:
{{ __('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 }}
Proovin muuta avalehel olevat keelt localhost
, näeme, et kuupäevad on nüüd lokaliseeritud, näiteks:
Erinevates riikides kasutavad inimesed arvude esitamiseks erinevaid vorminguid, näiteks:
Seetõttu võite nende erinevuste kajastamiseks oma Laraveli rakenduses kasutada NumberFormater järgmisel viisil:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Võite ka numbri kirjutada konkreetses keeles ja kuvada näiteks "sada kakskümmend kolm tuhat ükssada kakskümmend kolm koma üks kaks":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Lisaks võimaldab NumberFormatter hõlpsasti leida valuutasid, näiteks:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Nii et fr
näete eurosid, samas kui eest en_US
valuuta on USA dollar.
Ercole Palmeri
Veeami Coveware jätkab küberväljapressimise juhtumitele reageerimise teenuste pakkumist. Coveware pakub kohtuekspertiisi ja heastamisvõimalusi…
Ennustav hooldus muudab nafta- ja gaasisektori pöördeliseks uuendusliku ja ennetava lähenemisega tehaste juhtimisele.…
Ühendkuningriigi CMA on väljastanud hoiatuse Big Techi käitumise kohta tehisintellekti turul. Seal…
Euroopa Liidu poolt hoonete energiatõhususe suurendamiseks koostatud roheliste majade dekreet on lõpetanud oma seadusandliku protsessi…