Traducteur Discourse

:discourse2: Résumé Discourse Translator traduit les messages sur Discourse en utilisant les API de traduction de Microsoft, Google ou Yandex.
:hammer_and_wrench: Lien du dépôt https://github.com/discourse/discourse-translator
:open_book: Guide d’installation Comment installer des plugins sur Discourse

Fonctionnalités

  • Chaque message n’est traduit qu’une seule fois par locale, ce qui vous fait économiser :moneybag:
    • Notez que la détection de la langue est également exécutée une seule fois pour chaque message. Soyez prudent lorsque vous activez cette fonction sur des forums anciens et volumineux.
  • Le jeton d’accès (Access Token) est mis en cache côté serveur pour des traductions plus rapides.
  • Les traductions sont limitées à 3 par minute par défaut (les administrateurs peuvent configurer cette valeur)

Services de traduction pris en charge

Étapes de configuration

Microsoft
  1. Suivez les étapes de Microsoft Translator API sur Azure pour obtenir une clé d’abonnement. Vous pouvez choisir parmi toutes les offres d’abonnement disponibles.

  2. Dans votre Discourse, sous Admin > Paramètres > Plugins, entrez la clé d’abonnement que vous avez obtenue lors des étapes ci-dessus.

  1. Dans votre Discourse, sous Admin > Paramètres > Configuration de base, activez allow user locale.
Google Translator
  1. Allez sur https://console.developers.google.com

  2. Cliquez sur My Project

  1. Cliquez sur le :heavy_plus_sign: pour créer un nouveau projet

  1. Entrez le nom de votre projet et cliquez sur create

  2. Sélectionnez Enable API et recherchez Google Cloud Translator API. Recherchez le bouton enable et cliquez dessus pour activer l’API. Notez qu’il n’y a pas de niveau gratuit pour l’API Google Translator, il se peut donc qu’on vous demande d’activer la facturation.

  3. Une fois terminé, cliquez sur credentials dans le menu de gauche

  1. Cliquez sur create credentials et sélectionnez API key. Copiez la clé API et collez-la dans le paramètre site translator google api key de Discourse.

  2. Dans Discourse, sous Admin > Paramètres > Configuration de base, activez allow user locale.

Paramètres

Nom Description
translator enabled Autoriser la traduction en ligne des messages.
translator Le fournisseur du service de traduction.
translator azure subscription key Clé d’abonnement Azure
translator azure region Région Azure
translator azure custom subdomain Requis si vous utilisez un Réseau Virtuel ou un Pare-feu pour les Services cognitifs Azure. Remarque : Entrez uniquement le sous-domaine personnalisé, pas l’endpoint personnalisé complet.
translator aws region Région AWS
translator aws key id ID de clé AWS
translator aws secret access Clé d’accès secrète AWS
translator aws iam role Rôle IAM AWS
translator google api key Clé API Google
translator yandex api key Clé API Yandex
translator libretranslate endpoint Endpoint LibreTranslate
translator libretranslate api key Clé API LibreTranslate
max translations per minute Le nombre de traductions par minute qu’un utilisateur régulier peut effectuer.
restrict translation by group Seuls les groupes autorisés peuvent traduire
restrict translation by poster group Autoriser uniquement la traduction des messages publiés par des utilisateurs autorisés

Problèmes connus

  • Ne traduit pas le texte dans les sondages générés par le plugin discourse-poll.
  • Les images sont agrandies lors de la traduction.

:discourse2: Hébergé par nous ? Ce plugin est disponible sur notre plan Enterprise.

103 « J'aime »
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 message a été divisé en un nouveau sujet : Je cherche une solution pour utiliser un LLM afin de traduire les meilleurs messages de mon forum

Un message a été divisé en un nouveau sujet : Ajout d’une option pour une configuration distincte pour le service de détection de langue

Un message a été divisé en un nouveau sujet : Les forums hébergés par Discourse utilisent-ils une instance locale de LibreTranslate ?

J’utilise LibreTranslate auto-hébergé, ce qui a bien fonctionné par le passé, mais je reçois maintenant de nombreuses erreurs répétées « Job exception: The translator service is currently not available ». J’ai vérifié l’URL qui fonctionnait correctement par le passé. Si j’accède à l’URL, la page Web LibreTranslate s’affiche. Aucune API/token n’est requis car mon instance LibreTranslate est privée et n’est pas accessible depuis Internet.

