如何识别未使用的i18n密钥?

时间:2011-12-28 19:56:23

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

我正在使用现有的Rails应用程序并使用本地化文件en.yml来保存应用程序的大部分文本。目前,我们没有本地化为任何其他语言,因此只有一个文件,但事实上我们将translate('some.key')放入我们的视图意味着添加另一种语言就像添加另一个文件一样简单 - 比方说,sp.yml

问题是,en.yml已经发展到我怀疑所有密钥都被使用的程度。

除了git grepping使用每个密钥进行translate次调用之外,还有一种快速方法可以识别应用未明确调用的本地化密钥吗?

5 个答案:

答案 0 :(得分:13)

查看有关 "Key issues internationalizing your app"的这篇文章。您感兴趣的段落是:“摆脱未使用的翻译”。

具体来说,它建议查看您的源代码并记录生产应用中使用的翻译键,如下所示:

module I18n
  module Registry
    protected
    def lookup(locale, key, scope = [], options = {})
      @log ||= Logger.new(File.join(Rails.root, 'log', 'i18n_registry.log'))
      @log.info key
      super
    end
  end
end

I18n::Backend::Simple.send :include, I18n::Registry

希望有所帮助。

答案 1 :(得分:6)

I18n-tasks gem

我刚刚听说过这个宝石,其中包括一个显示“可能未使用的翻译”的任务。

https://github.com/glebm/i18n-tasks

答案 2 :(得分:0)

自从我第一次遇到这个问题已经很多年了,因为我遇到了同样的问题。这个问题并没有变得越来越小,我比以前更加沮丧。

这是一个实验项目,它挂钩到翻译查找并增加Redis中的翻译密钥计数器:

https://github.com/paladinsoftware/i18n-counter

这个想法是你可以提取统计数据并进行比较。 (WIP暂时,我很乐意帮助你)

您可能会问:“这不会减慢查找速度吗?”

当然你是对的,但是开销几乎不可察觉,请查看这个基准。

             scales: {
                xAxes: [{
                    type: "time",
                    time: {
                        format: "MM/DD/YYYY",
                        round: 'day',
                        tooltipFormat: 'll'
                    },
                    scaleLabel: {
                        display: true,
                    }
                }],
             }

开销约为3毫秒pr查找。它归结为每页/请求所执行的查找次数。

答案 3 :(得分:-1)

获取积极使用的,然后删除其余部分。这就是我使用的。

实际上我将它们设置为active=0,但这可能不适合你

<强>更新
事实证明我不清楚。

有两种方法可以查看:源文件或翻译文件。如果从源文件中查找,则需要识别正在使用的所有字符串,最后删除所有未使用的字符串。

如果从翻译文件中查看,您需要查看来源并确定它们是否仍在使用,如问题中所述。

别无他法。

答案 4 :(得分:-2)

您可能想尝试

$ ruby script/plugin install http://github.com/o2sources/unused_translations/tree/master
$ script/unused_translations config/locales/en.yml 

来源: http://www.railslodge.com/plugins/1547-unused-i18n-translations