Plugin LibreTranslate -- Traduzione Gratuita e Open Source API

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 Mi Piace

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 Mi Piace

Ho provato a configurarlo ma nell’ultimo passaggio (ottenere una traduzione) fallisco con il seguente messaggio di errore:

`Si è verificato un errore: #<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

Ho configurato un container Docker con docker run -d --restart unless-stopped -ti -p 5000:5000 --name="libretranslate" libretranslate/libretranslate che mi sembrava andasse bene secondo la documentazione e ho impostato translator libretranslate endpoint su http://172.17.0.1:5000 (l’IP è l’IP dell’host Docker).

Secondo il messaggio di errore, Discourse è in grado di connettersi a LibreTranslate ma qualcosa non funziona.

Qualche idea?

È risolto :slight_smile: : Problem with LibreTranslate as Docker for Discourse - #3 by pierotofy - LibreTranslate API - LibreTranslate Community

Devi aggiornare all’ultima versione di Github del plugin Discourse.

2 Mi Piace

@Roi potresti per favore chiarire come è configurato questo. Sono confuso. Ho trovato il mio IP del container Docker usando sudo docker inspect libretranslate

Dal tuo post collegato, l’endpoint API è trattato come:

http://dockerip:5000

senza bisogno di una chiave API? Sto eseguendo libretranslate in un container insieme a Discourse. Grazie!

@sunjam sì, uso:

http://172.17.0.1:5000/

Dove 172.17.0.1 è l’IP del container Docker di Libretranslate.

E non uso una chiave API.

2 Mi Piace

@Roi Grazie, sembra questo il comando di esecuzione:

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

In qualche modo 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

Segnalazione anche a Libretranslate qui, ma sto riscontrando un errore e un avviso quando tento di utilizzare Libretranslate con le app Multilingual e 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 Mi Piace

Continuo a testare il plugin Libretranslate con le istanze gratuite che raccomandano. Vedo questo errore in tests-passed

[details="Eccezione del job: {"error"=\u003e"Richiesta non valida: parametro q mancante"} "]

Messaggio (2 copie segnalate)
Eccezione del job: {"error"=>"Richiesta non valida: parametro q mancante"}


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]