i18n-js 3.0.0.rc11 → 3.0.0.rc12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Appraisals +2 -2
- data/CHANGELOG.md +36 -4
- data/README.md +288 -115
- data/app/assets/javascripts/i18n.js +75 -9
- data/gemfiles/i18n_0_6.gemfile +1 -1
- data/gemfiles/i18n_0_7.gemfile +1 -1
- data/i18n-js.gemspec +1 -1
- data/lib/i18n/js/engine.rb +26 -5
- data/lib/i18n/js/fallback_locales.rb +1 -1
- data/lib/i18n/js/segment.rb +1 -1
- data/lib/i18n/js/version.rb +1 -1
- data/spec/js/extend.spec.js +41 -0
- data/spec/js/interpolation.spec.js +13 -0
- data/spec/js/locales.spec.js +31 -0
- data/spec/js/numbers.spec.js +29 -1
- data/spec/js/specs.html +2 -0
- data/spec/js/specs_requirejs.html +3 -2
- data/spec/js/translate.spec.js +1 -1
- data/spec/{sprockets_spec.rb → ruby/i18n/js/dependencies_spec.rb} +1 -0
- data/spec/{i18n_js_fallback_locales_spec.rb → ruby/i18n/js/fallback_locales_spec.rb} +0 -0
- data/spec/{segment_spec.rb → ruby/i18n/js/segment_spec.rb} +5 -5
- data/spec/{utils_spec.rb → ruby/i18n/js/utils_spec.rb} +0 -0
- data/spec/{i18n_js_spec.rb → ruby/i18n/js_spec.rb} +5 -5
- data/spec/spec_helper.rb +1 -1
- metadata +23 -13
@@ -38,6 +38,47 @@
|
|
38
38
|
return ("0" + number.toString()).substr(-2);
|
39
39
|
};
|
40
40
|
|
41
|
+
// Improved toFixed number rounding function with support for unprecise floating points
|
42
|
+
// JavaScript's standard toFixed function does not round certain numbers correctly (for example 0.105 with precision 2).
|
43
|
+
var toFixed = function(number, precision) {
|
44
|
+
return decimalAdjust('round', number, -precision).toFixed(precision);
|
45
|
+
};
|
46
|
+
|
47
|
+
// Is a given variable an object?
|
48
|
+
// Borrowed from Underscore.js
|
49
|
+
var isObject = function(obj) {
|
50
|
+
var type = typeof obj;
|
51
|
+
return type === 'function' || type === 'object' && !!obj;
|
52
|
+
};
|
53
|
+
|
54
|
+
// Is a given value an array?
|
55
|
+
// Borrowed from Underscore.js
|
56
|
+
var isArray = function(obj) {
|
57
|
+
if (Array.isArray) {
|
58
|
+
return Array.isArray(obj);
|
59
|
+
};
|
60
|
+
return Object.prototype.toString.call(obj) === '[object Array]';
|
61
|
+
};
|
62
|
+
|
63
|
+
var decimalAdjust = function(type, value, exp) {
|
64
|
+
// If the exp is undefined or zero...
|
65
|
+
if (typeof exp === 'undefined' || +exp === 0) {
|
66
|
+
return Math[type](value);
|
67
|
+
}
|
68
|
+
value = +value;
|
69
|
+
exp = +exp;
|
70
|
+
// If the value is not a number or the exp is not an integer...
|
71
|
+
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
|
72
|
+
return NaN;
|
73
|
+
}
|
74
|
+
// Shift
|
75
|
+
value = value.toString().split('e');
|
76
|
+
value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
|
77
|
+
// Shift back
|
78
|
+
value = value.toString().split('e');
|
79
|
+
return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
|
80
|
+
}
|
81
|
+
|
41
82
|
// Set default days/months translations.
|
42
83
|
var DATE = {
|
43
84
|
day_names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
|
@@ -86,7 +127,7 @@
|
|
86
127
|
, locale: "en"
|
87
128
|
// Set the translation key separator.
|
88
129
|
, defaultSeparator: "."
|
89
|
-
// Set the placeholder format. Accepts `{placeholder}}` and `%{placeholder}`.
|
130
|
+
// Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`.
|
90
131
|
, placeholder: /(?:\{\{|%\{)(.*?)(?:\}\}?)/gm
|
91
132
|
// Set if engine should fallback to the default locale when a translation
|
92
133
|
// is missing.
|
@@ -179,7 +220,7 @@
|
|
179
220
|
result = result(locale);
|
180
221
|
}
|
181
222
|
|
182
|
-
if (result
|
223
|
+
if (isArray(result) === false) {
|
183
224
|
result = [result];
|
184
225
|
}
|
185
226
|
|
@@ -408,7 +449,7 @@
|
|
408
449
|
|
409
450
|
if (typeof(translation) === "string") {
|
410
451
|
translation = this.interpolate(translation, options);
|
411
|
-
} else if (translation
|
452
|
+
} else if (isObject(translation) && this.isSet(options.count)) {
|
412
453
|
translation = this.pluralize(options.count, translation, options);
|
413
454
|
}
|
414
455
|
|
@@ -438,9 +479,9 @@
|
|
438
479
|
if (this.isSet(options[name])) {
|
439
480
|
value = options[name].toString().replace(/\$/gm, "_#$#_");
|
440
481
|
} else if (name in options) {
|
441
|
-
value = this.nullPlaceholder(placeholder, message);
|
482
|
+
value = this.nullPlaceholder(placeholder, message, options);
|
442
483
|
} else {
|
443
|
-
value = this.missingPlaceholder(placeholder, message);
|
484
|
+
value = this.missingPlaceholder(placeholder, message, options);
|
444
485
|
}
|
445
486
|
|
446
487
|
regex = new RegExp(placeholder.replace(/\{/gm, "\\{").replace(/\}/gm, "\\}"));
|
@@ -457,7 +498,7 @@
|
|
457
498
|
options = this.prepareOptions(options);
|
458
499
|
var translations, pluralizer, keys, key, message;
|
459
500
|
|
460
|
-
if (scope
|
501
|
+
if (isObject(scope)) {
|
461
502
|
translations = scope;
|
462
503
|
} else {
|
463
504
|
translations = this.lookup(scope, options);
|
@@ -502,7 +543,7 @@
|
|
502
543
|
};
|
503
544
|
|
504
545
|
// Return a missing placeholder message for given parameters
|
505
|
-
I18n.missingPlaceholder = function(placeholder, message) {
|
546
|
+
I18n.missingPlaceholder = function(placeholder, message, options) {
|
506
547
|
return "[missing " + placeholder + " value]";
|
507
548
|
};
|
508
549
|
|
@@ -529,7 +570,7 @@
|
|
529
570
|
);
|
530
571
|
|
531
572
|
var negative = number < 0
|
532
|
-
, string = Math.abs(number)
|
573
|
+
, string = toFixed(Math.abs(number), options.precision).toString()
|
533
574
|
, parts = string.split(".")
|
534
575
|
, precision
|
535
576
|
, buffer = []
|
@@ -857,7 +898,32 @@
|
|
857
898
|
}
|
858
899
|
|
859
900
|
return scope;
|
860
|
-
}
|
901
|
+
};
|
902
|
+
/**
|
903
|
+
* Merge obj1 with obj2 (shallow merge), without modifying inputs
|
904
|
+
* @param {Object} obj1
|
905
|
+
* @param {Object} obj2
|
906
|
+
* @returns {Object} Merged values of obj1 and obj2
|
907
|
+
*
|
908
|
+
* In order to support ES3, `Object.prototype.hasOwnProperty.call` is used
|
909
|
+
* Idea is from:
|
910
|
+
* https://stackoverflow.com/questions/8157700/object-has-no-hasownproperty-method-i-e-its-undefined-ie8
|
911
|
+
*/
|
912
|
+
I18n.extend = function ( obj1, obj2 ) {
|
913
|
+
var extended = {};
|
914
|
+
var prop;
|
915
|
+
for (prop in obj1) {
|
916
|
+
if (Object.prototype.hasOwnProperty.call(obj1, prop)) {
|
917
|
+
extended[prop] = obj1[prop];
|
918
|
+
}
|
919
|
+
}
|
920
|
+
for (prop in obj2) {
|
921
|
+
if (Object.prototype.hasOwnProperty.call(obj2, prop)) {
|
922
|
+
extended[prop] = obj2[prop];
|
923
|
+
}
|
924
|
+
}
|
925
|
+
return extended;
|
926
|
+
};
|
861
927
|
|
862
928
|
// Set aliases, so we can save some typing.
|
863
929
|
I18n.t = I18n.translate;
|
data/gemfiles/i18n_0_6.gemfile
CHANGED
data/gemfiles/i18n_0_7.gemfile
CHANGED
data/i18n-js.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_dependency "i18n", "~> 0.6"
|
21
|
+
s.add_dependency "i18n", "~> 0.6", ">= 0.6.6"
|
22
22
|
s.add_development_dependency "appraisal", "~> 2.0"
|
23
23
|
s.add_development_dependency "activesupport", ">= 3.2.22"
|
24
24
|
s.add_development_dependency "rspec", "~> 3.0"
|
data/lib/i18n/js/engine.rb
CHANGED
@@ -3,15 +3,36 @@ require "i18n/js"
|
|
3
3
|
module I18n
|
4
4
|
module JS
|
5
5
|
class Engine < ::Rails::Engine
|
6
|
-
|
6
|
+
# `sprockets.environment` was used for 1.x of `sprockets-rails`
|
7
|
+
# https://github.com/rails/sprockets-rails/issues/227
|
8
|
+
#
|
9
|
+
# References for current values:
|
10
|
+
#
|
11
|
+
# Here is where sprockets are attached with Rails. There is no 'sprockets.environment' mentioned.
|
12
|
+
# https://github.com/rails/sprockets-rails/blob/master/lib/sprockets/railtie.rb
|
13
|
+
#
|
14
|
+
# Finisher hook is the place which should be used as border.
|
15
|
+
# http://guides.rubyonrails.org/configuring.html#initializers
|
16
|
+
#
|
17
|
+
# For detail see Pull Request:
|
18
|
+
# https://github.com/fnando/i18n-js/pull/371
|
19
|
+
initializer "i18n-js.register_preprocessor", after: :engines_blank_point, before: :finisher_hook do
|
7
20
|
next unless JS::Dependencies.using_asset_pipeline?
|
8
21
|
next unless JS::Dependencies.sprockets_supports_register_preprocessor?
|
9
22
|
|
10
|
-
|
11
|
-
|
12
|
-
|
23
|
+
# From README of 2.x & 3.x of `sprockets-rails`
|
24
|
+
# It seems the `configure` block is preferred way to call `register_preprocessor`
|
25
|
+
# Not sure if this will break older versions of rails
|
26
|
+
#
|
27
|
+
# https://github.com/rails/sprockets-rails/blob/v2.3.3/README.md
|
28
|
+
# https://github.com/rails/sprockets-rails/blob/v3.0.0/README.md
|
29
|
+
Rails.application.config.assets.configure do |config|
|
30
|
+
config.register_preprocessor "application/javascript", :"i18n-js_dependencies" do |context, source|
|
31
|
+
if context.logical_path == "i18n/filtered"
|
32
|
+
::I18n.load_path.each {|path| context.depend_on(File.expand_path(path))}
|
33
|
+
end
|
34
|
+
source
|
13
35
|
end
|
14
|
-
source
|
15
36
|
end
|
16
37
|
end
|
17
38
|
end
|
@@ -73,7 +73,7 @@ module I18n
|
|
73
73
|
# This ignores option `I18n.enforce_available_locales`
|
74
74
|
def ensure_valid_locales!(locales)
|
75
75
|
if locales.any? { |locale| !::I18n.available_locales.include?(locale) }
|
76
|
-
fail ArgumentError, "Valid locales: #{::I18n.available_locales} - Given Locales: #{locales}"
|
76
|
+
fail ArgumentError, "Valid locales: #{::I18n.available_locales.join(", ")} - Given Locales: #{locales.join(", ")}"
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
data/lib/i18n/js/segment.rb
CHANGED
@@ -33,7 +33,7 @@ module I18n
|
|
33
33
|
f << %(#{self.namespace}.translations || (#{self.namespace}.translations = {});\n)
|
34
34
|
_translations.each do |locale, translations_for_locale|
|
35
35
|
output_translations = I18n::JS.sort_translation_keys? ? Utils.deep_key_sort(translations_for_locale) : translations_for_locale
|
36
|
-
f << %(#{self.namespace}.translations["#{locale}"] = #{print_json(output_translations)};\n)
|
36
|
+
f << %(#{self.namespace}.translations["#{locale}"] = I18n.extend((#{self.namespace}.translations["#{locale}"] || {}), #{print_json(output_translations)});\n)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
data/lib/i18n/js/version.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
var I18n = require("../../app/assets/javascripts/i18n")
|
2
|
+
, Translations = require("./translations")
|
3
|
+
;
|
4
|
+
|
5
|
+
describe("Extend", function () {
|
6
|
+
it("should return an object", function () {
|
7
|
+
expect(typeof I18n.extend()).toBe('object');
|
8
|
+
});
|
9
|
+
|
10
|
+
it("should merge 2 objects into 1", function () {
|
11
|
+
var obj1 = {
|
12
|
+
test1: "abc"
|
13
|
+
}
|
14
|
+
, obj2 = {
|
15
|
+
test2: "xyz"
|
16
|
+
}
|
17
|
+
, expected = {
|
18
|
+
test1: "abc"
|
19
|
+
, test2: "xyz"
|
20
|
+
};
|
21
|
+
|
22
|
+
expect(I18n.extend(obj1,obj2)).toEqual(expected);
|
23
|
+
});
|
24
|
+
it("should overwrite a property from obj1 with the same property of obj2", function () {
|
25
|
+
var obj1 = {
|
26
|
+
test1: "abc"
|
27
|
+
, test3: "def"
|
28
|
+
}
|
29
|
+
, obj2 = {
|
30
|
+
test2: "xyz"
|
31
|
+
, test3: "uvw"
|
32
|
+
}
|
33
|
+
, expected = {
|
34
|
+
test1: "abc"
|
35
|
+
, test2: "xyz"
|
36
|
+
, test3: "uvw"
|
37
|
+
};
|
38
|
+
|
39
|
+
expect(I18n.extend(obj1,obj2)).toEqual(expected);
|
40
|
+
});
|
41
|
+
});
|
@@ -97,4 +97,17 @@ describe("Interpolation", function(){
|
|
97
97
|
expect(actual).toEqual("Hello !");
|
98
98
|
I18n.nullPlaceholder = orig;
|
99
99
|
});
|
100
|
+
|
101
|
+
it("provides missingPlaceholder with the placeholder, message, and options object", function(){
|
102
|
+
var orig = I18n.missingPlaceholder;
|
103
|
+
I18n.missingPlaceholder = function(placeholder, message, options) {
|
104
|
+
expect(placeholder).toEqual('{{name}}');
|
105
|
+
expect(message).toEqual('Hello {{name}}!');
|
106
|
+
expect(options.debugScope).toEqual('landing-page');
|
107
|
+
return '[missing-placeholder-debug]';
|
108
|
+
};
|
109
|
+
actual = I18n.t("greetings.name", {debugScope: 'landing-page'});
|
110
|
+
expect(actual).toEqual("Hello [missing-placeholder-debug]!");
|
111
|
+
I18n.missingPlaceholder = orig;
|
112
|
+
});
|
100
113
|
});
|
@@ -0,0 +1,31 @@
|
|
1
|
+
var I18n = require("../../app/assets/javascripts/i18n");
|
2
|
+
|
3
|
+
describe("Locales", function(){
|
4
|
+
beforeEach(function(){
|
5
|
+
I18n.reset();
|
6
|
+
});
|
7
|
+
|
8
|
+
it("returns the requested locale, if available", function(){
|
9
|
+
I18n.locales["ab"] = ["ab"];
|
10
|
+
expect(I18n.locales.get("ab")).toEqual(["ab"]);
|
11
|
+
});
|
12
|
+
|
13
|
+
it("wraps single results in an array", function(){
|
14
|
+
I18n.locales["cd"] = "cd";
|
15
|
+
expect(I18n.locales.get("cd")).toEqual(["cd"]);
|
16
|
+
});
|
17
|
+
|
18
|
+
it("returns the result of locale functions", function(){
|
19
|
+
I18n.locales["fn"] = function() {
|
20
|
+
return "gg";
|
21
|
+
};
|
22
|
+
expect(I18n.locales.get("fn")).toEqual(["gg"]);
|
23
|
+
});
|
24
|
+
|
25
|
+
it("uses I18n.locale as a fallback", function(){
|
26
|
+
I18n.locale = "xx";
|
27
|
+
I18n.locales["xx"] = ["xx"];
|
28
|
+
expect(I18n.locales.get()).toEqual(["xx"]);
|
29
|
+
expect(I18n.locales.get("yy")).toEqual(["xx"]);
|
30
|
+
});
|
31
|
+
});
|
data/spec/js/numbers.spec.js
CHANGED
@@ -97,6 +97,34 @@ describe("Numbers", function(){
|
|
97
97
|
expect(I18n.toNumber(1.98, options)).toEqual("2");
|
98
98
|
});
|
99
99
|
|
100
|
+
it("rounds numbers correctly when precision is given", function(){
|
101
|
+
options = {separator: ".", delimiter: ","};
|
102
|
+
|
103
|
+
options["precision"] = 2;
|
104
|
+
expect(I18n.toNumber(0.104, options)).toEqual("0.10");
|
105
|
+
|
106
|
+
options["precision"] = 2;
|
107
|
+
expect(I18n.toNumber(0.105, options)).toEqual("0.11");
|
108
|
+
|
109
|
+
options["precision"] = 2;
|
110
|
+
expect(I18n.toNumber(1.005, options)).toEqual("1.01");
|
111
|
+
|
112
|
+
options["precision"] = 3;
|
113
|
+
expect(I18n.toNumber(35.855, options)).toEqual("35.855");
|
114
|
+
|
115
|
+
options["precision"] = 2;
|
116
|
+
expect(I18n.toNumber(35.855, options)).toEqual("35.86");
|
117
|
+
|
118
|
+
options["precision"] = 1;
|
119
|
+
expect(I18n.toNumber(35.855, options)).toEqual("35.9");
|
120
|
+
|
121
|
+
options["precision"] = 0;
|
122
|
+
expect(I18n.toNumber(35.855, options)).toEqual("36");
|
123
|
+
|
124
|
+
options["precision"] = 0;
|
125
|
+
expect(I18n.toNumber(0.000000000000001, options)).toEqual("0");
|
126
|
+
});
|
127
|
+
|
100
128
|
it("returns number as human size", function(){
|
101
129
|
var kb = 1024;
|
102
130
|
|
@@ -139,4 +167,4 @@ describe("Numbers", function(){
|
|
139
167
|
actual = I18n.toNumber(30, {strip_insignificant_zeros: true, precision: 0});
|
140
168
|
expect(actual).toEqual("30");
|
141
169
|
});
|
142
|
-
});
|
170
|
+
});
|
data/spec/js/specs.html
CHANGED
@@ -31,12 +31,14 @@
|
|
31
31
|
<script type="text/javascript" src="defaults.spec.js"></script>
|
32
32
|
<script type="text/javascript" src="interpolation.spec.js"></script>
|
33
33
|
<script type="text/javascript" src="localization.spec.js"></script>
|
34
|
+
<script type="text/javascript" src="locales.spec.js"></script>
|
34
35
|
<script type="text/javascript" src="numbers.spec.js"></script>
|
35
36
|
<script type="text/javascript" src="placeholder.spec.js"></script>
|
36
37
|
<script type="text/javascript" src="pluralization.spec.js"></script>
|
37
38
|
<script type="text/javascript" src="prepare_options.spec.js"></script>
|
38
39
|
<script type="text/javascript" src="translate.spec.js"></script>
|
39
40
|
<script type="text/javascript" src="utility_functions.spec.js"></script>
|
41
|
+
<script type="text/javascript" src="extend.spec.js"></script>
|
40
42
|
|
41
43
|
<!-- run specs -->
|
42
44
|
<script type="text/javascript">
|
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
<!-- load your javascript files -->
|
15
15
|
<script type="text/javascript" src="require.js"></script>
|
16
|
-
|
16
|
+
|
17
17
|
<script type="text/javascript">
|
18
18
|
// Prepare requirejs shims to wrap each test so that it will work with the
|
19
19
|
// require syntax loading
|
@@ -30,7 +30,8 @@
|
|
30
30
|
"./pluralization.spec.js",
|
31
31
|
"./prepare_options.spec.js",
|
32
32
|
"./translate.spec.js",
|
33
|
-
"./utility_functions.spec.js"
|
33
|
+
"./utility_functions.spec.js",
|
34
|
+
"./extend.spec.js"
|
34
35
|
];
|
35
36
|
var shims = {};
|
36
37
|
for(var i = 0; i < testScripts.length; i++) {
|
data/spec/js/translate.spec.js
CHANGED
@@ -103,7 +103,7 @@ describe("Translate", function(){
|
|
103
103
|
expect(I18n.t("hello")).toEqual("Hei Verden!");
|
104
104
|
});
|
105
105
|
|
106
|
-
describe("when provided default
|
106
|
+
describe("when provided default values", function() {
|
107
107
|
it("uses scope provided in defaults if scope doesn't exist", function() {
|
108
108
|
actual = I18n.t("Hello!", {defaults: [{scope: "greetings.stranger"}]});
|
109
109
|
expect(actual).toEqual("Hello stranger!");
|
File without changes
|
@@ -64,8 +64,8 @@ describe I18n::JS::Segment do
|
|
64
64
|
|
65
65
|
File.open(File.join(temp_path, "segment.js")){|f| f.read}.should eql <<-EOF
|
66
66
|
MyNamespace.translations || (MyNamespace.translations = {});
|
67
|
-
MyNamespace.translations["en"] = {"test":"Test"};
|
68
|
-
MyNamespace.translations["fr"] = {"test":"Test2"};
|
67
|
+
MyNamespace.translations["en"] = I18n.extend((MyNamespace.translations["en"] || {}), {"test":"Test"});
|
68
|
+
MyNamespace.translations["fr"] = I18n.extend((MyNamespace.translations["fr"] || {}), {"test":"Test2"});
|
69
69
|
EOF
|
70
70
|
end
|
71
71
|
end
|
@@ -79,12 +79,12 @@ MyNamespace.translations["fr"] = {"test":"Test2"};
|
|
79
79
|
|
80
80
|
File.open(File.join(temp_path, "en.js")){|f| f.read}.should eql <<-EOF
|
81
81
|
MyNamespace.translations || (MyNamespace.translations = {});
|
82
|
-
MyNamespace.translations["en"] = {"test":"Test"};
|
82
|
+
MyNamespace.translations["en"] = I18n.extend((MyNamespace.translations["en"] || {}), {"test":"Test"});
|
83
83
|
EOF
|
84
84
|
|
85
85
|
File.open(File.join(temp_path, "fr.js")){|f| f.read}.should eql <<-EOF
|
86
86
|
MyNamespace.translations || (MyNamespace.translations = {});
|
87
|
-
MyNamespace.translations["fr"] = {"test":"Test2"};
|
87
|
+
MyNamespace.translations["fr"] = I18n.extend((MyNamespace.translations["fr"] || {}), {"test":"Test2"});
|
88
88
|
EOF
|
89
89
|
end
|
90
90
|
end
|
@@ -101,7 +101,7 @@ MyNamespace.translations["fr"] = {"test":"Test2"};
|
|
101
101
|
|
102
102
|
File.open(File.join(temp_path, "segment.js")){|f| f.read}.should eql <<-EOF
|
103
103
|
MyNamespace.translations || (MyNamespace.translations = {});
|
104
|
-
MyNamespace.translations["en"] = {"a":"Test","b":"Test"};
|
104
|
+
MyNamespace.translations["en"] = I18n.extend((MyNamespace.translations["en"] || {}), {"a":"Test","b":"Test"});
|
105
105
|
EOF
|
106
106
|
end
|
107
107
|
end
|
File without changes
|
@@ -67,13 +67,13 @@ describe I18n::JS do
|
|
67
67
|
en_output = File.read(File.join(I18n::JS.export_i18n_js_dir_path, "en.js"))
|
68
68
|
expect(en_output).to eq(<<EOS
|
69
69
|
I18n.translations || (I18n.translations = {});
|
70
|
-
I18n.translations["en"] = {"admin":{"edit":{"title":"Edit"},"show":{"note":"more details","title":"Show"}},"date":{"abbr_day_names":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"abbr_month_names":[null,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"day_names":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"formats":{"default":"%Y-%m-%d","long":"%B %d, %Y","short":"%b %d"},"month_names":[null,"January","February","March","April","May","June","July","August","September","October","November","December"]}};
|
70
|
+
I18n.translations["en"] = I18n.extend((I18n.translations["en"] || {}), {"admin":{"edit":{"title":"Edit"},"show":{"note":"more details","title":"Show"}},"date":{"abbr_day_names":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"abbr_month_names":[null,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"day_names":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"formats":{"default":"%Y-%m-%d","long":"%B %d, %Y","short":"%b %d"},"month_names":[null,"January","February","March","April","May","June","July","August","September","October","November","December"]}});
|
71
71
|
EOS
|
72
72
|
)
|
73
73
|
fr_output = File.read(File.join(I18n::JS.export_i18n_js_dir_path, "fr.js"))
|
74
74
|
expect(fr_output).to eq(<<EOS
|
75
75
|
I18n.translations || (I18n.translations = {});
|
76
|
-
I18n.translations["fr"] = {"admin":{"edit":{"title":"Editer"},"show":{"note":"plus de détails","title":"Visualiser"}},"date":{"abbr_day_names":["dim","lun","mar","mer","jeu","ven","sam"],"abbr_month_names":[null,"jan.","fév.","mar.","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"day_names":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"formats":{"default":"%d/%m/%Y","long":"%e %B %Y","long_ordinal":"%e %B %Y","only_day":"%e","short":"%e %b"},"month_names":[null,"janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]}};
|
76
|
+
I18n.translations["fr"] = I18n.extend((I18n.translations["fr"] || {}), {"admin":{"edit":{"title":"Editer"},"show":{"note":"plus de détails","title":"Visualiser"}},"date":{"abbr_day_names":["dim","lun","mar","mer","jeu","ven","sam"],"abbr_month_names":[null,"jan.","fév.","mar.","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"day_names":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"formats":{"default":"%d/%m/%Y","long":"%e %B %Y","long_ordinal":"%e %B %Y","only_day":"%e","short":"%e %b"},"month_names":[null,"janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]}});
|
77
77
|
EOS
|
78
78
|
)
|
79
79
|
end
|
@@ -98,13 +98,13 @@ EOS
|
|
98
98
|
en_output = File.read(File.join(I18n::JS.export_i18n_js_dir_path, "bits.en.js"))
|
99
99
|
expect(en_output).to eq(<<EOS
|
100
100
|
I18n.translations || (I18n.translations = {});
|
101
|
-
I18n.translations["en"] = {"date":{"formats":{"default":"%Y-%m-%d","long":"%B %d, %Y","short":"%b %d"}},"number":{"currency":{"format":{"delimiter":",","format":"%u%n","precision":2,"separator":".","unit":"$"}}}};
|
101
|
+
I18n.translations["en"] = I18n.extend((I18n.translations["en"] || {}), {"date":{"formats":{"default":"%Y-%m-%d","long":"%B %d, %Y","short":"%b %d"}},"number":{"currency":{"format":{"delimiter":",","format":"%u%n","precision":2,"separator":".","unit":"$"}}}});
|
102
102
|
EOS
|
103
103
|
)
|
104
104
|
fr_output = File.read(File.join(I18n::JS.export_i18n_js_dir_path, "bits.fr.js"))
|
105
105
|
expect(fr_output).to eq(<<EOS
|
106
106
|
I18n.translations || (I18n.translations = {});
|
107
|
-
I18n.translations["fr"] = {"date":{"formats":{"default":"%d/%m/%Y","long":"%e %B %Y","long_ordinal":"%e %B %Y","only_day":"%e","short":"%e %b"}},"number":{"currency":{"format":{"format":"%n %u","precision":2,"unit":"€"}}}};
|
107
|
+
I18n.translations["fr"] = I18n.extend((I18n.translations["fr"] || {}), {"date":{"formats":{"default":"%d/%m/%Y","long":"%e %B %Y","long_ordinal":"%e %B %Y","only_day":"%e","short":"%e %b"}},"number":{"currency":{"format":{"format":"%n %u","precision":2,"unit":"€"}}}});
|
108
108
|
EOS
|
109
109
|
)
|
110
110
|
end
|
@@ -581,7 +581,7 @@ EOS
|
|
581
581
|
it "exports with the keys sorted" do
|
582
582
|
expect(subject).to eq(<<EOS
|
583
583
|
I18n.translations || (I18n.translations = {});
|
584
|
-
I18n.translations["en"] = {"admin":{"edit":{"title":"Edit"},"show":{"note":"more details","title":"Show"}},"date":{"abbr_day_names":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"abbr_month_names":[null,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"day_names":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"formats":{"default":"%Y-%m-%d","long":"%B %d, %Y","short":"%b %d"},"month_names":[null,"January","February","March","April","May","June","July","August","September","October","November","December"]},"fallback_test":"Success","foo":"Foo","null_test":"fallback for null","number":{"currency":{"format":{"delimiter":",","format":"%u%n","precision":2,"separator":".","unit":"$"}},"format":{"delimiter":",","precision":3,"separator":"."}},"time":{"am":"am","formats":{"default":"%a, %d %b %Y %H:%M:%S %z","long":"%B %d, %Y %H:%M","short":"%d %b %H:%M"},"pm":"pm"}};
|
584
|
+
I18n.translations["en"] = I18n.extend((I18n.translations["en"] || {}), {"admin":{"edit":{"title":"Edit"},"show":{"note":"more details","title":"Show"}},"date":{"abbr_day_names":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"abbr_month_names":[null,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"day_names":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"formats":{"default":"%Y-%m-%d","long":"%B %d, %Y","short":"%b %d"},"month_names":[null,"January","February","March","April","May","June","July","August","September","October","November","December"]},"fallback_test":"Success","foo":"Foo","null_test":"fallback for null","number":{"currency":{"format":{"delimiter":",","format":"%u%n","precision":2,"separator":".","unit":"$"}},"format":{"delimiter":",","precision":3,"separator":"."}},"time":{"am":"am","formats":{"default":"%a, %d %b %Y %H:%M:%S %z","long":"%B %d, %Y %H:%M","short":"%d %b %H:%M"},"pm":"pm"}});
|
585
585
|
EOS
|
586
586
|
)
|
587
587
|
end
|
data/spec/spec_helper.rb
CHANGED
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.0.0.
|
4
|
+
version: 3.0.0.rc12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.6'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.6.6
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,6 +27,9 @@ dependencies:
|
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0.6'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.6.6
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: appraisal
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,18 +157,18 @@ files:
|
|
151
157
|
- spec/fixtures/no_config.yml
|
152
158
|
- spec/fixtures/no_scope.yml
|
153
159
|
- spec/fixtures/simple_scope.yml
|
154
|
-
- spec/i18n_js_fallback_locales_spec.rb
|
155
|
-
- spec/i18n_js_spec.rb
|
156
160
|
- spec/js/currency.spec.js
|
157
161
|
- spec/js/current_locale.spec.js
|
158
162
|
- spec/js/dates.spec.js
|
159
163
|
- spec/js/defaults.spec.js
|
164
|
+
- spec/js/extend.spec.js
|
160
165
|
- spec/js/interpolation.spec.js
|
161
166
|
- spec/js/jasmine/MIT.LICENSE
|
162
167
|
- spec/js/jasmine/jasmine-html.js
|
163
168
|
- spec/js/jasmine/jasmine.css
|
164
169
|
- spec/js/jasmine/jasmine.js
|
165
170
|
- spec/js/jasmine/jasmine_favicon.png
|
171
|
+
- spec/js/locales.spec.js
|
166
172
|
- spec/js/localization.spec.js
|
167
173
|
- spec/js/numbers.spec.js
|
168
174
|
- spec/js/placeholder.spec.js
|
@@ -174,10 +180,12 @@ files:
|
|
174
180
|
- spec/js/translate.spec.js
|
175
181
|
- spec/js/translations.js
|
176
182
|
- spec/js/utility_functions.spec.js
|
177
|
-
- spec/
|
183
|
+
- spec/ruby/i18n/js/dependencies_spec.rb
|
184
|
+
- spec/ruby/i18n/js/fallback_locales_spec.rb
|
185
|
+
- spec/ruby/i18n/js/segment_spec.rb
|
186
|
+
- spec/ruby/i18n/js/utils_spec.rb
|
187
|
+
- spec/ruby/i18n/js_spec.rb
|
178
188
|
- spec/spec_helper.rb
|
179
|
-
- spec/sprockets_spec.rb
|
180
|
-
- spec/utils_spec.rb
|
181
189
|
homepage: http://rubygems.org/gems/i18n-js
|
182
190
|
licenses:
|
183
191
|
- MIT
|
@@ -198,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
206
|
version: 1.3.1
|
199
207
|
requirements: []
|
200
208
|
rubyforge_project:
|
201
|
-
rubygems_version: 2.
|
209
|
+
rubygems_version: 2.5.0
|
202
210
|
signing_key:
|
203
211
|
specification_version: 4
|
204
212
|
summary: It's a small library to provide the Rails I18n translations on the Javascript.
|
@@ -226,18 +234,18 @@ test_files:
|
|
226
234
|
- spec/fixtures/no_config.yml
|
227
235
|
- spec/fixtures/no_scope.yml
|
228
236
|
- spec/fixtures/simple_scope.yml
|
229
|
-
- spec/i18n_js_fallback_locales_spec.rb
|
230
|
-
- spec/i18n_js_spec.rb
|
231
237
|
- spec/js/currency.spec.js
|
232
238
|
- spec/js/current_locale.spec.js
|
233
239
|
- spec/js/dates.spec.js
|
234
240
|
- spec/js/defaults.spec.js
|
241
|
+
- spec/js/extend.spec.js
|
235
242
|
- spec/js/interpolation.spec.js
|
236
243
|
- spec/js/jasmine/MIT.LICENSE
|
237
244
|
- spec/js/jasmine/jasmine-html.js
|
238
245
|
- spec/js/jasmine/jasmine.css
|
239
246
|
- spec/js/jasmine/jasmine.js
|
240
247
|
- spec/js/jasmine/jasmine_favicon.png
|
248
|
+
- spec/js/locales.spec.js
|
241
249
|
- spec/js/localization.spec.js
|
242
250
|
- spec/js/numbers.spec.js
|
243
251
|
- spec/js/placeholder.spec.js
|
@@ -249,8 +257,10 @@ test_files:
|
|
249
257
|
- spec/js/translate.spec.js
|
250
258
|
- spec/js/translations.js
|
251
259
|
- spec/js/utility_functions.spec.js
|
252
|
-
- spec/
|
260
|
+
- spec/ruby/i18n/js/dependencies_spec.rb
|
261
|
+
- spec/ruby/i18n/js/fallback_locales_spec.rb
|
262
|
+
- spec/ruby/i18n/js/segment_spec.rb
|
263
|
+
- spec/ruby/i18n/js/utils_spec.rb
|
264
|
+
- spec/ruby/i18n/js_spec.rb
|
253
265
|
- spec/spec_helper.rb
|
254
|
-
- spec/sprockets_spec.rb
|
255
|
-
- spec/utils_spec.rb
|
256
266
|
has_rdoc:
|