i18n-tasks 0.6.3 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/Gemfile +2 -1
- data/README.md +80 -78
- data/bin/i18n-tasks +24 -30
- data/config/i18n-tasks.yml +87 -0
- data/config/locales/en.yml +95 -0
- data/i18n-tasks.gemspec +1 -0
- data/lib/i18n/tasks.rb +10 -0
- data/lib/i18n/tasks/base_task.rb +6 -2
- data/lib/i18n/tasks/command/collection.rb +18 -0
- data/lib/i18n/tasks/command/commander.rb +72 -0
- data/lib/i18n/tasks/command/commands/data.rb +73 -0
- data/lib/i18n/tasks/command/commands/eq_base.rb +20 -0
- data/lib/i18n/tasks/command/commands/health.rb +26 -0
- data/lib/i18n/tasks/command/commands/meta.rb +35 -0
- data/lib/i18n/tasks/command/commands/missing.rb +73 -0
- data/lib/i18n/tasks/command/commands/tree.rb +92 -0
- data/lib/i18n/tasks/command/commands/usages.rb +70 -0
- data/lib/i18n/tasks/command/commands/xlsx.rb +27 -0
- data/lib/i18n/tasks/command/dsl.rb +27 -0
- data/lib/i18n/tasks/command/dsl/cmd.rb +19 -0
- data/lib/i18n/tasks/command/dsl/cmd_opt.rb +19 -0
- data/lib/i18n/tasks/command/dsl/enum_opt.rb +26 -0
- data/lib/i18n/tasks/command/options/common.rb +48 -0
- data/lib/i18n/tasks/command/options/enum_opt.rb +44 -0
- data/lib/i18n/tasks/command/options/list_opt.rb +11 -0
- data/lib/i18n/tasks/command/options/locales.rb +47 -0
- data/lib/i18n/tasks/command/options/trees.rb +101 -0
- data/lib/i18n/tasks/command_error.rb +3 -0
- data/lib/i18n/tasks/commands.rb +22 -169
- data/lib/i18n/tasks/configuration.rb +1 -16
- data/lib/i18n/tasks/console_context.rb +1 -1
- data/lib/i18n/tasks/data.rb +13 -8
- data/lib/i18n/tasks/data/file_formats.rb +29 -18
- data/lib/i18n/tasks/data/file_system_base.rb +35 -4
- data/lib/i18n/tasks/data/router/conservative_router.rb +18 -11
- data/lib/i18n/tasks/data/tree/node.rb +5 -15
- data/lib/i18n/tasks/data/tree/nodes.rb +0 -3
- data/lib/i18n/tasks/data/tree/siblings.rb +32 -2
- data/lib/i18n/tasks/data/tree/traversal.rb +117 -96
- data/lib/i18n/tasks/google_translation.rb +25 -25
- data/lib/i18n/tasks/html_keys.rb +10 -0
- data/lib/i18n/tasks/key_pattern_matching.rb +1 -0
- data/lib/i18n/tasks/locale_list.rb +19 -0
- data/lib/i18n/tasks/missing_keys.rb +32 -33
- data/lib/i18n/tasks/plural_keys.rb +1 -1
- data/lib/i18n/tasks/reports/base.rb +4 -9
- data/lib/i18n/tasks/reports/spreadsheet.rb +5 -5
- data/lib/i18n/tasks/reports/terminal.rb +62 -38
- data/lib/i18n/tasks/scanners/base_scanner.rb +5 -4
- data/lib/i18n/tasks/slop_command.rb +27 -0
- data/lib/i18n/tasks/stats.rb +20 -0
- data/lib/i18n/tasks/string_interpolation.rb +14 -0
- data/lib/i18n/tasks/unused_keys.rb +0 -10
- data/lib/i18n/tasks/version.rb +1 -1
- data/spec/commands/data_commands_spec.rb +38 -0
- data/spec/commands/tree_commands_spec.rb +68 -0
- data/spec/fixtures/app/views/index.html.slim +1 -0
- data/spec/google_translate_spec.rb +5 -3
- data/spec/i18n_spec.rb +18 -0
- data/spec/i18n_tasks_spec.rb +8 -8
- data/spec/spec_helper.rb +3 -3
- data/spec/support/test_codebase.rb +4 -1
- data/spec/used_keys_spec.rb +7 -7
- data/templates/config/i18n-tasks.yml +2 -2
- metadata +48 -4
- data/lib/i18n/tasks/commands_base.rb +0 -107
- data/lib/i18n/tasks/fill_tasks.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7b2e4af8b66aed1ff33eba3cb802322ceea57db
|
4
|
+
data.tar.gz: 951337877ce07c613b5765b609dd0c3508742a89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b04b6fbabcd0598b2473162142679e81ef5eec9301c3c9362bc44a81084517fbf8d254c1015b0b5dc5365261730550c1356db3cc7d57e56a78ff3a85be1e471
|
7
|
+
data.tar.gz: 2ecb5edaa048079936459dc1f8d607aafe441abb352e7ee0e8585c1a5e251336d8206cc0e7840a3a95a84de78963baafd181a46f779120322ef5736466bfbb35
|
data/.travis.yml
CHANGED
@@ -8,4 +8,7 @@ rvm:
|
|
8
8
|
env:
|
9
9
|
global:
|
10
10
|
- TRAVIS=1
|
11
|
+
# google translate api key:
|
11
12
|
- secure: Clln+r2rG6adnmVjS0zGMVHs1hOq58UPIqRE73xW3MPLOdozGUyIZ0RrAU2new1h4sqk/5HVwG5NSW7AsUJDGgkNCDx4saJbf/G+oKIity1zNxlHZu5ijZOZGyxYNzGGM4cb2OO6RS6lfzA6TFv2TQtw8DDfKjzG2gpuJOje8sU=
|
13
|
+
# codeclimate repo token:
|
14
|
+
- secure: Qz5xzCujPHN5jGZYiCcsZ73BN5DzJTQwDMuj0kJ+W2nBzGQuQDvADT0rHFsHOhdQ/epZe89pVL8wEbr5GaCZ+iZCt1JfasZpvyvCtwMUkPtjrLxpWwVKlH3u7xqAzyYj7Z8ru0VqHni19d6DPzAaNGyV3gaiI1pR6Y63Ux+msM0=
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
# i18n-tasks [![Build Status][badge-travis]][travis] [![Coverage Status][badge-
|
1
|
+
# i18n-tasks [![Build Status][badge-travis]][travis] [![Coverage Status][badge-coverage]][coverage] [![Code Climate][badge-code-climate]][code-climate] [![Gemnasium][badge-gemnasium]][gemnasium]
|
2
2
|
|
3
3
|
i18n-tasks helps you find and manage missing and unused translations.
|
4
4
|
|
5
|
+
## What?
|
6
|
+
|
7
|
+
i18n-tasks scans calls such as `I18n.t('some.key')` and provides reports on key usage, missing, and unused keys.
|
8
|
+
i18n-tasks can also can pre-fill missing keys, including from Google Translate, and it can remove unused keys as well.
|
9
|
+
|
10
|
+
## Why?
|
11
|
+
|
5
12
|
The default approach to locale data management with gems such as [i18n][i18n-gem] is flawed.
|
6
13
|
If you use a key that does not exist, this will only blow up at runtime. Keys left over from removed code accumulate
|
7
14
|
in the resource files and introduce unnecessary overhead on the translators. Translation files can quickly turn to disarray.
|
@@ -18,16 +25,16 @@ i18n-tasks can be used with any project using [i18n][i18n-gem] (default in Rails
|
|
18
25
|
Add to Gemfile:
|
19
26
|
|
20
27
|
```ruby
|
21
|
-
gem 'i18n-tasks', '~> 0.
|
28
|
+
gem 'i18n-tasks', '~> 0.7.0'
|
22
29
|
```
|
23
30
|
|
24
|
-
Copy default [
|
31
|
+
Copy default [configuration file](#configuration) (optional):
|
25
32
|
|
26
33
|
```console
|
27
34
|
$ cp $(i18n-tasks gem-path)/templates/config/i18n-tasks.yml config/
|
28
35
|
```
|
29
36
|
|
30
|
-
Copy
|
37
|
+
Copy rspec test to test for missing and unused translations as part of the suite (optional):
|
31
38
|
|
32
39
|
```console
|
33
40
|
$ cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/
|
@@ -35,96 +42,97 @@ $ cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/
|
|
35
42
|
|
36
43
|
## Usage
|
37
44
|
|
38
|
-
Run `i18n-tasks` to get the list of tasks with short descriptions.
|
45
|
+
Run `i18n-tasks` to get the list of all the tasks with short descriptions.
|
39
46
|
|
40
|
-
|
41
|
-
$ i18n-tasks
|
42
|
-
Usage: i18n-tasks [command] [options]
|
43
|
-
-v, --version Print the version
|
44
|
-
-h, --help Display this help message.
|
47
|
+
### Check health
|
45
48
|
|
46
|
-
|
49
|
+
`i18n-tasks health` will tell you any keys are missing or not used:
|
47
50
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
translate-missing translate missing keys with Google Translate
|
54
|
-
add-missing add missing keys to the locales
|
55
|
-
normalize normalize translation data: sort and move to the right files
|
56
|
-
remove-unused remove unused keys
|
57
|
-
config display i18n-tasks configuration
|
58
|
-
xlsx-report save missing and unused translations to an Excel file
|
59
|
-
irb REPL session within i18n-tasks context
|
60
|
-
gem-path show path to the gem
|
51
|
+
```console
|
52
|
+
$ i18n-tasks health
|
53
|
+
```
|
54
|
+
|
55
|
+
### Add missing keys
|
61
56
|
|
62
|
-
|
57
|
+
Add missing keys with placeholders (base value or humanized key):
|
58
|
+
|
59
|
+
```console
|
60
|
+
$ i18n-tasks add-missing
|
63
61
|
```
|
64
62
|
|
65
|
-
|
63
|
+
Most tasks also accept arguments:
|
66
64
|
|
67
|
-
```
|
68
|
-
$ i18n-tasks
|
69
|
-
|
70
|
-
|
65
|
+
```console
|
66
|
+
$ i18n-tasks add-missing -v 'TRME %{value}' fr
|
67
|
+
$ i18n-tasks add-missing --help
|
68
|
+
Usage: i18n-tasks add_missing [options] [locale ...]
|
69
|
+
-l, --locales Comma-separated list of locale(s) to process. Default: all. Special: base.
|
71
70
|
-f, --format Output format: terminal-table, yaml, json, keys, inspect. Default: terminal-table.
|
71
|
+
-v, --value Value. Interpolates: %{value}, %{human_key}, %{value_or_human_key}. Default: %{value_or_human_key}
|
72
72
|
-h, --help Display this help message.
|
73
|
-
$ i18n-tasks data -fkeys en es fr
|
74
73
|
```
|
75
74
|
|
76
|
-
|
77
|
-
|
78
|
-
You can add missing values, generated from the key (for base locale) or copied from the base locale (for other locales).
|
79
|
-
To add missing values to the base locale only:
|
75
|
+
`i18n-tasks` also provides low-level composable tasks for fine-grained locale data manipulation. The above is equivalent to:
|
80
76
|
|
81
|
-
```
|
82
|
-
|
83
|
-
i18n-tasks add-missing base
|
84
|
-
# add-missing accepts a placeholder argument, with optional base_value interpolation
|
85
|
-
i18n-tasks add-missing -p 'PLEASE-TRANSLATE %{base_value}' fr
|
77
|
+
```console
|
78
|
+
$ i18n-tasks missing -fyaml fr | i18n-tasks tree-set-value 'TRME %{value}' | i18n-tasks data-merge
|
86
79
|
```
|
87
80
|
|
88
|
-
|
81
|
+
See command help for more information.
|
82
|
+
|
83
|
+
### Google Translate missing keys
|
89
84
|
|
90
85
|
Translate missing values with Google Translate ([more below on the API key](#translation-config)).
|
91
86
|
|
92
|
-
```
|
93
|
-
i18n-tasks translate-missing
|
87
|
+
```console
|
88
|
+
$ i18n-tasks translate-missing
|
94
89
|
# accepts from and locales options:
|
95
|
-
i18n-tasks translate-missing --from base es fr
|
90
|
+
$ i18n-tasks translate-missing --from base es fr
|
96
91
|
```
|
97
92
|
|
98
|
-
|
99
|
-
|
93
|
+
### Find usages
|
94
|
+
|
95
|
+
See where the keys are used with `i18n-tasks find`:
|
100
96
|
|
101
97
|
```bash
|
102
|
-
i18n-tasks
|
98
|
+
$ i18n-tasks find common.help
|
99
|
+
$ i18n-tasks find 'auth.*'
|
100
|
+
$ i18n-tasks find '{number,currency}.format.*'
|
103
101
|
```
|
104
102
|
|
105
|
-
|
103
|
+
<img width="437" height="129" src="https://raw.github.com/glebm/i18n-tasks/master/doc/img/i18n-usages.png">
|
106
104
|
|
107
|
-
|
105
|
+
### Remove unused keys
|
108
106
|
|
109
107
|
```bash
|
110
|
-
i18n-tasks
|
111
|
-
i18n-tasks
|
112
|
-
i18n-tasks find '{number,currency}.format.*'
|
108
|
+
$ i18n-tasks unused
|
109
|
+
$ i18n-tasks remove-unused
|
113
110
|
```
|
114
111
|
|
115
|
-
|
112
|
+
These tasks will infer dynamic key usage such as `t("category.\#{category.name}")` by default.
|
113
|
+
Pass `-s` or `--strict` to disable this feature.
|
116
114
|
|
117
|
-
|
115
|
+
`i18n-tasks remove-unused` is roughly equivalent to:
|
118
116
|
|
119
117
|
```bash
|
120
|
-
i18n-tasks unused
|
121
|
-
i18n-tasks remove-unused
|
118
|
+
$ i18n-tasks unused -fyaml | i18n-tasks data-remove
|
122
119
|
```
|
123
120
|
|
124
|
-
|
125
|
-
Pass `-s` or `--strict` to disable this feature.
|
121
|
+
### Normalize data
|
126
122
|
|
127
|
-
|
123
|
+
Sort the keys:
|
124
|
+
|
125
|
+
```console
|
126
|
+
$ i18n-tasks normalize
|
127
|
+
```
|
128
|
+
|
129
|
+
Sort the keys, and move them to the respective files as defined by (`config.write`)[#multiple-locale-files]:
|
130
|
+
|
131
|
+
```console
|
132
|
+
$ i18n-tasks normalize -p
|
133
|
+
```
|
134
|
+
|
135
|
+
### Features
|
128
136
|
|
129
137
|
Relative keys (`t '.title'`) and plural keys (`key.{one,many,other,...}`) are fully supported.
|
130
138
|
Scope argument is supported, but only when it is the first keyword argument ([improvements welcome](/lib/i18n/tasks/scanners/pattern_with_scope_scanner.rb)):
|
@@ -344,15 +352,6 @@ translation:
|
|
344
352
|
|
345
353
|
`i18n-tasks irb` starts an IRB session in i18n-tasks context. Type `guide` for more information.
|
346
354
|
|
347
|
-
## RSpec integration
|
348
|
-
|
349
|
-
You might want to test for missing and unused translations as part of your test suite.
|
350
|
-
Install the spec file:
|
351
|
-
|
352
|
-
```console
|
353
|
-
$ cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/
|
354
|
-
```
|
355
|
-
|
356
355
|
### XLSX
|
357
356
|
|
358
357
|
Export missing and unused data to XLSX:
|
@@ -368,23 +367,26 @@ While i18n-tasks does not provide an HTML version of the report, you can add [on
|
|
368
367
|
|
369
368
|
## Add New Tasks
|
370
369
|
|
371
|
-
Tasks that come with the gem are defined in [lib/i18n/tasks/commands
|
370
|
+
Tasks that come with the gem are defined in [lib/i18n/tasks/command/commands](lib/i18n/tasks/command/commands).
|
372
371
|
|
373
|
-
|
372
|
+
Add a custom task like the ones defined by the gem:
|
374
373
|
|
375
374
|
```ruby
|
376
|
-
#
|
377
|
-
|
378
|
-
|
379
|
-
cmd :
|
380
|
-
|
375
|
+
# my_commands.rb
|
376
|
+
class MyCommands
|
377
|
+
include ::I18n::Tasks::Command::Collection
|
378
|
+
cmd :my_command, desc: 'my custom command'
|
379
|
+
def my_command(opts = {})
|
381
380
|
end
|
382
381
|
end
|
383
382
|
```
|
384
383
|
|
385
384
|
```yaml
|
386
385
|
# config/i18n-tasks.yml
|
387
|
-
<%
|
386
|
+
<%
|
387
|
+
require 'my_commands'
|
388
|
+
I18n::Tasks::Commands.send :include, MyCommands
|
389
|
+
%>
|
388
390
|
```
|
389
391
|
|
390
392
|
Run with:
|
@@ -396,8 +398,8 @@ $ i18n-tasks my-task
|
|
396
398
|
[MIT license]: /LICENSE.txt
|
397
399
|
[travis]: https://travis-ci.org/glebm/i18n-tasks
|
398
400
|
[badge-travis]: http://img.shields.io/travis/glebm/i18n-tasks.svg
|
399
|
-
[
|
400
|
-
[badge-
|
401
|
+
[coverage]: https://codeclimate.com/github/glebm/i18n-tasks
|
402
|
+
[badge-coverage]: https://img.shields.io/codeclimate/coverage/github/glebm/i18n-tasks.svg
|
401
403
|
[gemnasium]: https://gemnasium.com/glebm/i18n-tasks
|
402
404
|
[badge-gemnasium]: https://gemnasium.com/glebm/i18n-tasks.svg
|
403
405
|
[code-climate]: https://codeclimate.com/github/glebm/i18n-tasks
|
data/bin/i18n-tasks
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# coding: utf-8
|
3
3
|
|
4
|
+
# prevent i18n gem warning
|
5
|
+
require 'i18n'
|
6
|
+
i18n_gem_config = I18n.config
|
7
|
+
if i18n_gem_config.respond_to?(:enforce_available_locales=) && i18n_gem_config.enforce_available_locales.nil?
|
8
|
+
i18n_gem_config.enforce_available_locales = true
|
9
|
+
end
|
10
|
+
|
4
11
|
require 'i18n/tasks'
|
5
12
|
require 'i18n/tasks/commands'
|
6
13
|
require 'slop'
|
@@ -14,47 +21,34 @@ err = proc { |message, exit_code|
|
|
14
21
|
exit exit_code
|
15
22
|
}
|
16
23
|
|
17
|
-
command = nil
|
18
24
|
begin
|
25
|
+
ran = false
|
26
|
+
commander = ::I18n::Tasks::Commands
|
27
|
+
slop_adapter = ::I18n::Tasks::SlopCommand
|
19
28
|
args = ARGV.dup
|
20
29
|
args = ['--help'] if args.empty?
|
21
|
-
|
30
|
+
Slop.parse(args, help: true) do
|
22
31
|
on('-v', '--version', 'Print the version') {
|
23
32
|
puts I18n::Tasks::VERSION
|
24
33
|
exit
|
25
34
|
}
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
35
|
+
commander.cmds.each do |name, attr|
|
36
|
+
slop_dsl = slop_adapter.slop_command(name, attr) { |name, opts, args|
|
37
|
+
begin
|
38
|
+
ran = true
|
39
|
+
commander.run_command name, slop_adapter.parse_slop_opts_args(opts, args)
|
40
|
+
rescue Errno::EPIPE
|
41
|
+
# ignore Errno::EPIPE which is throw when pipe breaks, e.g.:
|
42
|
+
# i18n-tasks missing | head
|
43
|
+
exit 1
|
32
44
|
end
|
33
|
-
|
45
|
+
}
|
46
|
+
instance_exec &slop_dsl
|
34
47
|
end
|
35
48
|
end
|
36
49
|
rescue Slop::Error => e
|
37
50
|
err.call(e.message, 64)
|
38
51
|
end
|
39
52
|
|
40
|
-
|
41
|
-
|
42
|
-
meth = command[0]
|
43
|
-
opts = command[1].to_hash.reject { |k, v| v.nil? }
|
44
|
-
args = command[2]
|
45
|
-
begin
|
46
|
-
if opts.empty? && args.empty?
|
47
|
-
cmd.log_verbose "run #{meth.tr('_', '-')} without arguments"
|
48
|
-
cmd.send meth
|
49
|
-
else
|
50
|
-
opts = opts.merge(arguments: args) unless args.empty?
|
51
|
-
cmd.log_verbose "run #{meth.tr('_', '-')} with #{opts.map { |k, v| "#{k}=#{v}" } * ' '}"
|
52
|
-
cmd.send meth, opts
|
53
|
-
end
|
54
|
-
rescue Errno::EPIPE
|
55
|
-
# ignore Errno::EPIPE which is throw when pipe breaks, e.g.:
|
56
|
-
# i18n-tasks missing | head
|
57
|
-
end
|
58
|
-
else
|
59
|
-
err.call("Command unknown: #{ARGV[0]}", 64) if ARGV[0]
|
60
|
-
end
|
53
|
+
|
54
|
+
err.call("Command unknown: #{args[0]}", 64) if !ran && args[0]
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# i18n-tasks works on itself! this is the internal config
|
2
|
+
|
3
|
+
base_locale: en
|
4
|
+
## i18n-tasks detects locales automatically from the existing locale files
|
5
|
+
## uncomment to set locales explicitly
|
6
|
+
# locales: [en, es, fr]
|
7
|
+
|
8
|
+
# Read and write locale data
|
9
|
+
data:
|
10
|
+
## by default, translation data are read from the file system, or you can provide a custom data adapter
|
11
|
+
# adapter: I18n::Tasks::Data::FileSystem
|
12
|
+
|
13
|
+
# Locale files to read from
|
14
|
+
read:
|
15
|
+
- config/locales/%{locale}.yml
|
16
|
+
# - config/locales/*.%{locale}.yml
|
17
|
+
# - config/locales/**/*.%{locale}.yml
|
18
|
+
|
19
|
+
# key => file routes, matched top to bottom
|
20
|
+
write:
|
21
|
+
## E.g., write devise and simple form keys to their respective files
|
22
|
+
# - ['{devise, simple_form}.*', 'config/locales/\1.%{locale.yml}']
|
23
|
+
# Catch-all
|
24
|
+
- config/locales/%{locale}.yml
|
25
|
+
# `i18n-tasks normalize -p` will force move the keys according to these rules
|
26
|
+
|
27
|
+
# YAML / JSON serializer options, passed to load / dump / parse / serialize
|
28
|
+
yaml:
|
29
|
+
write:
|
30
|
+
## do not wrap lines at 80 characters (override default)
|
31
|
+
line_width: 96
|
32
|
+
json:
|
33
|
+
write:
|
34
|
+
# pretty print JSON
|
35
|
+
indent: ' '
|
36
|
+
space: ' '
|
37
|
+
object_nl: "\n"
|
38
|
+
array_nl: "\n"
|
39
|
+
|
40
|
+
# Find translate calls
|
41
|
+
search:
|
42
|
+
## Default scanner finds t() and I18n.t() calls
|
43
|
+
# scanner: I18n::Tasks::Scanners::PatternWithScopeScanner
|
44
|
+
|
45
|
+
## Paths to search in, passed to File.find
|
46
|
+
paths:
|
47
|
+
- lib/
|
48
|
+
|
49
|
+
## Root for resolving relative keys (default)
|
50
|
+
# relative_roots:
|
51
|
+
# - app/views
|
52
|
+
|
53
|
+
## File.fnmatch patterns to exclude from search (default)
|
54
|
+
# exclude: ["*.jpg", "*.png", "*.gif", "*.svg", "*.ico", "*.eot", "*.ttf", "*.woff", "*.pdf"]
|
55
|
+
|
56
|
+
## Or, File.fnmatch patterns to include
|
57
|
+
# include: ["*.rb", "*.html.slim"]
|
58
|
+
|
59
|
+
## Lines starting with # or / are ignored by default
|
60
|
+
# ignore_lines:
|
61
|
+
# - "^\\s*[#/](?!\\si18n-tasks-use)"
|
62
|
+
|
63
|
+
## Google Translate
|
64
|
+
# translation:
|
65
|
+
# # Get an API key and set billing info at https://code.google.com/apis/console to use Google Translate
|
66
|
+
# api_key: "AbC-dEf5"
|
67
|
+
|
68
|
+
## Consider these keys not missing
|
69
|
+
# ignore_missing:
|
70
|
+
# - pagination.views.*
|
71
|
+
|
72
|
+
## Consider these keys used
|
73
|
+
# ignore_unused:
|
74
|
+
# - 'simple_form.{yes,no}'
|
75
|
+
# - 'simple_form.{placeholders,hints,labels}.*'
|
76
|
+
# - 'simple_form.{error_notification,required}.:'
|
77
|
+
|
78
|
+
## Exclude these keys from `i18n-tasks eq-base' report
|
79
|
+
# ignore_eq_base:
|
80
|
+
# all:
|
81
|
+
# - common.ok
|
82
|
+
# fr,es:
|
83
|
+
# - common.brand
|
84
|
+
|
85
|
+
## Exclude these keys from all of the reports
|
86
|
+
# ignore:
|
87
|
+
# - kaminari.*
|
@@ -0,0 +1,95 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
i18n_tasks:
|
4
|
+
common:
|
5
|
+
locale: Locale
|
6
|
+
type: Type
|
7
|
+
key: Key
|
8
|
+
value: Value
|
9
|
+
base_value: Base Value
|
10
|
+
details: Details
|
11
|
+
continue_q: Continue?
|
12
|
+
n_more: "%{count} more"
|
13
|
+
google_translate:
|
14
|
+
errors:
|
15
|
+
no_results: Google Translate returned no results. Make sure billing information is set at
|
16
|
+
https://code.google.com/apis/console.
|
17
|
+
remove_unused:
|
18
|
+
confirm:
|
19
|
+
one: One translations will be removed from %{locales}.
|
20
|
+
other: "%{count} translation will be removed from %{locales}."
|
21
|
+
removed: Removed %{count} keys
|
22
|
+
noop: No unused keys to remove
|
23
|
+
translate_missing:
|
24
|
+
translated: Translated %{count} keys
|
25
|
+
add_missing:
|
26
|
+
added: Added %{count} keys
|
27
|
+
unused:
|
28
|
+
none: Every translation is in use.
|
29
|
+
missing:
|
30
|
+
none: No translations are missing.
|
31
|
+
usages:
|
32
|
+
none: No key usages found.
|
33
|
+
health:
|
34
|
+
no_keys_detected: No keys detected. Check data.read in config/i18n-tasks.yml.
|
35
|
+
data_stats:
|
36
|
+
title: Forest (%{locales})
|
37
|
+
text: has %{key_count} keys across %{locale_count} locales. On average, values are %{value_chars_avg}
|
38
|
+
characters long, keys have %{key_segments_avg} segments, a locale has %{per_locale_avg} keys.
|
39
|
+
text_single_locale: has %{key_count} keys in total. On average, values are %{value_chars_avg}
|
40
|
+
characters long, keys have %{key_segments_avg} segments.
|
41
|
+
cmd:
|
42
|
+
encourage:
|
43
|
+
- Good job!
|
44
|
+
- Well done!
|
45
|
+
- Perfect!
|
46
|
+
desc:
|
47
|
+
normalize: 'normalize translation data: sort and move to the right files'
|
48
|
+
data: show locale data
|
49
|
+
data_merge: merge locale data with trees
|
50
|
+
data_write: replace locale data with tree
|
51
|
+
data_remove: remove keys present in tree from data
|
52
|
+
health: is everything OK?
|
53
|
+
find: show where keys are used in the code
|
54
|
+
unused: show unused translations
|
55
|
+
missing: show missing translations
|
56
|
+
translate_missing: translate missing keys with Google Translate
|
57
|
+
add_missing: add missing keys to locale data
|
58
|
+
remove_unused: remove unused keys
|
59
|
+
eq_base: show translations equal to base value
|
60
|
+
tree_merge: merge trees
|
61
|
+
tree_filter: filter tree by key pattern
|
62
|
+
tree_rename_key: rename tree node
|
63
|
+
tree_subtract: tree A minus the keys in tree B
|
64
|
+
tree_set_value: set values of keys, optionally match a pattern
|
65
|
+
tree_convert: convert tree between formats
|
66
|
+
config: display i18n-tasks configuration
|
67
|
+
gem_path: show path to the gem
|
68
|
+
irb: start REPL session within i18n-tasks context
|
69
|
+
args:
|
70
|
+
default_text: 'Default: %{value}'
|
71
|
+
desc:
|
72
|
+
out_format: 'Output format: %{valid_text}. %{default_text}.'
|
73
|
+
data_format: 'Data format: %{valid_text}. %{default_text}.'
|
74
|
+
keys: List of keys separated by commas (,), spaces, or newlines.
|
75
|
+
locales_filter: 'Comma-separated list of locale(s) to process. Default: all. Special: base.'
|
76
|
+
locale: 'Locale. Default: base'
|
77
|
+
confirm: Confirm automatically
|
78
|
+
nostdin: Do not read from stdin
|
79
|
+
strict: Do not infer dynamic key usage such as `t("category.\#{category.name}")`
|
80
|
+
missing_types: 'Filter by types: %{valid}.'
|
81
|
+
key_pattern: Filter by key pattern (e.g. 'common.*')
|
82
|
+
value: 'Value. Interpolates: %{value}, %{human_key}, %{value_or_human_key}'
|
83
|
+
pattern_router: 'Use pattern router: keys moved per config data.write'
|
84
|
+
enum_opt:
|
85
|
+
desc:
|
86
|
+
default: "%{valid_text}. %{default_text}"
|
87
|
+
invalid_one: "%{invalid} is not one of: %{valid}."
|
88
|
+
invalid_list: "%{invalid} is not in: %{valid}."
|
89
|
+
errors:
|
90
|
+
pass_forest: Pass locale forest
|
91
|
+
invalid_locale: Invalid locale %{invalid}
|
92
|
+
invalid_format: 'Unknown format %{invalid}. Valid: %{valid}.'
|
93
|
+
invalid_missing_type:
|
94
|
+
one: 'Unknown type %{invalid}. Valid: %{valid}.'
|
95
|
+
other: 'Unknown types: %{invalid}. Valid: %{valid}.'
|