-
Notifications
You must be signed in to change notification settings - Fork 0
/
go_abroad_core.py
203 lines (155 loc) · 5.89 KB
/
go_abroad_core.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# coding=utf-8
import os
import sys
from xml.dom import minidom
from xml.dom.minidom import parse
import openpyxl
from openpyxl.writer.excel import ExcelWriter
global CN_map, EN_map, CN_key_list, EN_key_list, REMARKS_MAP
CN_map = {}
EN_map = {}
REMARKS_MAP = {}
CN_key_list = []
EN_key_list = []
FILE_PATH_XLSX = 'strings.xlsx'
FILE_PATH_XML = 'strings.xml'
GENERATE_ANDROID_STRINGS_FILE = "strings_en.xml"
ANDROID_KEY_COLUMN_IN_XLSX = 'B'
CN_VALUE_COLUMN_IN_XLSX = 'C'
EN_VALUE_COLUMN_IN_XLSX = 'D'
REMARKS_COLUMN_IN_XLSX = 'E'
FIRST_LINE_IN_XLSX = '1'
LAST_LINE_IN_XLSX = '1000'
CONTENT_RANGE_IN_XLSX = ANDROID_KEY_COLUMN_IN_XLSX + FIRST_LINE_IN_XLSX + ':' + REMARKS_COLUMN_IN_XLSX + LAST_LINE_IN_XLSX
TITLE_ANDROID_KEY = 'android_key'
TITLE_CN_STRING_VALUE = 'CN_String_value'
TITLE_EN_STRING_VALUE = 'EN_String_value'
TITLE_REMARKS = "REMAKES"
def get_content_range_in_xlsx(row_num):
LAST_LINE_IN_XLSX = str(row_num)
CONTENT_RANGE_IN_XLSX = ANDROID_KEY_COLUMN_IN_XLSX + FIRST_LINE_IN_XLSX + ':' + REMARKS_COLUMN_IN_XLSX + LAST_LINE_IN_XLSX
return CONTENT_RANGE_IN_XLSX
# 读取已翻译过的xlsx文件,返回中文字典,英文字典,中文顺序关键词列表,英文顺序关键词列表
def read_xlsx_file(file_path):
global CN_map, EN_map, CN_key_list, EN_key_list, REMARKS_MAP
cleanBuffer()
wb = openpyxl.load_workbook(filename=file_path, use_iterators=True)
sheet_names = wb.get_sheet_names()
head_sheet = wb.get_sheet_by_name(sheet_names[0])
# LAST_LINE_IN_XLSX = head_sheet.max_row
for row in head_sheet.iter_rows(get_content_range_in_xlsx(head_sheet.max_row)):
key = row[0].value
if (key == None or key == TITLE_ANDROID_KEY):
continue
# print 'CN_key_list', CN_key_list
CN_key_list.append(key)
EN_key_list.append(key)
CN_value = row[1].value
EN_value = row[2].value
REMARKS_value = row[3].value
if CN_value != None:
CN_map[key] = CN_value.encode('utf-8')
else:
CN_map[key] = CN_value
if EN_value != None:
EN_map[key] = EN_value.encode('utf-8')
else:
EN_map[key] = EN_value
if REMARKS_value != None:
REMARKS_MAP[key] = REMARKS_value.encode('utf-8')
else:
REMARKS_MAP[key] = REMARKS_value
return CN_map, EN_map, CN_key_list, REMARKS_MAP
def write_to_xlsx_file(content, keys, file_path):
if os.path.exists(file_path) == False:
createFile(file_path)
wb = openpyxl.Workbook()
ew = ExcelWriter(workbook=wb)
wsheet = wb.worksheets[0]
is_close = raw_input('please be sure to close your xlsx file (y/n)?')
if is_close != 'y':
print '未关闭文件,退出程序'
return
rows = [row for row in wsheet.iter_rows(get_content_range_in_xlsx(keys.__len__() + 1))]
rows[0][0].value = TITLE_ANDROID_KEY
rows[0][1].value = TITLE_CN_STRING_VALUE
rows[0][2].value = TITLE_EN_STRING_VALUE
rows[0][3].value = TITLE_REMARKS
for i in range(0, keys.__len__()):
rows[i + 1][0].value = keys[i]
rows[i + 1][1].value = content[keys[i]]
continue
# print rows[i + 1][0].value, rows[i + 1][1].value
ew.save(file_path)
return
# 规定读取中文xml 文件,返回中文字典,关键词顺序列表
def read_xml_file(file_path):
global CN_map, EN_map, CN_key_list, EN_key_list, REMARKS_MAP
cleanBuffer()
xml_tree = parse(file_path)
resources = xml_tree.documentElement
StringKeyMaps = resources.getElementsByTagName('string')
for item in StringKeyMaps:
key = item.getAttribute('name')
if key == None:
continue
CN_key_list.append(key)
value = item.childNodes[0].nodeValue
CN_map[key] = value
# print key, ' : ', value, '\n'
return CN_map, CN_key_list
# 将翻译的xlsx文件写入xml中,如果有英文,写入相应的value,如果英文列处为空,写入相应的中文
def write_xml_file(EN_content, keys, default_content, file_path):
if os.path.exists(file_path) == False:
createFile(file_path)
imp = minidom.getDOMImplementation()
dom = imp.createDocument(None, None, None)
root = dom.createElement('resources')
root.setAttribute('xmlns:tools', 'http://schemas.android.com/tools')
root.setAttribute('xmlns:xliff', 'urn:oasis:names:tc:xliff:document:1.2')
root.setAttribute('tools:ignore', 'MissingTranslation')
# for key, value in content.items():
for key in keys:
value = EN_content[key]
if value == None:
value = default_content[key]
item = dom.createElement('string')
item_value = dom.createTextNode(str(value))
item.setAttribute('name', key)
item.appendChild(item_value)
root.appendChild(item)
continue
dom.appendChild(root)
file_handle = open(file_path, 'w')
dom.writexml(file_handle, '', '', '\n', 'utf-8')
file_handle.close()
return
def generate_android_strings_file(EN_content, key_list, CN_content):
write_xml_file(EN_content, key_list, CN_content, GENERATE_ANDROID_STRINGS_FILE)
return
def generate_PM_xlsx_file(content, key_list):
write_to_xlsx_file(content, key_list, FILE_PATH_XLSX)
return
def cleanBuffer():
global EN_map, CN_map, CN_key_list, EN_key_list, REMARKS_MAP
REMARKS_MAP.clear()
EN_map.clear()
CN_map.clear()
CN_key_list = []
EN_key_list = []
return
def createFile(file_name):
f = open(file_name, 'w')
f.close()
return
# content = {'one': '1', 'two': '2', 'three': '3'}
if (__name__ == "__main__"):
print 'this is cn_map', CN_map
print 'this is cn_key_list', CN_key_list
print sys.getdefaultencoding()
# read_xml_file(FILE_PATH_XML)
# generate_PM_xlsx_file(CN_map, CN_key_list)
#
read_xlsx_file(FILE_PATH_XLSX)
generate_android_strings_file(EN_map, CN_key_list, CN_map)
print 'succeed'