Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"v8.9.004.05.2026
- "Обновление LocaleSwitcher, SEO, метаданных"v7.3.1107.12.2025
- "Инициализация истории"v5.5.1029.06.2025
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английском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
Перевод вашего сайта на Nuxt и Vue с использованием Intlayer | Интернационализация (i18n)
Содержание
Почему Intlayer лучше альтернатив?
По сравнению с основными решениями, такими как @nuxtjs/i18n или i18next, Intlayer — это решение со встроенными оптимизациями, такими как:
Intlayer оптимизирован для идеальной работы с Nuxt, предлагая многоязычную маршрутизацию, промежуточное программное обеспечение для определения локали, карту сайта и все функции, необходимые для масштабирования интернационализации (i18n).
Вместо загрузки огромных файлов JSON на свои страницы загружайте только необходимый контент. Intlayer помогает уменьшить размер бандла и страниц до 50 %.
Определение области содержимого вашего приложения облегчает обслуживание крупномасштабных приложений. Вы можете дублировать или удалить отдельную папку функций, не утруждав себя мысленным бременем проверки всей кодовой базы контента. Кроме того, Intlayer полностью типизирован, что обеспечивает точность вашего контента.
Совместное размещение контента уменьшает контекст, необходимый для моделей большого языка (LLM). Intlayer также поставляется с набором инструментов, таких как CLI для проверки отсутствия переводов,LSP, MCP, и навыки агента, чтобы сделать работу разработчика (DX) еще более удобной для агентов ИИ.
Используйте автоматизацию для перевода в своем конвейере CI/CD, используя LLM по вашему выбору за счет вашего поставщика ИИ. Intlayer также предлагает компилятор для автоматизации извлечения контента, а также веб-платформу, которая помогает переводить в фоновом режиме.
Подключение больших файлов JSON к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента во время сборки (build time).
Intlayer — это больше, чем просто решение i18n. Он предоставляет автономный визуальный редактор и полный CMS, чтобы помочь вам управлять многоязычным контентом в реальном времени, упрощая сотрудничество с переводчиками, копирайтерами и другими членами команды. Контент может храниться локально и/или удаленно.
Пошаговое руководство по настройке Intlayer в приложении Nuxt
Смотрите Шаблон приложения на GitHub.
Установка зависимостей
Установите необходимые пакеты с помощью npm:
bashКопировать кодКопировать код в буфер обмена
npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer initintlayer
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, объявления контента, транспиляции и CLI-команд.
vue-intlayer Пакет, который интегрирует Intlayer с приложением Vue. Он содержит composables для Vue-компонентов.
nuxt-intlayer Модуль Nuxt, который интегрирует Intlayer с приложениями Nuxt. Он обеспечивает автоматическую настройку, middleware для определения локали, управление cookie и перенаправление URL.
Конфигурация вашего проекта
Создайте файл конфигурации для настройки языков вашего приложения:
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 в консоли и многое другое. Для полного списка доступных параметров обратитесь к документации по конфигурации.
Интеграция Intlayer в вашу конфигурацию Nuxt
Добавьте модуль intlayer в вашу конфигурацию Nuxt:
nuxt.config.tsКопировать кодКопировать код в буфер обмена
import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({ // ... Ваша существующая конфигурация Nuxt modules: ["nuxt-intlayer"],});Модуль
nuxt-intlayerавтоматически обрабатывает интеграцию Intlayer с Nuxt. Он настраивает построение деклараций контента, отслеживает файлы в режиме разработки, предоставляет middleware для определения локали и управляет локализованной маршрутизацией.Объявите ваш контент
Создайте и управляйте вашими декларациями контента для хранения переводов:
Ваши декларации контента могут быть определены в любом месте вашего приложения, при условии, что они включены в директорию
contentDir(по умолчанию,./src). И соответствуют расширению файла декларации контента (по умолчанию,.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).Для получения дополнительной информации обратитесь к документации по декларации контента.
Использование 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/>для деструктуризации контента.
- Используйте
Изменение языка вашего контента
НеобязательноЧтобы изменить язык вашего контента, вы можете использовать функцию
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>Добавьте локализованный роутинг в ваше приложение
Необязательно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
Создание локализованного компонента ссылок
НеобязательноЧтобы навигация вашего приложения учитывала текущую локаль, вы можете создать пользовательский компонент
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, содержащими префикс локали
Работа с метаданными и 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;- Используйте
(Необязательно) Шаг 6b: Создайте Layout с навигацией
Layouts в Nuxt позволяют определить общую структуру для ваших страниц. Создайте layout по умолчанию, который включает переключатель локали и навигацию:
Копировать код в буфер обмена
<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 (показан ниже) гарантирует, что внутренние навигационные ссылки автоматически локализуются.
Конфигурация Git
Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш Git-репозиторий.
Для этого вы можете добавить следующие инструкции в ваш файл .gitignore:
Копировать код в буфер обмена
# Игнорировать файлы, сгенерированные Intlayer.intlayerРасширение VS Code
Чтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение Intlayer VS Code Extension.
Установить из VS Code Marketplace
Это расширение предоставляет:
- Автозаполнение ключей переводов.
- Обнаружение ошибок в реальном времени для отсутствующих переводов.
- Встроенный просмотр переведённого контента.
- Быстрые действия для лёгкого создания и обновления переводов.
Для получения дополнительной информации о том, как использовать расширение, обратитесь к документации Intlayer VS Code Extension.
Продвинуться дальше
Чтобы продвинуться дальше, вы можете реализовать визуальный редактор или вынести ваш контент, используя CMS.