russian 0.6.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.textile DELETED
@@ -1,295 +0,0 @@
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 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
-
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 всех функций локализации, необходимых для работы с русским языком. Поскольку сделать в Rails поддержку довольно сложного языка для локализации (каким и является русский) сразу же было проблематично, вместе с командой @gem i18n@ решено было обкатывать решение для русского языка на отдельном gem/плагине, и по мере возможности переносить наиболее общий функционал в "родительскую" библиотеку I18n. Таким образом, общей целью @gem russian@ стала поддержка русского языка до тех пор, пока она не появится в самом I18n.
18
-
19
- Russian использует библиотеку I18n (включена в поставку), несколько хаков поверх Rails (хаки хелперов даты-времени, хак для сообщений валидации) и файлы переводов, а также набор хелперов, упрощающий работу с русским языком (простая плюрализация, простой strftime и др.).
20
-
21
- Russian стремится быть минимально деструктивной для окружения и быть полностью совместимой с другими языками (таким образом, когда приложение использует Russian, оно остается полностью совместимым с Rails i18n).
22
-
23
- h2. Что такое I18n. История
24
-
25
- Библиотека I18n входит в состав Ruby on Rails начиная с версии 2.2. I18n -- это самое простое и недеструктивное решение для локализации и интернационализации Rails приложений. К сожалению, в первых версиях отсутствовала поддержка нескольких важных возможностей, специфичных для русского языка. Таким образом, русский язык для локализации в Rails 2.2 фактически не поддерживался.
26
-
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, поэтому использовать их придется отдельно.
32
-
33
- h1. Требования
34
-
35
- * Ruby 1.8.7 или 1.9.2 (поддерживается совместимость с JRuby и Rubinius);
36
- * Для использования с Rails нужна версия не ниже 3.0 (для более старых версий Rails используйте версии gem russian ветки 0.2);
37
- * Для разработки и тестирования библиотеки вам понадобятся Bundler и RSpec.
38
-
39
- h1. Установка
40
-
41
- Страница Russian на GitHub -- "http://github.com/yaroslav/russian/":http://github.com/yaroslav/russian/
42
-
43
- Для установки:
44
-
45
- @gem install russian@
46
-
47
- Чтобы задать локаль по умолчанию в вашем приложении, используйте
48
-
49
- <pre><code>
50
- I18n.default_locale = :ru
51
- </code></pre>
52
-
53
- Чтобы установить локаль для текущего треда, используйте
54
-
55
- <pre><code>
56
- I18n.locale = :ru
57
- </code></pre>
58
-
59
- h2. Ruby on Rails 3.0 и выше
60
-
61
- В вашем @Gemfile@ сделайте ссылку на gem @russian@:
62
-
63
- <pre><code>
64
- gem 'russian', '~> 0.6.0'
65
- </code></pre>
66
-
67
- И установите gem в проект с помощью bundler:
68
-
69
- @bundle install@ или @bundle update@.
70
-
71
- Далее, укажите
72
-
73
- <pre><code>
74
- config.i18n.default_locale = :ru
75
- </code></pre>
76
-
77
- в @config/application.rb@. Если по умолчанию нужна другая локаль, или же нужно переключать локали "на ходу", используйте методы модуля I18n (см. выше). Также ознакомьтесь с "документацией к I18n":http://rdoc.info/github/svenfuchs/i18n/master и "гидом по интернационализации Ruby on Rails":http://guides.rubyonrails.org/i18n.html.
78
-
79
- h2. Ruby on Rails 2.2 и 2.3
80
-
81
- Используйте старые версии gem (@0.2.x@). Получить код и почитать инструкцию по установке можно "здесь":https://github.com/yaroslav/russian/tree/eae28e3098797d06ff0574fb1bf99238eec124fe.
82
-
83
- h1. Использование
84
-
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 и выше:
106
-
107
- 1. Хелперы даты получают ключ @:use_standalone_month_names@ (для форсирования использования "отдельностоящего" названия месяца). Если ключ не указан, хелпер самостоятельно будет пытаться определить форму названия месяца: так, например, хелпер для выбора числа, месяца и года будет использовать "контекстную" форму названия месяца.
108
-
109
- 2. Включается перегрузка валидации для ActiveModel: если сообщение валидации указать с "птичкой" в начале, при выводе сообщений об ошибках (@full_messages@) для этого конкретного сообщения не будет указано название атрибута, к которому он относится. Этот фукнционал нужен, скорее, для тех, кто привык использовать подобные "хаки": в Rails 3 эта задача решается с помощью ключа @full_messages.format@ в таблице переводов.
110
-
111
- Наконец, становится доступен модуль Russian (инструкция ниже), который нужен для быстрого доступа к некоторым основным и вспомогательным функциям локализации (плюрализация без таблицы переводов, транслитерация) и для методов интернационализации с форсированной локалью русского языка (перевод в русской локали, перевод даты-времени в русской локали).
112
-
113
- После загрузки Russian можно использовать все стандартные функции библиотеки I18n, пользоваться измененным функционалом для лучшей поддержки русского языка, или использовать хелперы модуля Russian для еще более простой работы с русским языком.
114
-
115
- "Документация I18n":http://rdoc.info/github/svenfuchs/i18n/master
116
-
117
- "Гид по интернационализации Ruby on Rails":http://guides.rubyonrails.org/i18n.html.
118
-
119
- h2. Ключевые отличия от стандартной библиотеки I18n
120
-
121
- 1. Поддержка двух видов названий месяцев -- контекст ("сентября") и отдельностоящее ("Сентябрь") и дней недели.
122
-
123
- В словарях Russian определены оба варианта названий месяцев. В таблице переводов для русского языка (@locale/datetime.rb@) указаны правила для перевода: в зависимости от формата строки @strftime@, используется контекстное или отдельностоящее название.
124
-
125
- По аналогии есть поддержка двух видов названий дней недели.
126
-
127
- _NB:_ обратите внимание на нестандартные названия ключей при перечислении месяцев и дней недели в @locale/datetime.yml@.
128
- _NB:_ на необычных форматах @strftime@-строк контекст может не распознаваться; просто "дробите" в таком случае строку @strftime@ на части.
129
-
130
- 2. Плюрализация
131
-
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: "Дональд Кнут">
191
-
192
- <%= link_to(@person.name, person_path(@person)) %>
193
- # => <a href="/person/1-donald-knut">Дональд Кнут</a>
194
- </code></pre>
195
-
196
- _NB:_ Для простоты иногда проще воспользоваться методом @Russian::transliterate@ напрямую (чтобы не зависеть от текущей локали).
197
-
198
- h1. Справочник
199
-
200
- h2. Примеры и справка по переводам (I18n)
201
-
202
- Небольшую справку по переводам (I18n) и пример того, как можно переводить имена моделей, атрибутов, и многие другие вещи, определенные в Rails или I18n, можно посмотреть в директории @lib/russian/locale@. Там находятся файлы переводов, которые используются в Russian, со всеми комментариями.
203
-
204
- h2. Вспомогательные методы модуля Russian
205
-
206
- <pre><code>
207
- Russian.locale
208
- Russian::LOCALE
209
- </code></pre>
210
-
211
- -- возвращает локаль русского языка (@:'ru'@).
212
-
213
- <pre><code>
214
- Russian::init_i18n
215
- </code></pre>
216
-
217
- -- инициализация Russian. Добавление русских переводов в путь загрузки, включение модулей для плюрализации и транслитерации и перегрузка I18n.
218
-
219
- _NB:_ Выполняется автоматически при загрузке.
220
-
221
- <pre><code>
222
- Russian::translate
223
- Russian::t
224
- </code></pre>
225
-
226
- -- прокси для метода @translate@ I18n, форсирует использование русской локали.
227
-
228
- <pre><code>
229
- Russian::localize
230
- Russian::l
231
- </code></pre>
232
-
233
- -- прокси для метода @localize@ I18n, форсирует использование русской локали.
234
-
235
- <pre><code>
236
- Russian::strftime
237
-
238
- Russian::strftime(Time.now)
239
- => "Пн, 01 сент. 2008, 11:12:43 +0300"
240
- Russian::strftime(Time.now, "%d %B")
241
- >> "01 сентября"
242
- Russian::strftime(Time.now, "%B")
243
- => "Сентябрь"
244
- </code></pre>
245
-
246
- -- @strftime@ с форсированием русской локали (упрощенный вариант @localize@)
247
-
248
- <pre><code>
249
- Russian::pluralize
250
- Russian::p
251
-
252
- Russian.p(1, "вещь", "вещи", "вещей")
253
- => "вещь"
254
- Russian.p(2, "вещь", "вещи", "вещей")
255
- => "вещи"
256
- Russian.p(10, "вещь", "вещи", "вещей")
257
- => "вещей"
258
- Russian.p(3.14, "вещь", "вещи", "вещей", "вещи") # последний вариант используется для дробных величин
259
- => "вещи"
260
- </code></pre>
261
-
262
- -- упрощенная (без использования хешей I18n) плюрализация для русского языка
263
-
264
- <pre><code>
265
- Russian::transliterate
266
- Russian::translit
267
-
268
- Russian.translit("рубин")
269
- => "rubin"
270
- Russian.translit("Hallo Юлику Тарханову")
271
- => "Hallo Yuliku Tarhanovu"
272
- </code></pre>
273
-
274
- -- транслитерация русских букв в строке.
275
-
276
- h1. Авторы
277
-
278
- Для сообщений об ошибках, обнаруженных неточностях и предложений:
279
-
280
- * "Ярослав Маркин":http://yaroslav.markin.net ("yaroslav@markin.net":mailto:yaroslav@markin.net)
281
-
282
- При участии:
283
-
284
- * "Юлика Тарханова":http://julik.nl
285
- * "Евгения Пименова":http://libc.st/
286
- * "Дмитрия Смалько":http://github.com/dsmalko
287
- * "Алексея Фортуны":http://github.com/dadooda
288
- * "Антона Агеева":http://blog.antage.name/
289
- * "Александра Семенова":http://rotuka.com/
290
- * "valodzka":http://github.com/valodzka
291
- * "Николая Немшилова":http://github.com/MadRabbit
292
-
293
- Огромное спасибо:
294
-
295
- "Юлику Тарханову":http://julik.nl за "rutils":http://rutils.rubyforge.org/
data/TODO DELETED
@@ -1,4 +0,0 @@
1
- TODO
2
- ====
3
- * RDoc
4
-
data/spec/fixtures/en.yml DELETED
@@ -1,4 +0,0 @@
1
- # Fixture dummy translation
2
- # Need this to test if we preserve translation data that is already loaded when switching backends
3
- en:
4
- foo: "bar"
data/spec/fixtures/ru.yml DELETED
@@ -1,4 +0,0 @@
1
- ru:
2
- date:
3
- formats:
4
- default: "override"
@@ -1,99 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require File.dirname(__FILE__) + '/../../spec_helper'
4
-
5
- describe I18n, "Russian Date/Time localization" do
6
- before(:all) do
7
- Russian.init_i18n
8
- @date = Date.parse("1985-12-01")
9
- @time = Time.local(1985, 12, 01, 16, 05)
10
- end
11
-
12
- describe "with date formats" do
13
- it "should use default format" do
14
- l(@date).should == "01.12.1985"
15
- end
16
-
17
- it "should use short format" do
18
- l(@date, :format => :short).should == "01 дек."
19
- end
20
-
21
- it "should use long format" do
22
- l(@date, :format => :long).should == "01 декабря 1985"
23
- end
24
- end
25
-
26
- describe "with date day names" do
27
- it "should use day names" do
28
- l(@date, :format => "%d %B (%A)").should == "01 декабря (воскресенье)"
29
- l(@date, :format => "%d %B %Y года было %A").should == "01 декабря 1985 года было воскресенье"
30
- end
31
-
32
- it "should use standalone day names" do
33
- l(@date, :format => "%A").should == "Воскресенье"
34
- l(@date, :format => "%A, %d %B").should == "Воскресенье, 01 декабря"
35
- end
36
-
37
- it "should use abbreviated day names" do
38
- l(@date, :format => "%a").should == "Вс"
39
- l(@date, :format => "%a, %d %b %Y").should == "Вс, 01 дек. 1985"
40
- end
41
- end
42
-
43
- describe "with month names" do
44
- it "should use month names" do
45
- l(@date, :format => "%d %B").should == "01 декабря"
46
- l(@date, :format => "%e %B %Y").should == " 1 декабря 1985"
47
- l(@date, :format => "<b>%d</b> %B").should == "<b>01</b> декабря"
48
- l(@date, :format => "<strong>%e</strong> %B %Y").should == "<strong> 1</strong> декабря 1985"
49
- l(@date, :format => "А было тогда %eе число %B %Y").should == "А было тогда 1е число декабря 1985"
50
- end
51
-
52
- it "should use standalone month names" do
53
- l(@date, :format => "%B").should == "Декабрь"
54
- l(@date, :format => "%B %Y").should == "Декабрь 1985"
55
- end
56
-
57
- it "should use abbreviated month names" do
58
- @date = Date.parse("1985-03-01")
59
- l(@date, :format => "%d %b").should == "01 марта"
60
- l(@date, :format => "%e %b %Y").should == " 1 марта 1985"
61
- l(@date, :format => "<b>%d</b> %b").should == "<b>01</b> марта"
62
- l(@date, :format => "<strong>%e</strong> %b %Y").should == "<strong> 1</strong> марта 1985"
63
- end
64
-
65
- it "should use standalone abbreviated month names" do
66
- @date = Date.parse("1985-03-01")
67
- l(@date, :format => "%b").should == "март"
68
- l(@date, :format => "%b %Y").should == "март 1985"
69
- end
70
- end
71
-
72
- it "should define default date components order: day, month, year" do
73
- I18n.backend.translate(Russian.locale, :"date.order").should == [:day, :month, :year]
74
- end
75
-
76
- describe "with time formats" do
77
- it "should use default format" do
78
- l(@time).should =~ /^Вс, 01 дек. 1985, 16:05:00/
79
- end
80
-
81
- it "should use short format" do
82
- l(@time, :format => :short).should == "01 дек., 16:05"
83
- end
84
-
85
- it "should use long format" do
86
- l(@time, :format => :long).should == "01 декабря 1985, 16:05"
87
- end
88
-
89
- it "should define am and pm" do
90
- I18n.backend.translate(Russian.locale, :"time.am").should_not be_nil
91
- I18n.backend.translate(Russian.locale, :"time.pm").should_not be_nil
92
- end
93
- end
94
-
95
- protected
96
- def l(object, options = {})
97
- I18n.l(object, options.merge( { :locale => Russian.locale }))
98
- end
99
- end
@@ -1,28 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require File.dirname(__FILE__) + '/../../spec_helper'
4
-
5
- describe I18n, "Russian pluralization" do
6
- before(:each) do
7
- @hash = {}
8
- %w(one few many other).each do |key|
9
- @hash[key.to_sym] = key
10
- end
11
- @backend = I18n.backend
12
- end
13
-
14
- it "should pluralize correctly" do
15
- @backend.send(:pluralize, :'ru', @hash, 1).should == 'one'
16
- @backend.send(:pluralize, :'ru', @hash, 2).should == 'few'
17
- @backend.send(:pluralize, :'ru', @hash, 3).should == 'few'
18
- @backend.send(:pluralize, :'ru', @hash, 5).should == 'many'
19
- @backend.send(:pluralize, :'ru', @hash, 10).should == 'many'
20
- @backend.send(:pluralize, :'ru', @hash, 11).should == 'many'
21
- @backend.send(:pluralize, :'ru', @hash, 21).should == 'one'
22
- @backend.send(:pluralize, :'ru', @hash, 29).should == 'many'
23
- @backend.send(:pluralize, :'ru', @hash, 131).should == 'one'
24
- @backend.send(:pluralize, :'ru', @hash, 1.31).should == 'other'
25
- @backend.send(:pluralize, :'ru', @hash, 2.31).should == 'other'
26
- @backend.send(:pluralize, :'ru', @hash, 3.31).should == 'other'
27
- end
28
- end
data/spec/locale_spec.rb DELETED
@@ -1,47 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require File.dirname(__FILE__) + '/spec_helper'
4
-
5
- describe Russian, "loading locales" do
6
- before(:all) do
7
- Russian.init_i18n
8
- end
9
-
10
- %w(
11
- date.formats.default
12
- date.formats.short
13
- date.formats.long
14
- date.day_names
15
- date.standalone_day_names
16
- date.abbr_day_names
17
- date.month_names
18
- date.standalone_month_names
19
- date.abbr_month_names
20
- date.standalone_abbr_month_names
21
- date.order
22
-
23
- time.formats.default
24
- time.formats.short
25
- time.formats.long
26
- time.am
27
- time.pm
28
- ).each do |key|
29
- it "should define '#{key}' in datetime translations" do
30
- lookup(key).should_not be_nil
31
- end
32
- end
33
-
34
- it "should load pluralization rules" do
35
- lookup(:'i18n.plural.rule').should_not be_nil
36
- lookup(:'i18n.plural.rule').is_a?(Proc).should be_true
37
- end
38
-
39
- it "should load transliteration rule" do
40
- lookup(:'i18n.transliterate.rule').should_not be_nil
41
- lookup(:'i18n.transliterate.rule').is_a?(Proc).should be_true
42
- end
43
-
44
- def lookup(*args)
45
- I18n.backend.send(:lookup, Russian.locale, *args)
46
- end
47
- end
data/spec/russian_spec.rb DELETED
@@ -1,118 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require File.dirname(__FILE__) + '/spec_helper'
4
-
5
- describe Russian do
6
- describe "with locale" do
7
- it "should define :'ru' LOCALE" do
8
- Russian::LOCALE.should == :'ru'
9
- end
10
-
11
- it "should provide 'locale' proxy" do
12
- Russian.locale.should == Russian::LOCALE
13
- end
14
- end
15
-
16
- describe "during i18n initialization" do
17
- after(:each) do
18
- I18n.load_path = []
19
- Russian.init_i18n
20
- end
21
-
22
- it "should keep existing translations while switching backends" do
23
- I18n.load_path << File.join(File.dirname(__FILE__), 'fixtures', 'en.yml')
24
- Russian.init_i18n
25
- I18n.t(:foo, :locale => :'en').should == "bar"
26
- end
27
-
28
- it "should keep existing :ru translations while switching backends" do
29
- I18n.load_path << File.join(File.dirname(__FILE__), 'fixtures', 'ru.yml')
30
- Russian.init_i18n
31
- I18n.t(:'date.formats.default', :locale => :'ru').should == "override"
32
- end
33
-
34
- it "should NOT set default locale to Russian locale" do
35
- locale = I18n.default_locale
36
- Russian.init_i18n
37
- I18n.default_locale.should == locale
38
- end
39
- end
40
-
41
- describe "with localize proxy" do
42
- before(:each) do
43
- @time = mock(:time)
44
- @options = { :format => "%d %B %Y" }
45
- end
46
-
47
- %w(l localize).each do |method|
48
- it "'#{method}' should call I18n backend localize" do
49
- I18n.should_receive(:localize).with(@time, @options.merge({ :locale => Russian.locale }))
50
- Russian.send(method, @time, @options)
51
- end
52
- end
53
- end
54
-
55
- describe "with translate proxy" do
56
- before(:all) do
57
- @object = :bar
58
- @options = { :scope => :foo }
59
- end
60
-
61
- %w(t translate).each do |method|
62
- it "'#{method}' should call I18n backend translate" do
63
- I18n.should_receive(:translate).with(@object, @options.merge({ :locale => Russian.locale }))
64
- Russian.send(method, @object, @options)
65
- end
66
- end
67
- end
68
-
69
- describe "strftime" do
70
- before(:each) do
71
- @time = mock(:time)
72
- end
73
-
74
- it "should call localize with object and format" do
75
- format = "%d %B %Y"
76
- Russian.should_receive(:localize).with(@time, { :format => format })
77
- Russian.strftime(@time, format)
78
- end
79
-
80
- it "should call localize with object and default format when format is not specified" do
81
- Russian.should_receive(:localize).with(@time, { :format => :default })
82
- Russian.strftime(@time)
83
- end
84
- end
85
-
86
- describe "with pluralization" do
87
- %w(p pluralize).each do |method|
88
- it "'#{method}' should pluralize with variants given" do
89
- variants = %w(вещь вещи вещей вещи)
90
-
91
- Russian.send(method, 1, *variants).should == "вещь"
92
- Russian.send(method, 2, *variants).should == 'вещи'
93
- Russian.send(method, 3, *variants).should == 'вещи'
94
- Russian.send(method, 5, *variants).should == 'вещей'
95
- Russian.send(method, 10, *variants).should == 'вещей'
96
- Russian.send(method, 21, *variants).should == 'вещь'
97
- Russian.send(method, 29, *variants).should == 'вещей'
98
- Russian.send(method, 129, *variants).should == 'вещей'
99
- Russian.send(method, 131, *variants).should == 'вещь'
100
- Russian.send(method, 3.14, *variants).should == 'вещи'
101
- end
102
-
103
- it "should raise an exception when first parameter is not a number" do
104
- lambda { Russian.send(method, nil, "вещь", "вещи", "вещей") }.should raise_error(ArgumentError)
105
- lambda { Russian.send(method, "вещь", "вещь", "вещи", "вещей") }.should raise_error(ArgumentError)
106
- end
107
-
108
- it "should raise an exception when there are not enough variants" do
109
- lambda { Russian.send(method, 1) }.should raise_error(ArgumentError)
110
- lambda { Russian.send(method, 1, "вещь") }.should raise_error(ArgumentError)
111
- lambda { Russian.send(method, 1, "вещь", "вещи") }.should raise_error(ArgumentError)
112
- lambda { Russian.send(method, 1, "вещь", "вещи", "вещей") }.should_not raise_error(ArgumentError)
113
- lambda { Russian.send(method, 3.14, "вещь", "вещи", "вещей") }.should raise_error(ArgumentError)
114
- lambda { Russian.send(method, 3.14, "вещь", "вещи", "вещей", "вещи") }.should_not raise_error(ArgumentError)
115
- end
116
- end
117
- end
118
- end
data/spec/spec_helper.rb DELETED
@@ -1,7 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- $TESTING=true
4
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
5
-
6
- require 'russian'
7
-