globalize2 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/LICENSE +21 -0
- data/README.textile +202 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/generators/db_backend.rb +0 -0
- data/generators/templates/db_backend_migration.rb +25 -0
- data/globalize2.gemspec +100 -0
- data/init.rb +8 -0
- data/lib/globalize/backend/chain.rb +102 -0
- data/lib/globalize/backend/pluralizing.rb +37 -0
- data/lib/globalize/backend/static.rb +61 -0
- data/lib/globalize/i18n/missing_translations_log_handler.rb +41 -0
- data/lib/globalize/i18n/missing_translations_raise_handler.rb +27 -0
- data/lib/globalize/load_path.rb +63 -0
- data/lib/globalize/locale/fallbacks.rb +63 -0
- data/lib/globalize/locale/language_tag.rb +81 -0
- data/lib/globalize/model/active_record.rb +56 -0
- data/lib/globalize/model/active_record/adapter.rb +100 -0
- data/lib/globalize/model/active_record/translated.rb +174 -0
- data/lib/globalize/translation.rb +32 -0
- data/lib/locale/root.yml +3 -0
- data/lib/rails_edge_load_path_patch.rb +40 -0
- data/notes.textile +51 -0
- data/test/all.rb +2 -0
- data/test/backends/chained_test.rb +175 -0
- data/test/backends/pluralizing_test.rb +63 -0
- data/test/backends/static_test.rb +147 -0
- data/test/data/locale/all.yml +2 -0
- data/test/data/locale/de-DE.yml +2 -0
- data/test/data/locale/en-US.yml +2 -0
- data/test/data/locale/en-US/module.yml +2 -0
- data/test/data/locale/fi-FI/module.yml +2 -0
- data/test/data/locale/root.yml +0 -0
- data/test/data/models.rb +40 -0
- data/test/data/no_globalize_schema.rb +11 -0
- data/test/data/schema.rb +39 -0
- data/test/i18n/missing_translations_test.rb +36 -0
- data/test/load_path_test.rb +49 -0
- data/test/locale/fallbacks_test.rb +154 -0
- data/test/locale/language_tag_test.rb +130 -0
- data/test/model/active_record/migration_test.rb +123 -0
- data/test/model/active_record/sti_translated_test.rb +75 -0
- data/test/model/active_record/translated_test.rb +487 -0
- data/test/test_helper.rb +36 -0
- data/test/translation_test.rb +54 -0
- metadata +116 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), '..', 'test_helper' )
|
2
|
+
require 'globalize/backend/pluralizing'
|
3
|
+
|
4
|
+
class PluralizingTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
@backend = Globalize::Backend::Pluralizing.new
|
7
|
+
@cz_pluralizer = lambda{|c| c == 1 ? :one : (2..4).include?(c) ? :few : :other }
|
8
|
+
end
|
9
|
+
|
10
|
+
test "#pluralizer returns the pluralizer for a given locale if defined" do
|
11
|
+
assert_instance_of Proc, @backend.pluralizer(:en)
|
12
|
+
end
|
13
|
+
|
14
|
+
test "#pluralizer returns the default pluralizer if no pluralizer is defined for the given locale" do
|
15
|
+
assert_equal @backend.pluralizer(:en), @backend.pluralizer(:de)
|
16
|
+
end
|
17
|
+
|
18
|
+
test "#add_pluralizer allows to store a pluralizer per locale" do
|
19
|
+
assert_nothing_raised { @backend.add_pluralizer(:cz, @cz_pluralizer) }
|
20
|
+
assert_equal @cz_pluralizer, @backend.pluralizer(:cz)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class PluralizePluralizingTest < ActiveSupport::TestCase
|
26
|
+
def setup
|
27
|
+
@backend = Globalize::Backend::Pluralizing.new
|
28
|
+
@cz_pluralizer = lambda{|c| c == 1 ? :one : (2..4).include?(c) ? :few : :other }
|
29
|
+
@backend.store_translations :en, :foo => {:one => 'one en foo', :other => 'many en foos'}
|
30
|
+
@backend.store_translations :cz, :foo => {:one => 'one cz foo', :few => 'few cz foos', :other => 'many cz foos'}
|
31
|
+
end
|
32
|
+
|
33
|
+
test "looks up the :one translation when count is 1" do
|
34
|
+
assert_equal 'one en foo', @backend.translate(:en, :foo, :count => 1)
|
35
|
+
end
|
36
|
+
|
37
|
+
test "looks up the :other translation when count is 2" do
|
38
|
+
assert_equal 'many en foos', @backend.translate(:en, :foo, :count => 2)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class CzPluralizingTest < ActiveSupport::TestCase
|
43
|
+
def setup
|
44
|
+
@backend = Globalize::Backend::Pluralizing.new
|
45
|
+
@cz_pluralizer = lambda{|c| c == 1 ? :one : (2..4).include?(c) ? :few : :other }
|
46
|
+
@backend.store_translations :en, :foo => {:one => 'one en foo', :other => 'many en foos'}
|
47
|
+
@backend.store_translations :cz, :foo => {:one => 'one cz foo', :few => 'few cz foos', :other => 'many cz foos'}
|
48
|
+
@backend.add_pluralizer(:cz, @cz_pluralizer)
|
49
|
+
end
|
50
|
+
|
51
|
+
test "looks up the :one translation when count is 1 (:cz)" do
|
52
|
+
assert_equal 'one cz foo', @backend.translate(:cz, :foo, :count => 1)
|
53
|
+
end
|
54
|
+
|
55
|
+
test "looks up the :few translation when count is 2 (:cz)" do
|
56
|
+
assert_equal 'few cz foos', @backend.translate(:cz, :foo, :count => 2)
|
57
|
+
end
|
58
|
+
|
59
|
+
test "looks up the :other translation when count is 5 (:cz)" do
|
60
|
+
assert_equal 'many cz foos', @backend.translate(:cz, :foo, :count => 5)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), '..', 'test_helper' )
|
2
|
+
require 'globalize/backend/static'
|
3
|
+
require 'globalize/translation'
|
4
|
+
require 'action_view'
|
5
|
+
include ActionView::Helpers::NumberHelper
|
6
|
+
|
7
|
+
I18n.locale = :'en-US' # Need to set this, since I18n defaults to 'en'
|
8
|
+
|
9
|
+
class StaticTest < ActiveSupport::TestCase
|
10
|
+
def setup
|
11
|
+
I18n.backend = Globalize::Backend::Static.new
|
12
|
+
translations = { :"en-US" => { :foo => "foo in en-US", :boz => 'boz', :buz => { :bum => 'bum' } },
|
13
|
+
:"en" => { :bar => "bar in en", :skip_last_comma => "false" },
|
14
|
+
:"de-DE" => { :baz => "baz in de-DE" },
|
15
|
+
:"de" => { :boo => "boo in de", :number => { :currency => { :format => { :unit => '€', :format => '%n %u' } } } } }
|
16
|
+
translations.each do |locale, data|
|
17
|
+
I18n.backend.store_translations locale, data
|
18
|
+
end
|
19
|
+
I18n.fallbacks.map :"de-DE" => :"en-US", :he => :en
|
20
|
+
end
|
21
|
+
|
22
|
+
test "returns an instance of Translation:Static" do
|
23
|
+
translation = I18n.translate :foo
|
24
|
+
assert_instance_of Globalize::Translation::Static, translation
|
25
|
+
end
|
26
|
+
|
27
|
+
test "returns the translation in en-US if present" do
|
28
|
+
assert_equal "foo in en-US", I18n.translate(:foo, :locale => :"en-US")
|
29
|
+
end
|
30
|
+
|
31
|
+
test "returns the translation in en if en-US is not present" do
|
32
|
+
assert_equal "bar in en", I18n.translate(:bar, :locale => :"en-US")
|
33
|
+
end
|
34
|
+
|
35
|
+
test "returns the translation in de-DE if present" do
|
36
|
+
assert_equal "baz in de-DE", I18n.translate(:baz, :locale => :"de-DE")
|
37
|
+
end
|
38
|
+
|
39
|
+
test "returns the translation in de if de-DE is not present" do
|
40
|
+
assert_equal "boo in de", I18n.translate(:boo, :locale => :"de-DE")
|
41
|
+
end
|
42
|
+
|
43
|
+
test "returns the translation in en-US if none of de-DE and de are present" do
|
44
|
+
assert_equal "foo in en-US", I18n.translate(:foo, :locale => :"de-DE")
|
45
|
+
end
|
46
|
+
|
47
|
+
test "returns the translation in en if none of de-DE, de and en-US are present" do
|
48
|
+
assert_equal "bar in en", I18n.translate(:bar, :locale => :"de-DE")
|
49
|
+
end
|
50
|
+
|
51
|
+
test "returns the translation in en if none in he is present" do
|
52
|
+
assert_equal "bar in en", I18n.translate(:bar, :locale => :he)
|
53
|
+
end
|
54
|
+
|
55
|
+
test "returns the given default String when the key is not present for any locale" do
|
56
|
+
assert_equal "default", I18n.translate(:missing, :default => "default")
|
57
|
+
end
|
58
|
+
|
59
|
+
test "returns the fallback translation for the key if present for a fallback locale" do
|
60
|
+
I18n.backend.store_translations :de, :non_default => "non_default in de"
|
61
|
+
assert_equal "non_default in de", I18n.translate(:non_default, :default => "default", :locale => :"de-DE")
|
62
|
+
end
|
63
|
+
|
64
|
+
test "returns an array of translations" do
|
65
|
+
assert_instance_of Array, I18n.translate([:foo, :boz])
|
66
|
+
end
|
67
|
+
|
68
|
+
test "returns an array of instances of Translation::Static" do
|
69
|
+
assert_equal [Globalize::Translation::Static], I18n.translate([:foo, :boz]).map(&:class).uniq
|
70
|
+
end
|
71
|
+
|
72
|
+
test "returns a hash of translations" do
|
73
|
+
assert_instance_of Hash, I18n.translate(:"buz")
|
74
|
+
end
|
75
|
+
|
76
|
+
test "returns an array of translations 2" do
|
77
|
+
assert_equal [Globalize::Translation::Static], I18n.translate(:"buz").values.map(&:class)
|
78
|
+
end
|
79
|
+
|
80
|
+
test "returns currency properly formated" do
|
81
|
+
currency = number_to_currency(10)
|
82
|
+
assert_equal "$10.00", currency
|
83
|
+
end
|
84
|
+
|
85
|
+
test "returns currency properly formated for locale" do
|
86
|
+
currency = number_to_currency(10, :locale => :'de')
|
87
|
+
assert_equal "10.000 €", currency
|
88
|
+
end
|
89
|
+
|
90
|
+
test "returns currency properly formated from parameters" do
|
91
|
+
currency = number_to_currency(10, :format => "%n %u", :unit => '€')
|
92
|
+
assert_equal "10.00 €", currency
|
93
|
+
end
|
94
|
+
|
95
|
+
# test "makes sure interpolation does not break even with False as string" do
|
96
|
+
# result = ''
|
97
|
+
# assert_nothing_raised do
|
98
|
+
# result = I18n.t(:missing, :default => "{{value}}", :value => false)
|
99
|
+
# end
|
100
|
+
# assert_equal "false", result
|
101
|
+
# end
|
102
|
+
end
|
103
|
+
|
104
|
+
class TranslationStaticTest < ActiveSupport::TestCase
|
105
|
+
def setup
|
106
|
+
I18n.backend = Globalize::Backend::Static.new
|
107
|
+
translations = {
|
108
|
+
:greeting => "Hi {{name}}",
|
109
|
+
:messages => { :one => "You have one message.", :other => "You have {{count}} messages."}
|
110
|
+
}
|
111
|
+
I18n.backend.store_translations :"en", translations
|
112
|
+
end
|
113
|
+
|
114
|
+
def greeting
|
115
|
+
I18n.translate :greeting, :locale => :"en-US", :name => "Joshua"
|
116
|
+
end
|
117
|
+
|
118
|
+
test "stores the actual locale" do
|
119
|
+
assert_equal :en, greeting.locale
|
120
|
+
end
|
121
|
+
|
122
|
+
test "stores the requested locale" do
|
123
|
+
assert_equal :'en-US', greeting.requested_locale
|
124
|
+
end
|
125
|
+
|
126
|
+
test "stores the requested key" do
|
127
|
+
assert_equal :greeting, greeting.key
|
128
|
+
end
|
129
|
+
|
130
|
+
test "stores the options given to #translate" do
|
131
|
+
assert_equal( {:name => "Joshua"}, greeting.options )
|
132
|
+
end
|
133
|
+
|
134
|
+
test "stores the original translation before test was interpolated" do
|
135
|
+
assert_equal "Hi {{name}}", greeting.original
|
136
|
+
end
|
137
|
+
|
138
|
+
test "stores the plural_key :one if pluralized as such" do
|
139
|
+
message = I18n.translate :messages, :locale => :"en-US", :count => 1
|
140
|
+
assert_equal :one, message.plural_key
|
141
|
+
end
|
142
|
+
|
143
|
+
test "stores the plural_key :other if pluralized as such" do
|
144
|
+
messages = I18n.translate :messages, :locale => :"en-US", :count => 2
|
145
|
+
assert_equal :other, messages.plural_key
|
146
|
+
end
|
147
|
+
end
|
File without changes
|
data/test/data/models.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
class PostTranslation < ActiveRecord::Base
|
2
|
+
def existing_method ; end
|
3
|
+
end
|
4
|
+
class Post < ActiveRecord::Base
|
5
|
+
translates :subject, :content
|
6
|
+
validates_presence_of :subject
|
7
|
+
end
|
8
|
+
|
9
|
+
class Blog < ActiveRecord::Base
|
10
|
+
has_many :posts, :order => 'id ASC'
|
11
|
+
end
|
12
|
+
|
13
|
+
class Parent < ActiveRecord::Base
|
14
|
+
translates :content
|
15
|
+
end
|
16
|
+
|
17
|
+
class Child < Parent
|
18
|
+
end
|
19
|
+
|
20
|
+
class Comment < ActiveRecord::Base
|
21
|
+
validates_presence_of :content
|
22
|
+
belongs_to :post
|
23
|
+
end
|
24
|
+
|
25
|
+
class TranslatedComment < Comment
|
26
|
+
translates :content
|
27
|
+
end
|
28
|
+
|
29
|
+
class UltraLongModelNameWithoutProper < ActiveRecord::Base
|
30
|
+
translates :subject, :content
|
31
|
+
validates_presence_of :subject
|
32
|
+
end
|
33
|
+
|
34
|
+
class Reloader < Parent
|
35
|
+
after_create :do_reload
|
36
|
+
|
37
|
+
def do_reload
|
38
|
+
reload
|
39
|
+
end
|
40
|
+
end
|
data/test/data/schema.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
|
3
|
+
create_table :blogs, :force => true do |t|
|
4
|
+
t.string :description
|
5
|
+
end
|
6
|
+
|
7
|
+
create_table :posts, :force => true do |t|
|
8
|
+
t.references :blog
|
9
|
+
end
|
10
|
+
|
11
|
+
create_table :post_translations, :force => true do |t|
|
12
|
+
t.string :locale
|
13
|
+
t.references :post
|
14
|
+
t.string :subject
|
15
|
+
t.text :content
|
16
|
+
end
|
17
|
+
|
18
|
+
create_table :parents, :force => true do |t|
|
19
|
+
end
|
20
|
+
|
21
|
+
create_table :parent_translations, :force => true do |t|
|
22
|
+
t.string :locale
|
23
|
+
t.references :parent
|
24
|
+
t.text :content
|
25
|
+
t.string :type
|
26
|
+
end
|
27
|
+
|
28
|
+
create_table :comments, :force => true do |t|
|
29
|
+
t.references :post
|
30
|
+
end
|
31
|
+
|
32
|
+
create_table :translated_comment_translations, :force => true do |t|
|
33
|
+
t.string :locale
|
34
|
+
t.references :comment
|
35
|
+
t.string :subject
|
36
|
+
t.text :content
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), '..', 'test_helper' )
|
2
|
+
require 'globalize/i18n/missing_translations_log_handler'
|
3
|
+
|
4
|
+
class MissingTranslationsTest < ActiveSupport::TestCase
|
5
|
+
test "defines I18n.missing_translations_logger accessor" do
|
6
|
+
assert I18n.respond_to?(:missing_translations_logger)
|
7
|
+
end
|
8
|
+
|
9
|
+
test "defines I18n.missing_translations_logger= writer" do
|
10
|
+
assert I18n.respond_to?(:missing_translations_logger=)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class TestLogger < String
|
15
|
+
def warn(msg) self.concat msg; end
|
16
|
+
end
|
17
|
+
|
18
|
+
class LogMissingTranslationsTest < ActiveSupport::TestCase
|
19
|
+
def setup
|
20
|
+
@locale, @key, @options = :en, :foo, {}
|
21
|
+
@exception = I18n::MissingTranslationData.new(@locale, @key, @options)
|
22
|
+
|
23
|
+
@logger = TestLogger.new
|
24
|
+
I18n.missing_translations_logger = @logger
|
25
|
+
end
|
26
|
+
|
27
|
+
test "still returns the exception message for MissingTranslationData exceptions" do
|
28
|
+
result = I18n.send(:missing_translations_log_handler, @exception, @locale, @key, @options)
|
29
|
+
assert_equal 'translation missing: en, foo', result
|
30
|
+
end
|
31
|
+
|
32
|
+
test "logs the missing translation to I18n.missing_translations_logger" do
|
33
|
+
I18n.send(:missing_translations_log_handler, @exception, @locale, @key, @options)
|
34
|
+
assert_equal 'translation missing: en, foo', @logger
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), 'test_helper' )
|
2
|
+
require 'globalize/load_path'
|
3
|
+
|
4
|
+
class LoadPathTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
@plugin_dir = "#{File.dirname(__FILE__)}/.."
|
7
|
+
@locale_dir = "#{File.dirname(__FILE__)}/data/locale"
|
8
|
+
@load_path = Globalize::LoadPath.new
|
9
|
+
end
|
10
|
+
|
11
|
+
test "returns glob patterns for all locales and ruby + yaml files by default" do
|
12
|
+
patterns = %w(locales/all.rb
|
13
|
+
locales/*.rb
|
14
|
+
locales/*/**/*.rb
|
15
|
+
locales/all.yml
|
16
|
+
locales/*.yml
|
17
|
+
locales/*/**/*.yml)
|
18
|
+
assert_equal patterns, @load_path.send(:patterns, 'locales')
|
19
|
+
end
|
20
|
+
|
21
|
+
test "returns the glob patterns for registered locales and extensions" do
|
22
|
+
@load_path.locales = [:en, :de]
|
23
|
+
@load_path.extensions = [:sql]
|
24
|
+
patterns = %w(locales/all.sql
|
25
|
+
locales/en.sql
|
26
|
+
locales/en/**/*.sql
|
27
|
+
locales/de.sql
|
28
|
+
locales/de/**/*.sql)
|
29
|
+
assert_equal patterns, @load_path.send(:patterns, 'locales')
|
30
|
+
end
|
31
|
+
|
32
|
+
test "expands paths using yml as a default file extension" do
|
33
|
+
@load_path << @locale_dir
|
34
|
+
expected = %w(all.yml de-DE.yml en-US.yml en-US/module.yml fi-FI/module.yml root.yml)
|
35
|
+
assert_equal expected, @load_path.map{|path| path.sub("#{@locale_dir}\/", '')}
|
36
|
+
end
|
37
|
+
|
38
|
+
test "appends new paths to the collection so earlier collected paths preceed later collected ones" do
|
39
|
+
@load_path.locales = [:root]
|
40
|
+
@load_path << "#{@plugin_dir}/lib/locale"
|
41
|
+
@load_path << @locale_dir
|
42
|
+
|
43
|
+
expected = %W(#{@plugin_dir}/lib/locale/root.yml
|
44
|
+
#{@locale_dir}/all.yml
|
45
|
+
#{@locale_dir}/root.yml)
|
46
|
+
assert_equal expected, @load_path
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), '..', 'test_helper' )
|
2
|
+
require 'globalize/locale/fallbacks'
|
3
|
+
|
4
|
+
include Globalize::Locale
|
5
|
+
I18n.default_locale = :'en-US' # This has to be set explicitly, no longer default for I18n
|
6
|
+
|
7
|
+
class FallbacksTest < ActiveSupport::TestCase
|
8
|
+
def setup
|
9
|
+
I18n.fallbacks = Fallbacks.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
I18n.default_locale = :'en-US'
|
14
|
+
end
|
15
|
+
|
16
|
+
test "#[] caches computed results" do
|
17
|
+
I18n.fallbacks['en']
|
18
|
+
assert_equal( { :en => [:en, :"en-US", :root] }, I18n.fallbacks )
|
19
|
+
end
|
20
|
+
|
21
|
+
test "#defaults always reflect the I18n.default_locale if no default has been set manually" do
|
22
|
+
I18n.default_locale = :'en-US'
|
23
|
+
assert_equal( [:'en-US', :en, :root], I18n.fallbacks.defaults )
|
24
|
+
end
|
25
|
+
|
26
|
+
test "#defaults always reflect a manually passed default locale if any" do
|
27
|
+
I18n.fallbacks = Fallbacks.new(:'fi-FI')
|
28
|
+
assert_equal( [:'fi-FI', :fi, :root], I18n.fallbacks.defaults )
|
29
|
+
I18n.default_locale = :'de-DE'
|
30
|
+
assert_equal( [:'fi-FI', :fi, :root], I18n.fallbacks.defaults )
|
31
|
+
end
|
32
|
+
|
33
|
+
test "#defaults allows to set multiple defaults" do
|
34
|
+
I18n.fallbacks = Fallbacks.new(:'fi-FI', :'se-FI')
|
35
|
+
assert_equal( [:'fi-FI', :fi, :'se-FI', :se, :root], I18n.fallbacks.defaults )
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class NoMappingFallbacksTest < ActiveSupport::TestCase
|
40
|
+
def setup
|
41
|
+
@fallbacks = Fallbacks.new(:'en-US')
|
42
|
+
end
|
43
|
+
|
44
|
+
test "returns [:es, :en-US, :root] for :es" do
|
45
|
+
assert_equal [:es, :"en-US", :en, :root], @fallbacks[:es]
|
46
|
+
end
|
47
|
+
|
48
|
+
test "returns [:es-ES, :es, :en-US, :root] for :es-ES" do
|
49
|
+
assert_equal [:"es-ES", :es, :"en-US", :en, :root], @fallbacks[:"es-ES"]
|
50
|
+
end
|
51
|
+
|
52
|
+
test "returns [:es-MX, :es, :en-US, :root] for :es-MX" do
|
53
|
+
assert_equal [:"es-MX", :es, :"en-US", :en, :root], @fallbacks[:"es-MX"]
|
54
|
+
end
|
55
|
+
|
56
|
+
test "returns [:es-Latn-ES, :es-Latn, :es, :en-US, :root] for :es-Latn-ES" do
|
57
|
+
assert_equal [:"es-Latn-ES", :"es-Latn", :es, :"en-US", :en, :root], @fallbacks[:'es-Latn-ES']
|
58
|
+
end
|
59
|
+
|
60
|
+
test "returns [:en, :en-US, :root] for :en" do
|
61
|
+
assert_equal [:en, :"en-US", :root], @fallbacks[:en]
|
62
|
+
end
|
63
|
+
|
64
|
+
test "returns [:en-US, :en, :root] for :en-US (special case: locale == default)" do
|
65
|
+
assert_equal [:"en-US", :en, :root], @fallbacks[:"en-US"]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class CaMappingFallbacksTest < ActiveSupport::TestCase
|
70
|
+
# Most people who speak Catalan also live in Spain, so test is safe to assume
|
71
|
+
# that they also speak Spanish as spoken in Spain.
|
72
|
+
def setup
|
73
|
+
@fallbacks = Fallbacks.new(:'en-US')
|
74
|
+
@fallbacks.map :ca => :"es-ES"
|
75
|
+
end
|
76
|
+
|
77
|
+
test "returns [:ca, :es-ES, :es, :en-US, :root] for :ca" do
|
78
|
+
assert_equal [:ca, :"es-ES", :es, :"en-US", :en, :root], @fallbacks[:ca]
|
79
|
+
end
|
80
|
+
|
81
|
+
test "returns [:ca-ES, :ca, :es-ES, :es, :en-US, :root] for :ca-ES" do
|
82
|
+
assert_equal [:"ca-ES", :ca, :"es-ES", :es, :"en-US", :en, :root], @fallbacks[:"ca-ES"]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class ArMappingFallbacksTest < ActiveSupport::TestCase
|
87
|
+
# People who speak Arabic as spoken in Palestine often times also speak
|
88
|
+
# Hebrew as spoken in Israel. However test is in no way safe to assume that
|
89
|
+
# everybody who speaks Arabic also speaks Hebrew.
|
90
|
+
def setup
|
91
|
+
@fallbacks = Fallbacks.new(:'en-US')
|
92
|
+
@fallbacks.map :"ar-PS" => :"he-IL"
|
93
|
+
end
|
94
|
+
|
95
|
+
test "returns [:ar, :en-US, :root] for :ar" do
|
96
|
+
assert_equal [:ar, :"en-US", :en, :root], @fallbacks[:ar]
|
97
|
+
end
|
98
|
+
|
99
|
+
test "returns [:ar-EG, :ar, :en-US, :root] for :ar-EG" do
|
100
|
+
assert_equal [:"ar-EG", :ar, :"en-US", :en, :root], @fallbacks[:"ar-EG"]
|
101
|
+
end
|
102
|
+
|
103
|
+
test "returns [:ar-PS, :ar, :he-IL, :he, :en-US, :root] for :ar-PS" do
|
104
|
+
assert_equal [:"ar-PS", :ar, :"he-IL", :he, :"en-US", :en, :root], @fallbacks[:"ar-PS"]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class SmsMappingFallbacksTest < ActiveSupport::TestCase
|
109
|
+
# Sami people live in several scandinavian countries. In Finnland many people
|
110
|
+
# know Swedish and Finnish. Thus, test can be assumed that Sami living in
|
111
|
+
# Finnland also speak Swedish and Finnish.
|
112
|
+
def setup
|
113
|
+
@fallbacks = Fallbacks.new(:'en-US')
|
114
|
+
@fallbacks.map :sms => [:"se-FI", :"fi-FI"]
|
115
|
+
end
|
116
|
+
|
117
|
+
test "returns [:sms-FI, :sms, :se-FI, :se, :fi-FI, :fi, :en-US, :root] for :sms-FI" do
|
118
|
+
assert_equal [:"sms-FI", :sms, :"se-FI", :se, :"fi-FI", :fi, :"en-US", :en, :root], @fallbacks[:"sms-FI"]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class DeAtMappingFallbacksTest < ActiveSupport::TestCase
|
123
|
+
def setup
|
124
|
+
@fallbacks = Fallbacks.new(:'en-US')
|
125
|
+
@fallbacks.map :"de-AT" => :"de-DE"
|
126
|
+
end
|
127
|
+
|
128
|
+
test "returns [:de, :en-US, :root] for de" do
|
129
|
+
assert_equal [:de, :"en-US", :en, :root], @fallbacks[:"de"]
|
130
|
+
end
|
131
|
+
|
132
|
+
test "returns [:de-DE, :de, :en-US, :root] for de-DE" do
|
133
|
+
assert_equal [:"de-DE", :de, :"en-US", :en, :root], @fallbacks[:"de-DE"]
|
134
|
+
end
|
135
|
+
|
136
|
+
test "returns [:de-AT, :de, :de-DE, :en-US, :root] for de-AT" do
|
137
|
+
assert_equal [:"de-AT", :de, :"de-DE", :"en-US", :en, :root], @fallbacks[:"de-AT"]
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
class DeMappingFallbacksTest < ActiveSupport::TestCase
|
142
|
+
def setup
|
143
|
+
@fallbacks = Fallbacks.new(:'en-US')
|
144
|
+
@fallbacks.map :de => :en, :he => :en
|
145
|
+
end
|
146
|
+
|
147
|
+
test "returns [:de, :en, :root] for :de" do
|
148
|
+
assert_equal [:de, :en, :"en-US", :root], @fallbacks[:de]
|
149
|
+
end
|
150
|
+
|
151
|
+
test "returns [:he, :en, :root] for :de" do
|
152
|
+
assert_equal [:he, :en, :"en-US", :root], @fallbacks[:he]
|
153
|
+
end
|
154
|
+
end
|