Localización de contenido: manual y automática con Discourse AI

En este tema, te guiaremos por las funciones de Localización de Contenido y cómo habilitarlas. Las funciones se dividen en dos partes: lo que está disponible por defecto en Discourse; y Discourse AI para traducciones automáticas.

:warning: Para un acceso rápido a las secciones relevantes, utiliza los encabezados de la wiki :backhand_index_pointing_right:t2:

Localización del contenido de tu comunidad

Discourse te da acceso a varias funciones de localización disponibles para su configuración en:

  • <your-site-url>/admin/site_settings/category/content_localization
Localización de contenido en la configuración del sitio 📸

Preparación

En primer lugar, es bueno obtener alguna información sobre tu comunidad a través del explorador de datos.

Idioma mediante las preferencias del usuario

La siguiente consulta puede darte una idea de cuántos usuarios pueden haber establecido su idioma en /my/preferences/interface.

SELECT locale, count(*) as count
FROM users
WHERE (locale IS NOT null AND locale <> '')
GROUP BY locale
ORDER BY count DESC
Resultados de ejemplo del Explorador de datos

De dónde vienen tus usuarios

Una mejor solución, si tienes Eventos de visualización de página del navegador habilitados (configuración del sitio), es esta consulta que te dice de qué país es tu usuario:

SELECT
  e.country_code AS country_code,
  COUNT(*) AS pageviews
FROM browser_pageview_events e
WHERE e.country_code IS NOT NULL
  AND e.country_code <> ''
GROUP BY e.country_code
ORDER BY pageviews DESC
Resultados de ejemplo

Configuración

Con la información anterior, ahora estás mejor informado sobre qué idiomas debería soportar tu comunidad.

En <your-site-url>/admin/site_settings/category/content_localization, comienza a configurar esto.

  • Content localization enabled - activa la función que reemplaza el contenido escrito original del usuario con contenido localizado. Sigue leyendo para conocer los modos de localización automática (IA) y manual (humana).
  • Content localization supported locales - la lista de idiomas que tu sitio soporta
  • Content localization crawler param - cubierto en la sección de rastreadores a continuación
  • Content localization language switcher - cubierto justo a continuación
Lista de idiomas en la configuración del sitio 📸

Selector de idioma

Habilitar la configuración posterior Content localization language switcher también te permite hacer tu comunidad más accesible para usuarios no conectados mostrando la lista de idiomas que has elegido en la lista de idiomas soportados:

Selector de idioma en la parte superior derecha de la página

Visualización de contenido localizado

Para los visualizadores de contenido localizado (todos los visitantes del sitio), pueden pasar el cursor sobre el indicador junto a la fecha de la publicación para ver el idioma original de la publicación. Este indicador solo aparece si la publicación no está en su idioma. Simplemente pueden hacer clic en el indicador para ver la publicación original también.

Para nuestros visualizadores multilingües conectados, pueden indicar que entienden varios idiomas, por lo que el contenido en esos idiomas no se traducirá.

Traducciones automáticas con Discourse AI :sparkles:

Discourse AI es esencial para la función de localización, y elimina la necesidad de hacer traducciones manuales.

Como administrador, querrás dirigirte a nuestra área dedicada en Discourse AI para Traducciones. Esta área dedicada cubre:

  • progreso de la traducción
  • configuración de IA
  • configuración del idioma de la aplicación

Para cubrir algunas configuraciones y recomendaciones importantes:

  • AI translation backfill hourly rate - esta configuración tiene un valor predeterminado de 50 - tu sitio traducirá 50 publicaciones, 50 temas, 50 categorías, 50 etiquetas por hora, a los idiomas que hayas establecido en Content localization supported locales. Mantén este número bajo al comenzar.
  • AI translation category scope - por defecto en Categorías públicas. Puedes cambiar esto a todas las categorías, o una selección específica.
  • AI translation personal messages y AI translation include bot content son autoexplicativos.
  • AI translation backfill start date - este valor está vacío por defecto. Si habilitas la función de traducción de IA “hoy”, la fecha se establece automáticamente en “hoy - 5 días”
  • AI translation post raw translator agent (y otros agentes) - En comunidades más formales, los administradores pueden elegir crear su propio agente. Esto te permite establecer un prompt que esté más ajustado al idioma o vocabulario que prefieras.

