开发-Python之中翻英

1. 背景

       由于国际化项目需要,部分主数据信息需要支持英文名称显示,虽然页面做了可编辑主数据信息的英文字段信息,但由于历史数据很多,就想着能不能通过Python的一些功能插件实现中文字段翻译英文字段。

2. 采坑

  •  一开始通过HTTP请求的方式调有道翻译(网上很多这样的例子),但是调用过多后,直接被拉进黑名单。

TODO: 如何不会被识别出被拉黑

  • Python有一个插件叫translator,这个也不能使用太多次,不然会抛出错误告诉你今天不能再使用翻译功能了(MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN  06 HOURS 45 MINUTES 18 SECONDSVISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE)。不是很理解本次插件为什么也要限制次数,难道底层还是调用了一些开源的翻译网站吗
  • 在导入translator包的时候,本地IDEA无法安装这模块,因此去官网下载了该插件,想执行本地安装,但是本地执行安装的时候,又报错了,提示无法用gbk编码方式解码(UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 51: illegal multibyte sequence)。解决方法见参考资料

å¨è¿éæå¥å¾çæè¿°
 

3. Pyhon如何本地安装-Windows

主要还是去插件的官网下载插件,解压后到子目录再使用该方法:python setup.py install。方法千万种,用这个感觉最舒适

4. Translator插件使用

# 导包区域
import pymysql as pymysql
from translate import Translator


# 我定义了一个类
class District(object):
    def __init__(self, id, name, en_name):
        self.id = None
        self.name = name
        self.en_name = en_name

    def generate(self):
        return [self.pid, self.name, self.en_name]

# 连接数据库,执行sql语句的
def connect_mysql(db, sql, data):
    cursor = db.cursor()
    try:
        result = None
        if data:
            if isinstance(data[0], list):
                cursor.executemany(sql, data)
            else:
                cursor.execute(sql, data)
        else:
            cursor.execute(sql)
            result = cursor.fetchall()
    except Exception as e:
        print(e)
        db.rollback()
    finally:
        cursor.close()
        # 提交操作
        db.commit()
        return result

# 查询操作
def get_district(db):
    sql = "select id, name from a where en_name = '' or en_name is null"
    res = connect_mysql(db, sql, None)
    # 定义数组,一开始不会用
    disList = []
    # 遍历数组,有两种方式,一种是下标,一种是对象,可以见下面update_en_name_of_district方法
    for i in range(0, len(res)):
        d = District(None, None, None)
        d.id = res[i][0]
        d.name = res[i][1]
        # 数组添加元素方法
        disList.append(d)
    return disList


def update_en_name_of_district(districtList):
    sql = "update a set en_name = %s where id = %s"
    translator = Translator(from_lang="chinese",to_lang="english")
    for i in districtList:
        print("Start")
        # 这个就是翻译方法了
        en_name = translator.translate(i.name)
        print("End")
        res = connect_mysql(db, sql, [en_name, i.id])
        print(i.name)


if __name__ == '__main__':
    # mysql连接
    db = pymysql.connect("127.0.0.1", "root", "123456", "local", charset="utf8mb4")
    country_dist = get_district(db)
    update_en_name_of_district(country_dist)
    print("结束")

 

参考资料:

python安装第三方库报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 51: illegal multiby

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值