¿Cómo se pueden localizar (hacer multilingües) las insignias y los grupos? Durante la configuración, noté que los títulos de las insignias y los grupos no cambian con el idioma del tema. ¿Cómo puedo hacer que las insignias y los grupos sigan el cambio de tema?
La capacidad de localizar insignias y grupos personalizados para un sitio multilingüe aún no existe; por el momento, solo se pueden localizar publicaciones, categorías y etiquetas.
De acuerdo, gracias. Pero ¿por qué las insignias en este sitio web (meta.discourse.org) cambian de idioma junto con el tema? ¿Es causado por una función de traducción? Sugiero que el equipo oficial agregue configuraciones de personalización multilingües para insignias, grupos y etiquetas; de lo contrario, los usuarios multilingües no podrán comprender el contenido de las insignias, los grupos y las etiquetas.
Hay algunas insignias predefinidas en cada sitio que están internacionalizadas (i18n) a través de Crowdin.
Las insignias personalizadas almacenan el nombre/descripción como texto plano en la base de datos. Cuando se llama a I18n.t (función de internacionalización) con una clave como badges.my_custom_badge.name, no hay una traducción coincidente, por lo que recurre al valor almacenado en la base de datos: el mismo texto para todas las configuraciones regionales.
Existe una solución alternativa por la cual los administradores pueden agregar manualmente traducciones para las claves de insignias personalizadas por configuración regional.
Puedes personalizar los textos de tu sitio en \u003cyour site\u003e/admin/customize/site_texts.
Algunos pasos concretos para ti
- Crea la insignia
- Ve a /admin/badges -\u003e Nueva Insignia
- Establece el nombre, la descripción, el ícono, etc., como es habitual
- Encuentra la clave i18n
- El patrón de clave es
badges.{snake_case_name}.name - El
snake_case_namees el nombre de la insignia en minúsculas con los espacios reemplazados por guiones bajos - Así que “Pokémon Master” -\u003e
badges.pokémon_master.name
- Agrega las anulaciones de traducción
- Ve a /admin/customize/site_texts
- Busca
badges.pokémon_master - Verás claves como:
badges.pokémon_master.namebadges.pokémon_master.descriptionbadges.pokémon_master.long_description
- Cambia a la configuración regional de destino (por ejemplo, 简体中文), haz clic en la clave e introduce el texto traducido
- Repite por configuración regional
- Cambia la configuración regional en el menú desplegable, añade traducciones para cada idioma que necesites
.name- título de la insignia.description- descripción corta que se muestra en las tarjetas de insignia.long_description- descripción completa que se muestra en la página de detalles de la insignia
english
japanese
¡Hola! ¡Gracias por responder! ¿Cómo se implementa el paso dos para encontrar la “i18n key”? No encuentro dónde está la “i18n key”.
En realidad no lo “encuentras”, simplemente lo derivas del nombre que le darás a la insignia. (Actualizaré el segundo paso para usar “derivar” en lugar de “encontrar”)
Por lo tanto, si usas “Buscador de Errores” (Bug Finder) como nombre de la insignia, la clave será badges.bug_finder.name
Por alguna razón, al buscar cualquier contenido en /admin/customize/site_texts me aparece el mensaje “No matching site texts found”. ¿Sabe a qué se debe esto?
¡Oh, disculpas, necesito corregir mis pasos anteriores!
La página de administración de textos del sitio (/admin/customize/site_texts) solo puede encontrar claves que ya existen en los archivos de traducción de Discourse. Por lo tanto, las claves personalizadas de insignias como badges.pokémon_master.name lamentablemente no existen allí, y buscarlas no devolvería nada (que es el problema que estás encontrando).
Las capturas de pantalla que compartí eran de una configuración donde creé las entradas de traducción a través de la consola de Rails. Los pasos de la interfaz de administración que di no funcionarán tal como están escritos. Disculpa la confusión. Lo que realmente funciona si tienes acceso a la consola es que puedes crear anulaciones de traducción para insignias personalizadas:
# el patrón de clave es: badges.{nombre_en_snake_case}.{name|description|long_description}
# ej. para una insignia llamada "Pokemon Master":
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.name", "宝可梦大师")
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.description", "你的描述")
Una vez creadas a través de la consola, la traducción aparecerá en /admin/customize/site_texts y podrá editarse desde allí en adelante.
Si no tienes acceso a la consola, actualmente no es posible. La localización de insignias personalizadas aún no es compatible como lo había mencionado @awesomerobot.
Solucioné este problema con un pequeño plugin (GitHub - canbekcan/discourse-localized-badges · GitHub). Puedes crear tu propio repositorio en GitHub con esto y modificar los archivos de idioma. No es necesaria una migración, pero si la necesitas, revisa la carpeta db o elimínala.
El plugin funciona agregando toda la información de idioma en config → locales. Hay algunos archivos y puedes crear los tuyos propios. Una vez que termines de traducir, debes agregar tu repositorio en app.yml (si usas Docker) y luego reconstruir. Como mencionó @nat anteriormente, simplemente nombra las nuevas insignias como badges.tu_nombre_de_insignia. Esto mostrará automáticamente el nombre normal que definiste en los archivos de idioma. Cada vez que actualices tus archivos de idioma actuales, puedes hacerlo desde el panel de administración en lugar de reconstruir la aplicación.
Puedes revisar la estructura de los archivos y crear tus propios archivos de idioma en la carpeta locales, pero los archivos son muy sensibles a los espacios ![]()
Nota: Esta es mi solución al problema de los idiomas de las insignias. Si existe una mejor, me gustaría saberlo :slight_smile


