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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 06a01f99dce9df71c355dfbe1a03b85fac6cb9b4
4
- data.tar.gz: 8b7a559af7ab08cf16284bee8d78eb37277ac35f
3
+ metadata.gz: e84a39280ab284159150cd5263596bdfe45098f9
4
+ data.tar.gz: 83bedb2834ff382221e89a20a190f02a9a7d1fb9
5
5
  SHA512:
6
- metadata.gz: 86e57f20ab0ea767f5dc54a1e15d9d20b6d97fb467bcfd4786ec3a93217922b75d225d39bbd4d5bd0a11b2201bea49137e922cb6a391f31d09d60f6f99b94c0e
7
- data.tar.gz: 64ecc8367c813080d9cc9a48304e1f8dff02955d319de749458134156528fd189bac8e119b38259cd8e9c94d190c8ec95ec3f8605a6da319d3605203fb0c6415
6
+ metadata.gz: 60382d4febffe2a2e84e33d444863b2cea1e3fdf81dddc9f63cccd8f18fc1079061d2eac7e5fec023797b5dbadc96a4b3f9594f297dbec7c4d4078a346d52999
7
+ data.tar.gz: b5b170f7e332ec9f0bfbd4d2ea90f7680b583524fe1c0da7ef6ffaa1961782a09eaed81cd27ef889a012d6ca5858be08d3eb8ba67433d8708c7c018af6f39da8
@@ -8,4 +8,5 @@ end
8
8
 
9
9
  if ARGV.length > 0
10
10
  Applocale::Command::Init.start(ARGV)
11
- end
11
+ end
12
+
@@ -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
- sheet_language_list = sheet_info_obj.lang_headers
67
- sheet_key_header = sheet_info_obj.key_header
68
+ if sheet_info_obj.is_a? Applocale::Config::SheetInfoByHeader
68
69
 
69
- header_row_index = rows.index do |row|
70
- row.include?(sheet_key_header)
71
- end
70
+ sheet_language_list = sheet_info_obj.lang_headers
71
+ sheet_key_header = sheet_info_obj.key_header
72
72
 
73
- header_row_info = rows[header_row_index] unless header_row_index.nil?
74
- header_column_index = header_row_info&.index { |cell| cell == sheet_key_header }
75
- if header_row_index.nil? || header_column_index.nil?
76
- raise "ParseCSVError: Header not found in sheet #{sheet_name}"
77
- end
78
- key_header_info = ParseModelModule::KeyStrWithColNo.new(sheet_key_header, header_column_index)
79
-
80
- language_header_list = sheet_language_list.map do |key, value|
81
- cell_index = header_row_info.index { |cell| cell == value }
82
- cell_index.nil? ? nil : ParseModelModule::LangWithColNo.new(value, key, cell_index)
83
- end.compact
84
- unless language_header_list.length == sheet_language_list.length
85
- raise "ParseCSVError: Wrong language keys in sheet #{sheet_name}"
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
- raise "ParseCSVError: Invaild Key in sheet #{sheet_name}, row: #{index}, key_str: #{key_str}"
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.open(langpath_obj.filepath, 'r').each do |line|
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
- .map {|sheet_content| sheet_content.get_rowInfo_sortby_key.last&.key_str }
110
- .compact
111
- .reverse
112
- .drop(1)
113
- .reverse
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')
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Applocale
2
- VERSION = "0.2.7"
2
+ VERSION = "0.2.8"
3
3
  end
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.7
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: 2018-10-13 00:00:00.000000000 Z
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.14
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: