Подтвердить что ты не робот

Передача переменных внутри rails интернационализации yml файла

Я хочу использовать переменные, объявленные в yml файле прямо там. Например, я объявил site_name и хочу использовать его ниже в 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

Как я могу объединить переменную *site_name с дополнительным текстом?

4b9b3361

Ответ 1

Короткий ответ, я считаю, нет, вы не можете сделать строчную интерполяцию в YAML так, как хотите, используя псевдоним.

В вашем случае, что бы я сделал, в моем файле locale есть что-то вроде следующего:

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

а затем вызовите соответствующее представление с именем сайта в качестве параметра:

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

который доставит вам "Site Name is an online system".

Однако, если вы отчаянно пытаетесь использовать псевдонимы в своем файле YAML для объединения строк вместе, следующий полностью неподдающийся код также будет работать, если строка будет двумя элементами массива:

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

а затем вы бы join массив в соответствующем виде следующим образом:

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

Который также доставит вам "Site Name is an online system".

Однако, прежде чем вы решите пойти по этому пути, помимо вопроса, связанного с @felipeclopes, посмотрите:

  • этот ответ StackOverflow относительно конкатенации строк i18n (tl; dr Пожалуйста, не для вашей команды перевода).
  • Вопросы StackOverflow здесь и здесь, похожие на ваш вопрос.

Ответ 2

Вы можете использовать следующий синтаксис, например, в следующем примере:

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

Этот пример был взят из: Рефакторинг Ruby on Rails i18n файлов YAML с использованием словарей