Articles

Stiùireadh ceum air cheum sgìreachadh Laravel, oideachadh le eisimpleirean

Mar a nì thu pròiseact Laravel gu h-ionadail, mar a leasaicheas tu pròiseact ann an Laravel agus mar as urrainn dhut a chleachdadh ann an grunn chànanan.

San artaigil seo chì sinn mar as urrainn dhut faidhlichean eadar-theangachaidh a ghnàthachadh, taghadh cànain a chruthachadh, agus barrachd le eisimpleirean.

Is e aplacaid a th’ ann an Laravel a chaidh a dhealbhadh gus a bhith ionadail, gus atharrachadh gu diofar chànanan is chultaran. An sin ionadail atharraich tagraidhean eadar-nàiseanta gu cànan sònraichte tro eadar-theangachadh.

Prerequisites

  • San artaigil seo bheir sinn iomradh Laravel dreach 8.x;
  • Gus an oideachadh seo a leantainn gu soirbheachail, feumaidh an eòlas riatanach a bhith agad air cànan prògramadh PHP agus frèam Laravel.
  • Tha an àrainn agad localhost. Mura h-eil, cuir na àite localhost leis an ainm fearainn no an seòladh IP agad fhèin (a rèir an stàlaidh agad).

Ag obair le faidhlichean eadar-theangachaidh

Ann an Laravel, dìreach mar ann an iomadh frèam eile, is urrainn dhuinn eadar-theangachaidhean airson diofar chànanan a stòradh ann am faidhlichean fa leth. Tha dà dhòigh air faidhlichean eadar-theangachaidh Laravel a chuir air dòigh:

  • Dòigh-obrach nas sine a bhios a’ stòradh fhaidhlichean san àite a leanas: resources/lang/{en,fr,ru}/{myfile.php};
  • Dòigh-obrach ùr a bhios a’ stòradh fhaidhlichean san àite a leanas: resources/lang/{fr.json, ru.json};

Airson cànanan a tha eadar-dhealaichte a rèir sgìre, bu chòir dhut an ainmeachadh directory/file den chànan a rèir ISO 15897. Mar eisimpleir, airson Beurla na RA a bhiodh tu a’ cleachdadh en_GB An àite en-gb. San artaigil seo, cuiridh sinn fòcas air an dàrna dòigh-obrach, ach tha an aon rud a 'dol airson a' chiad fhear (ach a-mhàin mar a tha iuchraichean eadar-theangachaidh air an ainmeachadh agus air an toirt air ais). 

Eadar-theangachaidhean sìmplidh

Nì sinn sgrùdadh air an fhaidhle resources/views/welcome.blade.php agus cuir an àite susbaint an taga body leinn, mar so :

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

Tòisichidh sinn le bhith ag ullachadh ar teachdaireachd fàilte ionadail, a tha gu math furasta ann an Laravel. Chan eil agad ach an còd a leanas a chuir an àite an teacsa “Fàilte chun làrach-lìn againn”: {{ __('Welcome to our website') }}. Bheir seo stiùireadh do Laravel “Fàilte chun làrach-lìn againn” a thaisbeanadh gu bunaiteachdefiagus coimhead airson eadar-theangachaidhean den t-sreath seo ma tha cànan eile seach Beurla air a shuidheachadh (gheibh sinn sin nas fhaide air adhart). Thèid Beurla a shuidheachadh mar an cànan bunaiteachdefinish den app againn, mar sin le suidheachadh bunaiteachdefinita seallaidh sinn dìreach an teacsa “Fàilte don làrach-lìn againn”. Ma tha an sgìreachadh eadar-dhealaichte, feuchaidh sinn ris an eadar-theangachadh co-fhreagarrach a lorg a thèid a chruthachadh ann am mionaid.

Ionadail Laravel

Ach ciamar a tha fios aig Laravel dè an cànan a th’ ann an-dràsta no dè na cànanan a tha rim faighinn san tagradh? 

