russian 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ === 0.2.1 - 5.09.2009
2
+
3
+ * Rails 2.3.4 compat (ActiveRecord::Error) and deprecation warning (use errors.full_messages.format from now on) [Alexander Semyonov/Yaroslav Markin]
4
+ * Added a couple of missing translations from Rails 2.3.4
5
+ * transliteration: Ы now transforms to Y [Alex Fortuna]
6
+
7
+ * Совместимость с Rails 2.3.4 (ActiveRecord::Error) и устаревшее форматирование через "^" (теперь надо использовать errors.full_messages.format) [Alexander Semyonov/Yaroslav Markin]
8
+ * Добавлена пара недостающих переводов из Rails 2.3.4
9
+ * транслитерация: Ы теперь превращается в Y [Alex Fortuna]
10
+
1
11
  === 0.2.0 - 16.03.2009
2
12
 
3
13
  * number_to_human_size() translations: using edge format (Rails 2.3)
data/README.textile CHANGED
@@ -233,7 +233,9 @@ ru:
233
233
 
234
234
  h3. Валидация
235
235
 
236
- Обработка ошибок в ActiveRecord перегружается -- в Russian включен популярный плагин custom_error_message, с помощью которого можно переопределять стандартное отображение сообщений об ошибках. Так, например,
236
+ До версии Rails 2.3.4 форматирование сообщений об ошибках не было гибким, и для нормального отображения ошибок на русском языке приходилось испольковать хаки. Если вы используете Rails 2.3.4 и выше, пропустите этот пункт (используйте ключ переводов @activerecord.errors.full_messages.format@).
237
+
238
+ Для Rails 2.3.3 и ниже обработка ошибок в ActiveRecord перегружается -- в Russian включен популярный плагин custom_error_message, с помощью которого можно переопределять стандартное отображение сообщений об ошибках. Так, например,
237
239
 
238
240
  @validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'@
239
241
 
@@ -277,12 +279,21 @@ end
277
279
  # => <a href="/person/1-donald-knut">Дональд Кнут</a>
278
280
  </code></pre>
279
281
 
280
- h1. Автор
282
+ h1. Авторы
281
283
 
282
284
  Для сообщений об ошибках, обнаруженных неточностях и предложений:
283
285
 
284
- Ярослав Маркин ("yaroslav@markin.net":mailto:yaroslav@markin.net)
286
+ * "Ярослав Маркин":http://yaroslav.markin.net ("yaroslav@markin.net":mailto:yaroslav@markin.net)
287
+
288
+ При участии:
289
+
290
+ * "Юлика Тарханова":http://julik.nl
291
+ * "Евгения Пименова":http://libc.st/
292
+ * "Дмитрия Смалько":http://github.com/dsmalko
293
+ * Alex Fortuna ("alex@askit.org":mailto:alex@askit.org)
294
+ * "Антона Агеева":http://blog.antage.name/
295
+ * "Александра Семенова":http://rotuka.com/
285
296
 
286
297
  Огромное спасибо:
287
298
 
288
- Юлику Тарханову (me@julik.nl) за "rutils":http://rutils.rubyforge.org/
299
+ "Юлику Тарханову":http://julik.nl за "rutils":http://rutils.rubyforge.org/
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rubygems/specification'
5
5
  require 'date'
6
6
 
7
7
  GEM = "russian"
8
- GEM_VERSION = "0.2.0"
8
+ GEM_VERSION = "0.2.1"
9
9
  AUTHOR = "Yaroslav Markin"
10
10
  EMAIL = "yaroslav@markin.net"
11
11
  HOMEPAGE = "http://github.com/yaroslav/russian/"
data/lib/russian.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- $KCODE='u'
3
+ if RUBY_VERSION < "1.9"
4
+ $KCODE = 'u'
5
+ end
4
6
 
5
7
  $:.push File.join(File.dirname(__FILE__), 'russian')
6
8
  require 'transliteration'
@@ -27,7 +29,7 @@ module Russian
27
29
  module VERSION
28
30
  MAJOR = 0
29
31
  MINOR = 2
30
- TINY = 0
32
+ TINY = 1
31
33
 
32
34
  STRING = [MAJOR, MINOR, TINY].join('.')
