¿Hay alguna manera de anidar las búsquedas de traducción? Algo como esto:Rails I18n claves de traducción anidadas
en:
uh_oh: 'Uh Oh!'
error1: :'uh_oh' + ' There was a big error!'
error2: :'uh_oh' + ' There was another big error!'
I18n.t('error1') #=> 'Uh Oh! There was a big error!'
I18n.t('error2') #=> 'Uh Oh! There was another big error!'
he intentado un montón de variaciones de esto, y también lo intentó con un archivo de traducción de rubíes en lugar de YAML. Tenga en cuenta que este hace trabajo:
en:
uh_oh: 'Uh Oh!'
error1: :'uh_oh'
I18n.t('error1') #=> 'Uh Oh!'
Pero si puedo añadir texto adicional a error1
, uh_oh
no se traducen.
Básicamente quiero evitar tener que pasar siempre en términos comunes, como esto:
en:
uh_oh: 'Uh Oh!'
error1: '%{uh_oh} There was a big error!'
I18n.t('error1', {uh_oh: I18n.t('uh_oh')})
Para conocer los términos comunes como uh_oh
, la interpolación es la misma para cada llamada a error1
(y cualquier otro clave que usa uh_oh
), por lo que no tiene sentido pasar una cadena para interpolar. Que sería más fácil hacer lo siguiente en su lugar y tienen la traducción error1
hacerse cargo de la traducción en clave común:
I18n.t('error1')
Sé lo que quieres decir sobre las diferentes estructuras de oraciones y reglas de gramática. Pero obtener el valor de una variable, ya sea desde un par clave/valor de traducción (como pregunto) o al pasarlo explícitamente, no cambia la forma en que se estructura la oración en el archivo de cada idioma. –
Cierto, aún así debes tener cuidado con el género. Creo que necesitarías escribir tu propio ayudante para esto. es decir, Haga su teclas algo como: 'clave: "!! some.key foo bar"' Donde su envoltorio I18n.t sería conseguir la llave, y luego ir buscar el some.key y sustituirla en – chrismcg
Usted podría hacer esto como un back-end i18n personalizado también. – chrismcg