def process_keymap_reference_card_translation(en_file, cn_file, result_file=None): """ 将翻译结果转为md文件 :param en_file: :param cn_file: :param result_file: :return: """ if result_file is None: result_file = filex.get_result_file_name(en_file, '_result', 'md') en_lines = filex.read_lines(en_file) cn_lines = filex.read_lines(cn_file) if en_lines is None or cn_lines is None: return None # 以[]中一个或多个#开头,接内容 p_title = re.compile(r'^\[(#+)\]\s?(.*)') result = [] for i in range(len(cn_lines)): line = cn_lines[i] line = encodex.unicode_str_to_chinese(line) line = re.sub(p_title, r'\1 \2', line) en_line = en_lines[i].replace('\n', '') if '【' in en_line: shortcut = en_line.split('【')[1] line = line.replace('* ', "") line = '* %-30s%s' % ('【%s】' % shortcut, line) result.append(line) filex.write_lines(result_file, result)
def get_dict_from_file(file_path, separator='=', delete_value_ellipsis=True, delete_value_underline=True, delete_value_and_symbol=False, delete_cn_shortcut=False, trans_unicode=False): """ 从文件中读取字典, :param file_path:文件路径 :param separator:分隔符 :return: 如果有错返回None :param delete_value_ellipsis:删除省略号 :param delete_value_underline: 删除快捷方式 :param delete_value_and_symbol: 是否删降&符号 :param delete_cn_shortcut: 是否删除中文翻译中的快捷方式 :param trans_unicode: 将unicode转为中文 """ result = filex.get_dict_from_file(file_path, separator) if result is None: return None if delete_value_ellipsis or delete_value_underline or trans_unicode: # (空白?点一次或多次) p_ellipsis = r'(\s?\.+)$' # 空白?,左括号,&?,字母,右括号 p_shortcut = r'\s?\(&?\w\)$' # &后跟一字母 p_add_symbol = r'&(\w)' for key, value in result.items(): if delete_value_ellipsis: value = re.sub(p_ellipsis, '', value) if delete_value_underline: value = value.replace('_', '') if delete_value_and_symbol: value = re.sub(p_add_symbol, r'\1', value) if delete_cn_shortcut: value = re.sub(p_shortcut, '', value) if trans_unicode: value = encodex.unicode_str_to_chinese(value) result[key] = value return result
def change_unicode_to_chinese(file_path, output_file=None): """ 将unicode转为中文 :param file_path:源文件 :param output_file: 输出文件 :return: """ if output_file is None: output_file = filex.get_result_file_name(file_path, '_cn_result') lines = filex.read_lines(file_path) if lines is None: return result = [] for line in lines: line = line.replace('\n', '') if '=' in line: key_value = line.split('=', 1) line = '%s=%s' % (key_value[0], encodex.unicode_str_to_chinese(key_value[1])) result.append(line + '\n') filex.write_lines(output_file, result)
def process_translated_keymap_file(en_file, cn_file, result_file=None): """ 处理翻译完的文件 :param en_file: :param cn_file: :param result_file: :return: """ if result_file is None: result_file = filex.get_result_file_name(cn_file, '_final') en_lines = filex.read_lines(en_file) cn_lines = filex.read_lines(cn_file) if cn_lines is None: return result = [] p_title = re.compile(r'^\[(#+)\]\s?(.*)') p_title2 = re.compile(r'(\n*)(#+\s)(.*)') p_desc = re.compile(r'^\[desc\]\s?(.*)') p_comment = re.compile(r'^#\[(x+)\](.*)') for i in range(len(cn_lines)): line = cn_lines[i].replace('\n', '') if line.startswith('#'): # 以#开头不翻译,取原文 line = en_lines[i].replace('\n', '') match = re.match(p_comment, line) if match is not None: # 注释 start_number = match.group(1) if len(start_number) == 1: # 1颗星标记基本注释 replace_result = ' \n译注:%s' % (match.group(2)) else: # 2星以上为加重注释 # 向上寻找标题并加重 last_index = -1 while result[last_index] == '' or re.match(p_title2, result[last_index]) is None: last_index -= 1 last_line = result[last_index] if '★' not in last_line: start_replace = '★' * (len(start_number) - 1) last_line = re.sub(p_title2, r'\1\2*%s\3%s*' % (start_replace, start_replace), last_line) print('替换标题【%s】为【%s】' % (result[last_index], last_line)) result[last_index] = last_line replace_result = ' \n译注:%s' % (match.group(2)) # print('替换【%s】为【%s】' % (line, replace_result)) line = '%s' % replace_result else: # 不以#开头 line = encodex.unicode_str_to_chinese(line) en_line = en_lines[i].replace('\n', '') match = re.match(p_title, line) if match is not None: # 是标题 en_match = re.match(p_title, en_line) if len(en_match.group(1)) == 5: replace_result = '\n\n%s(%s)' % (en_match.group(2), match.group(2)) else: replace_result = '\n\n%s %s(%s)' % (en_match.group(1), en_match.group(2), match.group(2)) # print('\n替换【%s】为【%s】' % (line, replace_result)) line = '%s' % replace_result else: desc_cn_match = re.match(p_desc, line) if desc_cn_match is not None: # 是描述 desc_en_match = re.match(p_desc, en_line) replace_result = ' \n%s \n描述:%s' % (desc_en_match.group(1), desc_cn_match.group(1)) # print('\n描述替换【%s】为【%s】' % (line, replace_result)) line = '%s' % replace_result result.append(line) filex.write_lines(result_file, result)