opal-i18next 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a608d9ba3fba9ee08cc35ee247cad22a5c89c9950232c7f9f70c73e588d6da9a
4
- data.tar.gz: 8e82b9dadb4b73f55d5156ac1deccfe7c1b17f1c64abec548734c33f7b9c040b
3
+ metadata.gz: 7fcbdd82651c265dc9b07aad0f56ae5dc80b13562e69904c7083d75d297fafed
4
+ data.tar.gz: 31bc9a0cd604bdc2b911290fd3aa7659dde49782ef8f02f2dee0cbd5df3618f1
5
5
  SHA512:
6
- metadata.gz: 904501d0d9ef54c0c23a011cb5326db007e06f5d6ae42880e778330ce68003e3b667a6d5c19b92a3be4ee95f9dcc7b1c147e4fd2e732208139038f0bb85ba74e
7
- data.tar.gz: 7494d5183b943f29a92745405684c97569bff3309396f7abc9eebdf558185c0c616e3e68c6156d8866ba3f4be8cf1a4774a99d8d5c172242a4674152ac872240
6
+ metadata.gz: c81f84936adae8165b9519651d66ca0ffc84b472f1315793fd83157fa0c4bf3473760cef76fd500873544a52414de0cbbc0f09c5b423b8988b1078ba1e9bc0e4
7
+ data.tar.gz: 26dd77f60baf03f73791cf3dead57f98a5d8369b8ff60bda0e3c2ebe33767c188580469668b2a3fff08023d4337dfa4f01695053f1d7aacd47462b7704f2b9e4
@@ -2,30 +2,56 @@ require "opal"
2
2
  require "native"
3
3
  require "json"
4
4
 
5
- # Uses PromiseV2 if present
6
- # @see https://opalrb.com/docs/guides/v1.5.1/async PromiseV2
7
- module I18next
5
+ # Uses PromiseV2 if present
6
+ # @see https://opalrb.com/docs/guides/v1.5.1/async PromiseV2
7
+ module I18next
8
8
 
9
9
  Promise = defined?(PromiseV2) ? PromiseV2 : ::Promise
10
10
 
11
- # {I18next} is a basic wrapper around the JavaScript {https://www.i18next.com i18next module}.
11
+ # {I18next} is a basic wrapper around the JavaScript I18N module {https://www.i18next.com i18next}.
12
12
  #
13
- # It wraps i18next methods {https://www.i18next.com/overview/api#addResource addResource},
14
- # {https://www.i18next.com/overview/api#addResources addResources},
13
+ # It wraps i18next functions {https://www.i18next.com/overview/api#addresource addResource},
14
+ # {https://www.i18next.com/overview/api#addresourcebundle addResourceBundle},
15
+ # {https://www.i18next.com/overview/api#addresources addResources},
15
16
  # {https://www.i18next.com/overview/api#changelanguage changeLanguage},
17
+ # {https://www.i18next.com/overview/api#cloneinstance cloneInstance},
16
18
  # {https://www.i18next.com/overview/api#dir dir},
17
19
  # {https://www.i18next.com/overview/api#exists exists},
18
- # {https://www.i18next.com/overview/api#getResource getResource},
19
- # {https://www.i18next.com/overview/api#getResourceBundle getResourceBundle},
20
+ # {https://www.i18next.com/overview/api#getdatabylanguage getDataByLanguage},
21
+ # {https://www.i18next.com/overview/api#getfixedt getFixedT},
22
+ # {https://www.i18next.com/overview/api#getresource getResource},
23
+ # {https://www.i18next.com/overview/api#getresourcebundle getResourceBundle},
24
+ # {https://www.i18next.com/overview/api#hasresourcebundle hasResourceBundle},
20
25
  # {https://www.i18next.com/overview/api#init init},
21
26
  # {https://www.i18next.com/overview/api#language language},
22
27
  # {https://www.i18next.com/overview/api#languages languages},
