Например:
I18n.t('something')
должен выводиться только
something
если перевод отсутствует.
Например:
I18n.t('something')
должен выводиться только
something
если перевод отсутствует.
нет, это невозможно. Если вы используете I18, вам нужно иметь файл, соответствующий языку, иначе I18n будет жаловаться.
Конечно, вы можете установить язык по умолчанию в файле environment.rb. Должно быть около дна, и вы можете установить его для любого языка, который вам нужен, но в вашей папке locales/
вам понадобится соответствующий перевод yml
.
Возможно: См. Раздел 4.1.2 "По умолчанию" в API интернационализации Rails.
I18n.t :missing, :default => 'Not here'
# => 'Not here'
На рельсах 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
боковой примечание: это может помочь выяснить, что Rails считает текущую область действия (например, при использовании ".something" )
http://unixgods.org/~tilo/Rails/which_l10n_strings_is_rails_trying_to_lookup.html
таким образом, вы можете лучше избегать отсутствия переводов из-за неправильного размещения строк перевода в L10n файле/неправильных клавишах
Ответ Дэвида - правильное решение вопроса, другой (более подробный) способ сделать это - спасти и вернуть ключ:
def translate_nicely(key)
begin
I18n.translate!(key)
rescue
key
end
end