isomorfeus-i18n 2.0.22 → 2.1.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: ea4c7508a819349ad06e7734619f4bfe04f1d363c28c0f4bd3a9ee18f36431c8
4
- data.tar.gz: f1d42b7a8a84c355ff9593560322c9d96419485b5c5434cce739ec2872ab71c5
3
+ metadata.gz: f0410bb425f90fed0d145096eb7b18ba67e3afb30939fec3234825cdf7920868
4
+ data.tar.gz: a6371b92807bb6928a3978da8b6ff0e63b942a437bf1ccd868a0c559271c840f
5
5
  SHA512:
6
- metadata.gz: 16c8f5808eb7942319deed94211942f393bd348c9cf216d6e6e8d3c1e296467c615f44ab8c48dfa5acc5a9c8733c06a97d9e5a379112d3344418f75860e99e29
7
- data.tar.gz: 424514deaa3ca4d5f0e5165bfb56de9a886bfabd16835acc41e817b13244d67b47ffb393384ee522f81c7899df8082cef029be0ed1e825b825e611bf958877a0
6
+ metadata.gz: 75eaaf56f00a678735d0ad85c502862c218fe720692e071ddeb62f2750744cdeb974c6f713632c8feb1361446c662e9bc62dac303768fedfdca5fda4f0ed808d
7
+ data.tar.gz: 8cae156462b749e6b569c31c2caf060ac164f4165963f38090443bab8f08ddb1c16260e413be9a9d27105ec0e247dc432b45a6f2a04359bb79fae45b86403cb4
data/README.md CHANGED
@@ -11,12 +11,72 @@ Supported formats: .mo, .po, .yml
11
11
 
12
12
  Using fast_gettext internally.
13
13
 
14
- ## Usage
14
+ ## Translation
15
15
 
16
16
  In any class:
17
17
  ```
18
- include LucidTranslation::Mixin
18
+ include LucidI18n::Mixin
19
19
  ```
20
-
21
20
  after which the _ gettext methods are available for translation.
