amanqaku

Laravel localization isikhokelo inyathelo ngenyathelo, isifundo kunye nemizekelo

Uyenza njani iprojekthi yeLaravel, uyiphuhlisa njani iprojekthi eLaravel kwaye uyenze isetyenziswe kwiilwimi ezininzi. Kweli nqaku sibona indlela yokusebenza ngeefayile zokuguqulela, ukudala umkhethi weelwimi kunye nokunye kunye nemizekelo.

ILaravel sisicelo esenzelwe ukuba sesasekhaya, ukuziqhelanisa neelwimi ezahlukeneyo kunye neenkcubeko. Ukwenziwa kwalapha ekhaya kulungelelanisa usetyenziso lwamazwe ngamazwe kulwimi oluthile ngoguqulo.

Izinto ezifunekayo kuqala

  • Kweli nqaku siza kubhekisela kuyo Inguqulelo yeLaravel 8.x;
  • Ukulandela esi sifundo ngokuchanekileyo, kufuneka ube nolwazi oluyimfuneko lwe-PHP yolwimi lwenkqubo kunye nesakhelo seLaravel.
  • Indawo yakho yi localhost. Ukuba akunjalo, buyisela localhost ngegama lakho lesizinda okanye idilesi yeIP (kuxhomekeke kufakelo lwakho).

Ukusebenza ngeefayile zokuguqulela

ELaravel, njengakwezinye iinkqubo ezininzi, sinokugcina iinguqulelo zeelwimi ezahlukeneyo kwiifayile ezahlukeneyo. Kukho iindlela ezimbini zokucwangcisa iifayile zokuguqulela iLaravel:

  • Indlela endala ebandakanya ukugcina iifayile kwindawo elandelayo: resources/lang/{en,fr,ru}/{myfile.php};
  • Indlela entsha ebandakanya ukugcina iifayile kwindawo elandelayo: resources/lang/{fr.json, ru.json};

Kwiilwimi ezahlukileyo ngokwemimandla, kufuneka unike igama le directory/file yolwimi ngokwe-ISO 15897. Umzekelo, kwisiNgesi saseBritane ungasisebenzisa en_GB ngaphandle kwe en-gb. Kweli nqaku, siza kugxila kwindlela yesibini, kodwa okufanayo kuya kweyokuqala (ngaphandle kokuba izitshixo zokuguqulela zibizwa kwaye zibuyiswe njani). 

Iinguqulelo ezilula

Ngoku, masiye ku resources/views/welcome.blade.phpifayile kwaye ubuyisele imixholo ye bodyithegi neyethu, ngolu hlobo:

<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>

Siza kuqala ngokulungiselela umyalezo wethu owamkelekileyo wokwenziwa kwalapha ekhaya, ekulula kakhulu eLaravel. Ekuphela kwento ekufuneka uyenzile kukutshintsha isicatshulwa esithi “Wamkelekile kwiwebhusayithi yethu” ngale khowudi ilandelayo: {{ __('Welcome to our website') }}. Oku kuya kuyalela uLaravel ukuba abonise "Wamkelekile kwiwebhusayithi yethu" ngokuzenzekelayodefiNita kwaye ujonge iinguqulelo zalo mtya ukuba ulwimi olungelulo isiNgesi lusetiwe (siya kufika kuloo nto kamva). IsiNgesi siza kumiselwa njengolwimi olungagqibekangadefiimini yosetyenziso lwethu, ngoko ngokungagqibekangadefiNita siza kubonisa nje isicatshulwa "Wamkelekile kwiwebhusayithi yethu". Ukuba ingingqi yahlukile, siya kuzama ukukhangela inguqulelo ehambelanayo eya kwenziwa ngephanyazo.

Indawo yeLaravel

Kodwa uLaravel wazi njani ukuba loluphi ulwimi lwangoku okanye zeziphi iilwimi ezikhoyo kwisicelo? Ikwenza oku ngokujonga kuqwalaselo lwendawo kwi-app config/app.php. Vula le fayile kwaye ujonge ezi zitshixo zimbini zokudibanisa:

