Ìwé

Itọnisọna igbese-nipasẹ-igbesẹ isọdibilẹ Laravel, ikẹkọ pẹlu awọn apẹẹrẹ

Bii o ṣe le ṣe isọdi iṣẹ akanṣe Laravel kan, bii o ṣe le ṣe agbekalẹ iṣẹ akanṣe kan ni Laravel ati jẹ ki o ṣee ṣe ni awọn ede lọpọlọpọ. Ninu nkan yii a rii bii o ṣe le ṣiṣẹ pẹlu awọn faili itumọ, ṣẹda oluyipada ede ati diẹ sii pẹlu awọn apẹẹrẹ.

Laravel jẹ ohun elo ti a ṣe lati jẹ agbegbe, lati ni ibamu si ọpọlọpọ awọn ede ati awọn aṣa. Iṣalaye agbegbe ṣe awọn ohun elo agbaye si ede kan pato nipasẹ itumọ.

Prerequisites

  • Ninu nkan yii a yoo tọka si Laravel version 8.x;
  • Lati tẹle ikẹkọ yii ni aṣeyọri, o nilo lati ni imọ pataki ti ede siseto PHP ati ilana Laravel.
  • Ibugbe rẹ ni localhost. Ti kii ba ṣe bẹ, rọpo localhost pẹlu orukọ ìkápá tirẹ tabi adiresi IP (da lori fifi sori rẹ).

Nṣiṣẹ pẹlu awọn faili itumọ

Ni Laravel, gẹgẹ bi ọpọlọpọ awọn ilana miiran, a le fipamọ awọn itumọ fun awọn ede oriṣiriṣi ni awọn faili lọtọ. Awọn ọna meji lo wa lati ṣeto awọn faili itumọ Laravel:

  • Ọna agbalagba ti o tọju awọn faili ni ipo atẹle: resources/lang/{en,fr,ru}/{myfile.php};
  • Ọna tuntun ti o tọju awọn faili ni ipo atẹle: resources/lang/{fr.json, ru.json};

Fun awọn ede ti o yatọ nipasẹ agbegbe, o yẹ ki o lorukọ wọn directory/file ti ede ni ibamu si ISO 15897. Fun apẹẹrẹ, fun Gẹẹsi Gẹẹsi iwọ yoo lo en_GB dipo en-gb. Ninu àpilẹkọ yii, a yoo dojukọ ọna keji, ṣugbọn ohun kan naa n lọ fun akọkọ (ayafi bi awọn bọtini itumọ ṣe jẹ orukọ ati gba pada). 

Awọn itumọ ti o rọrun

Bayi, jẹ ki ká lọ si awọn resources/views/welcome.blade.phpfaili ki o si ropo awọn akoonu ti awọn bodyTag pẹlu tiwa, bii eyi:

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

A yoo bẹrẹ nipasẹ murasilẹ ifiranṣẹ kaabọ agbegbe wa, eyiti o rọrun gaan ni Laravel. Gbogbo ohun ti o ni lati ṣe ni rọpo ọrọ “Kaabo si oju opo wẹẹbu wa” pẹlu koodu atẹle: {{ __('Welcome to our website') }}. Eyi yoo kọ Laravel lati ṣafihan “Kaabo si oju opo wẹẹbu wa” nipasẹ aiyipadadefinita ki o wa awọn itumọ ti okun yii ti ede miiran yatọ si Gẹẹsi ti ṣeto (a yoo de iyẹn nigbamii). Gẹẹsi yoo ṣeto bi ede aiyipadadefinite ti app wa, nitorinaa nipasẹ aiyipadadefinita a yoo jiroro ni ṣafihan ọrọ naa “Kaabo si oju opo wẹẹbu wa”. Ti agbegbe ba yatọ, a yoo gbiyanju lati wa itumọ ti o baamu eyiti yoo ṣẹda ni iṣẹju kan.

Laravel isọdibilẹ

Ṣugbọn bawo ni Laravel ṣe mọ eyiti o jẹ ede lọwọlọwọ tabi awọn ede wo ni o wa ninu ohun elo naa? O ṣe eyi nipa wiwo iṣeto agbegbe ni app naa config/app.php. Ṣii faili yii ki o wa awọn bọtini itọpa alasopọ meji wọnyi:

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

