استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- "مقارنة التحليل الثابت والديناميكي والديناميكي المخزَّن مؤقتًا لقواميس البيانات الوصفية داخل دوال head للمسارات"v9.4.025/8/2026
- "تحديث استخدام واجهة برمجة تطبيقات useIntlayer في Solid للوصول المباشر إلى الخصائص"v8.9.04/5/2026
- "تمت الإضافة لـ Tanstack Start Solid.js"v8.5.125/3/2026
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
ترجم موقعك على Tanstack Start مع Solid.js باستخدام Intlayer | التدويل (i18n)
جدول المحتويات
يوضح هذا الدليل كيفية دمج Intlayer من أجل تدويل سلس في مشاريع Tanstack Start مع Solid.js، وتوجيه مدرك للغة، ودعم TypeScript، وممارسات التطوير الحديثة.
لماذا Intlayer على البدائل؟
بالمقارنة مع الحلول الرئيسية مثل react-i18next أو i18next، يعد Intlayer حلاً يأتي مزودًا بتحسينات متكاملة مثل:
تغطية كاملة لـ TanStack Start
تم تحسين Intlayer للعمل بشكل مثالي مع TanStack Start وSolid من خلال تقديم توجيه متعدد اللغات، وsitemap، وجميع الميزات اللازمة لتوسيع نطاق التدويل (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 لمساعدتك في إدارة المحتوى متعدد اللغات في الوقت الفعلي، مما يجعل التعاون مع المترجمين ومؤلفي النصوص وأعضاء الفريق الآخرين سلسًا. يمكن تخزين المحتوى محليًا و/أو عن بعد.
</Accordion>
دليل خطوة بخطوة لإعداد Intlayer في تطبيق Tanstack Start
شاهد قالب التطبيق على GitHub.
إنشاء المشروع
ابدأ بإنشاء مشروع TanStack Start جديد باتباع دليل بدء مشروع جديد على موقع TanStack Start.
تثبيت حزم Intlayer
قم بتثبيت الحزم اللازمة باستخدام مدير الحزم المفضل لديك:
bashنسخ الكودنسخ الكود إلى الحافظة
علامة
--interactiveاختيارية. استخدمintlayer-cli initإذا كنت وكيل ذكاء اصطناعي.سيقوم هذا الأمر باكتشاف بيئتك وتثبيت الحزم المطلوبة. على سبيل المثال:
bashنسخ الكودنسخ الكود إلى الحافظة
intlayer
الحزمة الأساسية التي توفر أدوات التدويل لإدارة الإعدادات، الترجمة، إعلان المحتوى، والتحويل البرمجي وأوامر واجهة الأوامر (CLI).
solid-intlayer الحزمة التي تدمج Intlayer مع تطبيقات Solid. توفر مجمعات السياق (context providers) والخطافات (hooks) للتدويل في Solid.
vite-intlayer تتضمن إضافة Vite لدمج Intlayer مع أداة بناء Vite، كذالك البرمجيات الوسيطة (middleware) لاكتشاف اللغة المفضلة للمستخدم، وإدارة ملفات تعريف الارتباط (cookies)، والتعامل مع إعادة توجيه الروابط.
إعداد مشروعك
قم بإنشاء ملف إعدادات لتكوين اللغات في تطبيقك:
intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
من خلال ملف الإعدادات هذا، يمكنك تكوين الروابط المترجمة، إعادة توجيه البرمجيات الوسيطة، أسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع توثيق الإعدادات.
دمج Intlayer في إعدادات Vite الخاصة بك
أضف إضافة intlayer إلى إعداداتك:
vite.config.tsنسخ الكودنسخ الكود إلى الحافظة
تُستخدم إضافة
intlayer()لـ Vite لدمج Intlayer مع Vite. تضمن بناء ملفات إعلان المحتوى ومراقبتها في وضع التطوير. وتعرّف متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، توفر أسماء بديلة (aliases) لتحسين الأداء.إنشاء التخطيط الجذري
قم بتكوين التخطيط الجذري الخاص بك لدعم التدويل باستخدام
useParamsلاكتشاف اللغة الحالية وتعيين سماتlangوdirعلى وسمhtml.src/routes/__root.tsxنسخ الكودنسخ الكود إلى الحافظة
إنشاء تخطيط اللغة
أنشئ تخطيطًا يتعامل مع بادئة اللغة ويقوم بالتحقق من صحتها. سيضمن هذا التخطيط معالجة اللغات الصالحة فقط.
هذه الخطوة اختيارية إذا لم تكن بحاجة إلى التحقق من بادئة اللغة على مستوى المسار.
src/routes/{-$locale}/route.tsxنسخ الكودنسخ الكود إلى الحافظة
هنا،
{-$locale}هو معلمة مسار ديناميكية يتم استبدالها باللغة الحالية. هذا التنسيق يجعل الجزء اختياريًا، مما يسمح له بالعمل مع أوضاع التوجيه مثل'prefix-no-default'وغيرها.كن على علم بأن هذا الجزء قد يسبب مشكلات إذا كنت تستخدم أجزاء ديناميكية متعددة في نفس المسار (مثل:
/{-$locale}/other-path/$anotherDynamicPath/...). لوضع'prefix-all'، قد تفضل تبديل الجزء إلى$locale. لوضع'no-prefix'أو'search-params'، يمكنك إزالة الجزء تمامًا.إعلان المحتوى الخاص بك
قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
src/contents/page.content.tsنسخ الكودنسخ الكود إلى الحافظة
يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك، طالما أنها مضمنة في مجلد
contentDir(افتراضيًا./app). وتطابق امتداد ملفات إعلان المحتوى (افتراضيًا.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).لمزيد من التفاصيل، راجع توثيق إعلان المحتوى.
استخدام المكونات والخطافات المدركة للغة
قم بإنشاء مكون
LocalizedLinkللتنقل المدرك للغة:src/components/LocalizedLink.tsxنسخ الكودنسخ الكود إلى الحافظة
يخدم هذا المكون غرضين:
- إزالة بادئة
{-$locale}غير الضرورية من الروابط. - حقن معلمة اللغة في الروابط لضمان إعادة توجيه المستخدم مباشرة إلى المسار المترجم.
بعد ذلك، يمكننا إنشاء خطاف
useLocalizedNavigateللتنقل البرمجي:src/hooks/useLocalizedNavigate.tsxنسخ الكودنسخ الكود إلى الحافظة
- إزالة بادئة
استخدام Intlayer في صفحاتك
استخدم
useIntlayerافتراضيًا: فهي الطريقة الموصى بها لقراءة المحتوى داخل المكوّنات، ويقوم المُصرِّف بتحويلها إلى اللغة التي يجري عرضها. لا تلجأ إلىgetIntlayer/getIntlayerAsyncإلا خارج شجرة Solid: فيheadالمسارات، والمُحمِّلات، ودوال الخادم.قم بالوصول إلى قواميس المحتوى الخاصة بك عبر تطبيقك:
صفحة رئيسية مترجمة
src/routes/{-$locale}/index.tsxنسخ الكودنسخ الكود إلى الحافظة
htmlنسخ الكودنسخ الكود إلى الحافظة
في Solid، يعيد
useIntlayerمحتوى تفاعلياً (على سبيل المثال،content). يمكنك الوصول إلى خصائصه مباشرة.لمعرفة المزيد حول خطاف
useIntlayer، راجع التوثيق.إنشاء مكون لتبديل اللغة
أنشئ مكونًا للسماح للمستخدمين بتغيير اللغات:
src/components/LocaleSwitcher.tsxنسخ الكودنسخ الكود إلى الحافظة
في ملفات Solid ، يكون
localeمنuseLocaleعبارة عن signal accessor. استخدمlocale()(مع القوسين) لقراءة قيمته الحالية بشكل تفاعلي.لمعرفة المزيد حول خطاف
useLocale، راجع التوثيق.إدارة سمات HTML
كما رأيت في الخطوة 5، يمكنك إدارة سمات
langوdirلوسمhtmlباستخدامuseParamsفي المكون الجذري الخاص بك. يضمن ذلك تعيين السمات الصحيحة على كل من الخادم والعميل.src/routes/__root.tsxنسخ الكودنسخ الكود إلى الحافظة
إضافة برمجية وسيطة
يمكنك أيضًا استخدام
intlayerProxyلإضافة توجيه من جانب الخادم إلى تطبيقك. ستكتشف هذه الإضافة تلقائيًا اللغة الحالية بناءً على الرابط وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فستحدد الإضافة اللغة الأكثر ملاءمة بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم اكتشاف لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.لاحظ أنه لاستخدام
intlayerProxyفي الإنتاج، تحتاج إلى نقل حزمةvite-intlayerمنdevDependenciesإلىdependencies.منذ Intlayer v9، يتم دمج
intlayerProxy()مباشرة في المكون الإضافيintlayer()ويتم تفعيله بشكل افتراضي من خلال خيارrouting.enableProxy(trueبشكل افتراضي). تسجيل منفصل كما هو موضح أدناه اختياري الآن، حيث يتم الاحتفاظ به للتوافق مع الإصدارات السابقة والإعدادات التي تحتاج إلى التحكم في ترتيب المكون الإضافي. اضبطrouting.enableProxy: falseللتحديث. انظر إلى ملاحظات الإصدار v9.vite.config.tsنسخ الكودنسخ الكود إلى الحافظة
تدويل العناوين (metadata) الخاصة بك
يُحلّ
getIntlayerبشكل متزامن اعتمادًا على القاموس المدمج الذي يحتوي على كل اللغات المعلنة. يبقىheadمتزامنًا ولا يُنتظر أي شيء، لكن القاموس متعدد اللغات بأكمله يُدرَج داخل جزء المسار المُرسَل إلى المتصفح.src/routes/{-$locale}/index.tsxنسخ الكودنسخ الكود إلى الحافظة
الأنسب لقواميس البيانات الوصفية الصغيرة، أو لعدد قليل من اللغات، أو أثناء بناء النماذج الأولية.
يتصرف
getIntlayerAsync(المتاح ابتداءً من الإصدار 9.4) مثلgetIntlayer، لكن إضافة البناء توجّهه إلى الجزء الخاص بكل لغة في.intlayer/dynamic_dictionaries/بدلًا من القاموس المدمج. لذلك لا ترسل الصفحة سوى اللغة التي تعرضها. ولأن هذا الجزء يُحمَّل عند الطلب، يصبحheadدالةasync:src/routes/{-$locale}/index.tsxنسخ الكودنسخ الكود إلى الحافظة
إذا كان
headيقرأ عدة قواميس، فحلّها باستخدامPromise.all؛ فانتظار كلgetIntlayerAsyncفي سطر مستقل يجعل الطلبات متسلسلة بدلًا من تنفيذها بالتوازي.المقايضة: يُحلّ الاستيراد الديناميكي أثناء تنفيذ
head، على المسار الحرج لعرض المستند. على مسار "بارد" يؤخر ذلكheadببضعة أجزاء من الألف من الثانية وقد يُضعف LCP قليلًا.حلّ القاموس داخل
loaderالمسار ثم اقرأه مجددًا منloaderDataفيhead. تعمل مُحمِّلات المسارات المطابقة على التوازي، ويُخبرstaleTime: Infinityجهاز التوجيه TanStack Router بأن النتيجة لا تنتهي صلاحيتها أبدًا، فيُحلّ الجزء الخاص باللغة مرة واحدة ثم يُقدَّم من ذاكرة التوجيه المؤقتة، ويبقىheadمتزامنًا.src/routes/{-$locale}/index.tsxنسخ الكودنسخ الكود إلى الحافظة
قد يُستدعى
headقبل اكتمال المُحمِّل، لذا فإن نوعloaderDataقد يكونundefined. أبقِ على التسلسل الاختياري، أو أعِد عنوانًا احتياطيًا.تحتفظ بالجزء الخاص بكل لغة دون دفع تكلفته على المسار الحرج لـ
head. الثمن هو تجربة المطوّر: يجب تمرير المحتوى صراحةً من المُحمِّل إلىheadعبرloaderData.أي طريقة تحليل ينبغي أن أختار؟
اظهار جميع محتويات الجدولافتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
التحليل الثابت التحليل الديناميكي التحليل الديناميكي المخزَّن مؤقتًا واجهة البرمجة getIntlayergetIntlayerAsync(9.4+)getIntlayerAsyncداخلloader(9.4+)توقيع headمتزامن asyncمتزامن، يقرأ loaderDataاللغات المُرسَلة كل اللغات المعلنة اللغة المطلوبة فقط اللغة المطلوبة فقط التنقلات في العميل لا شيء ليُحلّ يُعاد تنفيذه عند كل مطابقة يُقدَّم من ذاكرة التوجيه المؤقتة تجربة المطوّر الأبسط awaitواحدالمحتوى يُمرَّر عبر loaderDataالحصول على اللغة في إجراءات الخادم الخاص بك
قد ترغب في الوصول إلى اللغة الحالية من داخل إجراءات الخادم (server actions) أو نقاط نهاية API. يمكنك القيام بذلك باستخدام مساعد
getLocaleمنintlayer.إليك مثال باستخدام وظائف الخادم في TanStack Start:
src/routes/{-$locale}/index.tsxنسخ الكودنسخ الكود إلى الحافظة
إدارة الصفحات غير الموجودة (404)
اختياريعندما يزور المستخدم صفحة غير موجودة ، يمكنك عرض صفحة 404 مخصصة ويمكن أن تؤثر بادئة اللغة على كيفية تشغيل الصفحة غير الموجودة.
فهم معالجة 404 في TanStack Router مع بادئات اللغة
في TanStack Router ، تتطلب معالجة صفحات 404 مع المسارات المترجمة نهجًا متعدد المستويات:
- مسار 404 مخصص: مسار محدد لعرض واجهة مستخدم 404
- التحقق على مستوى المسار: يتحقق من بادئات اللغة ويعيد توجيه البادئات غير الصالحة إلى 404
- مسار التقاط الكل (Catch-all): يلتقط أي مسارات غير متطابقة داخل جزء اللغة
src/routes/{-$locale}/404.tsxنسخ الكودنسخ الكود إلى الحافظة
src/routes/{-$locale}/route.tsxنسخ الكودنسخ الكود إلى الحافظة
src/routes/{-$locale}/$.tsxنسخ الكودنسخ الكود إلى الحافظة
استخراج المحتوى من مكوناتك
اختياريإذا كان لديك قاعدة أكواد حالية ، فقد يستغرق تحويل آلاف الملفات وقتًا طويلاً.
لتسهيل هذه العملية ، يقترح Intlayer مترجمًا (compiler) / مستخرجًا (extractor) لتحويل مكوناتك واستخراج المحتوى.
لإعداده ، يمكنك إضافة قسم
compilerفي ملفintlayer.config.tsالخاص بك:intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... بقية إعداداتك compiler: { /** * يشير إلى ما إذا كان يجب تمكين المترجم. */ enabled: true, /** * يحدد مسار ملفات المخرجات */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. * * - إذا كان `true` ، فسيقوم المترجم بإعادة كتابة ملف المكون على القرص. وبالتالي ، سيكون التحويل دائمًا ، وسيقوم المترجم بتجاوز التحويل للعملية التالية. بهذه الطريقة ، يمكن للمترجم تحويل التطبيق ومن ثم يمكن إزالته. * * - إذا كان `false` ، فسيقوم المترجم بحقن استدعاء وظيفة `useIntlayer()` في الكود فقط في مخرجات البناء ، مع الحفاظ على قاعدة الأكواد الأساسية كما هي. سيتم إجراء التحويل في الذاكرة فقط. */ saveComponents: false, /** * بادئة مفتاح القاموس */ dictionaryKeyPrefix: "", }, }; export default config;قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
bashنسخ الكودنسخ الكود إلى الحافظة
Since v9, the
intlayerCompileris included in theintlayerplugin. So you don't need to add it manually.قم بتحديث
vite.config.tsالخاص بك لتشمل إضافةintlayerCompiler:vite.config.tsنسخ الكودنسخ الكود إلى الحافظة
bashنسخ الكودنسخ الكود إلى الحافظة
قبل العرض وإنشاء خريطة الموقع
يأتي Intlayer مع مولد خريطة الموقع المدمج لمساعدتك في إنشاء خريطة موقع لتطبيقك بسهولة. يتعامل مع المسارات المحلية ويضيف البيانات الوصفية الضرورية لمحركات البحث.
يدعم Sitemap الذي ينشئه Intlayer مساحة الاسم
xhtml:link(Hreflang XML Extensions). بخلاف مولدات Sitemap الافتراضية التي تسرد فقط عناوين URL الخام، ينشئ Intlayer تلقائياً الروابط ثنائية الاتجاه المطلوبة بين جميع إصدارات الصفحة بلغات مختلفة (على سبيل المثال،/aboutو/about?lang=frو/about?lang=es). هذا يضمن أن محركات البحث تفهرس بشكل صحيح وتقدم نسخة اللغة الصحيحة للجمهور المناسب.لاستخدامه، تحتاج أولاً إلى تكوين
vite.config.tsلتفعيل pre-rendering لمساراتك المترجمة وتعطيل إنشاء sitemap الافتراضي لـ TanStack Start.vite.config.tsنسخ الكودنسخ الكود إلى الحافظة
ثم، قم بإنشاء مسار
src/routes/sitemap[.]xml.tsيستخدم دالةgenerateSitemap:src/routes/sitemap[.]xml.tsنسخ الكودنسخ الكود إلى الحافظة
إعداد TypeScript
يستخدم Intlayer تقوية الوحدات (module augmentation) للاستفادة من ميزات TypeScript وجعل قاعدة الأكواد الخاصة بك أكثر قوة.
تأكد من أن إعدادات TypeScript الخاصة بك تتضمن الأنواع المنشأة تلقائيًا:
tsconfig.jsonنسخ الكودنسخ الكود إلى الحافظة
إعدادات Git
يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. يتيح لك ذلك تجنب إرسالها إلى مستودع Git الخاص بك.
للقيام بذلك ، يمكنك إضافة التعليمات التالية إلى ملف .gitignore الخاص بك:
نسخ الكود إلى الحافظة
إضافة VS Code
لتحسين تجربة التطوير الخاصة بك مع Intlayer ، يمكنك تثبيت إضافة Intlayer VS Code الرسمية.
توفر هذه الإضافة:
- الإكمال التلقائي لمفاتيح الترجمة.
- اكتشاف الأخطاء في الوقت الفعلي للترجمات المفقودة.
- معاينة مضمنة للمحتوى المترجم.
- إجراءات سريعة لإنشاء وتحديث الترجمات بسهولة.
لمزيد من التفاصيل حول كيفية استخدام الإضافة ، راجع توثيق إضافة Intlayer VS Code.
المضي قدمًا
للمضي قدمًا ، يمكنك تنفيذ المحرر المرئي أو إخراج محتواك باستخدام نظام إدارة المحتوى (CMS).
