ГлавнаяПесочницаВитринаПриложениеДокументБлог
    • 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 и App Router
      Next.js 15
      Next.js без locale URL
      Next.js и Page Router
      Compiler
    • 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\nIntlayer предлагает различные API для доступа к вашему контенту:\n\n- **Синтаксис на основе компонентов** (рекомендуется):\n Используйте синтаксис `` или `` для рендеринга контента как узла Intlayer. Это обеспечивает бесшовную интеграцию с [Визуальным редактором](/ru/doc/concept/editor) и [CMS](/ru/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`. **Использование ссылок вместо кнопок для переключения локали, это лучшая практика для SEO и обнаруживаемости страниц**, так как это позволяет поисковым системам сканировать и индексировать все локализованные версии ваших страниц:\n\n```vue fileName=\"components/LocaleSwitcher.vue\"\n\n\n\n```\n\n> Использование `NuxtLink` с правильными атрибутами `href` (через `getLocalizedUrl`) гарантирует, что поисковые системы смогут обнаружить все языковые варианты ваших страниц. Это предпочтительнее, чем переключение локали только с помощью JavaScript, которое поисковые роботы могут не распознать.\n\nЗатем настройте ваш `app.vue` для использования layouts:\n\n```vue fileName=\"app.vue\"\n\n```\n\n### (Необязательно) Шаг 6b: Создайте Layout с навигацией\n\nLayouts в Nuxt позволяют определить общую структуру для ваших страниц. Создайте layout по умолчанию, который включает переключатель локали и навигацию:\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\nКомпонент `Links` (показан ниже) гарантирует, что внутренние навигационные ссылки автоматически локализуются.\n\n### (Необязательно) Шаг 7: Добавьте локализованный роутинг в ваше приложение\n\nNuxt автоматически обрабатывает локализованный роутинг при использовании модуля `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`. Этот компонент автоматически добавляет префикс текущего языка к внутренним URL, что важно для **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\nNuxt предоставляет отличные возможности для SEO через композицию `useHead` (автоматически импортируется). Вы можете использовать Intlayer для обработки локализованных метаданных, используя аксессоры `.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 }),\n metaDescription: t({\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 title: t({\n en: \"О нас\",\n fr: \"À Propos\",\n es: \"Acerca de Nosotros\",\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\": \"About Us - My Company\",\n \"fr\": \"À Propos - Ma Société\",\n \"es\": \"Acerca de Nosotros - Mi Empresa\",\n \"ru\": \"О нас - Моя компания\"\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 Extension**.\n\n[Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nЭто расширение предоставляет:\n\n- **Автозаполнение** ключей переводов.\n- **Обнаружение ошибок в реальном времени** для отсутствующих переводов.\n- **Встроенный просмотр** переведённого контента.\n- **Быстрые действия** для лёгкого создания и обновления переводов.\n\nДля получения дополнительной информации о том, как использовать расширение, обратитесь к [документации Intlayer VS Code Extension](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### Продвинуться дальше\n\nЧтобы продвинуться дальше, вы можете реализовать [визуальный редактор](/ru/doc/concept/editor) или вынести ваш контент, используя [CMS](/ru/doc/concept/cms).\n","about":"Узнайте, как сделать ваш сайт на Nuxt и Vue многоязычным. Следуйте документации для интернационализации (i18n) и перевода.","url":"https://intlayer.org/ru/doc/environment/nuxt-and-vue","datePublished":"18-06-2025","dateModified":"06-05-2026","keywords":"Интернационализация, Документация, Intlayer, Nuxt, Vue, JavaScript","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. "Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"
      v8.9.004.05.2026
    2. "Обновление LocaleSwitcher, SEO, метаданных"
      v7.3.1107.12.2025
    3. "Инициализация истории"
      v5.5.1029.06.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 для определения локали, управление cookie и перенаправление 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, перенаправление через middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи 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:

    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 предлагает различные API для доступа к вашему контенту:

    • Синтаксис на основе компонентов (рекомендуется): Используйте синтаксис <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. Использование ссылок вместо кнопок для переключения локали, это лучшая практика для SEO и обнаруживаемости страниц, так как это позволяет поисковым системам сканировать и индексировать все локализованные версии ваших страниц:

    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) гарантирует, что поисковые системы смогут обнаружить все языковые варианты ваших страниц. Это предпочтительнее, чем переключение локали только с помощью JavaScript, которое поисковые роботы могут не распознать.

    Затем настройте ваш app.vue для использования layouts:

    app.vue
    Копировать код

    Копировать код в буфер обмена

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

    (Необязательно) Шаг 6b: Создайте Layout с навигацией

    Layouts в Nuxt позволяют определить общую структуру для ваших страниц. Создайте layout по умолчанию, который включает переключатель локали и навигацию:

    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. Этот компонент автоматически добавляет префикс текущего языка к внутренним URL, что важно для 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 предоставляет отличные возможности для SEO через композицию useHead (автоматически импортируется). Вы можете использовать Intlayer для обработки локализованных метаданных, используя аксессоры .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",
        }),
        metaDescription: t({
          en: "Узнайте больше о нашей компании и нашей миссии",
          fr: "En savoir plus sur notre société et notre mission",
          es: "Conozca más sobre nuestra empresa y nuestra misión",
        }),
        title: t({
          en: "О нас",
          fr: "À Propos",
          es: "Acerca de Nosotros",
        }),
      },
    } satisfies Dictionary;
    
    export default aboutPageContent;

    Конфигурация Git

    Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш Git-репозиторий.

    Для этого вы можете добавить следующие инструкции в ваш файл .gitignore:

    .gitignore
    Копировать код

    Копировать код в буфер обмена

    # Игнорировать файлы, сгенерированные Intlayer.intlayer

    Расширение VS Code

    Чтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение Intlayer VS Code Extension.

    Установить из VS Code Marketplace

    Это расширение предоставляет:

    • Автозаполнение ключей переводов.
    • Обнаружение ошибок в реальном времени для отсутствующих переводов.
    • Встроенный просмотр переведённого контента.
    • Быстрые действия для лёгкого создания и обновления переводов.

    Для получения дополнительной информации о том, как использовать расширение, обратитесь к документации Intlayer VS Code Extension.


    Продвинуться дальше

    Чтобы продвинуться дальше, вы можете реализовать визуальный редактор или вынести ваш контент, используя 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