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

Используйте другой ключ I18n в интерполяции I18n

Это может быть I18n-ception, но позволяет сказать, что у меня есть файл en.yml, как показано ниже

en:
  my_var: Foo
  my_message: "This is a message where I'd like to interpolate I18n %{my_var}"

Есть ли способ указать I18n, что %{my_var} должен быть ключом my_var в en.yml?

Я знаю, что смогу выполнить это, сделав что-то вроде

I18n.t 'my_message', :my_var => I18n.t('my_var')

но я надеялся, что у I18n есть способ для самостоятельных ссылок.

4b9b3361

Ответ 1

Это на самом деле довольно распространенный вопрос, но короткий ответ - нет, это невозможно, к сожалению: (

Ответ 2

В настоящее время я борюсь за это... И, наконец, я создаю пользовательский тип ямля.

в разделе инициализации.

Psych.add_builtin_type('i18n') { |_type, value|
  ->(_key, _options) do
    value.gsub(/%\{([\w.]+)\}/) do |match|
      key = $1.to_sym
      if I18n.exists?(key)
        I18n.t(key)
      else
        match
      end
    end
  end
}
I18n.reload!

в en.yml

en:
  my_var: Foo
  my_message: !!i18n "This is a message where I'd like to interpolate I18n %{my_var}"

!!i18n применить пользовательский встроенный тип.