applocale 0.2.7 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|