33
35
  end
@@ -1,53 +1,111 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- # The following is taken from custom_error_message plugin by David Easley
4
- # (http://rubyforge.org/projects/custom-err-msg/)
5
- module ActiveRecord
6
- class Errors
3
+ require 'active_record/version'
4
+ ma, mi, ti = ActiveRecord::VERSION::MAJOR, ActiveRecord::VERSION::MINOR, ActiveRecord::VERSION::TINY
7
5
 
8
- # Redefine the ActiveRecord::Errors::full_messages method:
9
- # Returns all the full error messages in an array. 'Base' messages are handled as usual.
10
- # Non-base messages are prefixed with the attribute name as usual UNLESS they begin with '^'
11
- # in which case the attribute name is omitted.
12
- # E.g. validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service'
13
- #
14
- #
15
- # Переопределяет метод ActiveRecord::Errors::full_messages. Сообщения об ошибках для атрибутов
16
- # теперь не имеют префикса с названием атрибута если в сообщении об ошибке первым символом указан "^".
17
- #
18
- # Так, например,
19
- #
20
- # validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'
21
- #
22
- # даст сообщение
23
- #
24
- # Accepted terms нужно принять соглашение
25
- #
26
- # однако,
27
- #
28
- # validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'
29
- #
30
- # даст сообщение
31
- #
32
- # Нужно принять соглашение
33
- def full_messages
34
- full_messages = []
6
+ if (ma >= 2 && mi >= 3 && ti >= 4)
7
+ module ActiveRecord
8
+ class Error
9
+ protected
10
+ # Redefine the ActiveRecord::Error::generate_full_message method:
11
+ # Returns all the full error messages in an array. 'Base' messages are handled as usual.
12
+ # Non-base messages are prefixed with the attribute name as usual UNLESS they begin with '^'
13
+ # in which case the attribute name is omitted.
14
+ # E.g. validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service'
15
+ #
16
+ #
17
+ # Переопределяет метод ActiveRecord::Error::generate_full_message. Сообщения об ошибках для атрибутов
18
+ # теперь не имеют префикса с названием атрибута если в сообщении об ошибке первым символом указан "^".
19
+ #
20
+ # Так, например,
21
+ #
22
+ # validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'
23
+ #
24
+ # даст сообщение
25
+ #
26
+ # Accepted terms нужно принять соглашение
27
+ #
28
+ # однако,
29
+ #
30
+ # validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'
31
+ #
32
+ # даст сообщение
33
+ #
34
+ # Нужно принять соглашение
35
+ def generate_full_message(message, options = {})
36
+ options.reverse_merge! :message => self.message,
37
+ :model => @base.class.human_name,
38
+ :attribute => @base.class.human_attribute_name(attribute.to_s),
39
+ :value => value
40
+
41
+ key = :"full_messages.#{@message}"
42
+
43
+ if options[:message].is_a?(String) && options[:message] =~ /^\^/
44
+ ActiveSupport::Deprecation.warn("Using '^' hack for ActiveRecord error messages has been deprecated. Please use errors.full_messages.format I18n key for formatting")
35
45
 
36
- @errors.each_key do |attr|
37
- @errors[attr].each do |msg|
38
- next if msg.nil?
39
-
40
- if attr == "base"
41
- full_messages << msg
42
- elsif msg =~ /^\^/
43
- full_messages << msg[1..-1]
46
+ options[:full_message] = options[:message][1..-1]
47
+ defaults = [:'full_messages.format', '{{full_message}}']
44
48
  else
45
- full_messages << @base.class.human_attribute_name(attr) + " " + msg
49
+ defaults = [:'full_messages.format', '{{attribute}} {{message}}']
46
50
  end
51
+
52
+ I18n.t(key, options.merge(:default => defaults, :scope => [:activerecord, :errors]))
47
53
  end
