Saya baru saja memperbarui ke rails 4.0.2 dan saya mendapatkan peringatan ini:
[usang] I18n.enforce_available_locales akan default ke true di masa depan. Jika Anda benar-benar ingin melewati validasi lokal Anda, Anda dapat mengatur I18n.enforce_available_locales = false untuk menghindari pesan ini.
Apakah ada masalah keamanan dalam pengaturannya ke false?
ruby-on-rails
ruby
ruby-on-rails-4
deprecated
rails-i18n
Mauricio Moraes
sumber
sumber
Rails 4.0.1
aplikasi.Jawaban:
Penting : Pastikan aplikasi Anda tidak menggunakan I18n 0.6.8, ia memiliki bug yang mencegah konfigurasi diatur dengan benar .
Jawaban singkat
Untuk membungkam peringatan, edit file application.rb dan sertakan baris berikut di dalam
Rails::Application
tubuhNilai yang mungkin adalah:
catatan:
false
, bukantrue
.config.i18n.default_locale
konfigurasi atau pengaturan i18n lainnya, pastikan untuk melakukannya setelah pengaturanconfig.i18n.enforce_available_locales
pengaturan.config
objek Aplikasi , mungkin tidak berpengaruh. Dalam hal ini, atur langsung keI18n
menggunakanI18n.config.enforce_available_locales
.Peringatan
Contoh
Jawaban panjang
Peringatan penghentian sekarang ditampilkan di Rails 4 (> = 4.0.2) dan Rails 3.2 (> = 3.2.14). Alasannya dijelaskan dalam komit ini .
Sebelum perubahan ini, jika Anda melewati lokal yang tidak didukung, Rails akan secara diam-diam beralih ke itu jika lokal itu valid (yaitu jika ada file lokal yang sesuai dalam
/config/locales
folder), jika tidak lokal akan default keconfig.i18n.default_locale
konfigurasi (yang default ke: en ).Versi baru permata I18n, memaksa pengembang untuk menjadi sedikit lebih sadar akan manajemen lokal.
Di masa depan, perilaku akan berubah dan jika lokal tidak valid, aplikasi Rails akan memunculkan kesalahan.
Dalam persiapan perubahan semacam itu (yang berpotensi memecah beberapa aplikasi yang hingga hari ini mengandalkan default diam), peringatan tersebut memaksa Anda untuk secara eksplisit menyatakan validasi mana yang ingin Anda lakukan, selama periode transisi saat ini.
Untuk mengembalikan perilaku sebelumnya, cukup atur konfigurasi berikut ke
false
jika tidak, setel ke true agar cocok dengan standar Rails baru atau jika Anda ingin lebih kaku pada validasi domain dan hindari beralih ke default jika ada lokal yang tidak valid.
Peringatan
Jika Anda menetapkan
config.i18n.default_locale
konfigurasi atau menggunakan salah satu metode yang disebutkan sebelumnya (default_locale=
,locale=
,translate
, dll), pastikan untuk melakukannya setelah pengaturanconfig.i18n.enforce_available_locales
pengaturan. Jika tidak, peringatan penghentian akan terus muncul. (Terima kasih Fábio Batista ).Jika Anda menggunakan permata pihak ketiga yang menyertakan fitur I18n, pengaturan variabel melalui mungkin tidak berpengaruh. Faktanya, masalahnya sama seperti yang dijelaskan pada poin sebelumnya, hanya sedikit lebih sulit untuk di-debug.
Masalah ini adalah masalah yang diutamakan. Ketika Anda mengatur konfigurasi di aplikasi Rails Anda, nilainya tidak langsung ditetapkan ke permata I18n. Rails menyimpan setiap konfigurasi dalam objek internal, memuat dependensi (Railties dan permata pihak ketiga) dan kemudian melewati konfigurasi ke kelas target. Jika Anda menggunakan permata (atau plugin Rails) yang memanggil salah satu metode I18n sebelum konfigurasi ditugaskan ke I18n, maka Anda akan mendapatkan peringatan.
Dalam hal ini, Anda perlu melewati tumpukan Rails dan mengatur konfigurasi segera ke permata I18n dengan memanggil
dari pada
Masalahnya mudah dibuktikan. Cobalah untuk membuat aplikasi Rails kosong baru dan Anda akan melihat pengaturan
config.i18n
ituapplication.rb
berfungsi dengan baik.Jika di aplikasi Anda tidak, ada cara mudah untuk men-debug pelakunya. Temukan permata i18n di sistem Anda, buka
i18n.rb
file dan edit metodeenforce_available_locales!
untuk memasukkan pernyataanputs caller.inspect
.Ini akan menyebabkan metode untuk mencetak stacktrace setiap kali dipanggil. Anda akan dapat menentukan permata mana yang memanggilnya dengan memeriksa stacktrace (dalam kasus saya itu Authlogic).
sumber
config.i18n.default_locale
konfigurasi, pastikan Anda melakukannya setelah pengaturan pengaturan baruconfig.i18n.enforce_available_locales
. Jika tidak, peringatan penghentian akan terus muncul.I18n.enforce_available_locales = true
.config.i18n.enforce_available_locales = true
tidak berfungsi.I18n.config.enforce_available_locales
tidak bolehI18n.config.i18n.enforce_available_locales
, saya sudah mengedit jawaban Anda. Terima kasih untuk memperbaikinya.I18n.config.available_locales = [:your_locale, :en]
misalnya, jika tidak, Anda tidak akan dapat memulai server rel Anda.Hanya untuk kelengkapan, perhatikan bahwa Anda juga dapat menyingkirkan peringatan dengan mengatur
I18n.enforce_available_locales
ketrue
(ataufalse
) diconfig/application.rb
:sumber
config.i18n.enforce_available_locales = true
?I18n.config
ini untuk memiliki efekconfig.i18n.enforce_available_locales = true
di config / application.rb menghilangkan peringatan penghentian bagi saya di Rails 4.0.2, tetapi hanya jika saya meletakkannya di atasconfig.i18n
baris lain .I18n.config.enforce_available_locales = true
bekerja untuk saya di Rails 3.2.16 (saya taruh di config / application.rb)sumber
Tampaknya tidak seperti itu - itu akan menjadi perilaku sebelumnya dari cara i18n bekerja - perilaku baru (benar) akan menimbulkan kesalahan ketika Anda meminta lokal tidak diimplementasikan / tersedia.
Lihat komit yang menambahkan peringatan ini: https://github.com/svenfuchs/i18n/commit/3b6e56e06fd70f6e4507996b017238505e66608c
sumber
Jika Anda ingin peduli tentang lokal, tulis ke
appilcation.rb
file.Anda dapat menulis false jika validasi lokal dan tidak peduli tentang itu.
sumber