Traduttore Discourse

:discourse2: Riepilogo Discourse Translator traduce i post su Discourse utilizzando le API di traduzione di Microsoft, Google o Yandex.
:hammer_and_wrench: Link al repository https://github.com/discourse/discourse-translator
:open_book: Guida all’installazione Come installare i plugin in Discourse

Funzionalità

  • Ogni post viene tradotto una sola volta per ogni lingua, risparmiando :moneybag:
    • Nota che il rilevamento della lingua viene eseguito una sola volta per ogni post. Fai attenzione quando abiliti questa funzione su forum vecchi e di grandi dimensioni.
  • Il token di accesso viene memorizzato nella cache lato server per traduzioni più veloci.
  • Le traduzioni sono limitate a 3 al minuto per impostazione predefinita (gli amministratori possono configurare questo valore)

Servizi di traduzione supportati

Passaggi di configurazione

Microsoft
  1. Segui i passaggi in Microsoft Translator API su Azure per ottenere una chiave di sottoscrizione. Puoi scegliere tra una delle offerte di sottoscrizione disponibili.

  2. Nel tuo Discourse, sotto Amministrazione > Impostazioni > Plugin, inserisci la chiave di sottoscrizione ottenuta dai passaggi precedenti.

  1. Nel tuo Discourse, sotto Amministrazione > Impostazioni > Configurazione di base, abilita la lingua dell’utente.
Google Translator
  1. Vai a https://console.developers.google.com

  2. Clicca su “Il mio progetto”

  1. Clicca sull’icona :heavy_plus_sign: per creare un nuovo progetto

  1. Inserisci il nome del progetto e clicca su “Crea”

  2. Seleziona Abilita API e cerca Google Cloud Translator API. Cerca il pulsante abilita e cliccalo per abilitare l’API. Nota che non esiste un livello gratuito per l’API Google Translator, quindi potrebbe essere richiesto di abilitare la fatturazione.

  3. Una volta terminato, clicca su “Credenziali” nel menu a sinistra

  1. Clicca su Crea credenziali e seleziona Chiave API. Copia la Chiave API e incollala nell’impostazione del sito translator google api key in Discourse.

  2. In Discourse, sotto Amministrazione > Impostazioni > Configurazione di base, abilita la lingua dell’utente.

Impostazioni

Nome Descrizione
translator enabled Consenti la traduzione inline dei post.
translator Il provider del servizio di traduzione.
translator azure subscription key Chiave di sottoscrizione Azure
translator azure region Regione Azure
translator azure custom subdomain Richiesto se si utilizza una Rete Virtuale o un Firewall per i Servizi cognitivi di Azure. Nota: Inserisci solo il sottodominio personalizzato, non l’endpoint personalizzato completo.
translator aws region Regione AWS
translator aws key id ID chiave AWS
translator aws secret access Chiave di accesso segreta AWS
translator aws iam role Ruolo IAM AWS
translator google api key Chiave API Google
translator yandex api key Chiave API Yandex
translator libretranslate endpoint Endpoint LibreTranslate
translator libretranslate api key Chiave API LibreTranslate
max translations per minute Il numero di traduzioni per minuto che un utente regolare può eseguire.
restrict translation by group Consenti la traduzione solo ai gruppi autorizzati
restrict translation by poster group Consenti la traduzione solo dei post pubblicati da utenti autorizzati

Problemi noti

  • Non traduce il testo all’interno dei sondaggi generati dal plugin discourse-poll.
  • Le immagini vengono ingrandite durante la traduzione.

:discourse2: Hosted da noi? Questo plugin è disponibile nel nostro piano Enterprise.

103 Mi Piace
Advice for bilingual communities
Inline translation of posts into another language
Language Translation
Can we have have one post with two different language
Plugin for signatures?
Translate plugin installed, but no translate button
LibreTranslate Plugin -- Free and Open Source Translation API
Discourse Translator plugin is not showing for non-logged in users
What exactly are the effects of "allow user locale"
DeepL integration for Translator plugin
How do you use Discourse AI? Tell us and make it even better!
How do I get the forum here in German
Is Google translate really so expensive?
Anyone migrated to version 3 of Microsoft Translator API yet?
Moving up the translator icon
Image zoom is not working
Translating text in polls
Yandex Translation Service
Anyone Using Discourse Translator Plugin on small forum, Cost/month?
FYI, Full translation of Discourse including posts is possible
Mute ALL other languages
How to install a plugin on Discourse-hosted-Discourse?
Make a multi-language forum
How to handle users that don't really read the answers they get?
Localized email templates
Translates to user's local language
DeepL integration for Translator plugin
Javascript pop up block help
No errors, instance not coming back up after rebuild
DeepL support for Discourse Translator
Getting user profile custom field via JS
Google Translate shows "blank" page
What exactly are the effects of "allow user locale"
Virtual Keyboard hides critical editor buttons for 3.3.0-beta
Translation from Lugandan yields uncaught 500 error (in a different Discourse)
Is Automatic Translation for Most Content Now Official?
Everything is translated, help!
Virtual Keyboard hides critical editor buttons for 3.3.0-beta
Translation support about the topic content
Translates to user's local language
Structuring a multilingual community
Translate email notifications and digests into user preferred locale language
Implementing In-House Translation Features on Discourse
Include translated posts in search?
Translate email notifications and digests into user preferred locale language
Changing default language will not change the site TITLE or DESCRIPTION!
Yandex Translation Service
Simple idea for translator-assisted bilingual forum
MKJ's Opinionated Discourse Deployment Configuration
Help which plugin is in the screenshot
Übersetzung wie hier auf Meta