48
- end
54
+ end
55
+ end
56
+
57
+ else
58
+ module ActiveRecord
59
+ class Errors
60
+ # DEPRECATED as of Rails 2.3.4
61
+ #
62
+ # The following is taken from custom_error_message plugin by David Easley
63
+ # (http://rubyforge.org/projects/custom-err-msg/)
64
+ #
65
+ # Redefine the ActiveRecord::Errors::full_messages method:
66
+ # Returns all the full error messages in an array. 'Base' messages are handled as usual.
67
+ # Non-base messages are prefixed with the attribute name as usual UNLESS they begin with '^'
68
+ # in which case the attribute name is omitted.
69
+ # E.g. validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service'
70
+ #
71
+ #
72
+ # Переопределяет метод ActiveRecord::Errors::full_messages. Сообщения об ошибках для атрибутов
73
+ # теперь не имеют префикса с названием атрибута если в сообщении об ошибке первым символом указан "^".
74
+ #
75
+ # Так, например,
76
+ #
77
+ # validates_acceptance_of :accepted_terms, :message => 'нужно принять соглашение'
78
+ #
79
+ # даст сообщение
80
+ #
81
+ # Accepted terms нужно принять соглашение
82
+ #
83
+ # однако,
84
+ #
85
+ # validates_acceptance_of :accepted_terms, :message => '^Нужно принять соглашение'
86
+ #
87
+ # даст сообщение
88
+ #
89
+ # Нужно принять соглашение
90
+ def full_messages
91
+ full_messages = []
49
92
 
50
- return full_messages
93
+ @errors.each_key do |attr|
94
+ @errors[attr].each do |msg|
95
+ next if msg.nil?
96
+
97
+ if attr == "base"
98
+ full_messages << msg
99
+ elsif msg =~ /^\^/
100
+ full_messages << msg[1..-1]
101
+ else
102
+ full_messages << @base.class.human_attribute_name(attr) + " " + msg
103
+ end
104
+ end
105
+ end
106
+
107
+ return full_messages
108
+ end
51
109
  end
52
110
  end
53
111
  end
@@ -151,3 +151,7 @@ ru:
151
151
  # The variable :count is also available
152
152
  body: "Проблемы возникли со следующими полями:"
153
153
 
154
+ support:
155
+ select:
156
+ # default value for :prompt => true in FormOptionsHelper
157
+ prompt: "Выберите: "
@@ -47,6 +47,11 @@ ru:
47
47
  less_than_or_equal_to: "может иметь значение меньшее или равное {{count}}"
48
48
  odd: "может иметь лишь четное значение"
49
49
  even: "может иметь лишь нечетное значение"
50
+ record_invalid: "Возникли ошибки: {{errors}}"
51
+
52
+ full_messages:
53
+ format: "{{attribute}} {{message}}"
54
+
50
55
  # Можно добавить собственные сообщения об ошибке тут или задавать их в контексте атрибута.
51
56
  #
52
57
  #
@@ -15,22 +15,11 @@
15
15
  #
16
16
  # Пример
17
17
  #
18
- # :one = 1, 21, 31, 41, 51, 61...
19
- # :few = 2-4, 22-24, 32-34...
18
+ # :one = 1, 21, 31, 41, 51, 61...
19
+ # :few = 2-4, 22-24, 32-34...
20
20
  # :many = 0, 5-20, 25-30, 35-40...
21
21
  # :other = 1.31, 2.31, 5.31...
22
- modulo10 = n.modulo(10)
23
- modulo100 = n.modulo(100)
24
-
25
- if modulo10 == 1 && modulo100 != 11
26
- :one
27
- elsif (modulo10 == 2 || modulo10 == 3 || modulo10 == 4) && !(modulo100 == 12 || modulo100 == 13 || modulo100 == 14)
28
- :few
29
- elsif modulo10 == 0 || (modulo10 == 5 || modulo10 == 6 || modulo10 == 7 || modulo10 == 8 || modulo10 == 9) || (modulo100 == 11 || modulo100 == 12 || modulo100 == 13 || modulo100 == 14)
30
- :many
31
- else
32
- :other
33
- end
22
+ n % 10 == 1 && n % 100 != 11 ? :one : [2, 3, 4].include?(n % 10) && ![12, 13, 14].include?(n % 100) ? :few : n % 10 == 0 || [5, 6, 7, 8, 9].include?(n % 10) || [11, 12, 13, 14].include?(n % 100) ? :many : :other
34
23
  }
35
24
  }
