2013-05-30 28 views
6

ben yerelleştirilmesine şu cümleyi ihtiyacım var Temiz desen

U N 1

"Eğer 1 yeni mesajınız var"U 1 N 1

U "1 okunmamış mesajı ve 1 yeni mesajınız var" K 0

U 2N 0

"1 okunmamış mesajınız var"

kolayca bu karmaşa ile başlayabilirsiniz "Eğer 1 okunmamış mesajınız var"

Bu noktada

...

unread_only: 
    one: you have 1 unread message 
    other: you have {{count}} unread messages 

new_only: 
    one: you have 1 new message 
    other: you have {{count}} new messages 
Ben şaşırıp

# how do I pass two counts in? 
new_and_unread: 

ben Rails farkında i18n Elimizdeki araçlarla bu lokalize bazı aklı başında bir yolu yoktur, ancak, yoğun bakım MessageFormat değil ben? Bir lokalizasyon anahtarına 2 kez geçebilir misin?

+2

ben patlar çünkü birçok çerçeveler, bununla başa düşünmüyorum; Rayların istisna olmadığını sanmıyorum. Örneğinizde 36 yerel dizeye ihtiyaç duyacağınız, araçların yerelleştirilemediğini düşünün. Bir cevap için yeterince teknik değil, ama en iyi yolun ingilizcede bile bu dizgeyi yeniden düşüneceğinden şüpheleniyorum. –

+0

Bunun için kabul edilen en önemli çözüm ICU mesaj formatıdır: https://github.com/jedtoolkit/messageformat.js –

+2

Yığın Taşımacılık Kariyerleri i18n API'si, tam olarak bu nedenle yalnızca bir sayıma izin verir. Herzaman daha fazla ihtiyaç vardı, İngilizceyi sadece bir tane gerektirecek şekilde değiştirdik. – mjibson

cevap

5

ilk düşüncem gibi bir şey kullanmaktır:

unread: 
    one: 1 unread message 
    other:{{count}} unread messages 

new: 
    one: 1 new message 
    other: {{count}} new messages 


I18n.t('you_have') << [msg1,msg2].map(&:presence).compact.join(I18n.t('and')) 

Ama bu muhtemelen her dil için çalışmaz. Sadece batılılar. İşte

fazla bilgi geçerli: http://guides.rubyonrails.org/i18n.html#passing-variables-to-translations

new_and_unread: "You have %{new} new, and %{unread} unread messages" 

<%=t 'new_and_unread', :new => 1, :unread => 3 %> 
+1

Evet, bu bizi –

+1

üzerinde bir köşeye koyuyor gibi hissettiriyor sanırım her bir durum için anahtarlar vermelisiniz. 1n1u, 1n2u, 2n1u, 2n2u –

+0

kocaman pide, eğer yeterince küçükse bu durumları ekleyebilirim https://github.com/jedtoolkit/messageformat.js –