23
- # {https://www.i18next.com/overview/api#loadNamespaces loadNamespaces},
24
- # {https://www.i18next.com/overview/api#resolvedLanguage resolvedLanguage},
25
- # {https://www.i18next.com/overview/api#setDefaultNamespace setDefaultNamespace},
28
+ # {https://www.i18next.com/overview/api#loadlanguages loadLanguages},
29
+ # {https://www.i18next.com/overview/api#loadnamespaces loadNamespaces},
30
+ # {https://www.i18next.com/overview/api#events off},
31
+ # {https://www.i18next.com/overview/api#events on},
32
+ # {https://www.i18next.com/overview/api#reloadresources reloadResources},
33
+ # {https://www.i18next.com/overview/api#removeresourcebundle removeResourceBundle},
34
+ # {https://www.i18next.com/overview/api#resolvedlanguage resolvedLanguage},
35
+ # {https://www.i18next.com/overview/api#setdefaultnamespace setDefaultNamespace},
36
+ # {https://www.i18next.com/overview/api#store-events store.on},
26
37
  # {https://www.i18next.com/overview/api#t t}, and
27
38
  # {https://www.i18next.com/overview/api#use use}.
28
- # It also provides method {#import_js_module} for loading {https://www.i18next.com/overview/plugins-and-utils i18next plugins}.
39
+ #
40
+ # Function {https://www.i18next.com/overview/api#createinstance createInstance}
41
+ # is not supported because each I18next::I18next instance has its own
42
+ # JavaScript i18next module instance. To create a new instance use
43
+ # I18next::I18next.new.
44
+ #
45
+ # Function {https://www.i18next.com/overview/api#format format} is not supported
46
+ # because it is a legacy function that has been superseded by
47
+ # {https://www.i18next.com/translation-function/formatting built-in formatting
48
+ # functions}.
49
+ #
50
+ # It can handle {https://www.i18next.com/overview/api#events i18next events}.
51
+ # See methods {#on} and {#off}.
52
+ #
53
+ # It also provides method {#import_js_module} for loading
54
+ # {https://www.i18next.com/overview/plugins-and-utils i18next plugins}.
29
55
  class I18next
30
56
 
31
57
  # Each I18next instance has its own i18next Javascript module
@@ -41,7 +67,7 @@ require "json"
41
67
  # @param module_path [String] the path to the module's *.js file, may be a
42
68
  # file path or a URL
43
69
  #
44
- # @return [Promise] a promise that resolves to the JavaScript module that can be passed
70
+ # @return [Promise] a promise that resolves to a JavaScript module that can be passed
45
71
  # to the {#use} method
46
72
  #
47
73
  def import_js_module(module_path)
@@ -55,16 +81,19 @@ require "json"
55
81
  promise
56
82
  end
57
83
 
58
- # Loads an {https://www.i18next.com/overview/api#use i18next} plugin
84
+ # Loads an {https://www.i18next.com/overview/plugins-and-utils i18next plugin}
59
85
  #
60
- # @param js_module a plugin's JavaScript module that was imported
86
+ # @param js_module [Object] a plugin's JavaScript module that was imported
61
87
  # by method {#import_js_module}
88
+ # @return [I18next::I18next] self
89
+ # @see https://www.i18next.com/overview/api#use The i18next use function
62
90
  def use(js_module)
63
91
  `#{@i18next}.use(js_module.default)`
92
+ self
64
93
  end
65
94
 
66
95
  # Initializes {https://www.i18next.com/overview/api#init i18next}
67
- # @param options [Hash] a hash with keys matching the {https://www.i18next.com/overview/configuration-options i18next options}.
96
+ # @param options [Hash] a hash with keys matching the {https://www.i18next.com/overview/configuration-options i18next options}
68
97
  # @return [Promise] a promise that resolves when i18next has been initialized
69
98
  def init(options = {})
70
99
  promise = Promise.new
