Panduan langkah demi langkah dengan contoh

Security Blog  > Uncategorized >  Panduan langkah demi langkah dengan contoh
0 Comments


Dalam tutorial ini, Anda akan belajar cara melakukan lokalisasi Laravel dan menyajikan aplikasi Anda dalam berbagai bahasa. Kami akan membahas bekerja dengan file terjemahan, melakukan pluralisasi, membuat switcher bahasa, dan lebih banyak menggunakan lokalisasi Laravel, waktu lokal, dan contoh multi-bahasa.

Lokalisasi adalah fase kedua dari proses internasionalisasi Laravel (I18N). Di Laravel I18N, sebuah aplikasi dirancang agar sesuai dengan berbagai bahasa dan budaya. Lokalisasi beradaptasi mengatakan aplikasi internasional ke bahasa tertentu melalui terjemahan.

Jadi, haruskah kita mulai?

Terima kasih banyak kepada kolega saya Andrejs Bekešs, yang menyiapkan sampel kode dan penjelasan teknis untuk artikel ini.

Kode sumber tersedia di GitHub.

Prasyarat dan asumsi untuk aplikasi multi-bahasa Laravel

Sebelum terjun ke internasionalisasi perangkat lunak, mari kita bahas beberapa prasyarat yang diperlukan:

  • Kami akan menggunakan Laravel versi 10.x dalam tutorial ini.
  • Anda memiliki pengetahuan PHP dasar.
  • Domain Anda adalah localhost. Jika tidak, maka ganti localhost dengan nama domain Anda atau alamat IP (tergantung pada instalasi Anda).

Untuk memulai, mari kita juga membuat aplikasi Laravel baru dengan menjalankan:

composer create-project laravel/laravel i18n-demo

Terjemahan Laravel sederhana

Sekarang, mari kita pergi ke resources/views/welcome.blade.php mengajukan dan mengganti isi body Tag dengan milik kita sendiri, seperti itu:

<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 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>

Seperti yang Anda lihat, di sini kami memiliki teks kode keras yang tidak optimal untuk internasionalisasi.

Jadi, mari kita siapkan pesan selamat datang untuk lokalisasi, yang mudah di Laravel. Ganti teks dengan kode berikut:

{{ __('Welcome to our website!') }}

Ini menginstruksikan Laravel untuk menampilkan “Selamat datang di situs web kami!” Secara default dan cari terjemahan dari string ini jika bahasa non-Inggris diatur (kita akan membahas ini nanti).

Bahasa Inggris akan ditetapkan sebagai bahasa default aplikasi kami.

Lokal di aplikasi multi-bahasa Laravel

Tetapi bagaimana Laravel tahu bahasa saat ini atau bahasa apa yang tersedia dalam aplikasi? Itu mencari pengaturan lokal di config/app.php mengajukan.

Buka file ini dan cari dua kunci ini:

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

Deskripsi di atas tombol harus jelas. Singkatnya, The locale Kunci berisi lokasi default aplikasi Anda (jika tidak ada lokasi lain yang ditetapkan dalam kode).

Itu fallback_locale diaktifkan jika lokal yang tidak ada diminta dalam aplikasi Anda.

Mari kita tambahkan kunci baru ke file ini untuk memberikan daftar semua lokal yang didukung:

/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/

'available_locales' => [
  'English' => 'en',
  'Russian' => 'ru',
  'French' => 'fr',
],

Besar! Sekarang aplikasi kami mendukung tiga bahasa: Bahasa Inggris, Rusia, dan Prancis. Tentu saja Anda dapat memilih bahasa lain.

File terjemahan Laravel

informasi umum

Di Laravel, seperti banyak kerangka kerja lainnya, Anda menyimpan terjemahan untuk berbagai bahasa dalam file terpisah. Ada dua cara untuk mengatur file terjemahan Laravel:

  1. Pendekatan lama, yang melibatkan menyimpan file Anda di bawah jalur berikut: resources/lang/{en,fr,ru}/{myfile.php}.
  2. Pendekatan baru, yang melibatkan memiliki resources/lang/{fr.json, ru.json} file.

Dalam artikel ini, kami akan fokus pada pendekatan kedua, tetapi hal yang sama berlaku untuk yang pertama (dengan pengecualian bagaimana kunci terjemahan dinamai dan diambil).

