i18n-js 3.8.4 → 3.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.editorconfig +1 -1
- data/.github/workflows/tests.yaml +6 -0
- data/Appraisals +8 -0
- data/CHANGELOG.md +31 -4
- data/README.md +29 -16
- data/app/assets/javascripts/i18n/shims.js +3 -3
- data/app/assets/javascripts/i18n.js +8 -8
- data/gemfiles/i18n_1_10.gemfile +7 -0
- data/gemfiles/i18n_1_9.gemfile +7 -0
- data/i18n-js.gemspec +1 -1
- data/lib/i18n/js/dependencies.rb +6 -2
- data/lib/i18n/js/engine.rb +1 -1
- data/lib/i18n/js/segment.rb +1 -1
- data/lib/i18n/js/utils.rb +1 -1
- data/lib/i18n/js/version.rb +1 -1
- data/lib/i18n/js.rb +12 -2
- data/package.json +1 -1
- data/spec/fixtures/js_available_locales_custom.yml +1 -0
- data/spec/js/pluralization.spec.js +9 -0
- data/spec/js/require.js +4 -4
- data/spec/ruby/i18n/js_spec.rb +72 -23
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d3a003954d81c9cbb7c2f18791ed8baf068f3fbbe6587ce59cd893b7852d1f2
|
4
|
+
data.tar.gz: d9fcb2bf3de34987021c2ac556ae65bcecbdfe6cbb638455d6e7919e03268d8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07b6670d05343e82e44041379917a56ee72b185b1bfdcceefe6ae8eae9a1eece1852db7a378eaf8a38f5769ec76587737b200bfb22e50444a02e14bbb4b78793
|
7
|
+
data.tar.gz: afe058283a6af31ab843ba2c0da1f1949d37623a3e0823c786cb947b252eac51ffc25c4f856c01e9e1ec87546dd31dddf4705e1f6b5597a3edd02e950e674ed2
|
data/.editorconfig
CHANGED
@@ -4,11 +4,13 @@ on:
|
|
4
4
|
pull_request:
|
5
5
|
branches:
|
6
6
|
- main
|
7
|
+
- v3
|
7
8
|
paths-ignore:
|
8
9
|
- 'README.md'
|
9
10
|
push:
|
10
11
|
branches:
|
11
12
|
- main
|
13
|
+
- v3
|
12
14
|
paths-ignore:
|
13
15
|
- 'README.md'
|
14
16
|
|
@@ -26,6 +28,8 @@ jobs:
|
|
26
28
|
- 2.5
|
27
29
|
- 2.6
|
28
30
|
- 2.7
|
31
|
+
- '3.0'
|
32
|
+
- 3.1
|
29
33
|
gemfile:
|
30
34
|
- gemfiles/i18n_0_6.gemfile
|
31
35
|
- gemfiles/i18n_0_7.gemfile
|
@@ -40,6 +44,8 @@ jobs:
|
|
40
44
|
- gemfiles/i18n_1_6.gemfile
|
41
45
|
- gemfiles/i18n_1_7.gemfile
|
42
46
|
- gemfiles/i18n_1_8.gemfile
|
47
|
+
- gemfiles/i18n_1_9.gemfile
|
48
|
+
- gemfiles/i18n_1_10.gemfile
|
43
49
|
allow_failures:
|
44
50
|
- false
|
45
51
|
include:
|
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
|
-
This project adheres to [Semantic Versioning](
|
3
|
+
This project adheres to [Semantic Versioning](https://semver.org/).
|
4
4
|
|
5
5
|
|
6
6
|
## [Unreleased]
|
@@ -18,7 +18,31 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
18
18
|
- Nothing
|
19
19
|
|
20
20
|
|
21
|
-
## [3.
|
21
|
+
## [3.9.2] - 2022-03-31
|
22
|
+
|
23
|
+
### Fixed
|
24
|
+
|
25
|
+
- [JS] Fix pluralization fallback in i18n.js
|
26
|
+
(PR: https://github.com/fnando/i18n-js/pull/645)
|
27
|
+
|
28
|
+
|
29
|
+
## [3.9.1] - 2022-02-08
|
30
|
+
|
31
|
+
### Changed
|
32
|
+
|
33
|
+
- [Ruby] Allow rails 7
|
34
|
+
(PR: https://github.com/fnando/i18n-js/pull/638)
|
35
|
+
|
36
|
+
|
37
|
+
## [3.9.0] - 2021-07-30
|
38
|
+
|
39
|
+
### Added
|
40
|
+
|
41
|
+
- [Ruby] Allow to set custom locales instead of using only `I18n.available_locales`.
|
42
|
+
(PR: https://github.com/fnando/i18n-js/pull/617)
|
43
|
+
|
44
|
+
|
45
|
+
## [3.8.4] - 2021-07-27
|
22
46
|
|
23
47
|
### Fixed
|
24
48
|
|
@@ -26,7 +50,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
26
50
|
(PR: https://github.com/fnando/i18n-js/pull/591)
|
27
51
|
|
28
52
|
|
29
|
-
## [3.8.3]
|
53
|
+
## [3.8.3] - 2021-05-21
|
30
54
|
|
31
55
|
### Changed
|
32
56
|
|
@@ -509,7 +533,10 @@ And today is not April Fools' Day
|
|
509
533
|
|
510
534
|
|
511
535
|
|
512
|
-
[Unreleased]: https://github.com/fnando/i18n-js/compare/v3.
|
536
|
+
[Unreleased]: https://github.com/fnando/i18n-js/compare/v3.9.2...HEAD
|
537
|
+
[3.9.2]: https://github.com/fnando/i18n-js/compare/v3.9.1...v3.9.2
|
538
|
+
[3.9.1]: https://github.com/fnando/i18n-js/compare/v3.9.0...v3.9.1
|
539
|
+
[3.9.0]: https://github.com/fnando/i18n-js/compare/v3.8.4...v3.9.0
|
513
540
|
[3.8.4]: https://github.com/fnando/i18n-js/compare/v3.8.3...v3.8.4
|
514
541
|
[3.8.3]: https://github.com/fnando/i18n-js/compare/v3.8.2...v3.8.3
|
515
542
|
[3.8.2]: https://github.com/fnando/i18n-js/compare/v3.8.1...v3.8.2
|
data/README.md
CHANGED
@@ -8,11 +8,10 @@
|
|
8
8
|
|
9
9
|
<p align="center">
|
10
10
|
<a href="https://github.com/fnando/i18n-js/actions?query=workflow%3ATests"><img src="https://github.com/fnando/i18n-js/workflows/Tests/badge.svg" alt="Tests"></a>
|
11
|
-
<a href="
|
11
|
+
<a href="https://badge.fury.io/rb/i18n-js"><img src="https://img.shields.io/gem/v/i18n-js.svg" alt="Gem Version"></a>
|
12
12
|
<a href="https://www.npmjs.com/package/i18n-js"><img src="https://img.shields.io/npm/v/i18n-js.svg" alt="npm"></a>
|
13
13
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
|
14
|
-
<a href="https://
|
15
|
-
<a href="https://coveralls.io/r/fnando/i18n-js"><img src="http://img.shields.io/coveralls/fnando/i18n-js.svg" alt="Coverage Status"></a>
|
14
|
+
<a href="https://coveralls.io/r/fnando/i18n-js"><img src="https://img.shields.io/coveralls/fnando/i18n-js.svg" alt="Coverage Status"></a>
|
16
15
|
<a href="https://gitter.im/fnando/i18n-js"><img src="https://img.shields.io/badge/gitter-join%20chat-1dce73.svg" alt="Gitter"></a>
|
17
16
|
</p>
|
18
17
|
|
@@ -59,10 +58,10 @@ For more details, see:
|
|
59
58
|
- [this gist](https://gist.github.com/bazzel/ecdff4718962e57c2d5569cf01d332fe)
|
60
59
|
- https://github.com/fnando/i18n-js/issues/597
|
61
60
|
|
62
|
-
#### Rails app with [Asset Pipeline](
|
61
|
+
#### Rails app with [Asset Pipeline](https://guides.rubyonrails.org/asset_pipeline.html)
|
63
62
|
|
64
63
|
If you're using the
|
65
|
-
[asset pipeline](
|
64
|
+
[asset pipeline](https://guides.rubyonrails.org/asset_pipeline.html), then you
|
66
65
|
must add the following line to your `app/assets/javascripts/application.js`.
|
67
66
|
|
68
67
|
```javascript
|
@@ -77,7 +76,7 @@ must add the following line to your `app/assets/javascripts/application.js`.
|
|
77
76
|
//= require i18n/translations
|
78
77
|
```
|
79
78
|
|
80
|
-
#### Rails app without [Asset Pipeline](
|
79
|
+
#### Rails app without [Asset Pipeline](https://guides.rubyonrails.org/asset_pipeline.html)
|
81
80
|
|
82
81
|
First, put this in your `application.html` (layout file). Then get the JS files
|
83
82
|
following the instructions below.
|
@@ -271,6 +270,17 @@ You must disable this feature by setting the option to `false`.
|
|
271
270
|
To find more examples on how to use the configuration file please refer to the
|
272
271
|
tests.
|
273
272
|
|
273
|
+
#### Available locales
|
274
|
+
|
275
|
+
By specifying option `js_available_locales` with a list of locales, this list
|
276
|
+
would be used instead of default `I18n.available_locales` to generate translations.
|
277
|
+
|
278
|
+
Example:
|
279
|
+
|
280
|
+
```yaml
|
281
|
+
js_available_locales: ["de", "en"]
|
282
|
+
```
|
283
|
+
|
274
284
|
#### Namespace
|
275
285
|
|
276
286
|
Setting the `namespace` option will change the namespace of the output
|
@@ -976,23 +986,26 @@ more details and discussion of this issue.
|
|
976
986
|
### JS `I18n.toCurrency` & `I18n.toNumber` cannot handle large integers
|
977
987
|
|
978
988
|
The above methods use `toFixed` and it only supports 53 bit integers. Ref:
|
979
|
-
|
989
|
+
https://2ality.com/2012/07/large-integers.html
|
980
990
|
|
981
991
|
Feel free to find & discuss possible solution(s) at issue
|
982
992
|
[#511](https://github.com/fnando/i18n-js/issues/511)
|
983
993
|
|
984
|
-
###
|
994
|
+
### May not work with all backend implementations
|
985
995
|
|
986
|
-
|
987
|
-
|
996
|
+
I18n backend implementations have to conform to a specific interface to work
|
997
|
+
with i18n-js. For backends that do not conform to the interface, you will likely
|
998
|
+
get an exception like this:
|
988
999
|
|
989
1000
|
```
|
990
1001
|
Undefined method 'initialized?' for <your backend class>
|
991
1002
|
```
|
992
1003
|
|
993
|
-
For now, i18n-js is
|
994
|
-
|
995
|
-
|
1004
|
+
For now, i18n-js is compatible with the `Simple` backend and with
|
1005
|
+
`I18n::Backend::ActiveRecord` (>= 0.4.0).
|
1006
|
+
|
1007
|
+
If you need a more sophisticated backend for your rails application that doesn't
|
1008
|
+
implement the required methods, you can setup i18n-js to get translations from a
|
996
1009
|
separate `Simple` backend, by adding the following in an initializer:
|
997
1010
|
|
998
1011
|
```ruby
|
@@ -1031,18 +1044,18 @@ and discussion of this issue.
|
|
1031
1044
|
|
1032
1045
|
## Maintainer
|
1033
1046
|
|
1034
|
-
- Nando Vieira - <
|
1047
|
+
- Nando Vieira - <https://nandovieira.com>
|
1035
1048
|
|
1036
1049
|
## Contributing
|
1037
1050
|
|
1038
1051
|
Once you've made your great commits:
|
1039
1052
|
|
1040
|
-
1. [Fork](
|
1053
|
+
1. [Fork](https://help.github.com/forking/) I18n.js
|
1041
1054
|
2. Create a branch with a clear name
|
1042
1055
|
3. Make your changes (Please also add/change spec, README and CHANGELOG if
|
1043
1056
|
applicable)
|
1044
1057
|
4. Push changes to the created branch
|
1045
|
-
5. [Create an Pull Request](
|
1058
|
+
5. [Create an Pull Request](https://github.com/fnando/i18n-js/pulls)
|
1046
1059
|
6. That's it!
|
1047
1060
|
|
1048
1061
|
Please respect the indentation rules and code style. And use 2 spaces, not tabs.
|
@@ -33,7 +33,7 @@ if (!Array.prototype.indexOf) {
|
|
33
33
|
}
|
34
34
|
|
35
35
|
// Production steps of ECMA-262, Edition 5, 15.4.4.18
|
36
|
-
// Reference:
|
36
|
+
// Reference: https://es5.github.com/#x15.4.4.18
|
37
37
|
// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach
|
38
38
|
if ( !Array.prototype.forEach ) {
|
39
39
|
|
@@ -53,7 +53,7 @@ if ( !Array.prototype.forEach ) {
|
|
53
53
|
var len = O.length >>> 0; // Hack to convert O.length to a UInt32
|
54
54
|
|
55
55
|
// 4. If IsCallable(callback) is false, throw a TypeError exception.
|
56
|
-
// See:
|
56
|
+
// See: https://es5.github.com/#x9.11
|
57
57
|
if ( {}.toString.call(callback) !== "[object Function]" ) {
|
58
58
|
throw new TypeError( callback + " is not a function" );
|
59
59
|
}
|
@@ -139,7 +139,7 @@ if (!Array.prototype.map) {
|
|
139
139
|
var len = O.length >>> 0;
|
140
140
|
|
141
141
|
// 4. If IsCallable(callback) is false, throw a TypeError exception.
|
142
|
-
// See:
|
142
|
+
// See: https://es5.github.com/#x9.11
|
143
143
|
if (typeof callback !== 'function') {
|
144
144
|
throw new TypeError(callback + ' is not a function');
|
145
145
|
}
|
@@ -269,23 +269,23 @@
|
|
269
269
|
}
|
270
270
|
|
271
271
|
// Locale code format 1:
|
272
|
-
// According to RFC4646 (
|
272
|
+
// According to RFC4646 (https://www.ietf.org/rfc/rfc4646.txt)
|
273
273
|
// language codes for Traditional Chinese should be `zh-Hant`
|
274
274
|
//
|
275
275
|
// But due to backward compatibility
|
276
276
|
// We use older version of IETF language tag
|
277
|
-
// @see
|
278
|
-
// @see
|
277
|
+
// @see https://www.w3.org/TR/html401/struct/dirlang.html
|
278
|
+
// @see https://en.wikipedia.org/wiki/IETF_language_tag
|
279
279
|
//
|
280
280
|
// Format: `language-code = primary-code ( "-" subcode )*`
|
281
281
|
//
|
282
282
|
// primary-code uses ISO639-1
|
283
|
-
// @see
|
284
|
-
// @see
|
283
|
+
// @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
284
|
+
// @see https://www.iso.org/iso/home/standards/language_codes.htm
|
285
285
|
//
|
286
286
|
// subcode uses ISO 3166-1 alpha-2
|
287
|
-
// @see
|
288
|
-
// @see
|
287
|
+
// @see https://en.wikipedia.org/wiki/ISO_3166
|
288
|
+
// @see https://www.iso.org/iso/country_codes.htm
|
289
289
|
//
|
290
290
|
// @note
|
291
291
|
// subcode can be in upper case or lower case
|
@@ -433,7 +433,7 @@
|
|
433
433
|
, pluralizerKey
|
434
434
|
, message;
|
435
435
|
|
436
|
-
if (isObject(translations)) {
|
436
|
+
if (translations && isObject(translations)) {
|
437
437
|
while (pluralizerKeys.length) {
|
438
438
|
pluralizerKey = pluralizerKeys.shift();
|
439
439
|
if (isSet(translations[pluralizerKey])) {
|
data/i18n-js.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Nando Vieira"]
|
10
10
|
s.email = ["fnando.vieira@gmail.com"]
|
11
|
-
s.homepage = "
|
11
|
+
s.homepage = "https://rubygems.org/gems/i18n-js"
|
12
12
|
s.summary = "It's a small library to provide the Rails I18n translations on the Javascript."
|
13
13
|
s.description = s.summary
|
14
14
|
s.license = "MIT"
|
data/lib/i18n/js/dependencies.rb
CHANGED
@@ -18,7 +18,7 @@ module I18n
|
|
18
18
|
# Call this in an initializer
|
19
19
|
def using_asset_pipeline?
|
20
20
|
assets_pipeline_available =
|
21
|
-
(rails3? || rails4? || rails5? || rails6?) &&
|
21
|
+
(rails3? || rails4? || rails5? || rails6? || rails7?) &&
|
22
22
|
Rails.respond_to?(:application) &&
|
23
23
|
Rails.application.config.respond_to?(:assets)
|
24
24
|
rails3_assets_enabled =
|
@@ -26,7 +26,7 @@ module I18n
|
|
26
26
|
assets_pipeline_available &&
|
27
27
|
Rails.application.config.assets.enabled != false
|
28
28
|
|
29
|
-
assets_pipeline_available && (rails4? || rails5? || rails6? || rails3_assets_enabled)
|
29
|
+
assets_pipeline_available && (rails4? || rails5? || rails6? || rails7? || rails3_assets_enabled)
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
@@ -46,6 +46,10 @@ module I18n
|
|
46
46
|
def rails6?
|
47
47
|
rails? && Rails.version.to_i == 6
|
48
48
|
end
|
49
|
+
|
50
|
+
def rails7?
|
51
|
+
rails? && Rails.version.to_i == 7
|
52
|
+
end
|
49
53
|
|
50
54
|
def safe_gem_check(*args)
|
51
55
|
if Gem::Specification.respond_to?(:find_by_name)
|
data/lib/i18n/js/engine.rb
CHANGED
@@ -21,7 +21,7 @@ module I18n
|
|
21
21
|
# https://github.com/rails/sprockets-rails/blob/master/lib/sprockets/railtie.rb
|
22
22
|
#
|
23
23
|
# Finisher hook is the place which should be used as border.
|
24
|
-
#
|
24
|
+
# https://guides.rubyonrails.org/configuring.html#initializers
|
25
25
|
#
|
26
26
|
# For detail see Pull Request:
|
27
27
|
# https://github.com/fnando/i18n-js/pull/371
|
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/utils.rb
CHANGED
@@ -3,7 +3,7 @@ module I18n
|
|
3
3
|
module Utils
|
4
4
|
PLURAL_KEYS = %i[zero one two few many other].freeze
|
5
5
|
|
6
|
-
# Based on deep_merge by Stefan Rusterholz, see <
|
6
|
+
# Based on deep_merge by Stefan Rusterholz, see <https://www.ruby-forum.com/topic/142809>.
|
7
7
|
# This method is used to handle I18n fallbacks. Given two equivalent path nodes in two locale trees:
|
8
8
|
# 1. If the node in the current locale appears to be an I18n pluralization (:one, :other, etc.),
|
9
9
|
# use the node, but merge in any missing/non-nil keys from the fallback (default) locale.
|
data/lib/i18n/js/version.rb
CHANGED
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/package.json
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
js_available_locales: ["en", "foo"]
|
@@ -148,6 +148,15 @@ describe("Pluralization", function(){
|
|
148
148
|
expect(I18n.p(5, "inbox", { count: 5 })).toEqual('You have 5 messages');
|
149
149
|
});
|
150
150
|
|
151
|
+
it("fallback to default locale when I18n.fallbacks is enabled and value is null", function() {
|
152
|
+
I18n.locale = "pt-BR";
|
153
|
+
I18n.fallbacks = true;
|
154
|
+
I18n.translations["pt-BR"].inbox = null;
|
155
|
+
expect(I18n.p(0, "inbox", { count: 0 })).toEqual("You have no messages");
|
156
|
+
expect(I18n.p(1, "inbox", { count: 1 })).toEqual("You have 1 message");
|
157
|
+
expect(I18n.p(5, "inbox", { count: 5 })).toEqual("You have 5 messages");
|
158
|
+
});
|
159
|
+
|
151
160
|
it("fallback to 'other' scope", function() {
|
152
161
|
I18n.locale = "pt-BR";
|
153
162
|
I18n.fallbacks = true;
|
data/spec/js/require.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/** vim: et:ts=4:sw=4:sts=4
|
2
2
|
* @license RequireJS 2.1.16 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.
|
3
3
|
* Available via the MIT or new BSD license.
|
4
|
-
* see:
|
4
|
+
* see: https://github.com/jrburke/requirejs for details
|
5
5
|
*/
|
6
6
|
//Not using strict: uneven strict support in browsers, #392, and causes
|
7
7
|
//problems with requirejs.exec()/transpiler plugins that may not be strict.
|
@@ -163,7 +163,7 @@ var requirejs, require, define;
|
|
163
163
|
* @returns {Error}
|
164
164
|
*/
|
165
165
|
function makeError(id, msg, err, requireModules) {
|
166
|
-
var e = new Error(msg + '\
|
166
|
+
var e = new Error(msg + '\nhttps://requirejs.org/docs/errors.html#' + id);
|
167
167
|
e.requireType = id;
|
168
168
|
e.requireModules = requireModules;
|
169
169
|
if (err) {
|
@@ -1810,7 +1810,7 @@ var requirejs, require, define;
|
|
1810
1810
|
head = s.head = document.getElementsByTagName('head')[0];
|
1811
1811
|
//If BASE tag is in play, using appendChild is a problem for IE6.
|
1812
1812
|
//When that browser dies, this can be removed. Details in this jQuery bug:
|
1813
|
-
//
|
1813
|
+
//https://dev.jquery.com/ticket/2709
|
1814
1814
|
baseElement = document.getElementsByTagName('base')[0];
|
1815
1815
|
if (baseElement) {
|
1816
1816
|
head = s.head = baseElement.parentNode;
|
@@ -1829,7 +1829,7 @@ var requirejs, require, define;
|
|
1829
1829
|
*/
|
1830
1830
|
req.createNode = function (config, moduleName, url) {
|
1831
1831
|
var node = config.xhtml ?
|
1832
|
-
document.createElementNS('
|
1832
|
+
document.createElementNS('https://www.w3.org/1999/xhtml', 'html:script') :
|
1833
1833
|
document.createElement('script');
|
1834
1834
|
node.type = config.scriptType || 'text/javascript';
|
1835
1835
|
node.charset = 'utf-8';
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- gemfiles/i18n_0_9.gemfile
|
122
122
|
- gemfiles/i18n_1_0.gemfile
|
123
123
|
- gemfiles/i18n_1_1.gemfile
|
124
|
+
- gemfiles/i18n_1_10.gemfile
|
124
125
|
- gemfiles/i18n_1_2.gemfile
|
125
126
|
- gemfiles/i18n_1_3.gemfile
|
126
127
|
- gemfiles/i18n_1_4.gemfile
|
@@ -128,6 +129,7 @@ files:
|
|
128
129
|
- gemfiles/i18n_1_6.gemfile
|
129
130
|
- gemfiles/i18n_1_7.gemfile
|
130
131
|
- gemfiles/i18n_1_8.gemfile
|
132
|
+
- gemfiles/i18n_1_9.gemfile
|
131
133
|
- i18n-js.gemspec
|
132
134
|
- i18njs.png
|
133
135
|
- lib/i18n-js.rb
|
@@ -152,6 +154,7 @@ files:
|
|
152
154
|
- spec/fixtures/default.yml
|
153
155
|
- spec/fixtures/erb.yml
|
154
156
|
- spec/fixtures/except_condition.yml
|
157
|
+
- spec/fixtures/js_available_locales_custom.yml
|
155
158
|
- spec/fixtures/js_export_dir_custom.yml
|
156
159
|
- spec/fixtures/js_export_dir_none.yml
|
157
160
|
- spec/fixtures/js_extend_parent.yml
|
@@ -208,11 +211,11 @@ files:
|
|
208
211
|
- spec/ruby/i18n/js_spec.rb
|
209
212
|
- spec/spec_helper.rb
|
210
213
|
- yarn.lock
|
211
|
-
homepage:
|
214
|
+
homepage: https://rubygems.org/gems/i18n-js
|
212
215
|
licenses:
|
213
216
|
- MIT
|
214
217
|
metadata: {}
|
215
|
-
post_install_message:
|
218
|
+
post_install_message:
|
216
219
|
rdoc_options: []
|
217
220
|
require_paths:
|
218
221
|
- lib
|
@@ -227,8 +230,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
227
230
|
- !ruby/object:Gem::Version
|
228
231
|
version: '0'
|
229
232
|
requirements: []
|
230
|
-
rubygems_version: 3.
|
231
|
-
signing_key:
|
233
|
+
rubygems_version: 3.3.10
|
234
|
+
signing_key:
|
232
235
|
specification_version: 4
|
233
236
|
summary: It's a small library to provide the Rails I18n translations on the Javascript.
|
234
237
|
test_files:
|
@@ -236,6 +239,7 @@ test_files:
|
|
236
239
|
- spec/fixtures/default.yml
|
237
240
|
- spec/fixtures/erb.yml
|
238
241
|
- spec/fixtures/except_condition.yml
|
242
|
+
- spec/fixtures/js_available_locales_custom.yml
|
239
243
|
- spec/fixtures/js_export_dir_custom.yml
|
240
244
|
- spec/fixtures/js_export_dir_none.yml
|
241
245
|
- spec/fixtures/js_extend_parent.yml
|