بالنسبة لأولئك الذين يرغبون في إضافة لغات وترجمات مخصصة إلى سمة أو مكوّن سمة في Discourse، يمكنهم الآن تضمين نصوص محلية، والتي تصبح متاحة للاستخدام في مكونات واجهة المستخدم. تُخزَّن الترجمات بنفس صيغة ترجمات النواة/الإضافات، ويمكن استخدامها بالطريقة نفسها تقريباً.
يمكن للسمات تقديم ملفات ترجمة بصيغة مثل /locales/{locale}.yml. يجب أن تكون هذه ملفات YAML صالحة، بمفتاح علوي واحد يساوي اللغة المحلية التي يتم تعريفها. يمكن تعريف هذه الملفات باستخدام سطر أوامر 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. تحدد نصوص الموقع هذه الإدخالات على أنها js.theme_translations.THEME_ID.KEY؛ تستخدم التعديلات نفس تجاوزات ترجمة السمة كما في محرر السمات.
في الخلفية، تُخزَّن هذه الترجمات جنباً إلى جنب مع ترجمات النواة، تحت مساحة أسماء (namespace) خاصة بالسمة. على سبيل المثال:
theme_translation.{theme_id}.sidebar.welcome
يجب ألا تقوم بتضمين theme_id بشكل ثابت (hardcode) في كود سمتك. لبناء مفتاح الترجمة ديناميكياً، استخدم مساعد 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.