@@ -82,6 +111,7 @@ require "json"
82
111
  # @param language [String] the new language
83
112
  # @return [Promise] a promise that resolves when the language's
84
113
  # translations have been loaded
114
+ # @see https://www.i18next.com/overview/api#changelanguage The i18next changeLanguage function
85
115
  def change_language(language)
86
116
  promise = Promise.new
87
117
  `
@@ -93,7 +123,8 @@ require "json"
93
123
  promise
94
124
  end
95
125
 
96
- # @return [String] the current {https://www.i18next.com/overview/api#language i18next} language
126
+ # @return [String] the current language
127
+ # @see https://www.i18next.com/overview/api#language The i18next language function
97
128
  def language
98
129
  `#{@i18next}.language`
99
130
  end
@@ -102,36 +133,53 @@ require "json"
102
133
  # @param [String, Array<String>] key one or more keys that reference translations
103
134
  # @param [Hash] options options for formatters, post processors, etc.
104
135
  # @return [String] the translation associated with the first key that resolves
136
+ # @see https://www.i18next.com/overview/api#t The i18next t function
105
137
  def t(key, options={})
106
138
  `#{@i18next}.t(key, #{options.to_n})`
107
139
  end
108
140
 
109
141
  # @return [Boolean] true if the key exists
142
+ # @see https://www.i18next.com/overview/api#exists The i18next exists function
110
143
  def exists(key)
111
144
  `#{@i18next}.exists(key)`
112
145
  end
113
146
 
114
- # @private
115
- def get_fixed_t
116
- raise 'Not implemented'
147
+ # Returns a Proc that acts as a +t+ method that defaults to a language and namespace.
148
+ # @example When calling the returned Proc, use brackets, not parentheses:
149
+ # en = get_fixed_t("en")
150
+ # translation = en["key"]
151
+ # @param lng [String] language
152
+ # @param ns [String] namespace
153
+ # @param key_prefix [String] key prefix
154
+ # @see https://www.i18next.com/overview/api#getfixedt The i18next getFixedT function
155
+ def get_fixed_t(lng = nil, ns = nil, key_prefix = nil)
156
+ if key_prefix && ns && lng
157
+ `#{@i18next}.getFixedT(lng, ns, key_prefix)`
158
+ elsif ns && lng
159
+ `#{@i18next}.getFixedT(lng, ns)`
160
+ elsif lng
161
+ `#{@i18next}.getFixedT(lng)`
162
+ else
163
+ `#{@i18next}.getFixedT()`
164
+ end
117
165
  end
118
166
 
119
- # @see https://www.i18next.com/overview/api#languages The i18next languages method
167
+ # @see https://www.i18next.com/overview/api#languages The i18next languages function
120
168
  # @return language codes that will be used to look up the translation value
121
169
  def languages
122
170
  `#{@i18next}.languages`
123
171
  end
124
172
 
125
- # @see https://www.i18next.com/overview/api#resolvedLanguage The i18next resolvedLanguage method
173
+ # @see https://www.i18next.com/overview/api#resolvedlanguage The i18next resolvedLanguage function
126
174
  # @return the current resolved language
127
175
  def resolved_language
128
176
  `#{@i18next}.resolvedLanguage`
129
177
  end
130
178
 
131
179
  # Loads additional namespaces not defined in init options
132
- # @param [String, Array<String>] ns one or more namespaces
180
+ # @param ns [String, Array<String>] one or more namespaces
133
181
  # @return [Promise] a promise that resolves when the namespaces have been loaded
134
- # @see https://www.i18next.com/overview/api#loadNamespaces The i18next loadNamespaces method
182
+ # @see https://www.i18next.com/overview/api#loadnamespaces The i18next loadNamespaces function
135
183
  def load_namespaces(ns)
136
184
  promise = Promise.new
