Python 尝试用Google translate API翻译不一致消息的结果只是组成输入的字母列表
Edit4:进一步回顾,如果我用JP发送文本并将其翻译成EN,它会起作用。我现在相信它返回的字符串是UTF-8字节序列。我现在想弄清楚如何把它转换回实际的角色Python 尝试用Google translate API翻译不一致消息的结果只是组成输入的字母列表,python,utf-8,discord.py,google-translate,google-translation-api,Python,Utf 8,Discord.py,Google Translate,Google Translation Api,Edit4:进一步回顾,如果我用JP发送文本并将其翻译成EN,它会起作用。我现在相信它返回的字符串是UTF-8字节序列。我现在想弄清楚如何把它转换回实际的角色 Translation:translated_text: "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257" 编辑3:添加了一个wait asyncio.sleep(3)行,如果我用英语翻译西班牙语,它似乎已经解决了这个问题,因为它正确地将“Hello”翻译成“H
Translation:translated_text: "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"
编辑3:添加了一个wait asyncio.sleep(3)行,如果我用英语翻译西班牙语,它似乎已经解决了这个问题,因为它正确地将“Hello”翻译成“Hola”,但英语到日语仍然有一个奇怪的行。我猜这和非罗马字符有关
Translation:translated_text: "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"
编辑2:我想这可能与日本人不使用罗马字母有关。将语言更改为西班牙语(ISO代码:es)仍然会出现错误
Translation:translated_text: "H"
Translation:translated_text: "mi"
Translation:translated_text: "l"
Translation:translated_text: "l"
Translation:translated_text: "o"
Translation:translated_text: "\302\240"
Translation:translated_text: "W"
Translation:translated_text: "o"
Translation:translated_text: "r"
Translation:translated_text: "l"
Translation:translated_text: "re"
编辑:这不起作用。仍然收到相同的答复。我可能已经解决了这个问题。不过,在下班之前我不能测试它。在API示例中,我注意到一行没有包括在内。所以我认为这可能是它返回奇怪结果的原因
for translation in response.translations:
我一直在尝试在我的discord机器人中添加一个翻译以短语开头的消息的工具!使用谷歌的翻译API将英语翻译成日语。我得到的不是翻译后的结果,而是组成输入的字符的细分。提前感谢您的帮助
最初的尝试是翻译不和谐的信息。这段代码还切掉了!字符串开头的trans标记
entrans = message.content[6:]
起初,我认为问题在于不一致消息的格式。因此,我试图通过删除该部分并简单地将阶段转换为“Hello”来隔离该问题
当这也不起作用时,我想这可能是翻译模型的问题。因此,我认为设置模型可能会有所帮助,但它仍然按字母分解了我的翻译结果,唯一的区别是它在所用模型的每个字母后面列出了一行。在这个例子中,L所在的位置,只列出了一些数字
translations {
translated_text: "H"
model: "projects/Unique Project ID/locations/global/models/general/base"
}
translations {
translated_text: "E"
model: "projects/Unique Project ID/locations/global/models/general/base"
}
translations {
translated_text: "\343\203\252\343\203\203\343\203\210\343\203\253"
model: "projects/Unique Project ID/locations/global/models/general/base"
}
translations {
translated_text: "\343\203\252\343\203\203\343\203\210\343\203\253"
model: "projects/Unique Project ID/locations/global/models/general/base"
}
translations {
translated_text: "O"
model: "projects/Unique Project ID/locations/global/models/general/base"
}
下面列出了我初次尝试的代码
import discord
import os
from google.cloud import translate_v3beta1 as translate
gclient = translate.TranslationServiceClient()
client = discord.Client()
location = 'global'
parent = gclient.location_path("My Project ID here",location)
@client.event
async def on_message(message):
if message.content.startswith('!trans'):
entrans = message.content[6:]
jtranresult = gclient.translate_text(
parent=parent,
contents=entrans,
mime_type='text/plain',
source_language_code='en',
target_language_code='ja',
)
print(f"Translation:{jtranresult}")
我希望结果是“こんにちは" 或者类似的日语
相反,我收到了以下我的结果
结果:
translations {
translated_text: "\302\240"
}
translations {
translated_text: "H"
}
translations {
translated_text: "e"
}
translations {
translated_text: "l"
}
translations {
translated_text: "l"
}
translations {
translated_text: "o"
首先,。如果您提供字符串作为内容
,那么它将被分离到列表中
第二:translate\u text
方法返回。要从中获取翻译,我想,您需要从TranslateTextResponse.translations
我猜你的代码一定是这样的:
导入不一致
导入操作系统
从google.cloud导入translate_v3beta1作为translate
gclient=translate.TranslationServiceClient()
client=discord.client()
位置='全局'
parent=gclient.location\u路径(“此处为我的项目ID”,位置)
@客户端事件
异步def on_消息(消息):
如果message.content.startswith(“!trans”):
entrans=message.content[6:]
jtranresult=gclient.translate\u文本(
父=父,
内容=[entrans],
mime_type='text/plain',
源语言代码='en',
目标语言代码='ja'
)
打印(f“Translation:{jtransult.translations[0].translated_text}”)
另外,我建议使用带有命令的bot
导入操作系统#未使用的导入?
从functools导入部分
从discord.ext导入命令
从google.cloud导入translate_v3beta1作为translate
项目ID=“”
gclient=translate.TranslationServiceClient()
bot=commands.bot(命令前缀=“!”)
location=“global”
父项=gclient.location\u路径(项目ID,位置)
@bot.command()
异步def传输(
ctx,*,文本:str
): # https://discordpy.readthedocs.io/en/v1.2.3/ext/commands/commands.html#keyword-只有论点
“翻译命令”将用作!帮助中的说明
jtranresult=bot.loop.run_in_执行器(
没有一个
局部的(
gclient.translate_文本,
父=父,
contents=[文本],
mime_type=“text/plain”,
source_language_code=“en”,
目标语言代码=“ja”,
),
)
#当translate_text func处于活动状态时,run_in_executor将防止bot“冻结”,因为它不是异步的
等待ctx.send(f“Translation:{jtransult.translations[0].translated_text}”)