Na verdade, existe uma alternativa para a abordagem complicada de i18n. A solução é chamada de Tr8n.
Seu código acima seria simplesmente:
<%= tr("You have {num || kid}", num: 1) %>
É isso aí. Não há necessidade de extrair suas chaves de seu código e mantê-los em pacotes de recursos, sem necessidade de implementar regras de pluralização para cada idioma. Tr8n vem com regras de contexto numérico para todos os idiomas. Ele também vem com regras de gênero, regras de lista e casos de linguagem.
A definição completa da chave de tradução acima seria realmente semelhante a esta:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
Mas, como queremos economizar espaço e tempo, num é mapeado automaticamente para regras numéricas e não há necessidade de fornecer todas as opções para os valores das regras. O Tr8n vem com pluralizadores e infletores que farão o trabalho para você na hora.
A tradução de sua chave em russo seria simplesmente:
"У вас есть {num || ребенок, ребенка, детей}"
A propósito, sua tradução seria imprecisa em idiomas que têm regras específicas de gênero. Por exemplo, em hebraico, você realmente teria que especificar pelo menos 2 traduções para o seu exemplo, já que "Você" seria diferente com base no sexo do usuário que está visualizando. Tr8n lida com isso muito bem. Aqui está uma transliteração das traduções hebraicas:
"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}}
Portanto, sua única chave em inglês, neste caso, precisa de 4 traduções. Todas as traduções são feitas no contexto - você não precisa quebrar a frase. O Tr8n tem um mecanismo para mapear uma chave para várias traduções com base no idioma e no contexto - tudo feito na hora.
Uma última coisa. E se você tivesse que deixar a contagem em negrito? Seria simplesmente:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
Apenas no caso de você querer redefinir seu "negrito" mais tarde - seria muito fácil - você não terá que passar por todos os seus arquivos YAML e alterá-los - basta fazê-lo em um só lugar.
Para saber mais, dê uma olhada aqui:
https://github.com/tr8n/tr8n_rails_clientsdk
Divulgação: Eu sou o desenvolvedor e mantenedor do framework Tr8n e de todas as suas bibliotecas.
"#{....}"
não são necessários no código acima.