i18n 1.6.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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +125 -0
  4. data/lib/i18n.rb +398 -0
  5. data/lib/i18n/backend.rb +21 -0
  6. data/lib/i18n/backend/base.rb +284 -0
  7. data/lib/i18n/backend/cache.rb +113 -0
  8. data/lib/i18n/backend/cache_file.rb +36 -0
  9. data/lib/i18n/backend/cascade.rb +56 -0
  10. data/lib/i18n/backend/chain.rb +127 -0
  11. data/lib/i18n/backend/fallbacks.rb +84 -0
  12. data/lib/i18n/backend/flatten.rb +115 -0
  13. data/lib/i18n/backend/gettext.rb +85 -0
  14. data/lib/i18n/backend/interpolation_compiler.rb +123 -0
  15. data/lib/i18n/backend/key_value.rb +206 -0
  16. data/lib/i18n/backend/memoize.rb +54 -0
  17. data/lib/i18n/backend/metadata.rb +71 -0
  18. data/lib/i18n/backend/pluralization.rb +55 -0
  19. data/lib/i18n/backend/simple.rb +111 -0
  20. data/lib/i18n/backend/transliterator.rb +108 -0
  21. data/lib/i18n/config.rb +165 -0
  22. data/lib/i18n/core_ext/hash.rb +47 -0
  23. data/lib/i18n/exceptions.rb +111 -0
  24. data/lib/i18n/gettext.rb +28 -0
  25. data/lib/i18n/gettext/helpers.rb +75 -0
  26. data/lib/i18n/gettext/po_parser.rb +329 -0
  27. data/lib/i18n/interpolate/ruby.rb +39 -0
  28. data/lib/i18n/locale.rb +8 -0
  29. data/lib/i18n/locale/fallbacks.rb +96 -0
  30. data/lib/i18n/locale/tag.rb +28 -0
  31. data/lib/i18n/locale/tag/parents.rb +22 -0
  32. data/lib/i18n/locale/tag/rfc4646.rb +74 -0
  33. data/lib/i18n/locale/tag/simple.rb +39 -0
  34. data/lib/i18n/middleware.rb +17 -0
  35. data/lib/i18n/tests.rb +14 -0
  36. data/lib/i18n/tests/basics.rb +60 -0
  37. data/lib/i18n/tests/defaults.rb +52 -0
  38. data/lib/i18n/tests/interpolation.rb +159 -0
  39. data/lib/i18n/tests/link.rb +56 -0
  40. data/lib/i18n/tests/localization.rb +19 -0
  41. data/lib/i18n/tests/localization/date.rb +117 -0
  42. data/lib/i18n/tests/localization/date_time.rb +103 -0
  43. data/lib/i18n/tests/localization/procs.rb +116 -0
  44. data/lib/i18n/tests/localization/time.rb +103 -0
  45. data/lib/i18n/tests/lookup.rb +81 -0
  46. data/lib/i18n/tests/pluralization.rb +35 -0
  47. data/lib/i18n/tests/procs.rb +55 -0
  48. data/lib/i18n/version.rb +5 -0
  49. metadata +124 -0
