web-dev-qa-db-fra.com

comment utiliser Rails i18n fallback features

J'ai ce problème i18n

activerecord:
  notices:
    messages:
      success: 
        create: "Something was created"
    models:
      user:
        success:
            create: "Thanks for registration"

I18n.t("activerecord.notices.models.user.success.create")
# => "Thanks for registration"


I18n.t("activerecord.notices.models.book.success.create") 
# => "translation missing: de, activerecord, notices, models, book, success, create"

Je ne sais pas pourquoi le modèle de livre ne reçoit pas le massage de secours. J'ai mis config.i18n.fallbacks = true. J'utilise Rails 3

31
antpaw

Lorsqu'une option : default est donnée, sa valeur sera renvoyée si la traduction est manquante:

I18n.t :missing, :default => 'Not here'
# => 'Not here'

Plus d'infos ici

30
egze

Je définis généralement dans config/application.rb

    config.i18n.fallbacks =[:de, :fr, :en]

Ainsi, vous pouvez ralentir l'ordre du repli.

Mais attention dans certains environnements/*. Rb la configuration est écrasée.

98
raskhadafi

Avez-vous activé les solutions de secours pour votre backend? En supposant que c'est simple (basé sur yml dans l'exemple):

mettez ceci dans un initialiseur:

require "i18n/backend/fallbacks" 
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

https://github.com/svenfuchs/i18n/wiki/Fallbacks

18
user456733

Dans Rails 3+, ceci est défini dans les fichiers de configuration/environnements:

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found)
  config.i18n.fallbacks = true
16
Alain Beauvois

Je pense que la meilleure façon de gérer une chaîne manquante est d'afficher une locale par défaut, plutôt qu'un message d'erreur.

Ajoutez cette ligne dans application.rb pour revenir à la langue anglaise.

config.i18n.fallbacks = [:en]

Si vous souhaitez spécifier des solutions de secours spécifiques aux paramètres régionaux, vous pouvez utiliser les éléments suivants:

config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]}

Notez également que vous pouvez activer et désactiver les solutions de secours en fonction de votre environnement. Ainsi, pendant le développement, il peut être judicieux d'afficher une erreur, vous pouvez à la place activer les solutions de secours dans votre environments/production.rb avec ce qui suit:

config.i18n.fallbacks = true
10
pastullo

Il y a un malentendu avec la fonction I18n Fallback .

Cette fonctionnalité fait que lorsqu'il y a une exception de traduction manquante (dans ce cas, cela se produit lorsque I18n ne parvient pas à trouver la valeur associée au "activerecord.notices.models.book.success.create" clé dans les fichiers de paramètres régionaux de votre langue actuelle) I18n recherchera dans la liste prédéfinie des langues de secours le valeur de la clé qui a généré l'exception de traduction manquante , si elle est trouvée I18n retournera cette valeur, mais si elle n'est trouvée dans aucun de ces autres fichiers de paramètres régionaux I18n renverra le manquant exception de traduction .

Ainsi, lorsque vous avez défini config.i18n.fallbacks = true, cela ne signifie pas que lorsqu'une exception de traduction manquante se produit, dans ce cas:

I18n.t("activerecord.models.book.success.create")
# => "translation missing: de, activerecord, notices, models, book, success, create"

I18n recherchera une clé similaire dans vos fichiers de paramètres régionaux pour renvoyer sa valeur, pourrait être:

I18n.t("activerecord.models.user.success.create")
# => "Thanks for registration"

Ce qui se passera, c'est que I18n recherchera dans la vôtre langues de secours par défaut pour la langue spécifique où l'exception de traduction manquante s'est produit.


Un bon exemple d'utilisation sera:

# using :"en-US" as a default locale:
I18n.default_locale = :"en-US" 
I18n.fallbacks[:es] # => [:es, :"en-US", :en]

Fichiers de paramètres régionaux:

es:
  activerecord:
    notices:
      messages:
        success: 
          create: "Algo fue creado"
      models:
        user:
          success:
            create: "Gracias por registrarte"
en-US:
  activerecord:
      ...
      models:
        books:
          success:
            create: "The model was created" 

Appel en anglais sur le site:

I18n.t("activerecord.models.books.success.create")
# => "The model was created"

Appel sur le site espagnol:

#with config.i18n.fallbacks = false
I18n.t("activerecord.models.books.success.create")
# => "translation missing: es, activerecord, models, book, success, create"

#with config.i18n.fallbacks = true
I18n.t("activerecord.models.books.success.create")
# => "The model was created"

Pour plus d'informations, consultez: https://github.com/Ruby-i18n/i18n

0
LeFranck