استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- "استخدام خطافات useIntlayer / useLocale لـ astro-intlayer في صفحة Astro"v9.5.519/9/2026
- "تحديث استخدام واجهة برمجة تطبيقات useIntlayer في Solid للوصول المباشر إلى الخصائص"v8.9.04/5/2026
- "التوثيق الأولي لـ Astro + Lit"v8.7.724/4/2026
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
ترجمة موقع Astro + Lit الخاص بك باستخدام Intlayer
جدول المحتويات
لماذا Intlayer على البدائل؟
بالمقارنة مع الحلول الرئيسية مثل astro-i18n أو i18next، يعد Intlayer حلاً يأتي مزودًا بتحسينات متكاملة مثل:
تم تحسين Intlayer للعمل بشكل مثالي مع Astro من خلال تقديم توجيه متعدد اللغات وخريطة الموقع وجميع الميزات اللازمة لتوسيع نطاق التدويل (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 في Astro + Lit
تحقق من نموذج التطبيق على GitHub.
تثبيت التبعيات
قم بتثبيت الحزم اللازمة باستخدام مدير الحزم المفضل لديك:
bashنسخ الكودنسخ الكود إلى الحافظة
علامة
--interactiveاختيارية. استخدمintlayer-cli initإذا كنت وكيل ذكاء اصطناعي.سيقوم هذا الأمر باكتشاف بيئتك وتثبيت الحزم المطلوبة. على سبيل المثال:
bashنسخ الكودنسخ الكود إلى الحافظة
intlayer الحزمة الأساسية التي توفر أدوات i18n لإدارة التكوين، الترجمات، تعريف المحتوى، التحويل، وأوامر CLI.
astro-intlayer يتضمن ملحق تكامل Astro لدمج Intlayer مع حازم Vite، ووسيطاً برمجياً يحدد لغة كل طلب في
Astro.locals.intlayer، وخطافاتuseIntlayer/useDictionary/useLocale. يحل نفس مسار الاستيراد إلى تنفيذ الخادم في واجهة.astroوإلى تنفيذ العميل (المدعوم بـvanilla-intlayer) في كتل<script>.lit حزمة Lit الأساسية لبناء مكونات ويب (Web Components) سريعة وخفيفة.
lit-intlayer حزمة لدمج Intlayer في تطبيقات Lit. توفر خطافات (hooks) تعتمد على
ReactiveController(useIntlayer,useLocale, إلخ) والتي تؤدي تلقائيًا إلى إعادة رندر LitElement عند تغيير اللغة.@astrojs/lit إضافة Astro الرسمية التي تتيح استخدام عناصر Lit المخصصة (custom elements) داخل صفحات Astro.
تهيئة مشروعك
البنية
في هذه البنية، يقوم تكامل
intlayer()المسجل فيastro.config.tsببناء القواميس الخاصة بك وإضافة برمجية وسيطة (middleware) تحدد لغة كل طلب وتوفرها عبرAstro.locals.intlayer. تتواجد الصفحات تحت مقطعsrc/pages/[...locale]/، بحيث يتم تقديم اللغة الافتراضية بدون بادئة ويحصل كل خيار لغة آخر على عنوان URL مخصص له. تقرأ ملفات.astroالمحتوى باستخدام خطافاتuseIntlayer/useLocaleالخاصة بـastro-intlayerللعرض على جانب الخادم، وتتلقى جزيرة Lit (src/components/lit/LitDemo.ts) اللغة المكتشفة من الخادم كخاصية (prop) وتمررها إلىlit-intlayerللجزء التفاعلي. وتوضع تصريحات المحتوى جنباً إلى جنب مع مكوناتك فيsrc/.bashنسخ الكودنسخ الكود إلى الحافظة
التكوين
أنشئ ملف تكوين لتحديد لغات تطبيقك:
intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
من خلال ملف التكوين هذا، يمكنك تهيئة الروابط المترجمة، وإعادة توجيه الوسيط، وأسماء الكوكيز، وموقع وامتدادات تعريفات المحتوى، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع توثيق التهيئة.
دمج Intlayer في تكوين Astro الخاص بك
أضف إضافة
intlayerوتكامل Lit إلى تكوين Astro الخاص بك.astro.config.tsنسخ الكودنسخ الكود إلى الحافظة
تُستخدم إضافة
intlayer()لدمج Intlayer مع Astro. وهي تضمن إنشاء ملفات تعريف المحتوى ومراقبتها في وضع التطوير. وتعرّف متغيرات بيئة Intlayer داخل تطبيق Astro وتوفر أسماء مستعارة لتحسين الأداء.يتيح تكامل
lit()استخدام العناصر المخصصة (custom elements) لـ Lit داخل صفحات Astro.تعريف المحتوى الخاص بك
أنشئ وأدِر تعريفات المحتوى لتخزين الترجمات:
src/components/lit/app.content.tsنسخ الكودنسخ الكود إلى الحافظة
يمكن تعريف تعريفات المحتوى في أي مكان في تطبيقك، طالما أنها مدرجة في
contentDir(افتراضيًا./src) وتطابق امتداد ملف تعريف المحتوى (افتراضيًا.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).لمزيد من المعلومات، راجع توثيق تعريف المحتوى.
استخدام المحتوى في Astro
استخدم قواميسك في ملفات
.astroباستخدام الخطافات المصدرة بواسطةastro-intlayer. تشترك هذه الخطافات في نفس تواقيع روابط إطار العمل: يُرجعuseIntlayer("key")محتوى القاموس ويُرجعuseLocale()اللغة الحالية، دون الحاجة إلى تمرير أي وسيطات.تأتي اللغة من الوسيط البرمجي
astro-intlayer، والذي يسجله التكامل تلقائياً قبلsrc/middleware.tsالخاص بك. يحدد الوسيط اللغة لكل طلب، بدءاً من بادئة عنوان URL، ثم اللغة المحفوظة بواسطة العميل (ملف تعريف الارتباط أو الترويسة)، ثمAccept-Language، ويخزنها فيAstro.locals.intlayer. تستخدم الصفحات المعروضة مسبقاً عنوان URL فقط، حيث يتم عرضها مرة واحدة لكل زائر.يجب عليك أيضاً إضافة بيانات تعريف SEO مثل hreflang والروابط الأساسية (canonical) إلى كل صفحة. يتم بعد ذلك استيراد عنصر Lit المخصص عبر
<script>من جانب العميل ووضعه في النص الأساسي (body).src/pages/[...locale]/index.astroنسخ الكودنسخ الكود إلى الحافظة
إذا كنت ترغب في استخدام محتواك في سمة
سلسلة(string)، مثلaltوtitleوhrefوaria-labelوما إلى ذلك، يمكنك استخدام قيمة الدالة، مثل:tsxنسخ الكودنسخ الكود إلى الحافظة
يعرض
Astro.locals.intlayerأيضاًlocaleوdefaultLocaleوavailableLocalesللوسطاء البرمجيين ونقاط النهاية الخاصة بك. مرر لغة أو محدداً كوسيط ثانٍ (useIntlayer("app", "fr"),useIntlayer("faq", { item: 2 })) لتجاوز لغة الطلب لاستدعاء واحد.ملاحظة حول إعداد التوجيه: تعتمد بنية الدليل التي تستخدمها على إعداد
middleware.routingفيintlayer.config.ts:prefix-no-default(افتراضي): يحافظ على اللغة الافتراضية في الجذر (بدون بادئة) ويضيف بادئات للغات الأخرى. استخدم[...locale]لتغطية جميع الحالات.prefix-all: تحصل جميع الروابط على بادئة لغة. يمكنك استخدام[locale]القياسي إذا كنت لا تحتاج إلى معالجة الجذر بشكل منفصل.search-paramأوno-prefix: لا يلزم وجود أدلة لغة. يتم التعامل مع اللغة عبر معلمات الاستعلام أو ملفات تعريف الارتباط.
إنشاء عنصر Lit مخصص
أنشئ عنصر Lit مخصصًا. استدعِ
installIntlayerفيconnectedCallbackباستخدام خاصيةlocaleالمحملة من الخادم لتهيئة singleton الترجمة في جانب العميل.src/components/lit/LitDemo.tsنسخ الكودنسخ الكود إلى الحافظة
يتم تمرير خاصية
localeمن صفحة Astro (اكتشاف الخادم) وتستخدم لتهيئةinstallIntlayerفيconnectedCallback، مما يحدد اللغة الأولية لجميع خطافاتReactiveControllerداخل العنصر.يتم تسجيل
useIntlayerكـReactiveController. ويطلب تلقائيًا إعادة رندر العنصر عند تغيير اللغة، لذلك لا توجد حاجة لمنطق اشتراك (subscription logic) إضافي.إضافة مبدل اللغة
تتوفر وظيفة تغيير اللغة مباشرة داخل طريقة
render()للعنصر المخصص لـ Lit (انظر الخطوة 6 أعلاه). وهي تستخدمuseLocaleمنlit-intlayerوتنتقل إلى الرابط المترجم عندما يختار المستخدم لغة جديدة:src/components/lit/LitDemo.tsنسخ الكودنسخ الكود إلى الحافظة
ملاحظة حول تفاعلية Lit: تقوم
useLocaleبإرجاعReactiveController. عند استدعاءsetLocale، يطلب المتحكم تلقائيًا إعادة رندر، مما يؤدي إلى تحديث حالة الزر النشط دون معالجة DOM يدويًا.ملاحظة حول الاستمرارية: يضمن استخدام
onLocaleChangeلإعادة التوجيه عبرwindow.location.hrefزيارة الرابط الجديد للغة، مما يسمح لوسيط Intlayer بتعيين كوكيز اللغة وتذكر تفضيلات المستخدم في الزيارات المستقبلية.خريطة الموقع وRobots.txt
توفر Intlayer أدوات لإنشاء خريطة موقع مترجمة وملفات robots.txt ديناميكيًا.
خريطة الموقع (Sitemap)
يأتي Intlayer مع مولد خريطة موقع مدمج لمساعدتك في إنشاء خريطة موقع لتطبيقك بسهولة. يتعامل مع المسارات المترجمة ويضيف البيانات الوصفية اللازمة لمحركات البحث.
تدعم خريطة الموقع المُنشأة من قِبل Intlayer مساحة الأسماء
xhtml:link(Hreflang XML Extensions). على عكس مولدات خرائط الموقع الافتراضية التي تُدرج عناوين URL الخام فقط، ينشئ Intlayer تلقائياً الروابط ثنائية الاتجاه المطلوبة بين جميع إصدارات الصفحة باللغات المختلفة (على سبيل المثال،/aboutو/about?lang=frو/about?lang=es). هذا يضمن أن محركات البحث تفهرس بشكل صحيح وتقدم النسخة الصحيحة من اللغة للجمهور المناسب.أنشئ
src/pages/sitemap.xml.tsلإنشاء خريطة موقع تتضمن جميع مساراتك المترجمة.src/pages/sitemap.xml.tsنسخ الكودنسخ الكود إلى الحافظة
Robots.txt
أنشئ
src/pages/robots.txt.tsللتحكم في زحف محركات البحث.src/pages/robots.txt.tsنسخ الكودنسخ الكود إلى الحافظة
استخراج محتوى مكوناتك
اختياريإذا كان لديك كود برمجي موجود بالفعل، فقد يستغرق تحويل آلاف الملفات وقتاً طويلاً.
لتسهيل هذه العملية، يقترح Intlayer مترجمًا / مستخرجًا لتحويل مكوناتك واستخراج المحتوى.
لإعداده، يمكنك إضافة قسم
compilerفي ملفintlayer.config.tsالخاص بك:intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... Rest of your config compiler: { /** * Indicates if the compiler should be enabled. */ enabled: true, /** * Defines the output files path */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Indicates if the components should be saved after being transformed. * * - If `true`, the compiler will rewrite the component file in the disk. So the transformation will be permanent, and the compiler will skip the transformation for the next process. That way, the compiler can transform the app, and then it can be removed. * * - If `false`, the compiler will inject the `useIntlayer()` function call into the code in the build output only, and keep the base codebase intact. The transformation will be done only in memory. */ saveComponents: false, /** * Dictionary key prefix */ dictionaryKeyPrefix: "", }, }; export default config;قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
bashنسخ الكودنسخ الكود إلى الحافظة
قم ببناء تطبيقك لتحويل مكوناتك واستخراج المحتوى
bashنسخ الكودنسخ الكود إلى الحافظة
تكوين TypeScript
تستخدم Intlayer تقنية توسيع الوحدات (module augmentation) للاستفادة من TypeScript، مما يجعل برمجتك أكثر قوة. إذا كنت تستخدم صيغة الـ decorators ، فتأكد من تفعيل experimentalDecorators في خيارات المترجم (compiler options).


