2015-11-06 3 views
0

Я бы хотел, чтобы некоторые переводы имели разные значения в зависимости от среды.Различные переводы для среды

Rails.env.test? && I18n.t('foo') # => 'A value' 
Rails.env.development? && I18n.t('foo') # => 'A different value' 

Для достижения этого я могу представить себе несколько подходов:

  • Возможность встраивать Еврорадио в en.yml
  • Возможность создавать за охрану окружающей среды файлы локали, например, en.test.yml
  • Возможность напрямую задать запись: I18n.set('foo', 'bar') if Rails.env.test?

Однако я не мог найти какой-либо из этих решений готова к использованию.

Есть ли один?

ответ

1

Я думаю, что Вам нужно что-то вроде этого:

en.production.yml:

en: 
    production: 
    foo: "Foo" 
    bar: "Bar" 

en.development.yml:

en: 
    development: 
    foo: "foo" 
    bar: "bar" 

en.test.yml:

en: 
    test: 
    foo: "-foo-" 
    bar: "-bar-" 

и используя это мнение и контроллеры:

I18n.t("#{Rails.env}.foo") 
I18n.t("#{Rails.env}.bar") 


Update:

Если Вам просто нужно заменить переменный перевод, использование интерполяция:

en.yml:

en: 
    foo: "Foo %{variable}" 
    bar: "%{var} Bar" 

и используя:

I18n.t('foo', :variable => 'Bar') 
I18n.t('bar', :var => 'Foo') 
+0

Это не очень хорошее решение - оно не позволяет переопределять произвольные ключи с значениями по-env. – vemv

+0

Затем посмотрите [правила плюрализации] (http://guides.rubyonrails.org/i18n.html#pluralization) - может быть, Ruby on Rails допускает другие правила перевода, а не только для множественных чисел? –

+1

Спасибо за указание в правильном направлении. 'I18n.backend.store_translations' позволяет переопределять записи, зависящим от env-способом, если хотите. Добавьте это к своему ответу, и я соглашусь с ним :) – vemv

Смежные вопросы