applocale 0.1.6 → 0.2.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 +4 -4
- data/lib/applocale.rb +3 -1
- data/lib/applocale/AppLocaleFile +50 -0
- data/lib/applocale/Command/init.rb +21 -29
- data/lib/applocale/Core/FindStrKey/find_str_key.rb +40 -0
- data/lib/applocale/Core/FindStrKey/find_str_key_ios.rb +210 -0
- data/lib/applocale/Core/FindStrKey/find_str_key_result.rb +72 -0
- data/lib/applocale/Core/GoogleHepler/google_helper.rb +74 -33
- data/lib/applocale/Core/ParseXLSX/parse_xlsx.rb +56 -28
- data/lib/applocale/Core/ParseXLSX/parse_xlsx_module.rb +39 -4
- data/lib/applocale/Core/ParserStringFile/parse_localized_resource.rb +54 -27
- data/lib/applocale/Core/ParserStringFile/parse_strings_file.rb +38 -19
- data/lib/applocale/Core/ParserStringFile/parse_xml_file.rb +25 -8
- data/lib/applocale/Core/convert_to_localefile.rb +40 -18
- data/lib/applocale/Core/init.rb +76 -14
- data/lib/applocale/Core/setting.rb +111 -10
- data/lib/applocale/Util/config_util.rb +348 -139
- data/lib/applocale/Util/error_util.rb +3 -2
- data/lib/applocale/Util/file_util.rb +28 -29
- data/lib/applocale/Util/injection.rb +79 -0
- data/lib/applocale/Util/regex_util.rb +14 -40
- data/lib/applocale/version.rb +1 -1
- metadata +27 -23
- data/lib/applocale/AppLocaleFile.yaml +0 -8
@@ -12,79 +12,88 @@ module Applocale
|
|
12
12
|
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
|
13
13
|
APPLICATION_NAME = 'AppLocale'
|
14
14
|
CLIENT_SECRETS_PATH = 'client_secret.json'
|
15
|
-
CREDENTIALS_PATH = File.join(Dir.home, '.applan_credentials',
|
16
|
-
'drive-ruby-applocale.yaml')
|
17
15
|
SCOPE = [Google::Apis::DriveV3::AUTH_DRIVE_METADATA_READONLY, Google::Apis::DriveV3::AUTH_DRIVE, Google::Apis::DriveV3::AUTH_DRIVE_FILE]
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
attr_accessor :download_link, :credential_path, :xlsx_path,:spreadsheet_id
|
18
|
+
|
19
|
+
def initialize(link, credential_path, xlsx_path)
|
20
|
+
self.download_link = link.to_s.strip
|
21
|
+
self.credential_path = credential_path.to_s.strip
|
22
|
+
self.xlsx_path = xlsx_path.to_s.strip
|
23
|
+
self.spreadsheet_id = GoogleHelper.get_spreadsheet_id(link)
|
24
|
+
|
25
|
+
if self.download_link.length <= 0
|
26
|
+
ErrorUtil::ConfigFileInValid.new('[link] is missing in config file ').raise
|
27
|
+
end
|
28
|
+
if self.credential_path.length <= 0
|
29
|
+
ErrorUtil::ConfigFileInValid.new('[credential_path] is missing in config file ').raise
|
30
|
+
end
|
31
|
+
if self.xlsx_path.length <= 0
|
32
|
+
ErrorUtil::ConfigFileInValid.new('[xlsx_path] is missing in config file ').raise
|
26
33
|
end
|
27
34
|
end
|
28
35
|
|
29
|
-
|
30
|
-
|
31
|
-
|
36
|
+
private
|
37
|
+
def removeOldExcel
|
38
|
+
if File.exist? self.xlsx_path
|
39
|
+
FileUtils.rm(self.xlsx_path)
|
32
40
|
end
|
33
|
-
puts "Account Reseted!"
|
34
41
|
end
|
35
42
|
|
36
|
-
|
37
|
-
|
43
|
+
public
|
44
|
+
def download
|
45
|
+
removeOldExcel
|
38
46
|
service = Google::Apis::DriveV3::DriveService.new
|
39
47
|
service.client_options.application_name = APPLICATION_NAME
|
40
|
-
service.authorization =
|
48
|
+
service.authorization = authorize
|
41
49
|
begin
|
42
|
-
service.export_file(
|
43
|
-
|
44
|
-
|
45
|
-
if File.exist?
|
50
|
+
service.export_file(self.spreadsheet_id,
|
51
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
52
|
+
download_dest: self.xlsx_path)
|
53
|
+
if File.exist? self.xlsx_path
|
46
54
|
puts 'Download from google finished'.green
|
47
55
|
else
|
48
56
|
ErrorUtil::DownloadFromGoogleFail.new.raise
|
49
57
|
end
|
50
58
|
rescue Google::Apis::AuthorizationError => e
|
51
|
-
|
59
|
+
failauth
|
52
60
|
rescue Google::Apis::ClientError => e
|
53
|
-
|
61
|
+
failauth
|
54
62
|
rescue Google::Apis::ServerError => e
|
55
|
-
|
63
|
+
failauth
|
56
64
|
rescue
|
57
65
|
ErrorUtil::DownloadFromGoogleFail.new.raise
|
58
66
|
end
|
59
67
|
end
|
60
68
|
|
61
|
-
|
69
|
+
private
|
70
|
+
def failauth
|
62
71
|
ErrorUtil::DownloadFromGoogleFail.new.to_warn
|
63
|
-
|
72
|
+
askfor_relogin(true)
|
64
73
|
end
|
65
74
|
|
66
75
|
private
|
67
|
-
def
|
76
|
+
def askfor_relogin(is_firsttime)
|
68
77
|
unless is_firsttime
|
69
78
|
puts "Invalid Command. Please input [Y/N]".red
|
70
79
|
end
|
71
80
|
puts "login again? [Y/N]".red
|
72
81
|
code = STDIN.gets.chomp.downcase
|
73
82
|
if code == 'y'
|
74
|
-
|
75
|
-
self.
|
83
|
+
reset_loginacc
|
84
|
+
self.download
|
76
85
|
elsif code == 'n'
|
77
86
|
exit(0)
|
78
87
|
else
|
79
|
-
|
88
|
+
askfor_relogin(false)
|
80
89
|
end
|
81
90
|
end
|
82
91
|
|
83
|
-
|
84
|
-
|
85
|
-
FileUtils.mkdir_p(File.dirname(
|
92
|
+
private
|
93
|
+
def authorize
|
94
|
+
FileUtils.mkdir_p(File.dirname(self.credential_path))
|
86
95
|
client_id = Google::Auth::ClientId.from_file(File.expand_path(CLIENT_SECRETS_PATH, File.dirname(__FILE__)))
|
87
|
-
token_store = Google::Auth::Stores::FileTokenStore.new(file:
|
96
|
+
token_store = Google::Auth::Stores::FileTokenStore.new(file: self.credential_path)
|
88
97
|
authorizer = Google::Auth::UserAuthorizer.new(
|
89
98
|
client_id, SCOPE, token_store)
|
90
99
|
user_id = 'default'
|
@@ -102,5 +111,37 @@ module Applocale
|
|
102
111
|
credentials
|
103
112
|
end
|
104
113
|
|
114
|
+
private
|
115
|
+
def reset_loginacc
|
116
|
+
if File.exist? self.credential_path
|
117
|
+
File.delete(self.credential_path)
|
118
|
+
end
|
119
|
+
puts "Account Reseted!"
|
120
|
+
end
|
121
|
+
|
122
|
+
public
|
123
|
+
def self.is_googlelink(link)
|
124
|
+
if !link.nil? && link.length > 0
|
125
|
+
if link.match(/https:\/\/docs.google.com\/spreadsheets\/d\/([^\/]*)/i)
|
126
|
+
if $1.length > 0
|
127
|
+
return true
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
return false
|
132
|
+
end
|
133
|
+
|
134
|
+
public
|
135
|
+
def self.get_spreadsheet_id(link)
|
136
|
+
if !link.nil? && link.length > 0
|
137
|
+
if link.match(/https:\/\/docs.google.com\/spreadsheets\/d\/([^\/]*)/i)
|
138
|
+
if $1.strip.length > 0
|
139
|
+
return $1.strip
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
ErrorUtil::DownloadFromGoogleFail.new.raise
|
144
|
+
end
|
145
|
+
|
105
146
|
end
|
106
147
|
end
|
@@ -5,19 +5,30 @@ require File.expand_path('../../../Util/regex_util.rb', __FILE__)
|
|
5
5
|
|
6
6
|
require 'rubyXL'
|
7
7
|
require 'colorize'
|
8
|
+
module Applocale
|
9
|
+
class Injeust
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
8
13
|
|
9
14
|
module Applocale
|
10
15
|
class ParseXLSX
|
11
16
|
|
12
|
-
@xlsx = nil
|
13
17
|
@sheetcontent_list = nil
|
14
18
|
@allkey_dict = {}
|
15
19
|
@all_error = nil
|
16
|
-
@setting = Setting
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
+
@platform
|
22
|
+
@xlsxpath
|
23
|
+
@langlist
|
24
|
+
@sheetobj_list
|
25
|
+
|
26
|
+
def initialize(platfrom, xlsxpath, langlist, sheetobj_list)
|
27
|
+
@platform = platfrom
|
28
|
+
@xlsxpath = xlsxpath
|
29
|
+
@langlist = langlist
|
30
|
+
@sheetobj_list = sheetobj_list
|
31
|
+
puts "Start to Parse XLSX: \"#{@xlsxpath}\" ...".green
|
21
32
|
@sheetcontent_list = Array.new
|
22
33
|
@allkey_dict = {}
|
23
34
|
@all_error = Array.new
|
@@ -30,29 +41,47 @@ module Applocale
|
|
30
41
|
|
31
42
|
def parse
|
32
43
|
begin
|
33
|
-
workbook = RubyXL::Parser.parse(@
|
44
|
+
workbook = RubyXL::Parser.parse(@xlsxpath)
|
34
45
|
rescue
|
35
|
-
ErrorUtil::CannotOpenXlsxFile.new(@
|
46
|
+
ErrorUtil::CannotOpenXlsxFile.new(@xlsxpath).raise
|
36
47
|
end
|
48
|
+
sheetnamelist = Applocale::Config::Sheet.get_sheetlist(@sheetobj_list)
|
37
49
|
workbook.worksheets.each do |worksheet|
|
38
50
|
sheetname = worksheet.sheet_name
|
51
|
+
sheetinfoobj = Applocale::Config::Sheet.get_sheetobj_by_sheetname(@sheetobj_list, sheetname)
|
52
|
+
if sheetinfoobj.nil?
|
53
|
+
next
|
54
|
+
end
|
55
|
+
sheetnamelist.delete(sheetname)
|
56
|
+
|
39
57
|
sheetcontent = ParseXLSXModule::SheetContent.new(sheetname)
|
40
|
-
|
58
|
+
if sheetinfoobj.is_a? Applocale::Config::SheetInfoByRow
|
59
|
+
keycolno = Applocale::ParseXLSXModule::Helper.collabel_to_colno(sheetinfoobj.key_col)
|
60
|
+
sheetinfoobj.to_keyStrWithColNo(sheetcontent)
|
61
|
+
end
|
62
|
+
|
63
|
+
rowno = 0
|
41
64
|
worksheet.each {|row|
|
42
65
|
rowno += 1
|
43
66
|
# colno = 0
|
44
|
-
next if row.nil?
|
45
|
-
cells = row && row.cells
|
46
67
|
if sheetcontent.header_rowno.nil?
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
68
|
+
if sheetinfoobj.is_a? Applocale::Config::SheetInfoByHeader
|
69
|
+
next if row.nil?
|
70
|
+
cells = row && row.cells
|
71
|
+
headerinfo = find_header(sheetinfoobj, cells)
|
72
|
+
unless headerinfo.nil?
|
73
|
+
sheetcontent.header_rowno = rowno
|
74
|
+
sheetcontent.keyStr_with_colno = headerinfo[:keystr_colno]
|
75
|
+
sheetcontent.lang_with_colno_list = headerinfo[:lang_colno]
|
76
|
+
end
|
52
77
|
end
|
78
|
+
elsif sheetcontent.header_rowno > rowno
|
79
|
+
next
|
53
80
|
else
|
81
|
+
next if row.nil?
|
82
|
+
cells = row && row.cells
|
54
83
|
begin
|
55
|
-
rowcontent = parse_row(sheetname, rowno,
|
84
|
+
rowcontent = parse_row(sheetname, rowno, cells, sheetcontent.keyStr_with_colno, sheetcontent.lang_with_colno_list)
|
56
85
|
unless rowcontent.nil?
|
57
86
|
prev_rowcontent = @allkey_dict[rowcontent.key_str.downcase]
|
58
87
|
if prev_rowcontent.nil?
|
@@ -82,7 +111,7 @@ module Applocale
|
|
82
111
|
|
83
112
|
def parse_row(sheetname, rowno, cells, keystr_with_colno, lang_with_colno_list)
|
84
113
|
begin
|
85
|
-
cell = cells[keystr_with_colno.colno]
|
114
|
+
cell = cells[keystr_with_colno.colno - 1 ]
|
86
115
|
val = cell && cell.value
|
87
116
|
keystr = to_value_key(val)
|
88
117
|
rescue ErrorUtil::ParseXlsxError::InValidKey => e
|
@@ -93,9 +122,8 @@ module Applocale
|
|
93
122
|
|
94
123
|
unless keystr.nil?
|
95
124
|
rowinfo = ParseXLSXModule::RowInfo.new(sheetname, rowno, keystr)
|
96
|
-
|
97
|
-
|
98
|
-
cell = cells[lang_with_colno.colno]
|
125
|
+
lang_with_colno_list.each do |lang_with_colno|
|
126
|
+
cell = cells[lang_with_colno.colno - 1]
|
99
127
|
val = cell && cell.value
|
100
128
|
cell_value = val.to_s
|
101
129
|
lang_name = lang_with_colno.lang
|
@@ -108,7 +136,7 @@ module Applocale
|
|
108
136
|
def to_value_key(value)
|
109
137
|
if !value.nil? && value != ''
|
110
138
|
new_value = value.to_s
|
111
|
-
if ValidKey.is_validkey(@
|
139
|
+
if ValidKey.is_validkey(@platform, new_value)
|
112
140
|
return new_value
|
113
141
|
else
|
114
142
|
rowinfo = ParseXLSXModule::RowInfo.new(nil, nil, value)
|
@@ -125,20 +153,20 @@ module Applocale
|
|
125
153
|
end
|
126
154
|
end
|
127
155
|
|
128
|
-
def find_header(cells)
|
156
|
+
def find_header(sheetinfoobj, cells)
|
129
157
|
keystr_with_colno = nil
|
130
158
|
lang_with_colno_list = Array.new
|
131
159
|
k_header_lang_dict = []
|
132
|
-
colno =
|
160
|
+
colno = 1
|
133
161
|
cells.each{ |cell|
|
134
162
|
value = cell && cell.value
|
135
163
|
unless value.nil?
|
136
|
-
if value ==
|
164
|
+
if value == sheetinfoobj.key_header && keystr_with_colno.nil?
|
137
165
|
keystr_with_colno = ParseXLSXModule::KeyStrWithColNo.new(value, colno)
|
138
166
|
else
|
139
|
-
|
140
|
-
if value ==
|
141
|
-
lang_with_colno_list.push(ParseXLSXModule::LangWithColNo.new(
|
167
|
+
sheetinfoobj.lang_headers.each do |lang, keyforlang|
|
168
|
+
if value == keyforlang && k_header_lang_dict.index(lang).nil?
|
169
|
+
lang_with_colno_list.push(ParseXLSXModule::LangWithColNo.new(keyforlang, lang, colno))
|
142
170
|
k_header_lang_dict.push(lang)
|
143
171
|
end
|
144
172
|
end
|
@@ -146,7 +174,7 @@ module Applocale
|
|
146
174
|
end
|
147
175
|
colno += 1
|
148
176
|
}
|
149
|
-
if !keystr_with_colno.nil? && lang_with_colno_list.length ==
|
177
|
+
if !keystr_with_colno.nil? && lang_with_colno_list.length == sheetinfoobj.lang_headers.length
|
150
178
|
return {:keystr_colno => keystr_with_colno, :lang_colno => lang_with_colno_list}
|
151
179
|
end
|
152
180
|
end
|
@@ -1,6 +1,21 @@
|
|
1
|
+
|
2
|
+
|
1
3
|
module Applocale
|
2
4
|
|
5
|
+
|
3
6
|
module ParseXLSXModule
|
7
|
+
class Helper
|
8
|
+
def self.collabel_to_colno(collabel)
|
9
|
+
if collabel.match(/^(\d)+$/)
|
10
|
+
return collabel.to_i
|
11
|
+
end
|
12
|
+
number = collabel.tr("A-Z", "1-9a-q").to_i(27)
|
13
|
+
number -= 1 if number > 27
|
14
|
+
return number
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
4
19
|
class SheetContent
|
5
20
|
attr_accessor :sheetname, :header_rowno, :keyStr_with_colno, :lang_with_colno_list, :rowinfo_list, :comment
|
6
21
|
|
@@ -52,7 +67,7 @@ module Applocale
|
|
52
67
|
end
|
53
68
|
|
54
69
|
def to_s
|
55
|
-
"sheetname = #{sheetname}, rowno = #{rowno
|
70
|
+
"sheetname = #{sheetname}, rowno = #{rowno}, key_str = #{key_str}, content_dict = #{content_dict}"
|
56
71
|
end
|
57
72
|
|
58
73
|
end
|
@@ -67,7 +82,7 @@ module Applocale
|
|
67
82
|
end
|
68
83
|
|
69
84
|
def to_s
|
70
|
-
"{header_str => #{header_str}, colno => #{colno
|
85
|
+
"{header_str => #{header_str}, colno => #{colno}}"
|
71
86
|
end
|
72
87
|
|
73
88
|
end
|
@@ -82,10 +97,30 @@ module Applocale
|
|
82
97
|
end
|
83
98
|
|
84
99
|
def to_s
|
85
|
-
"{header_str => #{header_str}, lang => #{lang}, colno => #{colno
|
100
|
+
"{header_str => #{header_str}, lang => #{lang}, colno => #{colno}}"
|
86
101
|
end
|
87
102
|
|
88
103
|
end
|
89
104
|
|
90
105
|
end
|
91
|
-
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
module Applocale
|
110
|
+
module Config
|
111
|
+
class SheetInfoByRow
|
112
|
+
def to_keyStrWithColNo(sheetcontent)
|
113
|
+
sheetcontent.header_rowno = self.row
|
114
|
+
keycolno = Applocale::ParseXLSXModule::Helper.collabel_to_colno(self.key_col)
|
115
|
+
sheetcontent.keyStr_with_colno = ParseXLSXModule::KeyStrWithColNo.new(nil, keycolno)
|
116
|
+
sheetcontent.lang_with_colno_list = Array.new
|
117
|
+
self.lang_cols.each do |lang, collabel|
|
118
|
+
colno = Applocale::ParseXLSXModule::Helper.collabel_to_colno(collabel)
|
119
|
+
obj = ParseXLSXModule::LangWithColNo.new(nil,lang, colno)
|
120
|
+
sheetcontent.lang_with_colno_list.push(obj)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
@@ -3,6 +3,7 @@ require File.expand_path('../../../Util/platform.rb', __FILE__)
|
|
3
3
|
require File.expand_path('../../ParseXLSX/parse_xlsx_module', __FILE__)
|
4
4
|
require File.expand_path('../parse_strings_file', __FILE__)
|
5
5
|
require File.expand_path('../parse_xml_file', __FILE__)
|
6
|
+
require File.expand_path('../../../Util/injection.rb', __FILE__)
|
6
7
|
|
7
8
|
require 'rubyXL'
|
8
9
|
require 'colorize'
|
@@ -10,32 +11,41 @@ require 'colorize'
|
|
10
11
|
module Applocale
|
11
12
|
class ParseLocalizedResource
|
12
13
|
@skip_error = false
|
13
|
-
@
|
14
|
+
@platform
|
15
|
+
@xlsxpath
|
16
|
+
@langpathobj_list
|
17
|
+
@sheetobj_list
|
18
|
+
@injectobj
|
14
19
|
|
15
|
-
def initialize(skip_error = false)
|
20
|
+
def initialize(skip_error = false, platform, xlsxpath, langpathobj_list, sheetobj_list, rubycode)
|
16
21
|
@skip_error = skip_error
|
17
|
-
@
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
@platform = platform
|
23
|
+
@xlsxpath = xlsxpath
|
24
|
+
@langpathobj_list = langpathobj_list
|
25
|
+
@sheetobj_list = sheetobj_list
|
26
|
+
@injectobj = Applocale::Injection.load(rubycode)
|
27
|
+
startParse()
|
28
|
+
end
|
29
|
+
|
30
|
+
def startParse
|
31
|
+
puts "Start to Parse StringFile .... ".green
|
32
|
+
|
33
|
+
FileUtils.mkdir_p(File.dirname(@xlsxpath))
|
34
|
+
FileUtils.rm(@xlsxpath) if File.exist? @xlsxpath
|
35
|
+
|
36
|
+
sheetobj = @sheetobj_list[0]
|
37
|
+
|
38
|
+
if @platform == Platform::IOS
|
29
39
|
result = self.parse_ios
|
30
|
-
write_to_xlsx(@
|
40
|
+
write_to_xlsx(@xlsxpath, sheetobj, result[:errorlist], result[:content], result[:keylist])
|
31
41
|
else
|
32
42
|
result = self.parse_android
|
33
|
-
write_to_xlsx(@
|
43
|
+
write_to_xlsx(@xlsxpath, sheetobj, result[:errorlist], result[:content], result[:keylist])
|
34
44
|
end
|
35
45
|
end
|
36
46
|
|
37
47
|
def parse_ios
|
38
|
-
result = ParseStringsFile.new
|
48
|
+
result = ParseStringsFile.new(@platform, @langpathobj_list, @injectobj)
|
39
49
|
errorlist = result.errorlist
|
40
50
|
content = result.strings_keys
|
41
51
|
keylist = result.keys_list
|
@@ -43,30 +53,47 @@ module Applocale
|
|
43
53
|
end
|
44
54
|
|
45
55
|
def parse_android
|
46
|
-
result = ParseXMLFile.new
|
56
|
+
result = ParseXMLFile.new(@platform, @langpathobj_list, @injectobj)
|
47
57
|
errorlist = result.errorlist
|
48
58
|
content = result.strings_keys
|
49
59
|
keylist = result.keys_list
|
50
60
|
return {:errorlist => errorlist, :content => content, :keylist => keylist}
|
51
61
|
end
|
52
62
|
|
53
|
-
def write_to_xlsx(path,
|
63
|
+
def write_to_xlsx(path, sheetobj, errorlist, content, keylist)
|
54
64
|
ErrorUtil::ParseLocalizedError::ParseLocalizedError.raiseArr(errorlist, !@skip_error)
|
55
65
|
puts "Start write to file: \"#{path}\" ...".green
|
56
66
|
workbook = RubyXL::Workbook.new
|
57
67
|
worksheet = workbook.worksheets[0]
|
68
|
+
worksheet.sheet_name = sheetobj.sheetname
|
58
69
|
rowno = 0
|
59
|
-
|
60
|
-
|
61
|
-
|
70
|
+
|
71
|
+
keycolno = 0
|
72
|
+
langcolno_dict = {}
|
73
|
+
|
74
|
+
sheet_info_obj = sheetobj.obj
|
75
|
+
if sheet_info_obj.is_a? Applocale::Config::SheetInfoByHeader
|
76
|
+
worksheet.add_cell(rowno, keycolno, sheet_info_obj.key_header)
|
77
|
+
langcolno = keycolno + 1
|
78
|
+
sheet_info_obj.lang_headers.each do |key, header|
|
79
|
+
worksheet.add_cell(rowno, langcolno, header)
|
80
|
+
langcolno_dict[key] = langcolno
|
81
|
+
langcolno += 1
|
82
|
+
end
|
83
|
+
rowno+=1
|
84
|
+
elsif sheet_info_obj.is_a? Applocale::Config::SheetInfoByRow
|
85
|
+
rowno = sheet_info_obj.row - 1
|
86
|
+
keycolno = Applocale::ParseXLSXModule::Helper.collabel_to_colno(sheet_info_obj.key_col) - 1
|
87
|
+
sheet_info_obj.lang_cols.each do |lang, collabel|
|
88
|
+
langcolno_dict[lang] = Applocale::ParseXLSXModule::Helper.collabel_to_colno(collabel) - 1
|
89
|
+
end
|
62
90
|
end
|
63
|
-
|
91
|
+
|
64
92
|
keylist.each do |key|
|
65
|
-
worksheet.add_cell(rowno,
|
93
|
+
worksheet.add_cell(rowno, keycolno, key)
|
66
94
|
unless content[key].nil?
|
67
|
-
|
68
|
-
lang
|
69
|
-
worksheet.add_cell(rowno, langwithColNo.colno, content[key][lang][:value]) if !content[key][lang].nil? && !content[key][lang][:value].nil?
|
95
|
+
langcolno_dict.each do |lang, colno|
|
96
|
+
worksheet.add_cell(rowno, colno, content[key][lang][:value]) if !content[key][lang].nil? && !content[key][lang][:value].nil?
|
70
97
|
end
|
71
98
|
end
|
72
99
|
rowno+=1
|