Rails i18n значение по умолчанию - PullRequest
3 голосов
/ 16 августа 2010

Мое текущее приложение имеет полный английский перевод, но я не могу убедиться, что дополнительные языки также полностью реализованы.

Это приводит к предупреждению translation_missing или скорее к строкам типа "de, install, steps, language""

Есть ли способ указать рельсам использовать английский перевод, если нет (в данном примере) немецкого?

Ответы [ 6 ]

3 голосов
/ 14 марта 2011

У нас это есть в config/initializers/i18n.rb:

module I18n
  # For MissingTranslationData, fall back to the default locale and then to the last key.
  # For other exceptions, use the default_exception_handler.
  def self.fallback_exception_handler(exception, locale, key, options)
    options ||= {}
    if !Rails.env.development? && exception.is_a?(MissingTranslationData)
      if locale == self.default_locale
        send(:normalize_translation_keys, locale, key, options[:scope]).last.to_s
      else
        self.t(key, options.merge(:locale => self.default_locale))
      end
    else
      send :default_exception_handler, exception, locale, key, options
    end
  end

end

I18n.exception_handler = :fallback_exception_handler

Обратите внимание, что по замыслу оно не будет возвращаться к разработке (поэтому вы заметите отсутствующие переводы).

Также этоприложение Rails 2.Я считаю, что обработка аварийных исключений несколько изменилась в Rails 3.

2 голосов
/ 16 августа 2010

@ tsdbrown's - хорошее предложение. Мой немного проще. Например, когда вы создаете свой файл ресурсов на немецком языке, один из способов подойти к этому - начать с файла на английском языке и передать его своим переводчикам. Что бы они не переводили, все еще существует, только на английском языке. Тогда у вас нет этой проблемы вообще. Еще одно преимущество использования этого метода заключается в том, что, когда вы хотите полностью перевести файл, вам не нужно выполнять гигантский поиск и сравнивать, чтобы добавить недостающие строки.

1 голос
/ 22 января 2013

Это уже так!

Rails будет выводить «Пропущенный перевод» только при разработке.

В рабочем режиме Rails будет делать именно то, что вы просили:к переводу из локали по умолчанию, которая указана в config/application.rb.

1 голос
/ 15 октября 2011

Я согласен с NinjaCat. И решение Хенрика выглядит очень многообещающе +1!

Мне показалось полезным пометить эти новые отсутствующие переводы (которые отображаются в английском как файл 'de') маркером, например +++, чтобы переводчики могли легко их найти.

Вот дополнительный совет:

Вы можете переопределить метод поиска в бэкенде I18N в режиме разработки, чтобы он распечатывал ключи, которые Rails пытается найти в бэкэнде I18N - таким образом, вы можете эффективно проверить в режиме dev-mode, что I18N ключ, который вы положили где-то в коде, действительно ищется в бэкэнде в том месте, в котором, как вы думали, он должен быть ... (Я видел довольно много случаев, когда строки перевода находятся в файле L10N, но с неверными ключами - этот метод помогает против этого).

http://unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

Смотри также:

Rails / I18n: область по умолчанию

0 голосов
/ 28 апреля 2012

Существует довольно простой способ сделать это: просто сконфигурируйте гем I18n для использования резервного интерфейса: https://github.com/svenfuchs/i18n/wiki/Fallbacks

0 голосов
/ 16 августа 2010

возможно, вы могли бы использовать это с некоторыми небольшими изменениями: http://github.com/javan/rails-i18n-translation-inheritance-helper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...