github
Advanced Search
  • Home
  • Pricing and Signup
  • Explore GitHub
  • Blog
  • Login

yaroslav / russian

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 117
    • 12
  • Source
  • Commits
  • Network (12)
  • Issues (0)
  • Wiki (2)
  • Graphs
  • Branch: master

click here to add a description

click here to add a homepage

  • Branches (2)
    • i18n-0.3
    • master ✓
  • Tags (17)
    • 0.2.5
    • 0.2.4
    • 0.2.3
    • 0.2.2
    • 0.2.1
    • 0.2.0
    • 0.1.3
    • 0.1.2
    • 0.1.1
    • 0.1.0
    • 0.0.9
    • 0.0.7
    • 0.0.6
    • 0.0.5
    • 0.0.4
    • 0.0.3
    • 0.0.2
Sending Request…
Enable Donations

Pledgie Donations

Once activated, we'll place the following badge in your repository's detail box:
Pledgie_example
This service is courtesy of Pledgie.

Russian language support for Ruby and Rails | Поддержка русского языка для Ruby и Rails — Read more

  cancel

  cancel
  • Private
  • Read-Only
  • HTTP Read-Only

This URL has Read+Write access

0.2.5 - Rails 2.3.5 compatibility, transliteration improvements 
yaroslav (author)
Tue Dec 22 17:00:31 -0800 2009
commit  14545346a568d7be7800e7297d5b201a74a2c91f
tree    423b00e3d0cd5047b39c74245c41d1928a39d513
parent  f3113d9a5e582198208e2314f4d29893fe373062
russian /
name age
history
message
file .gitignore Sun Aug 31 12:51:06 -0700 2008 First code import [yaroslav]
file CHANGELOG Tue Dec 22 17:00:31 -0800 2009 0.2.5 - Rails 2.3.5 compatibility, transliterat... [yaroslav]
file LICENSE Sun Aug 31 12:51:06 -0700 2008 First code import [yaroslav]
file README.textile Sun Nov 29 12:45:41 -0800 2009 Добавил в README пример "контекстного" форматир... [dadooda]
file Rakefile Tue Dec 22 17:00:31 -0800 2009 0.2.5 - Rails 2.3.5 compatibility, transliterat... [yaroslav]
file TODO Mon Mar 16 02:14:33 -0700 2009 0.2.0 - Rails 2.3 [yaroslav]
file init.rb Sun Aug 31 12:51:06 -0700 2008 First code import [yaroslav]
directory lib/ Tue Dec 22 17:00:31 -0800 2009 0.2.5 - Rails 2.3.5 compatibility, transliterat... [yaroslav]
file russian.gemspec Tue Dec 22 17:00:31 -0800 2009 0.2.5 - Rails 2.3.5 compatibility, transliterat... [yaroslav]
directory spec/ Mon Dec 21 15:29:24 -0800 2009 Added support for multi-char substrings in tran... [dadooda]
README.textile

Russian

Поддержка русского языка для Ruby и Rails при помощи библиотеки I18n.

Russian language support for Ruby and Rails, using I18n library.

If you don’t speak Russian

This code may still be useful for you and Ruby I18n community. You can learn how to create custom backends for I18n and how to provide support of “standalone” (as defined in Unicode CLDR) month names with I18n and Rails, and also how to add dead simple pluralization rules into your translation tables. This library also includes a module (Russian) with a set of helpers to provide simplistic pluralization and strftime for Russian language — in a way that is easier than using I18n methods.

Feel free to shoot an email to Yaroslav Markin (yaroslav@markin.net)

Что это

Russian — это библиотека для полноценной поддержки русского языка (форматирование даты и времени, плюрализация, локализация в целом) для Ruby и Ruby on Rails.

Цель проекта — построить полноценную среду для русской локализации Ruby и Rails проектов, при этом используя минимально возможное количество хаков, сохраняя при этом поддержку локализации приложения на другие языки, а также форсировать включение в основную ветку I18n и Rails всех функций локализации, необходимых для работы с русским языком.