Untuk bahasa yang berbeda berdasarkan wilayah, Anda harus memberi nama direktori/file bahasa menurut ISO 15897. Misalnya, untuk bahasa Inggris Inggris, Anda akan menggunakan en_GB daripada en-gb.

Membuat file terjemahan Laravel

Sekarang kami telah mengonfigurasi semua lokal untuk bekerja, mari kita lanjutkan dan lanjutkan untuk menerjemahkan pesan sambutan default kami.

Mari kita mulai dengan menambahkan file terjemahan baru di resources/lang map. Pertama, buat a resources/lang/ru.json File dan tambahkan terjemahan yang sesuai:

{
  "Welcome to our website!": "Добро пожаловать на наш сайт!"
}

Selanjutnya, buat a resources/lang/fr.json mengajukan:

{
  "Welcome to our website!": "Bienvenue sur notre site !"
}

Seperti yang Anda lihat, kami selalu merujuk pesan default yang kami tambahkan di welcome.blade.php file ({{ __('Welcome to our website!') }}). Kami tidak perlu membuat en.json File Karena Laravel sudah tahu bahwa pesan yang kami lewati secara default ada dalam bahasa Inggris.

Beralih Lokal di Laravel Multi-Language App

Pada titik ini, Laravel tidak tahu cara beralih lokal, jadi mari kita lakukan terjemahan langsung di dalam rute untuk saat ini. Edit rute sambutan default di dalam routes/web.php file sebagai berikut:

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

Di sini, kami mencoba membaca parameter GET lokal opsional dan mengatur lokal saat ini (jika lokal yang diminta didukung).

Anda sekarang dapat mengunjungi situs web Anda dan menentukan salah satu bahasa yang tersedia sebagai segmen rute pertama; misalnya, untuk localhost/ru atau localhost/frAnda harus melihat konten yang terlokalisasi. Jika Anda menentukan lokasi yang tidak didukung atau tidak menentukan lokal sama sekali, Laravel akan menggunakan bahasa Inggris (en) secara default.

Middleware untuk Lokalisasi Laravel

Melewati lokasi untuk setiap tautan situs mungkin bukan yang Anda inginkan dan bisa terlihat tidak menyenangkan secara estetika. Itu sebabnya kami akan melakukan pengaturan bahasa melalui pengalih bahasa khusus dan menggunakan sesi pengguna untuk menampilkan konten yang diterjemahkan. Buat middleware baru di app/Http/Middleware/Localization.php file atau dengan menjalankan artisan make:middleware Localization.

Tempel kode berikut di dalam:

<?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 ini akan menginstruksikan Laravel untuk memanfaatkan lokal yang dipilih oleh pengguna jika pilihan ini ada di sesi.

Karena kami membutuhkan operasi ini untuk dijalankan pada setiap permintaan, tambahkan ke tumpukan middleware default di app/Http/Kernel.php Untuk grup middleware web:

/**
* The application's route middleware groups.
*
* @var array<string, array<int, class-string|string>>
*/
protected $middlewareGroups = [
  'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \App\Http\Middleware\Localization::class, // <--- add this
],

Mengubah rute

Selanjutnya, tambahkan rute untuk mengubah lokasi di dalam routes/web.php mengajukan. Kami menggunakan rute penutupan, tetapi Anda dapat menggunakan kode yang sama di dalam pengontrol Anda jika Anda mau:

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

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

Juga, jangan lupa untuk menghapus switching lokal yang sebelumnya ditambahkan di rute sambutan default kami. Buat rute root Anda terlihat seperti ini:

Route::get("https://lokalise.com/", function () {
    return view('welcome');
});

Dengan ini selesai, satu -satunya cara bagi pengguna untuk beralih bahasa yang saat ini ditetapkan adalah dengan masuk localhost/language/{locale}. Pilihan lokal akan disimpan di dalam sesi dan mengarahkan kembali pengguna kembali ke tempat mereka berasal (periksa middleware lokalisasi). Untuk mengujinya, pergilah ke localhost/language/ru (Selama cookie sesi Anda hadir di browser Anda), dan Anda akan melihat konten yang diterjemahkan. Anda dapat dengan bebas bergerak di sekitar situs web atau mencoba menyegarkan halaman dan melihat bahwa bahasa yang dipilih sedang dilestarikan.

