المؤلف:
    إنشاء:2025-04-18آخر تحديث:2026-05-31

    ترجمة موقع Angular 19 (Webpack) الخاص بك باستخدام Intlayer | التدويل (i18n)

    جدول المحتويات

    لماذا Intlayer على البدائل؟

    بالمقارنة مع الحلول الرئيسية مثل ngx-translate أو angular-l10n، يعد Intlayer حلاً يأتي مزودًا بتحسينات متكاملة مثل:

    تم تحسين Intlayer للعمل بشكل مثالي مع Angular من خلال تقديم نطاق المحتوى على مستوى المكونات والترجمات المحملة البطيئة وجميع الميزات اللازمة لتوسيع نطاق التدويل (i18n).

    بدلاً من تحميل ملفات JSON ضخمة إلى صفحاتك، قم بتحميل المحتوى الضروري فقط. يساعد Intlayer في تقليل أحجام البندل وصفحاتك بنسبة تصل إلى 50%.

    يؤدي تحديد نطاق محتوى تطبيقك إلى تسهيل الصيانة للتطبيقات واسعة النطاق. يمكنك تكرار أو حذف مجلد ميزات واحد دون العبء العقلي لمراجعة قاعدة بيانات المحتوى بالكامل. بالإضافة إلى ذلك، تتم كتابة Intlayer بالكامل لضمان دقة المحتوى الخاص بك.

    يؤدي تحديد موقع المحتوى المشترك إلى تقليل السياق المطلوب بواسطة نماذج اللغات الكبيرة (LLMs). يأتي Intlayer أيضًا مزودًا بمجموعة من الأدوات، مثل CLI لاختبار الترجمات المفقودة،LSP، MCP وagent skills، لجعل تجربة المطور (DX) أكثر سلاسة للذكاء الاصطناعي وكلاء.

    استخدم الأتمتة للترجمة في مسار CI/CD الخاص بك باستخدام LLM من اختيارك على حساب مزود الذكاء الاصطناعي الخاص بك. يقدم Intlayer أيضًا مترجمًا لأتمتة استخراج المحتوى، بالإضافة إلى منصة ويب للمساعدة في الترجمة في الخلفية.

    يمكن أن يؤدي ربط ملفات JSON الضخمة بالمكونات إلى حدوث مشكلات في الأداء والتفاعل. يعمل Intlayer على تحسين تحميل المحتوى الخاص بك في وقت الإنشاء.

    أكثر من مجرد حل i18n، يوفر Intlayer [محررًا مرئيًا] مستضافًا ذاتيًا](/ar/doc/concept/editor) وكامل CMS لمساعدتك في إدارة المحتوى متعدد اللغات في الوقت الفعلي، مما يجعل التعاون مع المترجمين ومؤلفي النصوص وأعضاء الفريق الآخرين سلسًا. يمكن تخزين المحتوى محليًا و/أو عن بعد.


    دليل خطوة بخطوة لإعداد Intlayer في تطبيق Angular

    ide.intlayer.org
    intlayer-angular-19-template.vercel.app

    راجع قالب التطبيق على GitHub.

    1. تثبيت التبعيات

      قم بتثبيت الحزم اللازمة باستخدام npm:

      bash
      npx intlayer init --interactive
      
      علامة --interactive اختيارية. استخدم intlayer-cli init إذا كنت وكيل ذكاء اصطناعي.
      سيقوم هذا الأمر باكتشاف بيئتك وتثبيت الحزم المطلوبة. على سبيل المثال:
      bash
      npm install intlayer angular-intlayer
      npm install @angular-builders/custom-webpack --save-dev
      
      • intlayer

        الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، وإعلان الترجمة، وإعلان المحتوى، والتحويل البرمجي، وأوامر CLI.

      • angular-intlayer الحزمة التي تدمج Intlayer مع تطبيق Angular. توفر مزودي السياق والخطافات لتدويل Angular.

      • @angular-builders/custom-webpack مطلوب لتخصيص تكوين Webpack لـ Angular CLI.

    2. تكوين مشروعك

      أنشئ ملف تكوين لتهيئة لغات تطبيقك:

      intlayer.config.ts
      import { Locales, type IntlayerConfig } from "intlayer";
      
      const config: IntlayerConfig = {
        internationalization: {
          locales: [
            Locales.ENGLISH,
            Locales.FRENCH,
            Locales.SPANISH,
            // لغاتك الأخرى
          ],
          defaultLocale: Locales.ENGLISH,
        },
      };
      
      export default config;
      
      من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL الموطنة، وإعادة توجيه البرمجيات الوسيطة، وأسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، ارجع إلى وثائق التكوين.
    3. دمج Intlayer في تكوين Angular الخاص بك

      لدمج Intlayer مع Angular CLI، تحتاج إلى استخدام منشئ مخصص. يفترض هذا الدليل أنك تستخدم Webpack (الافتراضي للعديد من مشاريع Angular).

      أولاً، قم بتعديل ملف angular.json لاستخدام منشئ Webpack المخصص. قم بتحديث تكوينات build و serve:

      angular.json
      {
        "projects": {
          "your-app-name": {
            "architect": {
              "build": {
                "builder": "@angular-builders/custom-webpack:browser", // replace "@angular-devkit/build-angular:application",
                "options": {
                  "customWebpackConfig": {
                    "path": "./webpack.config.ts",
                    "mergeStrategies": { "module.rules": "prepend" },
                  },
                  "main": "src/main.ts", // replace "browser": "src/main.ts",
                  // ...
                },
              },
              "serve": {
                "builder": "@angular-builders/custom-webpack:dev-server",
              },
            },
          },
        },
      }
      
      تأكد من استبدال your-app-name بالاسم الفعلي لمشروعك في angular.json.

      بعد ذلك، أنشئ ملف webpack.config.ts في جذر مشروعك:

      webpack.config.ts
      import { mergeConfig } from "angular-intlayer/webpack";
      
      export default mergeConfig({});
      
      تقوم دالة mergeConfig بتكوين Webpack مع Intlayer. حيث تقوم بحقن IntlayerPlugin (للتعامل مع ملفات إعلان المحتوى) وتعيين الأسماء المستعارة لتحقيق الأداء الأمثل.
    4. إعلان المحتوى الخاص بك

      قم بإنشاء وإدارة إعلانات المحتوى لتخزين الترجمات:

      يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك طالما تم تضمينها في دليل contentDir (افتراضيًا، ./src). وتطابق امتداد ملف إعلان المحتوى (افتراضيًا، .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
      لمزيد من التفاصيل، راجع وثائق إعلان المحتوى.
    5. استخدام Intlayer في كودك

      لاستخدام ميزات التدويل في Intlayer عبر تطبيق Angular الخاص بك، تحتاج إلى توفير Intlayer في تكوين تطبيقك.

      src/app/app.config.ts
      import { ApplicationConfig } from "@angular/core";
      import { provideRouter } from "@angular/router";
      import { provideIntlayer } from "angular-intlayer";
      import { routes } from "./app.routes";
      
      export const appConfig: ApplicationConfig = {
        providers: [
          provideRouter(routes),
          provideIntlayer(), // أضف مزود Intlayer هنا
        ],
      };
      

      بعد ذلك، يمكنك استخدام دالة useIntlayer داخل أي مكون.

      src/app/app.component.ts
      import { Component } from "@angular/core";
      import { RouterOutlet } from "@angular/router";
      import { useIntlayer } from "angular-intlayer";
      
      @Component({
        selector: "app-root",
        standalone: true,
        imports: [RouterOutlet],
        templateUrl: "./app.component.html",
        styleUrl: "./app.component.css",
      })
      export class AppComponent {
        content = useIntlayer("app");
      }
      

      وفي القالب الخاص بك:

      src/app/app.component.html
      <div class="content">
        <h1>{{ content().title }}</h1>
        <p>{{ content().congratulations }}</p>
      </div>
      

      يتم إرجاع محتوى Intlayer كـ Signal ، لذا يمكنك الوصول إلى القيم عن طريق استدعاء الإشارة: content().title.

    6. تغيير لغة المحتوى الخاص بك

      اختياري

      لتغيير لغة المحتوى الخاص بك، يمكنك استخدام دالة setLocale التي توفرها دالة useLocale. يتيح لك هذا تعيين لغة التطبيق وتحديث المحتوى وفقًا لذلك.

      أنشئ مكونًا للتبديل بين اللغات:

      src/app/locale-switcher.component.ts
      import { Component } from "@angular/core";
      import { CommonModule } from "@angular/common";
      import { useLocale } from "angular-intlayer";
      
      @Component({
        selector: "app-locale-switcher",
        standalone: true,
        imports: [CommonModule],
        template: `
          <div class="locale-switcher">
            <select
              [value]="locale()"
              (change)="setLocale($any($event.target).value)"
            >
              @for (loc of availableLocales; track loc) {
                <option [value]="loc">{{ loc }}</option>
              }
            </select>
          </div>
        `,
      })
      export class LocaleSwitcherComponent {
        localeCtx = useLocale();
      
        locale = this.localeCtx.locale;
        availableLocales = this.localeCtx.availableLocales;
        setLocale = this.localeCtx.setLocale;
      }
      

      بعد ذلك، استخدم هذا المكون في app.component.ts:

      src/app/app.component.ts
      import { Component } from "@angular/core";
      import { RouterOutlet } from "@angular/router";
      import { useIntlayer } from "angular-intlayer";
      import { LocaleSwitcherComponent } from "./locale-switcher.component";
      
      @Component({
        selector: "app-root",
        standalone: true,
        imports: [RouterOutlet, LocaleSwitcherComponent],
        templateUrl: "./app.component.html",
        styleUrl: "./app.component.css",
      })
      export class AppComponent {
        content = useIntlayer("app");
      }
      

    تكوين TypeScript

    يستخدم Intlayer ميزة زيادة الوحدات (module augmentation) للاستفادة من مزايا TypeScript وجعل قاعدة الكود الخاصة بك أقوى.

    Autocompletion

    Translation error

    تأكد من أن تكوين TypeScript الخاص بك يتضمن الأنواع التي تم إنشاؤها تلقائيًا.

    tsconfig.json
    {
      // ... تكوينات TypeScript الموجودة لديك
      "include": [
        // ... تكوينات TypeScript الموجودة لديك
        ".intlayer/**/*.ts", // تضمين الأنواع التي تم إنشاؤها تلقائيًا
      ],
    }
    

    تكوين Git

    يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. يتيح لك ذلك تجنب إضافتها إلى مستودع Git الخاص بك.

    للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف .gitignore الخاص بك:

    bash
    #  تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
    .intlayer
    

    إضافة VS Code

    لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت إضافة Intlayer VS Code الرسمية.

    التثبيت من VS Code Marketplace

    توفر هذه الإضافة:

    • الإكمال التلقائي لمفاتيح الترجمة.
    • كشف الأخطاء في الوقت الفعلي للترجمات المفقودة.
    • معاينات مضمنة للمحتوى المترجم.
    • إجراءات سريعة لإنشاء وتحديث الترجمات بسهولة.

    لمزيد من التفاصيل حول كيفية استخدام الإضافة، راجع وثائق إضافة Intlayer VS Code.


    اذهب أبعد من ذلك

    للمضي قدمًا، يمكنك تنفيذ المحرر المرئي أو إخراج المحتوى الخاص بك باستخدام نظام إدارة المحتوى (CMS).


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

    • @angular/localize المدمج: حل Angular الرسمي الذي يترجم حزم تطبيقات منفصلة لكل لغة.
    • ngx-translate و Transloco: تحميل JSON في وقت التشغيل عبر الأنابيب أو التوجيهات.
    • Intlayer: تكامل مباشر مع إشارات Angular Signals، ترجمة وقت البناء، أنواع TypeScript كاملة، ترجمة بالذكاء الاصطناعي، ومحرر مرئي.

    انظر لماذا Intlayer.

    أقل بكثير من الحلول القائمة على فضاءات الأسماء، لأن الصفحة لا تُحمل أبدًا كتالوجًا لا تعرضه. يستبدل مترجم وقت البناء استدعاءات useIntlayer بإدخالات القاموس الدقيقة التي يستخدمها المكون، وتفصل القواميس الديناميكية الباقي حسب اللغة، مما يقلل الحزمة بنسبة تصل إلى 50%. انظر تحسين الحزم و المقارنة المعيارية.

    إلى حد كبير نعم. انظر نظرة عامة على محولات التوافق. يمكنك أيضًا الاحتفاظ بملفات JSON مع مكونة مزامنة JSON.

    نعم. تحافظ مكونة مزامنة JSON على ملفات /messages/{locale}/{namespace}.json الخاصة بك كمصدر الحقيقة وتُنشئ قواميس Intlayer منها، في كلا الاتجاهين. وتقوم مكونة مزامنة PO بنفس الشيء لكتالوجات gettext، وتسمح لك الملفات المقسمة حسب اللغة بتقسيم المحتوى حسب اللغة بدلاً من تجميع كل اللغات في ملف واحد.

    لا. قم بتشغيل npx intlayer extract وسيقرأ Intlayer ملفات المصدر الخاصة بك، ويسحب السلاسل النصية الموجهة للمستخدم ويكتب ملف .content بجانب كل منها، بحيث تراجع diff بدلاً من نسخ السلاسل إلى كتالوج يدويًا. راجع أمر extract.

    لأتمتة كاملة، يقوم Intlayer Compiler بالشيء نفسه في وقت البناء وينشئ القواميس عند كل تغيير.

    خمس أدوات، كلها اختيارية:

    • امتداد VS Code: الانتقال من مفتاح useIntlayer إلى ملف المحتوى المصرح به، استخراج المحتوى من المكون، وتشغيل build و fill و test و push و pull من لوحة الأوامر أو علامة تبويب Intlayer.
    • خادم LSP: نفس التجربة في أي محرر يدعم LSP، مع الانتقال إلى التعريف وعروض القيمة المترجمة عند التمرير والإكمال التلقائي للمفاتيح. يدعم أيضًا استدعاءات i18next و react-i18next و next-intl و use-intl.
    • خادم MCP: يكشف وثائق Intlayer و CLI إلى Cursor و VS Code و Claude Desktop و Claude Code و ChatGPT.
    • Agent skills: مهارات مخصصة مثل intlayer-config و intlayer-cli و intlayer-content.
    • ESLint plugin: قاعدة no-raw-text ترصد النصوص المكتوبة مباشرة بدون تدويل.