Per coloro che desiderano aggiungere lingue e traduzioni personalizzate a un tema o a un componente tema di Discourse, ora è possibile includere stringhe localizzate, che vengono rese disponibili per l’uso nei componenti dell’interfaccia utente. Le traduzioni sono archiviate nello stesso formato delle traduzioni core/plugin e possono essere utilizzate quasi allo stesso modo.
I temi possono fornire file di traduzione in un formato come /locales/{locale}.yml. Questi file devono essere YAML validi, con una singola chiave di primo livello uguale alla locale definita. Queste possono essere definite utilizzando la CLI discourse_theme, importando un .tar.gz, installando da un repository GIT o tramite l’editor su theme-creator.discourse.org.
Un file di locale di esempio potrebbe essere simile a
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"
Gli amministratori possono sovrascrivere le singole chiavi per tema nell’interfaccia utente /admin/customize/themes. Il fallback è gestito allo stesso modo del core, quindi è accettabile avere traduzioni incomplete per le lingue non inglesi che utilizzeranno le chiavi inglesi.
In background, queste traduzioni sono archiviate insieme alle traduzioni core, sotto un namespace specifico del tema. Per esempio:
theme_translation.{theme_id}.sidebar.welcome
Non si dovrebbe mai codificare in modo permanente l’theme_id nel codice del tema, quindi ci sono alcuni modi per aiutarti ad accedere alle traduzioni.
Nei file .hbs, è possibile utilizzare l’helper dedicato
{{theme-i18n "my_translation_key"}}
Oppure, se è necessario passare la chiave di traduzione a un altro componente, è possibile utilizzare l’helper theme-prefix:
<DButton @label={{theme-prefix "my_translation_key"}} />
In Javascript, o nei file .gjs, è possibile utilizzare la funzione themePrefix. Questa viene iniettata automaticamente e non necessita di essere importata:
const result = I18n.t(themePrefix("my_translation_key"));
<template>{{i18n (themePrefix "blah")}}</template>
Per un esempio completo di utilizzo delle traduzioni in un tema, consulta il tema Fakebook di @awesomerobot: GitHub - discourse/Fakebook
Questo documento è controllato tramite versione - suggerisci modifiche su github.


