الرئيسيةبيئة اختبارمعرض الأعمالتطبيقوثيقةمدونة
    • Englishالإنجليزية
      EN
    • русскийالروسية
      RU
    • 日本語اليابانية
      JA
    • françaisالفرنسية
      FR
    • 한국어الكورية
      KO
    • 中文الصينية
      ZH
    • españolالإسبانية
      ES
    • Deutschالألمانية
      DE
    • العربيةالعربية
      AR
    • italianoالإيطالية
      IT
    • British Englishالإنجليزية (المملكة المتحدة)
      EN-GB
    • portuguêsالبرتغالية
      PT
    • हिन्दीالهندية
      HI
    • Türkçeالتركية
      TR
    • polskiالبولندية
      PL
    • Indonesiaالإندونيسية
      ID
    • Tiếng Việtالفيتنامية
      VI
    • українськаالأوكرانية
      UK
    /
    تصفية المستندات حسب الإطار
    Alt+←
    لماذا Intlayer؟
    ابدأ
    مفهوم
    • كيف يعمل Intlayer
    • التكوين
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • المحرر المرئي
    • CMS
    • تكامل CI/CD
    • ترجمةجمعتعدادشرطجنسإدراجملفتداخلMarkdownHTMLجلب الوظيفة
    • ملف لكل لغة
    • محرر
    • الملء التلقائي
    • اختبار
    • تحسين الحزمة
    بيئة
    • Next.js 14 وموجه التطبيق
      Next.js 15
      Next.js بدون locale URL
      Next.js وموجه الصفحة
      المترجم
    • Tanstack Start Solid
    • Astro و React
      Astro و Svelte
      Astro و Vue
      Astro و Solid
      Astro و Preact
      Astro و Lit
      Astro و Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt و Vue
    • Vite و Solid
    • SvelteKit
    • Vite و Preact
    • Vite و Vanilla JS
    • Vite و Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native و Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx و React
    Plugins
    • JSON
    • gettext (.po)
    امتداد VS Code
    وكيل
    • خادم MCP
    • مهارات الوكيل
    إصدارات
    • v8
    • v7
    • v6
    مؤشر أداء
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    مدونة
    طرح سؤال
    1. Documentation
    2. Plugin
    3. Sync po
    إنشاء:2026-05-10آخر تحديث:2026-05-10
    شاهد الفيديو التعليمي

    هذه الصفحة لديها فيديو تعليمي متاح.

    استخدم هذه الصفحة والموفر AI الذي تريده
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده

    تاريخ الإصدارات

    1. "التوثيق الأولي لإضافة Sync PO"
      v8.9.410‏/5‏/2026

    تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.

    اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزية
    تعديل هذه الوثيقة

    إذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.

    رابط GitHub للتوثيق
    نسخ

    نسخ الـ Markdown من المستند إلى الحافظة

    Sync PO (جسور i18n) - مزامنة PO مع دعم ICU / i18next

    استخدم Intlayer كإضافة لمجموعة أدوات i18n الحالية لديك. تحافظ هذه الإضافة على رسائل Gettext PO الخاصة بك متزامنة مع قواميس Intlayer حتى تتمكن من:

    • الحفاظ على سير عمل الترجمة الحالي المعتمد على PO.
    • إدارة رسائلك وترجمتها باستخدام Intlayer (CLI، CI، المزودين، CMS)، دون إعادة صياغة تطبيقك.
    • شحن الدروس ومحتوى SEO الذي يستهدف كل نظام بيئي، مع اقتراح Intlayer كطبقة إدارة PO.

    ملاحظات والنطاق الحالي:

    • يعمل التصدير الخارجي إلى CMS للترجمات والنصوص الكلاسيكية.
    • لا يوجد دعم حتى الآن للإدراجات، أو الجموع/ICU، أو ميزات وقت التشغيل المتقدمة للمكتبات الأخرى داخل مدخلات PO نفسها.
    • المحرر المرئي غير مدعوم بعد لمخرجات i18n التابعة لجهات خارجية.

    متى تستخدم هذه الإضافة

    • أنت تستخدم بالفعل ملفات Gettext PO لترجماتك.
    • تريد التعبئة بمساعدة الذكاء الاصطناعي، والاختبار في CI، وعمليات المحتوى دون تغيير وقت تشغيل العرض الخاص بك.

    التثبيت

    bash
    نسخ الكود

    نسخ الكود إلى الحافظة

    pnpm add -D @intlayer/sync-po-plugin# أوnpm i -D @intlayer/sync-po-plugin

    الإضافات

    توفر هذه الحزمة إضافتين:

    • loadPO: تحميل ملفات PO في قواميس Intlayer.

      • تُستخدم هذه الإضافة لتحميل ملفات PO من مصدر وسيتم تحميلها في قواميس Intlayer. يمكنها مسح كامل قاعدة الأكواد والبحث عن ملفات PO محددة. يمكن استخدام هذه الإضافة:
        • إذا كنت تستخدم مكتبة i18n تفرض موقعًا معينًا لتحميل ملفات PO الخاصة بك، ولكنك تريد وضع إعلان المحتوى الخاص بك في أي مكان تريده في قاعدة الأكواد الخاصة بك.
        • يمكن استخدامها أيضًا إذا كنت تريد جلب رسائلك من مصدر بعيد (مثل: CMS، API، إلخ) وتخزين رسائلك في ملفات PO.

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

    • syncPO: مزامنة ملفات PO مع قواميس Intlayer.

      • تُستخدم هذه الإضافة لمزامنة ملفات PO مع قواميس Intlayer. يمكنها مسح الموقع المحدد وتحميل ملفات PO التي تطابق النمط لملفات PO محددة. هذه الإضافة مفيدة إذا كنت تريد الحصول على فوائد Intlayer أثناء استخدام مكتبة i18n أخرى.

    استخدام كلتا الإضافتين

    intlayer.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, type IntlayerConfig } from "intlayer";import { loadPO, syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // حافظ على ملفات PO الحالية متزامنة مع قواميس Intlayer  plugins: [    /**     * سيقوم بتحميل جميع ملفات PO في src التي تطابق النمط {key}.i18n.po     */    loadPO({      source: ({ key }) => `./src/**/${key}.i18n.po`,      locale: Locales.ENGLISH,      priority: 1, // يضمن أن ملفات PO هذه لها الأولوية على الملفات في `./locales/en/${key}.po`    }),    /**     * سيقوم بتحميل وكتابة المخرجات والترجمات مرة أخرى في ملفات PO في دليل locales     */    syncPO({      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      priority: 0,    }),  ],};export default config;

    إضافة syncPO

    بداية سريعة

    أضف الإضافة إلى intlayer.config.ts الخاص بك ووجهها إلى هيكل PO الحالي لديك.

    intlayer.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // حافظ على ملفات PO الحالية متزامنة مع قواميس Intlayer  plugins: [    syncPO({      // تخطيط لكل لغة ولكل مساحة اسم      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,    }),  ],};export default config;

    بديل: ملف واحد لكل لغة:

    intlayer.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    syncPO({      source: ({ locale }) => `./locales/${locale}.po`,    }),  ],};export default config;

    كيف تعمل

    • القراءة: تكتشف الإضافة ملفات PO من منشئ source الخاص بك وتحملها كقواميس Intlayer.
    • الكتابة: بعد عمليات البناء والتعبئة، تقوم بكتابة ملفات PO المترجمة مرة أخرى إلى نفس المسارات (مع رؤوس Gettext المناسبة).
    • التعبئة التلقائية: تعلن الإضافة عن مسار autoFill لكل قاموس. تشغيل intlayer fill يقوم بتحديث الترجمات المفقودة فقط في ملفات PO الخاصة بك بشكل افتراضي.

    واجهة برمجة التطبيقات (API):

    ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    syncPO({  source: ({ key, locale }) => string, // مطلوب  location?: string, // تسمية اختيارية، الافتراضي: "sync-po::path/to/source"  priority?: number, // أولوية اختيارية لحل النزاعات، الافتراضي: 0});

    مصادر PO متعددة والأولوية

    يمكنك إضافة إضافات syncPO متعددة لمزامنة مصادر PO مختلفة. هذا مفيد عندما يكون لديك مصادر ترجمة متعددة أو هياكل PO مختلفة في مشروعك.

    نظام الأولوية

    عندما تستهدف إضافات متعددة نفس مفتاح القاموس، تحدد معلمة priority أي إضافة لها الأسبقية:

    • أرقام الأولوية الأعلى تفوز على الأرقام الأقل
    • الأولوية الافتراضية لملفات .content هي 0
    • الأولوية الافتراضية للإضافات هي 0
    • تتم معالجة الإضافات التي لها نفس الأولوية بالترتيب الذي تظهر به في التكوين
    intlayer.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // مصدر PO الأساسي (أعلى أولوية)    syncPO({      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      location: "main-translations",      priority: 10,    }),    // مصدر PO احتياطي (أولوية أقل)    syncPO({      source: ({ locale }) => `./fallback-locales/${locale}.po`,      location: "fallback-translations",      priority: 5,    }),    // مصدر PO قديم (أقل أولوية)    syncPO({      source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.po`,      location: "legacy-translations",      priority: 1,    }),  ],};export default config;

    إضافة Load PO

    بداية سريعة

    أضف الإضافة إلى intlayer.config.ts لاستيعاب ملفات PO الحالية كقواميس Intlayer. هذه الإضافة للقراءة فقط (لا توجد كتابة على القرص):

    intlayer.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, type IntlayerConfig } from "intlayer";import { loadPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // استيعاب رسائل PO الموجودة في أي مكان في شجرة المصدر الخاصة بك    loadPO({      source: ({ key }) => `./src/**/${key}.i18n.po`,      // تحميل لغة واحدة لكل نسخة إضافة (يتم تعيينها افتراضيًا على defaultLocale للتكوين)      locale: Locales.ENGLISH,      priority: 0,    }),  ],};export default config;

    بديل: تخطيط لكل لغة، لا يزال للقراءة فقط (يتم تحميل اللغة المحددة فقط):

    intlayer.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, type IntlayerConfig } from "intlayer";import { loadPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    loadPO({      // سيتم تحميل الملفات لـ Locales.FRENCH فقط من هذا النمط      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      locale: Locales.FRENCH,    }),  ],};export default config;

    كيف تعمل

    • الاكتشاف: يبني glob من منشئ source الخاص بك ويجمع ملفات PO المطابقة.
    • الاستيعاب: يحمل كل ملف PO كقاموس Intlayer مع locale المقدم.
    • للقراءة فقط: لا يكتب أو ينسق ملفات المخرجات؛ استخدم syncPO إذا كنت بحاجة إلى مزامنة ذهاب وإياب.
    • جاهز للتعبئة التلقائية: يحدد مسار fill حتى يتمكن intlayer content fill من تعبئة المفاتيح المفقودة.

    واجهة برمجة التطبيقات (API)

    ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    loadPO({  // بناء المسارات إلى ملفات PO الخاصة بك. `locale` اختياري إذا كان هيكلك لا يحتوي على جزء للغة  source: ({ key, locale }) => string,  // اللغة المستهدفة للقواميس التي يتم تحميلها بواسطة نسخة الإضافة هذه  // يتم تعيينها افتراضيًا على configuration.internationalization.defaultLocale  locale?: Locale,  // تسمية اختيارية لتحديد المصدر  location?: string, // الافتراضي: "plugin"  // الأولوية المستخدمة لحل النزاعات ضد المصادر الأخرى  priority?: number, // الافتراضي: 0});

    السلوك والاتفاقيات

    • إذا كان قناع source الخاص بك يتضمن نائب لغة، فسيتم استيعاب الملفات الخاصة بـ locale المحدد فقط.
    • إذا لم يكن هناك جزء {key} في قناعك، فسيكون مفتاح القاموس "index".
    • يتم اشتقاق المفاتيح من مسارات الملفات عن طريق استبدال النائب {key} في منشئ source الخاص بك.
    • تستخدم الإضافة الملفات المكتشفة فقط ولا تصطنع لغات أو مفاتيح مفقودة.
    • يتم استنتاج مسار fill من source الخاص بك ويستخدم لتحديث القيم المفقودة عبر CLI عند اختيارك.

    حل النزاعات

    عندما يوجد نفس مفتاح الترجمة في مصادر PO متعددة:

    1. تحدد الإضافة ذات الأولوية القصوى القيمة النهائية
    2. تُستخدم المصادر ذات الأولوية الأقل كبدائل للمفاتيح المفقودة
    3. يتيح لك هذا الحفاظ على الترجمات القديمة مع الانتقال تدريجيًا إلى الهياكل الجديدة

    واجهة سطر الأوامر (CLI)

    سيتم اعتبار ملفات PO المتزامنة كملفات .content أخرى. وهذا يعني أن جميع أوامر intlayer ستكون متاحة لملفات PO المتزامنة. بما في ذلك:

    • intlayer content test لاختبار ما إذا كانت هناك ترجمات مفقودة
    • intlayer content list لسرد ملفات PO المتزامنة
    • intlayer content fill لتعبئة الترجمات المفقودة
    • intlayer content push لدفع ملفات PO المتزامنة
    • intlayer content pull لسحب ملفات PO المتزامنة

    راجع Intlayer CLI لمزيد من التفاصيل.

    القيود (الحالية)

    • لا يوجد دعم للإدراجات أو الجموع/ICU عند استهداف مكتبات جهات خارجية.
    • المحرر المرئي غير متاح لأوقات التشغيل غير التابعة لـ Intlayer بعد.
    • مزامنة PO فقط؛ تنسيقات الفهرس غير التابعة لـ PO غير مدعومة.

    لماذا هذا مهم

    • يمكننا التوصية بحلول i18n الراسخة ووضع Intlayer كإضافة.
    • نحن نستفيد من SEO/الكلمات الرئيسية الخاصة بهم مع دروس تنتهي باقتراح Intlayer لإدارة PO.
    • يوسع الجمهور القابل للاستهداف من "المشاريع الجديدة" إلى "أي فريق يستخدم بالفعل i18n".
    JSON
    امتداد VS Code
    Alt+→

    في هذه الصفحة

      المناقشات مجهولة الهوية ويتم مراجعتها بانتظام لمعالجة المشكلات الشائعة. لا تتردد في مشاركة أفكار الميزات أو التعليقات على الوثائق أو أي شيء يتعلق بـ Intlayer, نستخدم هذه المدخلات لتشكيل خارطة الطريق وتحسين المنتج.

      pnpm add -D @intlayer/sync-po-plugin# أوnpm i -D @intlayer/sync-po-plugin
      import { Locales, type IntlayerConfig } from "intlayer";import { loadPO, syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // حافظ على ملفات PO الحالية متزامنة مع قواميس Intlayer  plugins: [    /**     * سيقوم بتحميل جميع ملفات PO في src التي تطابق النمط {key}.i18n.po     */    loadPO({      source: ({ key }) => `./src/**/${key}.i18n.po`,      locale: Locales.ENGLISH,      priority: 1, // يضمن أن ملفات PO هذه لها الأولوية على الملفات في `./locales/en/${key}.po`    }),    /**     * سيقوم بتحميل وكتابة المخرجات والترجمات مرة أخرى في ملفات PO في دليل locales     */    syncPO({      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      priority: 0,    }),  ],};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // حافظ على ملفات PO الحالية متزامنة مع قواميس Intlayer  plugins: [    syncPO({      // تخطيط لكل لغة ولكل مساحة اسم      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,    }),  ],};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    syncPO({      source: ({ locale }) => `./locales/${locale}.po`,    }),  ],};export default config;
      syncPO({  source: ({ key, locale }) => string, // مطلوب  location?: string, // تسمية اختيارية، الافتراضي: "sync-po::path/to/source"  priority?: number, // أولوية اختيارية لحل النزاعات، الافتراضي: 0});
      import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // مصدر PO الأساسي (أعلى أولوية)    syncPO({      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      location: "main-translations",      priority: 10,    }),    // مصدر PO احتياطي (أولوية أقل)    syncPO({      source: ({ locale }) => `./fallback-locales/${locale}.po`,      location: "fallback-translations",      priority: 5,    }),    // مصدر PO قديم (أقل أولوية)    syncPO({      source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.po`,      location: "legacy-translations",      priority: 1,    }),  ],};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { loadPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // استيعاب رسائل PO الموجودة في أي مكان في شجرة المصدر الخاصة بك    loadPO({      source: ({ key }) => `./src/**/${key}.i18n.po`,      // تحميل لغة واحدة لكل نسخة إضافة (يتم تعيينها افتراضيًا على defaultLocale للتكوين)      locale: Locales.ENGLISH,      priority: 0,    }),  ],};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { loadPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    loadPO({      // سيتم تحميل الملفات لـ Locales.FRENCH فقط من هذا النمط      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      locale: Locales.FRENCH,    }),  ],};export default config;
      loadPO({  // بناء المسارات إلى ملفات PO الخاصة بك. `locale` اختياري إذا كان هيكلك لا يحتوي على جزء للغة  source: ({ key, locale }) => string,  // اللغة المستهدفة للقواميس التي يتم تحميلها بواسطة نسخة الإضافة هذه  // يتم تعيينها افتراضيًا على configuration.internationalization.defaultLocale  locale?: Locale,  // تسمية اختيارية لتحديد المصدر  location?: string, // الافتراضي: "plugin"  // الأولوية المستخدمة لحل النزاعات ضد المصادر الأخرى  priority?: number, // الافتراضي: 0});