web-dev-qa-db-fra.com

Accéder au fichier de traduction (i18n) de l'intérieur Rails

Ce que j'ai dans mon modèle c'est:

def body_color_enum
  [
    ['Aqua', '#009c9c'],
    ['Grey', '#6d6e71'],
    ['Yellow', '#ffe600'],
    ['White', 'white']
  ]
end

Je veux que ces valeurs proviennent du fichier de traduction 'en.yml'

en:
  group:
    hero:
      hex1: '#6d6e71'
      name1: 'Dark grey'
      hex2: '#ccc'
      name2: 'Light grey'
      hex3: '#0099ce'
      name3: 'Blue'
      hex4: '#ffffff'
      name4: 'White'

J'ai essayé ceci:

def body_color_enum
  [
    [t('group.hero.name1'), '#009c9c'],
    ['Grey', '#6d6e71'],
    ['Yellow', '#ffe600'],
    ['White', 'white']
  ]
end

Mais je reçois cette erreur:

undefined method `t' for #<Group:0x007fabad847ac8>

Donc, ce que je demande, c'est comment puis-je accéder à mon fichier local à partir du modèle afin que je puisse définir mes valeurs dans la méthode body_color_enum.

32
Jake McAllister

Appel:

I18n.t 

au lieu de simple t. t est une méthode d'assistance uniquement disponible dans les vues, déléguant toute la logique à I18n module.

METTRE À JOUR:

Comme mentionné dans les commentaires, l'aide à la vue ne délègue pas seulement à I18n module, il s'assure que vous pouvez également utiliser une étendue par défaut.

86
BroiSatse
# constants
def self.option_enum
    [ 
      [ I18n.t('enum.amount'), 'A' ], 
      [ I18n.t('enum.percentage'), 'P' ] 
    ]
end
1
G. I. Joe