krasivotokak-russian 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/CHANGELOG +64 -0
  2. data/LICENSE +20 -0
  3. data/README.textile +288 -0
  4. data/Rakefile +55 -0
  5. data/TODO +10 -0
  6. data/init.rb +3 -0
  7. data/lib/russian.rb +119 -0
  8. data/lib/russian/action_view_ext/helpers/date_helper.rb +112 -0
  9. data/lib/russian/active_record_ext/custom_error_message.rb +67 -0
  10. data/lib/russian/active_support_ext/parameterize.rb +31 -0
  11. data/lib/russian/backend/advanced.rb +132 -0
  12. data/lib/russian/locale/actionview.yml +153 -0
  13. data/lib/russian/locale/activerecord.yml +90 -0
  14. data/lib/russian/locale/activesupport.yml +16 -0
  15. data/lib/russian/locale/datetime.yml +46 -0
  16. data/lib/russian/locale/pluralize.rb +36 -0
  17. data/lib/russian/transliteration.rb +60 -0
  18. data/lib/vendor/i18n/MIT-LICENSE +20 -0
  19. data/lib/vendor/i18n/README.textile +20 -0
  20. data/lib/vendor/i18n/Rakefile +5 -0
  21. data/lib/vendor/i18n/i18n.gemspec +27 -0
  22. data/lib/vendor/i18n/lib/i18n.rb +199 -0
  23. data/lib/vendor/i18n/lib/i18n/backend/simple.rb +214 -0
  24. data/lib/vendor/i18n/lib/i18n/exceptions.rb +53 -0
  25. data/lib/vendor/i18n/test/all.rb +5 -0
  26. data/lib/vendor/i18n/test/i18n_exceptions_test.rb +100 -0
  27. data/lib/vendor/i18n/test/i18n_test.rb +125 -0
  28. data/lib/vendor/i18n/test/locale/en.rb +1 -0
  29. data/lib/vendor/i18n/test/locale/en.yml +3 -0
  30. data/lib/vendor/i18n/test/simple_backend_test.rb +568 -0
  31. data/lib/vendor/i18n_label/README.textile +38 -0
  32. data/lib/vendor/i18n_label/Rakefile +11 -0
  33. data/lib/vendor/i18n_label/init.rb +1 -0
  34. data/lib/vendor/i18n_label/install.rb +1 -0
  35. data/lib/vendor/i18n_label/lib/i18n_label.rb +23 -0
  36. data/lib/vendor/i18n_label/spec/i18n_label_spec.rb +20 -0
  37. data/lib/vendor/i18n_label/spec/spec_helper.rb +10 -0
  38. data/lib/vendor/i18n_label/tasks/i18n_label_tasks.rake +4 -0
  39. data/lib/vendor/i18n_label/uninstall.rb +1 -0
  40. data/spec/fixtures/en.yml +4 -0
  41. data/spec/fixtures/ru.yml +4 -0
  42. data/spec/i18n/locale/datetime_spec.rb +93 -0
  43. data/spec/i18n/locale/pluralization_spec.rb +28 -0
  44. data/spec/locale_spec.rb +123 -0
  45. data/spec/russian_spec.rb +136 -0
  46. data/spec/spec_helper.rb +7 -0
  47. data/spec/transliteration_spec.rb +44 -0
  48. metadata +125 -0
