fast_gettext 1.8.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +4 -3
- data/Readme.md +140 -49
- data/lib/fast_gettext.rb +16 -16
- data/lib/fast_gettext/cache.rb +4 -2
- data/lib/fast_gettext/mo_file.rb +28 -19
- data/lib/fast_gettext/po_file.rb +17 -14
- data/lib/fast_gettext/storage.rb +38 -32
- data/lib/fast_gettext/translation.rb +79 -113
- data/lib/fast_gettext/translation_repository.rb +5 -5
- data/lib/fast_gettext/translation_repository/base.rb +9 -6
- data/lib/fast_gettext/translation_repository/chain.rb +11 -5
- data/lib/fast_gettext/translation_repository/db.rb +11 -12
- data/lib/fast_gettext/translation_repository/db_models/translation_key.rb +11 -8
- data/lib/fast_gettext/translation_repository/db_models/translation_text.rb +4 -2
- data/lib/fast_gettext/translation_repository/logger.rb +4 -2
- data/lib/fast_gettext/translation_repository/merge.rb +9 -4
- data/lib/fast_gettext/translation_repository/mo.rb +8 -4
- data/lib/fast_gettext/translation_repository/po.rb +5 -2
- data/lib/fast_gettext/translation_repository/yaml.rb +10 -4
- data/lib/fast_gettext/version.rb +3 -1
- metadata +45 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b7df1ae6f9c9acae6fe82a22b0ce3efd1d545c9d814447070ebb59652a7fd71
|
4
|
+
data.tar.gz: 05af6efd5f93f5ea8bf2f8be7314566d0238781f7d809799823223ec01866ce4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0df4b37e9837b4661cf7c0cbef1c75144c3c2804b2da4110a4850c08eb3084a91cd419ffb5c796eff30ee96860d87cb555a3cb2bd3e99e25db64731868a08ff
|
7
|
+
data.tar.gz: dc6f882c3c3fa4ea1c3fc2399077d149c3e981124de8f9da99e0ee7bdf2fd248ac74131cc92f9167d05ef15a04eb2ba4e25780ea1f8bc9ecfe04795776704310
|
data/CHANGELOG
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
+
2.0.0 -- Changed p_ separator to \0004 https://github.com/grosser/fast_gettext/pull/107 add np and add gettext aliases
|
1
2
|
1.6.0 -- Remove restrictions around yaml file names
|
2
3
|
1.1.0 -- translations are no longer eager loaded for improved startup performance, pass `eager_load: true` to preload for example in preforked web server
|
3
4
|
1.0.0 -- do not enforce attr_accessible unless ProtectedAttributes are loaded
|
4
|
-
0.9.0 -- reworked internals of caching to be
|
5
|
+
0.9.0 -- reworked internals of caching to be pluggable
|
5
6
|
0.7.0 -- set_locale resets to default locale if none of the available locales was tried to set
|
6
|
-
0.6.0 -- plurals use singular translations as
|
7
|
+
0.6.0 -- plurals use singular translations as fallback e.g. you translated 'Axis' then n_('Axis','Axis',1) would return the translation for 'Axis' if no plural translation was found
|
7
8
|
0.4.14 -- "" is translated as "", not as gettext meta information
|
8
|
-
0.4.0 -- pluralisation_rules is no longer stored in each repository, only
|
9
|
+
0.4.0 -- pluralisation_rules is no longer stored in each repository, only retrieved. Added Chain and Logger repository.
|
9
10
|
0.3.6 -- FastGettext.default_locale=
|
10
11
|
0.3.5 -- FastGettext.default_text_domain=
|
11
12
|
0.3.4 -- Exceptions are thrown, not returned when translating without text domain
|
data/Readme.md
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
FastGettext
|
2
2
|
===========
|
3
|
-
GetText but
|
3
|
+
GetText but 12 x faster, 530 x less garbage, clean namespace (8 vs 26), simple and threadsafe!
|
4
4
|
|
5
5
|
It supports multiple backends (.mo, .po, .yml files, Database(ActiveRecord + any other), Chain, Loggers) and can easily be extended.
|
6
6
|
|
7
7
|
[Example Rails application](https://github.com/grosser/gettext_i18n_rails_example)
|
8
8
|
|
9
|
+
|
9
10
|
Comparison
|
10
11
|
==========
|
11
12
|
<table>
|
@@ -18,17 +19,17 @@ Comparison
|
|
18
19
|
</tr>
|
19
20
|
<tr>
|
20
21
|
<td>Speed*</td>
|
21
|
-
<td>0.
|
22
|
-
<td>
|
23
|
-
<td>
|
24
|
-
<td>
|
22
|
+
<td>0.08s</td>
|
23
|
+
<td>0.14s</td>
|
24
|
+
<td>1.75s</td>
|
25
|
+
<td>3.75s</td>
|
25
26
|
</tr>
|
26
27
|
<tr>
|
27
|
-
<td>
|
28
|
-
<td>
|
29
|
-
<td>
|
30
|
-
<td>
|
31
|
-
<td>
|
28
|
+
<td>Objects*</td>
|
29
|
+
<td>11K</td>
|
30
|
+
<td>15K</td>
|
31
|
+
<td>8017K</td>
|
32
|
+
<td>7107K</td>
|
32
33
|
</tr>
|
33
34
|
<tr>
|
34
35
|
<td>Included backends</td>
|
@@ -38,10 +39,12 @@ Comparison
|
|
38
39
|
<td>yml (db/key-value/po/chain in other I18n backends)</td>
|
39
40
|
</tr>
|
40
41
|
</table>
|
41
|
-
<small>*
|
42
|
+
<small>*500.000 translations with ruby 2.5.3 through `bundle exec rake benchmark`</small>
|
43
|
+
|
42
44
|
|
43
45
|
Setup
|
44
46
|
=====
|
47
|
+
|
45
48
|
### 1. Install
|
46
49
|
|
47
50
|
```Bash
|
@@ -60,8 +63,8 @@ Or po files (less maintenance than mo)
|
|
60
63
|
|
61
64
|
```Ruby
|
62
65
|
FastGettext.add_text_domain('my_app', path: 'locale', type: :po)
|
63
|
-
# :
|
64
|
-
# :
|
66
|
+
# ignore_fuzzy: true to not use fuzzy translations
|
67
|
+
# report_warning: false to hide warnings about obsolete/fuzzy translations
|
65
68
|
```
|
66
69
|
|
67
70
|
Or yaml files (use I18n syntax/indentation)
|
@@ -77,7 +80,7 @@ Or database (scaleable, good for many locales/translators)
|
|
77
80
|
```Ruby
|
78
81
|
# db access is cached <-> only first lookup hits the db
|
79
82
|
require "fast_gettext/translation_repository/db"
|
80
|
-
FastGettext::TranslationRepository::Db.require_models #load and include default models
|
83
|
+
FastGettext::TranslationRepository::Db.require_models # load and include default models
|
81
84
|
FastGettext.add_text_domain('my_app', type: :db, model: TranslationKey)
|
82
85
|
```
|
83
86
|
|
@@ -86,24 +89,83 @@ Do this once in every Thread. (e.g. Rails -> ApplicationController)
|
|
86
89
|
|
87
90
|
```Ruby
|
88
91
|
FastGettext.text_domain = 'my_app'
|
89
|
-
FastGettext.available_locales = ['de','en','fr','en_US','en_UK'] # only allow these locales to be set (optional)
|
92
|
+
FastGettext.available_locales = ['de', 'en', 'fr', 'en_US', 'en_UK'] # only allow these locales to be set (optional)
|
90
93
|
FastGettext.locale = 'de'
|
91
94
|
```
|
92
95
|
|
93
96
|
### 4. Start translating
|
94
97
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
_(
|
99
|
-
|
100
|
-
|
101
|
-
|
98
|
+
FastGetText supports all the translation methods of [ruby-gettext](http://github.com/ruby-gettext/gettext) with added support for block defaults.
|
99
|
+
(to get `*gettext` methods, use `FastGetText::TranslationAliased`)
|
100
|
+
|
101
|
+
#### `_()` or `gettext()`: basic translation
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
extend FastGettext::Translation
|
105
|
+
_('Car') == 'Auto' # found translation for 'Car'
|
106
|
+
_('not-found') == 'not-found' # The msgid is returned by default
|
107
|
+
```
|
108
|
+
|
109
|
+
#### `n_()` or `ngettext()`: pluralization
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
n_('Car', 'Cars', 1) == 'Auto'
|
113
|
+
n_('Car', 'Cars', 2) == 'Autos' # German plural of Cars
|
114
|
+
```
|
115
|
+
|
116
|
+
You'll often want to interpolate the results of `n_()` using ruby builtin `%` operator.
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
n_('Car', '#{n} Cars', 2) % { n: count } == '2 Autos'
|
120
|
+
```
|
121
|
+
|
122
|
+
#### `p_()` or `pgettext()`: translation with context
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
p_('File', 'Open') == _("File\004Open") == "öffnen"
|
126
|
+
p_('Context', 'not-found') == 'not-found'
|
127
|
+
```
|
128
|
+
|
129
|
+
#### `s_()` or `sgetext()`: translation with namespace
|
130
|
+
|
131
|
+
```ruby
|
132
|
+
s_('File|Open') == _('File|Open') == "öffnen"
|
133
|
+
s_('Context|not-found') == 'not-found'
|
134
|
+
```
|
135
|
+
|
136
|
+
The difference between `s_()` and `p_()` is largely based on how the translations
|
137
|
+
are stored. Your preference will be based on your workflow and translation editing
|
138
|
+
tools.
|
139
|
+
|
140
|
+
#### `pn_()` or `pngettext()`: context-aware pluralized
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
pn_('Fruit', 'Apple', 'Apples', 3) == 'Äpfel'
|
144
|
+
pn_('Fruit', 'Apple', 'Apples', 1) == 'Apfel'
|
145
|
+
```
|
146
|
+
|
147
|
+
#### `sn_()` or `sngettext()`: without context pluralized
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
sn_('Fruit|Apple', 'Apples', 3) == 'Äpfel'
|
151
|
+
sn_('Fruit|Apple', 'Apples', 1) == 'Apfel'
|
152
|
+
```
|
153
|
+
|
154
|
+
#### `N_()` and `Nn_()`: make dynamic translations available to the parser.
|
155
|
+
|
156
|
+
In many instances, your strings will not be found the by the ruby-parse. These methods
|
157
|
+
allow for those strings to be discovered.
|
158
|
+
|
159
|
+
```
|
160
|
+
N_("active"); N_("inactive"); N_("paused") # possible value of status for parser to find.
|
161
|
+
Nn_("active", "inactive", "paused") # alternative method
|
162
|
+
_("Your account is #{account_state}.") % { account_state: status }
|
102
163
|
```
|
103
164
|
|
104
165
|
|
105
166
|
Managing translations
|
106
|
-
|
167
|
+
=====================
|
168
|
+
|
107
169
|
### mo/po-files
|
108
170
|
Generate .po or .mo files using GetText parser (example tasks at [gettext_i18n_rails](http://github.com/grosser/gettext_i18n_rails))
|
109
171
|
|
@@ -113,12 +175,12 @@ Tell Gettext where your .mo or .po files lie, e.g. for locale/de/my_app.po and l
|
|
113
175
|
FastGettext.add_text_domain('my_app', path: 'locale')
|
114
176
|
```
|
115
177
|
|
116
|
-
Use the [original GetText](http://github.com/
|
178
|
+
Use the [original GetText](http://github.com/ruby-gettext/gettext) to create and manage po/mo-files.
|
117
179
|
(Work on a po/mo parser & reader that is easier to use has started, contributions welcome @ [get_pomo](http://github.com/grosser/get_pomo) )
|
118
180
|
|
119
181
|
### Database
|
120
182
|
[Example migration for ActiveRecord](http://github.com/grosser/fast_gettext/blob/master/examples/db/migration.rb)<br/>
|
121
|
-
The default plural
|
183
|
+
The default plural separator is `||||` but you may overwrite it (or suggest a better one..).
|
122
184
|
|
123
185
|
This is usable with any model DataMapper/Sequel or any other(non-database) backend, the only thing you need to do is respond to the self.translation(key, locale) call.
|
124
186
|
If you want to use your own models, have a look at the [default models](http://github.com/grosser/fast_gettext/tree/master/lib/fast_gettext/translation_repository/db_models) to see what you want/need to implement.
|
@@ -130,7 +192,7 @@ Rails
|
|
130
192
|
Try the [gettext_i18n_rails plugin](http://github.com/grosser/gettext_i18n_rails), it simplifies the setup.<br/>
|
131
193
|
Try the [translation_db_engine](http://github.com/grosser/translation_db_engine), to manage your translations in a db.
|
132
194
|
|
133
|
-
Setting `available_locales`,`text_domain` or `locale` will not work inside the `
|
195
|
+
Setting `available_locales`,`text_domain` or `locale` will not work inside the `environment.rb`,
|
134
196
|
since it runs in a different thread then e.g. controllers, so set them inside your application_controller.
|
135
197
|
|
136
198
|
```Ruby
|
@@ -145,7 +207,7 @@ class ApplicationController ...
|
|
145
207
|
include FastGettext::Translation
|
146
208
|
before_filter :set_locale
|
147
209
|
def set_locale
|
148
|
-
FastGettext.available_locales = ['de','en'
|
210
|
+
FastGettext.available_locales = ['de', 'en', ...]
|
149
211
|
FastGettext.text_domain = 'frontend'
|
150
212
|
FastGettext.set_locale(params[:locale] || session[:locale] || request.env['HTTP_ACCEPT_LANGUAGE'])
|
151
213
|
session[:locale] = I18n.locale = FastGettext.locale
|
@@ -155,6 +217,7 @@ class ApplicationController ...
|
|
155
217
|
|
156
218
|
Advanced features
|
157
219
|
=================
|
220
|
+
|
158
221
|
### Abnormal pluralisation
|
159
222
|
Plurals are selected by index, think of it as `['car', 'cars'][index]`<br/>
|
160
223
|
A pluralisation rule decides which form to use e.g. in english its `count == 1 ? 0 : 1`.<br/>
|
@@ -163,7 +226,7 @@ If you have any languages that do not fit this rule, you have to add a custom pl
|
|
163
226
|
Via Ruby:
|
164
227
|
|
165
228
|
```Ruby
|
166
|
-
FastGettext.pluralisation_rule =
|
229
|
+
FastGettext.pluralisation_rule = ->(count){ count > 5 ? 1 : (count > 2 ? 0 : 2)}
|
167
230
|
```
|
168
231
|
|
169
232
|
Via mo/pofile:
|
@@ -179,7 +242,7 @@ If you only use one text domain, setting `FastGettext.default_text_domain = 'app
|
|
179
242
|
is sufficient and no more `text_domain=` is needed
|
180
243
|
|
181
244
|
### default_locale
|
182
|
-
If the simple rule of "first `
|
245
|
+
If the simple rule of "first `available_locale` or 'en'" is not sufficient for you, set `FastGettext.default_locale = 'de'`.
|
183
246
|
|
184
247
|
### default_available_locales
|
185
248
|
Fallback when no available_locales are set
|
@@ -203,7 +266,7 @@ repos = [
|
|
203
266
|
FastGettext::TranslationRepository.build('new', path: '....'),
|
204
267
|
FastGettext::TranslationRepository.build('old', path: '....')
|
205
268
|
]
|
206
|
-
FastGettext.add_text_domain 'combined', type: :chain,
|
269
|
+
FastGettext.add_text_domain 'combined', type: :chain, chain: repos
|
207
270
|
```
|
208
271
|
|
209
272
|
### Merge
|
@@ -213,8 +276,8 @@ a subordinate repository is added. This puts the burden on the load phase and sp
|
|
213
276
|
|
214
277
|
```Ruby
|
215
278
|
repos = [
|
216
|
-
FastGettext::TranslationRepository.build('new',
|
217
|
-
FastGettext::TranslationRepository.build('old',
|
279
|
+
FastGettext::TranslationRepository.build('new', path: '....'),
|
280
|
+
FastGettext::TranslationRepository.build('old', path: '....')
|
218
281
|
]
|
219
282
|
domain = FastGettext.add_text_domain 'combined', type: :merge, chain: repos
|
220
283
|
```
|
@@ -232,7 +295,7 @@ When you want to know which keys could not be translated or were used, add a Log
|
|
232
295
|
```Ruby
|
233
296
|
repos = [
|
234
297
|
FastGettext::TranslationRepository.build('app', path: '....')
|
235
|
-
FastGettext::TranslationRepository.build('logger', type: :logger, callback:
|
298
|
+
FastGettext::TranslationRepository.build('logger', type: :logger, callback: ->(key_or_array_of_ids) { ... }),
|
236
299
|
}
|
237
300
|
FastGettext.add_text_domain 'combined', type: :chain, chain: repos
|
238
301
|
```
|
@@ -246,7 +309,7 @@ Want a xml version ?
|
|
246
309
|
Write your own TranslationRepository!
|
247
310
|
|
248
311
|
```Ruby
|
249
|
-
# fast_gettext/translation_repository/
|
312
|
+
# fast_gettext/translation_repository/wtf.rb
|
250
313
|
module FastGettext
|
251
314
|
module TranslationRepository
|
252
315
|
class Wtf
|
@@ -263,33 +326,65 @@ If you have more than one gettext domain, there are two sets of functions
|
|
263
326
|
available:
|
264
327
|
|
265
328
|
```Ruby
|
266
|
-
|
329
|
+
extend FastGettext::TranslationMultidomain
|
267
330
|
|
268
331
|
d_("domainname", "string") # finds 'string' in domain domainname
|
269
332
|
dn_("domainname", "string", "strings", 1) # ditto
|
270
|
-
|
333
|
+
dp_("domainname", "context", "key")
|
334
|
+
ds_("domainname", "context|key")
|
335
|
+
dnp_("domainname", "context", "string", "strings")
|
336
|
+
dns_("domainname", "context|string", "strings")
|
271
337
|
```
|
272
338
|
|
273
339
|
These are helper methods so you don't need to write:
|
274
340
|
|
275
341
|
```Ruby
|
276
|
-
FastGettext.
|
277
|
-
_("string")
|
342
|
+
FastGettext.with_domain("domainname") { _("string") }
|
278
343
|
```
|
279
344
|
|
280
345
|
It is useful in Rails plugins in the views for example. The second set of
|
281
346
|
functions are D functions which search for string in _all_ domains. If there
|
282
347
|
are multiple translations in different domains, it returns them in random
|
283
|
-
order (depends on the Ruby hash implementation)
|
348
|
+
order (depends on the Ruby hash implementation).
|
284
349
|
|
285
350
|
```Ruby
|
286
|
-
|
351
|
+
extend FastGettext::TranslationMultidomain
|
287
352
|
|
288
353
|
D_("string") # finds 'string' in any domain
|
289
|
-
#
|
354
|
+
Dn_("string", "strings", 1) # ditto
|
355
|
+
Dp_("context", "key")
|
356
|
+
Ds_("context|key")
|
357
|
+
Dnp_("context", "string", "strings")
|
358
|
+
Dns_("context|string", "strings")
|
359
|
+
```
|
360
|
+
|
361
|
+
Alternatively you can use [merge repository](https://github.com/grosser/fast_gettext#merge) to achieve the same behavior.
|
362
|
+
|
363
|
+
#### Block defaults
|
364
|
+
|
365
|
+
All the translation methods (includ MultiDomain) support a block default, a feature not provided by ruby-gettext. When a translation is
|
366
|
+
not found, if a block is provided the block is always returned. Otherwise, a key is returned. Methods doing pluralization will attempt a simple translation of alternate keys.
|
367
|
+
|
368
|
+
```ruby
|
369
|
+
_('not-found'){ "alternative default" } == alternate default
|
370
|
+
```
|
371
|
+
|
372
|
+
This block default is useful when the default is a very long passage of text that wouldn't make a useful key. You can also instrument logging not found keys.
|
373
|
+
|
374
|
+
```ruby
|
375
|
+
_('terms-and-conditions'){
|
376
|
+
load_terms_and_conditions
|
377
|
+
request_terms_and_conditions_translation_from_legal
|
378
|
+
}
|
379
|
+
|
380
|
+
# Override _ with logging
|
381
|
+
def _(key, &block)
|
382
|
+
result = gettext(key){ nil } # nil returned when not found
|
383
|
+
log_missing_translation_key(key) if result.nil?
|
384
|
+
result || (block ? block.call : key)
|
385
|
+
end
|
290
386
|
```
|
291
387
|
|
292
|
-
Alternatively you can use [merge repository](https://github.com/grosser/fast_gettext#merge) to achieve the same behaviour.
|
293
388
|
|
294
389
|
FAQ
|
295
390
|
===
|
@@ -297,13 +392,8 @@ FAQ
|
|
297
392
|
- [Iconv require error in 1.9.2](http://exceptionz.wordpress.com/2010/02/03/how-to-fix-the-iconv-require-error-in-ruby-1-9)
|
298
393
|
|
299
394
|
|
300
|
-
|
301
|
-
|
302
|
-
- Add a fallback for Iconv.conv in ruby 1.9.4 -> lib/fast_gettext/vendor/iconv
|
303
|
-
- YML backend that reads ActiveSupport::I18n files
|
304
|
-
|
305
|
-
Author
|
306
|
-
======
|
395
|
+
Authors
|
396
|
+
=======
|
307
397
|
Mo/Po-file parsing from Masao Mutoh, see vendor/README
|
308
398
|
|
309
399
|
### [Contributors](http://github.com/grosser/fast_gettext/contributors)
|
@@ -327,6 +417,7 @@ Mo/Po-file parsing from Masao Mutoh, see vendor/README
|
|
327
417
|
- [Martin Meier](https://github.com/mameier)
|
328
418
|
- [morcoteg](https://github.com/morcoteg)
|
329
419
|
- [Daniel Schepers](https://github.com/tall-dan)
|
420
|
+
- [Robert Graff](https://github.com/rgraff)
|
330
421
|
|
331
422
|
[Michael Grosser](http://grosser.it)<br/>
|
332
423
|
michael@grosser.it<br/>
|
data/lib/fast_gettext.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fast_gettext/mo_file'
|
2
4
|
require 'fast_gettext/storage'
|
3
5
|
require 'fast_gettext/translation'
|
@@ -6,30 +8,28 @@ require 'fast_gettext/vendor/string'
|
|
6
8
|
require 'fast_gettext/version'
|
7
9
|
|
8
10
|
module FastGettext
|
9
|
-
|
10
|
-
extend
|
11
|
+
extend FastGettext::Storage
|
12
|
+
extend FastGettext::Translation
|
11
13
|
|
12
|
-
LOCALE_REX =
|
14
|
+
LOCALE_REX = /^[a-z]{2,3}$|^[a-z]{2,3}_[A-Z]{2,3}$/.freeze
|
13
15
|
NAMESPACE_SEPARATOR = '|'
|
16
|
+
CONTEXT_SEPARATOR = "\004"
|
14
17
|
|
15
|
-
#
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
define_method method do |*args|
|
23
|
-
Translation.send(method,*args)
|
24
|
-
end
|
18
|
+
# helper block for changing domains
|
19
|
+
def self.with_domain(domain)
|
20
|
+
old_domain = FastGettext.text_domain
|
21
|
+
FastGettext.text_domain = domain
|
22
|
+
yield
|
23
|
+
ensure
|
24
|
+
FastGettext.text_domain = old_domain
|
25
25
|
end
|
26
26
|
|
27
|
-
def add_text_domain(name,options)
|
28
|
-
translation_repositories[name] = TranslationRepository.build(name,options)
|
27
|
+
def self.add_text_domain(name, options)
|
28
|
+
translation_repositories[name] = TranslationRepository.build(name, options)
|
29
29
|
end
|
30
30
|
|
31
31
|
# some repositories know where to store their locales
|
32
|
-
def locale_path
|
32
|
+
def self.locale_path
|
33
33
|
translation_repositories[text_domain].instance_variable_get(:@options)[:path]
|
34
34
|
end
|
35
35
|
end
|
data/lib/fast_gettext/cache.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FastGettext
|
2
4
|
class Cache
|
3
5
|
def initialize
|
@@ -8,13 +10,13 @@ module FastGettext
|
|
8
10
|
def fetch(key)
|
9
11
|
translation = @current[key]
|
10
12
|
if translation.nil? # uncached
|
11
|
-
@current[key] = yield || false # TODO get rid of this false hack and cache :missing
|
13
|
+
@current[key] = yield || false # TODO: get rid of this false hack and cache :missing
|
12
14
|
else
|
13
15
|
translation
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
17
|
-
# TODO only used for tests, maybe if-else around it ...
|
19
|
+
# TODO: only used for tests, maybe if-else around it ...
|
18
20
|
def []=(key, value)
|
19
21
|
@current[key] = value
|
20
22
|
end
|