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 yaml
produz 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 palavrafilter_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 call
tree-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.tree
en
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 cordai18n-tasks tree-convert
converte um formato em outro. Os formatos válidos sãokeys
,yaml
ejson
. 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.