استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- "تحديث استخدام واجهة برمجة تطبيقات useIntlayer في Solid للوصول المباشر إلى الخصائص"v8.9.04/5/2026
- "إضافة أمر init"v7.5.930/12/2025
- "بداية التاريخ"v5.5.1029/6/2025
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
ترجم موقعك الإلكتروني المبني بـ Vite و Preact باستخدام Intlayer | التدويل (i18n)
جدول المحتويات
ما هو Intlayer؟
Intlayer هو مكتبة تدويل (i18n) مبتكرة ومفتوحة المصدر مصممة لتبسيط دعم اللغات المتعددة في تطبيقات الويب الحديثة.
باستخدام Intlayer، يمكنك:
- إدارة الترجمات بسهولة باستخدام قواميس إعلانية على مستوى المكون.
- توطين البيانات الوصفية والمسارات والمحتوى ديناميكيًا.
- ضمان دعم TypeScript بأنواع مولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
- الاستفادة من الميزات المتقدمة، مثل الاكتشاف الديناميكي للغة وتبديلها.
دليل خطوة بخطوة لإعداد Intlayer في تطبيق Vite و Preact
راجع قالب التطبيق على GitHub.
الخطوة 1: تثبيت التبعيات
قم بتثبيت الحزم اللازمة باستخدام npm:
نسخ الكود إلى الحافظة
npm install intlayer preact-intlayernpm install vite-intlayer --save-devnpx intlayer initintlayer
الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين والترجمة وإعلان المحتوى والترجمة البرمجية وأوامر CLI.
preact-intlayer
الحزمة التي تدمج Intlayer مع تطبيق Preact. توفر مزودي السياق والخطافات لتدويل Preact.
vite-intlayer
تتضمن إضافة Vite لدمج Intlayer مع أداة تجميع Vite، بالإضافة إلى وسيط لاكتشاف اللغة المفضلة للمستخدم وإدارة ملفات تعريف الارتباط والتعامل مع إعادة توجيه عناوين URL.
الخطوة 2: تكوين مشروعك
أنشئ ملف تكوين لتحديد لغات تطبيقك:
نسخ الكود إلى الحافظة
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [
Locales.ENGLISH,
Locales.FRENCH,
Locales.SPANISH,
// لغاتك الأخرى
],
defaultLocale: Locales.ENGLISH,
},
routing: {
mode: "prefix-no-default", // افتراضي: بادئة لجميع اللغات ما عدا اللغة الافتراضية
storage: ["cookie", "header"], // افتراضي: حفظ اللغة في ملف تعريف الارتباط والكشف من الرأس
},
};
export default config;من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL الموطنة، وأوضاع التوجيه، وخيارات التخزين، وأسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع وثائق التكوين.
الخطوة 3: دمج Intlayer في تكوين Vite الخاص بك
أضف المكون الإضافي intlayer إلى تكوينك.
نسخ الكود إلى الحافظة
import { defineConfig } from "vite";
import preact from "@preact/preset-vite";
import { intlayer } from "vite-intlayer";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [preact(), intlayer()],
});يُستخدم المكون الإضافي Vite intlayer() لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ويراقبها في وضع التطوير. كما يحدد متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، فإنه يوفر أسماء مستعارة لتحسين الأداء.
الخطوة 4: إعلان المحتوى الخاص بك
أنشئ وأدر إعلانات المحتوى الخاصة بك لتخزين الترجمات:
نسخ الكود إلى الحافظة
import { t, type Dictionary } from "intlayer";
import type { ComponentChildren } from "preact";
const appContent = {
key: "app",
content: {
viteLogo: t({
en: "Vite logo",
fr: "Logo Vite",
es: "Logo Vite",
}),
preactLogo: t({
en: "Preact logo",
fr: "Logo Preact",
es: "Logo Preact",
}),
title: "Vite + Preact",
count: t({
en: "count is ",
fr: "le compte est ",
es: "el recuento es ",
}),
edit: t<ComponentChildren>({
en: (
<>
Edit <code>src/app.tsx</code> and save to test HMR
</>
),
fr: (
<>
Éditez <code>src/app.tsx</code> et enregistrez pour tester HMR
</>
),
es: (
<>
Edita <code>src/app.tsx</code> y guarda para probar HMR
</>
),
}),
readTheDocs: t({
en: "Click on the Vite and Preact logos to learn more",
fr: "Cliquez sur les logos Vite et Preact pour en savoir plus",
es: "Haga clic en los logotipos de Vite y Preact para obtener más información",
}),
},
} satisfies Dictionary;
export default appContent;يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك طالما كانت مدرجة في دليلcontentDir(افتراضيًا،./src). وتتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا،.content.{json,ts,tsx,js,jsx,mjs,cjs}).
لمزيد من التفاصيل، راجع وثائق إعلان المحتوى.
إذا كان ملف المحتوى الخاص بك يتضمن كود TSX، فقد تحتاج إلى استيراد import { h } from "preact"; أو التأكد من ضبط براغما JSX بشكل صحيح لـ Preact.
الخطوة 5: استخدام Intlayer في كودك
قم بالوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيقك:
نسخ الكود إلى الحافظة
import { useState } from "preact/hooks";
import type { FunctionalComponent } from "preact";
import preactLogo from "./assets/preact.svg"; // بفرض أن لديك preact.svg
import viteLogo from "/vite.svg";
import "./app.css"; // بفرض أن ملف CSS الخاص بك يسمى app.css
import { IntlayerProvider, useIntlayer } from "preact-intlayer";
const AppContent: FunctionalComponent = () => {
const [count, setCount] = useState(0);
const content = useIntlayer("app");
return (
<>
<div>
<a href="https://vitejs.dev" target="_blank">
<img src={viteLogo} class="logo" alt={content.viteLogo.value} />
</a>
<a href="https://preactjs.com" target="_blank">
<img
src={preactLogo}
class="logo preact"
alt={content.preactLogo.value}
/>
</a>
</div>
<h1>{content.title}</h1>
<div class="card">
<button onClick={() => setCount((count) => count + 1)}>
{content.count}
{count}
</button>
<p>{content.edit}</p>
</div>
{/* محتوى Markdown */}
<div>{content.myMarkdownContent}</div>
{/* محتوى HTML */}
<div>{content.myHtmlContent}</div>
<p class="read-the-docs">{content.readTheDocs}</p>
</>
);
};
const App: FunctionalComponent = () => (
<IntlayerProvider>
<AppContent />
</IntlayerProvider>
);
export default App;إذا كنت تريد استخدام المحتوى الخاص بك في خاصيةstring، مثلalt،title،href،aria-label، وما إلى ذلك ، فيجب عليك استدعاء قيمة الدالة ، مثل:
htmlنسخ الكودنسخ الكود إلى الحافظة
<img src="{content.image.src.value}" alt="{content.image.value}" /><img src="{content.image.src.toString()}" alt="{content.image.toString()}" /><img src="{String(content.image.src)}" alt="{String(content.image)}" />
ملاحظة: في Preact، عادةً ما يتم كتابةclassNameكـclass.
لمعرفة المزيد حول الخطافuseIntlayer، راجع الوثائق (واجهة برمجة التطبيقات مماثلة لـpreact-intlayer).
إذا كان تطبيقك موجودًا بالفعل، يمكنك استخدام مترجم Intlayer، بالإضافة إلى أمر الاستخراج، لتحويل آلاف المكونات في ثانية واحدة.
(اختياري) الخطوة 6: تغيير لغة المحتوى الخاص بك
لتغيير لغة المحتوى الخاص بك ، يمكنك استخدام وظيفة setLocale التي يوفرها خطاف useLocale. تتيح لك هذه الوظيفة تعيين لغة التطبيق وتحديث المحتوى وفقًا لذلك.
نسخ الكود إلى الحافظة
import type { FunctionalComponent } from "preact";
import { Locales } from "intlayer";
import { useLocale } from "preact-intlayer";
const LocaleSwitcher: FunctionalComponent = () => {
const { setLocale } = useLocale();
return (
<button onClick={() => setLocale(Locales.ENGLISH)}>
Change Language to English
</button>
);
};
export default LocaleSwitcher;لمعرفة المزيد حول الخطافuseLocale، راجع الوثائق (واجهة برمجة التطبيقات مماثلة لـpreact-intlayer).
(اختياري) الخطوة 7: إضافة توجيه محلي إلى تطبيقك
الغرض من هذه الخطوة هو إنشاء مسارات فريدة لكل لغة. هذا مفيد لتحسين محركات البحث (SEO) وعناوين URL الصديقة لمحركات البحث. مثال:
نسخ الكود إلى الحافظة
- https://example.com/about- https://example.com/es/about- https://example.com/fr/aboutافتراضيًا، لا يتم إضافة بادئة للمسارات للغة الافتراضية. إذا كنت ترغب في إضافة بادئة للغة الافتراضية، يمكنك تعيين خيارrouting.modeإلى"prefix-all"في التكوين الخاص بك. راجع وثائق التكوين لمزيد من المعلومات.
لإضافة توجيه محلي إلى تطبيقك، يمكنك إنشاء مكون LocaleRouter يلف مسارات تطبيقك ويتعامل مع التوجيه المستند إلى اللغة. إليك مثال باستخدام preact-iso:
نسخ الكود إلى الحافظة
import { localeMap } from "intlayer";
import { IntlayerProvider } from "preact-intlayer";
import { LocationProvider, Router, Route } from "preact-iso";
import type { ComponentChildren, FunctionalComponent } from "preact";
/**
* مكون راوتر يقوم بإعداد مسارات خاصة باللغة.
* يستخدم preact-iso لإدارة التنقل وعرض المكونات المحلية.
*/
export const LocaleRouter: FunctionalComponent<{
children: ComponentChildren;
}> = ({ children }) => (
<LocationProvider>
<Router>
{localeMap(({ locale, urlPrefix }) => ({ locale, urlPrefix }))
.sort((a, b) => b.urlPrefix.length - a.urlPrefix.length)
.map(({ locale, urlPrefix }) => (
<Route
key={locale}
path={`${urlPrefix}/:rest*`}
component={() => (
<IntlayerProvider locale={locale}>{children}</IntlayerProvider>
)}
/>
))}
</Router>
</LocationProvider>
);بعد ذلك، يمكنك استخدام مكون LocaleRouter في تطبيقك:
نسخ الكود إلى الحافظة
import { LocaleRouter } from "./components/LocaleRouter";
import type { FunctionalComponent } from "preact";
// ... مكون AppContent الخاص بك
const App: FunctionalComponent = () => (
<LocaleRouter>
<AppContent />
</LocaleRouter>
);
export default App;(اختياري) الخطوة 8: تغيير عنوان URL عند تغيير اللغة
لتغيير عنوان URL عند تغيير اللغة، يمكنك استخدام خاصية onLocaleChange التي يوفرها خطاف useLocale. بالتوازي، يمكنك استخدام طريقة route من useLocation في preact-iso لتحديث مسار URL.
نسخ الكود إلى الحافظة
import { useLocation } from "preact-iso";
import {
Locales,
getHTMLTextDir,
getLocaleName,
getLocalizedUrl,
} from "intlayer";
import { useLocale } from "preact-intlayer";
import type { FunctionalComponent } from "preact";
const LocaleSwitcher: FunctionalComponent = () => {
const { url, route } = useLocation();
const { locale, availableLocales, setLocale } = useLocale({
onLocaleChange: (newLocale) => {
// بناء عنوان URL باللغة المحدثة
// مثال: /es/about?foo=bar
const pathWithLocale = getLocalizedUrl(url, newLocale);
// تحديث مسار URL
route(pathWithLocale, true); // true للاستبدال (replace)
},
});
return (
<div>
<button popovertarget="localePopover">{getLocaleName(locale)}</button>
<div id="localePopover" popover="auto">
{availableLocales.map((localeItem) => (
<a
href={getLocalizedUrl(url, localeItem)}
hreflang={localeItem}
aria-current={locale === localeItem ? "page" : undefined}
onClick={(e) => {
e.preventDefault();
setLocale(localeItem);
// سيتم التعامل مع التنقل البرمجي بعد تعيين اللغة بواسطة onLocaleChange
}}
key={localeItem}
>
<span>
{/* اللغة - مثلاً FR */}
{localeItem}
</span>
<span>
{/* اللغة بلغتها الأصلية - مثلاً Français */}
{getLocaleName(localeItem, localeItem)}
</span>
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
{/* اللغة باللغة الحالية - مثلاً Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
{getLocaleName(localeItem, locale)}
</span>
<span dir="ltr" lang={Locales.ENGLISH}>
{/* اللغة بالإنجليزية - مثلاً French */}
{getLocaleName(localeItem, Locales.ENGLISH)}
</span>
</a>
))}
</div>
</div>
);
};
export default LocaleSwitcher;مراجع التوثيق:
- خطافuseLocale(واجهة برمجة التطبيقات مماثلة لـpreact-intlayer)> - خطافgetLocaleName> - خطافgetLocalizedUrl> - خطافgetHTMLTextDir> - خاصيةhreflang> - خاصيةlang> - خاصيةdir> - خاصيةaria-current> - واجهة برمجة تطبيقات Popover
(اختياري) الخطوة 9: تبديل سمات اللغة والاتجاه لـ HTML
عندما يدعم تطبيقك لغات متعددة، من الضروري تحديث سمتي lang و dir في وسم <html> لتتوافق مع اللغة الحالية. القيام بذلك يضمن:
- إمكانية الوصول: تعتمد أجهزة قراءة الشاشة والتقنيات المساعدة على سمة
langالصحيحة لنطق وتفسير المحتوى بدقة. - عرض النص: تضمن سمة
dir(الاتجاه) عرض النص بالترتيب الصحيح (على سبيل المثال، من اليسار إلى اليمين للغة الإنجليزية، ومن اليمين إلى اليسار للغة العربية أو العبرية)، وهو أمر أساسي لسهولة القراءة. - تحسين محركات البحث (SEO): تستخدم محركات البحث سمة
langلتحديد لغة صفحتك، مما يساعد في تقديم المحتوى المحلي المناسب في نتائج البحث.
من خلال تحديث هذه السمات ديناميكيًا عند تغيير اللغة، تضمن تجربة متسقة وسهلة الوصول للمستخدمين عبر جميع اللغات المدعومة.
تنفيذ الخطاف (Hook)
أنشئ خطافًا مخصصًا لإدارة سمات HTML. يستمع الخطاف لتغييرات اللغة ويحدث السمات وفقًا لذلك:
نسخ الكود إلى الحافظة
import { useEffect } from "preact/hooks";
import { useLocale } from "preact-intlayer";
import { getHTMLTextDir } from "intlayer";
/**
* يقوم بتحديث سمتي `lang` و `dir` لعنصر HTML <html> بناءً على اللغة الحالية.
* - `lang`: يخبر المتصفحات ومحركات البحث بلغة الصفحة.
* - `dir`: يضمن ترتيب القراءة الصحيح (مثلاً، 'ltr' للإنجليزية، 'rtl' للعربية).
*
* هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وإمكانية الوصول، وتحسين محركات البحث (SEO).
*/
export const useI18nHTMLAttributes = () => {
const { locale } = useLocale();
useEffect(() => {
// تحديث سمة اللغة إلى اللغة الحالية.
document.documentElement.lang = locale;
// تعيين اتجاه النص بناءً على اللغة الحالية.
document.documentElement.dir = getHTMLTextDir(locale);
}, [locale]);
};استخدام الخطاف في تطبيقك
قم بدمج الخطاف في مكونك الرئيسي بحيث يتم تحديث سمات HTML كلما تغيرت اللغة:
نسخ الكود إلى الحافظة
import type { FunctionalComponent } from "preact";
import { IntlayerProvider } from "preact-intlayer"; // تم استيراد useIntlayer مسبقًا إذا كان AppContent يحتاجه
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
import "./app.css";
// تعريف AppContent من الخطوة 5
const AppWithHooks: FunctionalComponent = () => {
// تطبيق الخطاف لتحديث سمتي lang و dir في وسم <html> بناءً على اللغة.
useI18nHTMLAttributes();
// بفرض أن AppContent هو مكون عرض المحتوى الرئيسي الخاص بك من الخطوة 5
return <AppContent />;
};
const App: FunctionalComponent = () => (
<IntlayerProvider>
<AppWithHooks />
</IntlayerProvider>
);
export default App;(اختياري) الخطوة 10: إنشاء مكون رابط محلي
لضمان أن تنقل تطبيقك يحترم اللغة الحالية، يمكنك إنشاء مكون Link مخصص. يقوم هذا المكون تلقائيًا بإضافة بادئة اللغة الحالية إلى عناوين URL الداخلية.
هذا السلوك مفيد لعدة أسباب:
- تحسين محركات البحث وتجربة المستخدم: تساعد عناوين URL الموطنة محركات البحث على فهرسة الصفحات الخاصة بلغات معينة بشكل صحيح وتوفر للمستخدمين محتوى بلغتهم المفضلة.
- الاتساق: باستخدام رابط محلي في جميع أنحاء تطبيقك، فإنك تضمن بقاء التنقل ضمن اللغة الحالية، مما يمنع تبديلات اللغة غير المتوقعة.
- قابلية الصيانة: تبسيط إدارة عناوين URL من خلال مركزية منطق التوطين في مكون واحد.
إليك تنفيذ مكون Link محلي في Preact:
نسخ الكود إلى الحافظة
import { getLocalizedUrl } from "intlayer";
import { useLocale } from "preact-intlayer";
import { forwardRef } from "preact/compat";
import type { JSX } from "preact";
export interface LinkProps extends JSX.HTMLAttributes<HTMLAnchorElement> {
href: string;
}
/**
* دالة مساعدة للتحقق مما إذا كان عنوان URL معين خارجيًا.
* إذا بدأ عنوان URL بـ http:// أو https://، فإنه يعتبر خارجيًا.
*/
export const checkIsExternalLink = (href?: string): boolean =>
/^https?:\/\//.test(href ?? "");
/**
* مكون Link مخصص يقوم بتكييف سمة href بناءً على اللغة الحالية.
* بالنسبة للروابط الداخلية، فإنه يستخدم `getLocalizedUrl` لإضافة بادئة اللغة إلى عنوان URL (مثل /fr/about).
* يضمن هذا بقاء التنقل داخل نفس سياق اللغة.
*/
export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
({ href, children, ...props }, ref) => {
const { locale } = useLocale();
const isExternalLink = checkIsExternalLink(href);
// إذا كان الرابط داخليًا وتم توفير href صالح، فاحصل على عنوان URL المحلي.
const hrefI18n =
href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
return (
<a href={hrefI18n} ref={ref} {...props}>
{children}
</a>
);
}
);
Link.displayName = "Link";كيف يعمل
- كشف الروابط الخارجية:
تحدد الدالة المساعدةcheckIsExternalLinkما إذا كان عنوان URL خارجيًا. تُترك الروابط الخارجية دون تغيير لأنها لا تحتاج إلى توطين. - استرداد اللغة الحالية:
يوفر خطافuseLocaleاللغة الحالية (مثلاًfrللفرنسية). - توطين عنوان URL:
بالنسبة للروابط الداخلية (أي غير الخارجية)، يتم استخدامgetLocalizedUrlلإضافة بادئة اللغة الحالية تلقائيًا إلى عنوان URL. هذا يعني أنه إذا كان مستخدمك باللغة الفرنسية، فإن تمرير/aboutكـhrefسيحوله إلى/fr/about. - إرجاع الرابط:
يعيد المكون عنصر<a>مع عنوان URL المحلي، مما يضمن أن التنقل متسق مع اللغة.
(اختياري) الخطوة 11: عرض Markdown و HTML
يدعم Intlayer عرض محتوى Markdown و HTML في Preact.
يمكنك تخصيص عرض محتوى Markdown و HTML باستخدام طريقة .use(). تسمح لك هذه الطريقة بتجاوز العرض الافتراضي لعلامات محددة.
نسخ الكود إلى الحافظة
import { useIntlayer } from "preact-intlayer";const { myMarkdownContent, myHtmlContent } = useIntlayer("my-component");// ...return ( <div> {/* العرض الأساسي */} {myMarkdownContent} {/* العرض المخصص لـ Markdown */} {myMarkdownContent.use({ h1: (props) => <h1 style={{ color: "red" }} {...props} />, })} {/* العرض الأساسي لـ HTML */} {myHtmlContent} {/* العرض المخصص لـ HTML */} {myHtmlContent.use({ b: (props) => <strong style={{ color: "blue" }} {...props} />, })} </div>);تكوين TypeScript
يستخدم Intlayer توسيع الوحدات (module augmentation) للحصول على فوائد TypeScript وجعل قاعدة الكود الخاصة بك أقوى.


