Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Оновлення використання API useIntlayer у Solid для прямого доступу до властивостей"v8.9.004.05.2026
- "Додано команду init"v7.5.930.12.2025
- "Непотрібна конфігурація TypeScript"v7.3.1308.12.2025
- "Оновлено 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%.
Організація вмісту за окремими областями (scoping) полегшує технічне обслуговування великомасштабних програм. Ви можете скопіювати або видалити окрему папку функцій без розумового навантаження перегляду всієї кодової бази вмісту. Крім того, Intlayer повністю типізований (fully typed), щоб забезпечити точність вашого вмісту.
Спільне розміщення вмісту зменшує контекст, необхідний для великих мовних моделей (LLM). Intlayer також постачається з набором інструментів, наприклад CLI для перевірки відсутніх перекладів,LSP, MCP і навички агента, щоб зробити роботу розробника (DX) ще зручнішою для агентів ШІ.
Використовуйте автоматизацію для перекладу в конвеєрі CI/CD за допомогою LLM за вашим вибором за рахунок вашого постачальника штучного інтелекту. Intlayer також пропонує компілятор для автоматизації екстракція вмісту, а також веб-платформу, щоб допомогти перекладати у фоновому режимі.
Підключення великих файлів JSON до компонентів може призвести до проблем з продуктивністю та реакцією. Intlayer оптимізує завантаження вмісту під час збірки (build time).
Більше ніж просто рішення i18n, Intlayer пропонує власний візуальний редактор і повний CMS, щоб допомогти вам керувати своїм багатомовним вмістом у реальному часі, спрощуючи співпрацю з перекладачами, копірайтерами та іншими членами команди. Контент можна зберігати локально та/або віддалено.
Покроковий посібник налаштування Intlayer у Nuxt-застосунку
Перегляньте репозиторій Application Template на GitHub: https://github.com/aymericzip/intlayer-nuxt-4-template
Встановлення залежностей
Встановіть необхідні пакети за допомогою відповідного пакетного менеджера:
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({ // ... Your existing Nuxt configuration 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. Це безшовно інтегрується з Visual Editor та CMS.Строковий синтаксис: Використовуйте
{{ myContent }}щоб вивести контент як простий текст, без підтримки Visual Editor.Синтаксис сирого HTML: Використовуйте
<div v-html="myContent" />щоб рендерити контент як сирий HTML, без підтримки Visual Editor.- Синтаксис деструктуризації:
Composable
useIntlayerповертає Proxy з контентом. Цей Proxy можна деструктурувати, щоб отримати доступ до контенту, зберігаючи реактивність. - Використовуйте
const content = useIntlayer("myContent");і{{ content.myContent }}/<content.myContent />. - Або використовуйте
const { myContent } = useIntlayer("myContent");і{{ myContent}}/<myContent/>, щоб деструктурувати контент.
Змінити мову вашого контенту
Необов'язковоЩоб змінити мову вашого контенту, ви можете використовувати функцію
setLocale, яку надає composableuseLocale. Ця функція дозволяє встановити локаль додатка та відповідно оновити контент.Створіть компонент для перемикання мов, використовуючи
NuxtLink. Використання посилань замість кнопок для перемикання локалі, найкраща практика для SEO та виявлення сторінок, оскільки це дозволяє пошуковим системам обходити та індексувати всі локалізовані версії ваших сторінок:components/LocaleSwitcher.vueКопіювати кодСкопіюйте код у буфер обміну
<script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt auto-imports 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. Це створює маршрути для кожної мови автоматично на основі структури каталогу pages.Приклад:
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>Сторінка About (
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=""> - Керує cookie локалі
- Перенаправляє користувачів на відповідний локалізований 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 />для підтримки Visual Editor
Створіть відповідну декларацію контенту:
pages/about-page.content.tsКопіювати кодСкопіюйте код у буфер обміну
import { t, type Dictionary } from "intlayer"; const aboutPageContent = { key: "about-page", content: { metaTitle: t({ uk: "Про нас - Моя компанія", en: "About Us - My Company", fr: "À Propos - Ma Société", es: "Acerca de Nosotros - Mi Empresa", }), metaDescription: t({ uk: "Дізнайтеся більше про нашу компанію та нашу місію", 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 vuestra misión", }), title: t({ uk: "Про нас", en: "About Us", fr: "À Propos", es: "Acerca de Nosotros", }), }, } satisfies Dictionary; export default aboutPageContent;- Використовуйте
(Необов'язково) Крок 6b: Створіть layout з навігацією
Nuxt layouts дозволяють визначити спільну структуру для ваших сторінок. Створіть default layout, який включає locale switcher та навігацію:
Скопіюйте код у буфер обміну
<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.
Встановити з VS Code Marketplace
Це розширення надає:
- Автозавершення для ключів перекладу.
- Виявлення помилок у реальному часі для відсутніх перекладів.
- Вбудований попередній перегляд перекладеного вмісту.
- Швидкі дії для швидкого створення та оновлення перекладів.
Для детальнішої інформації про використання розширення зверніться до документації Intlayer VS Code Extension.
Далі
Щоб просунутися далі, ви можете реалізувати візуальний редактор або винести свій контент, використовуючи CMS.