137
185
  `
@@ -144,19 +192,45 @@ require "json"
144
192
  promise
145
193
  end
146
194
 
147
- # @private
148
- def load_languages(*lngs)
149
- raise 'Not implemented'
195
+ # Loads additional languages not defined in init options (preload).
196
+ # @param lngs [String, Array<String>] one or more languages
197
+ # @return [Promise] a promise that resolves when the languages have been loaded
198
+ # @see https://www.i18next.com/overview/api#loadlanguages The i18next loadLanguages function
199
+ def load_languages(lngs)
200
+ promise = Promise.new
201
+ `
202
+ #{@i18next}.loadLanguages(lngs)
203
+ .then(
204
+ () => {
205
+ promise.$resolve()
206
+ });
207
+ `
208
+ promise
150
209
  end
151
210
 
152
- # @private
153
- def reload_resources
154
- raise 'Not implemented'
211
+ # Reloads resources on given state.
212
+ #
213
+ # Optionally you can pass an array of languages and/or namespaces as params if
214
+ # you don't want to reload all.
215
+ # @param lng [String, Array<String>] one or more languages
216
+ # @param ns [String, Array<String>] one or more namespaces
217
+ # @return [Promise] a promise that resolves when the resources have been loaded
218
+ # @see https://www.i18next.com/overview/api#reloadresources The i18next reloadResources function
219
+ def reload_resources(lng = nil, ns = nil)
220
+ if !lng && !ns
221
+ reload_all_resources
222
+ elsif lng && !ns
223
+ reload_lng_resources(lng)
224
+ elsif !lng && ns
225
+ reload_ns_resources(ns)
226
+ else
227
+ reload_lng_ns_resources(lng, ns)
228
+ end
155
229
  end
156
230
 
157
231
  # Changes the default namespace.
158
232
  # @param ns [String] new default namespace
159
- # @see https://www.i18next.com/overview/api#setDefaultNamespace The i18next setDefaultNamespace method
233
+ # @see https://www.i18next.com/overview/api#setdefaultnamespace The i18next setDefaultNamespace function
160
234
  def set_default_namespace(ns)
161
235
  `#{@i18next}.setDefaultNamespace(ns)`
162
236
  end
@@ -164,81 +238,232 @@ require "json"
164
238
  # Get a language's reading direction
165
239
  # @param lng [String] the language; if omitted, the current language is used
166
240
  # @return "ltr" or "rtl"
167
- # @see https://www.i18next.com/overview/api#dir The i18next dir method
241
+ # @see https://www.i18next.com/overview/api#dir The i18next dir function
168
242
  def dir(lng)
169
243
  `#{@i18next}.dir(lng)`
170
244
  end
171
245
 
172
- # @private
173
- def format(data, format, lng)
174
- raise 'Not implemented'
175
- end
176
-
177
- # @private
178
- def create_instance(options)
179
- raise 'Not implemented'
180
- end
181
-
182
- # @private
183
- def clone_instance(options)
184
- raise 'Not implemented'
185
- end
186
-
187
- # @private
188
- def off
189
- raise 'Not implemented'
190
- end
191
-
192
- # @private
193
- def on
194
- raise 'Not implemented'
195
- end
196
-
197
246
  # Gets one value by given key.
198
- # @see https://www.i18next.com/overview/api#getResource The i18next getResource method
247
+ # @param lng [String] language
248
+ # @param ns [String] namespace
249
+ # @param key_prefix [String] key prefix
250
+ # @param options [Hash] key separator and ignore JSON structure
251
+ # @see https://www.i18next.com/overview/api#getresource The i18next getResource function
199
252
  def get_resource(lng, ns, key, options = {})
200
253
  `#{@i18next}.getResource(lng, ns, key, options)`
201
254
  end
202
255
 
203
256
  # Adds one key/value.
204
- # @see https://www.i18next.com/overview/api#addResource The i18next addResource method
257
+ # @see https://www.i18next.com/overview/api#addresource The i18next addResource function
205
258
  def add_resource(lng, ns, key, value, options = {})
