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 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: