Para aquellos que deseen agregar idiomas y traducciones personalizados a un tema o componente de tema de Discourse, ahora pueden incluir cadenas localizadas, las cuales estarán disponibles para su uso en componentes de la interfaz de usuario. Las traducciones se almacenan en el mismo formato que las traducciones del núcleo y de los complementos, y pueden utilizarse de manera casi idéntica.
Los temas pueden proporcionar archivos de traducción en un formato como /locales/{locale}.yml. Estos archivos deben ser YAML válidos, con una única clave de nivel superior igual al idioma que se está definiendo. Estos pueden definirse usando la CLI discourse_theme, importando un .tar.gz, instalando desde un repositorio GIT o a través del editor en theme-creator.discourse.org.
Un archivo de idioma de ejemplo podría verse así:
es:
theme_metadata:
description: "Esta es una descripción para mi tema"
settings:
theme_setting_name: "Esta es una descripción para la configuración `theme_setting_name`"
another_theme_setting_name:
description: "Esta es una descripción para la configuración `another_theme_setting_name`"
sidebar:
welcome: "Bienvenido"
back: "atrás"
welcome_subhead: "¡Nos alegra que estés aquí!"
likes_header: "Comparte el cariño"
badges_header: "Tus mejores insignias"
full_profile: "Ver tu perfil completo"
Los administradores pueden sobrescribir claves individuales por tema en la interfaz de usuario de /admin/customize/themes. La fallback se maneja de la misma manera que en el núcleo, por lo que está bien tener traducciones incompletas para idiomas distintos al inglés; en ese caso, se utilizarán las claves en inglés.
En segundo plano, estas traducciones se almacenan junto con las traducciones del núcleo, bajo un espacio de nombres específico del tema. Por ejemplo:
theme_translation.{theme_id}.sidebar.welcome
Nunca debes codificar el theme_id directamente en el código de tu tema. Para construir dinámicamente la clave de traducción, utiliza el helper themePrefix:
import { i18n } from "discourse-i18n";
import { themePrefix } from "virtual:theme";
// En código JS:
const result = i18n(themePrefix("my_translation_key"));
console.log("Desde Javascript", result);
// En una etiqueta de plantilla:
<template>{{i18n (themePrefix "blah")}}</template>
Para un ejemplo completo de cómo usar traducciones en un tema, consulta el tema Fakebook de @awesomerobot: GitHub - discourse/Fakebook · GitHub
Este documento está bajo control de versiones: sugiere cambios en GitHub.


