Para aqueles que desejam adicionar idiomas e traduções personalizadas a um tema ou componente de tema do Discourse, agora é possível incluir strings localizadas, que ficam disponíveis para uso em componentes de interface. As traduções são armazenadas no mesmo formato que as traduções do núcleo/plugin e podem ser usadas de maneira quase idêntica.
Os temas podem fornecer arquivos de tradução no formato /locales/{locale}.yml. Esses arquivos devem ser YAML válidos, com uma única chave de nível superior igual ao idioma sendo definido. Eles podem ser definidos usando o CLI discourse_theme, importando um .tar.gz, instalando a partir de um repositório GIT ou por meio do editor em theme-creator.discourse.org.
Um exemplo de arquivo de idioma pode ser:
pt_BR:
theme_metadata:
description: "Esta é uma descrição para o meu tema"
settings:
theme_setting_name: "Esta é uma descrição para a configuração `theme_setting_name`"
another_theme_setting_name:
description: "Esta é uma descrição para a configuração `another_theme_setting_name`"
sidebar:
welcome: "Bem-vindo"
back: "voltar"
welcome_subhead: "Ficamos felizes por você estar aqui!"
likes_header: "Compartilhe o carinho"
badges_header: "Suas melhores medalhas"
full_profile: "Ver seu perfil completo"
Os administradores podem substituir chaves individuais por tema na interface de usuário em /admin/customize/themes. O fallback é tratado da mesma forma que no núcleo, então é aceitável ter traduções incompletas para idiomas que não sejam o inglês, pois eles utilizarão as chaves em inglês.
Em segundo plano, essas traduções são armazenadas junto com as traduções do núcleo, sob um namespace específico do tema. Por exemplo:
theme_translation.{theme_id}.sidebar.welcome
Você nunca deve codificar o theme_id diretamente no código do seu tema. Para construir dinamicamente a chave de tradução, use o helper themePrefix:
import { i18n } from "discourse-i18n";
import { themePrefix } from "virtual:theme";
// Em código JS:
const result = i18n(themePrefix("minha_chave_de_traducao"));
console.log("Do Javascript", result);
// Em uma tag de template:
<template>{{i18n (themePrefix "blah")}}</template>
Para um exemplo completo de como usar traduções em um tema, confira o tema Fakebook de @awesomerobot: GitHub - discourse/Fakebook · GitHub
Este documento está sob controle de versão - sugira alterações no GitHub.


