仓库:MuZiCul/MTS(原创)· 语言:Python (Flask + LayUI) · 定位:基于百度翻译 API 的 14 语种翻译 Web 系统
基于 Flask 和 LayUI 的机器翻译 Web 系统,支持文本翻译和图片翻译,具备完整的日志记录与监控能力。
app.py 中的 Translator)支持 14 种语言:
self.languages = {
'自动检测': 'auto', '中文': 'zh', '英语': 'en', '日语': 'jp', '韩语': 'kor',
'法语': 'fra', '德语': 'de', '俄语': 'ru', '西班牙语': 'spa', '意大利语': 'it',
'葡萄牙语': 'pt', '越南语': 'vie', '泰语': 'th', '阿拉伯语': 'ara',
}
def detect_language(self, text):
"""使用百度翻译语种识别API"""
url = "https://fanyi-api.baidu.com/api/trans/vip/language"
salt = str(random.randint(32768, 65536))
sign = self.appid + text + salt + self.secret_key
sign = hashlib.md5(sign.encode()).hexdigest()
params = {'q': text, 'appid': self.appid, 'salt': salt, 'sign': sign}
response = requests.post(url, data=params)
result = response.json()
if 'error_code' in result and str(result['error_code']) != '0':
return 'auto' # 识别失败降级为自动
return result.get('data', {}).get('src', 'auto')
用的是百度标准版
api/trans/vip/translate接口(非api/trans/vip/fieldtranslate垂直领域版)。
salt = str(random.randint(32768, 65536)) # 随机数
sign = appid + text + salt + secret_key # 拼接
sign = hashlib.md5(sign.encode()).hexdigest() # MD5
def translate(self, text, to_lang, from_lang='auto'):
lines = text.split('\n') # 按行拆分
translated_lines = []
if from_lang == 'auto':
from_lang = self.detect_language(text) # 先识别语种
# 逐行翻译,保持原有换行格式
这个细节很实用——保留原文的换行结构,翻译长文本时格式不丢。
系统实现了双层日志:
file_handler = RotatingFileHandler('logs/app.log', maxBytes=1024*1024, backupCount=10)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
))
单文件 1MB,保留 10 个备份,含文件名与行号(便于定位)。
def log_system(level, module, message, details=None):
log = SystemLog(
level=level, module=module, message=message, details=details,
ip_address=request.remote_addr, # 记录来源 IP
user_agent=request.user_agent.string # 记录 UA
)
db.session.add(log)
try:
db.session.commit()
except Exception as e:
db.session.rollback() # 失败回滚,不影响主流程
数据库模型:TranslationLog(翻译历史)、SystemLog(系统日志)。
sqlite:///translations.db)db.create_all() 在应用上下文自动建表这是一个包装第三方翻译 API 的 Web 服务,几点说明:
language 接口识别,再调 translate 接口,比直接 auto 更可控rollback(),绝不拖垮主流程想研究怎么把第三方 API 包成 Web 服务,这个项目可以对照。