2012-06-04 4 views
0

У меня есть локали, которые приходят в виде ан-ГБ, ан-США, де-DE, де-АТ, де-CH и т.д ..Доля переводов между несколькими локалей в Rails3

Теперь проблема в том, что de-DE, de-AT, de-CH все имеют одинаковые переводы. Так что необходимость определять их несколько раз раздражает и не очень СУХОЙ.

Прежде, чем кто-либо предложит использовать только: de как locale, я не могу. Вот как я это делал раньше, и из-за какой-то бизнес-логики я не могу изменить новый формат en-GB, который был навязан мне.

Помощь была бы очень признательна.

+0

Вы говорите об очистке ваших yml-файлов? – jdoe

+0

На данный момент у меня есть только de.yml, и все три локали (de-DE, de-AT ..) должны использовать этот для локализации – Tigraine

ответ

3

Если вы используете YAML для вашей локализации, то у вас уже есть необходимые инструменты. YAML позволяет вам написать что-то вроде миксинов:

en: &english 
    hello: Hello, %{username}! 

en-GB: 
    <<: *english 

en-US: 
    <<: *english 

Надеюсь, у вас возникла идея сушить здесь.

+0

Awesome .. Я уже пробовал это, но я допустил ошибку, назвав ярлык & en, поэтому я получил ошибки парсер-анализа, как только я запустил рельсы. С другой меткой это работает .. – Tigraine

1

Еще DRY еще, но что более важно, ваши переводы не дублируются в памяти:

Создать инициализатор i18n, который включает в себя: резервные объявления

require "i18n/backend/fallbacks" 
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) 

И подвигать ваши переводы в de: и en: местах.

Вызов как этот

I18n.t :foo, :locale => 'de-AT' 

будет сначала искать de-AT.foo и предоставление нет матча, будет искать de.foo.

Дополнительная информация о i18n wiki.

Смежные вопросы