Puedes consultar AI bot - Agents sobre cómo configurar agentes adecuados y ajustar prompts para cada función.

Localización manual

Dado que la localización es una función central en Discourse, proporcionamos la capacidad de completar y editar localizaciones manualmente en caso de que las traducciones automáticas con Discourse AI no estén disponibles.

Por defecto, los administradores y moderadores están configurados para editar localizaciones.

Actualmente, tenemos localizaciones para contenido de publicaciones, título de temas, nombre de categorías, descripción de categorías, nombre de etiquetas, descripción de etiquetas y barra lateral. Las siguientes secciones te mostrarán cómo funcionan.

Localización de categorías

Las categorías localizadas son visibles en las siguientes áreas, con el nombre y la descripción de la categoría localizados:

Lugares donde las categorías están localizadas 📸
  1. Página de inicio, barra lateral y menú desplegable de categorías
  1. Página de categorías
  1. Una categoría específica con subcategorías

Como administrador, deberías poder acceder a la configuración de categorías como de costumbre, y encontrar el nuevo elemento de navegación “Localizaciones” a la izquierda.

Edición de localizaciones de categorías en la configuración de categorías 📸

Localización de temas y publicaciones

En las capturas de pantalla anteriores de Localización de categorías, podrías haber notado que los títulos de los temas y los extractos están localizados.

Hay algunas configuraciones previas necesarias

  • Asegúrate de que tu usuario esté en content localization allowed groups
  • El botón addTranslation se añade automáticamente a post menu y post menu hidden items cuando Content localization enabled está activado. Esto permite que :globe_with_meridians: aparezca en el menú de la publicación para usuarios en content localization allowed groups.
  • Content localization allow author localization está habilitado por defecto, y permite a los autores de publicaciones localizar su propio contenido usando el mismo menú de publicación anterior.
configuración del menú de publicación

Edición de una publicación localizada

En caso de que el usuario esté viendo una publicación localizada y quiera editar la publicación, aparecerá un diálogo preguntando qué versión prefiere editar:

Aparecerá el compositor apropiado después de decidir.

Localización personalizada de la barra lateral

Las secciones de la barra lateral que son “visibles para todos” también muestran controles de traducción adicionales:

Rastreadores

Puedes permitir que los rastreadores vean tu sitio en los varios idiomas que has configurado en Content localization supported locales. La configuración del sitio reside en la sección “Content localization” como Content localization crawler param:

El resultado sería que los rastreadores pueden ver lo siguiente, donde cada idioma soportado tiene un hreflang correspondiente en la cabeza de cada tema:

Para prueba / verificación extra

Hemos probado esta función extensamente, y podemos confirmar que estamos siendo indexados correctamente después de introducir X números de idiomas soportados

FAQ

He configurado las cosas, pero la traducción automática aún no funciona para mí
Confirma si has configurado esto

  • Content localization supported locales tiene al menos un idioma
  • Content localization enabled está :check_mark:
    • Allow user locale está :check_mark: (habilitado por defecto)
    • Set locale from cookie está :check_mark:
  • Ai translation enabled está :check_mark:
  • Debes tener un LLM funcional configurado para cada agente de traducción

Si todo lo demás falla, puedes habilitar SiteSetting.ai_translation_verbose_logs.

¿Las traducciones automáticas se guardan, o se envían al LLM cada vez que alguien ve un tema?
Las traducciones se guardan, cada publicación solo se envía una vez por idioma y las traducciones se reutilizan.

Si mi foro soporta inglés y japonés (vía Content localization supported locales), y alguien escribe en español, ¿se traducirá su publicación?
Sí. Todos los temas y publicaciones se traducirán al inglés y japonés, independientemente del idioma escrito.

Si la publicación original se edita, ¿se vuelve a traducir?
Sí – con un máximo de 2 veces por día. Cuando se edita una publicación, se envía para su retraducción después de un retraso mayor de 5 minutos o el SiteSetting.editing_grace_period para tener en cuenta las ediciones ninja. Los usuarios autorizados en Content localization allowed groups tienen la opción de enviar una publicación para su retraducción inmediatamente.

¿Se eliminarán las traducciones si cambio el Agente o LLM?
No, las traducciones generalmente persistirán a través de los cambios de configuración a menos que se eliminen explícitamente usando el elemento del menú de publicación o el compositor de traducción.