206
259
  `#{@i18next}.addResource(lng, ns, key, value, options)`
207
260
  end
208
261
 
209
262
  # Adds multiple key/values.
210
263
  # @param resources [Hash] key/value pairs
211
- # @see https://www.i18next.com/overview/api#addResources The i18next addResources method
264
+ # @see https://www.i18next.com/overview/api#addresources The i18next addResources function
212
265
  def add_resources(lng, ns, resources)
213
266
  `#{@i18next}.addResources(lng, ns, #{resources.to_n})`
214
267
  end
215
268
 
216
- # @private
217
- def add_resource_bundle(lng, ns, resouces, deep, overwrite)
218
- raise 'Not implemented'
269
+ # Adds a complete bundle
270
+ # @param lng [String] bundle language
271
+ # @param ns [String] bundle namespace
272
+ # @param deep [Boolean] if true will extend existing translations in the bundle
273
+ # @param overwrite [Boolean] if true it will overwrite existing translations in the bundle
274
+ # @see https://www.i18next.com/overview/api#addresourcebundle The i18next addResourceBundle function
275
+ def add_resource_bundle(lng, ns, resources, deep = false, overwrite = false)
276
+ `#{@i18next}.addResources(lng, ns, #{resources.to_n}, deep, overwrite)`
219
277
  end
220
278
 
221
- # @private
279
+ # Checks if a resource bundle exists
280
+ # @param lng [String] language
281
+ # @param ns [String] namespace
282
+ # @return [Boolean] true if the bundle exists
222
283
  def has_resource_bundle(lng, ns)
223
- raise 'Not implemented'
284
+ `#{@i18next}.hasResourceBundle(lng, ns)`
224
285
  end
225
286
 
226
- # @private
287
+ # Returns resource data for a language.
288
+ # @param lng [String] language
289
+ # @return [Hash] resource data
290
+ # @see https://www.i18next.com/overview/api#getbatabylanguage The i18next getDataByLanguage function
227
291
  def get_data_by_language(lng)
228
- raise 'Not implemented'
292
+ js_obj_to_ruby_hash(`#{@i18next}.getDataByLanguage(lng)`)
229
293
  end
230
294
 
231
295
  # Gets a resource bundle.
296
+ # @param lng [String] language
297
+ # @param ns [String] namespace
232
298
  # @return [Hash] key/value pairs
233
- # @see https://www.i18next.com/overview/api#getResourceBundle The i18next getResourceBundle method
299
+ # @see https://www.i18next.com/overview/api#getresourcebundle The i18next getResourceBundle function
234
300
  def get_resource_bundle(lng, ns)
235
- JSON.parse(`JSON.stringify(#{@i18next}.getResourceBundle(lng, ns))`)
301
+ js_obj_to_ruby_hash(`#{@i18next}.getResourceBundle(lng, ns)`)
236
302
  end
237
303
 
238
- # @private
304
+ # Removes a resource bundle exists
305
+ # @param lng [String] language
306
+ # @param ns [String] namespace
307
+ # @see https://www.i18next.com/overview/api#removeresourcebundle The i18next removeResourceBundle function
239
308
  def remove_resource_bundle(lng, ns)