@@ -0,0 +1,64 @@
1
+ === master
2
+
3
+ * transliteration: Ы now transforms to Y [Alex Fortuna]
4
+
5
+ * транслитерация: Ы теперь превращается в Y [Alex Fortuna]
6
+
7
+ === 0.2.0 - 16.03.2009
8
+
9
+ * number_to_human_size() translations: using edge format (Rails 2.3)
10
+ * i18n gem updated (0.1.3)
11
+ * Rails 2.3 compat
12
+
13
+ * Перевод для number_to_human_size(): испольуется форматирование из edge (Rails 2.3)
14
+ * Обновлен gem i18n до версии 0.1.3
15
+ * Совместимость с Rails 2.3
16
+
17
+ === 0.1.3 - 27.12.2008
18
+
19
+ * Add support.array.words_connector/two_words_connector/last_word_connector (Array#to_sentence) (Rails Edge)
20
+ * Add datetime.prompts translations (Rails Edge)
21
+
22
+ * Добавлены переводы для Array#to_sentence (Rails Edge)
23
+ * Добавлены переводы для datetime.prompts (Rails Edge)
24
+
25
+ === 0.1.2 - 4.11.2008
26
+
27
+ Fixed I18n.load_path ordering, translations shipped with russian gem will no longer overwrite your own translations (thanks Dmitrij Smalko for bugreport).
28
+
29
+ Поправлено добавление переводов russian в I18n.load_path, теперь переводы из russian не будут замещать ваши собственные переводы (спасибо Dmitrij Smalko за обнаружение ошибки).
30
+
31
+ === 0.1.1 - 24.11.2008
32
+
33
+ Added number.human.storage_units translation key (Rails Edge).
34
+
35
+ Добавлен ключ number.human.storage_units (появился в Rails Edge).
36
+
37
+ === 0.1.0 - 22.11.2008
38
+
39
+ No changes, Rails 2.2 released
40
+
41
+ === 0.0.9 - 21.11.2008
42
+
43
+ * Updated I18n gem due to locale changes (0.1.1)
44
+ * NB! I18n changed default locale from :'en-US' to :'en', same recommended for other locales by default
45
+ * NB!! Russian locale is now :'ru' NOT :'ru-RU', update your locale files.
46
+
47
+ * I18n gem обновился до 0.1.1 в связи с изменениями в названиях локалей
48
+ * ВНИМАНИЕ: локаль по умолчанию I18n теперь называется не :'en-US' а :'en', такой же способ именования рекомендуется и для других локалей
49
+ * ВНИМАНИЕ! Локаль русского языка теперь называется :'ru' а не :'ru-RU'. Не забудьте обновить ваши файлы переводов.
50
+
51
+ === 0.0.8 - 20.11.2008
52
+
53
+ * Introduce transliteration (Russian.translit, Russian.transliterate)
54
+ * Add an ActiveSupport hack for #parameterize
55
+
56
+ * Добавилась поддержка транслитерации (Russian.translit, Russian.transliterate)
57
+ * Добавился хак для #parameterize ActiveSupport (генерация "красивых" URL)
58
+
59
+ === 0.0.7 - 09.11.2008
60
+
61
+ * Updated I18n gem
62
+
63
+ * Новая версия gem I18n
64
+
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 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.
@@ -0,0 +1,288 @@
1
+ h1. Russian
2
+
3
+ Поддержка русского языка для Ruby и Rails при помощи библиотеки I18n.
4
+
5
+ Russian language support for Ruby and Rails, using I18n library.
6
+
7
+ h3. If you don't speak Russian
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.
10
+
11
+ Feel free to shoot an email to Yaroslav Markin ("yaroslav@markin.net":mailto:yaroslav@markin.net)
12
+
13
+ h1. Что это
14
+
15
+ Russian -- это библиотека для полноценной поддержки русского языка (форматирование даты и времени, плюрализация, локализация в целом) для Ruby и Ruby on Rails.
16
+
17
+ Цель проекта -- построить полноценную среду для русской локализации Ruby и Rails проектов, при этом используя минимально возможное количество хаков, сохраняя при этом поддержку локализации приложения на другие языки, а также форсировать включение в основную ветку I18n и Rails всех функций локализации, необходимых для работы с русским языком.
18
+
19
+ Russian использует библиотеку I18n (включена в поставку), несколько хаков поверх нее (собственный бекэнд с поддержкой специфичного для русского форматирования даты и времени, поддержкой плюрализации), несколько хаков поверх Rails (хаки хелперов даты-времени, хак для сообщений валидации) и файлы переводов, а также набор хелперов, упрощающий работу с русским языком (простая плюрализация, простой strftime и др.).
20
+
21
+ Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian и собственный бекэнд Russian, оно остается полностью совместимым с Rails i18n).
22
+
23
+ h2. Что такое I18n
24
+
25
+ Библиотека I18n входит в состав Ruby on Rails начиная с версии 2.2. В перспективе I18n -- это самое простое и недеструктивное решение для локализации и интернационализации Rails приложений, но в текущей версии отсутствовала поддержка нескольких важных возможностей, специфичных для русского языка. Таким образом, русский язык для локализации в Rails 2.2 фактически не поддерживался.
26
+
27
+ Для исправления этого досадного недоразумения появилась библиотека Russian (подробнее см. _Использование_).
28
+
29
+ h1. Требования
30
+
31
+ * Ruby 1.8 (тестировалось на 1.8.6);
32
+ * Для использования с Rails нужна версия не ниже 2.2;
33
+ * Для тестирования библиотеки вам понадобится RSpec.
34
+
35
+ h1. Установка
36
+
37
+ Страница Russian на github -- "http://github.com/yaroslav/russian/":http://github.com/yaroslav/russian/
38
+
39
+ Russian можно установить как gem с github. Для этого:
40
+
41
+ 1. Нужно добавить репозиторий gem'ов github в качестве источника
42
+
43
+ @gem sources -a http://gems.github.com@
44
+
45
+ 2. Установить gem
46
+
47
+ @gem install yaroslav-russian@
48
+
49
+
50
+ _NB:_ Gem @russian@ также зеркалируется на RubyForge, поэтому его можно установить командой
51
+
52
+ @gem install russian@.
53
+
54
+ h2. Ruby on Rails
55
+
56
+ Существует два варианта использования Russian вместе с Rails:
57
+
58
+ 1. Установка gem
59
+
60
+ В файле @config/environment.rb@ сделайте ссылку на gem @yaroslav-russian@ с github:
61
+
62
+ <pre><code>
63
+ Rails::Initializer.run do |config|
64
+ config.gem 'yaroslav-russian', :lib => 'russian', :source => 'http://gems.github.com'
65
+ end
66
+ </code></pre>
67
+
68
+ Чтобы установить gem, используйте команду
69
+
70
+ @rake gems:install@.
71
+
72
+ 2. Установка плагина
73
+
74
+ Для того, чтобы установить Russian как плагин к Rails, используйте команду
75
+
76
+ @script/plugin install git://github.com/yaroslav/russian.git@
77
+
78
+ Для Windows можно использовать версию git, расположенную по адресу: "http://code.google.com/p/msysgit/":http://code.google.com/p/msysgit/
79
+
80
+ h1. Использование
81
+
82
+ При загрузке Russian включает:
83
+
84
+ * библиотеку I18n если она еще не используется (например, если Russian используется отдельно от Rails)
85
+ * собственный класс для I18n бекэнда (полностью совместим со стандартным бекэндом)
86
+ * перегрузку хелперов даты для Rails (если Rails загружен)
87
+ * пререгрузку обработки сообщений валидации для ActiveRecord (если Rails загружен)
88
+
89
+ При инициализации:
90
+
91
+ * заменяется бэкэнд I18n со стандартного на собственный бекэнд Russian (@I18n::Backend::Advanced@)
92
+ * _NB:_ локаль русского языка (@:'ru'@) становится локалью по умолчанию
93
+ * загружаются все файлы переводов, в том числе переводы для Rails.
94
+
95
+ После этого можно использовать все стандартные функции библиотеки I18n, пользоваться измененным функционалом для лучшей поддержки русского языка, или использовать хелперы модуля Russian для еще более простой работы с русским языком.
96
+
97
+ h2. Отличия от стандартной библиотеки I18n
98
+
99
+ 1. Поддержка двух видов названий месяцев -- контекст ("сентября") и отдельностоящее ("Сентябрь").
100
+
101
+ Для этого перегружена функция локализации, теперь название месяца используется в зависимости от контекста. В словарях Russian определены оба варианта.
102
+
103
+ Перегрузка недеструктивная: если для какого-то другого языка не определены два варианта названий месяцев, ошибки не возникнет.
104
+
105
+ Аналогично есть поддержка двух видов названий дней недели.
106
+
107
+ 2. Плюрализация
108
+
109
+ Стандартно I18n поддерживается только плюрализация по английским правилам; бекэнд, использующийся в Russian, позволяет каждому языку определять правила плюрализации в таблице переводов, задавая их как @Proc@.
110
+
111
+ Перегрузка недеструктивная: если правила в таблице нет, используется правило по умолчанию (английский язык).
112
+
113
+ Правила для русского языка включены.
114
+
115
+ h1. Справочник
116
+
117
+ h2. Примеры и справка по переводам (I18n)
118
+
119
+ Небольшую справку по переводам (I18n) и пример того, как можно переводить имена моделей, атрибутов, и многие другие вещи, определенные в Rails или I18n, можно посмотреть в директории @lib/russian/locale@. Там находятся файлы переводов, которые используются в Russian, со всеми комментариями.
120
+
121
+ h2. Вспомогательные методы модуля Russian
122
+
123
+ <pre><code>
124
+ Russian.locale
125
+ Russian::LOCALE
126
+ </code></pre>
127
+
128
+ -- возвращает локаль русского языка (@:'ru'@).
129
+
130
+ <pre><code>
131
+ Russian::i18n_backend_class
132
+ </code></pre>
133
+
134
+ -- возвращает класс собственного бекенда I18n
135
+
136
+ <pre><code>
137
+ Russian::init_i18n
138
+ </code></pre>
139
+
140
+ -- инициализация Russian. Включение бекэнда, русский язык по умолчанию, загрузка переводов.
141
+
142
+ _NB:_ Выполняется автоматически при загрузке.
143
+
144
+ <pre><code>
145
+ Russian::translate
146
+ Russian::t
147
+ </code></pre>
148
+
149
+ -- прокси для метода @translate@ I18n, форсирует использование русской локали.
150
+
151
+ <pre><code>
152
+ Russian::localize
153
+ Russian::l
154
+ </code></pre>
155
+
156
+ -- прокси для метода @localize@ I18n, форсирует использование русской локали.
157
+
158
+ <pre><code>
159
+ Russian::strftime
160
+
161
+ Russian::strftime(Time.now)
162
+ => "Пн, 01 сент. 2008, 11:12:43 +0300"
163
+ Russian::strftime(Time.now, "%B")
164
+ => "Сентябрь"
165
+ </code></pre>
166
+
167
+ -- @strftime@ с форсированием русской локали (упрощенный вариант @localize@)
168
+
169
+ <pre><code>
170
+ Russian::pluralize
171
+ Russian::p
172
+
173
+ Russian.p(1, "вещь", "вещи", "вещей")
174
+ => "вещь"
175
+ Russian.p(2, "вещь", "вещи", "вещей")
176
+ => "вещи"
177
+ Russian.p(10, "вещь", "вещи", "вещей")
178
+ => "вещей"
179
+ Russian.p(3.14, "вещь", "вещи", "вещей", "вещи") # последний вариант используется для дробных величин
180
+ => "вещи"
181
+ </code></pre>
182
+
183
+ -- упрощенная (без использования хешей I18n) плюрализация для русского языка
184
+
185
+ <pre><code>
186
+ Russian::transliterate
187
+ Russian::translit
188
+
189
+ Russian.translit("рубин")
190
+ => "rubin"
191
+ Russian.translit("Hallo Юлику Тарханову")
192
+ => "Hallo Yuliku Tarhanovu"
193
+ </code></pre>
194
+
195
+ -- транслитерация русских букв в строке.
196
+
197
+
198
+ h2. Ruby on Rails
199
+
200
+ h3. Переводы
201
+
202
+ При использовании с Ruby on Rails загружаются все стандартные переводы, и русский язык становится годным к использованию для локализации. В поставку включены все нужные переводы для ActionView, ActiveRecord, ActiveSupport, которые можно переопределять по необходимости стандартными средствами I18n.
203
+
204
+ h3. Хелперы
205
+
206
+ Хелперы даты-времени получают ключ @:use_standalone_month_names@ для форсирования отображения отдельностоящего названия месяца ("Сентябрь" а не "сентября"). Такое имя месяца используется когда включен ключ @:use_standalone_month_names@ (для отдельностоящего @select_month@ он включается по умолчанию), либо когда есть ключ @:discard_day@.
207
+
208
+ В Russian включен плагин i18n_label, который подставляет в форм-хелпер @label@ перевод атрибута из таблицы переводов I18n. Например:
209
+
210
+ * в файле переводов:
211
+
212
+ <pre><code>
213
+ ru:
214
+ activerecord:
215
+ attributes:
216
+ user:
217
+ name: "Имя"
218
+ </code></pre>
219
+
220
+ * во view:
221
+
222
+ <pre><code>
223
+ <% form_for @user do |f| %>
224
+ <%= f.label :name %>
225
+ <% end %>
226
+ </code></pre>
227
+
228
+ Даст:
229
+
230
+ <pre><code>
231
+ <label for="user_name">Имя</label>
232
+ </code></pre>
233
+
234
+ h3. Валидация
235
+
236
+ Обработка ошибок в ActiveRecord перегружается -- в Russian включен популярный плагин custom_error_message, с помощью которого можно переопределять стандартное отображение сообщений об ошибках. Так, например,
237
+
238
+ @validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'@
239
+
240
+ даст сообщение
241
+
242
+ @Accepted terms нужно принять соглашение@
243
+
244
+ или, например
245
+
246
+ @Соглашение об использовании нужно принять соглашение@
247
+
248
+ если вы указали перевод для имени атрибута.
249
+
250
+ Но
251
+
252
+ @validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'@
253
+
254
+ даст сообщение
255
+
256
+ @Нужно принять соглашение@
257
+
258
+ _NB:_ в сообщениях валидации можно использовать такие макросы как @{{attribute}}@, @{{value}}@ -- подробнее см. документацию по I18n.
259
+
260
+ h3. Параметризация строк
261
+
262
+ Перегружается метод @parameterize@ инфлектора ActiveSupport (он же -- @String#parameterize@), теперь в нем идет транслитерация букв русского алфавита.
263
+
264
+ Пример:
265
+
266
+ <pre><code>
267
+ class Person
268
+ def to_param
269
+ "#{id}-#{name.parameterize}"
270
+ end
271
+ end
272
+
273
+ @person = Person.find(1)
274
+ # => #<Person id: 1, name: "Дональд Кнут">
275
+
276
+ <%= link_to(@person.name, person_path(@person)) %>
277
+ # => <a href="/person/1-donald-knut">Дональд Кнут</a>
278
+ </code></pre>
279
+
280
+ h1. Автор
281
+
282
+ Для сообщений об ошибках, обнаруженных неточностях и предложений:
283
+
284
+ Ярослав Маркин ("yaroslav@markin.net":mailto:yaroslav@markin.net)
285
+
286
+ Огромное спасибо:
287
+
288
+ Юлику Тарханову (me@julik.nl) за "rutils":http://rutils.rubyforge.org/
@@ -0,0 +1,55 @@
1
+ require 'rubygems'
2
+ require 'rake/gempackagetask'
3
+ require 'spec/rake/spectask'
4
+ require 'rubygems/specification'
5
+ require 'date'
6
+
7
+ GEM = "russian"
8
+ GEM_VERSION = "0.2.0"
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
+
38
+ task :default => :spec
39
+ 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
55
+ end
data/TODO ADDED
@@ -0,0 +1,10 @@
1
+ TODO
2
+ ====
3
+ * RDoc
4
+ * check Unicode CLDR to ensure all datetime formats are correct
5
+ * refactor Advanced backend localize method (looks ugly)
6
+ * refactor DateTimeSelector#translated_month_names
7
+
8
+ Questionable
9
+ ============
10
+ * integration specs for rails hacks
data/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ # Rails plugin init
2
+ require 'russian'
3
+
@@ -0,0 +1,119 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ if RUBY_VERSION < "1.9"
4
+ $KCODE = 'u'
5
+ end
6
+
7
+ $:.push File.join(File.dirname(__FILE__), 'russian')
8
+ require 'transliteration'
9
+
10
+ # I18n require
11
+ unless defined?(I18n)
12
+ $:.push File.join(File.dirname(__FILE__), 'vendor', 'i18n', 'lib')
13
+ require 'i18n'
14
+ end
15
+ # Advanced backend
16
+ require 'backend/advanced'
17
+
18
+ # Rails hacks
19
+ require 'active_record_ext/custom_error_message' if defined?(ActiveRecord)
20
+ if defined?(ActionView::Helpers)
21
+ require 'action_view_ext/helpers/date_helper'
22
+ require 'vendor/i18n_label/init'
23
+ end
24
+ require 'active_support_ext/parameterize' if defined?(ActiveSupport::Inflector)
25
+
26
+ module Russian
27
+ extend self
28
+
29
+ module VERSION
30
+ MAJOR = 0
31
+ MINOR = 2
32
+ TINY = 0
33
+
34
+ STRING = [MAJOR, MINOR, TINY].join('.')
35
+ end
36
+
37
+ # Russian locale
38
+ LOCALE = :'ru'
39
+
40
+ # Russian locale
41
+ def locale
42
+ LOCALE
43
+ end
44
+
45
+ # Returns custom backend class for usage with Russian library
46
+ #
47
+ # See I18n::Backend
48
+ def i18n_backend_class
49
+ I18n::Backend::Advanced
50
+ end
51
+
52
+ # Init Russian i18n: set custom backend, set default locale to Russian locale, load all translations
53
+ # shipped with library.
54
+ def init_i18n
55
+ I18n.backend = Russian.i18n_backend_class.new
56
+ I18n.default_locale = LOCALE
57
+ I18n.load_path.unshift(*locale_files)
58
+ end
59
+
60
+ # See I18n::translate
61
+ def translate(key, options = {})
62
+ I18n.translate(key, options.merge({ :locale => LOCALE }))
63
+ end
64
+ alias :t :translate
65
+
66
+ # See I18n::localize
67
+ def localize(object, options = {})
68
+ I18n.localize(object, options.merge({ :locale => LOCALE }))
69
+ end
70
+ alias :l :localize
71
+
72
+ # strftime() proxy with Russian localization
73
+ def strftime(object, format = :default)
74
+ localize(object, { :format => format })
75
+ end
76
+
77
+ # Simple pluralization proxy
78
+ #
79
+ # Usage:
80
+ # Russian.pluralize(1, "вещь", "вещи", "вещей")
81
+ # Russian.pluralize(3.14, "вещь", "вещи", "вещей", "вещи")
82
+ def pluralize(n, *variants)
83
+ raise ArgumentError, "Must have a Numeric as a first parameter" unless n.is_a?(Numeric)
84
+ raise ArgumentError, "Must have at least 3 variants for pluralization" if variants.size < 3
85
+ raise ArgumentError, "Must have at least 4 variants for pluralization" if (variants.size < 4 && n != n.round)
86
+ variants_hash = pluralization_variants_to_hash(*variants)
87
+ I18n.backend.send(:pluralize, LOCALE, variants_hash, n)
88
+ end
89
+ alias :p :pluralize
90
+
91
+ # Transliteration for russian language
92
+ #
93
+ # Usage:
94
+ # Russian.translit("рубин")
95
+ # Russian.transliterate("рубин")
96
+ def transliterate(str)
97
+ Russian::Transliteration.transliterate(str)
98
+ end
99
+ alias :translit :transliterate
100
+
101
+ protected
102
+ # Returns all locale files shipped with library
103
+ def locale_files
104
+ Dir[File.join(File.dirname(__FILE__), "russian", "locale", "**/*")]
105
+ end
106
+
107
+ # Converts an array of pluralization variants to a Hash that can be used
108
+ # with I18n pluralization.
109
+ def pluralization_variants_to_hash(*variants)
110
+ {
111
+ :one => variants[0],
112
+ :few => variants[1],
113
+ :many => variants[2],
114
+ :other => variants[3]
115
+ }
116
+ end
117
+ end
118
+
119
+ Russian.init_i18n