在Rails应用程序

时间:2016-03-20 14:39:03

标签: ruby-on-rails ruby-on-rails-4 internationalization

我有一个需要国际化的应用程序。 目前,几乎所有字符串都使用t('.whatever')分配给翻译密钥。

我想确保在发布之前将所有密钥都翻译成某种语言。在开发/测试环境中,我可以启用config.action_view.raise_on_missing_translations = true

但是一些部分如devise和其他一些使用gem生成的部分未在测试中涵盖,并且没有受让人在发布之前确实所有页面都经过测试。

我更喜欢一个解决方案,它提取所有密钥并将它们添加到locales/xxx.yml,最好使用一些逻辑来排序和添加缺少的密钥。

我看了下面那些不符合我要求的宝石/项目:

其他信息

我们的密钥为英语,我们的默认语言为:de,但我们需要将所有内容翻译为[:de, :en, :fr, :it]

2 个答案:

答案 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