Jump to content
Sign in to follow this  
caanmasu

[BETA] Traducir textos automáticamente con Google Translate

Recommended Posts

Hola!

 

Bueno luego de haber alcanzado los 500 puntos gracias a ustedes, he elaborado una versión experimental para traducir cualquier cosa desde Google Translate automáticamente.

Seguro me preguntarán: para eso copio línea por línea y la pego en la página de Google Translate.

Seguro es lo primero que llegaste a pensar pero son muchas líneas ya que muchos files traen muchos sistemas y están en turco. Tardarías mucho tiempo traduciendo e interpretando el contexto ya que la traducción de turco a español muchas veces no se entiende lo que quiere decir.

 

El Google Translate es el mismo traductor de Google. Google vende este servicio, pero sabemos que no lo vamos a comprar. Así que hay personas que crean códigos abiertos y de alguna forma crean su propia api para Google Translate y la comparte. Por si ya lo entendiste, estaré usando una api de Google pirata.

 

Al menos en mi pc cada segundo puede traducir 5 frases sencillas de un reglón y es automático. Esto es mucho mejor que copiar y pegar línea por línea en la página del traductor.

 

Si recuerdan mi post del programa para traducir locale_string.txt

 

(pinche vato el que le puso 💩 a mi publicación)

Aquí uso este mismo programa para reemplazar las líneas que ya están traducidas.

 

Luego las líneas que no se reemplazaron son las que se van a traducir por el Google Translate.

 

Voy a nombrar algunas desventajas, que no todo es color de rosas, además que este programa es básico, le falta mejorar algunas cosas:

- La codificación me funcionaba bien, pero luego de un cambio ahora no detecta bien algunos caracteres, y esto afecta la traducción.

- Cuando se traducen variables (%d, %u, %s, %lld, etc), la frase traducida separa el % de la letra, es decir, si era "%s" queda "% S". Y a veces se pega a la palabra de al lado. Mejor dicho, hay que procesar un poco las frases traducidas.

- Hay algunas palabras que se traducen en turco a español que no tienen ningún sentido y necesariamente hay que revisarlas manualmente. Esto no es problema de la api sino que ocurre en la misma página del traductor de Google.

 

Voy a mostrarte algunas capturas

image.png

Aquí dice que hay 63 líneas para traducir. La línea original es la de arriba, y fíjate que hay signos de interrogación; ahí hay caracteres turcos que antes me los leía y ya no. :c 

Mira que el texto nuevo no tiene sentido. Antes sí lo tenía xD

Debes iniciar sesión para ver el contenido del archivo adjunto en esta publicación.

Antes tenía sentido esto. Pero bueno, lo que quiero mostrar acá es que hay problemas de codificación desde el texto original y eso no se traduce; también las variables, ejemplo, la "%d" se separa "% d" y se pega a la palabra anterior. También donde dice mafia ahí va mob.

image.png

Hay frases bien traducidas.

 

 

Esto es una versión experimental como puse arriba. No está lista para usar y listo. Requiere que venga alguien y lo mejore. Y ver si en verdad es útil porque puede que no, y sea mejor traducir a mano.

 

Adjunto código de Python

from googletrans import Translator

def getArrayFile(path):
    content = []
    with open(path) as f:
        line = f.readline()
        content.append(line)
        while line:
            line = f.readline()
            content.append(line)
    while content[len(content)-1] == "":
        content.pop(len(content)-1)
    f.close()
    return content

def translateFile(array_lines):
    translator = Translator() 
    count = 1
    for i in array_lines:
        print(str(i)+": locale_string_content: "+locale_string_content[i])
        new_text = translator.translate(locale_string_content[i], dest='es')
        print("new_text: "+new_text.text)
        locale_string_content[i] = new_text.text+"\n"
        print(str(count)+"/"+str(len(array_lines)))
        print("\n")
        count = count + 1

def getLinesTrans():

    array_lines = []
    for i in range(0, len(locale_string_content), 3):
        founded = False
        for j in range(0, len(other_file_content), 3):
            if locale_string_content[i] == other_file_content[j]:
                founded = True
        if not founded:
            array_lines.append(i+1)

    return array_lines

print("You should have your locale_string within this directory")
print("Type name file translated locale_string.txt (ex. locale_string_es.txt)")
other_file = "locale_string_es.txt" #input()

locale_string_content = getArrayFile("locale_string.txt")
other_file_content = getArrayFile(other_file)