36
25
  }
@@ -19,7 +19,7 @@ module Russian
19
19
  "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
20
20
  "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
21
21
  "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"'",
22
- "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
22
+ "ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
23
23
  }.freeze
24
24
 
25
25
  UPPER = {
@@ -29,7 +29,7 @@ module Russian
29
29
  "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
30
30
  "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
31
31
  "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
32
- "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"YI","Ь"=>"",
32
+ "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"Y","Ь"=>"",
33
33
  "Э"=>"E","Ю"=>"YU","Я"=>"YA",
34
34
  }.freeze
35
35
 
data/spec/locale_spec.rb CHANGED
@@ -72,6 +72,8 @@ describe Russian, "loading locales" do
72
72
 
73
73
  activerecord.errors.template.header
74
74
  activerecord.errors.template.body
75
+
76
+ support.select.prompt
75
77
  ).each do |key|
76
78
  it "should define '#{key}' in actionview translations" do
77
79
  lookup(key).should_not be_nil
@@ -98,6 +100,9 @@ describe Russian, "loading locales" do
98
100
  activerecord.errors.messages.less_than_or_equal_to
99
101
  activerecord.errors.messages.odd
100
102
  activerecord.errors.messages.even
103
+ activerecord.errors.messages.record_invalid
104
+
105
+ activerecord.errors.full_messages.format
101
106
  ).each do |key|
102
107
  it "should define '#{key}' in activerecord translations" do
103
108
  lookup(key).should_not be_nil
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  $TESTING=true
4
- $:.push File.join(File.dirname(__FILE__), '..', 'lib')
4
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
5
5
 
6
6
  require 'russian'
7
7
 
@@ -21,7 +21,7 @@ describe Russian do
21
21
  it "should transliterate properly" do
22
22
  t("Это просто некий текст").should == "Eto prosto nekiy tekst"
23
23
  t("щ").should == "sch"
24
- t("стансы").should == "stansyi"
24
+ t("стансы").should == "stansy"
25
25
  t("упущение").should == "upuschenie"
26
26
  t("ш").should == "sh"
27
27
  t("Ш").should == "SH"
@@ -38,7 +38,7 @@ describe Russian do
38
38
  t("Невероятное Упущение").should == "Neveroyatnoe Upuschenie"
39
39
  t("Шерстяной Заяц").should == "Sherstyanoy Zayats"
40
40
  t("Н.П. Шерстяков").should == "N.P. Sherstyakov"
41
- t("ШАРОВАРЫ").should == "SHAROVARYI"
41
+ t("ШАРОВАРЫ").should == "SHAROVARY"
42
42
  end
43
43
  end
44
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: russian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaroslav Markin
@@ -9,7 +9,7 @@ autorequire: russian
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-16 00:00:00 +03:00
12
+ date: 2009-09-05 00:00:00 +04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -31,70 +31,51 @@ files:
31
31
  - CHANGELOG
32
32
  - TODO
33
33
  - init.rb
34
- - lib/russian
35
- - lib/russian/active_record_ext
34
+ - lib/russian/action_view_ext/helpers/date_helper.rb
36
35
  - lib/russian/active_record_ext/custom_error_message.rb
37
- - lib/russian/active_support_ext
38
36
  - lib/russian/active_support_ext/parameterize.rb
39
- - lib/russian/locale
37
+ - lib/russian/backend/advanced.rb
40
38
  - lib/russian/locale/actionview.yml
41
- - lib/russian/locale/pluralize.rb
42
- - lib/russian/locale/datetime.yml
43
39
  - lib/russian/locale/activerecord.yml
44
40
  - lib/russian/locale/activesupport.yml
45
- - lib/russian/action_view_ext
46
- - lib/russian/action_view_ext/helpers
47
- - lib/russian/action_view_ext/helpers/date_helper.rb
41
+ - lib/russian/locale/datetime.yml
42
+ - lib/russian/locale/pluralize.rb
48
43
  - lib/russian/transliteration.rb
