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


