Izihloko

Umhlahlandlela wesinyathelo ngesinyathelo wokwenziwa kwasendaweni kwe-Laravel, okokufundisa okunezibonelo

Uyenza kanjani iphrojekthi ye-Laravel ibe eyendawo, ungayithuthukisa kanjani iphrojekthi e-Laravel futhi ulenze lisetshenziswe ezilimini eziningi. Kulesi sihloko sibona ukuthi singasebenza kanjani ngamafayela okuhumusha, dala isishintshi solimi nokuningi ngezibonelo.

I-Laravel uhlelo lokusebenza olwenzelwe ukuba lwendawo, ukuzivumelanisa nezilimi namasiko ahlukahlukene. Ukwenza kwasendaweni kuhlanganisa izinhlelo zokusebenza zamazwe ngamazwe ziye olimini oluthile ngokuhumusha.

Okudingeka

  • Kulesi sihloko sizobhekisela kuso Inguqulo ye-Laravel 8.x;
  • Ukuze ulandele ngempumelelo lesi sifundo, udinga ukuba nolwazi oludingekayo lolimi lokuhlela lwe-PHP kanye nohlaka lwe-Laravel.
  • Isizinda sakho sithi localhost. Uma kungenjalo, buyisela localhost ngegama lakho lesizinda noma ikheli le-IP (kuya ngokufaka kwakho).

Ukusebenza ngamafayela okuhumusha

E-Laravel, njengakwezinye izinhlaka eziningi, singagcina ukuhumusha kwezilimi ezahlukene ngamafayela ahlukene. Kunezindlela ezimbili zokuhlela amafayela okuhumusha e-Laravel:

  • Indlela endala egcina amafayela endaweni elandelayo: resources/lang/{en,fr,ru}/{myfile.php};
  • Indlela entsha egcina amafayela endaweni elandelayo: resources/lang/{fr.json, ru.json};

Ngezilimi ezihluka ngendawo, kufanele uziqambe directory/file yolimi ngokwe-ISO 15897. Isibonelo, ngesiNgisi sase-UK ongasisebenzisa en_GB esikhundleni se en-gb. Kulesi sihloko, sizogxila endleleni yesibili, kodwa okufanayo kuya kweyokuqala (ngaphandle kokuthi okhiye bokuhumusha baqanjwa futhi babuyiselwe kanjani). 

Izinguqulo ezilula

Manje, ake siye ku- resources/views/welcome.blade.phpifayela bese ubuyisela okuqukethwe kwe bodyumaka neyethu, kanje:

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

Sizoqala ngokulungiselela umlayezo wethu wokwamukela wokwenziwa kwasendaweni, okulula ngempela e-Laravel. Okufanele ukwenze ukufaka esikhundleni sombhalo othi “Siyakwamukela kuwebhusayithi yethu” ufake ikhodi elandelayo: {{ __('Welcome to our website') }}. Lokhu kuzoyala uLaravel ukuthi abonise okuthi “Siyakwamukela kuwebhusayithi yethu” ngokuzenzakalelayodefiNite futhi ubheke ukuhunyushwa kwalolu chungechunge uma ulimi olungesona isiNgisi lusethiwe (sizofika kulokho ngokuhamba kwesikhathi). IsiNgisi sizosethwa njengolimi olumisiwedefinish yohlelo lwethu lokusebenza, ngakho ngokusetha okuzenzakalelayodefiEkugcineni sizovele siveze umbhalo othi “Siyakwamukela kuwebhusayithi yethu”. Uma indawo ihlukile, sizozama ukuthola ukuhumusha okufanayo futhi kuzodalwa ngokushesha.

Ukwenziwa kwasendaweni kweLaravel

Kepha uLaravel wazi kanjani ukuthi yiluphi ulimi lwamanje noma yiziphi izilimi ezitholakala kuhlelo lokusebenza? Ikwenza lokhu ngokubheka ukucushwa kwendawo kuhlelo lokusebenza config/app.php. Vula leli fayela bese ubheka laba okhiye ababili be-associative array:

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