240
- raise 'Not implemented'
309
+ `#{@i18next}.removeResourceBundle(lng, ns)`
310
+ end
311
+
312
+ # Create a listener for an i18next event.
313
+ # @param event [String] event name
314
+ # @param &listener [block] an event listener that is passed event-dependent arguments
315
+ # @return [Proc] a listener, which can be used to unsubscribe it via method +off(event, listener)+
316
+ # @see https://www.i18next.com/overview/api#events The i18next events
317
+ # @see #off
318
+ def on(event, &listener)
319
+ # Some events require special listeners because those events return JavaScript objects
320
+ # to the listeners, and those object must be converted to Ruby Hashes.
321
+ case event
322
+ when "initialized"
323
+ _onInitialized(listener)
324
+ when "loaded"
325
+ _onLoaded(listener)
326
+ else
327
+ `#{@i18next}.on(event, listener)`
328
+ end
329
+ listener
330
+ end
331
+
332
+ # Create a listener for an i18next store event.
333
+ #
334
+ # Only available after the +init+ call.
335
+ #
336
+ # @param event [String] event name ("added" or "removed")
337
+ # @param &listener [block] an event listener that is passed language and namespace arguments
338
+ # @return [Proc] the listener, which can be unsubscribed via method +off(event, listener)+
339
+ # @see https://www.i18next.com/overview/api#store-events The i18next store events
340
+ def store_on(event, &listener)
341
+ `#{@i18next}.store.on(event, listener)`
342
+ listener
343
+ end
344
+
345
+ # Unsubscribes an event's listener(s).
346
+ #
347
+ # Listeners are created by method {#on}.
348
+ # @param event [String] event name
349
+ # @param listener [Proc] the listener to unsubscribe; if absent, unsubscribe all listeners
350
+ # @see https://www.i18next.com/overview/api#events The i18next events
351
+ # @see #on
352
+ def off(event, listener = nil)
353
+ if listener
354
+ `#{@i18next}.off(event, listener)`
355
+ else
356
+ `#{@i18next}.off(event)`
357
+ end
358
+ end
359
+
360
+ # Creates a clone of the current instance.
361
+ #
362
+ # Shares store, plugins and initial configuration. Can be used to create an
363
+ # instance sharing storage but being independent on set language or default namespaces.
364
+ # @param options [Hash] a hash with keys matching the {https://www.i18next.com/overview/configuration-options i18next options}
365
+ # @return [I18next::I18next] a new instance
366
+ # @see https://www.i18next.com/overview/api#cloneinstance The i18next cloneInstance function
367
+ def clone_instance(options = {})
368
+ I18nextClone.new(@i18next, options)
369
+ end
370
+
371
+ private
372
+
373
+ # @private
374
+ class I18nextClone < I18next
375
+ def initialize(js_i18next, options)
376
+ @i18next = `#{js_i18next}.cloneInstance(#{options.to_n})`
377
+ end
378
+ end
379
+
380
+ # @private
381
+ def reload_all_resources
382
+ promise = Promise.new
383
+ `
384
+ #{@i18next}.reloadResources()
385
+ .then(
386
+ () => {
387
+ promise.$resolve()
388
+ });
389
+ `
390
+ promise
391
+ end
392
+
393
+ def reload_lng_resources(lng)
394
+ promise = Promise.new
395
+ `
396
+ #{@i18next}.reloadResources(lng)
397
+ .then(
398
+ () => {
399
+ promise.$resolve()
400
+ });
401
+ `
402
+ promise
403
+ end
404
+
405
+ def reload_ns_resources(ns)
406
+ promise = Promise.new
407
+ `
408
+ #{@i18next}.reloadResources(null, ns)
409
+ .then(
410
+ () => {
411
+ promise.$resolve()
412
+ });
413
+ `
414
+ promise
241
415
  end
242
416
 