Switcher yang sebenarnya

Sekarang kita perlu membuat sesuatu yang dapat diklik pengguna untuk mengubah bahasa alih -alih memasukkan kode lokal ke dalam URL secara manual. Untuk melakukan ini, tambahkan kontrol bahasa sederhana. Buat yang baru resources/views/partials/language_switcher.blade.php file dengan kode berikut:

<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="https://lokalise.com/blog/laravel-localization-step-by-step/language/{{ $available_locale }}">
                <span>{{ $locale_name }}</span>
            </a>
        @endif
    @endforeach
</div>

Sertakan switcher yang baru dibuat di tampilan “Selamat Datang”:

<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 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>

Buka app/Providers/AppServiceProvider.php File dan tambahkan kode yang akan dibagikan saat pengalih bahasa kami disusun. Secara khusus, kami akan membagikan lokal saat ini yang dapat diakses sebagai {{ $current_locale }}.

* Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    view()->composer('partials.language_switcher', function ($view) {
        $view->with('current_locale', app()->getLocale());
        $view->with('available_locales', config('app.available_locales'));
    });
}

Opsi terjemahan lanjutan dalam php laravel

Kami sebagian besar akan bekerja sama resources/views/welcome.blade.phpJadi semuanya perlu terjadi dalam tampilan sambutan kami kecuali ditentukan sebaliknya.

Parameter dalam string terjemahan

Mari kita sapa pengguna imajiner kita (Amanda) alih -alih menampilkan pesan generik:

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

Perhatikan bahwa kami menggunakan nama itu dengan huruf pertama, tetapi placeholder dengan huruf pertama huruf besar. Ini memungkinkan Laravel untuk memanfaatkan kata yang sebenarnya secara otomatis. Jika placeholder dimulai dengan huruf kapital, :Name menghasilkan “Amanda” atau kata huruf besar penuh, :NAMEmenghasilkan “Amanda”.

Selain itu, perbarui kami resources/lang/fr.json Dan resources/lang/ru.json file terjemahan. Kalau tidak, kita hanya akan melihat versi bahasa Inggris karena kunci terjemahan tidak cocok dengan terjemahan.

Perancis:

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

Rusia:

{
  "Welcome to our website, :Name": "Добро пожаловать на наш сайт, :Name"
}

Kerja bagus!

Pluralisasi

Untuk melihat pluralisasi beraksi, mari kita tambahkan paragraf teks baru. Gunakan trans_choice fungsi bukannya __()misalnya:

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

Seperti yang Anda lihat, bentuk jamak dipisahkan dengan a |.

Jika kita membutuhkan lebih banyak bentuk jamak, kita dapat melakukannya juga:

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

Dalam hal ini, kami mengizinkan angka 0, 1, dari 2 hingga 19, dan akhirnya dari 20 dan seterusnya. Anda dapat menambahkan aturan sebanyak yang diperlukan.

Jika kita menginginkan placeholder dalam bentuk jamak kita, itu bukan masalah:

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

Kami juga bisa menggunakan count diteruskan ke trans_choiceJika diperlukan, dengan menggunakan spesial :count Placeholder:

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

Perbarui file terjemahan Anda dengan semua perubahan yang dibuat untuk terjemahan dasar.

Rusia:

{
  "Welcome to our website, :Name": "Добро пожаловать на наш сайт, :Name",
  "kemanan digital There :form no apples|informasi There :form just :count apple|[2,19] There :form :count apples": "kemanan digital Нет яблок|informasi Только :count яблоко|[2,19] :count яблок"
}

Perancis:

{    
  "Welcome to our website, :Name": "Bienvenue sur notre site, :Name",
  "kemanan digital There :form no apples|informasi There :form just :count apple|[2,19] There :form :count apples": "kemanan digital Il n'y a pas de pommes|informasi Il n'y :form :count pomme|[2,19] Il y :form :count pommes"
}

Bekerja dengan tanggal lokal di Laravel

Tanggal dan waktu penanganan yang benar sangat penting untuk proses lokalisasi. Untuk melokalisasi tanggal, kami akan memanfaatkan kekuatan karbon, yang dikirimkan dengan Laravel secara default. Periksa dokumentasi karbon untuk fitur yang lebih keren.