تأكد من أن تكوين TypeScript الخاص بك يتضمن الأنواع التي تم إنشاؤها تلقائيًا.
نسخ الكود إلى الحافظة
{ // ... تكوينات TypeScript الحالية الخاصة بك "compilerOptions": { // ... "jsx": "react-jsx", "jsxImportSource": "preact", // موصى به لـ Preact 10+ // ... }, "include": [ // ... تكوينات TypeScript الحالية الخاصة بك ".intlayer/**/*.ts", // تضمين الأنواع التي تم إنشاؤها تلقائيًا ],}تأكد من إعدادtsconfig.jsonالخاص بك لـ Preact، خاصةًjsxوjsxImportSourceأوjsxFactory/jsxFragmentFactoryلإصدارات Preact الأقدم إذا لم تستخدم إعداداتpreset-viteالافتراضية.
تكوين Git
يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. يتيح لك ذلك تجنب الالتزام بها في مستودع Git الخاص بك.
للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف .gitignore الخاص بك:
نسخ الكود إلى الحافظة
# تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer.intlayer(اختياري) خطوة 1 : استخراج محتوى مكوناتك
إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.
لتسهيل هذه العملية، يقترح Intlayer مترجمًا / مستخرجًا لتحويل مكوناتك واستخراج المحتوى.
لإعداده، يمكنك إضافة قسم compiler في ملف intlayer.config.ts الخاص بك:
نسخ الكود إلى الحافظة
import { type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
// ... بقية التكوين الخاص بك
compiler: {
/**
* يشير إلى ما إذا كان يجب تمكين المترجم.
*/
enabled: true,
/**
* يحدد مسار ملفات المخرجات
*/
output: ({ fileName, extension }) => `./${fileName}${extension}`,
/**
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
*/
saveComponents: false,
/**
* بادئة مفتاح القاموس
*/
dictionaryKeyPrefix: "",
},
};
export default config;قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
نسخ الكود إلى الحافظة
npx intlayer extract(اختياري) خريطة الموقع و robots.txt (توليد وقت البناء)
يوفّر Intlayer الدالتين generateSitemap وgetMultilingualUrls لتنسيق مخرجات جاهزة للزحّافات (sitemap.xml متعدد اللغات وrobots.txt) وكتابتها تلقائياً إلى public/. عادةً تشغّل سكربت Node صغير قبل Vite (مثلاً خطافات npm predev / prebuild).
خريطة الموقع
يولّد مولّد خرائط المواقع إعدادات اللغات ويضيف البيانات الوصفية المناسبة.
تدعم الخريطة مساحة الاسمxhtml:link(hreflang). بدلاً من قائمة عناوين مسطحة، يربط Intlayer بين جميع النسخ اللغوية لكل صفحة في الاتجاهين (مثل/aboutو/fr/aboutأو/about?lang=frوفقًا لوضع التوجيه).
Robots.txt
استخدم getMultilingualUrls لتشمل قواعد Disallow كل المتغيرات المحلية للمسارات الحساسة.
1. أضف generate-seo.mjs في جذر المشروع
نسخ الكود إلى الحافظة
import fs from "fs";import path from "path";import { fileURLToPath } from "url";import { generateSitemap, getMultilingualUrls } from "intlayer";const __dirname = path.dirname(fileURLToPath(import.meta.url));const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace( /\/$/, "");const pathList = [ { path: "/", changefreq: "daily", priority: 1.0 }, { path: "/about", changefreq: "monthly", priority: 0.7 },];const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);const getAllMultilingualUrls = (urls) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)));const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);const robotsTxt = [ "User-agent: *", "Allow: /", ...disallowedPaths.map((path) => `Disallow: ${path}`), "", `Sitemap: ${SITE_URL}/sitemap.xml`,].join("\n");fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);console.log("SEO files generated successfully.");يجب تثبيت حزمة intlayer. عيّن SITE_URL في بيئة الإنتاج (مثلاً في CI).
يُفضّلgenerate-seo.mjsلـ ESM في Node. إن استخدمتgenerate-seo.jsففعّل"type": "module"فيpackage.jsonأو ESM بطريقة أخرى.
2. شغّل السكربت قبل Vite
نسخ الكود إلى الحافظة
{ "scripts": { "dev": "vite", "prebuild": "node generate-seo.mjs", "build": "vite build", "preview": "vite preview" }}عدّل الأوامر إن كنت تستخدم pnpm أو yarn. يمكن استدعاء السكربت من CI أيضاً.
إضافة VS Code
لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت إضافة Intlayer الرسمية لـ VS Code.
توفر هذه الإضافة:
- الإكمال التلقائي لمفاتيح الترجمة.
- كشف الأخطاء في الوقت الفعلي للترجمات المفقودة.
- معاينات داخلية للمحتوى المترجم.
- إجراءات سريعة لإنشاء وتحديث الترجمات بسهولة.
لمزيد من التفاصيل حول كيفية استخدام الإضافة، راجع توثيق إضافة Intlayer لـ VS Code.
اذهب أبعد من ذلك
للذهاب أبعد من ذلك، يمكنك تنفيذ المحرر المرئي أو توفير المحتوى الخاص بك خارجيًا باستخدام نظام إدارة المحتوى (CMS).