Erthyglau

Canllaw cam wrth gam lleoleiddio Laravel, tiwtorial gydag enghreifftiau

Sut i leoleiddio prosiect Laravel, sut i ddatblygu prosiect yn Laravel a'i wneud yn ddefnyddiadwy mewn sawl iaith. Yn yr erthygl hon fe welwn sut i weithio gyda ffeiliau cyfieithu, creu switsiwr iaith a mwy gydag enghreifftiau.

Mae Laravel yn gymhwysiad sydd wedi'i gynllunio i fod yn lleol, i addasu i wahanol ieithoedd a diwylliannau. Mae lleoleiddio yn teilwra cymwysiadau rhyngwladol i iaith benodol trwy gyfieithu.

rhagofynion

  • Yn yr erthygl hon byddwn yn cyfeirio at fersiwn Laravel 8.x;
  • I ddilyn y tiwtorial hwn yn llwyddiannus, mae angen i chi feddu ar y wybodaeth angenrheidiol o iaith raglennu PHP a fframwaith Laravel.
  • Mae eich parth yn localhost. Os na, disodli localhost gyda'ch enw parth neu'ch cyfeiriad IP eich hun (yn dibynnu ar eich gosodiad).

Gweithio gyda ffeiliau cyfieithu

Yn Laravel, yn union fel mewn llawer o fframweithiau eraill, gallwn storio cyfieithiadau ar gyfer gwahanol ieithoedd mewn ffeiliau ar wahân. Mae dwy ffordd i drefnu ffeiliau cyfieithu Laravel:

  • Dull hŷn sy'n storio ffeiliau yn y lleoliad canlynol: resources/lang/{en,fr,ru}/{myfile.php};
  • Dull newydd sy'n storio ffeiliau yn y lleoliad canlynol: resources/lang/{fr.json, ru.json};

Ar gyfer ieithoedd sy'n amrywio yn ôl tiriogaeth, dylech eu henwi directory/file o'r iaith yn ôl ISO 15897. Er enghraifft, ar gyfer Saesneg y DU y byddech yn ei defnyddio en_GB yn lle en-gb. Yn yr erthygl hon, byddwn yn canolbwyntio ar yr ail ddull, ond mae'r un peth yn wir am y cyntaf (ac eithrio sut mae allweddi cyfieithu yn cael eu henwi a'u hadalw). 

Cyfieithiadau syml

Nawr, gadewch i ni fynd i'r resources/views/welcome.blade.phpffeil a disodli cynnwys y bodytag gyda'n un ni, felly:

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

Byddwn yn dechrau trwy baratoi ein neges croeso lleoleiddio, sy'n hawdd iawn yn Laravel. Y cyfan sy'n rhaid i chi ei wneud yw disodli'r testun “Croeso i'n gwefan” gyda'r cod canlynol: {{ __('Welcome to our website') }}. Bydd hyn yn cyfarwyddo Laravel i arddangos “Croeso i'n gwefan” yn ddiofyndefinite a chwiliwch am gyfieithiadau o'r llinyn hwn os gosodir iaith heblaw Saesneg (fe gyrhaeddwn hwnnw yn nes ymlaen). Bydd Saesneg yn cael ei gosod fel yr iaith ddiofyndefinish o'n app, felly trwy osod diofyndefiAr y diwedd byddwn yn dangos y testun “Croeso i’n gwefan”. Os yw'r locale yn wahanol, byddwn yn ceisio dod o hyd i'r cyfieithiad cyfatebol a bydd yn cael ei greu mewn eiliad.

Lleoleiddio Laravel

Ond sut mae Laravel yn gwybod pa iaith yw'r iaith gyfredol neu pa ieithoedd sydd ar gael yn y rhaglen? Mae'n gwneud hyn trwy edrych ar y cyfluniad lleol yn yr app config/app.php. Agorwch y ffeil hon a chwiliwch am y ddwy allwedd arae cysylltiadol hyn:

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

