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

عادةً ما تكون أفضل طريقة لإضافة لغة جديدة إلى Discourse هي إنشاء طلب سحب (pull request) كما هو موضح في “How to add a new language”.

الدليل التالي مخصص لك إذا كنت ترغب في استخدام لغة لا يمكن إضافتها إلى النواة (core) في الوقت الحالي.


إضافة ترميز لغة يمتد لترميز لغة موجود

لنفترض أنك تريد إضافة ترميز لغة إسباني للمكسيك (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")
.js.erb

محتوى assets/locales/es_MX.js.erb بسيط للغاية – تأكد من استبدال رمز اللغة بداخله بالرمز الذي تحتاجه.

//= require locales/i18n
<%= JsLocaleHelper.output_locale(:es_MX) %>
ملفات الترجمة في config/locales

تحتوي الملفات config/locales/client.es_MX.yml و config/locales/server.es_MX.yml على الترجمات التي تريد استخدامها. لست بحاجة إلى توفير جميع الترجمات التي يحتاجها Discourse. سيتم استخدام الترجمات الإنجليزية في حالة وجود ترجمات مفقودة.


إضافة ترميز لغة جديد

إضافة ترميز لغة جديد تمامًا، لا ينبغي أن يعتمد على ترميز لغة موجود، يتطلب عملاً إضافيًا قليلاً.

يجب أن يبدو هيكل دليل المكوّن الإضافي (plugin) الخاص بك كما يلي:

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 }
  }
)
.js.erb

محتوى assets/locales/foo.js.erb بسيط للغاية – تأكد من استبدال رمز اللغة بداخله بالرمز الذي تحتاجه.

//= require locales/i18n
<%= JsLocaleHelper.output_locale(:foo) %>
ملفات الترجمة في config/locales

تحتوي الملفات config/locales/client.foo.yml و config/locales/server.foo.yml على الترجمات التي تريد استخدامها. لست بحاجة إلى توفير جميع الترجمات التي يحتاجها Discourse. سيتم استخدام الترجمات الإنجليزية في حالة وجود ترجمات مفقودة.


الأسئلة الشائعة

لا يقوم Discourse بتحميل ترميز اللغة الخاص بي. ما الخطأ؟

تأكد من تمكين المكوّن الإضافي، وأنك سجلت ترميز اللغة بشكل صحيح، وأن جميع الملفات المطلوبة موجودة وتحتوي على رمز اللغة الصحيح في اسم الملف. لا يقوم Discourse بتحميل ترميزات اللغات عند اكتشاف ملفات مفقودة.


هذا المستند يتم التحكم في إصداره - اقترح تغييرات على github.

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 إعجابات