Önemli : Uygulamanızın I18n 0.6.8 kullanmadığından emin olun , yapılandırmanın doğru şekilde ayarlanmasını engelleyen bir hata var .
Kısa cevap
Uyarıyı susturmak için application.rb dosyasını düzenleyin ve Rails::Application
gövdeye aşağıdaki satırı ekleyin
config.i18n.enforce_available_locales = true
Olası değerler:
- yanlış : eğer sen
- yerel doğrulamayı atlamak istemek
- yerliler umrumda değil
- true : eğer sen
- geçersiz bir yerel ayar iletilirse (veya) uygulamanın hata bildirmesini isteyin
- varsayılan olarak yeni Rails davranışlarını (veya)
- yerel ayarların doğrulanması
Not:
- Eski varsayılan davranış karşılık gelir
false
, değil true
.
- Eğer ayarlıyorsanız
config.i18n.default_locale
yapılandırma ya da diğer i18n ayarlarını ayarladıktan sonra bunu yapmak için emin olun config.i18n.enforce_available_locales
ayarı.
- I18n özelliklerini içeren üçüncü taraf mücevherleri kullanmanız durumunda, değişkeni Application
config
nesnesi aracılığıyla ayarlamanın bir etkisi olmayabilir. Bu durumda, doğrudan I18n
kullanmaya ayarlayın I18n.config.enforce_available_locales
.
Uyarılar
Misal
require File.expand_path('../boot', __FILE__)
# ...
module YouApplication
class Application < Rails::Application
# ...
config.i18n.enforce_available_locales = true
# or if one of your gem compete for pre-loading, use
I18n.config.enforce_available_locales = true
# ...
end
end
Uzun cevap
Kullanımdan kaldırma uyarısı artık hem Ray 4'te (> = 4.0.2) hem de Ray 3.2'de (> = 3.2.14) görüntülenmektedir. Nedeni bu taahhütte açıklanmıştır .
Kullanılabilir yerel ayarları zorunlu kıl
Ne zaman I18n.config.enforce_available_locales
doğrudur geçirilen yerel kullanılamaz eğer bir I18n :: InvalidLocale istisna yükseltmek gerekir.
Varsayılan, nil
kullanımdan kaldırılma hatasını görüntüleyecek şekilde ayarlanmıştır .
Olarak ayarlanırsa, false
kullanılabilir yerel ayarların uygulanmasını (eski davranış) atlayacağız.
Bu, aşağıdaki yöntemlerle uygulanmıştır:
- I18n.config.default_locale =
- I18n.config.locale =
- I18n.translate
- I18n.localize
- I18n.transliterate
Bu değişiklikten önce, desteklenmeyen bir yerel ayarı geçtiyseniz, yerel ayar geçerliyse (yani /config/locales
klasörde karşılık gelen bir yerel ayar dosyası varsa) Rails sessizce bu konuma geçer , aksi takdirde yerel ayar varsayılan olarak config.i18n.default_locale
yapılandırmaya (varsayılan olarak: en ).
I18n gem'in yeni versiyonu, geliştiricileri yerel yönetimden biraz daha bilinçli olmaya zorluyor.
Gelecekte, davranış değişecek ve bir yerel ayar geçersizse, Rails uygulaması bir hata oluşturacaktır.
Bu tür bir değişikliğin hazırlanmasında (bugüne kadar sessiz varsayılanlara dayanan birkaç uygulamayı potansiyel olarak kırabilir), uyarı, geçerli geçiş döneminde hangi doğrulamayı yapmak istediğinizi açıkça beyan etmeye zorlar.
Önceki davranışı geri yüklemek için aşağıdaki yapılandırmayı false
config.i18n.enforce_available_locales = false
aksi takdirde, yeni Rails varsayılanlarıyla eşleşecek şekilde veya alan adı doğrulamasında daha katı olmak ve geçersiz yerel ayar durumunda varsayılana geçmekten kaçınmak için true olarak ayarlayın.
config.i18n.enforce_available_locales = true
Uyarı
Eğer ayarlıyorsanız config.i18n.default_locale
yapılandırma veya yukarıda açıklanan yöntemlerden (herhangi birini kullanarak default_locale=
, locale=
, translate
, vb), ayarladıktan sonra bunu yapmak için emin olun config.i18n.enforce_available_locales
ayarı. Aksi takdirde, kullanımdan kaldırma uyarısı açılır. (Teşekkürler Fábio Batista ).
I18n özellikleri içeren üçüncü taraf değerli taşlar kullanıyorsanız, değişkenin ayarlanması etkili olmayabilir. Aslında, sorun önceki noktada anlatılanla aynıdır, hata ayıklamak biraz daha zordur.
Bu konu bir öncelik meselesidir. Rails uygulamanızda yapılandırmayı ayarladığınızda, değer hemen I18n gemine atanmaz. Rails her yapılandırmayı bir iç nesnede saklar, bağımlılıkları yükler (Railties ve üçüncü taraf taşlar) ve ardından yapılandırmayı hedef sınıflara geçirir. Yapılandırma I18n'ye atanmadan önce I18n yöntemlerinden herhangi birini çağıran bir mücevher (veya Rails eklentisi) kullanırsanız, uyarıyı alırsınız.
Bu durumda, Rails yığınını atlamanız ve yapılandırmayı hemen arayarak I18n gemine ayarlamanız gerekir.
I18n.config.enforce_available_locales = true
onun yerine
config.i18n.enforce_available_locales = true
Sorunu kanıtlamak kolaydır. Yeni bir boş Raylar uygulamasını oluşturmak için deneyin ve bu ayarı göreceksiniz config.i18n
içinde application.rb
çalışmalar cezası.
Uygulamanızda değilse, suçlu hata ayıklamak için kolay bir yol var. Sisteminizde i18n gem'ini bulun, i18n.rb
dosyayı açın ve enforce_available_locales!
deyimi eklemek için yöntemi düzenleyin puts caller.inspect
.
Bu, yöntemin her çağrıldığında yığın izini yazdırmasına neden olur. Yığını takip ederek (benim durumumda Authlogic idi) inceleyerek hangi gemin çağırdığını belirleyebileceksiniz.
["/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/i18n-0.6.9/lib/i18n.rb:150:in `translate'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/i18n/translator.rb:8:in `translate'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/i18n.rb:79:in `translate'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:68:in `validates_format_of_email_field_options'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:102:in `block in included'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `class_eval'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `included'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `include'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `block in acts_as_authentic'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `each'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `acts_as_authentic'",
"/Users/weppos/Projects/application/app/models/user.rb:8:in `<class:User>'",
"/Users/weppos/Projects/application/app/models/user.rb:1:in `<top (required)>'",
Rails 4.0.1
uygulamalar için de geçerlidir.