Awọn apejuwe ti o han loke awọn bọtini yẹ ki o jẹ alaye ti ara ẹni, ṣugbọn ni kukuru, bọtini naa locale ni awọn Pre yaradefinite ti ohun elo rẹ (o kere ju, ti ko ba si agbegbe miiran ti a ṣeto sinu koodu). Ati awọn fallback_locale o ti mu ṣiṣẹ ni ọran ti a ṣeto agbegbe ti ko si ninu ohun elo wa.

Lakoko ti a ti ṣii faili yii, jẹ ki a ṣafikun bọtini tuntun fun atokọ irọrun wa gbogbo awọn agbegbe ti ohun elo wa yoo ṣe atilẹyin. A yoo lo eyi nigbamii nigbati o ba nfi switcher agbegbe kun. Sibẹsibẹ, eyi jẹ iṣẹ iyan nitori Laravel ko nilo wa lati ṣe.

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

Bayi ohun elo wa ṣe atilẹyin awọn ede mẹta: Gẹẹsi, Itali ati Faranse.

Awọn faili itumọ

Ni bayi ti a ti ṣeto gbogbo awọn agbegbe ti a yoo ṣiṣẹ pẹlu, a le tẹsiwaju ki a tẹsiwaju lati tumọ ifiranṣẹ itẹwọgba iṣaaju wadefinite.

Jẹ ki a bẹrẹ nipa fifi awọn faili isọdi titun kun si folda naa resources/lang. Ni akọkọ, ṣẹda faili kan resources/lang/it.json ki o si fi awọn itumọ ti o baamu kun, gẹgẹbi atẹle:

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

Nigbamii, ṣẹda faili kan resources/lang/fr.json:

{

"Kaabo si oju opo wẹẹbu wa": "Kaabo si aaye wa"

}

Bi o ti le rii, a tọka si ifiranṣẹ iṣaaju nigbagbogbodefinite ti a fi kun ni faili welcome.blade.php (eyiti o jẹ {{ __('Welcome to our website') }}). Idi ti a ko ni lati ṣẹda faili kan en.json Nitoripe Laravel ti mọ iru awọn ifiranṣẹ ti a kọja nipasẹ iṣeto-tẹlẹdefipari pẹlu iṣẹ naa __() wọn wa fun iṣaaju agbegbe wadefinito en.

Iyipada agbegbe ni Laravel

Ni aaye yii, Laravel ko mọ bi o ṣe le yi agbegbe pada, nitorinaa fun bayi a ṣe awọn itumọ taara laarin ọna naa. Ṣatunkọ ṣaaju kaabo onadefipari bi a ṣe han ni isalẹ:

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

A le ṣabẹwo si oju opo wẹẹbu wa bayi, ni pato eyikeyi awọn ede ti o wa bi apakan ọna akọkọ: fun apẹẹrẹ, localhost/rulocalhost/fr. O yẹ ki o wo akoonu agbegbe. Ni ọran ti o pato agbegbe ti ko ṣe atilẹyin tabi ko ṣe pato agbegbe kan rara, Laravel yoo lo ennipa aiyipada etodefinita.

Agbedemeji

Yiyipada agbegbe fun ọna asopọ aaye kọọkan le ma jẹ ohun ti o fẹ, ati pe o le ma dabi mimọ ni ẹwa. Iyẹn ni idi ti a yoo ṣe eto ede nipasẹ oluyipada ede pataki kan ati lo igba olumulo lati ṣafihan akoonu ti a tumọ. Nitorina, ṣẹda titun middleware inu awọn app/Http/Middleware/Localization.phpfaili tabi nipa nṣiṣẹ 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);
    }
}

Aarin ẹrọ yii yoo kọ Laravel lati lo agbegbe ti a yan olumulo ti yiyan yii ba wa ni igba.

Niwọn igba ti a nilo iṣẹ ṣiṣe yii lati ṣe lori gbogbo ibeere, a tun nilo lati ṣafikun si akopọ agbedemeji iṣaajudefinished ni app/http/Kernel.phpper il webẸgbẹ agbedemeji:

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

Yi dajudaju

Nigbamii, a nilo lati ṣafikun ọna kan lati yi agbegbe pada. A n lo ọna pipade, ṣugbọn o le lo koodu kanna gangan ninu oludari rẹ ti o ba fẹ:

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

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

