如何修复Python Discord谷歌翻译命令invalid destination language错误
问题核心
开发Discord机器人谷歌翻译指令时,调用googletrans库抛出ValueError: invalid destination language错误,报错指向翻译接口传入的目标语言参数无效。
排查思路
按优先级从高到低排查以下问题点:
- 检查传入的
lang参数格式:googletrans默认仅识别ISO 639-1标准的双字母语言代码(如中文为zh、英文为en),直接传入完整语言名称(如chinese、中文)会直接判定为无效。 - 检查googletrans安装版本:PyPI源默认提供的3.0.0正式版本已因谷歌翻译接口升级完全失效,内置语言码表缺失、接口签名过期,哪怕传入正确语言码也会抛出无效语言错误。
- 检查命令参数匹配逻辑:当前代码将用户输入的第一个空格前内容作为目标语言参数,如果用户输入时把待翻译内容放在前面、语言码放在后面,会导致
lang拿到非语言码的文本,触发报错。 - 检查参数是否带多余字符:如果用户输入语言码时附带了标点、特殊符号,也会导致匹配失败。
修复方案
- 先重装可用的googletrans版本,执行以下命令:
pip uninstall googletrans -y pip install googletrans==4.0.0-rc1
- 替换原有翻译功能代码,增加语言别名兼容、参数校验逻辑,修复后代码如下:
from googletrans import Translator, LANGUAGES # 配置常用语言别名,兼容用户输入中文/英文全称的使用习惯 LANG_ALIAS = { "中文": "zh", "汉语": "zh", "chinese": "zh", "英文": "en", "英语": "en", "english": "en", "日语": "ja", "日文": "ja", "japanese": "ja", "韩语": "ko", "韩文": "ko", "korean": "ko", "法语": "fr", "french": "fr", "德语": "de", "german": "de", "俄语": "ru", "russian": "ru" } @bot.command() async def translate(ctx, lang, *, thing): # 统一转小写处理,匹配别名表 input_lang = lang.lower() target_lang = LANG_ALIAS.get(input_lang, input_lang) # 提前校验语言有效性,避免直接抛出底层错误 if target_lang not in LANGUAGES: await ctx.send("目标语言无效,请使用双字母语言码(如zh=中文、en=英文)或常用语言名,示例:`!translate en 你好世界`") return translator = Translator(service_urls=['translate.googleapis.com']) translation = translator.translate(thing, dest=target_lang) await ctx.send(f"翻译结果:\n{translation.text}")
- 统一机器人命令调用格式,告知用户使用方式为
[命令前缀]translate <目标语言> <待翻译内容>,例如!translate zh Hello World。
补充说明
如果后续使用中出现连接超时、接口返回错误的问题,可在初始化Translator时替换可用的谷歌翻译服务地址,或适当增加请求超时时间。
内容的提问来源于stack exchange,提问作者xBoli232
相关产品推荐
相关产品推荐

