web-dev-qa-db-fra.com

Passer des variables à l'intérieur Rails fichier yml d'internationalisation

Je veux utiliser des variables déclarées dans le fichier yml juste là. Par exemple, j'ai déclaré site_name et souhaitez l'utiliser ci-dessous dans description.

en:
  site_name: &site_name "Site Name"
  static_pages:
    company:
      description: *site_name #this works fine
      description: "#{*site_name} is an online system" #this doesn't work

Comment puis-je combiner *site_name variable avec du texte supplémentaire?

37
alex

La réponse courte est, je crois, non, vous ne pouvez pas faire d'interpolation de chaîne en YAML comme vous le souhaitez en utilisant n alias .

Dans votre cas, ce que je ferais, c'est avoir quelque chose comme ceci dans mon fichier de paramètres régionaux:

en:
  site_name: "Site Name"
  static_pages:
    company:
      description: ! '%{site_name} is an online system'

puis appelez la vue appropriée avec le nom du site comme paramètre:

t('.description', site_name: t('site_name'))

ce qui vous ferait "Site Name is an online system".

Cependant, si vous êtes désespéré d'utiliser des alias dans votre fichier YAML pour concaténer des chaînes ensemble, le code suivant complètement non recommandé fonctionnerait également en ayant la chaîne être deux éléments d'un tableau:

en:
  site_name: &site_name "Site Name"
  static_pages:
    company:
      description:
        - *site_name
        - "is an online system"

puis vous join le tableau dans la vue appropriée comme ceci:

t('.description').join(" ")

Ce qui vous permettrait également "Site Name is an online system".

Cependant, avant de décider de suivre cette voie, à part la question à laquelle @felipeclopes est liée, jetez un œil à:

  • cette réponse StackOverflow concernant la concaténation des chaînes i18n (tl; dr Veuillez ne pas le faire pour votre équipe de traduction).
  • Questions StackOverflow ici et ici qui sont similaires à votre question.
57
Paul Fioravanti

Vous pouvez utiliser la syntaxe suivante, comme dans l'exemple:

dictionary:
  email: &email Email
  name: &name Name
  password: &password Password
  confirmation: &confirmation Confirmation

activerecord:
  attributes:
    user:
      email: *email
      name: *name
      password: *password
      password_confirmation: *confirmation
  models:
    user: User
users:
  fields:  
    email: *email
    name: *name
    password: *password
    confirmation: *confirmation
sessions:
  new:
    email: *email
    password: *password

Cet exemple est tiré de: Refactoring Ruby on Rails i18n fichiers YAML utilisant des dictionnaires

6
felipeclopes