globalize2 0.1.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/.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
|