Bidh e a’ dèanamh seo le bhith a’ suidheachadh an rèiteachadh ionadail san aplacaid config/app.php. Fosglaidh sinn am faidhle seo agus coimhead airson fiosrachadh anns a’ mhaitris cheangail:

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

Na tuairisgeulan a tha air thoiseach air sònrachadh iuchraichean locale e fallback_locale tha iad fèin-mhìneachaidh. Co-dhiù, an iuchair locale a’ toirt a-steach ro-ionadachadhdefinite den iarrtas agad (co-dhiù, mura h-eil duine eile locale air a shuidheachadh sa chòd). Agus an fallback_locale air a ghnìomhachadh ma shuidhicheas sinn a locale nach eil ann san tagradh againn.

Fhad 's a tha am faidhle seo againn fosgailte, cuiridh sinn an iuchair ùr 'available_locales' airson ar goireasachd, a’ liostadh a h-uile sgìre a bheir an tagradh againn taic. Cleachdaidh sinn seo nas fhaide air adhart nuair a chuireas sinn switcher ionadail ris. Ach, is e gnìomh roghainneil a tha seo leis nach eil Laravel ag iarraidh oirnn a dhèanamh.

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

A-nis tha an tagradh againn a’ toirt taic do thrì cànanan: Beurla, Eadailtis agus Fraingis.

Faidhlichean eadar-theangachaidh

A-nis gu bheil sinn air a h-uile sgìre a stèidheachadh leis am bi sinn ag obair, faodaidh sinn gluasad air adhart, a’ gnàthachadh eadar-theangachadh ar teachdaireachd fàilte ro làimh.definith.

Feuch an tòisich sinn le bhith a’ cur fhaidhlichean ionadail ùra ris a’ phasgan resources/lang. Bidh sinn an uairsin a’ cruthachadh am faidhle resources/lang/it.json agus cuir ris na h-eadar-theangachaidhean co-fhreagarrach, mar a leanas:

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

Mar sin, cruthaichidh sinn am faidhle resources/lang/fr.json:

{

“Fàilte don làrach-lìn againn”: “Fàilte don làrach-lìn againn”

}

Mar a chì thu, bidh sinn an-còmhnaidh a’ toirt iomradh air an teachdaireachd ro-làimhdefinito a chuir sinn ris san fhaidhle welcome.blade.php (a bha {{ __('Welcome to our website') }}). Is e an adhbhar nach fheum sinn faidhle a chruthachadh en.json tha seo air sgàth gu bheil fios aig Laravel mu thràth dè na teachdaireachdan a thèid sinn seachad le ro-shuidheachadhdefiair a chrìochnachadh aig an tachartas __() tha iad airson ar pre ionadaildefinito en.

Ag atharrachadh sgìreachadh ann an Laravel

Aig an ìre seo, chan eil fios aig Laravel mar a dh’ atharraicheas sinn sgìreachadh, agus mar sin airson a-nis bidh sinn a’ dèanamh na h-eadar-theangachaidhean gu dìreach taobh a-staigh na slighe. Deasaich an t-slighe ro-fhàiltedefisuidhichte mar a chithear gu h-ìosal:

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

Faodaidh sinn a-nis tadhal air an làrach-lìn againn, a’ sònrachadh gin de na cànanan a tha rim faighinn mar a’ chiad earrann slighe: mar eisimpleir, localhost/itlocalhost/fr. Bu chòir dhut susbaint ionadail fhaicinn. Air eagal ‘s gun sònraich thu locale gun taic no nach sònraich thu locale idir, cleachdaidh Laravel en a ghnàthdefinita.

Middleware

Is dòcha nach bi e nas fheàrr àiteachan atharrachadh airson gach ceangal làraich, agus is dòcha nach bi iad a’ coimhead cho glan a thaobh bòidhchead. Sin as coireach gun dèan sinn an suidheachadh cànain tro switcher cànain sònraichte agus cleachdaidh sinn an seisean cleachdaiche gus an susbaint eadar-theangaichte a thaisbeanadh. 

