Für diejenigen, die benutzerdefinierte Sprachen und Übersetzungen zu einem Discourse-Theme oder Theme-Komponente hinzufügen möchten, können sie jetzt lokalisierte Zeichenfolgen einfügen, die zur Verwendung in UI-Komponenten verfügbar gemacht werden. Übersetzungen werden im selben Format wie Core/Plugin-Übersetzungen gespeichert und können fast auf die gleiche Weise verwendet werden.
Themes können Übersetzungsdateien in einem Format wie /locales/{locale}.yml bereitstellen. Diese Dateien sollten gültiges YAML sein, mit einem einzigen Top-Level-Schlüssel, der dem zu definierenden Gebietsschema entspricht. Diese können über die discourse_theme CLI, durch Importieren eines .tar.gz, durch Installation aus einem GIT-Repository oder über den Editor auf theme-creator.discourse.org definiert werden.
Eine Beispiel-Locale-Datei könnte so aussehen:
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"
Administratoren können einzelne Schlüssel pro Theme in der Benutzeroberfläche /admin/customize/themes überschreiben. Die Fallback-Behandlung erfolgt auf die gleiche Weise wie bei Core, sodass es in Ordnung ist, wenn unvollständige Übersetzungen für nicht-englische Sprachen die englischen Schlüssel verwenden.
Im Hintergrund werden diese Übersetzungen zusammen mit den Core-Übersetzungen unter einem themenspezifischen Namespace gespeichert. Zum Beispiel:
theme_translation.{theme_id}.sidebar.welcome
Sie sollten die theme_id niemals fest im Theme-Code codieren, daher gibt es einige Möglichkeiten, um Ihnen beim Zugriff auf die Übersetzungen zu helfen.
In .hbs-Dateien können Sie den dedizierten Helper verwenden:
{{theme-i18n "my_translation_key"}}
Oder, wenn Sie den Übersetzungsschlüssel an eine andere Komponente übergeben müssen, können Sie den theme-prefix-Helper verwenden:
<DButton @label={{theme-prefix "my_translation_key"}} />
In Javascript oder in .gjs-Dateien können Sie die Funktion themePrefix verwenden. Diese wird automatisch injiziert und muss nicht importiert werden:
const result = I18n.t(themePrefix("my_translation_key"));
<template>{{i18n (themePrefix "blah")}}</template>
Ein vollständiges Beispiel für die Verwendung von Übersetzungen in einem Theme finden Sie in @awesomerobot’s Fakebook-Theme: GitHub - discourse/Fakebook
Dieses Dokument wird versioniert – schlagen Sie Änderungen auf github vor.