Russian использует библиотеку I18n (включена в поставку), несколько хаков поверх нее (собственный бекэнд с поддержкой специфичного для русского форматирования даты и времени, поддержкой плюрализации), несколько хаков поверх Rails (хаки хелперов даты-времени, хак для сообщений валидации) и файлы переводов, а также набор хелперов, упрощающий работу с русским языком (простая плюрализация, простой strftime и др.).

Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian и собственный бекэнд Russian, оно остается полностью совместимым с Rails i18n).

Что такое I18n

Библиотека I18n входит в состав Ruby on Rails начиная с версии 2.2. В перспективе I18n — это самое простое и недеструктивное решение для локализации и интернационализации Rails приложений, но в текущей версии отсутствовала поддержка нескольких важных возможностей, специфичных для русского языка. Таким образом, русский язык для локализации в Rails 2.2 фактически не поддерживался.

Для исправления этого досадного недоразумения появилась библиотека Russian (подробнее см. Использование).

Требования

  • Ruby 1.8 (тестировалось на 1.8.6);
  • Для использования с Rails нужна версия не ниже 2.2;
  • Для тестирования библиотеки вам понадобится RSpec.

Установка

Страница Russian на github — http://github.com/yaroslav/russian/

Gem можно устанавливать с Gemcutter (предпочтительно) и с RubyForge.

Для установки:

gem install russian

Ruby on Rails

Существует два варианта использования Russian вместе с Rails:

1. Установка gem

“Релизные” версии библиотеки для стабильных версий Rails.

В файле config/environment.rb сделайте ссылку на gem russian с Gemcutter:


Rails::Initializer.run do |config|
  config.gem 'russian', :source => 'http://gemcutter.org'
end

Чтобы установить gem, используйте команду

rake gems:install.

2. Установка плагина

Последняя версия из master-ветки, чаще всего для использования с последней (пререлизной) версией Rails.

Для того, чтобы установить Russian как плагин к Rails, используйте команду

script/plugin install git://github.com/yaroslav/russian.git

Для Windows можно использовать версию git, расположенную по адресу: http://code.google.com/p/msysgit/

Использование

При загрузке Russian включает:

  • библиотеку I18n если она еще не используется (например, если Russian используется отдельно от Rails)
  • собственный класс для I18n бекэнда (полностью совместим со стандартным бекэндом)
  • перегрузку хелперов даты для Rails (если Rails загружен)
  • пререгрузку обработки сообщений валидации для ActiveRecord (если Rails загружен)

При инициализации:

  • заменяется бэкэнд I18n со стандартного на собственный бекэнд Russian (I18n::Backend::Advanced)
  • NB: локаль русского языка (:'ru') становится локалью по умолчанию
  • загружаются все файлы переводов, в том числе переводы для Rails.

После этого можно использовать все стандартные функции библиотеки I18n, пользоваться измененным функционалом для лучшей поддержки русского языка, или использовать хелперы модуля Russian для еще более простой работы с русским языком.

Отличия от стандартной библиотеки I18n

1. Поддержка двух видов названий месяцев — контекст (“сентября”) и отдельностоящее (“Сентябрь”).

Для этого перегружена функция локализации, теперь название месяца используется в зависимости от контекста. В словарях Russian определены оба варианта.

Перегрузка недеструктивная: если для какого-то другого языка не определены два варианта названий месяцев, ошибки не возникнет.

Аналогично есть поддержка двух видов названий дней недели.

2. Плюрализация

Стандартно I18n поддерживается только плюрализация по английским правилам; бекэнд, использующийся в Russian, позволяет каждому языку определять правила плюрализации в таблице переводов, задавая их как Proc.

Перегрузка недеструктивная: если правила в таблице нет, используется правило по умолчанию (английский язык).

Правила для русского языка включены.

Справочник

Примеры и справка по переводам (I18n)

Небольшую справку по переводам (I18n) и пример того, как можно переводить имена моделей, атрибутов, и многие другие вещи, определенные в Rails или I18n, можно посмотреть в директории lib/russian/locale. Там находятся файлы переводов, которые используются в Russian, со всеми комментариями.

Вспомогательные методы модуля Russian


Russian.locale
Russian::LOCALE

— возвращает локаль русского языка (:'ru').


Russian::i18n_backend_class

— возвращает класс собственного бекенда I18n


Russian::init_i18n

— инициализация Russian. Включение бекэнда, русский язык по умолчанию, загрузка переводов.

NB: Выполняется автоматически при загрузке.


