mini_i18n 0.8.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ef2a53042e3999db594b7dc77b9e7a90ad6b5f74
4
- data.tar.gz: 2893c26ab80b3dca7e2605a1d012089b74c4ac32
2
+ SHA256:
3
+ metadata.gz: 1cb5cf9833c1d4bfb7f45fed780cd5207ae00b1b51d9f2f5c53bd3239675920b
4
+ data.tar.gz: 8bc35757a1d45205133ffd112c1681698629d01faac6e846805c9f970673e57f
5
5
  SHA512:
6
- metadata.gz: 0151a62d4cdd3dda83766ddc688ef7472b543fc4a88e2c46f7df6750346abdc5dbb24370383cdf01b2cd2644dad153e299f2215b7656b8770505e1bef20474b5
7
- data.tar.gz: d71c64a9fa707378ea398b9e3fc93a2447596121df8dc9dc1fc53011612896997a43b85db78ca442d7e6122dbaacfa4d0aad783408cff7d35163cf6991f9e26e
6
+ metadata.gz: d0e50f36c05e3857048ea02754c0c5794d2bae63d3524153adbcaeea16b00c080784317051994930fd4a19ca7bd42e5a4d24fbf21ec2b7227f73a6b872817c71
7
+ data.tar.gz: 567b252d2c586e3b7678f3f7ce19e89195cf665a685141eba42bd259a6a09c26c353717f8f2fc232225547aa3f43ef495606cd3fa780aef96400cebaf5fe865b
@@ -0,0 +1,11 @@
1
+ # Global shortcuts for MiniI18n convenience methods
2
+
3
+ module Kernel
4
+ def T(*args)
5
+ MiniI18n.t(*args)
6
+ end
7
+
8
+ def L(*args)
9
+ MiniI18n.l(*args)
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ de:
2
+ date:
3
+ formats:
4
+ default: "%A, %-d. %B %Y"
5
+ short: "%-d.%-m.%y"
6
+ day_names: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
7
+ abbr_day_names: [So, Mo, Di, Mi, Do, Fr, Sa]
8
+ month_names: [Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember]
9
+ abbr_month_names: [Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez]
10
+ time:
11
+ formats:
12
+ default: "%a, %-d. %B %Y - %H:%M"
13
+ short: "%-d.%-m.%y - %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: '.'
17
+ separator: ','
@@ -15,6 +15,3 @@ en:
15
15
  format:
16
16
  delimiter: ','
17
17
  separator: '.'
