Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"v8.9.004.05.2026
- "Начальная история"v8.4.1023.03.2026
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомЕсли у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.
Ссылка на документацию GitHubКопировать Markdown документа в буфер обмена
Переведите ваш веб-сайт на Vite и Lit с помощью Intlayer | Интернационализация (i18n)
Содержание
Почему Intlayer лучше альтернатив?
По сравнению с основными решениями, такими как «lit-localize» или «i18next», Intlayer — это решение со встроенными оптимизациями, такими как:
Intlayer оптимизирован для идеальной работы с Lit, предлагая охват содержимого на уровне веб-компонентов, поддержку TypeScript и все функции, необходимые для масштабирования интернационализации (i18n).
Вместо загрузки огромных файлов JSON на свои страницы загружайте только необходимый контент. Intlayer помогает уменьшить размер бандла и страниц до 50 %.
Определение области содержимого вашего приложения облегчает обслуживание крупномасштабных приложений. Вы можете дублировать или удалить отдельную папку функций, не утруждав себя мысленным бременем проверки всей кодовой базы контента. Кроме того, Intlayer полностью типизирован, что обеспечивает точность вашего контента.
Совместное размещение контента уменьшает контекст, необходимый для моделей большого языка (LLM). Intlayer также поставляется с набором инструментов, таких как CLI для проверки отсутствия переводов,LSP, MCP, и agent skills, чтобы сделать работу разработчика (DX) еще более удобной для агентов ИИ.
Используйте автоматизацию для перевода в своем конвейере CI/CD, используя LLM по вашему выбору за счет вашего поставщика ИИ. Intlayer также предлагает компилятор для автоматизации извлечения контента, а также веб-платформу, которая помогает переводить в фоновом режиме.
Подключение больших файлов JSON к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента во время сборки (build time).
Intlayer — это больше, чем просто решение i18n. Он предоставляет автономный визуальный редактор и полный CMS, чтобы помочь вам управлять многоязычным контентом в реальном времени, упрощая сотрудничество с переводчиками, копирайтерами и другими членами команды. Контент может храниться локально и/или удаленно.
See Application Template on GitHub.
Пошаговое руководство по настройке Intlayer в приложении на Vite и Lit
Установка зависимостей
Установите необходимые пакеты с помощью npm:
bashКопировать кодКопировать код в буфер обмена
флаг
--interactiveне является обязательным. Используйтеintlayer-cli init, если вы являетесь ИИ-агентом.Эта команда определит вашу среду и установит необходимые пакеты. Например:
bashКопировать кодКопировать код в буфер обмена
intlayer
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, декларации контента, транспиляции и CLI-команд.
lit-intlayer Пакет, интегрирующий Intlayer с приложениями на Lit. Он предоставляет хуки на основе
ReactiveController(useIntlayer,useLocaleи т. д.), чтобы LitElement автоматически перерисовывались при смене языка.vite-intlayer Включает плагин Vite для интеграции Intlayer с бандлером Vite, а также промежуточное ПО (middleware) для определения предпочтительного языка пользователя, управления куки и обработки перенаправления URL.
Конфигурация вашего проекта
Архитектура
В этой архитектуре
lit-intlayerпредоставляет интеграцию пользовательских элементов и реактивные контроллеры для управления переводами внутри Web Components. Объявления контента находятся вsrc/рядом с элементами.bashКопировать кодКопировать код в буфер обмена
Конфигурация
Создайте файл конфигурации для настройки языков вашего приложения:
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, имена куки, местоположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Полный список доступных параметров см. в документации по конфигурации.
Интеграция Intlayer в конфигурацию Vite
Добавьте плагин intlayer в вашу конфигурацию.
vite.config.tsКопировать кодКопировать код в буфер обмена
import { defineConfig } from "vite"; import { intlayer } from "vite-intlayer"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api"), }, }), ], });Плагин Vite
intlayer()используется для интеграции Intlayer с Vite. Он обеспечивает создание файлов декларации контента и отслеживает их изменения в режиме разработки. Он определяет переменные окружения Intlayer внутри приложения Vite. Кроме того, он предоставляет псевдонимы (aliases) для оптимизации производительности.Инициализация Intlayer в вашей точке входа
Вызовите
installIntlayer()перед регистрацией любых кастомных элементов, чтобы глобальный синглтон локали был готов к моменту подключения первого элемента.src/main.tsКопировать кодКопировать код в буфер обмена
Если вы также используете декларации контента
md()(Markdown), установите также рендерер макдауна:src/main.tsКопировать кодКопировать код в буфер обмена
Декларация вашего контента
Создавайте и управляйте декларациями контента для хранения переводов:
src/app.content.tsКопировать кодКопировать код в буфер обмена
import { t, type Dictionary } from "intlayer"; const appContent = { key: "app", content: { title: "Vite + Lit", viteLogo: t({ en: "Vite logo", fr: "Logo Vite", es: "Logo Vite", }), litLogo: t({ en: "Lit logo", fr: "Logo Lit", es: "Logo Lit", }), count: t({ en: "count is {{count}}", fr: "le compte est {{count}}", es: "el recuento es {{count}}", }), readTheDocs: t({ en: "Click on the Vite and Lit logos to learn more", fr: "Cliqueз sur les logos Vite et Lit pour en savoir plus", es: "Haga clic en los logotipos de Vite y Lit para obtener más información", }), }, } satisfies Dictionary; export default appContent;Декларации контента могут быть определены в любом месте вашего приложения, если они включены в директорию
contentDir(по умолчанию./src) и соответствуют расширению файлов декларации контента (по умолчанию.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).Подробнее см. в документации по декларации контента.
Использование Intlayer в вашем LitElement
Используйте
useIntlayerвнутриLitElement. Он возвращает проксиReactiveController, который автоматически вызывает перерисовку при изменении активного языка - никакой дополнительной настройки не требуется.src/my-element.tsКопировать кодКопировать код в буфер обмена
Если вам нужна переведенная строка в нативном HTML-атрибуте (например,
alt,aria-label,title), вызовите.valueна конечном узле:typescriptКопировать кодКопировать код в буфер обмена
Изменение языка вашего контента
НеобязательноЧтобы изменить язык контента, используйте метод
setLocale, предоставляемый контроллеромuseLocale.src/locale-switcher.tsКопировать кодКопировать код в буфер обмена
Рендеринг Markdown и HTML контента
НеобязательноIntlayer поддерживает декларации контента
md()иhtml(). В Lit скомпилированный результат вставляется как необработанный HTML через директивуunsafeHTML.Рендеринг скомпилированного HTML в вашем элементе:
src/my-element.tsКопировать кодКопировать код в буфер обмена
TIP String(content.editNote)вызываетtoString()наIntlayerNode, который возвращает необработанную строку Markdown. Передайте ее вcompileMarkdown, чтобы получить HTML-строку, а затем отрендерите ее с помощью директивыunsafeHTMLот Lit.Добавление локализованной маршрутизации
НеобязательноЧтобы создать уникальные маршруты для каждого языка (полезно для SEO), вы можете использовать клиентский роутер вместе с помощниками Intlayer
localeMap/localeFlatMapи плагином ViteintlayerProxyдля определения языка на стороне сервера.Сначала добавьте
intlayerProxyв конфигурацию Vite:Обратите внимание, что для использования
intlayerProxyв продакшене вам нужно переместитьvite-intlayerизdevDependenciesвdependencies.Начиная с Intlayer v9,
intlayerProxy()встроен непосредственно в плагинintlayer()и включен по умолчанию через опциюrouting.enableProxy(trueпо умолчанию). Регистрация его отдельно, как показано ниже, теперь является опциональной — она сохранена для обратной совместимости и для конфигураций, которым нужно контролировать порядок плагинов. Установитеrouting.enableProxy: falseдля отключения. См. заметки о выпуске v9.vite.config.tsКопировать кодКопировать код в буфер обмена
import { defineConfig } from "vite"; import { intlayer } from "vite-intlayer"; export default defineConfig({ plugins: [ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api"), }, }), ], });Изменение URL при смене языка
НеобязательноЧтобы обновлять URL браузера при смене языка, используйте
useRewriteURLвместе с переключателем языка:src/locale-switcher.tsКопировать кодКопировать код в буфер обмена
Переключение атрибутов языка и направления текста в HTML
НеобязательноОбновляйте атрибуты
langиdirтега<html>в соответствии с текущим языком для обеспечения доступности и SEO.src/my-element.tsКопировать кодКопировать код в буфер обмена
Извлечение контента из ваших компонентов
НеобязательноЕсли у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.
Чтобы облегчить этот процесс, Intlayer предлагает компилятор / экстрактор для преобразования ваших компонентов и извлечения контента.
Чтобы настроить его, вы можете добавить раздел
compilerв файлintlayer.config.ts:intlayer.config.tsКопировать кодКопировать код в буфер обмена
(Опционально) 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 в корне проекта
Копировать код в буфер обмена
Пакет intlayer должен быть установлен. Для продакшена задайте SITE_URL в окружении (например в CI).
Для Node ESM предпочтительноgenerate-seo.mjs. Дляgenerate-seo.jsукажите"type": "module"вpackage.jsonили включите ESM иначе.
2. Запуск скрипта до Vite
Копировать код в буфер обмена
Подстройте команды для pnpm или yarn. Скрипт можно вызывать из CI или другого шага.
Настройка TypeScript
Убедитесь, что ваша конфигурация TypeScript включает автогенерируемые типы.
Копировать код в буфер обмена
experimentalDecoratorsиuseDefineForClassFields: falseтребуются Lit для поддержки декораторов.
Конфигурация Git
Рекомендуется игнорировать файлы, генерируемые Intlayer. Это позволит избежать их фиксации в вашем Git-репозитории.
Для этого вы можете добавить следующие инструкции в файл .gitignore:
Копировать код в буфер обмена
Расширение для VS Code
Чтобы улучшить процесс разработки с Intlayer, вы можете установить официальное расширение Intlayer для VS Code.
Установить из VS Code Marketplace
Это расширение предоставляет:
- Автодополнение ключей перевода.
- Обнаружение ошибок в реальном времени для отсутствующих переводов.
- Встроенные превью переведенного контента.
- Быстрые действия для легкого создания и обновления переводов.
Подробнее о том, как использовать расширение, см. в документации расширения Intlayer для VS Code.
Идти дальше
Чтобы пойти дальше, вы можете внедрить визуальный редактор или вынести ваш контент во внешнюю систему с помощью CMS.
Часто задаваемые вопросы
У Vite нет мнения об i18n, поэтому выбор идёт из экосистемы Lit:
@lit/localize: официальный вариант, основанный на извлечении XLIFF и одном скомпилированном бандле на локаль, поэтому переключение языка во время выполнения требует режима runtime.- Написанный вручную словарь, импортируемый в каждый элемент: без зависимостей, без типизации, без инструментов.
Intlayer: контент, объявленный рядом с каждым компонентом и скомпилированный плагином Vite во время сборки, полностью типизированный, с ИИ-переводом, визуальным редактором и CMS.
Специфичный для Vite выигрыш в том, что переводы разрешаются и подвергаются tree-shaking во время компиляции, а не загружаются как JSON во время выполнения, поэтому страница поставляет только те записи, которые отображает. См. почему Intlayer и бенчмарк.
Гораздо меньше, чем при подходе на основе пространств имён, потому что страница никогда не загружает каталог, который не отображает. Компилятор во время сборки заменяет вызовы useIntlayer точными записями словаря, которые использует компонент, поэтому неиспользуемые ключи и неиспользуемые языки отбрасываются, а динамические словари разделяют остальное по локалям. По сравнению с обычными альтернативами Intlayer сокращает размер бандла и страницы до 50%. См. оптимизацию бандла и бенчмарк.
В значительной степени. Следуйте обзору адаптеров совместимости, чтобы перенести контент. Вы также можете мигрировать постепенно: плагин синхронизации JSON сохраняет ваши существующие каталоги JSON как источник истины и генерирует из них словари Intlayer, поэтому оба слоя остаются синхронизированными, пока вы переносите элементы по одному.
Да. Плагин синхронизации JSON сохраняет ваши файлы /messages/{locale}/{namespace}.json как источник истины и генерирует из них словари Intlayer, в обоих направлениях. Плагин синхронизации PO делает то же самое для каталогов gettext, а файлы по локали позволяют разделить контент по языкам вместо группировки локалей в одном файле.
Нет. Запустите npx intlayer extract, и Intlayer прочитает ваши компоненты, извлечёт строки, видимые пользователю, и запишет файл .content рядом с каждым из них, так что вы просматриваете diff вместо копирования строк в каталог по одной. Шаг 12 этого руководства проводит вас через это.
Для полностью автоматизированного конвейера Компилятор Intlayer делает то же самое во время сборки: он сканирует исходный код JSX, TSX, Vue и Svelte при каждом изменении, генерирует словари и поддерживает их синхронизацию через горячую замену модулей, поэтому вручную поддерживать ключи вообще не нужно.
Стоит знать о двух ограничениях, прежде чем включать компилятор. Он работает через статический анализ, поэтому строки, существующие только во время выполнения, такие как коды ошибок API или поля CMS, остаются недоступными. И ему нужно отличать текст, видимый пользователю, от логики приложения вроде className="active" или кода статуса, что требует нескольких аннотаций в большой кодовой базе. Команда extract избегает обоих ограничений, оставляя вас в процессе.
Пять компонентов, все опциональные:
- Расширение для VS Code: переход от ключа
useIntlayerк файлу контента, который его объявляет, извлечение контента из компонента и запуск build, fill, test, push и pull из палитры команд или отдельной вкладки Intlayer. - LSP-сервер: та же осведомлённость в любом редакторе, который говорит на LSP, с переходом к определению, поиском всех ссылок, предпросмотром переведённого значения при наведении, автодополнением ключей и полей и предупреждением, когда ключ нигде не объявлен. Он также разрешает вызовы
i18next,react-i18next,next-intlиuse-intl, что помогает при миграции. - MCP-сервер: предоставляет документацию и CLI Intlayer для Cursor, VS Code, Claude Desktop, Claude Code и ChatGPT, чтобы ассистент отвечал по актуальной документации, а не гадал, и мог сам запускать команды вроде
intlayer fill. - Навыки агентов: сфокусированные навыки, такие как
intlayer-config,intlayer-cliиintlayer-content, плюс по одному на фреймворк, которые обучают агента вашей настройке маршрутизации и типам узлов контента. - Плагин ESLint:
no-raw-textпомечает жёстко закодированные строки, с дополнительными правилами для статических ключей словаря и неиспользуемого контента.
