LibreTranslate Plugin -- Kostenlose und Open-Source-Übersetzungs-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 „Gefällt mir“

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 „Gefällt mir“

Ich habe versucht, dies einzurichten, aber im letzten Schritt (Übersetzung erhalten) erhalte ich die folgende Fehlermeldung:

Ein Fehler ist aufgetreten: #<Excon::Response:0x00007f25419e6818 @data={:body=>"<!doctype html>\n<html>\n<title>405 Method Not Allowed</title>\n<h1>Method Not Allowed</h1>\n<p>The method is not allowed for the requested URL.</p>\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="<!doctype html>\n<html>\n<title>405 Method Not Allowed</title>\n<h1>Method Not Allowed</h1>\n<p>The method is not allowed for the requested URL.</p>\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">

Ich habe einen Docker-Container mit docker run -d --restart unless-stopped -ti -p 5000:5000 --name="libretranslate" libretranslate/libretranslate eingerichtet, was laut Dokumentation für mich in Ordnung zu sein schien, und translator libretranslate endpoint auf http://172.17.0.1:5000 gesetzt (die IP ist die IP des Docker-Hosts).

Laut Fehlermeldung kann Discourse auch eine Verbindung zu LibreTranslate herstellen, aber etwas funktioniert nicht.

Irgendwelche Ideen?

Es ist gelöst :slight_smile: : Problem with LibreTranslate as Docker for Discourse - #3 by pierotofy - LibreTranslate API - LibreTranslate Community

Sie müssen auf die neueste Github-Version des Discourse-Plugins aktualisieren.

2 „Gefällt mir“

@Roi, könnten Sie bitte helfen zu klären, wie dies eingerichtet ist? Ich bin verwirrt. Ich habe die IP-Adresse meines Docker-Containers mit sudo docker inspect libretranslate gefunden.

Wird der API-Endpunkt aus Ihrem verlinkten Beitrag behandelt als:

http://dockerip:5000

ohne dass ein API-Schlüssel benötigt wird? Ich betreibe LibreTranslate in einem Container neben Discourse. Danke!

@sunjam ja, ich benutze:

http://172.17.0.1:5000/

Wobei 172.17.0.1 die IP des Libretranslate Docker-Containers ist.

Und ich benutze keinen API-Schlüssel.

2 „Gefällt mir“

@Roi Danke, das scheint Ihr Ausführungsbefehl zu sein:

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

Irgendwie ja:

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

Auch hier wird an Libretranslate berichtet, aber ich stoße auf einen Fehler und eine Warnung, wenn ich versuche, Libretranslate mit den Apps Multilingual und Translator zu verwenden.

Job-Ausnahme: connect_write Timeout erreicht
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"): zu lange gehalten, maximal erwartet: 60 Sek., zusätzliche Dauer: 1 Sek.”]

DistributedMutex("detect_translation_15"): zu lange gehalten, maximal erwartet: 60 Sek., zusätzliche Dauer: 1 Sek.

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 „Gefällt mir“

Weiterhin teste ich das Libretranslate-Plugin mit den empfohlenen kostenlosen Instanzen. Ich sehe diesen Fehler in Tests-bestanden

[details=“Job-Ausnahme: {"error"=\u003e"Ungültige Anfrage: fehlender q-Parameter"}”]

Nachricht (2 Kopien gemeldet)
Job-Ausnahme: {"error"=>"Ungültige Anfrage: fehlender q-Parameter"}


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]