Artiklid

Laraveli lokaliseerimise samm-sammult juhend, õpetus koos näidetega

Kuidas lokaliseerida Laraveli projekti, kuidas arendada projekti Laravelis ja muuta see mitmes keeles kasutatavaks. Selles artiklis näeme näidete abil, kuidas töötada tõlkefailidega, luua keelevahetust ja palju muud.

Laravel on rakendus, mis on loodud olema kohalik, kohanema erinevate keelte ja kultuuridega. Lokaliseerimine kohandab rahvusvahelised rakendused tõlke abil konkreetse keele jaoks.

eeltingimused

  • Selles artiklis me viitame Laraveli versioon 8.x;
  • Selle õpetuse edukaks järgimiseks peavad teil olema vajalikud teadmised PHP programmeerimiskeelest ja Laraveli raamistikust.
  • Teie domeen on localhost. Kui ei, siis asenda localhost oma domeeninime või IP-aadressiga (olenevalt teie installist).

Tõlkefailidega töötamine

Laravelis, nagu paljudes teistes raamistikes, saame salvestada erinevate keelte tõlked eraldi failidesse. Laraveli tõlkefailide korraldamiseks on kaks võimalust:

  • Vanem lähenemisviis, mis salvestab failid järgmisesse asukohta: resources/lang/{en,fr,ru}/{myfile.php};
  • Uus lähenemisviis, mis salvestab failid järgmisesse asukohta: 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). 

Lihtsad tõlked

Nüüd lähme juurde resources/views/welcome.blade.phpfaili ja asendage selle sisu bodymä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.

Laraveli lokaliseerimine

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.

Tõlkefailid

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.

Kohalikud muutused Laravelis

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/rulocalhost/fr. Peaksite nägema lokaliseeritud sisu. Kui määrate toetamata lokaadi või ei määra seda üldse, kasutab Laravel enalgseltdefinita.

Middleware

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.phpfaili 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.phpper il webvahevara 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 */
  ],

Muuda kurssi

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 localevalik salvestatakse seansi sees ja see suunab kasutajad sinna, kust nad tulid (kontrollige Localizationvahevara). 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.

Kommutaator

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.phpfaili 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.phpfaili ja lisage jagamiseks kood, kui meie keelevahetaja koostatakse. Täpsemalt jagame praegust lokaadi, millele pääseb juurde failina {{ $current_locale }}.

Innovatsiooni uudiskiri
Ärge jätke ilma kõige olulisematest uuendustest. Registreeruge, et saada neid meili teel.

Täpsemad tõlkevalikud PHP Laravelis

Peamiselt töötame koos resources/views/welcome.blade.php, seega peab kõik toimuma meie tervitusvaates, kui pole teisiti määratud.

Parameetrid tõlkestringides

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, :Nameloob "Caroline" või täistähtedega sõna,  :NAME, toodab “CAROLINE”.

Samuti värskendame oma tõlkefaile resources/lang/fr.jsonresources/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"

}

Pluraliseerimine

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 01ja alates 219ja 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"
}

Töötamine lokaliseeritud kuupäevadega Laravelis

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:

Numbrite ja valuutade vormindamine NumberFormatteriga

Erinevates riikides kasutavad inimesed arvude esitamiseks erinevaid vorminguid, näiteks:

  • Ameerika Ühendriigid → 123.123,12 XNUMX
  • Prantsusmaa → 123 123,12

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

Innovatsiooni uudiskiri
Ärge jätke ilma kõige olulisematest uuendustest. Registreeruge, et saada neid meili teel.

Viimased artiklid

Veeam pakub lunavarale kõige põhjalikumat tuge alates kaitsest kuni reageerimise ja taastamiseni

Veeami Coveware jätkab küberväljapressimise juhtumitele reageerimise teenuste pakkumist. Coveware pakub kohtuekspertiisi ja heastamisvõimalusi…

Aprill 23 2024

Roheline ja digitaalne revolutsioon: kuidas ennustav hooldus muudab nafta- ja gaasitööstust

Ennustav hooldus muudab nafta- ja gaasisektori pöördeliseks uuendusliku ja ennetava lähenemisega tehaste juhtimisele.…

Aprill 22 2024

Ühendkuningriigi monopolivastane regulaator tõstab BigTechi häire GenAI pärast

Ühendkuningriigi CMA on väljastanud hoiatuse Big Techi käitumise kohta tehisintellekti turul. Seal…

Aprill 18 2024

Casa Green: energiarevolutsioon jätkusuutliku tuleviku nimel Itaalias

Euroopa Liidu poolt hoonete energiatõhususe suurendamiseks koostatud roheliste majade dekreet on lõpetanud oma seadusandliku protsessi…

Aprill 18 2024