/*
|--------------------------------------------------------------------------
| 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',

Iinkcazo eziboniswe ngasentla kwezitshixo kufuneka zizichaze, kodwa ngokufutshane, isitshixo locale iqulethe igumbi langaphambilidefiisicelo sakho (ubuncinci, ukuba akukho ndawo yimbi isetiwe kwikhowudi). Kwaye i fallback_locale iyasebenza ukuba sibeka igumbi elingekhoyo kwisicelo sethu.

Ngelixa sinayo le fayile evuliweyo, songeze isitshixo esitsha ukwenzela ukuba kube lula ukudwelisa zonke iindawo eziya kuxhaswa sisicelo sethu. Siza kusebenzisa oku kamva xa songeza isitshintshi sasekhaya. Nangona kunjalo, lo ngumsebenzi ozikhethelayo njengoko uLaravel engafuni ukuba siwenze.

/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
  'English' => 'en',
  'Italian' => 'it',
  'French' => 'fr',
],

Ngoku isicelo sethu sixhasa iilwimi ezintathu: IsiNgesi, isiTaliyane nesiFrentshi.

Iifayile zokuguqulela

Ngoku sele simisele zonke iindawo esiza kusebenzisana nazo, singaqhubela phambili siguqulele umyalezo wethu owamkelekileyo ngaphambili.defingokuhlwa.

Masiqale ngokongeza iifayile zalapha ekhaya kwifolda resources/lang. Okokuqala, yenza ifayile resources/lang/it.json kwaye wongeze iinguqulelo ezihambelanayo, ngolu hlobo lulandelayo:

{
  "Welcome to our website": "Benvenuto nel nostro sito web"
}

Emva koko, yenza ifayile resources/lang/fr.json:

{

“Wamkelekile kwiwebhusayithi yethu”: “Wamkelekile kwindawo yethu”

}

Njengoko ubona, sihlala sibhekisa kumyalezo wangaphambilidefinite ukuba songeze kwifayile welcome.blade.php (eyayiyiyo {{ __('Welcome to our website') }}). Isizathu sokuba kunganyanzelekanga ukuba senze i en.json Kungenxa yokuba uLaravel sele esazi ukuba yeyiphi imiyalezo esiyidlulayo ngokuseta kwangaphambilidefiugqibile ngomsebenzi __() zezangaphambili zethu zasekhayadefiuthi en.

Ukutshintsha kwendawo eLaravel

Okwangoku, uLaravel akayazi indlela yokutshintsha ingingqi, ke okwangoku senza iinguqulelo ngqo ngaphakathi kwendlela. Hlela indlela yokwamkela kwangaphambilidefiigqitywe njengoko kubonisiwe ngezantsi:

Route::get('/{locale?}', function ($locale = null) {
    if (isset($locale) && in_array($locale, config('app.available_locales'))) {
        app()->setLocale($locale);
    }
    
    return view('welcome');
});

Ngoku sinokundwendwela iwebhusayithi yethu, sichaza naziphi na iilwimi ezikhoyo njengecandelo lendlela yokuqala: umzekelo, localhost/rulocalhost/fr. Kufuneka ubone umxholo wendawo. Kwimeko apho ukhankanya indawo engaxhaswanga okanye ungakhankanyi indawo kwaphela, iLaravel izakusebenzisa enngolungiselelo olungagqibekangadefinita.

I-Middleware

Ukutshintsha indawo yekhonkco lesayithi nganye isenokungabi yilento uyifunayo kwaye isenokungabonakali icocekile ngobuhle. Yiyo loo nto siya kwenza useto lolwimi ngokutshintsha ulwimi olukhethekileyo kwaye sisebenzise iseshoni yomsebenzisi ukubonisa umxholo oguquliweyo. Ke ngoko, yenza i-middleware entsha ngaphakathi kwe app/Http/Middleware/Localization.phpifayile okanye ukuqhuba 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);
    }
}

Le middleware iya kuyalela uLaravel ukuba asebenzise i locale ekhethwe ngumsebenzisi ukuba olu khetho lukhona kwiseshoni.

Kuba sifuna ukuba lo msebenzi wenziwe kwisicelo ngasinye, kufuneka siwufake kwakhona kwisitaki se-pre middlewaredefiungene app/http/Kernel.phpnge-il webIqela le-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 */
  ],

Guqula ikhosi

