Чтобы добиться именно этого, у меня есть инициализатор с
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
См. исходный код для получения дополнительной информации.
Изменить:
Это напомнило мне, что существует раздражающая ошибка в ActionView LookupContext, которая мешает этому работать для локализованные представления (правда работает для файлов локалей). Я вижу, что до сих пор не исправили. По сути, если у вас есть какие-либо локализованные представления (например, страницы справки, которые не подходят для хранения в файлах локали из-за их длины), то локаль fr-CA не вернется к представлению под названием help. fr.html.erb. Вы должны либо назвать файл help.fr-CA.html.erb или, что я и сделал, исправив LookupContext другим инициализатором, примерно так:
module ActionView
class LookupContext
# Override locale= to also set the I18n.locale. If the current I18n.config object responds
# to original_config, it means that it's has a copy of the original I18n configuration and it's
# acting as proxy, which we need to skip.
def locale=(value)
if value
config = I18n.config.respond_to?(:original_config) ? I18n.config.original_config : I18n.config
config.locale = value[0,2] # only use first part of the locale in lookups
end
super(@skip_default_locale ? I18n.locale : default_locale)
end
end
end
Еще одно редактирование: обратите внимание, что исправление довольно грубое и ломает полный поиск локали, переходя сразу к языку. Если вам нужно также иметь полностью совпадающие представления (язык-РЕГИОН), вам нужно улучшить мой код!
person
Ola Tuvesson
schedule
14.11.2012