إضافة لغة جديدة من المكون الإضافي

عادةً ما تكون أفضل طريقة لإضافة لغة جديدة إلى 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

17 إعجابًا

How can I customize the language in the translation plugin? I see that some of the plugins in the language cannot be translated,

for example: discourse-details, discourse-local-dates, discourse-narrative-bot, discourse-nginx-performance-report

3 إعجابات