rs_russian 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +9 -0
- data/CHANGELOG +132 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +48 -0
- data/LICENSE +20 -0
- data/README.textile +268 -0
- data/Rakefile +12 -0
- data/TODO +4 -0
- data/lib/rs_russian.rb +1 -0
- data/lib/russian/action_view_ext/helpers/date_helper.rb +118 -0
- data/lib/russian/active_model_ext/custom_error_message.rb +70 -0
- data/lib/russian/locale/actionview.yml +212 -0
- data/lib/russian/locale/activemodel.yml +50 -0
- data/lib/russian/locale/activerecord.yml +95 -0
- data/lib/russian/locale/activesupport.yml +16 -0
- data/lib/russian/locale/datetime.rb +39 -0
- data/lib/russian/locale/datetime.yml +50 -0
- 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/transliteration.rb +64 -0
- data/lib/russian/version.rb +9 -0
- data/lib/russian.rb +121 -0
- data/russian.gemspec +33 -0
- data/spec/fixtures/en.yml +4 -0
- data/spec/fixtures/ru.yml +4 -0
- data/spec/i18n/locale/datetime_spec.rb +120 -0
- data/spec/i18n/locale/pluralization_spec.rb +28 -0
- data/spec/locale_spec.rb +47 -0
- data/spec/russian_spec.rb +133 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/transliteration_spec.rb +51 -0
- metadata +173 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ced7cff13d74526729a7b1e76b1b5a36e3b06c61
|
4
|
+
data.tar.gz: a43fae19bdb61d11dc275a2ae04cf74b4fe73509
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 00c344e742ff2ff6974d5ef4ee5c0e5312a8d2c4b050423360d7eda0e8b38fd055c48e9baa992940ac02af99561a1b93dd709c75cfde32aaaf54b5e9de754e5f
|
7
|
+
data.tar.gz: eb159120fe0e1d424a6dd5d6137a8c83ccd58c2851ce600523b2cd9a9116619bf9b258b12a6aac68c12dda31fa9c41f031cf46da22cfa61758861b46f121d9c1
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
russian
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0
|
data/.travis.yml
ADDED
data/CHANGELOG
ADDED
@@ -0,0 +1,132 @@
|
|
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
|
+
|
25
|
+
=== 0.2.7 - 5.05.2010
|
26
|
+
|
27
|
+
* Fix using of standalone/non-standalone month names with %d/%e surroundings.
|
28
|
+
* Улучшено распознавание формы названия месяца с strftime макросами %d/%e.
|
29
|
+
|
30
|
+
=== 0.2.6 - 25.03.2010
|
31
|
+
|
32
|
+
* Minimum Rails 3.0b support: Added fourth parameter (options) defaulting to nil to Advanced backend localize method for compliance with i18n-0.3 [Nikolay V. Nemshilov]
|
33
|
+
* Минимальная поддержка Rails 3.0b: В метод localize бекенда Advanced добавлен четвертый параметр, для совместимости с i18n-0.3. По умолчанию равен nil. [Николай Немшилов]
|
34
|
+
|
35
|
+
=== 0.2.5 - 23.12.2009
|
36
|
+
|
37
|
+
* Added support for multi-char substrings in Russian.transliterate [Alex Fortuna]
|
38
|
+
* Rails 2.3.5 error messages overloading compatibility (error messages overloading) (thanks Alex Eagle for bugreport)
|
39
|
+
|
40
|
+
* Russian.transliterate: Теперь можно добавлять правила матчинга подстрок из нескольких символов ("Воробьёв", "Алябьев"). [Alex Fortuna]
|
41
|
+
* Rails 2.3.5: совместимость для перегрузки сообщений об ошибках (багрепорт -- Александр Орел)
|
42
|
+
|
43
|
+
=== 0.2.4 - 12.11.2009
|
44
|
+
|
45
|
+
* Revert nested validation errors patch
|
46
|
+
|
47
|
+
* Убран патч для вложенных сообщений валидации (не работал с Rails 2.3.3 и ниже)
|
48
|
+
|
49
|
+
=== 0.2.3 - 9.11.2009
|
50
|
+
|
51
|
+
* Improve ActiveRecord translations [Dmitri Koulikoff]
|
52
|
+
* Fix nested validation errors with custom error message hack for Rails < 2.3.4 [valodzka]
|
53
|
+
* Added almost_x_years datetime translation
|
54
|
+
|
55
|
+
* Улучшен перевод ActiveRecord [Dmitri Koulikoff]
|
56
|
+
* Исправлена ошибка, возникающая при вложенных сообщениях валидации при использовании хака для Rails < 2.3.4 [valodzka]
|
57
|
+
* Добавлен перевод для ключа даты/времени almost_x_years
|
58
|
+
|
59
|
+
=== 0.2.2 - 17.09.2009
|
60
|
+
|
61
|
+
* Fix ^-prefixed error messages handling on Rails 2.3.4
|
62
|
+
|
63
|
+
* Для Rails 2.3.4 исправлена работа сообщений валидаций, начинающихся с "^"
|
64
|
+
|
65
|
+
=== 0.2.1 - 5.09.2009
|
66
|
+
|
67
|
+
* Rails 2.3.4 compat (ActiveRecord::Error) and deprecation warning (use errors.full_messages.format from now on) [Alexander Semyonov/Yaroslav Markin]
|
68
|
+
* Added a couple of missing translations from Rails 2.3.4
|
69
|
+
* transliteration: Ы now transforms to Y [Alex Fortuna]
|
70
|
+
|
71
|
+
* Совместимость с Rails 2.3.4 (ActiveRecord::Error) и устаревшее форматирование через "^" (теперь надо использовать errors.full_messages.format) [Alexander Semyonov/Yaroslav Markin]
|
72
|
+
* Добавлена пара недостающих переводов из Rails 2.3.4
|
73
|
+
* транслитерация: Ы теперь превращается в Y [Alex Fortuna]
|
74
|
+
|
75
|
+
=== 0.2.0 - 16.03.2009
|
76
|
+
|
77
|
+
* number_to_human_size() translations: using edge format (Rails 2.3)
|
78
|
+
* i18n gem updated (0.1.3)
|
79
|
+
* Rails 2.3 compat
|
80
|
+
|
81
|
+
* Перевод для number_to_human_size(): испольуется форматирование из edge (Rails 2.3)
|
82
|
+
* Обновлен gem i18n до версии 0.1.3
|
83
|
+
* Совместимость с Rails 2.3
|
84
|
+
|
85
|
+
=== 0.1.3 - 27.12.2008
|
86
|
+
|
87
|
+
* Add support.array.words_connector/two_words_connector/last_word_connector (Array#to_sentence) (Rails Edge)
|
88
|
+
* Add datetime.prompts translations (Rails Edge)
|
89
|
+
|
90
|
+
* Добавлены переводы для Array#to_sentence (Rails Edge)
|
91
|
+
* Добавлены переводы для datetime.prompts (Rails Edge)
|
92
|
+
|
93
|
+
=== 0.1.2 - 4.11.2008
|
94
|
+
|
95
|
+
Fixed I18n.load_path ordering, translations shipped with russian gem will no longer overwrite your own translations (thanks Dmitrij Smalko for bugreport).
|
96
|
+
|
97
|
+
Поправлено добавление переводов russian в I18n.load_path, теперь переводы из russian не будут замещать ваши собственные переводы (спасибо Dmitrij Smalko за обнаружение ошибки).
|
98
|
+
|
99
|
+
=== 0.1.1 - 24.11.2008
|
100
|
+
|
101
|
+
Added number.human.storage_units translation key (Rails Edge).
|
102
|
+
|
103
|
+
Добавлен ключ number.human.storage_units (появился в Rails Edge).
|
104
|
+
|
105
|
+
=== 0.1.0 - 22.11.2008
|
106
|
+
|
107
|
+
No changes, Rails 2.2 released
|
108
|
+
|
109
|
+
=== 0.0.9 - 21.11.2008
|
110
|
+
|
111
|
+
* Updated I18n gem due to locale changes (0.1.1)
|
112
|
+
* NB! I18n changed default locale from :'en-US' to :'en', same recommended for other locales by default
|
113
|
+
* NB!! Russian locale is now :'ru' NOT :'ru-RU', update your locale files.
|
114
|
+
|
115
|
+
* I18n gem обновился до 0.1.1 в связи с изменениями в названиях локалей
|
116
|
+
* ВНИМАНИЕ: локаль по умолчанию I18n теперь называется не :'en-US' а :'en', такой же способ именования рекомендуется и для других локалей
|
117
|
+
* ВНИМАНИЕ! Локаль русского языка теперь называется :'ru' а не :'ru-RU'. Не забудьте обновить ваши файлы переводов.
|
118
|
+
|
119
|
+
=== 0.0.8 - 20.11.2008
|
120
|
+
|
121
|
+
* Introduce transliteration (Russian.translit, Russian.transliterate)
|
122
|
+
* Add an ActiveSupport hack for #parameterize
|
123
|
+
|
124
|
+
* Добавилась поддержка транслитерации (Russian.translit, Russian.transliterate)
|
125
|
+
* Добавился хак для #parameterize ActiveSupport (генерация "красивых" URL)
|
126
|
+
|
127
|
+
=== 0.0.7 - 09.11.2008
|
128
|
+
|
129
|
+
* Updated I18n gem
|
130
|
+
|
131
|
+
* Новая версия gem I18n
|
132
|
+
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rs_russian (0.7.0)
|
5
|
+
i18n (~> 0.6.0)
|
6
|
+
unicode (~> 0.4.4)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activesupport (4.0.0)
|
12
|
+
i18n (~> 0.6, >= 0.6.4)
|
13
|
+
minitest (~> 4.2)
|
14
|
+
multi_json (~> 1.3)
|
15
|
+
thread_safe (~> 0.1)
|
16
|
+
tzinfo (~> 0.3.37)
|
17
|
+
atomic (1.1.14)
|
18
|
+
atomic (1.1.14-java)
|
19
|
+
diff-lcs (1.2.4)
|
20
|
+
i18n (0.6.5)
|
21
|
+
minitest (4.7.5)
|
22
|
+
multi_json (1.8.2)
|
23
|
+
rake (10.1.0)
|
24
|
+
rspec (2.14.1)
|
25
|
+
rspec-core (~> 2.14.0)
|
26
|
+
rspec-expectations (~> 2.14.0)
|
27
|
+
rspec-mocks (~> 2.14.0)
|
28
|
+
rspec-core (2.14.6)
|
29
|
+
rspec-expectations (2.14.3)
|
30
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
31
|
+
rspec-mocks (2.14.4)
|
32
|
+
thread_safe (0.1.3)
|
33
|
+
atomic
|
34
|
+
thread_safe (0.1.3-java)
|
35
|
+
atomic
|
36
|
+
tzinfo (0.3.38)
|
37
|
+
unicode (0.4.4)
|
38
|
+
|
39
|
+
PLATFORMS
|
40
|
+
java
|
41
|
+
ruby
|
42
|
+
|
43
|
+
DEPENDENCIES
|
44
|
+
activesupport (>= 3.0.0)
|
45
|
+
bundler (~> 1.3)
|
46
|
+
rake
|
47
|
+
rs_russian!
|
48
|
+
rspec
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008-2011 Yaroslav Markin
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.textile
ADDED
@@ -0,0 +1,268 @@
|
|
1
|
+
h1. rs_russian
|
2
|
+
"!https://secure.travis-ci.org/rs-pro/russian.png!":http://travis-ci.org/rs-pro/russian
|
3
|
+
|
4
|
+
h3. Это форк с вытянутыми pull-реквестами, которые мы хотели использовать.
|
5
|
+
|
6
|
+
Нравится -- пользуйтесь, не нравится -- идите на страницу оригинала: "http://github.com/yaroslav/russian/":http://github.com/yaroslav/russian/
|
7
|
+
|
8
|
+
Поддержка русского языка для Ruby и Rails при помощи библиотеки I18n.
|
9
|
+
|
10
|
+
Russian language support for Ruby and Rails, using I18n library.
|
11
|
+
|
12
|
+
h3. If you don't speak Russian
|
13
|
+
|
14
|
+
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.
|
15
|
+
|
16
|
+
Feel free to shoot an email to Yaroslav Markin ("yaroslav@markin.net":mailto:yaroslav@markin.net)
|
17
|
+
|
18
|
+
h1. Что это
|
19
|
+
|
20
|
+
Russian -- это библиотека для полноценной поддержки русского языка (форматирование даты и времени, плюрализация, транслит, локализация в целом) для Ruby и Ruby on Rails.
|
21
|
+
|
22
|
+
Цель проекта -- построить полноценную среду для русской локализации Ruby и Rails проектов, при этом используя минимально возможное количество хаков, сохраняя при этом поддержку локализации приложения на другие языки, а также форсировать включение в основную ветку I18n и Rails всех функций локализации, необходимых для работы с русским языком. Поскольку сделать в Rails поддержку довольно сложного языка для локализации (каким и является русский) сразу же было проблематично, вместе с командой @gem i18n@ решено было обкатывать решение для русского языка на отдельном gem/плагине, и по мере возможности переносить наиболее общий функционал в "родительскую" библиотеку I18n. Таким образом, общей целью @gem russian@ стала поддержка русского языка до тех пор, пока она не появится в самом I18n.
|
23
|
+
|
24
|
+
Russian использует библиотеку I18n (включена в поставку), несколько хаков поверх Rails (хаки хелперов даты-времени, хак для сообщений валидации) и файлы переводов, а также набор хелперов, упрощающий работу с русским языком (простая плюрализация, простой strftime и др.).
|
25
|
+
|
26
|
+
Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian, оно остается полностью совместимым с Rails i18n).
|
27
|
+
|
28
|
+
h2. Что такое I18n. История
|
29
|
+
|
30
|
+
Библиотека I18n входит в состав Ruby on Rails начиная с версии 2.2. I18n -- это самое простое и недеструктивное решение для локализации и интернационализации Rails приложений. К сожалению, в первых версиях отсутствовала поддержка нескольких важных возможностей, специфичных для русского языка. Таким образом, русский язык для локализации в Rails 2.2 фактически не поддерживался.
|
31
|
+
|
32
|
+
Для исправления этого досадного недоразумения появилась библиотека Russian. Ранее Russian включал в себя собственный бекенд для перегрузки форматирования даты-времени (использование названия месяца или дня недели в зависимости от контекста) и плюрализации (стандартный бекенд поддерживал только плюрализацию для английского языка), несколько хаков для Rails 2.2/2.3 (ActionView, ActiveRecord, ActiveSupport), полную локализацию даты-времени и таблицы переводов Rails на русский язык, и вспомогательные модули (плюрализация и транслитерация). Gem отлично работал на Rails 2, устраняя недостатки @gem i18n@ "из коробки".
|
33
|
+
|
34
|
+
В версии 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@, где была уже практически полная поддержка механизмов для русского языка.
|
35
|
+
|
36
|
+
Однако, документация по плюрализации и транслитерации в I18n была неочевидной, а поддержка lambda-переводов для локализации даты-времени была практически "спрятана" в исходном коде, поэтому большинство разработчиков в основном использовали самые базовые таблицы переводов: локализацию Rails и, иногда, — плюрализацию. Возникла мысль выпустить @gem russian@ для последней версии @gem i18n@ и Ruby on Rails с поддержкой всех необходимых функций, но, на этот раз, грамотно сделанных через интерфейсы I18n. К сожалению, "хаки" для Ruby on Rails (хелперы даты-времени) вряд ли когда-либо будут включены в дистрибутив Rails, поэтому использовать их придется отдельно.
|
37
|
+
|
38
|
+
h1. Установка
|
39
|
+
|
40
|
+
В вашем @Gemfile@ сделайте ссылку на gem @russian@:
|
41
|
+
|
42
|
+
<pre><code>gem 'rs_russian', '~> 0.7.0'</code></pre>
|
43
|
+
|
44
|
+
И установите gem в проект с помощью bundler:
|
45
|
+
|
46
|
+
@bundle install@ или @bundle update@.
|
47
|
+
|
48
|
+
Далее, укажите
|
49
|
+
|
50
|
+
<pre><code>config.i18n.default_locale = :ru</code></pre>
|
51
|
+
|
52
|
+
в @config/application.rb@. Если по умолчанию нужна другая локаль, или же нужно переключать локали "на ходу", используйте методы модуля I18n (см. выше). Также ознакомьтесь с "документацией к I18n":http://rdoc.info/github/svenfuchs/i18n/master и "гидом по интернационализации Ruby on Rails":http://guides.rubyonrails.org/i18n.html.
|
53
|
+
|
54
|
+
h2. Ruby on Rails 2.2 и 2.3
|
55
|
+
|
56
|
+
Используйте старые версии gem (@0.2.x@). Получить код и почитать инструкцию по установке можно "здесь":https://github.com/yaroslav/russian/tree/eae28e3098797d06ff0574fb1bf99238eec124fe.
|
57
|
+
|
58
|
+
h1. Использование
|
59
|
+
|
60
|
+
@gem russian@ можно использовать как с Ruby on Rails, так и отдельно: с любым другим веб-фреймворком, или в любом другом приложении, не имеющим никакого отношения к вебу. Дело в том, что @gem i18n@, который Ruby on Rails использует для интернационализации, включен в @gem russian@ как зависимость.
|
61
|
+
|
62
|
+
При загрузке Russian подключает библиотеку I18n (либо использует уже подключенную, например, в Rails), добавляет файлы русских переводов из поставки в самое начало пути поиска переводов I18n (это значит, что любой перевод из Russian вы сможете легко переопределить в вашем приложении), добавляет в используемый по умолчанию бекенд I18n поддержку плюрализации и транслитерации, и, наконец, перегружает бекенд.
|
63
|
+
|
64
|
+
Предыдущие версии Russian форсированно выставляли локаль I18n по умолчанию в @:ru@ (Русский язык), от этого решено было отказаться: в Rails стало неудобно работать с мультиязычными приложениями, так как конструкция вида @config.i18n.default_locale = :en@ не работала. Теперь для использования русского языка в Rails по умолчанию нужно использовать строку
|
65
|
+
|
66
|
+
<pre><code>
|
67
|
+
config.i18n.default_locale = :ru
|
68
|
+
</code></pre>
|
69
|
+
|
70
|
+
в @config/application.rb@. Для использования Russian отдельно от Rails можно выставить локаль I18n в русскую по умолчанию или для текущего треда, соответственно:
|
71
|
+
|
72
|
+
<pre><code>
|
73
|
+
I18n.default_locale = :ru
|
74
|
+
|
75
|
+
I18n.locale = :ru
|
76
|
+
</code></pre>
|
77
|
+
|
78
|
+
Также предыдущие версии Russian заменяли используемый I18n бекенд на собственный: другого способа получить качественную локализацию для даты-времени и поддержку плюрализации не было. Новые версии I18n включают в себя поддержку @lambda {}@ в таблицах переводов ("ссылка":http://svenfuchs.com/2009/7/12/ruby-i18n-gem-hits-0-2-0), поэтому собственный бекенд больше не нужен. Обратите внимание: если вы используете бекенд, отличный от стандартного, вам потребуется включить в него поддержку плюрализации (модуль @I18n::Backend::Pluralization@) и транслитерации (@I18n::Backend::Transliterator@).
|
79
|
+
|
80
|
+
Если во время загрузки Russian уже загружены библиотеки Rails, происходит загрузка хаков для Rails 3.0 и выше:
|
81
|
+
|
82
|
+
1. Хелперы даты получают ключ @:use_standalone_month_names@ (для форсирования использования "отдельностоящего" названия месяца). Если ключ не указан, хелпер самостоятельно будет пытаться определить форму названия месяца: так, например, хелпер для выбора числа, месяца и года будет использовать "контекстную" форму названия месяца.
|
83
|
+
|
84
|
+
2. Включается перегрузка валидации для ActiveModel: если сообщение валидации указать с "птичкой" в начале, при выводе сообщений об ошибках (@full_messages@) для этого конкретного сообщения не будет указано название атрибута, к которому он относится. Этот фукнционал нужен, скорее, для тех, кто привык использовать подобные "хаки": в Rails 3 эта задача решается с помощью ключа @full_messages.format@ в таблице переводов.
|
85
|
+
|
86
|
+
Наконец, становится доступен модуль Russian (инструкция ниже), который нужен для быстрого доступа к некоторым основным и вспомогательным функциям локализации (плюрализация без таблицы переводов, транслитерация) и для методов интернационализации с форсированной локалью русского языка (перевод в русской локали, перевод даты-времени в русской локали).
|
87
|
+
|
88
|
+
После загрузки Russian можно использовать все стандартные функции библиотеки I18n, пользоваться измененным функционалом для лучшей поддержки русского языка, или использовать хелперы модуля Russian для еще более простой работы с русским языком.
|
89
|
+
|
90
|
+
"Документация I18n":http://rdoc.info/github/svenfuchs/i18n/master
|
91
|
+
|
92
|
+
"Гид по интернационализации Ruby on Rails":http://guides.rubyonrails.org/i18n.html.
|
93
|
+
|
94
|
+
h2. Ключевые отличия от стандартной библиотеки I18n
|
95
|
+
|
96
|
+
1. Поддержка двух видов названий месяцев -- контекст ("сентября") и отдельностоящее ("Сентябрь") и дней недели.
|
97
|
+
|
98
|
+
В словарях Russian определены оба варианта названий месяцев. В таблице переводов для русского языка (@locale/datetime.rb@) указаны правила для перевода: в зависимости от формата строки @strftime@, используется контекстное или отдельностоящее название.
|
99
|
+
|
100
|
+
По аналогии есть поддержка двух видов названий дней недели.
|
101
|
+
|
102
|
+
_NB:_ обратите внимание на нестандартные названия ключей при перечислении месяцев и дней недели в @locale/datetime.yml@.
|
103
|
+
_NB:_ на необычных форматах @strftime@-строк контекст может не распознаваться; просто "дробите" в таком случае строку @strftime@ на части.
|
104
|
+
|
105
|
+
2. Плюрализация
|
106
|
+
|
107
|
+
Включены правила плюрализации для русского языка (согласно CLDR). Их можно использовать как через интерфейс I18n, так и с помощью метода @Russian::pluralize@.
|
108
|
+
|
109
|
+
3. Транслитерация
|
110
|
+
|
111
|
+
Включен модуль для транслитерации русского алфавита: им можно пользоваться как через собственный интерфейс (@Russian::transliterate@), так и через интерфейс I18n.
|
112
|
+
|
113
|
+
h2. Ruby on Rails
|
114
|
+
|
115
|
+
h3. Переводы
|
116
|
+
|
117
|
+
При использовании с Ruby on Rails загружаются все стандартные переводы, и русский язык становится годным к использованию для локализации. В поставку включены все нужные переводы для ActionView, ActiveRecord, ActiveSupport, ActiveModel, которые можно переопределять по необходимости стандартными средствами I18n из вашего приложения.
|
118
|
+
|
119
|
+
h3. Хелперы
|
120
|
+
|
121
|
+
Хелперы даты-времени получают ключ @:use_standalone_month_names@ для форсирования отображения отдельностоящего названия месяца ("Сентябрь" а не "сентября"). Такое имя месяца используется когда включен ключ @:use_standalone_month_names@ (для отдельностоящего @select_month@ он включается по умолчанию), либо когда есть ключ @:discard_day@.
|
122
|
+
|
123
|
+
h3. Валидация
|
124
|
+
|
125
|
+
На тот случай, если по каким-то причинам нельзя воспользоваться ключом @full_messages.format@ в таблице переводов, Russian перегружает вывод "полных сообщений" об ошибках в ActiveModel.
|
126
|
+
|
127
|
+
Так, например,
|
128
|
+
|
129
|
+
@validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'@
|
130
|
+
|
131
|
+
при валидации выдаст сообщение
|
132
|
+
|
133
|
+
@Accepted terms нужно принять соглашение@
|
134
|
+
|
135
|
+
или, например
|
136
|
+
|
137
|
+
@Соглашение об использовании нужно принять соглашение@
|
138
|
+
|
139
|
+
если вы указали перевод для имени атрибута.
|
140
|
+
|
141
|
+
Но
|
142
|
+
|
143
|
+
@validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'@
|
144
|
+
|
145
|
+
даст сообщение
|
146
|
+
|
147
|
+
@Нужно принять соглашение@
|
148
|
+
|
149
|
+
h3. Параметризация строк
|
150
|
+
|
151
|
+
Метод @parameterize@ инфлектора ActiveSupport использует механизмы транслитерации I18n. Если русская локаль является текущей, он сможет поддерживать транслитерацию букв русского алфавита.
|
152
|
+
|
153
|
+
Пример:
|
154
|
+
|
155
|
+
<pre><code>
|
156
|
+
class Person
|
157
|
+
def to_param
|
158
|
+
"#{id}-#{name.parameterize}"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
@person = Person.find(1)
|
163
|
+
# => #<Person id: 1, name: "Дональд Кнут">
|
164
|
+
|
165
|
+
<%= link_to(@person.name, person_path(@person)) %>
|
166
|
+
# => <a href="/person/1-donald-knut">Дональд Кнут</a>
|
167
|
+
</code></pre>
|
168
|
+
|
169
|
+
_NB:_ Для простоты иногда проще воспользоваться методом @Russian::transliterate@ напрямую (чтобы не зависеть от текущей локали).
|
170
|
+
|
171
|
+
h1. Справочник
|
172
|
+
|
173
|
+
h2. Примеры и справка по переводам (I18n)
|
174
|
+
|
175
|
+
Небольшую справку по переводам (I18n) и пример того, как можно переводить имена моделей, атрибутов, и многие другие вещи, определенные в Rails или I18n, можно посмотреть в директории @lib/russian/locale@. Там находятся файлы переводов, которые используются в Russian, со всеми комментариями.
|
176
|
+
|
177
|
+
h2. Вспомогательные методы модуля Russian
|
178
|
+
|
179
|
+
<pre><code>
|
180
|
+
Russian.locale
|
181
|
+
Russian::LOCALE
|
182
|
+
</code></pre>
|
183
|
+
|
184
|
+
-- возвращает локаль русского языка (@:'ru'@).
|
185
|
+
|
186
|
+
<pre><code>
|
187
|
+
Russian::init_i18n
|
188
|
+
</code></pre>
|
189
|
+
|
190
|
+
-- инициализация Russian. Добавление русских переводов в путь загрузки, включение модулей для плюрализации и транслитерации и перегрузка I18n.
|
191
|
+
|
192
|
+
_NB:_ Выполняется автоматически при загрузке.
|
193
|
+
|
194
|
+
<pre><code>
|
195
|
+
Russian::translate
|
196
|
+
Russian::t
|
197
|
+
</code></pre>
|
198
|
+
|
199
|
+
-- прокси для метода @translate@ I18n, форсирует использование русской локали.
|
200
|
+
|
201
|
+
<pre><code>
|
202
|
+
Russian::localize
|
203
|
+
Russian::l
|
204
|
+
</code></pre>
|
205
|
+
|
206
|
+
-- прокси для метода @localize@ I18n, форсирует использование русской локали.
|
207
|
+
|
208
|
+
<pre><code>
|
209
|
+
Russian::strftime
|
210
|
+
|
211
|
+
Russian::strftime(Time.now)
|
212
|
+
=> "Пн, 01 сент. 2008, 11:12:43 +0300"
|
213
|
+
Russian::strftime(Time.now, "%d %B")
|
214
|
+
>> "01 сентября"
|
215
|
+
Russian::strftime(Time.now, "%B")
|
216
|
+
=> "Сентябрь"
|
217
|
+
</code></pre>
|
218
|
+
|
219
|
+
-- @strftime@ с форсированием русской локали (упрощенный вариант @localize@)
|
220
|
+
|
221
|
+
<pre><code>
|
222
|
+
Russian::pluralize
|
223
|
+
Russian::p
|
224
|
+
|
225
|
+
Russian.p(1, "вещь", "вещи", "вещей")
|
226
|
+
=> "вещь"
|
227
|
+
Russian.p(2, "вещь", "вещи", "вещей")
|
228
|
+
=> "вещи"
|
229
|
+
Russian.p(10, "вещь", "вещи", "вещей")
|
230
|
+
=> "вещей"
|
231
|
+
Russian.p(3.14, "вещь", "вещи", "вещей", "вещи") # последний вариант используется для дробных величин
|
232
|
+
=> "вещи"
|
233
|
+
</code></pre>
|
234
|
+
|
235
|
+
-- упрощенная (без использования хешей I18n) плюрализация для русского языка
|
236
|
+
|
237
|
+
<pre><code>
|
238
|
+
Russian::transliterate
|
239
|
+
Russian::translit
|
240
|
+
|
241
|
+
Russian.translit("рубин")
|
242
|
+
=> "rubin"
|
243
|
+
Russian.translit("Hallo Юлику Тарханову")
|
244
|
+
=> "Hallo Yuliku Tarhanovu"
|
245
|
+
</code></pre>
|
246
|
+
|
247
|
+
-- транслитерация русских букв в строке.
|
248
|
+
|
249
|
+
h1. Авторы
|
250
|
+
|
251
|
+
Для сообщений об ошибках, обнаруженных неточностях и предложений:
|
252
|
+
|
253
|
+
* "Ярослав Маркин":http://yaroslav.markin.net ("yaroslav@markin.net":mailto:yaroslav@markin.net)
|
254
|
+
|
255
|
+
При участии:
|
256
|
+
|
257
|
+
* "Юлика Тарханова":http://julik.nl
|
258
|
+
* "Евгения Пименова":http://libc.st/
|
259
|
+
* "Дмитрия Смалько":http://github.com/dsmalko
|
260
|
+
* "Алексея Фортуны":http://github.com/dadooda
|
261
|
+
* "Антона Агеева":http://blog.antage.name/
|
262
|
+
* "Александра Семенова":http://rotuka.com/
|
263
|
+
* "valodzka":http://github.com/valodzka
|
264
|
+
* "Николая Немшилова":http://github.com/MadRabbit
|
265
|
+
|
266
|
+
Огромное спасибо:
|
267
|
+
|
268
|
+
"Юлику Тарханову":http://julik.nl за "rutils":http://rutils.rubyforge.org/
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
desc "Run all examples"
|
7
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
8
|
+
#t.rspec_path = 'bin/rspec'
|
9
|
+
t.rspec_opts = %w[--color]
|
10
|
+
end
|
11
|
+
|
12
|
+
task :default => :spec
|
data/lib/rs_russian.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'russian'
|