تأكد من أن تكوين TypeScript الخاص بك يتضمن الأنواع المولدة تلقائيًا.
نسخ الكود إلى الحافظة
تكوين Git
يوصى بتجاهل الملفات التي تنشئها Intlayer. هذا يتجنب إضافتها إلى مستودع Git الخاص بك.
للقيام بذلك، أضف التعليمات التالية إلى ملف .gitignore الخاص بك:
نسخ الكود إلى الحافظة
إضافة VS Code
لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت إضافة Intlayer الرسمية لـ VS Code.
توفر هذه الإضافة:
- إكمال تلقائي لمفاتيح الترجمة.
- اكتشاف الأخطاء في الوقت الفعلي للترجمات المفقودة.
- معاينة مضمنة للمحتوى المترجم.
- إجراءات سريعة لإنشاء وتحديث الترجمات بسهولة.
لمزيد من المعلومات حول استخدام الإضافة، راجع توثيق إضافة VS Code.
تعمق أكثر
إذا كنت تريد معرفة المزيد، يمكنك أيضًا تنفيذ المحرر المرئي أو استخدام نظام إدارة المحتوى (CMS) لإخراج محتواك خارجيًا.
الأسئلة الشائعة
يتعامل خيار i18n المدمج في Astro مع البادئات وإعادة التوجيه ولكنه لا يدير المحتوى. يطرح إضافة الجزر تحديًا إضافيًا: الجزر لا تشغل Astro بل تشغل Lit.
- Astro
i18nبالإضافة إلى قواميس مخصصة، وفي الجزر استخدام@lit/localize: مصدران منفصلان للمحتوى دون أنواع مشتركة. Intlayer: طبقة محتوى موحدة واحدة لكليهما. يخدمastro-intlayerصفحات.astro، ويقرأlit-intlayerنفس الإعلان لجزر Lit.
تعد القدرة على التصريح بالسلاسل مرة واحدة واستخدامها في كل من الصفحات الثابتة والجزر التفاعلية السبب الرئيسي لاختيار طبقة محتوى موحدة. انظر لماذا Intlayer.
أقل بكثير من الحلول المعتمدة على فضاءات الأسماء، لأن الصفحة لا تُحمل أبدًا كتالوجًا لا تعرضه. تُعرض صفحات Astro في وقت البناء، لذلك يتم إرسال كود HTML المترجم فقط دون أي قواميس إضافية؛ تتلقى مكونات الجزر التفاعلية فقط القواميس. تقسم القواميس الديناميكية المحتوى حسب اللغة، مما يقلل الحزمة بنسبة تصل إلى 50%. انظر تحسين الحزم و المقارنة المعيارية.
إلى حد كبير نعم. اتبع دليل الترحيل. يمكنك أيضًا الترحيل تدريجيًا: تحافظ مكونة مزامنة JSON على كتالوجات JSON كمصدر للحقيقة وتنشئ قواميس Intlayer.
نعم. تحافظ مكونة مزامنة JSON على ملفات /messages/{locale}/{namespace}.json الخاصة بك كمصدر الحقيقة وتُنشئ قواميس Intlayer منها، في كلا الاتجاهين. وتقوم مكونة مزامنة PO بنفس الشيء لكتالوجات gettext، وتسمح لك الملفات المقسمة حسب اللغة بتقسيم المحتوى حسب اللغة بدلاً من تجميع كل اللغات في ملف واحد.
لا. قم بتشغيل npx intlayer extract وسيقرأ Intlayer ملفاتك، ويسحب السلاسل النصية الموجهة للمستخدم، ويكتب ملف .content بجانب كل منها، حتى تراجع diff بدلاً من نسخ السلاسل إلى كتالوج يدويًا. تشرح الخطوة 15 من هذا الدليل ذلك بالتفصيل.
لأتمتة كاملة، يقوم Intlayer Compiler بالشيء نفسه في وقت البناء: يمسح الكود عند كل تغيير، وينشئ القواميس ويزامنها مع HMR.
هناك حدان يجدر معرفتهما قبل تشغيل المترجم. إنه يعمل عن طريق التحليل الثابت، وبالتالي فإن السلاسل التي تظهر فقط في وقت التشغيل، مثل رموز أخطاء API أو حقول نظام إدارة المحتوى، تظل بعيدة عن متناوله. كما يتعين عليه التمييز بين النصوص الموجهة للمستخدم ومنطق التطبيق مثل className="active" أو رمز الحالة، الأمر الذي يتطلب بعض الملاحظات التوضيحية في قاعدة التعليمات البرمجية الكبيرة. يتجنب أمر الاستخراج كلا الأمرين من خلال إبقائك متحكمًا في العملية.
خمس أدوات، كلها اختيارية:
- امتداد 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ترصد النصوص المكتوبة مباشرة بدون تدويل.