Russian::translate
Russian::t

— прокси для метода translate I18n, форсирует использование русской локали.


Russian::localize
Russian::l

— прокси для метода localize I18n, форсирует использование русской локали.


Russian::strftime

Russian::strftime(Time.now)
=> "Пн, 01 сент. 2008, 11:12:43 +0300"
Russian::strftime(Time.now, "%d %B")
>> "01 сентября"
Russian::strftime(Time.now, "%B")
=> "Сентябрь"

— strftime с форсированием русской локали (упрощенный вариант localize)


Russian::pluralize
Russian::p

Russian.p(1, "вещь", "вещи", "вещей")
=> "вещь"
Russian.p(2, "вещь", "вещи", "вещей")
=> "вещи"
Russian.p(10, "вещь", "вещи", "вещей")
=> "вещей"
Russian.p(3.14, "вещь", "вещи", "вещей", "вещи") # последний вариант используется для дробных величин
=> "вещи"

— упрощенная (без использования хешей I18n) плюрализация для русского языка


Russian::transliterate
Russian::translit

Russian.translit("рубин")
=> "rubin"
Russian.translit("Hallo Юлику Тарханову")
=> "Hallo Yuliku Tarhanovu"

— транслитерация русских букв в строке.

Ruby on Rails

Переводы

При использовании с Ruby on Rails загружаются все стандартные переводы, и русский язык становится годным к использованию для локализации. В поставку включены все нужные переводы для ActionView, ActiveRecord, ActiveSupport, которые можно переопределять по необходимости стандартными средствами I18n.

Хелперы

Хелперы даты-времени получают ключ :use_standalone_month_names для форсирования отображения отдельностоящего названия месяца (“Сентябрь” а не “сентября”). Такое имя месяца используется когда включен ключ :use_standalone_month_names (для отдельностоящего select_month он включается по умолчанию), либо когда есть ключ :discard_day.

В Russian включен плагин i18n_label, который подставляет в форм-хелпер label перевод атрибута из таблицы переводов I18n. Например:

  • в файле переводов:

ru:
  activerecord:
    attributes:
      user:
        name: "Имя"
  • во view:

<% form_for @user do |f| %>
  <%= f.label :name %>
<% end %>

Даст:


<label for="user_name">Имя</label>

Валидация

До версии Rails 2.3.4 форматирование сообщений об ошибках не было гибким, и для нормального отображения ошибок на русском языке приходилось испольковать хаки. Если вы используете Rails 2.3.4 и выше, пропустите этот пункт (используйте ключ переводов activerecord.errors.full_messages.format).

Для Rails 2.3.3 и ниже обработка ошибок в ActiveRecord перегружается — в Russian включен популярный плагин custom_error_message, с помощью которого можно переопределять стандартное отображение сообщений об ошибках. Так, например,

validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'

даст сообщение

Accepted terms нужно принять соглашение

или, например

Соглашение об использовании нужно принять соглашение

если вы указали перевод для имени атрибута.

Но

validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'

даст сообщение

Нужно принять соглашение

NB: в сообщениях валидации можно использовать такие макросы как {{attribute}}, {{value}} — подробнее см. документацию по I18n.

Параметризация строк

Перегружается метод parameterize инфлектора ActiveSupport (он же — String#parameterize), теперь в нем идет транслитерация букв русского алфавита.

Пример:


class Person
  def to_param
    "#{id}-#{name.parameterize}"
  end
end

@person = Person.find(1)
# => #<Person id: 1, name: "Дональд Кнут">

<%= link_to(@person.name, person_path(@person)) %>
# => <a href="/person/1-donald-knut">Дональд Кнут</a>

Авторы

Для сообщений об ошибках, обнаруженных неточностях и предложений:

  • Ярослав Маркин (yaroslav@markin.net)

При участии:

  • Юлика Тарханова
  • Евгения Пименова
  • Дмитрия Смалько
  • Алексея Фортуны
  • Антона Агеева
  • Александра Семенова
  • valodzka

Огромное спасибо:

Юлику Тарханову за rutils

Blog | Support | Training | Contact | API | Status | Twitter | Help | Security
© 2010 GitHub Inc. All rights reserved. | Terms of Service | Privacy Policy
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server