Sebagai contoh kami, kami akan menampilkan tanggal saat ini yang terlokalisasi untuk bahasa yang dipilih. Perbarui welcome rute halaman masuk routes/web.php dan lulus pesan tanggal terlokalisasi ke tampilan sambutan kami:

<?php
Route::get("https://lokalise.com/", 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
    ]);
});

Memperbarui resources/views/welcome.blade.php Untuk menambahkan pesan tanggal kami:

{{ __('Welcome to our website, :Name', ['name' => 'amanda']) }}
<br>
{{ trans_choice('kemanan digital There :form :count apples|informasi There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}

Coba ganti bahasa di beranda localhost – Anda akan melihat bahwa tanggal sekarang terlokalisasi.

Memformat nomor dan mata uang dengan NumberFormatter

Negara yang berbeda menggunakan format yang berbeda untuk mewakili angka. Misalnya:

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

Untuk mencerminkan perbedaan ini dalam aplikasi Laravel Anda, gunakan NumberFormatter:

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

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

Anda bahkan dapat menjelaskan nomor dalam bahasa tertentu:

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

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

NumberFormatter Juga memungkinkan Anda untuk melokalisasi mata uang dengan mudah:

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

$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);

Jadi, untuk fr Anda akan melihat Euro, saat untuk en_US Mata uangnya akan menjadi dolar AS.

Menyederhanakan proses lokalisasi Laravel dengan Lokalise

Terjemahan sebenarnya dari semua teks Anda mungkin adalah proses lokalisasi Laravel yang paling memakan waktu. Namun, menemukan solusi manajemen terjemahan yang baik seperti Lokalise dapat menyelamatkan Anda dari akhirnya dibanjiri pekerjaan. Dengan Lokalise, proses terjemahan dapat dilakukan hanya dalam beberapa langkah. Berikut adalah beberapa pedoman dasar tentang cara melakukannya:

  • Raih uji coba gratis Anda untuk melanjutkan.
  • Selanjutnya, instal Lokalise CLI. Anda dapat menggunakannya untuk membuat proyek dan mengunggah dan mengunduh file terjemahan. Tentu saja, ada juga GUI yang tersedia.
  • Buka situs web Lokalise dan lanjutkan ke bagian “Token API” di halaman Profil Pribadi Anda. Menghasilkan token baca/tulis baru.
  • Buat proyek terjemahan baru dan atur bahasa Inggris sebagai bahasa dasar.
  • Buka Pengaturan Proyek dan Salin ID Proyek.
  • Selanjutnya, untuk mengunggah file terjemahan Laravel Anda ke Lokalise, jalankan: lokalise2 file upload --token <token> --project-id <project_id> --lang_iso fr --file PATH/TO/PROJECT/resources/lang/fr.json.
  • Kembali ke Proyek Lokalise yang baru dibuat. Semua kunci dan nilai terjemahan Anda harus ada di sana. Anda dapat memodifikasinya sebanyak yang Anda suka dengan mengedit atau menghapus, dan menambahkan yang baru. Anda dapat memfilter tombol; Misalnya, Anda dapat menemukan yang tidak diterjemahkan yang sangat nyaman.
  • Saat Anda siap, unduh terjemahan yang diedit kembali ke Laravel dengan menjalankan: lokalise2 file download --token <token> --project-id <project_id> --format json --dest PATH/TO/PROJECT/resources/lang.

Lokalise mendukung banyak platform dan format. Dengan beberapa fiturnya, Anda dapat memesan terjemahan dari para profesional, mengunggah tangkapan layar untuk membaca teks dari mereka, dan banyak lagi. Integrasikan aplikasi Anda dengan Lokalise hari ini dan buat hidup Anda jauh lebih mudah.

Kesimpulan

Dalam artikel ini, kita telah melihat cara memulai dengan lokalisasi Laravel. Kami telah membahas cara melakukan terjemahan, menggunakan placeholder, memanfaatkan pluralisasi, dan bagaimana menambahkan pengalih bahasa. Semoga, Anda menemukan artikel ini menarik dan bermanfaat. Terima kasih telah mampir hari ini dan sampai waktu berikutnya!

Bacaan lebih lanjut





Panduan langkah demi langkah dengan contoh

Leave a Reply

Your email address will not be published. Required fields are marked *