i18n-js 2.1.2 → 3.0.11

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.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +24 -0
  3. data/.gitignore +5 -4
  4. data/.npmignore +27 -0
  5. data/.travis.yml +37 -0
  6. data/Appraisals +20 -0
  7. data/CHANGELOG.md +354 -0
  8. data/Gemfile +1 -1
  9. data/README.md +872 -0
  10. data/Rakefile +19 -7
  11. data/app/assets/javascripts/i18n/filtered.js.erb +23 -0
  12. data/app/assets/javascripts/i18n/shims.js +208 -0
  13. data/app/assets/javascripts/i18n/translations.js +3 -0
  14. data/app/assets/javascripts/i18n.js +1077 -0
  15. data/gemfiles/i18n_0_6.gemfile +7 -0
  16. data/gemfiles/i18n_0_7.gemfile +7 -0
  17. data/gemfiles/i18n_0_8.gemfile +7 -0
  18. data/gemfiles/i18n_0_9.gemfile +7 -0
  19. data/gemfiles/i18n_1_0.gemfile +7 -0
  20. data/i18n-js.gemspec +11 -9
  21. data/lib/i18n/js/dependencies.rb +59 -0
  22. data/lib/i18n/js/engine.rb +87 -0
  23. data/lib/i18n/js/fallback_locales.rb +70 -0
  24. data/lib/{i18n-js → i18n/js}/middleware.rb +32 -9
  25. data/lib/i18n/js/private/hash_with_symbol_keys.rb +36 -0
  26. data/lib/i18n/js/segment.rb +88 -0
  27. data/lib/i18n/js/utils.rb +52 -0
  28. data/lib/i18n/js/version.rb +7 -0
  29. data/lib/i18n/js.rb +242 -0
  30. data/lib/i18n-js.rb +1 -177
  31. data/lib/rails/generators/i18n/js/config/config_generator.rb +19 -0
  32. data/{config → lib/rails/generators/i18n/js/config/templates}/i18n-js.yml +11 -6
  33. data/lib/tasks/export.rake +8 -0
  34. data/package.json +25 -0
  35. data/spec/fixtures/custom_path.yml +5 -0
  36. data/spec/fixtures/default.yml +5 -0
  37. data/spec/fixtures/erb.yml +5 -0
  38. data/spec/fixtures/except_condition.yml +7 -0
  39. data/spec/fixtures/js_export_dir_custom.yml +7 -0
  40. data/spec/fixtures/js_export_dir_none.yml +6 -0
  41. data/spec/fixtures/js_extend_parent.yml +6 -0
  42. data/spec/fixtures/js_extend_segment.yml +6 -0
  43. data/spec/fixtures/js_file_per_locale.yml +7 -0
  44. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_default_locale_symbol.yml +4 -0
  45. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_hash.yml +6 -0
  46. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_locale.yml +4 -0
  47. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_locale_without_fallback_translations.yml +4 -0
  48. data/spec/fixtures/js_file_per_locale_with_fallbacks_enabled.yml +4 -0
  49. data/spec/fixtures/js_file_per_locale_without_fallbacks.yml +4 -0
  50. data/spec/fixtures/js_file_with_namespace_and_pretty_print.yml +7 -0
  51. data/spec/fixtures/js_sort_translation_keys_false.yml +6 -0
  52. data/spec/fixtures/js_sort_translation_keys_true.yml +6 -0
  53. data/spec/{resources → fixtures}/locales.yml +13 -1
  54. data/spec/fixtures/multiple_conditions.yml +7 -0
  55. data/spec/fixtures/multiple_conditions_per_locale.yml +7 -0
  56. data/spec/fixtures/multiple_files.yml +7 -0
  57. data/spec/{resources → fixtures}/no_config.yml +0 -0
  58. data/spec/fixtures/no_scope.yml +4 -0
  59. data/spec/fixtures/simple_scope.yml +5 -0
  60. data/spec/js/currency.spec.js +62 -0
  61. data/spec/js/current_locale.spec.js +19 -0
  62. data/spec/js/dates.spec.js +265 -0
  63. data/spec/js/defaults.spec.js +31 -0
  64. data/spec/js/extend.spec.js +110 -0
  65. data/spec/js/interpolation.spec.js +124 -0
  66. data/spec/js/jasmine/MIT.LICENSE +20 -0
  67. data/spec/js/jasmine/jasmine-html.js +190 -0
  68. data/spec/js/jasmine/jasmine.css +166 -0
  69. data/spec/js/jasmine/jasmine.js +2476 -0
  70. data/spec/js/jasmine/jasmine_favicon.png +0 -0
  71. data/spec/js/locales.spec.js +31 -0
  72. data/spec/js/localization.spec.js +48 -0
  73. data/spec/js/numbers.spec.js +170 -0
  74. data/spec/js/placeholder.spec.js +24 -0
  75. data/spec/js/pluralization.spec.js +211 -0
  76. data/spec/js/prepare_options.spec.js +41 -0
  77. data/spec/js/require.js +2083 -0
  78. data/spec/js/specs.html +49 -0
  79. data/spec/js/specs_requirejs.html +72 -0
  80. data/spec/js/translate.spec.js +277 -0
  81. data/spec/js/translations.js +164 -0
  82. data/spec/js/utility_functions.spec.js +20 -0
  83. data/spec/ruby/i18n/js/fallback_locales_spec.rb +84 -0
  84. data/spec/ruby/i18n/js/segment_spec.rb +157 -0
  85. data/spec/ruby/i18n/js/utils_spec.rb +106 -0
  86. data/spec/ruby/i18n/js_spec.rb +627 -0
  87. data/spec/spec_helper.rb +55 -14
  88. data/yarn.lock +131 -0
  89. metadata +188 -96
  90. data/.rspec +0 -1
  91. data/Gemfile.lock +0 -51
  92. data/README.rdoc +0 -305
  93. data/lib/i18n-js/engine.rb +0 -62
  94. data/lib/i18n-js/railtie.rb +0 -13
  95. data/lib/i18n-js/rake.rb +0 -16
  96. data/lib/i18n-js/version.rb +0 -10
  97. data/spec/i18n_spec.js +0 -768
  98. data/spec/i18n_spec.rb +0 -205
  99. data/spec/resources/custom_path.yml +0 -4
  100. data/spec/resources/default.yml +0 -4
  101. data/spec/resources/js_file_per_locale.yml +0 -3
  102. data/spec/resources/multiple_conditions.yml +0 -6
  103. data/spec/resources/multiple_files.yml +0 -6
  104. data/spec/resources/no_scope.yml +0 -3
  105. data/spec/resources/simple_scope.yml +0 -4
  106. data/vendor/assets/javascripts/i18n/translations.js.erb +0 -7
  107. data/vendor/assets/javascripts/i18n.js +0 -450
