i18n-sync 0.8.0
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/README.md +75 -0
- data/Rakefile +9 -0
- data/bin/i18s +61 -0
- data/lib/i18n/sync.rb +115 -0
- data/lib/i18n/sync/hash.rb +12 -0
- data/lib/i18n/sync/version.rb +5 -0
- data/spec/fixtures/children.en.yml +14 -0
- data/spec/fixtures/children.pt.yml +8 -0
- data/spec/fixtures/en.yml +5 -0
- data/spec/fixtures/extra.en.yml +4 -0
- data/spec/fixtures/extra.pt.yml +3 -0
- data/spec/fixtures/named.en.yml +4 -0
- data/spec/fixtures/named.pt.yml +3 -0
- data/spec/fixtures/order.en.yml +3 -0
- data/spec/fixtures/order.pt.yml +4 -0
- data/spec/fixtures/pt.yml +5 -0
- data/spec/i18n_sync_spec.rb +149 -0
- data/spec/results/children.pt.yml +16 -0
- data/spec/results/extra.pt.yml +6 -0
- data/spec/results/named.pt.yml +5 -0
- data/spec/results/order.en.yml +6 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/work/children.en.yml +14 -0
- data/spec/work/children.pt.yml +8 -0
- data/spec/work/en.yml +6 -0
- data/spec/work/extra.en.yml +4 -0
- data/spec/work/extra.pt.yml +3 -0
- data/spec/work/named.en.yml +4 -0
- data/spec/work/named.pt.yml +3 -0
- data/spec/work/order.en.yml +3 -0
- data/spec/work/order.pt.yml +4 -0
- data/spec/work/pt.yml +6 -0
- data/spec/workmulti/children.en.yml +16 -0
- data/spec/workmulti/children.pt.yml +16 -0
- data/spec/workmulti/en.yml +5 -0
- data/spec/workmulti/extra.en.yml +6 -0
- data/spec/workmulti/extra.pt.yml +6 -0
- data/spec/workmulti/named.en.yml +5 -0
- data/spec/workmulti/named.pt.yml +5 -0
- data/spec/workmulti/order.en.yml +5 -0
- data/spec/workmulti/order.pt.yml +5 -0
- data/spec/workmulti/pt.yml +5 -0
- metadata +130 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8ba2f7697046b2a5dbdecad7359da56c280d48e3
|
4
|
+
data.tar.gz: 61512ea612b992747de1a3d5116875b58423d366
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a5800d050a1557d9f92b9ef02fb3f0ca6145b84141d3786ea22f0d2b14178c83c6066da4bb7ef360921c8726d21ec1129001ae06463e33629c83e7203ffee5bf
|
7
|
+
data.tar.gz: 13a184526da23a2ff217afa675dd720849de365de818affe2ef6b4166cae0e6cd26d0469a49668157b38f3a7b5fa852019757be9499942a365eb4618a0b5520c
|
data/README.md
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
i18n Sync!
|
2
|
+
==========
|
3
|
+
|
4
|
+
Syncs all locales/languages yml/rb files *keys* based on a "master" one.
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
Install
|
9
|
+
-------
|
10
|
+
|
11
|
+
gem install i18n_sync
|
12
|
+
|
13
|
+
|
14
|
+
Use
|
15
|
+
===
|
16
|
+
|
17
|
+
|
18
|
+
i18s path/to/master/file.lang.yml
|
19
|
+
|
20
|
+
|
21
|
+
All other yml should be located on the same folder as the "master".
|
22
|
+
|
23
|
+
Example:
|
24
|
+
|
25
|
+
|
26
|
+
i18s config/locales/app.en.yml
|
27
|
+
|
28
|
+
This command syncs all config/locale/app.*.yml files keys
|
29
|
+
using 'app.en.yml' as the template.
|
30
|
+
|
31
|
+
|
32
|
+
Create New Files
|
33
|
+
----------------
|
34
|
+
|
35
|
+
i18s config/locales/app.en.yml pt es it
|
36
|
+
|
37
|
+
|
38
|
+
This creates 'app.pt.yml', 'app.es.yml'....
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
Add Key
|
43
|
+
-------
|
44
|
+
|
45
|
+
i18s add some.very.nested.key Value path/to/file
|
46
|
+
|
47
|
+
Adds the new key on the file and every other translation.
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
Full Sync
|
52
|
+
---------
|
53
|
+
|
54
|
+
i18s path/to/directory
|
55
|
+
|
56
|
+
Syncronizes the entire directory.
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
Note on Patches/Pull Requests
|
61
|
+
-----------------------------
|
62
|
+
|
63
|
+
* Fork the project.
|
64
|
+
* Make your feature addition or bug fix.
|
65
|
+
* Add tests for it. This is important so I don't break it in a
|
66
|
+
future version unintentionally.
|
67
|
+
* Commit, do not mess with rakefile, version, or history.
|
68
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
69
|
+
* Send me a pull request. Bonus points for topic branches.
|
70
|
+
|
71
|
+
|
72
|
+
Copyright
|
73
|
+
---------
|
74
|
+
|
75
|
+
Copyright (c) 2010 Marcos Piccinini. See LICENSE for details.
|
data/Rakefile
ADDED
data/bin/i18s
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# I18S
|
4
|
+
#
|
5
|
+
# Created on 2010-5-17.
|
6
|
+
# Copyleft nofxx (c) 2011.
|
7
|
+
#
|
8
|
+
begin
|
9
|
+
require 'rubygems'
|
10
|
+
rescue LoadError
|
11
|
+
# no rubygems to load, so we fail silently
|
12
|
+
end
|
13
|
+
require 'optparse'
|
14
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
15
|
+
require 'i18n/sync'
|
16
|
+
|
17
|
+
Options = {:lang => :en}
|
18
|
+
|
19
|
+
parser = OptionParser.new do |opts|
|
20
|
+
opts.banner = <<BANNER
|
21
|
+
------------------------------------------------------
|
22
|
+
I18N Sync ->
|
23
|
+
<-
|
24
|
+
------------------------------------------------------
|
25
|
+
|
26
|
+
Usage: #{File.basename($0)} <path/to/master.yml> [args]
|
27
|
+
|
28
|
+
Options are:
|
29
|
+
|
30
|
+
-l --lang LANG - Select a default language
|
31
|
+
-O --no-order - Don`t automatically order
|
32
|
+
-S --no-chomp - Don`t delete trailing spaces
|
33
|
+
-v --vernose - Be more verbose
|
34
|
+
|
35
|
+
Common usage:
|
36
|
+
|
37
|
+
i18s ./en-US.yml - Will sync all files with en-US
|
38
|
+
i18s ./en-US.yml pt - Creates a new translate file pt.yml
|
39
|
+
|
40
|
+
'''`'``'`
|
41
|
+
BANNER
|
42
|
+
opts.on("-l LANGUAGE", "--lang", "Default Language" ) { |l| Options[:lang] = l }
|
43
|
+
opts.on("-O", "--no-order", "Don`t order automatically" ) { Options[:order] = false }
|
44
|
+
opts.on("-S", "--no-chomp", "Don`t remove trailing spaces" ) { Options[:space] = false }
|
45
|
+
opts.on("-v", "--verbose") { Options[:debug] = true }
|
46
|
+
opts.parse!(ARGV)
|
47
|
+
end
|
48
|
+
|
49
|
+
if ARGV.empty?
|
50
|
+
# ipaths = %w{ config/locales lib/locales }.select { |ipath| File.exists?(ipath) }
|
51
|
+
# unless ipaths.empty?
|
52
|
+
# ipaths.each { |i| I18S.work_on(i) }
|
53
|
+
# else
|
54
|
+
puts parser.banner
|
55
|
+
exit
|
56
|
+
# end
|
57
|
+
elsif ARGV[0] == "add"
|
58
|
+
I18n::Sync.add_key *ARGV[1..-1]
|
59
|
+
else
|
60
|
+
I18n::Sync.work_on ARGV, Options # ARGF
|
61
|
+
end
|
data/lib/i18n/sync.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
#
|
2
|
+
# Inspired by translation rake task on spree (http://spreecommerce.com/)
|
3
|
+
#
|
4
|
+
require 'yaml'
|
5
|
+
# Changed to use YAML instead of text regex,
|
6
|
+
# but yaml has issues so we need to:
|
7
|
+
require 'ya2yaml'
|
8
|
+
# In order to work with utf8 encoded .yml files.
|
9
|
+
# TODO: Fixed in ruby 1.9.x ???
|
10
|
+
require 'i18n/sync/hash'
|
11
|
+
|
12
|
+
|
13
|
+
module I18n
|
14
|
+
|
15
|
+
class Sync
|
16
|
+
|
17
|
+
def initialize(argv, opts = {}, keys = {}, argf=[])
|
18
|
+
# argf.each { |file| p file }
|
19
|
+
@fullpath, *@new_ones = argv
|
20
|
+
@file, *path = @fullpath.split("/").reverse # hm.. hack,,, in 1.9
|
21
|
+
@path = path.reverse.join("/") || "." # can splat the first
|
22
|
+
_, @lang, @namespace = @file.split(".").reverse
|
23
|
+
@debug = opts[:debug]
|
24
|
+
@order = opts[:order]
|
25
|
+
@comments, @words = read_file(@fullpath, @lang)
|
26
|
+
@words.merge! keys unless keys.empty?
|
27
|
+
work
|
28
|
+
end
|
29
|
+
|
30
|
+
def work
|
31
|
+
out "Start work on #{@file} (#{@lang})"
|
32
|
+
@new_ones.empty? ? sync : create_new_files
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_new_files
|
36
|
+
@new_ones.each do |name|
|
37
|
+
puts "Creating new file #{name}"
|
38
|
+
create name
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def sync
|
43
|
+
Dir["#{@path}/*.{yml,rb}"].each do |filename|
|
44
|
+
lang, namespace = File.basename(filename, '.yml').split(".").reverse
|
45
|
+
if namespace
|
46
|
+
next unless @namespace && @namespace == namespace
|
47
|
+
else
|
48
|
+
next if @namespace
|
49
|
+
end
|
50
|
+
|
51
|
+
out "Writing #{filename}"
|
52
|
+
(_comments, old) = read_file(filename, lang)
|
53
|
+
# Initializing hash variable as empty if it does not exist
|
54
|
+
other = @words.dup.deep_merge! old
|
55
|
+
write_file(filename, lang, @comments, other)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def create newlang
|
60
|
+
# New name "app.en.yml" -> "app.pt.yml", "en.yml" -> "pt.yml"
|
61
|
+
newname = @file.gsub(/(^|\.)#{@lang}\./, "\\1#{newlang}.")
|
62
|
+
fullpath = "#{@path}/#{newname}"
|
63
|
+
return puts("File exists.") if File.exists?(fullpath)
|
64
|
+
write_file(fullpath, newlang, @comments, @words)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Retrieve comments and translation data in hash form
|
68
|
+
def read_file(filename, basename)
|
69
|
+
comments = File.read(filename).each_line.select { |l| l =~ /^\w*#/}.join("\n")
|
70
|
+
[comments, YAML.load(File.open(filename, "r:utf-8"))[basename]]
|
71
|
+
end
|
72
|
+
|
73
|
+
# Writes to file the translation data hash structure
|
74
|
+
def write_file(filename, basename, comments, data)
|
75
|
+
File.delete filename if File.exists? filename
|
76
|
+
File.open(filename, "w:utf-8") do |y|
|
77
|
+
y.puts(comments) if comments
|
78
|
+
yaml = { basename => data }.ya2yaml
|
79
|
+
|
80
|
+
yaml.gsub!(/ +$/, '') # removing trailing spaces
|
81
|
+
y.puts(yaml)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def out(txt)
|
86
|
+
puts txt if @debug
|
87
|
+
end
|
88
|
+
|
89
|
+
class << self
|
90
|
+
|
91
|
+
# Just here cuz I'm lazy....TBF really ugly ! ! ! !
|
92
|
+
def work_on(argv, opts = {}, argf = [])
|
93
|
+
if File.directory? path = argv[0]
|
94
|
+
Dir["#{path}/**"].map do |file|
|
95
|
+
next unless file =~ /(^|\.)#{opts[:lang]}\./
|
96
|
+
new([file], opts, argf)
|
97
|
+
end.reject(&:nil?)
|
98
|
+
else
|
99
|
+
[new(argv, opts, argf)]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def add_key(key, val, file)
|
104
|
+
hsh = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
|
105
|
+
keys = key.split(".")
|
106
|
+
keys.reduce(hsh) do |a, k|
|
107
|
+
k == keys[-1] ? a[k] = val : a = a[k]
|
108
|
+
end
|
109
|
+
new(file, {}, hsh)
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
3
|
+
|
4
|
+
EN = "spec/work/en.yml"
|
5
|
+
|
6
|
+
def run(comm)
|
7
|
+
`bin/i18s #{comm}`
|
8
|
+
end
|
9
|
+
|
10
|
+
def result(name)
|
11
|
+
File.read("spec/results/#{name}.yml")
|
12
|
+
end
|
13
|
+
|
14
|
+
def files_should_match(name, extra = nil)
|
15
|
+
expect(File.read("spec/work#{extra}/#{name}.yml")).to eql(result(name))
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "I18nSync" do
|
19
|
+
before do
|
20
|
+
`rm -rf spec/work`
|
21
|
+
`cp -rf spec/fixtures spec/work`
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "Unit" do
|
25
|
+
|
26
|
+
let(:i) { I18S.new("spec/work/en.yml") }
|
27
|
+
|
28
|
+
it "should parse master file" do
|
29
|
+
expect(i.instance_variable_get("@path")).to eql("spec/work")
|
30
|
+
expect(i.instance_variable_get("@lang")).to eql("en")
|
31
|
+
expect(i.instance_variable_get("@file")).to eql("en.yml")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should read comments" do
|
35
|
+
expect(i.instance_variable_get("@comments")).to eql("# Comment cool\n")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should read the hash" do
|
39
|
+
expect(i.instance_variable_get("@words")).to eql({"sync"=>"To Sync It!", "test"=>"Test"})
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should work fine with other files" do
|
43
|
+
i2 = I18S.new("spec/work/pt.yml")
|
44
|
+
expect(i2.instance_variable_get("@lang")).to eql("pt")
|
45
|
+
expect(i2.instance_variable_get("@comments")).to be_empty
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "Namespaced" do
|
51
|
+
|
52
|
+
let(:i) { I18S.new("spec/work/named.en.yml") }
|
53
|
+
|
54
|
+
it "should parse master file" do
|
55
|
+
expect(i.instance_variable_get("@path")).to eql("spec/work")
|
56
|
+
expect(i.instance_variable_get("@lang")).to eql("en")
|
57
|
+
expect(i.instance_variable_get("@namespace")).to eql("named")
|
58
|
+
expect(i.instance_variable_get("@file")).to eql("named.en.yml")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should read the hash" do
|
62
|
+
expect(i.instance_variable_get("@words")).
|
63
|
+
to eql({"something"=>"Something", "another"=>"Another"})
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "Acceptance" do
|
69
|
+
|
70
|
+
it "should sync files nicely" do
|
71
|
+
run("spec/work/pt.yml")
|
72
|
+
expect(File.read(EN)).to eql("\n--- \nen: \n new: \"Uau, isso é novo\"\n sync: \"To Sync It!\"\n test: Test\n")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should respect namespaces" do
|
76
|
+
run("spec/work/pt.yml")
|
77
|
+
expect(File.read("spec/work/named.pt.yml")).to eql("\npt:\n something: Algo\n")
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should work with namespaces" do
|
81
|
+
run("spec/work/named.en.yml")
|
82
|
+
files_should_match("named.pt")
|
83
|
+
expect(File.read("spec/work/pt.yml")).to
|
84
|
+
eql("\npt:\n sync: To Sync It!\n test: Teste\n new: \"Uau, isso é novo\"\n")
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should order alphabeticaly namespaces" do
|
88
|
+
run("spec/work/order.pt.yml")
|
89
|
+
files_should_match("order.en")
|
90
|
+
File.read("spec/work/named.pt.yml").to eql("\npt:\n something: Algo\n")
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should work with extra chars" do
|
94
|
+
run("spec/work/extra.en.yml")
|
95
|
+
files_should_match("extra.pt")
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should work with deep nestings" do
|
99
|
+
run("spec/work/children.en.yml")
|
100
|
+
files_should_match("children.pt")
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "Creating files" do
|
106
|
+
|
107
|
+
it "should create a new one" do
|
108
|
+
newfile = "spec/work/fo.yml"; `rm #{newfile}` if File.exists?(newfile)
|
109
|
+
run("#{EN} fo")
|
110
|
+
expect(File.read(newfile)).to eql("# Comment cool\n--- \nfo: \n sync: \"To Sync It!\"\n test: Test\n")
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should create a new with the right name" do
|
114
|
+
newfile = "spec/work/named.fo.yml"; `rm #{newfile}` if File.exists?(newfile)
|
115
|
+
run("spec/work/named.en.yml fo")
|
116
|
+
expect(File.read(newfile)).to eql("\n--- \nfo: \n another: Another\n something: Something\n")
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "Multi Files" do
|
122
|
+
|
123
|
+
before do
|
124
|
+
`rm -rf spec/workmulti`
|
125
|
+
`cp -rf spec/fixtures spec/workmulti`
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should sync a show directory" do
|
129
|
+
run("spec/workmulti")
|
130
|
+
files_should_match("extra.pt", :multi)
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "Add keys to i18n!" do
|
136
|
+
|
137
|
+
it "should have a nice command to add stuff" do
|
138
|
+
run("add dynamic Dynamic spec/work/en.yml")
|
139
|
+
expect(File.read("spec/work/en.yml")).to eql("# Comment cool\n--- \nen: \n dynamic: Dynamic\n sync: \"To Sync It!\"\n test: Test\n")
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should work on a complex scenario" do
|
143
|
+
run("add dynamic.nested.very.nasty Nasty spec/work/extra.en.yml")
|
144
|
+
expect(File.read("spec/work/extra.en.yml")).to eql("\n--- \nen: \n dynamic: \n nested: \n very: \n nasty: Nasty\n normal: Normal\n with_colon: \"Value: Rock\"\n yup: true\n")
|
145
|
+
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'i18n_sync'
|
4
|
+
begin
|
5
|
+
require 'spec'
|
6
|
+
require 'spec/autorun'
|
7
|
+
rescue LoadError
|
8
|
+
require 'rspec'
|
9
|
+
end
|
10
|
+
|
11
|
+
# Spec::Runner.configure do |config|
|
12
|
+
|
13
|
+
# end
|
data/spec/work/en.yml
ADDED
data/spec/work/pt.yml
ADDED
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: i18n-sync
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marcos Piccinini
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ya2yaml
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.8.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.8.0
|
41
|
+
description: Gem to sync all locale yml/rb files based on a "master" one.
|
42
|
+
email: x@nofxx.com
|
43
|
+
executables:
|
44
|
+
- i18s
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- README.md
|
49
|
+
- Rakefile
|
50
|
+
- bin/i18s
|
51
|
+
- lib/i18n/sync.rb
|
52
|
+
- lib/i18n/sync/hash.rb
|
53
|
+
- lib/i18n/sync/version.rb
|
54
|
+
- spec/fixtures/children.en.yml
|
55
|
+
- spec/fixtures/children.pt.yml
|
56
|
+
- spec/fixtures/en.yml
|
57
|
+
- spec/fixtures/extra.en.yml
|
58
|
+
- spec/fixtures/extra.pt.yml
|
59
|
+
- spec/fixtures/named.en.yml
|
60
|
+
- spec/fixtures/named.pt.yml
|
61
|
+
- spec/fixtures/order.en.yml
|
62
|
+
- spec/fixtures/order.pt.yml
|
63
|
+
- spec/fixtures/pt.yml
|
64
|
+
- spec/i18n_sync_spec.rb
|
65
|
+
- spec/results/children.pt.yml
|
66
|
+
- spec/results/extra.pt.yml
|
67
|
+
- spec/results/named.pt.yml
|
68
|
+
- spec/results/order.en.yml
|
69
|
+
- spec/spec_helper.rb
|
70
|
+
- spec/work/children.en.yml
|
71
|
+
- spec/work/children.pt.yml
|
72
|
+
- spec/work/en.yml
|
73
|
+
- spec/work/extra.en.yml
|
74
|
+
- spec/work/extra.pt.yml
|
75
|
+
- spec/work/named.en.yml
|
76
|
+
- spec/work/named.pt.yml
|
77
|
+
- spec/work/order.en.yml
|
78
|
+
- spec/work/order.pt.yml
|
79
|
+
- spec/work/pt.yml
|
80
|
+
- spec/workmulti/children.en.yml
|
81
|
+
- spec/workmulti/children.pt.yml
|
82
|
+
- spec/workmulti/en.yml
|
83
|
+
- spec/workmulti/extra.en.yml
|
84
|
+
- spec/workmulti/extra.pt.yml
|
85
|
+
- spec/workmulti/named.en.yml
|
86
|
+
- spec/workmulti/named.pt.yml
|
87
|
+
- spec/workmulti/order.en.yml
|
88
|
+
- spec/workmulti/order.pt.yml
|
89
|
+
- spec/workmulti/pt.yml
|
90
|
+
homepage: http://github.com/nofxx/i18n_sync
|
91
|
+
licenses: []
|
92
|
+
metadata: {}
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
requirements: []
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 2.4.3
|
110
|
+
signing_key:
|
111
|
+
specification_version: 4
|
112
|
+
summary: Syncs all locale yml/rb files based on a "master" one.
|
113
|
+
test_files:
|
114
|
+
- spec/fixtures/children.en.yml
|
115
|
+
- spec/fixtures/children.pt.yml
|
116
|
+
- spec/fixtures/en.yml
|
117
|
+
- spec/fixtures/extra.en.yml
|
118
|
+
- spec/fixtures/extra.pt.yml
|
119
|
+
- spec/fixtures/named.en.yml
|
120
|
+
- spec/fixtures/named.pt.yml
|
121
|
+
- spec/fixtures/order.en.yml
|
122
|
+
- spec/fixtures/order.pt.yml
|
123
|
+
- spec/fixtures/pt.yml
|
124
|
+
- spec/i18n_sync_spec.rb
|
125
|
+
- spec/results/children.pt.yml
|
126
|
+
- spec/results/extra.pt.yml
|
127
|
+
- spec/results/named.pt.yml
|
128
|
+
- spec/results/order.en.yml
|
129
|
+
- spec/spec_helper.rb
|
130
|
+
has_rdoc:
|