417
+ def reload_lng_ns_resources(lng, ns)
418
+ promise = Promise.new
419
+ `
420
+ #{@i18next}.reloadResources(lng, ns)
421
+ .then(
422
+ () => {
423
+ promise.$resolve()
424
+ });
425
+ `
426
+ promise
427
+ end
428
+
429
+ # @private
430
+ # Create a listener for the i18next initialized event.
431
+ # @param &listener [Proc] an event listener block that is passed initialized options Hash
432
+ # @see https://www.i18next.com/overview/api#oninitialized The i18next initialized event
433
+ def _onInitialized(listener)
434
+ `
435
+ #{@i18next}.on("initialized", (options) => {
436
+ // Convert the JavaScript options object to a string and
437
+ // then convert that string to a Ruby hash that is passed
438
+ // to the listener.
439
+ listener.$call(Opal.JSON.$parse(JSON.stringify(options)))
440
+ })
441
+ `
442
+ end
443
+
444
+ # @private
445
+ # Create a listener for the i18next loaded event.
446
+ # @param listener [Proc] an event listener block that is passed loaded Hash
447
+ # @see https://www.i18next.com/overview/api#onloaded The i18next onLoaded event
448
+ def _onLoaded(listener)
449
+ `
450
+ #{@i18next}.on("loaded", (loaded) => {
451
+ // Convert the JavaScript load object to a string and
452
+ // then convert that string to a Ruby hash that is passed
453
+ // to the listener.
454
+ listener.$call(Opal.JSON.$parse(JSON.stringify(loaded)))
455
+ })
456
+ `
457
+ end
458
+
459
+ # @private
460
+ # Convert a JavaScript obj to a Ruby Hash.
461
+ # @param js_obj JavaScript object
462
+ # @return [Hash] Ruby Hash
463
+ def js_obj_to_ruby_hash(js_obj)
464
+ # Convert the JavaScript object to a string and then convert that string
465
+ # to a Ruby hash.
466
+ JSON.parse(`JSON.stringify(js_obj)`)
467
+ end
243
468
  end
244
469
  end
@@ -1,3 +1,3 @@
1
1
  module I18next
2
- VERSION = '0.2.0'
2
+ VERSION = '0.4.0'
3
3
  end
data/opal-i18next.gemspec CHANGED
@@ -5,11 +5,12 @@ Gem::Specification.new do |spec|
5
5
  spec.version = I18next::VERSION
6
6
  spec.summary = "An Opal wrapper for the JavaScript i18next module."
7
7
  spec.description = <<~DESC
8
- A basic Opal wrapper for the JavaScript i18next module that supports methods
9
- addResource, addResources, changeLanguage, dir, exists, getResource,
10
- getResourceBundle, init, language, languages, loadNamespaces, resolvedLanguage,
11
- t, and use. It also provides method import_js_module for
12
- loading i18next plugins.
8
+ A basic Opal wrapper for the JavaScript I18N module i18next that supports functions
9
+ addResource, addResourceBundle, addResources, changeLanguage, cloneInstance,
10
+ dir, exists, getDataByLanguage, getFixedT, getResource, getResourceBundle,
11
+ hasResourceBundle, init, language, languages, loadLanguages, loadNamespaces,
12
+ off, on, reloadResources, removeResourceBundle, resolvedLanguage, store.on,
13
+ t, and use. It also provides method import_js_module for loading i18next plugins.
13
14
  DESC
14
15
  spec.authors = ["Larry North"]
15
16
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-i18next
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Larry North
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-31 00:00:00.000000000 Z
11
+ date: 2022-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -25,11 +25,12 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.5.0
27
27
  description: |
28
- A basic Opal wrapper for the JavaScript i18next module that supports methods
29
- addResource, addResources, changeLanguage, dir, exists, getResource,
30
- getResourceBundle, init, language, languages, loadNamespaces, resolvedLanguage,
31
- t, and use. It also provides method import_js_module for
32
- loading i18next plugins.
28
+ A basic Opal wrapper for the JavaScript I18N module i18next that supports functions
29
+ addResource, addResourceBundle, addResources, changeLanguage, cloneInstance,
30
+ dir, exists, getDataByLanguage, getFixedT, getResource, getResourceBundle,
31
+ hasResourceBundle, init, language, languages, loadLanguages, loadNamespaces,
32
+ off, on, reloadResources, removeResourceBundle, resolvedLanguage, store.on,
33
+ t, and use. It also provides method import_js_module for loading i18next plugins.
33
34
  email:
34
35
  - lnorth@swnorth.com
35
36
  executables: []