russian 0.2.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/CHANGELOG +24 -0
  2. data/Gemfile +9 -0
  3. data/LICENSE +1 -1
  4. data/README.textile +136 -139
  5. data/Rakefile +4 -49
  6. data/TODO +0 -6
  7. data/lib/russian.rb +18 -39
  8. data/lib/russian/action_view_ext/helpers/date_helper.rb +15 -9
  9. data/lib/russian/active_model_ext/custom_error_message.rb +70 -0
  10. data/lib/russian/locale/actionview.yml +100 -50
  11. data/lib/russian/locale/activemodel.yml +50 -0
  12. data/lib/russian/locale/activerecord.yml +24 -24
  13. data/lib/russian/locale/datetime.rb +39 -0
  14. data/lib/russian/locale/datetime.yml +9 -5
  15. data/lib/russian/locale/pluralization.rb +28 -0
  16. data/lib/russian/locale/transliterator.rb +17 -0
  17. data/lib/russian/russian_rails.rb +8 -0
  18. data/lib/russian/version.rb +9 -0
  19. data/russian.gemspec +26 -0
  20. data/spec/locale_spec.rb +5 -87
  21. data/spec/russian_spec.rb +5 -23
  22. metadata +70 -69
  23. data/init.rb +0 -3
  24. data/lib/russian/active_record_ext/custom_error_message.rb +0 -163
  25. data/lib/russian/active_support_ext/parameterize.rb +0 -31
  26. data/lib/russian/backend/advanced.rb +0 -134
  27. data/lib/russian/locale/pluralize.rb +0 -25
  28. data/lib/vendor/i18n/MIT-LICENSE +0 -20
  29. data/lib/vendor/i18n/README.textile +0 -20
  30. data/lib/vendor/i18n/Rakefile +0 -5
  31. data/lib/vendor/i18n/i18n.gemspec +0 -27
  32. data/lib/vendor/i18n/lib/i18n.rb +0 -199
  33. data/lib/vendor/i18n/lib/i18n/backend/simple.rb +0 -214
  34. data/lib/vendor/i18n/lib/i18n/exceptions.rb +0 -53
  35. data/lib/vendor/i18n/test/all.rb +0 -5
  36. data/lib/vendor/i18n/test/i18n_exceptions_test.rb +0 -100
  37. data/lib/vendor/i18n/test/i18n_test.rb +0 -125
  38. data/lib/vendor/i18n/test/locale/en.rb +0 -1
  39. data/lib/vendor/i18n/test/locale/en.yml +0 -3
  40. data/lib/vendor/i18n/test/simple_backend_test.rb +0 -568
  41. data/lib/vendor/i18n_label/README.textile +0 -38
  42. data/lib/vendor/i18n_label/Rakefile +0 -11
  43. data/lib/vendor/i18n_label/init.rb +0 -1
  44. data/lib/vendor/i18n_label/install.rb +0 -1
  45. data/lib/vendor/i18n_label/lib/i18n_label.rb +0 -23
  46. data/lib/vendor/i18n_label/spec/i18n_label_spec.rb +0 -20
  47. data/lib/vendor/i18n_label/spec/spec_helper.rb +0 -10
  48. data/lib/vendor/i18n_label/tasks/i18n_label_tasks.rake +0 -4
  49. data/lib/vendor/i18n_label/uninstall.rb +0 -1
