【问题标题】:Googletrans Error- The handshake operation timed outGoogletrans 错误 - 握手操作超时
【发布时间】:2021-02-25 06:12:47
【问题描述】:

当我尝试使用 googletrans 模块翻译文本时,出现错误:

httpcore._exceptions.ConnectTimeout: _ssl.c:1106: The handshake operation timed out

这是我的代码:

from tkinter import *
from googletrans import Translator , LANGUAGES

root = Tk()
root.geometry("500x500")

def translate():
    translator = Translator()
    translated_text = translator.translate(text=entry.get(),
                                           dest=languages_listbox.get(languages_listbox.curselection())) # Text does not get get translated and it throws an error
    output_label.config(text = f"Translated Text: {translated_text}")

entry = Entry(root , font = "consolas 14")
entry.place(x = 120 , y = 0)

entry.insert(0 , "Hello world")

languages_list = []

for key, value in LANGUAGES.items():
    languages_list.append(value)

languages_listbox_frame = Frame(root)
languages_listbox_frame.place(x = 120 , y = 50)

languages_listbox = Listbox(languages_listbox_frame , font = "calibri 14")
languages_listbox.grid(row = 0 , column = 0)

scrollbar = Scrollbar(languages_listbox_frame , orient = VERTICAL , command = languages_listbox.yview)
scrollbar.grid(row = 0 , column = 1 , sticky = N+S+E+W)

languages_listbox.config(yscrollcommand = scrollbar.set)

for language in languages_list:
    languages_listbox.insert(END , language)

languages_listbox.select_set(0)

translate_button = Button(root , text = "Translate" , font = "comicsansms 18 bold" , command = translate)
translate_button.place(x = 160 , y = 370)

output_label = Label(root , text = "Translated Text: " , font = "comicsansms 16 bold")
output_label.place(x = 5 , y = 460)

mainloop()

我的代码很简单,我不知道它有什么问题。

我尝试更改网络连接,但没有任何区别。

有没有办法解决这个问题?

如果有人能帮助我,那就太好了。

【问题讨论】:

  • 好像你对API的请求太多了,它已经屏蔽了你的IP地址。
  • 看来 tkinter 与问题完全无关。我建议您创建一个minimal reproducible example,它只具有对翻译器的调用以及输入的硬编码值。在尝试让它在 GUI 中工作之前先让它工作。
  • @CoolCloud:如果我发出太多请求,它会阻止我的 IP 地址,是否有任何其他模块或库可以用来翻译文本?

标签: python tkinter google-translation-api


【解决方案1】:

这看起来很像一个 API 错误,因为当您发送太多请求时,谷歌不喜欢,我也无法关闭这个问题,因为答案 there 不是一个被接受的答案,无论如何这里是使用 @987654323 的替代方案@。

  • 从安装开始:
pip install deep-translator
  • 现在我建议您在它的docs 上逛一逛,但无论如何我还是要包含一个使用 Google 翻译的示例。首先导入它:
from deep_translator import GoogleTranslator
  • 现在创建它的初始实例,以获取语言映射。
translator = GoogleTranslator(target='en')

languages_list = []
lang_map = translator.get_supported_languages(as_dict=True) # Get in form of dict

for key, value in lang_map.items():
    languages_list.append(key.title()) # Making first letter capital with title()
  • 现在对于翻译部分,将您的函数更改为以下内容:
def translate():
    lang = lang_map[languages_listbox.get(languages_listbox.curselection()[0]).lower()] # Get the corresponding language code from the dictionary    
    translator = GoogleTranslator(source='en',target=lang) # Create new instance with selected language
    translated_text = translator.translate(entry.get()) # Translate
    
    output_label.config(text = f"Translated Text: {translated_text}") # Update the text

是的,每次运行函数时都创建一个新实例不是一个好主意,但是一旦初始设置目标语言,我就找不到另一种成功的方法来更改目标语言。到目前为止,它似乎没有给出任何错误,除非您的 sourcetarget 语言都是相同的。

附带说明,最好使用threading,因为有时 API 可能需要一些时间来响应并且会冻结 GUI。

【讨论】:

  • 感谢您的回答,但我遇到了deep_translator 的一个问题;所以你能帮帮我吗?问题是,翻译不适用于所有语言。例如,如果我尝试将字符串 'Hello, how are you?' 翻译为 Irish 语言,输出是相同的,并且文本没有正确翻译。
  • @Lenovo360 好吧,我不确定,直到你问这个问题,我才知道deep_translator。我做了一些研究并发现了它并开始使用它来适应你的代码。我还尝试了其他一些库,但没有一个有效。我不知道它为什么会这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2021-04-19
  • 2018-06-29
  • 2018-10-16
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
相关资源
最近更新 更多