Izincazelo eziboniswe ngenhla kwezikhiye kufanele zizichaze ngokwazo, kodwa ngamafuphi, zibe ukhiye locale iqukethe predefiisikhathi sohlelo lwakho lokusebenza (okungenani, uma kungekho esinye isifunda esisethiwe kukhodi). Futhi i fallback_locale iyasebenza uma simisa indawo engekho kuhlelo lwethu lokusebenza.

Nakuba leli fayela lisavuliwe, ake sengeze ukhiye omusha ukuze kube lula kithi ukufaka kuhlu zonke izifunda ezizosekelwa uhlelo lwethu. Sizosebenzisa lokhu kamuva lapho sengeza isishintshi sendawo. Nokho, lona umsebenzi ozikhethela wona njengoba iLaravel ingadingi ukuthi siwenze.

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

Manje uhlelo lwethu lusekela izilimi ezintathu: isiNgisi, isiNtaliyane nesiFulentshi.

Amafayela okuhumusha

Manje njengoba sesisungule zonke izifunda esizosebenza nazo, singaqhubeka futhi siqhubekele phambili ekuhumusheni umlayezo wethu wokwamukela kusengaphambili.defikusihlwa.

Ake siqale ngokwengeza amafayela amasha okwenziwa kwasendaweni kufolda resources/lang. Okokuqala, dala ifayela resources/lang/it.json bese wengeza izinguqulo ezihambisanayo, kanje:

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

Okulandelayo, dala ifayela resources/lang/fr.json:

{

“Siyakwamukela kuwebhusayithi yethu”: “Siyakwamukela esizeni sethu”

}

Njengoba ubona, sibhekisela njalo kumlayezo wangaphambilidefinito esiyengeze kufayela welcome.blade.php (okwakukhona {{ __('Welcome to our website') }}). Isizathu sokuthi kungani kungadingeki ukuthi sakhe ifayela en.json kungenxa yokuthi uLaravel useyazi kakade ukuthi yimiphi imilayezo esiyidlulayo ngokusethwa kwangaphambilidefikuqedwe emcimbini __() zingezangaphambi kwethudefinithi en.

Ushintsho lwendawo eLaravel

Kuleli qophelo, uLaravel akazi ukuthi azishintsha kanjani izindawo, ngakho-ke okwamanje, masenze ukuhumusha ngqo ngaphakathi kwendlela. Lungisa indlela yokwamukela kusengaphambilidefikuboniswe ngezansi:

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

Manje sesingakwazi ukuvakashela iwebhusayithi yethu, sicacisa noma yiziphi izilimi ezitholakalayo njengengxenye yendlela yokuqala: isibonelo, localhost/rulocalhost/fr. Kufanele ubone okuqukethwe okwenziwe okwasendaweni. Uma kwenzeka ucacisa indawo engasekelwe noma ungacacisi nhlobo indawo, i-Laravel izosebenzisa enngephuthadefinita.

Middleware

Ukushintsha indawo yesixhumanisi sesayithi ngayinye kungase kungabi yilokho okufunayo, futhi kungase kungabonakali kuhlanzekile ngobuhle. Kungakho sizokwenza ukulungiselelwa kolimi sisebenzisa isishintshi solimi esikhethekile futhi sisebenzise isikhathi somsebenzisi ukuze sibonise okuqukethwe okuhunyushiwe. Ngakho-ke, dala i-middleware entsha ngaphakathi kwe app/Http/Middleware/Localization.phpifayela noma ngokuqalisa 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 izoyalela i-Laravel ukuthi isebenzise indawo ekhethiwe yomsebenzisi uma lokhu kukhetha kukhona kuseshini.

Njengoba sidinga ukuthi lokhu kwenziwe kuso sonke isicelo, sidinga futhi ukusengeza kusitaki sangaphambili se-middlewaredefiuqedele ukungena app/http/Kernel.phpnge-il webIqembu 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 */
  ],

Shintsha inkambo