18
- as:
19
- currency: '%{number} $'
20
- distance: 'Distance: %{number} miles'
@@ -0,0 +1,17 @@
1
+ es:
2
+ date:
3
+ formats:
4
+ default: "%-d/%-m/%Y"
5
+ short: "%-d %b %y"
6
+ day_names: [domingo, lunes, martes, miércoles, jueves, viernes, sábado]
7
+ abbr_day_names: [dom, lun, mar, mié, jue, vie, sáb]
8
+ month_names: [enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre]
9
+ abbr_month_names: [ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic]
10
+ time:
11
+ formats:
12
+ default: "%a %-d de %B de %Y - %H:%M"
13
+ short: "%-d %b %y - %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: '.'
17
+ separator: ','
@@ -0,0 +1,17 @@
1
+ fr:
2
+ date:
3
+ formats:
4
+ default: "%A %-d %B %Y"
5
+ short: "%-d %b %y"
6
+ day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi]
7
+ abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
8
+ month_names: [janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre]
9
+ abbr_month_names: [janv, févr, mars, avr, mai, juin, juil, août, sept, oct, nov, déc]
10
+ time:
11
+ formats:
12
+ default: "%a %-d %B %Y - %H:%M"
13
+ short: "%-d %b %y - %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: ' '
17
+ separator: ','
@@ -0,0 +1,17 @@
1
+ it:
2
+ date:
3
+ formats:
4
+ default: "%A %-d %B %Y"
5
+ short: "%-d/%m/%y"
6
+ day_names: [domenica, lunedì, martedì, mercoledì, giovedì, venerdì, sabato]
7
+ abbr_day_names: [dom, lun, mar, mer, gio, ven, sab]
8
+ month_names: [gennaio, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, dicembre]
9
+ abbr_month_names: [gen, feb, mar, apr, mag, giu, lug, ago, set, ott, nov, dic]
10
+ time:
11
+ formats:
12
+ default: "%a %-d %B %Y - %H:%M"
13
+ short: "%-d/%m/%y - %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: '.'
17
+ separator: ','
@@ -0,0 +1,17 @@
1
+ ja:
2
+ date:
3
+ formats:
4
+ default: "%Y年%m月%d日(%a)"
5
+ short: "%m/%d"
6
+ day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日]
7
+ abbr_day_names: [日, 月, 火, 水, 木, 金, 土]
8
+ month_names: [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
9
+ abbr_month_names: [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
10
+ time:
11
+ formats:
12
+ default: "%Y年%m月%d日(%a) %H時%M分"
13
+ short: "%m/%d %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: ','
17
+ separator: '.'
@@ -0,0 +1,17 @@
1
+ nl:
2
+ date:
3
+ formats:
4
+ default: "%A %-d %B %Y"
5
+ short: "%-d-%-m-%y"
6
+ day_names: [zondag, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag]
7
+ abbr_day_names: [zo, ma, di, wo, do, vr, za]
8
+ month_names: [januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december]
9
+ abbr_month_names: [jan, feb, mrt, apr, mei, jun, jul, aug, sep, okt, nov, dec]
10
+ time:
11
+ formats:
12
+ default: "%a %-d %B %Y - %H:%M"
13
+ short: "%-d-%-m-%y - %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: '.'
17
+ separator: ','
@@ -0,0 +1,17 @@
1
+ pt:
2
+ date:
3
+ formats:
4
+ default: "%A, %-d de %B de %Y"
5
+ short: "%-d/%m/%y"
6
+ day_names: [domingo, segunda-feira, terça-feira, quarta-feira, quinta-feira, sexta-feira, sábado]
7
+ abbr_day_names: [dom, seg, ter, qua, qui, sex, sáb]
8
+ month_names: [janeiro, fevereiro, março, abril, maio, junho, julho, agosto, setembro, outubro, novembro, dezembro]
9
+ abbr_month_names: [jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez]
10
+ time:
11
+ formats:
12
+ default: "%a, %-d de %B de %Y - %H:%M"
13
+ short: "%-d/%m/%y - %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: '.'
17
+ separator: ','
@@ -0,0 +1,17 @@
1
+ zh:
2
+ date:
3
+ formats:
4
+ default: "%Y年%m月%d日"
5
+ short: "%m月%d日"
6
+ day_names: [星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
7
+ abbr_day_names: [周日, 周一, 周二, 周三, 周四, 周五, 周六]
8
+ month_names: [一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
9
+ abbr_month_names: [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
10
+ time:
11
+ formats:
12
+ default: "%Y年%m月%d日 %A %H:%M"
13
+ short: "%m月%d日 %H:%M"
14
+ number:
15
+ format:
16
+ delimiter: ','
17
+ separator: '.'
@@ -27,7 +27,7 @@ module MiniI18n
27
27
  locale = options[:locale]
28
28
  delimiter = MiniI18n.t("number.format.delimiter", locale: locale)
29
29
  separator = MiniI18n.t("number.format.separator", locale: locale)
30
- integer, fractional = number.to_s.split(separator)
30
+ integer, fractional = number.to_s.split('.')
31
31
 
32
32
  integer.to_s.gsub!(DELIMITER_REGEX) do |match|
33
33
  "#{match}#{delimiter}"
@@ -1,3 +1,3 @@
1
1
  module MiniI18n
2
- VERSION = "0.8.0"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/mini_i18n.rb CHANGED
@@ -3,6 +3,7 @@ require "mini_i18n/version"
3
3
  require "mini_i18n/utils"
4
4
  require "mini_i18n/localization"
5
5
  require "mini_i18n/pluralization"
6
+ require "mini_i18n/kernel_extensions"
6
7
 
7
8
  module MiniI18n
8
9
  class << self
@@ -27,6 +28,16 @@ module MiniI18n
27
28
 
28
29
  def available_locales=(new_locales)
29
30
  @@available_locales = Array(new_locales).map(&:to_s)
31
+
32
+ # Load built-in localization defaults
33
+ @@available_locales.each do |locale|
34
+ default_locale_path = File.join(File.dirname(__FILE__), "mini_i18n", "locales", "#{locale}.yml")
35
+ if File.exist?(default_locale_path)
36
+ YAML.load_file(default_locale_path).each do |loc, translations|
37
+ add_translations(loc, translations)
38
+ end
39
+ end
40
+ end
30
41
  end
31
42
 
32
43
  def translations
@@ -62,7 +73,7 @@ module MiniI18n
62
73
  end
63
74
 
64
75
  def load_translations(path)
65
- Dir[path.to_s].each do |file|
76
+ Dir[path.to_s].sort.each do |file|
66
77
  YAML.load_file(file).each do |locale, new_translations|
67
78
  add_translations(locale.to_s, new_translations)
68
79
  end
@@ -0,0 +1,71 @@
1
+ RSpec.describe "Default Locales Integration" do
2
+ let(:date) { Date.new(2023, 12, 25) }
3
+ let(:time) { Time.new(2023, 12, 25, 14, 30) }
4
+ let(:number) { 1234.56 }
5
+
6
+ before(:each) do
7
+ @original_translations = MiniI18n.translations.dup
8
+ @original_available_locales = MiniI18n.available_locales.dup
9
+ MiniI18n.available_locales = [:en, :es, :fr, :de, :pt, :it, :nl, :zh, :ja]
10
+ end
11
+
12
+ after(:each) do
13
+ MiniI18n.translations.clear
14
+ MiniI18n.translations.merge!(@original_translations)
15
+ MiniI18n.available_locales = @original_available_locales
16
+ end
17
+
18
+ describe "Date localization" do
19
+ it "formats dates according to each locale" do
20
+ expect(MiniI18n.l(date, locale: :en)).to eq("Monday 25, December, 2023")
21
+ expect(MiniI18n.l(date, locale: :es)).to eq("25/12/2023")
22
+ expect(MiniI18n.l(date, locale: :fr)).to eq("lundi 25 décembre 2023")
23
+ expect(MiniI18n.l(date, locale: :de)).to eq("Montag, 25. Dezember 2023")
24
+ expect(MiniI18n.l(date, locale: :pt)).to eq("segunda-feira, 25 de dezembro de 2023")
25
+ expect(MiniI18n.l(date, locale: :it)).to eq("lunedì 25 dicembre 2023")
26
+ expect(MiniI18n.l(date, locale: :nl)).to eq("maandag 25 december 2023")
27
+ expect(MiniI18n.l(date, locale: :zh)).to eq("2023年12月25日")
28
+ expect(MiniI18n.l(date, locale: :ja)).to eq("2023年12月25日(月)")
29
+ end
30
+
31
+ it "formats short dates according to each locale" do
32
+ expect(MiniI18n.l(date, format: :short, locale: :en)).to eq("25 Dec 23")
33
+ expect(MiniI18n.l(date, format: :short, locale: :es)).to eq("25 dic 23")
34
+ expect(MiniI18n.l(date, format: :short, locale: :fr)).to eq("25 déc 23")
35
+ expect(MiniI18n.l(date, format: :short, locale: :de)).to eq("25.12.23")
36
+ expect(MiniI18n.l(date, format: :short, locale: :pt)).to eq("25/12/23")
37
+ expect(MiniI18n.l(date, format: :short, locale: :it)).to eq("25/12/23")
38
+ expect(MiniI18n.l(date, format: :short, locale: :nl)).to eq("25-12-23")
39
+ expect(MiniI18n.l(date, format: :short, locale: :zh)).to eq("12月25日")
40
+ expect(MiniI18n.l(date, format: :short, locale: :ja)).to eq("12/25")
41
+ end
42
+ end
43
+
44
+ describe "Time localization" do
45
+ it "formats times according to each locale" do
46
+ expect(MiniI18n.l(time, locale: :en)).to eq("Mon 25, December, 2023 - 14:30")
47
+ expect(MiniI18n.l(time, locale: :es)).to eq("lun 25 de diciembre de 2023 - 14:30")
48
+ expect(MiniI18n.l(time, locale: :fr)).to eq("lun 25 décembre 2023 - 14:30")
49
+ expect(MiniI18n.l(time, locale: :de)).to eq("Mo, 25. Dezember 2023 - 14:30")
50
+ expect(MiniI18n.l(time, locale: :pt)).to eq("seg, 25 de dezembro de 2023 - 14:30")
51
+ expect(MiniI18n.l(time, locale: :it)).to eq("lun 25 dicembre 2023 - 14:30")
52
+ expect(MiniI18n.l(time, locale: :nl)).to eq("ma 25 december 2023 - 14:30")
53
+ expect(MiniI18n.l(time, locale: :zh)).to eq("2023年12月25日 星期一 14:30")
54
+ expect(MiniI18n.l(time, locale: :ja)).to eq("2023年12月25日(月) 14時30分")
55
+ end
56
+ end
57
+
58
+ describe "Number localization" do
59
+ it "formats numbers according to each locale" do
60
+ expect(MiniI18n.l(number, locale: :en)).to eq("1,234.56")
61
+ expect(MiniI18n.l(number, locale: :es)).to eq("1.234,56")
62
+ expect(MiniI18n.l(number, locale: :fr)).to eq("1 234,56")
63
+ expect(MiniI18n.l(number, locale: :de)).to eq("1.234,56")
64
+ expect(MiniI18n.l(number, locale: :pt)).to eq("1.234,56")
65
+ expect(MiniI18n.l(number, locale: :it)).to eq("1.234,56")
66
+ expect(MiniI18n.l(number, locale: :nl)).to eq("1.234,56")
67
+ expect(MiniI18n.l(number, locale: :zh)).to eq("1,234.56")
68
+ expect(MiniI18n.l(number, locale: :ja)).to eq("1,234.56")
69
+ end
70
+ end
71
+ end
@@ -7,4 +7,8 @@ en:
7
7
  notifications:
8
8
  zero: 'no unread notifications'
9
9
  one: '1 unread notification'
10
- other: '%{count} unread notifications'
10
+ other: '%{count} unread notifications'
11
+ number:
12
+ as:
13
+ currency: '%{number} $'
14
+ distance: 'Distance -> %{number} miles'
@@ -0,0 +1,24 @@
1
+ RSpec.describe 'Global shortcuts' do
2
+ describe 'T method' do
3
+ it 'acts as a shortcut for MiniI18n.t' do
4
+ expect(T(:hello)).to eq 'hello'
5
+ expect(T(:hello, locale: :fr)).to eq 'bonjour'
6
+ end
7
+
8
+ it 'supports all the same options as MiniI18n.t' do
9
+ expect(T('hello_interpolation', name: 'world')).to eq 'hello world'
10
+ expect(T('notifications', count: 1)).to eq '1 unread notification'
11
+ expect(T('non_existent_key', default: 'default')).to eq 'default'
12
+ end
13
+ end
14
+
15
+ describe 'L method' do
16
+ it 'acts as a shortcut for MiniI18n.l' do
17
+ expect(L(1000.25)).to eq '1,000.25'
18
+ end
19
+
20
+ it 'supports all the same options as MiniI18n.l' do
21
+ expect(L(1000, as: :currency)).to eq '1,000 $'
22
+ end
23
+ end
24
+ end
@@ -42,8 +42,8 @@ RSpec.describe MiniI18n::Localization do
42
42
 
43
43
  it 'as' do
44
44
  expect(MiniI18n.l(9000, as: :currency)).to eq '9,000 $'
45
- expect(MiniI18n.l(9000, as: :currency, locale: :es)).to eq '9000 €'
46
- expect(MiniI18n.l(125.5, as: :distance)).to eq 'Distance: 125.5 miles'
45
+ expect(MiniI18n.l(9000, as: :currency, locale: :es)).to eq '9.000 €'
46
+ expect(MiniI18n.l(125.5, as: :distance)).to eq 'Distance -> 125.5 miles'
47
47
  end
48
48
  end
49
- end
49
+ end
@@ -46,8 +46,8 @@ RSpec.describe MiniI18n do
46
46
  MiniI18n.separator = ' '
47
47
  expect(MiniI18n.t('second_level hello')).to eq 'hello 2'
48
48
 
49
- MiniI18n.separator = '::'
50
- expect(MiniI18n.t('second_level::hello')).to eq 'hello 2'
49
+ MiniI18n.separator = '/'
50
+ expect(MiniI18n.t('second_level/hello')).to eq 'hello 2'
51
51
  end
52
52
  end
53
53
 
metadata CHANGED
@@ -1,59 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_i18n
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - markets
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-11 00:00:00.000000000 Z
11
+ date: 2025-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.7'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.7'
55
- - !ruby/object:Gem::Dependency
56
- name: byebug
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ">="
@@ -89,14 +75,25 @@ extensions: []
89
75
  extra_rdoc_files: []
90
76
  files:
91
77
  - lib/mini_i18n.rb
78
+ - lib/mini_i18n/kernel_extensions.rb
79
+ - lib/mini_i18n/locales/de.yml
80
+ - lib/mini_i18n/locales/en.yml
81
+ - lib/mini_i18n/locales/es.yml
82
+ - lib/mini_i18n/locales/fr.yml
83
+ - lib/mini_i18n/locales/it.yml
84
+ - lib/mini_i18n/locales/ja.yml
85
+ - lib/mini_i18n/locales/nl.yml
86
+ - lib/mini_i18n/locales/pt.yml
87
+ - lib/mini_i18n/locales/zh.yml
92
88
  - lib/mini_i18n/localization.rb
93
89
  - lib/mini_i18n/pluralization.rb
94
90
  - lib/mini_i18n/utils.rb
95
91
  - lib/mini_i18n/version.rb
92
+ - spec/default_locales_integration_spec.rb
96
93
  - spec/fixtures/locales/en.json
97
94
  - spec/fixtures/locales/en.yml
98
- - spec/fixtures/locales/localization.yml
99
95
  - spec/fixtures/locales/multiple.yml
96
+ - spec/kernel_extensions_spec.rb
100
97
  - spec/localization_spec.rb
101
98
  - spec/mini_i18n_spec.rb
102
99
  - spec/spec_helper.rb
@@ -104,7 +101,7 @@ homepage: https://github.com/markets/mini_i18n
104
101
  licenses:
105
102
  - MIT
106
103
  metadata: {}
107
- post_install_message:
104
+ post_install_message:
108
105
  rdoc_options: []
109
106
  require_paths:
110
107
  - lib
@@ -119,16 +116,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
116
  - !ruby/object:Gem::Version
120
117
  version: '0'
121
118
  requirements: []
122
- rubyforge_project:
123
- rubygems_version: 2.6.13
124
- signing_key:
119
+ rubygems_version: 3.5.16
120
+ signing_key:
125
121
  specification_version: 4
126
122
  summary: Minimalistic I18n library for Ruby
127
123
  test_files:
124
+ - spec/default_locales_integration_spec.rb
128
125
  - spec/fixtures/locales/en.json
129
126
  - spec/fixtures/locales/en.yml
130
- - spec/fixtures/locales/localization.yml
131
127
  - spec/fixtures/locales/multiple.yml
128
+ - spec/kernel_extensions_spec.rb
132
129
  - spec/localization_spec.rb
133
130
  - spec/mini_i18n_spec.rb
134
131
  - spec/spec_helper.rb