Интернационализация и локализация Rails. gem russian

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    3 Favorites

    Интернационализация и локализация Rails. gem russian - Presentation Transcript

    1. Интернационализация и локализация Ruby on Rails. gem russian Ярослав Маркин Москва, апрель 2009
    2. Привет? • Ярослав Маркин • evilmartians.ru — небольшая команда рельсовиков (разработка и консультации) • Где вы меня видели? github (gem russian), контрибуты в Rails • В далеком 2006 вместе с Юликом Тархановым и Ильей Немихиным сделали лист ror2ru и начали работу над rubyonrails.ru
    3. Локализация и интернационализация до Rails 2.2 • gem rutils, Brazilian Rails, monkeypatching... • gibberish, Localization Simplified, плагины вокруг gettext, globalite, ... • Globalize • Нет единого стандарта, ломается с каждой версией Rails
    4. Rails I18n • Лето 2008, Sven Fuchs & Co — приглашены все авторы плагинов и библиотек для локализации и интернационализации • Цель — общий API для всех проектов локализации и интернационализации • Поддержка всех языков без monkeypatching • Заменяемые бекенды (любая реализация переводов с любым хранилищем — БД, файлы, GetText) • Основа для движков интернационализации (Globalize2) • Сроки — RailsConf EU 2008
    5. Архитектура I18n • I18n API (работа с локалью, localize, translate) • Подключаемые бекэнды, реализующие API (SimpleBackend) • I18n для Rails: набор патчей для Rails, которые пользуются I18n
    6. I18n API • I18n.t (translate) — перевод по ключу • I18n.l (localize) — локализация даты/времени • Всего два главных метода — их вы в основном и будете использовать
    7. Как делать файлы переводов? • SimpleBackend: YAML или обычный Ruby хеш • Вершина дерева — название локали (например, :ru) • Файлы переводов загружаются из I18n.load_path (lazy loading)
    8. Файл переводов: .rb с хешем { :'en' => { :foo => { :bar => \"baz\" } } }
    9. Файл переводов: .yaml en: foo: bar: baz
    10. I18n API: а также... • load_path — путь к загружаемым локалям (в Rails — config/locales) • locale — акцессор для текущей локали (в рамках треда, можно устанавливать в before_filter) • default_locale — локаль по умолчанию (:en, забегая вперед — russian устанавливает ее в :ru) • exception_handler — обработчик исключений (например, сделать fallback если нет перевода — по умолчанию этого не делается) • backend — акцессор для используемого бекэнда (через него меняется класс бекэнда)
    11. I18n.t (подробно смотрите в Rails Guides) • I18n.t :message • I18n.t 'message' • I18n.t :invalid, :scope => [:activerecord, :errors, :messages] • I18n.translate :\"activerecord.errors.messages.invalid\" • I18n.t :missing, :default => 'Not here' • I18n.t :missing, :default => :other_key • I18n.t :missing, :default => [:also_missing, 'Not here']
    12. I18n.l (подробно смотрите в Rails Guides) • I18n.l(date, options) • I18n.l(time, options) • I18n.l(time, :format => :short) • I18n.l(time, :format => :long) • I18n.l(time, :format => \"%a, %d %b %Y\")
    13. Интерполяция • I18n.backend.store_translations :en, :thanks => 'Thanks {{name}}!' • I18n.translate :thanks, :name => 'Jeremy'
    14. Плюрализация • В SimpleBackend «зашита» на правила английского языка • I18n.t :key, :count => 1 (2, 3, ..) • SimpleBackend: pluralize возвращает ключ, по которому происходит поиск, например, :’key.one’ или :’key.many’.
    15. Явная передача локали • I18n.t :foo, :locale => :ru • I18n.l Time.now, :locale => :ru
    16. Rails и I18n • Алиасы: I18n.l как l, I18n.t как t в ActionController/ActionView • I18n.load_path — по умолчанию смотрит в config/locales • Выбор view в зависимости от локали (например, app/views/posts/index.ru.html.erb) • Lookup в зависимости от view: (app/views/books/index.html.erb), l :”.title” будет смотреть в locale.books.index.title • Неочевидный плюс: вынос всех строковых ресурсов приложения в YAML!
    17. ActiveRecord • Перевод всех сообщений для валидации (для подстановки доступны макросы {{model}}, {{attribute}}, {{value}}, иногда {{count}}) • Оверрайд ошибок для каждой конкретной модели и каждого атрибута • Перевод Model.human_name — названия модели. • Перевод Model.human_attribute_name — названия атрибута модели
    18. ActionView: переводы хелперов • number_with_delimiter, number_to_currency, number_to_percentage, number_to_precision • number_to_human_size • distance_of_time_in_words, distance_of_time_in_words_to_now, time_ago_in_words • error_messages_for
    19. Проблемы • Поддержка «экзотических» языков никого не волновала — русский оказался «экзотическим» • Нет поддержки двух форм названий месяцев (августа/Август) • Для поддержки других механизмов плюрализации предлагалось писать бекэнд • В Rails были включены не все нужные для нормальной локализации функции • Unicode CLDR — оказалось слишком сложно на первом этапе, хотя там есть все что нужно
    20. Соглашение по Rails I18n • gem i18n и поддержка I18n в Rails полностью — только для английского языка • Все остальные случаи — «делайте свои бекэнды»
    21. gem russian • Тогда мы сделаем свой бекэнд, с блекджеком... • Цель: сначала сделать полную поддержку русского языка, потом сделать так чтобы она входила в core. Минимум хаков, обратная совместимость (никак не сломать I18n и существующие методы — например, ни в коем случае не перегружать strftime). • gem install russian, http://github.com/yaroslav/russian • Появился 1 сентября, к началу RailsConf EU и уже фигурировал в слайдах на первой презентации Rails I18n (Sven Fuchs)
    22. Содержимое gem russian • gem i18n в vendor/. Можно использовать как плагин к Rails (где уже есть I18n) или как отдельный gem. • Собственный бекэнд (AdvancedBackend — поддержка двух форм названий месяцев и плюрализации, задаваемой как lambda в файле переводов) • Хаки для Rails (Дата-время, форматирование сообщений валидации, плагин i18n-label) • Хелперы в модуле Russian — полезны если в приложении используется только русский язык • Набор переводов для русского языка (само собой разумеется)
    23. Что происходит при инициализации russian • Заменяется бэкэнд I18n со стандартного на собственный бекэнд Russian (I18n::Backend::Advanced) • Локаль русского языка (:'ru') становится локалью по умолчанию • Загружаются все файлы переводов для русского языка, в том числе переводы для Rails.
    24. russian: Дата и время. Два варианта названий дней и названий месяцев
    25. russian: Плюрализация (lambda)
    26. Модуль Russian • Russian.locale — :’ru’ • Russian.init_i18n — инициализация (бекэнд, локаль по умолчанию) • Russian.t/translate — I18n.t с форсированием русской локали • Russian.l/localize — I18n.l с форсированием русской локали • Russian.strftime — прокси для localize • Russian.p/pluralize — плюрализация без необходимости иметь таблицу переводов (просто перечислить варианты при вызове) • Russian.transliterate/translit — транслитерация
    27. russian и Rails • Переводы для русского языка • DateTime helpers: ключ :use_standalone_month_name для второй формы названия месяца, автоопределение (если :select_month используется отдельно или есть :discard_day) • i18n_label: для хелпера label используются переводы (этого все еще нет в Rails) • Включен известный хак для сообщений валидации (“^” в начале строки не будет выводить имя атрибута в error_messages_for) • Метод parameterize обучен русскому языку — теперь легко делать пермалинки из русских букв (“Всем привет!”.parameterize вернет “vsem-privet”)
    28. I18n::* vs Russian::* • russian полностью обратно совместим с I18n • Пользуйтесь I18n.l, I18n.t для мультиязычных проектов • Russian — набор шорткатов (strftime, pluralize) и специфичных (translit) методов. Хорош для проектов полностью на русском. • Франзузу не нужно писать gem french, украинцу — gem ukrainian. Полная совместимость бекендов, просто включены все возможности для поддержки русского — не в ущерб другим языкам.
    29. Спасибо Юлику за наше счастливое детство • Юлик Тарханов (live.julik.nl): Поддержка Unicode в Rails 1.2, rutils
    30. Что дальше • http://rails-i18n.org • http://groups.google.com/group/rails-i18n • Локали: http://github.com/svenfuchs/rails-i18n • Патчи и предложения по russian: http://github.com/yaroslav/russian • Поддержка lambda в переводах (Clemens Kofler) • Работа над поддержкой/импортом CLDR почти не начиналась но очень нужна
    31. Вопросы? • yaroslav@markin.net • twitter.com/yaroslav • github.com/yaroslav • http://evilmartians.ru

    + Yaroslav MarkinYaroslav Markin, 6 months ago

    custom

    1783 views, 3 favs, 0 embeds more stats

    «Интернационализация и
    ло more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1783
      • 1783 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 3
    • Downloads 13
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories