Plugin LibreTranslate -- Traduzione Gratuita e Open Source API

Continuiamo la discussione da Discourse Translator:

LibreTranslate - Pagina del progetto su Github
Discussione del progetto su https://community.libretranslate.com/

API di traduzione automatica gratuita e open source. 100% auto-ospitata, funzionante offline e facile da configurare. Alimentata da Argos Translate, un progetto open source.

Installazione di Discourse

Copia e incollata dalla README di Github

Puoi utilizzare questo plugin Discourse Translator per tradurre i topic di Discourse. Per installarlo, modifica semplicemente /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
	  ...

Esegui quindi ./launcher rebuild app. Dal pannello di amministrazione di Discourse, seleziona “LibreTranslate” come fornitore di traduzioni e configura gli endpoint pertinenti.

Non sono l’autore, ma ho appena scoperto questo fantastico plugin. Per quanto ne so, nessuno ne ha parlato sul forum. Dovremo trasformarlo in un argomento dedicato al plugin e speriamo di riuscire a coinvolgere lo sviluppatore in questa chat… a meno che non mi stia perdendo il fatto che questo plugin sia già elencato in meta.*

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.

@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.

@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]

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]