Important: assurez-vous que votre application n'est pas en utilisant I18n 0.6.8, il a un bug qui empêche la configuration de l'être réglées correctement.
Réponse courte
Afin de réduire au silence l'avertissement de modifier l'application.rb fichier et inclure la ligne suivante à l'intérieur de l' Rails::Application
corps
config.i18n.enforce_available_locales = true
Les valeurs possibles sont:
-
faux: si vous
- souhaitez ignorer les paramètres régionaux de validation
- ne vous souciez pas des paramètres régionaux
-
vrai: si vous
- l'application doit générer une erreur si une défaillance de paramètres régionaux est passé (ou)
- voulez par défaut pour les nouveaux Rails de comportements (ou)
- soins sur les paramètres régionaux de validation
Note:
- L'ancien comportement par défaut correspond à l'
false
, pas true
.
- Si vous réglez l'
config.i18n.default_locale
configuration ou d'autres i18n paramètres, assurez-vous de le faire après la mise à l' config.i18n.enforce_available_locales
réglage.
- Si votre utilisation du tiers des gemmes qui comprennent I18n caractéristiques, définition de la variable par le biais de l'Application
config
objet, ne peut pas avoir un effet. Dans ce cas, réglez-le directement à l' I18n
l'aide I18n.config.enforce_available_locales
.
Mises en garde
Exemple
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
Réponse longue
La dépréciation d'avertissement s'affiche désormais à la fois dans les Rails 4 (>= 4.0.2) et les Rails 3.2 (>= 3.2.14). La raison est expliquée dans ce commit.
Appliquer les locales disponibles
Lors de l' I18n.config.enforce_available_locales
est vrai que nous allons lever un
I18n::InvalidLocale exception, si le passé locale n'est pas disponible.
La valeur par défaut est nil
qui affichera une dépréciation d'erreur.
Si la valeur est false
nous allons passer de l'application de jeux de paramètres régionaux disponibles au total (ancien comportement).
Cela a été mis en œuvre dans les méthodes suivantes :
- I18n.config.paramètre default_locale=
- I18n.config.locale=
- I18n.traduire
- I18n.localiser
- I18n.translittérer
Avant ce changement, si vous avez passé une non prise en charge locale, les Rails serait silencieusement passer si la locale est valide (c'est à dire si il existe un fichier de paramètres régionaux dans l' /config/locales
le dossier), sinon les paramètres régionaux est par défaut à l' config.i18n.default_locale
de configuration (par défaut :fr).
La nouvelle version de l'I18n gem, oblige les développeurs à être un peu plus conscients de la gestion des paramètres régionaux.
Dans l'avenir, le comportement change et si les paramètres régionaux n'est pas valide, l'application Rails déclenchera une erreur.
Dans la préparation de ce changement (qui peut potentiellement briser plusieurs applications qui, jusqu'à aujourd'hui ont été en s'appuyant sur silencieux par défaut), l'avertissement est de vous forcer à déclarer explicitement que la validation que vous souhaitez effectuer, au cours de la période de transition actuelle.
Pour restaurer le comportement précédent, il suffit de définir la configuration suivante pour false
config.i18n.enforce_available_locales = false
sinon, mis à true pour correspondre à la nouvelle Rails par défaut ou si vous souhaitez être plus rigide sur la validation de domaine et d'éviter de passer à la valeur par défaut en cas de non valides paramètres régionaux.
config.i18n.enforce_available_locales = true
Mise en garde
Si vous réglez l' config.i18n.default_locale
de la configuration ou de l'utilisation de méthodes (default_locale=
, locale=
, translate
, etc), assurez-vous de le faire après la mise à l' config.i18n.enforce_available_locales
réglage. Sinon, la désapprobation avertissement garder sur popping up. (Merci Fábio Batista).
-
Si vous utilisez tiers des gemmes qui comprennent I18n fonctions, la définition de la variable par le biais peuvent 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 préséance. Lorsque vous définissez la config de votre application Rails, la valeur n'est pas immédiatement affecté à l'I18n gem. Rails de magasins chaque config dans un objet interne, charge les dépendances (Railties et la troisième partie des gemmes), puis il passe à la configuration de la cible classes. Si vous utilisez un bijou (ou Rails plugin) qui appelle tout de l'I18n méthodes avant de la config est affecté à l'I18n, vous obtenez le message d'avertissement.
Dans ce cas, vous devez ignorer les Rails de la pile et de l'ensemble de la config immédiatement à l'I18n, joyau de l'appel
I18n.config.enforce_available_locales = true
au lieu de
config.i18n.enforce_available_locales = true
Le problème est facile à prouver. Essayez de générer un vide nouvelle application Rails, et vous verrez que le paramètre config.i18n
dans la application.rb
fonctionne très bien.
Si dans votre application, elle ne le fait pas, il est un moyen facile de déboguer le coupable. Localiser l'i18n gem dans votre système, ouvrez l' i18n.rb
le fichier et modifier la méthode de enforce_available_locales!
d'inclure l'énoncé puts caller.inspect
.
Ce sera la cause de la méthode pour imprimer le stacktrace chaque fois que invoquée. Vous serez en mesure de déterminer la gem est de l'appeler par l'inspection de la stacktrace (dans mon cas c'était Authlogic).
["/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)>'",