Для тех, кто хочет добавить собственные языки и переводы в тему или компонент темы 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.