Okulandelayo, sidinga ukungeza indlela ukuze sishintshe indawo. Sisebenzisa indlela yokuvala, kodwa ungasebenzisa ikhodi efanayo ncamashi ngaphakathi kwesilawuli sakho uma uthanda:

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

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

Futhi, ungakhohlwa ukususa ukuguqulwa kwendawo okwengezwe ngaphambilini endleleni yethu yokwamukela kusengaphambilidefiusuku:

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

Uma lokhu sekwenziwe, okuwukuphela kwendlela yokuthi umsebenzisi aguqule ulimi olusethiwe manje ngokufaka localhost/language/{locale}. I- localeUkukhetha kuzogcinwa ngaphakathi kweseshini futhi kuzoqondisa kabusha abasebenzisi lapho bevela khona (hlola i- Localizationi-middleware). Ukuyizama, yiya ku localhost/language/ru(inqobo nje uma ikhukhi lakho leseshini likhona esipheqululini sakho) futhi uzobona okuqukethwe okuhunyushiwe. Ungazulazula kuwebhusayithi ngokukhululekile noma uzame ukuvuselela ikhasi futhi ubone ukuthi ulimi olukhethiwe luyalondolozwa.

Umgibeli

Manje sidinga ukudala okuthile umsebenzisi angachofoza ukuze aguqule ulimi esikhundleni sokuzifaka mathupha amakhodi endawo ku-URL. Ukwenza lokhu, sizofaka isihloli solimi esilula kakhulu. Ngakho-ke, dala entsha resources/views/partials/language_switcher.blade.phpifayela elinekhodi 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>

Faka isishintshi esisanda kwakhiwa ekubukeni kokuthi "ukwamukela":

<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.phpifayela bese wengeza ikhodi ukuze wabelane lapho isishintshi sethu solimi sizobhalwa. Ngokukhethekile, sizokwabelana ngendawo yamanje engafinyelelwa njengefayela {{ $current_locale }}.

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.

Izinketho zokuhumusha ezithuthukisiwe ku-PHP Laravel

Sizosebenza kakhulu resources/views/welcome.blade.php, ngakho yonke into kufanele yenzeke ekubukeni kwethu kokwamukela ngaphandle kwalapho kucaciswe ngenye indlela.

Amapharamitha kuyunithi yezinhlamvu zokuhumusha

Isibonelo, ake sithi sawubona kumsebenzisi wethu oqanjiwe (u-Amanda) esikhundleni sokuvele sibonise umlayezo ojwayelekile:

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

Qaphela ukuthi sisebenzise igama elinohlamvu lokuqala ngofeleba abancane, kodwa isimeli esinohlamvu lokuqala ngosonhlamvukazi. Ngale ndlela, i-Laravel ingakusiza ukuthi ubhale ngosonhlamvukazi ngokuzenzakalelayo igama langempela. Lokhu kuzokwenzeka uma isimeli siqala ngohlamvu olukhulu, isibonelo, :Nameikhiqiza “uCaroline” noma igama elinosonhlamvukazi ngokugcwele,  :NAME, ikhiqiza "CAROLINE".

Siphinde sibuyekeze amafayela ethu okuhumusha resources/lang/fr.jsonresources/lang/it.json , njengamanje sizobona kuphela inguqulo yesiNgisi noma yikuphi njengoba okhiye bokuhumusha bengafani nezinguqulo.

Isi-French:

{

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

}

IsiNtaliyane:

{

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

}

Ukwandisa

Ukubona ukusebenza kobuningi, ake sengeze isigaba esisha sombhalo. 

Ukuze wenze ubuningi, kufanele usebenzise umsebenzi trans_choice esikhundleni se __(), Ngokwesibonelo:

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

Njengoba ubona, amafomu obuningi ahlukaniswa ngu-a |.

Manje, kuthiwani uma sidinga izinhlobo eziningi zobuningi? 

Lokhu kungenzeka futhi:

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

Kulokhu, sivumela izinombolo 01, futhi kusuka 219, futhi ekugcineni kusukela ku-20 kuye phambili. Kunjalo, ungakwazi ukwengeza imithetho eminingi njengoba udinga.

