我有一个需要国际化的应用程序。
目前,几乎所有字符串都使用t('.whatever')
分配给翻译密钥。
我想确保在发布之前将所有密钥都翻译成某种语言。在开发/测试环境中,我可以启用config.action_view.raise_on_missing_translations = true
。
但是一些部分如devise
和其他一些使用gem生成的部分未在测试中涵盖,并且没有受让人在发布之前确实所有页面都经过测试。
我更喜欢一个解决方案,它提取所有密钥并将它们添加到locales/xxx.yml
,最好使用一些逻辑来排序和添加缺少的密钥。
我看了下面那些不符合我要求的宝石/项目:
其他信息
我们的密钥为英语,我们的默认语言为:de
,但我们需要将所有内容翻译为[:de, :en, :fr, :it]
答案 0 :(得分:0)
以下是我的观点:
首先,确定哪个区域设置是引用/完整区域,让它说出来:de
然后启动rails控制台(或创建rake任务),并按如下方式初始化I18n后端:
I18n.backend.send(:init_translations)
I18n.backend.send(:translations)
允许您访问所有语言环境的所有翻译,例如
{
en: {
hello: 'Hello World'
},
de: {
hello: 'Hallo Welt'
}
}
现在选择您的引用语言环境,即I18n.backend.send(:translations)[:de]
,然后遍历:de
哈希中的所有翻译键,并使用I18n.backend.exists?(locale, translation_key)
示例:
I18n.backend.exists?(:en, [:errors, :messages, :improbable_phone])
I18n.backend.exists?(:en, 'errors.messages.improbable_phone')
如果该密钥不存在,我将其添加到带有" ## TRANSLATION MISSING ##"的存根的散列中,最后将散列作为YAML文件写入磁盘。
答案 1 :(得分:0)
您还可以使用yaml-compare
(我制作的工具)找到丢失的密钥。
您可以在https://github.com/dorianmariefr/bin/blob/master/yaml-compare
上找到它,然后将其用作:
yaml-compare config/locales/de.yml config.locales/en.yml de en