Para aqueles que procuram adicionar idiomas e traduções personalizadas a um tema ou componente de tema do Discourse, eles agora podem incluir strings localizáveis, que são disponibilizadas para uso em componentes da interface do usuário. As traduções são armazenadas no mesmo formato que as traduções do núcleo/plugin e podem ser usadas quase da mesma forma.
Os temas podem fornecer arquivos de tradução em um formato como /locales/{locale}.yml. Esses arquivos devem ser YAML válido, com uma única chave de nível superior igual ao locale que está sendo definido. Eles podem ser definidos usando a CLI discourse_theme, importando um .tar.gz, instalando a partir de um repositório GIT ou via o editor em theme-creator.discourse.org.
Um arquivo de locale de exemplo pode ser assim:
en:
theme_metadata:
description: "This is a description for my theme"
settings:
theme_setting_name: "This is a description for the setting `theme_setting_name`"
another_theme_setting_name:
description: "This is a description for the setting `another_theme_setting_name`"
sidebar:
welcome: "Welcome"
back: "back,"
welcome_subhead: "We're glad you're here!"
likes_header: "Share the Love"
badges_header: "Your Top Badges"
full_profile: "View your full profile"
Os administradores podem substituir chaves individuais por tema na interface do usuário /admin/customize/themes. O fallback é tratado da mesma forma que o núcleo, portanto, está tudo bem em ter traduções incompletas para idiomas que não sejam o inglês, pois usarão as chaves em inglês.
Em segundo plano, essas traduções são armazenadas ao lado das 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 no código do seu tema, então existem algumas maneiras de ajudá-lo a acessar as traduções.
Em arquivos .hbs, você pode usar o helper dedicado
{{theme-i18n "my_translation_key"}}
Ou, se você precisar passar a chave de tradução para outro componente, você pode usar o helper theme-prefix:
<DButton @label={{theme-prefix "my_translation_key"}} />
Em Javascript, ou em arquivos .gjs, você pode usar a função themePrefix. Ela é injetada automaticamente e não precisa ser importada:
const result = I18n.t(themePrefix("my_translation_key"));
<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
Este documento é controlado por versão - sugira alterações no github.


