Для тех, кто хочет добавить собственные языки и переводы в тему или компонент темы Discourse, теперь можно включать локализованные строки, которые становятся доступными для использования в компонентах пользовательского интерфейса. Переводы хранятся в том же формате, что и переводы ядра/плагинов, и могут использоваться практически так же.
Темы могут предоставлять файлы переводов в формате, похожем на /locales/{locale}.yml. Эти файлы должны быть валидным YAML с одним ключом верхнего уровня, равным определяемому языку (локали). Их можно определить с помощью CLI discourse_theme, импортировав .tar.gz, установив из GIT-репозитория или через редактор на theme-creator.discourse.org.
Пример файла локали может выглядеть так:
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"
Администраторы могут переопределять отдельные ключи для каждой темы в интерфейсе /admin/customize/themes. Обработка значений по умолчанию (fallback) работает так же, как и в ядре, поэтому наличие неполных переводов для неанглийских языков допустимо: в этом случае будут использоваться английские ключи.
Администраторы также могут управлять этими переводами в разделе Appearance → Site texts. Выберите тему или компонент, чтобы найти строки из её файла локали, отредактировать перевод на выбранном языке или отменить переопределение и вернуть значение по умолчанию из файла локали. Выбор можно сделать доступным по ссылке, используя /admin/customize/site_texts?theme_id=THEME_ID. В разделе Site texts эти записи идентифицируются как js.theme_translations.THEME_ID.KEY; редактирование использует те же переопределения переводов темы, что и редактор тем.
В фоне эти переводы хранятся вместе с переводами ядра в пространстве имён, специфичном для темы. Например:
theme_translation.{theme_id}.sidebar.welcome
Никогда не следует захардкодить theme_id в коде вашей темы. Для динамического построения ключа перевода используйте хелпер themePrefix:
import { i18n } from "discourse-i18n";
import { themePrefix } from "virtual:theme";
// In JS code:
const result = i18n(themePrefix("my_translation_key"));
console.log("From Javascript", result);
// In a template tag:
<template>{{i18n (themePrefix "blah")}}</template>
Полный пример использования переводов в теме можно найти в теме Fakebook от @awesomerobot: GitHub - discourse/Fakebook · GitHub
Этот документ версионируется - предложения по изменениям на github.


