O Google Translate é um serviço de tradução multilíngue gratuito, baseado em tradução automática estatística e neural, desenvolvido pelo Google. É amplamente utilizado para traduzir sites ou páginas da web completos de um idioma para outro. 

Estaremos criando um aplicativo de terminal Python que pegará o idioma de origem, o idioma de destino, uma frase para traduzir e retornar o texto traduzido. Implementaremos testes de unidade e técnicas de web scraping com selenium em python. O scrapping da Web é um conceito de captura dos dados necessários de um site. Selenium é uma biblioteca de nível industrial usada para web scraping e teste de unidade de vários softwares. Como pré-requisito, solicitaremos que as seguintes ferramentas sejam instaladas em nosso sistema.

  • Python 3.x: uma versão de python 3.0 ou superior deve ser instalada.
  • Biblioteca Selenium: uma biblioteca python necessária para descartar os sites. Copie a seguinte instrução para instalar o selenium em seu sistema.
    Instalação: python3 -m pip install selenium
  • Webdriver: uma instância de um navegador da web exigido pelo selenium para abrir páginas da web. Baixe a versão mais recente do Chrome Webdriver no link abaixo e salve-o na mesma pasta em que está seu programa principal. 
    Link: https://chromedriver.chromium.org/downloads

Vamos dividir a seção de código em três partes:

  • Configurando a ferramenta webdriver selenium e cromo.
  • Obtendo entrada e testando para erros na entrada.
  • Traduzir usando o Google Translate.

Parte 1: Definindo a ferramenta de selenium e as configurações do webdriver.

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import JavascriptException 
from selenium.webdriver.chrome.options import Options as ChromeOptions 
chrome_op = ChromeOptions() 
chrome_op.add_argument('--headless') 
browser = webdriver.Chrome(executable_path ='chromedriver', options = chrome_op)
  • Importando objeto webdriver para se conectar à instância do navegador Chrome.
  • Importando a biblioteca de chaves para conectar os comandos básicos do teclado à instância do navegador.
  • Importando manipuladores de exceção para a instância do navegador.
  • Importe as opções do navegador e defina a propriedade '–headless' para executar a instância do navegador em segundo plano. Comente a instrução ”chrome_op.add_argument ('- headless')” para trazer o driver da web para os processos de primeiro plano.

Parte 2: Obtendo a entrada e testando na entrada.



def takeInput(): 
    languages = {"English": 'en', "French": 'fr', 
                 "Spanish": 'es', "German": 'de', "Italian": 'it'} 
  
    print("Select a source and target language (enter codes)") 
    print("Language", "   ", "Code") 
  
    for x in languages: 
        print(x, "   ", languages[x]) 
  
    print("\n\nSource: ", end ="") 
    src = input() 
    sflag = 0
  
    for x in languages: 
        if(languages[x] == src and not sflag): 
            sflag = 1
            break
    if(not sflag): 
        print("Source code not from the list, Exiting....") 
        exit() 
  
    print("Target: ", end ="") 
    trg = input() 
    tflag = 0
  
    for x in languages: 
        if(languages[x] == trg and not tflag): 
            tflag = 1
            break
  
    if(not tflag): 
        print("Target code not from the list, Exiting....") 
        exit() 
  
    if(src == trg): 
        print("Source and Target cannot be same, Exiting...") 
        exit() 
  
    print("Enter the phrase: ", end ="") 
    phrase = input() 
  
    return src, trg, phrase

Este é um código de demonstração para que o código dos idiomas seja limitado a {inglês, espanhol, alemão, italiano, francês}. Você pode adicionar mais idiomas e seus códigos posteriormente.

  • Recebendo entrada para o código do idioma de origem e do idioma de destino.
  • Verificar se os códigos inseridos são suportados ou não.
  • O idioma de origem e o código do idioma de destino não devem ser iguais. 

Parte 3: Traduzindo usando o Google Translate:

def makeCall(url, script, default): 
    response = default 
    try: 
        browser.get(url) 
        while(response == default): 
            response = browser.execute_script(script) 
  
    except JavascriptException: 
        print(JavascriptException.args) 
  
    except NoSuchElementException: 
        print(NoSuchElementException.args) 
  
    if(response != default): 
        return response 
    else: 
        return 'Not Available'
  
  
def googleTranslate(src, trg, phrase): 
    url = 'https://translate.google.co.in/# view = home&op = translate&sl =' + \ 
        src + '&tl =' + trg+'&text ='+phrase 
    script = 'return document.getElementsByClassName("tlid-translation")[0].textContent'
    return makeCall(url, script, None)
  • A função googleTranslate() recebe os três parâmetros, ou seja, código-fonte, código-alvo e frase. Ele gera a URL para o navegador solicitar. 
  • script contém uma instrução javascript que procura por um elemento HTML com class = “tlid-translation” e retorna seu conteúdo de texto.
  • A função makeCall() faz uma solicitação com a URL criada, executa o script quando a página da Web está pronta e retorna o texto buscado.

Combinando as três partes acima.

if __name__ == "__main__": 
    src, trg, phrase = takeInput() 
    print("\nResult: ", googleTranslate(src, trg, phrase))

Cole todas as partes mostradas acima em um único arquivo .py e execute-o usando Python3.

Execução: python3 <filename.py>

Resultado: 

Seção de entrada:



Se você comentou a declaração da propriedade '–headless', uma janela do navegador como a abaixo aparecerá:

O resultado aparecerá na janela do terminal como abaixo:

Nota: Este é um projeto de demonstração, portanto, os idiomas suportados são limitados. Você pode aumentar o suporte ao idioma adicionando mais códigos de idioma na declaração.