Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Ця документація застаріла, базову версію оновлено станом на 29 серпня 2026 р..
Перейти до англійської версії документаІсторія версій
- "Порівняння статичного, динамічного та кешованого динамічного розвʼязання словників метаданих у функціях 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
Вміст цієї сторінки перекладено за допомогою штучного інтелекту.
Переглянути останню версію оригінального вмісту англійськоюЯкщо у вас є ідея щодо покращення цієї документації, будь ласка, долучіться, надіславши pull request на 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%.
Організація вмісту за окремими областями (scoping) полегшує технічне обслуговування великомасштабних програм. Ви можете скопіювати або видалити окрему папку функцій без розумового навантаження перегляду всієї кодової бази вмісту. Крім того, Intlayer повністю типізований (fully typed), щоб забезпечити точність вашого вмісту.
Спільне розміщення вмісту зменшує контекст, необхідний для великих мовних моделей (LLM). Intlayer також постачається з набором інструментів, наприклад CLI для перевірки відсутніх перекладів,LSP, MCP і agent skills, щоб зробити роботу розробника (DX) ще зручнішою для агентів ШІ.
Використовуйте автоматизацію для перекладу в конвеєрі CI/CD за допомогою LLM за вашим вибором за рахунок вашого постачальника штучного інтелекту. Intlayer також пропонує компілятор для автоматизації екстракція вмісту, а також веб-платформу, щоб допомогти перекладати у фоновому режимі.
Підключення великих файлів JSON до компонентів може призвести до проблем з продуктивністю та реакцією. Intlayer оптимізує завантаження вмісту під час збірки (build time).
Більше ніж просто рішення i18n, Intlayer пропонує власний візуальний редактор і повний CMS, щоб допомогти вам керувати своїм багатомовним вмістом у реальному часі, спрощуючи співпрацю з перекладачами, копірайтерами та іншими членами команди. Контент можна зберігати локально та/або віддалено.
Покроковий посібник з налаштування Intlayer у застосунку Tanstack Start
Перегляньте Шаблон додатка на GitHub.
Створіть проект
Почніть зі створення нового проєкту TanStack Start, дотримуючись інструкції Створення нового проєкту на сайті TanStack Start.
Встановіть пакети Intlayer
Встановіть необхідні пакети, використовуючи обраний менеджер пакетів:
bashКопіювати кодСкопіюйте код у буфер обміну
прапорець
--interactiveне є обов'язковим. Використовуйтеintlayer-cli init, якщо ви є ШІ-агентом.Ця команда виявить ваше середовище та встановить необхідні пакети. Наприклад:
bashКопіювати кодСкопіюйте код у буфер обміну
intlayer
Основний пакет, який надає інструменти інтернаціоналізації для керування конфігурацією, перекладу, оголошення контенту, транспіляції та команд CLI.
react-intlayer Пакет, який інтегрує Intlayer із React-застосунком. Надає провайдери контексту та хуки для інтернаціоналізації в React.
vite-intlayer Містить плагін Vite для інтеграції Intlayer з бандлером Vite, а також middleware для визначення пріоритетної локалі користувача, керування cookie та обробки перенаправлень URL.
Конфігурація вашого проєкту
Створіть файл конфігурації, щоб налаштувати мови вашого додатка:
intlayer.config.tsКопіювати кодСкопіюйте код у буфер обміну
За допомогою цього файлу конфігурації ви можете налаштувати локалізовані URL-адреси, перенаправлення через middleware, імена cookie, розташування та розширення декларацій контенту, вимкнути логування Intlayer у консолі та інше. Для повного переліку доступних параметрів див. документацію з конфігурації.
Інтегруйте Intlayer у вашу конфігурацію Vite
Додайте плагін intlayer до вашої конфігурації:
vite.config.tsКопіювати кодСкопіюйте код у буфер обміну
Плагін Vite
intlayer()використовується для інтеграції Intlayer з Vite. Він забезпечує побудову файлів декларацій контенту та відстежує їх у режимі розробки. Він визначає змінні середовища Intlayer у Vite-застосунку. Додатково він надає аліаси для оптимізації продуктивності.Створіть кореневий Layout
Налаштуйте кореневий layout для підтримки інтернаціоналізації, використовуючи
useParamsдля визначення поточної локалі та встановлення атрибутівlangіdirна тезіhtml.src/routes/__root.tsxКопіювати кодСкопіюйте код у буфер обміну
Створіть Locale Layout
Створіть layout, який обробляє префікс локалі та виконує валідацію.
src/routes/{-$locale}/route.tsxКопіювати кодСкопіюйте код у буфер обміну
Тут
{-$locale}, динамічний параметр маршруту, який підставляється поточним локалем. Ця нотація робить слот необов'язковим, що дозволяє використовувати його з режимами маршрутизації, такими як'prefix-no-default'тощо.Зауважте, що цей слот може викликати проблеми, якщо ви використовуєте кілька динамічних сегментів в одному маршруті (наприклад,
/{-$locale}/other-path/$anotherDynamicPath/...). У режимі'prefix-all'можливо краще змінити слот на$locale. У режимах'no-prefix'або'search-params'ви можете повністю видалити слот.Оголосіть ваш контент
Створюйте й керуйте деклараціями контенту для зберігання перекладів:
src/contents/page.content.tsКопіювати кодСкопіюйте код у буфер обміну
Оголошення вмісту можна визначати будь-де у вашому застосунку, за умови, що вони включені у директорію
contentDir(за замовчуванням,./app) та відповідають розширенню файлу декларації вмісту (за замовчуванням,.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).Для детальнішої інформації зверніться до документації з оголошення вмісту.
Створіть компоненти та хуки, що враховують локаль
Створіть компонент
LocalizedLinkдля навігації з урахуванням локалі:src/components/localized-link.tsxКопіювати кодСкопіюйте код у буфер обміну
Цей компонент має дві цілі:
- Видалити непотрібний префікс
{-$locale}з URL. - Вставити параметр локалі в URL, щоб користувач був безпосередньо перенаправлений на локалізований маршрут.
Потім ми можемо створити хук
useLocalizedNavigateдля програмної навігації:src/hooks/useLocalizedNavigate.tsxКопіювати кодСкопіюйте код у буфер обміну
- Видалити непотрібний префікс
Використовуйте Intlayer на ваших сторінках
Використовуйте
useIntlayerза замовчуванням: це рекомендований спосіб читати контент усередині компонентів, і компілятор розвʼязує його у локаль, яка рендериться. Звертайтеся доgetIntlayer/getIntlayerAsyncлише поза деревом React: уheadмаршрутів, лоадерах і серверних функціях.Отримуйте доступ до словників контенту по всьому застосунку:
Локалізована домашня сторінка
src/routes/{-$locale}/index.tsxКопіювати кодСкопіюйте код у буфер обміну
Якщо ви хочете використовувати вміст у атрибуті
string, такому якalt,title,href,aria-labelтощо, ви можете використовувати значення функції, наприклад:htmlКопіювати кодСкопіюйте код у буфер обміну
Щоб дізнатися більше про hook
useIntlayer, звернітеся до документації.Створення компоненту перемикача локалей
Створіть компонент, щоб дозволити користувачам змінювати мови:
src/components/locale-switcher.tsxКопіювати кодСкопіюйте код у буфер обміну
Щоб дізнатися більше про hook
useLocale, звернітеся до документації.Управління HTML атрибутами
Як видно з кроку 5, ви можете керувати атрибутами
langтаdirтегаhtmlза допомогоюuseParamsу вашому кореневому компоненті. Це забезпечує встановлення правильних атрибутів на сервері та клієнті.src/routes/__root.tsxКопіювати кодСкопіюйте код у буфер обміну
Додавання middleware
Ви також можете використовувати
intlayerProxyдля додавання маршрутизації на стороні сервера до вашої програми. Цей плагін автоматично визначить поточну локаль на основі URL-адреси та встановить відповідну cookie-файл локалі. Якщо локаль не вказана, плагін визначить найбільш відповідну локаль на основі параметрів мови браузера користувача. Якщо локаль не виявлена, він перенаправить на локаль за замовчуванням.Зауважте, що для використання
intlayerProxyв production, вам потрібно переместити пакетvite-intlayerзdevDependenciesнаdependencies.З Intlayer v9,
intlayerProxy()входить безпосередньо в плагінintlayer()і за замовчуванням увімкнено через параметрrouting.enableProxy(trueза замовчуванням). Реєстрація його окремо, як показано нижче, тепер опціональна: вона збережена для зворотної сумісності та для конфігурацій, які потребують контролю порядку плагінів. Встановітьrouting.enableProxy: falseдля вимкнення. Див. примітки до версії v9.vite.config.tsКопіювати кодСкопіюйте код у буфер обміну
Інтернаціоналізація ваших метаданих
getIntlayerсинхронно розв'язує словник об'єднаний, той, який утримує кожну оголошену локаль.headзалишається синхронним, і нічого не очікується, але весь багатомовний словник витягується в шматок маршруту, надісланий браузеру.src/routes/{-$locale}/index.tsxКопіювати кодСкопіюйте код у буфер обміну
Найкраще для невеликих словників метаданих, кількох локалей або під час прототипування.
getIntlayerAsync(доступно з v9.4) поводиться якgetIntlayer, але плагін побудови вказує його на шматок для кожної локалі в.intlayer/dynamic_dictionaries/замість об'єднаного словника. Сторінка тому поставляється тільки локаллю, яку вона відображає. Оскільки цей шматок завантажується за запитом,headстаєasync:src/routes/{-$locale}/index.tsxКопіювати кодСкопіюйте код у буфер обміну
Якщо
headчитає кілька словників, розв'яжіть їх за допомогоюPromise.all: очікування кожногоgetIntlayerAsyncна власній лінії ланцюгує запити замість того, щоб запускати їх паралельно.Компромис: динамічний імпорт розв'язується під час виконання
head, на критичному шляху рендерування документа. На холодному маршруті це затримує head на кілька мілісекунд і може трохи зменшити LCP.Розв'яжіть словник у маршруті
loaderі прочитайте його назад ізloaderDataуhead. Завантажувачі відповідних маршрутів запускаються паралельно, аstaleTime: Infinityповідомляє TanStack Router, що результат ніколи не стає застарілим, тому шматок для кожної локалі розв'язується один раз і служить з кешу маршрутизатора після цього, залишаючиheadсинхронним.src/routes/{-$locale}/index.tsxКопіювати кодСкопіюйте код у буфер обміну
headможе бути викликаний до того, як завантажувач розв'яжеться, томуloaderDataнабирає тип як можливоundefined. Зберігайте необов'язковий ланцюг, або повертайте резервний заголовок.Ви зберігаєте шматок для кожної локалі без сплати його вартості на критичному шляху head. Ціна - досвід розробника: вміст має бути явно потокований із завантажувача до
headчерезloaderData.Яку резолюцію вибрати?
Показати весь вміст таблиціВідкрийте таблицю в модальному вікні, щоб чітко переглянути всі дані
Статична резолюція Динамічна резолюція Кешована динамічна резолюція API getIntlayergetIntlayerAsync(v9.4+)getIntlayerAsyncinloader(v9.4+)headsignaturesynchronous asyncsynchronous, reads loaderDataLocales 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 awaitcontent threaded through loaderDataОтримайте локаль у своїх серверних діях
Можливо, вам потрібно отримати доступ до поточної локалі всередині ваших серверних дій або API endpoints. Ви можете це зробити, використовуючи помічник
getLocaleзintlayer.Ось приклад використання серверних функцій TanStack Start:
src/routes/{-$locale}/index.tsxКопіювати кодСкопіюйте код у буфер обміну
Керування сторінками «Не знайдено»
Коли користувач переходить на неіснуючу сторінку, ви можете відобразити власну сторінку «не знайдено», і префікс локалі може впливати на те, як ця сторінка викликається.
Розуміння обробки 404 у TanStack Router з префіксами локалі
У TanStack Router обробка сторінок 404 для локалізованих маршрутів вимагає багаторівневого підходу:
- Виділений маршрут 404: спеціальний маршрут для відображення інтерфейсу сторінки 404
- Валідація на рівні маршруту: перевіряє префікси локалі та перенаправляє некоректні на 404
- Catch-all route: Перехоплює будь-які невідповідні шляхи в межах сегмента локалі
src/routes/{-$locale}/404.tsxКопіювати кодСкопіюйте код у буфер обміну
src/routes/{-$locale}/route.tsxКопіювати кодСкопіюйте код у буфер обміну
src/routes/{-$locale}/$.tsxКопіювати кодСкопіюйте код у буфер обміну
Витягніть вміст ваших компонентів
Необов'язковоisOptional={true}>
Якщо у вас є існуюча кодова база, перетворення тисяч файлів може зайняти багато часу.
Щоб спростити цей процес, Intlayer пропонує компілятор / екстрактор для перетворення ваших компонентів і витягування вмісту.
Щоб налаштувати його, ви можете додати розділ
compilerу свій файлintlayer.config.ts: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;Запустіть екстрактор для перетворення компонентів і витягування вмісту
bashКопіювати кодСкопіюйте код у буфер обміну
Since v9, the
intlayerCompileris included in theintlayerplugin. So you don't need to add it manually.Оновіть свій
vite.config.ts, щоб включити плагінintlayerCompiler:vite.config.tsКопіювати кодСкопіюйте код у буфер обміну
bashКопіювати кодСкопіюйте код у буфер обміну
Pre-render & Generate Sitemap
Intlayer має вбудований генератор sitemap, який допомагає легко створити sitemap для вашої програми. Він обробляє локалізовані маршрути та додає необхідні метадані для пошукових систем.
Карта сайту, згенерована Intlayer, підтримує простір імен
xhtml:link(Hreflang XML Extensions). На відміну від генераторів карт сайту за замовчуванням, які лише перелічують необроблені URL-адреси, Intlayer автоматично створює необхідні двосторонні посилання між усіма мовними версіями сторінки (наприклад,/about,/about?lang=frта/about?lang=es). Це забезпечує правильне індексування пошуковими системами та подачу правильної мовної версії відповідній аудиторії.Щоб використовувати це, спочатку потрібно налаштувати ваш
vite.config.tsдля увімкнення попередньої обробки локалізованих маршрутів і вимкнення генерування карти сайту TanStack Start за замовчуванням.vite.config.tsКопіювати кодСкопіюйте код у буфер обміну
Потім створіть маршрут
src/routes/sitemap[.]xml.ts, який використовує функціюgenerateSitemap:src/routes/sitemap[.]xml.tsКопіювати кодСкопіюйте код у буфер обміну
Налаштувати TypeScript
Intlayer використовує module augmentation для отримання переваг TypeScript та зміцнення вашого codebase.
Переконайтеся, що ваша конфігурація TypeScript включає автоматично згенеровані типи:
tsconfig.jsonКопіювати кодСкопіюйте код у буфер обміну
Налаштування Git
Рекомендується ігнорувати файли, згенеровані Intlayer. Це дозволить уникнути їх коміту в ваш Git-репозиторій.
Для цього ви можете додати наступні інструкції до файлу .gitignore:
Скопіюйте код у буфер обміну
Розширення VS Code
Щоб покращити ваш досвід розробки за допомогою Intlayer, ви можете встановити офіційне розширення Intlayer VS Code Extension.
Встановити з VS Code Marketplace
Це розширення забезпечує:
- Автодоповнення для ключів перекладу.
- Виявлення помилок у реальному часі для відсутніх перекладів.
- Вбудовані переглади перекладеного контенту.
- Швидкі дії для простого створення та оновлення перекладів.
Для детальнішої інформації про використання розширення див. документацію розширення Intlayer VS Code Extension.
Йти далі
Щоб йти далі, ви можете реалізувати візуальний редактор або екстерналізувати ваш вміст за допомогою CMS.
Посилання на документацію
- Документація Intlayer
- Документація Tanstack Start
- useIntlayer hook
- useLocale hook
- Content Declaration
- Configuration
Часто задавані запитання
TanStack Start не має власного шару i18n:
i18next/react-i18nextтаreact-intl: бібліотеки з завантаженням JSON під час виконання.Intlayer: підтримка SSR та SSG, оголошення поруч із компонентом, повна типізація TypeScript, переклад AI та візуальний редактор.
Див. чому Intlayer.
Значно менше, ніж рішення на основі просторів імен, оскільки сторінка ніколи не завантажує каталог, який вона не рендерить. Компілятор часу збирання замінює виклики useIntlayer точними записами словника, а динамічні словники розділяють залишок за локалями, зменшуючи бандл до 50%. Див. оптимізацію бандла та бенчмарк.
Так, за допомогою посібників з міграції або адаптерів сумісності.
Так. sync JSON плагін зберігає ваші файли /messages/{locale}/{namespace}.json як джерело істини та генерує словники Intlayer з них в обох напрямках. sync PO плагін робить те ж саме для gettext каталогів, а файли для окремих локалей дозволяють розділити контент за мовами замість групування локалей в один файл.
Ні. Запустіть npx intlayer extract, і Intlayer прочитає ваші файли, витягне призначені для користувача рядки і створить файл .content поруч із кожним компонентом, завдяки чому ви переглядаєте diff замість копіювання рядків у каталог вручну.
Для повної автоматизації Intlayer Compiler робить те саме під час збирання: сканує код під час кожної зміни, генерує словники та синхронізує їх із HMR.
Варто знати два обмеження перед увімкненням компілятора. Він працює за допомогою статичного аналізу, тому рядки, які існують лише під час виконання, такі як коди помилок 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.
- Навички агента (Agent skills): спеціалізовані навички
intlayer-config,intlayer-cliтаintlayer-content. - Плагін ESLint: правило
no-raw-textвідстежує жорстко закодовані рядки.