Dylai'r disgrifiadau a ddangosir uchod yr allweddi fod yn hunanesboniadol, ond yn fyr, yr allwedd locale yn cynnwys y cyn lleoldefinish o'ch cais (o leiaf, os nad oes locale arall wedi'i osod yn y cod). Ac y fallback_locale caiff ei weithredu rhag ofn y byddwn yn gosod locale nad yw'n bodoli yn ein cais.

Tra bod y ffeil hon ar agor, gadewch i ni ychwanegu allwedd newydd er hwylustod i ni gan restru'r holl leoliadau y bydd ein cais yn eu cefnogi. Byddwn yn defnyddio hwn yn ddiweddarach wrth ychwanegu switcher lleol. Fodd bynnag, mae hon yn dasg ddewisol gan nad yw Laravel yn ei gwneud yn ofynnol i ni ei gwneud.

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

Nawr mae ein cais yn cefnogi tair iaith: Saesneg, Eidaleg a Ffrangeg.

Ffeiliau cyfieithu

Nawr ein bod wedi sefydlu'r holl locales y byddwn yn gweithio gyda nhw, gallwn fynd ymlaen a symud ymlaen i gyfieithu ein neges cyn croesodefinit.

Gadewch i ni ddechrau trwy ychwanegu ffeiliau lleoleiddio newydd i'r ffolder resources/lang. Yn gyntaf, creu ffeil resources/lang/it.json ac ychwanegwch y cyfieithiadau cyfatebol, fel a ganlyn:

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

Nesaf, creu ffeil resources/lang/fr.json:

{

“Croeso i’n gwefan”: “Croeso i’n gwefan”

}

Fel y gwelwch, rydym bob amser yn cyfeirio at y neges ymlaen llawdefinito a ychwanegwyd gennym yn y ffeil welcome.blade.php (oedd {{ __('Welcome to our website') }}). Y rheswm pam nad oes rhaid i ni greu ffeil en.json mae hyn oherwydd bod Laravel eisoes yn gwybod pa negeseuon rydyn ni'n eu pasio trwy osod ymlaen llawdefigorffen yn y swyddogaeth __() maent ar gyfer ein cyn lleoldefinito en.

Newid lleol yn Laravel

Ar y pwynt hwn, nid yw Laravel yn gwybod sut i newid locales, felly am y tro, gadewch i ni wneud y cyfieithiadau yn uniongyrchol y tu mewn i'r llwybr. Addasu'r llwybr croeso cyndefinished fel y dangosir isod:

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

Gallwn nawr ymweld â'n gwefan, gan nodi unrhyw un o'r ieithoedd sydd ar gael fel y segment llwybr cyntaf: er enghraifft, localhost/rulocalhost/fr. Dylech weld y cynnwys lleol. Rhag ofn i chi nodi locale nad yw'n cael ei gynnal neu os nad ydych chi'n nodi locale o gwbl, bydd Laravel yn defnyddio enyn ddiofyndefinita.

Canolwedd

Efallai nad yw newid y locale ar gyfer pob cyswllt safle yr hyn yr ydych ei eisiau, ac efallai na fydd yn edrych mor lân yn esthetig. Dyna pam y byddwn yn gwneud y gosodiad iaith trwy switsiwr iaith arbennig ac yn defnyddio'r sesiwn defnyddiwr i arddangos y cynnwys a gyfieithwyd. Felly, creu middleware newydd y tu mewn i'r app/Http/Middleware/Localization.phpffeil neu drwy redeg 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);
    }
}

Bydd y nwyddau canol hwn yn cyfarwyddo Laravel i ddefnyddio'r locale a ddewiswyd gan y defnyddiwr os yw'r dewisiad hwn yn bresennol yn y sesiwn.

Gan fod angen i ni wneud hyn ar bob cais, mae angen i ni hefyd ei ychwanegu at y pentwr cyn nwyddau canoldefigorffen yn app/http/Kernel.phpy il webgrŵp nwyddau canol:

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

Newid cwrs

