Traductor de Discourse

:discourse2: Resumen Discourse Translator traduce publicaciones en Discourse utilizando las APIs de traducción de Microsoft, Google o Yandex.
:hammer_and_wrench: Enlace al repositorio https://github.com/discourse/discourse-translator
:open_book: Guía de instalación Cómo instalar plugins en Discourse

Funcionalidades

  • Cada publicación solo se traduce una vez por localización, lo que te ahorra :moneybag:
    • Ten en cuenta que la detección de idioma también se ejecuta una vez por cada publicación. Ten cuidado al habilitar esto en foros antiguos y grandes.
  • El Token de Acceso se almacena en caché en el servidor para traducciones más rápidas.
  • Las traducciones tienen un límite de tasa de 3 por minuto por defecto (los administradores pueden configurar este valor)

Servicios de traducción compatibles

Pasos de configuración

Microsoft
  1. 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.

  2. En tu Discourse, bajo Administración > Configuración > Plugins, introduce la clave de suscripción que has obtenido en los pasos anteriores.

  1. En tu Discourse, bajo Administración > Configuración > Configuración básica, habilita permitir la localización del usuario.
Google Translator
  1. Ve a https://console.developers.google.com

  2. Haz clic en Mi Proyecto

  1. Haz clic en :heavy_plus_sign: para crear un nuevo proyecto

  1. Introduce el nombre de tu proyecto y haz clic en crear

  2. 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.

  3. Una vez que hayas terminado, haz clic en credenciales en el menú izquierdo

  1. 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.

  2. 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.

:discourse2: ¿Alojado por nosotros? Este plugin está disponible en nuestro plan Enterprise.

103 Me gusta
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

Se dividió una publicación en un nuevo tema: Busco una solución para usar un LLM para traducir las publicaciones principales de mi foro

Se dividió una publicación en un nuevo tema: Añadir una opción para una configuración separada para el servicio de detección de idioma

Se dividió una publicación en un nuevo tema: ¿Los foros alojados por Discourse utilizan una instancia local de LibreTranslate?

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'

¿Alguna idea sobre cómo puedo solucionar esto?

2 Me gusta

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?

1 me gusta

Intentando publicar esta pregunta también en su foro de discourse.

3 Me gusta

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?

3 Me gusta

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:

  1. Traducir automáticamente la primera publicación al inglés en caso de que esté escrita en un idioma diferente.
  2. Tener un botón para traducir todo el hilo a la vez.
  3. 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.
2 Me gusta

Como administrador del sitio, me sorprendió leer esto:

¿Dónde está esta configuración oculta? :smiling_face_with_sunglasses:

1 me gusta
./launcher enter app
rails c
SiteSetting.automatic_translation_backfill_rate = <valor deseado>
exit
exit

Pero creo que ya no está, al menos en versiones más recientes.

2 Me gusta

¿Cómo aprendes estas cosas? :sweat_smile: ¡Ok, gracias! Esperaré una respuesta del equipo, para estar seguro.

1 me gusta

Dos maneras: usando la búsqueda y ask.discourse.com

3 Me gusta
3 Me gusta

Notifications of topic titled that got translated don’t appear to translate in the notification bar:

1 me gusta

Además, ¿mi publicación se tradujo al idioma incorrecto a través de un enlace?


Mirando en el editor, esto es lo que realmente escribí:

Noté que el oneboxing tampoco funcionó cuando traduje.

1 me gusta

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.

2 Me gusta

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)

¿Cómo puedo solucionarlo?

1 me gusta

Hola, el error puede mitigarse actualizando Discourse primero antes de instalar el plugin.

El método register_topic_preloader_associations ha sido promovido de protegido a público.

4 Me gusta

Gracias, instalé con éxito después de actualizar Discourse a la última versión.

2 Me gusta