makala

Mwongozo wa hatua kwa hatua wa ujanibishaji wa Laravel, mafunzo na mifano

Jinsi ya kubinafsisha mradi wa Laravel, jinsi ya kuunda mradi katika Laravel na kuufanya utumike katika lugha nyingi. Katika makala hii tunaona jinsi ya kufanya kazi na faili za kutafsiri, kuunda swichi ya lugha na zaidi kwa mifano.

Laravel ni programu iliyoundwa kuwa ya kawaida, kuzoea lugha na tamaduni anuwai. Ujanibishaji hurekebisha matumizi ya kimataifa kwa lugha mahususi kupitia tafsiri.

prerequisites

  • Katika makala hii tutarejelea Toleo la Laravel 8.x;
  • Ili kufuata mafunzo haya kwa ufanisi, unahitaji kuwa na ujuzi muhimu wa lugha ya programu ya PHP na mfumo wa Laravel.
  • Kikoa chako ni localhost. Ikiwa sivyo, badilisha localhost na jina la kikoa chako au anwani ya IP (kulingana na usakinishaji wako).

Kufanya kazi na faili za tafsiri

Katika Laravel, kama tu katika mifumo mingine mingi, tunaweza kuhifadhi tafsiri za lugha tofauti katika faili tofauti. Kuna njia mbili za kupanga faili za tafsiri za Laravel:

  • Njia ya zamani ambayo huhifadhi faili katika eneo lifuatalo: resources/lang/{en,fr,ru}/{myfile.php};
  • Mbinu mpya ambayo huhifadhi faili katika eneo lifuatalo: resources/lang/{fr.json, ru.json};

Kwa lugha zinazotofautiana kulingana na eneo, unapaswa kuzitaja directory/file ya lugha kulingana na ISO 15897. Kwa mfano, kwa Kiingereza cha Uingereza ungetumia en_GB badala ya en-gb. Katika makala hii, tutazingatia mbinu ya pili, lakini sawa huenda kwa kwanza (isipokuwa jinsi funguo za tafsiri zinaitwa na kurejeshwa). 

Tafsiri rahisi

Sasa, twende kwenye resources/views/welcome.blade.phpfaili na ubadilishe yaliyomo kwenye faili ya bodytag na yetu, kama hii:

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

Tutaanza kwa kuandaa ujumbe wetu wa kukaribisha ujanibishaji, ambao ni rahisi sana katika Laravel. Unachohitajika kufanya ni kubadilisha maandishi "Karibu kwenye wavuti yetu" na nambari ifuatayo: {{ __('Welcome to our website') }}. Hii itaelekeza Laravel kuonyesha "Karibu kwenye tovuti yetu" kwa chaguomsingidefinite na utafute tafsiri za mfuatano huu ikiwa lugha nyingine isipokuwa Kiingereza imewekwa (tutafikia hapo baadaye). Kiingereza kitawekwa kuwa lugha chaguomsingidefinish ya programu yetu, kwa hivyo kwa mpangilio chaguo-msingidefiMwishoni tutaonyesha tu maandishi "Karibu kwenye tovuti yetu". Ikiwa eneo ni tofauti, tutajaribu kutafuta tafsiri inayolingana na itaundwa baada ya muda mfupi.

Ujanibishaji wa Laravel

Lakini Laravel anajuaje ni lugha gani ya sasa au ni lugha zipi zinazopatikana kwenye programu? Inafanya hivyo kwa kuangalia usanidi wa ndani kwenye programu config/app.php. Fungua faili hii na utafute funguo hizi mbili za safu ya ushirika:

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

Maelezo yaliyoonyeshwa hapo juu ya funguo yanapaswa kujielezea, lakini kwa kifupi, ufunguo locale ina pre ya ndanidefinish ya programu yako (angalau, ikiwa hakuna eneo lingine ambalo limewekwa kwenye nambari). Na fallback_locale inawashwa ikiwa tutaweka eneo ambalo halipo katika programu yetu.

Ingawa faili hii imefunguliwa, hebu tuongeze ufunguo mpya kwa ajili ya kuorodhesha lugha zote ambazo programu yetu itatumia. Tutatumia hii baadaye tunapoongeza kibadilishaji cha ndani. Walakini, hii ni kazi ya hiari kwani Laravel haihitaji tuifanye.

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

Sasa programu yetu inasaidia lugha tatu: Kiingereza, Kiitaliano na Kifaransa.

Faili za tafsiri

Kwa kuwa sasa tumeanzisha lugha zote ambazo tutakuwa tukifanya kazi nazo, tunaweza kuendelea na kutafsiri ujumbe wetu wa kukaribisha mapema.defijioni.

Wacha tuanze kwa kuongeza faili mpya za ujanibishaji kwenye folda resources/lang. Kwanza, tengeneza faili resources/lang/it.json na ongeza tafsiri zinazolingana, kama ifuatavyo:

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

Ifuatayo, unda faili resources/lang/fr.json:

