استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على 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.storagemiddleware.serverSetCookie: تم استبداله بـrouting.storagemiddleware.prefixDefault: تم استبداله بـrouting.modemiddleware.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 لمزيد من المعلومات.