一键翻译自动填表工具v1.1

 

2021年3月22日更新内容:

增加了容错以后的保存处理,避免了过长时间的白费等待

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : 黑羽青衣
# @File    : TranslateTool.py

from openpyxl.reader.excel import load_workbook
import translators as ts
import re
import time
from zhconv import convert
import os
import time

class Translate():
    def __init__(self, excel_path:str, sFileName, no_list, language):
        '''打开一个excel'''
        self.excel_path = excel_path
        self.sFileName = sFileName
        self.no_list = no_list
        self.language = language
        #print(excel_path)
        if not os.path.exists(excel_path):
            print("路径错误,请检查当前路径")
            os.system('pause')

    def Get_FileName(self, excel_path):
        print("开始检查文件")
        sFileName = []
        filename = os.listdir(excel_path)
        try:
            for Name in filename:
                if os.path.exists(excel_path + r"\\" + Name):
                    suffix = Name.split(".")[1]
                    test = Name.split(".", 2)
                    if len(test) == 2:
                        if suffix == "xlsx" or suffix == "xlsm" or suffix == "xltx" or suffix == "xltm":
                            name = Name.split(".")[0]
                            if "~$" not in name:
                                sFileName.append(Name)
                    else:
                        print("发现冲突的文件,请检查文件名:{}".format(Name.split(".")[0]))
                        continue
            print("检查完毕!")
            return sFileName
        except Exception as e:
            print(e)
            pass

    def get_needchecksheetname(self, excel_path, sFileName):
        needchecksheetname = []
        if sFileName == None:
            return
        wb = load_workbook(excel_path + r"\\" + sFileName)
        if wb != None:
            sheetnames = wb.get_sheet_names()
            for sheet in sheetnames:
                if sheet not in no_list:
                    #print("现在检查的sheetname:{}".format(sheet), flush=True)
                    needchecksheetname.append(sheet)
        return needchecksheetname

    def run(self):
        sFileName = self.Get_FileName(excel_path)
        #print("==============================开始查表==============================")
        #help(ts.deepl)
        self.check_Language()
        os.system('pause')

    def check_Language(self):
        print("一键翻译语言工具")
        text = ""
        new_text = ""
        try:
            wb = load_workbook(excel_path + r"\\语言总表_Language.xlsx")
            sheetnames = self.get_needchecksheetname(excel_path, "语言总表_Language.xlsx")
            for a in sheetnames:
                self.ws = wb.get_sheet_by_name(a)
                for y in range(2, self.ws.max_column + 1):
                    if self.ws.cell(1, y).value in language:
                        lan = self.ws.cell(1, y).value
                        for i in range(6, self.ws.max_row + 1):
                            if self.ws.cell(i, y).value == None and self.ws.cell(i, 1).value != None and self.ws.cell(i,2).value != None:
                                print("打印Sheet:{} 语言:{} 第{}行 第{}列 为空,开始翻译!".format(a, lan, i, y))
                                text = self.ws.cell(i, 2).value
                                new_text = self.ws.cell(i, 2).value
                                if text != None:
                                    re_text = re.findall(r'[\u4E00-\u9FA5]+',text)
                                    if re_text:
                                        for x in re_text:
                                            #print(a)
                                            time.sleep(2)
                                            data = self.translate(x, lan)
                                            if data != None:
                                                new_text = re.sub(x, data, new_text, count=1)
                                        print("翻译前的语言:" + text + " 翻译后的语言:" + new_text)
                                        self.ws.cell(row=i, column=y, value=new_text)
                                    else:
                                        print("发现有不是中文的情况!sheet:{} 第{}行 第{}列 内容{}".format(a, i, 2, text))
            print("检查完毕,没有需要翻译的!")
        except Exception as e:
            print(e)
            pass
        finally:
            print("检查完毕,没有需要翻译的!")
            if wb.save(excel_path + r"\\语言总表_Language.xlsx"):
                print("保存完毕")

    def translate(self, text, lan):
        if lan == "繁體":
            time.sleep(1)
            sentence = ts.google(text, to_language='zh-TW', if_use_cn_host=True, sleep_seconds=1.0)
            if sentence:
                return sentence
        if lan == "繁体":
            time.sleep(1)
            sentence = ts.google(text, to_language='zh-TW', if_use_cn_host=True, sleep_seconds=1.0)
            if sentence:
                return sentence
        if lan == "英文":
            time.sleep(1)
            sentence = ts.google(text, if_use_cn_host=True, sleep_seconds=1.0)
            if sentence:
                return sentence
        if lan == "泰文":
            time.sleep(1)
            sentence = ts.google(text, to_language='th', if_use_cn_host=True, sleep_seconds=1.0)
            if sentence:
                return sentence
        if lan == "印尼文":
            time.sleep(1)
            sentence = ts.google(text, to_language='id', if_use_cn_host=True, sleep_seconds=1.0)
            if sentence:
                return sentence
        if lan == "越南语":
            time.sleep(1)
            sentence = ts.google(text, to_language='vi', if_use_cn_host=True, sleep_seconds=1.0)
            if sentence:
                return sentence

if __name__ == '__main__':
    excel_path = os.path.abspath("数据表")
    sFileName = ""
    no_list = [
        "语言总表附录",
        "LanguageType",
        "逐行编辑公告专用",
        "游戏专业术语表",
    ]
    language = [
        "简体中文",
        "繁體",
        "繁体",
        "英文",
        "泰文",
        "印尼文",
        "越南语",
    ]
    s = Translate(excel_path, sFileName, no_list, language)
    s.run()

 

posted @ 2021-03-22 21:42  黑羽青衣  阅读(124)  评论(0编辑  收藏  举报