aigu 0.1.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -5
- data/SPEC.md +7 -5
- data/lib/aigu/cli.rb +5 -1
- data/lib/aigu/exporter.rb +13 -4
- data/lib/aigu/importer.rb +11 -2
- data/lib/aigu/version.rb +1 -1
- data/spec/aigu/exporter_spec.rb +28 -0
- data/spec/aigu/importer_spec.rb +28 -0
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ac2a67491e84fbc1d670cedb00f2e37b656e8ba
|
4
|
+
data.tar.gz: ce9901efe5d99728af69b52d6632f7b04657c25a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57f233c1aadd127fe41c0f320dff136ebb3bc3f0928d7526160dcf5bd2baa038815054a40115bf47f45157bd19aa162366ebdcd42133254f3ead6d8119712e2e
|
7
|
+
data.tar.gz: 72b57913979746214ad05df58dc7091a99c18ade41ace5a9408dcd96f3a913a6b942b32dbff140f510892e1614724d26c669c31296163110b8bb9f93885a7f17
|
data/README.md
CHANGED
@@ -31,7 +31,7 @@ $ aigu export --locale=fr --input-directory=config/locales --output-file=my-proj
|
|
31
31
|
|
32
32
|
| Option | Description |
|
33
33
|
|-------------------|---------------------------------------------------------------------------------------------------------------------------|
|
34
|
-
| `locale` | The locale used to find localization files. Files that match `*.<locale>.yml`
|
34
|
+
| `locale` | The locale used to find localization files. Files that match `*.<locale>.yml` in the input directory will be processed. |
|
35
35
|
| `input-directory` | The directory used to find localization files |
|
36
36
|
| `output-file` | The path to the JSON file that will be written by `aigu` |
|
37
37
|
|
@@ -41,15 +41,16 @@ The `import` command takes a generated JSON file from Accent and generates
|
|
41
41
|
the original YAML file structure.
|
42
42
|
|
43
43
|
```bash
|
44
|
-
$ aigu import --input-file=file-from-accent.json --output-directory=config/locales
|
44
|
+
$ aigu import --locale=fr --input-file=file-from-accent.json --output-directory=config/locales
|
45
45
|
```
|
46
46
|
|
47
47
|
### Options
|
48
48
|
|
49
49
|
| Option | Description |
|
50
|
-
|
51
|
-
| `
|
52
|
-
| `
|
50
|
+
|--------------------|---------------------------------------------------------------------------------------------------|
|
51
|
+
| `locale` | The locale used to generate localization files. Files will be generated as `<file>.<locale>.yml` |
|
52
|
+
| `input-file` | The path to the Accent-generated JSON file |
|
53
|
+
| `output-directory` | The directory where the localization YAML files will be generated |
|
53
54
|
|
54
55
|
## License
|
55
56
|
|
data/SPEC.md
CHANGED
@@ -54,12 +54,14 @@ fr:
|
|
54
54
|
|
55
55
|
### Output
|
56
56
|
|
57
|
+
With `--locale=fr` option.
|
58
|
+
|
57
59
|
```json
|
58
60
|
{
|
59
|
-
"app/users
|
60
|
-
"app/users
|
61
|
-
"app/shared/comments
|
62
|
-
"admin/shared
|
63
|
-
"layouts
|
61
|
+
"app/users|app.users.index.new": "Nouvel utilisateur",
|
62
|
+
"app/users|app.users.index.edit": "Modifier l’utilisateur %{user}",
|
63
|
+
"app/shared/comments|app.shared.comments.title": "Tous les commentaires",
|
64
|
+
"admin/shared|admin.shared.footer.copyright": "Copyright © %{year}",
|
65
|
+
"layouts|layouts.application.title": "Mon Application"
|
64
66
|
}
|
65
67
|
```
|
data/lib/aigu/cli.rb
CHANGED
@@ -2,7 +2,7 @@ module Aigu
|
|
2
2
|
class CLI
|
3
3
|
def initialize(env, argv)
|
4
4
|
@env = env
|
5
|
-
@command = argv.first =~
|
5
|
+
@command = argv.first =~ /^[^-]/ ? argv.shift : nil
|
6
6
|
@argv = argv
|
7
7
|
parse_options
|
8
8
|
end
|
@@ -43,6 +43,10 @@ module Aigu
|
|
43
43
|
@options[:output_file] = file
|
44
44
|
end
|
45
45
|
|
46
|
+
opts.on('--locale=', 'The locale to use. Files will be processed/generated using the "<file>.<locale>.yml" pattern.') do |locale|
|
47
|
+
@options[:locale] = locale
|
48
|
+
end
|
49
|
+
|
46
50
|
opts.on_tail('-h', '--help', 'Show this message') do
|
47
51
|
puts opts
|
48
52
|
exit
|
data/lib/aigu/exporter.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
module Aigu
|
2
2
|
class Exporter
|
3
|
-
def initialize(output_file: nil, input_directory: nil)
|
3
|
+
def initialize(output_file: nil, input_directory: nil, locale: nil)
|
4
4
|
@output_file = output_file
|
5
5
|
@input_directory = input_directory
|
6
|
+
@locale = locale
|
6
7
|
end
|
7
8
|
|
8
9
|
def process!
|
@@ -21,13 +22,14 @@ module Aigu
|
|
21
22
|
def build_output
|
22
23
|
@output = {}
|
23
24
|
|
24
|
-
Dir[File.join(@input_directory, '**',
|
25
|
+
Dir[File.join(@input_directory, '**', "*.#{@locale}.yml")].each do |file|
|
25
26
|
content = YAML.load_file(file)
|
26
27
|
base_key = file.gsub(@input_directory, '').gsub(/^\/*/, '').gsub(/\.yml$/, '|')
|
27
28
|
|
28
|
-
content = flattenize_hash(content)
|
29
|
+
content = flattenize_hash(content, base_key)
|
29
30
|
content = flattenize_content_values(content)
|
30
|
-
|
31
|
+
content = globalize_content_keys(content)
|
32
|
+
@output.merge! content
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
@@ -41,6 +43,13 @@ module Aigu
|
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
46
|
+
def globalize_content_keys(content)
|
47
|
+
content.reduce({}) do |memo, (key, value)|
|
48
|
+
globalized_key = key.gsub(/\.#{@locale}\|#{@locale}\./, '|')
|
49
|
+
memo.merge globalized_key => value
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
44
53
|
def flattenize_content_values(hash)
|
45
54
|
result = {}
|
46
55
|
|
data/lib/aigu/importer.rb
CHANGED
@@ -2,9 +2,10 @@ module Aigu
|
|
2
2
|
class Importer
|
3
3
|
ARRAY_REGEX = /___KEY___(?<index>\d+)$/
|
4
4
|
|
5
|
-
def initialize(input_file: nil, output_directory: nil)
|
5
|
+
def initialize(input_file: nil, output_directory: nil, locale: nil)
|
6
6
|
@input_file = input_file
|
7
7
|
@output_directory = output_directory
|
8
|
+
@locale = locale
|
8
9
|
end
|
9
10
|
|
10
11
|
def process!
|
@@ -25,11 +26,12 @@ module Aigu
|
|
25
26
|
json = File.read(@input_file)
|
26
27
|
@object = JSON.parse(json)
|
27
28
|
@object = expand_content_values(@object)
|
29
|
+
@object = localize_content_keys(@object)
|
28
30
|
end
|
29
31
|
|
30
32
|
def write_yaml_files
|
31
33
|
@blob.each_pair do |file_name, hash|
|
32
|
-
file_path = File.join(@output_directory, "#{file_name}
|
34
|
+
file_path = File.join(@output_directory, "#{file_name}.#{@locale}yml")
|
33
35
|
puts "Generating #{file_path}"
|
34
36
|
FileUtils.mkdir_p(File.dirname(file_path))
|
35
37
|
|
@@ -58,6 +60,13 @@ module Aigu
|
|
58
60
|
end
|
59
61
|
end
|
60
62
|
|
63
|
+
def localized_content_keys(content)
|
64
|
+
content.reduce({}) do |memo, (key, value)|
|
65
|
+
localized_key = key.gsub(/^([^|]+)\|/, "\\1.#{@locale}|#{@locale}.")
|
66
|
+
memo.merge localized_key => value
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
61
70
|
def expand_content_values(content)
|
62
71
|
content.reduce({}) do |memo, (key, value)|
|
63
72
|
match_data = key.match(ARRAY_REGEX)
|
data/lib/aigu/version.rb
CHANGED
data/spec/aigu/exporter_spec.rb
CHANGED
@@ -35,4 +35,32 @@ describe Aigu::Exporter do
|
|
35
35
|
|
36
36
|
it { expect(flattenized_content).to eql expected_content }
|
37
37
|
end
|
38
|
+
|
39
|
+
describe :globalize_content_keys do
|
40
|
+
let(:exporter) { described_class.new }
|
41
|
+
let(:globalized_keys) { exporter.send(:globalize_content_keys, content).keys }
|
42
|
+
before { exporter.instance_variable_set(:@locale, 'fr') }
|
43
|
+
|
44
|
+
let(:content) do
|
45
|
+
{
|
46
|
+
'users.fr|fr.users.index.title' => 'Foo',
|
47
|
+
'users.fr|fr.users.index.footer' => 'Bla',
|
48
|
+
'users.fr|fr.users.index.fr.shown' => false,
|
49
|
+
'users.fr|fr.users.index.hidden' => true,
|
50
|
+
'users.fr|fr.users.index.what' => nil
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
let(:expected_keys) do
|
55
|
+
[
|
56
|
+
'users|users.index.title',
|
57
|
+
'users|users.index.footer',
|
58
|
+
'users|users.index.fr.shown',
|
59
|
+
'users|users.index.hidden',
|
60
|
+
'users|users.index.what'
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
it { expect(globalized_keys).to eql expected_keys }
|
65
|
+
end
|
38
66
|
end
|
data/spec/aigu/importer_spec.rb
CHANGED
@@ -35,4 +35,32 @@ describe Aigu::Importer do
|
|
35
35
|
|
36
36
|
it { expect(expanded_content).to eql expected_content }
|
37
37
|
end
|
38
|
+
|
39
|
+
describe :localize_content_keys do
|
40
|
+
let(:exporter) { described_class.new }
|
41
|
+
let(:localized_keys) { exporter.send(:localized_content_keys, content).keys }
|
42
|
+
before { exporter.instance_variable_set(:@locale, 'fr') }
|
43
|
+
|
44
|
+
let(:content) do
|
45
|
+
{
|
46
|
+
'users|users.index.title' => 'Foo',
|
47
|
+
'users|users.index.footer' => 'Bla',
|
48
|
+
'users|users.index.fr.shown' => false,
|
49
|
+
'users|users.index.hidden' => true,
|
50
|
+
'foo/users|users.index.what' => nil
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
let(:expected_keys) do
|
55
|
+
[
|
56
|
+
'users.fr|fr.users.index.title',
|
57
|
+
'users.fr|fr.users.index.footer',
|
58
|
+
'users.fr|fr.users.index.fr.shown',
|
59
|
+
'users.fr|fr.users.index.hidden',
|
60
|
+
'foo/users.fr|fr.users.index.what'
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
it { expect(localized_keys).to eql expected_keys }
|
65
|
+
end
|
38
66
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aigu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Prévost
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 3.0.0.beta2
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 3.0.0.beta2
|
55
55
|
description: Aigu converts a directory of Rails localization files into a single JSON
|
@@ -61,8 +61,8 @@ executables:
|
|
61
61
|
extensions: []
|
62
62
|
extra_rdoc_files: []
|
63
63
|
files:
|
64
|
-
- .gitignore
|
65
|
-
- .rspec
|
64
|
+
- ".gitignore"
|
65
|
+
- ".rspec"
|
66
66
|
- Gemfile
|
67
67
|
- LICENSE.md
|
68
68
|
- README.md
|
@@ -89,17 +89,17 @@ require_paths:
|
|
89
89
|
- lib
|
90
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
requirements: []
|
101
101
|
rubyforge_project:
|
102
|
-
rubygems_version: 2.
|
102
|
+
rubygems_version: 2.2.2
|
103
103
|
signing_key:
|
104
104
|
specification_version: 4
|
105
105
|
summary: Aigu converts a directory of Rails localization files into a single JSON
|