Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Оновлення використання API useIntlayer у Solid для прямого доступу до властивостей"v8.9.004.05.2026
- "Початкова історія"v8.4.1023.03.2026
Вміст цієї сторінки перекладено за допомогою штучного інтелекту.
Переглянути останню версію оригінального вмісту англійськоюЯкщо у вас є ідея щодо покращення цієї документації, будь ласка, долучіться, надіславши pull request на GitHub.
Посилання на документацію на GitHubСкопіювати документацію у форматі Markdown в буфер обміну
Перекладіть свій веб-сайт Vite та Vanilla JS за допомогою Intlayer | Інтернаціоналізація (i18n)
Зміст
Що таке Intlayer?
Intlayer - це інноваційна бібліотека інтернаціоналізації (i18n) з відкритим вихідним кодом, розроблена для спрощення підтримки багатомовності в сучасних веб-додатках.
З Intlayer ви можете:
- Легко керувати перекладами за допомогою декларативних словників на рівні компонентів.
- Динамічно локалізувати метадані, маршрути та вміст.
- Забезпечити підтримку TypeScript за допомогою автоматично згенерованих типів, що покращує автодоповнення та виявлення помилок.
- Використовувати розширені функції, такі як динамічне визначення та перемикання мови.
Покроковий посібник із налаштування Intlayer у додатку Vite та Vanilla JS
Крок 1: Встановлення залежностей
Встановіть необхідні пакети за допомогою npm:
Скопіюйте код у буфер обміну
npm install intlayer vanilla-intlayernpm install vite-intlayer --save-devnpx intlayer initintlayer Основний пакет, який надає інструменти інтернаціоналізації для керування конфігурацією, перекладу, декларування вмісту, транспіляції та команд CLI.
vanilla-intlayer Пакет, який інтегрує Intlayer із чистими додатками JavaScript / TypeScript. Він надає pub/sub синглтон (
IntlayerClient) та помічники на основі колбеків (useIntlayer,useLocaleтощо), щоб будь-яка частина вашого додатка могла реагувати на зміни локалі незалежно від фреймворку інтерфейсу.vite-intlayer Включає плагін Vite для інтеграції Intlayer із Vite bundler, а також проміжне програмне забезпечення (middleware) для визначення мови користувача, керування файлами cookie та обробки перенаправлень URL-адрес.
Крок 2: Конфігурація вашого проекту
Створіть конфігураційний файл для налаштування мов вашого додатка:
Скопіюйте код у буфер обміну
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [
Locales.ENGLISH,
Locales.FRENCH,
Locales.SPANISH,
// Ваші інші локалі
],
defaultLocale: Locales.ENGLISH,
},
};
export default config;Через цей конфігураційний файл ви можете налаштувати локалізовані URL-адреси, перенаправлення проміжного ПЗ, назви файлів cookie, розташування та розширення ваших декларацій вмісту, вимкнути журнали Intlayer у консолі та багато іншого. Повний список доступних параметрів див. у документації з конфігурації.
Крок 3: Інтегруйте Intlayer у вашу конфігурацію Vite
Додайте плагін intlayer до вашої конфігурації.
Скопіюйте код у буфер обміну
import { defineConfig } from "vite";
import { intlayer } from "vite-intlayer";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [intlayer()],
});Плагін Vite intlayer() використовується для інтеграції Intlayer із Vite. Він забезпечує побудову файлів декларації вмісту та відстежує їх у режимі розробки. Він визначає змінні середовища Intlayer у додатку Vite. Крім того, він надає псевдоніми (aliases) для оптимізації продуктивності.
Крок 4: Запустіть Intlayer у вашій точці входу
Викличте installIntlayer() перед візуалізацією будь-якого вмісту, щоб глобальний синглтон локалі був готовий.
Скопіюйте код у буфер обміну
import { installIntlayer } from "vanilla-intlayer";// Має бути викликано перед візуалізацією будь-якого вмісту i18n.installIntlayer();// Імпортуйте та запустіть модулі програми.import "./app.js";Якщо ви також використовуєте декларації вмісту md() (Markdown), встановіть також рендерер markdown:
Скопіюйте код у буфер обміну
import { installIntlayer, installIntlayerMarkdown } from "vanilla-intlayer";installIntlayer();installIntlayerMarkdown();import "./app.js";Крок 5: Декларуйте ваш контент
Створюйте та керуйте деклараціями вмісту для зберігання перекладів:
Скопіюйте код у буфер обміну
import { insert, t, type Dictionary } from "intlayer";
const appContent = {
key: "app",
content: {
title: "Vite + Vanilla",
viteLogoLabel: t({
en: "Vite Logo",
fr: "Logo Vite",
es: "Logo Vite",
}),
count: insert(
t({
en: "count is {{count}}",
fr: "le compte est {{count}}",
es: "el recuento es {{count}}",
})
),
readTheDocs: t({
en: "Click on the Vite logo to learn more",
fr: "Cliquez sur le logo Vite pour en savoir plus",
es: "Натисніть на логотип Vite, щоб дізнатися більше",
}),
},
} satisfies Dictionary;
export default appContent;Ваші декларації вмісту можна визначити будь-де у вашому додатку, якщо вони включені до каталогу
contentDir(за замовчуванням./src) і відповідають розширенню файлу декларації вмісту (за замовчуванням.content.{json,ts,tsx,js,jsx,mjs,cjs}).Докладніше див. у документації з декларації вмісту.
Крок 6: Використовуйте Intlayer у вашому JavaScript
vanilla-intlayer відображає API поверхні react-intlayer: useIntlayer(key, locale?) повертає перекладений вміст безпосередньо. Приєднайте .onChange() до результату, щоб підписатися на зміни локалі - явний еквівалент перерендерингу в React.
Скопіюйте код у буфер обміну
import { installIntlayer, useIntlayer } from "vanilla-intlayer";installIntlayer();// Отримайте початковий контент для поточної локалі.// Приєднайте .onChange(), щоб отримувати сповіщення при кожній зміні локалі.const content = useIntlayer("app").onChange((newContent) => { // Перерендерить або оновіть лише зачеплені вузли DOM document.querySelector<HTMLHeadingElement>("h1")!.textContent = String( newContent.title ); document.querySelector<HTMLParagraphElement>(".read-the-docs")!.textContent = String(newContent.readTheDocs);});// Початковий рендерингdocument.querySelector<HTMLHeadingElement>("h1")!.textContent = String( content.title);document.querySelector<HTMLParagraphElement>(".read-the-docs")!.textContent = String(content.readTheDocs);Отримуйте доступ до кінцевих значень як до рядків, загорнувши їх у
String(), що викликає методtoString()вузла та повертає перекладений текст.Якщо вам потрібне значення для нативного атрибута HTML (наприклад,
alt,aria-label), використовуйте безпосередньо.value:typescriptКопіювати кодСкопіюйте код у буфер обміну
img.alt = content.viteLogoLabel.value;
(Необов’язково) Крок 7: Змініть мову вашого вмісту
Щоб змінити мову вмісту, використовуйте функцію setLocale, надану useLocale.
Скопіюйте код у буфер обміну
import { getLocaleName } from "intlayer";import { useLocale } from "vanilla-intlayer";export function setupLocaleSwitcher(container: HTMLElement): () => void { const { locale, availableLocales, setLocale, subscribe } = useLocale(); const select = document.createElement("select"); select.setAttribute("aria-label", "Language"); const render = (currentLocale: string) => { select.innerHTML = availableLocales .map( (loc) => `<option value="${loc}"${loc === currentLocale ? " selected" : ""}> ${getLocaleName(loc)} </option>` ) .join(""); }; render(locale); container.appendChild(select); select.addEventListener("change", () => setLocale(select.value as any)); // Тримайте випадаючий список синхронізованим, коли локаль змінюється деінде return subscribe((newLocale) => render(newLocale));}(Необов’язково) Крок 8: Рендеринг вмісту Markdown та HTML
Intlayer підтримує декларації вмісту md() та html(). У чистому JS скомпільований вихідний код вставляється як необроблений HTML через innerHTML.
Скомпілюйте та вставте HTML:
Скопіюйте код у буфер обміну
import { compileMarkdown, installIntlayerMarkdown, useIntlayer,} from "vanilla-intlayer";installIntlayerMarkdown();const content = useIntlayer("app").onChange((newContent) => { const el = document.querySelector<HTMLDivElement>(".edit-note")!; el.innerHTML = compileMarkdown(String(newContent.editNote));});document.querySelector<HTMLDivElement>(".edit-note")!.innerHTML = compileMarkdown(String(content.editNote));TIP String(content.editNote)викликаєtoString()наIntlayerNode, що повертає необроблений рядок Markdown. Передайте його вcompileMarkdown, щоб отримати рядок HTML, а потім встановіть черезinnerHTML.
WARNING Використовуйте
innerHTMLлише з довіреним вмістом. Якщо markdown надходить від користувача, спочатку очистіть його (наприклад, за допомогою DOMPurify). Ви можете встановити рендерер очищення динамічно:typescriptКопіювати кодСкопіюйте код у буфер обміну
import { installIntlayerMarkdownDynamic } from "vanilla-intlayer";await installIntlayerMarkdownDynamic(async () => { const DOMPurify = await import("dompurify"); return (markdown) => DOMPurify.sanitize(compileMarkdown(markdown));});
(Необов’язково) Крок 9: Додайте локалізовану маршрутизацію (Localized Routing) до свого додатка
Щоб створити унікальні маршрути для кожної мови (корисно для SEO), ви можете використовувати intlayerProxy у вашій конфігурації Vite для визначення локалі на стороні сервера.
Спочатку додайте intlayerProxy до вашої конфігурації Vite:
Зверніть увагу, що для використанняintlayerProxyу продуктовому середовищі вам потрібно переміститиvite-intlayerізdevDependenciesдоdependencies.
Скопіюйте код у буфер обміну
import { defineConfig } from "vite";
import { intlayer, intlayerProxy } from "vite-intlayer";
export default defineConfig({
plugins: [
intlayerProxy(), // має бути розміщено першим
intlayer(),
],
});(Необов’язково) Крок 10: Зміна URL при зміні локалі
Щоб оновити URL браузера при зміні локалі, викличте useRewriteURL() після встановлення Intlayer:
Скопіюйте код у буфер обміну
import { installIntlayer, useRewriteURL } from "vanilla-intlayer";installIntlayer();// Переписує URL негайно та при кожній наступній зміні локалі.// Повертає функцію скасування підписки для очищення.const stopRewriteURL = useRewriteURL();(Необов’язково) Крок 11: Перемикання атрибутів мови та напрямку HTML
Оновлюйте атрибути lang та dir тегу <html> відповідно до поточної локалі для підтримки доступності та SEO.
Скопіюйте код у буфер обміну
import { getHTMLTextDir } from "intlayer";import { installIntlayer, useLocale } from "vanilla-intlayer";installIntlayer();useLocale({ onLocaleChange: (locale) => { document.documentElement.lang = locale; document.documentElement.dir = getHTMLTextDir(locale); },});(Необов’язково) Крок 12: Ліниве завантаження словників за локалями
Для великих додатків ви можете розділити словник кожної локалі на власний фрагмент (chunk). Використовуйте useDictionaryDynamic разом із динамічним import() від Vite:
Скопіюйте код у буфер обміну
import { installIntlayer, useDictionaryDynamic } from "vanilla-intlayer";installIntlayer();const unsubscribe = useDictionaryDynamic( { en: () => import("../.intlayer/dictionaries/en/app.mjs"), fr: () => import("../.intlayer/dictionaries/fr/app.mjs"), es: () => import("../.intlayer/dictionaries/es/app.mjs"), }, "app").onChange((content) => { document.querySelector("h1")!.textContent = String(content.title);});Пакет кожної локалі завантажується лише тоді, коли ця локаль стає активною, а результат кешується - наступні перемикання на ту саму локаль відбуваються миттєво.
(Необов’язково) Крок 13: Отримайте вміст ваших компонентів (Extract)
Якщо у вас є існуюча кодова база, перетворення тисяч файлів може зайняти багато часу.
Щоб полегшити цей процес, Intlayer пропонує компілятор / екстрактор для перетворення ваших компонентів та вилучення вмісту.
Для налаштування ви можете додати розділ compiler у ваш файл intlayer.config.ts:
Скопіюйте код у буфер обміну
import { type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { // ... Решта вашої конфігурації compiler: { /** * Вказує, чи має бути включений компілятор. */ enabled: true, /** * Визначає шлях вихідних файлів */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Вказує, чи потрібно зберігати компоненти після перетворення. * Таким чином компілятор можна запустити лише один раз для перетворення програми, а потім видалити. */ saveComponents: false, /** * Префікс ключа словника */ dictionaryKeyPrefix: "", },};export default config;Запустіть екстрактор, щоб перетворити ваші компоненти та витягти вміст
Скопіюйте код у буфер обміну
npx intlayer extract(Опційно) Sitemap і robots.txt (генерація під час збірки)
Intlayer надає generateSitemap і getMultilingualUrls - утиліти для формування багатомовних sitemap.xml і robots.txt для краулерів та автоматичного запису в public/. Зазвичай запускають невеликий Node-скрипт перед Vite (наприклад, npm-хуки predev / prebuild).
Sitemap
Генератор sitemap враховує локалі й додає метадані для краулерів.
Підтримується простір іменxhtml:link(hreflang). Замість плоского списку URL Intlayer пов’язує всі мовні версії сторінки в обидва боки (наприклад/about,/fr/aboutабо/about?lang=frзалежно від режиму маршрутизації).
Robots.txt
Використовуйте getMultilingualUrls, щоб правила Disallow покривали всі локалізовані варіанти шляхів.
1. Файл generate-seo.mjs у корені проєкту
Скопіюйте код у буфер обміну
import fs from "fs";import path from "path";import { fileURLToPath } from "url";import { generateSitemap, getMultilingualUrls } from "intlayer";const __dirname = path.dirname(fileURLToPath(import.meta.url));const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace( /\/$/, "");const pathList = [ { path: "/", changefreq: "daily", priority: 1.0 }, { path: "/about", changefreq: "monthly", priority: 0.7 },];const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);const getAllMultilingualUrls = (urls) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)));const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);const robotsTxt = [ "User-agent: *", "Allow: /", ...disallowedPaths.map((path) => `Disallow: ${path}`), "", `Sitemap: ${SITE_URL}/sitemap.xml`,].join("\n");fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);console.log("SEO files generated successfully.");Пакет intlayer має бути встановлений. У продакшені задайте SITE_URL у середовищі (наприклад у CI).
Для Node ESM кращеgenerate-seo.mjs. Дляgenerate-seo.jsдодайте"type": "module"уpackage.jsonабо ввімкніть ESM інакше.
2. Запуск скрипта перед Vite
Скопіюйте код у буфер обміну
{ "scripts": { "dev": "vite", "prebuild": "node generate-seo.mjs", "build": "vite build", "preview": "vite preview" }}Підлаштуйте команди для pnpm або yarn. Можна викликати скрипт із CI.
Налаштування TypeScript
Переконайтеся, що ваша конфігурація TypeScript включає автоматично згенеровані типи.
Скопіюйте код у буфер обміну
{ "compilerOptions": { // ... }, "include": ["src", ".intlayer/**/*.ts"],}Конфігурація Git
Ми рекомендуємо ігнорувати файли, згенеровані Intlayer. Це дозволить вам уникнути їх фіксації (commit) у вашому репозиторії Git.
Для цього ви можете додати наступні інструкції у ваш файл .gitignore:
Скопіюйте код у буфер обміну
# Ігнорувати файли, згенеровані Intlayer.intlayerРозширення VS Code
Щоб покращити свій досвід розробки з Intlayer, ви можете встановити офіційне розширення Intlayer VS Code.
Встановити з VS Code Marketplace
Це розширення забезпечує:
- Автодоповнення для ключів перекладу.
- Виявлення помилок у реальному часі для відсутніх перекладів.
- Вбудований попередній перегляд перекладеного вмісту.
- Швидкі дії для легкого створення та оновлення перекладів.
Докладніше про використання розширення див. у документації розширення Intlayer VS Code.
Йдіть далі
Щоб піти далі, ви можете впровадити візуальний редактор або винести свій контент за допомогою CMS.