data/Rakefile CHANGED
@@ -1,13 +1,25 @@
1
+ require "appraisal"
2
+ require "rubygems"
1
3
  require "bundler"
2
- Bundler::GemHelper.install_tasks
4
+ require "rspec/core/rake_task"
3
5
 
4
- require "spec_js/rake_task"
5
- SpecJs::RakeTask.new do |t|
6
- t.env_js = false
7
- end
6
+ Bundler::GemHelper.install_tasks
8
7
 
9
- require "rspec/core/rake_task"
10
8
  RSpec::Core::RakeTask.new(:"spec:ruby")
11
9
 
10
+ desc "Run JavaScript specs"
11
+ task "spec:js" do
12
+ # Need to call `exit!` manually to propogate exit status
13
+ system "npm", "test" or exit!(1)
14
+ end
15
+
12
16
  desc "Run all specs"
13
- task :spec => [:"spec:ruby", :"spec:js"]
17
+ task :spec => ["spec:ruby", "spec:js"]
18
+
19
+ if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
20
+ task :default do
21
+ sh "appraisal install && rake appraisal spec"
22
+ end
23
+ else
24
+ task :default => :spec
25
+ end
@@ -0,0 +1,23 @@
1
+ <%# encoding: utf-8 %>
2
+
3
+ // Using UMD pattern from
4
+ // https://github.com/umdjs/umd#regular-module
5
+ // `returnExports.js` version
6
+ ;(function (root, factory) {
7
+ if (typeof define === 'function' && define.amd) {
8
+ // AMD. Register as an anonymous module.
9
+ define(["i18n"], factory);
10
+ } else if (typeof module === 'object' && module.exports) {
11
+ // Node. Does not work with strict CommonJS, but
12
+ // only CommonJS-like environments that support module.exports,
13
+ // like Node.
14
+ factory(require("i18n"));
15
+ } else {
16
+ // Browser globals (root is window)
17
+ factory(root.I18n);
18
+ }
19
+ }(this, function(I18n) {
20
+ "use strict";
21
+
22
+ I18n.translations = <%= I18n::JS.filtered_translations.to_json %>;
23
+ }));
@@ -0,0 +1,208 @@
1
+ // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf
2
+ if (!Array.prototype.indexOf) {
3
+ Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
4
+ "use strict";
5
+ if (this == null) {
6
+ throw new TypeError();
7
+ }
8
+ var t = Object(this);
9
+ var len = t.length >>> 0;
10
+ if (len === 0) {
11
+ return -1;
12
+ }
13
+ var n = 0;
14
+ if (arguments.length > 1) {
15
+ n = Number(arguments[1]);
16
+ if (n != n) { // shortcut for verifying if it's NaN
17
+ n = 0;
18
+ } else if (n != 0 && n != Infinity && n != -Infinity) {
19
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
20
+ }
21
+ }
22
+ if (n >= len) {
23
+ return -1;
24
+ }
25
+ var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
26
+ for (; k < len; k++) {
27
+ if (k in t && t[k] === searchElement) {
28
+ return k;
29
+ }
30
+ }
31
+ return -1;
32
+ }
33
+ }
34
+
35
+ // Production steps of ECMA-262, Edition 5, 15.4.4.18
36
+ // Reference: http://es5.github.com/#x15.4.4.18
37
+ // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach
38
+ if ( !Array.prototype.forEach ) {
39
+
40
+ Array.prototype.forEach = function forEach( callback, thisArg ) {
41
+
42
+ var T, k;
43
+
44
+ if ( this == null ) {
45
+ throw new TypeError( "this is null or not defined" );
46
+ }
47
+
48
+ // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
49
+ var O = Object(this);
50
+
51
+ // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
52
+ // 3. Let len be ToUint32(lenValue).
53
+ var len = O.length >>> 0; // Hack to convert O.length to a UInt32
54
+
55
+ // 4. If IsCallable(callback) is false, throw a TypeError exception.
56
+ // See: http://es5.github.com/#x9.11
57
+ if ( {}.toString.call(callback) !== "[object Function]" ) {
58
+ throw new TypeError( callback + " is not a function" );
59
+ }
60
+
61
+ // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
62
+ if ( thisArg ) {
63
+ T = thisArg;
64
+ }
65
+
66
+ // 6. Let k be 0
67
+ k = 0;
68
+
69
+ // 7. Repeat, while k < len
70
+ while( k < len ) {
71
+
72
+ var kValue;
73
+
74
+ // a. Let Pk be ToString(k).
75
+ // This is implicit for LHS operands of the in operator
76
+ // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
77
+ // This step can be combined with c
78
+ // c. If kPresent is true, then
79
+ if ( Object.prototype.hasOwnProperty.call(O, k) ) {
80
+
81
+ // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
82
+ kValue = O[ k ];
83
+
84
+ // ii. Call the Call internal method of callback with T as the this value and
85
+ // argument list containing kValue, k, and O.
86
+ callback.call( T, kValue, k, O );
87
+ }
88
+ // d. Increase k by 1.
89
+ k++;
90
+ }
91
+ // 8. return undefined
92
+ };
93
+ }
94
+
95
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
96
+ if (!Array.prototype.some)
97
+ {
98
+ Array.prototype.some = function(fun /*, thisArg */)
99
+ {
100
+ 'use strict';
101
+
102
+ if (this === void 0 || this === null)
103
+ throw new TypeError();
104
+
105
+ var t = Object(this);
106
+ var len = t.length >>> 0;
107
+ if (typeof fun !== 'function')
108
+ throw new TypeError();
109
+
110
+ var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
111
+ for (var i = 0; i < len; i++)
112
+ {
113
+ if (i in t && fun.call(thisArg, t[i], i, t))
114
+ return true;
115
+ }
116
+
117
+ return false;
118
+ };
119
+ }
120
+
121
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
122
+ if (!Array.prototype.map) {
123
+
124
+ Array.prototype.map = function(callback/*, thisArg*/) {
125
+
126
+ var T, A, k;
127
+
128
+ if (this == null) {
129
+ throw new TypeError('this is null or not defined');
130
+ }
131
+
132
+ // 1. Let O be the result of calling ToObject passing the |this|
133
+ // value as the argument.
134
+ var O = Object(this);
135
+
136
+ // 2. Let lenValue be the result of calling the Get internal
137
+ // method of O with the argument "length".
138
+ // 3. Let len be ToUint32(lenValue).
139
+ var len = O.length >>> 0;
140
+
141
+ // 4. If IsCallable(callback) is false, throw a TypeError exception.
142
+ // See: http://es5.github.com/#x9.11
143
+ if (typeof callback !== 'function') {
144
+ throw new TypeError(callback + ' is not a function');
145
+ }
146
+
147
+ // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
148
+ if (arguments.length > 1) {
149
+ T = arguments[1];
150
+ }
151
+
152
+ // 6. Let A be a new array created as if by the expression new Array(len)
153
+ // where Array is the standard built-in constructor with that name and
154
+ // len is the value of len.
155
+ A = new Array(len);
156
+
157
+ // 7. Let k be 0
158
+ k = 0;
159
+
160
+ // 8. Repeat, while k < len
161
+ while (k < len) {
162
+
163
+ var kValue, mappedValue;
164
+
165
+ // a. Let Pk be ToString(k).
166
+ // This is implicit for LHS operands of the in operator
167
+ // b. Let kPresent be the result of calling the HasProperty internal
168
+ // method of O with argument Pk.
169
+ // This step can be combined with c
170
+ // c. If kPresent is true, then
171
+ if (k in O) {
172
+
173
+ // i. Let kValue be the result of calling the Get internal
174
+ // method of O with argument Pk.
175
+ kValue = O[k];
176
+
177
+ // ii. Let mappedValue be the result of calling the Call internal
178
+ // method of callback with T as the this value and argument
179
+ // list containing kValue, k, and O.
180
+ mappedValue = callback.call(T, kValue, k, O);
181
+
182
+ // iii. Call the DefineOwnProperty internal method of A with arguments
183
+ // Pk, Property Descriptor
184
+ // { Value: mappedValue,
185
+ // Writable: true,
186
+ // Enumerable: true,
187
+ // Configurable: true },
188
+ // and false.
189
+
190
+ // In browsers that support Object.defineProperty, use the following:
191
+ // Object.defineProperty(A, k, {
192
+ // value: mappedValue,
193
+ // writable: true,
194
+ // enumerable: true,
195
+ // configurable: true
196
+ // });
197
+
198
+ // For best browser support, use the following:
199
+ A[k] = mappedValue;
200
+ }
201
+ // d. Increase k by 1.
202
+ k++;
203
+ }
204
+
205
+ // 9. return A
206
+ return A;
207
+ };
208
+ }
@@ -0,0 +1,3 @@
1
+ //= require i18n/shims
2
+ //= require i18n
3
+ //= require i18n/filtered