Sebenarnya ada alternatif untuk pendekatan i18n yang rumit. Solusinya disebut Tr8n.
Kode Anda di atas hanya akan menjadi:
<%= tr("You have {num || kid}", num: 1) %>
Itu dia. Tidak perlu mengekstrak kunci dari kode Anda dan menyimpannya dalam paket sumber daya, tidak perlu menerapkan aturan pluralisasi untuk setiap bahasa. Tr8n hadir dengan aturan konteks numerik untuk semua bahasa. Itu juga dilengkapi dengan aturan gender, aturan daftar dan kasus bahasa.
Definisi lengkap dari kunci terjemahan di atas sebenarnya akan terlihat seperti ini:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
Tetapi karena kami ingin menghemat ruang dan waktu, num secara otomatis dipetakan ke aturan numerik dan tidak perlu menyediakan semua opsi untuk nilai aturan. Tr8n hadir dengan pluralizer dan inflektor yang akan bekerja untuk Anda dengan cepat.
Terjemahan untuk kunci Anda dalam bahasa Rusia, sederhananya adalah:
"У вас есть {num || ребенок, ребенка, детей}"
Omong-omong, terjemahan Anda mungkin tidak akurat dalam bahasa yang memiliki aturan khusus gender. Misalnya, dalam bahasa Ibrani, Anda sebenarnya harus menentukan setidaknya 2 terjemahan untuk contoh Anda, karena "Anda" akan berbeda berdasarkan jenis kelamin pengguna yang melihat. Tr8n menanganinya dengan sangat baik. Berikut adalah transliterasi dari terjemahan Ibrani:
"Yesh leha yeled ahad" with {context: {viewing_user: male, num: one}}
"Yesh leha {num} yeladim" with {context: {viewing_user: male, num: other}}
"Yesh lah yeled ahad" with {context: {viewing_user: female, num: one}}
"Yesh lah {num} yeladim" with {context: {viewing_user: female, num: other}}
Jadi kunci bahasa Inggris tunggal Anda, dalam hal ini, membutuhkan 4 terjemahan. Semua terjemahan dilakukan dalam konteks - Anda tidak perlu memutuskan kalimat. Tr8n memiliki mekanisme untuk memetakan satu kunci ke beberapa terjemahan berdasarkan bahasa dan konteks - semuanya dilakukan dengan cepat.
Satu hal terakhir. Bagaimana jika Anda harus membuat bagian penghitungan menjadi tebal? Ini hanya akan menjadi:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
Untuk berjaga-jaga jika Anda ingin mendefinisikan kembali "tebal" Anda nanti - ini akan sangat mudah - Anda tidak perlu memeriksa semua file YAML Anda dan mengubahnya - Anda cukup melakukannya di satu tempat.
Untuk mempelajari lebih lanjut, silakan lihat di sini:
https://github.com/tr8n/tr8n_rails_clientsdk
Pengungkapan: Saya adalah pengembang dan pemelihara kerangka Tr8n dan semua perpustakaannya.
"#{....}"
tidak diperlukan dalam kode di atas.