Un post è stato diviso in un nuovo argomento: Sto cercando una soluzione per utilizzare un LLM per tradurre i post principali del mio forum

Un post è stato diviso in un nuovo argomento: Aggiunta di un’opzione per una configurazione separata per il servizio di rilevamento della lingua

Un post è stato diviso in un nuovo argomento: I forum ospitati da Discourse utilizzano un’istanza locale di LibreTranslate?

Sto utilizzando LibreTranslate self-hosted che in passato ha funzionato bene, ma ora ricevo molti errori ripetuti di "Eccezione del job: il servizio di traduzione non è attualmente disponibile". Ho controllato l’URL che ha funzionato bene in passato. Se accedo all’URL, la pagina web di LibreTranslate viene visualizzata. Non è richiesta alcuna API/token poiché la mia istanza di LibreTranslate è privata e non accessibile da Internet.

Il backtrace mostra:

Messaggio (548 copie segnalate)

Eccezione del job: il servizio di traduzione non è attualmente disponibile.

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'

Hai qualche idea su come posso risolvere questo problema?

2 Mi Piace

L’opzione locale ‘Hindi’ non è ancora disponibile in ‘Discourse’. Ma la traduzione ‘Hindi’ è disponibile tramite diversi servizi (sto usando ‘Microsoft Azure’).

Quindi, come possiamo impostare la traduzione di tutti/qualsiasi post non in hindi in ‘Hindi’, anche quando l’interfaccia di Discourse continua ad essere in inglese? È anche possibile?

1 Mi Piace

Sto provando a pubblicare questa domanda anche sul loro forum di discourse.

3 Mi Piace

Stavo pensando di aggiungere questo traduttore al nostro forum. Tuttavia, ho due preoccupazioni principali:

1. È possibile modificare le traduzioni?
Voglio assicurarmi che alcuni termini vengano tradotti in un modo specifico. Per questo, ho bisogno della possibilità di visualizzare le traduzioni disponibili e apportare modifiche, se necessario.

2. Quando un post verrà “ritradotto”?
Alcuni post del forum vengono modificati abbastanza frequentemente. Come posso assicurarmi che ogni errore di battitura corretto non comporti costi di traduzione esorbitanti? Inoltre, come posso garantire che le nuove modifiche vengano aggiornate accuratamente nelle traduzioni?

3 Mi Piace

Credo che ciò non sia possibile, poiché dovresti modificare a livello del fornitore (Microsoft/Google). A meno che il contenuto tradotto non sia soggetto alla funzionalità di sostituzione di parole, allora puoi usarla.

Ecco una richiesta di funzionalità:

  1. Tradurre automaticamente il primo post in inglese nel caso in cui sia scritto in una lingua diversa.
  2. Avere un pulsante per tradurre l’intero thread in una volta sola.
  3. Avere la funzionalità di traduzione automatica abilitata per l’intero forum a livello utente. Ciò significa che se un utente seleziona nel proprio profilo di parlare solo, ad esempio, rumeno, allora tutto il contenuto verrà tradotto in rumeno. Se seleziona di parlare più lingue, i post verranno tradotti solo se non in queste lingue.
2 Mi Piace

In qualità di amministratore del sito, sono rimasto sorpreso nel leggere questo:

Dove si trova questa impostazione nascosta? :smiling_face_with_sunglasses:

1 Mi Piace
./launcher enter app
rails c
SiteSetting.automatic_translation_backfill_rate = <valore desiderato>
exit
exit

Ma penso che non ci sia più, almeno nelle versioni più recenti.

2 Mi Piace

Come impari queste cose? :sweat_smile: Ok, grazie! Aspetterò una risposta dal team, per sicurezza.

1 Mi Piace

Due modi: usando la ricerca e ask.discourse.com

3 Mi Piace
3 Mi Piace

Le notifiche dell’argomento tradotto non sembrano essere tradotte nella barra delle notifiche:

1 Mi Piace

Inoltre, il mio post è stato tradotto nella lingua sbagliata tramite un link?


Guardando nel composer, questo è ciò che ho scritto in realtà:

Ho notato che anche il oneboxing non ha funzionato quando ho tradotto.

1 Mi Piace

La notifica nello screenshot utilizza il titolo originale dell’argomento del tuo post, quindi è “corretta” per ora. In futuro, ci assicureremo che le notifiche (titoli degli argomenti) vengano tradotte.

Per quanto riguarda il post qui sopra, la nostra traduzione automatica ha avuto un problema ed è stata erroneamente rilevata come “spagnolo (es)”, e ha anche avuto una successiva traduzione errata. Questo è stato corretto. Stiamo iterando con prompt migliori per le traduzioni.

2 Mi Piace

Ho riscontrato questo errore durante l’installazione del plugin discourse-translator. La mia versione di discourse è la 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)

Come posso risolvere?

1 Mi Piace

Ciao, l’errore può essere mitigato aggiornando prima Discourse prima di installare il plugin.

Il metodo register_topic_preloader_associations è stato promosso da protetto a pubblico.

4 Mi Piace

Grazie, ho installato con successo dopo l’aggiornamento di Discourse all’ultima versione.

2 Mi Piace