2011-12-28 61 views
14

Mevcut bir Rails uygulamasında çalışıyorum ve uygulamanın metinlerinin çoğunu tutmak için bir yerelleştirme dosyası, en.yml kullanıyorum. Şu anda başka bir dile yerleşmiyoruz, bu yüzden sadece bir dosya var, ama biz translate('some.key')'u görünümlerimize yerleştirdiğimiz gerçeğinin anlamı başka bir dil eklemek başka bir dosya eklemek kadar kolay olacak - örneğin, sp.ymlKullanılmayan i18n anahtarlarını nasıl belirleyebilirim?

Sorun, en.yml, tüm anahtarların kullanıldığından şüphe duyduğum noktaya büyümüştür.

Her anahtarın kullanıldığı translate çağrıları için git grepping dışında, uygulama tarafından açıkça çağrılmayan yerelleştirme anahtarlarını tanımlamanın hızlı bir yolu var mı?

cevap

0

Etkin olarak kullanılanları alın, sonra kalanları kaldırın. Ben kullandım.

Aslında active=0 için bunları ancak

Güncelleme
Ben belli değildi çıkıyor için bunu çalışmayabilir.

Buna bakmanın iki yolu vardır: kaynak dosyalardan veya çeviri dosyalarından. Kaynak dosyalardan bakarsanız, kullanımda olan tüm dizeleri tanımlamanız ve son olarak kullanılmayan dizeleri kaldırmanız gerekir.

Çeviri dosyalarından bakarsanız, kaynağa bakmanız ve soruda belirtmiş olduğunuz gibi hala kullanılıp kullanılmadıklarını belirlemeniz gerekir.

Başka yol yok.

+0

Ne demek istediğini anlamıyorum. Bir dosyadaki satırlardan bahsediyorum. Veritabanı satırlarından mı bahsediyorsunuz? –

+0

Raylarla ilgili herhangi bir deneyimim yok, ancak tanıdığım çoğu i18n çözümünün tüm çevirilebilir dizeleri dışa aktarma yolu var. Tüm dönüştürülebilir dizeleri dışa aktarın, ardından tüm dizeler arasında geçiş yapın ve artık kullanılmayanları kontrol edin (dışa aktarma bölümüne bakın). –

+0

İki yerelleştirme dosyasının nasıl karşılaştırılacağını sormuyorum; Uygulama kodu tarafından hangi yerelleştirme anahtarlarının kullanıldığını kontrol etmeyi istiyorum. –

11

Bu makaleyle ilgili "Key issues internationalizing your app" bir göz atın. İlginizi çeken paragraf: "Kullanılmayan çevirilerden kurtulmak".

olarak belirtmek gerekirse, kaynak koduna bakarak önerir ve ayrıca aşağıdaki gibi üretim uygulamasında alışması Ne çeviri tuşları günlüğe: yardımcı

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 

Umut.

6

I18n-görevleri mücevher

Ben sadece "potansiyel olarak kullanılmayan çeviriler" göstermek için bir görev içeren bu taş, duydum. Ben aynı sorun vardı ben ilk önce bu soruya geldiğinden beri

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

+3

Potansiyel olarak kullanılmayan, örneğin tespit edilmesi zor vakalar için yanlış pozitif değerler verecek şekilde, örneğin; 'I18n.t (method_returning_the_key)'. Bu tür anahtarları 'config/i18n-tasks.yml' ile yok saymak mümkündür. – glebm

+1

@glebm - Açıklama için teşekkürler. Bu arada, geminizin bu sözünü bu kadar çabuk nasıl buldunuz? –

+1

SO üzerinde isimi aradım :) – glebm

0

Birçok yıl geçti. Sorun daha da büyümüş değil, her zamankinden daha sinirliyim.

Burada tercüme arama takar ve REDIS çeviri anahtar sayacı artırır, deneysel bir projedir:

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

Fikir istatistikleri çekin ve karşılaştırabilirsiniz olmasıdır. (Şu an için WIP, yardım etmeyi çok isterim)

Sorunu sorabilirsiniz: "bu aramaları yavaşlatmaz mı?"

Ve tabi ki haklısınız, ancak baş üstü pek farkedilemez, bu ölçütü kontrol edin.

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

Genel gider yaklaşık 3 ms'dir. Sayfa/istek başına yaptığınız arama sayısına kadar geri döner.