Emva koko, kufuneka songeze umendo wokutshintsha indawo. Sisebenzisa indlela yokuvala, kodwa ungasebenzisa ikhowudi efanayo ngqo ngaphakathi kwisilawuli sakho ukuba uyafuna:

Route::get('language/{locale}', function ($locale) {
    app()->setLocale($locale);
    session()->put('locale', $locale);

    return redirect()->back();
});

Kwakhona, ungalibali ukususa inguqulelo yendawo eyongezwe ngaphambili kwindlela yethu yokwamkela kwangaphambilidefiNONE

Route::get('/', function () {
    return view('welcome');
});

Nje ukuba kwenziwe oku, ekuphela kwendlela yokuba umsebenzisi atshintshe ulwimi olusetiweyo ngoku kukungena localhost/language/{locale}. Inkqubo ye- localeukhetho luya kugcinwa ngaphakathi kweseshoni kwaye luzakwalathisa abasebenzisi emva apho bebesuka khona (jonga i Localizationizixhobo eziphakathi). Ukuyizama, yiya ku localhost/language/ru(ukuba i-cookie yeseshoni yakho ikhona kwi-browser yakho) kwaye uya kubona umxholo oguqulelweyo. Ungajikeleza ngokukhululekileyo kwiwebhusayithi okanye uzame ukuhlaziya iphepha kwaye ubone ukuba ulwimi olukhethiweyo lugciniwe.

Umkhweli

Ngoku kufuneka senze into umsebenzisi anokuyicofa ukuze atshintshe ulwimi endaweni yokufaka ngesandla iikhowudi zendawo kwi-URL. Ukwenza oku, siya kongeza ukukhangela ulwimi olulula kakhulu. Ke ngoko, yenza entsha resources/views/partials/language_switcher.blade.phpifayile enekhowudi elandelayo:

<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>

Bandakanya iswitshi esandula ukuyilwa kumbono “wamkelekile”:

<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>

Vula i app/Providers/AppServiceProvider.phpifayile kwaye wongeze ikhowudi yokwabelana xa isitshintshi solwimi siqulunqwa. Ngokukodwa, siya kwabelana ngoseto lwangoku lwendawo enokufikelelwa njengefayile {{ $current_locale }}.

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.

Iinketho zokuguqulela eziphezulu kwi-PHP Laravel

Siza kusebenza kuqala kunye resources/views/welcome.blade.php, ngoko yonke into kufuneka yenzeke kumbono wethu owamkelekileyo ngaphandle kokuba kuchazwe ngenye indlela.

Iiparamitha kwimitya yokuguqulela

Umzekelo, masithi molo kumsebenzisi wethu ocingelwayo (uAmanda) endaweni yokubonisa umyalezo owenziwe ngabenzi:

{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}

Nceda uqaphele ukuba sisebenzise igama elinonobumba omncinci wokuqala, kodwa isibambi-ndawo esinonobumba omkhulu wokuqala. Ngale ndlela, iLaravel inokukunceda ukuba wenze i-capital ngokuzenzekelayo igama lokwenyani. Oku kuyakwenzeka ukuba isibambi-ndawo siqala ngonobumba omkhulu, umzekelo, :Nameuvelisa “uCaroline” okanye igama elinoonobumba abakhulu ngokupheleleyo,  :NAME, ivelisa "i-CAROLINE".

Sikwahlaziya iifayile zethu zoguqulo resources/lang/fr.jsonresources/lang/it.json , njengokuba okwangoku siza kubona kuphela inguqulelo yesiNgesi kuyo yonke indawo ekubeni izitshixo zokuguqulela zingahambelani neenguqulelo.

IsiFrentshi:

{

   "Welcome to our website, :Name": "Bienvenue sur notre site, :Name"

}

IsiTaliyani:

{

   "Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"

}

Ukwandisa

Ukubona ukwenziwa kwesininzi kwisenzo, masifake umhlathi omtsha wombhalo. 

Ukwenza isininzi, kufuneka usebenzise umsebenzi trans_choice ngaphandle kwe __(), umzekelo:

{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}

Njengoko ubona, iifom zesininzi zahlulwe ngo-a |.

Ngoku, kuthekani ukuba sifuna iifom ezininzi zesininzi? 

