Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Bagaimana Spatie Mengelola Terjemahan Saat Aplikasi Lokal Berubah


Bagaimana Spatie Mengelola Terjemahan Saat Aplikasi Lokal Berubah


Spatie mengelola terjemahan dalam aplikasi Laravel dengan mengintegrasikan dengan sistem lokalisasi Laravel dan memberikan cara yang fleksibel untuk menyimpan dan mengambil terjemahan berdasarkan lokal aplikasi saat ini.

Bagaimana Spatie Menangani Terjemahan Saat Aplikasi Lokal Berubah

1. Penyimpanan Terjemahan dan Pengambilan

-Spatie menawarkan paket yang disebut Laravel-Translation-Loader yang memungkinkan menyimpan terjemahan dalam database, bukan hanya file bahasa. Paket ini menggantikan penyedia layanan terjemahan default Laravel dengan penyedia Spatie, memungkinkan terjemahan untuk diambil secara dinamis dari database [1].
- Terjemahan disimpan dalam tabel (biasanya `language_lines`) di mana setiap entri berisi grup (seperti" validasi "), kunci (seperti" diperlukan "), dan objek JSON yang memegang terjemahan untuk beberapa lokal (mis.,` 'En' => 'Ini adalah bidang yang diperlukan', 'nl' => 'Dit adalah een verlicht').
- Ketika Anda menyebut fungsi Laravel S `__)` dengan kunci terjemahan, loader spatie mengambil terjemahan untuk set lokal saat ini di aplikasi. Misalnya, jika lokal aplikasi adalah `'nl'`,` __ (' validasi.

2. Switching lokal

- Lokal aplikasi dapat diubah saat runtime menggunakan metode Laravel ()-> setLocale ('locale_code') `.
- Setelah lokal diubah, semua pengambilan terjemahan berikutnya melalui `__ ()` atau fungsi terjemahan lainnya secara otomatis mengembalikan teks di lokasi yang baru diatur.
- Jika terjemahan tidak ada untuk lokal saat ini dalam database, mekanisme lokal Fallback Laravel dapat mengembalikan terjemahan dari lokal default, kecuali dinonaktifkan secara eksplisit [1] [8].

3. Terjemahan model tingkat dengan penyimpanan json

- Paket spatie lain, Laravel-translatable, dirancang untuk model yang fasih untuk membuat atribut diterjemahkan.
- Terjemahan disimpan sebagai JSON dalam satu kolom basis data per atribut yang dapat diterjemahkan, tanpa memerlukan tabel tambahan [3].
- Ketika aplikasi lokal berubah, mengakses atribut yang dapat diterjemahkan pada model mengembalikan nilai untuk lokal saat ini secara otomatis. Misalnya, `$ NewsItem-> Name` akan mengembalikan terjemahan untuk set lokal saat ini di aplikasi [4].
- Anda dapat secara eksplisit mendapatkan atau mengatur terjemahan untuk lokal tertentu menggunakan metode seperti `getTranslation (atribut, lokal)` dan `setTranslation (atribut, lokal, nilai)` [4].

4. Terjemahan Fallback dan Hilang

- Paket yang dapat diterjemahkan Spatie mendukung fallback lokal jadi jika terjemahan hilang untuk lokal saat ini, ia dapat mengembalikan terjemahan dari lokal lain (biasanya default) [8].
- Perilaku ini dapat dikontrol dengan melewati bendera boolean ke `getTranslation` untuk menonaktifkan fallback dan mendapatkan string kosong jika terjemahan hilang [8].

Ringkasan

Ketika aplikasi lokal berubah, paket terjemahan Spatie secara otomatis melayani terjemahan yang sesuai dari jalur bahasa yang disimpan dalam database atau atribut model yang disimpan JSON, memanfaatkan pengaturan lokal Laravel. Integrasi yang mulus ini memastikan bahwa fungsi pengambilan terjemahan mengembalikan string lokal yang benar berdasarkan pada lokal aplikasi saat ini, dengan mekanisme fallback tersedia jika terjemahan tidak ada.

Pendekatan ini memungkinkan pengalihan lokal yang dinamis saat runtime dan mendukung penyimpanan terjemahan dengan cara yang fleksibel, baik di tabel database atau kolom JSON, tergantung pada paket yang digunakan.

Referensi: [1] [3] [4] [8]

Kutipan:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-translatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-patie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-the-default-locale-when-i-try-to-retrieve-th