Sigue los pasos en Microsoft Translator API en Azure para obtener una clave de suscripción. Puedes elegir cualquiera de las ofertas de suscripción disponibles.
En tu Discourse, bajo Administración > Configuración > Plugins, introduce la clave de suscripción que has obtenido en los pasos anteriores.
Introduce el nombre de tu proyecto y haz clic en crear
Selecciona Habilitar API y busca Google Cloud Translator API. Busca el botón habilitar y haz clic en él para habilitar la API. Ten en cuenta que no hay un nivel gratuito para la API de Google Translator, por lo que es posible que te pida habilitar la facturación.
Una vez que hayas terminado, haz clic en credenciales en el menú izquierdo
Haz clic en crear credenciales y selecciona Clave API. Copia la Clave API y pégala en la configuración del sitio translator google api key en Discourse.
En Discourse, bajo Administración > Configuración > Configuración básica, habilita permitir la localización del usuario.
Configuración
Nombre
Descripción
translator enabled
Permitir la traducción en línea de las publicaciones.
translator
El proveedor del servicio de traducción.
translator azure subscription key
Clave de suscripción de Azure
translator azure region
Región de Azure
translator azure custom subdomain
Requerido si se utiliza una Red Virtual o Firewall para Azure Cognitive Services. Nota: Introduce solo el subdominio personalizado, no el extremo personalizado completo.
translator aws region
Región de AWS
translator aws key id
ID de clave de AWS
translator aws secret access
Clave de acceso secreta de AWS
translator aws iam role
Rol IAM de AWS
translator google api key
Clave API de Google
translator yandex api key
Clave API de Yandex
translator libretranslate endpoint
Extremo de LibreTranslate
translator libretranslate api key
Clave API de LibreTranslate
max translations per minute
El número de traducciones por minuto que puede realizar un usuario regular.
restrict translation by group
Solo permitir la traducción de grupos en la lista de permitidos
restrict translation by poster group
Solo permitir la traducción de publicaciones realizadas por usuarios en la lista de permitidos
Problemas conocidos
No traduce el texto dentro de las encuestas generadas por el plugin discourse-poll.
Las imágenes se agrandan al traducir.
¿Alojado por nosotros? Este plugin está disponible en nuestro plan Enterprise.
Estoy usando LibreTranslate autoalojado, que ha funcionado bien en el pasado, pero ahora estoy recibiendo muchos errores repetidos de "Excepción de trabajo: El servicio de traducción no está disponible actualmente". He comprobado la URL, que ha estado funcionando bien en el pasado. Si accedo a la URL, se muestra la página web de LibreTranslate. No se requiere API/token porque mi instancia de LibreTranslate es privada y no tiene acceso desde Internet.
La traza inversa muestra:
Mensaje (548 copias reportadas)
Excepción de trabajo: El servicio de traducción no está disponible actualmente.
Traza inversa
/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'
La opción de idioma ‘hindi’ aún no está disponible en ‘Discourse’. Pero la traducción al ‘hindi’ está disponible a través de diferentes servicios (estoy usando ‘Microsoft Azure’).
Entonces, ¿cómo podemos configurar para traducir todas las publicaciones que no sean en hindi a ‘hindi’ incluso cuando la interfaz de Discourse continúe en inglés? ¿Es esto siquiera posible?
Estaba pensando en agregar este traductor a nuestro foro. Sin embargo, tengo dos preocupaciones principales:
1. ¿Es posible alterar las traducciones?
Quiero asegurarme de que ciertos términos se traduzcan de una manera específica. Para ello, necesito la capacidad de ver las traducciones disponibles y realizar cambios si es necesario.
2. ¿Cuándo se “volverá a traducir” una publicación?
Algunas publicaciones del foro se editan con bastante frecuencia. ¿Cómo puedo asegurarme de que cada error tipográfico corregido no genere costos de traducción exorbitantes? Además, ¿cómo puedo garantizar que los nuevos cambios se actualicen con precisión en las traducciones?
Creo que esto no es posible, ya que tendrías que modificar a nivel del proveedor (Microsoft/Google). A menos que el contenido traducido esté sujeto a la función de reemplazo de palabras, entonces puedes usarla.
Aquí tienes una solicitud de función:
Traducir automáticamente la primera publicación al inglés en caso de que esté escrita en un idioma diferente.
Tener un botón para traducir todo el hilo a la vez.
Tener la función de traducción automática habilitada para todo el foro a nivel de usuario. Es decir, si el usuario selecciona en su perfil que solo habla, por ejemplo, rumano, entonces se traducirá todo el contenido al rumano. Si selecciona que habla varios idiomas, las publicaciones solo se traducirán si no están en esos idiomas.
La notificación en tu captura de pantalla utiliza el título original del tema de tu publicación, por lo que es “correcto” por ahora. Nos aseguraremos de que las notificaciones (títulos de temas) se traduzcan en el futuro.
En cuanto a la publicación anterior, nuestra traducción automática estaba fallando y se detectó incorrectamente como “español (es)”, y también tuvo una mala traducción posterior. Eso está rectificado. Estamos iterando con mejores indicaciones para las traducciones.
Recibí este error al instalar el plugin discourse-translator. Mi versión de discourse es 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)