Nesaf, mae angen i ni ychwanegu llwybr i newid y locale. Rydym yn defnyddio llwybr cau, ond gallwch ddefnyddio'r un cod yn union y tu mewn i'ch rheolydd os dymunwch:

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

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

Hefyd, peidiwch ag anghofio dileu'r togl locale a ychwanegwyd yn flaenorol yn ein llwybr croesodefineis:

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

Unwaith y gwneir hyn, yr unig ffordd i'r defnyddiwr newid yr iaith a osodwyd ar hyn o bryd yw trwy fynd i mewn localhost/language/{locale}. Mae'r localebydd dewis yn cael ei storio o fewn y sesiwn a bydd yn ailgyfeirio defnyddwyr i ble y daethant (gwiriwch y Localizationllestri canol). I roi cynnig arni, ewch i localhost/language/ru(cyn belled â bod eich cwci sesiwn yn bresennol yn eich porwr) a byddwch yn gweld y cynnwys wedi'i gyfieithu. Gallwch symud o gwmpas y wefan yn rhydd neu geisio adnewyddu'r dudalen a gweld bod yr iaith a ddewiswyd yn cael ei chadw.

Y cymudwr

Nawr mae angen i ni greu rhywbeth y gall y defnyddiwr ei glicio i newid yr iaith yn lle rhoi codau lleol â llaw i'r URL. I wneud hyn, byddwn yn ychwanegu gwiriwr iaith syml iawn. Felly, creu newydd resources/views/partials/language_switcher.blade.phpffeil gyda'r cod canlynol:

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

Cynhwyswch y switsiwr sydd newydd ei greu yn y golwg "croeso":

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

Agorwch y app/Providers/AppServiceProvider.phpffeil ac ychwanegu'r cod i rannu pan fydd ein switcher iaith yn cael ei gyfansoddi. Yn benodol, byddwn yn rhannu'r locale cyfredol y gellir ei gyrchu fel ffeil {{ $current_locale }}.

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.

Opsiynau cyfieithu uwch yn PHP Laravel

Byddwn yn gweithio gyda resources/views/welcome.blade.php, felly mae'n rhaid i bopeth ddigwydd yn ein barn groeso oni nodir yn wahanol.

Paramedrau mewn llinynnau cyfieithu

Er enghraifft, gadewch i ni ddweud helo wrth ein defnyddiwr dychmygol (Amanda) yn lle dim ond arddangos neges generig:

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

Sylwch ein bod wedi defnyddio'r enw gyda'r llythyren gyntaf mewn llythrennau bach, ond y dalfan gyda'r llythyren gyntaf mewn priflythrennau. Fel hyn, gall Laravel eich helpu i gyfalafu'r gair go iawn yn awtomatig. Bydd hyn yn digwydd os bydd deiliad y lle yn dechrau gyda phrif lythyren, er enghraifft, :Nameyn cynhyrchu “Caroline” neu air wedi'i lythrennu'n llawn,  :NAME, yn cynhyrchu “CAROLINE”.

Rydym hefyd yn diweddaru ein ffeiliau cyfieithu resources/lang/fr.jsonresources/lang/it.json , oherwydd ar hyn o bryd dim ond y fersiwn Saesneg y byddwn yn ei weld yn unrhyw le gan nad yw'r bysellau cyfieithu yn cyfateb i'r cyfieithiadau.

Ffrangeg:

{

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

}

Eidaleg:

{

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

}

Plwraleiddio

I weld lluosogi ar waith, gadewch i ni ychwanegu paragraff newydd o destun. 

I berfformio plwraleiddio, rhaid i chi ddefnyddio'r ffwythiant trans_choice yn lle __(), er enghraifft:

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

Fel y gwelwch, mae ffurfiau lluosog yn cael eu gwahanu gan a |.

Nawr, beth os oes angen ffurfiau lluosog lluosog arnom? 

Mae hyn hefyd yn bosibl:

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

Yn yr achos hwn, rydym yn caniatáu niferoedd 01, a 219, ac yn olaf o 20 ymlaen. Wrth gwrs, gallwch chi ychwanegu cymaint o reolau ag sydd eu hangen arnoch chi.

