لمن يتطلعون إلى إضافة لغات وترجمات مخصصة إلى سمة Discourse أو مكون سمة، يمكنهم الآن تضمين سلاسل قابلة للترجمة، والتي تصبح متاحة للاستخدام في مكونات واجهة المستخدم. يتم تخزين الترجمات بنفس التنسيق المستخدم في الترجمات الأساسية/الإضافات، ويمكن استخدامها بنفس الطريقة تقريبًا.
يمكن للسمات توفير ملفات ترجمة بتنسيق مثل /locales/{locale}.yml. يجب أن تكون هذه الملفات YAML صالحة، مع مفتاح رئيسي واحد يساوي اللغة المحددة. يمكن تعريف هذه الملفات باستخدام أداة discourse_theme CLI، أو عن طريق استيراد ملف .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. تتم معالجة النسخ الاحتياطي بنفس طريقة المعالجة الأساسية، لذا لا بأس في وجود ترجمات غير مكتملة للغات غير الإنجليزية، حيث سيتم استخدام المفاتيح الإنجليزية.
في الخلفية، يتم تخزين هذه الترجمات بجوار الترجمات الأساسية، تحت مساحة اسم خاصة بالسمة. على سبيل المثال:
theme_translation.{theme_id}.sidebar.welcome
يجب ألا تقوم أبدًا بتضمين theme_id بشكل ثابت في كود السمة الخاص بك، لذا هناك عدة طرق لمساعدتك في الوصول إلى الترجمات.
في ملفات .hbs، يمكنك استخدام المساعد المخصص:
{{theme-i18n "my_translation_key"}}
أو، إذا كنت بحاجة إلى تمرير مفتاح الترجمة إلى مكون آخر، يمكنك استخدام المساعد theme-prefix:
<DButton @label={{theme-prefix "my_translation_key"}} />
في Javascript، أو في ملفات .gjs، يمكنك استخدام الدالة themePrefix. يتم حقن هذه الدالة تلقائيًا، ولا تحتاج إلى استيرادها:
const result = I18n.t(themePrefix("my_translation_key"));
<template>{{i18n (themePrefix "blah")}}</template>
للحصول على مثال كامل لاستخدام الترجمات في سمة، تحقق من سمة Fakebook الخاصة بـ @awesomerobot: GitHub - discourse/Fakebook
يتم التحكم في إصدار هذه الوثيقة - اقترح التغييرات على github.