{

"Karibu kwenye tovuti yetu": "Karibu kwenye tovuti yetu"

}

Kama unaweza kuona, sisi hurejelea ujumbe wa awali kila wakatidefinito tuliyoongeza kwenye faili welcome.blade.php (ambayo ilikuwa {{ __('Welcome to our website') }}) Sababu kwa nini hatuhitaji kuunda faili en.json ni kwa sababu Laravel tayari anajua ni jumbe gani tunazopitisha kwa mpangilio wa awalidefikumaliza kwenye hafla hiyo __() ni kwa ajili ya watangulizi wetudefinito sw.

Mabadiliko ya ndani huko Laravel

Kwa wakati huu, Laravel hajui jinsi ya kubadilisha lugha, kwa hivyo kwa sasa, hebu tufanye tafsiri moja kwa moja ndani ya njia. Rekebisha njia ya kukaribisha kabladefiimekamilika kama inavyoonyeshwa hapa chini:

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

Sasa tunaweza kutembelea tovuti yetu, tukibainisha lugha yoyote inayopatikana kama sehemu ya njia ya kwanza: kwa mfano, localhost/rulocalhost/fr. Unapaswa kuona maudhui yaliyojanibishwa. Iwapo utabainisha eneo lisilotumika au usibainishe eneo kabisa, Laravel itatumia enkwa chaguo-msingidefinita.

Middleware

Kubadilisha eneo kwa kila kiungo cha tovuti kunaweza kusiwe vile unavyotaka, na kunaweza kusionekane kuwa safi kiurembo. Ndiyo maana tutafanya mpangilio wa lugha kupitia kibadilishaji maalum cha lugha na kutumia kipindi cha mtumiaji kuonyesha maudhui yaliyotafsiriwa. Kwa hivyo, tengeneza kifaa kipya cha kati ndani app/Http/Middleware/Localization.phpfaili au kwa kukimbia 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);
    }
}

Programu hii ya kati itaelekeza Laravel kutumia lugha iliyochaguliwa na mtumiaji ikiwa uteuzi huu upo kwenye kipindi.

Kwa kuwa tunahitaji hili lifanywe kwa kila ombi, tunahitaji pia kuiongeza kwenye rundo la vifaa vya katidefikumaliza katika app/http/Kernel.phpkwa webkikundi cha vifaa vya kati:

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

Badilisha kozi

Ifuatayo, tunahitaji kuongeza njia ili kubadilisha eneo. Tunatumia njia ya kufunga, lakini unaweza kutumia msimbo sawa kabisa ndani ya kidhibiti chako ukipenda:

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

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

Pia, usisahau kuondoa kigeuzi cha eneo kilichoongezwa hapo awali katika njia yetu ya kukaribisha mapemadefiusiku:

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

Mara hii inapofanywa, njia pekee ya mtumiaji kubadilisha lugha iliyowekwa sasa ni kwa kuingia localhost/language/{locale}. The localeselect itahifadhiwa ndani ya kipindi na itaelekeza watumiaji walikotoka (angalia Localizationvyombo vya kati). Ili kuijaribu, nenda kwa localhost/language/ru(ilimradi kidakuzi chako cha kipindi kipo kwenye kivinjari chako) na utaona maudhui yaliyotafsiriwa. Unaweza kuzunguka tovuti kwa uhuru au jaribu kuonyesha upya ukurasa na kuona kwamba lugha iliyochaguliwa imehifadhiwa.

Msafiri

Sasa tunahitaji kuunda kitu ambacho mtumiaji anaweza kubofya ili kubadilisha lugha badala ya kuweka mwenyewe misimbo ya ndani kwenye URL. Ili kufanya hivyo, tutaongeza kikagua lugha rahisi sana. Kwa hivyo, tengeneza mpya resources/views/partials/language_switcher.blade.phpfaili na nambari ifuatayo:

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

Jumuisha kibadilishaji kipya kilichoundwa kwenye mwonekano wa "karibu":

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

Fungua app/Providers/AppServiceProvider.phpfaili na uongeze msimbo ili kushiriki wakati swichi yetu ya lugha itaundwa. Hasa, tutashiriki eneo la sasa ambalo linaweza kufikiwa kama faili {{ $current_locale }}.

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

Chaguzi za utafsiri wa hali ya juu katika PHP Laravel

Tutafanya kazi na resources/views/welcome.blade.php, kwa hivyo kila kitu lazima kifanyike katika mtazamo wetu wa kukaribisha isipokuwa kubainishwa vinginevyo.

Vigezo katika mifuatano ya tafsiri

Kwa mfano, hebu tumsalimie mtumiaji wetu wa kufikiria (Amanda) badala ya kuonyesha ujumbe wa jumla tu:

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

Kumbuka kwamba tulitumia jina lenye herufi ya kwanza katika herufi ndogo, lakini kishikilia nafasi chenye herufi ya kwanza katika herufi kubwa. Kwa njia hii, Laravel inaweza kukusaidia kuweka herufi kubwa kiotomatiki. Hii itafanyika ikiwa kishikilia nafasi kitaanza na herufi kubwa, kwa mfano, :Namehutoa "Caroline" au neno kubwa kabisa,  :NAME, huzalisha "CAROLINE".

