r18n-core 5.0.1 → 6.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
2
  SHA256:
3
- metadata.gz: ef8fd883bdb307b7895551a01d0d9abe1b8cf39d78f26d8d45289245b98d7cb4
4
- data.tar.gz: 2964f46777aa5b30c6fcdb964acfb94c4d4c5e3d8c0a0ddfe878569487c84fa5
3
+ metadata.gz: 9a70423b9d4f45d06434544ee5d87f18d4348779069102a7f910fe3f72c2fdff
4
+ data.tar.gz: fb2a462897eeff23bcdf055513a15b5d79d392365f9a087e51d9d3d8849e8396
5
5
  SHA512:
6
- metadata.gz: 376737013d9e16b9873140a971df8456c76df92e60b69b610bd339a8c1e2df955dd412eee46a34e35b89e89508e6811bac6d252dcc85077972d0fa561bf97c5f
7
- data.tar.gz: dc72f088623675f0dacdf2a8f6fd4987616605142b514b48ce2a00a2d29f2073230efb96b60bab30164175d30eef3d40ccc467fb1281d4f24a856f4dc5d16089
6
+ metadata.gz: 5af51be169ae15ad4f185848c67bc11e5f34a6db9f562c181bb5b136fa72b805dc634baa89a31b97e2bde42a6b2f33ac034634651bb722200dcac1e468b911e3
7
+ data.tar.gz: '05870dad00ffd9e23e646c4fb0c96d06745c086d1a41a7244017a1d2740ecbc0b00db68d2b96dc32c9ce55371d0041a2428f9702674ec571fbb5c03accde51d2'
data/ChangeLog.md CHANGED
@@ -2,7 +2,22 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
- ## 5.0.1 (2021-03-04)
5
+ ## 6.0.0 (Нови Сад) (2026-02-17)
6
+
7
+ * Drop Ruby 2.5, 2.6, 2.7, 3.0 and 3.1 support.
8
+ * Add Ruby 3.2, 3.3, 3.4 and 4.0 support.
9
+ * Add Arabic language.
10
+ * Add a Sv locale.
11
+ * Remove English from Swedish sublocales.
12
+ * Add `bigdecimal` runtime dependency.
13
+ * Fix bug with caching in `:variables` filter.
14
+ * Update development dependencies.
15
+ * Resolve new RuboCop offenses.
16
+ * Improve CI config.
17
+
18
+ ## 5.0.1 (Ą) (2021-03-04)
19
+
20
+ * Update version 5 ChangeLog to more complete and actual.
6
21
 
7
22
  ## 5.0.0 (Warszawa) (2021-03-04)
8
23
 
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # R18n Core
2
2
 