22
- See https://github.com/grosser/fast_gettext and https://rubydoc.info/gems/gettext/
21
+ See the [fast_gettext documentation](https://github.com/grosser/fast_gettext) or the
22
+ [gettext documentation](https://rubydoc.info/gems/gettext/).
23
+
24
+ Also available is the `current_locale` helper, which provides the current locale as string, as it has been negotiated between browser and server.
25
+
26
+ ## Localization
27
+
28
+ In any class:
29
+ ```
30
+ include LucidI18n::Mixin
31
+ ```
32
+ after which the l method is available, which currently can localize Times, Dates and numbers.
33
+ See the [R18n core documentation](https://github.com/r18n/r18n-core)
34
+
35
+ Only the :full and :standard options are supported for the l method in all environments.
36
+
37
+ However, output may slightly differ between server and browser and also between browsers, depending on actual browser locale and implementation.
38
+ For most consistent and best results its best to format dates and numbers for display only within components in server side rendering or in the browser.
39
+
40
+ Within components, the l method allows for additional options for Date and Time objects:
41
+ ```ruby
42
+ # signature
43
+ l(object, format = :standard, options = {})
44
+ ```
45
+ Here format can be:
46
+ - :standard or :full, which try to be consistent with r18n options
47
+ and in addition:
48
+ - :custom, which passes the options hash along for formatting to the browser or node functions.
49
+ The following options are available for date/time formating:
50
+ - locale: locale string like 'de'
51
+ - time_zone or timeZone: timezone string like 'CET'
52
+ - time_zone_name or timeZoneName: "long" "short"
53
+ - date_style or dateStyle: "full" "long" "medium" "short"
54
+ - time_style or timeStyle: "full" "long" "medium" "short"
55
+ - format_matcher or formatMatcher: "best-fit"(default) "basic"
56
+ - locale_matcher or localeMatcher: "best-fit"(default) "lookup"
57
+ - hour12: false true
58
+ - hour_cycle hourCycle: "h11" "h12" "h23" "h24"
59
+ - hour: "2-digit" "numeric"
60
+ - minute: "2-digit" "numeric"
61
+ - second: "2-digit" "numeric"
62
+ - day "2-digit" "numeric"
63
+ - month: "2-digit" "numeric" "long" "short" "narrow"
64
+ - weekday: "long" "short" "narrow"
65
+ - year: "2-digit" "numeric"
66
+ For formatting numbers the options are available:
67
+ - currency: any currency code (like "EUR", "USD", "INR", etc.)
68
+ - currency_display or currencyDisplay: "symbol"(default) "code" "name"
69
+ - locale_matcher or localeMatcher: "best-fit"(default) "lookup"
70
+ - maximum_fraction_digits or maximumFractionDigits: A number from 0 to 20 (default is 3)
71
+ - maximum_significant_digits or maximumSignificantDigits: A number from 1 to 21 (default is 21)
72
+ - minimum_fraction_digits or minimumFractionDigits: A number from 0 to 20 (default is 3)
73
+ - minimum_integer_digits or minimumIntegerDigits: A number from 1 to 21 (default is 1)
74
+ - minimum_significant_digits or minimumSignificantDigits: A number from 1 to 21 (default is 21)
75
+ - style: "decimal"(default) "currency" "percent"
76
+ - use_grouping or useGrouping: true(default) false
77
+
78
+ example:
79
+ ```ruby
80
+ l(Time.now, :custom, { hour12: true })
81
+ l(1.2345, :custom, { maximum_fraction_digits: 2 })
82
+ ```
@@ -19,24 +19,18 @@ module Isomorfeus
19
19
  domain
20
20
  end
21
21
 
22
- def locale
22
+ def default_locale
23
23
  result = Redux.fetch_by_path(:i18n_state, :locale)
24
24
  result ? result : available_locales.first
25
25
  end
26
26
 
27
- def locale=(loc)
27
+ def default_locale=(loc)
28
28
  Isomorfeus.raise_error(message: "Locale #{loc} not available!") unless available_locales.include?(loc)
29
- Isomorfeus.store.dispatch(type: 'I18N_LOAD', data: { locale: locale })
29
+ Isomorfeus.store.dispatch(type: 'I18N_LOAD', data: { locale: loc })
30
30
  loc
31
31
  end
32
32
 
33
- def negotiated_locale
34
- @negotiated_locale
35
- end
36
-
37
- def negotiated_locale=(l)
38
- @negotiated_locale = l
39
- end
33
+ attr_accessor :current_locale
40
34
  else
41
35
  def available_locales
42
36
  @available_locales
@@ -56,14 +50,26 @@ module Isomorfeus
56
50
  @i18n_domain = domain
57
51
  end
58
52
 
59
- def locale
60
- @locale
53
+
54
+ def current_locale
55
+ Thread.current[:isomorfeus_locale]
56
+ end
57
+
58
+ def current_locale=(loc)
59
+ FastGettext.locale = loc
60
+ R18n.thread_set(loc)
61
+ Thread.current[:isomorfeus_locale] = loc
62
+ end
63
+
64
+ def default_locale
65
+ @default_locale
61
66
  end
62
67
 
63
- def locale=(loc)
68
+ def default_locale=(loc)
64
69
  Isomorfeus.raise_error(message: "Locale #{loc} not available!") unless available_locales.include?(loc)
65
70
  FastGettext.locale = loc
66
- @locale = loc
71
+ R18n.set(loc)
72
+ @default_locale = loc
67
73
  end
68
74
 
69
75
  def locale_path
@@ -17,9 +17,9 @@ module Isomorfeus
17
17
  response_agent.agent_result['data'] = { 'available_locales' => FastGettext.available_locales,
18
18
  'domain' => FastGettext.text_domain }
19
19
  response_agent.agent_result['data']['locale'] = if Isomorfeus.available_locales.include?(locale)
20
- locale
20
+ Isomorfeus.current_locale = locale
21
21
  else
22
- FastGettext.locale
22
+ Isomorfeus.current_locale = Isomorfeus.default_locale
23
23
  end
24
24
  else
25
25
  response_agent.agent_result[domain] = {}
@@ -31,7 +31,13 @@ module Isomorfeus
31
31
  FastGettext.with_domain(domain) do
32
32
  response_agent.request[domain].each_key do |locale|
33
33
  response_agent.agent_result[domain][locale] = {}
34
- Isomorfeus.raise_error(message: "Locale #{locale} not available!") unless Isomorfeus.available_locales.include?(locale)
34
+ if Isomorfeus.current_locale != locale
35
+ if Isomorfeus.available_locales.include?(locale)
36
+ Isomorfeus.current_locale = locale
37
+ else
38
+ Isomorfeus.raise_error(message: "Locale #{locale} not available!")
39
+ end
40
+ end
35
41
  FastGettext.with_locale(locale) do
36
42
  response_agent.request[domain][locale].each_key do |locale_method|
37
43
  method_args = response_agent.request[domain][locale][locale_method]
@@ -11,13 +11,17 @@ module Isomorfeus
11
11
  @initialized = false
12
12
  if Isomorfeus.on_browser?
13
13
  root_element = `document.querySelector('div[data-iso-root]')`
14
- Isomorfeus.negotiated_locale = root_element.JS.getAttribute('data-iso-nloc') if root_element
14
+ if root_element
15
+ Isomorfeus.current_locale = root_element.JS.getAttribute('data-iso-nloc')
16
+ else
17
+ Isomorfeus.current_locale = Isomorfeus.default_locale
18
+ end
15
19
  end
16
20
  self.init_promise = init_from_server
17
21
  end
18
22
 
19
23
  def init_from_server
20
- Isomorfeus::Transport.promise_send_path('Isomorfeus::I18n::Handler::LocaleHandler', :init, Isomorfeus.negotiated_locale).then do |agent|
24
+ Isomorfeus::Transport.promise_send_path('Isomorfeus::I18n::Handler::LocaleHandler', :init, Isomorfeus.current_locale).then do |agent|
21
25
  agent.process do
22
26
  @initializing = false
23
27
  Isomorfeus.store.dispatch(type: 'I18N_LOAD', data: agent.response[:data])
@@ -27,7 +31,7 @@ module Isomorfeus
27
31
  end
28
32
 
29
33
  def reload_from_server
30
- Isomorfeus::Transport.promise_send_path('Isomorfeus::I18n::Handler::LocaleHandler', :init, Isomorfeus.negotiated_locale).then do |agent|
34
+ Isomorfeus::Transport.promise_send_path('Isomorfeus::I18n::Handler::LocaleHandler', :init, Isomorfeus.current_locale).then do |agent|
31
35
  agent.process do
32
36
  Isomorfeus.store.dispatch(type: 'I18N_STATE', set_state: agent.response[:data])
33
37
  end
@@ -42,7 +46,6 @@ module Isomorfeus
42
46
  FastGettext.add_text_domain(Isomorfeus.i18n_domain, path: Isomorfeus.locale_path, type: Isomorfeus.i18n_type)
43
47
  FastGettext.available_locales = Isomorfeus.available_locales
44
48
  FastGettext.text_domain = Isomorfeus.i18n_domain
45
- FastGettext.locale = Isomorfeus.locale
46
49
  Thread.current[:isomorfeus_i18n_initialized] = true
47
50
  end
48
51
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Isomorfeus
4
+ module I18n
5
+ class Middleware
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ def call(env)
11
+ locale = env.http_accept_language.preferred_language_from(Isomorfeus.available_locales) ||
12
+ env.http_accept_language.compatible_language_from(Isomorfeus.available_locales) ||
13
+ Isomorfeus.default_locale
14
+ Isomorfeus.current_locale = locale if Isomorfeus.current_locale != locale
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module I18n
3
- VERSION = '2.0.22'
3
+ VERSION = '2.1.0'
4
4
  end
5
5
  end
@@ -4,7 +4,7 @@ if RUBY_ENGINE == 'opal'
4
4
  require 'isomorfeus/i18n/config'
5
5
  require 'isomorfeus/i18n/reducer'
6
6
  Isomorfeus::I18n::Reducer.add_reducer_to_store
7
- require 'lucid_translation/mixin'
7
+ require 'lucid_i18n/mixin'
8
8
  require 'isomorfeus/i18n/init'
9
9
  if Isomorfeus.on_browser?
10
10
  Isomorfeus.add_client_init_after_store_class_name('Isomorfeus::I18n::Init')
@@ -14,6 +14,7 @@ if RUBY_ENGINE == 'opal'
14
14
  else
15
15
  require 'active_support'
16
16
  require 'oj'
17
+ require 'r18n-core'
17
18
  require 'fast_gettext'
18
19
  require 'isomorfeus/fast_gettext_cache'
19
20
  require 'http_accept_language/parser'
@@ -21,10 +22,12 @@ else
21
22
  require 'isomorfeus-data'
22
23
  require 'isomorfeus/i18n/config'
23
24
  require 'isomorfeus/i18n/init'
24
- require 'lucid_translation/mixin'
25
+ require 'lucid_i18n/mixin'
25
26
  require 'isomorfeus/i18n/handler/locale_handler'
27
+ require 'isomorfeus/i18n/middleware'
26
28
 
27
29
  Isomorfeus.add_middleware(HttpAcceptLanguage::Middleware)
30
+ Isomorfeus.insert_middleware_after(HttpAcceptLanguage::Middleware, Isomorfeus::I18n::Middleware)
28
31
 
29
32
  require 'iso_opal'
30
33
  Opal.append_path(__dir__.untaint) unless IsoOpal.paths.include?(__dir__.untaint)
@@ -62,9 +65,9 @@ else
62
65
  Isomorfeus.available_locales = ['en'] if Isomorfeus.available_locales.empty?
63
66
 
64
67
  if Isomorfeus.available_locales.include?('en')
65
- Isomorfeus.locale = 'en'
68
+ Isomorfeus.default_locale = 'en'
66
69
  else
67
- Isomorfeus.locale = Isomorfeus.available_locales.first
70
+ Isomorfeus.default_locale = Isomorfeus.available_locales.first
68
71
  end
69
72
 
70
73
  Isomorfeus.i18n_domain = 'app'
@@ -1,14 +1,18 @@
1
- module LucidTranslation
1
+ module LucidI18n
2
2
  module Mixin
3
3
  CONTEXT_SEPARATOR = "\004"
4
4
  NAMESPACE_SEPARATOR = '|'
5
5
  NIL_BLOCK = -> { nil }
6
6
  TRANSLATION_METHODS = [:_, :n_, :np_, :ns_, :p_, :s_]
7
7
 
8
+ def current_locale
9
+ Isomorfeus.current_locale
10
+ end
11
+
8
12
  if RUBY_ENGINE == 'opal'
9
13
  def _(*keys, &block)
10
14
  domain = Isomorfeus.i18n_domain
11
- locale = Isomorfeus.locale
15
+ locale = Isomorfeus.current_locale
12
16
  Isomorfeus.raise_error(message: "I18n _(): no key given!") if keys.empty?
13
17
  result = Redux.fetch_by_path(:i18n_state, domain, locale, '_', keys)
14
18
  return result if result
@@ -18,7 +22,7 @@ module LucidTranslation
18
22
 
19
23
  def n_(*keys, count, &block)
20
24
  domain = Isomorfeus.i18n_domain
21
- locale = Isomorfeus.locale
25
+ locale = Isomorfeus.current_locale
22
26
  Isomorfeus.raise_error(message: "I18n n_(): no key given!") if keys.empty?
23
27
  result = Redux.fetch_by_path(:i18n_state, domain, locale, 'n_', keys + [count])
24
28
  return result if result
@@ -35,7 +39,7 @@ module LucidTranslation
35
39
 
36
40
  def ns_(*args, &block)
37
41
  domain = Isomorfeus.i18n_domain
38
- locale = Isomorfeus.locale
42
+ locale = Isomorfeus.current_locale
39
43
  Isomorfeus.raise_error(message: "I18n ns_(): no args given!") if args.empty?
40
44
  result = Redux.fetch_by_path(:i18n_state, domain, locale, 'ns_', args)
41
45
  return result if result
@@ -45,7 +49,7 @@ module LucidTranslation
45
49
 
46
50
  def p_(namespace, key, separator = nil, &block)
47
51
  domain = Isomorfeus.i18n_domain
48
- locale = Isomorfeus.locale
52
+ locale = Isomorfeus.current_locale
49
53
  args = separator ? [namespace, key, separator] : [namespace, key]
50
54
  result = Redux.fetch_by_path(:i18n_state, domain, locale, 'p_', args)
51
55
  return result if result
@@ -55,7 +59,7 @@ module LucidTranslation
55
59
 
56
60
  def s_(key, separator = nil, &block)
57
61
  domain = Isomorfeus.i18n_domain
58
- locale = Isomorfeus.locale
62
+ locale = Isomorfeus.current_locale
59
63
  args = separator ? [key, separator] : [key]
60
64
  result = Redux.fetch_by_path(:i18n_state, domain, locale, 's_', args)
61
65
  return result if result
@@ -84,7 +88,7 @@ module LucidTranslation
84
88
 
85
89
  define_method("D#{method}") do |*args, &block|
86
90
  domain = Isomorfeus.i18n_domain
87
- locale = Isomorfeus.locale
91
+ locale = Isomorfeus.current_locale
88
92
  Isomorfeus.raise_error(message: "I18n D#{method}(): no args given!") if args.empty?
89
93
  result = Redux.fetch_by_path(:i18n_state, domain, locale, "D#{method}", args)
90
94
  return result if result
@@ -93,6 +97,74 @@ module LucidTranslation
93
97
  end
94
98
  end
95
99
 
100
+ def l(object, format = :standard, options = {})
101
+ c_name = object.class.to_s
102
+ locale = options.delete(:locale) { Isomorfeus.current_locale }
103
+ options = options.transform_keys { |k| `Opal.Preact.lower_camelize(k)` }
104
+ if object.is_a?(Numeric)
105
+ # options for number formatting:
106
+ # locale: locale string like 'de'
107
+ # currency: any currency code (like "EUR", "USD", "INR", etc.)
108
+ # currency_display or currencyDisplay: "symbol"(default) "code" "name"
109
+ # locale_matcher or localeMatcher: "best-fit"(default) "lookup"
110
+ # maximum_fraction_digits or maximumFractionDigits: A number from 0 to 20 (default is 3)
111
+ # maximum_significant_digits or maximumSignificantDigits: A number from 1 to 21 (default is 21)
112
+ # minimum_fraction_digits or minimumFractionDigits: A number from 0 to 20 (default is 3)
113
+ # minimum_integer_digits or minimumIntegerDigits: A number from 1 to 21 (default is 1)
114
+ # minimum_significant_digits or minimumSignificantDigits: A number from 1 to 21 (default is 21)
115
+ # style: "decimal"(default) "currency" "percent"
116
+ # use_grouping or useGrouping: true(default) false
117
+ `(object).toLocaleString(locale, #{options.to_n})`
118
+ elsif c_name == 'Date' || c_name == 'DateTime'
119
+ # options for date/time formating:
120
+ # format: "standard" "full"
121
+ # locale: locale string like 'de'
122
+ # time_zone or timeZone: timezone string like 'CET'
123
+ # time_zone_name or timeZoneName: "long" "short"
124
+ # date_style or dateStyle: "full" "long" "medium" "short"
125
+ # time_style or timeStyle: "full" "long" "medium" "short"
126
+ # format_matcher or formatMatcher: "best-fit"(default) "basic"
127
+ # locale_matcher or localeMatcher: "best-fit"(default) "lookup"
128
+ # hour12: false true
129
+ # hour_cycle hourCycle: "h11" "h12" "h23" "h24"
130
+ # hour: "2-digit" "numeric"
131
+ # minute: "2-digit" "numeric"
132
+ # second: "2-digit" "numeric"
133
+ # day "2-digit" "numeric"
134
+ # month: "2-digit" "numeric" "long" "short" "narrow"
135
+ # weekday: "long" "short" "narrow"
136
+ # year: "2-digit" "numeric"
137
+ native_object = object.to_n
138
+ case format
139
+ when :standard
140
+ `native_object.toLocaleDateString(locale, #{options.to_n})`
141
+ when :full
142
+ options[:dateStyle] = 'long'
143
+ `native_object.toLocaleDateString(locale, #{options.to_n})`
144
+ when :custom
145
+ `native_object.toLocaleString(locale, #{options.to_n})`
146
+ else
147
+ `native_object.toLocaleDateString(locale, #{options.to_n})`
148
+ end
149
+ elsif c_name == 'Time'
150
+ native_object = object.to_n
151
+ case format
152
+ when :standard
153
+ `native_object.toLocaleString(locale, #{options.to_n})`
154
+ when :full
155
+ options[:dateStyle] = 'long'
156
+ options[:timeStyle] = 'short'
157
+ `native_object.toLocaleString(locale, #{options.to_n})`
158
+ when :custom
159
+ `native_object.toLocaleString(locale, #{options.to_n})`
160
+ else
161
+ `native_object.toLocaleString(locale, #{options.to_n})`
162
+ end
163
+ else
164
+ raise "Unknown object type #{object.class} given to #l!"
165
+ end
166
+ end
167
+
96
168
  private
97
169
 
98
170
  def _promise_send_i18n_method(domain, locale, method, args)
@@ -120,12 +192,17 @@ module LucidTranslation
120
192
  end
121
193
  end
122
194
  end
123
- else
195
+ else # RUBY_ENGINE
124
196
  class InternalTranslationProxy
125
197
  extend FastGettext::Translation
126
198
  extend FastGettext::TranslationMultidomain
127
199
  end
128
200
 
201
+ def l(object, format = :standard, _options = {})
202
+ Isomorfeus::I18n::Init.init unless Thread.current[:isomorfeus_i18n_initialized] == true
203
+ R18n.l(object, format)
204
+ end
205
+
129
206
  TRANSLATION_METHODS.each do |method|
130
207
  define_method(method) do |domain, *args, &block|
131
208
  Isomorfeus::I18n::Init.init unless Thread.current[:isomorfeus_i18n_initialized] == true
@@ -142,6 +219,6 @@ module LucidTranslation
142
219
  InternalTranslationProxy.send("D#{method}", *args, &block)
143
220
  end
144
221
  end
145
- end
222
+ end # RUBY_ENGINE
146
223
  end
147
224
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-i18n
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.22
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-12 00:00:00.000000000 Z
11
+ date: 2022-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -100,28 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.14.9
103
+ version: 0.14.10
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.14.9
110
+ version: 0.14.10
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: isomorfeus-preact
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 10.6.31
117
+ version: 10.6.34
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 10.6.31
124
+ version: 10.6.34
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: isomorfeus-redux
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -142,42 +142,42 @@ dependencies:
142
142
  requirements:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 2.0.22
145
+ version: 2.1.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - '='
151
151
  - !ruby/object:Gem::Version
152
- version: 2.0.22
152
+ version: 2.1.0
153
153
  - !ruby/object:Gem::Dependency
154
- name: isomorfeus-data
154
+ name: r18n-core
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '='
157
+ - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 2.0.22
159
+ version: 5.0.1
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '='
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 2.0.22
166
+ version: 5.0.1
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: isomorfeus
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - '='
172
172
  - !ruby/object:Gem::Version
173
- version: 2.0.22
173
+ version: 2.1.0
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - '='
179
179
  - !ruby/object:Gem::Version
180
- version: 2.0.22
180
+ version: 2.1.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rake
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -219,9 +219,10 @@ files:
219
219
  - lib/isomorfeus/i18n/config.rb
220
220
  - lib/isomorfeus/i18n/handler/locale_handler.rb
221
221
  - lib/isomorfeus/i18n/init.rb
222
+ - lib/isomorfeus/i18n/middleware.rb
222
223
  - lib/isomorfeus/i18n/reducer.rb
223
224
  - lib/isomorfeus/i18n/version.rb
224
- - lib/lucid_translation/mixin.rb
225
+ - lib/lucid_i18n/mixin.rb
225
226
  homepage: https://isomorfeus.com
226
227
  licenses:
227
228
  - MIT