Oku kunokwenzeka kwakhona:

{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}

Kule meko, sivumela amanani 01, ewe 219, kwaye ekugqibeleni ukusuka kwi-20 ukuya phambili. Ngokuqinisekileyo, unokongeza imithetho emininzi njengoko ufuna.

Ke, kuthekani ukuba sifuna izibambi-ndawo kwiifomu zethu zesininzi? 

{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}

Sinokusebenzisa ubalo olupasiswe `trans_choice` ukuba kuyimfuneko ngokusebenzisa isibambi-ndawo :count eyodwa:

{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}

Okokugqibela, ungalibali ukuhlaziya iifayile zakho zokuguqulela ngalo naluphi na utshintsho olwenzileyo kwisiseko soguqulelo.

IsiTaliyani:

{
  "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"
}

IsiFrentshi:

{    
  "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"
}

Ukusebenza kunye nemihla yendawo eLaravel

Ukufumana imihla, siya kusebenzisa amandla e ICarbon , eza neLaravel ngokungagqibekangadefinita. Jonga i Amaxwebhu ekhabhoni ; unokwenza izinto ezininzi ezintle. Umzekelo, sinokuseta indawo yethu kunye nemithetho yomhla kunye nexesha.

Kumzekelo wethu olula, siza kubonisa umhla wangoku wokwalapha kulwimi olukhethiweyo. Kwethu routes/web.php, sihlaziya indlela yephepha lolwamkelo kwaye sidlulise umyalezo womhla wasekhaya kwezethu view Wamkelekile:

<?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
    ]);
});

Masihlaziye resources/views/welcome.blade.php Ukongeza umboniso womhla, ngolu hlobo:

{{ __('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 }}

Ukuzama ukutshintsha ulwimi kwiphepha lasekhaya le localhost, siza kubona ukuba imihla ngoku yenziwe yasekhaya, umzekelo:

Ukufomatha amanani kunye nemali ngeNomboloFormatter

Kumazwe ahlukeneyo, abantu basebenzisa iifomati ezahlukeneyo ukumela amanani, umzekelo:

  • EUnited States → 123.123,12
  • EFransi → 123 123,12

Ke ngoko, ukubonakalisa lo mahluko kusetyenziso lwakho lweLaravel, ungasebenzisa InomboloFormatter ngale ndlela ilandelayo:

<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);

$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);

Ungaphinda ubhale inani ngolwimi oluthile kwaye ubone into efana "nekhulu elinamashumi amabini anesithathu lamawaka, ikhulu elinamanci mabini anesithathu inqaku elinye":

<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);

Ngapha koko, iNumberFormatter ikuvumela ukuba ufumane imali ngokulula, umzekelo:

<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);

Ngoko ke fr uya kubona i-Euro, ngelixa en_US imali iya kuba ngeedola zaseMelika.

Ercole Palmeri

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.

Amanqaku amva

Izibonelelo zamaphepha okufaka imibala kuBantwana-ihlabathi lomlingo kuyo yonke iminyaka

Ukuphuhlisa izakhono zemoto ngokufaka imibala kulungiselela abantwana izakhono ezinzima ezifana nokubhala. Ukufaka umbala...

2 Meyi 2024

Ikamva lilapha: Njani iShishini lokuThumela liTshintsha uQoqosho lweHlabathi

Icandelo lomkhosi wasemanzini ligunya lokwenyani loqoqosho lwehlabathi, elithe lajonga kwimarike ye-150 yeebhiliyoni...

1 Meyi 2024

Abapapashi kunye ne-OpenAI batyikitya izivumelwano zokulawula ukuhamba kolwazi oluqhutywe yiArtificial Intelligence

NgoMvulo ophelileyo, i-Financial Times ibhengeze isivumelwano kunye ne-OpenAI. I-FT ikhupha iilayisensi kubuntatheli bayo obukumgangatho wehlabathi…

30 Aprili 2024

Iintlawulo ze-Intanethi: Nantsi indlela Iinkonzo zokusasaza ezikwenza ukuba uHlawule ngonaphakade

Izigidi zabantu zihlawula iinkonzo zokusasaza, zihlawula umrhumo wenyanga. Luluvo oluqhelekileyo ukuba…

29 Aprili 2024