Gus seo a dhèanamh tha sinn a’ dol a chruthachadh fear ùr middleware, agus canaidh sinn e app/Http/Middleware/Localization.php, a 'ruith na loidhne-àithne artisan make:middleware Localization.

Às deidh dhuinn an àithne a chuir an gnìomh, fosgladh am faidhle Localization.php, chì sinn am faidhle defiNation den chlas Ionadail:

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

Bheir am bathar-meadhain seo stiùireadh do Laravel an locale taghte cleachdaiche a chleachdadh ma tha an taghadh seo an làthair san t-seisean.

Leis gu feum sinn an obair seo a dhèanamh air a h-uile iarrtas, feumaidh sinn a chuir ris a’ chruach ro-mheadhanach cuideachddefichrìochnaich ann an app/http/Kernel.php agus gu h-àraidh anns an raon cheangail $middlewareGroups:

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

Atharraich an route

An ath rud, feumaidh sinn slighe a chuir ris gus an locale atharrachadh. Tha sinn a’ cleachdadh slighe dùnaidh, ach faodaidh tu an aon chòd a chleachdadh taobh a-staigh do rianadair ma thogras tu:

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

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

Cuideachd, na dìochuimhnich an toggle locale a chaidh a chur ris roimhe seo air an t-slighe ro-fhàilte againn a thoirt air falbhdefinite:

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

