russian 0.2.7 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +24 -0
- data/Gemfile +9 -0
- data/LICENSE +1 -1
- data/README.textile +136 -139
- data/Rakefile +4 -49
- data/TODO +0 -6
- data/lib/russian.rb +18 -39
- data/lib/russian/action_view_ext/helpers/date_helper.rb +15 -9
- data/lib/russian/active_model_ext/custom_error_message.rb +70 -0
- data/lib/russian/locale/actionview.yml +100 -50
- data/lib/russian/locale/activemodel.yml +50 -0
- data/lib/russian/locale/activerecord.yml +24 -24
- data/lib/russian/locale/datetime.rb +39 -0
- data/lib/russian/locale/datetime.yml +9 -5
- data/lib/russian/locale/pluralization.rb +28 -0
- data/lib/russian/locale/transliterator.rb +17 -0
- data/lib/russian/russian_rails.rb +8 -0
- data/lib/russian/version.rb +9 -0
- data/russian.gemspec +26 -0
- data/spec/locale_spec.rb +5 -87
- data/spec/russian_spec.rb +5 -23
- metadata +70 -69
- data/init.rb +0 -3
- data/lib/russian/active_record_ext/custom_error_message.rb +0 -163
- data/lib/russian/active_support_ext/parameterize.rb +0 -31
- data/lib/russian/backend/advanced.rb +0 -134
- data/lib/russian/locale/pluralize.rb +0 -25
- data/lib/vendor/i18n/MIT-LICENSE +0 -20
- data/lib/vendor/i18n/README.textile +0 -20
- data/lib/vendor/i18n/Rakefile +0 -5
- data/lib/vendor/i18n/i18n.gemspec +0 -27
- data/lib/vendor/i18n/lib/i18n.rb +0 -199
- data/lib/vendor/i18n/lib/i18n/backend/simple.rb +0 -214
- data/lib/vendor/i18n/lib/i18n/exceptions.rb +0 -53
- data/lib/vendor/i18n/test/all.rb +0 -5
- data/lib/vendor/i18n/test/i18n_exceptions_test.rb +0 -100
- data/lib/vendor/i18n/test/i18n_test.rb +0 -125
- data/lib/vendor/i18n/test/locale/en.rb +0 -1
- data/lib/vendor/i18n/test/locale/en.yml +0 -3
- data/lib/vendor/i18n/test/simple_backend_test.rb +0 -568
- data/lib/vendor/i18n_label/README.textile +0 -38
- data/lib/vendor/i18n_label/Rakefile +0 -11
- data/lib/vendor/i18n_label/init.rb +0 -1
- data/lib/vendor/i18n_label/install.rb +0 -1
- data/lib/vendor/i18n_label/lib/i18n_label.rb +0 -23
- data/lib/vendor/i18n_label/spec/i18n_label_spec.rb +0 -20
- data/lib/vendor/i18n_label/spec/spec_helper.rb +0 -10
- data/lib/vendor/i18n_label/tasks/i18n_label_tasks.rake +0 -4
- 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
data/LICENSE
CHANGED
data/README.textile
CHANGED
@@ -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
|
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 (включена в поставку), несколько хаков поверх
|
19
|
+
Russian использует библиотеку I18n (включена в поставку), несколько хаков поверх Rails (хаки хелперов даты-времени, хак для сообщений валидации) и файлы переводов, а также набор хелперов, упрощающий работу с русским языком (простая плюрализация, простой strftime и др.).
|
20
20
|
|
21
|
-
Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian
|
21
|
+
Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian, оно остается полностью совместимым с Rails i18n).
|
22
22
|
|
23
|
-
h2. Что такое I18n
|
23
|
+
h2. Что такое I18n. История
|
24
24
|
|
25
|
-
Библиотека I18n входит в состав Ruby on 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
|
32
|
-
* Для использования с Rails нужна версия не ниже
|
33
|
-
* Для тестирования библиотеки вам
|
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 на
|
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
|
-
|
47
|
+
Чтобы задать локаль по умолчанию в вашем приложении, используйте
|
48
|
+
|
49
|
+
<pre><code>
|
50
|
+
I18n.default_locale = :ru
|
51
|
+
</code></pre>
|
44
52
|
|
45
|
-
|
53
|
+
Чтобы установить локаль для текущего треда, используйте
|
46
54
|
|
47
|
-
|
55
|
+
<pre><code>
|
56
|
+
I18n.locale = :ru
|
57
|
+
</code></pre>
|
48
58
|
|
49
|
-
|
59
|
+
h2. Ruby on Rails 3.0 и выше
|
50
60
|
|
51
|
-
В
|
61
|
+
В вашем @Gemfile@ сделайте ссылку на gem @russian@:
|
52
62
|
|
53
63
|
<pre><code>
|
54
|
-
|
55
|
-
config.gem 'russian'
|
56
|
-
end
|
64
|
+
gem 'russian', '~> 0.6.0'
|
57
65
|
</code></pre>
|
58
66
|
|
59
|
-
|
60
|
-
|
61
|
-
@rake gems:install@.
|
67
|
+
И установите gem в проект с помощью bundler:
|
62
68
|
|
63
|
-
|
69
|
+
@bundle install@ или @bundle update@.
|
64
70
|
|
65
|
-
|
71
|
+
Далее, укажите
|
66
72
|
|
67
|
-
|
73
|
+
<pre><code>
|
74
|
+
config.i18n.default_locale = :ru
|
75
|
+
</code></pre>
|
68
76
|
|
69
|
-
@
|
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
|
-
|
79
|
+
h2. Ruby on Rails 2.2 и 2.3
|
72
80
|
|
73
|
-
|
81
|
+
Используйте старые версии gem (@0.2.x@). Получить код и почитать инструкцию по установке можно "здесь":https://github.com/yaroslav/russian/tree/eae28e3098797d06ff0574fb1bf99238eec124fe.
|
74
82
|
|
75
83
|
h1. Использование
|
76
84
|
|
77
|
-
|
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
|
-
|
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
|
-
|
87
|
-
* _NB:_ локаль русского языка (@:'ru'@) становится локалью по умолчанию
|
88
|
-
* загружаются все файлы переводов, в том числе переводы для Rails.
|
111
|
+
Наконец, становится доступен модуль Russian (инструкция ниже), который нужен для быстрого доступа к некоторым основным и вспомогательным функциям локализации (плюрализация без таблицы переводов, транслитерация) и для методов интернационализации с форсированной локалью русского языка (перевод в русской локали, перевод даты-времени в русской локали).
|
89
112
|
|
90
|
-
После
|
113
|
+
После загрузки Russian можно использовать все стандартные функции библиотеки I18n, пользоваться измененным функционалом для лучшей поддержки русского языка, или использовать хелперы модуля Russian для еще более простой работы с русским языком.
|
91
114
|
|
92
|
-
|
115
|
+
"Документация I18n":http://rdoc.info/github/svenfuchs/i18n/master
|
93
116
|
|
94
|
-
|
117
|
+
"Гид по интернационализации Ruby on Rails":http://guides.rubyonrails.org/i18n.html.
|
95
118
|
|
96
|
-
|
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
|
-
|
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 '
|
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
|
-
|
41
|
-
t.
|
42
|
-
t.
|
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
|