Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
    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)
Exemple #4
0
    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)