Felly beth os ydym am gael y deiliaid lleoedd yn ein ffurfiau lluosog? 

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

Gallwn hefyd ddefnyddio'r cyfrif a basiwyd yn `trans_choice` os oes angen gan ddefnyddio dalfan :count arbennig:

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

Yn olaf, peidiwch ag anghofio diweddaru eich ffeiliau cyfieithu gydag unrhyw newidiadau a wnaethoch i'r cyfieithiad sylfaenol.

Eidaleg:

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

Ffrangeg:

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

Gweithio gyda dyddiadau lleol yn Laravel

I leoli dyddiadau, byddwn yn harneisio pŵer Carbon , sy'n dod gyda Laravel yn ddiofyndefinita. Edrychwch ar y Dogfennaeth carbon ; gallwch chi wneud llawer o bethau diddorol. Er enghraifft, gallwn osod ein locale gyda rheolau dyddiad ac amser.

Ar gyfer ein hesiampl syml, byddwn yn dangos y dyddiad cyfredol wedi'i leoleiddio ar gyfer yr iaith a ddewiswyd. Yn ein routes/web.php, rydym yn diweddaru llwybr y dudalen groeso ac yn trosglwyddo'r neges dyddiad lleol i'n un ni view croeso:

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

Gadewch i ni ddiweddaru resources/views/welcome.blade.php ychwanegu arddangosiad dyddiad, fel hyn:

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

Ceisio newid yr iaith ar hafan dudalen localhost, byddwn yn gweld bod y dyddiadau bellach yn lleol, er enghraifft:

Fformatio rhifau ac arian cyfred gyda NumberFormatter

Mewn gwahanol wledydd, mae pobl yn defnyddio fformatau gwahanol i gynrychioli rhifau, er enghraifft:

  • Unol Daleithiau → 123.123,12
  • Ffrainc → 123 123,12

Felly, i adlewyrchu'r gwahaniaethau hyn yn eich app Laravel, gallwch chi ei ddefnyddio Fformatiwr Rhif yn y modd canlynol:

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

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

Gallwch hefyd ysgrifennu’r rhif mewn iaith benodol ac arddangos rhywbeth fel “cant dau ddeg tri mil un cant dau ddeg tri pwynt un dau”:

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

Yn ogystal, mae NumberFormatter yn caniatáu ichi ddod o hyd i arian cyfred yn hawdd, er enghraifft:

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

Felly am fr byddwch yn gweld Euros, tra am en_US bydd yr arian cyfred mewn doler yr UD.

Ercole Palmeri

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.

Erthyglau Diweddar

Manteision Tudalennau Lliwio i Blant - byd o hud a lledrith i bob oed

Mae datblygu sgiliau echddygol manwl trwy liwio yn paratoi plant ar gyfer sgiliau mwy cymhleth fel ysgrifennu. I liwio…

2 Mai 2024

Mae'r Dyfodol Yma: Sut Mae'r Diwydiant Llongau yn Chwyldro'r Economi Fyd-eang

Mae'r sector llyngesol yn bŵer economaidd byd-eang gwirioneddol, sydd wedi llywio tuag at farchnad 150 biliwn...

1 Mai 2024

Mae cyhoeddwyr ac OpenAI yn llofnodi cytundebau i reoleiddio'r llif gwybodaeth a brosesir gan Ddeallusrwydd Artiffisial

Ddydd Llun diwethaf, cyhoeddodd y Financial Times gytundeb ag OpenAI. Mae FT yn trwyddedu ei newyddiaduraeth o safon fyd-eang…

30 2024 Ebrill

Taliadau Ar-lein: Dyma Sut Mae Gwasanaethau Ffrydio yn Gwneud ichi Dalu Am Byth

Mae miliynau o bobl yn talu am wasanaethau ffrydio, gan dalu ffioedd tanysgrifio misol. Mae’n farn gyffredin eich bod chi…

29 2024 Ebrill