Plugin LibreTranslate -- API de traducción gratuita y de código abierto

Continuando la discusión desde Discourse Translator:

LibreTranslate - Página del proyecto en Github
Discusión del proyecto en https://community.libretranslate.com/

API de traducción automática gratuita y de código abierto. 100% autoalojada, capaz de funcionar sin conexión y fácil de configurar. Impulsada por Argos Translate de código abierto.

Instalación de Discourse

copiado y pegado desde el archivo README de Github

Puedes usar este plugin de traductor para Discourse para traducir temas de Discourse. Para instalarlo, simplemente modifica /var/discourse/containers/app.yml:

## Plugins van aquí
## ver https://meta.discourse.org/t/19157 para detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/LibreTranslate/discourse-translator
	  ...

Luego ejecuta ./launcher rebuild app. Desde el panel de administración de Discourse, selecciona “LibreTranslate” como proveedor de traducción y configura los puntos de conexión relevantes.

6 Me gusta

No soy el autor, pero acabo de descubrir este increíble complemento. Por lo que sé, nadie lo ha mencionado en el foro. Será necesario convertirlo en un tema de complemento y, con suerte, podremos conseguir que el desarrollador se una a este chat… a menos que esté pasando por alto dónde ya se lista este complemento en meta.*

2 Me gusta

Intenté configurar esto pero en el último paso (obtener una traducción) fallo con el siguiente mensaje de error:

`Ocurrió un error: #<Excon::Response:0x00007f25419e6818 @data={:body=>“\u003c!doctype html\u003e\n\u003chtml lang=en\u003e\n\u003ctitle\u003e405 Method Not Allowed\u003c/title\u003e\n\u003ch1\u003eMethod Not Allowed\u003c/h1\u003e\n\u003cp\u003eThe method is not allowed for the requested URL.\u003c/p\u003e\n”, :cookies=>, :host=>“172.17.0.1”, :headers=>{“Access-Control-Allow-Credentials”=>“true”, “Access-Control-Allow-Headers”=>“Authorization, Content-Type”, “Access-Control-Allow-Methods”=>“GET, POST”, “Access-Control-Allow-Origin”=>““, “Access-Control-Expose-Headers”=>“Authorization”, “Access-Control-Max-Age”=>“1728000”, “Allow”=>“HEAD, GET, OPTIONS”, “Content-Length”=>“153”, “Content-Type”=>“text/html; charset=utf-8”, “Date”=>“Sat, 17 Dec 2022 11:18:27 GMT”, “Server”=>“waitress”}, :path=>”//languages", :port=>5000, :status=>405, :status_line=>“HTTP/1.1 405 METHOD NOT ALLOWED\r\n”, :reason_phrase=>“METHOD NOT ALLOWED”, :remote_ip=>“172.17.0.1”, :local_port=>50848, :local_address=>“172.17.0.3”}, @body=“\u003c!doctype html\u003e\n\u003chtml lang=en\u003e\n\u003ctitle\u003e405 Method Not Allowed\u003c/title\u003e\n\u003ch1\u003eMethod Not Allowed\u003c/h1\u003e\n\u003cp\u003eThe method is not allowed for the requested URL.\u003c/p\u003e\n”, @headers={“Access-Control-Allow-Credentials”=>“true”, “Access-Control-Allow-Headers”=>“Authorization, Content-Type”, “Access-Control-Allow-Methods”=>“GET, POST”, “Access-Control-Allow-Origin”=>"”, “Access-Control-Expose-Headers”=>“Authorization”, “Access-Control-Max-Age”=>“1728000”, “Allow”=>“HEAD, GET, OPTIONS”, “Content-Length”=>“153”, “Content-Type”=>“text/html; charset=utf-8”, “Date”=>“Sat, 17 Dec 2022 11:18:27 GMT”, “Server”=>“waitress”}, @status=405, @remote_ip=“172.17.0.1”, @local_port=50848, @local_address=“172.17.0.3”>\n

Configuré un contenedor docker con docker run -d --restart unless-stopped -ti -p 5000:5000 --name=\"libretranslate\" libretranslate/libretranslate que parecía estar bien para mí según la documentación y configuré translator libretranslate endpoint a http://172.17.0.1:5000 (la IP es la IP del host de docker).

Según el mensaje de error, Discourse también puede conectarse a LibreTranslate, pero algo no funciona.

¿Alguna idea?

Está resuelto :slight_smile: : Problem with LibreTranslate as Docker for Discourse - #3 by pierotofy - LibreTranslate API - LibreTranslate Community

Necesitas actualizar a la última versión de Github del plugin de Discourse.

2 Me gusta

@Roi ¿podrías ayudar a aclarar cómo está configurado esto? Estoy confundido. Encontré la IP de mi contenedor de Docker usando sudo docker inspect libretranslate

Desde tu publicación enlazada, ¿el punto final de la API se trata como:

http://dockerip:5000

sin necesidad de clave API? Estoy ejecutando libretranslate en un contenedor junto con Discourse. ¡Gracias!

@sunjam sí, uso:

http://172.17.0.1:5000/

Donde 172.17.0.1 es la IP del contenedor Docker de Libretranslate.

Y no uso una clave API.

2 Me gusta

@Roi Gracias, parece que este es tu comando de ejecución:

docker run -d --restart unless-stopped -ti -p 5000:5000 --name="libretranslate" libretranslate/libretranslate

De alguna manera sí:

docker run -d --restart unless-stopped -ti -p 5000:5000 -e LT_LOAD_ONLY="en,de,fr,it,es,pt,nl,da,sv,pl,cs,ru" --name="libretranslate" libretranslate/libretranslate

También informo en Libretranslate aquí, pero estoy encontrando un error y una advertencia al intentar usar Libretranslate con las aplicaciones Multilingual y Translator.

Job exception: connect_write timeout reached
Backtrace

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:317:in `select_with_timeout'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:163:in `rescue in block in connect'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:144:in `block in connect'
/usr/local/lib/ruby/3.2.0/resolv.rb:111:in `each_address'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:134:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:51:in `initialize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/connection.rb:477:in `new'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/connection.rb:477:in `socket'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/connection.rb:121:in `request_call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/middlewares/mock.rb:57:in `request_call'

[details=“DistributedMutex("detect_translation_15"): held for too long, expected max: 60 secs, took an extra 1 secs”]

DistributedMutex("detect_translation_15"): held for too long, expected max: 60 secs, took an extra 1 secs

Backtrace

/var/www/discourse/lib/distributed_mutex.rb:103:in `warn'
/var/www/discourse/lib/distributed_mutex.rb:57:in `rescue in block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:64:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/plugins/discourse-translator/plugin.rb:98:in `execute'
/var/www/discourse/app/jobs/base.rb:292:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:279:in `block in perform'

[/details]

1 me gusta

Continuando a testar o plugin Libretranslate com as instâncias gratuitas que eles recomendam. Vendo este erro em testes-passados

[details=" Exceção do trabalho: {"error"=\u003e"Requisição inválida: parâmetro q ausente"} "]

Mensagem (2 cópias relatadas)
Exceção do trabalho: {"error"=>"Requisição inválida: parâmetro q ausente"}


Backtrace

/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:150:in `result'
/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:84:in `detect'
/var/www/discourse/plugins/discourse-translator/plugin.rb:99:in `block in execute'
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/plugins/discourse-translator/plugin.rb:98:in `execute'
/var/www/discourse/app/jobs/base.rb:292:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'

[/details]