R18n
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

R18n

  • 2,474 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,474
On Slideshare
2,474
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. R18n — i18n для Ruby и Rails Андрей Ситник, Evil Martians sitnik.ru
  • 2. О чём речь I18n, internationalization, интернационализция — когда в программе можно переключить язык (делается разработчиком) l10n, localization, локализация — перевод программы на какой-то язык (делается переводчиком)
  • 3. i18n ● Перевод интерфейса t('products.robots.title') → Покупайте роботов | Buy robots ● Локализация дат и чисел l product.created_at → 15.09.2010 | 09/15/2010 ● Перевод данных в БД product.title → Робот | Robot
  • 4. Зачем ● Model — View — Controller — Translations ● проще менять термин ● проверять орографию ● плюрализация («1 робот», «2 робота», «5 роботов») ● Развивать свой язык, чтобы он стал таким же удобным, как английский ● Английский далеко и самый удобный и функциональный (см. Эсперанто, Ифкуиль)
  • 5. R18n Веб-приложение на Ruby on Rails r18n-rails Отдельно разрабатываются Rack и Merb r18n-rails-api r18n-core r18n-desktop sinatra-r18n Приложение для Веб-приложение на Sinatra рабочего стола
  • 6. R18n ↔ Rails I18n ● Появились в одно и то же время ● Отличия в идеологии и архитектуре ● R18n полностью совместим с Rails I18n
  • 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. Переменные hello: Привет, %{name} I18n t('hello', :name => 'Иван') hello: Привет, %1 R18n t.hello('Иван')
  • 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. Перевод моделей class Product include DataMapper::Resource property :title_ru, String property :title_en, String include R18n::Translated translations :title end Переводить можно любой класс, включая ActiveRecord, DataMapper, MongoMapper и т. д.
  • 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. Фильтры ● Можно установить фильтр для: ● YAML-типа, например, !!pl ● Любых возвращаемых строк ● Случая, когда перевод не был найден. Например, чтобы записывать в лог в production и выводить красным в development ● Фильтры идут каскадом ● Фильтры можно динамически включать/выключать
  • 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. Фильтры из коробки ● Экранирование HTML R18n::Filters.on(:global_escape_html) ● Markdown и Textile help: !!markdown ## Help **Note:** read docs before work ● Лямбда-функция
  • 15. Всё на фильтрах ● Переменные (%1) — глобальный фильтр ● Плюрализация — тоже фильтр для !!pl ● Совместимость с Rails — просто набор нужных фильтров
  • 16. Вопросы? r18n.rubyforge.org twitter.com/andrey_sitnik