Zimanî babet

Rêbernameya gav-bi-gav herêmîkirina Laravel, tutorial bi mînakan

Meriv çawa projeyek Laravel herêmî dike, meriv çawa di Laravel de projeyek pêş dixe û di pir zimanan de bikar tîne. Di vê gotarê de em dibînin ka meriv çawa bi pelên werger re dixebitin, veguherînerek zimanî û hêj bêtir bi mînakan re çêbikin.

Laravel serîlêdanek e ku ji bo herêmî be, ku bi ziman û çandên cihêreng veguhezîne hatî çêkirin. Herêmîkirin bi wergerandinê serîlêdanên navneteweyîkirî li zimanek taybetî diguncîne.

mercên

  • Di vê gotarê de em ê behsa xwe bikin Guhertoya Laravel 8.x;
  • Ji bo ku hûn vê tutorialê bi serfirazî bişopînin, hûn hewce ne ku di derheqê zimanê bernamenûsê PHP û çarçoweya Laravel de zanîna pêwîst hebe.
  • Domana we ye localhost. Heke ne, veguherînin localhost bi navê domaina xwe an navnîşana IP-ya xwe (li gorî sazkirina we ve girêdayî ye).

Bi pelên wergerê re dixebitin

Di Laravel de, mîna gelek çarçoveyên din, em dikarin wergerên ji bo zimanên cihê di pelên cihê de hilînin. Du awayên organîzekirina pelên wergera Laravel hene:

  • Nêzîkatiyek kevntir ku pelan li cîhê jêrîn hilîne: resources/lang/{en,fr,ru}/{myfile.php};
  • Nêzîkatiyek nû ku pelan li cîhê jêrîn hilîne: resources/lang/{fr.json, ru.json};

Ji bo zimanên ku li gorî herêmê ji hev cihê dibin, divê hûn wan nav bikin directory/file ji zimên li gor ISO 15897. Bo nimûne, ji bo UK English hûn dê bi kar tînin en_GB di şona en-gb. Di vê gotarê de, em ê bala xwe bidin ser nêzîkatiya duyemîn, lê heman tişt ji bo ya yekem jî derbas dibe (ji xeynî ku bilêtên werger çawa têne binavkirin û wergirtin). 

Wergerên hêsan

Niha, em herin ser resources/views/welcome.blade.phppelê bikin û li şûna naverokê bodybi ya me etîket bikin, bi vî rengî:

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

Em ê dest bi amadekirina peyama xweya xêrhatina herêmîbûnê bikin, ku di Laravel de bi rastî hêsan e. Tiştê ku hûn bikin ev e ku nivîsa "Bi xêr hatî malpera me" koda jêrîn biguhezînin: {{ __('Welcome to our website') }}. Ev ê talîmat bide Laravel ku ji hêla xwerû ve "Bi xêr hatî malpera me" nîşan bidedefinita û li wergerên vê rêzê bigerin ger zimanek ji bilî Englishngilîzî were danîn (em ê paşê bigihîjin wê). Îngilîzî dê wekî zimanê bingehîn were destnîşan kirindefinite ya sepana me, ji ber vê yekê bi xwerûdefinita em ê bi tenê nivîsa "Bi xêr hatî malpera me" nîşan bidin. Ger cihek cihêreng be, em ê hewl bidin ku li wergera têkildar a ku dê di kêliyekê de were afirandin bigerin.

Herêmîkirina Laravel

Lê Laravel çawa dizane ku kîjan zimanê heyî ye an kîjan ziman di serîlêdanê de hene? Ew vê yekê bi dîtina veavakirina herêmî ya di sepanê de dike config/app.php. Vê pelê vekin û li van her du bişkojkên array hevgirtî bigerin:

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

Danasînên ku li jor kilîtan têne xuyang kirin divê bixwe raveker bin, lê bi kurtî, kilît locale jûreya pêşîn heyedefinite ya serîlêdana we (kêm nebe, heke cîhek din di kodê de nehatiye danîn). Û ya fallback_locale heke em di serîlêdana xwe de cîhek neheyî destnîşan bikin ew tê çalak kirin.

Dema ku me ev pel vekirî ye, bila ji bo rehetiya xwe mifteyek nû lê zêde bike ku hemî deverên ku serlêdana me dê piştgirî bike navnîş bike. Em ê paşê dema ku veguherînerek herêmî lê zêde bikin vê yekê bikar bînin. Lêbelê, ev karekî vebijarkî ye ji ber ku Laravel ne hewce ye ku em wiya bikin.

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

Naha serlêdana me sê zimanan piştgirî dike: Îngilîzî, Îtalî û Frensî.

Pelên werger

Naha ku me hemî deverên ku em ê bi wan re bixebitin ava kirine, em dikarin pêş de biçin û berbi wergerandina peyama xweya pêşwaziyê bigerin.definite.

Ka em bi lê zêdekirina pelên herêmîbûnê yên nû li peldankê dest pê bikin resources/lang. Pêşîn, pelek çêbikin resources/lang/it.json û wergerên têkildar lê zêde bike, wekî jêrîn:

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

Piştre, pelek çêbikin resources/lang/fr.json:

{

"Bi xêr hatî malpera me": "Bi xêr hatî malpera me"

}

Wekî ku hûn dibînin, em her gav behsa peyama pêşîn dikindefinite ku me li pelê zêde kir welcome.blade.php (Kîjan bu {{ __('Welcome to our website') }}). Sedema ku em neçar in ku pelek çêbikin en.json Ji ber ku Laravel jixwe dizane kîjan peyaman em bi pêş-sazkirinê re derbas dikindefibi fonksiyonê qediya __() ew ji bo pêşiyê me yên herêmî nedefinito en.

Guhertina herêmî li Laravel

Di vê nuqteyê de, Laravel nizane ku meriv çawa herêmî biguhezîne, ji ber vê yekê heya niha em wergeran rasterast di nav rê de dikin. Rêya pêşwaziyê biguherînedefiqedandin wek ku li jêr tê nîşandan:

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

Naha em dikarin serdana malpera xwe bikin, yek ji zimanên berdest wekî beşa riya yekem diyar bikin: mînak, localhost/rulocalhost/fr. Divê hûn naveroka herêmî bibînin. Ger hûn herêmek nepiştgirî diyar bikin an bi tevahî herêmek diyar nekin, Laravel dê bikar bîne enbi mîhengê xwerûdefinita.

Middleware

Guhertina herêmî ya ji bo her girêdana malperê dibe ku ne ya ku hûn dixwazin be, û dibe ku ew ji hêla estetîk ve ew qas paqij xuya neke. Ji ber vê yekê em ê mîhenga ziman bi navgînek veguhezkarek zimanî ya taybetî bikin û rûniştina bikarhêner bikar bînin da ku naveroka werger nîşan bidin. Ji ber vê yekê, navgînek nû di hundurê de biafirînin app/Http/Middleware/Localization.phppelê an bi xebitandinê 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);
    }
}

Vê navgîniyê dê Laravel talîmat bide ku ger ev hilbijartî di danişînê de hebe, herêmîya hilbijartî ya bikarhêner bikar bîne.

Ji ber ku em hewce ne ku ev operasyon li ser her daxwazê ​​were kirin, em jî hewce ne ku wê li stûna pêş-navgînê zêde bikindefide niştecih kirin app/http/Kernel.phpper il webkoma navîn:

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

Kurs biguherînin

Dûv re, pêdivî ye ku em rêyek zêde bikin da ku deverê biguhezînin. Em rêyek girtinê bikar tînin, lê heke hûn bixwazin hûn dikarin tam heman kodê di hundurê kontrola xwe de bikar bînin:

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

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

Di heman demê de, ji bîr nekin ku veguheztina herêmî ya ku berê di rêça meya pêşwaziyê de hatî zêdekirin jêbirindefinite:

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

