Возврат к языку по умолчанию, если перевод отсутствует - PullRequest
38 голосов
/ 24 февраля 2010

в интернационализированном приложении Rails (2.3.5) я хотел бы показать перевод из локали по умолчанию вместо «перевода не хватает» - есть билет на это, но кажется, он все еще ожидает:

https://rails.lighthouseapp.com/projects/8994/tickets/2637-patch-i18n-look-up-a-translation-with-the-default-locale-when-its-missed-with-another-specific-locale

Например (взято из тикета), с двумя файлами перевода, en.yml и es.yml:

en:

  hello: 'hello'

  hello_world: 'hello world'



es:

  hello_world: 'hola mundo'

Когда я выполняю этот код:

I18n.t :hello, :locale => :es

Rails возвращает "привет" вместо span с "переводом отсутствует".

Поскольку заявка еще не завершена, как я могу реализовать эту функцию? Я знаю, что могу пройти и изменить все мои вызовы I18n.t, чтобы иметь опцию: default, но я бы предпочел не просматривать все представления, если я могу избежать этого! Так как это патч, я полагаю, что мог бы применить его к замороженным драгоценным камням Rails, но я бы предпочел этого избежать, если смогу.

Ответы [ 3 ]

149 голосов
/ 25 октября 2011

В настоящее время нет необходимости использовать отдельный гем i18n, при простой установке Rails 3.0.6 и выше (включая 5.0) значение fallbacks может быть одним из следующих :

# application.rb

# rails will fallback to config.i18n.default_locale translation
config.i18n.fallbacks = true

# rails will fallback to en, no matter what is set as config.i18n.default_locale
config.i18n.fallbacks = [:en]

# fallbacks value can also be a hash - a map of fallbacks if you will
# missing translations of es and fr languages will fallback to english
# missing translations in german will fallback to french ('de' => 'fr')
config.i18n.fallbacks = {'es' => 'en', 'fr' => 'en', 'de' => 'fr'}
19 голосов
/ 24 февраля 2010

Если вы используете Rails 2 , при условии, что вы используете самый последний гем I18n, добавьте это в инициализатор:

I18n.backend.class.send(:include, I18n::Backend::Fallbacks)

Затем вы можете добавить свои запасные варианты следующим образом:

I18n.fallbacks.map('es' => 'en')
0 голосов
/ 19 мая 2011

Я думаю, что проще всего добавить это в ваши конфигурационные файлы (например, application.rb):

 config.i18n.fallbacks = true

Это очень полезно для региональных локалей, таких как en-US, en-CA и т. Д., Поскольку они могут автоматически переключаться на локали en.

Как указывает Джимми, вы можете даже изменить механизм отката с помощью:

I18n.fallbacks.map('es' => 'en')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...