translate-yaml-generator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 140024afd6a25bf8699f89c366e7077f0f05ab0e
4
+ data.tar.gz: 4ef47e62b17de2c5a5c88971d695d5cb8f21fba4
5
+ SHA512:
6
+ metadata.gz: bf49ba1f1219e3711db15eaf0455b68bea1e14c9a9099bd5d867996d639ff927cfce2af67947f80d98c021f358ec05cdd133821621b9e29ed8c1e953bec102f1
7
+ data.tar.gz: a6df5cd9f3ec176927f83ed1008d0cafc9a147761776aa13da4cc9e4684c89208a6fb111ef15da1bf33c23255cdf929469f6aaab8a2ddee7cb4ffa387ee6be54
@@ -0,0 +1,20 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.2
5
+ - 2.1
6
+ - 2.0.0
7
+ - 1.9.3
8
+
9
+ gemfile:
10
+ - Gemfile
11
+
12
+ install:
13
+ - bundle install
14
+
15
+ script:
16
+ - bundle exec rake
17
+
18
+ notifications:
19
+ - email: false
20
+
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rubyXL", ">= 3.3.2"
4
+
5
+ group :development do
6
+ gem "rdoc", "~> 3.12"
7
+ gem "bundler", "~> 1.0"
8
+ gem "jeweler", "~> 2.0.1"
9
+ # gem "simplecov", ">= 0"
10
+ gem "rake", "~> 0.9.2"
11
+ gem "rspec", "~> 2.13"
12
+ end
@@ -0,0 +1,72 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.3.6)
5
+ builder (3.1.4)
6
+ descendants_tracker (0.0.4)
7
+ thread_safe (~> 0.3, >= 0.3.1)
8
+ diff-lcs (1.2.5)
9
+ faraday (0.9.0)
10
+ multipart-post (>= 1.2, < 3)
11
+ git (1.2.7)
12
+ github_api (0.12.2)
13
+ addressable (~> 2.3)
14
+ descendants_tracker (~> 0.0.4)
15
+ faraday (~> 0.8, < 0.10)
16
+ hashie (>= 3.3)
17
+ multi_json (>= 1.7.5, < 2.0)
18
+ nokogiri (~> 1.6.3)
19
+ oauth2
20
+ hashie (3.3.2)
21
+ highline (1.6.21)
22
+ jeweler (2.0.1)
23
+ builder
24
+ bundler (>= 1.0)
25
+ git (>= 1.2.5)
26
+ github_api
27
+ highline (>= 1.6.15)
28
+ nokogiri (>= 1.5.10)
29
+ rake
30
+ rdoc
31
+ json (1.8.1)
32
+ jwt (1.2.0)
33
+ mini_portile (0.6.2)
34
+ multi_json (1.10.1)
35
+ multi_xml (0.5.5)
36
+ multipart-post (2.0.0)
37
+ nokogiri (1.6.5)
38
+ mini_portile (~> 0.6.0)
39
+ oauth2 (1.0.0)
40
+ faraday (>= 0.8, < 0.10)
41
+ jwt (~> 1.0)
42
+ multi_json (~> 1.3)
43
+ multi_xml (~> 0.5)
44
+ rack (~> 1.2)
45
+ rack (1.5.2)
46
+ rake (0.9.6)
47
+ rdoc (3.12.2)
48
+ json (~> 1.4)
49
+ rspec (2.99.0)
50
+ rspec-core (~> 2.99.0)
51
+ rspec-expectations (~> 2.99.0)
52
+ rspec-mocks (~> 2.99.0)
53
+ rspec-core (2.99.2)
54
+ rspec-expectations (2.99.2)
55
+ diff-lcs (>= 1.1.3, < 2.0)
56
+ rspec-mocks (2.99.2)
57
+ rubyXL (3.3.2)
58
+ nokogiri (>= 1.4.4)
59
+ rubyzip (>= 1.1.6)
60
+ rubyzip (1.1.6)
61
+ thread_safe (0.3.4)
62
+
63
+ PLATFORMS
64
+ ruby
65
+
66
+ DEPENDENCIES
67
+ bundler (~> 1.0)
68
+ jeweler (~> 2.0.1)
69
+ rake (~> 0.9.2)
70
+ rdoc (~> 3.12)
71
+ rspec (~> 2.13)
72
+ rubyXL (>= 3.3.2)
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2015 if1live
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,28 @@
1
+ = translate-yaml-generator
2
+
3
+ {<img src="https://travis-ci.org/5minlab/translate-yaml-generator.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/5minlab/translate-yaml-generator]
4
+
5
+
6
+ Generate translation yaml from excel file. (for L10N, I18N)
7
+
8
+ == Feature
9
+ * Manage translation via MS Excel file.
10
+ * Generate YAML Locale file from Excel file.
11
+
12
+ == Install:
13
+ gem install bundler
14
+ bundle install
15
+
16
+ == Usage:
17
+ Usage: ./lib/translate_yaml_generator.rb <translate data excel> <config yaml>
18
+ i18n excel : Excel File for Translate Data (extension: xlsx)
19
+ config yaml : Configuration File (extension: yml)
20
+
21
+ === Sample:
22
+ ./lib/translate_yaml_generator.rb data/sample-1.xlsx data/sample-1.yml
23
+
24
+ == Copyright
25
+
26
+ Copyright (c) 2015 if1live. See LICENSE.txt for
27
+ further details.
28
+
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "translate-yaml-generator"
18
+ gem.homepage = "http://github.com/5minlab/translate-yaml-generator"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Generate translation yaml from excel file. (for L10N, I18N)}
21
+ gem.description = %Q{Generate translation yaml from excel file. (for L10N, I18N)}
22
+ gem.email = "libsora25@gmail.com"
23
+ gem.authors = ["if1live"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require "rspec/core/rake_task"
29
+ RSpec::Core::RakeTask.new(:spec)
30
+ task :test => :spec
31
+
32
+ desc "Code coverage detail"
33
+ task :simplecov do
34
+ ENV['COVERAGE'] = "true"
35
+ Rake::Task['test'].execute
36
+ end
37
+
38
+ task :default => :test
39
+
40
+ require 'rdoc/task'
41
+ Rake::RDocTask.new do |rdoc|
42
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
43
+
44
+ rdoc.rdoc_dir = 'rdoc'
45
+ rdoc.title = "translate-yaml-generator #{version}"
46
+ rdoc.rdoc_files.include('README*')
47
+ rdoc.rdoc_files.include('lib/**/*.rb')
48
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
Binary file
@@ -0,0 +1,6 @@
1
+ languages:
2
+ - lang: ko
3
+ file: tmp/ko/sample-1.yml
4
+ - lang: en
5
+ file: tmp/en/sample-1.yml
6
+
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require_relative "translate_yaml_generator/core"
5
+ require_relative "translate_yaml_generator/reader"
6
+ require_relative "translate_yaml_generator/writer"
7
+ require_relative "translate_yaml_generator/cli"
8
+
9
+ if __FILE__ == $0
10
+ TranslateYamlGenerator::main
11
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+
6
+ module TranslateYamlGenerator
7
+ def self.run(data_filename, config_filename)
8
+ config_content = File.read config_filename
9
+ config = YAML.load(config_content)
10
+
11
+ reader = TranslateYamlGenerator::Reader::XlsxReader.new
12
+ root = reader.read data_filename
13
+
14
+ base_dir = File.dirname(data_filename)
15
+
16
+ config["languages"].each_with_index do |data, idx|
17
+ writer = TranslateYamlGenerator::Writer::YamlWriter.new
18
+ writer.locale = data["lang"]
19
+ writer.locale_idx = idx
20
+
21
+ filename = data["file"]
22
+ if filename[0] == '/'
23
+ target_dir = File.dirname(filename)
24
+ else
25
+ target_dir = File.join(base_dir, File.dirname(filename))
26
+ end
27
+ FileUtils::mkdir_p target_dir
28
+
29
+ File.open(File.join(base_dir, filename), 'w') do |f|
30
+ f.write(writer.write root)
31
+ end
32
+ end
33
+ end
34
+
35
+ def self.main
36
+ if ARGV.length == 2
37
+ data_filename = ARGV[0]
38
+ config_filename = ARGV[1]
39
+ run data_filename, config_filename
40
+ else
41
+ puts <<eos
42
+ Usage: #{$0} <translate excel> <config yaml>
43
+ translate excel : Internationalization Excel File (extension: xlsx)
44
+ config yaml : Configuration File (extension: yml)
45
+ eos
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,102 @@
1
+ # encoding: utf-8
2
+
3
+ module TranslateYamlGenerator
4
+ class Record
5
+ INDEX_NAMESPACE = 0
6
+ INDEX_NAME = 1
7
+ METADATA_FIELD_COUNT = 2
8
+
9
+ def initialize(row)
10
+ raise ArgumentError, "No language data inside row" if row.length <= METADATA_FIELD_COUNT
11
+ @row = row
12
+
13
+ end
14
+
15
+ def namespace
16
+ @row[INDEX_NAMESPACE]
17
+ end
18
+
19
+ def name
20
+ @row[INDEX_NAME]
21
+ end
22
+
23
+ def item idx
24
+ raise ArgumentError, "not valid language index" if idx < 0 or idx >= self.count
25
+ @row[idx + METADATA_FIELD_COUNT]
26
+ end
27
+
28
+ def count
29
+ @row.length - METADATA_FIELD_COUNT
30
+ end
31
+ end
32
+
33
+
34
+ class Node
35
+ attr_reader :name, :children, :records
36
+ attr_accessor :parent
37
+ protected :parent=
38
+
39
+ def initialize(name="")
40
+ @name = name
41
+ @parent = nil
42
+ @children = []
43
+ @records = []
44
+ end
45
+
46
+ def fullname
47
+ token_list = [@name]
48
+ parent = @parent
49
+ while parent != nil
50
+ token_list << parent.name
51
+ parent = parent.parent
52
+ end
53
+ token_list.reject! { |c| c.empty? }
54
+ token_list.reverse.join(".")
55
+ end
56
+
57
+ def add_child(child)
58
+ @children << child
59
+ child.parent = self
60
+ end
61
+
62
+ def add_record(record)
63
+ @records << record
64
+ end
65
+
66
+ def find_child!(ns)
67
+ return self if @name == ns
68
+ find_child_r!(ns)
69
+ end
70
+
71
+ def find_child_r!(ns)
72
+ return self if ns == ""
73
+ token_list = ns.split(".")
74
+ child_name = token_list[0]
75
+ next_ns = token_list[1, token_list.length].join(".")
76
+
77
+ @children.each do |child|
78
+ return child.find_child_r! next_ns if child.name == child_name
79
+ end
80
+
81
+ if token_list.length == 1
82
+ node = TranslateYamlGenerator::Node.new child_name
83
+ self << node
84
+ return node
85
+ else
86
+ node = TranslateYamlGenerator::Node.new child_name
87
+ self << node
88
+ node.find_child! next_ns
89
+ end
90
+ end
91
+
92
+ def <<(item)
93
+ if item.is_a? TranslateYamlGenerator::Record
94
+ add_record item
95
+ elsif item.is_a? TranslateYamlGenerator::Node
96
+ add_child item
97
+ else
98
+ raise ArgumentError, "not valid type"
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+
3
+ require "rubyXL"
4
+ require_relative "core"
5
+
6
+ module TranslateYamlGenerator
7
+ module Reader
8
+ class BaseReader
9
+ def build_tree(records)
10
+ root = TranslateYamlGenerator::Node.new
11
+ records.each do |r|
12
+ node = root.find_child! r.namespace
13
+ node << r
14
+ end
15
+ root
16
+ end
17
+
18
+ def read(filename)
19
+ check_filename(filename)
20
+ records = read_records filename
21
+ root = build_tree records
22
+ end
23
+ end
24
+
25
+
26
+ class XlsxReader < BaseReader
27
+ RE_XLSX = Regexp.new("\.xlsx$", Regexp::IGNORECASE)
28
+
29
+ def check_filename(filename)
30
+ raise ArgumentError, "not vaild xlsx file" unless filename =~ RE_XLSX
31
+ end
32
+
33
+ def read_records(filename)
34
+ workbook = RubyXL::Parser.parse filename
35
+ worksheet = workbook[0]
36
+
37
+ records = []
38
+
39
+ worksheet.each_with_index do |row, row_idx|
40
+ ns_cell = row[0]
41
+ name_cell = row[1]
42
+
43
+ # allow empty namespace
44
+ ns = (defined? ns_cell.value) ? (ns_cell.value) : ""
45
+
46
+ # empty name is not allowed
47
+ next unless defined? name_cell.value
48
+
49
+ rowdata = ns, name_cell.value
50
+ (2...row.size).each do |col_idx|
51
+ item_cell = row[col_idx]
52
+ rowdata << item_cell.value
53
+ end
54
+
55
+ record = TranslateYamlGenerator::Record.new rowdata
56
+ records << record
57
+ end
58
+
59
+ return records
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+
3
+ require 'yaml'
4
+
5
+ module TranslateYamlGenerator
6
+ module Writer
7
+ class BaseWriter
8
+ attr_accessor :locale_idx, :locale
9
+
10
+ def initialize
11
+ @locale_idx = 0
12
+ @locale = "en"
13
+ end
14
+
15
+ def write(node)
16
+ reset
17
+ visit_r node, ""
18
+ result
19
+ end
20
+
21
+ def reset
22
+ end
23
+
24
+ def result
25
+ end
26
+
27
+ def visit_r(node, parent_ns)
28
+ ns = [parent_ns, node.name].reject(&:empty?).join(".")
29
+ node.records.each do |r|
30
+ handle_record ns, r
31
+ end
32
+ node.children.each { |c| visit_r c, ns}
33
+ end
34
+ end
35
+
36
+ class LineWriter < BaseWriter
37
+ def reset; @item_list = []; end
38
+ def result; @item_list; end
39
+
40
+ def handle_record(ns, record)
41
+ data = {
42
+ :ns => ns,
43
+ :name => record.name,
44
+ :value => (record.item @locale_idx)
45
+ }
46
+ @item_list << data
47
+ end
48
+ end
49
+
50
+ class HashWriter < BaseWriter
51
+ def reset; @root = {}; end
52
+ def result; @root; end
53
+
54
+ def handle_record(ns, record)
55
+ token_list = ns.split(".")
56
+ curr_hash = @root
57
+ token_list.each do |token|
58
+ if curr_hash.has_key? token
59
+ curr_hash = curr_hash[token]
60
+ else
61
+ curr_hash[token] = {}
62
+ curr_hash = curr_hash[token]
63
+ end
64
+ end
65
+
66
+ curr_hash[record.name] = record.item @locale_idx
67
+ end
68
+ end
69
+
70
+ class YamlWriter < HashWriter
71
+ def result
72
+ root = {
73
+ @locale => @root
74
+ }
75
+ result = YAML.dump(root)
76
+ result.gsub "---\n", ""
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,111 @@
1
+ # encoding: utf-8
2
+
3
+ require "translate_yaml_generator/core"
4
+
5
+ describe TranslateYamlGenerator::Record do
6
+ describe "#item" do
7
+ let(:row) { ["ns", "name", "english", "한국어"] }
8
+ let(:record) { TranslateYamlGenerator::Record.new row }
9
+
10
+ it "valid index" do
11
+ expect(record.item 0).to eq("english")
12
+ expect(record.item 1).to eq("한국어")
13
+ end
14
+
15
+ it "invalid index" do
16
+ expect { record.item -1 }.to raise_error(ArgumentError)
17
+ expect { record.item 2 }.to raise_error(ArgumentError)
18
+ end
19
+ end
20
+
21
+ describe "#item" do
22
+ let(:row) { ["", "name"] }
23
+
24
+ it "empty language data" do
25
+ expect { TranslateYamlGenerator::Record.new row }.to raise_error(ArgumentError)
26
+ end
27
+ end
28
+ end
29
+
30
+
31
+ describe TranslateYamlGenerator::Node do
32
+ let(:root) { TranslateYamlGenerator::Node.new "" }
33
+ let(:child) { TranslateYamlGenerator::Node.new "child" }
34
+ let(:record) { TranslateYamlGenerator::Record.new ["ns", "name", "english", "한국어"] }
35
+
36
+ describe "#add_child" do
37
+ it "add child node" do
38
+ expect(root.children.length).to eq(0)
39
+
40
+ root.add_child child
41
+ expect(root.children.length).to eq(1)
42
+ expect(child.parent).to eq(root)
43
+ end
44
+ end
45
+
46
+ describe "#add_record" do
47
+ it "add record" do
48
+ expect(root.records.length).to eq(0)
49
+
50
+ root.add_record record
51
+ expect(root.records.length).to eq(1)
52
+ end
53
+ end
54
+
55
+ describe "#fullname" do
56
+ it "get fulllname" do
57
+ node = TranslateYamlGenerator::Node.new "node"
58
+ child << node
59
+
60
+ expect(root.fullname).to eq("")
61
+ expect(child.fullname).to eq("child")
62
+ expect(node.fullname).to eq("child.node")
63
+ end
64
+ end
65
+
66
+ describe "#<< " do
67
+ it "child" do
68
+ root << child
69
+ expect(root.children.length).to eq(1)
70
+ expect(root.records.length).to eq(0)
71
+ end
72
+ it "record" do
73
+ root << record
74
+ expect(root.children.length).to eq(0)
75
+ expect(root.records.length).to eq(1)
76
+ end
77
+ it "not valid" do
78
+ expect { root << "not-valid" }.to raise_error(ArgumentError)
79
+ end
80
+ end
81
+
82
+ describe "#find_child!" do
83
+ before(:each) do
84
+ root << child
85
+ end
86
+
87
+ it "ns equal current node" do
88
+ expect(root.find_child! "").to eq(root)
89
+ expect(child.find_child! "child").to eq(child)
90
+ end
91
+
92
+ it "child exist" do
93
+ expect(root.find_child! "child").to eq(child)
94
+ end
95
+
96
+ it "create child if parent exist" do
97
+ name_list = "new_child", "child.new_child"
98
+ name_list.each do |name|
99
+ node = root.find_child! name
100
+ expect(node.fullname).to eq(name)
101
+ end
102
+ end
103
+ it "create child if parent not exist" do
104
+ name_list = "foo.bar.spam", "child.foo.bar.spam"
105
+ name_list.each do |name|
106
+ node = root.find_child! name
107
+ expect(node.fullname).to eq(name)
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ require "translate_yaml_generator/reader"
4
+
5
+ def get_data_file filename
6
+ root_path = __FILE__
7
+ 4.times { root_path = File.dirname(root_path) }
8
+ File.join(root_path, "data", filename)
9
+ end
10
+
11
+ describe TranslateYamlGenerator::Reader::XlsxReader do
12
+ let(:reader) { TranslateYamlGenerator::Reader::XlsxReader.new }
13
+
14
+ describe "#read" do
15
+ it "not valid xlsx extension" do
16
+ expect { reader.read "foo.csv" }.to raise_error(ArgumentError)
17
+ end
18
+
19
+ it "read record" do
20
+ filename = get_data_file "sample-1.xlsx"
21
+ root = reader.read filename
22
+
23
+ expect(root.children.length).to eq(2)
24
+ expect(root.records.length).to eq(1)
25
+
26
+ node = root.find_child! "admin.debug"
27
+ expect(node.children.length).to eq(0)
28
+ expect(node.records.length).to eq(2)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,101 @@
1
+ # encoding: utf-8
2
+
3
+ require "translate_yaml_generator/writer"
4
+ require "translate_yaml_generator/core"
5
+
6
+
7
+ def get_data_file filename
8
+ root_path = __FILE__
9
+ 4.times { root_path = File.dirname(root_path) }
10
+ File.join(root_path, "data", filename)
11
+ end
12
+
13
+
14
+ describe TranslateYamlGenerator::Writer::HashWriter do
15
+ let(:writer) { TranslateYamlGenerator::Writer::HashWriter.new }
16
+
17
+ describe "#write" do
18
+ it "use data" do
19
+ filename = get_data_file "sample-1.xlsx"
20
+ reader = TranslateYamlGenerator::Reader::XlsxReader.new
21
+ root = reader.read filename
22
+ actual = writer.write root
23
+ expected = {
24
+ "unknown" => "빈거",
25
+ "admin" => {
26
+ "item_1" => "한글",
27
+ "item_2" => "테스트",
28
+ "item_3" => "서비스",
29
+ "debug" => {
30
+ "sample_1" => "임시",
31
+ "sample_2" => "점검"
32
+ }
33
+ },
34
+ "foo" => {
35
+ "bar" => {
36
+ "spam" => {
37
+ "dummy_1" => "메뉴",
38
+ "dummy_2" => "항목"
39
+ },
40
+ "menu" => {
41
+ "elem_1" => "일부",
42
+ "elem_2" => "요소"
43
+ }
44
+ }
45
+ }
46
+ }
47
+ expect(actual).to eq(expected)
48
+ end
49
+ end
50
+ end
51
+
52
+
53
+ describe TranslateYamlGenerator::Writer::LineWriter do
54
+ let(:writer) { TranslateYamlGenerator::Writer::LineWriter.new }
55
+
56
+ describe "#locale_idx" do
57
+ it "get/set" do
58
+ expect(writer.locale_idx).to eq(0)
59
+ writer.locale_idx = 1
60
+ expect(writer.locale_idx).to eq(1)
61
+ end
62
+ end
63
+
64
+ describe "#write" do
65
+ it "use data" do
66
+ filename = get_data_file "sample-1.xlsx"
67
+ reader = TranslateYamlGenerator::Reader::XlsxReader.new
68
+ root = reader.read filename
69
+
70
+ actual = writer.write root
71
+ expected = [
72
+ {:ns=>"", :name=>"unknown", :value=>"빈거"},
73
+ {:ns=>"admin", :name=>"item_1", :value=>"한글"},
74
+ {:ns=>"admin", :name=>"item_2", :value=>"테스트"},
75
+ {:ns=>"admin", :name=>"item_3", :value=>"서비스"},
76
+ {:ns=>"admin.debug", :name=>"sample_1", :value=>"임시"},
77
+ {:ns=>"admin.debug", :name=>"sample_2", :value=>"점검"},
78
+ {:ns=>"foo.bar.spam", :name=>"dummy_1", :value=>"메뉴"},
79
+ {:ns=>"foo.bar.spam", :name=>"dummy_2", :value=>"항목"},
80
+ {:ns=>"foo.bar.menu", :name=>"elem_1", :value=>"일부"},
81
+ {:ns=>"foo.bar.menu", :name=>"elem_2", :value=>"요소"},
82
+ ]
83
+ expect(actual).to eq(expected)
84
+ end
85
+ end
86
+ end
87
+
88
+
89
+ describe TranslateYamlGenerator::Writer::YamlWriter do
90
+ let(:writer) { TranslateYamlGenerator::Writer::YamlWriter.new }
91
+
92
+ describe "#write" do
93
+ it "use data" do
94
+ filename = get_data_file "sample-1.xlsx"
95
+ reader = TranslateYamlGenerator::Reader::XlsxReader.new
96
+ root = reader.read filename
97
+ actual = writer.write root
98
+ #puts actual
99
+ end
100
+ end
101
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: translate-yaml-generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - if1live
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubyXL
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.3.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.3.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jeweler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 2.0.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.9.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.13'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.13'
97
+ description: Generate translation yaml from excel file. (for L10N, I18N)
98
+ email: libsora25@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files:
102
+ - LICENSE.txt
103
+ - README.rdoc
104
+ files:
105
+ - ".travis.yml"
106
+ - Gemfile
107
+ - Gemfile.lock
108
+ - LICENSE.txt
109
+ - README.rdoc
110
+ - Rakefile
111
+ - VERSION
112
+ - data/sample-1.xlsx
113
+ - data/sample-1.yml
114
+ - lib/translate_yaml_generator.rb
115
+ - lib/translate_yaml_generator/cli.rb
116
+ - lib/translate_yaml_generator/core.rb
117
+ - lib/translate_yaml_generator/reader.rb
118
+ - lib/translate_yaml_generator/writer.rb
119
+ - spec/lib/translate_yaml_generator/core_spec.rb
120
+ - spec/lib/translate_yaml_generator/reader_spec.rb
121
+ - spec/lib/translate_yaml_generator/writer_spec.rb
122
+ homepage: http://github.com/5minlab/translate-yaml-generator
123
+ licenses:
124
+ - MIT
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.2.2
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Generate translation yaml from excel file. (for L10N, I18N)
146
+ test_files: []