@@ -0,0 +1,116 @@
1
+ # encoding: utf-8
2
+
3
+ module I18n
4
+ module Tests
5
+ module Localization
6
+ module Procs
7
+ test "localize: using day names from lambdas" do
8
+ setup_time_proc_translations
9
+ time = ::Time.utc(2008, 3, 1, 6, 0)
10
+ assert_match(/Суббота/, I18n.l(time, :format => "%A, %d %B", :locale => :ru))
11
+ assert_match(/суббота/, I18n.l(time, :format => "%d %B (%A)", :locale => :ru))
12
+ end
13
+
14
+ test "localize: using month names from lambdas" do
15
+ setup_time_proc_translations
16
+ time = ::Time.utc(2008, 3, 1, 6, 0)
17
+ assert_match(/марта/, I18n.l(time, :format => "%d %B %Y", :locale => :ru))
18
+ assert_match(/Март /, I18n.l(time, :format => "%B %Y", :locale => :ru))
19
+ end
20
+
21
+ test "localize: using abbreviated day names from lambdas" do
22
+ setup_time_proc_translations
23
+ time = ::Time.utc(2008, 3, 1, 6, 0)
24
+ assert_match(/марта/, I18n.l(time, :format => "%d %b %Y", :locale => :ru))
25
+ assert_match(/март /, I18n.l(time, :format => "%b %Y", :locale => :ru))
26
+ end
27
+
28
+ test "localize Date: given a format that resolves to a Proc it calls the Proc with the object" do
29
+ setup_time_proc_translations
30
+ date = ::Date.new(2008, 3, 1)
31
+ assert_equal '[Sat, 01 Mar 2008, {}]', I18n.l(date, :format => :proc, :locale => :ru)
32
+ end
33
+
34
+ test "localize Date: given a format that resolves to a Proc it calls the Proc with the object and extra options" do
35
+ setup_time_proc_translations
36
+ date = ::Date.new(2008, 3, 1)
37
+ assert_equal '[Sat, 01 Mar 2008, {:foo=>"foo"}]', I18n.l(date, :format => :proc, :foo => 'foo', :locale => :ru)
38
+ end
39
+
40
+ test "localize DateTime: given a format that resolves to a Proc it calls the Proc with the object" do
41
+ setup_time_proc_translations
42
+ datetime = ::DateTime.new(2008, 3, 1, 6)
43
+ assert_equal '[Sat, 01 Mar 2008 06:00:00 +00:00, {}]', I18n.l(datetime, :format => :proc, :locale => :ru)
44
+ end
45
+
46
+ test "localize DateTime: given a format that resolves to a Proc it calls the Proc with the object and extra options" do
47
+ setup_time_proc_translations
48
+ datetime = ::DateTime.new(2008, 3, 1, 6)
49
+ assert_equal '[Sat, 01 Mar 2008 06:00:00 +00:00, {:foo=>"foo"}]', I18n.l(datetime, :format => :proc, :foo => 'foo', :locale => :ru)
50
+ end
51
+
52
+ test "localize Time: given a format that resolves to a Proc it calls the Proc with the object" do
53
+ setup_time_proc_translations
54
+ time = ::Time.utc(2008, 3, 1, 6, 0)
55
+ assert_equal I18n::Tests::Localization::Procs.inspect_args([time, {}]), I18n.l(time, :format => :proc, :locale => :ru)
56
+ end
57
+
58
+ test "localize Time: given a format that resolves to a Proc it calls the Proc with the object and extra options" do
59
+ setup_time_proc_translations
60
+ time = ::Time.utc(2008, 3, 1, 6, 0)
61
+ options = { :foo => 'foo' }
62
+ assert_equal I18n::Tests::Localization::Procs.inspect_args([time, options]), I18n.l(time, options.merge(:format => :proc, :locale => :ru))
63
+ end
64
+
65
+ protected
66
+
67
+ def self.inspect_args(args)
68
+ args = args.map do |arg|
69
+ case arg
70
+ when ::Time, ::DateTime
71
+ arg.strftime('%a, %d %b %Y %H:%M:%S %Z').sub('+0000', '+00:00')
72
+ when ::Date
73
+ arg.strftime('%a, %d %b %Y')
74
+ when Hash
75
+ arg.delete(:fallback_in_progress)
76
+ arg.inspect
77
+ else
78
+ arg.inspect
79
+ end
80
+ end
81
+ "[#{args.join(', ')}]"
82
+ end
83
+
84
+ def setup_time_proc_translations
85
+ I18n.backend.store_translations :ru, {
86
+ :time => {
87
+ :formats => {
88
+ :proc => lambda { |*args| I18n::Tests::Localization::Procs.inspect_args(args) }
89
+ }
90
+ },
91
+ :date => {
92
+ :formats => {
93
+ :proc => lambda { |*args| I18n::Tests::Localization::Procs.inspect_args(args) }
94
+ },
95
+ :'day_names' => lambda { |key, options|
96
+ (options[:format] =~ /^%A/) ?
97
+ %w(Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота) :
98
+ %w(воскресенье понедельник вторник среда четверг пятница суббота)
99
+ },
100
+ :'month_names' => lambda { |key, options|
101
+ (options[:format] =~ /(%d|%e)(\s*)?(%B)/) ?
102
+ %w(января февраля марта апреля мая июня июля августа сентября октября ноября декабря).unshift(nil) :
103
+ %w(Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь).unshift(nil)
104
+ },
105
+ :'abbr_month_names' => lambda { |key, options|
106
+ (options[:format] =~ /(%d|%e)(\s*)(%b)/) ?
107
+ %w(янв. февр. марта апр. мая июня июля авг. сент. окт. нояб. дек.).unshift(nil) :
108
+ %w(янв. февр. март апр. май июнь июль авг. сент. окт. нояб. дек.).unshift(nil)
109
+ },
110
+ }
111
+ }
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,103 @@
1
+ # encoding: utf-8
2
+
3
+ module I18n
4
+ module Tests
5
+ module Localization
6
+ module Time
7
+ def setup
8
+ super
9
+ setup_time_translations
10
+ @time = ::Time.utc(2008, 3, 1, 6, 0)
11
+ @other_time = ::Time.utc(2008, 3, 1, 18, 0)
12
+ end
13
+
14
+ test "localize Time: given the short format it uses it" do
15
+ assert_equal '01. Mär 06:00', I18n.l(@time, :format => :short, :locale => :de)
16
+ end
17
+
18
+ test "localize Time: given the long format it uses it" do
19
+ assert_equal '01. März 2008 06:00', I18n.l(@time, :format => :long, :locale => :de)
20
+ end
21
+
22
+ # TODO Seems to break on Windows because ENV['TZ'] is ignored. What's a better way to do this?
23
+ # def test_localize_given_the_default_format_it_uses_it
24
+ # assert_equal 'Sa, 01. Mar 2008 06:00:00 +0000', I18n.l(@time, :format => :default, :locale => :de)
25
+ # end
26
+
27
+ test "localize Time: given a day name format it returns the correct day name" do
28
+ assert_equal 'Samstag', I18n.l(@time, :format => '%A', :locale => :de)
29
+ end
30
+
31
+ test "localize Time: given a uppercased day name format it returns the correct day name in upcase" do
32
+ assert_equal 'samstag'.upcase, I18n.l(@time, :format => '%^A', :locale => :de)
33
+ end
34
+
35
+ test "localize Time: given an abbreviated day name format it returns the correct abbreviated day name" do
36
+ assert_equal 'Sa', I18n.l(@time, :format => '%a', :locale => :de)
37
+ end
38
+
39
+ test "localize Time: given an abbreviated and uppercased day name format it returns the correct abbreviated day name in upcase" do
40
+ assert_equal 'sa'.upcase, I18n.l(@time, :format => '%^a', :locale => :de)
41
+ end
42
+
43
+ test "localize Time: given a month name format it returns the correct month name" do
44
+ assert_equal 'März', I18n.l(@time, :format => '%B', :locale => :de)
45
+ end
46
+
47
+ test "localize Time: given a uppercased month name format it returns the correct month name in upcase" do
48
+ assert_equal 'märz'.upcase, I18n.l(@time, :format => '%^B', :locale => :de)
49
+ end
50
+
51
+ test "localize Time: given an abbreviated month name format it returns the correct abbreviated month name" do
52
+ assert_equal 'Mär', I18n.l(@time, :format => '%b', :locale => :de)
53
+ end
54
+
55
+ test "localize Time: given an abbreviated and uppercased month name format it returns the correct abbreviated month name in upcase" do
56
+ assert_equal 'mär'.upcase, I18n.l(@time, :format => '%^b', :locale => :de)
57
+ end
58
+
59
+ test "localize Time: given a date format with the month name upcased it returns the correct value" do
60
+ assert_equal '1. FEBRUAR 2008', I18n.l(::Time.utc(2008, 2, 1, 6, 0), :format => "%-d. %^B %Y", :locale => :de)
61
+ end
62
+
63
+ test "localize Time: given missing translations it returns the correct error message" do
64
+ assert_equal 'translation missing: fr.date.abbr_month_names', I18n.l(@time, :format => '%b', :locale => :fr)
65
+ end
66
+
67
+ test "localize Time: given a meridian indicator format it returns the correct meridian indicator" do
68
+ assert_equal 'AM', I18n.l(@time, :format => '%p', :locale => :de)
69
+ assert_equal 'PM', I18n.l(@other_time, :format => '%p', :locale => :de)
70
+ end
71
+
72
+ test "localize Time: given a meridian indicator format it returns the correct meridian indicator in upcase" do
73
+ assert_equal 'am', I18n.l(@time, :format => '%P', :locale => :de)
74
+ assert_equal 'pm', I18n.l(@other_time, :format => '%P', :locale => :de)
75
+ end
76
+
77
+ test "localize Time: given an unknown format it does not fail" do
78
+ assert_nothing_raised { I18n.l(@time, :format => '%x') }
79
+ end
80
+
81
+ test "localize Time: given a format is missing it raises I18n::MissingTranslationData" do
82
+ assert_raise(I18n::MissingTranslationData) { I18n.l(@time, :format => :missing) }
83
+ end
84
+
85
+ protected
86
+
87
+ def setup_time_translations
88
+ I18n.backend.store_translations :de, {
89
+ :time => {
90
+ :formats => {
91
+ :default => "%a, %d. %b %Y %H:%M:%S %z",
92
+ :short => "%d. %b %H:%M",
93
+ :long => "%d. %B %Y %H:%M",
94
+ },
95
+ :am => 'am',
96
+ :pm => 'pm'
97
+ }
98
+ }
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+
3
+ module I18n
4
+ module Tests
5
+ module Lookup
6
+ def setup
7
+ super
8
+ I18n.backend.store_translations(:en, :foo => { :bar => 'bar', :baz => 'baz' }, :falsy => false, :truthy => true,
9
+ :string => "a", :array => %w(a b c), :hash => { "a" => "b" })
10
+ end
11
+
12
+ test "lookup: it returns a string" do
13
+ assert_equal("a", I18n.t(:string))
14
+ end
15
+
16
+ test "lookup: it returns hash" do
17
+ assert_equal({ :a => "b" }, I18n.t(:hash))
18
+ end
19
+
20
+ test "lookup: it returns an array" do
21
+ assert_equal(%w(a b c), I18n.t(:array))
22
+ end
23
+
24
+ test "lookup: it returns a native true" do
25
+ assert I18n.t(:truthy) === true
26
+ end
27
+
28
+ test "lookup: it returns a native false" do
29
+ assert I18n.t(:falsy) === false
30
+ end
31
+
32
+ test "lookup: given a missing key, no default and no raise option it returns an error message" do
33
+ assert_equal "translation missing: en.missing", I18n.t(:missing)
34
+ end
35
+
36
+ test "lookup: given a missing key, no default and the raise option it raises MissingTranslationData" do
37
+ assert_raise(I18n::MissingTranslationData) { I18n.t(:missing, :raise => true) }
38
+ end
39
+
40
+ test "lookup: does not raise an exception if no translation data is present for the given locale" do
41
+ assert_nothing_raised { I18n.t(:foo, :locale => :xx) }
42
+ end
43
+
44
+ test "lookup: does not modify the options hash" do
45
+ options = {}
46
+ assert_equal "a", I18n.t(:string, options)
47
+ assert_equal({}, options)
48
+ assert_nothing_raised { I18n.t(:string, options.freeze) }
49
+ end
50
+
51
+ test "lookup: given an array of keys it translates all of them" do
52
+ assert_equal %w(bar baz), I18n.t([:bar, :baz], :scope => [:foo])
53
+ end
54
+
55
+ test "lookup: using a custom scope separator" do
56
+ # data must have been stored using the custom separator when using the ActiveRecord backend
57
+ I18n.backend.store_translations(:en, { :foo => { :bar => 'bar' } }, { :separator => '|' })
58
+ assert_equal 'bar', I18n.t('foo|bar', :separator => '|')
59
+ end
60
+
61
+ # In fact it probably *should* fail but Rails currently relies on using the default locale instead.
62
+ # So we'll stick to this for now until we get it fixed in Rails.
63
+ test "lookup: given nil as a locale it does not raise but use the default locale" do
64
+ # assert_raise(I18n::InvalidLocale) { I18n.t(:bar, :locale => nil) }
65
+ assert_nothing_raised { I18n.t(:bar, :locale => nil) }
66
+ end
67
+
68
+ test "lookup: a resulting String is not frozen" do
69
+ assert !I18n.t(:string).frozen?
70
+ end
71
+
72
+ test "lookup: a resulting Array is not frozen" do
73
+ assert !I18n.t(:array).frozen?
74
+ end
75
+
76
+ test "lookup: a resulting Hash is not frozen" do
77
+ assert !I18n.t(:hash).frozen?
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ module I18n
4
+ module Tests
5
+ module Pluralization
6
+ test "pluralization: given 0 it returns the :zero translation if it is defined" do
7
+ assert_equal 'zero', I18n.t(:default => { :zero => 'zero' }, :count => 0)
8
+ end
9
+
10
+ test "pluralization: given 0 it returns the :other translation if :zero is not defined" do
11
+ assert_equal 'bars', I18n.t(:default => { :other => 'bars' }, :count => 0)
12
+ end
13
+
14
+ test "pluralization: given 1 it returns the singular translation" do
15
+ assert_equal 'bar', I18n.t(:default => { :one => 'bar' }, :count => 1)
16
+ end
17
+
18
+ test "pluralization: given 2 it returns the :other translation" do
19
+ assert_equal 'bars', I18n.t(:default => { :other => 'bars' }, :count => 2)
20
+ end
21
+
22
+ test "pluralization: given 3 it returns the :other translation" do
23
+ assert_equal 'bars', I18n.t(:default => { :other => 'bars' }, :count => 3)
24
+ end
25
+
26
+ test "pluralization: given nil it returns the whole entry" do
27
+ assert_equal({ :one => 'bar' }, I18n.t(:default => { :one => 'bar' }, :count => nil))
28
+ end
29
+
30
+ test "pluralization: given incomplete pluralization data it raises I18n::InvalidPluralizationData" do
31
+ assert_raise(I18n::InvalidPluralizationData) { I18n.t(:default => { :one => 'bar' }, :count => 2) }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+
3
+ module I18n
4
+ module Tests
5
+ module Procs
6
+ test "lookup: given a translation is a proc it calls the proc with the key and interpolation values" do
7
+ I18n.backend.store_translations(:en, :a_lambda => lambda { |*args| I18n::Tests::Procs.filter_args(*args) })
8
+ assert_equal '[:a_lambda, {:foo=>"foo"}]', I18n.t(:a_lambda, :foo => 'foo')
9
+ end
10
+
11
+ test "defaults: given a default is a Proc it calls it with the key and interpolation values" do
12
+ proc = lambda { |*args| I18n::Tests::Procs.filter_args(*args) }
13
+ assert_equal '[nil, {:foo=>"foo"}]', I18n.t(nil, :default => proc, :foo => 'foo')
14
+ end
15
+
16
+ test "defaults: given a default is a key that resolves to a Proc it calls it with the key and interpolation values" do
17
+ the_lambda = lambda { |*args| I18n::Tests::Procs.filter_args(*args) }
18
+ I18n.backend.store_translations(:en, :a_lambda => the_lambda)
19
+ assert_equal '[:a_lambda, {:foo=>"foo"}]', I18n.t(nil, :default => :a_lambda, :foo => 'foo')
20
+ assert_equal '[:a_lambda, {:foo=>"foo"}]', I18n.t(nil, :default => [nil, :a_lambda], :foo => 'foo')
21
+ end
22
+
23
+ test "interpolation: given an interpolation value is a lambda it calls it with key and values before interpolating it" do
24
+ proc = lambda { |*args| I18n::Tests::Procs.filter_args(*args) }
25
+ assert_match %r(\[\{:foo=>#<Proc.*>\}\]), I18n.t(nil, :default => '%{foo}', :foo => proc)
26
+ end
27
+
28
+ test "interpolation: given a key resolves to a Proc that returns a string then interpolation still works" do
29
+ proc = lambda { |*args| "%{foo}: " + I18n::Tests::Procs.filter_args(*args) }
30
+ assert_equal 'foo: [nil, {:foo=>"foo"}]', I18n.t(nil, :default => proc, :foo => 'foo')
31
+ end
32
+
33
+ test "pluralization: given a key resolves to a Proc that returns valid data then pluralization still works" do
34
+ proc = lambda { |*args| { :zero => 'zero', :one => 'one', :other => 'other' } }
35
+ assert_equal 'zero', I18n.t(:default => proc, :count => 0)
36
+ assert_equal 'one', I18n.t(:default => proc, :count => 1)
37
+ assert_equal 'other', I18n.t(:default => proc, :count => 2)
38
+ end
39
+
40
+ test "lookup: given the option :resolve => false was passed it does not resolve proc translations" do
41
+ I18n.backend.store_translations(:en, :a_lambda => lambda { |*args| I18n::Tests::Procs.filter_args(*args) })
42
+ assert_equal Proc, I18n.t(:a_lambda, :resolve => false).class
43
+ end
44
+
45
+ test "lookup: given the option :resolve => false was passed it does not resolve proc default" do
46
+ assert_equal Proc, I18n.t(nil, :default => lambda { |*args| I18n::Tests::Procs.filter_args(*args) }, :resolve => false).class
47
+ end
48
+
49
+
50
+ def self.filter_args(*args)
51
+ args.map {|arg| arg.delete(:fallback_in_progress) if arg.is_a?(Hash) ; arg }.inspect
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module I18n
4
+ VERSION = "1.6.0"
5
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: i18n
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.6.0
5
+ platform: ruby
6
+ authors:
7
+ - Sven Fuchs
8
+ - Joshua Harvey
9
+ - Matt Aimonetti
10
+ - Stephan Soller
11
+ - Saimon Moore
12
+ - Ryan Bigg
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+ date: 2019-03-03 00:00:00.000000000 Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: concurrent-ruby
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - "~>"
23
+ - !ruby/object:Gem::Version
24
+ version: '1.0'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - "~>"
30
+ - !ruby/object:Gem::Version
31
+ version: '1.0'
32
+ description: New wave Internationalization support for Ruby.
33
+ email: rails-i18n@googlegroups.com
34
+ executables: []
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - MIT-LICENSE
39
+ - README.md
40
+ - lib/i18n.rb
41
+ - lib/i18n/backend.rb
42
+ - lib/i18n/backend/base.rb
43
+ - lib/i18n/backend/cache.rb
44
+ - lib/i18n/backend/cache_file.rb
45
+ - lib/i18n/backend/cascade.rb
46
+ - lib/i18n/backend/chain.rb
47
+ - lib/i18n/backend/fallbacks.rb
48
+ - lib/i18n/backend/flatten.rb
49
+ - lib/i18n/backend/gettext.rb
50
+ - lib/i18n/backend/interpolation_compiler.rb
51
+ - lib/i18n/backend/key_value.rb
52
+ - lib/i18n/backend/memoize.rb
53
+ - lib/i18n/backend/metadata.rb
54
+ - lib/i18n/backend/pluralization.rb
55
+ - lib/i18n/backend/simple.rb
56
+ - lib/i18n/backend/transliterator.rb
57
+ - lib/i18n/config.rb
58
+ - lib/i18n/core_ext/hash.rb
59
+ - lib/i18n/exceptions.rb
60
+ - lib/i18n/gettext.rb
61
+ - lib/i18n/gettext/helpers.rb
62
+ - lib/i18n/gettext/po_parser.rb
63
+ - lib/i18n/interpolate/ruby.rb
64
+ - lib/i18n/locale.rb
65
+ - lib/i18n/locale/fallbacks.rb
66
+ - lib/i18n/locale/tag.rb
67
+ - lib/i18n/locale/tag/parents.rb
68
+ - lib/i18n/locale/tag/rfc4646.rb
69
+ - lib/i18n/locale/tag/simple.rb
70
+ - lib/i18n/middleware.rb
71
+ - lib/i18n/tests.rb
72
+ - lib/i18n/tests/basics.rb
73
+ - lib/i18n/tests/defaults.rb
74
+ - lib/i18n/tests/interpolation.rb
75
+ - lib/i18n/tests/link.rb
76
+ - lib/i18n/tests/localization.rb
77
+ - lib/i18n/tests/localization/date.rb
78
+ - lib/i18n/tests/localization/date_time.rb
79
+ - lib/i18n/tests/localization/procs.rb
80
+ - lib/i18n/tests/localization/time.rb
81
+ - lib/i18n/tests/lookup.rb
82
+ - lib/i18n/tests/pluralization.rb
83
+ - lib/i18n/tests/procs.rb
84
+ - lib/i18n/version.rb
85
+ homepage: http://github.com/ruby-i18n/i18n
86
+ licenses:
87
+ - MIT
88
+ metadata:
89
+ bug_tracker_uri: https://github.com/svenfuchs/i18n/issues
90
+ changelog_uri: https://github.com/svenfuchs/i18n/releases
91
+ documentation_uri: https://guides.rubyonrails.org/i18n.html
92
+ source_code_uri: https://github.com/svenfuchs/i18n
93
+ post_install_message: |2+
94
+
95
+ HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
96
+ But that may break your application.
97
+
98
+ Please check your Rails app for 'config.i18n.fallbacks = true'.
99
+ If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
100
+ 'config.i18n.fallbacks = [I18n.default_locale]'.
101
+ If not, fallbacks will be broken in your app by I18n 1.1.x.
102
+
103
+ For more info see:
104
+ https://github.com/svenfuchs/i18n/releases/tag/v1.1.0
105
+
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 2.3.0
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 1.3.5
119
+ requirements: []
120
+ rubygems_version: 3.0.2
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: New wave Internationalization support for Ruby
124
+ test_files: []