En realidad, existe una alternativa al engorroso enfoque i18n. La solución se llama Tr8n.
Su código anterior simplemente sería:
<%= tr("You have {num || kid}", num: 1) %>
Eso es. No es necesario extraer sus claves de su código y mantenerlas en paquetes de recursos, no es necesario implementar reglas de pluralización para cada idioma. Tr8n viene con reglas de contexto numéricas para todos los idiomas. También viene con reglas de género, reglas de lista y casos de idioma.
La definición completa de la clave de traducción anterior se vería así:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
Pero como queremos ahorrar espacio y tiempo, num se asigna automáticamente a las reglas numéricas y no es necesario proporcionar todas las opciones para los valores de las reglas. Tr8n viene con pluralizadores e inflectores que harán el trabajo por usted sobre la marcha.
La traducción de su clave en ruso sería simplemente:
"У вас есть {num || ребенок, ребенка, детей}"
Por cierto, su traducción sería inexacta en idiomas que tienen reglas específicas de género. Por ejemplo, en hebreo, en realidad tendría que especificar al menos 2 traducciones para su ejemplo, ya que "Usted" sería diferente según el género del usuario que lo ve. Tr8n lo maneja muy bien. Aquí hay una transliteración de traducciones hebreas:
"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}}
Entonces, su clave única en inglés, en este caso, necesita 4 traducciones. Todas las traducciones se realizan en contexto, no es necesario romper la oración. Tr8n tiene un mecanismo para asignar una clave a múltiples traducciones según el idioma y el contexto, todo hecho sobre la marcha.
Una última cosa. ¿Y si tuvieras que poner la parte del recuento en negrita? Simplemente sería:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
En caso de que desee redefinir su "negrita" más adelante, sería muy fácil, no tendrá que revisar todos sus archivos YAML y cambiarlos, simplemente hágalo en un solo lugar.
Para obtener más información, eche un vistazo aquí:
https://github.com/tr8n/tr8n_rails_clientsdk
Divulgación: Soy el desarrollador y mantenedor del marco Tr8n y todas sus bibliotecas.
"#{....}"
no son necesarios en el código anterior.