R18n —
i18n для Ruby и Rails

Андрей Ситник, Evil Martians
sitnik.ru
О чём речь

I18n, internationalization, интернационализция —
   когда в программе можно переключить язык
   (делается разр...
i18n
●   Перевод интерфейса
      t('products.robots.title') →
      Покупайте роботов | Buy robots
●   Локализация дат и ...
Зачем
●   Model — View — Controller — Translations
    ●   проще менять термин
    ●   проверять орографию
    ●   плюрали...
R18n
Веб-приложение на Ruby on Rails


r18n-rails                          Отдельно разрабатываются
                      ...
R18n ↔ Rails I18n

●
    Появились в одно и то же время
●
    Отличия в идеологии и архитектуре
●
    R18n полностью совме...
Синтаксис
                                                      R18n
/config/locales/ru.yml     /app/i18n/ru.yml

ru:     ...
Переменные

       hello: Привет, %{name}        I18n
       t('hello', :name => 'Иван')


       hello: Привет, %1

R18n ...
Плюрализация
       robots:                                 I18n
         one: %{count} робот
         few: %{count} робот...
Перевод моделей
class Product
  include DataMapper::Resource
  property :title_ru, String
  property :title_en, String

  ...
Загрузчики перевода
class DBLoader
  def available
    Translation.find(:all).map(&:locale)
  end
  def load(locale)
    T...
Фильтры
●   Можно установить фильтр для:
    ●   YAML-типа, например, !!pl
    ●
        Любых возвращаемых строк
    ●   ...
Пример фильтра
Разные строки, в зависимости от пола пользователя:

friendship: !!gender
  f: She adds a friend
  m: He add...
Фильтры из коробки
●   Экранирование HTML

      R18n::Filters.on(:global_escape_html)

●   Markdown и Textile

      help...
Всё на фильтрах

●   Переменные (%1) — глобальный фильтр
●   Плюрализация — тоже фильтр для !!pl
●
    Совместимость с Rai...
Вопросы?



r18n.rubyforge.org

twitter.com/andrey_sitnik
Upcoming SlideShare
Loading in...5
×

R18n

2,074

Published on

R18n is an tool to internationalize and localize your Rails, Sinatra or desktop Ruby application.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,074
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

R18n

  1. 1. R18n — i18n для Ruby и Rails Андрей Ситник, Evil Martians sitnik.ru
  2. 2. О чём речь I18n, internationalization, интернационализция — когда в программе можно переключить язык (делается разработчиком) l10n, localization, локализация — перевод программы на какой-то язык (делается переводчиком)
  3. 3. i18n ● Перевод интерфейса t('products.robots.title') → Покупайте роботов | Buy robots ● Локализация дат и чисел l product.created_at → 15.09.2010 | 09/15/2010 ● Перевод данных в БД product.title → Робот | Robot
  4. 4. Зачем ● Model — View — Controller — Translations ● проще менять термин ● проверять орографию ● плюрализация («1 робот», «2 робота», «5 роботов») ● Развивать свой язык, чтобы он стал таким же удобным, как английский ● Английский далеко и самый удобный и функциональный (см. Эсперанто, Ифкуиль)
  5. 5. R18n Веб-приложение на Ruby on Rails r18n-rails Отдельно разрабатываются Rack и Merb r18n-rails-api r18n-core r18n-desktop sinatra-r18n Приложение для Веб-приложение на Sinatra рабочего стола
  6. 6. R18n ↔ Rails I18n ● Появились в одно и то же время ● Отличия в идеологии и архитектуре ● R18n полностью совместим с Rails I18n
  7. 7. Синтаксис R18n /config/locales/ru.yml /app/i18n/ru.yml ru: hello: hello: world: Привет, мир world: Привет, мир /app/view/index.html.erb /app/view/index.html.erb t('program.name') t.program.name Rails I18n
  8. 8. Переменные hello: Привет, %{name} I18n t('hello', :name => 'Иван') hello: Привет, %1 R18n t.hello('Иван')
  9. 9. Плюрализация robots: I18n one: %{count} робот few: %{count} робота many: %{count} роботов t('robots', :count => @robots.count) robots: !!pl # ← задаётся явно 1: %1 робот # с помощью YAML-типа 2: %1 робота n: %1 роботов R18n t.robots(@robots.count)
  10. 10. Перевод моделей class Product include DataMapper::Resource property :title_ru, String property :title_en, String include R18n::Translated translations :title end Переводить можно любой класс, включая ActiveRecord, DataMapper, MongoMapper и т. д.
  11. 11. Загрузчики перевода class DBLoader def available Translation.find(:all).map(&:locale) end def load(locale) Translation.find(locale).to_hash end end set :translations, [DBLoader.new, '/path/to/dir/']
  12. 12. Фильтры ● Можно установить фильтр для: ● YAML-типа, например, !!pl ● Любых возвращаемых строк ● Случая, когда перевод не был найден. Например, чтобы записывать в лог в production и выводить красным в development ● Фильтры идут каскадом ● Фильтры можно динамически включать/выключать
  13. 13. Пример фильтра Разные строки, в зависимости от пола пользователя: friendship: !!gender f: She adds a friend m: He adds a friend R18n::Filters.add('gender') do |value, c, user| if user.female? value['f'] else value['m'] end end t.friendship(@user)
  14. 14. Фильтры из коробки ● Экранирование HTML R18n::Filters.on(:global_escape_html) ● Markdown и Textile help: !!markdown ## Help **Note:** read docs before work ● Лямбда-функция
  15. 15. Всё на фильтрах ● Переменные (%1) — глобальный фильтр ● Плюрализация — тоже фильтр для !!pl ● Совместимость с Rails — просто набор нужных фильтров
  16. 16. Вопросы? r18n.rubyforge.org twitter.com/andrey_sitnik
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×