Piştî ku ev yek hat kirin, yekane awayê ku bikarhêner zimanê ku niha hatî saz kirin biguhezîne bi têketinê ye localhost/language/{locale}. Ew localeHilbijartin dê di nav danişînê de were hilanîn û dê bikarhêneran beralî bike cihê ku ew jê hatine (kontrol bikin Localizationnavgîn). Ji bo ku wê biceribînin, biçin localhost/language/ru(heta ku cookie ya danişîna we di geroka we de hebe) û hûn ê naveroka wergerandinê bibînin. Hûn dikarin bi serbestî li dora malperê bigerin an jî hewl bidin ku rûpelê nûve bikin û bibînin ku zimanê hilbijartî tê parastin.

The commutator

Naha pêdivî ye ku em tiştek biafirînin ku bikarhêner bikaribe bikirtîne da ku ziman biguhezîne li şûna ku bi destan kodên herêmî têxe nav URL-ê. Ji bo vê yekê, em ê kontrolkerek zimanek pir hêsan lê zêde bikin. Ji ber vê yekê, nû çêbikin resources/views/partials/language_switcher.blade.phppelê bi koda jêrîn:

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

Guhestina ku nû hatî afirandin di dîtina "bi xêrhatiniyê" de têxe:

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

Vekin app/Providers/AppServiceProvider.phppelê bikin û kodê lê zêde bikin ku dema ku guhêrbara zimanê me were çêkirin parve bikin. Bi taybetî, em ê devera heyî ya ku wekî pelek tê gihîştin parve bikin {{ $current_locale }}.

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.

Vebijarkên wergera pêşkeftî di PHP Laravel de

Em ê bi giranî bi hev re bixebitin resources/views/welcome.blade.php, ji ber vê yekê divê her tişt di dîtina meya xêrxwaziyê de biqewime heya ku wekî din neyê destnîşankirin.

Parametreyên di rêzikên wergerê de

Mînakî, bila em ji bikarhênerê xwe yê xeyalî (Amanda) re silav bikin li şûna ku tenê peyamek gelemperî nîşan bidin:

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

Bala xwe bidinê ku me nav bi tîpa yekem bi tîpên piçûk, lê cîhgira bi tîpa yekem bi tîpên mezin bikar anî. Bi vî rengî, Laravel dikare ji we re bibe alîkar ku hûn bixweber peyva rastîn sermaye bikin. Ev ê bibe heke cîhgir bi tîpek mezin dest pê bike, mînakî, :Name"Caroline" an peyvek bi tevahî sermayeyî çêdike,  :NAME, "CAROLINE" hilberîne.

Em dosyayên xwe yên wergerê jî nûjen dikin resources/lang/fr.jsonresources/lang/it.json , ji ber ku niha em ê tenê guhertoya îngilîzî li her derê bibînin ji ber ku bişkojkên wergerê bi wergeran re hev nagirin.

Fransî:

{

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

}

Îtalî:

{

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

}

Pirrbûn

Ji bo dîtina pirjimariyê di çalakiyê de, bila paragrafek nû ya nivîsê lê zêde bike. 

Ji bo pêkanîna pirjimariyê, divê hûn fonksiyonê bikar bînin trans_choice di şona __(), bo nimûne:

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

Wekî ku hûn dibînin, formên pirjimar bi a-yê têne veqetandin |.

Naha, heke ji me re pir formên pirjimar hewce ne? 

Ev jî gengaz e:

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

Di vê rewşê de, em destûr didin hejmaran 01, û ji 219, û di dawiyê de ji 20 û pê ve. Bê guman, hûn dikarin qaîdeyên ku hûn hewce ne zêde bikin.

Ji ber vê yekê heke em cîhgiran di formên xwe yên pirjimar de bixwazin? 

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

Ger hewce be bi karanîna cîhgirek em dikarin jimareya ku di `trans_hilbijartina` de derbas bûye jî bikar bînin :count taybetî:

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

Di dawiyê de, ji bîr nekin ku hûn pelên wergera xwe bi her guhertinên ku we di wergera bingehîn de kirine nûve bikin.

Îtalî:

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

Fransî:

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

Li Laravel bi tarîxên herêmî re dixebitin

Ji bo peydakirina tarîxan, em ê hêza xwe bi kar bînin Karbonat , ku bi xwerû bi Laravel re têdefinita. Binêre Belgekirina karbonê ; hûn dikarin gelek tiştên balkêş bikin. Mînakî, em dikarin cîhê xwe bi qaîdeyên tarîx û demjimêrê saz bikin.

Ji bo nimûneya meya hêsan, em ê dîroka heyî ya ku ji bo zimanê hilbijartî hatî herêmî destnîşan bikin. Di me de routes/web.php, em riya rûpela xêrxwaziyê nûve dikin û peyama tarîxa herêmî digihînin ya xwe view Bi xêr hatî:

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

Werin em nûve bikin resources/views/welcome.blade.php lê zêdekirina nîşana tarîxê, mîna:

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

Hewl didin ku zimanê li ser rûpela malê ya biguherînin localhost, em ê bibînin ku tarîx nuha herêmî bûne, mînakî:

Bi NumberFormatter re jimare û diravan form bikin

Li welatên cihê, mirov formên cihêreng bikar tînin da ku hejmaran temsîl bikin, mînak:

  • Dewletên Yekbûyî → 123.123,12
  • Fransa → 123 123,12

Ji ber vê yekê, ji bo ku hûn van cûdahiyan di sepana xweya Laravel de nîşan bidin, hûn dikarin bikar bînin NumberFormatter bi awayê jêrîn:

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

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

Her weha hûn dikarin hejmarê bi zimanek taybetî binivîsin û tiştek wekî "sed bîst û sê hezar û sed û bîst û sê xal yek du" nîşan bidin:

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

Digel vê yekê, NumberFormatter dihêle hûn bi hêsanî diravan bibînin, mînakî:

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

Ji ber vê yekê ji bo fr hûn ê Euro bibînin, dema ku ji bo en_US pereyê wê bi dolarê Amerîkî be.

Ercole Palmeri

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.

Gotarên dawî

Zehmetiya çêkirî ya nû ya Google dikare DNA, RNA û "hemû molekulên jiyanê" model bike.

Google DeepMind guhertoyek çêtir a modela xweya îstîxbarata sûnî destnîşan dike. Modela nû ya pêşkeftî ne tenê peyda dike…

9 May 2024

Vekolîna Mîmariya Modular a Laravel

Laravel, bi hevoksaziya xweşik û taybetmendiyên xwe yên hêzdar navdar e, di heman demê de bingehek zexm ji bo mîmariya modular peyda dike. Va…

9 May 2024

Cisco Hypershield û bidestxistina Splunk Serdema nû ya ewlehiyê dest pê dike

Cisco û Splunk ji xerîdaran re dibin alîkar ku rêwîtiya xwe berbi Navenda Operasyonên Ewlekariyê (SOC) ya pêşerojê bi…

8 May 2024

Ji bilî aliyê aborî: lêçûna ne diyar a ransomware

Ransomware di van du salên dawî de li ser nûçeyan serdest e. Pir kes baş dizanin ku êrîş…

6 May 2024

Destwerdana nûjen di Rastiya Zêdekirî de, bi temaşevanek Apple re li Polyclinic Catania

Operasyonek ophthalmoplasty bi karanîna temaşekera bazirganî ya Apple Vision Pro li Polyclinic Catania hate kirin…

3 May 2024

Feydeyên Rûpelên Rengdêr ji bo Zarokan - cîhanek sêrbaz ji bo her temenî

Pêşxistina jêhatîbûnên motorê yên xweş bi rêya rengînkirinê zarokan ji hunerên tevlihevtir ên mîna nivîsandinê re amade dike. Reng kirin…

2 May 2024

Pêşeroj li vir e: Pîşesaziya Keştiyê Çawa Şoreşa Aboriya Gerdûnî diafirîne

Sektora deryayî hêzek aborî ya cîhanî ya rastîn e, ku ber bi bazarek 150 mîlyar ve çûye…

1 May 2024

Weşanxane û OpenAI peymanan îmze dikin da ku herikîna agahdariya ku ji hêla îstîxbarata hunerî ve hatî hilberandin birêkûpêk bikin.

Duşemiya borî, Financial Times peymanek bi OpenAI re ragihand. FT destûr dide rojnamegeriya xwe ya cîhanî…

30 Nîsana 2024