data/CHANGELOG CHANGED
@@ -1,3 +1,27 @@
1
+ === 0.6.0 "Haters Gonna Hate" - 22.10.2011
2
+
3
+ * i18n gem is now a dependency (not using vendored gem anymore)
4
+ * I18n::Backend::Advanced custom backend is no longer used. Russian Ruby i18n files are portable for the first time; using Russian language with i18n does not require a custom backend with language-specific hacks anymore. It became possible thanks to lambda translations support in i18n gem (http://svenfuchs.com/2009/7/12/ruby-i18n-gem-hits-0-2-0) and inclusion of Pluralization backend. Notice: ff you are using a custom backend, don't forget to include I18n::Backend::Pluralization and I18n::Backend::Transliterator modules
5
+ * Pluralization is now delegated to I18n backend
6
+ * Transliteration is now delegated to I18n backend (using Russian::Transliteration, of course)
7
+ * Minor gem russian version is now bumped to be in sync with minor version of required i18n gem
8
+ * UPGRADING: Rails 2 is no longer supported, use older versions of the gem
9
+ * UPGRADING: gem russian does not force Russian locale anymore, use I18n::locale/default_locale methods or config.i18n.default_locale = :ru in your Rails environment. Methods with forced encoding still can be used as Russian::translate, Russian::localize
10
+ * Locale files and hacks (date helper, custom ActiveModel error message) updated to support Rails 3.0 and 3.1
11
+ * README updated
12
+ * Remove i18n_label plugin (labels i18n is supported in latest Rails releases)
13
+
14
+ * gem i18n теперь является зависимостью для gem russian, а не включается в vendor, как раньше
15
+ * Собственный бекенд I18n::Backend::Advanced больше не используется. Русские файлы локали i18n для Ruby наконец-то стали переносимыми и не требуют собственного бекенда и хаков для поддержки языка. Это стало возможным благодаря поддержке lambda-переводов в i18n (http://svenfuchs.com/2009/7/12/ruby-i18n-gem-hits-0-2-0) и включению Pluralization бекенда в gem i18n. Обратите внимание: если вы используете собственный бекенд (отличный от стандартного), не забудьте включить модули I18n::Backend::Pluralization и I18n::Backend::Transliterator
16
+ * Механизм плюрализации теперь обеспечивает стандартный бекенд I18n
17
+ * Механизм транслитерации теперь обеспечивает стандартный бекенд I18n (с помощью Russian::Transliteration, конечно)
18
+ * Минорная версия gem russian повышена до текущей минорной версии i18n
19
+ * UPGRADING: Rails 2 больше не поддерживается, используйте старые версии gem'а
20
+ * UPGRADING: gem russian больше не форсирует использование русской локали, используйте методы I18n::locale/default_locale или config.i18n.default_locale = :ru в настройках окружения Rails. Если нужно форсировать русскую локаль, можно по-прежнему пользоваться методами Russian::translate, Russian::localize
21
+ * Обновлены файлы переводов и хаки (выбор месяца в date helper, кастомные сообщения об ошибках ActiveModel) для поддержки Rails 3.0 и 3.1
22
+ * Обновлен и переписан README
23
+ * Удален плагин i18n_label (перевод label уже поддерживается в последних версиях Rails)
24
+
1
25
  === 0.2.7 - 5.05.2010
2
26
 
3
27
  * Fix using of standalone/non-standalone month names with %d/%e surroundings.
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source :rubygems
2
+
3
+ gem 'rake'
4
+ gem 'i18n', '>= 0.5.0'
5
+ gem 'rspec', '~> 2.7.0'
6
+
7
+ # Rails 3+
8
+ gem 'activesupport', '~> 3.0.0'
9
+
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008-2010 Yaroslav Markin
1
+ Copyright (c) 2008-2011 Yaroslav Markin
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -6,106 +6,194 @@ Russian language support for Ruby and Rails, using I18n library.
6
6
 
7
7
  h3. If you don't speak Russian
8
8
 
9
- 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":http://unicode.org/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.
9
+ This code may still be useful for you and Ruby I18n community. You can learn how how to provide support of "standalone" (as defined in "Unicode CLDR":http://unicode.org/cldr/) month names with I18n and Rails without any custom backends or hacks, and how to use custom pluralization and transliteration locale settings. 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.
10
10
 
11
11
  Feel free to shoot an email to Yaroslav Markin ("yaroslav@markin.net":mailto:yaroslav@markin.net)
12
12
 
13
13
  h1. Что это
14
14
 
15
- Russian -- это библиотека для полноценной поддержки русского языка (форматирование даты и времени, плюрализация, локализация в целом) для Ruby и Ruby on Rails.
15
+ Russian -- это библиотека для полноценной поддержки русского языка (форматирование даты и времени, плюрализация, транслит, локализация в целом) для Ruby и Ruby on Rails.
16
16
 
17
- Цель проекта -- построить полноценную среду для русской локализации Ruby и Rails проектов, при этом используя минимально возможное количество хаков, сохраняя при этом поддержку локализации приложения на другие языки, а также форсировать включение в основную ветку I18n и Rails всех функций локализации, необходимых для работы с русским языком.
17
+ Цель проекта -- построить полноценную среду для русской локализации Ruby и Rails проектов, при этом используя минимально возможное количество хаков, сохраняя при этом поддержку локализации приложения на другие языки, а также форсировать включение в основную ветку I18n и Rails всех функций локализации, необходимых для работы с русским языком. Поскольку сделать в Rails поддержку довольно сложного языка для локализации (каким и является русский) сразу же было проблематично, вместе с командой @gem i18n@ решено было обкатывать решение для русского языка на отдельном gem/плагине, и по мере возможности переносить наиболее общий функционал в "родительскую" библиотеку I18n. Таким образом, общей целью @gem russian@ стала поддержка русского языка до тех пор, пока она не появится в самом I18n.
18
18
 
19
- Russian использует библиотеку I18n (включена в поставку), несколько хаков поверх нее (собственный бекэнд с поддержкой специфичного для русского форматирования даты и времени, поддержкой плюрализации), несколько хаков поверх Rails (хаки хелперов даты-времени, хак для сообщений валидации) и файлы переводов, а также набор хелперов, упрощающий работу с русским языком (простая плюрализация, простой strftime и др.).
19
+ Russian использует библиотеку I18n (включена в поставку), несколько хаков поверх Rails (хаки хелперов даты-времени, хак для сообщений валидации) и файлы переводов, а также набор хелперов, упрощающий работу с русским языком (простая плюрализация, простой strftime и др.).
20
20
 
21
- Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian и собственный бекэнд Russian, оно остается полностью совместимым с Rails i18n).
21
+ Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian, оно остается полностью совместимым с Rails i18n).
22
22
 
23
- h2. Что такое I18n
23
+ h2. Что такое I18n. История
24
24
 
25
- Библиотека I18n входит в состав Ruby on Rails начиная с версии 2.2. В перспективе I18n -- это самое простое и недеструктивное решение для локализации и интернационализации Rails приложений, но в текущей версии отсутствовала поддержка нескольких важных возможностей, специфичных для русского языка. Таким образом, русский язык для локализации в Rails 2.2 фактически не поддерживался.
25
+ Библиотека I18n входит в состав Ruby on Rails начиная с версии 2.2. I18n -- это самое простое и недеструктивное решение для локализации и интернационализации Rails приложений. К сожалению, в первых версиях отсутствовала поддержка нескольких важных возможностей, специфичных для русского языка. Таким образом, русский язык для локализации в Rails 2.2 фактически не поддерживался.
26
26
 
27
- Для исправления этого досадного недоразумения появилась библиотека Russian (подробнее см. _Использование_).
27
+ Для исправления этого досадного недоразумения появилась библиотека Russian. Ранее Russian включал в себя собственный бекенд для перегрузки форматирования даты-времени (использование названия месяца или дня недели в зависимости от контекста) и плюрализации (стандартный бекенд поддерживал только плюрализацию для английского языка), несколько хаков для Rails 2.2/2.3 (ActionView, ActiveRecord, ActiveSupport), полную локализацию даты-времени и таблицы переводов Rails на русский язык, и вспомогательные модули (плюрализация и транслитерация). Gem отлично работал на Rails 2, устраняя недостатки @gem i18n@ "из коробки".
28
+
29
+ В версии 0.2 @gem i18n@ наконец появились первые средства для поддержки русского языка: в соавторстве с вашим покорным "была добавлена поддержка lambda-переводов":http://svenfuchs.com/2009/7/12/ruby-i18n-gem-hits-0-2-0, благодаря которой стало возможным вынести логику перевода названия месяца/дня недели в таблицу переводов. Далее в @gem i18n@ появилась поддержка хранения правил плюрализации в таблице переводов (опять же, с помощью lambda-переводов) и правил транслитерации. По сути, после этого цель @gem russian@ была практически достигнута: опытные разработчики могли работать с русским языком, используя лишь собственные таблицы переводов в своем приложении и несколько хаков к Rails (по необходимости). Rails 3.0 вышел с последней версией @gem i18n@, где была уже практически полная поддержка механизмов для русского языка.
30
+
31
+ Однако, документация по плюрализации и транслитерации в I18n была неочевидной, а поддержка lambda-переводов для локализации даты-времени была практически "спрятана" в исходном коде, поэтому большинство разработчиков в основном использовали самые базовые таблицы переводов: локализацию Rails и, иногда, — плюрализацию. Возникла мысль выпустить @gem russian@ для последней версии @gem i18n@ и Ruby on Rails с поддержкой всех необходимых функций, но, на этот раз, грамотно сделанных через интерфейсы I18n. К сожалению, "хаки" для Ruby on Rails (хелперы даты-времени) вряд ли когда-либо будут включены в дистрибутив Rails, поэтому использовать их придется отдельно.
28
32
 
29
33
  h1. Требования
30
34
 
31
- * Ruby 1.8 (тестировалось на 1.8.7);
32
- * Для использования с Rails нужна версия не ниже 2.2, желательно -- 2.3.5;
33
- * Для тестирования библиотеки вам понадобится RSpec.
35
+ * Ruby 1.8.7 или 1.9.2 (поддерживается совместимость с JRuby и Rubinius);
36
+ * Для использования с Rails нужна версия не ниже 3.0 (для более старых версий Rails используйте версии gem russian ветки 0.2);
37
+ * Для разработки и тестирования библиотеки вам понадобятся Bundler и RSpec.
34
38
 
35
39
  h1. Установка
36
40
 
37
- Страница Russian на github -- "http://github.com/yaroslav/russian/":http://github.com/yaroslav/russian/
41
+ Страница Russian на GitHub -- "http://github.com/yaroslav/russian/":http://github.com/yaroslav/russian/
38
42
 
39
43
  Для установки:
40
44
 
41
45
  @gem install russian@
42
46
 
43
- h2. Ruby on Rails
47
+ Чтобы задать локаль по умолчанию в вашем приложении, используйте
48
+
49
+ <pre><code>
50
+ I18n.default_locale = :ru
51
+ </code></pre>
44
52
 
45
- Существует два варианта использования Russian вместе с Rails:
53
+ Чтобы установить локаль для текущего треда, используйте
46
54
 
47
- 1. Установка gem
55
+ <pre><code>
56
+ I18n.locale = :ru
57
+ </code></pre>
48
58
 
49
- "Релизные" версии библиотеки для стабильных версий Rails.
59
+ h2. Ruby on Rails 3.0 и выше
50
60
 
51
- В файле @config/environment.rb@ сделайте ссылку на gem @russian@:
61
+ В вашем @Gemfile@ сделайте ссылку на gem @russian@:
52
62
 
53
63
  <pre><code>
54
- Rails::Initializer.run do |config|
55
- config.gem 'russian'
56
- end
64
+ gem 'russian', '~> 0.6.0'
57
65
  </code></pre>
58
66
 
59
- Чтобы установить gem, используйте команду
60
-
61
- @rake gems:install@.
67
+ И установите gem в проект с помощью bundler:
62
68
 
63
- 2. Установка плагина
69
+ @bundle install@ или @bundle update@.
64
70
 
65
- Последняя версия из master-ветки, чаще всего для использования с последней (пререлизной) версией Rails.
71
+ Далее, укажите
66
72
 
67
- Для того, чтобы установить Russian как плагин к Rails, используйте команду
73
+ <pre><code>
74
+ config.i18n.default_locale = :ru
75
+ </code></pre>
68
76
 
69
- @script/plugin install git://github.com/yaroslav/russian.git@
77
+ в @config/application.rb@. Если по умолчанию нужна другая локаль, или же нужно переключать локали "на ходу", используйте методы модуля I18n (см. выше). Также ознакомьтесь с "документацией к I18n":http://rdoc.info/github/svenfuchs/i18n/master и "гидом по интернационализации Ruby on Rails":http://guides.rubyonrails.org/i18n.html.
70
78
 
71
- Для Windows можно использовать версию git, расположенную по адресу: "http://code.google.com/p/msysgit/":http://code.google.com/p/msysgit/
79
+ h2. Ruby on Rails 2.2 и 2.3
72
80
 
73
- Также проверьте наличие других веток на странице russian на GutHub -- возможно, уже есть версия, уже поддерживающая последнюю нерелизную версию Rails или i18n.
81
+ Используйте старые версии gem (@0.2.x@). Получить код и почитать инструкцию по установке можно "здесь":https://github.com/yaroslav/russian/tree/eae28e3098797d06ff0574fb1bf99238eec124fe.
74
82
 
75
83
  h1. Использование
76
84
 
77
- При загрузке Russian включает:
85
+ @gem russian@ можно использовать как с Ruby on Rails, так и отдельно: с любым другим веб-фреймворком, или в любом другом приложении, не имеющим никакого отношения к вебу. Дело в том, что @gem i18n@, который Ruby on Rails использует для интернационализации, включен в @gem russian@ как зависимость.
86
+
87
+ При загрузке Russian подключает библиотеку I18n (либо использует уже подключенную, например, в Rails), добавляет файлы русских переводов из поставки в самое начало пути поиска переводов I18n (это значит, что любой перевод из Russian вы сможете легко переопределить в вашем приложении), добавляет в используемый по умолчанию бекенд I18n поддержку плюрализации и транслитерации, и, наконец, перегружает бекенд.
88
+
89
+ Предыдущие версии Russian форсированно выставляли локаль I18n по умолчанию в @:ru@ (Русский язык), от этого решено было отказаться: в Rails стало неудобно работать с мультиязычными приложениями, так как конструкция вида @config.i18n.default_locale = :en@ не работала. Теперь для использования русского языка в Rails по умолчанию нужно использовать строку
90
+
91
+ <pre><code>
92
+ config.i18n.default_locale = :ru
93
+ </code></pre>
94
+
95
+ в @config/application.rb@. Для использования Russian отдельно от Rails можно выставить локаль I18n в русскую по умолчанию или для текущего треда, соответственно:
96
+
97
+ <pre><code>
98
+ I18n.default_locale = :ru
99
+
100
+ I18n.locale = :ru
101
+ </code></pre>
102
+
103
+ Также предыдущие версии Russian заменяли используемый I18n бекенд на собственный: другого способа получить качественную локализацию для даты-времени и поддержку плюрализации не было. Новые версии I18n включают в себя поддержку @lambda {}@ в таблицах переводов ("ссылка":http://svenfuchs.com/2009/7/12/ruby-i18n-gem-hits-0-2-0), поэтому собственный бекенд больше не нужен. Обратите внимание: если вы используете бекенд, отличный от стандартного, вам потребуется включить в него поддержку плюрализации (модуль @I18n::Backend::Pluralization@) и транслитерации (@I18n::Backend::Transliterator@).
104
+
105
+ Если во время загрузки Russian уже загружены библиотеки Rails, происходит загрузка хаков для Rails 3.0 и выше:
78
106
 
79
- * библиотеку I18n если она еще не используется (например, если Russian используется отдельно от Rails)
80
- * собственный класс для I18n бекэнда (полностью совместим со стандартным бекэндом)
81
- * перегрузку хелперов даты для Rails (если Rails загружен)
82
- * пререгрузку обработки сообщений валидации для ActiveRecord (если Rails загружен)
107
+ 1. Хелперы даты получают ключ @:use_standalone_month_names@ (для форсирования использования "отдельностоящего" названия месяца). Если ключ не указан, хелпер самостоятельно будет пытаться определить форму названия месяца: так, например, хелпер для выбора числа, месяца и года будет использовать "контекстную" форму названия месяца.
83
108
 
84
- При инициализации:
109
+ 2. Включается перегрузка валидации для ActiveModel: если сообщение валидации указать с "птичкой" в начале, при выводе сообщений об ошибках (@full_messages@) для этого конкретного сообщения не будет указано название атрибута, к которому он относится. Этот фукнционал нужен, скорее, для тех, кто привык использовать подобные "хаки": в Rails 3 эта задача решается с помощью ключа @full_messages.format@ в таблице переводов.
85
110
 
86
- * заменяется бэкэнд I18n со стандартного на собственный бекэнд Russian (@I18n::Backend::Advanced@)
87
- * _NB:_ локаль русского языка (@:'ru'@) становится локалью по умолчанию
88
- * загружаются все файлы переводов, в том числе переводы для Rails.
111
+ Наконец, становится доступен модуль Russian (инструкция ниже), который нужен для быстрого доступа к некоторым основным и вспомогательным функциям локализации (плюрализация без таблицы переводов, транслитерация) и для методов интернационализации с форсированной локалью русского языка (перевод в русской локали, перевод даты-времени в русской локали).
89
112
 
90
- После этого можно использовать все стандартные функции библиотеки I18n, пользоваться измененным функционалом для лучшей поддержки русского языка, или использовать хелперы модуля Russian для еще более простой работы с русским языком.
113
+ После загрузки Russian можно использовать все стандартные функции библиотеки I18n, пользоваться измененным функционалом для лучшей поддержки русского языка, или использовать хелперы модуля Russian для еще более простой работы с русским языком.
91
114
 
92
- h2. Отличия от стандартной библиотеки I18n
115
+ "Документация I18n":http://rdoc.info/github/svenfuchs/i18n/master
93
116
 
94
- 1. Поддержка двух видов названий месяцев -- контекст ("сентября") и отдельностоящее ("Сентябрь").
117
+ "Гид по интернационализации Ruby on Rails":http://guides.rubyonrails.org/i18n.html.
95
118
 
96
- Для этого перегружена функция локализации, теперь название месяца используется в зависимости от контекста. В словарях Russian определены оба варианта.
119
+ h2. Ключевые отличия от стандартной библиотеки I18n
97
120
 
98
- Перегрузка недеструктивная: если для какого-то другого языка не определены два варианта названий месяцев, ошибки не возникнет.
121
+ 1. Поддержка двух видов названий месяцев -- контекст ("сентября") и отдельностоящее ("Сентябрь") и дней недели.
99
122
 
100
- Аналогично есть поддержка двух видов названий дней недели.
123
+ В словарях Russian определены оба варианта названий месяцев. В таблице переводов для русского языка (@locale/datetime.rb@) указаны правила для перевода: в зависимости от формата строки @strftime@, используется контекстное или отдельностоящее название.
124
+
125
+ По аналогии есть поддержка двух видов названий дней недели.
126
+
127
+ _NB:_ обратите внимание на нестандартные названия ключей при перечислении месяцев и дней недели в @locale/datetime.yml@.
128
+ _NB:_ на необычных форматах @strftime@-строк контекст может не распознаваться; просто "дробите" в таком случае строку @strftime@ на части.
101
129
 
102
130
  2. Плюрализация
103
131
 
104
- Стандартно I18n поддерживается только плюрализация по английским правилам; бекэнд, использующийся в Russian, позволяет каждому языку определять правила плюрализации в таблице переводов, задавая их как @Proc@.
132
+ Включены правила плюрализации для русского языка (согласно CLDR). Их можно использовать как через интерфейс I18n, так и с помощью метода @Russian::pluralize@.
133
+
134
+ 3. Транслитерация
135
+
136
+ Включен модуль для транслитерации русского алфавита: им можно пользоваться как через собственный интерфейс (@Russian::transliterate@), так и через интерфейс I18n.
137
+
138
+ h2. Ruby on Rails
139
+
140
+ h3. Переводы
141
+
142
+ При использовании с Ruby on Rails загружаются все стандартные переводы, и русский язык становится годным к использованию для локализации. В поставку включены все нужные переводы для ActionView, ActiveRecord, ActiveSupport, ActiveModel, которые можно переопределять по необходимости стандартными средствами I18n из вашего приложения.
143
+
144
+ h3. Хелперы
145
+
146
+ Хелперы даты-времени получают ключ @:use_standalone_month_names@ для форсирования отображения отдельностоящего названия месяца ("Сентябрь" а не "сентября"). Такое имя месяца используется когда включен ключ @:use_standalone_month_names@ (для отдельностоящего @select_month@ он включается по умолчанию), либо когда есть ключ @:discard_day@.
147
+
148
+ h3. Валидация
149
+
150
+ На тот случай, если по каким-то причинам нельзя воспользоваться ключом @full_messages.format@ в таблице переводов, Russian перегружает вывод "полных сообщений" об ошибках в ActiveModel.
151
+
152
+ Так, например,
153
+
154
+ @validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'@
155
+
156
+ при валидации выдаст сообщение
157
+
158
+ @Accepted terms нужно принять соглашение@
159
+
160
+ или, например
161
+
162
+ @Соглашение об использовании нужно принять соглашение@
163
+
164
+ если вы указали перевод для имени атрибута.
165
+
166
+ Но
167
+
168
+ @validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'@
169
+
170
+ даст сообщение
171
+
172
+ @Нужно принять соглашение@
173
+
174
+ _NB:_ в сообщениях валидации можно использовать такие макросы как @{{attribute}}@, @{{value}}@ -- подробнее см. документацию по I18n.
175
+
176
+ h3. Параметризация строк
177
+
178
+ Метод @parameterize@ инфлектора ActiveSupport использует механизмы транслитерации I18n. Если русская локаль является текущей, он сможет поддерживать транслитерацию букв русского алфавита.
179
+
180
+ Пример:
181
+
182
+ <pre><code>
183
+ class Person
184
+ def to_param
185
+ "#{id}-#{name.parameterize}"
186
+ end
187
+ end
188
+
189
+ @person = Person.find(1)
190
+ # => #<Person id: 1, name: "Дональд Кнут">
105
191
 
106
- Перегрузка недеструктивная: если правила в таблице нет, используется правило по умолчанию (английский язык).
192
+ <%= link_to(@person.name, person_path(@person)) %>
193
+ # => <a href="/person/1-donald-knut">Дональд Кнут</a>
194
+ </code></pre>
107
195
 
108
- Правила для русского языка включены.
196
+ _NB:_ Для простоты иногда проще воспользоваться методом @Russian::transliterate@ напрямую (чтобы не зависеть от текущей локали).
109
197
 
110
198
  h1. Справочник
111
199
 
@@ -122,17 +210,11 @@ Russian::LOCALE
122
210
 
123
211
  -- возвращает локаль русского языка (@:'ru'@).
124
212
 
125
- <pre><code>
126
- Russian::i18n_backend_class
127
- </code></pre>
128
-
129
- -- возвращает класс собственного бекенда I18n
130
-
131
213
  <pre><code>
132
214
  Russian::init_i18n
133
215
  </code></pre>
134
216
 
135
- -- инициализация Russian. Включение бекэнда, русский язык по умолчанию, загрузка переводов.
217
+ -- инициализация Russian. Добавление русских переводов в путь загрузки, включение модулей для плюрализации и транслитерации и перегрузка I18n.
136
218
 
137
219
  _NB:_ Выполняется автоматически при загрузке.
138
220
 
@@ -191,91 +273,6 @@ Russian.translit("Hallo Юлику Тарханову")
191
273
 
192
274
  -- транслитерация русских букв в строке.
193
275
 
194
-
195
- h2. Ruby on Rails
196
-
197
- h3. Переводы
198
-
199
- При использовании с Ruby on Rails загружаются все стандартные переводы, и русский язык становится годным к использованию для локализации. В поставку включены все нужные переводы для ActionView, ActiveRecord, ActiveSupport, которые можно переопределять по необходимости стандартными средствами I18n.
200
-
201
- h3. Хелперы
202
-
203
- Хелперы даты-времени получают ключ @:use_standalone_month_names@ для форсирования отображения отдельностоящего названия месяца ("Сентябрь" а не "сентября"). Такое имя месяца используется когда включен ключ @:use_standalone_month_names@ (для отдельностоящего @select_month@ он включается по умолчанию), либо когда есть ключ @:discard_day@.
204
-
205
- В Russian включен плагин i18n_label, который подставляет в форм-хелпер @label@ перевод атрибута из таблицы переводов I18n. Например:
206
-
207
- * в файле переводов:
208
-
209
- <pre><code>
210
- ru:
211
- activerecord:
212
- attributes:
213
- user:
214
- name: "Имя"
215
- </code></pre>
216
-
217
- * во view:
218
-
219
- <pre><code>
220
- <% form_for @user do |f| %>
221
- <%= f.label :name %>
222
- <% end %>
223
- </code></pre>
224
-
225
- Даст:
226
-
227
- <pre><code>
228
- <label for="user_name">Имя</label>
229
- </code></pre>
230
-
231
- h3. Валидация
232
-
233
- До версии Rails 2.3.4 форматирование сообщений об ошибках не было гибким, и для нормального отображения ошибок на русском языке приходилось испольковать хаки. Если вы используете Rails 2.3.4 и выше, пропустите этот пункт (используйте ключ переводов @activerecord.errors.full_messages.format@).
234
-
235
- Для Rails 2.3.3 и ниже обработка ошибок в ActiveRecord перегружается -- в Russian включен популярный плагин custom_error_message, с помощью которого можно переопределять стандартное отображение сообщений об ошибках. Так, например,
236
-
237
- @validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'@
238
-
239
- даст сообщение
240
-
241
- @Accepted terms нужно принять соглашение@
242
-
243
- или, например
244
-
245
- @Соглашение об использовании нужно принять соглашение@
246
-
247
- если вы указали перевод для имени атрибута.
248
-
249
- Но
250
-
251
- @validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'@
252
-
253
- даст сообщение
254
-
255
- @Нужно принять соглашение@
256
-
257
- _NB:_ в сообщениях валидации можно использовать такие макросы как @{{attribute}}@, @{{value}}@ -- подробнее см. документацию по I18n.
258
-
259
- h3. Параметризация строк
260
-
261
- Перегружается метод @parameterize@ инфлектора ActiveSupport (он же -- @String#parameterize@), теперь в нем идет транслитерация букв русского алфавита.
262
-
263
- Пример:
264
-
265
- <pre><code>
266
- class Person
267
- def to_param
268
- "#{id}-#{name.parameterize}"
269
- end
270
- end
271
-
272
- @person = Person.find(1)
273
- # => #<Person id: 1, name: "Дональд Кнут">
274
-
275
- <%= link_to(@person.name, person_path(@person)) %>
276
- # => <a href="/person/1-donald-knut">Дональд Кнут</a>
277
- </code></pre>
278
-
279
276
  h1. Авторы
280
277
 
281
278
  Для сообщений об ошибках, обнаруженных неточностях и предложений:
data/Rakefile CHANGED
@@ -1,55 +1,10 @@
1
1
  require 'rubygems'
2
- require 'rake/gempackagetask'
3
- require 'spec/rake/spectask'
2
+ require 'rspec/core/rake_task'
4
3
  require 'rubygems/specification'
5
- require 'date'
6
-
7
- GEM = "russian"
8
- GEM_VERSION = "0.2.7"
9
- AUTHOR = "Yaroslav Markin"
10
- EMAIL = "yaroslav@markin.net"
11
- HOMEPAGE = "http://github.com/yaroslav/russian/"
12
- SUMMARY = "Russian language support for Ruby and Rails"
13
-
14
- spec = Gem::Specification.new do |s|
15
- s.name = GEM
16
- s.version = GEM_VERSION
17
- s.platform = Gem::Platform::RUBY
18
- s.has_rdoc = true
19
- s.extra_rdoc_files = ["README.textile", "LICENSE", "CHANGELOG", "TODO"]
20
- s.summary = SUMMARY
21
- s.description = s.summary
22
- s.author = AUTHOR
23
- s.email = EMAIL
24
- s.homepage = HOMEPAGE
25
-
26
- # Uncomment this to add a dependency
27
- # s.add_dependency "foo"
28
-
29
- s.require_path = 'lib'
30
- s.autorequire = GEM
31
- s.files = %w(LICENSE README.textile Rakefile CHANGELOG TODO init.rb) + Dir.glob("{lib,spec}/**/*")
32
- end
33
-
34
- Rake::GemPackageTask.new(spec) do |pkg|
35
- pkg.gem_spec = spec
36
- end
37
4
 
38
5
  task :default => :spec
39
6
  desc "Run specs"
40
- Spec::Rake::SpecTask.new do |t|
41
- t.spec_files = FileList['spec/**/*_spec.rb']
42
- t.spec_opts = %w(-fs --color)
43
- end
44
-
45
- desc "install the gem locally"
46
- task :install => [:package] do
47
- sh %{sudo gem install pkg/#{GEM}-#{GEM_VERSION}}
48
- end
49
-
50
- desc "create a gemspec file"
51
- task :make_spec do
52
- File.open("#{GEM}.gemspec", "w") do |file|
53
- file.puts spec.to_ruby
54
- end
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.pattern = FileList['spec/**/*_spec.rb']
9
+ t.rspec_opts = %w(-fs --color)
55
10
  end