Для тех, кто хочет добавить пользовательские языки и переводы в тему или компонент темы Discourse, теперь можно включать локализованные строки, которые становятся доступны для использования в компонентах интерфейса. Переводы хранятся в том же формате, что и переводы ядра/плагинов, и могут использоваться практически аналогичным образом.
Темы могут предоставлять файлы переводов в формате /locales/{locale}.yml. Эти файлы должны быть валидным YAML, с единственным ключом верхнего уровня, равным определяемому локали. Их можно определить с помощью CLI discourse_theme, импортировав .tar.gz, установив из GIT-репозитория или через редактор на theme-creator.discourse.org.
Пример файла локали может выглядеть так:
en:
theme_metadata:
description: "Это описание моей темы"
settings:
theme_setting_name: "Это описание для настройки `theme_setting_name`"
another_theme_setting_name:
description: "Это описание для настройки `another_theme_setting_name`"
sidebar:
welcome: "Добро пожаловать"
back: "назад"
welcome_subhead: "Мы рады вас видеть!"
likes_header: "Поделитесь любовью"
badges_header: "Ваши лучшие значки"
full_profile: "Посмотреть полный профиль"
Администраторы могут переопределять отдельные ключи для каждой темы в пользовательском интерфейсе /admin/customize/themes. Механизм возврата (fallback) работает так же, как и в ядре, поэтому допустимы неполные переводы для языков, отличных от английского: в таких случаях будут использоваться английские ключи.
В фоновом режиме эти переводы хранятся вместе с переводом ядра в пространстве имён, специфичном для темы. Например:
theme_translation.{theme_id}.sidebar.welcome
Никогда не hardcode-те theme_id в коде вашей темы. Для динамического построения ключа перевода используйте хелпер themePrefix:
import { i18n } from "discourse-i18n";
import { themePrefix } from "virtual:theme";
// В коде JS:
const result = i18n(themePrefix("my_translation_key"));
console.log("Из Javascript", result);
// В теге шаблона:
<template>{{i18n (themePrefix "blah")}}</template>
Для полного примера использования переводов в теме ознакомьтесь с темой Fakebook от @awesomerobot: GitHub - discourse/Fakebook · GitHub
Этот документ находится под версионным контролем — предлагайте изменения на GitHub.


