Artikel

Pandhuan langkah-langkah lokalisasi Laravel, tutorial kanthi conto

Kepiye cara lokalisasi proyek Laravel, carane ngembangake proyek ing Laravel lan bisa digunakake ing pirang-pirang basa. Ing artikel iki, kita bakal weruh carane nggarap file terjemahan, nggawe alih basa lan liya-liyane kanthi conto.

Laravel minangka aplikasi sing dirancang kanggo dadi lokal, kanggo adaptasi karo macem-macem basa lan budaya. Pelokalan ngarang aplikasi internasional menyang basa tartamtu liwat terjemahan.

prasyarat

  • Ing artikel iki kita bakal ngrujuk Laravel versi 8.x;
  • Kanggo sukses ngetutake tutorial iki, sampeyan kudu duwe kawruh babagan basa pemrograman PHP lan kerangka Laravel.
  • Domain sampeyan yaiku localhost. Yen ora, ganti localhost nganggo jeneng domain utawa alamat IP sampeyan dhewe (gumantung saka instalasi sampeyan).

Nggarap file terjemahan

Ing Laravel, kaya ing pirang-pirang kerangka kerja liyane, kita bisa nyimpen terjemahan kanggo macem-macem basa ing file sing kapisah. Ana rong cara kanggo ngatur file terjemahan Laravel:

  • Pendekatan lawas sing nyimpen file ing lokasi ing ngisor iki: resources/lang/{en,fr,ru}/{myfile.php};
  • Pendekatan anyar sing nyimpen file ing lokasi ing ngisor iki: resources/lang/{fr.json, ru.json};

Kanggo basa sing beda-beda miturut wilayah, sampeyan kudu menehi jeneng directory/file saka basa miturut ISO 15897. Contone, kanggo Inggris Inggris sampeyan bakal nggunakake en_GB tinimbang en-gb. Ing artikel iki, kita bakal fokus ing pendekatan kapindho, nanging padha karo sing pisanan (kajaba carane tombol terjemahan dijenengi lan dijupuk). 

Terjemahan prasaja

Saiki ayo padha menyang resources/views/welcome.blade.phpfile lan ngganti isi ing bodytag karo kita, kaya iki:

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

Kita bakal miwiti kanthi nyiapake pesen sambutan lokalisasi, sing gampang banget ing Laravel. Sampeyan mung kudu ngganti teks "Welcome to our website" kanthi kode ing ngisor iki: {{ __('Welcome to our website') }}. Iki bakal nuntun Laravel kanggo nampilake "Welcome to our website" minangka standardefinite lan goleki terjemahan saka string iki yen basa liyane saka Inggris wis disetel (kita bakal ngerti mengko). Inggris bakal disetel minangka basa standardefinish saka app kita, supaya kanthi setelan gawandefiIng pungkasan kita mung bakal nampilake teks "Welcome to our website". Yen lokal beda, kita bakal nyoba golek terjemahan sing cocog lan bakal digawe ing wayahe.

Lokalisasi Laravel

Nanging kepiye Laravel ngerti basa sing saiki utawa basa sing kasedhiya ing aplikasi kasebut? Iki ditindakake kanthi ndeleng konfigurasi lokal ing app config/app.php. Bukak file iki lan goleki rong tombol array asosiatif iki:

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

Katrangan sing ditampilake ing ndhuwur kunci kudu jelas, nanging ing cendhak, kunci locale ngandhut pra lokaldefinish saka aplikasi sampeyan (paling ora, yen ora ana lokal liyane wis disetel ing kode). Karo fallback_locale diaktifake yen kita nyetel lokal sing ora ana ing aplikasi kita.

Nalika file iki mbukak, ayo tambahake kunci anyar kanggo nggawe dhaptar kabeh lokal sing bakal didhukung aplikasi. Kita bakal nggunakake iki mengko nalika nambah switcher lokal. Nanging, iki minangka tugas opsional amarga Laravel ora mbutuhake kita nindakake.

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

Saiki aplikasi kita ndhukung telung basa: Inggris, Italia lan Prancis.

File terjemahan

Saiki kita wis nggawe kabeh lokal sing bakal digarap, kita bisa nerusake nerjemahake pesen sadurunge sambutan.defibengi.

Ayo miwiti kanthi nambah file lokalisasi anyar menyang folder kasebut resources/lang. Pisanan, nggawe file resources/lang/it.json lan tambahake terjemahan sing cocog, kaya ing ngisor iki:

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

