استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- بدء السجلv9.0.0٥/٦/٢٠٢٦
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
الترحيل من react-i18next / i18next إلى Intlayer
لماذا الترحيل من react-i18next / i18next إلى Intlayer؟
بدلاً من تحميل ملفات JSON ضخمة في صفحاتك، قم بتحميل المحتوى الضروري فقط. يساعدك Intlayer على تقليل حجم bundle والصفحات بنسبة تصل إلى 50%.
تقسيم محتوى التطبيق الخاص بك يسهل الصيانة للتطبيقات الكبيرة. يمكنك نسخ أو حذف مجلد ميزة واحد دون العبء الذهني لمراجعة قاعدة الكود كاملة. بالإضافة إلى ذلك، Intlayer مكتوب بالكامل لضمان دقة المحتوى الخاص بك.
Intlayer هو أيضًا الحل الذي يتمتع بـ أنشط تطور في نظام i18n البيئي - يتم إصلاح المشاكل بسرعة، وتصل محولات frameworks جديدة بانتظام، ويتم تحسين API الأساسي بشكل مستمر بناءً على ملاحظات الإنتاج الواقعية.
يقلل Co-locating المحتوى من السياق المطلوب بواسطة النماذج اللغوية الكبيرة (LLMs). يأتي Intlayer أيضًا مع مجموعة من الأدوات، مثل CLI لاختبار الترجمات المفقودة، LSP، MCP، و مهارات الوكيل، لجعل تجربة المطور (DX) أكثر سلاسة حتى بالنسبة لوكلاء AI.
استخدم الأتمتة للترجمة في خط أنابيب CI/CD الخاص بك باستخدام LLM من اختيارك بتكلفة موفر AI الخاص بك. يوفر Intlayer أيضًا مترجم لأتمتة استخراج المحتوى، وكذلك منصة ويب لمساعدتك في الترجمة في الخلفية.
ربط ملفات JSON ضخمة بمكونات قد يؤدي إلى مشاكل الأداء والتفاعل. يحسّن Intlayer تحميل المحتوى الخاص بك في وقت البناء.
أكثر من مجرد حل i18n، يوفر Intlayer محرر بصري مستضاف على الخادم الخاص بك و CMS كامل لمساعدتك في إدارة محتوى متعدد اللغات في الوقت الفعلي، مما يجعل التعاون مع المترجمين والمحررين وأعضاء الفريق الآخرين سلساً. يمكن تخزين المحتوى محليًا و/أو عن بعد.
استراتيجيات الترحيل
هناك استراتيجيتان متكاملتان للترحيل من react-i18next / i18next إلى Intlayer:
محول التوافق (موصى به للتطبيقات الموجودة) — قم بتثبيت
@intlayer/react-i18next(لمكونات React) و/أو@intlayer/i18next(لمثيلi18nالأساسي). تعرض هذه الحزم نفس API تماماً كـreact-i18next/i18nextلكنها توكل جميع أعمال الترجمة إلى Intlayer تحت الغطاء. تحتفظ باستدعاءاتuseTranslationوTransوwithTranslationوi18next.t()الموجودة - التغيير الوحيد هو مسار الاستيراد.الترحيل الكامل — استبدل تدريجياً APIs من
react-i18nextبـ hooks Intlayer الأصلية (useIntlayer,IntlayerProvider) و ضع المحتوى في ملفات.content.tsبجانب مكوناتك.
يغطي هذا الدليل الاستراتيجية 1 أولاً (محول التوافق drop-in)، ثم يمر عبر الترحيل الكامل الاختياري.
جدول المحتويات
الترحيل السريع
الخطوات التالية هي الحد الأدنى المطلوب للحصول على تطبيق react-i18next الموجود يعمل على Intlayer دون تغييرات الكود.
تثبيت التبعيات
قم بتثبيت حزم Intlayer الأساسية ومحولات التوافق:
bashنسخ الكودنسخ الكود إلى الحافظة
npx intlayer-cli init --interactiveالعلم
--interactiveاختياري. استخدمintlayer-cli initإذا كنت وكيلاً من AI.سيكتشف هذا الأمر بيئتك ويثبت الحزم المطلوبة. على سبيل المثال:
bashنسخ الكودنسخ الكود إلى الحافظة
npm install intlayer react-intlayer @intlayer/react-i18next @intlayer/i18next @intlayer/sync-json-pluginيمكنك الاحتفاظ بـ
react-i18nextوi18nextالمثبتة - تستخدم محولات التوافق كـdevDependencies/peerDependenciesاختياري لأنواع TypeScript. لا تحتاج إلى تغيير أي أقرانpackage.json.تكوين Intlayer
ينشئ أمر
intlayer initملفintlayer.config.tsالبداية. قم بتحديثه ليطابق المناطق الموجودة لديك وأشر مكونsyncJSONإلى ملفات الرسائل الخاصة بك:intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // أضف جميع المناطق الموجودة لديك هنا ], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ // يطابق بناء جملة العنصر النائب من react-i18next: {{name}} format: "i18next", source: ({ locale }) => `./src/locales/${locale}.json`, location: "src/locales", }), ], }; export default config;sourceيعيّن منطقة إلى مسار ملفها JSON.locationيخبر المراقب Intlayer أي مجلد يجب مراقبته للتغييرات. يضمن الخيارformat: 'i18next'أن العناصر النائبة مثل{{name}}يتم تحليلها بشكل صحيح.إضافة مكون Intlayer إلى Bundler الخاص بك
لف إعداد bundler الموجود لديك بمكون التوافق. يقوم بدمج مكون Intlayer الأساسي، ويربط مراقبة المحتوى، و - بشكل حاسم - يحقن بدائل module بحيث تتم إعادة توجيه استدعاءات
import … from 'react-i18next'(و'i18next') الموجودة بشفافية إلى@intlayer/react-i18next/@intlayer/i18nextفي وقت البناء. لا توجد حاجة لتغييرات ملفات المصدر.لـ Vite:
vite.config.tsنسخ الكودنسخ الكود إلى الحافظة
import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import { reactI18nextVitePlugin } from "@intlayer/react-i18next/plugin"; export default defineConfig({ plugins: [react(), reactI18nextVitePlugin()], });reactI18nextVitePlugin()يلتف مكونintlayer()منvite-intlayerويضيف بدائلreact-i18next/i18next. استخدام مكونintlayer()البسيط منvite-intlayerيجمّع القواميس لكن لا يضيف تلك البدائل - ستقوم بعد ذلك بإعادة تسمية الاستيرادات إلى@intlayer/*يدويًا (انظر الخطوة 4).لـ Next.js:
إذا كنت تستخدم
next-i18next(تكامل Pages Router)، قم بتثبيت@intlayer/next-i18nextوnext-intlayer:bashنسخ الكودنسخ الكود إلى الحافظة
npm install @intlayer/next-i18next next-intlayerثم أضف مكون التوافق إلى
next.config.ts(يحقن بدائلnext-i18next/react-i18next/i18next):next.config.tsنسخ الكودنسخ الكود إلى الحافظة
import type { NextConfig } from "next"; import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin"; const withIntlayer = createNextI18nPlugin(); const nextConfig: NextConfig = { /* الخيارات الخاصة بك */ }; export default withIntlayer(nextConfig);لا تحتاج أكثر إلى
i18next.init()أو bootstrap موفر يدوي. يجمّع Intlayer جميع القواامس في وقت البناء، لذا لا توجد خطوة تحميل وقت التشغيل. يتعامل موفر المستعار مع التهيئة لك.
هذا كل ما هو مطلوب للترحيل السريع. تطبيقك يعمل الآن على Intlayer مع الحفاظ على كل استيراد واجهة برمجية من react-i18next.
مفاتيح ترجمة مكتوبة - تلقائي. بمجرد أن يجمّع Intlayer القواامس، يتم كتابة
useTranslationوgetFixedTمقابل المحتوى الفعلي. يتم إكمال المفاتيح تلقائياً في محرر IDE ومسارات غير صحيحة تسبب أخطاء TypeScript في وقت البناء - لا يلزم إعداد إضافي.tsxنسخ الكودنسخ الكود إلى الحافظة
// 'about' هو مفتاح قاموس مسجل → t() يقبل فقط نقاط منقوطة صحيحةconst { t } = useTranslation("about");t("counter.label"); // ✓ مكتملt("does.not.exist"); // ✗ خطأ TypeScript// من جانب الخادم (مثيل i18next)const tAbout = i18n.getFixedT(null, "about");tAbout("counter.label"); // ✓ مكتوب
الترحيل الكامل
الخطوات أدناه اختيارية ويمكن القيام بها بشكل تدريجي. تفتح مجموعة ميزات Intlayer الكاملة: محرر بصري، CMS، ملفات محتوى مكتوبة، ترجمة مدعومة بـ AI، والمزيد.
إعادة تسمية الاستيراد الصريح (اختياري)
اختياريتتعامل مكونات Intlayer بالفعل مع البدائل على مستوى bundler. إذا كنت تفضل جعل التبعية صريحة في ملفات المصدر، يمكنك إعادة تسمية الاستيرادات يدويًا:
اظهار جميع محتويات الجدولافتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
قبل بعد import { useTranslation } from 'react-i18next'import { useTranslation } from '@intlayer/react-i18next'import { Trans } from 'react-i18next'import { Trans } from '@intlayer/react-i18next'import { withTranslation } from 'react-i18next'import { withTranslation } from '@intlayer/react-i18next'import { I18nextProvider } from 'react-i18next'import { I18nextProvider } from '@intlayer/react-i18next'import { initReactI18next } from 'react-i18next'import { initReactI18next } from '@intlayer/react-i18next'import i18next from 'i18next'import i18next from '@intlayer/i18next'import { createInstance } from 'i18next'import { createInstance } from '@intlayer/i18next'import { t } from 'i18next'import { t } from '@intlayer/i18next'لـ Next.js (
next-i18next):اظهار جميع محتويات الجدولافتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
قبل بعد import { serverSideTranslations } from 'next-i18next/serverSideTranslations'import { serverSideTranslations } from '@intlayer/next-i18next'import { appWithTranslation } from 'next-i18next'import { appWithTranslation } from '@intlayer/next-i18next'import { useTranslation } from 'next-i18next'import { useTranslation } from '@intlayer/next-i18next'تفعيل أتمتة الترجمة المدعومة بـ AI
اختياريبمجرد توصيل Intlayer، استخدم CLI الخاص به لملء الترجمات المفقودة تلقائياً:
bashنسخ الكودنسخ الكود إلى الحافظة
# اختبر الترجمات المفقودة (أضف إلى CI)npx intlayer test# ملء الترجمات المفقودة بـ AInpx intlayer fillأضف التكوين AI إلى
intlayer.config.ts:intlayer.config.tsنسخ الكودنسخ الكود إلى الحافظة
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ format: "i18next", source: ({ locale }) => `./src/locales/${locale}.json`, location: "src/locales", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // الافتراضي // model: "gpt-4o-mini", // الافتراضي }, }; export default config;راجع وثائق Intlayer CLI لجميع الخيارات المتاحة.
ما يمكنك حذفه بعد الترحيل
بمجرد وضع محولات التوافق، يمكن إزالة الكود النموذجي التالي من react-i18next / i18next:
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الملف / النمط | لماذا لا يكون مطلوباً بعد الآن |
|---|---|
استدعاءات i18next.init() | يقوم موفر Intlayer بتهيئة كل شيء تلقائياً؛ لا توجد خطوة تحميل وقت التشغيل. |
I18nextProvider / initReactI18next | يتعامل مكون Intlayer مع الحقن والـ bootstrap تحت الغطاء. |
حزم اللغة JSON (locales/*.json) | حزم JSON مطلوبة فقط إذا كنت تستخدم بعد مكون syncJSON. بمجرد الترحيل إلى ملفات .content.ts يمكنك حذف مجلد JSON. |
عندما تكون جاهزاً للمضي قدماً، يكتشف Intlayer تلقائياً جميع ملفات .content.ts و .content.json في أي مكان في codebase (افتراضياً، في أي مكان داخل ./src). يمكنك وضع ملف my-component.content.ts بجوار MyComponent.tsx مباشرة وسيلتقطه Intlayer في وقت البناء دون تكوين إضافي - لا استيرادات، لا تسجيل، لا ملف فهرس مركزي مطلوب. هذا يجعل co-locating الترجمات مع الصفحات والمكونات خالياً من الاحتكاك تماماً.
تكوين TypeScript
يستخدم Intlayer تعديل module لتوفير intellisense TypeScript الكامل لمفاتيح الترجمة. تأكد من أن tsconfig.json يتضمن الأنواع التي يتم إنشاؤها تلقائياً:
نسخ الكود إلى الحافظة
{ // ... تكويناتك TypeScript الموجودة "include": [ // ... تكويناتك TypeScript الموجودة ".intlayer/**/*.ts", // قم بتضمين الأنواع التي تم إنشاؤها تلقائياً ],}تكوين Git
أضف مجلد Intlayer المُنتج إلى .gitignore:
نسخ الكود إلى الحافظة
# تجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer.intlayerاذهب إلى ما هو أبعد
- محرر بصري — إدارة الترجمات بشكل مرئي في المتصفح: محرر Intlayer البصري
- CMS — تحويل إلى خارجي وإدارة المحتوى من بعيد: Intlayer CMS
- VS Code Extension — احصل على إكمال تلقائي واكتشاف خطأ ترجمة فوري: ملحق Intlayer VS Code
- مرجع CLI — قائمة كاملة بأوامر CLI: Intlayer CLI
- Intlayer مع React — دليل الإعداد الكامل لـ React: intlayerwithvite+react.md
- Intlayer مع Next.js — دليل الإعداد الكامل لـ Next.js: intlayerwithnextjs_16.md