49
- - lib/russian/backend
50
- - lib/russian/backend/advanced.rb
51
- - lib/vendor
52
- - lib/vendor/i18n
53
- - lib/vendor/i18n/test
54
- - lib/vendor/i18n/test/i18n_exceptions_test.rb
55
- - lib/vendor/i18n/test/simple_backend_test.rb
56
- - lib/vendor/i18n/test/all.rb
57
- - lib/vendor/i18n/test/i18n_test.rb
58
- - lib/vendor/i18n/test/locale
59
- - lib/vendor/i18n/test/locale/en.yml
60
- - lib/vendor/i18n/test/locale/en.rb
44
+ - lib/russian.rb
61
45
  - lib/vendor/i18n/i18n.gemspec
62
- - lib/vendor/i18n/lib
63
- - lib/vendor/i18n/lib/i18n.rb
64
- - lib/vendor/i18n/lib/i18n
65
- - lib/vendor/i18n/lib/i18n/exceptions.rb
66
- - lib/vendor/i18n/lib/i18n/backend
67
46
  - lib/vendor/i18n/lib/i18n/backend/simple.rb
47
+ - lib/vendor/i18n/lib/i18n/exceptions.rb
48
+ - lib/vendor/i18n/lib/i18n.rb
68
49
  - lib/vendor/i18n/MIT-LICENSE
69
- - lib/vendor/i18n/README.textile
70
50
  - lib/vendor/i18n/Rakefile
71
- - lib/vendor/i18n_label
72
- - lib/vendor/i18n_label/spec
73
- - lib/vendor/i18n_label/spec/spec_helper.rb
74
- - lib/vendor/i18n_label/spec/i18n_label_spec.rb
51
+ - lib/vendor/i18n/README.textile
52
+ - lib/vendor/i18n/test/all.rb
53
+ - lib/vendor/i18n/test/i18n_exceptions_test.rb
54
+ - lib/vendor/i18n/test/i18n_test.rb
55
+ - lib/vendor/i18n/test/locale/en.rb
56
+ - lib/vendor/i18n/test/locale/en.yml
57
+ - lib/vendor/i18n/test/simple_backend_test.rb
75
58
  - lib/vendor/i18n_label/init.rb
76
59
  - lib/vendor/i18n_label/install.rb
77
- - lib/vendor/i18n_label/uninstall.rb
78
- - lib/vendor/i18n_label/lib
79
60
  - lib/vendor/i18n_label/lib/i18n_label.rb
61
+ - lib/vendor/i18n_label/Rakefile
80
62
  - lib/vendor/i18n_label/README.textile
81
- - lib/vendor/i18n_label/tasks
63
+ - lib/vendor/i18n_label/spec/i18n_label_spec.rb
64
+ - lib/vendor/i18n_label/spec/spec_helper.rb
82
65
  - lib/vendor/i18n_label/tasks/i18n_label_tasks.rake
83
- - lib/vendor/i18n_label/Rakefile
84
- - lib/russian.rb
66
+ - lib/vendor/i18n_label/uninstall.rb
67
+ - spec/fixtures/en.yml
68
+ - spec/fixtures/ru.yml
69
+ - spec/i18n/locale/datetime_spec.rb
70
+ - spec/i18n/locale/pluralization_spec.rb
71
+ - spec/locale_spec.rb
85
72
  - spec/russian_spec.rb
86
73
  - spec/spec_helper.rb
87
- - spec/locale_spec.rb
88
- - spec/i18n
89
- - spec/i18n/locale
90
- - spec/i18n/locale/pluralization_spec.rb
91
- - spec/i18n/locale/datetime_spec.rb
92
- - spec/fixtures
93
- - spec/fixtures/ru.yml
94
- - spec/fixtures/en.yml
95
74
  - spec/transliteration_spec.rb
96
75
  has_rdoc: true
97
76
  homepage: http://github.com/yaroslav/russian/
77
+ licenses: []
78
+
98
79
  post_install_message:
99
80
  rdoc_options: []
100
81
 
@@ -115,9 +96,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
96
  requirements: []
116
97
 
117
98
  rubyforge_project:
118
- rubygems_version: 1.3.1
99
+ rubygems_version: 1.3.5
119
100
  signing_key:
120
- specification_version: 2
101
+ specification_version: 3
121
102
  summary: Russian language support for Ruby and Rails
122
103
  test_files: []
123
104