dm-validations-i18n 0.2.0 → 0.3.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/VERSION +1 -1
- data/dm-validations-i18n.gemspec +2 -2
- data/lib/dm-validations-i18n.rb +64 -0
- data/test/test_dm-validations-i18n.rb +53 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/dm-validations-i18n.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dm-validations-i18n}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Masaki KOMAGATA"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-06}
|
13
13
|
s.description = %q{Localize error messages in dm-validations.}
|
14
14
|
s.email = %q{komagata@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/dm-validations-i18n.rb
CHANGED
@@ -5,7 +5,12 @@ module DataMapper
|
|
5
5
|
module Validations
|
6
6
|
module I18n
|
7
7
|
class << self
|
8
|
+
cattr_accessor :locale
|
9
|
+
cattr_accessor :field_name_translator
|
10
|
+
|
8
11
|
def localize!(locale)
|
12
|
+
self.locale = locale
|
13
|
+
|
9
14
|
data = {}
|
10
15
|
load_locale(locale).each do |key, value|
|
11
16
|
data[key.to_sym] = value
|
@@ -13,6 +18,17 @@ module DataMapper
|
|
13
18
|
DataMapper::Validations::ValidationErrors.default_error_messages = data
|
14
19
|
end
|
15
20
|
|
21
|
+
def translate_field_name_with(x = nil, &cb)
|
22
|
+
self.field_name_translator =
|
23
|
+
if (!x && cb)
|
24
|
+
FieldNameTranslator::Callback.new(self, &cb)
|
25
|
+
elsif (x.is_a? Hash)
|
26
|
+
FieldNameTranslator::Hash.new(self, x)
|
27
|
+
elsif (x == :rails)
|
28
|
+
FieldNameTranslator::Rails.new(self)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
16
32
|
def load_locale(locale)
|
17
33
|
load_yml File.join(File.dirname(__FILE__), '..', 'locale', "#{locale}.yml")
|
18
34
|
end
|
@@ -22,5 +38,53 @@ module DataMapper
|
|
22
38
|
end
|
23
39
|
end
|
24
40
|
end
|
41
|
+
|
42
|
+
module FieldNameTranslator
|
43
|
+
class Callback
|
44
|
+
attr_accessor :context, :callback
|
45
|
+
|
46
|
+
def initialize(context, &cb)
|
47
|
+
self.context = context
|
48
|
+
self.callback = cb
|
49
|
+
end
|
50
|
+
|
51
|
+
def translate(field)
|
52
|
+
self.callback.call(field)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class Hash < Callback
|
57
|
+
def initialize(context, x)
|
58
|
+
dict = x[context.locale]
|
59
|
+
|
60
|
+
self.context = context
|
61
|
+
self.callback = lambda do |field|
|
62
|
+
dict[field.to_s] || field
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class Rails < Callback
|
68
|
+
def initialize(context)
|
69
|
+
self.context = context
|
70
|
+
self.callback = lambda do |field|
|
71
|
+
::I18n.t(field)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
25
76
|
end
|
26
77
|
end
|
78
|
+
|
79
|
+
class DataMapper::Validations::ValidationErrors
|
80
|
+
class << self
|
81
|
+
def default_error_message_with_localized_field_name(key, field, *values)
|
82
|
+
field = DataMapper::Validations::I18n.field_name_translator.translate(field)
|
83
|
+
@@default_error_messages[key] % [field, *values].flatten
|
84
|
+
end
|
85
|
+
|
86
|
+
alias :default_error_message_without_localized_field_name :default_error_message
|
87
|
+
alias :default_error_message :default_error_message_with_localized_field_name
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
@@ -19,4 +19,57 @@ class TestDmValidationsI18n < Test::Unit::TestCase
|
|
19
19
|
assert_equal '%sがありません。', Foo.default_error_messages[:absent]
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
# context 'localized field names with callback' do
|
24
|
+
# DataMapper::Validations::I18n.translate_field_name_with do |field_name|
|
25
|
+
# assert_equal field_name, 'foo'
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
# context 'localized field names with rails I18n.t' do
|
29
|
+
# # mock I18n.t(field, "dm-validation")
|
30
|
+
# DataMapper::Validations::I18n.translate_field_name_with :rails
|
31
|
+
# end
|
32
|
+
|
33
|
+
context 'DataMapper::Validations::ValidationErrors.default_error_message' do
|
34
|
+
should "localize field names with Rails way: I18n.t is used." do
|
35
|
+
# mock I18n.t
|
36
|
+
class ::I18n
|
37
|
+
def self.t(x)
|
38
|
+
"Dummy I18n.t"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
DataMapper::Validations::I18n.localize!('zh-TW')
|
43
|
+
DataMapper::Validations::I18n.translate_field_name_with :rails
|
44
|
+
|
45
|
+
assert_equal("Dummy I18n.t 無效", DataMapper::Validations::ValidationErrors.default_error_message(:invalid, :height))
|
46
|
+
end
|
47
|
+
|
48
|
+
should "localize field names with callback" do
|
49
|
+
DataMapper::Validations::I18n.localize!('zh-TW')
|
50
|
+
DataMapper::Validations::I18n.translate_field_name_with do |field|
|
51
|
+
"Dummy"
|
52
|
+
end
|
53
|
+
assert_equal 'Dummy 無效', DataMapper::Validations::ValidationErrors.default_error_message(:invalid, :height)
|
54
|
+
end
|
55
|
+
|
56
|
+
should "localize field names with hash" do
|
57
|
+
DataMapper::Validations::I18n.localize!('zh-TW')
|
58
|
+
DataMapper::Validations::I18n.translate_field_name_with({'zh-TW' => { "height" => "高度", "weight" => "重量" }})
|
59
|
+
|
60
|
+
assert_equal '%s 無效', DataMapper::Validations::ValidationErrors.send(:class_variable_get, '@@default_error_messages')[:invalid]
|
61
|
+
|
62
|
+
assert_equal '高度 無效', DataMapper::Validations::ValidationErrors.default_error_message(:invalid, :height)
|
63
|
+
assert_equal '重量 無效', DataMapper::Validations::ValidationErrors.default_error_message(:invalid, :weight)
|
64
|
+
|
65
|
+
assert_equal 'length 無效', DataMapper::Validations::ValidationErrors.default_error_message(:invalid, :length), "Fallback to original field name if missing the translated version."
|
66
|
+
end
|
67
|
+
|
68
|
+
should "localize field names with hash, even with diffenert setup order." do
|
69
|
+
DataMapper::Validations::I18n.translate_field_name_with({'zh-TW' => { "height" => "高度", "weight" => "重量" }})
|
70
|
+
DataMapper::Validations::I18n.localize!('zh-TW')
|
71
|
+
assert_equal '高度 無效', DataMapper::Validations::ValidationErrors.default_error_message(:invalid, :height)
|
72
|
+
assert_equal 'length 無效', DataMapper::Validations::ValidationErrors.default_error_message(:invalid, :length), "Fallback to original field name if missing the translated version."
|
73
|
+
end
|
74
|
+
end
|
22
75
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-validations-i18n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Masaki KOMAGATA
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-06 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|