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 +4 -4
- data/ChangeLog.md +16 -1
- data/README.md +3 -3
- data/base/ar.yml +49 -0
- data/lib/r18n-core/filter_list.rb +1 -1
- data/lib/r18n-core/filters.rb +16 -14
- data/lib/r18n-core/i18n.rb +5 -6
- data/lib/r18n-core/locale.rb +19 -18
- data/lib/r18n-core/locales/ar.rb +60 -0
- data/lib/r18n-core/locales/en-au.rb +4 -2
- data/lib/r18n-core/locales/fr.rb +2 -2
- data/lib/r18n-core/locales/hr.rb +1 -1
- data/lib/r18n-core/locales/it.rb +2 -2
- data/lib/r18n-core/locales/no.rb +1 -0
- data/lib/r18n-core/locales/sr-latn.rb +17 -15
- data/lib/r18n-core/locales/sv-se.rb +3 -18
- data/lib/r18n-core/locales/sv.rb +28 -0
- data/lib/r18n-core/locales/th.rb +1 -1
- data/lib/r18n-core/translated.rb +8 -8
- data/lib/r18n-core/translation.rb +2 -2
- data/lib/r18n-core/unsupported_locale.rb +2 -2
- data/lib/r18n-core/utils.rb +1 -1
- data/lib/r18n-core/version.rb +1 -1
- data/lib/r18n-core/yaml_loader.rb +6 -6
- metadata +16 -175
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9a70423b9d4f45d06434544ee5d87f18d4348779069102a7f910fe3f72c2fdff
|
|
4
|
+
data.tar.gz: fb2a462897eeff23bcdf055513a15b5d79d392365f9a087e51d9d3d8849e8396
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
+
## 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
|
[](https://cirrus-ci.com/github/r18n/r18n-core)
|
|
4
|
-
[](https://codecov.io/gh/r18n/r18n-core)
|
|
5
5
|
[](https://codeclimate.com/github/r18n/r18n-core)
|
|
6
6
|
[](https://depfu.com/repos/github/r18n/r18n-core)
|
|
7
7
|
[](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/
|
|
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
|
|
26
|
+
config = { locale:, path: }
|
|
27
27
|
|
|
28
28
|
enabled(filters_type, type).each do |filter|
|
|
29
29
|
value = filter.call(value, config, *params)
|
data/lib/r18n-core/filters.rb
CHANGED
|
@@ -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(&
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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
|
|
253
|
+
cached_params[i] = param
|
|
253
254
|
end
|
|
254
|
-
|
|
255
|
+
|
|
256
|
+
cached_params[i]
|
|
255
257
|
end
|
|
256
258
|
end
|
|
257
259
|
|
data/lib/r18n-core/i18n.rb
CHANGED
|
@@ -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.
|
|
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.
|
|
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, **
|
|
267
|
-
locale.localize(object, format, i18n: self, **
|
|
265
|
+
def localize(object, format = nil, **)
|
|
266
|
+
locale.localize(object, format, i18n: self, **)
|
|
268
267
|
end
|
|
269
268
|
alias l localize
|
|
270
269
|
|
data/lib/r18n-core/locale.rb
CHANGED
|
@@ -87,13 +87,12 @@ module R18n
|
|
|
87
87
|
name = capitalize(code)
|
|
88
88
|
return unless name
|
|
89
89
|
|
|
90
|
-
@loaded[code] ||=
|
|
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
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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:
|
|
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,
|
|
284
|
-
format_time(format_date_standard(time), time,
|
|
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, **
|
|
290
|
-
format_time(format_date_full(time, **
|
|
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
|
data/lib/r18n-core/locales/fr.rb
CHANGED
data/lib/r18n-core/locales/hr.rb
CHANGED
data/lib/r18n-core/locales/it.rb
CHANGED
data/lib/r18n-core/locales/no.rb
CHANGED
|
@@ -4,31 +4,33 @@ module R18n
|
|
|
4
4
|
module Locales
|
|
5
5
|
# Serbian Latin locale
|
|
6
6
|
class SrLatn < Locale
|
|
7
|
-
set
|
|
8
|
-
|
|
7
|
+
set(
|
|
8
|
+
title: 'Srpski',
|
|
9
|
+
sublocales: [],
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
21
|
-
|
|
21
|
+
date_format: '%d.%m.%Y',
|
|
22
|
+
full_format: '%-d. %B',
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
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 <
|
|
6
|
+
class SvSE < Sv
|
|
7
7
|
set(
|
|
8
|
-
title: 'Svenska',
|
|
9
|
-
sublocales: %w[sv
|
|
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
|
data/lib/r18n-core/locales/th.rb
CHANGED
data/lib/r18n-core/translated.rb
CHANGED
|
@@ -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)
|
|
80
|
+
def included(base)
|
|
81
81
|
base.send :extend, Base
|
|
82
|
-
base.instance_variable_set
|
|
83
|
-
base.instance_variable_set
|
|
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].
|
|
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].
|
|
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.
|
|
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.
|
|
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
|
|
91
|
+
locale:, translations: value, filters: @filters
|
|
92
92
|
)
|
|
93
93
|
when String
|
|
94
|
-
c = { locale
|
|
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, *
|
|
64
|
+
def respond_to_missing?(name, *)
|
|
65
65
|
return super unless @base
|
|
66
66
|
|
|
67
|
-
@base.send
|
|
67
|
+
@base.send(__method__, name, *)
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
end
|
data/lib/r18n-core/utils.rb
CHANGED
data/lib/r18n-core/version.rb
CHANGED
|
@@ -55,17 +55,17 @@ module R18n
|
|
|
55
55
|
initialize_types
|
|
56
56
|
|
|
57
57
|
translations = {}
|
|
58
|
-
Dir.glob(
|
|
59
|
-
File.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
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:
|
|
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:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
|
-
name:
|
|
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: '
|
|
174
|
-
|
|
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:
|
|
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/
|
|
310
|
-
documentation_uri: http://www.rubydoc.info/gems/r18n-core/
|
|
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
|
|
163
|
+
version: '3.2'
|
|
322
164
|
- - "<"
|
|
323
165
|
- !ruby/object:Gem::Version
|
|
324
|
-
version: '
|
|
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:
|
|
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: []
|