Pia tunasasisha faili zetu za tafsiri resources/lang/fr.jsonresources/lang/it.json , kwani kwa sasa tutaona tu toleo la Kiingereza mahali popote kwani funguo za tafsiri hazilingani na tafsiri.

Kifaransa:

{

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

}

Kiitaliano:

{

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

}

Kuongeza wingi

Ili kuona wingi ukifanya kazi, hebu tuongeze aya mpya ya maandishi. 

Ili kufanya wingi, lazima utumie chaguo la kukokotoa trans_choice badala ya __(), kwa mfano:

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

Kama unavyoona, maumbo ya wingi yanatenganishwa na a |.

Sasa, vipi ikiwa tunahitaji aina nyingi za wingi? 

Hii pia inawezekana:

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

Katika kesi hii, tunaruhusu nambari 01, na kutoka 219, na hatimaye kuanzia 20 na kuendelea. Bila shaka, unaweza kuongeza sheria nyingi kama unahitaji.

Kwa hivyo ni nini ikiwa tunataka vishikilia nafasi katika aina zetu za wingi? 

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

Tunaweza pia kutumia hesabu iliyopitishwa katika `trans_choice` ikihitajika kwa kutumia kishika nafasi :count Maalum:

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

Hatimaye, usisahau kusasisha faili zako za tafsiri kwa mabadiliko yoyote uliyofanya kwenye tafsiri msingi.

Kiitaliano:

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

Kifaransa:

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

Kufanya kazi na tarehe zilizojanibishwa huko Laravel

Ili kupata tarehe, tutatumia nguvu ya Carbon , ambayo inakuja na Laravel kwa chaguo-msingidefinita. Angalia Nyaraka za kaboni ; unaweza kufanya mambo mengi ya kuvutia. Kwa mfano, tunaweza kuweka eneo letu na sheria za tarehe na saa.

Kwa mfano wetu rahisi, tutaonyesha tarehe ya sasa iliyojanibishwa kwa lugha iliyochaguliwa. Katika yetu routes/web.php, tunasasisha njia ya ukurasa wa kukaribisha na kupitisha ujumbe wa tarehe uliojanibishwa kwetu view karibu:

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

Hebu tusasishe resources/views/welcome.blade.php kuongeza onyesho la tarehe, kama hivyo:

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

Kujaribu kubadilisha lugha kwenye ukurasa wa nyumbani wa localhost, tutaona kwamba tarehe sasa zimejanibishwa, kwa mfano:

Kupanga nambari na sarafu kwa kutumia NumberFormatter

Katika nchi tofauti, watu hutumia miundo tofauti kuwakilisha nambari, kwa mfano:

  • Marekani → 123.123,12
  • Ufaransa → 123 123,12

Kwa hivyo, ili kuonyesha tofauti hizi katika programu yako ya Laravel, unaweza kutumia NumberFormatter kwa njia ifuatayo:

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

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

Unaweza pia kuandika nambari katika lugha fulani na kuonyesha kitu kama "laki ishirini na tatu elfu mia ishirini na tatu nukta moja mbili":

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

Kwa kuongezea, NumberFormatter hukuruhusu kupata sarafu kwa urahisi, kwa mfano:

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

Hivyo kwa fr utaona Euro, wakati kwa en_US sarafu itakuwa katika dola za Marekani.

Ercole Palmeri

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

Makala ya hivi karibuni

Wakati Ujao Upo Hapa: Jinsi Sekta ya Usafirishaji Inavyofanya Mapinduzi katika Uchumi wa Kimataifa

Sekta ya majini ni nguvu ya kweli ya kiuchumi duniani, ambayo imepitia kwenye soko la bilioni 150 ...

1 Mei 2024

Wachapishaji na OpenAI hutia saini mikataba ya kudhibiti mtiririko wa taarifa zinazochakatwa na Intelligence Artificial Intelligence

Jumatatu iliyopita, Financial Times ilitangaza makubaliano na OpenAI. FT inatoa leseni kwa uandishi wake wa habari wa kiwango cha kimataifa…

Aprili 30 2024

Malipo ya Mtandaoni: Hivi Ndivyo Huduma za Utiririshaji Hukufanya Ulipe Milele

Mamilioni ya watu hulipia huduma za utiririshaji, kulipa ada za usajili za kila mwezi. Ni maoni ya kawaida kwamba wewe…

Aprili 29 2024

Veeam inaangazia usaidizi wa kina zaidi wa ransomware, kutoka kwa ulinzi hadi majibu na uokoaji

Coveware by Veeam itaendelea kutoa huduma za kukabiliana na matukio ya ulaghai mtandaoni. Coveware itatoa uwezo wa uchunguzi na urekebishaji…

Aprili 23 2024