Как использовать ключ i18n в качестве перевода по умолчанию в Rails 3?
Например:
I18n.t('something')
должен выводиться только
something
если перевод отсутствует.
Ответы
Ответ 1
нет, это невозможно. Если вы используете I18, вам нужно иметь файл, соответствующий языку, иначе I18n будет жаловаться.
Конечно, вы можете установить язык по умолчанию в файле environment.rb. Должно быть около дна, и вы можете установить его для любого языка, который вам нужен, но в вашей папке locales/
вам понадобится соответствующий перевод yml
.
Ответ 2
Возможно:
См. Раздел 4.1.2 "По умолчанию" в API интернационализации Rails.
I18n.t :missing, :default => 'Not here'
# => 'Not here'
Ответ 3
На рельсах 4 вы можете изменить обработчик исключений.
Добавьте в config/initializers/i18n.rb
следующее:
module I18n
class MissingTranslationExceptionHandler < ExceptionHandler
def call(exception, locale, key, options)
if exception.is_a?(MissingTranslation)
key
else
super
end
end
end
end
I18n.exception_handler = I18n::MissingTranslationExceptionHandler.new
Теперь вы можете просто делать:
<p><%= t "Not translated!" %></p>
Руководство по теме: http://guides.rubyonrails.org/i18n.html#using-different-exception-handlers
Ответ 4
боковой примечание:
это может помочь выяснить, что Rails считает текущую область действия (например, при использовании ".something" )
http://unixgods.org/~tilo/Rails/which_l10n_strings_is_rails_trying_to_lookup.html
таким образом, вы можете лучше избегать отсутствия переводов из-за неправильного размещения строк перевода в L10n файле/неправильных клавишах
Ответ 5
Ответ Дэвида - правильное решение вопроса, другой (более подробный) способ сделать это - спасти и вернуть ключ:
def translate_nicely(key)
begin
I18n.translate!(key)
rescue
key
end
end