logologo
البدء
الدليل
التطوير
الإضافات
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
البدء
الدليل
التطوير
الإضافات
API
logologo

بدء سريع

نظرة عامة على تطوير الإضافات
كتابة الإضافة الأولى
هيكل دليل المشروع

تطوير الواجهة الخلفية

نظرة عامة
Plugin
جداول بيانات Collections
عمليات Database
إدارة مصادر بيانات DataSourceManager
إدارة موارد ResourceManager
التحكم في أذونات ACL
Middleware
Cache
Event
سياق طلب Context
نص ترقية Migration
Logger
Telemetry
I18n (تدويل)
Command (سطر الأوامر)
إدارة المهام المجدولة CronJobManager
Test

تطوير الواجهة الأمامية

نظرة عامة
Plugin
Context (السياق)
Router
التحكم في أذونات ACL
إدارة مصادر بيانات DataSourceManager
Resource
Request
Styles & Themes (الأنماط والمظاهر)
Logger
I18n (تدويل)
Test

أخرى

دليل ترقية الإضافات
قائمة اللغات
إدارة التبعيات
البناء
Previous PageTelemetry
Next PageCommand (سطر الأوامر)
إشعار الترجمة بالذكاء الاصطناعي

تمت ترجمة هذه الوثائق تلقائيًا بواسطة الذكاء الاصطناعي.

#التدويل (I18n)

تدعم إضافات NocoBase التدويل متعدد اللغات (i18n) لكل من الواجهة الأمامية والخلفية. بفضل آلية موحدة، يمكنك بسهولة تطبيق محتوى متعدد اللغات في الإضافات.

#إدارة ملفات اللغات المتعددة

تُخزّن ملفات اللغات المتعددة للإضافات بشكل موحد في دليل src/locale. يُنصح بتسميتها بناءً على اللغة، على سبيل المثال:

|- /plugin-hello
  |- /src
    |- /locale
      |- en-US.json   # اللغة الإنجليزية
      |- zh-CN.json   # اللغة الصينية

يُصدّر كل ملف لغة كائن JSON يحتوي على جميع إدخالات الترجمة لتلك اللغة، على سبيل المثال:

// zh-CN.json
{
  "Hello": "你好",
  "World": "世界",
  "Enter your name": "请输入你的名字",
  "Your name is {{name}}": "你的名字是 {{name}}"
}
// en-US.json
{
  "Hello": "Hello",
  "World": "World",
  "Enter your name": "Enter your name",
  "Your name is {{name}}": "Your name is {{name}}"
}

عند إضافة ملفات لغة للمرة الأولى، ستحتاج إلى إعادة تشغيل التطبيق لتصبح سارية المفعول. يمكنك التحقق من إدخالات الترجمة عبر واجهة برمجة التطبيقات (API):
http://localhost:13000/api/app:getLang?locale=zh-CN

#كائن i18n العام

app.i18n هو كائن i18n العام، ومناسب للاستخدام في واجهة سطر الأوامر (CLI) أو في سيناريوهات الإضافات العامة. يمكن دمجه مع inquirer لتنفيذ تفاعلات سطر الأوامر:

import select from '@inquirer/select';
import input from '@inquirer/input';

export class PluginSampleI18nServer extends Plugin {
  load() {
    this.app.command('test-i18n').action(async () => {
      const answer1 = await select({
        message: 'Select a language',
        choices: [
          { name: '中文', value: 'zh-CN' },
          { name: 'English', value: 'en-US' }
        ]
      });

      await this.app.changeLanguage(answer1);

      const answer2 = await input({
        message: app.i18n.t('Enter your name')
      });

      console.log(app.i18n.t('Your name is {{name}}', { name: answer2 }));
    });
  }
}

تُستخدم app.i18n.t(text, options) لترجمة النصوص وتدعم المتغيرات القالبية.

#سياق طلب i18n

يُعد ctx.i18n لكل طلب نسخة مستنسخة من كائن i18n العام، ويستجيب بشكل مستقل بمعلومات متعددة اللغات بناءً على لغة العميل.

تعيين لغة العميل

  • سلسلة الاستعلام (Query String):
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
  • ترويسة الطلب (Request Header) (موصى به):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US

الاستخدام في البرمجيات الوسيطة (Middleware)

export class PluginSampleI18nServer extends Plugin {
  load() {
    this.app.use(async (ctx, next) => {
      if (ctx.path === '/api/test-i18n') {
        ctx.body = ctx.t('Hello', { ns: '@my-project/plugin-hello' });
      }
      await next();
    });
  }
}

عند الوصول إلى http://localhost:13000/api/test-i18n?locale=zh-CN، ستُعاد القيمة 你好 (والتي تعني "مرحباً" بالصينية).

#i18n الداخلي للإضافة

يمكن للإضافات استخدام plugin.t(key, options) مباشرةً للحصول على الترجمات:

export class PluginSampleI18nServer extends Plugin {
  load() {
    this.app.use(async (ctx, next) => {
      if (ctx.path === '/api/plugin-i18n') {
        ctx.body = this.plugin.t('Hello');
      }
      await next();
    });
  }
}

plugin.t(text) مكافئ لـ ctx.t(text, { ns })

#واجهات برمجة التطبيقات (APIs) ذات الصلة

  • app.i18n
  • app.t(text, options)
  • ctx.i18n
  • ctx.t(text, options)
  • plugin.t()
  • tExpr(text, options)