Sabanjure, nggawe file resources/lang/fr.json:

{

"Sugeng rawuh ing situs web kita": "Sugeng rawuh ing situs kita"

}

Kaya sing sampeyan ngerteni, kita tansah ngrujuk marang pesen sadurungedefiiki sing ditambahake ing file kasebut welcome.blade.php (kang wis {{ __('Welcome to our website') }}). Alesan kenapa kita ora kudu nggawe file en.json iku amarga Laravel wis ngerti pesen sing kita lewati dening pra-setelandefirampung ing fungsi __() padha kanggo pra lokal kitadefiiki en.

Pangowahan lokal ing Laravel

Ing wektu iki, Laravel ora ngerti carane ngganti lokal, mula saiki, ayo nindakake terjemahan langsung ing dalan. Ngowahi dalan sambutan pradefiwis rampung kaya ing ngisor iki:

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

Saiki kita bisa ngunjungi situs web kita, nemtokake basa sing kasedhiya minangka segmen jalur pertama: contone, localhost/rulocalhost/fr. Sampeyan kudu ndeleng konten sing dilokalisasi. Yen sampeyan nemtokake lokal sing ora didhukung utawa ora nemtokake lokal, Laravel bakal nggunakake enkanthi gawandefinita.

Jaman Tengah

Ngalih lokal kanggo saben pranala situs bisa uga ora kaya sing dikarepake, lan bisa uga ora katon resik kanthi estetis. Pramila kita bakal nindakake setelan basa liwat pamilih basa khusus lan nggunakake sesi pangguna kanggo nampilake konten sing diterjemahake. Mulane, nggawe middleware anyar nang app/Http/Middleware/Localization.phpfile utawa kanthi mlaku 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);
    }
}

Middleware iki bakal nuntun Laravel kanggo nggunakake lokal sing dipilih pangguna yen pilihan iki ana ing sesi kasebut.

Amarga iki kudu ditindakake ing saben panyuwunan, kita uga kudu nambahake menyang tumpukan pre middlewaredefirampung ing app/http/Kernel.phpsaben il webklompok middleware:

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

Ganti kursus

Sabanjure, kita kudu nambah path kanggo ngganti lokal. Kita nggunakake jalur penutupan, nanging sampeyan bisa nggunakake kode sing padha ing controller yen sampeyan seneng:

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

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

Uga, aja lali mbusak pilihan lokal sing sadurunge ditambahake ing jalur pra sambutandefibengi:

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

Yen wis rampung, siji-sijine cara kanggo pangguna ngganti basa sing wis disetel yaiku kanthi ngetik localhost/language/{locale}. Ing localepilihan bakal disimpen ing sesi lan bakal pangalihan pangguna menyang ngendi asale (priksa file Localizationmiddleware). Kanggo nyoba, pindhah menyang localhost/language/ru(anggere cookie sesi sampeyan ana ing browser sampeyan) lan sampeyan bakal weruh isi terjemahan. Sampeyan bisa ngubengi situs web kanthi bebas utawa nyoba refresh kaca lan ndeleng manawa basa sing dipilih dilestarekake.

Komutator

Saiki kita kudu nggawe soko sing bisa diklik pangguna kanggo ngganti basa tinimbang ngetik kode lokal kanthi manual menyang URL. Kanggo nindakake iki, kita bakal nambah pamriksa basa sing gampang banget. Mulane, nggawe anyar resources/views/partials/language_switcher.blade.phpfile kanthi kode ing ngisor iki:

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

Kalebu switcher sing mentas digawe ing tampilan "welcome":

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

Bukak ing app/Providers/AppServiceProvider.phpfile lan nambah kode kanggo nuduhake nalika switcher basa kita bakal dumadi. Khusus, kita bakal nuduhake lokal saiki sing bisa diakses minangka file {{ $current_locale }}.

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.

Pilihan terjemahan majeng ing PHP Laravel

Kita bakal utamané bisa karo resources/views/welcome.blade.php, supaya kabeh kudu kelakon ing tampilan sambutan kita kajaba kasebut.

Parameter ing string terjemahan

Contone, ayo ngucapake salam marang pangguna khayalan (Amanda) tinimbang mung nampilake pesen umum:

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

Elinga yen kita nggunakake jeneng karo huruf pisanan ing huruf cilik, nanging placeholder karo huruf pisanan ing huruf gedhe. Kanthi cara iki, Laravel bisa nulungi sampeyan kanthi otomatis nggawe huruf kapital tembung sing bener. Iki bakal kelakon yen placeholder diwiwiti nganggo huruf gedhe, contone, :Namengasilake "Caroline" utawa tembung kanthi huruf kapital,  :NAME, ngasilake "CAROLINE".

