Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Порівняння статичного, динамічного та кешованого динамічного розвʼязання словників метаданих у функціях 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
Встановіть необхідні пакети, використовуючи обраний менеджер пакетів:
Скопіюйте код у буфер обміну
прапорець--interactiveне є обов'язковим. Використовуйтеintlayer-cli init, якщо ви є ШІ-агентом.
Ця команда виявить ваше середовище та встановить необхідні пакети. Наприклад:
Скопіюйте код у буфер обміну
intlayer
Основний пакет, який надає інструменти інтернаціоналізації для керування конфігурацією, перекладу, оголошення контенту, транспіляції та команд CLI.
react-intlayer Пакет, який інтегрує Intlayer із React-застосунком. Надає провайдери контексту та хуки для інтернаціоналізації в React.
vite-intlayer Містить плагін Vite для інтеграції Intlayer з бандлером Vite, а також middleware для визначення пріоритетної локалі користувача, керування cookie та обробки перенаправлень URL.
Конфігурація вашого проєкту
Створіть файл конфігурації, щоб налаштувати мови вашого додатка:
Скопіюйте код у буфер обміну
За допомогою цього файлу конфігурації ви можете налаштувати локалізовані URL-адреси, перенаправлення через middleware, імена cookie, розташування та розширення декларацій контенту, вимкнути логування Intlayer у консолі та інше. Для повного переліку доступних параметрів див. документацію з конфігурації.
Інтегруйте Intlayer у вашу конфігурацію Vite
Додайте плагін intlayer до вашої конфігурації:
Скопіюйте код у буфер обміну
Плагін Vite intlayer() використовується для інтеграції Intlayer з Vite. Він забезпечує побудову файлів декларацій контенту та відстежує їх у режимі розробки. Він визначає змінні середовища Intlayer у Vite-застосунку. Додатково він надає аліаси для оптимізації продуктивності.
Створіть кореневий Layout
Налаштуйте кореневий layout для підтримки інтернаціоналізації, використовуючи useParams для визначення поточної локалі та встановлення атрибутів lang і dir на тезі html.
Скопіюйте код у буфер обміну
Створіть Locale Layout
Створіть layout, який обробляє префікс локалі та виконує валідацію.
Скопіюйте код у буфер обміну
Тут{-$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Копіювати кодСкопіюйте код у буфер обміну
Щоб дізнатися більше про hook useIntlayer, звернітеся до документації.
Створення компоненту перемикача локалей
Створіть компонент, щоб дозволити користувачам змінювати мови:
Скопіюйте код у буфер обміну
Щоб дізнатися більше про hook 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 залишається синхронним, і нічого не очікується, але весь багатомовний словник витягується в шматок маршруту, надісланий браузеру.
Скопіюйте код у буфер обміну
Найкраще для невеликих словників метаданих, кількох локалей або під час прототипування.
getIntlayerAsync (доступно з v9.4) поводиться як getIntlayer, але плагін побудови вказує його на шматок для кожної локалі в .intlayer/dynamic_dictionaries/ замість об'єднаного словника. Сторінка тому поставляється тільки локаллю, яку вона відображає. Оскільки цей шматок завантажується за запитом, head стає async:
Скопіюйте код у буфер обміну
Якщоheadчитає кілька словників, розв'яжіть їх за допомогоюPromise.all: очікування кожногоgetIntlayerAsyncна власній лінії ланцюгує запити замість того, щоб запускати їх паралельно.
Компромис: динамічний імпорт розв'язується під час виконання head, на критичному шляху рендерування документа. На холодному маршруті це затримує head на кілька мілісекунд і може трохи зменшити LCP.
Розв'яжіть словник у маршруті loader і прочитайте його назад із loaderData у head. Завантажувачі відповідних маршрутів запускаються паралельно, а staleTime: Infinity повідомляє TanStack Router, що результат ніколи не стає застарілим, тому шматок для кожної локалі розв'язується один раз і служить з кешу маршрутизатора після цього, залишаючи head синхронним.
Скопіюйте код у буфер обміну
headможе бути викликаний до того, як завантажувач розв'яжеться, томуloaderDataнабирає тип як можливоundefined. Зберігайте необов'язковий ланцюг, або повертайте резервний заголовок.
Ви зберігаєте шматок для кожної локалі без сплати його вартості на критичному шляху head. Ціна - досвід розробника: вміст має бути явно потокований із завантажувача до 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 endpoints.
Ви можете це зробити, використовуючи помічник 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
Скопіюйте код у буфер обміну
Скопіюйте код у буфер обміну
Скопіюйте код у буфер обміну
Скопіюйте код у буфер обміну
Витягніть вміст ваших компонентів
Необов'язковоЯкщо у вас є існуюча кодова база, перетворення тисяч файлів може зайняти багато часу.
Щоб спростити цей процес, 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"
I'm ready to audit the translation. Please provide the content for BLOCK 4 of 5 in both English (en) and Ukrainian (uk) so I can proceed with the audit.---
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 Extension.
Встановити з VS Code Marketplace
Це розширення забезпечує:
- Автодоповнення для ключів перекладу.
- Виявлення помилок у реальному часі для відсутніх перекладів.
- Вбудовані переглади перекладеного контенту.
- Швидкі дії для простого створення та оновлення перекладів.
Для детальнішої інформації про використання розширення див. документацію розширення Intlayer VS Code Extension.
Йти далі
Щоб йти далі, ви можете реалізувати візуальний редактор або екстерналізувати ваш вміст за допомогою CMS.
