2011-12-28 46 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查找。它歸結爲每頁/請求所做的查找次數。