2013-05-30 8 views
6

ho la seguente frase ho bisogno di localizzare:Clean modello per la localizzazione di frasi in Rails i18n

avete U non letti messaggi/s e N nuovo messaggio/s

Esempio localizzazione

U 0 N 1

"si dispone di 1 nuovo messaggio"

U 1 N 1

"si dispone di 1 messaggio da leggere e 1 nuovo messaggio"

U 1 N 0

"Hai 1 messaggio da leggere"

U 2 N 0

"avete 1 messaggi non letti"

mi può facilmente iniziare con questo pasticcio

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 

... a questo punto mi sono bloccato

# how do I pass two counts in? 
new_and_unread: 

Sono i18n a conoscenza in Rails non è MessageFormat terapia intensiva, tuttavia, c'è un modo sano di localizzare questo con gli strumenti che abbiamo? Puoi passare 2 conteggi in un interruttore di localizzazione?

+2

Non credo che molti quadri che fare con questo, perché esplode; Sospetto che le rotaie non facciano eccezione. Immagina di localizzare ad Arabaic dove avresti bisogno di 36 stringhe localizzate nel tuo esempio, che è quasi impraticabile. Non abbastanza tecnico per una risposta, ma sospetto che la cosa migliore sarebbe ripensare quella stringa anche in inglese. –

+0

La principale soluzione accettata per questo è il formato del messaggio ICU: https://github.com/jedtoolkit/messageformat.js –

+2

L'API i18n di Stack Overflow Careers consente solo un conteggio esattamente per questo motivo. Ogni volta che c'era bisogno di più, abbiamo cambiato l'inglese per richiederne uno solo. – mjibson

risposta

5

Il mio primo pensiero è quello di usare qualcosa come:

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

Ma questo probabilmente non funziona per tutte le lingue. Solo quelli occidentali.

Ecco ulteriori informazioni: 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

sì, sembra che questo ci metterà in un angolo più avanti su –

+1

Penso che sia necessario fornire le chiavi per ogni caso. 1n1u, 1n2u, 2n1u, 2n2u –

+0

enorme pita, posso aggiungere questo in questi casi se è abbastanza piccolo https://github.com/jedtoolkit/messageformat.js –

Problemi correlati