استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
بدءاً من الدمج مع خادم MCP Intlayer ، يمكن لمساعدك الذكي الاسترجاع من جميع المستندات مباشرة من ChatGPT ، DeepSeek ، Cursor ، VSCode ، إلخ.
عرض الوثائق الخاصة بالخادم MCPتمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
الإصدار الجديد Intlayer v7 - ما الجديد؟
مرحبًا بك في Intlayer v7! يقدم هذا الإصدار الكبير تحسينات ملحوظة في الأداء، أمان الأنواع، وتجربة المطور. فيما يلي أبرز النقاط، مع ملاحظات الترحيل وأمثلة عملية.
أبرز النقاط
- استراتيجية التخزين المؤقت لبناء أسرع
- تحسين توليد أنواع TypeScript بأنواع مخصصة لكل لغة
- تحسين الحزمة: استخدام السلاسل النصية للغات بدلاً من التعداد (enum)
- أوضاع توجيه جديدة: prefix-no-default، prefix-all، no-prefix، search-params
- تخزين اللغات متوافق مع GDPR باستخدام localStorage كإعداد افتراضي
- تكوين تخزين مرن: ملفات تعريف الارتباط (cookies)، localStorage، sessionStorage، أو متعددة
- حجم حزمة محرر المحتوى المرئي أصغر بنسبة 30%
- خيارات محسنة لتكوين الوسيط (middleware)
- تحديث سلوك أمر التعبئة (fill) لإدارة محتوى أفضل
- استقرار محسّن مع تحديثات كاملة لملفات إعلان المحتوى
- إدارة ذكية لإعادة المحاولة لضمان دقة الترجمة
- المعالجة المتوازية لتسريع عملية الترجمة
- تقسيم ذكي للتعامل مع الملفات الكبيرة ضمن حدود سياق الذكاء الاصطناعي
الأداء: التخزين المؤقت لبناء أسرع
بدلاً من إعادة بناء إعلانات المحتوى باستخدام esbuild في كل عملية بناء، تقوم النسخة 7 بتنفيذ استراتيجية تخزين مؤقت تُسرّع عملية البناء.
npx intlayer buildنظام التخزين المؤقت الجديد:
- يخزن إعلانات المحتوى المجمعة لتجنب المعالجة المتكررة
- يكتشف التغييرات ويعيد بناء الملفات المعدلة فقط
- يقلل بشكل كبير من أوقات البناء للمشاريع الكبيرة
تايب سكريبت: توليد أنواع مخصصة لكل لغة
يتم الآن توليد أنواع TypeScript لكل لغة على حدة، مما يوفر كتابة أقوى ويقضي على أنواع الاتحاد عبر جميع اللغات.
سلوك النسخة 6:
const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" }سلوك النسخة 7:
const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" }الفوائد:
- إكمال تلقائي أكثر دقة في بيئة التطوير الخاصة بك
- أمان نوع أفضل بدون تلوث أنواع عبر اللغات المختلفة
- أداء محسّن من خلال تقليل تعقيد الأنواع
تحسين الحزمة: اللغات كسلاسل نصية
لم يعد نوع Locales تعدادًا (enum)، مما يعني أنه أصبح قابلًا لإزالة الشجر بالكامل (tree-shakeable) ولن يثقل حزمة التطبيق الخاصة بك بآلاف سجلات اللغات غير المستخدمة.
النسخة 6:
import { Locales } from "intlayer";// تعداد يشمل جميع اللغات -> غير قابل لإزالة الشجرconst locale: Locales = Locales.ENGLISH;النسخة 7:
import { Locales, Locale } from "intlayer";// نوع سلسلة نصية -> قابل لإزالة الشجر بالكاملconst locale: Locale = Locales.ENGLISH;نظرًا لأن Locales لم يعد تعدادًا (enum)، سيتعين عليك تغيير النوع من Locales إلى Locale للحصول على اللغة كنمط.
راجع تفاصيل التنفيذ لمزيد من المعلومات.
أوضاع التوجيه الجديدة لمزيد من المرونة
تقدم النسخة 7 تكوينًا موحدًا routing.mode يحل محل الخيارات السابقة prefixDefault و noPrefix، مما يوفر تحكمًا أكثر دقة في هيكل عنوان URL.
أوضاع التوجيه المتاحة
- prefix-no-default (الافتراضي): اللغة الافتراضية بدون بادئة، واللغات الأخرى لها بادئة
- /dashboard (en) أو /fr/dashboard (fr)
- prefix-all: جميع اللغات لها بادئة
- /en/dashboard (en) أو /fr/dashboard (fr)
- no-prefix: لا توجد بادئات للغة في عناوين URL (يتم التعامل مع اللغة عبر التخزين/الرؤوس)
- /dashboard لجميع اللغات
- search-params: تمرير اللغة كمعامل استعلام
- /dashboard?locale=en أو /dashboard?locale=fr
التكوين الأساسي
// intlayer.config.tsexport default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", // الافتراضي },};الامتثال للائحة حماية البيانات العامة (GDPR): تخزين localStorage / الكوكيز
تُعطي النسخة 7 أولوية لخصوصية المستخدم باستخدام localStorage كآلية التخزين الافتراضية بدلاً من الكوكيز. يساعد هذا التغيير في الامتثال للائحة GDPR من خلال تجنب متطلبات موافقة الكوكيز لتفضيلات اللغة.
خيارات تكوين التخزين
يتوفر الحقل الجديد routing.storage بالإضافة إلى الخيارات السابقة middleware.cookieName و middleware.serverSetCookie، مما يوفر تكوينات تخزين مرنة:
// تعطيل التخزينstorage: false// أنواع التخزين البسيطةstorage: 'cookie'storage: 'localStorage'storage: 'sessionStorage'// الكوكيز مع سمات مخصصةstorage: { type: 'cookie', name: 'custom-locale', domain: '.example.com', secure: true, sameSite: 'strict'}// localStorage مع مفتاح مخصصstorage: { type: 'localStorage', name: 'custom-locale'}// أنواع تخزين متعددة للنسخ الاحتياطيstorage: ['cookie', 'localStorage']مثال على تكوين متوافق مع GDPR
للتطبيقات الإنتاجية التي تحتاج إلى موازنة بين الوظائف والامتثال لـ GDPR:
// intlayer.config.tsexport default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", storage: [ { type: "localStorage", // التخزين الأساسي (لا يحتاج موافقة) name: "user-locale", }, { type: "cookie", // تخزين الكوكيز الاختياري (يتطلب موافقة) name: "user-locale", secure: true, sameSite: "strict", httpOnly: false, }, ], },};تمكين / تعطيل تخزين الكوكيز
مثال باستخدام React / Next.js:
يمكن تعريفه على مستوى عام:
<IntlayerProvider isCookieEnabled={false}> <App /></IntlayerProvider>يمكن تجاوزه محليًا لكل هوك:
const { setLocale } = useLocale({ isCookieEnabled: false });setLocale("en");ملاحظة: الكوكيز مفعلة بشكل افتراضي. ملاحظة: تحقق من متطلبات الكوكيز وفقًا للائحة GDPR لحالتك الخاصة.
المحرر المرئي: حزمة أصغر بنسبة 30%
تم تحسين حزمة المحرر المرئي لتكون أصغر بنسبة 30% مقارنة بالإصدار السابق، وذلك بفضل:
- تحسينات أداء محرر الكود
- إزالة التبعيات غير الضرورية على حزم Intlayer الأساسية
- تحسين تقنيات tree-shaking وتجميع الوحدات
ينتج عن ذلك أوقات تحميل أسرع وأداء أفضل أثناء تشغيل التطبيق الخاص بك.
أمر fill: سلوك محدث لإدارة محتوى أفضل
يقدم الإصدار 7 سلوكًا محسّنًا لأمر fill، مما يوفر إدارة محتوى أكثر توقعًا ومرونة:
سلوك fill الجديد
- fill: true - يعيد كتابة الملف الحالي بمحتوى مملوء لجميع اللغات
- fill: "path/to/file" - يملأ الملف المحدد دون تعديل الملف الحالي
- fill: false - يعطل الملء التلقائي تمامًا
دعم معزز لهياكل المحتوى المعقدة
يدعم أمر fill الآن هياكل إعلان المحتوى المعقدة، بما في ذلك:
- الكائنات المركبة: إعلانات المحتوى التي تشير إلى كائنات أخرى
- المحتوى المفكك: المحتوى الذي يستخدم أنماط التفكيك
- المراجع المتداخلة: الكائنات التي تستدعي بعضها البعض في تسلسلات معقدة
- هياكل المحتوى الديناميكية: المحتوى ذو الخصائص الشرطية أو المحسوبة
الفوائد
- نية أوضح: أصبح السلوك أكثر وضوحًا بشأن ما يتم تعديله
- فصل أفضل: يمكن الاحتفاظ بملفات المحتوى منفصلة عن الترجمات المعبأة
- تحسين سير العمل: يتمتع المطورون بمزيد من التحكم في مكان تخزين الترجمات
- دعم الهياكل المعقدة: التعامل مع هياكل محتوى متطورة تحتوي على عدة كائنات مترابطة
مثال على الاستخدام
// إعادة كتابة الملف الحالي مع جميع اللغاتconst content = { key: "example", fill: true, // يعيد كتابة هذا الملف content: { title: "Hello World", },};// تعبئة ملف منفصل دون تعديل الملف الحاليconst content = { key: "example", fill: "./translations.json", // ينشئ/يحدث translations.json content: { title: "Hello World", },};// تعطيل التعبئة التلقائيةconst content = { key: "example", fill: false, // لا تعبئة تلقائية content: { title: "Hello World", },};// هيكل محتوى معقد مع كائنات مركبةconst sharedContent = { buttons: { save: "حفظ", cancel: "إلغاء", },};const content = { key: "complex-example", fill: true, content: { // مراجع لكائنات أخرى sharedContent, // محتوى مفكك ...sharedContent, // مراجع متداخلة sections: [ { ...sharedContent.buttons, header: "القسم 1", }, ], },};تحسين الاستقرار وإدارة الترجمة
يقدم الإصدار 7 عدة تحسينات لجعل ترجمة المحتوى أكثر موثوقية وكفاءة:
تحديثات كاملة لملفات إعلان المحتوى
يقوم النظام الآن بتحديث ملفات .content.{ts,js,cjs,mjs} بدلاً من التحديثات الجزئية، مما يضمن:
- سلامة البيانات: إعادة كتابة الملف بالكامل تمنع التحديثات الجزئية التي قد تؤدي إلى تلف المحتوى
- الاتساق: يتم تحديث جميع اللغات بشكل ذري، مما يحافظ على التزامن
- الموثوقية: يقلل من خطر وجود ملفات محتوى غير مكتملة أو تالفة
إدارة إعادة المحاولة الذكية
آليات إعادة المحاولة الجديدة تمنع دفع المحتوى بصيغ غير صحيحة، وتتجنب كسر عملية التعبئة بالكامل إذا فشل طلب واحد.
المعالجة المتوازية لتسريع الأداء
تعمل عمليات الترجمة الآن في قائمة انتظار لتشغيلها بشكل متوازي. هذا يسرع العملية بشكل كبير.
تقسيم ذكي للملفات الكبيرة
استراتيجيات تقسيم متقدمة تتعامل مع ملفات المحتوى الكبيرة دون تجاوز حدود سياق الذكاء الاصطناعي:
مثال على سير العمل
// يتم تقسيم ملف المحتوى الكبير تلقائيًاconst content = { key: "large-documentation", fill: true, content: { // يتم تقسيم المحتوى الكبير تلقائيًا للمعالجة بواسطة الذكاء الاصطناعي introduction: "..." // أكثر من 5000 حرف sections: [ // عدة أقسام كبيرة ] }};يقوم النظام تلقائيًا بـ:
- تحليل حجم المحتوى وبنيته
- تقسيم المحتوى بشكل مناسب
- معالجة الأجزاء بشكل متوازي
- التحقق من الصحة وإعادة المحاولة إذا لزم الأمر
- إعادة بناء الملف الكامل
ملاحظات الترحيل من الإصدار v6
الإعدادات التي تمت إزالتها
- middleware.cookieName: تم استبداله بـ routing.storage
- middleware.serverSetCookie: تم استبداله بـ routing.storage
- middleware.prefixDefault: تم استبداله بـ routing.mode
- middleware.noPrefix: تم استبداله بـ routing.mode
خريطة الترحيل
خريطة التهيئة
| تهيئة v6 | تهيئة v7 |
|---|---|
| autoFill: xxx | fill: xxx |
| prefixDefault: false | mode: 'prefix-no-default' |
| prefixDefault: true | mode: 'prefix-all' |
| noPrefix: true | mode: 'no-prefix' |
| cookieName: 'my-locale' | storage: { type: 'cookie', name: 'my-locale' } |
| serverSetCookie: 'never' | storage: false أو إزالة الكوكي من مصفوفة التخزين |
مثال على الترحيل
قبل (v6):
export default { middleware: { headerName: "x-intlayer-locale", cookieName: "intlayer-locale", prefixDefault: false, basePath: "", serverSetCookie: "always", noPrefix: false, },};بعد (v7):
export default { routing: { mode: "prefix-no-default", storage: "localStorage", // أو 'cookie' إذا كنت بحاجة إلى تخزين الكوكيز headerName: "x-intlayer-locale", basePath: "", },};مطابقة محتوى القاموس
| محتوى القاموس في v6 | محتوى القاموس في v7 |
|---|---|
| autoFill: xxx | fill: xxx |
مثال على الترحيل
قبل (v6):
const content = { key: "example", autoFill: true, // يعيد كتابة هذا الملف content: { title: "مرحبا بالعالم", },};بعد (v7):
const content = { key: "example", fill: true, // يعيد كتابة هذا الملف content: { title: "مرحبا بالعالم", },};ملاحظات الترحيل من الإصدار v5 إلى v6
راجع ملاحظات الترحيل من v5 إلى v6 لمزيد من المعلومات.