Paapaa, maṣe gbagbe lati yọ toggle agbegbe ti a ṣafikun tẹlẹ ni ọna itẹwọgba iṣaaju wadefinito:

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

Ni kete ti eyi ba ti ṣe, ọna kan ṣoṣo fun olumulo lati yi ede ti a ṣeto lọwọlọwọ pada jẹ nipa titẹ sii localhost/language/{locale}. Awọn localeyiyan yoo wa ni ipamọ laarin igba ati pe yoo ṣe atunṣe awọn olumulo si ibiti wọn ti wa (ṣayẹwo awọn Localizationmiddleware). Lati gbiyanju, lọ si localhost/language/ru(niwọn igba ti kuki igba rẹ ba wa ninu ẹrọ aṣawakiri rẹ) ati pe iwọ yoo rii akoonu ti a tumọ. O le lọ yika oju opo wẹẹbu larọwọto tabi gbiyanju lati sọ oju-iwe naa sọ ki o rii pe ede ti o yan ti wa ni fipamọ.

Oluyipada naa

Bayi a nilo lati ṣẹda nkan ti olumulo le tẹ lati yi ede pada dipo titẹ awọn koodu agbegbe pẹlu ọwọ sinu URL. Lati ṣe eyi, a yoo ṣafikun oluṣayẹwo ede ti o rọrun pupọ. Nitorina, ṣẹda titun kan resources/views/partials/language_switcher.blade.phpfaili pẹlu koodu atẹle:

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

Fi switcher tuntun ti a ṣẹda sinu wiwo “kaabo”:

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

Ṣii awọn app/Providers/AppServiceProvider.phpfaili ki o ṣafikun koodu lati pin nigbati oluyipada ede wa yoo kọ. Ni pataki, a yoo pin agbegbe lọwọlọwọ ti o le wọle si bi faili kan {{ $current_locale }}.

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Awọn aṣayan itumọ ti ilọsiwaju ni PHP Laravel

A yoo ṣiṣẹ pẹlu akọkọ resources/views/welcome.blade.php, ki ohun gbogbo gbọdọ ṣẹlẹ ni wa kaabo wiwo ayafi ti bibẹkọ ti pato.

Awọn paramita ni awọn gbolohun ọrọ itumọ

Fun apẹẹrẹ, jẹ ki a sọ kabọ si olumulo airotẹlẹ wa (Amanda) dipo ti o kan ṣafihan ifiranṣẹ jeneriki kan:

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

Ṣe akiyesi pe a lo orukọ pẹlu lẹta akọkọ ni kekere, ṣugbọn ibi ti o ni lẹta akọkọ ni awọn lẹta nla. Ni ọna yii, Laravel le ṣe iranlọwọ fun ọ lati ṣe titobi ọrọ gangan. Eyi yoo ṣẹlẹ ti aaye ba bẹrẹ pẹlu lẹta nla, fun apẹẹrẹ, :Namegbejade "Caroline" tabi ọrọ ti o ni kikun,  :NAME, gbejade "CAROLINE".

A tun ṣe imudojuiwọn awọn faili itumọ wa resources/lang/fr.jsonresources/lang/it.json , bi ni akoko a yoo nikan ri awọn English version nibikibi bi awọn bọtini translation ko baramu awọn ogbufọ.

Faranse:

{

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

}

Ede Italia:

{

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

}

Pluralization

Lati wo pipọ ni iṣe, jẹ ki a ṣafikun paragirafi tuntun ti ọrọ. 

Lati ṣe pipọ, o gbọdọ lo iṣẹ naa trans_choice dipo __(), fun apere:

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

Bi o ṣe le rii, awọn fọọmu pupọ ti pin nipasẹ a |.

Bayi, kini ti a ba nilo ọpọlọpọ awọn fọọmu pupọ? 

Eyi tun ṣee ṣe:

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

Ni idi eyi, a gba awọn nọmba 01, ati lati 219, ati nipari lati 20 siwaju. Nitoribẹẹ, o le ṣafikun awọn ofin pupọ bi o ṣe nilo.

Nitorina kini ti a ba fẹ awọn oniduro ni awọn fọọmu pupọ wa? 

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