25 Me gusta
Content Localization and Automatic Translations for Your Community
I can't find discourse AI as a provider in the discourse translator plugin
2 language site
Machine-translate messages so users can read without knowing sender's language
Übersetzung wie hier auf Meta
Anonymous user language selector for Discourse
Update or Replace Header Locale Selector for New Discourse Header (widgets-end-of-life) – Is Built-in Support Available?
Translate Discourse automatically (without a button)
Help which plugin is in the screenshot
About auto translation
Auto Country Translation
How to Add Automatic Multilingual Translation Interface in Discourse?
3.6.0.beta2: Built-in palette editing, live AI translation progress, and better wiki tracking
The usage problem after using AI translation
AI translation backfill not working after all settings configured
AI translation backfill not working after all settings configured
Single post/header only partially translated -issue
Language Switcher Problem, Not Translating Posts
配置好 ai 翻译后,帖子已经被自动翻译,但是在帖子顶部和右侧没有显示语言切换按钮
Feature Request: Allow Users to Localize Only Their Own Topics
How to configure ai translate of `Ai translation backfill hourly rate`?
Seeking experience: Supporting a multilingual Discourse community
Ongoing translation in threads
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
Not sure how to juggle languages while setting up my francophone community
Structuring a multilingual community
Why is Discourse AI translation not working
How to set up Discourse AI for internal-only usage
AI translation of all PMs
Content localization language switcher doesn't work
This Meta Branded theme is special. Can I use it on my forum too?
Feature Request: Translation of FAQ/Terms of Service/Privacy
Single post/header only partially translated -issue
Header Locale Selector
为啥的布署的discourse不支持修改语言
Topic list is shown in a language (DE) but has one (DE) topic not translated
If topic info is too long, tags are cut off and create a blank line
Content Localization and Automatic Translations for Your Community
Images break when the page is auto-translated by a browser translation extension (S3/R2 + CDN is configured correctly)
Bearbeitung von Übersetzen Beiträgen verbessern
Why Is the Discourse AI Translation Icon Not Appearing?
Why are posts in Swedish un-translated to Finnish, default locale?
Discourse AI Translator, Planet Icon Missing
Language switcher and language content
Multilingual user feedback on Automatic Translations
Sharing approaches to using automation to send messages to members

¿Hay alguna recomendación para hacer esto en bloque para las categorías existentes? En el peor de los casos, ¿quizás a través de la API?

2 Me gusta

Hmm, gran pregunta. Me aseguraré de que la documentación de la API se actualice para el punto final de actualización de categorías. :memo:

4 Me gusta

¿Habrá soporte para moderadores por idioma? Estoy pensando en meta, donde podría ser voluntario para revisar las publicaciones en un idioma específico y actualizarlas manualmente. Especialmente la documentación, que puede beneficiarse de algunos toques humanos. Pero dices que solo los moderadores pueden hacerlo, lo cual probablemente nunca seré.

3 Me gusta

Hmm buena sugerencia. Creo que eso se puede hacer pero tendremos que pensar en los detalles de cómo se puede configurar.

3 Me gusta

¿Cómo accedo a ella? ¿Podría proporcionar un comando, por favor?

¿Sidekiq tiene algún trabajo vinculado? ¿Es posible activarlo manualmente?

1 me gusta
2 Me gusta

Para añadir a la publicación de Moin de arriba, es solo SiteSetting. ai_translation_backfill_hourly_rate una vez que acceda a la consola. El trabajo se ejecuta cada cinco minutos y limita la tasa en consecuencia.

3 Me gusta

Veo que la localización ya está disponible en la documentación. ¡Gracias @nat!

3 Me gusta

¡Eso es maravilloso, felicitaciones al equipo! Lo estoy probando ahora mismo y compartiré mis pensamientos y mi experiencia general.

Echamos de menos el esperanto en la lista; ¿se puede añadir ‘simplemente’ o primero debe integrarse en discourse-languages?

Vaya, estás al tanto. Estaba a punto de informar aquí. :laughing:

Sí, algo así. Queremos una experiencia de localización completa donde los controles (botones, etiquetas, etc.) se traduzcan correctamente y de forma suficiente (el 70% estaría muy bien) a través de Crowdin (ver Translations - Discourse Meta), y con eso podremos ofrecer soporte al idioma.

2 Me gusta

¿Funciona la localización de contenido con las Categorías de Documentación? Me parece que el contenido de la barra lateral no se está traduciendo aunque localice el tema del índice.

También noté un comportamiento extraño. Cuando veo un tema localizado en el idioma original y actualizo, cambia a la versión localizada. Tengo que volver a cambiar manualmente a la versión original.

3 Me gusta

Oh, qué gran acierto, sí que no está funcionando todavía, ¡pero es algo que @nat seguirá!

Me pregunto si esto es un catalizador para crear una mejor abstracción / modelo de datos para los enlaces de documentos de la barra lateral.

2 Me gusta

Sí, es correcto: hay muchos lugares en Discourse que necesitarán traducción explícita, así que los estoy registrando a medida que surgen. Más recientemente, también localizamos las notificaciones para los títulos de los temas. Este es un ejemplo de un tema de características que creé: Show translated user bios.

Crearé un nuevo tema y te mencionaré para asegurarnos de cubrir todas las bases en la barra lateral.

EDITAR: @tvavrda cubierto aquí: Translate sidebar documentation links. Por favor, échale un vistazo y mira si tiene sentido.

¿A qué te refieres con “volver a cambiar”?

¿Te importaría compartir una grabación de video (incluye la barra de direcciones) la próxima vez que suceda? :folded_hands:t2: Siéntete libre de enviarme un mensaje privado para este caso si el contenido no es adecuado en público. Además, ¿estabas conectado? Técnicamente, estas cosas se rastrean mediante cookies, así que es un poco desconcertante para mí.

1 me gusta

Te envié un video.

Otra observación: no puedo ver las diferencias del contenido traducido, ¿verdad? Eso podría ser útil si hay actualizaciones. No es súper importante, pero tendría sentido, supongo.

Y otra más: los enlaces entrantes debajo del tema no muestran un nombre de tema localizado.

Y una pregunta: ¿cuál es el propósito de localizar las descripciones de las categorías en la configuración de la categoría? La descripción de la categoría debería provenir de la versión localizada del tema “Acerca de”, ¿no? La versión localizada no admite markdown, por lo que no puedo usar un enlace, lo cual me gustaría.

1 me gusta

Bueno… el componente antiguo GitHub - discourse/discourse-docs-sidebar en realidad respeta la localización :slight_smile: Temporalmente cambié a ese.

Sí, esto actualmente tampoco es compatible y sería una tarea bastante ardua.

Tenemos un pequeño indicador de color especial (similar al indicador de ediciones de publicaciones al lado) cuando una traducción puede estar desactualizada, ya que la versión de la publicación ha cambiado.

1 me gusta

También veo contenido sin traducir en los resúmenes de los temas fijados. Así que veo una lista de temas en el idioma traducido, pero el resumen del tema fijado muestra el original.

1 me gusta

Podemos hacer o arreglar traducciones manualmente, pero ¿podemos activar manualmente la compilación de traducciones? Algo así como un trabajo bajo demanda.

Lo que estoy pensando es que he permitido la traducción de temas de hace un año. Pero si ese año se cuenta desde la fecha actual, ese límite se moverá todo el tiempo hacia el contenido ya traducido. Pero la mayor demanda es contenido valioso más antiguo al que me gustaría llegar rápido y sin acciones masivas bastante lentas.

Tengo curiosidad, ¿alguien tiene cifras de costos después de activar las traducciones? Nuestro sitio ha existido por un tiempo y, aunque me gustaría traducir todo el sitio si es posible, el costo es definitivamente una preocupación. Así que si alguien tiene una idea aproximada del costo según su experiencia, por ejemplo, 1000 publicaciones resultan en un costo de $1, eso ayudaría enormemente a tener una idea del costo aproximado.

¿La localización del contenido se hace una vez y luego se almacena en algún lugar, es decir, no bajo demanda? Si es así, ¿hay algo que me impida iniciar Ollama y algún LLM de código abierto en mi escritorio como Llama 3 o Deepseek 3 y simplemente dejar que el trabajo se ejecute hasta que termine?

Editar: Supongo que podría funcionar para reducir el costo inicial de traducción, pero no funcionará para publicaciones más nuevas a menos que uno decida mantener el LLM local funcionando perpetuamente.