i18n-js 3.8.4 → 3.9.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 +10 -1
- data/README.md +11 -0
- data/lib/i18n/js.rb +12 -2
- data/lib/i18n/js/segment.rb +1 -1
- data/lib/i18n/js/version.rb +1 -1
- data/spec/fixtures/js_available_locales_custom.yml +1 -0
- data/spec/ruby/i18n/js_spec.rb +72 -23
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08599ed12ef6edb132d1a71b74e5ca2f3b3c04dc4463286414540f4631676984'
|
4
|
+
data.tar.gz: 3dd94b7a9974952a5cb7996c222d1aaeb3e5c756cc811a8890e4d5fa79ffccb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26138b1fafc184b7858a97969130f29f9562cdaab41d1f05c1e31a37064a2f40a31b4d0a349e12ddaa6f769ab229618a854efaee0102f99821edd489b9d1deb5
|
7
|
+
data.tar.gz: d763f7ebe8d1bba649c521bba03fa7fb77e4283b90ce6f1a1bb78ebf22dc7146f4e2eb02484f7d9f104d4d5454d90d0622af14128c6b383cd399e52aabaaf08b
|
data/CHANGELOG.md
CHANGED
@@ -18,6 +18,14 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
18
18
|
- Nothing
|
19
19
|
|
20
20
|
|
21
|
+
## [3.9.0]
|
22
|
+
|
23
|
+
### Added
|
24
|
+
|
25
|
+
- [Ruby] Allow to set custom locales instead of using only `I18n.available_locales`.
|
26
|
+
(PR: https://github.com/fnando/i18n-js/pull/617)
|
27
|
+
|
28
|
+
|
21
29
|
## [3.8.4]
|
22
30
|
|
23
31
|
### Fixed
|
@@ -509,7 +517,8 @@ And today is not April Fools' Day
|
|
509
517
|
|
510
518
|
|
511
519
|
|
512
|
-
[Unreleased]: https://github.com/fnando/i18n-js/compare/v3.
|
520
|
+
[Unreleased]: https://github.com/fnando/i18n-js/compare/v3.9.0...HEAD
|
521
|
+
[3.9.0]: https://github.com/fnando/i18n-js/compare/v3.8.4...v3.9.0
|
513
522
|
[3.8.4]: https://github.com/fnando/i18n-js/compare/v3.8.3...v3.8.4
|
514
523
|
[3.8.3]: https://github.com/fnando/i18n-js/compare/v3.8.2...v3.8.3
|
515
524
|
[3.8.2]: https://github.com/fnando/i18n-js/compare/v3.8.1...v3.8.2
|
data/README.md
CHANGED
@@ -271,6 +271,17 @@ You must disable this feature by setting the option to `false`.
|
|
271
271
|
To find more examples on how to use the configuration file please refer to the
|
272
272
|
tests.
|
273
273
|
|
274
|
+
#### Available locales
|
275
|
+
|
276
|
+
By specifying option `js_available_locales` with a list of locales, this list
|
277
|
+
would be used instead of default `I18n.available_locales` to generate translations.
|
278
|
+
|
279
|
+
Example:
|
280
|
+
|
281
|
+
```yaml
|
282
|
+
js_available_locales: ["de", "en"]
|
283
|
+
```
|
284
|
+
|
274
285
|
#### Namespace
|
275
286
|
|
276
287
|
Setting the `namespace` option will change the namespace of the output
|
data/lib/i18n/js.rb
CHANGED
@@ -81,7 +81,7 @@ module I18n
|
|
81
81
|
|
82
82
|
# deep_merge! given result with result for fallback locale
|
83
83
|
def self.merge_with_fallbacks!(result)
|
84
|
-
|
84
|
+
js_available_locales.each do |locale|
|
85
85
|
fallback_locales = FallbackLocales.new(fallbacks, locale)
|
86
86
|
fallback_locales.each do |fallback_locale|
|
87
87
|
# `result[fallback_locale]` could be missing
|
@@ -183,7 +183,7 @@ module I18n
|
|
183
183
|
#
|
184
184
|
# So the input is wrapped by our class for better `#slice`
|
185
185
|
Private::HashWithSymbolKeys.new(translations).
|
186
|
-
slice(*::I18n.
|
186
|
+
slice(*::I18n::JS.js_available_locales).
|
187
187
|
to_h
|
188
188
|
end
|
189
189
|
end
|
@@ -213,6 +213,16 @@ module I18n
|
|
213
213
|
end
|
214
214
|
end
|
215
215
|
|
216
|
+
# Get all available locales.
|
217
|
+
#
|
218
|
+
# @return [Array<Symbol>] the locales.
|
219
|
+
def self.js_available_locales
|
220
|
+
config.fetch(:js_available_locales) do
|
221
|
+
# default value
|
222
|
+
I18n.available_locales
|
223
|
+
end.map(&:to_sym)
|
224
|
+
end
|
225
|
+
|
216
226
|
def self.sort_translation_keys?
|
217
227
|
@sort_translation_keys ||= (config[:sort_translation_keys]) if config.key?(:sort_translation_keys)
|
218
228
|
@sort_translation_keys = true if @sort_translation_keys.nil?
|
data/lib/i18n/js/segment.rb
CHANGED
@@ -33,7 +33,7 @@ module I18n
|
|
33
33
|
# Saves JSON file containing translations
|
34
34
|
def save!
|
35
35
|
if @file =~ LOCALE_INTERPOLATOR
|
36
|
-
I18n.
|
36
|
+
I18n::JS.js_available_locales.each do |locale|
|
37
37
|
write_file(file_for_locale(locale), @translations.slice(locale))
|
38
38
|
end
|
39
39
|
else
|
data/lib/i18n/js/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
js_available_locales: ["en", "foo"]
|
data/spec/ruby/i18n/js_spec.rb
CHANGED
@@ -307,21 +307,30 @@ EOS
|
|
307
307
|
expect(subject[:de][:null_test]).to eql(nil)
|
308
308
|
end
|
309
309
|
|
310
|
-
context
|
310
|
+
context 'when given locale is in `I18n.available_locales` but its translation is missing' do
|
311
311
|
subject { translations[:fr][:fallback_test] }
|
312
312
|
|
313
|
-
let(:
|
314
|
-
|
315
|
-
let!(:new_available_locales) { I18n.config.available_locales + [new_locale] }
|
313
|
+
let(:available_locales) { %i[fr pirate] }
|
314
|
+
|
316
315
|
before do
|
317
|
-
I18n.
|
318
|
-
set_config
|
316
|
+
allow(::I18n).to receive(:available_locales).and_return(available_locales)
|
317
|
+
set_config 'js_file_per_locale_with_fallbacks_as_locale_without_fallback_translations.yml'
|
319
318
|
end
|
320
|
-
|
321
|
-
|
319
|
+
|
320
|
+
it { should eql(nil) }
|
321
|
+
end
|
322
|
+
|
323
|
+
context 'when given locale is in `.js_available_locales` but its translation is missing' do
|
324
|
+
subject { translations[:fr][:fallback_test] }
|
325
|
+
|
326
|
+
let(:available_locales) { %i[fr pirate] }
|
327
|
+
|
328
|
+
before do
|
329
|
+
allow(described_class).to receive(:js_available_locales).and_return(available_locales)
|
330
|
+
set_config 'js_file_per_locale_with_fallbacks_as_locale_without_fallback_translations.yml'
|
322
331
|
end
|
323
332
|
|
324
|
-
it {should eql(nil)}
|
333
|
+
it { should eql(nil) }
|
325
334
|
end
|
326
335
|
|
327
336
|
context "with I18n::Fallbacks enabled" do
|
@@ -385,27 +394,67 @@ EOS
|
|
385
394
|
end
|
386
395
|
end
|
387
396
|
|
388
|
-
|
397
|
+
describe '.js_available_locales' do
|
398
|
+
subject { described_class.js_available_locales }
|
399
|
+
|
400
|
+
let(:results) { described_class.scoped_translations('*.admin.*.title') }
|
401
|
+
let(:result) { ->(locale) { results[locale][:admin][:show][:title] } }
|
389
402
|
|
390
|
-
context
|
391
|
-
it
|
392
|
-
result = I18n::JS.scoped_translations("*.admin.*.title")
|
403
|
+
context 'when I18n.available_locales is not set' do
|
404
|
+
it { expect(subject).to eq ::I18n.available_locales }
|
393
405
|
|
394
|
-
|
395
|
-
expect(result
|
396
|
-
expect(result
|
406
|
+
it 'should allow all locales' do
|
407
|
+
expect(result.call(:en)).to eql('Show')
|
408
|
+
expect(result.call(:fr)).to eql('Visualiser')
|
409
|
+
expect(result.call(:ja)).to eql('Ignore me')
|
397
410
|
end
|
398
411
|
end
|
399
412
|
|
400
|
-
context
|
401
|
-
|
413
|
+
context 'when I18n.available_locales is set' do
|
414
|
+
let(:available_locales) { %i[en fr] }
|
415
|
+
|
416
|
+
before { allow(::I18n).to receive(:available_locales).and_return(available_locales) }
|
417
|
+
|
418
|
+
it { expect(subject).to eq available_locales }
|
419
|
+
|
420
|
+
it 'should ignore non-valid locales' do
|
421
|
+
expect(result.call(:en)).to eql('Show')
|
422
|
+
expect(result.call(:fr)).to eql('Visualiser')
|
423
|
+
expect(results).not_to include(:ja)
|
424
|
+
end
|
425
|
+
|
426
|
+
context 'when :js_available_locales set in config' do
|
427
|
+
before { set_config 'js_available_locales_custom.yml' }
|
402
428
|
|
403
|
-
|
404
|
-
|
429
|
+
it { expect(subject).to eq %i[en foo] }
|
430
|
+
|
431
|
+
it 'should ignore non-valid locales' do
|
432
|
+
expect(result.call(:en)).to eql('Show')
|
433
|
+
expect(results).not_to include(:fr, :ja)
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
context 'I18n.available_locales' do
|
440
|
+
let(:results) { described_class.scoped_translations('*.admin.*.title') }
|
441
|
+
let(:result) { ->(locale) { results[locale][:admin][:show][:title] } }
|
442
|
+
|
443
|
+
context 'when I18n.available_locales is not set' do
|
444
|
+
it 'should allow all locales' do
|
445
|
+
expect(result.call(:en)).to eql('Show')
|
446
|
+
expect(result.call(:fr)).to eql('Visualiser')
|
447
|
+
expect(result.call(:ja)).to eql('Ignore me')
|
448
|
+
end
|
449
|
+
end
|
450
|
+
|
451
|
+
context 'when I18n.available_locales is set' do
|
452
|
+
before { allow(::I18n).to receive(:available_locales){ [:en, :fr] } }
|
405
453
|
|
406
|
-
|
407
|
-
expect(result
|
408
|
-
expect(result.
|
454
|
+
it 'should ignore non-valid locales' do
|
455
|
+
expect(result.call(:en)).to eql('Show')
|
456
|
+
expect(result.call(:fr)).to eql('Visualiser')
|
457
|
+
expect(results).not_to include(:ja)
|
409
458
|
end
|
410
459
|
end
|
411
460
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n-js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- spec/fixtures/default.yml
|
153
153
|
- spec/fixtures/erb.yml
|
154
154
|
- spec/fixtures/except_condition.yml
|
155
|
+
- spec/fixtures/js_available_locales_custom.yml
|
155
156
|
- spec/fixtures/js_export_dir_custom.yml
|
156
157
|
- spec/fixtures/js_export_dir_none.yml
|
157
158
|
- spec/fixtures/js_extend_parent.yml
|
@@ -236,6 +237,7 @@ test_files:
|
|
236
237
|
- spec/fixtures/default.yml
|
237
238
|
- spec/fixtures/erb.yml
|
238
239
|
- spec/fixtures/except_condition.yml
|
240
|
+
- spec/fixtures/js_available_locales_custom.yml
|
239
241
|
- spec/fixtures/js_export_dir_custom.yml
|
240
242
|
- spec/fixtures/js_export_dir_none.yml
|
241
243
|
- spec/fixtures/js_extend_parent.yml
|