A tun le lo iye ti o kọja ni `trans_choice` ti o ba nilo ni lilo ibi ipamọ kan :count pataki:

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

Nikẹhin, maṣe gbagbe lati ṣe imudojuiwọn awọn faili itumọ rẹ pẹlu eyikeyi awọn ayipada ti o ṣe si itumọ ipilẹ.

Ede Italia:

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

Faranse:

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

Nṣiṣẹ pẹlu awọn ọjọ agbegbe ni Laravel

Lati wa awọn ọjọ, a yoo lo agbara ti erogba , eyiti o wa pẹlu Laravel nipasẹ aiyipadadefinita. Ṣayẹwo jade awọn Erogba iwe aṣẹ ; o le ṣe kan pupo ti awon ohun. Fun apẹẹrẹ, a le ṣeto agbegbe wa pẹlu awọn ofin ọjọ ati akoko.

Fun apẹẹrẹ wa ti o rọrun, a yoo ṣe afihan ọjọ lọwọlọwọ ti o wa ni agbegbe fun ede ti a yan. Ninu wa routes/web.php, a ṣe imudojuiwọn ọna oju-iwe itẹwọgba ati firanṣẹ ifiranṣẹ ọjọ agbegbe si tiwa view kaabo:

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

Jẹ ki a ṣe imudojuiwọn resources/views/welcome.blade.php fifi ọjọ han, bii bẹ:

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

Gbiyanju lati yi ede pada lori oju-iwe ile ti localhost, a yoo rii pe awọn ọjọ ti wa ni agbegbe ni bayi, fun apẹẹrẹ:

Awọn nọmba kika ati awọn owo nina pẹlu NumberFormatter

Ni awọn orilẹ-ede oriṣiriṣi, awọn eniyan lo awọn ọna kika oriṣiriṣi lati ṣe aṣoju awọn nọmba, fun apẹẹrẹ:

  • Orilẹ Amẹrika → 123.123,12
  • Faranse → 123 123,12

Nitorinaa, lati ṣe afihan awọn iyatọ wọnyi ninu ohun elo Laravel rẹ, o le lo NọmbaFormatter ni ọna wọnyi:

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

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

O tun le kọ nọmba naa ni ede kan pato ki o ṣe afihan ohun kan bi “ọgọfa o le ẹgbẹrun lọna mẹtalelọgbọn ojuami ọkan meji”:

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

Ni afikun, NumberFormatter gba ọ laaye lati wa awọn owo nina ni irọrun, fun apẹẹrẹ:

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

Nitorina fun fr o yoo ri Euro, nigba ti fun en_US owo naa yoo wa ni awọn dọla AMẸRIKA.

Ercole Palmeri

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Awọn iwe ti o ṣẹṣẹ

Ojo iwaju wa Nibi: Bawo ni Ile-iṣẹ Sowo ti n ṣe Iyika Eto-ọrọ Agbaye

Ẹka ọgagun jẹ agbara eto-aje agbaye ni otitọ, eyiti o ti lọ kiri si ọja 150 bilionu kan…

1 May 2024

Awọn olutẹwe ati OpenAI fowo si awọn adehun lati ṣe ilana ṣiṣan ti alaye ti a ṣe ilana nipasẹ Imọran Artificial

Ni ọjọ Aarọ to kọja, Awọn akoko Iṣowo kede adehun kan pẹlu OpenAI. FT ṣe iwe-aṣẹ iwe-akọọlẹ agbaye rẹ…

30 Kẹrin 2024

Awọn sisanwo ori ayelujara: Eyi ni Bii Awọn iṣẹ ṣiṣanwọle jẹ ki o sanwo lailai

Awọn miliọnu eniyan sanwo fun awọn iṣẹ ṣiṣanwọle, san awọn idiyele ṣiṣe alabapin oṣooṣu. O jẹ ero ti o wọpọ pe o…

29 Kẹrin 2024

Veeam ṣe ẹya atilẹyin okeerẹ julọ fun ransomware, lati aabo si esi ati imularada

Coveware nipasẹ Veeam yoo tẹsiwaju lati pese awọn iṣẹ esi iṣẹlẹ ikọlu cyber. Coveware yoo funni ni awọn oniwadi ati awọn agbara atunṣe…

23 Kẹrin 2024