applocale 0.2.7 → 0.2.8
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 +4 -4
- data/lib/applocale.rb +2 -1
- data/lib/applocale/AppLocaleFile +5 -0
- data/lib/applocale/Core/ParseCSV/parse_csv.rb +50 -26
- data/lib/applocale/Core/ParseXLSX/parse_xlsx.rb +7 -1
- data/lib/applocale/Core/convert_to_localefile.rb +32 -7
- data/lib/applocale/Core/init.rb +2 -2
- data/lib/applocale/Core/setting.rb +2 -1
- data/lib/applocale/Util/config_util.rb +9 -1
- data/lib/applocale/Util/injection.rb +10 -1
- data/lib/applocale/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e84a39280ab284159150cd5263596bdfe45098f9
|
4
|
+
data.tar.gz: 83bedb2834ff382221e89a20a190f02a9a7d1fb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60382d4febffe2a2e84e33d444863b2cea1e3fdf81dddc9f63cccd8f18fc1079061d2eac7e5fec023797b5dbadc96a4b3f9594f297dbec7c4d4078a346d52999
|
7
|
+
data.tar.gz: b5b170f7e332ec9f0bfbd4d2ea90f7680b583524fe1c0da7ef6ffaa1961782a09eaed81cd27ef889a012d6ca5858be08d3eb8ba67433d8708c7c018af6f39da8
|
data/lib/applocale.rb
CHANGED
data/lib/applocale/AppLocaleFile
CHANGED
@@ -24,6 +24,7 @@ sheetname:
|
|
24
24
|
en_US: "B"
|
25
25
|
zh_TW: "C"
|
26
26
|
zh_CN: "D"
|
27
|
+
isSkipEmptyKey: false
|
27
28
|
|
28
29
|
|
29
30
|
# def convent_to_locale(lang, key, value)
|
@@ -48,4 +49,8 @@ sheetname:
|
|
48
49
|
|
49
50
|
# def after_parse_from_locale(lang, key, value)
|
50
51
|
# return value
|
52
|
+
# end
|
53
|
+
|
54
|
+
# def is_skip_by_key(sheetname, lang, key)
|
55
|
+
# return true
|
51
56
|
# end
|
@@ -17,8 +17,9 @@ module Applocale
|
|
17
17
|
@csv_directory
|
18
18
|
@langlist
|
19
19
|
@sheetobj_list
|
20
|
+
@is_skip_empty_key
|
20
21
|
|
21
|
-
def initialize(platfrom, csv_directory, langlist, sheetobj_list)
|
22
|
+
def initialize(platfrom, csv_directory, langlist, sheetobj_list, is_skip_empty_key)
|
22
23
|
@platform = platfrom
|
23
24
|
@csv_directory = csv_directory
|
24
25
|
@langlist = langlist
|
@@ -26,6 +27,7 @@ module Applocale
|
|
26
27
|
@sheetcontent_list = Array.new
|
27
28
|
@allkey_dict = {}
|
28
29
|
@all_error = Array.new
|
30
|
+
@is_skip_empty_key = is_skip_empty_key
|
29
31
|
# puts "Start to Parse CSV: \"#{csv_directory}\" ...".green
|
30
32
|
parse
|
31
33
|
end
|
@@ -63,39 +65,61 @@ module Applocale
|
|
63
65
|
def find_header(sheet, rows)
|
64
66
|
sheet_name = sheet.sheetname
|
65
67
|
sheet_info_obj = sheet.obj
|
66
|
-
|
67
|
-
sheet_key_header = sheet_info_obj.key_header
|
68
|
+
if sheet_info_obj.is_a? Applocale::Config::SheetInfoByHeader
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
end
|
70
|
+
sheet_language_list = sheet_info_obj.lang_headers
|
71
|
+
sheet_key_header = sheet_info_obj.key_header
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
73
|
+
header_row_index = rows.index do |row|
|
74
|
+
row.include?(sheet_key_header)
|
75
|
+
end
|
76
|
+
|
77
|
+
header_row_info = rows[header_row_index] unless header_row_index.nil?
|
78
|
+
header_column_index = header_row_info.index { |cell| cell == sheet_key_header }
|
79
|
+
if header_row_index.nil? || header_column_index.nil?
|
80
|
+
raise "ParseCSVError: Header not found in sheet #{sheet_name}"
|
81
|
+
end
|
82
|
+
key_header_info = ParseModelModule::KeyStrWithColNo.new(sheet_key_header, header_column_index)
|
83
|
+
|
84
|
+
language_header_list = sheet_language_list.map do |key, value|
|
85
|
+
cell_index = header_row_info.index { |cell| cell == value }
|
86
|
+
cell_index.nil? ? nil : ParseModelModule::LangWithColNo.new(value, key, cell_index)
|
87
|
+
end.compact
|
88
|
+
unless language_header_list.length == sheet_language_list.length
|
89
|
+
raise "ParseCSVError: Wrong language keys in sheet #{sheet_name}"
|
90
|
+
end
|
91
|
+
|
92
|
+
{
|
93
|
+
header_row_index: header_row_index,
|
94
|
+
key_header_info: key_header_info,
|
95
|
+
language_header_list: language_header_list
|
96
|
+
}
|
97
|
+
else
|
98
|
+
cell_index = Applocale::ParseXLSXModule::Helper.collabel_to_colno(sheet_info_obj.key_col) - 1
|
99
|
+
key_header_info = ParseModelModule::KeyStrWithColNo.new("", cell_index)
|
100
|
+
language_header_list = sheet_info_obj.lang_cols.map do |key, value|
|
101
|
+
cell_index = Applocale::ParseXLSXModule::Helper.collabel_to_colno(value) - 1
|
102
|
+
ParseModelModule::LangWithColNo.new("", key, cell_index)
|
103
|
+
end.compact
|
104
|
+
|
105
|
+
{
|
106
|
+
header_row_index: -1,
|
107
|
+
key_header_info: key_header_info,
|
108
|
+
language_header_list: language_header_list
|
109
|
+
}
|
86
110
|
end
|
87
|
-
{
|
88
|
-
header_row_index: header_row_index,
|
89
|
-
key_header_info: key_header_info,
|
90
|
-
language_header_list: language_header_list
|
91
|
-
}
|
92
111
|
end
|
93
112
|
|
94
113
|
def parse_row(sheet_name, index, row, key_header_info, language_header_list)
|
95
114
|
key_str = row[key_header_info.colno]
|
96
|
-
|
97
115
|
unless ValidKey.is_validkey(@platform, key_str)
|
98
|
-
|
116
|
+
if (key_str.nil? || key_str.length == 0)
|
117
|
+
if !@is_skip_empty_key
|
118
|
+
raise "ParseCSVError: Key can not be empty, in sheet #{sheet_name}, row: #{index}, key_str: #{key_str}"
|
119
|
+
end
|
120
|
+
else
|
121
|
+
raise "ParseCSVError: Invaild Key in sheet #{sheet_name}, row: #{index}, key_str: #{key_str}"
|
122
|
+
end
|
99
123
|
end
|
100
124
|
rowinfo = ParseModelModule::RowInfo.new(sheet_name, index, key_str)
|
101
125
|
rowinfo.content_dict = Hash[language_header_list.map { |language_header| [language_header.lang, ContentUtil.from_excel(row[language_header.colno] || '')] }]
|
@@ -23,8 +23,9 @@ module Applocale
|
|
23
23
|
@xlsxpath
|
24
24
|
@langlist
|
25
25
|
@sheetobj_list
|
26
|
+
@is_skip_empty_key
|
26
27
|
|
27
|
-
def initialize(platfrom, xlsxpath, langlist, sheetobj_list)
|
28
|
+
def initialize(platfrom, xlsxpath, langlist, sheetobj_list, is_skip_empty_key)
|
28
29
|
@platform = platfrom
|
29
30
|
@xlsxpath = xlsxpath
|
30
31
|
@langlist = langlist
|
@@ -33,6 +34,7 @@ module Applocale
|
|
33
34
|
@sheetcontent_list = Array.new
|
34
35
|
@allkey_dict = {}
|
35
36
|
@all_error = Array.new
|
37
|
+
@is_skip_empty_key = is_skip_empty_key
|
36
38
|
self.parse
|
37
39
|
end
|
38
40
|
|
@@ -126,6 +128,10 @@ module Applocale
|
|
126
128
|
raise e
|
127
129
|
end
|
128
130
|
|
131
|
+
if keystr.nil? && !@is_skip_empty_key
|
132
|
+
raise "ParseCSVError: Key can not be empty, in sheet #{sheetname}, row: #{rowno}, key_str: #{keystr}"
|
133
|
+
end
|
134
|
+
|
129
135
|
unless keystr.nil?
|
130
136
|
rowinfo = ParseModelModule::RowInfo.new(sheetname, rowno, keystr)
|
131
137
|
lang_with_colno_list.each do |lang_with_colno|
|
@@ -31,7 +31,8 @@ module Applocale
|
|
31
31
|
file_header_comment = []
|
32
32
|
is_double_dash_comment = false
|
33
33
|
is_multiline_comment = false
|
34
|
-
File.
|
34
|
+
if File.file?(langpath_obj.filepath)
|
35
|
+
File.open(langpath_obj.filepath, 'r').each do |line|
|
35
36
|
if is_double_dash_comment
|
36
37
|
break unless line.strip.start_with?('//')
|
37
38
|
file_header_comment.push(line)
|
@@ -57,6 +58,7 @@ module Applocale
|
|
57
58
|
break
|
58
59
|
end
|
59
60
|
end
|
61
|
+
end
|
60
62
|
end
|
61
63
|
|
62
64
|
target = open(langpath_obj.filepath, 'w')
|
@@ -71,6 +73,12 @@ module Applocale
|
|
71
73
|
target.puts('')
|
72
74
|
contentlist.each do |rowinfo|
|
73
75
|
content = rowinfo.content_dict[langpath_obj.lang]
|
76
|
+
if injectObj.has_is_skip_by_key
|
77
|
+
is_skip_by_key = injectObj.load_is_skip_by_key(sheetcontent.sheetname, langpath_obj.lang, rowinfo.key_str)
|
78
|
+
if is_skip_by_key.to_s.downcase == "true"
|
79
|
+
next
|
80
|
+
end
|
81
|
+
end
|
74
82
|
value = self.add_escape(platform, langpath_obj.lang, rowinfo.key_str, content, injectObj)
|
75
83
|
target.puts("\"#{rowinfo.key_str}\" = \"#{value}\";")
|
76
84
|
end
|
@@ -87,6 +95,12 @@ module Applocale
|
|
87
95
|
contentlist = sheetcontent.get_rowInfo_sortby_key
|
88
96
|
contentlist.each do |rowinfo|
|
89
97
|
content = rowinfo.content_dict[langpath_obj.lang]
|
98
|
+
if injectObj.has_is_skip_by_key
|
99
|
+
is_skip_by_key = injectObj.load_is_skip_by_key(sheetcontent.sheetname, langpath_obj.lang, rowinfo.key_str)
|
100
|
+
if is_skip_by_key.to_s.downcase == "true"
|
101
|
+
next
|
102
|
+
end
|
103
|
+
end
|
90
104
|
value = self.add_escape(platform, langpath_obj.lang, rowinfo.key_str, content, injectObj)
|
91
105
|
target.puts(" <string name=\"#{rowinfo.key_str}\">#{value}</string>")
|
92
106
|
end
|
@@ -99,18 +113,29 @@ module Applocale
|
|
99
113
|
def self.convert_to_json(platform, lang_path_obj, sheet_content_list, inject_obj)
|
100
114
|
FileUtils.mkdir_p(File.dirname(lang_path_obj.filepath))
|
101
115
|
hash = sheet_content_list.map do |sheet_content|
|
102
|
-
sheet_content.get_rowInfo_sortby_key.map do |row|
|
116
|
+
newResult = sheet_content.get_rowInfo_sortby_key.map do |row|
|
103
117
|
content = ContentUtil.remove_escaped_new_line(row.content_dict[lang_path_obj.lang])
|
104
118
|
value = add_escape(platform, lang_path_obj.lang, row.key_str, content, inject_obj)
|
105
119
|
[row.key_str, value]
|
106
120
|
end.to_h
|
121
|
+
newResult = newResult.select do |key, value|
|
122
|
+
to_skip = false
|
123
|
+
if inject_obj.has_is_skip_by_key
|
124
|
+
is_skip_by_key = inject_obj.load_is_skip_by_key(sheet_content.sheetname, lang_path_obj.lang, key)
|
125
|
+
if is_skip_by_key.to_s.downcase == "true"
|
126
|
+
to_skip = true
|
127
|
+
end
|
128
|
+
end
|
129
|
+
!to_skip
|
130
|
+
end
|
131
|
+
newResult
|
107
132
|
end.reduce({}, :merge)
|
108
133
|
section_last_row = sheet_content_list
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
134
|
+
.map {|sheet_content| sheet_content.get_rowInfo_sortby_key.last.key_str }
|
135
|
+
.compact
|
136
|
+
.reverse
|
137
|
+
.drop(1)
|
138
|
+
.reverse
|
114
139
|
json = JSON.pretty_generate(hash)
|
115
140
|
section_last_row.each { |row| json.gsub!(/(.*)("#{row}")(.*)/, '\1\2\3' + "\n") }
|
116
141
|
target = open(lang_path_obj.filepath, 'w')
|
data/lib/applocale/Core/init.rb
CHANGED
@@ -68,9 +68,9 @@ module Applocale
|
|
68
68
|
end
|
69
69
|
case setting.export_format
|
70
70
|
when 'csv'
|
71
|
-
parser = Applocale::ParseCSV.new(setting.platform, setting.export_to, setting.lang_path_list, setting.sheet_obj_list)
|
71
|
+
parser = Applocale::ParseCSV.new(setting.platform, setting.export_to, setting.lang_path_list, setting.sheet_obj_list, setting.is_skip_empty_key)
|
72
72
|
when 'xlsx'
|
73
|
-
parser = Applocale::ParseXLSX.new(setting.platform, setting.xlsxpath, setting.lang_path_list, setting.sheet_obj_list)
|
73
|
+
parser = Applocale::ParseXLSX.new(setting.platform, setting.xlsxpath, setting.lang_path_list, setting.sheet_obj_list, setting.is_skip_empty_key)
|
74
74
|
end
|
75
75
|
ConvertToStrFile.convert(setting.platform, setting.lang_path_list,parser.result, setting.rubycode)
|
76
76
|
end
|
@@ -21,7 +21,7 @@ require 'colorize'
|
|
21
21
|
module Applocale
|
22
22
|
module Config
|
23
23
|
class Setting
|
24
|
-
attr_accessor :configfile_pathstr, :link, :platform, :xlsxpath, :google_credentials_path, :lang_path_list, :sheet_obj_list, :rubycode, :export_format, :export_to
|
24
|
+
attr_accessor :configfile_pathstr, :link, :platform, :xlsxpath, :google_credentials_path, :lang_path_list, :sheet_obj_list, :rubycode, :export_format, :export_to, :is_skip_empty_key
|
25
25
|
def initialize(configfile_pathstr)
|
26
26
|
self.configfile_pathstr = configfile_pathstr
|
27
27
|
self.lang_path_list = Array.new
|
@@ -46,6 +46,7 @@ module Applocale
|
|
46
46
|
|
47
47
|
puts " export_format: #{export_format}"
|
48
48
|
puts " export_to: #{export_to}"
|
49
|
+
puts " is_skip_empty_key: #{self.is_skip_empty_key} "
|
49
50
|
# puts self.rubycode
|
50
51
|
|
51
52
|
end
|
@@ -83,7 +83,7 @@ module Applocale
|
|
83
83
|
sheetname = config_yaml['sheetname']
|
84
84
|
export_format = config_yaml['export_format']
|
85
85
|
export_to = config_yaml['export_to']
|
86
|
-
|
86
|
+
isSkipEmptyKey = config_yaml['isSkipEmptyKey']
|
87
87
|
setting = Applocale::Config::Setting.new(self.configfile_pathstr)
|
88
88
|
setting.rubycode = rubycode
|
89
89
|
unless link.nil? || link.length == 0
|
@@ -207,6 +207,14 @@ module Applocale
|
|
207
207
|
end
|
208
208
|
end
|
209
209
|
|
210
|
+
if isSkipEmptyKey.nil?
|
211
|
+
setting.is_skip_empty_key = true
|
212
|
+
elsif isSkipEmptyKey.to_s.downcase == "true" || isSkipEmptyKey.to_s.downcase == "false"
|
213
|
+
setting.is_skip_empty_key = isSkipEmptyKey
|
214
|
+
else
|
215
|
+
error = ErrorUtil::ConfigFileInValid.new("[isSkipEmptyKey] must be boolean ")
|
216
|
+
error_list.push(error)
|
217
|
+
end
|
210
218
|
setting.printlog
|
211
219
|
ErrorUtil::ConfigFileInValid.raiseArr(error_list)
|
212
220
|
return setting
|
@@ -75,5 +75,14 @@ module Applocale
|
|
75
75
|
return after_parse_from_locale(lang, key, value)
|
76
76
|
end
|
77
77
|
|
78
|
+
public
|
79
|
+
def has_is_skip_by_key
|
80
|
+
return defined?(is_skip_by_key) == 'method'
|
81
|
+
end
|
82
|
+
|
83
|
+
public
|
84
|
+
def load_is_skip_by_key(sheetname, lang, key)
|
85
|
+
return is_skip_by_key(sheetname, lang, key)
|
86
|
+
end
|
78
87
|
end
|
79
|
-
end
|
88
|
+
end
|
data/lib/applocale/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: applocale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kennix
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -173,8 +173,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
173
|
version: '0'
|
174
174
|
requirements: []
|
175
175
|
rubyforge_project:
|
176
|
-
rubygems_version: 2.6.
|
176
|
+
rubygems_version: 2.6.6
|
177
177
|
signing_key:
|
178
178
|
specification_version: 4
|
179
179
|
summary: for mobile application to manage locale
|
180
180
|
test_files: []
|
181
|
+
has_rdoc:
|