استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
هذه الوثيقة غير محدثة، تم تحديث النسخة الأساسية في 4 أكتوبر 2026.
الانتقال إلى الوثيقة الإنجليزيةتاريخ الإصدارات
- "تحديث استخدام واجهة برمجة تطبيقات useIntlayer في Solid للوصول المباشر إلى الخصائص"v8.9.04/5/2026
- "إضافة أمر init"v7.6.031/12/2025
- "تهيئة السجل"v7.6.031/12/2025
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
ترجمة موقع الويب الخاص بخادم Fastify باستخدام Intlayer
fastify-intlayer هو ملحق (plugin) قوي للتدويل (i18n) لتطبيقات Fastify، مصمم لجعل خدمات الـ backend الخاصة بك متاحة عالميًا من خلال تقديم استجابات محلية حسب تفضيلات العميل.
شاهد تنفيذ الحزمة على GitHub.
حالات استخدام عملية
- عرض أخطاء الـ backend بلغة المستخدم: عند حدوث خطأ، عرض الرسائل بلغة المستخدم الأم يُحسّن الفهم ويقلل الإحباط. هذا مفيد بشكل خاص للرسائل الديناميكية للأخطاء التي قد تُعرض في مكونات الواجهة الأمامية مثل toasts أو modals.
- استرجاع محتوى متعدد اللغات: بالنسبة للتطبيقات التي تجلب المحتوى من قاعدة بيانات، يضمن التدويل أنه يمكنك تقديم هذا المحتوى بعدة لغات. هذا أمر حاسم لمنصات مثل مواقع التجارة الإلكترونية أو أنظمة إدارة المحتوى التي تحتاج إلى عرض أوصاف المنتجات والمقالات ومحتويات أخرى باللغة التي يفضلها المستخدم.
- إرسال رسائل بريد إلكتروني متعددة اللغات: سواء كانت رسائل بريد إلكتروني للمعاملات أو حملات تسويقية أو إشعارات، فإن إرسال الرسائل البريدية بلغة المستلم يمكن أن يزيد بشكل كبير من التفاعل والفعالية.
- الإشعارات المتعددة اللغات: بالنسبة لتطبيقات الجوال، إرسال إشعارات الدفع بلغة مفضلة لدى المستخدم يمكن أن يعزز التفاعل والاحتفاظ بالمستخدمين. تضيف هذه اللمسة الشخصية شعورًا بأن الإشعارات ذات صلة وقابلة للتنفيذ.
- وسائل اتصال أخرى: أي شكل من أشكال الاتصال من الـ backend، مثل رسائل SMS أو تنبيهات النظام أو تحديثات واجهة المستخدم، يستفيد من تقديمه بلغة المستخدم، مما يضمن الوضوح ويعزز تجربة المستخدم العامة.
من خلال تدويل الـ backend، لا يحترم تطبيقك الفروق الثقافية فحسب، بل يتماشى أيضًا بشكل أفضل مع احتياجات السوق العالمية، مما يجعله خطوة أساسية لتوسيع نطاق خدماتك عالميًا.
البدء
شاهد قالب التطبيق على GitHub.
التثبيت
لبدء استخدام fastify-intlayer، قم بتثبيت الحزمة باستخدام npm:
نسخ الكود إلى الحافظة
علامة--interactiveاختيارية. استخدمintlayer-cli initإذا كنت وكيل ذكاء اصطناعي.
سيقوم هذا الأمر باكتشاف بيئتك وتثبيت الحزم المطلوبة. على سبيل المثال:
نسخ الكود إلى الحافظة
الإعداد
قم بتكوين إعدادات التدويل بإنشاء ملف intlayer.config.ts في جذر مشروعك:
نسخ الكود إلى الحافظة
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [
Locales.ENGLISH,
Locales.FRENCH,
Locales.SPANISH_MEXICO,
Locales.SPANISH_SPAIN,
],
defaultLocale: Locales.ENGLISH,
},
};
export default config;
إعلان المحتوى
أنشئ وأدِر تعريفات المحتوى الخاصة بك لتخزين الترجمات:
نسخ الكود إلى الحافظة
import { t, type Dictionary } from "intlayer";
const indexContent = {
key: "index",
content: {
exampleOfContent: t({
en: "Example of returned content in English",
fr: "Exemple de contenu renvoyé en français",
"es-ES": "Ejemplo de contenido devuelto en español (España)",
"es-MX": "Ejemplo de contenido devuelto en español (México)",
}),
},
} satisfies Dictionary;
export default indexContent;
يمكن تعريف إعلانات المحتوى في أي مكان داخل تطبيقك طالما أنها مضمنة في دليلcontentDir(افتراضيًا./src). ويجب أن تتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
لمزيد من التفاصيل، راجع توثيق إعلان المحتوى.
إعداد تطبيق Fastify
أعد إعداد تطبيق Fastify لاستخدام fastify-intlayer:
نسخ الكود إلى الحافظة
import Fastify from "fastify";
import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
import dictionaryExample from "./index.content";
const fastify = Fastify({ logger: true });
// تحميل إضافة التدويل
await fastify.register(intlayer);
// المسارات
fastify.get("/t_example", async (_req, reply) => {
return t({
en: "Example of returned content in English",
fr: "Exemple de contenu renvoyé en français",
"es-ES": "Ejemplo de contenido devuelto en español (España)",
"es-MX": "Ejemplo de contenido devuelto en español (México)",
});
});
fastify.get("/getIntlayer_example", async (_req, reply) => {
return getIntlayer("index").exampleOfContent;
});
fastify.get("/getDictionary_example", async (_req, reply) => {
return getDictionary(dictionaryExample).exampleOfContent;
});
// بدء الخادم
const start = async () => {
try {
await fastify.listen({ port: 3000 });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
التوافق
fastify-intlayer متوافق تمامًا مع:
react-intlayerلتطبيقات Reactnext-intlayerلتطبيقات Next.jsvite-intlayerلتطبيقات Vite
كما يعمل بسلاسة مع أي حل للتدويل عبر بيئات متعددة، بما في ذلك المتصفحات وطلبات API. يمكنك تخصيص الـ middleware لاكتشاف اللغة عبر الرؤوس أو الكوكيز:
نسخ الكود إلى الحافظة
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
// ... خيارات التكوين الأخرى
routing: {
storage: [
{ type: "header", name: "my-locale-header" },
{ type: "cookie", name: "my-locale-cookie" },
],
},
};
export default config;
بشكل افتراضي، سيقوم fastify-intlayer بتفسير رأس Accept-Language لتحديد اللغة المفضلة لدى العميل.
لمزيد من المعلومات حول التكوين والمواضيع المتقدمة، قم بزيارة التوثيق.
تكوين TypeScript
fastify-intlayer يستفيد من القدرات القوية لـ TypeScript لتحسين عملية التدويل. يضمن نظام الكتابة الثابتة في TypeScript أن كل مفتاح ترجمة مغطى، مما يقلل من خطر فقدان الترجمات ويحسن قابلية الصيانة.
تأكد من تضمين الأنواع المولدة تلقائيًا (بشكل افتراضي في ./types/intlayer.d.ts) في ملف tsconfig.json الخاص بك.
نسخ الكود إلى الحافظة
امتداد VS Code
لتحسين تجربة التطوير مع Intlayer، يمكنك تثبيت الامتداد الرسمي Intlayer VS Code Extension.
يقدّم هذا الامتداد:
- الإكمال التلقائي لمفاتيح الترجمة.
- كشف الأخطاء في الوقت الحقيقي للترجمات المفقودة.
- معاينات مُضمّنة للمحتوى المترجم.
- إجراءات سريعة لإنشاء وتحديث الترجمات بسهولة.
لمزيد من التفاصيل حول كيفية استخدام الامتداد، راجع وثائق امتداد Intlayer لـ VS Code.
تكوين Git
يوصى بتجاهل الملفات التي يولّدها Intlayer. يتيح ذلك تجنّب إضافتها في مستودع Git الخاص بك.
لتحقيق ذلك، يمكنك إضافة التعليمات التالية إلى ملف .gitignore الخاص بك:
نسخ الكود إلى الحافظة
الأسئلة الشائعة
- مكونات Fastify الإضافية لـ
i18next: مكتبات وقت التشغيل القائمة على فضاءات أسماء JSON. Intlayer: مكونfastify-intlayerالإضافي المحسن لدورة حياة Fastify، أنواع TypeScript كاملة، ترجمة بالذكاء الاصطناعي، وقواميس مدمجة مع الواجهة الأمامية.
السبب وراء تدويل النهاية الخلفية (backend) في المقام الأول هو أن جزءًا كبيرًا من النصوص التي يقرأها المستخدم لا يمر أبدًا عبر الواجهة الأمامية (frontend): رسائل خطأ API، ورسائل البريد الإلكتروني الخاصة بالمعاملات، والإشعارات اللحظية، والرسائل القصيرة، وصادرات PDF. تحتاج هذه النصوص إلى لغة المستلم، والتي يتم تحديدها لكل طلب بدلاً من كل جلسة.
انظر لماذا Intlayer.
القليل جدًا. تُجمَّع القواميس مسبقًا ولا تُضمَّن إلا اللغات التي تعلن عنها، لذلك لا يوجد تحميل للكتالوجات عند الإقلاع ولا قراءة للملفات أثناء معالجة الطلب. ويكتسب ذلك أهمية أكبر في عمليات النشر على البيئات عديمة الخوادم (serverless) وبيئات الحافة (edge)، حيث يحدد حجم الحزمة زمن البدء البارد (cold start). انظر تحسين الحزم.
نعم، وهناك مساران. يمكنك ترحيل المحتوى تدريجيًا باستخدام دليل الترحيل من i18next. أو يمكنك الاحتفاظ بواجهتك البرمجية الحالية بالكامل: إذ توفّر محولات التوافق (compat adapters) واجهة i18next نفسها تمامًا، لكن تخدمها قواميس Intlayer، فتتغير عمليات الاستيراد فقط ولا يتغير كود المعالجات.
نعم. تحافظ مكونة مزامنة JSON على ملفات /messages/{locale}/{namespace}.json كمصدر الحقيقة وتُنشئ قواميس Intlayer منها، في كلا الاتجاهين. وتقوم مكونة مزامنة PO بنفس الشيء لكتالوجات gettext، وتسمح لك الملفات المقسمة حسب اللغة بتقسيم المحتوى حسب اللغة بدلاً من تجميع كل اللغات في ملف واحد.
لا. قم بتشغيل npx intlayer extract وسيقرأ Intlayer ملفات المصدر الخاصة بك، ويسحب السلاسل النصية الموجهة للمستخدم ويكتب ملف .content بجانب كل منها، بحيث تراجع diff بدلاً من نسخ السلاسل إلى كتالوج واحدة تلو الأخرى. راجع أمر extract.
وعلى جانب الواجهة الأمامية من المشروع نفسه، يذهب Intlayer Compiler أبعد من ذلك ويُنشئ القواميس في وقت البناء من كود JSX أو TSX أو Vue أو Svelte، بحيث يتشارك نصفا التطبيق طبقة محتوى واحدة دون أي مفاتيح تُدار يدويًا.
خمس أدوات، كلها اختيارية:
- امتداد 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، بحيث يجيب المساعد استنادًا إلى الوثائق الحالية بدلًا من التخمين، ويمكنه تشغيل أوامر مثل
intlayer fillبنفسه. - Agent skills: مهارات مركّزة مثل
intlayer-configوintlayer-cliوintlayer-content، بالإضافة إلى مهارة لكل إطار عمل، تعلّم الوكيل إعداد التوجيه لديك وأنواع عُقد المحتوى. - ESLint plugin: ترصد قاعدة
no-raw-textالنصوص المكتوبة مباشرة في الكود، مع قواعد إضافية لمفاتيح القواميس الثابتة والمحتوى غير المستخدم.
