Ruby on rails 提取Rails应用程序中所有未翻译的键
我有一个需要国际化的应用程序。 目前,几乎所有字符串都使用Ruby on rails 提取Rails应用程序中所有未翻译的键,ruby-on-rails,ruby-on-rails-4,internationalization,Ruby On Rails,Ruby On Rails 4,Internationalization,我有一个需要国际化的应用程序。 目前,几乎所有字符串都使用t('.whatever')分配给翻译键 我想确保在我们发布密钥之前,所有密钥都被翻译成某种语言。在开发/测试环境中,我可以启用config.action\u view.raise\u on\u missing\u translations=true 但是测试中没有包括一些部分,比如designe,以及一些使用gem生成的其他部分,并且没有授权人在发布之前对所有页面进行测试 我更喜欢一种解决方案,提取所有键并将它们添加到locales/x
t('.whatever')
分配给翻译键
我想确保在我们发布密钥之前,所有密钥都被翻译成某种语言。在开发/测试环境中,我可以启用config.action\u view.raise\u on\u missing\u translations=true
但是测试中没有包括一些部分,比如designe
,以及一些使用gem生成的其他部分,并且没有授权人在发布之前对所有页面进行测试
我更喜欢一种解决方案,提取所有键并将它们添加到locales/xxx.yml
,最好使用一些逻辑来排序和添加缺少的键
我查看了以下不符合我要求的宝石/项目:
- -完全搞乱了我的区域设置:(
- 未显示默认语言缺少的翻译键
我们的钥匙是英语,我们的默认语言是
:de
,但我们需要将所有内容翻译成[:de,:en,:fr,:it]
以下是我的做法:
首先,确定哪个语言环境是参考/完整语言环境,比如说它是:de
然后启动rails控制台(或创建rake任务),并按如下方式初始化I18n后端:
I18n.backend.send(:init_translations)
I18n.backend.send(:翻译)
允许您访问所有地区的所有翻译,例如
{
en: {
hello: 'Hello World'
},
de: {
hello: 'Hallo Welt'
}
}
现在选择您的参考语言环境,即I18n.backend.send(:translations)[:de]
,然后迭代:de
散列中的所有翻译键,并使用I18n.backend.exists?(语言环境,翻译键)
例如:
I18n.backend.exists?(:en,[:errors,:messages,:invobable\u phone])
I18n.backend.exists?(:en,'errors.messages.invobable_phone')
如果密钥不存在,我会将其添加到散列中,并使用存根(如“####TRANSLATION MISSING####””,最后将散列作为YAML文件写入磁盘。您还可以使用
YAML compare
(我制作的工具)找到丢失的密钥
你可以在
然后将其用作:
yaml-compare config/locales/de.yml config.locales/en.yml de en
谢谢,这对我很有帮助!FWIW:
send
在最近的rails版本中不再需要了。你可以直接调用translations
。作为奖励,如果你使用do\u init:true
调用translations,那么就不需要额外的init\u translations
调用。你看了吗?你可以使用他们的RSpec测试来确定e确保所有密钥在发布前都翻译成您的所有语言。