2011-12-28 78 views
14

我正在使用现有的Rails应用程序,并使用本地化文件en.yml来保存应用程序的大部分文本。目前,我们没有本地化为任何其他语言,因此只有一个文件,但我们将translate('some.key')放入我们的视图中意味着添加其他语言将如添加另一个文件一样简单 - 例如sp.yml如何识别未使用的i18n密钥?

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

除了git grepping对于translate使用每个键的调用,是否有一种快速识别未被应用程序明确调用的定位键的方法?

回答

0

获取正在使用的,然后删除剩下的。这就是我使用的。

其实我将它们设置为active=0但可能不会为你工作

更新
原来我不清楚。

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

如果您从翻译文件看,您需要查看源代码并确定它们是否仍在使用,正如您在问题中提到的那样。

没有其他办法。

+0

我不明白你的意思。我正在谈论文件中的行。你在谈论数据库行吗? – 2011-12-28 20:57:02

+0

我没有任何使用rails的经验,但我知道的大多数i18n解决方案都有导出所有可翻译字符串的方法。导出所有可翻译的字符串,然后循环遍历所有字符串,并检查哪些不再使用(查看您的导出)。 – 2011-12-28 21:00:33

+0

我不问如何比较两个本地化文件;我在问如何检查应用程序代码使用哪些本地化密钥。 – 2011-12-28 21:14:56

11

看看这篇文章 "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 

希望有所帮助。

6

的I18n任务宝石

我刚听到这个消息的宝石,其中包括任务,以显示“未使用的潜在翻译”。

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

+3

从某种意义上讲,它可能会导致假阳性,难以检测病例,例如'I18n.t(method_returning_the_key)'。可以用'config/i18n-tasks.yml'来忽略这些键。 – glebm 2013-09-17 16:48:06

+1

@glebm - 感谢您的澄清。顺便说一下,你是如何很快找到你的宝石的? – 2013-09-17 20:53:29

+1

我搜索了这个名字:) – glebm 2013-09-19 10:33:36

0

它已经很多年以来我第一次来到这个问题,因为我有完全相同的问题。问题并没有变小,我比以往更加沮丧。

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

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

的想法是,你可以拉的统计和比较。 (WIP的时刻,我很乐意帮助OFC)

你可能会问:“不会的查找放慢”

而你是对的,当然,但开销几乎无法察觉,看看这个基准。

require 'benchmark' 
n = 100000 
Benchmark.bm do |x| 
    x.report { ENV['ENABLE_I18N_COUNTER'] = 'true'; n.times do ; I18n.translate('application.contract_not_available.header'); end } 
    x.report { ENV['ENABLE_I18N_COUNTER'] = 'false'; n.times do ; I18n.translate('application.contract_not_available.header'); end } 
end 

--------------------------------------------- 
| Benchmark | Seconds | Sec pr translation | 
|------------| --------- | ------------------ | 
| with redis | 48.280000 | 0.0004828   | 
| without | 9.010000 | 0.0000901   | 
--------------------------------------------- 

开销约为3 ms pr查找。它归结为每页/请求所做的查找次数。