Avoiding the Tar Pits of Localization with Jeff Casimir
I18n by Sven Fuchs
gem 'i18n'
I18n.locale = :ru
YAML
Keys
Scopes
Interpolation
Transliteration
Pluralization
l10n
# config/locales/ru.yml
ru:
title: Интернационализация
statuses:
- Активные
- Отключённые
- Архив
# app/views/my_view.html.slim
= t('title') # -> Интернационализация
= t('statuses')[0] # -> Активные
= t('statuses').join(', ') # -> Aктивные, Отключённые, Архив
# config/locales/ru.yml
ru:
statuses: &statuses_hash
active: Активные
disabled: Отключённые
archived: Архив
new_statuses:
<<: *statuses_hash
additional: Дополнительные
# app/views/my_view.html.slim
= t('statuses.active') # -> Активные
= t('statuses').values.join(', ') # -> Aктивные, Отключённые, Архив
# app/views/my_view.html.slim
- current_status = 'active'
= t("statuses.#{current_status}") # -> Активные
= t(['statuses', current_status].join('.')) # -> Активные
= t(current_status, scope: 'status') # -> Активные
# config/locales/ru.yml
ru:
error:
title: 'Опаньки, ошибочка вышла.'
description: "Вот такая: '%{error_name}' c кодом %{error_code}."
# app/views/my_view.html.slim
= t('error.type') # -> Опаньки, ошибочка вышла.
= t('error.description', error_name: 'Ошибка сервера', error_code: 500)
# -> "Вот такая: 'Ошибка сервера' c кодом 500."
# config/locales/ru.yml
ru:
error:
title: 'Опаньки, ошибочка вышла.'
description: "Вот такая: '%{error_name}' c кодом %{error_code}."
errors:
server: Ошибка сервера
# app/views/my_view.html.slim
= t('error.type') # -> Опаньки, ошибочка вышла.
= t('error.description', error_name: t('errors.server'), error_code: 500)
# -> "Вот такая: 'Ошибка сервера' c кодом 500."
# config/locales/ru.yml
i18n:
transliterate:
rule:
ю: "yu"
я: "ya"
# app/views/my_view.html.slim
= I18n.transliterate('Коля') # -> Kolya
# config/locales/ru.yml
ru:
statuses:
- "%{count} статус"
- "%{count} статусов"
# app/views/my_view.html.slim
= t('statuses', count: 1) # -> 1 статус
= t('statuses', count: 5) # -> 5 статусов
# config/locales/ru.yml
ru:
salutation: lambda { |key, options| options[:gender] == 'm' ? "Г-н %{options[:name]}" : "Г-жа %{options[:name]}" }
# app/views/my_view.html.slim
= t('salutation', gender: 'm', name: 'Кугаевский') # -> Г-н Кугаевский
# config/locales/datetime.yml
ru:
date:
formats:
default: "%d.%m.%Y"
short: "%d %b"
long: "%d %B %Y"
# app/views/my_view.html.slim
- current_date = Date.new
= l(current_date) # -> 18.03.2017
= l(current_date, format: 'long') # -> 18 марта 2017
# config/locales/datetime.yml
ru:
time:
formats:
default: "%e %B %Y %H:%M"
full: "%e %B %Y %H:%M:%S"
# app/views/my_view.html.slim
- current_time = DateTime.new
= l(current_time) # -> 18 марта 2017 15:01
= l(current_time, format: 'full') # -> 18 марта 2017 15:01:59