Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Сравнение статического, динамического и кэшированного динамического разрешения словарей метаданных в функциях head маршрутов"v9.4.025.08.2026
- "Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"v8.9.004.05.2026
- "Добавить команду init"v7.5.930.12.2025
- "Внедрена validatePrefix и добавлен шаг 14: Обработка страниц 404 с локализованными маршрутами."v7.4.011.12.2025
- "Добавлен шаг 13: Получение текущей локали в ваших server actions (опционально)"v7.3.905.12.2025
- "Добавить шаг 13: Адаптация Nitro"v7.2.318.11.2025
- "Исправлено значение префикса по умолчанию путем добавления функции getPrefix useLocalizedNavigate, LocaleSwitcher и LocalizedLink."v7.1.017.11.2025
- "Обновление документации"v6.5.203.10.2025
- "Добавлено для Tanstack Start"v5.8.109.09.2025
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомЕсли у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.
Ссылка на документацию GitHubКопировать Markdown документа в буфер обмена
Переведите ваш Tanstack Start с Intlayer | Интернационализация (i18n)
Содержание
Это руководство демонстрирует, как интегрировать Intlayer для бесшовной интернационализации в проектах Tanstack Start с маршрутизацией, учитывающей локаль, поддержкой TypeScript и современными практиками разработки.
Почему Intlayer лучше альтернатив?
По сравнению с основными решениями, такими как «react-i18next», «use-intl» или «paraglide», Intlayer предлагает решение со встроенными оптимизациями, такими как:
Intlayer полностью оптимизирован для TanStack Start и обеспечивает многоязычную маршрутизацию, управление файлами cookie, генерацию карты сайта, динамическую загрузку контента и все функции, необходимые для масштабирования ваших усилий по интернационализации (i18n).
Вместо загрузки огромных файлов JSON на свои страницы загружайте только необходимый контент. Intlayer помогает уменьшить размер бандла и страниц до 50 %.
Определение области содержимого вашего приложения облегчает обслуживание крупномасштабных приложений. Вы можете дублировать или удалить отдельную папку функций, не утруждав себя мысленным бременем проверки всей кодовой базы контента. Кроме того, Intlayer полностью типизирован, что обеспечивает точность вашего контента.
Совместное размещение контента уменьшает контекст, необходимый для моделей большого языка (LLM). Intlayer также поставляется с набором инструментов, таких как CLI для проверки отсутствия переводов,LSP, MCP, и agent skills, чтобы сделать работу разработчика (DX) еще более удобной для агентов ИИ.
Используйте автоматизацию для перевода в своем конвейере CI/CD, используя LLM по вашему выбору за счет вашего поставщика ИИ. Intlayer также предлагает компилятор для автоматизации извлечения контента, а также веб-платформу, которая помогает переводить в фоновом режиме.
Подключение больших файлов JSON к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента во время сборки (build time).
Intlayer предлагает больше, чем просто решение i18n. Он предоставляет автономный визуальный редактор и полный CMS, чтобы помочь вам управлять многоязычным контентом в реальном времени, упрощая сотрудничество с переводчиками, копирайтерами и другими членами команды. Контент может храниться локально и/или удаленно.
Пошаговое руководство по настройке Intlayer в приложении Tanstack Start
См. Шаблон приложения на GitHub.
Создайте проект
Начните с создания нового проекта TanStack Start, следуя руководству Start new project на сайте TanStack Start.
Установите пакеты Intlayer
Установите необходимые пакеты, используя предпочитаемый менеджер пакетов:
Копировать код в буфер обмена
флаг--interactiveне является обязательным. Используйтеintlayer-cli init, если вы являетесь ИИ-агентом.
Эта команда определит вашу среду и установит необходимые пакеты. Например:
Копировать код в буфер обмена
intlayer
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, объявления контента, транспиляции и CLI-команд.
react-intlayer Пакет, который интегрирует Intlayer с приложением React. Он предоставляет провайдеры контекста и хуки для интернационализации в React.
vite-intlayer Включает плагин Vite для интеграции Intlayer с сборщиком Vite, а также промежуточное ПО для определения предпочтительной локали пользователя, управления куки и обработки перенаправления URL.
Конфигурация вашего проекта
Создайте файл конфигурации для настройки языков вашего приложения:
Копировать код в буфер обмена
С помощью этого файла конфигурации вы можете настроить локализованные URL, перенаправление через middleware, имена cookie, расположение и расширение ваших объявлений контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к документации по конфигурации.
Интеграция Intlayer в вашу конфигурацию Vite
Добавьте плагин intlayer в вашу конфигурацию:
Копировать код в буфер обмена
Плагин Vite intlayer() используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов деклараций контента и отслеживает их в режиме разработки. Также он определяет переменные окружения Intlayer внутри приложения Vite. Дополнительно плагин предоставляет алиасы для оптимизации производительности.
Создайте корневой макет
Настройте корневой макет для поддержки интернационализации, используя useParams для определения текущей локали и установив атрибуты lang и dir в теге html.
Копировать код в буфер обмена
Создайте макет локали
Создайте макет, который обрабатывает префикс локали и выполняет валидацию.
Копировать код в буфер обмена
Здесь{-$locale}, это динамический параметр маршрута, который заменяется текущей локалью. Эта нотация делает слот необязательным, позволяя ему работать с такими режимами маршрутизации, как'prefix-no-default'и т. д.
Имейте в виду, что этот слот может вызвать проблемы, если вы используете несколько динамических сегментов в одном маршруте (например,
/{-$locale}/other-path/$anotherDynamicPath/...). Для режима'prefix-all'вы можете предпочесть переключить слот на$locale. Для режимов'no-prefix'или'search-params'вы можете полностью удалить слот.
Объявите ваш контент
Создавайте и управляйте объявлениями контента для хранения переводов:
Копировать код в буфер обмена
Ваши объявления контента могут быть определены в любом месте вашего приложения, как только они включены в директориюcontentDir(по умолчанию,./app). И соответствуют расширению файла объявления контента (по умолчанию,.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
Для получения дополнительной информации обратитесь к документации по объявлениям контента.
Создание компонентов и хуков с поддержкой локализации
Создайте компонент LocalizedLink для навигации с учетом локали:
Копировать код в буфер обмена
Этот компонент выполняет две задачи:
- Удаляет ненужный префикс
{-$locale}из URL. - Вставляет параметр локали в URL, чтобы пользователь был напрямую перенаправлен на локализованный маршрут.
Далее мы можем создать хук useLocalizedNavigate для программной навигации:
Копировать код в буфер обмена
Использование Intlayer на ваших страницах
ИспользуйтеuseIntlayerпо умолчанию: это рекомендуемый способ читать контент внутри компонентов, и компилятор разрешает его в отрисовываемую локаль. Обращайтесь кgetIntlayer/getIntlayerAsyncтолько вне дерева React: вheadмаршрутов, загрузчиках и серверных функциях.
Получайте доступ к вашим словарям контента по всему приложению:
Локализованная домашняя страница
Копировать код в буфер обмена
Если вы хотите использовать ваш контент в атрибуте
string, таком какalt,title,href,aria-labelи т. д., вы можете использовать значение функции, например:htmlКопировать кодКопировать код в буфер обмена
Чтобы узнать больше о хуке useIntlayer, обратитесь к документации.
Создание компонента переключателя локали
Создайте компонент, позволяющий пользователям изменять языки:
Копировать код в буфер обмена
Чтобы узнать больше о хуке useLocale, обратитесь к документации.
Управление атрибутами HTML
Как показано на шаге 5, вы можете управлять атрибутами lang и dir тега html используя useParams в вашем корневом компоненте. Это гарантирует, что правильные атрибуты установлены на сервере и клиенте.
Копировать код в буфер обмена
Добавить middleware
Вы также можете использовать intlayerProxy для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующий файл cookie локали. Если локаль не указана, плагин определит наиболее подходящую локаль на основе предпочтений языка браузера пользователя. Если локаль не обнаружена, он перенаправит на локаль по умолчанию.
Обратите внимание, что для использованияintlayerProxyв production вам необходимо переместить пакетvite-intlayerизdevDependenciesвdependencies.
Начиная с Intlayer v9,intlayerProxy()встроен непосредственно в плагинintlayer()и включен по умолчанию через опциюrouting.enableProxy(trueпо умолчанию). Регистрация его отдельно, как показано ниже, теперь опциональна: она сохранена для обратной совместимости и для настроек, которым нужно контролировать порядок плагинов. Установитеrouting.enableProxy: falseчтобы отключить. Смотрите примечания к выпуску v9.
Копировать код в буфер обмена
Интернационализация ваших метаданных
getIntlayer разрешает синхронно против объединённого словаря, того, который содержит каждую объявленную локаль. head остаётся синхронным и ничего не ожидается, но весь многоязычный словарь вытягивается в chunk маршрута, отправляемый в браузер.
Копировать код в буфер обмена
Лучше всего для небольших словарей метаданных, нескольких локалей или при прототипировании.
getIntlayerAsync (доступно с v9.4) ведёт себя как getIntlayer, но плагин сборки указывает его на chunk для конкретной локали в .intlayer/dynamic_dictionaries/ вместо объединённого словаря. Поэтому страница доставляет только локаль, которую она отображает. Поскольку этот chunk загружается по требованию, head становится async:
Копировать код в буфер обмена
Еслиheadчитает несколько словарей, разрешите их с помощьюPromise.all: ожидание каждогоgetIntlayerAsyncв отдельной строке цепляет запросы вместо параллельного выполнения.
Компромисс: динамический импорт разрешается во время выполнения head, на критическом пути рендера документа. На холодном маршруте это задерживает head на несколько миллисекунд и может немного ухудшить LCP.
Разрешите словарь в loader маршрута и прочитайте его обратно из loaderData в head. Loaders совпадающих маршрутов выполняются параллельно, и staleTime: Infinity говорит TanStack Router, что результат никогда не устаревает, поэтому chunk для конкретной локали разрешается один раз и впоследствии подается из кеша маршрутизатора, оставляя head синхронным.
Копировать код в буфер обмена
headможет быть вызван до того, как loader завершится, поэтомуloaderDataтипизируется как возможноundefined. Сохраните опциональную цепочку или верните резервное название.
Вы сохраняете chunk для конкретной локали без его стоимости на критическом пути head. Цена — это опыт разработчика: содержимое должно быть явно передано из loader в head через loaderData.
Какое разрешение выбрать?
Открыть таблицу в модальном окне для четкого просмотра всех данных
| Статическое разрешение | Динамическое разрешение | Кэшированное динамическое разрешение | |
|---|---|---|---|
| API | getIntlayer | getIntlayerAsync (v9.4+) | getIntlayerAsync in loader (v9.4+) |
head signature | synchronous | async | synchronous, reads loaderData |
| Locales shipped | every declared locale | requested locale only | requested locale only |
| Client navigations | nothing to resolve | re-entered on every match | served from the router cache |
| Developer experience | simplest | one await | content threaded through loaderData |
Получите языковой стандарт в ваших серверных действиях
Вы можете захотеть получить доступ к текущему языковому стандарту из ваших серверных действий или конечных точек API.
Вы можете сделать это, используя помощник getLocale из intlayer.
Вот пример использования серверных функций TanStack Start:
Копировать код в буфер обмена
Управление страницами «не найдено»
Когда пользователь посещает несуществующую страницу, вы можете отобразить пользовательскую страницу «не найдено», и префикс языкового стандарта может повлиять на способ срабатывания страницы «не найдено».
Локализованная главная страница
Если вы хотите использовать ваше содержимое в атрибуте
string, таком какalt,title,href,aria-labelи т. д., вы можете использовать значение функции, например:htmlКопировать кодКопировать код в буфер обмена
Чтобы узнать больше о хуке useIntlayer, обратитесь к документации.
Копировать код в буфер обмена
Чтобы узнать больше о хуке useLocale, обратитесь к документации.
</Step>
Управление атрибутами HTML
return ( {/* ... _/} ); } {/_ ... */} </html> ); }
export const Route = createFileRoute("/{-$locale}/")({ component: RouteComponent, head: async ({ params }) => { const { locale = defaultLocale } = params; const path = "/"; // The path for this route
Копировать код в буфер обмена
Копировать код в буфер обмена
Управление страницами "не найдено"
Когда пользователь посещает несуществующую страницу, вы можете отобразить пользовательскую страницу "не найдено", и префикс локали может повлиять на способ срабатывания страницы "не найдено".
Понимание обработки 404 в TanStack Router с префиксами локали
В TanStack Router обработка страниц 404 с локализованными маршрутами требует многоуровневого подхода:
- Выделенный маршрут 404: Специфический маршрут для отображения интерфейса 404
- Проверка на уровне маршрута: Проверяет префиксы локали и перенаправляет недействительные на 404
- Маршрут catch-all: Перехватывает все несовпадающие пути в сегменте локали
Копировать код в буфер обмена
Копировать код в буфер обмена
Копировать код в буфер обмена
Извлечение содержимого ваших компонентов
НеобязательноЕсли у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.
Чтобы упростить этот процесс, Intlayer предлагает компилятор / экстрактор для преобразования ваших компонентов и извлечения содержимого.
Чтобы настроить его, вы можете добавить раздел compiler в ваш файл intlayer.config.ts:
Копировать код в буфер обмена
import { type IntlayerConfig } from "intlayer";
/**
* Определяет путь к выходным файлам
*/
output: ({ fileName, extension }) => `./${fileName}${extension}`,
/**
* Префикс ключа словаря
*/
dictionaryKeyPrefix: "",
},
};
export default config;
Запустите экстрактор для преобразования компонентов и извлечения содержимого
Копировать код в буфер обмена
bun x intlayer extract import { defineConfig } from "vite"; import { intlayer, intlayerCompiler } from "vite-intlayer";
export default defineConfig({ plugins: [
Копировать код в буфер обмена
], });
Копировать код в буфер обмена
bash packageManager="npm" npm run build # Или npm run dev
Копировать код в буфер обмена
bash packageManager="pnpm" pnpm run build # Or pnpm run dev
Копировать код в буфер обмена
bash packageManager="yarn" yarn build # Or yarn dev
Копировать код в буфер обмена
bash packageManager="bun"
bun run build # Or bun run dev import { localeFlatMap } from "intlayer"; // ... другие импорты
export const pathList = ["", "/about", "/404"];
const localizedPages = localeFlatMap(({ urlPrefix }) => pathList.map((path) => ({
Копировать код в буфер обмена
})) );
export default defineConfig({ plugins: [
Копировать код в буфер обмена
], });
Копировать код в буфер обмена
`typescript fileName="src/routes/sitemap[.]xml.ts"
export const Route = createFileRoute("/sitemap.xml")({ server: {
Копировать код в буфер обмена
}, }); { // ... ваши существующие настройки include: [
Копировать код в буфер обмена
], }
Конфигурация Git
Рекомендуется игнорировать файлы, созданные Intlayer. Это позволяет избежать их фиксации в репозитории Git.
Для этого вы можете добавить следующие инструкции в файл .gitignore:
Копировать код в буфер обмена
`
Расширение VS Code
Чтобы улучшить опыт разработки с Intlayer, вы можете установить официальное расширение Intlayer VS Code.
Установить из VS Code Marketplace
Это расширение предоставляет:
- Автодополнение для ключей переводов.
- Обнаружение ошибок в реальном времени для отсутствующих переводов.
- Встроенные предпросмотры переведённого контента.
- Быстрые действия для удобного создания и обновления переводов.
Для получения дополнительной информации об использовании расширения см. документацию расширения Intlayer VS Code.
Дальше
Чтобы пойти дальше, вы можете реализовать visual editor или экстернализировать ваш контент с помощью CMS.
