aigu 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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +2 -0
- data/LICENSE.md +26 -0
- data/README.md +62 -0
- data/Rakefile +11 -0
- data/SPEC.md +65 -0
- data/aigu.gemspec +23 -0
- data/bin/aigu +7 -0
- data/lib/aigu.rb +85 -0
- data/lib/aigu/cli.rb +44 -0
- data/lib/aigu/extensions/hash.rb +7 -0
- data/lib/aigu/version.rb +3 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 862c7adb7ffd92e40de8e7f9e53b817c1ffbf1e6
|
4
|
+
data.tar.gz: 057bb56afa2fb168f16f3f33f580f9ae7eff88a2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f5a9a45689e04f9af76887a8aef2c8fa9747da4e9c2a7aed80db06391aaf3346ca2fa492aed559cede3817b6a4b3deb59310e6f19c2cadc711237d65cbc2dab9
|
7
|
+
data.tar.gz: e9c729ece1be9074b2c4d0f78cfccd86084cd4e35044f74c4cfb2a83fefdbe4f7efaf484208ef523ad1c1b07d3c5e37f7b5627e087d6bbb692c74fceebc32098
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2014, Mirego
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
- Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
- Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
- Neither the name of the Mirego nor the names of its contributors may
|
13
|
+
be used to endorse or promote products derived from this software without
|
14
|
+
specific prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
17
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
18
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
19
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
20
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
21
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
22
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
23
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
24
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
25
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
26
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
## Introduction
|
2
|
+
|
3
|
+
Aigu processes Rails YAML localization files and generates a single JSON file
|
4
|
+
that can be imported into the Accent service. It can also process a JSON file
|
5
|
+
generated by Accent and convert it back to multiple YAML files.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add these lines to your application’s Gemfile as development dependancies:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
group :development do
|
13
|
+
gem 'aigu'
|
14
|
+
end
|
15
|
+
```
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
Aigu provides an executable named `aigu`.
|
20
|
+
|
21
|
+
### Exporting the JSON file for Accent
|
22
|
+
|
23
|
+
The `export` command looks for YAML localization files and generates a JSON
|
24
|
+
file. This file will then be compatible with Accent.
|
25
|
+
|
26
|
+
```bash
|
27
|
+
$ aigu export --locale=fr --input-directory=config/locales --output-file=my-project.json
|
28
|
+
```
|
29
|
+
|
30
|
+
### Options
|
31
|
+
|
32
|
+
| Option | Description |
|
33
|
+
|-------------------|---------------------------------------------------------------------------------------------------------------------------|
|
34
|
+
| `locale` | The locale used to find localization files. Files that match `*.<locale>.yml` into the input directory will be processed. |
|
35
|
+
| `input-directory` | The directory used to find localization files |
|
36
|
+
| `output-file` | The path to the JSON file that will be written by `aigu` |
|
37
|
+
|
38
|
+
### Importing the JSON file from Accent
|
39
|
+
|
40
|
+
The `import` command takes a generated JSON file from Accent and generates
|
41
|
+
the original YAML file structure.
|
42
|
+
|
43
|
+
```bash
|
44
|
+
$ aigu import --input-file=file-from-accent.json --output-directory=config/locales
|
45
|
+
```
|
46
|
+
|
47
|
+
### Options
|
48
|
+
|
49
|
+
| Option | Description |
|
50
|
+
|--------------------|-------------------------------------------------------------------|
|
51
|
+
| `input-file` | The path to the Accent-generated JSON file |
|
52
|
+
| `output-directory` | The directory where the localization YAML files will be generated |
|
53
|
+
|
54
|
+
## License
|
55
|
+
|
56
|
+
`Aigu` is © 2014 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/aigu/blob/master/LICENSE.md) file.
|
57
|
+
|
58
|
+
## About Mirego
|
59
|
+
|
60
|
+
[Mirego](http://mirego.com) is a team of passionate people who believe that work is a place where you can innovate and have fun. We're a team of [talented people](http://life.mirego.com) who imagine and build beautiful Web and mobile applications. We come together to share ideas and [change the world](http://mirego.org).
|
61
|
+
|
62
|
+
We also [love open-source software](http://open.mirego.com) and we try to give back to the community as much as we can.
|
data/Rakefile
ADDED
data/SPEC.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# Specification
|
2
|
+
|
3
|
+
## Keys
|
4
|
+
|
5
|
+
Keys are generated based on the localization file path and the YAML key.
|
6
|
+
|
7
|
+
```json
|
8
|
+
{
|
9
|
+
"<path>|<key>": "<value>"
|
10
|
+
}
|
11
|
+
```
|
12
|
+
|
13
|
+
Where:
|
14
|
+
|
15
|
+
| Item | Description |
|
16
|
+
|-----------|-----------------------------------------------------------------------|
|
17
|
+
| `<path>` | The path of the YAML localization file (with `/` used as a separator) |
|
18
|
+
| `<key> ` | The full YAML key with `:` used as a separator between levels |
|
19
|
+
| `<value>` | The localized string |
|
20
|
+
|
21
|
+
## Examples
|
22
|
+
|
23
|
+
### Input
|
24
|
+
|
25
|
+
```yaml
|
26
|
+
# config/locales/app/users.fr.yml
|
27
|
+
fr:
|
28
|
+
app:
|
29
|
+
users:
|
30
|
+
index:
|
31
|
+
new: 'Nouvel utilisateur'
|
32
|
+
edit: 'Modifier l’utilisateur %{user}'
|
33
|
+
|
34
|
+
# config/locales/app/shared/comments.fr.yml
|
35
|
+
fr:
|
36
|
+
app:
|
37
|
+
shared:
|
38
|
+
comments:
|
39
|
+
title: 'Tous les commentaires'
|
40
|
+
|
41
|
+
# config/locales/admin/shared.fr.yml
|
42
|
+
fr:
|
43
|
+
admin:
|
44
|
+
shared:
|
45
|
+
footer:
|
46
|
+
copyright: 'Copyright © %{year}'
|
47
|
+
|
48
|
+
# config/locales/layouts.fr.yml
|
49
|
+
fr:
|
50
|
+
layouts:
|
51
|
+
application:
|
52
|
+
title: 'Mon Application'
|
53
|
+
```
|
54
|
+
|
55
|
+
### Output
|
56
|
+
|
57
|
+
```json
|
58
|
+
{
|
59
|
+
"app/users.fr|fr.app.users.index.new": "Nouvel utilisateur",
|
60
|
+
"app/users.fr|fr.app.users.index.edit": "Modifier l’utilisateur %{user}",
|
61
|
+
"app/shared/comments.fr|fr.app.shared.comments.title": "Tous les commentaires",
|
62
|
+
"admin/shared.fr|fr.admin.shared.footer.copyright": "Copyright © %{year}",
|
63
|
+
"layouts.fr|fr.layouts.application.title": "Mon Application"
|
64
|
+
}
|
65
|
+
```
|
data/aigu.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'aigu/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'aigu'
|
8
|
+
spec.version = Aigu::VERSION
|
9
|
+
spec.authors = ['Rémi Prévost']
|
10
|
+
spec.email = ['rprevost@mirego.com']
|
11
|
+
spec.description = 'Aigu converts a directory of Rails localization files into a single JSON file to import in Accent.'
|
12
|
+
spec.summary = spec.description
|
13
|
+
spec.homepage = 'https://github.com/mirego/aigu'
|
14
|
+
spec.license = 'BSD 3-Clause'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
end
|
data/bin/aigu
ADDED
data/lib/aigu.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'aigu/version'
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'json'
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
require 'aigu/extensions/hash'
|
9
|
+
require 'aigu/cli'
|
10
|
+
|
11
|
+
module Aigu
|
12
|
+
PUBLIC_COMMANDS = %w(import export)
|
13
|
+
|
14
|
+
def self.import(input_file: nil, output_directory: nil)
|
15
|
+
puts "Generating YAML files in `#{output_directory}` based on Accent-generated `#{input_file}` file"
|
16
|
+
puts '---'
|
17
|
+
json = File.read(input_file)
|
18
|
+
object = JSON.parse(json)
|
19
|
+
blob = Hash.recursive
|
20
|
+
|
21
|
+
object.each_pair do |key, value|
|
22
|
+
filename, flat_key = key.split('|')
|
23
|
+
|
24
|
+
parts = flat_key.split('.')
|
25
|
+
hash = blob[filename]
|
26
|
+
|
27
|
+
parts.each_with_index do |part, index|
|
28
|
+
if index + 1 < parts.length
|
29
|
+
hash = hash[part]
|
30
|
+
else
|
31
|
+
hash[part] = value
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
blob.each_pair do |file_name, hash|
|
37
|
+
file_path = File.join(output_directory, "#{file_name}.yml")
|
38
|
+
puts "Generating #{file_path}"
|
39
|
+
FileUtils.mkdir_p(File.dirname(file_path))
|
40
|
+
|
41
|
+
File.open(file_path, 'w+') do |file|
|
42
|
+
file << hash.to_yaml(line_width: 100_000_000)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
puts '---'
|
47
|
+
puts 'Done'
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.export(output_file: nil, input_directory: nil)
|
51
|
+
puts "Generating Accent JSON file `#{output_file}` based on YAML localization files in `#{input_directory}` directory"
|
52
|
+
puts '---'
|
53
|
+
|
54
|
+
output = {}
|
55
|
+
|
56
|
+
Dir[File.join(input_directory, '**', '*.yml')].each do |file|
|
57
|
+
content = YAML.load_file(file)
|
58
|
+
base_key = file.gsub(input_directory, '').gsub(/^\/*/, '').gsub(/\.yml$/, '|')
|
59
|
+
|
60
|
+
output.merge! flattenize_hash(content, base_key)
|
61
|
+
end
|
62
|
+
|
63
|
+
file_path = output_file
|
64
|
+
puts "Generating #{file_path}"
|
65
|
+
FileUtils.mkdir_p(File.dirname(file_path))
|
66
|
+
|
67
|
+
File.open(file_path, 'w+') do |file|
|
68
|
+
file << output.to_json
|
69
|
+
end
|
70
|
+
|
71
|
+
puts '---'
|
72
|
+
puts 'Done'
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.flattenize_hash(hash, base_key = '')
|
76
|
+
if hash.is_a?(Hash)
|
77
|
+
hash.reduce({}) do |memo, (key, value)|
|
78
|
+
new_base_key = [base_key, key].join('.').sub('|.', '|')
|
79
|
+
memo.merge! flattenize_hash(value, new_base_key)
|
80
|
+
end
|
81
|
+
else
|
82
|
+
{ base_key => hash }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/aigu/cli.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Aigu
|
2
|
+
class CLI
|
3
|
+
def initialize(env, argv)
|
4
|
+
@env = env
|
5
|
+
@command = Aigu::PUBLIC_COMMANDS.include?(argv.first) ? argv.shift : nil
|
6
|
+
@argv = argv
|
7
|
+
parse_options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
Aigu.send(@command, @options) if @command
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_options
|
15
|
+
@options = {}
|
16
|
+
|
17
|
+
OptionParser.new do |opts|
|
18
|
+
opts.banner = 'Usage: aigu [options]'
|
19
|
+
|
20
|
+
opts.on('--input-directory=', 'The directory in which the Rails YAML localization files are stored.') do |directory|
|
21
|
+
@options[:input_directory] = directory
|
22
|
+
end
|
23
|
+
|
24
|
+
opts.on('--output-directory=', 'The directory in which the Rails YAML localization files will be generated.') do |directory|
|
25
|
+
@options[:output_directory] = directory
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on('--input-file=', 'The JSON file generated by Accent.') do |file|
|
29
|
+
@options[:input_file] = file
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on('--output-file=', 'The JSON file that will be generated for Accent.') do |file|
|
33
|
+
@options[:output_file] = file
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.on_tail('-h', '--help', 'Show this message') do
|
37
|
+
puts opts
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
|
41
|
+
end.parse! @argv
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/aigu/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aigu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rémi Prévost
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Aigu converts a directory of Rails localization files into a single JSON
|
42
|
+
file to import in Accent.
|
43
|
+
email:
|
44
|
+
- rprevost@mirego.com
|
45
|
+
executables:
|
46
|
+
- aigu
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- .gitignore
|
51
|
+
- Gemfile
|
52
|
+
- LICENSE.md
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- SPEC.md
|
56
|
+
- aigu.gemspec
|
57
|
+
- bin/aigu
|
58
|
+
- lib/aigu.rb
|
59
|
+
- lib/aigu/cli.rb
|
60
|
+
- lib/aigu/extensions/hash.rb
|
61
|
+
- lib/aigu/version.rb
|
62
|
+
homepage: https://github.com/mirego/aigu
|
63
|
+
licenses:
|
64
|
+
- BSD 3-Clause
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.1.0
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: Aigu converts a directory of Rails localization files into a single JSON
|
86
|
+
file to import in Accent.
|
87
|
+
test_files: []
|