عادةً ما تكون أفضل طريقة لإضافة لغة جديدة إلى Discourse هي إنشاء طلب سحب (pull request) كما هو موضح في “How to add a new language”.
الدليل التالي مخصص لك، إذا كنت ترغب في استخدام لغة لا يمكن إضافتها إلى النواة (core) في الوقت الحالي.
إضافة موقع (locale) يمتد موقع موجود
لنفترض أنك تريد إضافة موقع إسباني للمكسيك (es_MX). يشحن Discourse بالفعل موقعًا إسبانيًا (es)، لذا فهذا سهل للغاية.
يجب أن يبدو هيكل دليل المكون الإضافي (plugin) الخاص بك كما يلي:
custom-locales
├── assets
│ └── locales
│ └── es_MX.js.erb
├── config
│ └── locales
│ ├── client.es_MX.yml
│ └── server.es_MX.yml
└── plugin.rb
plugin.rb
أنت تضيف الموقع الجديد عن طريق استدعاء register_locale.
-
المعلمة الأولى مطلوبة ويجب أن تكون رمز اللغة.
-
يمكن حذف
name(الاسم الإنجليزي للموقع) وnativeName(الاسم المعروض في واجهة المستخدم)، إذا كان رمز اللغة موجودًا فيnames.yml. -
fallbackLocaleهو رمز اللغة الذي يجب استخدامه كاحتياطي للترجمات المفقودة وقواعد الجمع.
# name: custom-locales
# about: An example plugin for adding new locales.
# version: 1.0
register_locale("es_MX", name: "Spanish (Mexico)", nativeName: "Español (México)", fallbackLocale: "es")
\u003clocale\u003e.js.erb
محتوى assets/locales/es_MX.js.erb بسيط للغاية - تأكد من استبدال رمز اللغة داخل هذا الملف بالرمز الذي تحتاجه.
//= require locales/i18n
\u003c%= JsLocaleHelper.output_locale(:es_MX) %\u003e
ملفات الترجمة في config/locales
تحتوي الملفات config/locales/client.es_MX.yml و config/locales/server.es_MX.yml على الترجمات التي تريد استخدامها. لست بحاجة إلى توفير جميع الترجمات التي يحتاجها Discourse. سيتم استخدام الترجمات الإنجليزية في حالة وجود ترجمات مفقودة.
إضافة موقع جديد
إضافة موقع جديد تمامًا، لا ينبغي أن يعتمد على موقع موجود، يتطلب عملاً إضافيًا قليلاً.
يجب أن يبدو هيكل دليل المكون الإضافي الخاص بك كما يلي:
custom-locales
├── assets
│ └── locales
│ └── foo.js.erb
├── config
│ └── locales
│ ├── client.foo.yml
│ └── server.foo.yml
├── lib
│ └── javascripts
│ └── locale
│ ├── message_format
│ │ └── foo.js
│ └── moment_js
│ └── foo.js
│ └── moment_js_timezones
│ └── foo.js
└── plugin.rb
plugin.rb
أنت تضيف الموقع الجديد عن طريق استدعاء register_locale.
-
المعلمة الأولى مطلوبة ويجب أن تكون رمز اللغة.
-
يمكن حذف
name(الاسم الإنجليزي للموقع) وnativeName(الاسم المعروض في واجهة المستخدم)، إذا كان رمز اللغة موجودًا فيnames.yml، وإلا يجب عليك تعيينهما أيضًا. -
يصف
pluralقواعد الجمع للغة. ألقِ نظرة علىplurals.rbللإلهام. يمكنك أيضًا حذف هذه المعلمة إذا كانplurals.rbيحتوي بالفعل على رمز لغتك.
# name: custom-locales
# about: An example plugin for adding new locales.
# version: 1.0
register_locale(
"foo",
name: "Foo",
nativeName: "Foo Bar",
plural: {
keys: [:one, :other],
rule: lambda { |n| n == 1 ? :one : :other }
}
)
\u003clocale\u003e.js.erb
محتوى assets/locales/foo.js.erb بسيط للغاية - تأكد من استبدال رمز اللغة داخل هذا الملف بالرمز الذي تحتاجه.
//= require locales/i18n
\u003c%= JsLocaleHelper.output_locale(:foo) %\u003e
ملفات الترجمة في config/locales
تحتوي الملفات config/locales/client.foo.yml و config/locales/server.foo.yml على الترجمات التي تريد استخدامها. لست بحاجة إلى توفير جميع الترجمات التي يحتاجها Discourse. سيتم استخدام الترجمات الإنجليزية في حالة وجود ترجمات مفقودة.
message_format/\u003clocale\u003e.js
يحتوي الملف lib/javascripts/locale/message_format/foo.js على قواعد الجمع المستخدمة من قبل العميل. يجب أن تكون القواعد هي نفسها التي استخدمتها في طريقة register_locale. ألقِ نظرة على الملفات الموجودة في lib/javascripts/locale للحصول على بعض الإلهام. يمكنك حذف هذا الملف إذا كان هذا الدليل يحتوي بالفعل على ملف لرمز لغتك.
moment_js/\u003clocale\u003e.js
يحتوي الملف lib/javascripts/locale/moment_js/foo.js على ملف الموقع المستخدم بواسطة moment.js. ألقِ نظرة على الملفات الموجودة في vendor/assets/javascripts/moment-locale للحصول على بعض الإلهام. يمكنك حذف هذا الملف إذا كان هذا الدليل يحتوي بالفعل على ملف لرمز لغتك.
moment_js_timezones/\u003clocale\u003e.js
يحتوي الملف lib/javascripts/locale/moment_js_timezones/foo.js على ملف الموقع المستخدم في قائمة اختيار المنطقة الزمنية المنسدلة. ألقِ نظرة على الملفات الموجودة في vendor/assets/javascripts/moment-timezone-names-locale للحصول على بعض الإلهام. هذا الملف اختياري.
الأسئلة الشائعة
لا يقوم Discourse بتحميل موقعي. ما الخطأ؟
تأكد من تمكين المكون الإضافي، وأنك سجلت الموقع بشكل صحيح، وأن جميع الملفات المطلوبة موجودة ولها رمز اللغة الصحيح في اسم الملف. لا يقوم Discourse بتحميل المواقع عندما يكتشف ملفات مفقودة.
\u003csmall\u003eتم التحكم في إصدار هذه الوثيقة - اقترح التغييرات على github.\u003c/small\u003e