Kita uga nganyari file terjemahan resources/lang/fr.jsonresources/lang/it.json , amarga saiki kita mung bakal ndeleng versi Inggris ing ngendi wae amarga tombol terjemahan ora cocog karo terjemahan.

Prancis:

{

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

}

Italia:

{

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

}

Pluralisasi

Kanggo ndeleng pluralisasi ing tumindak, ayo nambah paragraf anyar teks. 

Kanggo nindakake pluralisasi, sampeyan kudu nggunakake fungsi kasebut trans_choice tinimbang __(), Tuladhane:

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

Minangka sampeyan bisa ndeleng, wangun jamak dipisahake dening a |.

Saiki, kepiye yen kita butuh macem-macem bentuk jamak? 

Iki uga bisa:

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

Ing kasus iki, kita ngidini nomer 01, lan saka 219, lan pungkasane wiwit 20. Mesthi, sampeyan bisa nambah minangka akeh aturan sing perlu.

Dadi, yen kita pengin placeholders ing wangun jamak kita? 

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

Kita uga bisa nggunakake count liwati ing `trans_choice` yen perlu nggunakake placeholder :count khusus:

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

Pungkasan, aja lali nganyari file terjemahan kanthi owah-owahan sing sampeyan lakoni ing terjemahan dhasar.

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

Prancis:

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

Nggarap tanggal lokal ing Laravel

Kanggo nemokake tanggal, kita bakal nggunakake daya saka Karbon , sing dilengkapi karo Laravel minangka standardefinita. Priksa metu ing Dokumentasi karbon ; sampeyan bisa nindakake akeh perkara sing menarik. Contone, kita bisa nyetel lokal kita karo aturan tanggal lan wektu.

Kanggo conto prasaja, kita bakal nuduhake tanggal saiki sing dilokalisasi kanggo basa sing dipilih. Ing kita routes/web.php, kita nganyari path kaca sambutan lan ngirim pesen tanggal lokal kanggo kita view sugeng rawuh:

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

Ayo nganyari resources/views/welcome.blade.php nambah tampilan tanggal, kaya mangkene:

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

Nyoba ngganti basa ing kaca ngarep saka localhost, kita bakal weruh yen tanggal saiki wis dilokalisasi, contone:

Format nomer lan mata uang nganggo NumberFormatter

Ing macem-macem negara, wong nggunakake macem-macem format kanggo makili nomer, contone:

  • Amerika Serikat → 123.123,12
  • Prancis → 123 123,12

Mula, kanggo nggambarake prabédan kasebut ing aplikasi Laravel, sampeyan bisa nggunakake NumberFormatter kanthi cara ing ngisor iki:

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

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

Sampeyan uga bisa nulis nomer kasebut ing basa tartamtu lan nampilake kaya "satus rong puluh telu ewu satus rong puluh telu koma siji":

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

Kajaba iku, NumberFormatter ngidini sampeyan nemokake mata uang kanthi gampang, contone:

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

Dadi kanggo fr sampeyan bakal weruh Euros, nalika kanggo en_US mata uang bakal ing dolar AS.

Ercole Palmeri

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.

Artikel anyar

Intervensi inovatif ing Augmented Reality, karo panampil Apple ing Poliklinik Catania

Operasi ophthalmoplasty nggunakake penampil komersial Apple Vision Pro ditindakake ing Poliklinik Catania…

3 May 2024

Keuntungan saka Mewarnai Kaca kanggo Bocah-bocah - jagad sihir kanggo kabeh umur

Ngembangake katrampilan motorik sing apik liwat pewarnaan nyiapake bocah kanggo katrampilan sing luwih rumit kaya nulis. Kanggo mewarnai…

2 May 2024

Masa Depan Iki: Kepiye Industri Pengiriman Revolusi Ekonomi Global

Sektor angkatan laut minangka kekuwatan ekonomi global sing sejatine, sing wis ngarahake pasar 150 milyar ...

1 May 2024

Penerbit lan OpenAI menehi tandha persetujuan kanggo ngatur aliran informasi sing diproses dening Artificial Intelligence

Senin kepungkur, Financial Times ngumumake kesepakatan karo OpenAI. FT menehi lisensi jurnalisme kelas donya…

30 April 2024