sinatra-r18n 4.0.0 → 5.0.1

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