Jeder Beitrag wird nur einmal pro Lokalisierung übersetzt, was Ihnen spart
Beachten Sie, dass die Spracherkennung ebenfalls nur einmal pro Beitrag ausgeführt wird. Seien Sie vorsichtig, wenn Sie dies in alten und großen Foren aktivieren.
Access Token wird serverseitig zwischengespeichert, um schnellere Übersetzungen zu ermöglichen.
Übersetzungen sind standardmäßig auf 3 pro Minute begrenzt (Administratoren können diesen Wert konfigurieren)
Folgen Sie den Schritten in Microsoft Translator API on Azure, um einen Abonnement-Schlüssel zu erhalten. Sie können aus einem der verfügbaren Abonnementangebote wählen.
Geben Sie in Ihrem Discourse unter Admin > Einstellungen > Plugins den Abonnement-Schlüssel ein, den Sie aus den oben genannten Schritten erhalten haben.
Geben Sie Ihren Projektnamen ein und klicken Sie auf „Erstellen“
Wählen Sie API aktivieren und suchen Sie nach Google Cloud Translator API. Suchen Sie die Schaltfläche Aktivieren und klicken Sie darauf, um die API zu aktivieren. Beachten Sie, dass es für die Google Translator API keine kostenlose Stufe gibt, daher wird Sie das System möglicherweise auffordern, die Abrechnung zu aktivieren.
Klicken Sie nach Abschluss auf „Anmeldeinformationen“ im linken Menü
Klicken Sie auf Anmeldeinformationen erstellen und wählen Sie API-Schlüssel. Kopieren Sie den API-Schlüssel und fügen Sie ihn in die Site-Einstellung translator google api key in Discourse ein.
Aktivieren Sie in Discourse unter Admin > Einstellungen > Grundeinstellungen die Option „Benutzerlokalisierung zulassen“.
Einstellungen
| Name | Beschreibung
|-|
| translator enabled | Zulassen der Inline-Übersetzung von Beiträgen.
| translator | Der Anbieter des Übersetzungsdienstes.
| translator azure subscription key | Azure-Abonnement-Schlüssel
| translator azure region | Azure-Region
| translator azure custom subdomain | Erforderlich, wenn ein Virtual Network oder Firewall für Azure Cognitive Services verwendet wird. Hinweis: Geben Sie nur die benutzerdefinierte Subdomain ein, nicht den vollständigen benutzerdefinierten Endpunkt.
| translator aws region | AWS-Region
| translator aws key id | AWS-Key-ID
| translator aws secret access | AWS-Geheimschlüssel
| translator aws iam role | AWS-IAM-Rolle
| translator google api key | Google-API-Schlüssel
| translator yandex api key | Yandex-API-Schlüssel
| translator libretranslate endpoint | LibreTranslate-Endpunkt
| translator libretranslate api key | LibreTranslate-API-Schlüssel
| max translations per minute | Die Anzahl der Übersetzungen pro Minute, die ein regulärer Benutzer durchführen kann.
| restrict translation by group | Nur freigegebene Gruppen dürfen übersetzen
| restrict translation by poster group | Nur die Übersetzung von Beiträgen, die von freigegebenen Benutzern erstellt wurden, ist zulässig
Bekannte Probleme
Übersetzt keinen Text in Umfragen, die vom discourse-poll-Plugin erstellt wurden.
Bilder werden bei der Übersetzung vergrößert.
Von uns gehostet? Dieses Plugin ist in unserem Enterprise-Plan verfügbar.
Ich verwende LibreTranslate selbst gehostet, was in der Vergangenheit gut funktioniert hat, aber jetzt erhalte ich viele wiederholte Fehler wie „Job exception: The translator service is currently not available“. Ich habe die URL überprüft, die in der Vergangenheit in Ordnung war. Wenn ich auf die URL zugreife, wird die LibreTranslate-Webseite angezeigt. Es ist kein API/Token erforderlich, da meine LibreTranslate-Instanz privat ist und keinen Zugriff aus dem Internet hat.
Der Backtrace zeigt:
Nachricht (548 Kopien gemeldet)
Job exception: The translator service is currently not available.
Backtrace
/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:168:in `result'
/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:85:in `detect'
/var/www/discourse/plugins/discourse-translator/plugin.rb:120: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:119:in `execute'
/var/www/discourse/app/jobs/base.rb:305:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:292:in `block in perform'
/var/www/discourse/app/jobs/base.rb:288:in `each'
/var/www/discourse/app/jobs/base.rb:288:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'
Die Locale-Option „Hindi“ ist in „Discourse“ noch nicht verfügbar. Die Hindi-Übersetzung ist jedoch über verschiedene Dienste verfügbar (ich verwende „Microsoft Azure“).
Wie können wir dann einrichten, dass alle/beliebigen Nicht-Hindi-Beiträge ins „Hindi“ übersetzt werden, auch wenn die Discourse-Oberfläche weiterhin auf Englisch ist? Ist das überhaupt möglich?
Ich habe darüber nachgedacht, diesen Übersetzer zu unserem Forum hinzuzufügen. Ich habe jedoch zwei Hauptbedenken:
1. Ist es möglich, die Übersetzungen zu ändern?
Ich möchte sicherstellen, dass bestimmte Begriffe auf eine bestimmte Weise übersetzt werden. Dazu benötige ich die Möglichkeit, die verfügbaren Übersetzungen einzusehen und bei Bedarf Änderungen vorzunehmen.
2. Wann wird ein Beitrag „neu übersetzt“?
Einige Forenbeiträge werden recht häufig bearbeitet. Wie kann ich sicherstellen, dass jeder korrigierte Tippfehler nicht zu überhöhten Übersetzungskosten führt? Wie kann ich außerdem sicherstellen, dass neue Änderungen korrekt in den Übersetzungen aktualisiert werden?
Ich glaube, das ist nicht möglich, da Sie dies auf der Ebene des Anbieters (Microsoft/Google) ändern müssten. Es sei denn, übersetzte Inhalte unterliegen der Wortersetzungs-Funktion, dann können Sie diese verwenden.
Hier ist jedoch eine Funktionsanfrage:
Die erste Nachricht automatisch ins Englische übersetzen, falls sie in einer anderen Sprache verfasst wurde.
Eine Schaltfläche haben, um den gesamten Thread auf einmal zu übersetzen.
Die automatische Übersetzungsfunktion für das gesamte Forum auf Benutzerebene aktivieren. Das bedeutet, wenn ein Benutzer in seinem Profil angibt, dass er nur z. B. Rumänisch spricht, werden alle Inhalte ins Rumänische übersetzt. Wenn er angibt, mehrere Sprachen zu sprechen, werden Beiträge nur übersetzt, wenn sie nicht in diesen Sprachen verfasst sind.
Die Benachrichtigung in Ihrem Screenshot verwendet den ursprünglichen Titel des Themas Ihres Beitrags, daher ist sie vorerst „korrekt“. Wir werden sicherstellen, dass Benachrichtigungen (Thementitel) in Zukunft übersetzt werden.
Was den obigen Beitrag betrifft, so hat unsere maschinelle Übersetzung gesponnen und wurde fälschlicherweise als „Spanisch (es)“ erkannt und anschließend schlecht übersetzt. Das wurde korrigiert. Wir arbeiten mit besseren Prompts für Übersetzungen.
Ich habe diesen Fehler erhalten, als ich das Discourse-Translator-Plugin installiert habe. Meine Discourse-Version ist 3.5.0.beta1.
I, [2025-04-24T01:33:20.510994 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
82: from /usr/local/bin/bundle:25:in `<main>'
81: from /usr/local/bin/bundle:25:in `load'
80: from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/exe/bundle:20:in `<top (required)>'
....
10: from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/lazy_load_hooks.rb:87:in `with_execution_control'
9: from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/lazy_load_hooks.rb:94:in `block in execute_hook'
8: from /var/www/discourse/config/application.rb:249:in `block in <class:Application>'
7: from /var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
6: from /var/www/discourse/config/application.rb:249:in `block (2 levels) in <class:Application>'
5: from /var/www/discourse/config/application.rb:249:in `each'
4: from /var/www/discourse/lib/plugin/instance.rb:629:in `notify_after_initialize'
3: from /var/www/discourse/lib/plugin/instance.rb:629:in `each'
2: from /var/www/discourse/lib/plugin/instance.rb:631:in `block in notify_after_initialize'
1: from /var/www/discourse/plugins/discourse-translator/plugin.rb:40:in `block in activate!'
/var/www/discourse/plugins/discourse-translator/lib/discourse_translator/inline_translation.rb:86:in `inject': protected method `register_topic_preloader_associations' called for an instance of Plugin::Instance (NoMethodError)