Aslında hantal i18n yaklaşımına bir alternatif var. Çözüme Tr8n denir.
Yukarıdaki kodunuz basitçe şöyle olacaktır:
<%= tr("You have {num || kid}", num: 1) %>
Bu kadar. Anahtarlarınızı kodunuzdan çıkarmanıza ve bunları kaynak paketlerinde tutmanıza gerek yoktur, her dil için çoğullaştırma kuralları uygulamaya gerek yoktur. Tr8n, tüm diller için sayısal bağlam kuralları ile birlikte gelir. Aynı zamanda cinsiyet kuralları, liste kuralları ve dil durumları ile birlikte gelir.
Yukarıdaki çeviri anahtarının tam tanımı aslında şöyle görünecektir:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
Ancak yer ve zamandan tasarruf etmek istediğimizden, num otomatik olarak sayısal kurallara eşlenir ve kural değerleri için tüm seçenekleri sağlamaya gerek yoktur. Tr8n, işi sizin için anında yapacak çoğullayıcılar ve saptırıcılar ile birlikte gelir.
Anahtarınızın Rusça çevirisi basitçe şöyle olacaktır:
"У вас есть {num || ребенок, ребенка, детей}"
Bu arada, cinsiyete özgü kuralları olan dillerde çeviriniz yanlış olacaktır. Örneğin, İbranice'de, aslında örneğiniz için en az 2 çeviri belirtmeniz gerekir, çünkü "Siz", görüntüleyen kullanıcının cinsiyetine göre farklı olacaktır. Tr8n bunu çok iyi idare ediyor. İşte İbranice çevirilerin bir çevirisi:
"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}}
Yani bu durumda tek İngilizce anahtarınız 4 çeviriye ihtiyaç duyar. Tüm çeviriler bağlam içinde yapılır - cümleyi kırmak zorunda değilsin. Tr8n, dil ve bağlama dayalı olarak bir anahtarı birden çok çeviriye eşlemek için bir mekanizmaya sahiptir - hepsi anında yapılır.
Son bir şey. Ya sayım kısmını kalın yapmak zorunda olsaydın? Basitçe şöyle olurdu:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
Sadece "kalın" ifadenizi daha sonra yeniden tanımlamak istemeniz durumunda - bu çok kolay olacaktır - tüm YAML dosyalarınızı gözden geçirmek ve değiştirmek zorunda kalmayacaksınız - sadece tek bir yerde yaparsınız.
Daha fazla bilgi edinmek için lütfen buraya bir göz atın:
https://github.com/tr8n/tr8n_rails_clientsdk
Açıklama: Tr8n çerçevesinin ve tüm kitaplıklarının geliştiricisi ve bakımcısıyım.
"#{....}"
Yukarıdaki kodda "interpolator" ve alıntıların gerekli olmadığını unutmayın.