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

Continuing the discussion from Discourse Translator:

LibreTranslate - Github project page
Project discussion at https://community.libretranslate.com/

Free and Open Source Machine Translation API. 100% self-hosted, offline capable and easy to setup. Powered by the open source Argos Translate

Discourse Installation

copy-pasted from the Github readme

You can use this discourse translator plugin to translate Discourse topics. To install it simply modify /var/discourse/containers/app.yml :

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
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
	  ...

Then issue ./launcher rebuild app . From the Discourse’s admin panel then select “LibreTranslate” as a translation provider and set the relevant endpoint configurations.

6 Me gusta

I’m not the author, but just discovered this amazing plugin. Afaik no one has mentioned it on the forum. This will need to be turned into a plugin topic and hopefully we can get the dev on this chat… unless I’m totally missing where this plugin is already listed in 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]