Chaque message n’est traduit qu’une seule fois par locale, ce qui vous fait économiser
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)
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.
Dans votre Discourse, sous Admin > Paramètres > Plugins, entrez la clé d’abonnement que vous avez obtenue lors des étapes ci-dessus.
Entrez le nom de votre projet et cliquez sur create
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.
Une fois terminé, cliquez sur credentials dans le menu de gauche
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.
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.
Hébergé par nous ? Ce plugin est disponible sur notre plan Enterprise.
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 ?
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 ?
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 ?
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é :
Traduire automatiquement le premier message en anglais s’il est rédigé dans une langue différente.
Avoir un bouton pour traduire l’intégralité du fil de discussion en une seule fois.
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.
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.
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)