Aon uair ‘s gu bheil seo air a dhèanamh, is e an aon dòigh anns am faod an neach-cleachdaidh an cànan a tha stèidhichte an-dràsta atharrachadh le bhith a’ dol a-steach localhost/language/{locale}. An taghadh locale thèid a stòradh taobh a-staigh an t-seisein agus bheir e ath-stiùireadh do luchd-cleachdaidh air ais chun àite às an tàinig iad (thoir sùil air a’ bhathar-meadhain Localization). Gus feuchainn air, rachaibh gu localhost/language/ru (cho fad 's a tha do bhriosgaid seisean an làthair sa bhrobhsair agad) agus chì thu an t-susbaint eadar-theangaichte. Faodaidh tu gluasad timcheall an làrach-lìn gu saor no feuchainn ris an duilleag ùrachadh agus faicinn gu bheil an cànan taghte glèidhte.

An commutator

A-nis feumaidh sinn rudeigin a chruthachadh as urrainn don neach-cleachdaidh cliogadh gus an cànan atharrachadh an àite a bhith a’ cuir a-steach còdan locale a-steach don URL le làimh. Gus seo a dhèanamh, cuiridh sinn sgrùdadh cànain gu math sìmplidh ris. Mar sin, cruthaichidh sinn faidhle ùr resources/views/partials/language_switcher.blade.php leis a’ chòd a leanas:

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

Cuir a-steach an switcher a chaidh a chruthachadh às ùr san t-sealladh “fàilte”:

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.
<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>

Fosgail am faidhle app/Providers/AppServiceProvider.php agus cuir ris a’ chòd airson a roinn nuair a bhios an switcher cànain againn gnìomhach. Gu sònraichte, roinnidh sinn na roghainnean locale gnàthach a gheibhear thuige mar fhaidhle {{ $current_locale }}.

Roghainnean eadar-theangachaidh adhartach ann am PHP Laravel

Bidh sinn ag obair gu ìre mhòr le resources/views/welcome.blade.php, mar sin feumaidh a h-uile càil tachairt nar sealladh fàilte.

Parameters ann an sreathan eadar-theangachaidh

Mar eisimpleir, canamaid hello ris an neach-cleachdaidh mac-meanmnach againn (Amanda) an àite dìreach a bhith a’ taisbeanadh teachdaireachd coitcheann:

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

Thoir an aire gun do chleachd sinn an t-ainm leis a’ chiad litir ann an litrichean beaga, ach an neach-àite leis a’ chiad litir ann an litrichean mòra. San dòigh seo, faodaidh Laravel do chuideachadh le bhith a’ cleachdadh an fhìor fhacal gu fèin-ghluasadach. Tachraidh seo ma thòisicheas an neach-àite le litir mhòr, mar eisimpleir, :Namea’ toirt a-mach “Caroline” no facal làn calpa,  :NAME, a 'dèanamh "CAROLINE".

Bidh sinn cuideachd ag ùrachadh ar faidhlichean eadar-theangachaidh resources/lang/fr.jsonresources/lang/it.json.

Frangach:

{

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

}

Eadailteach:

{

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

}

Iomarraidheachd

Gus iomadachadh fhaicinn ann an gnìomh, leig dhuinn paragraf ùr de theacsa a chuir ris. 

Gus iomadachadh a dhèanamh, feumaidh tu an gnìomh a chleachdadh trans_choice An àite __(), Mar eisimpleir:

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

Mar a chì thu, tha foirmean iolra air an sgaradh le a |.

A-nis, dè ma tha feum againn air iomadh foirm iolra? 

Tha seo comasach cuideachd:

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

Anns a 'chùis seo, tha sinn a' ceadachadh àireamhan 01, agus bho 219, agus mu dheireadh bho 20 air adhart. Gu dearbh, faodaidh tu na h-uimhir de riaghailtean a tha a dhìth ort a chur ris.

Mar sin dè ma tha sinn ag iarraidh an luchd-àite anns na cruthan iolra againn? 

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

Faodaidh sinn cuideachd an cunntas a chaidh seachad ann an `trans_choice` a chleachdadh ma tha feum air le bhith a’ cleachdadh neach-àite :count sònraichte:

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

Mu dheireadh, na dìochuimhnich na faidhlichean eadar-theangachaidh agad ùrachadh le atharrachadh sam bith a rinn thu air a’ bhun-eadar-theangachadh.

Eadailteach:

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

Frangach:

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

Ag obair le cinn-latha ionadail ann an Laravel

Gus cinn-latha a lorg, cleachdaidh sinn cumhachd Carbon , a thig le Laravel gu bunaiteachdefinita. Thoir sùil air an Sgrìobhainnean carbon ; faodaidh tu tòrr rudan inntinneach a dhèanamh. Mar eisimpleir, is urrainn dhuinn ar locale a shuidheachadh le ceann-latha agus riaghailtean ùine.

Airson an eisimpleir shìmplidh againn, seallaidh sinn an ceann-latha làithreach ionadail airson a’ chànan a thagh sinn. Anns an routes/web.php, bidh sinn ag ùrachadh slighe na duilleige fàilte agus a’ toirt seachad an teachdaireachd ceann-latha ionadail chun fhear againn view Fàilte:

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

Leig leinn ùrachadh resources/views/welcome.blade.php cuir taisbeanadh ceann-latha ris, mar seo:

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

A' feuchainn ris a' chànan atharrachadh air duilleag-dhachaigh na localhost, chì sinn gu bheil na cinn-latha a-nis ionadail, mar eisimpleir:

Cruthachadh àireamhan agus airgeadan le NumberFormatter

Ann an diofar dhùthchannan, bidh daoine a’ cleachdadh diofar chruthan airson àireamhan a riochdachadh, mar eisimpleir:

  • Na Stàitean Aonaichte → 123.123,12
  • An Fhraing → 123 123,12

Mar sin, gus na h-eadar-dhealachaidhean sin anns an app Laravel agad a nochdadh, faodaidh tu a chleachdadh Cruth-àireamh anns an dòigh a leanas:

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

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

Faodaidh tu cuideachd an àireamh a sgrìobhadh ann an cànan sònraichte agus rudeigin mar “ceud fichead trì mìle ceud fichead trì puing a dhà” a thaisbeanadh:

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

A bharrachd air an sin, leigidh NumberFormatter leat airgeadan a lorg gu furasta, mar eisimpleir:

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

Mar sin airson fr chì thu Euros, fhad 's a tha en_US bidh an airgead ann an dolairean na SA.

Leughaidhean Co-cheangailte

Ercole Palmeri

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.