Pho-ke kuthiwani uma sifuna izibambi-ndawo ebuningini bethu? 

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

Futhi singasebenzisa isibalo esiphasiswe kokuthi `trans_choice` uma kudingeka sisebenzisa isimeli :count okukhethekile:

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

Okokugcina, ungakhohlwa ukubuyekeza amafayela akho okuhumusha nganoma yiziphi izinguquko ozenzile ekuhumusheni okuyisisekelo.

IsiNtaliyane:

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

Isi-French:

{    
  "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 nezinsuku ezenziwe zasendaweni e-Laravel

Ukuthola amadethi, sizosebenzisa amandla we I-Carbon , eza ne-Laravel ngokuzenzakalelayodefinita. Hlola Amadokhumenti ekhabhoni ; ungenza izinto eziningi ezithakazelisayo. Isibonelo, singasetha indawo yethu ngemithetho yedethi nesikhathi.

Ngesibonelo sethu esilula, sizobonisa idethi yamanje eyenziwe yaba eyasendaweni yolimi olukhethiwe. Kwethu routes/web.php, sibuyekeza indlela yekhasi lokwamukela futhi sidlulisele umlayezo wedethi wendawo kwezethu view wamukelekile:

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

Masibuyekeze resources/views/welcome.blade.php ingeza isibonisi sosuku, njengalokhu:

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

Izama ukushintsha ulimi ekhasini lasekhaya le localhost, sizobona ukuthi amadethi manje sewasendaweni, isibonelo:

Ukufometha izinombolo nezinhlobo zemali nge-NumberFormatter

Emazweni ahlukene, abantu basebenzisa amafomethi ahlukene ukumela izinombolo, isibonelo:

  • I-United States → 123.123,12
  • I-France → 123 123,12

Ngakho-ke, ukukhombisa lo mehluko kuhlelo lwakho lokusebenza lwe-Laravel, ungasebenzisa InomboloFormatter ngale ndlela elandelayo:

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

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

Ungakwazi futhi ukubhala inombolo ngolimi oluthile futhi ubonise okuthile okufana nokuthi “izinkulungwane eziyikhulu namashumi amabili nantathu nekhulu namashumi amabili nantathu iphuzu elilodwa nambili”:

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

Ngaphezu kwalokho, i-NumberFormatter ikuvumela ukuthi uthole imali kalula, isibonelo:

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

Ngakho for fr uzobona ama-Euro, ngenkathi en_US imali izoba ngamadola aseMelika.

Ercole Palmeri

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.

Izihloko zakamuva

I-Veeam ifaka ukusekelwa okuphelele kakhulu kwe-ransomware, kusukela ekuvikelweni kuya ekuphenduleni nasekululameni

I-Coveware ye-Veeam izoqhubeka nokuhlinzeka ngezinsizakalo zokuphendula izigameko zokuntshontshwa kwe-inthanethi. I-Coveware izohlinzeka ngama-forensics kanye nekhono lokulungisa…

23 April 2024

Inguquko Eluhlaza Nedijithali: Indlela Ukugcinwa Okubikezelwayo Kuyiguqula Kanjani Imboni Kawoyela Negesi

Ukulungiswa okuqagelayo kuguqula umkhakha kawoyela negesi, ngendlela emisha nesebenzayo yokuphatha izitshalo.…

22 April 2024

Isilawuli se-antitrust sase-UK siphakamisa i-alamu ye-BigTech nge-GenAI

I-CMA yase-UK ikhiphe isexwayiso mayelana nokuziphatha kwe-Big Tech emakethe yezobunhloli bokwenziwa. Lapho…

18 April 2024

I-Casa Green: inguquko yamandla yekusasa elisimeme e-Italy

Isinqumo esithi "Case Green", esakhiwe yi-European Union ukuze kuthuthukiswe ukusebenza kahle kwamandla ezakhiwo, siphothule inqubo yaso yomthetho ngokuthi...

18 April 2024