def CheckFile():
    error = False
    for i in range(0, len(locale_string_content), 3):
        if ord(locale_string_content[i][0]) == 10:
            print("Error en la línea "+str(i)+" o cercano del archivo locale_string.txt")
            print("Debes eliminar la línea")
            error = True
            break
    for i in range(0, len(other_file_content), 3):
        if ord(locale_string_content[i][0]) == 10:
            print("Error en la línea "+str(i)+" o cercano del archivo "+other_file)
            print("Debes eliminar la línea")
            error = True
            break
    return error

if not CheckFile():
    for i in range(0, len(other_file_content), 3):
        for j in range(0, len(locale_string_content), 3):
            if other_file_content[i] == locale_string_content[j]:
                locale_string_content[j+1] = other_file_content[i+1]

    lines_translate = getLinesTrans()
    translateFile(lines_translate)


    with open('new_locale_string.txt', 'w') as f:
        for i in locale_string_content:
            f.write(i)

    print("New file: new_locale_string.txt")

 

Requisito: debes tener Python 3+

También debes instalar la api poniendo en el cmd esto:

pip install googletrans==4.0.0-rc1

 

Debes tener tu archivo locale_string.txt para traducir, y también el archivo locale_string_xx.txt que ya está traducido.

Funciona como el programa que subí la vez pasada, solo que las líneas que no se encontraron en el otro archivo se van a traducir con la api y ya.

 

Si estás perdido, tranquilo, esto es para developers pero también puedes ser curioso xD

 

Saludos!

Share this post


Link to post
Share on other sites

No veas lo útil que es esto, con el tiempo que tarde yo a traducir unos files turcos a mano t.t 

para el tema de la codificación probaste de añadir encoding='cp1252' en la función open? algo así open(path, encoding='cp1252')

según la documentación de Python esto debería funcionar aun que yo no he trabajado nunca con Python.

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

Y por el tema de las variables podrías solucionar las mas típicas con un replace() haciendo algo así:

lines_translate.replace("% D", "%d").replace("% U", "%U").replace("% S", "%S").replace("% Lld", "%lld")

O si el locale_string no es Keysensitive simplemente así:

lines_translate.replace("% ", "%")

si fuera otro lenguaje podría intentar hacer algo mas complejo pero como dije no he trabajado nunca con Python y lo tendría que buscar. 

Share this post


Link to post
Share on other sites
hace 1 hora, guba dijo:

No veas lo útil que es esto, con el tiempo que tarde yo a traducir unos files turcos a mano t.t 

para el tema de la codificación probaste de añadir encoding='cp1252' en la función open? algo así open(path, encoding='cp1252')

según la documentación de Python esto debería funcionar aun que yo no he trabajado nunca con Python.

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

Y por el tema de las variables podrías solucionar las mas típicas con un replace() haciendo algo así:

lines_translate.replace("% D", "%d").replace("% U", "%U").replace("% S", "%S").replace("% Lld", "%lld")

O si el locale_string no es Keysensitive simplemente así:

lines_translate.replace("% ", "%")

si fuera otro lenguaje podría intentar hacer algo mas complejo pero como dije no he trabajado nunca con Python y lo tendría que buscar. 

Claro que lo intenté pero siguió igual. Antes me funcionaba pero ni idea de qué pasó xD

Uff lo del reemplazo no es así nada más, te explico:

Hay textos así "texto %d texto" y la traducción queda así "texto% D texto"

"%s texto" -> "% S texto"

"%u texto" -> "% u texto"

"texto %lld" -> "texto % Lld"

etc

y son muchas variables, como u, s, d, ld, lld, lu, etc.

 

 

Share this post


Link to post
Share on other sites
En 27/8/2021 a las 16:54, caanmasu dijo:

Claro que lo intenté pero siguió igual. Antes me funcionaba pero ni idea de qué pasó xD

Uff lo del reemplazo no es así nada más, te explico:

Hay textos así "texto %d texto" y la traducción queda así "texto% D texto"

"%s texto" -> "% S texto"

"%u texto" -> "% u texto"

"texto %lld" -> "texto % Lld"

etc

y son muchas variables, como u, s, d, ld, lld, lu, etc.

 

 

jm, cuando termine la web en que estoi trabajando ya lo provare a ver si consigo mejorar esas dos cosas que me estava planteando de traducir unos files al catalan y no lo hacia por el trabajo que lleva xd

Share this post


Link to post
Share on other sites

Tengo pensado traducir el locale_string.txt de unos files turcos que tienen todos los sistemas y luego dejarlo público para que luego usen el programa anterior de comparar y ya, se traduce todo.

El trabajo es traducirlos pero si guba se le mide a hacerlo está bien xD

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...