2013-05-30 9 views
6

Mam następujące zdanie muszę zlokalizować:Clean wzór do lokalizowania zdań w Rails i18n

masz U nieprzeczytane wiadomości/S i N nowa wiadomość/s

Przykład lokalizacji

U 0 N 1

"masz 1 nową wiadomość"

U 1 N 1

"masz 1 nieprzeczytanych wiadomości i 1 nowa wiadomość"

U 1 N 0

"masz 1 nieprzeczytanych wiadomości"

U 2 N 0

"masz 1 nieprzeczytane wiadomości"

Mogę łatwo zacząć z tym bałaganem

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 

... w tym momencie siedzę

# how do I pass two counts in? 
new_and_unread: 

Jestem świadomy i18n w Rails nie jest ICU MessageFormat jednak, czy istnieje jakiś rozsądny sposób lokalizowania tego z narzędziami mamy? Czy potrafisz przekazać 2 liczniki do przełącznika lokalizacji?

+2

Nie sądzę, wiele ram sobie z tym poradzić, ponieważ wybucha; Podejrzewam, że szyny nie są wyjątkiem. Wyobraź sobie lokalizację w Arabaic, gdzie potrzebujesz 36 zlokalizowanych ciągów w twoim przykładzie, co jest prawie niewykonalne. Nie dość techniczny, by odpowiedzieć, ale podejrzewam, że najlepszym sposobem byłoby przemyślenie tego ciągu nawet w języku angielskim. –

+0

Głównym przyjętym rozwiązaniem tego problemu jest format wiadomości ICU: https://github.com/jedtoolkit/messageformat.js –

+2

Kariera przepełnienia stosu Interfejs API i18n umożliwia tylko jedną liczbę z tego właśnie powodu. Za każdym razem potrzebowaliśmy więcej, zmieniliśmy język angielski, aby wymagał tylko jednego. – mjibson

Odpowiedz

5

Moja pierwsza myśl jest użycie coś takiego:

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')) 

Ale to prawdopodobnie nie będzie działać dla każdego języka. Po prostu zachodnie.

Oto więcej informacji: 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

tak, wydaje się, że to stawia nas w rogu później –

+1

Myślę, że musisz podać klucze dla każdego przypadku. 1n1u, 1n2u, 2n1u, 2n2u –

+0

ogromna pita, mogę dodać to w tych przypadkach, jeśli jest wystarczająco mały https://github.com/jedtoolkit/messageformat.js –