Acabo de actualizar a rails 4.0.2 y recibo esta advertencia:
[en desuso] I18n.enforce_available_locales tendrá el valor predeterminado verdadero en el futuro. Si realmente desea omitir la validación de su configuración regional, puede configurar I18n.enforce_available_locales = false para evitar este mensaje.
¿Hay algún problema de seguridad al establecerlo en falso?
ruby-on-rails
ruby
ruby-on-rails-4
deprecated
rails-i18n
Mauricio Moraes
fuente
fuente
Rails 4.0.1
aplicaciones.Respuestas:
Importante : Asegúrese de que su aplicación no esté usando I18n 0.6.8, tiene un error que impide que la configuración se configure correctamente .
Respuesta corta
Para silenciar la advertencia, edite el archivo application.rb e incluya la siguiente línea dentro del
Rails::Application
cuerpoLos valores posibles son:
Nota:
false
, notrue
.config.i18n.default_locale
configuración u otras configuraciones de i18n, asegúrese de hacerlo después de establecer laconfig.i18n.enforce_available_locales
configuración.config
objeto Aplicación puede no tener efecto. En este caso, configúrelo directamente paraI18n
usarI18n.config.enforce_available_locales
.Advertencias
Ejemplo
Respuesta larga
La advertencia de desaprobación ahora se muestra tanto en Rails 4 (> = 4.0.2) como en Rails 3.2 (> = 3.2.14). La razón se explica en este commit .
Antes de este cambio, si pasaba una configuración regional no admitida, Rails cambiaría silenciosamente a ella si la configuración regional es válida (es decir, si hay un archivo de configuración regional correspondiente en la
/config/locales
carpeta), de lo contrario, la configuración predeterminada de laconfig.i18n.default_locale
configuración regional sería predeterminada : en )La nueva versión de la gema I18n obliga a los desarrolladores a ser un poco más conscientes de la gestión local.
En el futuro, el comportamiento cambiará y si una configuración regional no es válida, la aplicación Rails generará un error.
En preparación de dicho cambio (que podría romper varias aplicaciones que hasta hoy dependían de valores predeterminados silenciosos), la advertencia le obliga a declarar explícitamente qué validación desea realizar, durante el período de transición actual.
Para restaurar el comportamiento anterior, simplemente configure la siguiente configuración en
false
de lo contrario, configúrelo como verdadero para que coincida con los nuevos valores predeterminados de Rails o si desea ser más rígido en la validación del dominio y evite cambiar al predeterminado en caso de configuración regional no válida.
Consideración
Si va a configurar la
config.i18n.default_locale
configuración o utilizando cualquiera de los métodos mencionados anteriormente (default_locale=
,locale=
,translate
, etc.), asegúrese de hacerlo después de establecer elconfig.i18n.enforce_available_locales
ajuste. De lo contrario, la advertencia de desaprobación seguirá apareciendo. (Gracias Fábio Batista ).Si usa gemas de terceros que incluyen características I18n, establecer la variable puede no tener efecto. De hecho, el problema es el mismo que el descrito en el punto anterior, solo que es un poco más difícil de depurar.
Este problema es una cuestión de precedencia. Cuando configura la configuración en su aplicación Rails, el valor no se asigna inmediatamente a la gema I18n. Rails almacena cada configuración en un objeto interno, carga las dependencias (Railties y gemas de terceros) y luego pasa la configuración a las clases objetivo. Si usa una gema (o complemento Rails) que llama a cualquiera de los métodos I18n antes de que la configuración se asigne a I18n, recibirá la advertencia.
En este caso, debe omitir la pila de Rails y establecer la configuración inmediatamente en la gema I18n llamando
en vez de
El problema es fácil de probar. Tratar de generar una nueva aplicación Rails vacías y verá que la configuración
config.i18n
de laapplication.rb
fina obras.Si en su aplicación no lo hace, hay una manera fácil de depurar al culpable. Localice la gema i18n en su sistema, abra el
i18n.rb
archivo y edite el métodoenforce_available_locales!
para incluir la declaraciónputs caller.inspect
.Esto hará que el método imprima el stacktrace siempre que se invoque. Podrá determinar qué gema lo llama inspeccionando el stacktrace (en mi caso fue Authlogic).
fuente
config.i18n.default_locale
configuración, asegúrese de hacerlo después de configurar la nuevaconfig.i18n.enforce_available_locales
configuración. De lo contrario, la advertencia de desaprobación seguirá apareciendo.I18n.enforce_available_locales = true
.config.i18n.enforce_available_locales = true
no funcionaI18n.config.enforce_available_locales
no debería ser asíI18n.config.i18n.enforce_available_locales
, he editado su respuesta. Gracias por la solución.I18n.config.available_locales = [:your_locale, :en]
por ejemplo, de lo contrario no podrá iniciar su servidor rails.Simplemente para la corrección, nota que también puede deshacerse de la advertencia estableciendo
I18n.enforce_available_locales
atrue
(ofalse
) enconfig/application.rb
:fuente
config.i18n.enforce_available_locales = true
?I18n.config
esto para que tuviera efectoconfig.i18n.enforce_available_locales = true
en config / application.rb eliminó la advertencia de desaprobación en Rails 4.0.2, pero solo si la pongo por encima de las otrasconfig.i18n
líneas.I18n.config.enforce_available_locales = true
funcionó para mí en Rails 3.2.16 (lo puse en config / application.rb)fuente
No parece de esa manera, ese sería el comportamiento anterior de la forma en que funciona i18n: el nuevo comportamiento (verdadero) generará un error cuando solicite una configuración regional no implementada / disponible.
Vea el commit que agregó esta advertencia: https://github.com/svenfuchs/i18n/commit/3b6e56e06fd70f6e4507996b017238505e66608c
fuente
Si desea preocuparse por las configuraciones regionales, escriba en el
appilcation.rb
archivo.Puede escribir falso si la validación de la configuración regional no le importa.
fuente