Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试用Google translate API翻译不一致消息的结果只是组成输入的字母列表_Python_Utf 8_Discord.py_Google Translate_Google Translation Api - Fatal编程技术网

Python 尝试用Google translate API翻译不一致消息的结果只是组成输入的字母列表

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

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”翻译成“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}”)