i18n-js 4.0.0 → 4.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 +4 -4
- data/CHANGELOG.md +7 -0
- data/MIGRATING_FROM_V3_TO_V4.md +191 -0
- data/README.md +50 -18
- data/i18n-js.gemspec +1 -1
- data/lib/guard/i18n-js.rb +21 -4
- data/lib/i18n-js/cli/export_command.rb +17 -3
- data/lib/i18n-js/listen.rb +23 -9
- data/lib/i18n-js/version.rb +1 -1
- metadata +7 -8
- data/i18njs.png +0 -0
- data/images/i18njs-check.gif +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb5f60568907f90a59b7d19a6b2f61cf9a3fff95ea419b1b8b31deab16529dc6
|
4
|
+
data.tar.gz: ca65b2bf6717b93218092e8c994cdbac8af6bc69fddab421ebef976c87dc5503
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e33c8605b5197cbdc6a8f30ef1cb7e5f911f84dd177d488489fcfc82e5dd2b8fb3e387b0fe89683c3e71c6025ff7b47685163317540c4e2c5c756936660be55
|
7
|
+
data.tar.gz: b4367db58b89392c42c94121ccdde7179e1ea455de6c20685ded2c034304ce4c8c44cbfa1a4967610443e4f91116058ee86bc14d2e913a2c6006ee648c189dd9
|
data/CHANGELOG.md
CHANGED
@@ -11,6 +11,13 @@ Prefix your message with one of the following:
|
|
11
11
|
- [Security] in case of vulnerabilities.
|
12
12
|
-->
|
13
13
|
|
14
|
+
## v4.0.1
|
15
|
+
|
16
|
+
- [Fixed] Shell out export to avoid handling I18n reloading heuristics.
|
17
|
+
- [Changed] `I18nJS.listen` now accepts a directories list to watch.
|
18
|
+
- [Changed] `I18nJS.listen` now accepts
|
19
|
+
[listen](https://rubygems.org/gems/listen) options via `:options`.
|
20
|
+
|
14
21
|
## Jul 29, 2022
|
15
22
|
|
16
23
|
- Official release of i18n-js v4.0.0.
|
@@ -0,0 +1,191 @@
|
|
1
|
+
# Migrating from v3 to v4
|
2
|
+
|
3
|
+
I18n-js v4 is a breaking change release and diverges quite a lot from how the
|
4
|
+
previous version worked. This guides summarizes the process of upgrading an app
|
5
|
+
that uses i18n-js v3 to v4.
|
6
|
+
|
7
|
+
## Development
|
8
|
+
|
9
|
+
Previously, you could use a middleware to export translations (some people even
|
10
|
+
used this in production 😬). In development, you can now use whatever your want,
|
11
|
+
because i18n-js doesn't make any assumptions. All you need to do is running
|
12
|
+
`i18n export`, either manually or by using something that listens to file
|
13
|
+
changes.
|
14
|
+
|
15
|
+
If you like watchman, you can use something like this:
|
16
|
+
|
17
|
+
```bash
|
18
|
+
#!/usr/bin/env bash
|
19
|
+
|
20
|
+
root=`pwd`
|
21
|
+
|
22
|
+
watchman watch-del "$root"
|
23
|
+
watchman watch-project "$root"
|
24
|
+
watchman trigger-del "$root" i18n
|
25
|
+
|
26
|
+
watchman -j <<-JSON
|
27
|
+
[
|
28
|
+
"trigger",
|
29
|
+
"$root",
|
30
|
+
{
|
31
|
+
"name": "i18n",
|
32
|
+
"expression": [
|
33
|
+
"anyof",
|
34
|
+
["match", "config/locales/**/*.yml", "wholename"],
|
35
|
+
["match", "config/locales/**/*.po", "wholename"],
|
36
|
+
["match", "config/i18n.yml", "wholename"]
|
37
|
+
],
|
38
|
+
"command": ["i18n", "export"]
|
39
|
+
}
|
40
|
+
]
|
41
|
+
JSON
|
42
|
+
|
43
|
+
# If you're running this through Foreman, then uncomment the following lines:
|
44
|
+
# while true; do
|
45
|
+
# sleep 1
|
46
|
+
# done
|
47
|
+
```
|
48
|
+
|
49
|
+
You can also use guard. Make sure you have both
|
50
|
+
[guard](https://rubygems.org/packages/guard) and
|
51
|
+
[guard-compat](https://rubygems.org/packages/guard-compat) installed and use
|
52
|
+
Guardfile file with the following contents:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
guard(:"i18n-js",
|
56
|
+
run_on_start: true,
|
57
|
+
config_file: "./config/i18n.yml",
|
58
|
+
require_file: "./config/environment.rb") do
|
59
|
+
watch(%r{^config/locales/.+\.(yml|po)$})
|
60
|
+
watch(%r{^config/i18n.yml$})
|
61
|
+
watch("Gemfile")
|
62
|
+
end
|
63
|
+
```
|
64
|
+
|
65
|
+
To run guard, use `guard start -i`.
|
66
|
+
|
67
|
+
Finally, you can use [listen](https://rubygems.org/gems/listen). Create the file
|
68
|
+
`config/initializers/i18n.rb` with the following content:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
Rails.application.config.after_initialize do
|
72
|
+
require "i18n-js/listen"
|
73
|
+
# This will only run in development.
|
74
|
+
I18nJS.listen
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
> **Warning**:
|
79
|
+
>
|
80
|
+
> No matter which approach you choose, the idea is that you _precompile_ your
|
81
|
+
> translations when going to production. DO NOT RUN any of the above in
|
82
|
+
> production.
|
83
|
+
|
84
|
+
## Exporting translations
|
85
|
+
|
86
|
+
The build process for i18n now relies on an external CLI called `i18n`. All you
|
87
|
+
need to do is executing `i18n export` in your build step to generate the json
|
88
|
+
files for your translations.
|
89
|
+
|
90
|
+
## Using your translations
|
91
|
+
|
92
|
+
The JavaScript package is now a separate thing and need to be installed using
|
93
|
+
your favorite tooling (e.g. yarn, npm, pnpm, etc).
|
94
|
+
|
95
|
+
```console
|
96
|
+
$ yarn add i18n-js@latest
|
97
|
+
$ npm i --save-dev i18n-js@latest
|
98
|
+
```
|
99
|
+
|
100
|
+
From now on, the way you load translations and set up I18n-js is totally up to
|
101
|
+
you, but means you need to load the json files and attach to the I18n-js
|
102
|
+
instance. This is how I do it in a project I'm doing right now (Rails 7 +
|
103
|
+
esbuild + TypeScript). First, we need to load the I18n-js configuration from the
|
104
|
+
main JavaScript file:
|
105
|
+
|
106
|
+
```typescript
|
107
|
+
// app/javascript/application.ts
|
108
|
+
import { i18n } from "./config/i18n";
|
109
|
+
```
|
110
|
+
|
111
|
+
Then we need to load our translations and instantiate the I18n-js class.
|
112
|
+
|
113
|
+
```typescript
|
114
|
+
// app/javascript/config/i18n.ts
|
115
|
+
import { I18n } from "i18n-js";
|
116
|
+
import translations from "translations.json";
|
117
|
+
|
118
|
+
// Fetch user locale from html#lang.
|
119
|
+
// This value is being set on `app/views/layouts/application.html.erb` and
|
120
|
+
// is inferred from `ACCEPT-LANGUAGE` header.
|
121
|
+
const userLocale = document.documentElement.lang;
|
122
|
+
|
123
|
+
export const i18n = new I18n();
|
124
|
+
i18n.store(translations);
|
125
|
+
i18n.defaultLocale = "en";
|
126
|
+
i18n.enableFallback = true;
|
127
|
+
i18n.locale = userLocale;
|
128
|
+
```
|
129
|
+
|
130
|
+
The best thing about the above is that it is a pretty straightforward pattern in
|
131
|
+
the JavaScript community. It doesn't rely on specific parts from Sprockets (I'm
|
132
|
+
not even using it on my projects) or eRb files.
|
133
|
+
|
134
|
+
## Ruby on Rails
|
135
|
+
|
136
|
+
### Upgrading the configuration file
|
137
|
+
|
138
|
+
The configuration file loaded from `config/i18nyml` has changed. Given the v3
|
139
|
+
configuration below
|
140
|
+
|
141
|
+
```yaml
|
142
|
+
---
|
143
|
+
translations:
|
144
|
+
- file: "app/assets/javascripts/date_formats.js"
|
145
|
+
only: "*.date.formats"
|
146
|
+
- file: "app/assets/javascripts/other.js"
|
147
|
+
only: ["*.activerecord", "*.admin.*.title"]
|
148
|
+
- file: "app/assets/javascripts/everything_else.js"
|
149
|
+
except:
|
150
|
+
- "*.activerecord"
|
151
|
+
- "*.admin.*.title"
|
152
|
+
- "*.date.formats"
|
153
|
+
```
|
154
|
+
|
155
|
+
the equivalent configuration file for v4 would be
|
156
|
+
|
157
|
+
```yaml
|
158
|
+
---
|
159
|
+
translations:
|
160
|
+
- file: "app/assets/javascripts/date_formats.js"
|
161
|
+
patterns:
|
162
|
+
- "*.date.formats"
|
163
|
+
- file: "app/assets/javascripts/other.js"
|
164
|
+
patterns:
|
165
|
+
- "*.activerecord"
|
166
|
+
- "*.admin.*.title"
|
167
|
+
- file: "app/assets/javascripts/everything_else.js"
|
168
|
+
patterns:
|
169
|
+
# Notice the exclamation mark.
|
170
|
+
- "!*.activerecord"
|
171
|
+
- "!*.admin.*.title"
|
172
|
+
- "!*.date.formats"
|
173
|
+
```
|
174
|
+
|
175
|
+
Other configuration options:
|
176
|
+
|
177
|
+
- `export_i18n_js`: removed without an equivalent
|
178
|
+
- `fallbacks`: removed without an equivalent
|
179
|
+
- `js_available_locales`: removed (on v4 you can use groups, like in
|
180
|
+
`{pt-BR,en}.*`)
|
181
|
+
- `namespace`: removed without an equivalent
|
182
|
+
- `sort_translation_keys`: removed (on v4 keys will always be sorted)
|
183
|
+
- `translations[].prefix`: removed without an equivalent
|
184
|
+
- `translations[].pretty_print`: removed (on v4 files will always be exported in
|
185
|
+
a readable format)
|
186
|
+
|
187
|
+
### Placeholders
|
188
|
+
|
189
|
+
Previously, v3 had the `%{locale}` placeholder, which can be used as part of the
|
190
|
+
directory and/or file name. Now, the syntax is just `:locale`. Additionally, you
|
191
|
+
can also use `:digest`, which uses a MD5 hex digest of the exported file.
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<p align="center">
|
2
|
-
<img width="250" height="58" src="https://github.com/fnando/i18n-js/raw/main/i18njs.png" alt="i18n.js">
|
2
|
+
<img width="250" height="58" src="https://github.com/fnando/i18n-js/raw/main/images/i18njs.png" alt="i18n.js">
|
3
3
|
</p>
|
4
4
|
|
5
5
|
<p align="center">
|
@@ -12,14 +12,14 @@
|
|
12
12
|
<small>
|
13
13
|
Oh, you don't use Ruby? No problem! You can still use i18n-js
|
14
14
|
<br>
|
15
|
-
and the
|
16
|
-
<a href="https://www.npmjs.com/package/i18n-js/v/
|
15
|
+
and the
|
16
|
+
<a href="https://www.npmjs.com/package/i18n-js/v/latest">companion JavaScript package</a>.
|
17
17
|
</small>
|
18
18
|
</p>
|
19
19
|
|
20
20
|
<p align="center">
|
21
21
|
<a href="https://github.com/fnando/i18n-js"><img src="https://github.com/fnando/i18n-js/workflows/ruby-tests/badge.svg" alt="Tests"></a>
|
22
|
-
<a href="https://rubygems.org/gems/i18n-js"><img src="https://img.shields.io/gem/v/i18n-js.svg
|
22
|
+
<a href="https://rubygems.org/gems/i18n-js"><img src="https://img.shields.io/gem/v/i18n-js.svg" alt="Gem"></a>
|
23
23
|
<a href="https://rubygems.org/gems/i18n-js"><img src="https://img.shields.io/gem/dt/i18n-js.svg" alt="Gem"></a>
|
24
24
|
<a href="https://tldrlegal.com/license/mit-license"><img src="https://img.shields.io/:License-MIT-blue.svg" alt="MIT License"></a>
|
25
25
|
</p>
|
@@ -45,6 +45,14 @@ About patterns:
|
|
45
45
|
- `*.messages.*`
|
46
46
|
- Patterns starting with `!` are excluded.
|
47
47
|
- `!*.activerecord.*` will exclude all ActiveRecord translations.
|
48
|
+
- You can use groups:
|
49
|
+
- `{pt-BR,en}.js.*` will include only `pt-BR` and `en` translations, even if
|
50
|
+
more languages are available.
|
51
|
+
|
52
|
+
> **Note**:
|
53
|
+
>
|
54
|
+
> Patterns use [glob](https://rubygems.org/gems/glob), so check it out for the
|
55
|
+
> most up-to-date documentation about what's available.
|
48
56
|
|
49
57
|
The config file:
|
50
58
|
|
@@ -131,13 +139,15 @@ check:
|
|
131
139
|
- en.mailer.login.body
|
132
140
|
```
|
133
141
|
|
134
|
-
> **Note**:
|
135
|
-
>
|
136
|
-
>
|
142
|
+
> **Note**:
|
143
|
+
>
|
144
|
+
> In order to avoid mistakenly ignoring keys, this configuration option only
|
145
|
+
> accepts the full translation scope, rather than accepting a pattern like
|
146
|
+
> `pt.ignored.scope.*`.
|
137
147
|
|
138
148
|
## Automatically export translations
|
139
149
|
|
140
|
-
### Using watchman
|
150
|
+
### Using [watchman](https://facebook.github.io/watchman/)
|
141
151
|
|
142
152
|
Create a script at `bin/i18n-watch`.
|
143
153
|
|
@@ -182,11 +192,11 @@ line to your Procfile:
|
|
182
192
|
i18n: ./bin/i18n-watch
|
183
193
|
```
|
184
194
|
|
185
|
-
### Using guard
|
195
|
+
### Using [guard](https://rubygems.org/gems/guard)
|
186
196
|
|
187
|
-
Install [guard](https://rubygems.org/
|
188
|
-
[guard-compat](https://rubygems.org/
|
189
|
-
|
197
|
+
Install [guard](https://rubygems.org/gems/guard) and
|
198
|
+
[guard-compat](https://rubygems.org/gems/guard-compat). Then create a Guardfile
|
199
|
+
with the following configuration:
|
190
200
|
|
191
201
|
```ruby
|
192
202
|
guard(:"i18n-js",
|
@@ -204,7 +214,7 @@ accordingly.
|
|
204
214
|
|
205
215
|
Now you can run `guard start -i`.
|
206
216
|
|
207
|
-
### Using listen
|
217
|
+
### Using [listen](https://rubygems.org/gems/listen)
|
208
218
|
|
209
219
|
Create a file under `config/initializers/i18n.rb` with the following content:
|
210
220
|
|
@@ -216,8 +226,21 @@ end
|
|
216
226
|
```
|
217
227
|
|
218
228
|
The code above will watch for changes based on `config/i18n.yml` and
|
219
|
-
`config/locales`. You can customize these options
|
220
|
-
|
229
|
+
`config/locales`. You can customize these options:
|
230
|
+
|
231
|
+
- `config_file` - i18n-js configuration file
|
232
|
+
- `locales_dir` - one or multiple directories to watch for locales changes
|
233
|
+
- `options` - passed directly to [listen](https://github.com/guard/listen/#options)
|
234
|
+
|
235
|
+
Example:
|
236
|
+
|
237
|
+
```ruby
|
238
|
+
I18nJS.listen(
|
239
|
+
config_file: "config/i18n.yml",
|
240
|
+
locales_dir: ["config/locales", "app/views"],
|
241
|
+
options: {only: %r{.yml$}
|
242
|
+
)
|
243
|
+
```
|
221
244
|
|
222
245
|
### Integrating with your frontend
|
223
246
|
|
@@ -227,6 +250,13 @@ that loads all the exported translation.
|
|
227
250
|
|
228
251
|
### FAQ
|
229
252
|
|
253
|
+
#### I'm running v3. Is there a migration plan?
|
254
|
+
|
255
|
+
[There's a document](https://github.com/fnando/i18n-js/tree/main/MIGRATING_FROM_V3_TO_V4.md)
|
256
|
+
outlining some of the things you need to do to migrate from v3 to v4. It may not
|
257
|
+
be as complete as we'd like it to be, so let's know if you face any issues
|
258
|
+
during the migration is not outline is that document.
|
259
|
+
|
230
260
|
#### How can I export translations without having a database around?
|
231
261
|
|
232
262
|
Some people may have a build process using something like Docker that don't
|
@@ -246,9 +276,11 @@ require "action_view/railtie"
|
|
246
276
|
I18n.load_path += Dir["./config/locales/**/*.yml"]
|
247
277
|
```
|
248
278
|
|
249
|
-
|
250
|
-
|
251
|
-
|
279
|
+
> **Note**:
|
280
|
+
>
|
281
|
+
> You may not need to load ActiveSupport and ActionView lines, or even may need
|
282
|
+
> to add additional requires for other libs. With this approach you have full
|
283
|
+
> control on what's going to be loaded.
|
252
284
|
|
253
285
|
## Maintainer
|
254
286
|
|
data/i18n-js.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
29
29
|
`git ls-files -z`
|
30
30
|
.split("\x0")
|
31
|
-
.reject {|f| f.match(%r{^(test|spec|features)/}) }
|
31
|
+
.reject {|f| f.match(%r{^(test|spec|features|images)/}) }
|
32
32
|
end
|
33
33
|
|
34
34
|
spec.bindir = "exe"
|
data/lib/guard/i18n-js.rb
CHANGED
@@ -53,13 +53,30 @@ module Guard
|
|
53
53
|
info("Changes detected: #{changes.join(', ')}") if changes
|
54
54
|
|
55
55
|
@current_thread = Thread.new do
|
56
|
-
|
57
|
-
|
56
|
+
capture do
|
57
|
+
system "i18n",
|
58
|
+
"export",
|
59
|
+
"--config",
|
60
|
+
config_file.to_s,
|
61
|
+
"--require",
|
62
|
+
require_file.to_s,
|
63
|
+
"--quiet"
|
64
|
+
end
|
58
65
|
end
|
59
66
|
|
60
67
|
current_thread.join
|
61
68
|
end
|
62
69
|
|
70
|
+
def capture
|
71
|
+
original = $stdout
|
72
|
+
$stdout = StringIO.new
|
73
|
+
yield
|
74
|
+
rescue StandardError
|
75
|
+
# noop
|
76
|
+
ensure
|
77
|
+
$stdout = original
|
78
|
+
end
|
79
|
+
|
63
80
|
def validate_file(key, file)
|
64
81
|
return true if file && File.file?(file)
|
65
82
|
|
@@ -68,11 +85,11 @@ module Guard
|
|
68
85
|
end
|
69
86
|
|
70
87
|
def error(message)
|
71
|
-
::Guard::UI.error "[
|
88
|
+
::Guard::UI.error "[i18n-js] #{message}"
|
72
89
|
end
|
73
90
|
|
74
91
|
def info(message)
|
75
|
-
::Guard::UI.info "[
|
92
|
+
::Guard::UI.info "[i18n-js] #{message}"
|
76
93
|
end
|
77
94
|
end
|
78
95
|
end
|
@@ -27,6 +27,14 @@ module I18nJS
|
|
27
27
|
options[:require_file] = require_file
|
28
28
|
end
|
29
29
|
|
30
|
+
opts.on(
|
31
|
+
"-q",
|
32
|
+
"--quiet",
|
33
|
+
"A Ruby file that must be loaded"
|
34
|
+
) do |quiet|
|
35
|
+
options[:quiet] = quiet
|
36
|
+
end
|
37
|
+
|
30
38
|
opts.on("-h", "--help", "Prints this help") do
|
31
39
|
ui.exit_with opts.to_s
|
32
40
|
end
|
@@ -39,11 +47,11 @@ module I18nJS
|
|
39
47
|
ui.fail_with("=> ERROR: you need to specify the config file")
|
40
48
|
end
|
41
49
|
|
42
|
-
|
50
|
+
log("=> Config file:", options[:config_file].inspect)
|
43
51
|
config_file = File.expand_path(options[:config_file])
|
44
52
|
|
45
53
|
if options[:require_file]
|
46
|
-
|
54
|
+
log("=> Require file:", options[:require_file].inspect)
|
47
55
|
require_file = File.expand_path(options[:require_file])
|
48
56
|
end
|
49
57
|
|
@@ -66,7 +74,13 @@ module I18nJS
|
|
66
74
|
I18nJS.call(config_file: config_file)
|
67
75
|
end
|
68
76
|
|
69
|
-
|
77
|
+
log("=> Done in #{time.round(2)}s")
|
78
|
+
end
|
79
|
+
|
80
|
+
private def log(*args)
|
81
|
+
return if options[:quiet]
|
82
|
+
|
83
|
+
ui.stdout_print(*args)
|
70
84
|
end
|
71
85
|
|
72
86
|
private def set_defaults!
|
data/lib/i18n-js/listen.rb
CHANGED
@@ -7,7 +7,8 @@ module I18nJS
|
|
7
7
|
|
8
8
|
def self.listen(
|
9
9
|
config_file: Rails.root.join("config/i18n.yml"),
|
10
|
-
locales_dir: Rails.root.join("config/locales")
|
10
|
+
locales_dir: Rails.root.join("config/locales"),
|
11
|
+
options: {}
|
11
12
|
)
|
12
13
|
return unless Rails.env.development?
|
13
14
|
return if started
|
@@ -18,12 +19,14 @@ module I18nJS
|
|
18
19
|
|
19
20
|
self.started = true
|
20
21
|
|
22
|
+
locales_dirs = Array(locales_dir)
|
23
|
+
|
21
24
|
relative_paths =
|
22
|
-
[config_file,
|
25
|
+
[config_file, *locales_dirs].map {|path| relative_path(path) }
|
23
26
|
|
24
27
|
debug("Watching #{relative_paths.inspect}")
|
25
28
|
|
26
|
-
listener(config_file,
|
29
|
+
listener(config_file, locales_dirs.map(&:to_s), options).start
|
27
30
|
I18nJS.call(config_file: config_file)
|
28
31
|
end
|
29
32
|
|
@@ -43,12 +46,12 @@ module I18nJS
|
|
43
46
|
@logger ||= ActiveSupport::TaggedLogging.new(Rails.logger)
|
44
47
|
end
|
45
48
|
|
46
|
-
def self.listener(config_file,
|
47
|
-
paths = [File.dirname(config_file),
|
49
|
+
def self.listener(config_file, locales_dirs, options)
|
50
|
+
paths = [File.dirname(config_file), *locales_dirs]
|
48
51
|
|
49
|
-
Listen.to(*paths) do |changed, added, removed|
|
52
|
+
Listen.to(*paths, options) do |changed, added, removed|
|
50
53
|
changes = compute_changes(
|
51
|
-
[config_file,
|
54
|
+
[config_file, *locales_dirs],
|
52
55
|
changed,
|
53
56
|
added,
|
54
57
|
removed
|
@@ -58,11 +61,22 @@ module I18nJS
|
|
58
61
|
|
59
62
|
debug(changes.map {|key, value| "#{key}=#{value.inspect}" }.join(", "))
|
60
63
|
|
61
|
-
|
62
|
-
|
64
|
+
capture do
|
65
|
+
system "i18n", "export", "--config", config_file.to_s
|
66
|
+
end
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
70
|
+
def self.capture
|
71
|
+
original = $stdout
|
72
|
+
$stdout = StringIO.new
|
73
|
+
yield
|
74
|
+
rescue StandardError
|
75
|
+
# noop
|
76
|
+
ensure
|
77
|
+
$stdout = original
|
78
|
+
end
|
79
|
+
|
66
80
|
def self.compute_changes(paths, changed, added, removed)
|
67
81
|
paths = paths.map {|path| relative_path(path) }
|
68
82
|
|
data/lib/i18n-js/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n-js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glob
|
@@ -173,12 +173,11 @@ files:
|
|
173
173
|
- CONTRIBUTING.md
|
174
174
|
- Gemfile
|
175
175
|
- LICENSE.md
|
176
|
+
- MIGRATING_FROM_V3_TO_V4.md
|
176
177
|
- README.md
|
177
178
|
- Rakefile
|
178
179
|
- exe/i18n
|
179
180
|
- i18n-js.gemspec
|
180
|
-
- i18njs.png
|
181
|
-
- images/i18njs-check.gif
|
182
181
|
- lib/guard/i18n-js.rb
|
183
182
|
- lib/guard/i18n-js/templates/Guardfile
|
184
183
|
- lib/guard/i18n-js/version.rb
|
@@ -200,10 +199,10 @@ metadata:
|
|
200
199
|
rubygems_mfa_required: 'true'
|
201
200
|
homepage_uri: https://github.com/fnando/i18n-js
|
202
201
|
bug_tracker_uri: https://github.com/fnando/i18n-js/issues
|
203
|
-
source_code_uri: https://github.com/fnando/i18n-js/tree/v4.0.
|
204
|
-
changelog_uri: https://github.com/fnando/i18n-js/tree/v4.0.
|
205
|
-
documentation_uri: https://github.com/fnando/i18n-js/tree/v4.0.
|
206
|
-
license_uri: https://github.com/fnando/i18n-js/tree/v4.0.
|
202
|
+
source_code_uri: https://github.com/fnando/i18n-js/tree/v4.0.1
|
203
|
+
changelog_uri: https://github.com/fnando/i18n-js/tree/v4.0.1/CHANGELOG.md
|
204
|
+
documentation_uri: https://github.com/fnando/i18n-js/tree/v4.0.1/README.md
|
205
|
+
license_uri: https://github.com/fnando/i18n-js/tree/v4.0.1/LICENSE.md
|
207
206
|
post_install_message:
|
208
207
|
rdoc_options: []
|
209
208
|
require_paths:
|
data/i18njs.png
DELETED
Binary file
|
data/images/i18njs-check.gif
DELETED
Binary file
|