translate-yaml-generator 0.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.
@@ -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: []