3
3
  [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/r18n/r18n-core?style=flat-square)](https://cirrus-ci.com/github/r18n/r18n-core)
4
- [![Codecov branch](https://img.shields.io/codecov/c/github/r18n/r18n-core/master.svg?style=flat-square)](https://codecov.io/gh/r18n/r18n-core)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/r18n/r18n-core/main.svg?style=flat-square)](https://codecov.io/gh/r18n/r18n-core)
5
5
  [![Code Climate](https://img.shields.io/codeclimate/maintainability/r18n/r18n-core.svg?style=flat-square)](https://codeclimate.com/github/r18n/r18n-core)
6
6
  [![Depfu](https://img.shields.io/depfu/r18n/r18n-core?style=flat-square)](https://depfu.com/repos/github/r18n/r18n-core)
7
7
  [![License](https://img.shields.io/github/license/r18n/r18n-core.svg?style=flat-square)](LICENSE)
@@ -23,7 +23,7 @@ and `r18n-desktop` to localize desktop application.
23
23
  * Flexible locales.
24
24
  * Total flexibility.
25
25
 
26
- See full features in [main README](https://github.com/r18n/r18n/blob/master/README.md).
26
+ See full features in [main README](https://github.com/r18n/r18n/blob/main/README.md).
27
27
 
28
28
  ## Usage
29
29
 
@@ -477,7 +477,7 @@ If you want to send a pull request:
477
477
  * Create `%{code}.yml` file for your language in the `base/` directory and
478
478
  translate the base messages. Just copy file from language, which you know,
479
479
  and rewrite values.
480
- * Send a pull request via GitHub <http://github.com/r18n/r18n> or just write
480
+ * Send a pull request via GitHub <http://github.com/r18n/r18n-core> or just write
481
481
  email with the files to [Andrey Sitnik](mailto:andrey@sitnik.ru)
482
482
  or [Alexander Popov](mailto:alex.wayfer@gmail.com).
483
483
 
data/base/ar.yml ADDED
@@ -0,0 +1,49 @@
1
+ ok: 'موافق'
2
+ save: 'حفظ'
3
+ cancel: 'إلغاء'
4
+ 'yes': 'نعم'
5
+ 'no': 'لا'
6
+ exit: 'خروج'
7
+ delete: 'حذف'
8
+
9
+ human_time:
10
+ after_days: !!pl
11
+ 1: 'بعد يوم واحد'
12
+ 2: 'بعد يومين'
13
+ 3: 'بعد %1 أيام'
14
+ 4: 'بعد %1 يومًا'
15
+ n: 'بعد %1 يوم'
16
+ tomorrow: 'غدًا'
17
+ after_hours: !!pl
18
+ 1: 'بعد ساعة واحدة'
19
+ 2: 'بعد ساعتين'
20
+ 3: 'بعد %1 ساعات'
21
+ 4: 'بعد %1 ساعةً'
22
+ n: 'بعد %1 ساعةٍ'
23
+ after_minutes: !!pl
24
+ 1: 'بعد دقيقة واحدة'
25
+ 1: 'بعد دقيقتين'
26
+ 1: 'بعد %1 دقائق'
27
+ 1: 'بعد %1 دقيقةً'
28
+ n: 'بعد %1 دقيقةٍ'
29
+ now: 'الآن'
30
+ today: 'اليوم'
31
+ minutes_ago: !!pl
32
+ 1: 'لدقيقة مضت'
33
+ 2: 'لدقيقتين مضتا'
34
+ 3: 'لـ%1 دقائق مضين'
35
+ 4: 'لـ%1 دقيقةً مضت'
36
+ n: 'لـ%1 دقيقةٍ مضت'
37
+ hours_ago: !!pl
38
+ 1: 'لساعة مضت'
39
+ 2: 'لساعتين مضتا'
40
+ 3: 'لـ%1 ساعات مضين'
41
+ 4: 'لـ%1 ساعةً مضت'
42
+ n: 'لـ%1 ساعةٍ مضت'
43
+ yesterday: 'أمس'
44
+ days_ago: !!pl
45
+ 1: 'ليوم مضى'
46
+ 1: 'ليومين مضيا'
47
+ 1: 'لـ%1 أيام مضين'
48
+ 1: 'لـ%1 يومًا مضت'
49
+ n: 'لـ%1 يومٍ مضت'
@@ -23,7 +23,7 @@ module R18n
23
23
  class FilterList
24
24
  # Process `value` by filters in `enabled`.
25
25
  def process(filters_type, type, value, locale, path, params)
26
- config = { locale: locale, path: path }
26
+ config = { locale:, path: }
27
27
 
28
28
  enabled(filters_type, type).each do |filter|
29
29
  value = filter.call(value, config, *params)
@@ -17,8 +17,6 @@
17
17
  # You should have received a copy of the GNU Lesser General Public License
18
18
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'ostruct'
21
-
22
20
  # R18n filters definition
23
21
  module R18n
24
22
  # Filter is a way, to process translations: escape HTML entries, convert from
@@ -193,7 +191,7 @@ module R18n
193
191
  end
194
192
 
195
193
  # Return filters, which be added inside `block`.
196
- def listen(&_block)
194
+ def listen(&)
197
195
  filters = []
198
196
  @new_filter_listener = proc { |i| filters << i }
199
197
  yield
@@ -203,10 +201,10 @@ module R18n
203
201
  end
204
202
 
205
203
  Filters.defined = {}
206
- Filters.by_type = Hash.new([])
207
- Filters.active_enabled = Hash.new([])
208
- Filters.passive_enabled = Hash.new([])
209
- Filters.enabled = Hash.new([])
204
+ Filters.by_type = Hash.new { |hash, key| hash[key] = [] }
205
+ Filters.active_enabled = Hash.new { |hash, key| hash[key] = [] }
206
+ Filters.passive_enabled = Hash.new { |hash, key| hash[key] = [] }
207
+ Filters.enabled = Hash.new { |hash, key| hash[key] = [] }
210
208
 
211
209
  Filter = Struct.new(:name, :types, :block, :enabled, :passive) do
212
210
  def call(*params)
@@ -242,16 +240,20 @@ module R18n
242
240
  end
243
241
 
244
242
  Filters.add(String, :variables) do |content, config, *params|
245
- cached_params = []
246
- content.to_s.gsub(/%\d/) do |key|
247
- i = key[1..-1].to_i
248
- unless cached_params.include? i - 1
249
- param = config[:locale].localize(params[i - 1])
243
+ cached_params = {}
244
+
245
+ content.to_s.gsub(/%(\d+)/) do
246
+ ## In translation files we start with `%1`, in code we start with index `0`
247
+ i = ::Regexp.last_match(1).to_i - 1
248
+
249
+ unless cached_params.key?(i)
250
+ param = config[:locale].localize(params[i])
250
251
  param = ActiveSupport::SafeBuffer.new + param if defined? ActiveSupport::SafeBuffer
251
252
 
252
- cached_params[i - 1] = param
253
+ cached_params[i] = param
253
254
  end
254
- cached_params[i - 1]
255
+
256
+ cached_params[i]
255
257
  end
256
258
  end
257
259
 
@@ -195,12 +195,11 @@ module R18n
195
195
  @available_locales = @available_codes = nil
196
196
  @translation_places = self.class.convert_places(@original_places)
197
197
 
198
- available_in_places = @translation_places.map { |i| [i, i.available] }
199
- available_in_extensions =
200
- R18n.extension_places.map { |i| [i, i.available] }
198
+ available_in_places = @translation_places.to_h { |i| [i, i.available] }
199
+ available_in_extensions = R18n.extension_places.to_h { |i| [i, i.available] }
201
200
 
202
201
  unless defined? @locale
203
- available_in_places.each do |_place, available|
202
+ available_in_places.each_value do |available|
204
203
  @locales.each do |locale|
205
204
  if available.include? locale
206
205
  @locale = locale
@@ -263,8 +262,8 @@ module R18n
263
262
  # i18n.l Time.now.to_date #=> "07/01/09"
264
263
  # i18n.l Time.now, :human #=> "now"
265
264
  # i18n.l Time.now, :full #=> "Jule 1st, 2009 12:59"
266
- def localize(object, format = nil, **kwargs)
267
- locale.localize(object, format, i18n: self, **kwargs)
265
+ def localize(object, format = nil, **)
266
+ locale.localize(object, format, i18n: self, **)
268
267
  end
269
268
  alias l localize
270
269
 
@@ -87,13 +87,12 @@ module R18n
87
87
  name = capitalize(code)
88
88
  return unless name
89
89
 
90
- @loaded[code] ||= begin
90
+ @loaded[code] ||=
91
91
  if exists?(code)
92
92
  R18n::Locales.const_get(name).new
93
93
  else
94
94
  UnsupportedLocale.new(code)
95
95
  end
96
- end
97
96
  end
98
97
 
99
98
  # Set locale `properties`. Locale class will have methods
@@ -128,14 +127,16 @@ module R18n
128
127
  @parent = self.class.superclass.new
129
128
  end
130
129
 
131
- set sublocales: [],
132
- week_start: :monday,
133
- time_am: 'AM',
134
- time_pm: 'PM',
135
- time_format: '_ %R',
136
- time_with_seconds_format: '_ %T',
137
- full_format: '%-d %B',
138
- year_format: '_ %Y'
130
+ set(
131
+ sublocales: [],
132
+ week_start: :monday,
133
+ time_am: 'AM',
134
+ time_pm: 'PM',
135
+ time_format: '_ %R',
136
+ time_with_seconds_format: '_ %T',
137
+ full_format: '%-d %B',
138
+ year_format: '_ %Y'
139
+ )
139
140
 
140
141
  def month_standalone
141
142
  month_names
@@ -176,7 +177,7 @@ module R18n
176
177
  # `:full` ("01 Jule, 2009"), `:human` ("yesterday"),
177
178
  # `:standard` ("07/01/09") or `:month` for standalone month
178
179
  # name. Default format is `:standard`.
179
- def localize(obj, format = nil, *args, **kwargs)
180
+ def localize(obj, format = nil, *, **kwargs)
180
181
  case obj
181
182
  when Integer
182
183
  format_integer(obj)
@@ -195,14 +196,14 @@ module R18n
195
196
  raise ArgumentError, "Unknown time formatter #{format}"
196
197
  end
197
198
 
198
- send format_method_name, obj, *args, **kwargs
199
+ send format_method_name, obj, *, **kwargs
199
200
  else
200
201
  format_method_name =
201
202
  "format_#{Utils.underscore(obj.class.name).tr('/', '_')}_#{format}"
202
203
 
203
204
  return obj.to_s unless respond_to? format_method_name
204
205
 
205
- send format_method_name, obj, *args, **kwargs
206
+ send format_method_name, obj, *, **kwargs
206
207
  end
207
208
  end
208
209
 
@@ -265,7 +266,7 @@ module R18n
265
266
  minutes = time.is_a?(DateTime) ? diff * 24 * 60.0 : diff / 60.0
266
267
  diff = minutes.abs
267
268
  if (diff > 24 * 60) || (time.mday != now.mday && diff > 12 * 24)
268
- format_time(format_date_human(time.to_date, now: now.to_date, i18n: i18n), time)
269
+ format_time(format_date_human(time.to_date, now: now.to_date, i18n:), time)
269
270
  elsif minutes > -1 && minutes < 1
270
271
  i18n.human_time.now
271
272
  elsif minutes >= 60
@@ -280,14 +281,14 @@ module R18n
280
281
  end
281
282
 
282
283
  # Format `time` in compact form. For example, "12/31/09 12:59".
283
- def format_time_standard(time, *args, **kwargs)
284
- format_time(format_date_standard(time), time, *args, **kwargs)
284
+ def format_time_standard(time, *, **)
285
+ format_time(format_date_standard(time), time, *, **)
285
286
  end
286
287
 
287
288
  # Format `time` in most official form. For example, "December 31st, 2009
288
289
  # 12:59". For special cases you can replace it in locale's class.
289
- def format_time_full(time, **kwargs)
290
- format_time(format_date_full(time, **kwargs), time, **kwargs)
290
+ def format_time_full(time, **)
291
+ format_time(format_date_full(time, **), time, **)
291
292
  end
292
293
 
293
294
  # Format `date` in human usable form. For example "5 days ago" or "yesterday".
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R18n
4
+ module Locales
5
+ # Arabic locale
6
+ class Ar < Locale
7
+ set(
8
+ title: 'العربية',
9
+
10
+ week_start: :السبت,
11
+ wday_names: %w[
12
+ الأحد الإثنين الثلاثاء الأربعاء الخميس الجمعة السبت
13
+ ],
14
+ wday_abbrs: %w[ح إث ث ر خ ج س],
15
+
16
+ month_names: %w[
17
+ يناير فبراير مارس أبريل مايو يونيو أغسطس سبتمبر أكتوبر
18
+ نوفمبر ديسمبر
19
+ ],
20
+ month_abbrs: %w[
21
+ يناير فبراير مارس أبريل مايو يونيو أغسطس سبتمبر أكتوبر
22
+ نوفمبر ديسمبر
23
+ ],
24
+
25
+ date_format: '%d/%m/%Y',
26
+ full_format: '%-d %B',
27
+ year_format: '_ %Y',
28
+
29
+ number_decimal: '.',
30
+ number_group: ','
31
+ )
32
+
33
+ # Change direction
34
+ def ltr?
35
+ false
36
+ end
37
+
38
+ def ordinalize(number)
39
+ "الـ#{number}"
40
+ end
41
+
42
+ # Arabic plural rule from https://arabeyes.org/Plural_Forms
43
+ def pluralize(number)
44
+ if number.zero?
45
+ 0
46
+ elsif number == 1
47
+ 1
48
+ elsif number == 2
49
+ 2
50
+ elsif 100 >= 3 && n % 100 <= 10
51
+ 3
52
+ elsif n % 100 >= 11
53
+ 4
54
+ else
55
+ 'n'
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -6,8 +6,10 @@ module R18n
6
6
  module Locales
7
7
  # Australian English locale
8
8
  class EnAU < En
9
- set title: 'Australian English',
10
- sublocales: %w[en en-US en-GB]
9
+ set(
10
+ title: 'Australian English',
11
+ sublocales: %w[en en-US en-GB]
12
+ )
11
13
  end
12
14
  end
13
15
  end
@@ -27,9 +27,9 @@ module R18n
27
27
  )
28
28
 
29
29
  def format_date_full(date, year: true, **_kwargs)
30
- full = super(date, year: year)
30
+ full = super(date, year:)
31
31
  if full[0..1] == '1 '
32
- "1er#{full[1..-1]}"
32
+ "1er#{full[1..]}"
33
33
  else
34
34
  full
35
35
  end
@@ -31,7 +31,7 @@ module R18n
31
31
  0
32
32
  elsif number == 1
33
33
  1
34
- elsif number >= 2 && number <= 4
34
+ elsif number.between? 2, 4
35
35
  2
36
36
  else
37
37
  'n'
@@ -25,9 +25,9 @@ module R18n
25
25
  )
26
26
 
27
27
  def format_date_full(date, year: true, **_kwargs)
28
- full = super(date, year: year)
28
+ full = super(date, year:)
29
29
  if full[0..1] == '1 '
30
- "1º#{full[1..-1]}"
30
+ "1º#{full[1..]}"
31
31
  else
32
32
  full
33
33
  end
@@ -8,6 +8,7 @@ module R18n
8
8
  class No < Nb
9
9
  class << self
10
10
  extend Gem::Deprecate
11
+
11
12
  deprecate :new, 'R18n::Locales::Nb.new', 2019, 1
12
13
  end
13
14
  end
@@ -4,31 +4,33 @@ module R18n
4
4
  module Locales
5
5
  # Serbian Latin locale
6
6
  class SrLatn < Locale
7
- set title: 'Srpski',
8
- sublocales: [],
7
+ set(
8
+ title: 'Srpski',
9
+ sublocales: [],
9
10
 
10
- week_start: :monday,
11
- wday_names: %w[nedelja ponedeljak utorak sreda četvrtak petak subota],
12
- wday_abbrs: %w[ned pon uto sri čet pet sub],
11
+ week_start: :monday,
12
+ wday_names: %w[nedelja ponedeljak utorak sreda četvrtak petak subota],
13
+ wday_abbrs: %w[ned pon uto sri čet pet sub],
13
14
 
14
- month_names: %w[
15
- januar februar mart april maj juni juli avgust septembar oktobar
16
- novembar decembar
17
- ],
18
- month_abbrs: %w[jan feb mar apr maj jun jul avg sep okt nov dec],
15
+ month_names: %w[
16
+ januar februar mart april maj juni juli avgust septembar oktobar
17
+ novembar decembar
18
+ ],
19
+ month_abbrs: %w[jan feb mar apr maj jun jul avg sep okt nov dec],
19
20
 
20
- date_format: '%d.%m.%Y',
21
- full_format: '%-d. %B',
21
+ date_format: '%d.%m.%Y',
22
+ full_format: '%-d. %B',
22
23
 
23
- number_decimal: ',',
24
- number_group: '.'
24
+ number_decimal: ',',
25
+ number_group: '.'
26
+ )
25
27
 
26
28
  def pluralize(number)
27
29
  if number.zero?
28
30
  0
29
31
  elsif number == 1
30
32
  1
31
- elsif number >= 2 && number <= 4
33
+ elsif number.between? 2, 4
32
34
  2
33
35
  else
34
36
  'n'
@@ -3,25 +3,10 @@
3
3
  module R18n
4
4
  module Locales
5
5
  # Swedish (Sweden) locale
6
- class SvSE < Locale
6
+ class SvSE < Sv
7
7
  set(
8
- title: 'Svenska',
9
- sublocales: %w[sv en],
10
-
11
- wday_names: %w[söndag måndag tisdag onsdag torsdag fredag lördag],
12
- wday_abbrs: %w[sön mån tis ons tor fre lör],
13
-
14
- month_names: %w[
15
- januari februari mars april maj juni juli augusti september oktober
16
- november december
17
- ],
18
- month_abbrs: %w[jan feb mar apr maj jun jul aug okt nov dec],
19
-
20
- date_format: '%Y-%m-%d',
21
- full_format: '%-d %B %Y',
22
-
23
- number_decimal: ',',
24
- number_group: '.'
8
+ title: 'Svenska (Sverige)',
9
+ sublocales: %w[sv]
25
10
  )
26
11
  end
27
12
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R18n
4
+ module Locales
5
+ # Swedish locale
6
+ class Sv < Locale
7
+ set(
8
+ title: 'Svenska',
9
+ sublocales: %w[sv-SE],
10
+
11
+ wday_names: %w[söndag måndag tisdag onsdag torsdag fredag lördag],
12
+ wday_abbrs: %w[sön mån tis ons tor fre lör],
13
+
14
+ month_names: %w[
15
+ januari februari mars april maj juni juli augusti september oktober
16
+ november december
17
+ ],
18
+ month_abbrs: %w[jan feb mar apr maj jun jul aug okt nov dec],
19
+
20
+ date_format: '%Y-%m-%d',
21
+ full_format: '%-d %B',
22
+
23
+ number_decimal: ',',
24
+ number_group: '.'
25
+ )
26
+ end
27
+ end
28
+ end
@@ -34,7 +34,7 @@ module R18n
34
34
 
35
35
  def strftime(time, format)
36
36
  year = (time.year + 543).to_s
37
- super(time, format.gsub('%Y', year).gsub('%y', year[-2..-1]))
37
+ super(time, format.gsub('%Y', year).gsub('%y', year[-2..]))
38
38
  end
39
39
  end
40
40
  end
@@ -77,10 +77,10 @@ module R18n
77
77
  # translation :title, methods: { ru: :russian, en: :english}
78
78
  module Translated
79
79
  class << self
80
- def included(base) #:nodoc:
80
+ def included(base)
81
81
  base.send :extend, Base
82
- base.instance_variable_set '@unlocalized_getters', {}
83
- base.instance_variable_set '@unlocalized_setters', {}
82
+ base.instance_variable_set :@unlocalized_getters, {}
83
+ base.instance_variable_set :@unlocalized_setters, {}
84
84
  end
85
85
  end
86
86
 
@@ -112,10 +112,10 @@ module R18n
112
112
  def translation(name, options = {})
113
113
  if options[:methods]
114
114
  @unlocalized_getters[name] =
115
- options[:methods].map { |l, i| [l.to_s, i.to_s] }.to_h
115
+ options[:methods].to_h { |l, i| [l.to_s, i.to_s] }
116
116
  unless options[:no_write]
117
117
  @unlocalized_setters[name] =
118
- options[:methods].map { |l, i| [l.to_s, "#{i}="] }.to_h
118
+ options[:methods].to_h { |l, i| [l.to_s, "#{i}="] }
119
119
  end
120
120
  end
121
121
 
@@ -155,7 +155,7 @@ module R18n
155
155
 
156
156
  return if options[:no_write]
157
157
 
158
- define_method "#{name}=" do |*params|
158
+ define_method :"#{name}=" do |*params|
159
159
  unlocalized = self.class.unlocalized_setters(name)
160
160
  r18n.locales.each do |locale|
161
161
  code = locale.code
@@ -179,7 +179,7 @@ module R18n
179
179
  matcher = Regexp.new("^#{Regexp.escape(method.to_s)}_(\\w+)$")
180
180
  unless @unlocalized_getters.key? method
181
181
  @unlocalized_getters[method] = {}
182
- unlocalized_methods.select { |i| i =~ matcher }.each do |i|
182
+ unlocalized_methods.grep(matcher).each do |i|
183
183
  @unlocalized_getters[method][i.to_s.match(matcher)[1]] = i.to_s
184
184
  end
185
185
  end
@@ -193,7 +193,7 @@ module R18n
193
193
  matcher = Regexp.new("^#{Regexp.escape(method.to_s)}_(\\w+)=$")
194
194
  unless @unlocalized_setters.key? method
195
195
  @unlocalized_setters[method] = {}
196
- unlocalized_methods.select { |i| i =~ matcher }.each do |i|
196
+ unlocalized_methods.grep(matcher).each do |i|
197
197
  @unlocalized_setters[method][i.to_s.match(matcher)[1]] = i.to_s
198
198
  end
199
199
  end
@@ -88,10 +88,10 @@ module R18n
88
88
  when Hash
89
89
  value = Translation.new(
90
90
  @locale, path,
91
- locale: locale, translations: value, filters: @filters
91
+ locale:, translations: value, filters: @filters
92
92
  )
93
93
  when String
94
- c = { locale: locale, path: path }
94
+ c = { locale:, path: }
95
95
  v = @filters.process_string(:passive, value, c, [])
96
96
  value = TranslatedString.new(v, locale, path, @filters)
97
97
  when Typed
@@ -61,10 +61,10 @@ module R18n
61
61
  @base.public_send(name, *params)
62
62
  end
63
63
 
64
- def respond_to_missing?(name, *args)
64
+ def respond_to_missing?(name, *)
65
65
  return super unless @base
66
66
 
67
- @base.send __method__, name, *args
67
+ @base.send(__method__, name, *)
68
68
  end
69
69
  end
70
70
  end
@@ -45,7 +45,7 @@ module R18n
45
45
 
46
46
  def self.underscore(string)
47
47
  string
48
- .gsub(/::/, '/')
48
+ .gsub('::', '/')
49
49
  .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
50
50
  .gsub(/([a-z\d])([A-Z])/, '\1_\2')
51
51
  .tr('-', '_')
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Version of R18n Core
4
4
  module R18n
5
- VERSION = '5.0.1'
5
+ VERSION = '6.0.0'
6
6
  end
@@ -55,17 +55,17 @@ module R18n
55
55
  initialize_types
56
56
 
57
57
  translations = {}
58
- Dir.glob(
59
- File.join(@dir, "**/#{locale.code}.#{FILE_EXT}"), File::FNM_CASEFOLD
60
- ).each do |i|
61
- Utils.deep_merge!(translations, ::YAML.load_file(i) || {})
62
- end
58
+ Dir.glob(File.join(@dir, "**/*.#{FILE_EXT}"))
59
+ .select { |file| File.basename(file, '.*').casecmp? locale.code }
60
+ .each do |i|
61
+ Utils.deep_merge!(translations, ::YAML.load_file(i) || {})
62
+ end
63
63
  transform(translations)
64
64
  end
65
65
 
66
66
  # YAML loader with same `dir` will be have same `hash`.
67
67
  def hash
68
- self.class.hash + @dir.hash
68
+ [self.class, @dir].hash
69
69
  end
70
70
 
71
71
  # Is another `loader` load YAML translations from same `dir`.
metadata CHANGED
@@ -1,190 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r18n-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Sitnik
8
8
  - Alexander Popov
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2021-03-03 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: activesupport
14
+ name: bigdecimal
16
15
  requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: '5'
21
- - - "<"
22
- - !ruby/object:Gem::Version
23
- version: '7'
24
- type: :development
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- version: '5'
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: '7'
34
- - !ruby/object:Gem::Dependency
35
- name: kramdown
36
- requirement: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.3'
41
- type: :development
42
- prerelease: false
43
- version_requirements: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.3'
48
- - !ruby/object:Gem::Dependency
49
- name: pry-byebug
50
- requirement: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.9'
55
- type: :development
56
- prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.9'
62
- - !ruby/object:Gem::Dependency
63
- name: RedCloth
64
- requirement: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '4.3'
69
- type: :development
70
- prerelease: false
71
- version_requirements: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '4.3'
76
- - !ruby/object:Gem::Dependency
77
- name: gem_toys
78
- requirement: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.7.1
83
- type: :development
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.7.1
90
- - !ruby/object:Gem::Dependency
91
- name: toys
92
- requirement: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.11.0
97
- type: :development
98
- prerelease: false
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.11.0
104
- - !ruby/object:Gem::Dependency
105
- name: rubocop
106
- requirement: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.6'
111
- type: :development
112
- prerelease: false
113
- version_requirements: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '1.6'
118
- - !ruby/object:Gem::Dependency
119
- name: rubocop-performance
120
- requirement: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '1.9'
125
- type: :development
126
- prerelease: false
127
- version_requirements: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1.9'
132
- - !ruby/object:Gem::Dependency
133
- name: rubocop-rake
134
- requirement: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 0.5.1
139
- type: :development
140
- prerelease: false
141
- version_requirements: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 0.5.1
146
- - !ruby/object:Gem::Dependency
147
- name: codecov
148
- requirement: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 0.5.0
153
- type: :development
154
- prerelease: false
155
- version_requirements: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: 0.5.0
160
- - !ruby/object:Gem::Dependency
161
- name: rspec
162
- requirement: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: '3.10'
167
- type: :development
168
- prerelease: false
169
- version_requirements: !ruby/object:Gem::Requirement
170
16
  requirements:
171
17
  - - "~>"
172
18
  - !ruby/object:Gem::Version
173
- version: '3.10'
174
- - !ruby/object:Gem::Dependency
175
- name: simplecov
176
- requirement: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: 0.21.0
181
- type: :development
19
+ version: '4.0'
20
+ type: :runtime
182
21
  prerelease: false
183
22
  version_requirements: !ruby/object:Gem::Requirement
184
23
  requirements:
185
24
  - - "~>"
186
25
  - !ruby/object:Gem::Version
187
- version: 0.21.0
26
+ version: '4.0'
188
27
  description: |2
189
28
  R18n is a i18n tool to translate your Ruby application.
190
29
  It has nice Ruby-style syntax, filters, flexible locales, custom loaders,
@@ -197,13 +36,14 @@ email:
197
36
  executables: []
198
37
  extensions: []
199
38
  extra_rdoc_files:
200
- - README.md
201
39
  - LICENSE
40
+ - README.md
202
41
  files:
203
42
  - ChangeLog.md
204
43
  - LICENSE
205
44
  - README.md
206
45
  - base/af.yml
46
+ - base/ar.yml
207
47
  - base/az.yml
208
48
  - base/bg.yml
209
49
  - base/ca.yml
@@ -247,6 +87,7 @@ files:
247
87
  - lib/r18n-core/i18n.rb
248
88
  - lib/r18n-core/locale.rb
249
89
  - lib/r18n-core/locales/af.rb
90
+ - lib/r18n-core/locales/ar.rb
250
91
  - lib/r18n-core/locales/az.rb
251
92
  - lib/r18n-core/locales/bg.rb
252
93
  - lib/r18n-core/locales/ca.rb
@@ -285,6 +126,7 @@ files:
285
126
  - lib/r18n-core/locales/sk.rb
286
127
  - lib/r18n-core/locales/sr-latn.rb
287
128
  - lib/r18n-core/locales/sv-se.rb
129
+ - lib/r18n-core/locales/sv.rb
288
130
  - lib/r18n-core/locales/th.rb
289
131
  - lib/r18n-core/locales/tr.rb
290
132
  - lib/r18n-core/locales/uk.rb
@@ -305,12 +147,12 @@ homepage: https://github.com/r18n/r18n-core
305
147
  licenses:
306
148
  - LGPL-3.0
307
149
  metadata:
150
+ rubygems_mfa_required: 'true'
308
151
  bug_tracker_uri: https://github.com/r18n/r18n-core/issues
309
- changelog_uri: https://github.com/r18n/r18n-core/blob/5.0.1/ChangeLog.md
310
- documentation_uri: http://www.rubydoc.info/gems/r18n-core/5.0.1
152
+ changelog_uri: https://github.com/r18n/r18n-core/blob/6.0.0/ChangeLog.md
153
+ documentation_uri: http://www.rubydoc.info/gems/r18n-core/6.0.0
311
154
  homepage_uri: https://github.com/r18n/r18n-core
312
155
  source_code_uri: https://github.com/r18n/r18n-core
313
- post_install_message:
314
156
  rdoc_options: []
315
157
  require_paths:
316
158
  - lib
@@ -318,18 +160,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
318
160
  requirements:
319
161
  - - ">="
320
162
  - !ruby/object:Gem::Version
321
- version: '2.5'
163
+ version: '3.2'
322
164
  - - "<"
323
165
  - !ruby/object:Gem::Version
324
- version: '4'
166
+ version: '5'
325
167
  required_rubygems_version: !ruby/object:Gem::Requirement
326
168
  requirements:
327
169
  - - ">="
328
170
  - !ruby/object:Gem::Version
329
171
  version: '0'
330
172
  requirements: []
331
- rubygems_version: 3.2.3
332
- signing_key:
173
+ rubygems_version: 4.0.3
333
174
  specification_version: 4
334
175
  summary: I18n tool to translate your Ruby application.
335
176
  test_files: []