Le backtrace montre :

Message (548 copies reported)

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'

Avez-vous des idées sur la façon dont je peux résoudre ce problème ?

2 « J'aime »

L’option de locale ‘Hindi’ n’est pas encore disponible dans ‘Discourse’. Mais la traduction ‘Hindi’ est disponible via différents services (j’utilise ‘Microsoft Azure’).

Alors, comment pouvons-nous configurer pour traduire tous les messages non-hindi en ‘Hindi’ même lorsque l’interface Discourse reste en anglais ? Est-ce même possible ?

1 « J'aime »

J’essaie de publier cette question sur leur forum discourse également.

3 « J'aime »

Je pensais ajouter ce traducteur à notre forum. Cependant, j’ai deux préoccupations principales :

1. Est-il possible de modifier les traductions ?
Je veux m’assurer que certains termes sont traduits d’une manière spécifique. Pour cela, j’ai besoin de pouvoir visualiser les traductions disponibles et d’apporter des modifications si nécessaire.

2. Quand un message sera-t-il « retraduit » ?
Certains messages du forum sont modifiés assez fréquemment. Comment puis-je m’assurer que chaque faute de frappe corrigée n’entraîne pas des coûts de traduction exorbitants ? De plus, comment puis-je m’assurer que les nouveaux changements sont mis à jour avec précision dans les traductions ?

3 « J'aime »

Je pense que cela n’est pas possible, car vous devriez modifier au niveau du fournisseur (Microsoft/Google). À moins que le contenu traduit ne soit soumis à la fonction de remplacement de mots, alors vous pouvez l’utiliser.

Voici une demande de fonctionnalité :

  1. Traduire automatiquement le premier message en anglais s’il est rédigé dans une langue différente.
  2. Avoir un bouton pour traduire l’intégralité du fil de discussion en une seule fois.
  3. Avoir la fonction de traduction automatique activée pour l’ensemble du forum au niveau de l’utilisateur. C’est-à-dire, si un utilisateur sélectionne dans son profil qu’il ne parle que le roumain, par exemple, alors tout le contenu est traduit en roumain. S’il sélectionne qu’il parle plusieurs langues, les messages ne seraient traduits que s’ils ne sont pas dans ces langues.
2 « J'aime »

En tant qu’administrateur du site, j’ai été surpris de lire ceci :

Où se trouve ce paramètre caché ? :smiling_face_with_sunglasses:

1 « J'aime »
./launcher enter app
rails c
SiteSetting.automatic_translation_backfill_rate = <valeur souhaitée>
exit
exit

Mais je pense que ce n’est plus là, du moins dans les versions plus récentes.

2 « J'aime »

Comment apprenez-vous ces choses ? :sweat_smile: Ok, merci ! J’attendrai une réponse de l’équipe, pour être sûr.

1 « J'aime »

Deux façons : en utilisant la recherche et ask.discourse.com

3 « J'aime »
3 « J'aime »

Les notifications du sujet intitulé qui a été traduit n’apparaissent pas dans la barre de notification :

1 « J'aime »

De plus, mon message a été traduit dans la mauvaise langue via un lien ?


En regardant dans l’éditeur, voici ce que j’ai réellement écrit :

J’ai remarqué que le oneboxing ne fonctionnait pas non plus lorsque j’ai traduit.

1 « J'aime »

La notification dans votre capture d’écran utilise le titre original du sujet de votre publication, elle est donc « correcte » pour le moment. Nous veillerons à ce que les notifications (titres de sujets) soient traduites à l’avenir.

Quant à la publication ci-dessus, notre traduction automatique rencontrait des problèmes et a été incorrectement détectée comme « espagnol (es) », et a également fait l’objet d’une mauvaise traduction ultérieure. C’est rectifié. Nous itérons avec de meilleures invites pour les traductions.

2 « J'aime »

J’ai obtenu cette erreur lors de l’installation du plugin discourse-translator. Ma version de discourse est 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)

Comment puis-je résoudre ce problème ?

1 « J'aime »

Salut, l’erreur peut être atténuée en mettant à jour Discourse en premier avant d’installer le plugin.

La méthode register_topic_preloader_associations a été promue de protégée à publique.

4 « J'aime »

Merci, j’ai réussi l’installation après la mise à niveau de Discourse vers la dernière version.

2 « J'aime »