للأشخاص الذين يرغبون في إضافة لغات وترجمات مخصصة إلى سمة أو مكوّن سمة في Discourse، يمكنهم الآن تضمين نصوص محلّلة (localised strings)، والتي تُتاح للاستخدام في مكوّنات واجهة المستخدم. تُخزَّن الترجمات بنفس صيغة ترجمات النواة/الإضافات، ويمكن استخدامها بنفس الطريقة تقريبًا.
يمكن للسمات توفير ملفات ترجمة بصيغة مثل /locales/{locale}.yml. يجب أن تكون هذه ملفات YAML صالحة، بمفتاح واحد على المستوى العلوي يساوي اللغة (locale) المعرَّفة. يمكن تعريف هذه الملفات باستخدام سطر أوامر discourse_theme، أو عبر استيراد ملف .tar.gz، أو التثبيت من مستودع GIT، أو من خلال المحرر على theme-creator.discourse.org.
قد يبدو ملف لغة (locale) مثالًا على النحو التالي:
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.


