r18n-rails-api 4.0.0 → 5.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '099a10ed8e4a7e10242249f77a27092dae05fad11e08c3ce9753e9c78c5cbf1c'
4
- data.tar.gz: d46f35406a6f561b1c86fbca7248b8faaa5978133fd8afd33ee6371775f2eab9
3
+ metadata.gz: cc31abb5763a435459b38f0e32757c14d6a453dcef037c2abf55e80473e6b107
4
+ data.tar.gz: db25b9933473e2bdd1cd920959535cf63699b27eb29debbe58d567e635e8753c
5
5
  SHA512:
6
- metadata.gz: e203f84f913425ee61448023acad3bed063bc36b3844a588b61d75ce2c7ad0cb8882f00b939da0ac2ec0d077346ed8f36a888617a47693d39cd660fc5b782dc7
7
- data.tar.gz: 6f9dcc914c984f762b11beadec8dc220435299f5fad7254bfe2be216dc7be5eef5b2ef071c351304d13c4beb7067eb6fbeed5ea03a0a51378972c015cb0da07b
6
+ metadata.gz: 0b87117dfb18e228d13c7277417f1145eb7219ddff500d6ba321bf4fb1ca892f5c0c18609329a84d3c66c42729c801d0819279ffc9ad887506567a050edd92c8
7
+ data.tar.gz: e5df4f72c9ffb050460f10e7292c658a03d581bf724f9248699528df8a8072ad16f2287f2dac6b5494827731f47a6ac053fbf72972d19d6ae86c3589316dd38a
data/ChangeLog.md ADDED
@@ -0,0 +1,382 @@
1
+ # Change Log
2
+
3
+ ## Unreleased
4
+
5
+ ## 5.0.0 (Warszawa) (2021-03-04)
6
+
7
+ * Take out `r18n-rails-api` gem from mono-repository.
8
+ * Drop Ruby 2.4 support.
9
+ * Support Ruby 3.
10
+ * Avoid Ruby 4 in gem specs.
11
+ * Add metadata to gem specs.
12
+ * Add Alexander Popov as a gem author.
13
+ * Replace `rake` with `toys`.
14
+ * Add Codecov and SimpleCov.
15
+ * Update RuboCop, its configuration, and resolve new offenses.
16
+ * Add badges into README.
17
+
18
+ All core changes now check in [the `r18n-core` repository](https://github.com/r18n/r18n-core).
19
+
20
+ ## 4.0.0 (Santiago)
21
+
22
+ * Drop Ruby 2.3 support (by Alexander Popov).
23
+ * Drop `R18n::Utils.hash_map` (by Alexander Popov).
24
+ * Add Ruby 2.6 and 2.7 for CI (by Alexander Popov).
25
+ * Allow to add custom (per-project) locales (by Alexander Popov).
26
+ * Add block for `R18n.change` (change affects only code inside block)
27
+ (by Alexander Popov).
28
+ * Add `language` and `region` readers for `Locale` (by Alexander Popov).
29
+ * Allow upcased region in translation file names (like `en-US.yml`)
30
+ (by Alexander Popov).
31
+ * Load `base` translations from parent locale (by Alexander Popov).
32
+ * Downcase locales with regions for `Translated`, like `name_en_us`
33
+ instead of `name_en-US` (by Alexander Popov).
34
+ * Add Spanish Chile (`es-CL`) (by Juan Gil Miqueo).
35
+ * Add `:with_seconds` option for Time formatting (by Alexander Popov).
36
+ * Replace custom `gsub` in `R18n::Utils.escape_html` with `CGI.escapeHTML`
37
+ (by Alexander Popov).
38
+ * Improve Indonesian translation (by Mohammad Satrio).
39
+ * Improve documentation (by Alexander Popov).
40
+ * Fix issue with wildcard in `Accept-Language` header (by Alexander Popov).
41
+
42
+ ## 3.2.0 (Kawasaki)
43
+ * Support `*.yaml` files (by Alexander Popov).
44
+ * Locate processed `code` in `UnsupportedLocale`, like in `Locale` (by Alexander Popov).
45
+ * Fix `TranslatedString#to_ary`, don't return `Untranslated` (by Alexander Popov).
46
+ * Add Welsh language (`cy`) (by Mei Gwilym).
47
+ * Add support for custom classes localizing (`R18n.l`) (by Alexander Popov).
48
+ * Replace blank-padded day in date with no-padded (by Alexander Popov).
49
+ * Fix `TranslatedString#to_hash` (by Christian Höppner and Alexander Popov).
50
+
51
+ ## 3.1.2 (i)
52
+ * Call `Translation#itself` as translation key instead of `Kernel#itself` implementation (by Alexander Popov).
53
+
54
+ ## 3.1.1 (У)
55
+ * Fix errors and warnings from `gem build`
56
+
57
+ ## 3.1 (Одинцово)
58
+ * Move `named_variables` filter from `r18n-rails-api` to `r18n-core` (by Alexander Popov).
59
+ * Add possibility for `R18n::Locale` to define custom formatters (by Alexander Popov).
60
+ * Fix `R18n.set` for `r18n-desktop` (by Alexander Popov).
61
+
62
+ ## 3.0.5 (ب)
63
+ * Fix Farsi locale name (by @iriman).
64
+
65
+ ## 3.0.4 (𐤀)
66
+ * Fix `Translated` compatibility with `Hash` (by Alexander Popov).
67
+
68
+ ## 3.0.3 (〥)
69
+ * Fix missed filters in `Untranslted` initialization (by Alexander Popov).
70
+
71
+ ## 3.0.2 (Ё)
72
+ * Fix `Untranslted.to_s` (by Patrik Rak).
73
+
74
+ ## 3.0.1 (Brooklyn)
75
+ * Fix `no` locale deprecation warning.
76
+
77
+ ## 3.0 (New York)
78
+ * Deprecate `no` locale, use `nb` instead (by Alexander Popov).
79
+ * Remove unsafe `!!proc` filter.
80
+ * Reduce `eval` calls (by Alexander Popov).
81
+
82
+ ## 2.2 (La Habana)
83
+ * Change date format in `en` locale to `YYYY-MM-DD` (by Alexander Popov).
84
+ * Add `TranslatedString#as_json` for ActiveSupport compatibility (by Tim Craft).
85
+ * Fix `TranslatedString#html_safe?` behavior (by Tim Craft).
86
+ * Fix unsupported `LANG` environment (by Chris Poirier).
87
+ * Fix `Locale#localize` method for `DateTime` objects (by Alexander Popov).
88
+
89
+ ## 2.1.8 (Ѣ)
90
+ * Fix `true` and `false` keys support (by Alexander Popov).
91
+
92
+ ## 2.1.7 (Sewe)
93
+ * Add Afrikaans locale (by Llewellyn van der Merwe).
94
+
95
+ ## 2.1.6 (Berlin)
96
+ * Better `TranslatedString` → `String` converting (by Patrik Rak).
97
+ * Add Ruby on Rails 5 support.
98
+
99
+ ## 2.1.5 (මාතර)
100
+ * Fix Ruby 2.4 support (by Alexander Popov)
101
+
102
+ ## 2.1.4 (Bakı)
103
+ * Add Azerbaijani locale (by Adil Aliyev).
104
+
105
+ ## 2.1.3 (Seoul)
106
+ * Add Korean locale (by Patrick Cheng).
107
+
108
+ ## 2.1.2 (Wien)
109
+ * Fix Ruby 2.3 support.
110
+
111
+ ## 2.1.1 (Barcelona)
112
+ * Better sanity check for Accept-Language header (by Viktors Rotanovs).
113
+
114
+ ## 2.1 (Một)
115
+ * Add Vietnamese locale (by Nguyễn Văn Được).
116
+ * Add Persian locale.
117
+ * Allow to change date/time order in locales.
118
+ * Fix pluralization in locales without plural forms.
119
+ * Fix Mongolian base translations.
120
+
121
+ ## 2.0.4 (Ikkuna)
122
+ * Fix Windows support (by janahanEDH).
123
+
124
+ ## 2.0.3 (Hévíz)
125
+ * Fix Thai locale (by Kasima Tharnpipitchai).
126
+
127
+ ## 2.0.2 (Budapest)
128
+ * Fix array support in translations.
129
+ * Fix Rails support for dialect locales.
130
+
131
+ ## 2.0.1 (Amsterdam)
132
+ * Fix Dutch locale.
133
+
134
+ ## 2.0.0 (Москва)
135
+ * Remove Ruby 1.8 and 1.9 support.
136
+ * Add JRuby 9000 support.
137
+
138
+ ### 1.1.11 (São Paulo)
139
+ * Allow to set Proc as `default` option in Rails I18n back-end.
140
+
141
+ ### 1.1.10 (十)
142
+ * Fix Esperanto locale by Larry Gilbert.
143
+ * Fix Chinese locale (by 刘当一).
144
+
145
+ ### 1.1.9 (Не знайдено)
146
+ * Fix Rails 4.0.4 support. Prevent loop on `enforce_available_locales`.
147
+
148
+ ### 1.1.8 (Osam)
149
+ * Add Croatian locale (by Dino Kovač).
150
+ * Add Serbian latin locale (by Dino Kovač).
151
+
152
+ ### 1.1.7 (Tujuh)
153
+ * Return `nil` on untranslated in models with Translated.
154
+ * Add `transliterate` method to I18n back-end.
155
+ * Add Indonesian locale (by Guntur Akhmad).
156
+
157
+ ### 1.1.6 (Vitebsk)
158
+ * Return `TranslatedString` after global String filters.
159
+ * Fix path in global String filters.
160
+
161
+ ### 1.1.5 (Hilo)
162
+ * Fix Sinatra plugin under multi-threaded web-server (by Viktors Rotanovs).
163
+ * Fix `BigDecimal` localizing (by François Beausoleil).
164
+ * Add American American Spanish locale (by renemarcelo).
165
+
166
+ ### 1.1.4 (Bokmål)
167
+ * Add Norwegian `no` locale as gateway to Bokmål or Nynorsk.
168
+ * Fix Norwegian Bokmål locale code.
169
+ * Fix Hungarian time format (Kővágó Zoltán).
170
+
171
+ ### 1.1.3 (Saint Petersburg)
172
+ * Fix memory leak from cache key mismatch in Rails plugin (by silentshade).
173
+
174
+ ### 1.1.2 (Marshal)
175
+ * Fix translation and untranslated marshalizing (by silentshade).
176
+ * Allow to compare untranslated strings.
177
+ * Fix untranslated strings output in tests.
178
+
179
+ ### 1.1.1 (Dunhuang)
180
+ * Don't change YAML parser in Ruby 1.9.
181
+ * Allow to change locale by argument in R18n Rails back-end.
182
+ * Set also Rails I18n locale in Rails auto-detect filter.
183
+ * Fix caching with custom filters (by Anton Onyshchenko).
184
+ * Fix translation variables with `%1` text inside (by Taras Kunch).
185
+ * Fix Latvian locale (by Aleksandrs Ļedovskis).
186
+
187
+ ### 1.1.0 (Leipzig)
188
+ * A lot of fixes in Rails I18n compatibility (thanks for Stephan Schubert).
189
+ * Return `Untranslted`, when user try to call another translation key on
190
+ already translated string.
191
+ * Add `Translation#to_hash` to get raw translation.
192
+ * Add `Translation#inspect` to easy debug.
193
+ * Return translation, when pluralization filter did not get count.
194
+ * Set R18n back-end on Rails plugin init, to use it in console.
195
+ * Allow to use Integer in translation keys.
196
+
197
+ ### 1.0.1 (Phuket Town)
198
+ * Fix translation reloading in Rails and Sinatra.
199
+ * Use global R18n settings for Sinatra extension.
200
+ * Allow to override desktop auto-detect by LANG environment on all platforms.
201
+ * Add support for JRuby in 1.9 mode.
202
+ * Rename `R18n.reset` to `R18n.reset!` and add `R18n.clear_cache!`.
203
+ * Fix Sinatra with loaded ActiveSupport.
204
+ * Add Mongolian locale (by Elias Klughammer).
205
+
206
+ ### 1.0.0 (Bangkok)
207
+ * Add `R18n.default_places`.
208
+ * Rails `SafeBuffer` support.
209
+ * Allow in Rails app to put filters to `app/i18n` reload them in development.
210
+ * Move `R18n::I18n.available_locales` to `R18n.available_locales`.
211
+ * Rename `_keys` to `translation_keys`.
212
+ * Use Kramdown instead of Maruku for Markdown.
213
+ * Allow to use R18n for Rails without mailer.
214
+ * Allow to overwrite I18n object for models.
215
+ * Autoload R18n::Translated.
216
+ * Set default locale to R18n on Rails start to easy use in Rails console.
217
+ * Use env language in Rails console.
218
+ * Mark untranslated part as red in Rails console.
219
+ * Allow to temporary change locale by `R18n.change`.
220
+ * Add `R18n.locale` shortcut.
221
+ * Allow return from setter block locale code, instead of I18n object.
222
+ * Allow to set custom filters for I18n object.
223
+ * Add Galician locale (by Eduard Giménez).
224
+ * Add Traditional Chinese and Simplified Chinese (by Francis Chong).
225
+ * Fix Norsk locale (by Peter Haza).
226
+
227
+ ### 0.4.14 (üç)
228
+ * Fix support for Ruby 1.9.3.
229
+ * Added Turkish locale (by Ahmet Özkaya).
230
+ * Fix Swedish locale (by Pär Wieslander).
231
+
232
+ ### 0.4.13 (Sti)
233
+ * Fix `Pathname` to `String` error in `r18n-desktop`.
234
+ * Add Norwegian locale (by Oddmund Strømme).
235
+
236
+ ### 0.4.12 (Шлях)
237
+ * Fix `Pathname` to `String` conversion error.
238
+ * Fix model translation for non-ActiveRecord (by Szymon Przybył).
239
+ * Add Ukrainian locale (by Ярослав Руденок).
240
+
241
+ ### 0.4.11 (Nancy)
242
+ * Support for Sinatra 1.3.
243
+ * Fix JRuby support by Paul Walker.
244
+ * Add R18n helpers to Rails mailer by Alexey Medvedev.
245
+
246
+ ### 0.4.10 (Kvantum)
247
+ * Add R18n.set(locales, places), R18n.t and R18n.l shortcuts.
248
+ * Convert float to number on pluralization.
249
+ * Fix loading empty translation file.
250
+ * Add Portuguese locale.
251
+ * Add Dutch locale (by Sander Heilbron).
252
+ * Add Swedish locale (by Magnus Hörberg).
253
+
254
+ ### 0.4.9 (Kazan)
255
+ * Add support for Psych YAML parser (thanks for Ravil Bayramgalin).
256
+ * Fix ActiveRecord support in Translated.
257
+ * Fix Translated to return non-string values.
258
+ * Fix human time localization.
259
+ * Add Bulgarian locale (by Mitko Kostov).
260
+ * Add Australian English locale (by Dave Sag).
261
+
262
+ ### 0.4.8 (En ni to)
263
+ * Fix support for Ruby 1.9.2.
264
+ * Fix caching issue (by Viktors Rotanovs).
265
+ * Add Danish locale (by Hans Czajkowski Jørgensen)
266
+ * Fix Italian locale (by Viktors Rotanovs).
267
+ * Move untranslated filters with html highlight to `r18n-core`.
268
+
269
+ ### 0.4.7.1 (Kyū)
270
+ * Fix Japanese locale in Ruby 1.9.1.
271
+
272
+ ### 0.4.7 (Mado)
273
+ * Fix auto-detect locale in Windows and Ruby 1.9.1 (by Marvin Gülker).
274
+ * Fix auto-detect locale in JRuby (by Kővágó, Zoltán).
275
+ * Fix human time format on 60 minutes.
276
+ * Add Hungarian locale (by Kővágó, Zoltán).
277
+ * Add Japanese locale (by hryk).
278
+ * Fix Polish locale (by Piotr Szotkowski).
279
+
280
+ ### 0.4.6 (Trinity)
281
+ * Add support for new interpolation syntax in Rails 3.
282
+ * Add Catalian locale (by Jordi Romero).
283
+ * Add Finish locale (by Laura Guillén).
284
+ * Add British locale (by JP Hastings-Spital).
285
+ * Add Latvian locale (by Iļja Ketris).
286
+ * Fix Spanish (by Jordi Romero), German, French, Esperanto (by Iļja Ketris) and
287
+ Polish locales.
288
+ * Fix documentation (by Iļja Ketris and felix).
289
+ * Remove RubyGems from plugins requires.
290
+
291
+ ### 0.4.5 (Annual)
292
+ * Filters for several types.
293
+ * Global HTML escaping run before Markdown and Textile formatting.
294
+ * Fix active filters after passive filters.
295
+ * Fix human time formatting for dates with same month days.
296
+
297
+ ### 0.4.4 (Frank)
298
+ * Use before filter to lazy set I18n object in Sinatra extension.
299
+ * Set I18n object to thread (by Simon Hafner).
300
+ * Add to l Rails helper R18n syntax.
301
+ * Add common helpers.
302
+ * Clear cache in `R18n.reset`.
303
+ * Clean up code and fix bug (by Akzhan Abdulin).
304
+ * Add Thai locale (by Felix Hanley).
305
+
306
+ ### 0.4.3 (Flange)
307
+ * Add R18n style methods to Rails controllers.
308
+ * Fix for non-string translations in Rails I18n.
309
+ * Use default locale from Rails I18n config.
310
+ * Load translations recursively.
311
+ * Add Slovak locale (by Ahmed Al Hafoudh)
312
+
313
+ ### 0.4.2 (EMS)
314
+ * Fixes for Ruby 1.8.6 (by Akzhan Abdulin).
315
+ * Add method to get translation keys.
316
+
317
+ ### 0.4.1 (Lazy Boole)
318
+ * Add passive filters.
319
+ * Receive filter position as option `Hash`.
320
+ * Fix base translations (by Pavel Kunc).
321
+
322
+ ### 0.4 (D-Day)
323
+ * Rails I18n compatibility.
324
+ * Rewrite a lot of core code to fast and cleanup version.
325
+ * Custom translation loaders.
326
+ * Add reload! method to I18n.
327
+ * Add t and l helpers to Sinatra and desktop plugins.
328
+ * Syntax sugar for default values.
329
+ * Named variables.
330
+ * New locale API.
331
+ * Change API for extension translations.
332
+
333
+ ### 0.3.2 (Pidgin)
334
+ * Print path of untranslated string by filters.
335
+ * Add Italian locale (by Guido De Rosa).
336
+ * Fix Polish locale (by Adrian Pacała).
337
+ * Fix American English locale (by Max Aller).
338
+
339
+ ### 0.3.1 (Yield)
340
+ * Add Chinese locale (by Ilia Zayats).
341
+ * Add Spanish locale (by Andre O Moura).
342
+ * Add Brazilian Portuguese locale (by Andre O Moura).
343
+ * Remove RubyGems requires.
344
+
345
+ ### 0.3 (Vladivostok)
346
+ * `Translated` mixin to I18n support to model or any other class.
347
+ * New cool time formatters.
348
+ * Filters for translations.
349
+ * Add filters to escape HTML, Markdown and Textile syntax.
350
+ * Pluralization and variables is now filters and can be replaced.
351
+ * I18n#locales now contain all detected locales, used to load translations,
352
+ instead of just received from user.
353
+ * Bug-fix in locale code case.
354
+ * Add Czech locale (by Josef Pospíšil).
355
+
356
+ ### 0.2.3 (Shanghai eclipse)
357
+ * R18n will return path string if translation isn't exists.
358
+ * Add `UnsupportedLocale` class for locale without information file.
359
+ * Load absent locale information from default locale.
360
+ * Add Polish locale (by Tymon Tobolski).
361
+
362
+ ### 0.2.2 (Clone Wars)
363
+ * Localize numbers in pluralization.
364
+ * Bug-fix in translation variables.
365
+
366
+ ### 0.2.1 (Neun)
367
+ * Ruby 1.9 compatibility.
368
+ * Add German locale (by Benjamin Meichsner).
369
+
370
+ ### 0.2 (Freedom of Language)
371
+ * Locale class can be extended for special language (for example, Indian locale
372
+ may has another digits grouping).
373
+ * Load translations from several dirs.
374
+ * Add French locale.
375
+ * Add Kazakh locale.
376
+
377
+ ### 0.1.1 (Saluto)
378
+ * Loading I18n object without translations.
379
+ * Add output for standalone month name.
380
+ * Don't call procedures from translations if it isn't secure.
381
+ * Add Esperanto locale.
382
+ * English locale now contain UK date standards.
data/README.md CHANGED
@@ -1,9 +1,20 @@
1
1
  # R18n Rails API
2
2
 
3
+ [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/r18n/r18n-rails-api?style=flat-square)](https://cirrus-ci.com/github/r18n/r18n-rails-api)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/r18n/r18n-rails-api/master.svg?style=flat-square)](https://codecov.io/gh/r18n/r18n-rails-api)
5
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/r18n/r18n-rails-api.svg?style=flat-square)](https://codeclimate.com/github/r18n/r18n-rails-api)
6
+ [![Depfu](https://img.shields.io/depfu/r18n/r18n-rails-api?style=flat-square)](https://depfu.com/repos/github/r18n/r18n-rails-api)
7
+ [![License](https://img.shields.io/github/license/r18n/r18n-rails-api.svg?style=flat-square)](LICENSE)
8
+ [![Gem](https://img.shields.io/gem/v/r18n-rails-api.svg?style=flat-square)](https://rubygems.org/gems/r18n-rails-api)
9
+
3
10
  Rails I18n compatibility for R18n:
4
11
  * R18n loader for Rails I18n translation format;
5
12
  * R18n back-end.
6
13
 
14
+ It is just a wrapper for [R18n core library](https://github.com/r18n/r18n-core).
15
+ See [R18n documentation](https://github.com/r18n/r18n-core/blob/master/README.md)
16
+ for more information.
17
+
7
18
  ## How To
8
19
 
9
20
  ### Rails Translations
@@ -49,10 +49,11 @@ module R18n
49
49
  default = [default] unless default.is_a? Array
50
50
 
51
51
  default.each do |entry|
52
- if entry.is_a? Symbol
52
+ case entry
53
+ when Symbol
53
54
  value = lookup(locale, scope, entry, separator, params)
54
55
  return value unless value.is_a? Untranslated
55
- elsif entry.is_a? Proc
56
+ when Proc
56
57
  proc_key = options.delete(:object) || key
57
58
  return entry.call(proc_key, options)
58
59
  else
@@ -102,11 +103,12 @@ module R18n
102
103
  end
103
104
 
104
105
  def format_value(result)
105
- if result.is_a? TranslatedString
106
+ case result
107
+ when TranslatedString
106
108
  result.to_s
107
- elsif result.is_a? UnpluralizetedTranslation
108
- result.to_hash.map { |k, v| [RailsPlural.from_r18n(k), v] }.to_h
109
- elsif result.is_a? Translation
109
+ when UnpluralizedTranslation
110
+ result.to_hash.transform_keys { |key| RailsPlural.from_r18n(key) }
111
+ when Translation
110
112
  translation_to_hash(result)
111
113
  else
112
114
  result
@@ -27,9 +27,7 @@ R18n::Filters.add(String, :named_variables) do |content, config, params|
27
27
  content = content.clone
28
28
  params.each_pair do |name, value|
29
29
  value = config[:locale].localize(value)
30
- if defined? ActiveSupport::SafeBuffer
31
- value = ActiveSupport::SafeBuffer.new + value
32
- end
30
+ value = ActiveSupport::SafeBuffer.new + value if defined? ActiveSupport::SafeBuffer
33
31
  content.gsub! "%{#{name}}", value
34
32
  content.gsub! "{{#{name}}}", value
35
33
  end
@@ -39,7 +37,7 @@ end
39
37
 
40
38
  module R18n
41
39
  # Class to mark unpluralized translation and convert Rails plural keys
42
- class RailsUnpluralizetedTranslation < UnpluralizetedTranslation
40
+ class RailsUnpluralizedTranslation < UnpluralizedTranslation
43
41
  def [](name, *params)
44
42
  result = super
45
43
  if result.is_a? Untranslated
@@ -58,8 +56,8 @@ R18n::Filters.add('pl', :named_pluralization) do |content, config, param|
58
56
  type = config[:locale].pluralize(param[:count])
59
57
  type = 'n' unless hash.key?(type)
60
58
  hash[type]
61
- elsif content.is_a? R18n::UnpluralizetedTranslation
62
- R18n::RailsUnpluralizetedTranslation.new(
59
+ elsif content.is_a? R18n::UnpluralizedTranslation
60
+ R18n::RailsUnpluralizedTranslation.new(
63
61
  config[:locale], config[:path],
64
62
  locale: config[:locale], translations: content.to_hash
65
63
  )
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R18n
4
+ module Rails
5
+ module API
6
+ VERSION = '5.0.0'
7
+ end
8
+ end
9
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r18n-rails-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Sitnik
8
- autorequire:
8
+ - Alexander Popov
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2020-01-30 00:00:00.000000000 Z
12
+ date: 2021-03-03 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: i18n
@@ -16,28 +17,168 @@ dependencies:
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '1'
20
+ version: '1.0'
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '1'
27
+ version: '1.0'
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: r18n-core
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - '='
32
+ - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: 4.0.0
34
+ version: '5.0'
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - '='
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '5.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: pry-byebug
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.9'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '3.9'
56
+ - !ruby/object:Gem::Dependency
57
+ name: gem_toys
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 0.7.1
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.7.1
70
+ - !ruby/object:Gem::Dependency
71
+ name: toys
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 0.11.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 0.11.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: rubocop
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.6'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.6'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rubocop-performance
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '1.9'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1.9'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop-rails
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '2.9'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '2.9'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop-rake
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.5.1
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 0.5.1
140
+ - !ruby/object:Gem::Dependency
141
+ name: codecov
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 0.5.0
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 0.5.0
154
+ - !ruby/object:Gem::Dependency
155
+ name: rspec
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '3.10'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
39
166
  - !ruby/object:Gem::Version
40
- version: 4.0.0
167
+ version: '3.10'
168
+ - !ruby/object:Gem::Dependency
169
+ name: simplecov
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: 0.21.0
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: 0.21.0
41
182
  description: |2
42
183
  R18n backend for Rails I18n and R18n filters and loader to support Rails
43
184
  translation format.
@@ -45,41 +186,34 @@ description: |2
45
186
  translation support for any classes, time and number localization, several
46
187
  user language support, agnostic core package with out-of-box support for
47
188
  Rails, Sinatra and desktop applications.
48
- email: andrey@sitnik.ru
189
+ email:
190
+ - andrey@sitnik.ru
191
+ - alex.wayfer@gmail.com
49
192
  executables: []
50
193
  extensions: []
51
194
  extra_rdoc_files:
52
195
  - README.md
53
196
  - LICENSE
54
197
  files:
55
- - ".rspec"
198
+ - ChangeLog.md
56
199
  - LICENSE
57
200
  - README.md
58
- - Rakefile
59
201
  - lib/r18n-rails-api.rb
60
202
  - lib/r18n-rails-api/backend.rb
61
203
  - lib/r18n-rails-api/filters.rb
62
204
  - lib/r18n-rails-api/loader.rb
63
205
  - lib/r18n-rails-api/rails_plural.rb
64
- - r18n-rails-api.gemspec
65
- - spec/backend_spec.rb
66
- - spec/data/general/en.yml
67
- - spec/data/general/ru.yml
68
- - spec/data/other/en.yml
69
- - spec/data/other/ru.yml
70
- - spec/data/pl/ru.yml
71
- - spec/data/simple/de-CH.yml
72
- - spec/data/simple/en.yml
73
- - spec/data/simple/ru.rb
74
- - spec/data/simple/russian.yml
75
- - spec/filters_spec.rb
76
- - spec/loader_spec.rb
77
- - spec/spec_helper.rb
78
- homepage: https://github.com/r18n/r18n/tree/master/r18n-rails-api
206
+ - lib/r18n-rails-api/version.rb
207
+ homepage: https://github.com/r18n/r18n-rails-api
79
208
  licenses:
80
209
  - LGPL-3.0
81
- metadata: {}
82
- post_install_message:
210
+ metadata:
211
+ bug_tracker_uri: https://github.com/r18n/r18n-rails-api/issues
212
+ changelog_uri: https://github.com/r18n/r18n-rails-api/blob/5.0.0/ChangeLog.md
213
+ documentation_uri: http://www.rubydoc.info/gems/r18n-rails-api/5.0.0
214
+ homepage_uri: https://github.com/r18n/r18n-rails-api
215
+ source_code_uri: https://github.com/r18n/r18n-rails-api
216
+ post_install_message:
83
217
  rdoc_options: []
84
218
  require_paths:
85
219
  - lib
@@ -87,28 +221,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
221
  requirements:
88
222
  - - ">="
89
223
  - !ruby/object:Gem::Version
90
- version: '0'
224
+ version: '2.5'
225
+ - - "<"
226
+ - !ruby/object:Gem::Version
227
+ version: '4'
91
228
  required_rubygems_version: !ruby/object:Gem::Requirement
92
229
  requirements:
93
230
  - - ">="
94
231
  - !ruby/object:Gem::Version
95
232
  version: '0'
96
233
  requirements: []
97
- rubygems_version: 3.1.2
98
- signing_key:
234
+ rubygems_version: 3.2.3
235
+ signing_key:
99
236
  specification_version: 4
100
237
  summary: Rails I18n compatibility for R18n
101
- test_files:
102
- - spec/backend_spec.rb
103
- - spec/data/general/en.yml
104
- - spec/data/general/ru.yml
105
- - spec/data/other/en.yml
106
- - spec/data/other/ru.yml
107
- - spec/data/pl/ru.yml
108
- - spec/data/simple/de-CH.yml
109
- - spec/data/simple/en.yml
110
- - spec/data/simple/ru.rb
111
- - spec/data/simple/russian.yml
112
- - spec/filters_spec.rb
113
- - spec/loader_spec.rb
114
- - spec/spec_helper.rb
238
+ test_files: []
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --format documentation --colour --warnings --require spec_helper
data/Rakefile DELETED
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/setup'
4
- Bundler::GemHelper.install_tasks
5
-
6
- require 'rspec/core/rake_task'
7
- RSpec::Core::RakeTask.new
8
- task default: :spec
9
-
10
- task :clobber_package do
11
- rm_rf 'pkg'
12
- end
13
- task clobber: [:clobber_package]
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../r18n-core/lib/r18n-core/version'
4
-
5
- Gem::Specification.new do |s|
6
- s.platform = Gem::Platform::RUBY
7
- s.name = 'r18n-rails-api'
8
- s.version = R18n::VERSION.dup
9
- s.date = Time.now.strftime('%Y-%m-%d')
10
-
11
- s.summary = 'Rails I18n compatibility for R18n'
12
- s.description = <<-DESC
13
- R18n backend for Rails I18n and R18n filters and loader to support Rails
14
- translation format.
15
- R18n has nice Ruby-style syntax, filters, flexible locales, custom loaders,
16
- translation support for any classes, time and number localization, several
17
- user language support, agnostic core package with out-of-box support for
18
- Rails, Sinatra and desktop applications.
19
- DESC
20
-
21
- s.files = `git ls-files`.split("\n")
22
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
- s.extra_rdoc_files = ['README.md', 'LICENSE']
24
- s.require_path = 'lib'
25
-
26
- s.author = 'Andrey Sitnik'
27
- s.email = 'andrey@sitnik.ru'
28
- s.homepage = 'https://github.com/r18n/r18n/tree/master/r18n-rails-api'
29
- s.license = 'LGPL-3.0'
30
-
31
- s.add_dependency 'i18n', '~> 1'
32
- s.add_dependency 'r18n-core', "= #{R18n::VERSION}"
33
- end
data/spec/backend_spec.rb DELETED
@@ -1,122 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe R18n::Backend do
4
- before do
5
- I18n.load_path = [GENERAL]
6
- I18n.backend = R18n::Backend.new
7
- R18n.default_places = R18n::Loader::Rails.new
8
- R18n.set('en')
9
- end
10
-
11
- it 'returns available locales' do
12
- expect(I18n.available_locales).to match_array(%i[en ru])
13
- end
14
-
15
- it 'localizes objects' do
16
- time = Time.at(0).utc
17
- date = Date.parse('1970-01-01')
18
-
19
- expect(I18n.l(time)).to eq 'Thu, 01 Jan 1970 00:00:00 +0000'
20
- expect(I18n.l(date)).to eq '1970-01-01'
21
-
22
- expect(I18n.l(time, format: :short)).to eq '01 Jan 00:00'
23
- expect(I18n.l(time, format: :full)).to eq '1st of January, 1970 00:00'
24
-
25
- expect(I18n.l(-5000.5)).to eq '−5,000.5'
26
- end
27
-
28
- it 'translates by key and scope' do
29
- expect(I18n.t('in.another.level')).to eq 'Hierarchical'
30
- expect(I18n.t(:level, scope: 'in.another')).to eq 'Hierarchical'
31
- expect(I18n.t(:'another.level', scope: 'in')).to eq 'Hierarchical'
32
- end
33
-
34
- it 'uses pluralization and variables' do
35
- expect(I18n.t('users', count: 0)).to eq '0 users'
36
- expect(I18n.t('users', count: 1)).to eq '1 user'
37
- expect(I18n.t('users', count: 5)).to eq '5 users'
38
- end
39
-
40
- it 'uses another separator' do
41
- expect(I18n.t('in/another/level', separator: '/')).to eq 'Hierarchical'
42
- end
43
-
44
- it 'translates array' do
45
- expect(I18n.t(['in.another.level', 'in.default'])).to eq(
46
- %w[Hierarchical Default]
47
- )
48
- end
49
-
50
- it 'uses default value' do
51
- expect(I18n.t(:missed, default: 'Default')).to eq 'Default'
52
- expect(I18n.t(:missed, default: :default, scope: :in)).to eq 'Default'
53
- expect(I18n.t(:missed, default: %i[also_no in.default])).to eq 'Default'
54
- expect(I18n.t(:missed, default: proc { |key| key.to_s })).to eq 'missed'
55
- end
56
-
57
- it 'raises error on no translation' do
58
- expect { I18n.backend.translate(:en, :missed) }
59
- .to raise_error(::I18n::MissingTranslationData)
60
-
61
- expect { I18n.t(:missed) }.to raise_error(::I18n::MissingTranslationData)
62
- end
63
-
64
- it 'reloads translations' do
65
- expect { I18n.t(:other) }.to raise_error(::I18n::MissingTranslationData)
66
- I18n.load_path << OTHER
67
- I18n.reload!
68
- expect(I18n.t(:other)).to eq 'Other'
69
- end
70
-
71
- it 'returns plain classes' do
72
- expect(I18n.t('in.another.level').class).to eq ActiveSupport::SafeBuffer
73
- expect(I18n.t('in.another').class).to eq Hash
74
- end
75
-
76
- ## https://github.com/rubocop-hq/rubocop/issues/7436#issuecomment-578766498
77
- # rubocop:disable Style/FormatStringToken
78
- it 'returns correct unpluralized hash' do
79
- expect(I18n.t('users')).to eq(one: '1 user', other: '%{count} users')
80
- end
81
- # rubocop:enable Style/FormatStringToken
82
-
83
- it 'corrects detect untranslated, whem path is deeper than string' do
84
- expect { I18n.t('in.another.level.deeper') }
85
- .to raise_error(::I18n::MissingTranslationData)
86
-
87
- expect { I18n.t('in.another.level.go.deeper') }
88
- .to raise_error(::I18n::MissingTranslationData)
89
- end
90
-
91
- it "doesn't call String methods" do
92
- expect(I18n.t('in.another').class).to eq Hash
93
- end
94
-
95
- it "doesn't call object methods" do
96
- expect { I18n.t('in.another.level.to_sym') }
97
- .to raise_error(::I18n::MissingTranslationData)
98
- end
99
-
100
- it 'works deeper pluralization' do
101
- expect(I18n.t('users.other', count: 5)).to eq '5 users'
102
- end
103
-
104
- it 'returns hash with symbols keys' do
105
- expect(I18n.t('in')).to eq(
106
- another: { level: 'Hierarchical' },
107
- default: 'Default'
108
- )
109
- end
110
-
111
- it 'changes locale in place' do
112
- I18n.load_path << PL
113
- expect(I18n.t('users', count: 5)).to eq '5 users'
114
- expect(I18n.t('users', count: 5, locale: :ru)).to eq 'Много'
115
-
116
- expect(I18n.l(Date.parse('1970-01-01'), locale: :ru)).to eq '01.01.1970'
117
- end
118
-
119
- it 'has transliterate method' do
120
- expect(I18n.transliterate('café')).to eq 'cafe'
121
- end
122
- end
@@ -1,21 +0,0 @@
1
- en:
2
- date:
3
- formats:
4
- default: "%Y-%m-%d"
5
- short: "%b %d"
6
- long: "%B %d, %Y"
7
-
8
- time:
9
- formats:
10
- default: "%a, %d %b %Y %H:%M:%S %z"
11
- short: "%d %b %H:%M"
12
- long: "%B %d, %Y %H:%M"
13
-
14
- in:
15
- another:
16
- level: Hierarchical
17
- default: Default
18
-
19
- users:
20
- one: 1 user
21
- other: "%{count} users"
@@ -1,4 +0,0 @@
1
- ru:
2
- date:
3
- formats:
4
- default: "%d.%m.%Y"
@@ -1,2 +0,0 @@
1
- en:
2
- other: Other
@@ -1,2 +0,0 @@
1
- ru:
2
- three: Три
data/spec/data/pl/ru.yml DELETED
@@ -1,6 +0,0 @@
1
- ru:
2
- users:
3
- zero: Ноль
4
- one: Один
5
- few: Несколько
6
- many: Много
@@ -1,2 +0,0 @@
1
- de-CH:
2
- a: 1
@@ -1,6 +0,0 @@
1
- en:
2
- users:
3
- zero: Zero
4
- one: One
5
- few: Few
6
- other: Other
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- { ru: { two: 'Два' } }
@@ -1,2 +0,0 @@
1
- ru:
2
- one: Один
data/spec/filters_spec.rb DELETED
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe 'Rails filters' do
4
- it 'uses old variables syntax' do
5
- i18n = R18n::Translation.new(
6
- EN, '', locale: EN, translations: { 'echo' => 'Value is {{value}}' }
7
- )
8
- expect(i18n.echo(value: 'Old')).to eq 'Value is Old'
9
- end
10
-
11
- # rubocop:disable Style/FormatStringToken
12
- it 'pluralizes by variable %{count}' do
13
- i18n = R18n::Translation.new(
14
- EN, '', locale: EN, translations: {
15
- 'users' => R18n::Typed.new(
16
- 'pl',
17
- 0 => 'no users',
18
- 1 => '1 user',
19
- 'n' => '%{count} users'
20
- )
21
- }
22
- )
23
-
24
- expect(i18n.users(count: 0)).to eq 'no users'
25
- expect(i18n.users(count: 1)).to eq '1 user'
26
- expect(i18n.users(count: 5)).to eq '5 users'
27
- end
28
- # rubocop:enable Style/FormatStringToken
29
- end
data/spec/loader_spec.rb DELETED
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe R18n::Loader::Rails do
4
- before do
5
- I18n.load_path = [SIMPLE]
6
- @loader = R18n::Loader::Rails.new
7
- end
8
-
9
- it 'returns available locales' do
10
- expect(@loader.available).to match_array([DECH, EN, RU])
11
- end
12
-
13
- it 'loads translation' do
14
- expect(@loader.load(RU)).to eq('one' => 'Один', 'two' => 'Два')
15
- end
16
-
17
- it 'loads translation for dialects' do
18
- expect(@loader.load(DECH)).to eq('a' => 1)
19
- end
20
-
21
- it 'changes pluralization' do
22
- expect(@loader.load(EN)).to eq(
23
- 'users' => R18n::Typed.new(
24
- 'pl',
25
- 0 => 'Zero',
26
- 1 => 'One',
27
- 2 => 'Few',
28
- 'n' => 'Other'
29
- )
30
- )
31
- end
32
-
33
- it 'changes Russian pluralization' do
34
- I18n.load_path = [PL]
35
- expect(@loader.load(RU)).to eq(
36
- 'users' => R18n::Typed.new(
37
- 'pl',
38
- 0 => 'Ноль',
39
- 1 => 'Один',
40
- 2 => 'Несколько',
41
- 'n' => 'Много'
42
- )
43
- )
44
- end
45
-
46
- it 'reloads translations on load_path changes' do
47
- I18n.load_path << OTHER
48
- expect(@loader.load(RU)).to eq(
49
- 'one' => 'Один',
50
- 'two' => 'Два',
51
- 'three' => 'Три'
52
- )
53
- end
54
-
55
- it 'changes hash on load_path changes' do
56
- before = @loader.hash
57
- I18n.load_path << OTHER
58
- expect(@loader.hash).not_to eq before
59
- end
60
- end
data/spec/spec_helper.rb DELETED
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'pp'
4
- require 'i18n'
5
- require 'active_support'
6
-
7
- I18n.enforce_available_locales = true
8
-
9
- require_relative '../lib/r18n-rails-api'
10
-
11
- EN = R18n.locale(:en)
12
- RU = R18n.locale(:ru)
13
- DECH = R18n.locale(:'de-CH')
14
-
15
- GENERAL = Dir.glob(File.join(__dir__, 'data', 'general', '*'))
16
- SIMPLE = Dir.glob(File.join(__dir__, 'data', 'simple', '*'))
17
- OTHER = Dir.glob(File.join(__dir__, 'data', 'other', '*'))
18
- PL = Dir.glob(File.join(__dir__, 'data', 'pl', '*'))