Meus truques para i18n em Rails

Eu odeio trabalhar com i18n. Refatorar parciais, renomear controladores, ações e muitas outras tarefas simples se torna realmente um pé no saco, quando você tem que lidar com muitas traduções e localidades.

Felizmente existe esta grande joia , que torna nossa vida mais fácil. : D

Seus principais recursos são gerenciar traduções não utilizadas, adicionar uma que está faltando, mas também propagar uma determinada tradução para outro ou novos locais.

Sobre esses recursos simples, mas úteis, i18n-tasks gem fornece também um conjunto de tarefas combináveis ​​que são muito úteis para renomear em massa, inserir ou excluir dados de locais.

Infelizmente, esses recursos não são realmente simples, então criei uma pequena folha de cheatsheet com alguns exemplos e uma breve explicação.

Massa mover uma árvore de tradução

Ele move todos os articles.filters.*ramos para baixo articles.filter_data.*.

i18n-tasks data -f yaml | i18n-tasks tree-filter articles.filters.* | i18n-tasks tree-rename-key *.filters filter_data | i18n-tasks data-merge
i18n
-tasks data -f yaml | i18n-tasks tree-filter articles.filters.* | i18n-tasks data-remove

Conjunto de dados de exemplo:

articles:
filters
:
some_key
: some value
some_other_key
: some value
...

Resultado:

articles:
filter_data
:
some_key
: some value
some_other_key
: some value

Explicação

É composto em duas partes. O primeiro copia articles.filters.*paraarticles.filter_data.*

  • i18n-tasks data -y yamlproduz todos os dados como yaml. (qualquer localidade que você instalou em seu projeto).

  • i18n-tasks tree-filter [pattern]filtra os dados emitidos anteriormente de acordo com um padrão. No meu exemplo, ele obtém apenas filhos dearticles.filter

  • i18n-tasks tree-rename-key [pattern] [new_value]renomeia tudo que começa com .filters com a palavra filter_data. Cuidado: ele renomeia apenas a última palavra da cadeia. Se seu padrão for ` .abcd , only **d** will get renamed. For instance, if you want to rename both **c** and **d**, you have to calltree-rename-key` duas vezes.

  • data-merge mescla os dados atuais com os de seu banco de dados local

A segunda parte, em vez disso, exclui o original :articles.filters.*

  • data-remove: remove os dados filtrados de seu banco de dados local.

EDIT: Como i18n-tasks v0.9.8, isso pode ser substituído por:

i18n-tasks mv articles.filters articles.filter_data

Obrigado @glebm nos comentários abaixo!

Crie um novo galho de árvore

Cria um branch com a chave em sua localidade:my.new.treeen

echo 'en.my.new.tree' | i18n-tasks tree-convert -f keys -t yaml | i18n-tasks tree-set-value Hello | i18n-tasks data-merge

Resultado

en:
my:
new:
tree
: Hello

Explicação

  • echo "en.my.new.tree": Imprime / passa para o próximo tubo dessa corda

  • i18n-tasks tree-convertconverte um formato em outro. Os formatos válidos são keys, yamle json. Nesse caso, traduz a string em uma árvore yaml.en.my.new.tree

  • i18n-tasks tree-set-value Hello Define o valor da árvore atual para “Olá”

  • i18n-tasks data-merge Mesclar o resultado com seu banco de dados local.