الرئيسيةبيئة اختبارمعرض الأعمالتطبيقوثيقةمدونة
    • Englishالإنجليزية
      EN
    • русскийالروسية
      RU
    • 日本語اليابانية
      JA
    • françaisالفرنسية
      FR
    • 한국어الكورية
      KO
    • 中文الصينية
      ZH
    • españolالإسبانية
      ES
    • Deutschالألمانية
      DE
    • العربيةالعربية
      AR
    • italianoالإيطالية
      IT
    • British Englishالإنجليزية (المملكة المتحدة)
      EN-GB
    • portuguêsالبرتغالية
      PT
    • हिन्दीالهندية
      HI
    • Türkçeالتركية
      TR
    • polskiالبولندية
      PL
    • Indonesiaالإندونيسية
      ID
    • Tiếng Việtالفيتنامية
      VI
    • українськаالأوكرانية
      UK
    /
    تصفية المستندات حسب الإطار
    Alt+←
    لماذا Intlayer؟
    ابدأ
    مفهوم
    • كيف يعمل Intlayer
    • التكوين
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • المحرر المرئي
    • CMS
    • تكامل CI/CD
    • ترجمةجمعتعدادشرطجنسإدراجملفتداخلMarkdownHTMLجلب الوظيفة
    • ملف لكل لغة
    • محرر
    • الملء التلقائي
    • اختبار
    • تحسين الحزمة
    بيئة
    • Next.js 14 وموجه التطبيق
      Next.js 15
      Next.js بدون locale URL
      Next.js وموجه الصفحة
      المترجم
    • Tanstack Start Solid
    • Astro و React
      Astro و Svelte
      Astro و Vue
      Astro و Solid
      Astro و Preact
      Astro و Lit
      Astro و Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt و Vue
    • Vite و Solid
    • SvelteKit
    • Vite و Preact
    • Vite و Vanilla JS
    • Vite و Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native و Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx و React
    Plugins
    • JSON
    • gettext (.po)
    امتداد VS Code
    وكيل
    • خادم MCP
    • مهارات الوكيل
    إصدارات
    • v8
    • v7
    • v6
    مؤشر أداء
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    مدونة
    طرح سؤال
    1. Documentation
    2. بيئة
    3. Nuxt and vue
    \n\n\n```\n\n#### الوصول إلى المحتوى في Intlayer\n\nيقدم Intlayer واجهات برمجة تطبيقات مختلفة للوصول إلى المحتوى الخاص بك:\n\n- **بناء الجملة المعتمد على المكونات** (موصى به):\n استخدم بناء الجملة ``، أو `` لعرض المحتوى كعقدة Intlayer. هذا يتكامل بسلاسة مع [المحرر المرئي](/ar/doc/concept/editor) و [نظام إدارة المحتوى (CMS)](/ar/doc/concept/cms).\n\n- **بناء الجملة المعتمد على النص**:\n استخدم `{{ myContent }}` لعرض المحتوى كنص عادي، بدون دعم المحرر المرئي.\n\n- **بناء جملة HTML الخام**:\n استخدم `
    ` لعرض المحتوى كـ HTML خام، بدون دعم المحرر المرئي.\n\n- **بناء جملة التفكيك**:\n الدالة القابلة للاستخدام `useIntlayer` تُرجع Proxy يحتوي على المحتوى. يمكن تفكيك هذا البروكسي للوصول إلى المحتوى مع الحفاظ على التفاعلية.\n - استخدم `const content = useIntlayer(\"myContent\");` و `{{ content.myContent }}` / ``.\n - أو استخدم `const { myContent } = useIntlayer(\"myContent\");` و `{{ myContent}}` / `` لتفكيك المحتوى.\n\n### (اختياري) الخطوة 6: تغيير لغة المحتوى الخاص بك\n\nلتغيير لغة المحتوى الخاص بك، يمكنك استخدام الدالة `setLocale` المقدمة من الدالة القابلة للاستخدام `useLocale`. تتيح لك هذه الدالة تعيين لغة التطبيق وتحديث المحتوى وفقًا لذلك.\n\nقم بإنشاء مكون للتبديل بين اللغات باستخدام `NuxtLink`. **استخدام الروابط بدلاً من الأزرار للتبديل بين اللغات هو أفضل ممارسة لتحسين محركات البحث وقابلية اكتشاف الصفحات**، حيث يسمح لمحركات البحث بفهرسة جميع النسخ المحلية من صفحاتك:\n\n```vue fileName=\"components/LocaleSwitcher.vue\"\n\n\n\n```\n\n> استخدام `NuxtLink` مع سمات `href` الصحيحة (عبر `getLocalizedUrl`) يضمن أن محركات البحث يمكنها اكتشاف جميع النسخ اللغوية لصفحاتك. هذا أفضل من التبديل بين اللغات باستخدام جافا سكريبت فقط، والذي قد لا تتبعه عناكب محركات البحث.\n\nبعد ذلك، قم بإعداد ملف `app.vue` لاستخدام التخطيطات:\n\n```vue fileName=\"app.vue\"\n\n```\n\n### (اختياري) الخطوة 6ب: إنشاء تخطيط مع التنقل\n\nتسمح تخطيطات Nuxt بتعريف هيكل مشترك لصفحاتك. قم بإنشاء تخطيط افتراضي يتضمن مفتاح تبديل اللغة والتنقل:\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\nمكون `Links` (الموضح أدناه) يضمن أن روابط التنقل الداخلية تتم ترجمتها تلقائيًا.\n\n### (اختياري) الخطوة 7: إضافة التوجيه المحلي إلى تطبيقك\n\nيتولى Nuxt تلقائيًا التعامل مع التوجيه المحلي عند استخدام وحدة `nuxt-intlayer`. هذا ينشئ مسارات لكل لغة تلقائيًا بناءً على هيكل دليل الصفحات الخاص بك.\n\nمثال:\n\n```plaintext\npages/\n├── index.vue → /, /fr, /es\n├── about.vue → /about, /fr/about, /es/about\n└── contact/\n └── index.vue → /contact, /fr/contact, /es/contact\n```\n\nلإنشاء صفحات محلية، ببساطة قم بإنشاء ملفات Vue الخاصة بك في دليل `pages/`. فيما يلي مثالان لصفحات:\n\n**صفحة الرئيسية (`pages/index.vue`):**\n\n```vue fileName=\"pages/index.vue\"\n\n\n\n```\n\n**صفحة حول (`pages/about.vue`):**\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> ملاحظة: يتم استيراد `useHead` تلقائيًا في Nuxt. يمكنك الوصول إلى قيم المحتوى باستخدام `.value` (تفاعلي) أو `.raw` (نص بدائي) حسب حاجتك.\n\nسيقوم موديل `nuxt-intlayer` تلقائيًا بـ:\n\n- اكتشاف اللغة المفضلة للمستخدم\n- التعامل مع تبديل اللغة عبر عنوان URL\n- تعيين الخاصية المناسبة ``\n- إدارة ملفات تعريف الارتباط الخاصة باللغة\n- إعادة توجيه المستخدمين إلى عنوان URL المحلي المناسب\n\n### (اختياري) الخطوة 8: إنشاء مكون رابط محلي اللغة\n\nلضمان أن تنقل تطبيقك يحترم اللغة الحالية، يمكنك إنشاء مكون مخصص `Links`. يقوم هذا المكون تلقائيًا بإضافة بادئة للروابط الداخلية باستخدام اللغة الحالية، وهو أمر ضروري لـ **تحسين محركات البحث (SEO) وقابلية اكتشاف الصفحات**.\n\n```vue fileName=\"components/Links.vue\"\n\n\n\n```\n\nثم استخدم هذا المكون في جميع أنحاء تطبيقك:\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\n> باستخدام `NuxtLink` مع المسارات المترجمة، تضمن أن:\n>\n> - محركات البحث يمكنها الزحف وفهرسة جميع إصدارات لغات صفحاتك\n> - يمكن للمستخدمين مشاركة عناوين URL المترجمة مباشرة\n> - يعمل سجل المتصفح بشكل صحيح مع عناوين URL التي تحتوي على بادئة اللغة\n\n### (اختياري) الخطوة 9: التعامل مع البيانات الوصفية وتحسين محركات البحث (SEO)\n\nيوفر Nuxt قدرات ممتازة لتحسين محركات البحث عبر الـ `useHead` composable (يتم استيراده تلقائيًا). يمكنك استخدام Intlayer للتعامل مع البيانات الوصفية المترجمة باستخدام accessor `.raw` أو `.value` للحصول على القيمة النصية الأولية:\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> بدلاً من ذلك، يمكنك استخدام الدالة `import { getIntlayer } from \"intlayer\"` للحصول على المحتوى بدون تفاعل Vue.\n\n> **الوصول إلى قيم المحتوى:**\n>\n> - استخدم `.raw` للحصول على القيمة النصية الأولية (غير تفاعلية)\n> - استخدم `.value` للحصول على القيمة التفاعلية\n> - استخدم بناء جملة المكون `` لدعم محرر المرئيات\n\nقم بإنشاء إعلان المحتوى المقابل:\n\n```ts fileName=\"pages/about-page.content.ts\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { t, type Dictionary } from \"intlayer\";\n\nconst aboutPageContent = {\n key: \"about-page\",\n content: {\n metaTitle: t({\n en: \"About Us - My Company\",\n fr: \"À Propos - Ma Société\",\n es: \"Acerca de Nosotros - Mi Empresa\",\n ar: \"معلومات عنا - شركتي\",\n }),\n metaDescription: t({\n en: \"Learn more about our company and our mission\",\n fr: \"En savoir plus sur notre société et notre mission\",\n es: \"Conozca más sobre nuestra empresa y nuestra misión\",\n ar: \"تعرف أكثر على شركتنا ومهمتنا\",\n }),\n title: t({\n en: \"About Us\",\n fr: \"À Propos\",\n es: \"Acerca de Nosotros\",\n ar: \"معلومات عنا\",\n }),\n },\n} satisfies Dictionary;\n\nexport default aboutPageContent;\n```\n\n```json fileName=\"pages/about-page.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"about-page\",\n \"content\": {\n \"metaTitle\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"معلومات عنا - شركتي\",\n \"fr\": \"À Propos - Ma Société\",\n \"es\": \"Acerca de Nosotros - Mi Empresa\"\n }\n },\n \"metaDescription\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"تعرف أكثر على شركتنا ورسالتنا\",\n \"fr\": \"En savoir plus sur notre société et notre mission\",\n \"es\": \"Conozca más sobre nuestra empresa y nuestra misión\"\n }\n },\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"معلومات عنا\",\n \"fr\": \"À Propos\",\n \"es\": \"Acerca de Nosotros\"\n }\n }\n }\n}\n```\n\n### تكوين Git\n\nيوصى بتجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer. هذا يسمح لك بتجنب الالتزام بها في مستودع Git الخاص بك.\n\nللقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:\n\n```plaintext fileName=\".gitignore\"\n# تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer\n.intlayer\n```\n\n### امتداد VS Code\n\nلتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **امتداد Intlayer الرسمي لـ VS Code**.\n\n[التثبيت من سوق VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nيوفر هذا الامتداد:\n\n- **الإكمال التلقائي** لمفاتيح الترجمة.\n- **الكشف الفوري عن الأخطاء** للترجمات المفقودة.\n- **معاينات مدمجة** للمحتوى المترجم.\n- **إجراءات سريعة** لإنشاء وتحديث الترجمات بسهولة.\n\nلمزيد من التفاصيل حول كيفية استخدام الامتداد، راجع [توثيق امتداد Intlayer لـ VS Code](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### التعمق أكثر\n\nللتقدم أكثر، يمكنك تنفيذ [المحرر المرئي](/ar/doc/concept/editor) أو تعريض محتواك باستخدام [نظام إدارة المحتوى (CMS)](/ar/doc/concept/cms).\n","about":"اكتشف كيفية جعل موقع Nuxt و Vue الخاص بك متعدد اللغات. اتبع الوثائق لتدويل (i18n) وترجمته.","url":"https://intlayer.org/ar/doc/environment/nuxt-and-vue","datePublished":"18-06-2025","dateModified":"06-05-2026","keywords":"التدويل, التوثيق, Intlayer, Nuxt, Vue, جافا سكريبت","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"المطورون ومديرو المحتوى"}}
    إنشاء:2025-06-18آخر تحديث:2026-05-06
    عرض قالب التطبيق على GitHub

    هذه الصفحة لديها قالب تطبيق متاح.

    عرض تطبيق العرض

    هذه الصفحة ترتبط بعرض مباشر للقالب.

    شاهد الفيديو التعليمي

    هذه الصفحة لديها فيديو تعليمي متاح.

    استخدم هذه الصفحة والموفر AI الذي تريده
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده

    تاريخ الإصدارات

    1. "تحديث استخدام واجهة برمجة تطبيقات useIntlayer في Solid للوصول المباشر إلى الخصائص"
      v8.9.04‏/5‏/2026
    2. "تحديث LocaleSwitcher، SEO، البيانات الوصفية"
      v7.3.117‏/12‏/2025
    3. "بدء السجل"
      v5.5.1029‏/6‏/2025

    تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.

    اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزية
    تعديل هذه الوثيقة

    إذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.

    رابط GitHub للتوثيق
    نسخ

    نسخ الـ Markdown من المستند إلى الحافظة

    ترجمة موقع Nuxt و Vue الخاص بك باستخدام Intlayer | التدويل (i18n)

    جدول المحتويات

    ما هو Intlayer؟

    Intlayer هي مكتبة تدويل (i18n) مبتكرة ومفتوحة المصدر مصممة لتبسيط دعم اللغات المتعددة في تطبيقات الويب الحديثة.

    مع Intlayer، يمكنك:

    • إدارة الترجمات بسهولة باستخدام قواميس تصريحية على مستوى المكونات.
    • تدويل البيانات الوصفية والمسارات والمحتوى بشكل ديناميكي.
    • ضمان دعم TypeScript من خلال أنواع مولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
    • الاستفادة من ميزات متقدمة، مثل الكشف الديناميكي عن اللغة والتبديل بينها.

    دليل خطوة بخطوة لإعداد Intlayer في تطبيق Nuxt

    www.youtube.com
    ide.intlayer.org
    intlayer-nuxt-4-template.vercel.app

    راجع قالب التطبيق على GitHub.

    الخطوة 1: تثبيت التبعيات

    قم بتثبيت الحزم اللازمة باستخدام npm:

    bash
    نسخ الكود

    نسخ الكود إلى الحافظة

    npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer init
    • intlayer

      الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، الترجمة، إعلان المحتوى، التحويل البرمجي، وأوامر CLI.

    • vue-intlayer الحزمة التي تدمج Intlayer مع تطبيق Vue. تحتوي على composables لمكونات Vue.

    • nuxt-intlayer وحدة Nuxt التي تدمج Intlayer مع تطبيقات Nuxt. توفر إعدادًا تلقائيًا، وmiddleware لاكتشاف اللغة، وإدارة الكوكيز، وإعادة توجيه URL.

    الخطوة 2: تكوين مشروعك

    أنشئ ملف تكوين لتحديد لغات تطبيقك:

    intlayer.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH,
          // لغات أخرى خاصة بك
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL محلية، إعادة توجيه الوسيط، أسماء الكوكيز، موقع وامتداد إعلانات المحتوى الخاصة بك، تعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع توثيق التكوين.

    الخطوة 3: دمج Intlayer في تكوين Nuxt الخاص بك

    أضف وحدة intlayer إلى تكوين Nuxt الخاص بك:

    nuxt.config.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... تكوين Nuxt الحالي الخاص بك  modules: ["nuxt-intlayer"],});
    تقوم وحدة nuxt-intlayer تلقائيًا بالتعامل مع دمج Intlayer مع Nuxt. فهي تقوم بإعداد بناء إعلان المحتوى، ومراقبة الملفات في وضع التطوير، وتوفير middleware لاكتشاف اللغة، وإدارة التوجيه المحلي.

    الخطوة 4: إعلان المحتوى الخاص بك

    قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:

    يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك طالما تم تضمينها في دليل contentDir (افتراضيًا، ./src). ويجب أن تتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا، .content.{json,ts,tsx,js,jsx,mjs,cjs}).
    لمزيد من التفاصيل، راجع توثيق إعلان المحتوى.

    الخطوة 5: استخدام Intlayer في كودك

    يمكنك الوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيق Nuxt الخاص بك باستخدام الـ useIntlayer composable:

    components/HelloWorld.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  nuxtIntlayer,  learnMore,  nuxtDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >، <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>

    الوصول إلى المحتوى في Intlayer

    يقدم Intlayer واجهات برمجة تطبيقات مختلفة للوصول إلى المحتوى الخاص بك:

    • بناء الجملة المعتمد على المكونات (موصى به): استخدم بناء الجملة <myContent />، أو <Component :is="myContent" /> لعرض المحتوى كعقدة Intlayer. هذا يتكامل بسلاسة مع المحرر المرئي و نظام إدارة المحتوى (CMS).

    • بناء الجملة المعتمد على النص: استخدم {{ myContent }} لعرض المحتوى كنص عادي، بدون دعم المحرر المرئي.

    • بناء جملة HTML الخام: استخدم <div v-html="myContent" /> لعرض المحتوى كـ HTML خام، بدون دعم المحرر المرئي.

    • بناء جملة التفكيك: الدالة القابلة للاستخدام useIntlayer تُرجع Proxy يحتوي على المحتوى. يمكن تفكيك هذا البروكسي للوصول إلى المحتوى مع الحفاظ على التفاعلية.

      • استخدم const content = useIntlayer("myContent"); و {{ content.myContent }} / <content.myContent />.
      • أو استخدم const { myContent } = useIntlayer("myContent"); و {{ myContent}} / <myContent/> لتفكيك المحتوى.

    (اختياري) الخطوة 6: تغيير لغة المحتوى الخاص بك

    لتغيير لغة المحتوى الخاص بك، يمكنك استخدام الدالة setLocale المقدمة من الدالة القابلة للاستخدام useLocale. تتيح لك هذه الدالة تعيين لغة التطبيق وتحديث المحتوى وفقًا لذلك.

    قم بإنشاء مكون للتبديل بين اللغات باستخدام NuxtLink. استخدام الروابط بدلاً من الأزرار للتبديل بين اللغات هو أفضل ممارسة لتحسين محركات البحث وقابلية اكتشاف الصفحات، حيث يسمح لمحركات البحث بفهرسة جميع النسخ المحلية من صفحاتك:

    components/LocaleSwitcher.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt يقوم بالاستيراد التلقائي لـ useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
    استخدام NuxtLink مع سمات href الصحيحة (عبر getLocalizedUrl) يضمن أن محركات البحث يمكنها اكتشاف جميع النسخ اللغوية لصفحاتك. هذا أفضل من التبديل بين اللغات باستخدام جافا سكريبت فقط، والذي قد لا تتبعه عناكب محركات البحث.

    بعد ذلك، قم بإعداد ملف app.vue لاستخدام التخطيطات:

    app.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>

    (اختياري) الخطوة 6ب: إنشاء تخطيط مع التنقل

    تسمح تخطيطات Nuxt بتعريف هيكل مشترك لصفحاتك. قم بإنشاء تخطيط افتراضي يتضمن مفتاح تبديل اللغة والتنقل:

    layouts/default.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">الرئيسية</Links>    <Links href="/about">حول</Links>  </div></template>

    مكون Links (الموضح أدناه) يضمن أن روابط التنقل الداخلية تتم ترجمتها تلقائيًا.

    (اختياري) الخطوة 7: إضافة التوجيه المحلي إلى تطبيقك

    يتولى Nuxt تلقائيًا التعامل مع التوجيه المحلي عند استخدام وحدة nuxt-intlayer. هذا ينشئ مسارات لكل لغة تلقائيًا بناءً على هيكل دليل الصفحات الخاص بك.

    مثال:

    plaintext
    نسخ الكود

    نسخ الكود إلى الحافظة

    pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact

    لإنشاء صفحات محلية، ببساطة قم بإنشاء ملفات Vue الخاصة بك في دليل pages/. فيما يلي مثالان لصفحات:

    صفحة الرئيسية (pages/index.vue):

    pages/index.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>

    صفحة حول (pages/about.vue):

    pages/about.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // استخدم .raw للوصول إلى النص الأساسي  meta: [    {      name: "description",      content: content.metaDescription.raw, // استخدم .raw للوصول إلى النص الأساسي    },  ],});</script><template>  <h1><content.title /></h1></template>
    ملاحظة: يتم استيراد useHead تلقائيًا في Nuxt. يمكنك الوصول إلى قيم المحتوى باستخدام .value (تفاعلي) أو .raw (نص بدائي) حسب حاجتك.

    سيقوم موديل nuxt-intlayer تلقائيًا بـ:

    • اكتشاف اللغة المفضلة للمستخدم
    • التعامل مع تبديل اللغة عبر عنوان URL
    • تعيين الخاصية المناسبة <html lang="">
    • إدارة ملفات تعريف الارتباط الخاصة باللغة
    • إعادة توجيه المستخدمين إلى عنوان URL المحلي المناسب

    (اختياري) الخطوة 8: إنشاء مكون رابط محلي اللغة

    لضمان أن تنقل تطبيقك يحترم اللغة الحالية، يمكنك إنشاء مكون مخصص Links. يقوم هذا المكون تلقائيًا بإضافة بادئة للروابط الداخلية باستخدام اللغة الحالية، وهو أمر ضروري لـ تحسين محركات البحث (SEO) وقابلية اكتشاف الصفحات.

    components/Links.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// حساب المسار النهائيconst finalPath = computed(() => {  // 1. التحقق مما إذا كانت الرابط خارجي  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. إذا كان خارجيًا، إرجاعه كما هو (NuxtLink يتولى توليد وسم <a>)  if (isExternal) return props.href;  // 3. إذا كان الرابط داخليًا، قم بتعريب الـ URL  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>

    ثم استخدم هذا المكون في جميع أنحاء تطبيقك:

    layouts/default.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">الرئيسية</Links>    <Links href="/about">حول</Links>  </div></template>

    باستخدام NuxtLink مع المسارات المترجمة، تضمن أن:

    • محركات البحث يمكنها الزحف وفهرسة جميع إصدارات لغات صفحاتك
    • يمكن للمستخدمين مشاركة عناوين URL المترجمة مباشرة
    • يعمل سجل المتصفح بشكل صحيح مع عناوين URL التي تحتوي على بادئة اللغة

    (اختياري) الخطوة 9: التعامل مع البيانات الوصفية وتحسين محركات البحث (SEO)

    يوفر Nuxt قدرات ممتازة لتحسين محركات البحث عبر الـ useHead composable (يتم استيراده تلقائيًا). يمكنك استخدام Intlayer للتعامل مع البيانات الوصفية المترجمة باستخدام accessor .raw أو .value للحصول على القيمة النصية الأولية:

    pages/about.vue
    نسخ الكود

    نسخ الكود إلى الحافظة

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// يتم استيراد useHead تلقائيًا في Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // استخدم .raw للوصول إلى القيمة النصية الأولية  meta: [    {      name: "description",      content: content.metaDescription.raw, // استخدم .raw للوصول إلى القيمة النصية الأولية    },  ],});</script><template>  <h1><content.title /></h1></template>
    بدلاً من ذلك، يمكنك استخدام الدالة import { getIntlayer } from "intlayer" للحصول على المحتوى بدون تفاعل Vue.

    الوصول إلى قيم المحتوى:

    • استخدم .raw للحصول على القيمة النصية الأولية (غير تفاعلية)
    • استخدم .value للحصول على القيمة التفاعلية
    • استخدم بناء جملة المكون <content.key /> لدعم محرر المرئيات

    قم بإنشاء إعلان المحتوى المقابل:

    pages/about-page.content.ts
    نسخ الكود

    نسخ الكود إلى الحافظة

    import { t, type Dictionary } from "intlayer";
    
    const aboutPageContent = {
      key: "about-page",
      content: {
        metaTitle: t({
          en: "About Us - My Company",
          fr: "À Propos - Ma Société",
          es: "Acerca de Nosotros - Mi Empresa",
          ar: "معلومات عنا - شركتي",
        }),
        metaDescription: t({
          en: "Learn more about our company and our mission",
          fr: "En savoir plus sur notre société et notre mission",
          es: "Conozca más sobre nuestra empresa y nuestra misión",
          ar: "تعرف أكثر على شركتنا ومهمتنا",
        }),
        title: t({
          en: "About Us",
          fr: "À Propos",
          es: "Acerca de Nosotros",
          ar: "معلومات عنا",
        }),
      },
    } satisfies Dictionary;
    
    export default aboutPageContent;

    تكوين Git

    يوصى بتجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer. هذا يسمح لك بتجنب الالتزام بها في مستودع Git الخاص بك.

    للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف .gitignore الخاص بك:

    .gitignore
    نسخ الكود

    نسخ الكود إلى الحافظة

    # تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer.intlayer

    امتداد VS Code

    لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت امتداد Intlayer الرسمي لـ VS Code.

    التثبيت من سوق VS Code

    يوفر هذا الامتداد:

    • الإكمال التلقائي لمفاتيح الترجمة.
    • الكشف الفوري عن الأخطاء للترجمات المفقودة.
    • معاينات مدمجة للمحتوى المترجم.
    • إجراءات سريعة لإنشاء وتحديث الترجمات بسهولة.

    لمزيد من التفاصيل حول كيفية استخدام الامتداد، راجع توثيق امتداد Intlayer لـ VS Code.


    التعمق أكثر

    للتقدم أكثر، يمكنك تنفيذ المحرر المرئي أو تعريض محتواك باستخدام نظام إدارة المحتوى (CMS).

    Vite و Vue
    Vite و Solid
    Alt+→

    في هذه الصفحة

      المناقشات مجهولة الهوية ويتم مراجعتها بانتظام لمعالجة المشكلات الشائعة. لا تتردد في مشاركة أفكار الميزات أو التعليقات على الوثائق أو أي شيء يتعلق بـ Intlayer, نستخدم هذه المدخلات لتشكيل خارطة الطريق وتحسين المنتج.

      npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer init
      import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... تكوين Nuxt الحالي الخاص بك  modules: ["nuxt-intlayer"],});
      <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  nuxtIntlayer,  learnMore,  nuxtDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >، <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>
      <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt يقوم بالاستيراد التلقائي لـ useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
      <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">الرئيسية</Links>    <Links href="/about">حول</Links>  </div></template>
      pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // استخدم .raw للوصول إلى النص الأساسي  meta: [    {      name: "description",      content: content.metaDescription.raw, // استخدم .raw للوصول إلى النص الأساسي    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// حساب المسار النهائيconst finalPath = computed(() => {  // 1. التحقق مما إذا كانت الرابط خارجي  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. إذا كان خارجيًا، إرجاعه كما هو (NuxtLink يتولى توليد وسم <a>)  if (isExternal) return props.href;  // 3. إذا كان الرابط داخليًا، قم بتعريب الـ URL  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">الرئيسية</Links>    <Links href="/about">حول</Links>  </div></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// يتم استيراد useHead تلقائيًا في Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // استخدم .raw للوصول إلى القيمة النصية الأولية  meta: [    {      name: "description",      content: content.metaDescription.raw, // استخدم .raw للوصول إلى القيمة النصية الأولية    },  ],});</script><template>  <h1><content.title /></h1></template>
      # تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer.intlayer