Направляющие i18n: я могу выключить “перевод недостающие” ошибки?

У меня есть многопользовательское приложение, и я экспериментирую с использованием i18n драгоценного камня, чтобы позволить каждому из наших клиентов настраивать систему к их симпатии, изменение текста на различных страницах, настройка электронных писем, и т.д. По общему признанию я не использую i18n, как он был предназначен, чтобы использоваться, так как я на самом деле не перевожу различные "языки", все находится на английском языке, но у каждого клиента есть РАЗЛИЧНЫЙ английский, если это имеет смысл.

Однако, я столкнулся с тем, что я думаю, ужасно плохое проектное решение в i18n драгоценном камне: если никогда перевод не существует, а не просто не выполнение перевода и распечатывание вообще, это обычно было бы, это повышает ошибку. Например,

<%= distance_of_time_in_words_to_now @press_release.submitted_at %>

выходит как

translation missing: en, datetime, distance_in_words, x_days

Я имею в виду, продвиньтесь! Я даже не ХОЧУ, чтобы это было переведено.

Я понимаю, что причина, это происходит, состоит в том, потому что мне не загрузили переводы по умолчанию, но я использую ActiveRecord в качестве бэкенда, и я хотел содержать его в чистоте. "Решение" состояло бы в том, чтобы импортировать все yaml файлы перевода в мое хранилище перевода базы данных, но это не походит на хорошую идею. Что, если я обновляю направляющие в будущем? Я оказываюсь перед необходимостью волноваться о хранении всех этих переводов в синхронизации.

Снова, я не могу понять, почему это - поведение по умолчанию. Когда КТО-ЛИБО хотел бы, чтобы то броское сообщение об ошибке обнаружилось вместо того, чтобы просто использовать значение по умолчанию "3 дня назад"?

Так или иначе мой вопрос, существует ли способ иметь его, автоматически выключают перевод и используют непереведенное сообщение, если перевод не существует?Спасибо!

12
задан Philip Brocoum 17 June 2010 в 12:15
поделиться

1 ответ

Кажется, это помогает.

require 'i18n' # without this, the gem will be loaded in the server but not in the console, for whatever reason

# store translations in the database's translations table
I18n.backend = I18n::Backend::ActiveRecord.new

# for translations that don't exist in the database, fallback to the Simple Backend which loads the default English Rails YAML files
I18nSimpleBackend = I18n::Backend::Simple.new
I18n.exception_handler = lambda do |exception, locale, key, options|
  case exception
  when I18n::MissingTranslationData
    I18nSimpleBackend.translate(:en, key, options || {})
  else
    raise exception
  end
end
7
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: