Je viens de mettre à jour vers rails 4.0.2 et je reçois cet avertissement:
[obsolète] I18n.enforce_available_locales sera défini par défaut sur true à l'avenir. Si vous voulez vraiment ignorer la validation de vos paramètres régionaux, vous pouvez définir I18n.enforce_available_locales = false pour éviter ce message.
Y a-t-il un problème de sécurité à le définir sur faux?
ruby-on-rails
ruby
ruby-on-rails-4
deprecated
rails-i18n
Mauricio Moraes
la source
la source
Rails 4.0.1
applications.Réponses:
Important : assurez-vous que votre application n'utilise pas I18n 0.6.8, elle contient un bogue qui empêche la configuration correcte de la configuration .
Réponse courte
Pour désactiver l'avertissement, modifiez le fichier application.rb et incluez la ligne suivante dans le
Rails::Application
corpsLes valeurs possibles sont:
Remarque:
false
, nontrue
.config.i18n.default_locale
configuration ou d'autres paramètres i18n, assurez-vous de le faire après avoir défini leconfig.i18n.enforce_available_locales
paramètre.config
objet Application peut ne pas avoir d'effet. Dans ce cas, définissez-le directement surI18n
usingI18n.config.enforce_available_locales
.Avertissements
Exemple
Longue réponse
L'avertissement de dépréciation est maintenant affiché à la fois dans Rails 4 (> = 4.0.2) et Rails 3.2 (> = 3.2.14). La raison est expliquée dans ce commit .
Avant cette modification, si vous transmettiez des paramètres régionaux non pris en charge, Rails y basculerait silencieusement si les paramètres régionaux sont valides (c'est-à-dire s'il existe un fichier de paramètres régionaux correspondant dans le
/config/locales
dossier), sinon les paramètres régionaux seraient par défaut définis dans laconfig.i18n.default_locale
configuration (par défaut: en ).La nouvelle version de la gemme I18n oblige les développeurs à être un peu plus conscients de la gestion locale.
À l'avenir, le comportement changera et si un paramètre régional n'est pas valide, l'application Rails générera une erreur.
En préparation d'un tel changement (qui peut potentiellement casser plusieurs applications qui reposaient jusqu'à aujourd'hui sur des valeurs par défaut silencieuses), l'avertissement vous oblige à déclarer explicitement la validation que vous souhaitez effectuer, pendant la période de transition en cours.
Pour restaurer le comportement précédent, définissez simplement la configuration suivante sur
false
sinon, définissez-le sur true pour correspondre aux nouveaux paramètres par défaut de Rails ou si vous souhaitez être plus rigide sur la validation de domaine et éviter de passer à la valeur par défaut en cas de paramètres régionaux non valides.
Caveat
Si vous définissez la
config.i18n.default_locale
configuration ou en utilisant l' une des méthodes (mentionnées précédemmentdefault_locale=
,locale=
,translate
, etc.), assurez - vous de le faire après avoir réglé leconfig.i18n.enforce_available_locales
réglage. Sinon, l'avertissement de dépréciation continuera d'apparaître. (Merci Fábio Batista ).Si vous utilisez des gemmes tierces qui incluent des fonctionnalités I18n, la définition de la variable via peut ne pas avoir d'effet. En fait, le problème est le même que celui décrit dans le point précédent, juste un peu plus difficile à déboguer.
Cette question est une question de priorité. Lorsque vous définissez la configuration dans votre application Rails, la valeur n'est pas immédiatement attribuée à la gemme I18n. Rails stocke chaque configuration dans un objet interne, charge les dépendances (Railties et gemmes tierces) puis transmet la configuration aux classes cibles. Si vous utilisez une gemme (ou un plugin Rails) qui appelle l'une des méthodes I18n avant que la configuration ne soit affectée à I18n, vous obtiendrez l'avertissement.
Dans ce cas, vous devez ignorer la pile Rails et définir immédiatement la configuration sur la gemme I18n en appelant
au lieu de
Le problème est facile à prouver. Essayez de générer une nouvelle application Rails vides et vous verrez ce paramètre
config.i18n
dans laapplication.rb
fin des travaux.Si ce n'est pas le cas dans votre application, il existe un moyen simple de déboguer le coupable. Localisez la gemme i18n dans votre système, ouvrez le
i18n.rb
fichier et modifiez la méthodeenforce_available_locales!
pour inclure l'instructionputs caller.inspect
.Cela entraînera la méthode pour imprimer la trace de pile chaque fois qu'elle est invoquée. Vous pourrez déterminer quelle gemme l'appelle en inspectant le stacktrace (dans mon cas c'était Authlogic).
la source
config.i18n.default_locale
configuration, assurez-vous de le faire après avoir défini le nouveauconfig.i18n.enforce_available_locales
paramètre. Sinon, l'avertissement de dépréciation continuera à apparaître.I18n.enforce_available_locales = true
.config.i18n.enforce_available_locales = true
ne fonctionne pas.I18n.config.enforce_available_locales
pas l' êtreI18n.config.i18n.enforce_available_locales
, j'ai modifié votre réponse. Merci pour le correctif.I18n.config.available_locales = [:your_locale, :en]
par exemple le paramétrer , sinon vous ne pourrez pas démarrer votre serveur rails.Juste pour être complet, notez que vous pouvez également vous débarrasser de l'avertissement en définissant
I18n.enforce_available_locales
surtrue
(oufalse
) dansconfig/application.rb
:la source
config.i18n.enforce_available_locales = true
?I18n.config
pour que cela ait un effetconfig.i18n.enforce_available_locales = true
dans config / application.rb a éliminé l'avertissement de dépréciation pour moi dans Rails 4.0.2, mais seulement si je le place au-dessus des autresconfig.i18n
lignes.I18n.config.enforce_available_locales = true
travaillé pour moi dans Rails 3.2.16 (je l'ai mis dans config / application.rb)la source
Cela ne semble pas ainsi - ce serait le comportement précédent du fonctionnement d'i18n - un nouveau comportement (vrai) déclenchera une erreur lorsque vous demanderez un paramètre régional non implémenté / disponible.
Voir le commit qui a ajouté cet avertissement: https://github.com/svenfuchs/i18n/commit/3b6e56e06fd70f6e4507996b017238505e66608c
la source
Si vous voulez vous soucier des paramètres régionaux, écrivez dans un
appilcation.rb
fichier.Vous pouvez écrire false si la validation des paramètres régionaux et ne vous en souciez pas.
la source