\n\n
\n\n\n\n

{$content.title}

\n\n

{@const Title = $content.title}</h1>\n<!-- Отобразить контент как строку -->\n<div aria-label={$content.title.value}></div>\n<div aria-label={$content.title.toString()}></div>\n<div aria-label={String($content.title)}></div>\n\n> Если ваше приложение уже существует, вы можете использовать [Intlayer Compiler](/ru/doc/compiler) в сочетании с [командой extract](/ru/doc/concept/cli/extract), чтобы преобразовать тысячи компонентов за одну секунду.\n```\n\n</Step>\n\n<Step number={6} title=\"Изменение языка вашего контента\" isOptional={true}>\n\n```svelte fileName=\"src/App.svelte\"\n<script lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Получить информацию о локали и функцию setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Обработка изменения локали\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n</script>\n\n<div>\n <select value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n <option value={loc}>\n {getLocaleName(loc)}\n </option>\n {/each}\n </select>\n</div>\n```\n\n</Step>\n\n<Step number={7} title=\"Отображение Markdown\" isOptional={true}>\n\nIntlayer поддерживает отображение контента в формате Markdown непосредственно в вашем приложении на Svelte. По умолчанию Markdown обрабатывается как простой текст. Чтобы преобразовать Markdown в насыщенный HTML, вы можете интегрировать `@humanspeak/svelte-markdown` или другой парсер Markdown.\n\n> Чтобы узнать, как объявлять контент в формате markdown с использованием пакета `intlayer`, смотрите [документацию по markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/ru/dictionary/markdown.md).\n\n```svelte fileName=\"src/App.svelte\"\n<script>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // рендеринг содержимого markdown как строки\n return markdown;\n );\n</script>\n\n<h1>{$content.markdownContent}</h1>\n```\n\n> Вы также можете получить доступ к данным front-matter вашего markdown через свойство `content.markdownContent.metadata.xxx`.\n\n</Step>\n\n<Step number={8} title=\"Настройка редактора / CMS intlayer\" isOptional={true}>\n\nДля настройки редактора intlayer необходимо следовать [документации редактора intlayer](/ru/doc/concept/editor).\n\nДля настройки CMS intlayer необходимо следовать [документации CMS intlayer](/ru/doc/concept/cms).\n\n</Step>\n\n<Step number={7} title=\"Добавьте локализованную маршрутизацию в ваше приложение\" isOptional={true}>\n\nДля обработки локализованной маршрутизации в вашем приложении на Svelte вы можете использовать `svelte-spa-router` вместе с `localeFlatMap` из Intlayer для генерации маршрутов для каждой локали.\n\nСначала установите `svelte-spa-router`:\n\n```bash packageManager=\"npm\"\nnpm install svelte-spa-router\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add svelte-spa-router\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add svelte-spa-router\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add svelte-spa-router\n```\n\nЗатем создайте файл `Router.svelte` для определения ваших маршрутов:\n\n```svelte fileName=\"src/Router.svelte\"\n<script lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n</script>\n\n<Router {routes} />\n```\n\nОбновите ваш `main.ts`, чтобы монтировать компонент `Router` вместо `App`:\n\n```typescript fileName=\"src/main.ts\"\nimport { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n```\n\nНаконец, обновите ваш `App.svelte`, чтобы принимать проп `locale` и использовать его с `useIntlayer`:\n\n```svelte fileName=\"src/App.svelte\"\n<script lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n// Используем хук useIntlayer для получения контента на основе текущей локали\n$: content = useIntlayer('app', locale);\n</script>\n\n<main>\n <div class=\"locale-switcher-container\">\n <LocaleSwitcher currentLocale={locale} />\n </div>\n\n <!-- ... остальная часть вашего приложения ... -->\n</main>\n```\n\n#### Настройка маршрутизации на стороне сервера (необязательно)\n\nПараллельно вы также можете использовать `intlayerProxy` для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующее cookie с локалью. Если локаль не указана, плагин определит наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не будет обнаружена, произойдет перенаправление на локаль по умолчанию.\n\n> Обратите внимание, что для использования `intlayerProxy` в продакшене необходимо перевести пакет `vite-intlayer` из `devDependencies` в `dependencies`.\n\n```typescript {3,7} fileName=\"vite.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n</Step>\n\n<Step number={8} title=\"Изменение URL при смене локали\" isOptional={true}>\n\nЧтобы позволить пользователям переключать языки и обновлять URL соответствующим образом, вы можете создать компонент `LocaleSwitcher`. Этот компонент будет использовать `getLocalizedUrl` из `intlayer` и `push` из `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n<script lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Получение информации о локали\nconst { locale, availableLocales } = useLocale();\n\n// Обработка изменения локали\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n</script>\n\n<div class=\"locale-switcher\">\n <select value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n <option value={loc}>\n {getLocaleName(loc)}\n </option>\n {/each}\n </select>\n</div>\n```\n\n</Step>\n\n<Step number={1} title=\"Извлечение содержимого ваших компонентов\" isOptional={true}>\n\nЕсли у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.\n\nЧтобы упростить этот процесс, Intlayer предлагает [компилятор](/ru/doc/compiler) / [экстрактор](/ru/doc/concept/cli/extract) для преобразования ваших компонентов и извлечения содержимого.\n\nЧтобы настроить его, вы можете добавить раздел `compiler` в ваш файл `intlayer.config.ts`:\n\n```typescript fileName=\"intlayer.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Остальная часть вашей конфигурации\n compiler: {\n /**\n * Указывает, должен ли быть включен компилятор.\n */\n enabled: true,\n\n /**\n * Определяет путь к выходным файлам\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.\n */\n saveComponents: false,\n\n /**\n * Префикс ключа словаря\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n```\n\n<Tabs>\n <Tab value='Команда извлечения'>\n\nЗапустите экстрактор для преобразования компонентов и извлечения содержимого\n\n```bash packageManager=\"npm\"\nnpx intlayer extract\n```\n\n```bash packageManager=\"pnpm\"\npnpm intlayer extract\n```\n\n```bash packageManager=\"yarn\"\nyarn intlayer extract\n```\n\n```bash packageManager=\"bun\"\nbun x intlayer extract\n```\n\n </Tab>\n <Tab value='Компилятор Babel'>\n\nОбновите ваш `vite.config.ts`, чтобы включить плагин `intlayerCompiler`:\n\n```ts fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Добавляет плагин компилятора\n ],\n});\n```\n\n```bash packageManager=\"npm\"\nnpm run build # Или npm run dev\n```\n\n```bash packageManager=\"pnpm\"\npnpm run build # Or pnpm run dev\n```\n\n```bash packageManager=\"yarn\"\nyarn build # Or yarn dev\n```\n\n```bash packageManager=\"bun\"\nbun run build # Or bun run dev\n```\n\n </Tab>\n</Tabs>\n</Step>\n\n</Steps>\n\n### Конфигурация Git\n\nРекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.\n\nДля этого вы можете добавить следующие инструкции в ваш файл `.gitignore`:\n\n```bash\n# Игнорировать файлы, сгенерированные Intlayer\n.intlayer\n```\n\n### Расширение VS Code\n\nЧтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение **Intlayer для VS Code**.\n\n[Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nЭто расширение предоставляет:\n\n- **Автозаполнение** ключей переводов.\n- **Обнаружение ошибок в реальном времени** для отсутствующих переводов.\n- **Встроенный просмотр** переведенного контента.\n- **Быстрые действия** для удобного создания и обновления переводов.\n\nДля получения дополнительной информации о том, как использовать расширение, обратитесь к [документации расширения Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### (Опционально) Sitemap и robots.txt (генерация на сборке)\n\nIntlayer предоставляет `generateSitemap` и `getMultilingualUrls` - утилиты, которые формируют многоязычные `sitemap.xml` и `robots.txt` для краулеров и позволяют автоматически записать их в `public/`. Обычно запускают небольшой Node-скрипт **до** Vite (например, npm-хуки `predev` / `prebuild`).\n\n#### Sitemap\n\nГенератор sitemap учитывает локали и добавляет нужные метаданные.\n\n> Поддерживается пространство имён `xhtml:link` (hreflang). Вместо плоского списка URL Intlayer связывает все языковые версии страницы в обе стороны (например `/about`, `/fr/about` или `/about?lang=fr` в зависимости от режима маршрутизации).\n\n#### Robots.txt\n\nИспользуйте `getMultilingualUrls`, чтобы правила `Disallow` покрывали все локализованные варианты путей.\n\n#### 1. Файл `generate-seo.mjs` в корне проекта\n\n```javascript fileName=\"generate-seo.mjs\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n```\n\nПакет `intlayer` должен быть установлен. Для продакшена задайте `SITE_URL` в окружении (например в CI).\n\n> Для Node ESM предпочтительно `generate-seo.mjs`. Для `generate-seo.js` укажите `\"type\": \"module\"` в `package.json` или включите ESM иначе.\n\n#### 2. Запуск скрипта до Vite\n\n```json fileName=\"package.json\"\n{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n```\n\nПодстройте команды для pnpm или yarn. Скрипт можно вызывать из CI или другого шага.\n\n### Продвинуться дальше\n\nЧтобы продвинуться дальше, вы можете реализовать [визуальный редактор](/ru/doc/concept/editor) или вынести ваш контент, используя [CMS](/ru/doc/concept/cms).\n","description":"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Svelte. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.","url":"https://intlayer.org/ru/doc/environment/vite-and-svelte","datePublished":"2025-04-18","dateModified":"2026-05-31","version":"8.9.0","keywords":"Интернационализация, Документация, Intlayer, Vite, Svelte, JavaScript","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Разработчики, менеджеры контента"}}</script></head><body class="relative flex size-full min-h-screen flex-col overflow-auto overflow-x-clip scroll-smooth bg-background leading-8 transition md:flex"><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-105"></ol></div><!--$--><script>((e, i, s, u, m, a, l, h) => { let d = document.documentElement, w = ["light", "dark"]; function p(n) { (Array.isArray(e) ? e : [e]).forEach((y) => { let k = y === "class", S = k && a ? m.map((f) => a[f] || f) : m; k ? (d.classList.remove(...S), d.classList.add(a && a[n] ? a[n] : n)) : d.setAttribute(y, n); }), R(n); } function R(n) { h && w.includes(n) && (d.style.colorScheme = n); } function c() { return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; } if (u) p(u); else try { let n = localStorage.getItem(i) || s; p(l && n === "system" ? c() : n); } catch (n) {} })("data-theme","theme","system",null,["light","dark"],null,true,true)</script><nav class="sticky top-0 z-50 flex w-full items-center bg-card/95 px-4 py-3 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur"><div class="group/dropdown relative flex items-center" aria-label="DropDown navbar-logo" id="dropdown-container-navbar-logo"><a aria-label="Логотип компании - Перейти на главную страницу" aria-current="page" id="dropdown-trigger-navbar-logo" aria-haspopup="true" aria-controls="dropdown-panel-navbar-logo" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral active" href="/ru" target="_self" data-status="active"><svg width="2704" height="517" viewBox="0 0 2704 517" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" role="img" aria-label="Intlayer logo" class="max-h-6 w-auto flex-auto text-text"><path fill-rule="evenodd" clip-rule="evenodd" d="M5 46C5 21.1472 25.1472 1 50 1H295C319.853 1 340 21.1472 340 46C340 70.8528 319.853 91 295 91H50C25.1472 91 5 70.8528 5 46ZM50 176C25.1472 176 5 196.147 5 221C5 245.853 25.1472 266 50 266H430C454.853 266 475 245.853 475 221C475 196.147 454.853 176 430 176H50ZM50 349C25.1472 349 5 369.147 5 394C5 418.853 25.1472 439 50 439H230C254.853 439 275 418.853 275 394C275 369.147 254.853 349 230 349H50ZM841.5 38V403H914.5V38H841.5ZM991.215 143V403H1060.21V250C1060.21 239 1062.71 229.5 1067.71 221.5C1073.05 213.167 1080.38 206.667 1089.71 202C1099.05 197 1109.71 194.5 1121.71 194.5C1137.71 194.5 1149.38 199.5 1156.71 209.5C1164.05 219.167 1167.71 234.833 1167.71 256.5V403H1236.21V243C1236.21 206.667 1228.71 180.167 1213.71 163.5C1199.05 146.5 1176.05 138 1144.71 138C1126.05 138 1109.55 141 1095.21 147C1081.21 152.667 1068.88 161.5 1058.21 173.5H1057.21L1056.71 143H991.215ZM1341.52 389C1355.52 401.667 1378.19 408 1409.52 408C1420.52 408 1431.19 407.167 1441.52 405.5C1451.85 404.167 1462.69 401.833 1474.02 398.5L1468.52 344C1461.85 346.333 1454.52 348.167 1446.52 349.5C1438.85 350.833 1431.52 351.5 1424.52 351.5C1411.52 351.5 1402.52 348.5 1397.52 342.5C1392.52 336.167 1390.02 325.167 1390.02 309.5V196.5H1474.52V143H1390.02V58H1321.02V143H1264.52V196.5H1321.02V326.5C1321.02 355.5 1327.85 376.333 1341.52 389ZM1536.71 38V403H1606.71V38H1536.71ZM1681.19 386.5C1696.19 400.833 1716.52 408 1742.19 408C1759.19 408 1775.86 404.833 1792.19 398.5C1808.52 392.167 1821.36 383.667 1830.69 373H1831.19L1832.19 403H1897.69V239C1897.69 214 1894.19 194.167 1887.19 179.5C1880.19 164.5 1869.02 153.833 1853.69 147.5C1838.36 141.167 1817.36 138 1790.69 138C1769.69 138 1748.52 139.833 1727.19 143.5C1706.19 146.833 1687.02 151.667 1669.69 158L1678.19 211C1694.19 204.667 1711.19 199.833 1729.19 196.5C1747.19 192.833 1764.52 191 1781.19 191C1793.86 191 1803.52 192.333 1810.19 195C1817.19 197.333 1822.02 201.667 1824.69 208C1827.69 214.333 1829.19 223.333 1829.19 235H1794.69C1751.36 235 1717.86 243.167 1694.19 259.5C1670.86 275.833 1659.19 299 1659.19 329C1659.19 353 1666.52 372.167 1681.19 386.5ZM1798.69 350C1789.36 354 1778.86 356 1767.19 356C1753.52 356 1742.86 353 1735.19 347C1727.86 341 1724.19 332.667 1724.19 322C1724.19 307.667 1730.86 297.167 1744.19 290.5C1757.52 283.5 1777.69 280 1804.69 280H1829.19V309.5C1829.19 318.167 1826.36 326.167 1820.69 333.5C1815.36 340.5 1808.02 346 1798.69 350ZM2025.11 401.5L1982.11 508H2054.61L2197.61 143H2123.61L2060.11 335.5H2059.11L1996.11 143L1922.61 143.5L2025.11 401.5ZM2251.46 373C2276.79 396.333 2312.79 408 2359.46 408C2376.13 408 2392.63 406.5 2408.96 403.5C2425.63 400.833 2440.13 397 2452.46 392L2444.46 339.5C2432.13 344.167 2417.96 347.833 2401.96 350.5C2385.96 353.167 2370.79 354.5 2356.46 354.5C2331.13 354.5 2312.29 349 2299.96 338C2289.75 328.893 2283.77 315.56 2282.01 298H2464.46C2464.79 295 2464.96 290.5 2464.96 284.5C2465.29 278.5 2465.46 273.167 2465.46 268.5C2465.46 226.833 2454.79 194.667 2433.46 172C2412.46 149.333 2382.46 138 2343.46 138C2303.13 138 2271.46 150 2248.46 174C2225.46 198 2213.96 231 2213.96 273C2213.96 316.333 2226.46 349.667 2251.46 373ZM2282.19 250.5C2283.95 232.347 2288.87 218.18 2296.96 208C2307.29 194.667 2322.79 188 2343.46 188C2363.13 188 2377.63 194.333 2386.96 207C2394.74 217.188 2399.38 231.688 2400.91 250.5H2282.19ZM2583.09 143H2517.09V403H2586.59V283C2586.59 267 2591.59 252.5 2601.59 239.5C2611.59 226.167 2625.09 215.667 2642.09 208C2659.09 200.333 2677.93 196.5 2698.59 196.5V138C2683.59 138 2668.93 140.167 2654.59 144.5C2640.59 148.5 2627.59 154.5 2615.59 162.5C2603.93 170.167 2593.76 179.833 2585.09 191.5H2583.59L2583.09 143Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5 46C5 21.1472 25.1472 1 50 1H295C319.853 1 340 21.1472 340 46C340 70.8528 319.853 91 295 91H50C25.1472 91 5 70.8528 5 46ZM50 176C25.1472 176 5 196.147 5 221C5 245.853 25.1472 266 50 266H430C454.853 266 475 245.853 475 221C475 196.147 454.853 176 430 176H50ZM50 349C25.1472 349 5 369.147 5 394C5 418.853 25.1472 439 50 439H230C254.853 439 275 418.853 275 394C275 369.147 254.853 349 230 349H50ZM841.5 38V403H914.5V38H841.5ZM991.215 143V403H1060.21V250C1060.21 239 1062.71 229.5 1067.71 221.5C1073.05 213.167 1080.38 206.667 1089.71 202C1099.05 197 1109.71 194.5 1121.71 194.5C1137.71 194.5 1149.38 199.5 1156.71 209.5C1164.05 219.167 1167.71 234.833 1167.71 256.5V403H1236.21V243C1236.21 206.667 1228.71 180.167 1213.71 163.5C1199.05 146.5 1176.05 138 1144.71 138C1126.05 138 1109.55 141 1095.21 147C1081.21 152.667 1068.88 161.5 1058.21 173.5H1057.21L1056.71 143H991.215ZM1341.52 389C1355.52 401.667 1378.19 408 1409.52 408C1420.52 408 1431.19 407.167 1441.52 405.5C1451.85 404.167 1462.69 401.833 1474.02 398.5L1468.52 344C1461.85 346.333 1454.52 348.167 1446.52 349.5C1438.85 350.833 1431.52 351.5 1424.52 351.5C1411.52 351.5 1402.52 348.5 1397.52 342.5C1392.52 336.167 1390.02 325.167 1390.02 309.5V196.5H1474.52V143H1390.02V58H1321.02V143H1264.52V196.5H1321.02V326.5C1321.02 355.5 1327.85 376.333 1341.52 389ZM1536.71 38V403H1606.71V38H1536.71ZM1681.19 386.5C1696.19 400.833 1716.52 408 1742.19 408C1759.19 408 1775.86 404.833 1792.19 398.5C1808.52 392.167 1821.36 383.667 1830.69 373H1831.19L1832.19 403H1897.69V239C1897.69 214 1894.19 194.167 1887.19 179.5C1880.19 164.5 1869.02 153.833 1853.69 147.5C1838.36 141.167 1817.36 138 1790.69 138C1769.69 138 1748.52 139.833 1727.19 143.5C1706.19 146.833 1687.02 151.667 1669.69 158L1678.19 211C1694.19 204.667 1711.19 199.833 1729.19 196.5C1747.19 192.833 1764.52 191 1781.19 191C1793.86 191 1803.52 192.333 1810.19 195C1817.19 197.333 1822.02 201.667 1824.69 208C1827.69 214.333 1829.19 223.333 1829.19 235H1794.69C1751.36 235 1717.86 243.167 1694.19 259.5C1670.86 275.833 1659.19 299 1659.19 329C1659.19 353 1666.52 372.167 1681.19 386.5ZM1798.69 350C1789.36 354 1778.86 356 1767.19 356C1753.52 356 1742.86 353 1735.19 347C1727.86 341 1724.19 332.667 1724.19 322C1724.19 307.667 1730.86 297.167 1744.19 290.5C1757.52 283.5 1777.69 280 1804.69 280H1829.19V309.5C1829.19 318.167 1826.36 326.167 1820.69 333.5C1815.36 340.5 1808.02 346 1798.69 350ZM2025.11 401.5L1982.11 508H2054.61L2197.61 143H2123.61L2060.11 335.5H2059.11L1996.11 143L1922.61 143.5L2025.11 401.5ZM2251.46 373C2276.79 396.333 2312.79 408 2359.46 408C2376.13 408 2392.63 406.5 2408.96 403.5C2425.63 400.833 2440.13 397 2452.46 392L2444.46 339.5C2432.13 344.167 2417.96 347.833 2401.96 350.5C2385.96 353.167 2370.79 354.5 2356.46 354.5C2331.13 354.5 2312.29 349 2299.96 338C2289.75 328.893 2283.77 315.56 2282.01 298H2464.46C2464.79 295 2464.96 290.5 2464.96 284.5C2465.29 278.5 2465.46 273.167 2465.46 268.5C2465.46 226.833 2454.79 194.667 2433.46 172C2412.46 149.333 2382.46 138 2343.46 138C2303.13 138 2271.46 150 2248.46 174C2225.46 198 2213.96 231 2213.96 273C2213.96 316.333 2226.46 349.667 2251.46 373ZM2282.19 250.5C2283.95 232.347 2288.87 218.18 2296.96 208C2307.29 194.667 2322.79 188 2343.46 188C2363.13 188 2377.63 194.333 2386.96 207C2394.74 217.188 2399.38 231.688 2400.91 250.5H2282.19ZM2583.09 143H2517.09V403H2586.59V283C2586.59 267 2591.59 252.5 2601.59 239.5C2611.59 226.167 2625.09 215.667 2642.09 208C2659.09 200.333 2677.93 196.5 2698.59 196.5V138C2683.59 138 2668.93 140.167 2654.59 144.5C2640.59 148.5 2627.59 154.5 2615.59 162.5C2603.93 170.167 2593.76 179.833 2585.09 191.5H2583.59L2583.09 143Z" fill="currentColor"></path><path d="M841.5 403H840.5V404H841.5V403ZM841.5 38V37H840.5V38H841.5ZM914.5 403V404H915.5V403H914.5ZM914.5 38H915.5V37H914.5V38ZM991.215 403H990.215V404H991.215V403ZM991.215 143V142H990.215V143H991.215ZM1060.21 403V404H1061.21V403H1060.21ZM1067.71 221.5L1066.87 220.961L1066.87 220.97L1067.71 221.5ZM1089.71 202L1090.16 202.894L1090.17 202.888L1090.19 202.881L1089.71 202ZM1156.71 209.5L1155.91 210.091L1155.91 210.098L1155.92 210.104L1156.71 209.5ZM1167.71 403H1166.71V404H1167.71V403ZM1236.21 403V404H1237.21V403H1236.21ZM1213.71 163.5L1212.96 164.153L1212.96 164.161L1212.97 164.169L1213.71 163.5ZM1095.21 147L1095.59 147.927L1095.6 147.922L1095.21 147ZM1058.21 173.5V174.5H1058.66L1058.96 174.164L1058.21 173.5ZM1057.21 173.5L1056.21 173.516L1056.23 174.5H1057.21V173.5ZM1056.71 143L1057.71 142.984L1057.7 142H1056.71V143ZM1341.52 389L1340.84 389.733L1340.85 389.742L1341.52 389ZM1441.52 405.5L1441.39 404.508L1441.38 404.51L1441.36 404.513L1441.52 405.5ZM1474.02 398.5L1474.3 399.459L1475.1 399.225L1475.01 398.4L1474.02 398.5ZM1468.52 344L1469.51 343.9L1469.39 342.637L1468.19 343.056L1468.52 344ZM1446.52 349.5L1446.36 348.514L1446.35 348.515L1446.52 349.5ZM1397.52 342.5L1396.73 343.12L1396.74 343.13L1396.75 343.14L1397.52 342.5ZM1390.02 196.5V195.5H1389.02V196.5H1390.02ZM1474.52 196.5V197.5H1475.52V196.5H1474.52ZM1474.52 143H1475.52V142H1474.52V143ZM1390.02 143H1389.02V144H1390.02V143ZM1390.02 58H1391.02V57H1390.02V58ZM1321.02 58V57H1320.02V58H1321.02ZM1321.02 143V144H1322.02V143H1321.02ZM1264.52 143V142H1263.52V143H1264.52ZM1264.52 196.5H1263.52V197.5H1264.52V196.5ZM1321.02 196.5H1322.02V195.5H1321.02V196.5ZM1536.71 403H1535.71V404H1536.71V403ZM1536.71 38V37H1535.71V38H1536.71ZM1606.71 403V404H1607.71V403H1606.71ZM1606.71 38H1607.71V37H1606.71V38ZM1681.19 386.5L1680.49 387.215L1680.5 387.223L1681.19 386.5ZM1830.69 373V372H1830.24L1829.94 372.341L1830.69 373ZM1831.19 373L1832.19 372.967L1832.16 372H1831.19V373ZM1832.19 403L1831.19 403.033L1831.22 404H1832.19V403ZM1897.69 403V404H1898.69V403H1897.69ZM1887.19 179.5L1886.29 179.923L1886.29 179.931L1887.19 179.5ZM1853.69 147.5L1854.07 146.576L1854.07 146.576L1853.69 147.5ZM1727.19 143.5L1727.35 144.488L1727.36 144.486L1727.19 143.5ZM1669.69 158L1669.35 157.061L1668.57 157.344L1668.7 158.158L1669.69 158ZM1678.19 211L1677.2 211.158L1677.4 212.388L1678.56 211.93L1678.19 211ZM1729.19 196.5L1729.37 197.483L1729.38 197.482L1729.39 197.48L1729.19 196.5ZM1810.19 195L1809.82 195.928L1809.85 195.939L1809.88 195.949L1810.19 195ZM1824.69 208L1823.77 208.388L1823.78 208.408L1823.79 208.428L1824.69 208ZM1829.19 235V236H1830.19V235H1829.19ZM1694.19 259.5L1693.62 258.677L1693.62 258.681L1694.19 259.5ZM1735.19 347L1734.56 347.774L1734.57 347.781L1734.58 347.788L1735.19 347ZM1744.19 290.5L1744.64 291.394L1744.65 291.39L1744.66 291.385L1744.19 290.5ZM1829.19 280H1830.19V279H1829.19V280ZM1820.69 333.5L1819.9 332.889L1819.9 332.894L1820.69 333.5ZM1982.11 508L1981.18 507.626L1980.62 509H1982.11V508ZM2025.11 401.5L2026.03 401.874L2026.18 401.503L2026.03 401.131L2025.11 401.5ZM2054.61 508V509H2055.29L2055.54 508.365L2054.61 508ZM2197.61 143L2198.54 143.365L2199.07 142H2197.61V143ZM2123.61 143V142H2122.88L2122.66 142.687L2123.61 143ZM2060.11 335.5V336.5H2060.83L2061.06 335.813L2060.11 335.5ZM2059.11 335.5L2058.16 335.811L2058.38 336.5H2059.11V335.5ZM1996.11 143L1997.06 142.689L1996.83 141.995L1996.1 142L1996.11 143ZM1922.61 143.5L1922.6 142.5L1921.14 142.51L1921.68 143.869L1922.61 143.5ZM2251.46 373L2250.78 373.731L2250.78 373.736L2251.46 373ZM2408.96 403.5L2408.8 402.513L2408.79 402.514L2408.78 402.516L2408.96 403.5ZM2452.46 392L2452.84 392.927L2453.57 392.63L2453.45 391.849L2452.46 392ZM2444.46 339.5L2445.45 339.349L2445.26 338.127L2444.11 338.565L2444.46 339.5ZM2299.96 338L2299.3 338.746L2299.3 338.746L2299.96 338ZM2282.01 298V297H2280.9L2281.01 298.1L2282.01 298ZM2464.46 298V299H2465.36L2465.45 298.11L2464.46 298ZM2464.96 284.5L2463.96 284.445L2463.96 284.472V284.5H2464.96ZM2433.46 172L2432.73 172.68L2432.73 172.685L2433.46 172ZM2296.96 208L2297.74 208.622L2297.75 208.613L2296.96 208ZM2282.19 250.5L2281.19 250.404L2281.09 251.5H2282.19V250.5ZM2386.96 207L2386.16 207.593L2386.16 207.6L2386.17 207.607L2386.96 207ZM2400.91 250.5V251.5H2401.99L2401.9 250.419L2400.91 250.5ZM2517.09 143V142H2516.09V143H2517.09ZM2583.09 143L2584.09 142.99L2584.08 142H2583.09V143ZM2517.09 403H2516.09V404H2517.09V403ZM2586.59 403V404H2587.59V403H2586.59ZM2601.59 239.5L2602.39 240.11L2602.39 240.1L2601.59 239.5ZM2642.09 208L2641.68 207.088L2641.68 207.088L2642.09 208ZM2698.59 196.5V197.5H2699.59V196.5H2698.59ZM2698.59 138H2699.59V137H2698.59V138ZM2654.59 144.5L2654.87 145.462L2654.88 145.459L2654.88 145.457L2654.59 144.5ZM2615.59 162.5L2616.14 163.336L2616.15 163.332L2615.59 162.5ZM2585.09 191.5V192.5H2585.6L2585.9 192.096L2585.09 191.5ZM2583.59 191.5L2582.59 191.51L2582.6 192.5H2583.59V191.5ZM50 0C24.5949 0 4 20.5949 4 46H6C6 21.6995 25.6995 2 50 2V0ZM295 0H50V2H295V0ZM341 46C341 20.5949 320.405 0 295 0V2C319.301 2 339 21.6995 339 46H341ZM295 92C320.405 92 341 71.4051 341 46H339C339 70.3005 319.301 90 295 90V92ZM50 92H295V90H50V92ZM4 46C4 71.4051 24.5949 92 50 92V90C25.6995 90 6 70.3005 6 46H4ZM6 221C6 196.699 25.6995 177 50 177V175C24.5949 175 4 195.595 4 221H6ZM50 265C25.6995 265 6 245.301 6 221H4C4 246.405 24.5949 267 50 267V265ZM430 265H50V267H430V265ZM474 221C474 245.301 454.301 265 430 265V267C455.405 267 476 246.405 476 221H474ZM430 177C454.301 177 474 196.699 474 221H476C476 195.595 455.405 175 430 175V177ZM50 177H430V175H50V177ZM6 394C6 369.699 25.6995 350 50 350V348C24.5949 348 4 368.595 4 394H6ZM50 438C25.6995 438 6 418.3 6 394H4C4 419.405 24.5949 440 50 440V438ZM230 438H50V440H230V438ZM274 394C274 418.3 254.301 438 230 438V440C255.405 440 276 419.405 276 394H274ZM230 350C254.301 350 274 369.699 274 394H276C276 368.595 255.405 348 230 348V350ZM50 350H230V348H50V350ZM842.5 403V38H840.5V403H842.5ZM914.5 402H841.5V404H914.5V402ZM913.5 38V403H915.5V38H913.5ZM841.5 39H914.5V37H841.5V39ZM992.215 403V143H990.215V403H992.215ZM1060.21 402H991.215V404H1060.21V402ZM1059.21 250V403H1061.21V250H1059.21ZM1066.87 220.97C1061.75 229.154 1059.21 238.844 1059.21 250H1061.21C1061.21 239.156 1063.68 229.846 1068.56 222.03L1066.87 220.97ZM1089.27 201.106C1079.78 205.848 1072.31 212.467 1066.87 220.961L1068.56 222.039C1073.79 213.866 1080.98 207.485 1090.16 202.894L1089.27 201.106ZM1121.71 193.5C1109.57 193.5 1098.74 196.031 1089.24 201.119L1090.19 202.881C1099.36 197.969 1109.86 195.5 1121.71 195.5V193.5ZM1157.52 208.909C1149.95 198.579 1137.93 193.5 1121.71 193.5V195.5C1137.5 195.5 1148.82 200.421 1155.91 210.091L1157.52 208.909ZM1168.71 256.5C1168.71 234.767 1165.05 218.827 1157.51 208.896L1155.92 210.104C1163.05 219.506 1166.71 234.9 1166.71 256.5H1168.71ZM1168.71 403V256.5H1166.71V403H1168.71ZM1236.21 402H1167.71V404H1236.21V402ZM1235.21 243V403H1237.21V243H1235.21ZM1212.97 164.169C1227.73 180.567 1235.21 206.769 1235.21 243H1237.21C1237.21 206.564 1229.7 179.766 1214.46 162.831L1212.97 164.169ZM1144.71 139C1175.88 139 1198.55 147.45 1212.96 164.153L1214.47 162.847C1199.55 145.55 1176.22 137 1144.71 137V139ZM1095.6 147.922C1109.79 141.983 1126.15 139 1144.71 139V137C1125.94 137 1109.31 140.017 1094.83 146.078L1095.6 147.922ZM1058.96 174.164C1069.53 162.272 1081.74 153.532 1095.59 147.927L1094.84 146.073C1080.69 151.801 1068.23 160.728 1057.47 172.836L1058.96 174.164ZM1057.21 174.5H1058.21V172.5H1057.21V174.5ZM1055.71 143.016L1056.21 173.516L1058.21 173.484L1057.71 142.984L1055.71 143.016ZM991.215 144H1056.71V142H991.215V144ZM1409.52 407C1378.28 407 1355.92 400.679 1342.19 388.258L1340.85 389.742C1355.12 402.654 1378.09 409 1409.52 409V407ZM1441.36 404.513C1431.08 406.171 1420.47 407 1409.52 407V409C1420.57 409 1431.29 408.163 1441.68 406.487L1441.36 404.513ZM1473.74 397.541C1462.45 400.861 1451.67 403.182 1441.39 404.508L1441.65 406.492C1452.04 405.151 1462.92 402.806 1474.3 399.459L1473.74 397.541ZM1467.52 344.1L1473.02 398.6L1475.01 398.4L1469.51 343.9L1467.52 344.1ZM1446.68 350.486C1454.73 349.145 1462.12 347.299 1468.85 344.944L1468.19 343.056C1461.58 345.368 1454.31 347.188 1446.36 348.514L1446.68 350.486ZM1424.52 352.5C1431.58 352.5 1438.97 351.827 1446.69 350.485L1446.35 348.515C1438.73 349.839 1431.46 350.5 1424.52 350.5V352.5ZM1396.75 343.14C1402.04 349.483 1411.41 352.5 1424.52 352.5V350.5C1411.62 350.5 1403 347.517 1398.29 341.86L1396.75 343.14ZM1389.02 309.5C1389.02 325.211 1391.51 336.507 1396.73 343.12L1398.3 341.88C1393.52 335.826 1391.02 325.123 1391.02 309.5H1389.02ZM1389.02 196.5V309.5H1391.02V196.5H1389.02ZM1474.52 195.5H1390.02V197.5H1474.52V195.5ZM1473.52 143V196.5H1475.52V143H1473.52ZM1390.02 144H1474.52V142H1390.02V144ZM1389.02 58V143H1391.02V58H1389.02ZM1321.02 59H1390.02V57H1321.02V59ZM1322.02 143V58H1320.02V143H1322.02ZM1264.52 144H1321.02V142H1264.52V144ZM1265.52 196.5V143H1263.52V196.5H1265.52ZM1321.02 195.5H1264.52V197.5H1321.02V195.5ZM1322.02 326.5V196.5H1320.02V326.5H1322.02ZM1342.2 388.267C1328.83 375.873 1322.02 355.374 1322.02 326.5H1320.02C1320.02 355.626 1326.88 376.794 1340.84 389.733L1342.2 388.267ZM1537.71 403V38H1535.71V403H1537.71ZM1606.71 402H1536.71V404H1606.71V402ZM1605.71 38V403H1607.71V38H1605.71ZM1536.71 39H1606.71V37H1536.71V39ZM1742.19 407C1716.72 407 1696.65 399.893 1681.88 385.777L1680.5 387.223C1695.73 401.774 1716.33 409 1742.19 409V407ZM1791.83 397.568C1775.61 403.858 1759.06 407 1742.19 407V409C1759.32 409 1776.11 405.809 1792.55 399.432L1791.83 397.568ZM1829.94 372.341C1820.73 382.861 1808.05 391.279 1791.83 397.568L1792.55 399.432C1809 393.054 1821.98 384.472 1831.44 373.659L1829.94 372.341ZM1831.19 372H1830.69V374H1831.19V372ZM1833.19 402.967L1832.19 372.967L1830.19 373.033L1831.19 403.033L1833.19 402.967ZM1897.69 402H1832.19V404H1897.69V402ZM1896.69 239V403H1898.69V239H1896.69ZM1886.29 179.931C1893.2 194.41 1896.69 214.077 1896.69 239H1898.69C1898.69 213.923 1895.18 193.923 1888.09 179.069L1886.29 179.931ZM1853.31 148.424C1868.41 154.662 1879.39 165.15 1886.29 179.923L1888.1 179.077C1880.99 163.85 1869.64 153.004 1854.07 146.576L1853.31 148.424ZM1790.69 139C1817.3 139 1838.15 142.162 1853.31 148.424L1854.07 146.576C1838.57 140.171 1817.42 137 1790.69 137V139ZM1727.36 144.486C1748.64 140.828 1769.75 139 1790.69 139V137C1769.63 137 1748.41 138.838 1727.02 142.514L1727.36 144.486ZM1670.03 158.939C1687.3 152.631 1706.4 147.812 1727.35 144.488L1727.03 142.512C1705.98 145.854 1686.75 150.702 1669.35 157.061L1670.03 158.939ZM1679.18 210.842L1670.68 157.842L1668.7 158.158L1677.2 211.158L1679.18 210.842ZM1729.01 195.517C1710.95 198.861 1693.89 203.712 1677.82 210.07L1678.56 211.93C1694.5 205.622 1711.43 200.806 1729.37 197.483L1729.01 195.517ZM1781.19 190C1764.45 190 1747.05 191.841 1728.99 195.52L1729.39 197.48C1747.33 193.825 1764.6 192 1781.19 192V190ZM1810.56 194.072C1803.72 191.334 1793.9 190 1781.19 190V192C1793.81 192 1803.33 193.332 1809.82 195.928L1810.56 194.072ZM1825.61 207.612C1822.83 200.992 1817.76 196.468 1810.51 194.051L1809.88 195.949C1816.62 198.199 1821.22 202.341 1823.77 208.388L1825.61 207.612ZM1830.19 235C1830.19 223.271 1828.69 214.1 1825.6 207.572L1823.79 208.428C1826.7 214.567 1828.19 223.395 1828.19 235H1830.19ZM1794.69 236H1829.19V234H1794.69V236ZM1694.76 260.323C1718.19 244.15 1751.46 236 1794.69 236V234C1751.25 234 1717.52 242.184 1693.62 258.677L1694.76 260.323ZM1660.19 329C1660.19 299.306 1671.72 276.454 1694.76 260.319L1693.62 258.681C1670 275.213 1658.19 298.694 1658.19 329H1660.19ZM1681.89 385.785C1667.45 371.672 1660.19 352.78 1660.19 329H1658.19C1658.19 353.22 1665.6 372.662 1680.49 387.215L1681.89 385.785ZM1767.19 357C1778.97 357 1789.61 354.98 1799.09 350.919L1798.3 349.081C1789.11 353.02 1778.74 355 1767.19 355V357ZM1734.58 347.788C1742.48 353.971 1753.39 357 1767.19 357V355C1753.66 355 1743.24 352.029 1735.81 346.212L1734.58 347.788ZM1723.19 322C1723.19 332.924 1726.96 341.559 1734.56 347.774L1735.82 346.226C1728.75 340.441 1725.19 332.409 1725.19 322H1723.19ZM1743.74 289.606C1736.95 293.004 1731.8 297.408 1728.35 302.839C1724.9 308.273 1723.19 314.673 1723.19 322H1725.19C1725.19 314.994 1726.82 308.977 1730.04 303.911C1733.25 298.842 1738.1 294.663 1744.64 291.394L1743.74 289.606ZM1804.69 279C1777.64 279 1757.28 282.501 1743.73 289.615L1744.66 291.385C1757.77 284.499 1777.74 281 1804.69 281V279ZM1829.19 279H1804.69V281H1829.19V279ZM1830.19 309.5V280H1828.19V309.5H1830.19ZM1821.48 334.111C1827.27 326.616 1830.19 318.404 1830.19 309.5H1828.19C1828.19 317.93 1825.44 325.717 1819.9 332.889L1821.48 334.111ZM1799.09 350.919C1808.55 346.862 1816.03 341.263 1821.49 334.106L1819.9 332.894C1814.68 339.737 1807.5 345.138 1798.3 349.081L1799.09 350.919ZM1983.03 508.374L2026.03 401.874L2024.18 401.126L1981.18 507.626L1983.03 508.374ZM2054.61 507H1982.11V509H2054.61V507ZM2196.67 142.635L2053.67 507.635L2055.54 508.365L2198.54 143.365L2196.67 142.635ZM2123.61 144H2197.61V142H2123.61V144ZM2061.06 335.813L2124.56 143.313L2122.66 142.687L2059.16 335.187L2061.06 335.813ZM2059.11 336.5H2060.11V334.5H2059.11V336.5ZM1995.16 143.311L2058.16 335.811L2060.06 335.189L1997.06 142.689L1995.16 143.311ZM1922.61 144.5L1996.11 144L1996.1 142L1922.6 142.5L1922.61 144.5ZM2026.03 401.131L1923.53 143.131L1921.68 143.869L2024.18 401.869L2026.03 401.131ZM2359.46 407C2312.95 407 2277.23 395.375 2252.14 372.264L2250.78 373.736C2276.36 397.292 2312.63 409 2359.46 409V407ZM2408.78 402.516C2392.51 405.505 2376.07 407 2359.46 407V409C2376.19 409 2392.75 407.495 2409.14 404.484L2408.78 402.516ZM2452.09 391.073C2439.84 396.038 2425.41 399.855 2408.8 402.513L2409.12 404.487C2425.84 401.812 2440.42 397.962 2452.84 392.927L2452.09 391.073ZM2443.47 339.651L2451.47 392.151L2453.45 391.849L2445.45 339.349L2443.47 339.651ZM2402.13 351.486C2418.18 348.811 2432.41 345.13 2444.81 340.435L2444.11 338.565C2431.85 343.204 2417.75 346.855 2401.8 349.514L2402.13 351.486ZM2356.46 355.5C2370.86 355.5 2386.08 354.161 2402.13 351.486L2401.8 349.514C2385.84 352.172 2370.73 353.5 2356.46 353.5V355.5ZM2299.3 338.746C2311.89 349.978 2331.01 355.5 2356.46 355.5V353.5C2331.25 353.5 2312.7 348.022 2300.63 337.254L2299.3 338.746ZM2281.01 298.1C2282.79 315.834 2288.85 329.429 2299.3 338.746L2300.63 337.254C2290.65 328.358 2284.74 315.286 2283 297.9L2281.01 298.1ZM2464.46 297H2282.01V299H2464.46V297ZM2463.96 284.5C2463.96 290.492 2463.79 294.947 2463.47 297.89L2465.45 298.11C2465.79 295.053 2465.96 290.508 2465.96 284.5H2463.96ZM2464.46 268.5C2464.46 273.144 2464.29 278.458 2463.96 284.445L2465.96 284.555C2466.29 278.542 2466.46 273.19 2466.46 268.5H2464.46ZM2432.73 172.685C2453.84 195.111 2464.46 227 2464.46 268.5H2466.46C2466.46 226.667 2455.75 194.222 2434.19 171.315L2432.73 172.685ZM2343.46 139C2382.26 139 2411.96 150.268 2432.73 172.68L2434.19 171.32C2412.96 148.399 2382.66 137 2343.46 137V139ZM2249.18 174.692C2271.96 150.93 2303.34 139 2343.46 139V137C2302.92 137 2270.97 149.07 2247.74 173.308L2249.18 174.692ZM2214.96 273C2214.96 231.187 2226.41 198.46 2249.18 174.692L2247.74 173.308C2224.52 197.54 2212.96 230.813 2212.96 273H2214.96ZM2252.14 372.269C2227.4 349.172 2214.96 316.135 2214.96 273H2212.96C2212.96 316.532 2225.52 350.161 2250.78 373.731L2252.14 372.269ZM2296.18 207.378C2287.93 217.759 2282.96 232.133 2281.19 250.404L2283.19 250.596C2284.93 232.561 2289.81 218.602 2297.74 208.622L2296.18 207.378ZM2343.46 187C2322.56 187 2306.74 193.754 2296.17 207.387L2297.75 208.613C2307.85 195.579 2323.03 189 2343.46 189V187ZM2387.77 206.407C2378.2 193.421 2363.36 187 2343.46 187V189C2362.9 189 2377.06 195.246 2386.16 207.593L2387.77 206.407ZM2401.9 250.419C2400.37 231.501 2395.69 216.789 2387.76 206.393L2386.17 207.607C2393.78 217.586 2398.4 231.874 2399.91 250.581L2401.9 250.419ZM2282.19 251.5H2400.91V249.5H2282.19V251.5ZM2517.09 144H2583.09V142H2517.09V144ZM2518.09 403V143H2516.09V403H2518.09ZM2586.59 402H2517.09V404H2586.59V402ZM2585.59 283V403H2587.59V283H2585.59ZM2600.8 238.89C2590.67 252.06 2585.59 266.774 2585.59 283H2587.59C2587.59 267.226 2592.52 252.94 2602.39 240.11L2600.8 238.89ZM2641.68 207.088C2624.55 214.816 2610.91 225.416 2600.79 238.9L2602.39 240.1C2612.28 226.917 2625.64 216.517 2642.5 208.912L2641.68 207.088ZM2698.59 195.5C2677.8 195.5 2658.83 199.357 2641.68 207.088L2642.5 208.912C2659.36 201.309 2678.05 197.5 2698.59 197.5V195.5ZM2697.59 138V196.5H2699.59V138H2697.59ZM2654.88 145.457C2669.12 141.152 2683.69 139 2698.59 139V137C2683.5 137 2668.73 139.181 2654.3 143.543L2654.88 145.457ZM2616.15 163.332C2628.06 155.39 2640.97 149.433 2654.87 145.462L2654.32 143.538C2640.22 147.567 2627.13 153.61 2615.04 161.668L2616.15 163.332ZM2585.9 192.096C2594.5 180.52 2604.58 170.935 2616.14 163.336L2615.04 161.664C2603.28 169.398 2593.02 179.147 2584.29 190.904L2585.9 192.096ZM2583.59 192.5H2585.09V190.5H2583.59V192.5ZM2582.09 143.01L2582.59 191.51L2584.59 191.49L2584.09 142.99L2582.09 143.01Z" fill="currentColor"></path></svg></a><div class="absolute z-100 min-w-full left-0 top-[calc(100%+0.5rem)]" role="region" aria-labelledby="dropdown-trigger-navbar-logo" id="dropdown-panel-navbar-logo"><div role="none" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] delay-0 group-hover/dropdown:delay-600"><div style="min-height:0px" class="overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] delay-0 group-hover/dropdown:delay-600"><div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 px-3 py-2 gap-3 border border-text/5"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-vector-square flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="M19.5 7a24 24 0 0 1 0 10"></path><path d="M4.5 7a24 24 0 0 0 0 10"></path><path d="M7 19.5a24 24 0 0 0 10 0"></path><path d="M7 4.5a24 24 0 0 1 10 0"></path><rect x="17" y="17" width="5" height="5" rx="1"></rect><rect x="17" y="2" width="5" height="5" rx="1"></rect><rect x="2" y="17" width="5" height="5" rx="1"></rect><rect x="2" y="2" width="5" height="5" rx="1"></rect></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Скачать SVG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-image flex-none shrink-0 size-4 mr-3" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Скачать PNG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-vector-square flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="M19.5 7a24 24 0 0 1 0 10"></path><path d="M4.5 7a24 24 0 0 0 0 10"></path><path d="M7 19.5a24 24 0 0 0 10 0"></path><path d="M7 4.5a24 24 0 0 1 10 0"></path><rect x="17" y="17" width="5" height="5" rx="1"></rect><rect x="17" y="2" width="5" height="5" rx="1"></rect><rect x="2" y="17" width="5" height="5" rx="1"></rect><rect x="2" y="2" width="5" height="5" rx="1"></rect></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Копировать как SVG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-image flex-none shrink-0 size-4 mr-3" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Копировать как изображение</span></span></button></div></div></div></div></div><div class="relative z-0 flex size-full flex-row items-center border-text ml-[2vw] h-auto gap-3 overflow-x-auto text-neutral tracking-wide lg:ml-[5vw] lg:gap-3 xl:ml-[10vw] xl:gap-6" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><a aria-label="Перейти на главную страницу" aria-current="page" id="home" role="tab" aria-selected="false" data-active="false" tabindex="-1" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0 active" href="/ru" target="_self" data-status="active">Главная</a><a aria-label="Перейти на Playground" id="playground" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="/ru/playground" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Песочница</a><a aria-label="Посмотреть проекты Intlayer" id="showcase" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="https://showcase.intlayer.org/ru" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Витрина</a><a aria-label="Перейти на прибортную панель" id="dashboard" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="https://app.intlayer.org/ru" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Приложение</a><a aria-label="Перейти на страницу документации" aria-current="page" id="doc" role="tab" aria-selected="true" data-active="true" tabindex="0" href="/ru/doc/get-started" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Документ</a><a aria-label="Перейти на блог" id="blog" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="/ru/blog" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Блог</a></div><div class="mr-4 flex items-center justify-end gap-2 md:gap-4"><div class="flex rounded-xl text-text transition-colors"><div class="group/dropdown relative flex" aria-label="DropDown locale-switcher" id="dropdown-container-locale-switcher"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-7 px-3 text-xs max-md:py-1 text-text ring-text/20 *:text-text-opposite rounded-[4rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[5rem] rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center w-full cursor-pointer group-focus-within/dropdown:bg-current/20 group-focus-within/dropdown:ring-4 p-0!" aria-label="Переключатель языка" aria-haspopup="true" aria-busy="false" aria-disabled="false" aria-controls="dropdown-panel-locale-switcher" id="dropdown-trigger-locale-switcher"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><div class="flex w-full items-center justify-between"><div class="text-nowrap px-2 text-base">RU</div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-vertical w-5 self-center" aria-hidden="true"><path d="M12 2v20"></path><path d="m8 18 4 4 4-4"></path><path d="m8 6 4-4 4 4"></path></svg></div></span></button><div class="absolute z-100 min-w-full right-0 top-[calc(100%+0.5rem)]" role="region" aria-labelledby="dropdown-trigger-locale-switcher" id="dropdown-panel-locale-switcher"><div role="none" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]"><div style="min-height:0px" class="overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]"><div class="flex flex-col text-text backdrop-blur rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl bg-card/95 p-0 divide-y divide-dashed divide-text/20 gap-0 max-h-[80vh] min-w-28 border border-text/5"><div class="p-3"><input class="w-full select-text resize-none text-base shadow-none outline-none transition-all duration-300 md:text-sm ring-0 disabled:opacity-50 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text bg-neutral-50 dark:bg-neutral-950 ring-text/20 disabled:ring-0 hover:ring-3 focus-within:ring-4 focus-visible:outline-none focus-visible:ring-4 [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error px-2 py-3 md:py-2" type="search" aria-label="Поиск языка" placeholder="Поиск языка"/></div><ul class="divide-y divide-dashed divide-text/20 overflow-y-auto p-1" aria-label="Список языков"><li class="py-1 pr-3"><a aria-label="Переключиться на Английский" href="/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="en">English</span><span class="text-neutral text-xs">Английский</span></div><span class="text-nowrap text-neutral text-sm">EN</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Русский" aria-current="page" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text active" href="/ru/doc/environment/vite-and-svelte" target="_self" data-status="active"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ru">Русский</span><span class="text-neutral text-xs">Русский</span></div><span class="text-nowrap text-neutral text-sm">RU</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Японский" href="/ja/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ja">日本語</span><span class="text-neutral text-xs">Японский</span></div><span class="text-nowrap text-neutral text-sm">JA</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Французский" href="/fr/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="fr">français</span><span class="text-neutral text-xs">Французский</span></div><span class="text-nowrap text-neutral text-sm">FR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Корейский" href="/ko/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ko">한국어</span><span class="text-neutral text-xs">Корейский</span></div><span class="text-nowrap text-neutral text-sm">KO</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Китайский" href="/zh/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="zh">中文</span><span class="text-neutral text-xs">Китайский</span></div><span class="text-nowrap text-neutral text-sm">ZH</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Испанский" href="/es/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="es">Español</span><span class="text-neutral text-xs">Испанский</span></div><span class="text-nowrap text-neutral text-sm">ES</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Немецкий" href="/de/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="de">Deutsch</span><span class="text-neutral text-xs">Немецкий</span></div><span class="text-nowrap text-neutral text-sm">DE</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Арабский" href="/ar/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="rtl" lang="ar">العربية</span><span class="text-neutral text-xs">Арабский</span></div><span class="text-nowrap text-neutral text-sm">AR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Итальянский" href="/it/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="it">Italiano</span><span class="text-neutral text-xs">Итальянский</span></div><span class="text-nowrap text-neutral text-sm">IT</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Британский английский" href="/en-GB/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="en-GB">British English</span><span class="text-neutral text-xs">Британский английский</span></div><span class="text-nowrap text-neutral text-sm">EN-GB</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Португальский" href="/pt/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="pt">Português</span><span class="text-neutral text-xs">Португальский</span></div><span class="text-nowrap text-neutral text-sm">PT</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Хинди" href="/hi/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="hi">हिन्दी</span><span class="text-neutral text-xs">Хинди</span></div><span class="text-nowrap text-neutral text-sm">HI</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Турецкий" href="/tr/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="tr">Türkçe</span><span class="text-neutral text-xs">Турецкий</span></div><span class="text-nowrap text-neutral text-sm">TR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Польский" href="/pl/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="pl">polski</span><span class="text-neutral text-xs">Польский</span></div><span class="text-nowrap text-neutral text-sm">PL</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Индонезийский" href="/id/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="id">Indonesia</span><span class="text-neutral text-xs">Индонезийский</span></div><span class="text-nowrap text-neutral text-sm">ID</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Вьетнамский" href="/vi/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="vi">Tiếng Việt</span><span class="text-neutral text-xs">Вьетнамский</span></div><span class="text-nowrap text-neutral text-sm">VI</span></div></a></li><li class="py-1 pr-3"><a aria-label="Переключиться на Украинский" href="/uk/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="uk">Українська</span><span class="text-neutral text-xs">Украинский</span></div><span class="text-nowrap text-neutral text-sm">UK</span></div></a></li></ul></div></div></div></div></div></div><!--$--><!--/$--><a aria-label="Перейти на сервер Discord" rel="noopener noreferrer nofollow" href="https://discord.gg/7uxamYVeCk" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative min-h-8 flex-row justify-center border-current text-center font-medium text-sm ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 max-md:py-2 text-text ring-text/20 flex cursor-pointer items-center gap-2 rounded-full border-[1.3px] p-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="800px" viewBox="0 0 71 80" fill="none" role="img" aria-label="Discord logo" class="aspect-square h-auto"><path d="M60.1045 13.8978C55.5792 11.8214 50.7265 10.2916 45.6527 9.41542C45.5603 9.39851 45.468 9.44077 45.4204 9.52529C44.7963 10.6353 44.105 12.0834 43.6209 13.2216C38.1637 12.4046 32.7345 12.4046 27.3892 13.2216C26.905 12.0581 26.1886 10.6353 25.5617 9.52529C25.5141 9.44359 25.4218 9.40133 25.3294 9.41542C20.2584 10.2888 15.4057 11.8186 10.8776 13.8978C10.8384 13.9147 10.8048 13.9429 10.7825 13.9795C1.57795 27.7309 -0.943561 41.1443 0.293408 54.3914C0.299005 54.4562 0.335386 54.5182 0.385761 54.5576C6.45866 59.0174 12.3413 61.7249 18.1147 63.5195C18.2071 63.5477 18.305 63.5139 18.3638 63.4378C19.7295 61.5728 20.9469 59.6063 21.9907 57.5383C22.0523 57.4172 21.9935 57.2735 21.8676 57.2256C19.9366 56.4931 18.0979 55.6 16.3292 54.5858C16.1893 54.5041 16.1781 54.304 16.3068 54.2082C16.679 53.9293 17.0513 53.6391 17.4067 53.3461C17.471 53.2926 17.5606 53.2813 17.6362 53.3151C29.2558 58.6202 41.8354 58.6202 53.3179 53.3151C53.3935 53.2785 53.4831 53.2898 53.5502 53.3433C53.9057 53.6363 54.2779 53.9293 54.6529 54.2082C54.7816 54.304 54.7732 54.5041 54.6333 54.5858C52.8646 55.6197 51.0259 56.4931 49.0921 57.2228C48.9662 57.2707 48.9102 57.4172 48.9718 57.5383C50.038 59.6034 51.2554 61.5699 52.5959 63.435C52.6519 63.5139 52.7526 63.5477 52.845 63.5195C58.6464 61.7249 64.529 59.0174 70.6019 54.5576C70.6551 54.5182 70.6887 54.459 70.6943 54.3942C72.1747 39.0791 68.2147 25.7757 60.1968 13.9823C60.1772 13.9429 60.1437 13.9147 60.1045 13.8978ZM23.7259 46.3253C20.2276 46.3253 17.3451 43.1136 17.3451 39.1693C17.3451 35.225 20.1717 32.0133 23.7259 32.0133C27.308 32.0133 30.1626 35.2532 30.1066 39.1693C30.1066 43.1136 27.28 46.3253 23.7259 46.3253ZM47.3178 46.3253C43.8196 46.3253 40.9371 43.1136 40.9371 39.1693C40.9371 35.225 43.7636 32.0133 47.3178 32.0133C50.9 32.0133 53.7545 35.2532 53.6986 39.1693C53.6986 43.1136 50.9 46.3253 47.3178 46.3253Z" fill="currentColor"></path></svg></a><a aria-label="Перейти в репозиторий Github" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative min-h-8 flex-row justify-center bg-current text-center font-medium text-sm ring-0 *:text-text-opposite hover:bg-current/90 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 max-md:py-2 rounded-full text-text ring-text/20 group/github flex cursor-pointer items-center gap-1 p-0.5"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="25"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="18" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star mr-1 group-hover/github:fill-text-opposite" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"></path></svg></a></div></nav><main class="relative flex w-full flex-1 flex-col"><div class="flex w-full bg-card max-md:flex-col md:h-[calc(100dvh-3.5rem)]"><aside aria-label="Навигация по документации" class="z-40 flex-none"><div class="fixed top-18 left-2 z-50 flex-col gap-1 md:hidden hidden"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-search-trigger" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Нажмите, чтобы искать" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search flex-none shrink-0 size-4" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Нажмите, чтобы искать</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-search-trigger" id="unrollable-panel-search-trigger"><kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">/</span></span></kbd></div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center rotate-180" aria-label="Свернуть" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="doc-nav-content"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left-to-line flex-none shrink-0 size-4" aria-hidden="true"><path d="M3 19V5"></path><path d="m13 6-6 6 6 6"></path><path d="M7 12h14"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Свернуть</span></button></div><div class="top-0 left-0 z-40 flex h-full justify-end max-md:fixed max-md:transition-transform max-md:duration-300 max-md:ease-in-out max-md:translate-x-0" role="region"><div class="flex flex-col text-text backdrop-blur rounded-none bg-card/95 p-0 border-text gap-0 h-full sticky top-15 rounded-br-2xl"><div class="relative h-full max-w-80"><div class="flex flex-col text-text backdrop-blur rounded-none bg-card/95 p-0 border-text gap-0 sticky top-[3.6rem] z-10 m-auto pt-4"><div class="relative m-auto flex w-full flex-row items-center justify-center gap-2 px-2"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-doc-nav-framework-filter" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Фильтр по фреймворку" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-funnel flex-none shrink-0 size-4" aria-hidden="true"><path d="M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Фильтр по фреймворку</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text gap-0 absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 min-w-50 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-doc-nav-framework-filter" id="unrollable-panel-doc-nav-framework-filter">Фильтровать документы по фреймворку</div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text w-full select-text resize-none rounded-2xl text-base shadow-none outline-none supports-[corner-shape:squircle]:rounded-4xl transition-shadow duration-100 md:text-sm ring-0 disabled:opacity-50 text-text bg-neutral-50 dark:bg-neutral-950 ring-neutral-100 dark:ring-neutral-700 hover:ring-3 aria-selected:ring-4 focus-visible:ring-3 disabled:ring-0 focus-visible:outline-none [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error justify-center text-center mb-1 pr-1.5" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="flex w-full items-center gap-2">Поиск<kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs ml-auto"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">/</span></span></kbd></span></span></button><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-doc-nav-collapse" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center transition-transform" aria-label="Свернуть" aria-expanded="true" aria-busy="false" aria-disabled="false" aria-controls="doc-nav-content"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left-to-line flex-none shrink-0 size-4" aria-hidden="true"><path d="M3 19V5"></path><path d="m13 6-6 6 6 6"></path><path d="M7 12h14"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Свернуть</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-doc-nav-collapse" id="unrollable-panel-doc-nav-collapse"><kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">Alt</span></span><span class="inline-flex items-center"><span class="text-neutral/50">+</span><span class="min-w-4 px-0.5 text-center">←</span></span></kbd></div></div><div class="absolute bottom-0 left-0 h-8 w-full translate-y-full bg-linear-to-b from-card/90 backdrop-blur"></div></div></div><div id="doc-nav-content" class="sticky top-28 pt-0"><div class="relative grid h-full overflow-x-hidden overflow-y-hidden transition-all duration-500 ease-in-out grid-cols-[1fr]" aria-hidden="false"><div style="min-width:0px" class=""><div class="relative overflow-hidden"><nav aria-label="Разделы документации" class="m-auto flex max-h-[calc(100vh-8.2rem)] min-w-40 max-w-xl flex-col gap-5 overflow-auto px-3 pt-8 pb-20"><div><a aria-label="why" href="/ru/doc/why" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Почему Intlayer?</span></a></div><div><a aria-label="get-started" href="/ru/doc/get-started" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Начать</span></a></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="concept"><span class="flex items-center gap-1.5 opacity-60">Концепция</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="how-works-intlayer" href="/ru/doc/concept/how-works-intlayer" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Как работает Intlayer</span></a></li><li><a aria-label="configuration" href="/ru/doc/concept/configuration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Конфигурация</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_e6qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="cli" href="/ru/doc/concept/cli" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">CLI</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_e6qb9bcq_-accordion-content" aria-labelledby="_R_e6qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="test" href="/ru/doc/concept/cli/test" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Test</span></a><a aria-label="fill" href="/ru/doc/concept/cli/fill" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Fill</span></a><a aria-label="build" href="/ru/doc/concept/cli/build" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Build</span></a><a aria-label="watch" href="/ru/doc/concept/cli/watch" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Watch</span></a><a aria-label="extract" href="/ru/doc/concept/cli/extract" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Extract</span></a><a aria-label="login" href="/ru/doc/concept/cli/login" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Login</span></a><a aria-label="push" href="/ru/doc/concept/cli/push" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Push</span></a><a aria-label="pull" href="/ru/doc/concept/cli/pull" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Pull</span></a><a aria-label="configuration" href="/ru/doc/concept/cli/configuration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Configuration</span></a><a aria-label="list" href="/ru/doc/concept/cli/list" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">List</span></a><a aria-label="version" href="/ru/doc/concept/cli/version" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Version</span></a><a aria-label="editor" href="/ru/doc/concept/cli/editor" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Editor</span></a><a aria-label="live" href="/ru/doc/concept/cli/live" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Live</span></a><a aria-label="debug" href="/ru/doc/concept/cli/debug" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Debug</span></a><a aria-label="doc-review" href="/ru/doc/concept/cli/doc-review" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Doc Review</span></a><a aria-label="doc-translate" href="/ru/doc/concept/cli/doc-translate" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Doc Translate</span></a><a aria-label="sdk" href="/ru/doc/concept/cli/sdk" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">SDK</span></a><a aria-label="scan" href="/ru/doc/concept/cli/scan" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Scan</span></a></div></div></div></div></div></li><li><a aria-label="editor" href="/ru/doc/concept/editor" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Визуальный редактор</span></a></li><li><a aria-label="cms" href="/ru/doc/concept/cms" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">CMS</span></a></li><li><a aria-label="ci-cd" href="/ru/doc/concept/ci-cd" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Интеграция CI/CD</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_u6qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="content" href="/ru/doc/concept/content" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Объявление контента</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_u6qb9bcq_-accordion-content" aria-labelledby="_R_u6qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="translation" href="/ru/doc/concept/content/translation" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Перевод</span></a><a aria-label="plural" href="/ru/doc/concept/content/plural" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Множественное число</span></a><a aria-label="enumeration" href="/ru/doc/concept/content/enumeration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Перечисление</span></a><a aria-label="condition" href="/ru/doc/concept/content/condition" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Условие</span></a><a aria-label="gender" href="/ru/doc/concept/content/gender" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Пол</span></a><a aria-label="insertion" href="/ru/doc/concept/content/insertion" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Вставка</span></a><a aria-label="file" href="/ru/doc/concept/content/file" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Файл</span></a><a aria-label="nesting" href="/ru/doc/concept/content/nesting" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Вложенность</span></a><a aria-label="markdown" href="/ru/doc/concept/content/markdown" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Markdown</span></a><a aria-label="html" href="/ru/doc/concept/content/html" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">HTML</span></a><a aria-label="function-fetching" href="/ru/doc/concept/content/function-fetching" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Получение функции</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_126qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="dynamic-dyctionary" href="/ru/doc/concept/dynamic-dictionaries" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Файл для каждой локали</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_126qb9bcq_-accordion-content" aria-labelledby="_R_126qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="collections" href="/ru/doc/concept/collections" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Коллекции</span></a><a aria-label="variants" href="/ru/doc/concept/variants" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Варианты</span></a><a aria-label="dynamic-content" href="/ru/doc/concept/dynamic-records" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Динамические записи</span></a></div></div></div></div></div></li><li><a aria-label="per-locale-file" href="/ru/doc/concept/per-locale-file" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Файл для каждой локали</span></a></li><li><a aria-label="compiler" href="/ru/doc/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Компилятор</span></a></li><li><a aria-label="auto-fill" href="/ru/doc/concept/auto-fill" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Автозаполнение</span></a></li><li><a aria-label="testing" href="/ru/doc/testing" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Тестирование</span></a></li><li><a aria-label="bundle_optimization" href="/ru/doc/concept/bundle-optimization" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Оптимизация пакета</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="environment"><span class="flex items-center gap-1.5 opacity-60">Окружающая среда</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_68qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="nextjs" href="/ru/doc/environment/nextjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_68qb9bcq_-accordion-content" aria-labelledby="_R_68qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="14" href="/ru/doc/environment/nextjs/14" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js 14 и App Router</span></a><a aria-label="15" href="/ru/doc/environment/nextjs/15" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js 15</span></a><a aria-label="no-locale-path" href="/ru/doc/environment/nextjs/no-locale-path" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js без locale URL</span></a><a aria-label="next-with-Page-Router" href="/ru/doc/environment/nextjs/next-with-page-router" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js и Page Router</span></a><a aria-label="next-with-compiler" href="/ru/doc/environment/nextjs/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Compiler</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_a8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="tanstack-start" href="/ru/doc/environment/tanstack-start" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg height="660" viewBox="0 0 663 660" width="663" xmlns="http://www.w3.org/2000/svg" fill="currentColor" role="img" aria-label="Tanstack logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m305.114318.62443771c8.717817-1.14462121 17.926803-.36545135 26.712694-.36545135 32.548987 0 64.505987 5.05339923 95.64868 14.63098274 39.74418 12.2236582 76.762804 31.7666864 109.435876 57.477568 40.046637 31.5132839 73.228974 72.8472109 94.520714 119.2362609 39.836383 86.790386 39.544267 191.973146-1.268422 278.398081-26.388695 55.880442-68.724007 102.650458-119.964986 136.75724-41.808813 27.828603-90.706831 44.862601-140.45707 50.89341-63.325458 7.677926-131.784923-3.541603-188.712259-32.729444-106.868873-54.795293-179.52309291-165.076271-180.9604082-285.932068-.27660564-23.300971.08616998-46.74071 4.69884909-69.814998 7.51316071-37.57857 20.61272131-73.903917 40.28618971-106.877282 21.2814003-35.670293 48.7704861-67.1473767 81.6882804-92.5255597 38.602429-29.7610135 83.467691-51.1674988 130.978372-62.05777669 11.473831-2.62966514 22.9946-4.0869914 34.57273-5.4964306l3.658171-.44480576c3.050084-.37153079 6.104217-.74794222 9.162589-1.14972654zm-110.555861 549.44131429c-14.716752 1.577863-30.238964 4.25635-42.869928 12.522173 2.84343.683658 6.102369.004954 9.068638 0 7.124652-.011559 14.317732-.279903 21.434964.032202 17.817402.781913 36.381729 3.63214 53.58741 8.350042 22.029372 6.040631 41.432961 17.928687 62.656049 25.945156 22.389644 8.456554 44.67706 11.084675 68.427 11.084675 11.96813 0 23.845573-.035504 35.450133-3.302696-6.056202-3.225083-14.72582-2.619864-21.434964-3.963236-14.556814-2.915455-28.868774-6.474936-42.869928-11.470264-10.304996-3.676672-20.230803-8.214291-30.11097-12.848661l-6.348531-2.985046c-9.1705-4.309263-18.363277-8.560752-27.845391-12.142608-24.932161-9.418465-52.560181-14.071964-79.144482-11.221737zm22.259385-62.614168c-29.163917 0-58.660076 5.137344-84.915434 18.369597-6.361238 3.206092-12.407546 7.02566-18.137277 11.258891-1.746125 1.290529-4.841829 2.948483-5.487351 5.191839-.654591 2.275558 1.685942 4.182039 3.014086 5.637703 6.562396-3.497556 12.797498-7.199878 19.78612-9.855246 45.19892-17.169893 99.992458-13.570779 145.098218 2.172348 22.494346 7.851335 43.219483 19.592421 65.129314 28.800338 24.503461 10.297807 49.53043 16.975034 75.846795 20.399104 31.04195 4.037546 66.433549.7654 94.808495-13.242161 9.970556-4.921843 23.814245-12.422267 28.030337-23.320339-5.207047.454947-9.892236 2.685918-14.83959 4.224149-7.866632 2.445646-15.827248 4.51974-23.908229 6.138887-27.388113 5.486604-56.512458 6.619429-84.091013 1.639788-25.991939-4.693152-50.142596-14.119246-74.179513-24.03502l-3.068058-1.268177c-2.045137-.846788-4.089983-1.695816-6.135603-2.544467l-3.069142-1.272366c-12.279956-5.085721-24.606928-10.110797-37.210937-14.51024-24.485325-8.546552-50.726667-13.784628-76.671218-13.784628zm51.114145-447.9909432c-34.959602 7.7225298-66.276908 22.7605319-96.457338 41.7180089-17.521434 11.0054099-34.281927 22.2799893-49.465301 36.4444283-22.5792616 21.065423-39.8360564 46.668751-54.8866988 73.411509-15.507372 27.55357-25.4498976 59.665686-30.2554517 90.824149-4.7140432 30.568106-5.4906485 62.70747-.0906864 93.301172 6.7503648 38.248526 19.5989769 74.140579 39.8896436 107.337631 6.8187918-3.184625 11.659796-10.445603 17.3128555-15.336896 11.4149428-9.875888 23.3995608-19.029311 36.2745548-26.928535 4.765981-2.923712 9.662222-5.194315 14.83959-7.275014 1.953055-.785216 5.14604-1.502727 6.06527-3.647828 1.460876-3.406732-1.240754-9.335897-1.704904-12.865654-1.324845-10.095517-2.124534-20.362774-1.874735-30.549941.725492-29.668947 6.269727-59.751557 16.825623-87.521453 7.954845-20.924233 20.10682-39.922168 34.502872-56.971512 4.884699-5.785498 10.077731-11.170545 15.437296-16.512656 3.167428-3.157378 7.098271-5.858983 9.068639-9.908915-10.336599.006606-20.674847 2.987289-30.503603 6.013385-21.174447 6.519522-41.801477 16.19312-59.358362 29.841512-8.008432 6.226409-13.873368 14.387371-21.44733 20.939921-2.32322 2.010516-6.484901 4.704691-9.695199 3.187928-4.8500728-2.29042-4.1014979-11.835213-4.6571581-16.222019-2.1369011-16.873476 4.2548401-38.216325 12.3778671-52.843142 13.039878-23.479694 37.150915-43.528712 65.467327-42.82854 12.228647.302197 22.934587 4.551115 34.625711 7.324555-2.964621-4.211764-6.939158-7.28162-10.717482-10.733763-9.257431-8.459031-19.382979-16.184864-30.503603-22.028985-4.474136-2.350694-9.291232-3.77911-14.015169-5.506421-2.375159-.867783-5.36616-2.062533-6.259834-4.702213-1.654614-4.888817 7.148561-9.416813 10.381943-11.478522 12.499882-7.969406 27.826705-14.525258 42.869928-14.894334 23.509209-.577147 46.479246 12.467678 56.162903 34.665926 3.404469 7.803171 4.411273 16.054969 5.079109 24.382907l.121749 1.56229.174325 2.345587c.01913.260708.038244.521433.057403.782164l.11601 1.56437.120128 1.563971c7.38352-6.019164 12.576553-14.876995 19.78612-21.323859 16.861073-15.07846 39.936636-21.7722 61.831627-14.984333 19.786945 6.133107 36.984382 19.788105 47.105807 37.959541 2.648042 4.754231 10.035685 16.373942 4.698379 21.109183-4.177345 3.707277-9.475079.818243-13.880788-.719162-3.33605-1.16376-6.782939-1.90214-10.241828-2.585698l-1.887262-.369639c-.629089-.122886-1.257979-.246187-1.886079-.372129-11.980496-2.401886-25.91652-2.152533-37.923398-.041284-7.762754 1.364839-15.349083 4.127545-23.083807 5.271929v1.651348c21.149714.175043 41.608563 12.240618 52.043268 30.549941 4.323267 7.585468 6.482428 16.267431 8.138691 24.770223 2.047864 10.50918.608423 21.958802-2.263037 32.201289-.962925 3.433979-2.710699 9.255807-6.817143 10.046802-2.902789.558982-5.36781-2.330878-7.024898-4.279468-4.343878-5.10762-8.475879-9.96341-13.573278-14.374161-12.895604-11.157333-26.530715-21.449361-40.396663-31.373138-7.362086-5.269452-15.425755-12.12007-23.908229-15.340199 2.385052 5.745041 4.721463 11.086326 5.532694 17.339156 2.385876 18.392716-5.314223 35.704625-16.87179 49.540445-3.526876 4.222498-7.29943 8.475545-11.744712 11.755948-1.843407 1.360711-4.156734 3.137561-6.595373 2.752797-7.645687-1.207961-8.555849-12.73272-9.728176-18.637115-3.970415-19.998652-2.375984-39.861068 3.132802-59.448534-4.901187 2.485279-8.443727 7.923994-11.521293 12.385111-6.770975 9.816439-12.645804 20.199291-16.858599 31.375615-16.777806 44.519521-16.616219 96.664142 5.118834 139.523233 2.427098 4.786433 6.110614 4.144058 10.894733 4.144058.720854 0 1.44257-.004515 2.164851-.010924l2.168232-.022283c4.338648-.045438 8.686803-.064635 12.979772.508795 2.227588.297243 5.320818.032202 7.084256 1.673642 2.111344 1.966755.986008 5.338808.4996 7.758859-1.358647 6.765574-1.812904 12.914369-1.812904 19.816178 9.02412-1.398692 11.525415-15.866153 14.724172-23.118874 3.624982-8.216283 7.313444-16.440823 10.667192-24.770223 1.648843-4.093692 3.854171-8.671229 3.275427-13.210785-.649644-5.10184-4.335633-10.510831-6.904531-14.862134-4.86244-8.234447-10.389363-16.70834-13.969002-25.595896-2.861567-7.104926-.197036-15.983399 7.871579-18.521521 4.450228-1.400344 9.198073 1.345848 12.094266 4.562675 6.07269 6.74328 9.992815 16.777697 14.401823 24.692609l34.394873 61.925556c2.920926 5.243856 5.848447 10.481933 8.836976 15.687808 1.165732 2.031158 2.352075 5.167068 4.740424 6.0332 2.127008.77118 5.033095-.325315 7.148561-.748886 5.492297-1.099798 10.97635-2.287117 16.488434-3.28288 6.605266-1.193099 16.673928-.969342 21.434964-6.129805-6.963066-2.205375-15.011895-2.074919-22.259386-1.577863-4.352947.298894-9.178287 1.856116-13.178381-.686135-5.953149-3.783239-9.910373-12.522173-13.552668-18.377854-8.980425-14.439388-17.441465-29.095929-26.041008-43.760726l-1.376261-2.335014-2.765943-4.665258c-1.380597-2.334387-2.750786-4.67476-4.079753-7.036188-1.02723-1.826391-2.549937-4.233231-1.078344-6.24705 1.545791-2.114476 4.91472-2.239146 7.956473-2.243117l.603351.000261c1.195428.001526 2.315572.002427 3.222811-.11692 12.27399-1.615019 24.718635-2.952611 37.098976-2.952611-.963749-3.352237-3.719791-7.141255-2.838484-10.73046 1.972017-8.030506 13.526287-10.543033 18.899867-4.780653 3.60767 3.868283 5.704174 9.192229 8.051303 13.859765 3.097352 6.162006 6.624228 12.118418 9.940876 18.16483 5.805578 10.585967 12.146205 20.881297 18.116667 31.375615.49237.865561.999687 1.726685 1.512269 2.587098l.771613 1.290552c2.577138 4.303168 5.164895 8.635123 6.553094 13.461506-20.735854-.9487-36.30176-25.018751-45.343193-41.283704-.721369 2.604176.450959 4.928448 1.388326 7.431066 1.948109 5.197619 4.276275 10.147535 7.20627 14.862134 4.184765 6.732546 8.982075 13.665732 15.313633 18.553722 11.236043 8.673707 26.05255 8.721596 39.572241 7.794364 8.669619-.595311 19.50252-4.542034 28.030338-1.864372 8.513803 2.673532 11.940924 12.063098 6.884745 19.276187-3.787393 5.403211-8.842747 7.443452-15.128962 8.257566 4.445282 9.53571 10.268996 18.385285 14.490036 28.072919 1.758491 4.035895 3.59118 10.22102 7.8048 12.350433 2.805507 1.416857 6.824562.09743 9.85761.034678-3.043765-8.053625-8.742992-14.887729-11.541904-23.118874 8.533589.390544 16.786875 4.843404 24.732651 7.685374 15.630376 5.590144 31.063836 11.701854 46.475333 17.86913l7.112077 2.848685c6.338978 2.538947 12.71588 5.052299 18.961699 7.812528 2.285297 1.009799 5.449427 3.370401 7.975455 1.917215 2.061054-1.186494 3.394144-4.015253 4.665403-5.931643 3.55573-5.361927 6.775921-10.928622 9.965609-16.513481 12.774414-22.36586 22.143967-46.872692 28.402976-71.833646 20.645168-82.323009 2.934117-173.156241-46.677107-241.922507-19.061454-26.420745-43.033164-49.262193-69.46165-68.1783861-66.13923-47.336721-152.911262-66.294198-232.486917-48.7172481zm135.205158 410.5292842c-17.532977 4.570931-35.601827 8.714164-53.58741 11.040088 2.365265 8.052799 8.145286 15.885969 12.376218 23.118874 1.635653 2.796558 3.3859 6.541816 6.618457 7.755557 3.651364 1.370619 8.063669-.853747 11.508927-1.975838-1.595256-4.364513-4.279573-8.292245-6.476657-12.385112-.905215-1.687677-2.305907-3.685809-1.559805-5.68972 1.410585-3.786541 7.266452-3.563609 10.509727-4.221671 8.54678-1.733916 17.004522-3.898008 25.557073-5.611281 3.150939-.631641 7.538512-2.342438 10.705115-1.285575 2.371037.791232 3.800147 2.744743 5.152304 4.781948l.606196.918752c.80912 1.222827 1.637246 2.41754 2.671212 3.351165 3.457625 3.121874 8.628398 3.60159 13.017619 4.453686-2.678546-6.027421-7.130424-11.301001-9.984571-17.339156-1.659561-3.511592-3.023155-8.677834-6.656381-10.707341-5.005064-2.795733-15.341663 2.461334-20.458024 3.795624zm-110.472507-40.151706c-.825246 10.467897-4.036369 18.984725-9.068639 28.072919 5.76683.729896 11.649079.989984 17.312856 2.39363 4.244947 1.051908 8.156828 3.058296 12.366325 4.211763-2.250671-6.157877-6.426367-11.651913-9.661398-17.339156-3.266358-5.740912-6.189758-12.717032-10.949144-17.339156z" transform="translate(.9778)"></path></svg><!--/$--></span>Tanstack Start</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_a8qb9bcq_-accordion-content" aria-labelledby="_R_a8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="tanstack-start-solid" href="/ru/doc/environment/tanstack-start/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Tanstack Start Solid</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_e8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="astro" href="/ru/doc/environment/astro" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg viewBox="0 0 85 107" role="img" aria-label="Astro logo" xmlns="http://www.w3.org/2000/svg" fill="currentColor" style="z-index:0" class="shrink-0 size-3.5"><path d="M27.5894 91.1365C22.7555 86.7178 21.3444 77.4335 23.3583 70.7072C26.8503 74.948 31.6888 76.2914 36.7005 77.0497C44.4375 78.2199 52.0359 77.7822 59.2232 74.2459C60.0454 73.841 60.8052 73.3027 61.7036 72.7574C62.378 74.714 62.5535 76.6892 62.318 78.6996C61.7452 83.5957 59.3086 87.3778 55.4332 90.2448C53.8835 91.3916 52.2437 92.4167 50.6432 93.4979C45.7262 96.8213 44.3959 100.718 46.2435 106.386C46.2874 106.525 46.3267 106.663 46.426 107C43.9155 105.876 42.0817 104.24 40.6845 102.089C39.2087 99.8193 38.5066 97.3081 38.4696 94.5909C38.4511 93.2686 38.4511 91.9345 38.2733 90.6309C37.8391 87.4527 36.3471 86.0297 33.5364 85.9478C30.6518 85.8636 28.37 87.6469 27.7649 90.4554C27.7187 90.6707 27.6517 90.8837 27.5847 91.1341L27.5894 91.1365Z" fill="currentColor"></path><path d="M27.5894 91.1365C22.7555 86.7178 21.3444 77.4335 23.3583 70.7072C26.8503 74.948 31.6888 76.2914 36.7005 77.0497C44.4375 78.2199 52.0359 77.7822 59.2232 74.2459C60.0454 73.841 60.8052 73.3027 61.7036 72.7574C62.378 74.714 62.5535 76.6892 62.318 78.6996C61.7452 83.5957 59.3086 87.3778 55.4332 90.2448C53.8835 91.3916 52.2437 92.4167 50.6432 93.4979C45.7262 96.8213 44.3959 100.718 46.2435 106.386C46.2874 106.525 46.3267 106.663 46.426 107C43.9155 105.876 42.0817 104.24 40.6845 102.089C39.2087 99.8193 38.5066 97.3081 38.4696 94.5909C38.4511 93.2686 38.4511 91.9345 38.2733 90.6309C37.8391 87.4527 36.3471 86.0297 33.5364 85.9478C30.6518 85.8636 28.37 87.6469 27.7649 90.4554C27.7187 90.6707 27.6517 90.8837 27.5847 91.1341L27.5894 91.1365Z" fill="url(#paint0_linear_1_59)"></path><path d="M0 69.5866C0 69.5866 14.3139 62.6137 28.6678 62.6137L39.4901 29.1204C39.8953 27.5007 41.0783 26.3999 42.4139 26.3999C43.7495 26.3999 44.9325 27.5007 45.3377 29.1204L56.1601 62.6137C73.1601 62.6137 84.8278 69.5866 84.8278 69.5866C84.8278 69.5866 60.5145 3.35233 60.467 3.21944C59.7692 1.2612 58.5911 0 57.0029 0H27.8274C26.2392 0 25.1087 1.2612 24.3634 3.21944C24.3108 3.34983 0 69.5866 0 69.5866Z" fill="currentColor"></path><defs><linearGradient id="paint0_linear_1_59" x1="22.4702" y1="107" x2="69.1451" y2="84.9468" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"></stop><stop offset="1" stop-color="#F041FF"></stop></linearGradient></defs></svg><!--/$--></span>Astro</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_e8qb9bcq_-accordion-content" aria-labelledby="_R_e8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="astro-and-react" href="/ru/doc/environment/astro/react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Astro и React</span></a><a aria-label="astro-and-svelte" href="/ru/doc/environment/astro/svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Astro и Svelte</span></a><a aria-label="astro-and-vue" href="/ru/doc/environment/astro/vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Astro и Vue</span></a><a aria-label="astro-and-solid" href="/ru/doc/environment/astro/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Astro и Solid</span></a><a aria-label="astro-and-preact" href="/ru/doc/environment/astro/preact" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" aria-label="Preact" role="img" viewBox="0 0 512 512" style="z-index:0" class="shrink-0 size-3.5"><g transform="translate(256,256)"><path d="M0,-256 222,-128 222,128 0,256 -222,128 -222,-128z" fill="#673ab8"></path><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(52.5)"></ellipse><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(-52.5)"></ellipse><circle cx="0" cy="0" r="34" fill="#ffffff"></circle></g></svg><!--/$--></span>Astro и Preact</span></a><a aria-label="astro-and-lit" href="/ru/doc/environment/astro/lit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 256 320" preserveAspectRatio="xMidYMid" role="img" aria-label="Lit"><path fill="#00E8FF" d="m64 192 25.926-44.727 38.233-19.114 63.974 63.974 10.833 61.754L192 320l-64-64-38.074-25.615z"></path><path d="M128 256V128l64-64v128l-64 64ZM0 256l64 64 9.202-60.602L64 192l-37.542 23.71L0 256Z" fill="#283198"></path><path d="M64 192V64l64-64v128l-64 64Zm128 128V192l64-64v128l-64 64ZM0 256V128l64 64-64 64Z" fill="#324FFF"></path><path fill="#0FF" d="M64 320V192l64 64z"></path></svg><!--/$--></span>Astro и Lit</span></a><a aria-label="astro-and-vanilla-js" href="/ru/doc/environment/astro/vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Astro и Vanilla JS</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_i8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-react" href="/ru/doc/environment/vite-and-react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Vite и React</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_i8qb9bcq_-accordion-content" aria-labelledby="_R_i8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="react-router-v7" href="/ru/doc/environment/vite-and-react/react-router-v7" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Router v7</span></a><a aria-label="react-router-v7-fs-routes" href="/ru/doc/environment/vite-and-react/react-router-v7-fs-routes" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Router v7 (fs-routes)</span></a><a aria-label="compiler" href="/ru/doc/environment/vite-and-react/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Compiler</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_m8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-vue" href="/ru/doc/environment/vite-and-vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Vite и Vue</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_m8qb9bcq_-accordion-content" aria-labelledby="_R_m8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="nuxt-and-vue" href="/ru/doc/environment/nuxt-and-vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 298" preserveAspectRatio="xMidYMid" role="img" aria-label="Nuxt logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="none" fill-rule="nonzero"><path fill="#00C58E" d="M227.92099 82.07407l-13.6889 23.7037-46.8148-81.08641L23.7037 273.58025h97.3037c0 13.0912 10.61252 23.7037 23.70371 23.7037H23.70371c-8.46771 0-16.29145-4.52017-20.5246-11.85382-4.23315-7.33366-4.23272-16.36849.00114-23.70174L146.89383 12.83951c4.23415-7.33433 12.0596-11.85252 20.5284-11.85252 8.46878 0 16.29423 4.51819 20.52839 11.85252l39.97037 69.23456z"></path><path fill="#2F495E" d="M331.6642 261.7284l-90.05432-155.95062-13.6889-23.7037-13.68888 23.7037-90.04445 155.95061c-4.23385 7.33325-4.23428 16.36808-.00113 23.70174 4.23314 7.33365 12.05689 11.85382 20.5246 11.85382h166.4c8.46946 0 16.29644-4.51525 20.532-11.84955 4.23555-7.3343 4.23606-16.37123.00132-23.706h.01976zM144.7111 273.58024L227.921 129.48148l83.19012 144.09877h-166.4z"></path><path fill="#108775" d="M396.04938 285.4321c-4.23344 7.33254-12.05656 11.85185-20.52345 11.85185H311.1111c13.0912 0 23.7037-10.6125 23.7037-23.7037h40.66173L260.09877 73.74815l-18.4889 32.02963-13.68888-23.7037L239.5753 61.8963c4.23416-7.33433 12.0596-11.85252 20.5284-11.85252 8.46879 0 16.29423 4.51819 20.52839 11.85252l115.41728 199.8321c4.23426 7.33395 4.23426 16.36975 0 23.7037z"></path></g></svg><!--/$--></span>Nuxt и Vue</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-solid" href="/ru/doc/environment/vite-and-solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Vite и Solid</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="true" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_u8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-svelte" aria-current="page" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text active" href="/ru/doc/environment/vite-and-svelte" target="_self" data-status="active"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Vite и Svelte</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out rotate-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div role="region" class="group/height-smoother relative grid w-full overflow-hidden transition-all duration-700 ease-in-out grid-rows-[1fr] overflow-x-auto" id="_R_u8qb9bcq_-accordion-content" aria-labelledby="_R_u8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="vite-and-svelte-kit" href="/ru/doc/environment/sveltekit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>SvelteKit</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-preact" href="/ru/doc/environment/vite-and-preact" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" aria-label="Preact" role="img" viewBox="0 0 512 512" style="z-index:0" class="shrink-0 size-3.5"><g transform="translate(256,256)"><path d="M0,-256 222,-128 222,128 0,256 -222,128 -222,-128z" fill="#673ab8"></path><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(52.5)"></ellipse><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(-52.5)"></ellipse><circle cx="0" cy="0" r="34" fill="#ffffff"></circle></g></svg><!--/$--></span>Vite и Preact</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_168qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-vanilla-js" href="/ru/doc/environment/vite-and-vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Vite и Vanilla JS</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_168qb9bcq_-accordion-content" aria-labelledby="_R_168qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="vanilla-js" href="/ru/doc/environment/vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Vanilla JS (без бандлера)</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-lit" href="/ru/doc/environment/vite-and-lit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 256 320" preserveAspectRatio="xMidYMid" role="img" aria-label="Lit"><path fill="#00E8FF" d="m64 192 25.926-44.727 38.233-19.114 63.974 63.974 10.833 61.754L192 320l-64-64-38.074-25.615z"></path><path d="M128 256V128l64-64v128l-64 64ZM0 256l64 64 9.202-60.602L64 192l-37.542 23.71L0 256Z" fill="#283198"></path><path d="M64 192V64l64-64v128l-64 64Zm128 128V192l64-64v128l-64 64ZM0 256V128l64 64-64 64Z" fill="#324FFF"></path><path fill="#0FF" d="M64 320V192l64 64z"></path></svg><!--/$--></span>Vite и Lit</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1e8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="angular" href="/ru/doc/environment/angular" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Angular 21</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1e8qb9bcq_-accordion-content" aria-labelledby="_R_1e8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="19" href="/ru/doc/environment/angular/19" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Angular 19 (Webpack)</span></a><a aria-label="analog" href="/ru/doc/environment/analog" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Analog</span></a></div></div></div></div></div></li><li><a aria-label="create-react-app" href="/ru/doc/environment/create-react-app" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React CRA</span></a></li><li><a aria-label="react-native-and-expo" href="/ru/doc/environment/react-native-and-expo" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Native и Expo</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1q8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="truncate font-semibold text-neutral transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text" label="node"><span class="flex items-center gap-1.5 opacity-60">Node & Backend</span></span></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1q8qb9bcq_-accordion-content" aria-labelledby="_R_1q8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="express" href="/ru/doc/environment/express" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1333.33 773.55" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" role="img" aria-label="Express logo" fill="currentColor" style="z-index:0" class="shrink-0 size-3.5"><path d="M1333.33 753.49c-48.5 12.33-78.5.54-105.41-39.87L1036.5 448.79l-27.67-36.67L785.29 714.5c-25.54 36.38-52.33 52.2-100 39.33l286.25-384.25-266.5-347.09c45.83-8.91 77.5-4.38 105.62 36.67l198.54 268.13 200-266.67c25.62-36.38 53.17-50.2 99.17-36.8l-103.33 137-140 182.29c-16.67 20.83-14.38 35.09.96 55.2l267.33 355.18zM.34 363.16l23.41-115.17c63.75-227.92 325-322.63 505.17-181.8 105.29 82.83 131.46 200 126.25 331.25H61.67C52.76 633.69 222.8 776.27 439.58 703.53c76.04-25.54 120.83-85.09 143.25-159.58 11.38-37.33 30.2-43.17 65.29-32.5-17.91 93.17-58.33 171-143.75 219.71-127.62 72.91-309.8 49.33-405.62-52C41.66 620.36 18.08 545.87 7.5 466.2c-1.67-13.17-5-25.71-7.5-38.33.22-21.56.34-43.11.34-64.67v-.04zm62.41-15.83h536.33c-3.5-170.83-109.87-292.17-255.25-293.2-159.58-1.25-274.17 117.2-281.09 293.2h.01z" fill-rule="nonzero"></path></svg><!--/$--></span>Express.js</span></a><a aria-label="nest" href="/ru/doc/environment/nest" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" height="966" viewBox="0 0 264.58333 255.58751" width="1000" role="img" aria-label="NestJS logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m153.33845 45.652481c-1.80934 0-3.48944.387729-5.04032.904673 3.29558 2.19706 5.10493 5.104961 6.00963 8.400551.0648.45233.19386.775444.25856 1.227759.0648.387729.12916.775444.12916 1.163171.2586 5.686509-1.48628 6.397323-2.71403 9.757543-1.87398 4.329529-1.35704 8.982133.90466 12.730079.19387.452318.45234.969275.77546 1.421618-2.45558-16.348759 11.17919-18.804304 13.69932-23.90924.19386-4.458761-3.48944-7.431263-6.39731-9.499092-2.77864-1.680104-5.29884-2.197062-7.62513-2.197062zm20.54903 3.683318c-.25858 1.486247-.0647 1.09853-.12913 1.873973-.0647.516945-.0647 1.163157-.12914 1.680102-.12914.516959-.2586 1.033904-.45236 1.550886-.12913.516945-.32309 1.033903-.51694 1.550847-.2586.516983-.45234.969301-.71082 1.486258-.19385.258585-.32309.516945-.51695.775443-.12914.193857-.25858.387715-.38771.581572-.32309.452355-.64621.904673-.96929 1.292387-.38774.387729-.71083.840046-1.16319 1.163171v.0647c-.38771.3231-.77543.710815-1.22775 1.033903-1.35702 1.033902-2.90787 1.809344-4.32952 2.778644-.45231.323088-.90468.581587-1.29238.9693-.45233.323088-.84006.646176-1.22776 1.033903-.45236.387715-.77545.775442-1.16318 1.227784-.32309.387728-.7108.840048-.96927 1.292402-.32312.452317-.6462.904661-.9047 1.35699-.25857.516944-.45233.969299-.71081 1.486245-.19385.516944-.38773.969301-.51695 1.486244-.19386.581586-.3231 1.098544-.45234 1.615514-.0647.258583-.0647.58156-.12914.840045-.0648.258584-.0648.516945-.12913.775443 0 .516944-.0647 1.09853-.0647 1.615475 0 .387727 0 .775441.0647 1.163169 0 .516946.0647 1.033892.19385 1.615476.0647.516944.19384 1.033902.32312 1.550885.19386.516944.3231 1.033902.51694 1.550847.12916.323126.32309.646213.45236.904673l-14.86252-5.75114c-2.52018-.710815-4.9757-1.35699-7.49588-1.938576-1.357-.323087-2.714-.646198-4.07102-.969299-3.87719-.77543-7.81895-1.356991-11.76076-1.744705-.12913 0-.19385-.06471-.32309-.06471-3.8772-.387714-7.68973-.581572-11.5669-.581572-2.84328 0-5.68656.129131-8.465201.323088-3.941798.258584-7.883602.775442-11.825373 1.421617-.969302.129144-1.938602.323125-2.907905.516984-2.003199.387689-3.941771.840044-5.815742 1.292386-.9693.258584-1.938602.516958-2.907903.775419-.96927.387713-1.87394.84007-2.778642 1.227784-.710811.323088-1.421619.646187-2.132431.9693-.129139.06471-.25858.06471-.32309.129144-.64621.323087-1.22779.581547-1.809341.904671-.193861.06471-.323122.129132-.452351.193859-.71081.323089-1.421618.710803-2.003201 1.033902-.45235.193858-.90467.452343-1.292389.646213-.193862.129131-.452353.258572-.581582.323088-.581579.323088-1.16316.646174-1.680111.9693-.581581.323087-1.098532.646175-1.550882.969263-.452318.323125-.904667.581585-1.29239.904672-.06474.06471-.129139.06471-.193861.129145-.387719.258583-.840039.581571-1.227758.904696 0 0-.06473.0647-.12914.129142-.32309.258584-.646212.516947-.969301.775407-.129138.06471-.258581.193857-.38772.258583-.32309.258586-.64618.581586-.969271.84007-.06473.129143-.193859.193858-.258581.258585-.38772.387715-.775441.710802-1.163161 1.09853-.06473 0-.06473.06471-.129139.129131-.38772.3231-.775439.710816-1.163159 1.098543-.06473.06471-.06473.12913-.12914.12913-.32309.323089-.64618.646213-.969301 1.033902-.129137.129143-.32309.258586-.452319.387715-.32309.387728-.710811.775443-1.09853 1.163171-.06473.129132-.19386.193858-.258582.323087-.516952.516983-.969302 1.033928-1.486252 1.550885-.06473.06471-.129138.129128-.193859.193858-1.033931 1.098529-2.132463 2.197059-3.295594 3.166352-1.163159 1.0339-2.390922 2.0032-3.618711 2.84325-1.292392.9047-2.520152 1.68011-3.877173 2.45555-1.292392.71079-2.649412 1.35701-4.071032 1.9386-1.357022.58157-2.778641 1.09854-4.200264 1.55085-2.714041.58157-5.492684 1.68011-7.883605 1.87397-.51695 0-1.098531.12915-1.615482.19385-.581578.12914-1.098529.25859-1.615479.38774-.516951.19384-1.033931.38771-1.550883.58156-.516951.19386-1.033901.45235-1.550852.71083-.45235.32308-.969299.58157-1.421651.90466-.452322.32309-.904672.7108-1.292393 1.09853-.452319.32312-.904669.77545-1.29239 1.16315-.387721.45237-.77544.84008-1.0985304 1.29239-.3230901.51695-.7108108.96931-.9693016 1.48627-.32309.45235-.6461799.96929-.9046707 1.48622-.2585815.58161-.5169498 1.09855-.7108107 1.68014-.1938599.51695-.3877199 1.09852-.5815799 1.68011-.1291382.51694-.2585813 1.0339-.3230898 1.55083 0 .0648-.064719.12916-.064719.19387-.1291392.58161-.1291392 1.35706-.1938608 1.74479-.064719.45232-.1291373.84002-.1291373 1.29238 0 .25858 0 .58155.064719.84003.064719.45236.1291371.84007.2585814 1.22782.1291382.38766.2585815.77539.4523201 1.16312v.0647c.1938599.38775.4523506.77545.7108108 1.16317.2585814.38772.5169804.77544.8400704 1.16317.3230899.32309.7108109.71078 1.0985304 1.03389.3877209.38772.7754421.71081 1.2277611 1.0339 1.550881 1.35703 1.938601 1.80938 3.941806 2.84327.323087.19387.64621.32311 1.03393.51697.06473 0 .129139.0647.193859.0647 0 .12913 0 .19387.06473.32313.06472.51696.193859 1.03389.32309 1.55086.129138.58158.323121 1.09855.516981 1.55087.19386.38773.32309.77543.516951 1.16317.06472.12915.12914.25858.19386.32309.258581.51694.51695.96932.77541 1.42162.323121.45233.64621.90466.969299 1.35703.323092.3877.710813.84004 1.098532 1.22775.387721.38773.775442.71083 1.227793 1.09852 0 0 .06473.0648.129137.0648.387722.32312.77544.64622 1.163162.90466.45232.32311.90467.58157 1.421619.84007.452351.25858.969302.51695 1.486252.71082.387721.19386.84004.32311 1.292392.45234.06473.0648.129138.0648.258582.12916.258581.0648.581548.12912.840039.19384-.193859 3.48945-.258582 6.78504.258583 7.94822.58155 1.29238 3.424821-2.64941 6.268094-7.17277-.387719 4.45875-.646211 9.6929 0 11.24381.710809 1.61545 4.587982-3.42487 7.948203-8.98215 45.815262-10.59757 87.62418 21.066 92.01829 65.78273-.84006-6.97892-9.43446-10.85608-13.37623-9.88677-1.93861 4.78183-5.2342 10.92068-10.53299 14.73324.45233-4.2649.25856-8.65901-.64619-12.92392-1.42165 5.94501-4.2003 11.50232-8.01287 16.28415-6.138857.45232-12.277729-2.52019-15.50872-6.97891-.258582-.19388-.323091-.58159-.516951-.84006-.193862-.45238-.387719-.90467-.516951-1.35703-.193859-.45232-.323089-.90467-.387719-1.35699-.06473-.45236-.06473-.90469-.06473-1.42163 0-.32312 0-.6462 0-.96928.06473-.45238.19386-.90471.323091-1.35705.129138-.45232.25858-.90467.45235-1.35701.258582-.45231.45232-.90466.775441-1.35698 1.09853-3.10178 1.09853-5.62192-.90467-7.10816-.387721-.25858-.775441-.45236-1.227791-.64622-.258584-.0647-.581582-.19386-.84004-.25857-.193861-.0647-.32309-.12916-.516951-.19387-.452351-.12914-.904702-.25859-1.357022-.32309-.45235-.12913-.90467-.19386-1.35702-.19386-.452321-.0648-.969303-.12914-1.421622-.12914-.323089 0-.64621.0647-.969301.0647-.516949 0-.969299.0648-1.421621.19386-.45235.0648-.904669.12913-1.357019.25856-.452322.12915-.904673.25859-1.357023.45238-.452319.19385-.840041.38771-1.292389.58157-.38769.19387-.775412.45232-1.227761.64618-15.056371 9.82217-6.074235 32.82674 4.200264 39.48256-3.877175.71081-7.818947 1.5509-8.917479 2.39092-.06473.0647-.129138.12915-.129138.12915 2.778642 1.68009 5.686516 3.10173 8.723616 4.32949 4.135665 1.35702 8.529786 2.58479 10.468387 3.10176v.0647c5.363424 1.09854 10.79148 1.48626 16.284139 1.16317 28.62649-2.00321 52.0834-23.78003 56.3483-52.47111.12914.58159.25858 1.09852.38772 1.68012.19387 1.16312.45232 2.3909.58155 3.61867v.0648c.12914.58158.19386 1.16315.25858 1.6801v.25859c.0648.58157.12915 1.16316.12915 1.6801.0647.71082.12914 1.42162.12914 2.13247v1.0339c0 .32312.0647.7108.0647 1.03392 0 .38773-.0647.77542-.0647 1.16314v.90467c0 .45236-.0648.84006-.0648 1.2924 0 .25856 0 .51696-.0647.84006 0 .45236-.0647.90466-.0647 1.42162-.0648.19386-.0648.38772-.0648.58159-.0647.51696-.12914.9693-.19387 1.48626 0 .19387 0 .38771-.0647.58159-.0648.64617-.19385 1.22777-.25855 1.87394v.0648.0647c-.12914.58157-.2586 1.22776-.38775 1.80933v.19387c-.12912.58156-.25858 1.16316-.3877 1.74471 0 .0648-.0647.19387-.0647.25856-.12916.5816-.2586 1.16317-.45232 1.74478v.19384c-.19386.64617-.38773 1.22776-.51698 1.80934-.0647.0647-.0647.12914-.0647.12914-.19387.64621-.38771 1.29239-.58155 1.93858-.25858.64621-.45234 1.22778-.71081 1.87398-.25857.6462-.45236 1.2924-.71083 1.87396-.25859.64622-.51697 1.2278-.77543 1.87397h-.0648c-.2586.58157-.51699 1.22779-.8401 1.80938-.0647.19383-.12912.32309-.19384.4523-.0647.0648-.0647.12914-.12914.19388-4.20026 8.46514-10.40377 15.89639-18.15809 21.71217-.51695.32309-1.03392.71082-1.55086 1.09852-.12915.12915-.32312.19388-.45235.32309-.45235.3231-.90468.64618-1.42161.96931l.19385.38772h.0647c.90466-.12913 1.80934-.25858 2.71402-.38772h.0647c1.68012-.25858 3.36023-.58158 5.04035-.90467.45231-.0648.9693-.19385 1.42161-.32312.32309-.0648.58158-.12913.90467-.19386.45235-.0648.90468-.19386 1.35704-.25857.3877-.12914.77543-.19388 1.16314-.3231 6.46195-1.55089 12.73007-3.68335 18.73965-6.20349-10.27448 14.02243-24.03847 25.33087-40.12874 32.76212 7.43127-.51696 14.86251-1.74472 22.03528-3.81254 26.0417-7.68977 47.94772-25.20165 61.06549-48.7878-2.6494 14.92714-8.5944 29.14344-17.38265 41.55041 6.26809-4.13569 12.01923-8.91753 17.25342-14.34557 14.47478-15.12097 23.97388-34.31296 27.20483-54.92665 2.19708 10.2099 2.84328 20.74293 1.87398 31.14666 46.65534-65.07192 3.87717-132.53476-14.02244-150.305141-.0648-.129133-.12914-.193858-.12914-.323089-.0648.0647-.0648.0647-.0648.129144 0-.06471 0-.06471-.0647-.129144 0 .775442-.0647 1.550848-.12914 2.326291-.19387 1.48625-.38771 2.907879-.64621 4.329529-.32308 1.42162-.71081 2.84322-1.09854 4.26488-.45232 1.35699-.96925 2.77862-1.55085 4.13565-.58158 1.29237-1.22778 2.64939-1.93859 3.9418-.71082 1.22778-1.48625 2.52016-2.32629 3.6833-.84006 1.2278-1.74474 2.39093-2.64943 3.48944-.96931 1.16318-2.00319 2.1971-3.03712 3.23101-.64618.58158-1.22775 1.09853-1.87398 1.61546-.51694.45236-.96927.84009-1.48625 1.29239-1.16314.90468-2.32629 1.74474-3.61867 2.52019-1.22778.77542-2.52014 1.55086-3.81254 2.19707-1.35702.64619-2.71404 1.22776-4.07104 1.80935-1.35702.51693-2.77864.96928-4.20031 1.35701-1.42161.3877-2.90785.71081-4.32949.96928-1.48623.25858-2.97249.38771-4.39412.51697-1.03392.0647-2.06782.12915-3.10175.12915-1.48626 0-2.97248-.12915-4.39412-.25858-1.48624-.12914-2.97251-.32314-4.39413-.64623-1.48625-.25858-2.9079-.64621-4.32953-1.09851h-.0647c1.42163-.12914 2.84327-.2586 4.26492-.51697 1.48622-.25858 2.90785-.58156 4.3295-.96931 1.42162-.38771 2.84325-.84006 4.20026-1.357 1.42162-.51696 2.77865-1.16313 4.07105-1.80936 1.357-.64621 2.58478-1.357 3.87716-2.13244 1.22776-.84005 2.45554-1.68009 3.61869-2.58479 1.16316-.90466 2.26167-1.87394 3.29562-2.90786 1.09853-.96932 2.06781-2.06784 3.03711-3.16638.96927-1.16312 1.87396-2.32628 2.71402-3.48944.12915-.19387.25859-.45232.38774-.64619.64617-1.03392 1.29235-2.06783 1.87392-3.10176.71083-1.29239 1.35704-2.58479 1.9386-3.94177.58159-1.35702 1.09855-2.71405 1.55089-4.13566.45232-1.35703.77542-2.77864 1.09853-4.200258.25859-1.486258.51694-2.90791.64619-4.329528.12914-1.486244.25857-2.972503.25857-4.394119 0-1.033928-.0648-2.06783-.12912-3.101733-.12915-1.486246-.32311-2.9079-.51696-4.329519-.25859-1.486257-.58157-2.907873-.96931-4.329529-.45231-1.356991-.90467-2.778634-1.42161-4.135623-.51699-1.357028-1.16315-2.714042-1.80938-4.006443-.71081-1.292388-1.42161-2.584776-2.19704-3.812536-.84005-1.22776-1.68013-2.390917-2.5848-3.554087-.96927-1.098531-1.93857-2.19706-2.97251-3.29559-.51694-.516947-1.09853-1.098532-1.6801-1.615476-2.90787-2.2617-5.945-4.394159-8.9821-6.332732-.45233-.258574-.84005-.452342-1.2924-.646212-2.13246-1.356992-4.13566-2.067831-6.13885-2.714007z" fill="#e0234e" fill-rule="evenodd" transform="translate(0 -41.412487)"></path></svg><!--/$--></span>NestJS</span></a><a aria-label="fastify" href="/ru/doc/environment/fastify" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" preserveAspectRatio="xMidYMid" viewBox="0 0 256 167.509" role="img" aria-label="Fastify logo"><path fill="currentColor" d="M247.942 23.314 256 2.444l-.35-1.293-79.717 21.003C184.433 9.86 181.513 0 181.513 0s-25.457 16.257-44.709 15.832c-19.251-.426-25.457-5.564-54.977 3.853-29.52 9.41-37.86 38.295-46.419 44.5S0 90.603 0 90.603l.058.359 24.207-7.707S17.625 89.51 3.52 108.52l-.659-.609.025.134s11.336 17.324 22.463 14.121c1.118-.325 2.377-.859 3.753-1.56 4.48 2.495 10.327 4.947 16.783 5.622 0 0-4.37-5.08-8.016-10.86.984-.634 1.994-1.293 3.02-1.96l-.476.334 9.217 3.386-1.017-8.666c.033-.017.058-.042.091-.059l9.059 3.328-1.126-7.882a76.868 76.868 0 0 1 3.436-1.693l9.443-35.717 39.045-26.634-3.103 7.808c-7.916 19.468-22.78 24.064-22.78 24.064l-6.206 2.352c-4.612 5.455-6.556 6.798-8.14 25.107 3.72-.934 7.273-1.16 10.492-.292 16.683 4.496 22.463 24.599 17.967 30.162-1.126 1.393-3.803 3.77-7.181 6.565h-6.773l-.092 5.488c-.234.184-.467.359-.693.542h-6.89l-.083 5.355c-.609.468-1.218.918-1.801 1.36-6.473.133-14.673-5.514-14.673-5.514 0 5.139 4.28 13.046 4.28 13.046s.283-.133.758-.367c-.417.309-.65.476-.65.476s17.324 11.552 28.235 7.273c9.7-3.804 34.816-23.606 56.495-32.981l65.603-17.283 8.65-22.413-49.997 13.17V83.597l58.664-15.457 8.65-22.413-67.297 17.734V43.324z"></path></svg><!--/$--></span>Fastify</span></a><a aria-label="hono" href="/ru/doc/environment/hono" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" preserveAspectRatio="xMidYMid" viewBox="0 0 256 330" role="img" aria-label="Hono logo"><path d="M134.129.029c.876-.113 1.65.108 2.319.662a1256.253 1256.253 0 0 1 69.573 93.427c16.094 24.231 29.788 49.851 41.082 76.862 18.037 48.108 8.65 89.963-28.16 125.564-32.209 27.22-69.314 37.822-111.318 31.805-50.208-10.237-84.332-39.28-102.373-87.133C.553 225.638-.993 209.736.614 193.51c2.676-27.93 9.302-54.877 19.878-80.838 4.407-10.592 10.15-20.31 17.228-29.154a381.88 381.88 0 0 1 16.565 21.203c2.44 2.55 4.98 4.98 7.62 7.289C82.06 72.01 106.135 34.685 134.13.029Z" fill="#FF5B11" opacity=".993"></path><path d="M129.49 53.7c24.314 28.2 46.29 58.238 65.93 90.114a187.318 187.318 0 0 1 15.24 33.13c8.338 32.804-.607 59.86-26.836 81.169-25.367 17.85-53.196 23.15-83.488 15.902-32.666-10.136-51.55-32.113-56.653-65.929-1.238-10.662-.133-21.043 3.314-31.142a225.41 225.41 0 0 1 17.89-35.78l19.878-29.155a5509.508 5509.508 0 0 0 44.726-58.31Z" fill="#FF9758"></path></svg><!--/$--></span>Hono</span></a><a aria-label="adonis" href="/ru/doc/environment/adonisjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" role="img" aria-label="Adonis logo"><path d="M106.812 307.933l78.418-178.207c13.23-30.039 38.692-46.332 70.77-46.332 32.078 0 57.535 16.29 70.773 46.328l78.414 178.211c3.562 8.656 6.617 19.86 6.617 29.531 0 44.297-31.059 75.356-75.36 75.356-15.085 0-27.07-3.848-39.198-7.746-12.43-3.993-25.012-8.036-41.246-8.036-16.047 0-28.938 4.079-41.614 8.09-12.257 3.88-24.316 7.692-38.832 7.692-44.296 0-75.359-31.055-75.359-75.352 0-9.676 3.059-20.879 6.617-29.535z" fill="#fff"></path><path d="M6 256c0 201.628 48.371 250 250 250 201.628 0 250-48.372 250-250C506 54.37 457.627 6 256 6 54.37 6 6 54.371 6 256zm100.812 51.933l78.418-178.207c13.23-30.039 38.692-46.332 70.77-46.332 32.078 0 57.535 16.29 70.773 46.328l78.414 178.211c3.562 8.656 6.617 19.86 6.617 29.531 0 44.297-31.059 75.356-75.36 75.356-15.085 0-27.07-3.848-39.198-7.746-12.43-3.993-25.012-8.036-41.246-8.036-16.047 0-28.938 4.079-41.614 8.09-12.257 3.88-24.316 7.692-38.832 7.692-44.296 0-75.359-31.055-75.359-75.352 0-9.676 3.059-20.879 6.621-29.535h-.004zM256 160.785L178.605 335.94c22.914-10.695 49.39-15.785 77.395-15.785 26.988 0 54.48 5.09 76.374 15.781L256 160.789v-.004z" fill="#5a45ff"></path></svg><!--/$--></span>Adonis</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1u8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="truncate font-semibold text-neutral transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text" label="other"><span class="flex items-center gap-1.5 opacity-60">Другое</span></span></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1u8qb9bcq_-accordion-content" aria-labelledby="_R_1u8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="lynx-and-react" href="/ru/doc/environment/lynx-and-react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="27" height="28" viewBox="0 0 27 28" fill="currentColor" role="img" aria-label="Lynx logo" xmlns="http://www.w3.org/2000/svg" style="z-index:0" class="shrink-0 size-3.5"><g style="opacity:0"></g><g><circle style="fill:#ffffff;stroke-width:0.2;stroke:#1a1a1a;stroke-dasharray:none" cx="13.533393" cy="-14.052804" r="13.173257" transform="scale(1,-1)"></circle><g transform="matrix(0.81399984,0,0,0.81399984,2.5290274,2.4955799)" style="fill:#000000"><path fill-rule="evenodd" clip-rule="evenodd" d="M 7.56542,6.19594 3.90642,8.7164 C 3.50877,8.99031 3.23346,9.40191 3.13675,9.86708 L 2.77902,11.5878 C 2.76005,11.679 2.71799,11.7642 2.65665,11.8355 l -1.660344,2.1766 c -0.223545,0.2601 -0.218154,0.9511 0.394134,1.3936 0.23479,0.2046 0.54871,0.6634 0.90578,1.1853 0.75602,1.1049 1.70547,2.4926 2.5069,2.3484 1.13408,-0.3984 2.52232,-0.5259 3.58816,0 2.07192,1.7888 1.56321,3.4381 0.83386,5.8027 -0.29349,0.9515 -0.62271,2.0188 -0.83386,3.2576 0.99515,-3.622 3.23292,-7.8286 7.26792,-9.256 -0.727,-0.5939 -2.2106,-1.1456 -3.5235,-1.2784 0,0 4.0334,-3.4532 9.0082,-5.0399 C 17.671,4.16205 11.9386,0.213095 11.9386,0.213095 11.6465,-0.148197 11.0566,-0.0296711 10.9349,0.414774 10.8371,1.72112 10.675,2.60942 10.4074,3.44676 L 8.39128,1.12029 C 8.18068,0.866399 7.75965,1.013 7.76176,1.33949 8.10312,3.23719 8.05521,4.30239 7.56542,6.19594 Z M 8.9846,6.02248 8.99663,6.02171 C 9.02298,6.02002 9.0489,6.01659 9.07424,6.01153 Z M 11.7123,1.7617 C 13.094,4.1491 13.7199,5.5054 13.9322,8.03659 12.4625,7.2017 11.8221,6.98923 10.7413,6.99451 11.3718,5.0773 11.5644,3.92284 11.7123,1.7617 Z" fill="white" style="fill:#000000"></path><path d="m 20.5926,19.4929 c -5.6277,1.2877 -8.8245,3.2269 -11.26936,8.5072 4.38876,-7.3634 17.67436,-6.0465 17.67436,-6.0465 -0.2482,-1.2028 -2.8897,-3.4965 -4.627,-4.9033 0,0 1.4016,-1.7231 4.5,-2.5953 0,0 -5.9571,0.3452 -9.4251,2.2177 1.1235,0.5929 2.5626,1.5936 3.1471,2.8202 z" fill="white" style="fill:#000000"></path></g></g></svg><!--/$--></span>Lynx и React</span></a></div></div></div></div></div></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="plugins"><span class="flex items-center gap-1.5 opacity-60">Plugins</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="syncJSON" href="/ru/doc/plugin/sync-json" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">JSON</span></a></li><li><a aria-label="syncPO" href="/ru/doc/plugin/sync-po" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">gettext (.po)</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="dev-tools"><span class="flex items-center gap-1.5 opacity-60">Инструменты разработчика</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="vs-code-extension" href="/ru/doc/vs-code-extension" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Расширение VS Code</span></a></li><li><a aria-label="mcp-server" href="/ru/doc/mcp-server" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Сервер MCP</span></a></li><li><a aria-label="agent-skills" href="/ru/doc/agent_skills" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Навики агента</span></a></li><li><a aria-label="lsp" href="/ru/doc/lsp" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Language Server Protocol</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="releases"><span class="flex items-center gap-1.5 opacity-60">Релизы</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="v9" href="/ru/doc/releases/v9" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v9</span></a></li><li><a aria-label="v8" href="/ru/doc/%D1%80%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B/v8" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v8</span></a></li><li><a aria-label="v7" href="/ru/doc/releases/v7" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v7</span></a></li><li><a aria-label="v6" href="/ru/doc/releases/v6" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v6</span></a></li></ul></div><div><a aria-label="benchmark" href="/ru/doc/benchmark" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Бенчмарк</span></a><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="nextjs" href="/ru/doc/benchmark/nextjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js</span></a></li><li><a aria-label="tanstack" href="/ru/doc/benchmark/tanstack" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg height="660" viewBox="0 0 663 660" width="663" xmlns="http://www.w3.org/2000/svg" fill="currentColor" role="img" aria-label="Tanstack logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m305.114318.62443771c8.717817-1.14462121 17.926803-.36545135 26.712694-.36545135 32.548987 0 64.505987 5.05339923 95.64868 14.63098274 39.74418 12.2236582 76.762804 31.7666864 109.435876 57.477568 40.046637 31.5132839 73.228974 72.8472109 94.520714 119.2362609 39.836383 86.790386 39.544267 191.973146-1.268422 278.398081-26.388695 55.880442-68.724007 102.650458-119.964986 136.75724-41.808813 27.828603-90.706831 44.862601-140.45707 50.89341-63.325458 7.677926-131.784923-3.541603-188.712259-32.729444-106.868873-54.795293-179.52309291-165.076271-180.9604082-285.932068-.27660564-23.300971.08616998-46.74071 4.69884909-69.814998 7.51316071-37.57857 20.61272131-73.903917 40.28618971-106.877282 21.2814003-35.670293 48.7704861-67.1473767 81.6882804-92.5255597 38.602429-29.7610135 83.467691-51.1674988 130.978372-62.05777669 11.473831-2.62966514 22.9946-4.0869914 34.57273-5.4964306l3.658171-.44480576c3.050084-.37153079 6.104217-.74794222 9.162589-1.14972654zm-110.555861 549.44131429c-14.716752 1.577863-30.238964 4.25635-42.869928 12.522173 2.84343.683658 6.102369.004954 9.068638 0 7.124652-.011559 14.317732-.279903 21.434964.032202 17.817402.781913 36.381729 3.63214 53.58741 8.350042 22.029372 6.040631 41.432961 17.928687 62.656049 25.945156 22.389644 8.456554 44.67706 11.084675 68.427 11.084675 11.96813 0 23.845573-.035504 35.450133-3.302696-6.056202-3.225083-14.72582-2.619864-21.434964-3.963236-14.556814-2.915455-28.868774-6.474936-42.869928-11.470264-10.304996-3.676672-20.230803-8.214291-30.11097-12.848661l-6.348531-2.985046c-9.1705-4.309263-18.363277-8.560752-27.845391-12.142608-24.932161-9.418465-52.560181-14.071964-79.144482-11.221737zm22.259385-62.614168c-29.163917 0-58.660076 5.137344-84.915434 18.369597-6.361238 3.206092-12.407546 7.02566-18.137277 11.258891-1.746125 1.290529-4.841829 2.948483-5.487351 5.191839-.654591 2.275558 1.685942 4.182039 3.014086 5.637703 6.562396-3.497556 12.797498-7.199878 19.78612-9.855246 45.19892-17.169893 99.992458-13.570779 145.098218 2.172348 22.494346 7.851335 43.219483 19.592421 65.129314 28.800338 24.503461 10.297807 49.53043 16.975034 75.846795 20.399104 31.04195 4.037546 66.433549.7654 94.808495-13.242161 9.970556-4.921843 23.814245-12.422267 28.030337-23.320339-5.207047.454947-9.892236 2.685918-14.83959 4.224149-7.866632 2.445646-15.827248 4.51974-23.908229 6.138887-27.388113 5.486604-56.512458 6.619429-84.091013 1.639788-25.991939-4.693152-50.142596-14.119246-74.179513-24.03502l-3.068058-1.268177c-2.045137-.846788-4.089983-1.695816-6.135603-2.544467l-3.069142-1.272366c-12.279956-5.085721-24.606928-10.110797-37.210937-14.51024-24.485325-8.546552-50.726667-13.784628-76.671218-13.784628zm51.114145-447.9909432c-34.959602 7.7225298-66.276908 22.7605319-96.457338 41.7180089-17.521434 11.0054099-34.281927 22.2799893-49.465301 36.4444283-22.5792616 21.065423-39.8360564 46.668751-54.8866988 73.411509-15.507372 27.55357-25.4498976 59.665686-30.2554517 90.824149-4.7140432 30.568106-5.4906485 62.70747-.0906864 93.301172 6.7503648 38.248526 19.5989769 74.140579 39.8896436 107.337631 6.8187918-3.184625 11.659796-10.445603 17.3128555-15.336896 11.4149428-9.875888 23.3995608-19.029311 36.2745548-26.928535 4.765981-2.923712 9.662222-5.194315 14.83959-7.275014 1.953055-.785216 5.14604-1.502727 6.06527-3.647828 1.460876-3.406732-1.240754-9.335897-1.704904-12.865654-1.324845-10.095517-2.124534-20.362774-1.874735-30.549941.725492-29.668947 6.269727-59.751557 16.825623-87.521453 7.954845-20.924233 20.10682-39.922168 34.502872-56.971512 4.884699-5.785498 10.077731-11.170545 15.437296-16.512656 3.167428-3.157378 7.098271-5.858983 9.068639-9.908915-10.336599.006606-20.674847 2.987289-30.503603 6.013385-21.174447 6.519522-41.801477 16.19312-59.358362 29.841512-8.008432 6.226409-13.873368 14.387371-21.44733 20.939921-2.32322 2.010516-6.484901 4.704691-9.695199 3.187928-4.8500728-2.29042-4.1014979-11.835213-4.6571581-16.222019-2.1369011-16.873476 4.2548401-38.216325 12.3778671-52.843142 13.039878-23.479694 37.150915-43.528712 65.467327-42.82854 12.228647.302197 22.934587 4.551115 34.625711 7.324555-2.964621-4.211764-6.939158-7.28162-10.717482-10.733763-9.257431-8.459031-19.382979-16.184864-30.503603-22.028985-4.474136-2.350694-9.291232-3.77911-14.015169-5.506421-2.375159-.867783-5.36616-2.062533-6.259834-4.702213-1.654614-4.888817 7.148561-9.416813 10.381943-11.478522 12.499882-7.969406 27.826705-14.525258 42.869928-14.894334 23.509209-.577147 46.479246 12.467678 56.162903 34.665926 3.404469 7.803171 4.411273 16.054969 5.079109 24.382907l.121749 1.56229.174325 2.345587c.01913.260708.038244.521433.057403.782164l.11601 1.56437.120128 1.563971c7.38352-6.019164 12.576553-14.876995 19.78612-21.323859 16.861073-15.07846 39.936636-21.7722 61.831627-14.984333 19.786945 6.133107 36.984382 19.788105 47.105807 37.959541 2.648042 4.754231 10.035685 16.373942 4.698379 21.109183-4.177345 3.707277-9.475079.818243-13.880788-.719162-3.33605-1.16376-6.782939-1.90214-10.241828-2.585698l-1.887262-.369639c-.629089-.122886-1.257979-.246187-1.886079-.372129-11.980496-2.401886-25.91652-2.152533-37.923398-.041284-7.762754 1.364839-15.349083 4.127545-23.083807 5.271929v1.651348c21.149714.175043 41.608563 12.240618 52.043268 30.549941 4.323267 7.585468 6.482428 16.267431 8.138691 24.770223 2.047864 10.50918.608423 21.958802-2.263037 32.201289-.962925 3.433979-2.710699 9.255807-6.817143 10.046802-2.902789.558982-5.36781-2.330878-7.024898-4.279468-4.343878-5.10762-8.475879-9.96341-13.573278-14.374161-12.895604-11.157333-26.530715-21.449361-40.396663-31.373138-7.362086-5.269452-15.425755-12.12007-23.908229-15.340199 2.385052 5.745041 4.721463 11.086326 5.532694 17.339156 2.385876 18.392716-5.314223 35.704625-16.87179 49.540445-3.526876 4.222498-7.29943 8.475545-11.744712 11.755948-1.843407 1.360711-4.156734 3.137561-6.595373 2.752797-7.645687-1.207961-8.555849-12.73272-9.728176-18.637115-3.970415-19.998652-2.375984-39.861068 3.132802-59.448534-4.901187 2.485279-8.443727 7.923994-11.521293 12.385111-6.770975 9.816439-12.645804 20.199291-16.858599 31.375615-16.777806 44.519521-16.616219 96.664142 5.118834 139.523233 2.427098 4.786433 6.110614 4.144058 10.894733 4.144058.720854 0 1.44257-.004515 2.164851-.010924l2.168232-.022283c4.338648-.045438 8.686803-.064635 12.979772.508795 2.227588.297243 5.320818.032202 7.084256 1.673642 2.111344 1.966755.986008 5.338808.4996 7.758859-1.358647 6.765574-1.812904 12.914369-1.812904 19.816178 9.02412-1.398692 11.525415-15.866153 14.724172-23.118874 3.624982-8.216283 7.313444-16.440823 10.667192-24.770223 1.648843-4.093692 3.854171-8.671229 3.275427-13.210785-.649644-5.10184-4.335633-10.510831-6.904531-14.862134-4.86244-8.234447-10.389363-16.70834-13.969002-25.595896-2.861567-7.104926-.197036-15.983399 7.871579-18.521521 4.450228-1.400344 9.198073 1.345848 12.094266 4.562675 6.07269 6.74328 9.992815 16.777697 14.401823 24.692609l34.394873 61.925556c2.920926 5.243856 5.848447 10.481933 8.836976 15.687808 1.165732 2.031158 2.352075 5.167068 4.740424 6.0332 2.127008.77118 5.033095-.325315 7.148561-.748886 5.492297-1.099798 10.97635-2.287117 16.488434-3.28288 6.605266-1.193099 16.673928-.969342 21.434964-6.129805-6.963066-2.205375-15.011895-2.074919-22.259386-1.577863-4.352947.298894-9.178287 1.856116-13.178381-.686135-5.953149-3.783239-9.910373-12.522173-13.552668-18.377854-8.980425-14.439388-17.441465-29.095929-26.041008-43.760726l-1.376261-2.335014-2.765943-4.665258c-1.380597-2.334387-2.750786-4.67476-4.079753-7.036188-1.02723-1.826391-2.549937-4.233231-1.078344-6.24705 1.545791-2.114476 4.91472-2.239146 7.956473-2.243117l.603351.000261c1.195428.001526 2.315572.002427 3.222811-.11692 12.27399-1.615019 24.718635-2.952611 37.098976-2.952611-.963749-3.352237-3.719791-7.141255-2.838484-10.73046 1.972017-8.030506 13.526287-10.543033 18.899867-4.780653 3.60767 3.868283 5.704174 9.192229 8.051303 13.859765 3.097352 6.162006 6.624228 12.118418 9.940876 18.16483 5.805578 10.585967 12.146205 20.881297 18.116667 31.375615.49237.865561.999687 1.726685 1.512269 2.587098l.771613 1.290552c2.577138 4.303168 5.164895 8.635123 6.553094 13.461506-20.735854-.9487-36.30176-25.018751-45.343193-41.283704-.721369 2.604176.450959 4.928448 1.388326 7.431066 1.948109 5.197619 4.276275 10.147535 7.20627 14.862134 4.184765 6.732546 8.982075 13.665732 15.313633 18.553722 11.236043 8.673707 26.05255 8.721596 39.572241 7.794364 8.669619-.595311 19.50252-4.542034 28.030338-1.864372 8.513803 2.673532 11.940924 12.063098 6.884745 19.276187-3.787393 5.403211-8.842747 7.443452-15.128962 8.257566 4.445282 9.53571 10.268996 18.385285 14.490036 28.072919 1.758491 4.035895 3.59118 10.22102 7.8048 12.350433 2.805507 1.416857 6.824562.09743 9.85761.034678-3.043765-8.053625-8.742992-14.887729-11.541904-23.118874 8.533589.390544 16.786875 4.843404 24.732651 7.685374 15.630376 5.590144 31.063836 11.701854 46.475333 17.86913l7.112077 2.848685c6.338978 2.538947 12.71588 5.052299 18.961699 7.812528 2.285297 1.009799 5.449427 3.370401 7.975455 1.917215 2.061054-1.186494 3.394144-4.015253 4.665403-5.931643 3.55573-5.361927 6.775921-10.928622 9.965609-16.513481 12.774414-22.36586 22.143967-46.872692 28.402976-71.833646 20.645168-82.323009 2.934117-173.156241-46.677107-241.922507-19.061454-26.420745-43.033164-49.262193-69.46165-68.1783861-66.13923-47.336721-152.911262-66.294198-232.486917-48.7172481zm135.205158 410.5292842c-17.532977 4.570931-35.601827 8.714164-53.58741 11.040088 2.365265 8.052799 8.145286 15.885969 12.376218 23.118874 1.635653 2.796558 3.3859 6.541816 6.618457 7.755557 3.651364 1.370619 8.063669-.853747 11.508927-1.975838-1.595256-4.364513-4.279573-8.292245-6.476657-12.385112-.905215-1.687677-2.305907-3.685809-1.559805-5.68972 1.410585-3.786541 7.266452-3.563609 10.509727-4.221671 8.54678-1.733916 17.004522-3.898008 25.557073-5.611281 3.150939-.631641 7.538512-2.342438 10.705115-1.285575 2.371037.791232 3.800147 2.744743 5.152304 4.781948l.606196.918752c.80912 1.222827 1.637246 2.41754 2.671212 3.351165 3.457625 3.121874 8.628398 3.60159 13.017619 4.453686-2.678546-6.027421-7.130424-11.301001-9.984571-17.339156-1.659561-3.511592-3.023155-8.677834-6.656381-10.707341-5.005064-2.795733-15.341663 2.461334-20.458024 3.795624zm-110.472507-40.151706c-.825246 10.467897-4.036369 18.984725-9.068639 28.072919 5.76683.729896 11.649079.989984 17.312856 2.39363 4.244947 1.051908 8.156828 3.058296 12.366325 4.211763-2.250671-6.157877-6.426367-11.651913-9.661398-17.339156-3.266358-5.740912-6.189758-12.717032-10.949144-17.339156z" transform="translate(.9778)"></path></svg><!--/$--></span>TanStack</span></a></li><li><a aria-label="vue" href="/ru/doc/benchmark/vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Vue</span></a></li><li><a aria-label="solid" href="/ru/doc/benchmark/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Solid</span></a></li><li><a aria-label="svelte" href="/ru/doc/benchmark/svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Svelte</span></a></li></ul></div><div><a aria-label="Перейти к блогу" href="/ru/blog" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Блог</span></a></div><div><a aria-label="Нажмите, чтобы перейти к интеллектуальному чат-боту для умной документации" href="/ru/doc/chat" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text w-full truncate text-nowrap p-2 text-left font-semibold transition-color flex items-center"><span class="flex items-center gap-1.5 opacity-60"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg>Задать вопрос</span></a></div></nav></div></div></div></div></div></div></div></aside><div class="mx-1 mb-3 flex min-h-0 min-w-0 flex-1 flex-row rounded-2xl border border-neutral/40 bg-background md:mr-2"><article aria-label="Содержимое документации" class="no-scrollbar relative mb-3 h-full max-h-[calc(100vh-4.5rem)] w-auto flex-1 grow overflow-auto px-4 pb-24 max-md:pl-10 md:px-10" id="content"><div class="m-auto max-w-3xl"><nav aria-label="breadcrumb"><ol class="flex flex-row flex-wrap items-center gap-2 mt-12 ml-3 text-xs" itemScope="" itemType="http://schema.org/BreadcrumbList"><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><a href="/ru/doc/get-started" aria-label="Go to Documentation" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral" itemProp="item" itemScope="" itemType="https://schema.org/WebPage" itemID="/ru/doc/get-started"><span itemProp="name">Documentation</span></a><meta itemProp="position" content="1"/></li><li aria-hidden="true" class="flex items-center"><span class="text-neutral"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></span></li><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><span itemProp="item" class="inline-flex items-center font-medium text-neutral-700 transition-colors duration-200"><span itemProp="name">Окружающая среда</span><meta itemProp="position" content="2"/></span></li><li aria-hidden="true" class="flex items-center"><span class="text-neutral"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></span></li><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><a href="https://intlayer.org/ru/doc/environment/vite-and-svelte" aria-label="Go to Vite и Svelte" target="_self" aria-current="page" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral" itemProp="item" itemScope="" itemType="https://schema.org/WebPage" itemID="https://intlayer.org/ru/doc/environment/vite-and-svelte"><span itemProp="name">Vite и Svelte</span></a><meta itemProp="position" content="3"/></li></ol></nav><header class="z-10 mx-auto mt-5 flex flex-col gap-2 px-4 py-2 text-xs"><span class="flex items-center gap-2">Автор<!-- -->:<!-- --> <div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-author-social-medias" aria-haspopup="true"><a href="https://github.com/aymericzip" aria-label="Страница github Aymeric PINEAU" rel="noopener noreferrer nofollow" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl flex items-center gap-2 text-neutral"><div class="rounded-full border-text ring-offset-0 transition-ring duration-200 size-7 border-[1px] p-0.25 scale-70" aria-label="Аватар Aymeric PINEAU" role="img"><div class="relative flex aspect-square size-full flex-row items-center justify-center"><div class="absolute top-0 left-0 flex aspect-square size-full flex-col items-center justify-center rounded-full bg-text text-text-opposite"><img class="size-full rounded-full object-cover" src="https://avatars.githubusercontent.com/u/62554073?v=4&size=124" srcSet="https://avatars.githubusercontent.com/u/62554073?v=4&size=124" alt="Аватар Aymeric PINEAU" width="59" height="59" loading="lazy" draggable="false"/></div></div></div>Aymeric PINEAU</a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 flex w-auto min-w-0 flex-row gap-2 p-2 delay-200 group-hover/popover:delay-100" role="group" aria-labelledby="unrollable-panel-button-author-social-medias" id="unrollable-panel-author-social-medias"><a href="https://www.linkedin.com/in/aymericpineau/" aria-label="Go to https://www.linkedin.com/in/aymericpineau/" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg role="img" aria-label="LinkedIn logo" xmlns="http://www.w3.org/2000/svg" width="72" height="72" viewBox="0 0 72 72" class="h-auto max-h-full max-w-full"><mask id="linkedin-mask"><rect width="72" height="72" fill="white"></rect><path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="black"></path></mask><rect width="72" height="72" rx="8" fill="currentColor" mask="url(#linkedin-mask)"></rect></svg></a><a href="https://x.com/aymericzip" aria-label="Go to https://x.com/aymericzip" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 271" width="300" height="271" fill="currentColor" role="img" aria-label="X logo" class="h-auto max-h-full max-w-full"><path d="m236 0h46l-101 115 118 156h-92.6l-72.5-94.8-83 94.8h-46l107-123-113-148h94.9l65.5 86.6zm-16.1 244h25.5l-165-218h-27.4z"></path></svg></a><a href="https://github.com/aymericzip" aria-label="Go to https://github.com/aymericzip" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="h-auto max-h-full max-w-full"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg></a></div></div></span><div class="flex w-full flex-row justify-between gap-4 py-2"><span class="block">Создание<!-- -->:<span class="ml-2 text-neutral">2025-04-18</span></span><span class="block">Последнее обновление<!-- -->:<span class="ml-2 text-neutral">2026-05-31</span></span></div></header><div class="text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/70 p-0 border-text sticky top-10 z-10 mx-auto mt-5 flex max-w-3xl flex-col gap-2 px-4 py-2 max-md:overflow-x-auto"><div class="flex w-full flex-row justify-between gap-4"><div class="flex w-full shrink flex-row items-center justify-start gap-4"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-mcp" aria-haspopup="true"><a aria-label="Посмотреть шаблон приложения" rel="noopener noreferrer" href="https://github.dev/aymericzip/intlayer-vite-svelte-template" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="size-4"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-mcp" id="unrollable-panel-mcp"><strong>Посмотреть шаблон приложения на GitHub</strong><p class="text-neutral">Для этой страницы доступен шаблон приложения.</p></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-application-showcase" aria-haspopup="true"><a aria-label="Демо-приложение" rel="noopener noreferrer" href="https://intlayer-vite-svelte-template.vercel.app" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe size-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-application-showcase" id="unrollable-panel-application-showcase"><strong>Посмотреть демонстрационное приложение</strong><p class="text-neutral">Эта страница ведёт на живую демонстрацию шаблона.</p></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-summarize" aria-haspopup="true"><a href="https://chatgpt.com/?q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя ChatGPT" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><!--$--><svg role="img" aria-label="ChatGPT logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" fill="currentColor" class="size-4"><path d="m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z"></path></svg><!--/$--></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-50 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-summarize" id="unrollable-panel-summarize"><strong>Ссылайтесь на этот документ на ваш любимый ассистент AI</strong><a href="https://chatgpt.com/?q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя ChatGPT" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="ChatGPT logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" fill="currentColor" class="size-4"><path d="m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z"></path></svg><!--/$-->ChatGPT</a><a href="https://claude.ai/new?q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя Claude" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Anthropic logo" fill="none" viewBox="0 0 24 24" height="24" width="24" class="size-4"><path fill="currentColor" d="m13.788825 3.932 6.43325 16.136075h3.5279L17.316725 3.932H13.788825Z" stroke-width="0.25"></path><path fill="currentColor" d="m6.325375 13.682775 2.20125 -5.67065 2.201275 5.67065H6.325375ZM6.68225 3.932 0.25 20.068075h3.596525l1.3155 -3.3886h6.729425l1.315275 3.3886h3.59655L10.371 3.932H6.68225Z" stroke-width="0.25"></path></svg><!--/$-->Claude</a><a href="https://chat.deepseek.com/?q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя DeepSeek" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="DeepSeek logo" fill="currentColor" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"></path></svg><!--/$-->DeepSeek</a><a href="https://www.google.com/search?udm=50&aep=11&q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя Google AI mode" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Google AI logo" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="size-4"><path d="M915.2 448l-4.2-17.8H524V594h231.2c-24 114-135.4 174-226.4 174-66.2 0-136-27.8-182.2-72.6-47.4-46-77.6-113.8-77.6-183.6 0-69 31-138 76.2-183.4 45-45.2 113.2-70.8 181-70.8 77.6 0 133.2 41.2 154 60l116.4-115.8c-34.2-30-128-105.6-274.2-105.6-112.8 0-221 43.2-300 122C144.4 295.8 104 408 104 512s38.2 210.8 113.8 289c80.8 83.4 195.2 127 313 127 107.2 0 208.8-42 281.2-118.2 71.2-75 108-178.8 108-287.6 0-45.8-4.6-73-4.8-74.2z"></path></svg><!--/$-->Google AI mode</a><a href="https://gemini.google.com/?q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя Gemini" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Gemini logo" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="size-4"><path d="M16 8.016A8.522 8.522 0 008.016 16h-.032A8.521 8.521 0 000 8.016v-.032A8.521 8.521 0 007.984 0h.032A8.522 8.522 0 0016 7.984v.032z" fill="currentColor"></path></svg><!--/$-->Gemini</a><a href="https://www.perplexity.ai/search/new?q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя Perplexity" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg width="400" role="img" aria-label="Perplexity logo" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg" class="size-4"><path fill-rule="evenodd" clip-rule="evenodd" d="M101.008 42L190.99 124.905L190.99 124.886L190.99 42.1913H208.506L208.506 125.276L298.891 42V136.524L336 136.524V272.866H299.005V357.035L208.506 277.525L208.506 357.948H190.99L190.99 278.836L101.11 358V272.866H64V136.524H101.008V42ZM177.785 153.826H81.5159V255.564H101.088V223.472L177.785 153.826ZM118.625 231.149V319.392L190.99 255.655L190.99 165.421L118.625 231.149ZM209.01 254.812V165.336L281.396 231.068V272.866H281.489V318.491L209.01 254.812ZM299.005 255.564H318.484V153.826L222.932 153.826L299.005 222.751V255.564ZM281.375 136.524V81.7983L221.977 136.524L281.375 136.524ZM177.921 136.524H118.524V81.7983L177.921 136.524Z" fill="currentColor"></path></svg><!--/$-->Perplexity</a><a href="https://chat.mistral.ai/chat/?q=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя Mistral" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg fill="currentColor" role="img" aria-label="Mistral logo" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path clip-rule="evenodd" d="M3.428 3.4h3.429v3.428h3.429v3.429h-.002 3.431V6.828h3.427V3.4h3.43v13.714H24v3.429H13.714v-3.428h-3.428v-3.429h-3.43v3.428h3.43v3.429H0v-3.429h3.428V3.4zm10.286 13.715h3.428v-3.429h-3.427v3.429z"></path></svg><!--/$-->Mistral</a><a href=" https://x.com/i/grok?text=Суммируйте документ, используя https://intlayer.org/ru/doc/environment/vite-and-svelte.md" aria-label="Суммируйте документ, используя Grok" target="_self" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Grok logo" fill="currentColor" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg><!--/$-->Grok</a><p class="text-neutral">Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI</p></div></div><div class="flex size-5 h-8 flex-1 flex-row items-center justify-between gap-5 p-2"><svg role="progressbar" viewBox="0 0 10 10" aria-valuenow="0" aria-valuemin="0" aria-valuemax="1" class="block h-full shrink-0"><circle cx="5" cy="5" r="4" fill="none" stroke-width="1" class="stroke-current/25"></circle><circle cx="5" cy="5" r="4" fill="none" stroke-width="1" stroke="currentColor" stroke-dasharray="25.132741228718345" stroke-dashoffset="25.132741228718345" stroke-linecap="round" transform="rotate(-90 5 5)" class="transition-all"></circle></svg><span class="w-full flex-1 truncate text-neutral text-xs"></span></div></div><div class="flex shrink-0 flex-row items-center justify-end gap-4"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-outdated-translation" aria-haspopup="true"><div class="flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock size-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg></div><div class="backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-neutral text-sm" role="group" aria-labelledby="unrollable-panel-button-outdated-translation" id="unrollable-panel-outdated-translation"><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 divide-y divide-dashed divide-text/20 border-text gap-0 mt-3 max-h-[60vh] min-w-64" role="list" aria-label="Document history"><h4 class="mb-2 pb-4 font-medium text-sm text-text">История версий</h4><ol class="divide-y divide-dashed divide-text/20 overflow-y-auto p-1"><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->8.9.0</span><span class="text-nowrap">04.05.2026</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Добавить команду init"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->7.5.9</span><span class="text-nowrap">30.12.2025</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Обновление документации"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->5.5.11</span><span class="text-nowrap">19.11.2025</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Инициализация истории"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->5.5.10</span><span class="text-nowrap">29.06.2025</span></div></li></ol></div></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-language" aria-haspopup="true"><div class="flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages size-4" aria-hidden="true"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg></div><div class="backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-neutral text-sm" role="group" aria-labelledby="unrollable-panel-button-language" id="unrollable-panel-language"><p>Содержимое этой страницы было переведено с помощью ИИ.</p><a aria-label="Нажмите, чтобы сменить язык на английский" href="/doc/environment/vite-and-svelte" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text">Смотреть последнюю версию оригинального контента на английском</a></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-contribute" aria-haspopup="true"><a aria-label="Нажмите здесь, чтобы внести свой вклад" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/edit/main/docs/docs/ru/intlayer_with_vite+svelte.md" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-pen size-4" aria-hidden="true"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-contribute" id="unrollable-panel-contribute"><strong>Изменить эту документацию</strong><p class="text-neutral">Если у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.</p><a aria-label="Нажмите здесь, чтобы внести свой вклад" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+svelte.md" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text">Ссылка на документацию GitHub<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center p-2" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-4" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать</strong><p class="text-neutral">Копировать Markdown документа в буфер обмена</p></div></div></div></div></div><div class="m-auto flex max-w-2xl flex-col gap-8 p-4 text-text/90 max-md:px-0"><div class="flex flex-col gap-8 py-10"><h1 class="text-3xl mb-8 text-text" id="----vite--svelte---intlayer---i18n">Перевод вашего сайта на Vite и Svelte с использованием Intlayer | Интернационализация (i18n)</h1><div class="relative w-full rounded-xl border border-card"><div class="flex shrink-0 gap-3 p-3 sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto"><div class="relative z-0 flex size-full flex-row items-center gap-2 border-text text-text" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none" data-active="true" role="tab" aria-selected="true" aria-controls="tabpanel-code" id="tab-code" type="button" tabindex="0">Код</button><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none text-neutral/70" data-active="false" role="tab" aria-selected="false" aria-controls="tabpanel-demo" id="tab-demo" type="button" tabindex="-1">Демо</button></div></div><div class="relative w-full min-w-0 overflow-x-clip [-webkit-clip-path:inset(0)] [clip-path:inset(0)]" style="touch-action:pan-y"><div role="tablist" aria-orientation="horizontal" class="grid w-full min-w-0 transition-transform duration-300 ease-in-out" style="grid-template-columns:repeat(2, 100%);transform:translateX(-0%)"><div role="tabpanel" aria-labelledby="tab-code" id="tabpanel-code" aria-hidden="false" tabindex="0" data-active="true" class="w-full min-w-0 p-3 opacity-100 transition-opacity duration-300 ease-in-out"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts" title="Demo CodeSandbox - Intlayer" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">ide.intlayer.org<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div></div></div><div role="tabpanel" aria-labelledby="tab-demo" id="tabpanel-demo" aria-hidden="true" tabindex="-1" data-active="false" class="w-full min-w-0 p-3 transition-opacity duration-300 ease-in-out pointer-events-none opacity-0"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://intlayer-vite-svelte-template.vercel.app" title="Демо - intlayer-vite-svelte-template" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://intlayer-vite-svelte-template.vercel.app/" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">intlayer-vite-svelte-template.vercel.app<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div></div></div></div></div></div><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Содержание</h2><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="-intlayer--" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Почему Intlayer лучше альтернатив?</h2><p>По сравнению с основными решениями, такими как «svelte-i18n» или «i18next», Intlayer — это решение, которое включает в себя встроенные оптимизации, такие как:</p> <div class="text-text rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl px-3 py-2 border-[1.3px] border-neutral/20 backdrop-blur-none bg-transparent flex flex-col gap-1 overflow-hidden"> <div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Полное покрытие Svelte</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_1259j9bcq_-accordion-content" aria-labelledby="_R_1259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Intlayer оптимизирован для идеальной работы со Svelte, предлагая <strong class="text-text">охват контента на уровне компонентов</strong>, <strong class="text-text">реактивные переводы</strong> и все функции, необходимые для масштабирования интернационализации (i18n).</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Размер бандла</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_1i59j9bcq_-accordion-content" aria-labelledby="_R_1i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Вместо загрузки огромных файлов JSON на свои страницы загружайте только необходимый контент. Intlayer помогает <strong class="text-text">уменьшить размер бандла и страниц до 50 %</strong>.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_2259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Удобство обслуживания</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_2259j9bcq_-accordion-content" aria-labelledby="_R_2259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Определение области содержимого вашего приложения <strong class="text-text">облегчает обслуживание</strong> крупномасштабных приложений. Вы можете дублировать или удалить отдельную папку функций, не утруждав себя мысленным бременем проверки всей кодовой базы контента. Кроме того, Intlayer <strong class="text-text">полностью типизирован</strong>, что обеспечивает точность вашего контента.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_2i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Агент ИИ</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_2i59j9bcq_-accordion-content" aria-labelledby="_R_2i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Совместное размещение контента <strong class="text-text">уменьшает контекст, необходимый</strong> для моделей большого языка (LLM). Intlayer также поставляется с набором инструментов, таких как <strong class="text-text">CLI</strong> для проверки отсутствия переводов,<strong class="text-text"><a href="/ru/doc/lsp" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">LSP</a></strong>, <strong class="text-text"><a href="/ru/doc/mcp-server" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">MCP</a></strong>, и <strong class="text-text"><a href="/ru/doc/agent_skills" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">навыки агента</a></strong>, чтобы сделать работу разработчика (DX) еще более удобной для агентов ИИ.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_3259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Автоматизация</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_3259j9bcq_-accordion-content" aria-labelledby="_R_3259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Используйте автоматизацию для перевода в своем конвейере CI/CD, используя LLM по вашему выбору за счет вашего поставщика ИИ. Intlayer также предлагает <strong class="text-text">компилятор</strong> для автоматизации извлечения контента, а также <a href="/ru/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">веб-платформу</a>, которая помогает <strong class="text-text">переводить в фоновом режиме</strong>.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_3i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Производительность</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_3i59j9bcq_-accordion-content" aria-labelledby="_R_3i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Подключение больших файлов JSON к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента во время сборки (build time).</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_4259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Масштабирование с помощью не-разработчиками</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_4259j9bcq_-accordion-content" aria-labelledby="_R_4259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Intlayer — это больше, чем просто решение i18n. Он предоставляет <strong class="text-text">автономный <a href="/ru/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">визуальный редактор</a></strong> и <strong class="text-text"><a href="/ru/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">полный CMS</a></strong>, чтобы помочь вам управлять многоязычным контентом в <strong class="text-text">реальном времени</strong>, упрощая сотрудничество с переводчиками, копирайтерами и другими членами команды. Контент может храниться локально и/или удаленно.</p> </div></div></div></div></div><hr class="mx-6 mt-16 border-dashed text-neutral"/><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="----intlayer----vite--svelte" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Пошаговое руководство по настройке Intlayer в приложении на Vite и Svelte</h2><div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts" title="Демонстрация CodeSandbox - Как интернационализировать ваше приложение с помощью Intlayer" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">ide.intlayer.org<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div><p>Смотрите <a rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer-vite-svelte-template" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Шаблон приложения<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a> на GitHub.</p> <ol class="list-none"> <li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">1</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-1-установка-зависимостеи" aria-label="Шаг 1: Установка зависимостей">Установка зависимостей</h3></div> <p>Установите необходимые пакеты с помощью npm:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Выбрать менеджер пакетов"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm install intlayer svelte-intlayer</span><span class="line block w-full">npm install vite-intlayer --save-dev</span><span class="line block w-full">npx intlayer init</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> <ul class="mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80"><li><p><strong class="text-text">intlayer</strong></p> <p>Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, <a href="/ru/doc/concept/content" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">объявления контента</a>, транспиляции и <a href="/ru/doc/concept/cli" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">CLI-команд</a>.</p> </li><li><p><strong class="text-text">svelte-intlayer</strong> Пакет, который интегрирует Intlayer с приложением на Svelte. Он предоставляет провайдеры контекста и хуки для интернационализации в Svelte.</p> </li><li><p><strong class="text-text">vite-intlayer</strong> Включает плагин Vite для интеграции Intlayer с <a rel="noopener noreferrer" href="https://vite.dev/guide/why.html#why-bundle-for-production" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">сборщиком Vite<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a>, а также middleware для определения предпочтительной локали пользователя, управления cookie и обработки перенаправления URL.</p> </li></ul></div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">2</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-2-конфигурация-вашего-проекта" aria-label="Шаг 2: Конфигурация вашего проекта">Конфигурация вашего проекта</h3></div> <p>Создайте файл конфигурации для настройки языков вашего приложения:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">intlayer.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { Locales, type IntlayerConfig } from "intlayer";</span><span class="line block w-full"></span><span class="line block w-full">const config: IntlayerConfig = {</span><span class="line block w-full"> internationalization: {</span><span class="line block w-full"> locales: [</span><span class="line block w-full"> Locales.ENGLISH,</span><span class="line block w-full"> Locales.FRENCH,</span><span class="line block w-full"> Locales.SPANISH,</span><span class="line block w-full"> // Ваши другие локали</span><span class="line block w-full"> ],</span><span class="line block w-full"></span><span class="line block w-full"> defaultLocale: Locales.ENGLISH,</span><span class="line block w-full"> },</span><span class="line block w-full">};</span><span class="line block w-full"></span><span class="line block w-full">export default config;</span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Через этот файл конфигурации вы можете настроить локализованные URL, перенаправление в middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к <a href="/ru/doc/concept/configuration" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">документации по конфигурации</a>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">3</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-3-интеграция-intlayer-в-вашу-конфигурацию-vite" aria-label="Шаг 3: Интеграция Intlayer в вашу конфигурацию Vite">Интеграция Intlayer в вашу конфигурацию Vite</h3></div> <p>Добавьте плагин intlayer в вашу конфигурацию.</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { defineConfig } from "vite";</span><span class="line block w-full">import { svelte } from "@sveltejs/vite-plugin-svelte";</span><span class="line block w-full">import { intlayer } from "vite-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">// https://vitejs.dev/config/</span><span class="line block w-full">export default defineConfig({</span><span class="line block w-full"> plugins: [svelte(), intlayer()],</span><span class="line block w-full">});</span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Плагин Vite <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer()</code> используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов деклараций контента и отслеживает их в режиме разработки. Определяет переменные окружения Intlayer внутри приложения Vite. Кроме того, предоставляет алиасы для оптимизации производительности.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">4</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-4-объявите-ваш-контент" aria-label="Шаг 4: Объявите ваш контент">Объявите ваш контент</h3></div> <p>Создайте и управляйте декларациями контента для хранения переводов:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/app.content.tsx</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Выбрать формат словаря"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { t, type Dictionary } from "intlayer"; const appContent = { key: "app", content: { title: t({ en: "Hello World", fr: "Bonjour le monde", es: "Hola mundo", }), }, } satisfies Dictionary; export default appContent;</code></pre></div></div> <!-- --> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Ваши объявления контента могут быть определены в любом месте вашего приложения, как только они будут включены в директорию <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">contentDir</code> (по умолчанию, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">./src</code>). И соответствовать расширению файла объявления контента (по умолчанию, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}</code>).</blockquote> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Для получения дополнительной информации обратитесь к <a href="/ru/doc/concept/content" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">документации по объявлению контента</a>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">5</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-5-использование-intlayer-в-вашем-коде" aria-label="Шаг 5: Использование Intlayer в вашем коде">Использование Intlayer в вашем коде</h3></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script></span><span class="line block w-full"> import { useIntlayer } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full"> const content = useIntlayer("app");</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div></span><span class="line block w-full"></span><span class="line block w-full"></span><span class="line block w-full"><!-- Отобразить контент как простой контент --></span><span class="line block w-full"><h1>{$content.title}</h1></span><span class="line block w-full"><!-- Отобразить контент с возможностью редактирования через редактор --></span><span class="line block w-full"><h1>{@const Title = $content.title}<Title /></h1></span><span class="line block w-full"><!-- Отобразить контент как строку --></span><span class="line block w-full"><div aria-label={$content.title.value}></div></span><span class="line block w-full"><div aria-label={$content.title.toString()}></div></span><span class="line block w-full"><div aria-label={String($content.title)}></div></span><span class="line block w-full"></span><span class="line block w-full">> Если ваше приложение уже существует, вы можете использовать [Intlayer Compiler](/ru/doc/compiler) в сочетании с [командой extract](/ru/doc/concept/cli/extract), чтобы преобразовать тысячи компонентов за одну секунду.</span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">6</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-6-изменение-языка-вашего-контента" aria-label="Шаг 6: Изменение языка вашего контента">Изменение языка вашего контента</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Необязательно</span></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { getLocaleName } from 'intlayer';</span><span class="line block w-full">import { useLocale } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">// Получить информацию о локали и функцию setLocale</span><span class="line block w-full">const { locale, availableLocales, setLocale } = useLocale();</span><span class="line block w-full"></span><span class="line block w-full">// Обработка изменения локали</span><span class="line block w-full">const changeLocale = (event: Event) => {</span><span class="line block w-full"> const target = event.target as HTMLSelectElement;</span><span class="line block w-full"> const newLocale = target.value;</span><span class="line block w-full"> setLocale(newLocale);</span><span class="line block w-full">};</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div></span><span class="line block w-full"> <select value={$locale} on:change={changeLocale}></span><span class="line block w-full"> {#each availableLocales ?? [] as loc}</span><span class="line block w-full"> <option value={loc}></span><span class="line block w-full"> {getLocaleName(loc)}</span><span class="line block w-full"> </option></span><span class="line block w-full"> {/each}</span><span class="line block w-full"> </select></span><span class="line block w-full"></div></span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">7</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-7-отображение-markdown" aria-label="Шаг 7: Отображение Markdown">Отображение Markdown</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Необязательно</span></div> <p>Intlayer поддерживает отображение контента в формате Markdown непосредственно в вашем приложении на Svelte. По умолчанию Markdown обрабатывается как простой текст. Чтобы преобразовать Markdown в насыщенный HTML, вы можете интегрировать <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">@humanspeak/svelte-markdown</code> или другой парсер Markdown.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Чтобы узнать, как объявлять контент в формате markdown с использованием пакета <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code>, смотрите <a rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/tree/main/docs/docs/ru/dictionary/markdown.md" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">документацию по markdown<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a>.</blockquote> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script></span><span class="line block w-full"> import { setIntlayerMarkdown } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full"> setIntlayerMarkdown((markdown) =></span><span class="line block w-full"> // рендеринг содержимого markdown как строки</span><span class="line block w-full"> return markdown;</span><span class="line block w-full"> );</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><h1>{$content.markdownContent}</h1></span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Вы также можете получить доступ к данным front-matter вашего markdown через свойство <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">content.markdownContent.metadata.xxx</code>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">8</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-8-настроика-редактора-/-cms-intlayer" aria-label="Шаг 8: Настройка редактора / CMS intlayer">Настройка редактора / CMS intlayer</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Необязательно</span></div> <p>Для настройки редактора intlayer необходимо следовать <a href="/ru/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">документации редактора intlayer</a>.</p> <p>Для настройки CMS intlayer необходимо следовать <a href="/ru/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">документации CMS intlayer</a>.</p> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">7</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-7-добавьте-локализованную-маршрутизацию-в-ваше-приложение" aria-label="Шаг 7: Добавьте локализованную маршрутизацию в ваше приложение">Добавьте локализованную маршрутизацию в ваше приложение</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Необязательно</span></div> <p>Для обработки локализованной маршрутизации в вашем приложении на Svelte вы можете использовать <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code> вместе с <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">localeFlatMap</code> из Intlayer для генерации маршрутов для каждой локали.</p> <p>Сначала установите <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Выбрать менеджер пакетов"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm install svelte-spa-router</span><span class="line block w-full">npx intlayer init</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> <p>Затем создайте файл <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Router.svelte</code> для определения ваших маршрутов:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/Router.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { localeFlatMap } from "intlayer";</span><span class="line block w-full">import Router from "svelte-spa-router";</span><span class="line block w-full">import { wrap } from "svelte-spa-router/wrap";</span><span class="line block w-full">import App from "./App.svelte";</span><span class="line block w-full"></span><span class="line block w-full">const routes = Object.fromEntries(</span><span class="line block w-full"> localeFlatMap(({locale, urlPrefix}) => [</span><span class="line block w-full"> [</span><span class="line block w-full"> urlPrefix || '/',</span><span class="line block w-full"> wrap({</span><span class="line block w-full"> component: App as any,</span><span class="line block w-full"> props: {</span><span class="line block w-full"> locale,</span><span class="line block w-full"> },</span><span class="line block w-full"> }),</span><span class="line block w-full"> ],</span><span class="line block w-full"> ])</span><span class="line block w-full">);</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><Router {routes} /></span></code></pre></div></div><!--/$--></div></div></div> <p>Обновите ваш <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">main.ts</code>, чтобы монтировать компонент <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Router</code> вместо <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">App</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/main.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { mount } from "svelte";</span><span class="line block w-full">import Router from "./Router.svelte";</span><span class="line block w-full"></span><span class="line block w-full">const app = mount(Router, {</span><span class="line block w-full"> target: document.getElementById("app")!,</span><span class="line block w-full">});</span><span class="line block w-full"></span><span class="line block w-full">export default app;</span></code></pre></div></div><!--/$--></div></div></div> <p>Наконец, обновите ваш <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">App.svelte</code>, чтобы принимать проп <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">locale</code> и использовать его с <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">useIntlayer</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import type { Locale } from 'intlayer';</span><span class="line block w-full">import { useIntlayer } from "svelte-intlayer";</span><span class="line block w-full">import Counter from './lib/Counter.svelte';</span><span class="line block w-full">import LocaleSwitcher from './lib/LocaleSwitcher.svelte';</span><span class="line block w-full"></span><span class="line block w-full">export let locale: Locale;</span><span class="line block w-full"></span><span class="line block w-full">// Используем хук useIntlayer для получения контента на основе текущей локали</span><span class="line block w-full">$: content = useIntlayer('app', locale);</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><main></span><span class="line block w-full"> <div class="locale-switcher-container"></span><span class="line block w-full"> <LocaleSwitcher currentLocale={locale} /></span><span class="line block w-full"> </div></span><span class="line block w-full"></span><span class="line block w-full"> <!-- ... остальная часть вашего приложения ... --></span><span class="line block w-full"></main></span></code></pre></div></div><!--/$--></div></div></div> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="-----" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Настройка маршрутизации на стороне сервера (необязательно)</h4><p>Параллельно вы также можете использовать <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerProxy</code> для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующее cookie с локалью. Если локаль не указана, плагин определит наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не будет обнаружена, произойдет перенаправление на локаль по умолчанию.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Обратите внимание, что для использования <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerProxy</code> в продакшене необходимо перевести пакет <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">vite-intlayer</code> из <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">devDependencies</code> в <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">dependencies</code>.</blockquote> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Выбрать формат кода"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import { intlayer, intlayerProxy } from "vite-intlayer"; plugins: [intlayerProxy(), // should be placed first svelte(), intlayer()], });</code></pre></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">8</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-8-изменение-url-при-смене-локали" aria-label="Шаг 8: Изменение URL при смене локали">Изменение URL при смене локали</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Необязательно</span></div> <p>Чтобы позволить пользователям переключать языки и обновлять URL соответствующим образом, вы можете создать компонент <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">LocaleSwitcher</code>. Этот компонент будет использовать <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getLocalizedUrl</code> из <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code> и <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">push</code> из <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code>.</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/lib/LocaleSwitcher.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { getLocaleName, getLocalizedUrl } from "intlayer";</span><span class="line block w-full">import { useLocale } from "svelte-intlayer";</span><span class="line block w-full">import { push } from "svelte-spa-router";</span><span class="line block w-full"></span><span class="line block w-full">export let currentLocale: string | undefined = undefined;</span><span class="line block w-full"></span><span class="line block w-full">// Получение информации о локали</span><span class="line block w-full">const { locale, availableLocales } = useLocale();</span><span class="line block w-full"></span><span class="line block w-full">// Обработка изменения локали</span><span class="line block w-full">const changeLocale = (event: Event) => {</span><span class="line block w-full"> const target = event.target as HTMLSelectElement;</span><span class="line block w-full"> const newLocale = target.value;</span><span class="line block w-full"> const currentUrl = window.location.pathname;</span><span class="line block w-full"> const url = getLocalizedUrl( currentUrl, newLocale);</span><span class="line block w-full"> push(url);</span><span class="line block w-full">};</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div class="locale-switcher"></span><span class="line block w-full"> <select value={currentLocale ?? $locale} onchange={changeLocale}></span><span class="line block w-full"> {#each availableLocales ?? [] as loc}</span><span class="line block w-full"> <option value={loc}></span><span class="line block w-full"> {getLocaleName(loc)}</span><span class="line block w-full"> </option></span><span class="line block w-full"> {/each}</span><span class="line block w-full"> </select></span><span class="line block w-full"></div></span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">1</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-1-извлечение-содержимого-ваших-компонентов" aria-label="Шаг 1: Извлечение содержимого ваших компонентов">Извлечение содержимого ваших компонентов</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Необязательно</span></div> <p>Если у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.</p> <p>Чтобы упростить этот процесс, Intlayer предлагает <a href="/ru/doc/compiler" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">компилятор</a> / <a href="/ru/doc/concept/cli/extract" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">экстрактор</a> для преобразования ваших компонентов и извлечения содержимого.</p> <p>Чтобы настроить его, вы можете добавить раздел <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">compiler</code> в ваш файл <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer.config.ts</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">intlayer.config.ts</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Выбрать формат кода"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... Остальная часть вашей конфигурации compiler: { /** * Указывает, должен ли быть включен компилятор. */ enabled: true, /** * Определяет путь к выходным файлам */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить. */ saveComponents: false, /** * Префикс ключа словаря */ dictionaryKeyPrefix: "", }, }; export default config;</code></pre></div></div> <div class="relative w-full rounded-xl border border-card"><div class="flex shrink-0 gap-3 p-3 sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto"><div class="relative z-0 flex size-full flex-row items-center gap-2 border-text text-text" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none" data-active="true" role="tab" aria-selected="true" aria-controls="tabpanel-Команда извлечения" id="tab-Команда извлечения" type="button" tabindex="0">Команда извлечения</button><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none text-neutral/70" data-active="false" role="tab" aria-selected="false" aria-controls="tabpanel-Компилятор Babel" id="tab-Компилятор Babel" type="button" tabindex="-1">Компилятор Babel</button></div></div><div class="relative w-full min-w-0 overflow-x-clip [-webkit-clip-path:inset(0)] [clip-path:inset(0)]" style="touch-action:pan-y"><div role="tablist" aria-orientation="horizontal" class="grid w-full min-w-0 transition-transform duration-300 ease-in-out" style="grid-template-columns:repeat(2, 100%);transform:translateX(-0%)"><div role="tabpanel" aria-labelledby="tab-Команда извлечения" id="tabpanel-Команда извлечения" aria-hidden="false" tabindex="0" data-active="true" class="w-full min-w-0 p-3 opacity-100 transition-opacity duration-300 ease-in-out"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <p>Запустите экстрактор для преобразования компонентов и извлечения содержимого</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Выбрать менеджер пакетов"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npx intlayer extract</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> </div></div><div role="tabpanel" aria-labelledby="tab-Компилятор Babel" id="tabpanel-Компилятор Babel" aria-hidden="true" tabindex="-1" data-active="false" class="w-full min-w-0 p-3 transition-opacity duration-300 ease-in-out pointer-events-none opacity-0"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <p>Обновите ваш <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">vite.config.ts</code>, чтобы включить плагин <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerCompiler</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { defineConfig } from "vite";</span><span class="line block w-full">import { intlayer, intlayerCompiler } from "vite-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">export default defineConfig({</span><span class="line block w-full"> plugins: [</span><span class="line block w-full"> intlayer(),</span><span class="line block w-full"> intlayerCompiler(), // Добавляет плагин компилятора</span><span class="line block w-full"> ],</span><span class="line block w-full">});</span></code></pre></div></div><!--/$--></div></div></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Выбрать менеджер пакетов"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm run build # Или npm run dev</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> </div></div></div></div></div></div></li></ol><h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="-git" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Конфигурация Git</h3><p>Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.</p> <p>Для этого вы можете добавить следующие инструкции в ваш файл <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">.gitignore</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"># Игнорировать файлы, сгенерированные Intlayer</span><span class="line block w-full">.intlayer</span></code></pre></div></div><!--/$--></div></div></div> <h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="-vs-code" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Расширение VS Code</h3><p>Чтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение <strong class="text-text">Intlayer для VS Code</strong>.</p> <p><a rel="noopener noreferrer" href="https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Установить из VS Code Marketplace<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></p> <p>Это расширение предоставляет:</p> <ul class="mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80"><li><strong class="text-text">Автозаполнение</strong> ключей переводов.</li><li><strong class="text-text">Обнаружение ошибок в реальном времени</strong> для отсутствующих переводов.</li><li><strong class="text-text">Встроенный просмотр</strong> переведенного контента.</li><li><strong class="text-text">Быстрые действия</strong> для удобного создания и обновления переводов.</li></ul><p>Для получения дополнительной информации о том, как использовать расширение, обратитесь к <a href="/ru/doc/vs-code-extension" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">документации расширения Intlayer для VS Code</a>.</p> <hr class="mx-6 mt-16 border-dashed text-neutral"/><h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="-sitemap--robotstxt---" aria-label="Click to scroll to section undefined and copy the link to the clipboard">(Опционально) Sitemap и robots.txt (генерация на сборке)</h3><p>Intlayer предоставляет <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generateSitemap</code> и <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getMultilingualUrls</code> - утилиты, которые формируют многоязычные <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">sitemap.xml</code> и <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">robots.txt</code> для краулеров и позволяют автоматически записать их в <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">public/</code>. Обычно запускают небольшой Node-скрипт <strong class="text-text">до</strong> Vite (например, npm-хуки <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">predev</code> / <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">prebuild</code>).</p> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="sitemap" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Sitemap</h4><p>Генератор sitemap учитывает локали и добавляет нужные метаданные.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Поддерживается пространство имён <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">xhtml:link</code> (hreflang). Вместо плоского списка URL Intlayer связывает все языковые версии страницы в обе стороны (например <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/about</code>, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/fr/about</code> или <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/about?lang=fr</code> в зависимости от режима маршрутизации).</blockquote> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="robotstxt" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Robots.txt</h4><p>Используйте <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getMultilingualUrls</code>, чтобы правила <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Disallow</code> покрывали все локализованные варианты путей.</p> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="1--generate-seomjs---" aria-label="Click to scroll to section undefined and copy the link to the clipboard">1. Файл <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.mjs</code> в корне проекта</h4><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">generate-seo.mjs</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import fs from "fs";</span><span class="line block w-full">import path from "path";</span><span class="line block w-full">import { fileURLToPath } from "url";</span><span class="line block w-full">import { generateSitemap, getMultilingualUrls } from "intlayer";</span><span class="line block w-full"></span><span class="line block w-full">const __dirname = path.dirname(fileURLToPath(import.meta.url));</span><span class="line block w-full"></span><span class="line block w-full">const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(</span><span class="line block w-full"> /\/$/,</span><span class="line block w-full"> ""</span><span class="line block w-full">);</span><span class="line block w-full"></span><span class="line block w-full">const pathList = [</span><span class="line block w-full"> { path: "/", changefreq: "daily", priority: 1.0 },</span><span class="line block w-full"> { path: "/about", changefreq: "monthly", priority: 0.7 },</span><span class="line block w-full">];</span><span class="line block w-full"></span><span class="line block w-full">const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });</span><span class="line block w-full">fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);</span><span class="line block w-full"></span><span class="line block w-full">const getAllMultilingualUrls = (urls) =></span><span class="line block w-full"> urls.flatMap((url) => Object.values(getMultilingualUrls(url)));</span><span class="line block w-full"></span><span class="line block w-full">const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);</span><span class="line block w-full"></span><span class="line block w-full">const robotsTxt = [</span><span class="line block w-full"> "User-agent: *",</span><span class="line block w-full"> "Allow: /",</span><span class="line block w-full"> ...disallowedPaths.map((path) => `Disallow: ${path}`),</span><span class="line block w-full"> "",</span><span class="line block w-full"> `Sitemap: ${SITE_URL}/sitemap.xml`,</span><span class="line block w-full">].join("\n");</span><span class="line block w-full"></span><span class="line block w-full">fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);</span><span class="line block w-full"></span><span class="line block w-full">console.log("SEO files generated successfully.");</span></code></pre></div></div><!--/$--></div></div></div> <p>Пакет <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code> должен быть установлен. Для продакшена задайте <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">SITE_URL</code> в окружении (например в CI).</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Для Node ESM предпочтительно <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.mjs</code>. Для <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.js</code> укажите <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">"type": "module"</code> в <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">package.json</code> или включите ESM иначе.</blockquote> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="2----vite" aria-label="Click to scroll to section undefined and copy the link to the clipboard">2. Запуск скрипта до Vite</h4><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">package.json</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Копировать содержимое" aria-busy="false" aria-disabled="false" tabindex="0" title="Копировать содержимое"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Копировать содержимое</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Копировать код</strong><p class="text-neutral">Копировать код в буфер обмена</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">{</span><span class="line block w-full"> "scripts": {</span><span class="line block w-full"> "dev": "vite",</span><span class="line block w-full"> "prebuild": "node generate-seo.mjs",</span><span class="line block w-full"> "build": "vite build",</span><span class="line block w-full"> "preview": "vite preview"</span><span class="line block w-full"> }</span><span class="line block w-full">}</span></code></pre></div></div><!--/$--></div></div></div> <p>Подстройте команды для pnpm или yarn. Скрипт можно вызывать из CI или другого шага.</p> <h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="-" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Продвинуться дальше</h3><p>Чтобы продвинуться дальше, вы можете реализовать <a href="/ru/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">визуальный редактор</a> или вынести ваш контент, используя <a href="/ru/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">CMS</a>.</p></div></div><div class="my-3 flex flex-row flex-wrap justify-between gap-3 px-10 text-sm"><a aria-label="Перейти к предыдущей секции" target="_self" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative cursor-pointer border-[1.3px] border-current text-center font-medium ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral min-h-8 text-sm max-md:py-2 ring-neutral/20 wrap-break-words ml-auto flex h-auto w-full max-w-1/2 flex-1 flex-row items-center justify-start gap-2 whitespace-normal text-nowrap rounded-lg px-2 py-5" to="/ru/doc/environment/vite-and-solid"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left size-5" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg><span class="text-text">Vite и Solid</span></a><a aria-label="Перейти к следующей секции" target="_self" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative cursor-pointer border-[1.3px] border-current text-center font-medium ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral min-h-8 text-sm max-md:py-2 ring-neutral/20 wrap-break-words ml-auto flex h-auto w-full max-w-1/2 flex-1 flex-row items-center justify-end gap-2 whitespace-normal text-nowrap rounded-lg px-2 py-5" to="/ru/doc/environment/sveltekit"><span class="text-text">SvelteKit</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right size-5" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></a></div></div></article><aside aria-label="На этой странице" class="flex flex-none flex-row max-lg:hidden"><div class="relative flex min-h-0 w-70 flex-1 flex-col"><div class="relative z-10 mt-10 flex w-full flex-row items-center pt-2"><h2 class="ml-3 text-nowrap text-neutral/80 text-sm uppercase">На этой странице</h2><div class="absolute bottom-0 left-0 h-8 w-full translate-y-full bg-linear-to-b from-background/90 backdrop-blur"></div></div><div class="relative flex min-h-0 w-full flex-1 overflow-hidden rounded-2xl md:pt-0"><div class="mt-4 flex pl-3"><nav class="flex h-full min-h-0 flex-col"><ul class="flex min-h-0 flex-1 flex-col gap-3 overflow-auto pt-8 pr-3 pb-20"></ul></nav></div><div class="border-dashed transition max-h-[80%] cursor-ns-resize border-neutral-200 border-t-[1px] dark:border-neutral-950 before:absolute before:top-0 before:left-1/2 before:z-10 before:block before:h-1 before:w-10 before:-translate-x-1/2 before:-translate-y-1/2 before:transform before:cursor-ns-resize before:rounded-full before:bg-neutral-200 before:transition before:content-[""] dark:before:bg-neutral-950 active:border-neutral-400 active:before:bg-neutral-400 dark:active:border-neutral-600 active:dark:before:bg-neutral-600 absolute bottom-0 left-0 size-full bg-background/70 backdrop-blur" style="height:250px;min-height:0px" aria-valuemin="0" aria-valuenow="250" aria-label="Resizable component - drag the handle to adjust height" role="slider" tabindex="0"><div role="presentation" class="absolute top-0 left-0 size-full cursor-default overflow-hidden"><div class="justify-bottom size-full text-sm"><div class="flex size-full flex-col items-center justify-between overflow-auto"><div class="relative flex size-full flex-auto"><div class="absolute inset-0 size-full"><div data-testid="virtuoso-scroller" data-virtuoso-scroller="true" style="height:100%;outline:none;overflow-y:auto;position:relative;-webkit-overflow-scrolling:touch" tabindex="0"><div data-viewport-type="element" style="height:100%;position:absolute;top:0;width:100%"><div data-testid="virtuoso-item-list" style="box-sizing:border-box;margin-top:0;padding-bottom:0;padding-top:0"></div><div></div></div></div></div></div><div class="w-full flex-1"><form class="item-end flex h-auto flex-col items-end justify-center gap-3 px-4 py-3" autoComplete="off" noValidate=""><div class="flex w-full flex-col flex-wrap gap-2 px-1 py-2" id="_R_ukqj9bcq_"><textarea class="w-full select-text text-base shadow-none outline-none transition-all duration-300 md:text-sm ring-0 disabled:opacity-50 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text bg-neutral-50 dark:bg-neutral-950 ring-text/20 disabled:ring-0 hover:ring-3 focus-within:ring-4 focus-visible:outline-none focus-visible:ring-4 [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error px-2 py-3 md:py-2 overflow-y-auto resize-none" data-testid="question" id="question" name="question" rows="2" placeholder="Спросите меня что-нибудь..." aria-label="Спросите нашу умную документацию" aria-describedby="_R_ukqj9bcq_-form-item-description" aria-invalid="false"></textarea></div><div class="ml-auto flex items-center justify-end gap-2 max-md:w-full"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-chat-info" aria-haspopup="true"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info z-50 mr-3 text-neutral" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-1/2 -translate-x-1/2 bottom-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-1/2 before:-translate-x-1/2 before:-bottom-2.5 before:border-t-[10px] before:border-t-neutral before:border-r-[10px] before:border-r-transparent before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-chat-info" id="unrollable-panel-chat-info"><p class="min-w-60 max-w-60 p-4 text-neutral text-xs">Обсуждения анонимны и регулярно просматриваются для решения распространённых проблем. Не стесняйтесь делиться идеями функций, отзывами о документации или чем-либо, связанным с Intlayer, мы используем эту информацию для формирования нашей дорожной карты и улучшения продукта.</p></div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center" aria-label="Нажмите, чтобы открыть чат-бота" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Нажмите, чтобы открыть чат-бота</span></button><button disabled="" role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center opacity-0" aria-label="Нажмите, чтобы очистить" aria-busy="false" aria-disabled="true"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eraser flex-none shrink-0 size-4" aria-hidden="true"><path d="M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21"></path><path d="m5.082 11.09 8.828 8.828"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Нажмите, чтобы очистить</span></button><button role="button" type="submit" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl bg-current hover:bg-current/90 hover:ring-5 aria-selected:ring-5 justify-center text-center" aria-label="Нажмите, чтобы отправить вопрос" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up flex-none shrink-0 size-4" aria-hidden="true"><path d="m5 12 7-7 7 7"></path><path d="M12 19V5"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Нажмите, чтобы отправить вопрос</span></button></div></form></div></div></div></div></div></div></div></aside></div></div></main><div class="flex w-full flex-0 flex-col"></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--><script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-Bw9yQaJj.js","/assets/chunk-Cyuzqnbw.js","/assets/preload-helper-B8fFrdxC.js","/assets/contributors-hwMJZD2h.js","/assets/frequent-questions-ColnmfP0.js","/assets/buildOrganizationJsonLd-CDgipqaX.js","/assets/_-XYNRneuJ.js","/assets/buildWebsiteJsonLd-C0N39csk.js","/assets/esm-3MTWDjoQ.js","/assets/package_mock-BDluuYi_.js","/assets/NotFoundComponent-Bgr-e0gL.js","/assets/_-C4167Raf.js","/assets/blog-BzPtT7kP.js","/assets/chat-D_eebsPv.js","/assets/search-CiZlrVdG.js","/assets/_-PkJ9jxsi.js","/assets/privacy-notice-gc0H7wqY.js","/assets/terms-of-service-B15yrD0Q.js","/assets/seo-6taQxeNF.js","/assets/dist-BB4NsXlo.js","/assets/dist-ClM9H4W8.js","/assets/scroll-restoration-Ds11_EjL.js","/assets/IsRestoringProvider-DPTyBt-E.js","/assets/mutation-Bsa9tKKh.js","/assets/Match-DiNoTNTM.js","/assets/useStore-DlCoWsDY.js","/assets/matchContext-IegwGVKo.js","/assets/defer-BLyZxUjE.js","/assets/createServerFn-CXa74b5t.js","/assets/dist-BlKQxgFq.js","/assets/cn-SXa2TCS8.js","/assets/features-animation-Du4JOzyU.js","/assets/Link-aa68EiCJ.js","/assets/x-DL_kax-t.js","/assets/react-dom-BJD-Lcob.js","/assets/compiler-runtime-CQOss3SY.js","/assets/jsx-runtime-CXk3X59i.js","/assets/react-Bi8cP4Js.js","/assets/getHTMLTextDir-C8-9aPEx.js","/assets/usePersistedStore-BzkChKRN.js","/assets/routes-Cre-4Fxz.js","/assets/esm-DRNfMHzC.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-Bw9yQaJj.js"}}]},"/{-$locale}":$R[8]={preloads:$R[9]=["/assets/route-CQW21vXM.js"]},"/{-$locale}/_docs":$R[10]={preloads:$R[11]=["/assets/route-DnecKG0E.js","/assets/PageLayout-U6A7rpHn.js"]},"/{-$locale}/_docs/doc/$":$R[12]={preloads:$R[13]=["/assets/_-BJyRGMQ_.js","/assets/DocPageNavigation-Cjem7A8P.js","/assets/DocumentationRender-BDCy3TqB.js","/assets/DocPageLayout-5Kt9kfLJ.js"]}}},matches:$R[14]=[$R[15]={i:"__root__�",u:1785032690624,s:"success",ssr:!0},$R[16]={i:"�{-$locale}�ru",u:1785032690625,s:"success",ssr:!0},$R[17]={i:"�{-$locale}�_docs�ru",u:1785032690625,s:"success",ssr:!0},$R[18]={i:"�{-$locale}�_docs�doc�$�ru�doc�environment�vite-and-svelte",u:1785032691002,s:"success",l:$R[19]={locale:"ru",slugs:$R[20]=["environment","vite-and-svelte"],docData:$R[21]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Svelte. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[22]=["Интернационализация","Документация","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[23]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[24]=[$R[25]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[26]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[27]={version:"5.5.11",date:"2025-11-19",changes:"\"Обновление документации\""},$R[28]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:$R[29]={name:"Aymeric PINEAU",title:"Founder of Intlayer, open-source multilingual CMS for Next.js and React",url:"https://github.com/aymericzip",image:"https://avatars.githubusercontent.com/u/62554073?v=4&size=124",socialMedias:$R[30]=["https://www.linkedin.com/in/aymericpineau/","https://x.com/aymericzip","https://github.com/aymericzip"],knowsAbout:$R[31]=["Expert in technical internationalization","Senior software engineer","Multilingual SEO","AI translation automation"],github:"aymericzip"},docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+svelte.md",relativeUrl:"/ru/doc/environment/vite-and-svelte",url:"https://intlayer.org/ru/doc/environment/vite-and-svelte"},defaultDocData:$R[32]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Complete guide to translate your app",description:"No more i18next. The 2026 guide to building a multilingual (i18n) Vite + Svelte app. Translate with AI agents and optimize bundle size, SEO and performances.",keywords:$R[33]=["Internationalization","Documentation","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[34]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[35]=[$R[36]={version:"8.9.0",date:"2026-05-04",changes:"\"Update Solid useIntlayer API usage to direct property access\""},$R[37]={version:"7.5.9",date:"2025-12-30",changes:"\"Add init command\""},$R[38]={version:"5.5.11",date:"2025-11-19",changes:"\"Update documentation\""},$R[39]={version:"5.5.10",date:"2025-06-29",changes:"\"Initial history\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_with_vite+svelte.md",relativeUrl:"/doc/environment/vite-and-svelte",url:"https://intlayer.org/doc/environment/vite-and-svelte"},docContent:"---\ncreatedAt: 2025-04-18\nupdatedAt: 2026-05-31\ntitle: \"Vite + Svelte i18n - Полное руководство по переводу вашего приложения\"\ndescription: \"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Svelte. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.\"\nkeywords:\n - Интернационализация\n - Документация\n - Intlayer\n - Vite\n - Svelte\n - JavaScript\nslugs:\n - doc\n - environment\n - vite-and-svelte\napplicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template\napplicationShowcase: https://intlayer-vite-svelte-template.vercel.app\nhistory:\n - version: 8.9.0\n date: 2026-05-04\n changes: \"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\"\n - version: 7.5.9\n date: 2025-12-30\n changes: \"Добавить команду init\"\n - version: 5.5.11\n date: 2025-11-19\n changes: \"Обновление документации\"\n - version: 5.5.10\n date: 2025-06-29\n changes: \"Инициализация истории\"\nauthor: aymericzip\n---\n\n# Перевод вашего сайта на Vite и Svelte с использованием Intlayer | Интернационализация (i18n)\n\n\x3CTabs defaultTab=\"code\">\n \x3CTab label=\"Код\" value=\"code\">\n\n\x3Ciframe\n src=\"https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Demo CodeSandbox - Intlayer\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\n \x3C/Tab>\n \x3CTab label=\"Демо\" value=\"demo\">\n\n\x3Ciframe\n src=\"https://intlayer-vite-svelte-template.vercel.app\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Демо - intlayer-vite-svelte-template\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\n \x3C/Tab>\n\x3C/Tabs>\n\n## Содержание\n\n\x3CTOC/>\n\n## Почему Intlayer лучше альтернатив?\n\nПо сравнению с основными решениями, такими как «svelte-i18n» или «i18next», Intlayer — это решение, которое включает в себя встроенные оптимизации, такие как:\n\n\x3CAccordionGroup>\n\n\x3CAccordion header=\"Полное покрытие Svelte\">\n\nIntlayer оптимизирован для идеальной работы со Svelte, предлагая **охват контента на уровне компонентов**, **реактивные переводы** и все функции, необходимые для масштабирования интернационализации (i18n).\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Размер бандла\">\n\nВместо загрузки огромных файлов JSON на свои страницы загружайте только необходимый контент. Intlayer помогает **уменьшить размер бандла и страниц до 50 %**.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Удобство обслуживания\">\n\nОпределение области содержимого вашего приложения **облегчает обслуживание** крупномасштабных приложений. Вы можете дублировать или удалить отдельную папку функций, не утруждав себя мысленным бременем проверки всей кодовой базы контента. Кроме того, Intlayer **полностью типизирован**, что обеспечивает точность вашего контента.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Агент ИИ\">\n\nСовместное размещение контента **уменьшает контекст, необходимый** для моделей большого языка (LLM). Intlayer также поставляется с набором инструментов, таких как **CLI** для проверки отсутствия переводов,**[LSP](/ru/doc/lsp)**, **[MCP](/ru/doc/mcp-server)**, и **[навыки агента](/ru/doc/agent_skills)**, чтобы сделать работу разработчика (DX) еще более удобной для агентов ИИ.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Автоматизация\">\n\nИспользуйте автоматизацию для перевода в своем конвейере CI/CD, используя LLM по вашему выбору за счет вашего поставщика ИИ. Intlayer также предлагает **компилятор** для автоматизации извлечения контента, а также [веб-платформу](/ru/doc/concept/cms), которая помогает **переводить в фоновом режиме**.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Производительность\">\n\nПодключение больших файлов JSON к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента во время сборки (build time).\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Масштабирование с помощью не-разработчиками\">\n\nIntlayer — это больше, чем просто решение i18n. Он предоставляет **автономный [визуальный редактор](/ru/doc/concept/editor)** и **[полный CMS](/ru/doc/concept/cms)**, чтобы помочь вам управлять многоязычным контентом в **реальном времени**, упрощая сотрудничество с переводчиками, копирайтерами и другими членами команды. Контент может храниться локально и/или удаленно.\n\n\x3C/Accordion>\n\x3C/AccordionGroup>\n\n---\n\n## Пошаговое руководство по настройке Intlayer в приложении на Vite и Svelte\n\n\x3Ciframe\n src=\"https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Демонстрация CodeSandbox - Как интернационализировать ваше приложение с помощью Intlayer\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\nСмотрите [Шаблон приложения](https://github.com/aymericzip/intlayer-vite-svelte-template) на GitHub.\n\n\x3CSteps>\n\n\x3CStep number={1} title=\"Установка зависимостей\">\n\nУстановите необходимые пакеты с помощью npm:\n\n```bash packageManager=\"npm\"\nnpm install intlayer svelte-intlayer\nnpm install vite-intlayer --save-dev\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add intlayer svelte-intlayer\npnpm add vite-intlayer --save-dev\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add intlayer svelte-intlayer\nyarn add vite-intlayer --save-dev\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add intlayer svelte-intlayer\nbun add vite-intlayer --save-dev\nbun x intlayer init\n```\n\n- **intlayer**\n\n Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, [объявления контента](/ru/doc/concept/content), транспиляции и [CLI-команд](/ru/doc/concept/cli).\n\n- **svelte-intlayer**\n Пакет, который интегрирует Intlayer с приложением на Svelte. Он предоставляет провайдеры контекста и хуки для интернационализации в Svelte.\n\n- **vite-intlayer**\n Включает плагин Vite для интеграции Intlayer с [сборщиком Vite](https://vite.dev/guide/why.html#why-bundle-for-production), а также middleware для определения предпочтительной локали пользователя, управления cookie и обработки перенаправления URL.\n\n\x3C/Step>\n\n\x3CStep number={2} title=\"Конфигурация вашего проекта\">\n\nСоздайте файл конфигурации для настройки языков вашего приложения:\n\n```typescript fileName=\"intlayer.config.ts\"\nimport { Locales, type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n internationalization: {\n locales: [\n Locales.ENGLISH,\n Locales.FRENCH,\n Locales.SPANISH,\n // Ваши другие локали\n ],\n\n defaultLocale: Locales.ENGLISH,\n },\n};\n\nexport default config;\n```\n\n> Через этот файл конфигурации вы можете настроить локализованные URL, перенаправление в middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](/ru/doc/concept/configuration).\n\n\x3C/Step>\n\n\x3CStep number={3} title=\"Интеграция Intlayer в вашу конфигурацию Vite\">\n\nДобавьте плагин intlayer в вашу конфигурацию.\n\n```typescript fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [svelte(), intlayer()],\n});\n```\n\n> Плагин Vite `intlayer()` используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов деклараций контента и отслеживает их в режиме разработки. Определяет переменные окружения Intlayer внутри приложения Vite. Кроме того, предоставляет алиасы для оптимизации производительности.\n\n\x3C/Step>\n\n\x3CStep number={4} title=\"Объявите ваш контент\">\n\nСоздайте и управляйте декларациями контента для хранения переводов:\n\n```tsx fileName=\"src/app.content.tsx\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { t, type Dictionary } from \"intlayer\";\n\nconst appContent = {\n key: \"app\",\n content: {\n title: t({\n en: \"Hello World\",\n fr: \"Bonjour le monde\",\n es: \"Hola mundo\",\n }),\n },\n} satisfies Dictionary;\n\nexport default appContent;\n```\n\n```json fileName=\"src/app.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"app\",\n \"content\": {\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Hello World\",\n \"fr\": \"Bonjour le monde\",\n \"es\": \"Hola mundo\"\n }\n }\n }\n}\n```\n\n> Ваши объявления контента могут быть определены в любом месте вашего приложения, как только они будут включены в директорию `contentDir` (по умолчанию, `./src`). И соответствовать расширению файла объявления контента (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`).\n\n> Для получения дополнительной информации обратитесь к [документации по объявлению контента](/ru/doc/concept/content).\n\n\x3C/Step>\n\n\x3CStep number={5} title=\"Использование Intlayer в вашем коде\">\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript>\n import { useIntlayer } from \"svelte-intlayer\";\n\n const content = useIntlayer(\"app\");\n\x3C/script>\n\n\x3Cdiv>\n\n\n\x3C!-- Отобразить контент как простой контент -->\n\x3Ch1>{$content.title}\x3C/h1>\n\x3C!-- Отобразить контент с возможностью редактирования через редактор -->\n\x3Ch1>{@const Title = $content.title}\x3CTitle />\x3C/h1>\n\x3C!-- Отобразить контент как строку -->\n\x3Cdiv aria-label={$content.title.value}>\x3C/div>\n\x3Cdiv aria-label={$content.title.toString()}>\x3C/div>\n\x3Cdiv aria-label={String($content.title)}>\x3C/div>\n\n> Если ваше приложение уже существует, вы можете использовать [Intlayer Compiler](/ru/doc/compiler) в сочетании с [командой extract](/ru/doc/concept/cli/extract), чтобы преобразовать тысячи компонентов за одну секунду.\n```\n\n\x3C/Step>\n\n\x3CStep number={6} title=\"Изменение языка вашего контента\" isOptional={true}>\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Получить информацию о локали и функцию setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Обработка изменения локали\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n\x3C/script>\n\n\x3Cdiv>\n \x3Cselect value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n```\n\n\x3C/Step>\n\n\x3CStep number={7} title=\"Отображение Markdown\" isOptional={true}>\n\nIntlayer поддерживает отображение контента в формате Markdown непосредственно в вашем приложении на Svelte. По умолчанию Markdown обрабатывается как простой текст. Чтобы преобразовать Markdown в насыщенный HTML, вы можете интегрировать `@humanspeak/svelte-markdown` или другой парсер Markdown.\n\n> Чтобы узнать, как объявлять контент в формате markdown с использованием пакета `intlayer`, смотрите [документацию по markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/ru/dictionary/markdown.md).\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // рендеринг содержимого markdown как строки\n return markdown;\n );\n\x3C/script>\n\n\x3Ch1>{$content.markdownContent}\x3C/h1>\n```\n\n> Вы также можете получить доступ к данным front-matter вашего markdown через свойство `content.markdownContent.metadata.xxx`.\n\n\x3C/Step>\n\n\x3CStep number={8} title=\"Настройка редактора / CMS intlayer\" isOptional={true}>\n\nДля настройки редактора intlayer необходимо следовать [документации редактора intlayer](/ru/doc/concept/editor).\n\nДля настройки CMS intlayer необходимо следовать [документации CMS intlayer](/ru/doc/concept/cms).\n\n\x3C/Step>\n\n\x3CStep number={7} title=\"Добавьте локализованную маршрутизацию в ваше приложение\" isOptional={true}>\n\nДля обработки локализованной маршрутизации в вашем приложении на Svelte вы можете использовать `svelte-spa-router` вместе с `localeFlatMap` из Intlayer для генерации маршрутов для каждой локали.\n\nСначала установите `svelte-spa-router`:\n\n```bash packageManager=\"npm\"\nnpm install svelte-spa-router\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add svelte-spa-router\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add svelte-spa-router\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add svelte-spa-router\n```\n\nЗатем создайте файл `Router.svelte` для определения ваших маршрутов:\n\n```svelte fileName=\"src/Router.svelte\"\n\x3Cscript lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n\x3C/script>\n\n\x3CRouter {routes} />\n```\n\nОбновите ваш `main.ts`, чтобы монтировать компонент `Router` вместо `App`:\n\n```typescript fileName=\"src/main.ts\"\nimport { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n```\n\nНаконец, обновите ваш `App.svelte`, чтобы принимать проп `locale` и использовать его с `useIntlayer`:\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n// Используем хук useIntlayer для получения контента на основе текущей локали\n$: content = useIntlayer('app', locale);\n\x3C/script>\n\n\x3Cmain>\n \x3Cdiv class=\"locale-switcher-container\">\n \x3CLocaleSwitcher currentLocale={locale} />\n \x3C/div>\n\n \x3C!-- ... остальная часть вашего приложения ... -->\n\x3C/main>\n```\n\n#### Настройка маршрутизации на стороне сервера (необязательно)\n\nПараллельно вы также можете использовать `intlayerProxy` для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующее cookie с локалью. Если локаль не указана, плагин определит наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не будет обнаружена, произойдет перенаправление на локаль по умолчанию.\n\n> Обратите внимание, что для использования `intlayerProxy` в продакшене необходимо перевести пакет `vite-intlayer` из `devDependencies` в `dependencies`.\n\n```typescript {3,7} fileName=\"vite.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n\x3C/Step>\n\n\x3CStep number={8} title=\"Изменение URL при смене локали\" isOptional={true}>\n\nЧтобы позволить пользователям переключать языки и обновлять URL соответствующим образом, вы можете создать компонент `LocaleSwitcher`. Этот компонент будет использовать `getLocalizedUrl` из `intlayer` и `push` из `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Получение информации о локали\nconst { locale, availableLocales } = useLocale();\n\n// Обработка изменения локали\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n\x3C/script>\n\n\x3Cdiv class=\"locale-switcher\">\n \x3Cselect value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n```\n\n\x3C/Step>\n\n\x3CStep number={1} title=\"Извлечение содержимого ваших компонентов\" isOptional={true}>\n\nЕсли у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.\n\nЧтобы упростить этот процесс, Intlayer предлагает [компилятор](/ru/doc/compiler) / [экстрактор](/ru/doc/concept/cli/extract) для преобразования ваших компонентов и извлечения содержимого.\n\nЧтобы настроить его, вы можете добавить раздел `compiler` в ваш файл `intlayer.config.ts`:\n\n```typescript fileName=\"intlayer.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Остальная часть вашей конфигурации\n compiler: {\n /**\n * Указывает, должен ли быть включен компилятор.\n */\n enabled: true,\n\n /**\n * Определяет путь к выходным файлам\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.\n */\n saveComponents: false,\n\n /**\n * Префикс ключа словаря\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n```\n\n\x3CTabs>\n \x3CTab value='Команда извлечения'>\n\nЗапустите экстрактор для преобразования компонентов и извлечения содержимого\n\n```bash packageManager=\"npm\"\nnpx intlayer extract\n```\n\n```bash packageManager=\"pnpm\"\npnpm intlayer extract\n```\n\n```bash packageManager=\"yarn\"\nyarn intlayer extract\n```\n\n```bash packageManager=\"bun\"\nbun x intlayer extract\n```\n\n \x3C/Tab>\n \x3CTab value='Компилятор Babel'>\n\nОбновите ваш `vite.config.ts`, чтобы включить плагин `intlayerCompiler`:\n\n```ts fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Добавляет плагин компилятора\n ],\n});\n```\n\n```bash packageManager=\"npm\"\nnpm run build # Или npm run dev\n```\n\n```bash packageManager=\"pnpm\"\npnpm run build # Or pnpm run dev\n```\n\n```bash packageManager=\"yarn\"\nyarn build # Or yarn dev\n```\n\n```bash packageManager=\"bun\"\nbun run build # Or bun run dev\n```\n\n \x3C/Tab>\n\x3C/Tabs>\n\x3C/Step>\n\n\x3C/Steps>\n\n### Конфигурация Git\n\nРекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.\n\nДля этого вы можете добавить следующие инструкции в ваш файл `.gitignore`:\n\n```bash\n# Игнорировать файлы, сгенерированные Intlayer\n.intlayer\n```\n\n### Расширение VS Code\n\nЧтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение **Intlayer для VS Code**.\n\n[Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nЭто расширение предоставляет:\n\n- **Автозаполнение** ключей переводов.\n- **Обнаружение ошибок в реальном времени** для отсутствующих переводов.\n- **Встроенный просмотр** переведенного контента.\n- **Быстрые действия** для удобного создания и обновления переводов.\n\nДля получения дополнительной информации о том, как использовать расширение, обратитесь к [документации расширения Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### (Опционально) Sitemap и robots.txt (генерация на сборке)\n\nIntlayer предоставляет `generateSitemap` и `getMultilingualUrls` - утилиты, которые формируют многоязычные `sitemap.xml` и `robots.txt` для краулеров и позволяют автоматически записать их в `public/`. Обычно запускают небольшой Node-скрипт **до** Vite (например, npm-хуки `predev` / `prebuild`).\n\n#### Sitemap\n\nГенератор sitemap учитывает локали и добавляет нужные метаданные.\n\n> Поддерживается пространство имён `xhtml:link` (hreflang). Вместо плоского списка URL Intlayer связывает все языковые версии страницы в обе стороны (например `/about`, `/fr/about` или `/about?lang=fr` в зависимости от режима маршрутизации).\n\n#### Robots.txt\n\nИспользуйте `getMultilingualUrls`, чтобы правила `Disallow` покрывали все локализованные варианты путей.\n\n#### 1. Файл `generate-seo.mjs` в корне проекта\n\n```javascript fileName=\"generate-seo.mjs\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n```\n\nПакет `intlayer` должен быть установлен. Для продакшена задайте `SITE_URL` в окружении (например в CI).\n\n> Для Node ESM предпочтительно `generate-seo.mjs`. Для `generate-seo.js` укажите `\"type\": \"module\"` в `package.json` или включите ESM иначе.\n\n#### 2. Запуск скрипта до Vite\n\n```json fileName=\"package.json\"\n{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n```\n\nПодстройте команды для pnpm или yarn. Скрипт можно вызывать из CI или другого шага.\n\n### Продвинуться дальше\n\nЧтобы продвинуться дальше, вы можете реализовать [визуальный редактор](/ru/doc/concept/editor) или вынести ваш контент, используя [CMS](/ru/doc/concept/cms).\n",docParsed:$R[40]={ast:$R[41]=[$R[42]={children:$R[43]=[$R[44]={text:"Перевод вашего сайта на Vite и Svelte с использованием Intlayer | Интернационализация (i18n)",type:"27"}],id:"----vite--svelte---intlayer---i18n",level:1,type:"9"},$R[45]={attrs:$R[46]={defaultTab:"code"},noInnerParse:!1,tag:"Tabs",children:$R[47]=[$R[48]={attrs:$R[49]={label:"Код",value:"code"},noInnerParse:!1,tag:"Tab",children:$R[50]=[$R[51]={type:"19"},$R[52]={attrs:$R[53]={src:"https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Demo CodeSandbox - Intlayer",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"}],type:"34"},$R[54]={attrs:$R[55]={label:"Демо",value:"demo"},noInnerParse:!1,tag:"Tab",children:$R[56]=[$R[57]={type:"19"},$R[58]={attrs:$R[59]={src:"https://intlayer-vite-svelte-template.vercel.app",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Демо - intlayer-vite-svelte-template",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"}],type:"34"}],type:"34"},$R[60]={children:$R[61]=[$R[62]={text:"Содержание",type:"27"}],id:"",level:2,type:"9"},$R[63]={attrs:null,tag:"TOC",type:"13"},$R[64]={children:$R[65]=[$R[66]={text:"Почему Intlayer лучше альтернатив?",type:"27"}],id:"-intlayer--",level:2,type:"9"},$R[67]={children:$R[68]=[$R[69]={text:"По сравнению с основными решениями, такими как «svelte",type:"27"},$R[70]={text:"-i18n» или «i18next», Intlayer — это решение, которое включает в себя встроенные оптимизации, такие как",type:"27"},$R[71]={text:":",type:"27"}],type:"21"},$R[72]={type:"19"},$R[73]={attrs:null,noInnerParse:!1,tag:"AccordionGroup",children:$R[74]=[$R[75]={type:"19"},$R[76]={attrs:$R[77]={header:"Полное покрытие Svelte"},noInnerParse:!1,tag:"Accordion",children:$R[78]=[$R[79]={type:"19"},$R[80]={children:$R[81]=[$R[82]={text:"Intlayer оптимизирован для идеальной работы со Svelte, предлагая ",type:"27"},$R[83]={children:$R[84]=[$R[85]={text:"охват контента на уровне компонентов",type:"27"}],type:"28"},$R[86]={text:", ",type:"27"},$R[87]={children:$R[88]=[$R[89]={text:"реактивные переводы",type:"27"}],type:"28"},$R[90]={text:" и все функции, необходимые для масштабирования интернационализации (i18n).",type:"27"}],type:"21"},$R[91]={type:"19"}],type:"34"},$R[92]={attrs:$R[93]={header:"Размер бандла"},noInnerParse:!1,tag:"Accordion",children:$R[94]=[$R[95]={type:"19"},$R[96]={children:$R[97]=[$R[98]={text:"Вместо загрузки огромных файлов JSON на свои страницы загружайте только необходимый контент. Intlayer помогает ",type:"27"},$R[99]={children:$R[100]=[$R[101]={text:"уменьшить размер бандла и страниц до 50 %",type:"27"}],type:"28"},$R[102]={text:".",type:"27"}],type:"21"},$R[103]={type:"19"}],type:"34"},$R[104]={attrs:$R[105]={header:"Удобство обслуживания"},noInnerParse:!1,tag:"Accordion",children:$R[106]=[$R[107]={type:"19"},$R[108]={children:$R[109]=[$R[110]={text:"Определение области содержимого вашего приложения ",type:"27"},$R[111]={children:$R[112]=[$R[113]={text:"облегчает обслуживание",type:"27"}],type:"28"},$R[114]={text:" крупномасштабных приложений. Вы можете дублировать или удалить отдельную папку функций, не утруждав себя мысленным бременем проверки всей кодовой базы контента. Кроме того, Intlayer ",type:"27"},$R[115]={children:$R[116]=[$R[117]={text:"полностью типизирован",type:"27"}],type:"28"},$R[118]={text:", что обеспечивает точность вашего контента.",type:"27"}],type:"21"},$R[119]={type:"19"}],type:"34"},$R[120]={attrs:$R[121]={header:"Агент ИИ"},noInnerParse:!1,tag:"Accordion",children:$R[122]=[$R[123]={type:"19"},$R[124]={children:$R[125]=[$R[126]={text:"Совместное размещение контента ",type:"27"},$R[127]={children:$R[128]=[$R[129]={text:"уменьшает контекст, необходимый",type:"27"}],type:"28"},$R[130]={text:" для моделей большого языка (LLM). Intlayer также поставляется с набором инструментов, таких как ",type:"27"},$R[131]={children:$R[132]=[$R[133]={text:"CLI",type:"27"}],type:"28"},$R[134]={text:" для проверки отсутствия переводов,",type:"27"},$R[135]={children:$R[136]=[$R[137]={children:$R[138]=[$R[139]={text:"LSP",type:"27"}],target:"/ru/doc/lsp",title:void 0,type:"15"}],type:"28"},$R[140]={text:", ",type:"27"},$R[141]={children:$R[142]=[$R[143]={children:$R[144]=[$R[145]={text:"MCP",type:"27"}],target:"/ru/doc/mcp-server",title:void 0,type:"15"}],type:"28"},$R[146]={text:", и ",type:"27"},$R[147]={children:$R[148]=[$R[149]={children:$R[150]=[$R[151]={text:"навыки агента",type:"27"}],target:"/ru/doc/agent_skills",title:void 0,type:"15"}],type:"28"},$R[152]={text:", чтобы сделать работу разработчика (DX) еще более удобной для агентов ИИ.",type:"27"}],type:"21"},$R[153]={type:"19"}],type:"34"},$R[154]={attrs:$R[155]={header:"Автоматизация"},noInnerParse:!1,tag:"Accordion",children:$R[156]=[$R[157]={type:"19"},$R[158]={children:$R[159]=[$R[160]={text:"Используйте автоматизацию для перевода в своем конвейере CI/CD, используя LLM по вашему выбору за счет вашего поставщика ИИ. Intlayer также предлагает ",type:"27"},$R[161]={children:$R[162]=[$R[163]={text:"компилятор",type:"27"}],type:"28"},$R[164]={text:" для автоматизации извлечения контента, а также ",type:"27"},$R[165]={children:$R[166]=[$R[167]={text:"веб",type:"27"},$R[168]={text:"-платформу",type:"27"}],target:"/ru/doc/concept/cms",title:void 0,type:"15"},$R[169]={text:", которая помогает ",type:"27"},$R[170]={children:$R[171]=[$R[172]={text:"переводить в фоновом режиме",type:"27"}],type:"28"},$R[173]={text:".",type:"27"}],type:"21"},$R[174]={type:"19"}],type:"34"},$R[175]={attrs:$R[176]={header:"Производительность"},noInnerParse:!1,tag:"Accordion",children:$R[177]=[$R[178]={type:"19"},$R[179]={children:$R[180]=[$R[181]={text:"Подключение больших файлов JSON к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента во время сборки (build time).",type:"27"}],type:"21"},$R[182]={type:"19"}],type:"34"},$R[183]={attrs:$R[184]={header:"Масштабирование с помощью не-разработчиками"},noInnerParse:!1,tag:"Accordion",children:$R[185]=[$R[186]={type:"19"},$R[187]={children:$R[188]=[$R[189]={text:"Intlayer — это больше, чем просто решение i18n. Он предоставляет ",type:"27"},$R[190]={children:$R[191]=[$R[192]={text:"автономный ",type:"27"},$R[193]={children:$R[194]=[$R[195]={text:"визуальный редактор",type:"27"}],target:"/ru/doc/concept/editor",title:void 0,type:"15"}],type:"28"},$R[196]={text:" и ",type:"27"},$R[197]={children:$R[198]=[$R[199]={children:$R[200]=[$R[201]={text:"полный CMS",type:"27"}],target:"/ru/doc/concept/cms",title:void 0,type:"15"}],type:"28"},$R[202]={text:", чтобы помочь вам управлять многоязычным контентом в ",type:"27"},$R[203]={children:$R[204]=[$R[205]={text:"реальном времени",type:"27"}],type:"28"},$R[206]={text:", упрощая сотрудничество с переводчиками, копирайтерами и другими членами команды. Контент может храниться локально и/или удаленно.",type:"27"}],type:"21"},$R[207]={type:"19"}],type:"34"}],type:"34"},$R[208]={type:"2"},$R[209]={children:$R[210]=[$R[211]={text:"Пошаговое руководство по настройке Intlayer в приложении на Vite и Svelte",type:"27"}],id:"----intlayer----vite--svelte",level:2,type:"9"},$R[212]={attrs:$R[213]={src:"https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Демонстрация CodeSandbox - Как интернационализировать ваше приложение с помощью Intlayer",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"},$R[214]={children:$R[215]=[$R[216]={text:"Смотрите ",type:"27"},$R[217]={children:$R[218]=[$R[219]={text:"Шаблон приложения",type:"27"}],target:"https://github.com/aymericzip/intlayer-vite-svelte-template",title:void 0,type:"15"},$R[220]={text:" на GitHub.",type:"27"}],type:"21"},$R[221]={type:"19"},$R[222]={attrs:null,noInnerParse:!1,tag:"Steps",children:$R[223]=[$R[224]={type:"19"},$R[225]={attrs:$R[226]={number:"1",title:"Установка зависимостей"},noInnerParse:!1,tag:"Step",children:$R[227]=[$R[228]={type:"19"},$R[229]={children:$R[230]=[$R[231]={text:"Установите необходимые пакеты с помощью npm",type:"27"},$R[232]={text:":",type:"27"}],type:"21"},$R[233]={type:"19"},$R[234]={attrs:$R[235]={packageManager:"npm"},lang:"bash",text:"npm install intlayer svelte-intlayer\nnpm install vite-intlayer --save-dev\nnpx intlayer init\n",type:"3"},$R[236]={type:"19"},$R[237]={attrs:$R[238]={packageManager:"pnpm"},lang:"bash",text:"pnpm add intlayer svelte-intlayer\npnpm add vite-intlayer --save-dev\npnpm intlayer init\n",type:"3"},$R[239]={type:"19"},$R[240]={attrs:$R[241]={packageManager:"yarn"},lang:"bash",text:"yarn add intlayer svelte-intlayer\nyarn add vite-intlayer --save-dev\nyarn intlayer init\n",type:"3"},$R[242]={type:"19"},$R[243]={attrs:$R[244]={packageManager:"bun"},lang:"bash",text:"bun add intlayer svelte-intlayer\nbun add vite-intlayer --save-dev\nbun x intlayer init\n",type:"3"},$R[245]={type:"19"},$R[246]={items:$R[247]=[$R[248]=[$R[249]={children:$R[250]=[$R[251]={children:$R[252]=[$R[253]={text:"intlayer",type:"27"}],type:"28"}],type:"21"},$R[254]={type:"19"},$R[255]={children:$R[256]=[$R[257]={text:"Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, ",type:"27"},$R[258]={children:$R[259]=[$R[260]={text:"объявления контента",type:"27"}],target:"/ru/doc/concept/content",title:void 0,type:"15"},$R[261]={text:", транспиляции и ",type:"27"},$R[262]={children:$R[263]=[$R[264]={text:"CLI",type:"27"},$R[265]={text:"-команд",type:"27"}],target:"/ru/doc/concept/cli",title:void 0,type:"15"},$R[266]={text:".",type:"27"}],type:"21"},$R[267]={type:"19"}],$R[268]=[$R[269]={children:$R[270]=[$R[271]={children:$R[272]=[$R[273]={text:"svelte",type:"27"},$R[274]={text:"-intlayer",type:"27"}],type:"28"},$R[275]={text:"\nПакет, который интегрирует Intlayer с приложением на Svelte. Он предоставляет провайдеры контекста и хуки для интернационализации в Svelte.",type:"27"}],type:"21"},$R[276]={type:"19"}],$R[277]=[$R[278]={children:$R[279]=[$R[280]={children:$R[281]=[$R[282]={text:"vite",type:"27"},$R[283]={text:"-intlayer",type:"27"}],type:"28"},$R[284]={text:"\nВключает плагин Vite для интеграции Intlayer с ",type:"27"},$R[285]={children:$R[286]=[$R[287]={text:"сборщиком Vite",type:"27"}],target:"https://vite.dev/guide/why.html#why-bundle-for-production",title:void 0,type:"15"},$R[288]={text:", а также middleware для определения предпочтительной локали пользователя, управления cookie и обработки перенаправления URL.",type:"27"}],type:"21"},$R[289]={type:"19"}]],ordered:!1,start:void 0,type:"33"}],type:"34"},$R[290]={attrs:$R[291]={number:"2",title:"Конфигурация вашего проекта"},noInnerParse:!1,tag:"Step",children:$R[292]=[$R[293]={type:"19"},$R[294]={children:$R[295]=[$R[296]={text:"Создайте файл конфигурации для настройки языков вашего приложения",type:"27"},$R[297]={text:":",type:"27"}],type:"21"},$R[298]={type:"19"},$R[299]={attrs:$R[300]={fileName:"intlayer.config.ts"},lang:"typescript",text:"import { Locales, type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n internationalization: {\n locales: [\n Locales.ENGLISH,\n Locales.FRENCH,\n Locales.SPANISH,\n // Ваши другие локали\n ],\n\n defaultLocale: Locales.ENGLISH,\n },\n};\n\nexport default config;\n",type:"3"},$R[301]={type:"19"},$R[302]={alert:void 0,children:$R[303]=[$R[304]={text:"Через этот файл конфигурации вы можете настроить локализованные URL, перенаправление в middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к ",type:"27"},$R[305]={children:$R[306]=[$R[307]={text:"документации по конфигурации",type:"27"}],target:"/ru/doc/concept/configuration",title:void 0,type:"15"},$R[308]={text:".",type:"27"}],type:"0"},$R[309]={type:"19"}],type:"34"},$R[310]={attrs:$R[311]={number:"3",title:"Интеграция Intlayer в вашу конфигурацию Vite"},noInnerParse:!1,tag:"Step",children:$R[312]=[$R[313]={type:"19"},$R[314]={children:$R[315]=[$R[316]={text:"Добавьте плагин intlayer в вашу конфигурацию.",type:"27"}],type:"21"},$R[317]={type:"19"},$R[318]={attrs:$R[319]={fileName:"vite.config.ts"},lang:"typescript",text:"import { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [svelte(), intlayer()],\n});\n",type:"3"},$R[320]={type:"19"},$R[321]={alert:void 0,children:$R[322]=[$R[323]={text:"Плагин Vite ",type:"27"},$R[324]={text:"intlayer()",type:"5"},$R[325]={text:" используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов деклараций контента и отслеживает их в режиме разработки. Определяет переменные окружения Intlayer внутри приложения Vite. Кроме того, предоставляет алиасы для оптимизации производительности.",type:"27"}],type:"0"},$R[326]={type:"19"}],type:"34"},$R[327]={attrs:$R[328]={number:"4",title:"Объявите ваш контент"},noInnerParse:!1,tag:"Step",children:$R[329]=[$R[330]={type:"19"},$R[331]={children:$R[332]=[$R[333]={text:"Создайте и управляйте декларациями контента для хранения переводов",type:"27"},$R[334]={text:":",type:"27"}],type:"21"},$R[335]={type:"19"},$R[336]={attrs:$R[337]={fileName:"src/app.content.tsx",contentDeclarationFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"tsx",text:"import { t, type Dictionary } from \"intlayer\";\n\nconst appContent = {\n key: \"app\",\n content: {\n title: t({\n en: \"Hello World\",\n fr: \"Bonjour le monde\",\n es: \"Hola mundo\",\n }),\n },\n} satisfies Dictionary;\n\nexport default appContent;\n",type:"3"},$R[338]={type:"19"},$R[339]={attrs:$R[340]={fileName:"src/app.content.json",contentDeclarationFormat:"json"},lang:"json",text:"{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"app\",\n \"content\": {\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Hello World\",\n \"fr\": \"Bonjour le monde\",\n \"es\": \"Hola mundo\"\n }\n }\n }\n}\n",type:"3"},$R[341]={type:"19"},$R[342]={alert:void 0,children:$R[343]=[$R[344]={text:"Ваши объявления контента могут быть определены в любом месте вашего приложения, как только они будут включены в директорию ",type:"27"},$R[345]={text:"contentDir",type:"5"},$R[346]={text:" (по умолчанию, ",type:"27"},$R[347]={text:"./src",type:"5"},$R[348]={text:"). И соответствовать расширению файла объявления контента (по умолчанию, ",type:"27"},$R[349]={text:".content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}",type:"5"},$R[350]={text:").",type:"27"}],type:"0"},$R[351]={type:"19"},$R[352]={alert:void 0,children:$R[353]=[$R[354]={text:"Для получения дополнительной информации обратитесь к ",type:"27"},$R[355]={children:$R[356]=[$R[357]={text:"документации по объявлению контента",type:"27"}],target:"/ru/doc/concept/content",title:void 0,type:"15"},$R[358]={text:".",type:"27"}],type:"0"},$R[359]={type:"19"}],type:"34"},$R[360]={attrs:$R[361]={number:"5",title:"Использование Intlayer в вашем коде"},noInnerParse:!1,tag:"Step",children:$R[362]=[$R[363]={type:"19"},$R[364]={attrs:$R[365]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript>\n import { useIntlayer } from \"svelte-intlayer\";\n\n const content = useIntlayer(\"app\");\n\x3C/script>\n\n\x3Cdiv>\n\n\n\x3C!-- Отобразить контент как простой контент -->\n\x3Ch1>{$content.title}\x3C/h1>\n\x3C!-- Отобразить контент с возможностью редактирования через редактор -->\n\x3Ch1>{@const Title = $content.title}\x3CTitle />\x3C/h1>\n\x3C!-- Отобразить контент как строку -->\n\x3Cdiv aria-label={$content.title.value}>\x3C/div>\n\x3Cdiv aria-label={$content.title.toString()}>\x3C/div>\n\x3Cdiv aria-label={String($content.title)}>\x3C/div>\n\n> Если ваше приложение уже существует, вы можете использовать [Intlayer Compiler](/ru/doc/compiler) в сочетании с [командой extract](/ru/doc/concept/cli/extract), чтобы преобразовать тысячи компонентов за одну секунду.\n",type:"3"},$R[366]={type:"19"}],type:"34"},$R[367]={attrs:$R[368]={number:"6",title:"Изменение языка вашего контента",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[369]=[$R[370]={type:"19"},$R[371]={attrs:$R[372]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Получить информацию о локали и функцию setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Обработка изменения локали\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n\x3C/script>\n\n\x3Cdiv>\n \x3Cselect value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n",type:"3"},$R[373]={type:"19"}],type:"34"},$R[374]={attrs:$R[375]={number:"7",title:"Отображение Markdown",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[376]=[$R[377]={type:"19"},$R[378]={children:$R[379]=[$R[380]={text:"Intlayer поддерживает отображение контента в формате Markdown непосредственно в вашем приложении на Svelte. По умолчанию Markdown обрабатывается как простой текст. Чтобы преобразовать Markdown в насыщенный HTML, вы можете интегрировать ",type:"27"},$R[381]={text:"@humanspeak/svelte-markdown",type:"5"},$R[382]={text:" или другой парсер Markdown.",type:"27"}],type:"21"},$R[383]={type:"19"},$R[384]={alert:void 0,children:$R[385]=[$R[386]={text:"Чтобы узнать, как объявлять контент в формате markdown с использованием пакета ",type:"27"},$R[387]={text:"intlayer",type:"5"},$R[388]={text:", смотрите ",type:"27"},$R[389]={children:$R[390]=[$R[391]={text:"документацию по markdown",type:"27"}],target:"https://github.com/aymericzip/intlayer/tree/main/docs/docs/ru/dictionary/markdown.md",title:void 0,type:"15"},$R[392]={text:".",type:"27"}],type:"0"},$R[393]={type:"19"},$R[394]={attrs:$R[395]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // рендеринг содержимого markdown как строки\n return markdown;\n );\n\x3C/script>\n\n\x3Ch1>{$content.markdownContent}\x3C/h1>\n",type:"3"},$R[396]={type:"19"},$R[397]={alert:void 0,children:$R[398]=[$R[399]={text:"Вы также можете получить доступ к данным front",type:"27"},$R[400]={text:"-matter вашего markdown через свойство ",type:"27"},$R[401]={text:"content.markdownContent.metadata.xxx",type:"5"},$R[402]={text:".",type:"27"}],type:"0"},$R[403]={type:"19"}],type:"34"},$R[404]={attrs:$R[405]={number:"8",title:"Настройка редактора / CMS intlayer",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[406]=[$R[407]={type:"19"},$R[408]={children:$R[409]=[$R[410]={text:"Для настройки редактора intlayer необходимо следовать ",type:"27"},$R[411]={children:$R[412]=[$R[413]={text:"документации редактора intlayer",type:"27"}],target:"/ru/doc/concept/editor",title:void 0,type:"15"},$R[414]={text:".",type:"27"}],type:"21"},$R[415]={type:"19"},$R[416]={children:$R[417]=[$R[418]={text:"Для настройки CMS intlayer необходимо следовать ",type:"27"},$R[419]={children:$R[420]=[$R[421]={text:"документации CMS intlayer",type:"27"}],target:"/ru/doc/concept/cms",title:void 0,type:"15"},$R[422]={text:".",type:"27"}],type:"21"},$R[423]={type:"19"}],type:"34"},$R[424]={attrs:$R[425]={number:"7",title:"Добавьте локализованную маршрутизацию в ваше приложение",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[426]=[$R[427]={type:"19"},$R[428]={children:$R[429]=[$R[430]={text:"Для обработки локализованной маршрутизации в вашем приложении на Svelte вы можете использовать ",type:"27"},$R[431]={text:"svelte-spa-router",type:"5"},$R[432]={text:" вместе с ",type:"27"},$R[433]={text:"localeFlatMap",type:"5"},$R[434]={text:" из Intlayer для генерации маршрутов для каждой локали.",type:"27"}],type:"21"},$R[435]={type:"19"},$R[436]={children:$R[437]=[$R[438]={text:"Сначала установите ",type:"27"},$R[439]={text:"svelte-spa-router",type:"5"},$R[440]={text:":",type:"27"}],type:"21"},$R[441]={type:"19"},$R[442]={attrs:$R[443]={packageManager:"npm"},lang:"bash",text:"npm install svelte-spa-router\nnpx intlayer init\n",type:"3"},$R[444]={type:"19"},$R[445]={attrs:$R[446]={packageManager:"pnpm"},lang:"bash",text:"pnpm add svelte-spa-router\npnpm intlayer init\n",type:"3"},$R[447]={type:"19"},$R[448]={attrs:$R[449]={packageManager:"yarn"},lang:"bash",text:"yarn add svelte-spa-router\nyarn intlayer init\n",type:"3"},$R[450]={type:"19"},$R[451]={attrs:$R[452]={packageManager:"bun"},lang:"bash",text:"bun add svelte-spa-router\n",type:"3"},$R[453]={type:"19"},$R[454]={children:$R[455]=[$R[456]={text:"Затем создайте файл ",type:"27"},$R[457]={text:"Router.svelte",type:"5"},$R[458]={text:" для определения ваших маршрутов",type:"27"},$R[459]={text:":",type:"27"}],type:"21"},$R[460]={type:"19"},$R[461]={attrs:$R[462]={fileName:"src/Router.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n\x3C/script>\n\n\x3CRouter {routes} />\n",type:"3"},$R[463]={type:"19"},$R[464]={children:$R[465]=[$R[466]={text:"Обновите ваш ",type:"27"},$R[467]={text:"main.ts",type:"5"},$R[468]={text:", чтобы монтировать компонент ",type:"27"},$R[469]={text:"Router",type:"5"},$R[470]={text:" вместо ",type:"27"},$R[471]={text:"App",type:"5"},$R[472]={text:":",type:"27"}],type:"21"},$R[473]={type:"19"},$R[474]={attrs:$R[475]={fileName:"src/main.ts"},lang:"typescript",text:"import { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n",type:"3"},$R[476]={type:"19"},$R[477]={children:$R[478]=[$R[479]={text:"Наконец, обновите ваш ",type:"27"},$R[480]={text:"App.svelte",type:"5"},$R[481]={text:", чтобы принимать проп ",type:"27"},$R[482]={text:"locale",type:"5"},$R[483]={text:" и использовать его с ",type:"27"},$R[484]={text:"useIntlayer",type:"5"},$R[485]={text:":",type:"27"}],type:"21"},$R[486]={type:"19"},$R[487]={attrs:$R[488]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n// Используем хук useIntlayer для получения контента на основе текущей локали\n$: content = useIntlayer('app', locale);\n\x3C/script>\n\n\x3Cmain>\n \x3Cdiv class=\"locale-switcher-container\">\n \x3CLocaleSwitcher currentLocale={locale} />\n \x3C/div>\n\n \x3C!-- ... остальная часть вашего приложения ... -->\n\x3C/main>\n",type:"3"},$R[489]={type:"19"},$R[490]={children:$R[491]=[$R[492]={text:"Настройка маршрутизации на стороне сервера (необязательно)",type:"27"}],id:"-----",level:4,type:"9"},$R[493]={children:$R[494]=[$R[495]={text:"Параллельно вы также можете использовать ",type:"27"},$R[496]={text:"intlayerProxy",type:"5"},$R[497]={text:" для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующее cookie с локалью. Если локаль не указана, плагин определит наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не будет обнаружена, произойдет перенаправление на локаль по умолчанию.",type:"27"}],type:"21"},$R[498]={type:"19"},$R[499]={alert:void 0,children:$R[500]=[$R[501]={text:"Обратите внимание, что для использования ",type:"27"},$R[502]={text:"intlayerProxy",type:"5"},$R[503]={text:" в продакшене необходимо перевести пакет ",type:"27"},$R[504]={text:"vite-intlayer",type:"5"},$R[505]={text:" из ",type:"27"},$R[506]={text:"devDependencies",type:"5"},$R[507]={text:" в ",type:"27"},$R[508]={text:"dependencies",type:"5"},$R[509]={text:".",type:"27"}],type:"0"},$R[510]={type:"19"},$R[511]={attrs:$R[512]={3:!0,7:!0,fileName:"vite.config.ts",codeFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"typescript",text:"import { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n",type:"3"},$R[513]={type:"19"}],type:"34"},$R[514]={attrs:$R[515]={number:"8",title:"Изменение URL при смене локали",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[516]=[$R[517]={type:"19"},$R[518]={children:$R[519]=[$R[520]={text:"Чтобы позволить пользователям переключать языки и обновлять URL соответствующим образом, вы можете создать компонент ",type:"27"},$R[521]={text:"LocaleSwitcher",type:"5"},$R[522]={text:". Этот компонент будет использовать ",type:"27"},$R[523]={text:"getLocalizedUrl",type:"5"},$R[524]={text:" из ",type:"27"},$R[525]={text:"intlayer",type:"5"},$R[526]={text:" и ",type:"27"},$R[527]={text:"push",type:"5"},$R[528]={text:" из ",type:"27"},$R[529]={text:"svelte-spa-router",type:"5"},$R[530]={text:".",type:"27"}],type:"21"},$R[531]={type:"19"},$R[532]={attrs:$R[533]={fileName:"src/lib/LocaleSwitcher.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Получение информации о локали\nconst { locale, availableLocales } = useLocale();\n\n// Обработка изменения локали\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n\x3C/script>\n\n\x3Cdiv class=\"locale-switcher\">\n \x3Cselect value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n",type:"3"},$R[534]={type:"19"}],type:"34"},$R[535]={attrs:$R[536]={number:"1",title:"Извлечение содержимого ваших компонентов",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[537]=[$R[538]={type:"19"},$R[539]={children:$R[540]=[$R[541]={text:"Если у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.",type:"27"}],type:"21"},$R[542]={type:"19"},$R[543]={children:$R[544]=[$R[545]={text:"Чтобы упростить этот процесс, Intlayer предлагает ",type:"27"},$R[546]={children:$R[547]=[$R[548]={text:"компилятор",type:"27"}],target:"/ru/doc/compiler",title:void 0,type:"15"},$R[549]={text:" / ",type:"27"},$R[550]={children:$R[551]=[$R[552]={text:"экстрактор",type:"27"}],target:"/ru/doc/concept/cli/extract",title:void 0,type:"15"},$R[553]={text:" для преобразования ваших компонентов и извлечения содержимого.",type:"27"}],type:"21"},$R[554]={type:"19"},$R[555]={children:$R[556]=[$R[557]={text:"Чтобы настроить его, вы можете добавить раздел ",type:"27"},$R[558]={text:"compiler",type:"5"},$R[559]={text:" в ваш файл ",type:"27"},$R[560]={text:"intlayer.config.ts",type:"5"},$R[561]={text:":",type:"27"}],type:"21"},$R[562]={type:"19"},$R[563]={attrs:$R[564]={fileName:"intlayer.config.ts",codeFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"typescript",text:"import { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Остальная часть вашей конфигурации\n compiler: {\n /**\n * Указывает, должен ли быть включен компилятор.\n */\n enabled: true,\n\n /**\n * Определяет путь к выходным файлам\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.\n */\n saveComponents: false,\n\n /**\n * Префикс ключа словаря\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n",type:"3"},$R[565]={type:"19"},$R[566]={attrs:null,noInnerParse:!1,tag:"Tabs",children:$R[567]=[$R[568]={attrs:$R[569]={value:"Команда извлечения"},noInnerParse:!1,tag:"Tab",children:$R[570]=[$R[571]={type:"19"},$R[572]={children:$R[573]=[$R[574]={text:"Запустите экстрактор для преобразования компонентов и извлечения содержимого",type:"27"}],type:"21"},$R[575]={type:"19"},$R[576]={attrs:$R[577]={packageManager:"npm"},lang:"bash",text:"npx intlayer extract\n",type:"3"},$R[578]={type:"19"},$R[579]={attrs:$R[580]={packageManager:"pnpm"},lang:"bash",text:"pnpm intlayer extract\n",type:"3"},$R[581]={type:"19"},$R[582]={attrs:$R[583]={packageManager:"yarn"},lang:"bash",text:"yarn intlayer extract\n",type:"3"},$R[584]={type:"19"},$R[585]={attrs:$R[586]={packageManager:"bun"},lang:"bash",text:"bun x intlayer extract\n",type:"3"},$R[587]={type:"19"}],type:"34"},$R[588]={attrs:$R[589]={value:"Компилятор Babel"},noInnerParse:!1,tag:"Tab",children:$R[590]=[$R[591]={type:"19"},$R[592]={children:$R[593]=[$R[594]={text:"Обновите ваш ",type:"27"},$R[595]={text:"vite.config.ts",type:"5"},$R[596]={text:", чтобы включить плагин ",type:"27"},$R[597]={text:"intlayerCompiler",type:"5"},$R[598]={text:":",type:"27"}],type:"21"},$R[599]={type:"19"},$R[600]={attrs:$R[601]={fileName:"vite.config.ts"},lang:"ts",text:"import { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Добавляет плагин компилятора\n ],\n});\n",type:"3"},$R[602]={type:"19"},$R[603]={attrs:$R[604]={packageManager:"npm"},lang:"bash",text:"npm run build # Или npm run dev\n",type:"3"},$R[605]={type:"19"},$R[606]={attrs:$R[607]={packageManager:"pnpm"},lang:"bash",text:"pnpm run build # Or pnpm run dev\n",type:"3"},$R[608]={type:"19"},$R[609]={attrs:$R[610]={packageManager:"yarn"},lang:"bash",text:"yarn build # Or yarn dev\n",type:"3"},$R[611]={type:"19"},$R[612]={attrs:$R[613]={packageManager:"bun"},lang:"bash",text:"bun run build # Or bun run dev\n",type:"3"},$R[614]={type:"19"}],type:"34"}],type:"34"}],type:"34"}],type:"34"},$R[615]={children:$R[616]=[$R[617]={text:"Конфигурация Git",type:"27"}],id:"-git",level:3,type:"9"},$R[618]={children:$R[619]=[$R[620]={text:"Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.",type:"27"}],type:"21"},$R[621]={type:"19"},$R[622]={children:$R[623]=[$R[624]={text:"Для этого вы можете добавить следующие инструкции в ваш файл ",type:"27"},$R[625]={text:".gitignore",type:"5"},$R[626]={text:":",type:"27"}],type:"21"},$R[627]={type:"19"},$R[628]={attrs:null,lang:"bash",text:"# Игнорировать файлы, сгенерированные Intlayer\n.intlayer\n",type:"3"},$R[629]={type:"19"},$R[630]={children:$R[631]=[$R[632]={text:"Расширение VS Code",type:"27"}],id:"-vs-code",level:3,type:"9"},$R[633]={children:$R[634]=[$R[635]={text:"Чтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение ",type:"27"},$R[636]={children:$R[637]=[$R[638]={text:"Intlayer для VS Code",type:"27"}],type:"28"},$R[639]={text:".",type:"27"}],type:"21"},$R[640]={type:"19"},$R[641]={children:$R[642]=[$R[643]={children:$R[644]=[$R[645]={text:"Установить из VS Code Marketplace",type:"27"}],target:"https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension",title:void 0,type:"15"}],type:"21"},$R[646]={type:"19"},$R[647]={children:$R[648]=[$R[649]={text:"Это расширение предоставляет",type:"27"},$R[650]={text:":",type:"27"}],type:"21"},$R[651]={type:"19"},$R[652]={items:$R[653]=[$R[654]=[$R[655]={children:$R[656]=[$R[657]={text:"Автозаполнение",type:"27"}],type:"28"},$R[658]={text:" ключей переводов.",type:"27"}],$R[659]=[$R[660]={children:$R[661]=[$R[662]={text:"Обнаружение ошибок в реальном времени",type:"27"}],type:"28"},$R[663]={text:" для отсутствующих переводов.",type:"27"}],$R[664]=[$R[665]={children:$R[666]=[$R[667]={text:"Встроенный просмотр",type:"27"}],type:"28"},$R[668]={text:" переведенного контента.",type:"27"}],$R[669]=[$R[670]={children:$R[671]=[$R[672]={text:"Быстрые действия",type:"27"}],type:"28"},$R[673]={text:" для удобного создания и обновления переводов.",type:"27"}]],ordered:!1,start:void 0,type:"33"},$R[674]={children:$R[675]=[$R[676]={text:"Для получения дополнительной информации о том, как использовать расширение, обратитесь к ",type:"27"},$R[677]={children:$R[678]=[$R[679]={text:"документации расширения Intlayer для VS Code",type:"27"}],target:"https://intlayer.org/doc/vs-code-extension",title:void 0,type:"15"},$R[680]={text:".",type:"27"}],type:"21"},$R[681]={type:"19"},$R[682]={type:"2"},$R[683]={children:$R[684]=[$R[685]={text:"(Опционально) Sitemap и robots.txt (генерация на сборке)",type:"27"}],id:"-sitemap--robotstxt---",level:3,type:"9"},$R[686]={children:$R[687]=[$R[688]={text:"Intlayer предоставляет ",type:"27"},$R[689]={text:"generateSitemap",type:"5"},$R[690]={text:" и ",type:"27"},$R[691]={text:"getMultilingualUrls",type:"5"},$R[692]={text:" ",type:"27"},$R[693]={text:"- утилиты, которые формируют многоязычные ",type:"27"},$R[694]={text:"sitemap.xml",type:"5"},$R[695]={text:" и ",type:"27"},$R[696]={text:"robots.txt",type:"5"},$R[697]={text:" для краулеров и позволяют автоматически записать их в ",type:"27"},$R[698]={text:"public/",type:"5"},$R[699]={text:". Обычно запускают небольшой Node",type:"27"},$R[700]={text:"-скрипт ",type:"27"},$R[701]={children:$R[702]=[$R[703]={text:"до",type:"27"}],type:"28"},$R[704]={text:" Vite (например, npm",type:"27"},$R[705]={text:"-хуки ",type:"27"},$R[706]={text:"predev",type:"5"},$R[707]={text:" / ",type:"27"},$R[708]={text:"prebuild",type:"5"},$R[709]={text:").",type:"27"}],type:"21"},$R[710]={type:"19"},$R[711]={children:$R[712]=[$R[713]={text:"Sitemap",type:"27"}],id:"sitemap",level:4,type:"9"},$R[714]={children:$R[715]=[$R[716]={text:"Генератор sitemap учитывает локали и добавляет нужные метаданные.",type:"27"}],type:"21"},$R[717]={type:"19"},$R[718]={alert:void 0,children:$R[719]=[$R[720]={text:"Поддерживается пространство имён ",type:"27"},$R[721]={text:"xhtml:link",type:"5"},$R[722]={text:" (hreflang). Вместо плоского списка URL Intlayer связывает все языковые версии страницы в обе стороны (например ",type:"27"},$R[723]={text:"/about",type:"5"},$R[724]={text:", ",type:"27"},$R[725]={text:"/fr/about",type:"5"},$R[726]={text:" или ",type:"27"},$R[727]={text:"/about?lang=fr",type:"5"},$R[728]={text:" в зависимости от режима маршрутизации).",type:"27"}],type:"0"},$R[729]={type:"19"},$R[730]={children:$R[731]=[$R[732]={text:"Robots.txt",type:"27"}],id:"robotstxt",level:4,type:"9"},$R[733]={children:$R[734]=[$R[735]={text:"Используйте ",type:"27"},$R[736]={text:"getMultilingualUrls",type:"5"},$R[737]={text:", чтобы правила ",type:"27"},$R[738]={text:"Disallow",type:"5"},$R[739]={text:" покрывали все локализованные варианты путей.",type:"27"}],type:"21"},$R[740]={type:"19"},$R[741]={children:$R[742]=[$R[743]={text:"1. Файл ",type:"27"},$R[744]={text:"generate-seo.mjs",type:"5"},$R[745]={text:" в корне проекта",type:"27"}],id:"1--generate-seomjs---",level:4,type:"9"},$R[746]={attrs:$R[747]={fileName:"generate-seo.mjs"},lang:"javascript",text:"import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n",type:"3"},$R[748]={type:"19"},$R[749]={children:$R[750]=[$R[751]={text:"Пакет ",type:"27"},$R[752]={text:"intlayer",type:"5"},$R[753]={text:" должен быть установлен. Для продакшена задайте ",type:"27"},$R[754]={text:"SITE_URL",type:"5"},$R[755]={text:" в окружении (например в CI).",type:"27"}],type:"21"},$R[756]={type:"19"},$R[757]={alert:void 0,children:$R[758]=[$R[759]={text:"Для Node ESM предпочтительно ",type:"27"},$R[760]={text:"generate-seo.mjs",type:"5"},$R[761]={text:". Для ",type:"27"},$R[762]={text:"generate-seo.js",type:"5"},$R[763]={text:" укажите ",type:"27"},$R[764]={text:"\"type\": \"module\"",type:"5"},$R[765]={text:" в ",type:"27"},$R[766]={text:"package.json",type:"5"},$R[767]={text:" или включите ESM иначе.",type:"27"}],type:"0"},$R[768]={type:"19"},$R[769]={children:$R[770]=[$R[771]={text:"2. Запуск скрипта до Vite",type:"27"}],id:"2----vite",level:4,type:"9"},$R[772]={attrs:$R[773]={fileName:"package.json"},lang:"json",text:"{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n",type:"3"},$R[774]={type:"19"},$R[775]={children:$R[776]=[$R[777]={text:"Подстройте команды для pnpm или yarn. Скрипт можно вызывать из CI или другого шага.",type:"27"}],type:"21"},$R[778]={type:"19"},$R[779]={children:$R[780]=[$R[781]={text:"Продвинуться дальше",type:"27"}],id:"-",level:3,type:"9"},$R[782]={children:$R[783]=[$R[784]={text:"Чтобы продвинуться дальше, вы можете реализовать ",type:"27"},$R[785]={children:$R[786]=[$R[787]={text:"визуальный редактор",type:"27"}],target:"/ru/doc/concept/editor",title:void 0,type:"15"},$R[788]={text:" или вынести ваш контент, используя ",type:"27"},$R[789]={children:$R[790]=[$R[791]={text:"CMS",type:"27"}],target:"/ru/doc/concept/cms",title:void 0,type:"15"},$R[792]={text:".",type:"27"}],type:"21"},$R[793]={type:"19"}],footnotes:$R[794]=[],inline:!1},nextDoc:$R[795]={title:"SvelteKit",url:"/ru/doc/environment/sveltekit"},prevDoc:$R[796]={title:"Vite и Solid",url:"/ru/doc/environment/vite-and-solid"},navData:$R[797]={why:$R[798]={title:"Почему Intlayer?",default:$R[799]={createdAt:"2024-08-14",updatedAt:"2026-05-31",title:"Преимущества Intlayer",description:"Узнайте о преимуществах и достоинствах использования Intlayer в ваших проектах. Поймите, почему Intlayer выделяется среди других фреймворков.",keywords:$R[800]=["Преимущества","Достоинства","Intlayer","Фреймворк","Сравнение"],slugs:$R[801]=["doc","why"],history:$R[802]=[$R[803]={version:"8.11.2",date:"2026-05-31",changes:"\"Добавлен раздел почему именно Intlayer, а не альтернативы\""},$R[804]={version:"7.3.1",date:"2025-11-27",changes:"\"Выпуск компилятора\""},$R[805]={version:"5.8.0",date:"2025-08-19",changes:"\"Обновлена сравнительная таблица\""},$R[806]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/interest_of_intlayer.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/interest_of_intlayer.md",relativeUrl:"/ru/doc/why",url:"https://intlayer.org/ru/doc/why"}},"get-started":$R[807]={title:"Начать",default:$R[808]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Введение",description:"Узнайте, как работает Intlayer. Ознакомьтесь с этапами, которые использует Intlayer в вашем приложении. Узнайте, для чего предназначены различные пакеты.",keywords:$R[809]=["Введение","Начало работы","Intlayer","Приложение","Пакеты"],slugs:$R[810]=["doc","get-started"],history:$R[811]=[$R[812]={version:"5.5.10",date:"2025-06-29",changes:"\"Init history\""}],author:"aymericzip",docKey:"./docs/en/introduction.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/introduction.md",relativeUrl:"/ru/doc/get-started",url:"https://intlayer.org/ru/doc/get-started"}},concept:$R[813]={title:"Концепция",subSections:$R[814]={"how-works-intlayer":$R[815]={title:"Как работает Intlayer",default:$R[816]={createdAt:"2024-08-12",updatedAt:"2025-06-29",title:"Как работает Intlayer",description:"Узнайте, как Intlayer работает внутри. Поймите архитектуру и компоненты, которые делают Intlayer мощным.",keywords:$R[817]=["Intlayer","Как работает","Архитектура","Компоненты","Внутренние процессы"],slugs:$R[818]=["doc","concept","how-works-intlayer"],history:$R[819]=[$R[820]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/how_works_intlayer.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/how_works_intlayer.md",relativeUrl:"/ru/doc/concept/how-works-intlayer",url:"https://intlayer.org/ru/doc/concept/how-works-intlayer"}},configuration:$R[821]={title:"Конфигурация",default:$R[822]={createdAt:"2024-08-13",updatedAt:"2026-05-12",title:"Конфигурация (Configuration)",description:"Узнайте, как настроить Intlayer для вашего приложения. Разберитесь в различных параметрах и опциях, доступных для настройки Intlayer в соответствии с вашими потребностями.",keywords:$R[823]=["Конфигурация","Настройки","Персонализация","Intlayer","Параметры"],slugs:$R[824]=["doc","concept","configuration"],history:$R[825]=[$R[826]={version:"8.9.4",date:"2026-05-12",changes:"\"Добавлена поддержка провайдера LM Studio\""},$R[827]={version:"8.7.0",date:"2026-04-08",changes:"\"Добавлены опции `prune` и `minify` в конфигурацию сборки\""},$R[828]={version:"8.7.0",date:"2026-04-03",changes:"\"Добавлена опция `currentDomain`\""},$R[829]={version:"8.4.0",date:"2026-03-20",changes:"\"Добавлена объектная нотация для каждого языка для 'compiler.output' и 'dictionary.fill'\""},$R[830]={version:"8.3.0",date:"2026-03-11",changes:"\"'baseDir' перенесен из конфигурации 'content' в конфигурацию 'system'\""},$R[831]={version:"8.2.0",date:"2026-03-09",changes:"\"Обновлены опции компилятора, добавлена поддержка 'output' и 'noMetadata'\""},$R[832]={version:"8.1.7",date:"2026-02-25",changes:"\"Обновлены опции компилятора\""},$R[833]={version:"8.1.5",date:"2026-02-23",changes:"\"Добавлена опция компилятора 'build-only' и префикс словаря\""},$R[834]={version:"8.0.6",date:"2026-02-12",changes:"\"Добавлена поддержка провайдеров Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face и Together.ai\""},$R[835]={version:"8.0.5",date:"2026-02-06",changes:"\"Добавлен `dataSerialization` в конфигурацию ИИ\""},$R[836]={version:"8.0.0",date:"2026-01-24",changes:"\"Режим импорта `live` переименован в `fetch` для лучшего описания базового механизма.\""},$R[837]={version:"8.0.0",date:"2026-01-22",changes:"\"Конфигурация сборки `importMode` перенесена в конфигурацию `dictionary`.\""},$R[838]={version:"8.0.0",date:"2026-01-22",changes:"\"Добавлена опция `rewrite` в конфигурацию маршрутизации\""},$R[839]={version:"8.0.0",date:"2026-01-18",changes:"\"Конфигурация системы отделена от конфигурации контента. Внутренние пути перенесены в свойство `system`. Добавлен `codeDir` для отделения файлов контента от преобразования кода.\""},$R[840]={version:"8.0.0",date:"2026-01-18",changes:"\"Добавлены опции словаря `location` и `schema`\""},$R[841]={version:"7.5.1",date:"2026-01-10",changes:"\"Добавлена поддержка форматов файлов JSON5 и JSONC\""},$R[842]={version:"7.5.0",date:"2025-12-17",changes:"\"Добавлена опция `buildMode`\""},$R[843]={version:"7.0.0",date:"2025-10-25",changes:"\"Добавлена конфигурация `dictionary`\""},$R[844]={version:"7.0.0",date:"2025-10-21",changes:"\"`middleware` заменен на конфигурацию `routing`\""},$R[845]={version:"7.0.0",date:"2025-10-12",changes:"\"Добавлена опция `formatCommand`\""},$R[846]={version:"6.2.0",date:"2025-10-12",changes:"\"Обновлена опция `excludedPath`\""},$R[847]={version:"6.0.2",date:"2025-09-23",changes:"\"Добавлена опция `outputFormat`\""},$R[848]={version:"6.0.0",date:"2025-09-21",changes:"\"Удалены поля `dictionaryOutput` и `i18nextResourcesDir`\""},$R[849]={version:"6.0.0",date:"2025-09-16",changes:"\"Добавлен режим импорта `live`\""},$R[850]={version:"6.0.0",date:"2025-09-04",changes:"\"Поле `hotReload` заменено на `liveSync` и добавлены поля `liveSyncPort`, `liveSyncURL`\""},$R[851]={version:"5.6.1",date:"2025-07-25",changes:"\"`activateDynamicImport` заменен на опцию `importMode`\""},$R[852]={version:"5.6.0",date:"2025-07-13",changes:"\"Стандартный `contentDir` изменен с `['src']` на `['.']`\""},$R[853]={version:"5.5.11",date:"2025-06-29",changes:"\"Добавлены команды `docs`\""}],author:"aymericzip",docKey:"./docs/en/configuration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md",relativeUrl:"/ru/doc/concept/configuration",url:"https://intlayer.org/ru/doc/concept/configuration"}},cli:$R[854]={title:"CLI",default:$R[855]={createdAt:"2024-08-11",updatedAt:"2026-03-31",title:"CLI - Все команды Intlayer CLI для вашего многоязычного сайта",description:"Узнайте, как использовать Intlayer CLI для управления вашим многоязычным сайтом. Следуйте шагам в этой онлайн-документации, чтобы настроить свой проект за считанные минуты.",keywords:$R[856]=["CLI","Интерфейс командной строки","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[857]=["doc","concept","cli"],history:$R[858]=[$R[859]={version:"9.0.0",date:"2026-06-11",changes:"\"Добавлена команда scan\""},$R[860]={version:"8.6.4",date:"2026-03-31",changes:"\"Добавлена команда standalone\""},$R[861]={version:"7.5.11",date:"2026-01-06",changes:"\"Добавлена команда CI\""},$R[862]={version:"7.5.11",date:"2026-01-06",changes:"\"Добавлена команда list projects\""},$R[863]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавлена команда init\""},$R[864]={version:"7.2.3",date:"2025-11-22",changes:"\"Добавлена команда extract\""},$R[865]={version:"7.1.0",date:"2025-11-05",changes:"\"Добавлен параметр skipIfExists в команду translate\""},$R[866]={version:"6.1.4",date:"2025-01-27",changes:"\"Добавлены алиасы для аргументов и команд CLI\""},$R[867]={version:"6.1.3",date:"2025-10-05",changes:"\"Добавлен параметр сборки к командам\""},$R[868]={version:"6.1.2",date:"2025-09-26",changes:"\"Добавлена команда version\""},$R[869]={version:"6.1.0",date:"2025-09-26",changes:"\"Параметр verbose по умолчанию установлен в true через CLI\""},$R[870]={version:"6.1.0",date:"2025-09-23",changes:"\"Добавлены команда watch и параметр with\""},$R[871]={version:"6.0.1",date:"2025-09-23",changes:"\"Добавлена команда editor\""},$R[872]={version:"6.0.0",date:"2025-09-17",changes:"\"Добавлены команды content test и list\""},$R[873]={version:"5.5.11",date:"2025-07-11",changes:"\"Обновлена документация параметров команд CLI\""},$R[874]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/cli/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/index.md",relativeUrl:"/ru/doc/concept/cli",url:"https://intlayer.org/ru/doc/concept/cli"},subSections:$R[875]={test:$R[876]={title:"Test",default:$R[877]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Тестирование отсутствующих переводов",description:"Узнайте, как тестировать и выявлять отсутствующие переводы в ваших словарях.",keywords:$R[878]=["Тест","Отсутствующие переводы","CLI","Intlayer"],slugs:$R[879]=["doc","concept","cli","test"],author:"aymericzip",docKey:"./docs/en/cli/test.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/test.md",relativeUrl:"/ru/doc/concept/cli/test",url:"https://intlayer.org/ru/doc/concept/cli/test"}},fill:$R[880]={title:"Fill",default:$R[881]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Заполнение словарей",description:"Узнайте, как заполнять, проверять и переводить ваши словари с помощью ИИ.",keywords:$R[882]=["Заполнение","Проверка","Перевод","Словари","CLI","Intlayer","ИИ"],slugs:$R[883]=["doc","concept","cli","fill"],author:"aymericzip",docKey:"./docs/en/cli/fill.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/fill.md",relativeUrl:"/ru/doc/concept/cli/fill",url:"https://intlayer.org/ru/doc/concept/cli/fill"}},build:$R[884]={title:"Build",default:$R[885]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Построение словарей",description:"Узнайте, как создавать словари Intlayer из файлов декларации контента.",keywords:$R[886]=["Построение","Словари","CLI","Intlayer"],slugs:$R[887]=["doc","concept","cli","build"],history:$R[888]=[$R[889]={version:"8.1.5",date:"2026-02-23",changes:"\"Добавить опцию checkTypes\""}],author:"aymericzip",docKey:"./docs/en/cli/build.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/build.md",relativeUrl:"/ru/doc/concept/cli/build",url:"https://intlayer.org/ru/doc/concept/cli/build"}},watch:$R[890]={title:"Watch",default:$R[891]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Наблюдение за словарями",description:"Узнайте, как отслеживать изменения в ваших файлах деклараций контента и автоматически создавать словари.",keywords:$R[892]=["Наблюдение","Словари","CLI","Intlayer"],slugs:$R[893]=["doc","concept","cli","watch"],author:"aymericzip",docKey:"./docs/en/cli/watch.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/watch.md",relativeUrl:"/ru/doc/concept/cli/watch",url:"https://intlayer.org/ru/doc/concept/cli/watch"}},extract:$R[894]={title:"Extract",default:$R[895]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Извлечение строк",description:"Узнайте, как извлекать строки из ваших компонентов в файл .content, расположенный рядом с компонентом.",keywords:$R[896]=["Извлечение","Компоненты","Миграция","CLI","Intlayer"],slugs:$R[897]=["doc","concept","cli","extract"],author:"aymericzip",docKey:"./docs/en/cli/extract.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/extract.md",relativeUrl:"/ru/doc/concept/cli/extract",url:"https://intlayer.org/ru/doc/concept/cli/extract"}},login:$R[898]={title:"Login",default:$R[899]={createdAt:"2025-12-16",updatedAt:"2025-12-16",title:"CLI - Вход",description:"Узнайте, как использовать команду login в Intlayer CLI для аутентификации в Intlayer CMS и получения учетных данных доступа.",keywords:$R[900]=["CLI","Login","Authentication","CMS","Intlayer","Credentials"],slugs:$R[901]=["doc","concept","cli","login"],author:"aymericzip",docKey:"./docs/en/cli/login.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/login.md",relativeUrl:"/ru/doc/concept/cli/login",url:"https://intlayer.org/ru/doc/concept/cli/login"}},push:$R[902]={title:"Push",default:$R[903]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Отправка словарей",description:"Узнайте, как отправлять ваши словари в редактор и CMS Intlayer.",keywords:$R[904]=["Отправка","Словари","CLI","Intlayer","Редактор","CMS"],slugs:$R[905]=["doc","concept","cli","push"],author:"aymericzip",docKey:"./docs/en/cli/push.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/push.md",relativeUrl:"/ru/doc/concept/cli/push",url:"https://intlayer.org/ru/doc/concept/cli/push"}},pull:$R[906]={title:"Pull",default:$R[907]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Загрузка словарей",description:"Узнайте, как загружать словари из редактора Intlayer и CMS.",keywords:$R[908]=["Загрузка","Словари","CLI","Intlayer","Редактор","CMS"],slugs:$R[909]=["doc","concept","cli","pull"],author:"aymericzip",docKey:"./docs/en/cli/pull.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/pull.md",relativeUrl:"/ru/doc/concept/cli/pull",url:"https://intlayer.org/ru/doc/concept/cli/pull"}},configuration:$R[910]={title:"Configuration",default:$R[911]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Управление конфигурацией",description:"Узнайте, как получить и отправить вашу конфигурацию Intlayer в CMS.",keywords:$R[912]=["Конфигурация","Настройка","CLI","Intlayer","CMS"],slugs:$R[913]=["doc","concept","cli","configuration"],author:"aymericzip",docKey:"./docs/en/cli/configuration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/configuration.md",relativeUrl:"/ru/doc/concept/cli/configuration",url:"https://intlayer.org/ru/doc/concept/cli/configuration"}},list:$R[914]={title:"List",default:$R[915]={createdAt:"2024-08-11",updatedAt:"2026-01-06",title:"Список файлов декларации контента",description:"Узнайте, как вывести список всех файлов декларации контента в вашем проекте.",keywords:$R[916]=["Список","Декларация контента","CLI","Intlayer"],slugs:$R[917]=["doc","concept","cli","list"],history:$R[918]=[$R[919]={version:"7.5.12",date:"2026-01-06",changes:"\"Добавлена опция вывода абсолютных путей для команды list\""},$R[920]={version:"7.5.11",date:"2026-01-06",changes:"\"Добавлена опция вывода JSON для команды list\""}],author:"aymericzip",docKey:"./docs/en/cli/list.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/list.md",relativeUrl:"/ru/doc/concept/cli/list",url:"https://intlayer.org/ru/doc/concept/cli/list"}},version:$R[921]={title:"Version",default:$R[922]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Проверка версии CLI",description:"Узнайте, как проверить установленную версию Intlayer CLI.",keywords:$R[923]=["Версия","CLI","Intlayer"],slugs:$R[924]=["doc","concept","cli","version"],author:"aymericzip",docKey:"./docs/en/cli/version.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/version.md",relativeUrl:"/ru/doc/concept/cli/version",url:"https://intlayer.org/ru/doc/concept/cli/version"}},editor:$R[925]={title:"Editor",default:$R[926]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Команды редактора",description:"Узнайте, как использовать команды редактора Intlayer.",keywords:$R[927]=["Редактор","Визуальный редактор","CLI","Intlayer"],slugs:$R[928]=["doc","concept","cli","editor"],author:"aymericzip",docKey:"./docs/en/cli/editor.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/editor.md",relativeUrl:"/ru/doc/concept/cli/editor",url:"https://intlayer.org/ru/doc/concept/cli/editor"}},live:$R[929]={title:"Live",default:$R[930]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Команды Live Sync",description:"Узнайте, как использовать Live Sync для отражения изменений контента CMS во время выполнения.",keywords:$R[931]=["Live Sync","CMS","Runtime","CLI","Intlayer"],slugs:$R[932]=["doc","concept","cli","live"],author:"aymericzip",docKey:"./docs/en/cli/live.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/live.md",relativeUrl:"/ru/doc/concept/cli/live",url:"https://intlayer.org/ru/doc/concept/cli/live"}},debug:$R[933]={title:"Debug",default:$R[934]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Отладка команды Intlayer",description:"Узнайте, как отлаживать и устранять проблемы с Intlayer CLI.",keywords:$R[935]=["Отладка","Устранение проблем","CLI","Intlayer"],slugs:$R[936]=["doc","concept","cli","debug"],author:"aymericzip",docKey:"./docs/en/cli/debug.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/debug.md",relativeUrl:"/ru/doc/concept/cli/debug",url:"https://intlayer.org/ru/doc/concept/cli/debug"}},"doc-review":$R[937]={title:"Doc Review",default:$R[938]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Проверка документа",description:"Узнайте, как проверять файлы документации на качество, согласованность и полноту для разных локалей.",keywords:$R[939]=["Проверка","Документ","Документация","AI","CLI","Intlayer"],slugs:$R[940]=["doc","concept","cli","doc-review"],author:"aymericzip",docKey:"./docs/en/cli/doc-review.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/doc-review.md",relativeUrl:"/ru/doc/concept/cli/doc-review",url:"https://intlayer.org/ru/doc/concept/cli/doc-review"}},"doc-translate":$R[941]={title:"Doc Translate",default:$R[942]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Перевод документа",description:"Узнайте, как автоматически переводить файлы документации с помощью сервисов AI-перевода.",keywords:$R[943]=["Перевод","Документ","Документация","AI","CLI","Intlayer"],slugs:$R[944]=["doc","concept","cli","doc-translate"],author:"aymericzip",docKey:"./docs/en/cli/doc-translate.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/doc-translate.md",relativeUrl:"/ru/doc/concept/cli/doc-translate",url:"https://intlayer.org/ru/doc/concept/cli/doc-translate"}},sdk:$R[945]={title:"SDK",default:$R[946]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"CLI SDK",description:"Узнайте, как использовать Intlayer CLI SDK в вашем собственном коде.",keywords:$R[947]=["SDK","CLI","Intlayer","Программирование"],slugs:$R[948]=["doc","concept","cli","sdk"],author:"aymericzip",docKey:"./docs/en/cli/sdk.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/sdk.md",relativeUrl:"/ru/doc/concept/cli/sdk",url:"https://intlayer.org/ru/doc/concept/cli/sdk"}},scan:$R[949]={title:"Scan",default:$R[950]={createdAt:"2026-06-11",updatedAt:"2026-06-11",title:"Scan Website",description:"Узнайте, как использовать команду scan в Intlayer CLI для измерения размера страницы и аудита i18n/SEO любого веб-сайта.",keywords:$R[951]=["Scan","SEO","i18n","Аудит","CLI","Intlayer","Размер страницы","Сборка"],slugs:$R[952]=["doc","concept","cli","scan"],history:$R[953]=[$R[954]={version:"9.0.0",date:"2026-06-11",changes:"\"Добавлена команда scan\""}],author:"aymericzip",docKey:"./docs/en/cli/scan.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/scan.md",relativeUrl:"/ru/doc/concept/cli/scan",url:"https://intlayer.org/ru/doc/concept/cli/scan"}}}},editor:$R[955]={title:"Визуальный редактор",default:$R[956]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Intlayer визуальный редактор | Изменяйте свой контент, используя визуальный редактор",description:"Узнайте, как использовать редактор Intlayer для управления вашим многоязычным веб-сайтом. Следуйте шагам в этой онлайн-документации, чтобы настроить ваш проект за несколько минут.",keywords:$R[957]=["Редактор","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[958]=["doc","concept","editor"],youtubeVideo:"https://www.youtube.com/watch?v=UDDTnirwi_4",history:$R[959]=[$R[960]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_visual_editor.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md",relativeUrl:"/ru/doc/concept/editor",url:"https://intlayer.org/ru/doc/concept/editor"}},cms:$R[961]={title:"CMS",default:$R[962]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Intlayer CMS | Внешнее управление контентом через Intlayer CMS",description:"Внешнее управление вашим контентом через Intlayer CMS для делегирования управления контентом вашей команде.",keywords:$R[963]=["CMS","Визуальный редактор","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[964]=["doc","concept","cms"],youtubeVideo:"https://www.youtube.com/watch?v=UDDTnirwi_4",history:$R[965]=[$R[966]={version:"6.0.1",date:"2025-09-22",changes:"\"Добавлена документация по live sync\""},$R[967]={version:"6.0.0",date:"2025-09-04",changes:"\"Заменено поле `hotReload` на `liveSync`\""},$R[968]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_CMS.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md",relativeUrl:"/ru/doc/concept/cms",url:"https://intlayer.org/ru/doc/concept/cms"}},"ci-cd":$R[969]={title:"Интеграция CI/CD",default:$R[970]={createdAt:"2025-05-20",updatedAt:"2025-08-13",title:"Интеграция CI/CD",description:"Узнайте, как интегрировать Intlayer в ваш CI/CD конвейер для автоматизированного управления контентом и развертывания.",keywords:$R[971]=["CI/CD","Непрерывная интеграция","Непрерывное развертывание","Автоматизация","Интернационализация","Документация","Intlayer"],slugs:$R[972]=["doc","concept","ci-cd"],history:$R[973]=[$R[974]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/CI_CD.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/CI_CD.md",relativeUrl:"/ru/doc/concept/ci-cd",url:"https://intlayer.org/ru/doc/concept/ci-cd"}},content:$R[975]={title:"Объявление контента",default:$R[976]={createdAt:"2025-02-07",updatedAt:"2026-05-12",title:"Файл контента",description:"Узнайте, как настраивать расширения для ваших файлов декларации контента. Следуйте этой документации, чтобы эффективно реализовывать условия в вашем проекте.",keywords:$R[977]=["Файл контента","Документация","Intlayer"],slugs:$R[978]=["doc","concept","content"],history:$R[979]=[$R[980]={version:"8.10.0",date:"2026-05-19",changes:"\"Добавлена поддержка форматов файлов YAML и Markdown\""},$R[981]={version:"8.9.0",date:"2026-05-12",changes:"\"Добавить тип узла содержимого `plural`\""},$R[982]={version:"8.0.0",date:"2026-01-28",changes:"\"Добавлен тип узла содержимого `html`\""},$R[983]={version:"8.0.0",date:"2026-01-24",changes:"\"Rename `live` import mode to `fetch` to better describe the underlying mechanism.\""},$R[984]={version:"8.0.0",date:"2026-01-18",changes:"\"Добавлены опции словаря `location` и `schema`\""},$R[985]={version:"7.5.13",date:"2026-01-10",changes:"\"Добавлена поддержка форматов файлов JSON5 и JSONC\""},$R[986]={version:"7.5.0",date:"2025-12-13",changes:"\"Добавлена поддержка форматов ICU и i18next\""},$R[987]={version:"6.0.0",date:"2025-09-20",changes:"\"Добавлена документация по полям\""},$R[988]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/dictionary/content_file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md",relativeUrl:"/ru/doc/concept/content",url:"https://intlayer.org/ru/doc/concept/content"},subSections:$R[989]={translation:$R[990]={title:"Перевод",default:$R[991]={createdAt:"2024-08-11",updatedAt:"2025-06-29",title:"Перевод",description:"Узнайте, как объявлять и использовать перевод на вашем многоязычном сайте. Следуйте шагам в этой онлайн-документации, чтобы настроить ваш проект за несколько минут.",keywords:$R[992]=["Перевод","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[993]=["doc","concept","content","translation"],history:$R[994]=[$R[995]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/dictionary/translation.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/translation.md",relativeUrl:"/ru/doc/concept/content/translation",url:"https://intlayer.org/ru/doc/concept/content/translation"}},plural:$R[996]={title:"Множественное число",default:$R[997]={createdAt:"2026-05-04",updatedAt:"2026-05-04",title:"Множественное число",description:"Узнайте, как объявлять и использовать контент с учетом множественного числа (на основе CLDR) на вашем многоязычном веб-сайте. Следуйте инструкциям в этой онлайн-документации, чтобы настроить свой проект за несколько минут.",keywords:$R[998]=["Множественное число","Плюрализация","CLDR","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[999]=["doc","concept","content","plural"],history:$R[1000]=[$R[1001]={version:"8.8.0",date:"2026-05-04",changes:"\"Init history\""}],author:"aymericzip",docKey:"./docs/en/dictionary/plurial.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/plurial.md",relativeUrl:"/ru/doc/concept/content/plural",url:"https://intlayer.org/ru/doc/concept/content/plural"}},enumeration:$R[1002]={title:"Перечисление",default:$R[1003]={createdAt:"2024-08-11",updatedAt:"2025-06-29",title:"Перечисление",description:"Узнайте, как объявлять и использовать перечисления на вашем многоязычном сайте. Следуйте шагам в этой онлайн-документации, чтобы настроить ваш проект за несколько минут.",keywords:$R[1004]=["Перечисление","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[1005]=["doc","concept","content","enumeration"],history:$R[1006]=[$R[1007]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/dictionary/enumeration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/enumeration.md",relativeUrl:"/ru/doc/concept/content/enumeration",url:"https://intlayer.org/ru/doc/concept/content/enumeration"}},condition:$R[1008]={title:"Условие",default:$R[1009]={createdAt:"2025-02-07",updatedAt:"2025-06-29",title:"Условный контент",description:"Узнайте, как использовать условный контент в Intlayer для динамического отображения контента на основе определенных условий. Следуйте этой документации, чтобы эффективно реализовать условия в вашем проекте.",keywords:$R[1010]=["Условный контент","Динамическое отображение","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[1011]=["doc","concept","content","condition"],author:"aymericzip",docKey:"./docs/en/dictionary/condition.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/condition.md",relativeUrl:"/ru/doc/concept/content/condition",url:"https://intlayer.org/ru/doc/concept/content/condition",history:$R[1012]=[$R[1013]={version:"5.5.10",date:"2025-06-29",changes:"\"Init history\""}]}},gender:$R[1014]={title:"Пол",default:$R[1015]={createdAt:"2025-07-27",updatedAt:"2025-07-27",title:"Контент на основе пола",description:"Узнайте, как использовать контент на основе пола в Intlayer для динамического отображения содержимого в зависимости от пола. Следуйте этой документации, чтобы эффективно реализовать контент, специфичный для пола, в вашем проекте.",keywords:$R[1016]=["Контент на основе пола","Динамическое отображение","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[1017]=["doc","concept","content","gender"],history:$R[1018]=[$R[1019]={version:"5.7.2",date:"2025-07-27",changes:"\"Введение контента, основанного на поле\""}],author:"aymericzip",docKey:"./docs/en/dictionary/gender.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/gender.md",relativeUrl:"/ru/doc/concept/content/gender",url:"https://intlayer.org/ru/doc/concept/content/gender"}},insertion:$R[1020]={title:"Вставка",default:$R[1021]={createdAt:"2025-03-13",updatedAt:"2025-06-29",title:"Вставка",description:"Узнайте, как объявлять и использовать заполнители вставки в вашем контенте. Эта документация проведет вас через шаги динамической вставки значений в заранее определённые структуры контента.",keywords:$R[1022]=["Вставка","Динамический контент","Заполнители","Intlayer","Next.js","JavaScript","React"],slugs:$R[1023]=["doc","concept","content","insertion"],history:$R[1024]=[$R[1025]={version:"8.0.0",date:"2026-01-18",changes:"\"Автоматическое оформление содержимого вставки\""},$R[1026]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/dictionary/insertion.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/insertion.md",relativeUrl:"/ru/doc/concept/content/insertion",url:"https://intlayer.org/ru/doc/concept/content/insertion"}},file:$R[1027]={title:"Файл",default:$R[1028]={createdAt:"2025-03-13",updatedAt:"2025-06-29",title:"Файл",description:"Узнайте, как встраивать внешние файлы в ваш словарь контента с помощью функции `file`. Эта документация объясняет, как Intlayer связывает и динамически управляет содержимым файлов.",keywords:$R[1029]=["Файл","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[1030]=["doc","concept","content","file"],history:$R[1031]=[$R[1032]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/dictionary/file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/file.md",relativeUrl:"/ru/doc/concept/content/file",url:"https://intlayer.org/ru/doc/concept/content/file"}},nesting:$R[1033]={title:"Вложенность",default:$R[1034]={createdAt:"2025-02-07",updatedAt:"2025-06-29",title:"Вложенность словаря",description:"Узнайте, как использовать вложенность контента в Intlayer для эффективного повторного использования и структурирования многоязычного контента. Следуйте этой документации, чтобы без проблем реализовать вложенность в вашем проекте.",keywords:$R[1035]=["Nesting","Повторное использование контента","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[1036]=["doc","concept","content","nesting"],author:"aymericzip",docKey:"./docs/en/dictionary/nesting.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/nesting.md",relativeUrl:"/ru/doc/concept/content/nesting",url:"https://intlayer.org/ru/doc/concept/content/nesting",history:$R[1037]=[$R[1038]={version:"5.5.10",date:"2025-06-29",changes:"\"Init history\""}]}},markdown:$R[1039]={title:"Markdown",default:$R[1040]={createdAt:"2025-02-07",updatedAt:"2026-05-19",title:"Markdown",description:"Узнайте, как объявлять и использовать Markdown-контент на вашем многоязычном сайте с помощью Intlayer. Следуйте инструкциям в этой документации, чтобы легко интегрировать Markdown в ваш проект.",keywords:$R[1041]=["Markdown","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[1042]=["doc","concept","content","markdown"],history:$R[1043]=[$R[1044]={version:"8.11.0",date:"2026-05-28",changes:"\"Разрешить предварительный синтаксический анализ AST Markdown для SSR / гидратации\""},$R[1045]={version:"8.10.0",date:"2026-05-19",changes:"\"Добавлена поддержка файлов `.content.md`\""},$R[1046]={version:"8.5.0",date:"2026-03-24",changes:"\"Добавлен объект плагина `intlayerMarkdown`; используйте `app.use(intlayerMarkdown)` вместо `app.use(installIntlayerMarkdown)`\""},$R[1047]={version:"8.5.0",date:"2026-03-24",changes:"\"перенос импорта из `{{framework}}-intlayer` в `{{framework}}-intlayer/markdown`\""},$R[1048]={version:"8.0.0",date:"2026-01-22",changes:"\"Добавление утилит MarkdownRenderer / useMarkdownRenderer / renderMarkdown и опции forceInline\""},$R[1049]={version:"8.0.0",date:"2026-01-18",changes:"\"Автоматическое декорирование Markdown-контента, поддержка MDX и SSR\""},$R[1050]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/dictionary/markdown.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/markdown.md",relativeUrl:"/ru/doc/concept/content/markdown",url:"https://intlayer.org/ru/doc/concept/content/markdown"}},html:$R[1051]={title:"HTML",default:$R[1052]={createdAt:"2026-01-20",updatedAt:"2026-03-24",title:"HTML-контент",description:"Узнайте, как объявлять и использовать HTML-контент с пользовательскими компонентами в Intlayer. Следуйте этой документации, чтобы встроить богатый HTML-подобный контент с динамической заменой компонентов в ваш проект с поддержкой интернационализации.",keywords:$R[1053]=["HTML","Пользовательские компоненты","Богатый контент","Intlayer","Next.js","JavaScript","React","Vue","Svelte","Solid","Angular"],slugs:$R[1054]=["doc","concept","content","html"],history:$R[1055]=[$R[1056]={version:"8.5.0",date:"2026-03-24",changes:"\"Add `intlayerHTML` plugin object; use `app.use(intlayerHTML)` instead of `app.use(installIntlayerHTML)`\""},$R[1057]={version:"8.5.0",date:"2026-03-24",changes:"\"Перенос импортов из {{framework}}-intlayer в {{framework}}-intlayer/html\""},$R[1058]={version:"8.0.0",date:"2026-01-22",changes:"\"Добавлены HTMLRenderer / useHTMLRenderer / renderHTML\""},$R[1059]={version:"8.0.0",date:"2026-01-20",changes:"\"Добавлена поддержка парсинга HTML\""}],author:"aymericzip",docKey:"./docs/en/dictionary/html.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/html.md",relativeUrl:"/ru/doc/concept/content/html",url:"https://intlayer.org/ru/doc/concept/content/html"}},"function-fetching":$R[1060]={title:"Получение функции",default:$R[1061]={createdAt:"2024-08-11",updatedAt:"2025-06-29",title:"Получение данных через функции",description:"Узнайте, как объявлять и использовать получение данных через функции на вашем многоязычном сайте. Следуйте шагам в этой онлайн-документации, чтобы настроить ваш проект за несколько минут.",keywords:$R[1062]=["Получение данных через функции","Интернационализация","Документация","Intlayer","Next.js","JavaScript","React"],slugs:$R[1063]=["doc","concept","content","function-fetching"],history:$R[1064]=[$R[1065]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/dictionary/function_fetching.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/function_fetching.md",relativeUrl:"/ru/doc/concept/content/function-fetching",url:"https://intlayer.org/ru/doc/concept/content/function-fetching"}}}},"dynamic-dyctionary":$R[1066]={title:"Файл для каждой локали",default:$R[1067]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Динамические Словари",description:"Обзор трех функций динамических словарей Intlayer — коллекций, вариантов и динамических записей — для создания гибкого контента i18n, управляемого во время выполнения.",keywords:$R[1068]=["Динамические Словари","Коллекции","Варианты","Динамические Записи","Intlayer","Интернационализация"],slugs:$R[1069]=["doc","concept","dynamic-dictionaries"],history:$R[1070]=[$R[1071]={version:"9.0.0",date:"2026-06-12",changes:"\"Выпуск функции динамических словарей\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/index.md",relativeUrl:"/ru/doc/concept/dynamic-dictionaries",url:"https://intlayer.org/ru/doc/concept/dynamic-dictionaries"},subSections:$R[1072]={collections:$R[1073]={title:"Коллекции",default:$R[1074]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Коллекции",description:"Используйте поле метаданных item в файлах контента Intlayer для создания упорядоченных коллекций локализованных элементов, выбираемых по индексу во время выполнения.",keywords:$R[1075]=["Коллекции","Список Контента","Динамический Контент","Intlayer","Интернационализация"],slugs:$R[1076]=["doc","concept","collections"],history:$R[1077]=[$R[1078]={version:"9.0.0",date:"2026-06-12",changes:"\"Выпуск функции словарей коллекций\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/collections.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/collections.md",relativeUrl:"/ru/doc/concept/collections",url:"https://intlayer.org/ru/doc/concept/collections"}},variants:$R[1079]={title:"Варианты",default:$R[1080]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Варианты",description:"Используйте поле метаданных variant в файлах контента Intlayer для объявления именованных альтернатив контента (A/B-тесты, сезонные баннеры, тексты с флагами функций) и переключения между ними во время выполнения без изменения кода.",keywords:$R[1081]=["Варианты","A/B Тестирование","Флаги Функций","Динамический Контент","Intlayer","Интернационализация"],slugs:$R[1082]=["doc","concept","variants"],history:$R[1083]=[$R[1084]={version:"9.0.0",date:"2026-06-12",changes:"\"Выпуск функции вариантов словарей\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/variants.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/variants.md",relativeUrl:"/ru/doc/concept/variants",url:"https://intlayer.org/ru/doc/concept/variants"}},"dynamic-content":$R[1085]={title:"Динамические записи",default:$R[1086]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Динамические Записи",description:"Используйте поле meta в файлах контента Intlayer для объявления записей, управляемых CMS, получаемых во время выполнения по непрозрачному идентификатору ID, что обеспечивает строгую типизацию динамического контента без перечисления во время сборки.",keywords:$R[1087]=["Динамические Записи","Динамический Контент","CMS","Контент во Время Выполнения","Intlayer","Интернационализация"],slugs:$R[1088]=["doc","concept","dynamic-records"],history:$R[1089]=[$R[1090]={version:"9.0.0",date:"2026-06-12",changes:"\"Выпуск функции динамического контента\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/dynamic_content.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/dynamic_content.md",relativeUrl:"/ru/doc/concept/dynamic-records",url:"https://intlayer.org/ru/doc/concept/dynamic-records"}}}},"per-locale-file":$R[1091]={title:"Файл для каждой локали",default:$R[1092]={createdAt:"2025-04-18",updatedAt:"2025-06-29",title:"Объявление контента `Per-Locale` в Intlayer",description:"Узнайте, как объявлять контент по локалям в Intlayer. Следуйте документации, чтобы понять различные форматы и варианты использования.",keywords:$R[1093]=["Интернационализация","Документация","Intlayer","Per-Locale","TypeScript","JavaScript"],slugs:$R[1094]=["doc","concept","per-locale-file"],history:$R[1095]=[$R[1096]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/per_locale_file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/per_locale_file.md",relativeUrl:"/ru/doc/concept/per-locale-file",url:"https://intlayer.org/ru/doc/concept/per-locale-file"}},compiler:$R[1097]={title:"Компилятор",default:$R[1098]={createdAt:"2025-09-09",updatedAt:"2026-03-12",title:"Intlayer Compiler | Автоматизированное извлечение контента для i18n",description:"Автоматизируйте процесс интернационализации с помощью Intlayer Compiler. Извлекайте контент напрямую из ваших компонентов для более быстрого и эффективного i18n в Vite, Next.js и других.",keywords:$R[1099]=["Intlayer","Compiler","Интернационализация","i18n","Автоматизация","Извлечение","Скорость","Vite","Next.js","React","Vue","Svelte"],slugs:$R[1100]=["doc","compiler"],history:$R[1101]=[$R[1102]={version:"8.2.0",date:"2026-03-09",changes:"\"Обновление опций компилятора, добавление поддержки FilePathPattern\""},$R[1103]={version:"8.1.7",date:"2026-02-25",changes:"\"Обновление опций компилятора\""},$R[1104]={version:"7.3.1",date:"2025-11-27",changes:"\"Выпуск Compiler\""}],author:"aymericzip",docKey:"./docs/en/compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/compiler.md",relativeUrl:"/ru/doc/compiler",url:"https://intlayer.org/ru/doc/compiler"}},"auto-fill":$R[1105]={title:"Автозаполнение",default:$R[1106]={createdAt:"2025-03-13",updatedAt:"2025-09-20",title:"Автозаполнение",description:"Узнайте, как использовать функцию автозаполнения в Intlayer для автоматического заполнения контента на основе предопределённых шаблонов. Следуйте этой документации, чтобы эффективно внедрить функции автозаполнения в вашем проекте.",keywords:$R[1107]=["Автозаполнение","Автоматизация контента","Динамический контент","Intlayer","Next.js","JavaScript","React"],slugs:$R[1108]=["doc","concept","auto-fill"],history:$R[1109]=[$R[1110]={version:"6.0.0",date:"2025-09-20",changes:"\"Добавлена глобальная конфигурация\""},$R[1111]={version:"6.0.0",date:"2025-09-17",changes:"\"Добавлена переменная `{{fileName}}`\""},$R[1112]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/autoFill.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/autoFill.md",relativeUrl:"/ru/doc/concept/auto-fill",url:"https://intlayer.org/ru/doc/concept/auto-fill"}},testing:$R[1113]={title:"Тестирование",default:$R[1114]={createdAt:"2025-03-01",updatedAt:"2025-09-20",title:"Тестирование вашего контента",description:"Узнайте, как тестировать ваш контент с помощью Intlayer.",keywords:$R[1115]=["Тестирование","Intlayer","Интернационализация","CMS","Система управления контентом","Визуальный редактор"],slugs:$R[1116]=["doc","testing"],history:$R[1117]=[$R[1118]={version:"6.0.0",date:"2025-09-20",changes:"\"Введение тестирования\""}],author:"aymericzip",docKey:"./docs/en/testing.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/testing.md",relativeUrl:"/ru/doc/testing",url:"https://intlayer.org/ru/doc/testing"}},bundle_optimization:$R[1119]={title:"Оптимизация пакета",default:$R[1120]={createdAt:"2025-11-25",updatedAt:"2026-06-07",title:"Оптимизация размера сборки (bundle) i18n и производительности",description:"Уменьшите размер сборки вашего приложения за счет оптимизации контента интернационализации (i18n). Узнайте, как использовать tree shaking и ленивую загрузку (lazy loading) для словарей с помощью Intlayer.",keywords:$R[1121]=["Оптимизация сборки","Автоматизация контента","Динамический контент","Intlayer","Next.js","JavaScript","React"],slugs:$R[1122]=["doc","concept","bundle-optimization"],history:$R[1123]=[$R[1124]={version:"8.12.0",date:"2026-06-07",changes:"\"Добавлены `intlayerPurgeBabelPlugin` и `intlayerMinifyBabelPlugin` для Babel/Webpack; уточнен процесс работы плагинов (pipeline)\""},$R[1125]={version:"8.7.0",date:"2026-04-08",changes:"\"Добавлены параметры `minify` и `purge` в конфигурацию сборки\""}],author:"aymericzip",docKey:"./docs/en/bundle_optimization.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/bundle_optimization.md",relativeUrl:"/ru/doc/concept/bundle-optimization",url:"https://intlayer.org/ru/doc/concept/bundle-optimization"}}},routing:$R[1126]={title:"Маршрутизация",subSections:$R[1127]={custom_url_rewrites:$R[1128]={title:"Пользовательские правила перезаписи URL",default:$R[1129]={createdAt:"2024-08-13",updatedAt:"2026-01-26",title:"Пользовательские перезаписи URL",description:"Узнайте, как настроить и использовать пользовательские перезаписи URL в Intlayer для задания путей, специфичных для локали.",keywords:$R[1130]=["Пользовательские перезаписи URL","Маршрутизация","Интернационализация","i18n"],slugs:$R[1131]=["doc","concept","custom_url_rewrites"],history:$R[1132]=[$R[1133]={version:"8.0.0",date:"2026-01-25",changes:"\"Реализовано централизованное управление перезаписями URL с использованием форматтеров, специфичных для фреймворка, и хука useRewriteURL.\""}],author:"aymericzip",docKey:"./docs/en/custom_url_rewrites.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/custom_url_rewrites.md",relativeUrl:"/ru/doc/concept/custom_url_rewrites",url:"https://intlayer.org/ru/doc/concept/custom_url_rewrites"}},"domains-i18n":$R[1134]={title:"Домены i18n",default:$R[1135]={createdAt:"2026-04-02",updatedAt:"2026-04-02",title:"Пользовательские домены",description:"Узнайте, как настроить маршрутизацию локалей на основе доменов в Intlayer для обслуживания различных локалей с выделенных хост-имен.",keywords:$R[1136]=["Пользовательские домены","Доменная маршрутизация","Маршрутизация","Интернационализация","i18n"],slugs:$R[1137]=["doc","concept","custom_domains"],history:$R[1138]=[$R[1139]={version:"8.5.0",date:"2026-04-02",changes:"\"Добавлена маршрутизация локалей на основе доменов через конфигурацию routing.domains.\""}],author:"aymericzip",docKey:"./docs/en/custom_domains.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/custom_domains.md",relativeUrl:"/ru/doc/concept/custom_domains",url:"https://intlayer.org/ru/doc/concept/custom_domains"}}}}},environment:$R[1140]={title:"Окружающая среда",subSections:$R[1141]={nextjs:$R[1142]={title:"Next.js",default:$R[1143]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 16 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Next.js 16. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1144]=["Интернационализация","Документация","Intlayer","Next.js 16","JavaScript","React"],slugs:$R[1145]=["doc","environment","nextjs"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-16-template",applicationShowcase:"https://intlayer-next-16-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1146]=[$R[1147]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1148]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1149]={version:"7.0.6",date:"2025-11-01",changes:"\"Добавлено упоминание `x-default` в объекте `alternates`\""},$R[1150]={version:"7.0.0",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_16.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nextjs_16.md",relativeUrl:"/ru/doc/environment/nextjs",url:"https://intlayer.org/ru/doc/environment/nextjs"},subSections:$R[1151]={14:$R[1152]={title:"Next.js 14 и App Router",default:$R[1153]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 14 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Next.js 14. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1154]=["Интернационализация","Документация","Intlayer","Next.js 14","JavaScript","React"],slugs:$R[1155]=["doc","environment","nextjs","14"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-14-template",applicationShowcase:"https://intlayer-next-14-template.vercel.app",history:$R[1156]=[$R[1157]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_14.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nextjs_14.md",relativeUrl:"/ru/doc/environment/nextjs/14",url:"https://intlayer.org/ru/doc/environment/nextjs/14"},frameworks:$R[1158]=["nextjs","react"]},15:$R[1159]={title:"Next.js 15",default:$R[1160]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 15 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Next.js 15. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1161]=["Интернационализация","Документация","Intlayer","Next.js 15","JavaScript","React"],slugs:$R[1162]=["doc","environment","nextjs","15"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-15-template",applicationShowcase:"https://next-15-intlayer-template-xt83.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1163]=[$R[1164]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1165]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1166]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_15.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nextjs_15.md",relativeUrl:"/ru/doc/environment/nextjs/15",url:"https://intlayer.org/ru/doc/environment/nextjs/15"},frameworks:$R[1167]=["nextjs","react"]},"no-locale-path":$R[1168]={title:"Next.js без locale URL",default:$R[1169]={createdAt:"2026-01-10",updatedAt:"2026-05-31",title:"Next.js 16 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Next.js 16. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1170]=["Интернационализация","Документация","Intlayer","Next.js 16","JavaScript","React"],slugs:$R[1171]=["doc","environment","nextjs","no-locale-path"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-no-lolale-path-template",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1172]=[$R[1173]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1174]={version:"8.0.0",date:"2026-01-10",changes:"\"Первоначальный релиз\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_no_locale_path.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nextjs_no_locale_path.md",relativeUrl:"/ru/doc/environment/nextjs/no-locale-path",url:"https://intlayer.org/ru/doc/environment/nextjs/no-locale-path"},frameworks:$R[1175]=["nextjs","react"]},"next-with-Page-Router":$R[1176]={title:"Next.js и Page Router",default:$R[1177]={createdAt:"2024-12-07",updatedAt:"2026-05-31",title:"Next.js Page Router i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Next.js Page Router. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1178]=["Интернационализация","Документация","Intlayer","Page Router","Next.js","JavaScript","React"],slugs:$R[1179]=["doc","environment","nextjs","next-with-page-router"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-14-template",applicationShowcase:"https://intlayer-next-14-template.vercel.app",history:$R[1180]=[$R[1181]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1182]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1183]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_page_router.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nextjs_page_router.md",relativeUrl:"/ru/doc/environment/nextjs/next-with-page-router",url:"https://intlayer.org/ru/doc/environment/nextjs/next-with-page-router"},frameworks:$R[1184]=["nextjs","react"]},"next-with-compiler":$R[1185]={title:"Compiler",default:$R[1186]={createdAt:"2026-01-10",updatedAt:"2026-05-31",title:"Next.js i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Next.js. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1187]=["Интернационализация","Документация","Intlayer","Next.js","JavaScript","React","Компилятор","ИИ"],slugs:$R[1188]=["doc","environment","nextjs","compiler"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-no-lolale-path-template",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1189]=[$R[1190]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1191]={version:"8.2.0",date:"2026-03-09",changes:"\"Update compiler options, add FilePathPattern support\""},$R[1192]={version:"8.1.6",date:"2026-02-23",changes:"\"Начальный выпуск\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nextjs_compiler.md",relativeUrl:"/ru/doc/environment/nextjs/compiler",url:"https://intlayer.org/ru/doc/environment/nextjs/compiler"},frameworks:$R[1193]=["nextjs","react"]}},frameworks:$R[1194]=["nextjs","react"]},"tanstack-start":$R[1195]={title:"Tanstack Start",default:$R[1196]={createdAt:"2025-09-09",updatedAt:"2026-05-31",title:"TanStack Start i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения TanStack Start. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1197]=["Интернационализация","Документация","Intlayer","Tanstack Start","React","i18n","TypeScript","Маршрутизация по локали","Sitemap"],slugs:$R[1198]=["doc","environment","tanstack-start"],applicationTemplate:"https://github.com/aymericzip/intlayer-tanstack-start-template",applicationShowcase:"https://intlayer-tanstack-start-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=_XTdKVWaeqg",history:$R[1199]=[$R[1200]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1201]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1202]={version:"7.4.0",date:"2025-12-11",changes:"\"Внедрена validatePrefix и добавлен шаг 14: Обработка страниц 404 с локализованными маршрутами.\""},$R[1203]={version:"7.3.9",date:"2025-12-05",changes:"\"Добавлен шаг 13: Получение текущей локали в ваших server actions (опционально)\""},$R[1204]={version:"7.2.3",date:"2025-11-18",changes:"\"Добавить шаг 13: Адаптация Nitro\""},$R[1205]={version:"7.1.0",date:"2025-11-17",changes:"\"Исправлено значение префикса по умолчанию путем добавления функции getPrefix useLocalizedNavigate, LocaleSwitcher и LocalizedLink.\""},$R[1206]={version:"6.5.2",date:"2025-10-03",changes:"\"Обновление документации\""},$R[1207]={version:"5.8.1",date:"2025-09-09",changes:"\"Добавлено для Tanstack Start\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_tanstack.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_tanstack.md",relativeUrl:"/ru/doc/environment/tanstack-start",url:"https://intlayer.org/ru/doc/environment/tanstack-start"},frameworks:$R[1208]=["tanstack","react","vite"],subSections:$R[1209]={"tanstack-start-solid":$R[1210]={title:"Tanstack Start Solid",default:$R[1211]={createdAt:"2025-03-25",updatedAt:"2026-05-31",title:"TanStack Start + Solid i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения TanStack Start + Solid. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1212]=["Интернационализация","Документация","Intlayer","Tanstack Start","Solid","i18n","TypeScript","Маршрутизация локалей","Sitemap"],slugs:$R[1213]=["doc","environment","tanstack-start","solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-tanstack-start-solid-template",applicationShowcase:"https://intlayer-tanstack-start-solid.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=_XTdKVWaeqg",history:$R[1214]=[$R[1215]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1216]={version:"8.5.1",date:"2026-03-25",changes:"\"Добавлено для Tanstack Start Solid.js\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_tanstack+solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_tanstack+solid.md",relativeUrl:"/ru/doc/environment/tanstack-start/solid",url:"https://intlayer.org/ru/doc/environment/tanstack-start/solid"},frameworks:$R[1217]=["solid","tanstack","vite"]}}},astro:$R[1218]={title:"Astro",default:$R[1219]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Astro i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1220]=["Интернационализация","Документация","Intlayer","Vite","React","i18n","JavaScript"],slugs:$R[1221]=["doc","environment","astro"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1222]=[$R[1223]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1224]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1225]={version:"6.2.0",date:"2025-10-03",changes:"\"Обновление для интеграции с Astro, конфигурация, использование\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro.md",relativeUrl:"/ru/doc/environment/astro",url:"https://intlayer.org/ru/doc/environment/astro"},frameworks:$R[1226]=["astro","vite"],subSections:$R[1227]={"astro-and-react":$R[1228]={title:"Astro и React",default:$R[1229]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Astro + React i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + React. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1230]=["Интернационализация","Документация","Intlayer","Astro","React","i18n","JavaScript"],slugs:$R[1231]=["doc","environment","astro","react"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1232]=[$R[1233]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1234]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1235]={version:"6.2.0",date:"2025-10-03",changes:"\"Обновление для интеграции с Astro, конфигурация, использование\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro_react.md",relativeUrl:"/ru/doc/environment/astro/react",url:"https://intlayer.org/ru/doc/environment/astro/react"},frameworks:$R[1236]=["react","astro","vite"]},"astro-and-svelte":$R[1237]={title:"Astro и Svelte",default:$R[1238]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Svelte i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Svelte. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1239]=["Интернационализация","Документация","Intlayer","Astro","Svelte","i18n","JavaScript"],slugs:$R[1240]=["doc","environment","astro","svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1241]=[$R[1242]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1243]={version:"8.7.7",date:"2026-04-24",changes:"\"Начальная документация для Astro + Svelte\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro_svelte.md",relativeUrl:"/ru/doc/environment/astro/svelte",url:"https://intlayer.org/ru/doc/environment/astro/svelte"},frameworks:$R[1244]=["svelte","astro","vite"]},"astro-and-vue":$R[1245]={title:"Astro и Vue",default:$R[1246]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Vue i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Vue. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1247]=["Интернационализация","Документация","Intlayer","Astro","Vue","i18n","JavaScript"],slugs:$R[1248]=["doc","environment","astro","vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1249]=[$R[1250]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1251]={version:"8.7.7",date:"2026-04-24",changes:"\"Начальная документация для Astro + Vue\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro_vue.md",relativeUrl:"/ru/doc/environment/astro/vue",url:"https://intlayer.org/ru/doc/environment/astro/vue"},frameworks:$R[1252]=["vue","astro","vite"]},"astro-and-solid":$R[1253]={title:"Astro и Solid",default:$R[1254]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Solid i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Solid. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1255]=["Интернационализация","Документация","Intlayer","Astro","Solid","i18n","JavaScript"],slugs:$R[1256]=["doc","environment","astro","solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1257]=[$R[1258]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1259]={version:"8.7.7",date:"2026-04-24",changes:"\"Начальная документация для Astro + Solid\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro_solid.md",relativeUrl:"/ru/doc/environment/astro/solid",url:"https://intlayer.org/ru/doc/environment/astro/solid"},frameworks:$R[1260]=["solid","astro","vite"]},"astro-and-preact":$R[1261]={title:"Astro и Preact",default:$R[1262]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Preact i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Preact. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1263]=["Интернационализация","Документация","Intlayer","Astro","Preact","i18n","JavaScript"],slugs:$R[1264]=["doc","environment","astro","preact"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1265]=[$R[1266]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1267]={version:"8.7.7",date:"2026-04-24",changes:"\"Начальная документация для Astro + Preact\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_preact.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro_preact.md",relativeUrl:"/ru/doc/environment/astro/preact",url:"https://intlayer.org/ru/doc/environment/astro/preact"},frameworks:$R[1268]=["preact","astro","vite"]},"astro-and-lit":$R[1269]={title:"Astro и Lit",default:$R[1270]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Lit i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Lit. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1271]=["Интернационализация","Документация","Intlayer","Astro","Lit","Веб-компоненты","i18n","JavaScript"],slugs:$R[1272]=["doc","environment","astro","lit"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1273]=[$R[1274]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1275]={version:"8.7.7",date:"2026-04-24",changes:"\"Начальная документация для Astro + Lit\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_lit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro_lit.md",relativeUrl:"/ru/doc/environment/astro/lit",url:"https://intlayer.org/ru/doc/environment/astro/lit"},frameworks:$R[1276]=["lit","astro","vite"]},"astro-and-vanilla-js":$R[1277]={title:"Astro и Vanilla JS",default:$R[1278]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Vanilla JS i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Vanilla JS. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1279]=["Интернационализация","Документация","Intlayer","Astro","Vanilla JS","JavaScript","TypeScript"],slugs:$R[1280]=["doc","environment","astro","vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1281]=[$R[1282]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1283]={version:"8.7.7",date:"2026-04-24",changes:"\"Начальная документация для Astro + Vanilla JS\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_astro_vanilla.md",relativeUrl:"/ru/doc/environment/astro/vanilla",url:"https://intlayer.org/ru/doc/environment/astro/vanilla"},frameworks:$R[1284]=["vanilla","astro","vite"]}}},"vite-and-react":$R[1285]={title:"Vite и React",default:$R[1286]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Vite + React i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + React. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1287]=["Интернационализация","Документация","Intlayer","Vite","React","i18n","JavaScript"],slugs:$R[1288]=["doc","environment","vite-and-react"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-react-template",applicationShowcase:"https://intlayer-vite-react-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1289]=[$R[1290]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1291]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1292]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+react.md",relativeUrl:"/ru/doc/environment/vite-and-react",url:"https://intlayer.org/ru/doc/environment/vite-and-react"},subSections:$R[1293]={"react-router-v7":$R[1294]={title:"React Router v7",default:$R[1295]={createdAt:"2025-09-04",updatedAt:"2026-05-31",title:"React Router v7 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения React Router v7. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1296]=["Интернационализация","Документация","Intlayer","React Router v7","React","i18n","TypeScript","Маршрутизация по локали"],slugs:$R[1297]=["doc","environment","vite-and-react","react-router-v7"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-router-v7-template",applicationShowcase:"https://intlayer-react-router-v7.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1298]=[$R[1299]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1300]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1301]={version:"7.5.6",date:"2025-12-27",changes:"\"Обновить Layout и обработать 404\""},$R[1302]={version:"6.1.5",date:"2025-10-03",changes:"\"Обновлена документация\""},$R[1303]={version:"5.8.2",date:"2025-09-04",changes:"\"Добавлено для React Router v7\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_router_v7.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_react_router_v7.md",relativeUrl:"/ru/doc/environment/vite-and-react/react-router-v7",url:"https://intlayer.org/ru/doc/environment/vite-and-react/react-router-v7"},frameworks:$R[1304]=["react","vite"]},"react-router-v7-fs-routes":$R[1305]={title:"React Router v7 (fs-routes)",default:$R[1306]={createdAt:"2025-12-07",updatedAt:"2026-05-31",title:"React Router v7 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения React Router v7. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1307]=["Интернационализация","Документация","Intlayer","React Router v7","fs-routes","Маршруты на основе файловой системы","React","i18n","TypeScript","Маршрутизация по локали"],slugs:$R[1308]=["doc","environment","vite-and-react","react-router-v7-fs-routes"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-router-v7-fs-routes-template",applicationShowcase:"https://intlayer-react-router-v7-fs-routes.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1309]=[$R[1310]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1311]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1312]={version:"7.3.4",date:"2025-12-08",changes:"\"Начальная история\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_router_v7_fs_routes.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_react_router_v7_fs_routes.md",relativeUrl:"/ru/doc/environment/vite-and-react/react-router-v7-fs-routes",url:"https://intlayer.org/ru/doc/environment/vite-and-react/react-router-v7-fs-routes"},frameworks:$R[1313]=["react","vite"]},compiler:$R[1314]={title:"Compiler",default:$R[1315]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Vite + React i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + React. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1316]=["Интернационализация","Документация","Intlayer","Vite","React","Компилятор","ИИ"],slugs:$R[1317]=["doc","environment","vite-and-react","compiler"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-react-template",applicationShowcase:"https://intlayer-vite-react-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1318]=[$R[1319]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1320]={version:"8.2.0",date:"2026-03-09",changes:"\"Update compiler options, add FilePathPattern support\""},$R[1321]={version:"8.1.6",date:"2026-02-23",changes:"\"Первый выпуск\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+react_compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+react_compiler.md",relativeUrl:"/ru/doc/environment/vite-and-react/compiler",url:"https://intlayer.org/ru/doc/environment/vite-and-react/compiler"},frameworks:$R[1322]=["react","vite"]}},frameworks:$R[1323]=["react","vite"]},"vite-and-vue":$R[1324]={title:"Vite и Vue",default:$R[1325]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Vue i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Vue. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1326]=["Интернационализация","Документация","Intlayer","Vite","Vue","JavaScript"],slugs:$R[1327]=["doc","environment","vite-and-vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-vue-template",applicationShowcase:"https://intlayer-vite-vue-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=IE3XWkZ6a5U",history:$R[1328]=[$R[1329]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1330]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1331]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+vue.md",relativeUrl:"/ru/doc/environment/vite-and-vue",url:"https://intlayer.org/ru/doc/environment/vite-and-vue"},frameworks:$R[1332]=["vue","vite"],subSections:$R[1333]={"nuxt-and-vue":$R[1334]={title:"Nuxt и Vue",default:$R[1335]={createdAt:"2025-06-18",updatedAt:"2026-05-31",title:"Nuxt i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Nuxt. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1336]=["Интернационализация","Документация","Intlayer","Nuxt","Vue","JavaScript"],slugs:$R[1337]=["doc","environment","nuxt-and-vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-nuxt-4-template",applicationShowcase:"https://intlayer-nuxt-4-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=nhUcUAVQ6eQ",history:$R[1338]=[$R[1339]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1340]={version:"7.3.11",date:"2025-12-07",changes:"\"Обновление LocaleSwitcher, SEO, метаданных\""},$R[1341]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nuxt.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nuxt.md",relativeUrl:"/ru/doc/environment/nuxt-and-vue",url:"https://intlayer.org/ru/doc/environment/nuxt-and-vue"},frameworks:$R[1342]=["nuxt","vue","vite"]}}},"vite-and-solid":$R[1343]={title:"Vite и Solid",default:$R[1344]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Solid i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Solid. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1345]=["Интернационализация","Документация","Intlayer","Vite","Solid","JavaScript"],slugs:$R[1346]=["doc","environment","vite-and-solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-solid-template",history:$R[1347]=[$R[1348]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1349]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1350]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+solid.md",relativeUrl:"/ru/doc/environment/vite-and-solid",url:"https://intlayer.org/ru/doc/environment/vite-and-solid"},frameworks:$R[1351]=["solid","vite"]},"vite-and-svelte":$R[1352]={title:"Vite и Svelte",default:$R[1353]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Svelte. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1354]=["Интернационализация","Документация","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[1355]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[1356]=[$R[1357]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1358]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1359]={version:"5.5.11",date:"2025-11-19",changes:"\"Обновление документации\""},$R[1360]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+svelte.md",relativeUrl:"/ru/doc/environment/vite-and-svelte",url:"https://intlayer.org/ru/doc/environment/vite-and-svelte"},subSections:$R[1361]={"vite-and-svelte-kit":$R[1362]={title:"SvelteKit",default:$R[1363]={createdAt:"2025-11-20",updatedAt:"2026-05-31",title:"SvelteKit i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения SvelteKit. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1364]=["Интернационализация","Документация","Intlayer","SvelteKit","JavaScript","SSR"],slugs:$R[1365]=["doc","environment","sveltekit"],applicationTemplate:"https://github.com/aymericzip/intlayer-sveltekit-template",applicationShowcase:"https://intlayer-sveltekit-template.vercel.app",history:$R[1366]=[$R[1367]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1368]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1369]={version:"7.1.10",date:"2025-11-20",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_svelte_kit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_svelte_kit.md",relativeUrl:"/ru/doc/environment/sveltekit",url:"https://intlayer.org/ru/doc/environment/sveltekit"},frameworks:$R[1370]=["svelte","vite"]}},frameworks:$R[1371]=["svelte","vite"]},"vite-and-preact":$R[1372]={title:"Vite и Preact",default:$R[1373]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Preact i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Preact. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1374]=["Интернационализация","Документация","Intlayer","Vite","Preact","JavaScript"],slugs:$R[1375]=["doc","environment","vite-and-preact"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-preact-template",applicationShowcase:"https://intlayer-vite-preact-template.vercel.app",history:$R[1376]=[$R[1377]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1378]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1379]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+preact.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+preact.md",relativeUrl:"/ru/doc/environment/vite-and-preact",url:"https://intlayer.org/ru/doc/environment/vite-and-preact"},frameworks:$R[1380]=["preact","vite"]},"vite-and-vanilla-js":$R[1381]={title:"Vite и Vanilla JS",default:$R[1382]={createdAt:"2026-03-23",updatedAt:"2026-05-31",title:"Vite + Vanilla JS i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Vanilla JS. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1383]=["Интернационализация","Документация","Intlayer","Vite","Vanilla JS","JavaScript","TypeScript","HTML"],slugs:$R[1384]=["doc","environment","vite-and-vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-vanilla-template",applicationShowcase:"https://intlayer-vite-vanilla.vercel.app",history:$R[1385]=[$R[1386]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1387]={version:"8.4.10",date:"2026-03-23",changes:"\"Начальная история\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+vanilla.md",relativeUrl:"/ru/doc/environment/vite-and-vanilla",url:"https://intlayer.org/ru/doc/environment/vite-and-vanilla"},frameworks:$R[1388]=["vanilla","vite"],subSections:$R[1389]={"vanilla-js":$R[1390]={title:"Vanilla JS (без бандлера)",default:$R[1391]={createdAt:"2026-03-31",updatedAt:"2026-05-31",title:"Vanilla JS i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vanilla JS. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1392]=["Интернационализация","Документация","Intlayer","Vanilla JS","JavaScript","TypeScript","HTML"],slugs:$R[1393]=["doc","environment","vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-vanilla-template",applicationShowcase:"https://intlayer-vanilla-template.vercel.app",history:$R[1394]=[$R[1395]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1396]={version:"8.4.10",date:"2026-03-31",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vanilla.md",relativeUrl:"/ru/doc/environment/vanilla",url:"https://intlayer.org/ru/doc/environment/vanilla"},frameworks:$R[1397]=["vanilla"]}}},"vite-and-lit":$R[1398]={title:"Vite и Lit",default:$R[1399]={createdAt:"2026-03-23",updatedAt:"2026-05-31",title:"Vite + Lit i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Vite + Lit. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1400]=["Интернационализация","Документация","Intlayer","Vite","Lit","Web Components","JavaScript"],slugs:$R[1401]=["doc","environment","vite-and-lit"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-lit-template",applicationShowcase:"https://intlayer-vite-lit-template.vercel.app",history:$R[1402]=[$R[1403]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1404]={version:"8.4.10",date:"2026-03-23",changes:"\"Начальная история\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+lit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+lit.md",relativeUrl:"/ru/doc/environment/vite-and-lit",url:"https://intlayer.org/ru/doc/environment/vite-and-lit"},frameworks:$R[1405]=["lit","vite"]},angular:$R[1406]={title:"Angular 21",default:$R[1407]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Angular 21 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Angular 21. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1408]=["Интернационализация","Документация","Intlayer","Angular","JavaScript"],slugs:$R[1409]=["doc","environment","angular"],applicationTemplate:"https://github.com/aymericzip/intlayer-angular-21-template",applicationShowcase:"https://intlayer-angular-21-template.vercel.app/",history:$R[1410]=[$R[1411]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновлено использование API Solid useIntlayer для прямого доступа к свойствам\""},$R[1412]={version:"8.0.0",date:"2026-01-26",changes:"\"Релиз стабильной версии\""},$R[1413]={version:"8.0.0",date:"2025-12-30",changes:"\"Добавлена команда init\""},$R[1414]={version:"5.5.10",date:"2025-06-29",changes:"\"Первая запись\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_angular_21.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_angular_21.md",relativeUrl:"/ru/doc/environment/angular",url:"https://intlayer.org/ru/doc/environment/angular"},subSections:$R[1415]={19:$R[1416]={title:"Angular 19 (Webpack)",default:$R[1417]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Angular 19 i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Angular 19. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1418]=["Интернационализация","Документация","Intlayer","Angular","JavaScript"],slugs:$R[1419]=["doc","environment","angular","19"],applicationTemplate:"https://github.com/aymericzip/intlayer-angular-19-template",applicationShowcase:"https://intlayer-angular-19-template.vercel.app",history:$R[1420]=[$R[1421]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1422]={version:"8.0.0",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1423]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_angular_19.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_angular_19.md",relativeUrl:"/ru/doc/environment/angular/19",url:"https://intlayer.org/ru/doc/environment/angular/19"},frameworks:$R[1424]=["angular","webpack"]},analog:$R[1425]={title:"Analog",default:$R[1426]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Analog i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Analog. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1427]=["Интернационализация","Документация","Intlayer","Analog","Angular","JavaScript"],slugs:$R[1428]=["doc","environment","analog"],applicationTemplate:"https://github.com/aymericzip/intlayer-analog-template",applicationShowcase:"https://intlayer-analog-template.vercel.app",history:$R[1429]=[$R[1430]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1431]={version:"8.0.4",date:"2026-01-26",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_analog.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_analog.md",relativeUrl:"/ru/doc/environment/analog",url:"https://intlayer.org/ru/doc/environment/analog"},frameworks:$R[1432]=["angular","vite"]}},frameworks:$R[1433]=["angular","vite"]},"create-react-app":$R[1434]={title:"React CRA",default:$R[1435]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"Create React App i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Create React App. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1436]=["Интернационализация","Документация","Intlayer","Create React App","CRA","JavaScript","React"],slugs:$R[1437]=["doc","environment","create-react-app"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-cra-template",history:$R[1438]=[$R[1439]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1440]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1441]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_create_react_app.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_create_react_app.md",relativeUrl:"/ru/doc/environment/create-react-app",url:"https://intlayer.org/ru/doc/environment/create-react-app"},frameworks:$R[1442]=["react","vite"]},"react-native-and-expo":$R[1443]={title:"React Native и Expo",default:$R[1444]={createdAt:"2025-06-18",updatedAt:"2026-05-31",title:"Expo + React Native i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Expo + React Native. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1445]=["Интернационализация","Документация","Intlayer","React Native","Expo","JavaScript"],slugs:$R[1446]=["doc","environment","react-native-and-expo"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-native-template",applicationShowcase:"https://intlayer-react-native.vercel.app",history:$R[1447]=[$R[1448]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1449]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1450]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_native+expo.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_react_native+expo.md",relativeUrl:"/ru/doc/environment/react-native-and-expo",url:"https://intlayer.org/ru/doc/environment/react-native-and-expo"},frameworks:$R[1451]=["react","react-native","expo"]},node:$R[1452]={title:"Node & Backend",subSections:$R[1453]={express:$R[1454]={title:"Express.js",default:$R[1455]={createdAt:"2024-08-11",updatedAt:"2026-05-31",title:"Express i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Express. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1456]=["Интернационализация","Документация","Intlayer","Express","JavaScript","Бэкэнд"],slugs:$R[1457]=["doc","environment","express"],applicationTemplate:"https://github.com/aymericzip/intlayer-express-template",history:$R[1458]=[$R[1459]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1460]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1461]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_express.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_express.md",relativeUrl:"/ru/doc/environment/express",url:"https://intlayer.org/ru/doc/environment/express"},frameworks:$R[1462]=["express","node"]},nest:$R[1463]={title:"NestJS",default:$R[1464]={createdAt:"2025-09-09",updatedAt:"2026-05-31",title:"NestJS i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения NestJS. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1465]=["Интернационализация","Документация","Intlayer","NestJS","JavaScript","Бэкенд"],slugs:$R[1466]=["doc","environment","nest"],author:"AydinTheFirst",history:$R[1467]=[$R[1468]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1469]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1470]={version:"5.8.0",date:"2025-09-09",changes:"\"Начальная версия документа\""}],docKey:"./docs/en/intlayer_with_nestjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nestjs.md",relativeUrl:"/ru/doc/environment/nest",url:"https://intlayer.org/ru/doc/environment/nest"},frameworks:$R[1471]=["nest","node"]},fastify:$R[1472]={title:"Fastify",default:$R[1473]={createdAt:"2025-12-30",updatedAt:"2026-05-31",title:"Fastify i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Fastify. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1474]=["Интернационализация","Документация","Intlayer","Fastify","JavaScript","Бэкенд"],slugs:$R[1475]=["doc","environment","fastify"],applicationTemplate:"https://github.com/aymericzip/intlayer-fastify-template",history:$R[1476]=[$R[1477]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1478]={version:"7.6.0",date:"2025-12-31",changes:"\"Добавлена команда init\""},$R[1479]={version:"7.6.0",date:"2025-12-31",changes:"\"Инициализирована история\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_fastify.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_fastify.md",relativeUrl:"/ru/doc/environment/fastify",url:"https://intlayer.org/ru/doc/environment/fastify"},frameworks:$R[1480]=["fastify","node"]},hono:$R[1481]={title:"Hono",default:$R[1482]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"Hono i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Hono. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1483]=["интернационализация","документация","Intlayer","Hono","JavaScript","бэкенд"],slugs:$R[1484]=["doc","environment","hono"],applicationTemplate:"https://github.com/aymericzip/intlayer-hono-template",history:$R[1485]=[$R[1486]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1487]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавлена команда init\""},$R[1488]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_hono.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_hono.md",relativeUrl:"/ru/doc/environment/hono",url:"https://intlayer.org/ru/doc/environment/hono"},frameworks:$R[1489]=["hono","node"]},adonis:$R[1490]={title:"Adonis",default:$R[1491]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"AdonisJS i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения AdonisJS. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1492]=["Интернационализация","Документация","Intlayer","AdonisJS","JavaScript","Бэкенд"],slugs:$R[1493]=["doc","environment","adonisjs"],applicationTemplate:"https://github.com/aymericzip/intlayer-adonis-template",history:$R[1494]=[$R[1495]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1496]={version:"8.0.0",date:"2025-12-30",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_adonisjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_adonisjs.md",relativeUrl:"/ru/doc/environment/adonisjs",url:"https://intlayer.org/ru/doc/environment/adonisjs"},frameworks:$R[1497]=["adonis","node"]}}},other:$R[1498]={title:"Другое",subSections:$R[1499]={"lynx-and-react":$R[1500]={title:"Lynx и React",default:$R[1501]={createdAt:"2025-03-09",updatedAt:"2026-05-31",title:"Lynx + React i18n - Полное руководство по переводу вашего приложения",description:"Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Lynx + React. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность.",keywords:$R[1502]=["интернационализация","документация","Intlayer","Vite","React","Lynx","JavaScript"],slugs:$R[1503]=["doc","environment","lynx-and-react"],applicationTemplate:"https://github.com/aymericzip/intlayer-lynx-template",history:$R[1504]=[$R[1505]={version:"8.9.0",date:"2026-05-04",changes:"\"Обновление использования API useIntlayer в Solid для прямого доступа к свойствам\""},$R[1506]={version:"7.5.9",date:"2025-12-30",changes:"\"Добавить команду init\""},$R[1507]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_lynx+react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_lynx+react.md",relativeUrl:"/ru/doc/environment/lynx-and-react",url:"https://intlayer.org/ru/doc/environment/lynx-and-react"},frameworks:$R[1508]=["lynx","react"]}}}}},plugins:$R[1509]={title:"Plugins",subSections:$R[1510]={syncJSON:$R[1511]={title:"JSON",default:$R[1512]={createdAt:"2025-03-13",updatedAt:"2025-12-13",title:"Плагин синхронизации JSON",description:"Синхронизируйте словари Intlayer с JSON-файлами сторонних i18n (i18next, next-intl, react-intl, vue-i18n и другими). Сохраняйте существующую i18n, используя Intlayer для управления, перевода и тестирования ваших сообщений.",keywords:$R[1513]=["Intlayer","Синхронизация JSON","i18next","next-intl","react-intl","vue-i18n","next-translate","nuxt-i18n","LinguiJS","Polyglot.js","Solid-i18next","svelte-i18n","i18n","переводы"],slugs:$R[1514]=["doc","plugin","sync-json"],youtubeVideo:"https://www.youtube.com/watch?v=MpGMxniDHNg",history:$R[1515]=[$R[1516]={version:"7.5.0",date:"2025-12-13",changes:"\"Добавлена поддержка форматов ICU и i18next\""},$R[1517]={version:"6.1.6",date:"2025-10-05",changes:"\"Начальная документация плагина синхронизации JSON\""}],author:"aymericzip",docKey:"./docs/en/plugins/sync-json.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/plugins/sync-json.md",relativeUrl:"/ru/doc/plugin/sync-json",url:"https://intlayer.org/ru/doc/plugin/sync-json"}},syncPO:$R[1518]={title:"gettext (.po)",default:$R[1519]={createdAt:"2026-05-10",updatedAt:"2026-05-10",title:"Плагин Sync PO",description:"Синхронизируйте словари Intlayer с файлами Gettext PO. Сохраняйте существующую i18n, используя Intlayer для управления, перевода и тестирования ваших сообщений.",keywords:$R[1520]=["Intlayer","Sync PO","Gettext","i18n","переводы"],slugs:$R[1521]=["doc","plugin","sync-po"],youtubeVideo:"https://www.youtube.com/watch?v=MpGMxniDHNg",history:$R[1522]=[$R[1523]={version:"8.9.4",date:"2026-05-10",changes:"\"Начальная документация плагина Sync PO\""}],author:"aymericzip",docKey:"./docs/en/plugins/sync-po.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/plugins/sync-po.md",relativeUrl:"/ru/doc/plugin/sync-po",url:"https://intlayer.org/ru/doc/plugin/sync-po"}}}},"dev-tools":$R[1524]={title:"Инструменты разработчика",subSections:$R[1525]={"vs-code-extension":$R[1526]={title:"Расширение VS Code",default:$R[1527]={createdAt:"2025-03-17",updatedAt:"2025-09-30",title:"Официальное расширение VS Code",description:"Узнайте, как использовать расширение Intlayer в VS Code для улучшения вашего рабочего процесса разработки. Быстро переходите между локализованным контентом и эффективно управляйте своими словарями.",keywords:$R[1528]=["Расширение VS Code","Intlayer","Локализация","Инструменты разработки","React","Next.js","JavaScript","TypeScript"],slugs:$R[1529]=["doc","vs-code-extension"],history:$R[1530]=[$R[1531]={version:"6.1.5",date:"2025-09-30",changes:"\"Добавлено демонстрационное gif\""},$R[1532]={version:"6.1.0",date:"2025-09-24",changes:"\"Добавлен раздел выбора окружения\""},$R[1533]={version:"6.0.0",date:"2025-09-22",changes:"\"Вкладка Intlayer / команды Fill & Test\""},$R[1534]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/vs_code_extension.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/vs_code_extension.md",relativeUrl:"/ru/doc/vs-code-extension",url:"https://intlayer.org/ru/doc/vs-code-extension"}},"mcp-server":$R[1535]={title:"Сервер MCP",default:$R[1536]={createdAt:"2025-06-07",updatedAt:"2026-03-03",title:"Документация MCP сервера",description:"Изучите возможности и настройку MCP сервера для оптимизации управления и работы вашего сервера.",keywords:$R[1537]=["MCP сервер","Управление сервером","Оптимизация","Intlayer","Документация","Настройка","Возможности"],slugs:$R[1538]=["doc","mcp-server"],history:$R[1539]=[$R[1540]={version:"5.5.12",date:"2025-07-11",changes:"\"Добавлена настройка ChatGPT\""},$R[1541]={version:"5.5.12",date:"2025-07-10",changes:"\"Добавлена настройка Claude Desktop\""},$R[1542]={version:"5.5.12",date:"2025-07-10",changes:"\"Добавлен Streamable HTTP транспорт и удалённый сервер\""},$R[1543]={version:"5.5.10",date:"2025-06-29",changes:"\"Инициализация истории\""}],author:"aymericzip",docKey:"./docs/en/mcp_server.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/mcp_server.md",relativeUrl:"/ru/doc/mcp-server",url:"https://intlayer.org/ru/doc/mcp-server"}},"agent-skills":$R[1544]={title:"Навики агента",default:$R[1545]={createdAt:"2026-02-09",updatedAt:"2026-03-03",title:"Навыки агента",description:"Узнайте, как использовать навыки агента Intlayer для улучшения понимания вашего проекта вашим AI-агентом, включая исчерпывающие руководства по настройке метаданных, карт сайта и серверных действий.",keywords:$R[1546]=["Intlayer","Навыки агента","AI-агент","Интернационализация","Документация"],slugs:$R[1547]=["doc","agent_skills"],history:$R[1548]=[$R[1549]={version:"8.1.0",date:"2026-02-09",changes:"\"Начальная история\""}],author:"aymericzip",docKey:"./docs/en/agent_skills.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/agent_skills.md",relativeUrl:"/ru/doc/agent_skills",url:"https://intlayer.org/ru/doc/agent_skills"}},lsp:$R[1550]={title:"Language Server Protocol",default:$R[1551]={createdAt:"2025-06-07",updatedAt:"2026-05-31",title:"LSP-сервер Intlayer",description:"Узнайте, как языковой сервер Intlayer предоставляет функцию «Перейти к определению» и другие функции IDE для useIntlayer, getIntlayer и связанных вызовов во всех поддерживаемых редакторах.",keywords:$R[1552]=["LSP","Языковой сервер","Перейти к определению","IDE","Intlayer","VS Code","Neovim","TypeScript"],slugs:$R[1553]=["doc","lsp"],history:$R[1554]=[$R[1555]={version:"8.12.0",date:"2026-06-01",changes:"\"Release LSP\""}],author:"aymericzip",docKey:"./docs/en/lsp.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/lsp.md",relativeUrl:"/ru/doc/lsp",url:"https://intlayer.org/ru/doc/lsp"}}}},releases:$R[1556]={title:"Релизы",subSections:$R[1557]={v9:$R[1558]={title:"v9",default:$R[1559]={createdAt:"2026-06-14",updatedAt:"2026-06-14",title:"Новый Intlayer v9 — Что нового?",description:"Узнайте, что нового в Intlayer v9. Представляем пакеты совместимости drop-in для популярных библиотек i18n, а также поддержку Collections, Variants и Dynamic Records.",keywords:$R[1560]=["Intlayer","Совместимость","Миграция","Collections","Variants","Dynamic Records","i18next","next-intl","vue-i18n"],slugs:$R[1561]=["doc","releases","v9"],author:"aymericzip",docKey:"./docs/en/releases/v9.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/releases/v9.md",relativeUrl:"/ru/doc/releases/v9",url:"https://intlayer.org/ru/doc/releases/v9"}},v8:$R[1562]={title:"v8",default:$R[1563]={createdAt:"2025-09-22",updatedAt:"2026-06-14",title:"Новый Intlayer v8. Что нового?",description:"Узнайте, что нового в Intlayer v8. Существенные улучшения в опыте разработчика, валидации контента и управлении словарями.",keywords:$R[1564]=["Intlayer","CMS","Developer Experience","Функции","React","Next.js","JavaScript","TypeScript"],youtubeVideo:"https://www.youtube.com/watch?v=ia6JmVf-kkU",slugs:$R[1565]=["doc","releases","v8"],author:"aymericzip",docKey:"./docs/en/releases/v8.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/releases/v8.md",relativeUrl:"/ru/doc/релизы/v8",url:"https://intlayer.org/ru/doc/релизы/v8"}},v7:$R[1566]={title:"v7",default:$R[1567]={createdAt:"2025-09-22",updatedAt:"2025-09-23",title:"Новый Intlayer v7 - Что нового?",description:"Узнайте, что нового в Intlayer v7. Значительные улучшения производительности, опыта разработчика и новые функции для улучшения вашего процесса интернационализации.",keywords:$R[1568]=["Intlayer","Локализация","Разработка","Производительность","Опыт разработчика","Функции","React","Next.js","JavaScript","TypeScript"],slugs:$R[1569]=["doc","releases","v7"],author:"aymericzip",docKey:"./docs/en/releases/v7.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/releases/v7.md",relativeUrl:"/ru/doc/releases/v7",url:"https://intlayer.org/ru/doc/releases/v7"}},v6:$R[1570]={title:"v6",default:$R[1571]={createdAt:"2025-09-22",updatedAt:"2025-09-22",title:"Новый Intlayer v6 - Что нового?",description:"Узнайте, что нового в Intlayer v6. Значительные улучшения в производительности, опыте разработчика и новые функции для улучшения вашего процесса интернационализации.",keywords:$R[1572]=["Intlayer","Локализация","Разработка","Производительность","Опыт разработчика","Функции","React","Next.js","JavaScript","TypeScript"],slugs:$R[1573]=["doc","releases","v6"],author:"aymericzip",docKey:"./docs/en/releases/v6.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/releases/v6.md",relativeUrl:"/ru/doc/releases/v6",url:"https://intlayer.org/ru/doc/releases/v6"}}}},benchmark:$R[1574]={title:"Бенчмарк",default:$R[1575]={createdAt:"2026-04-20",updatedAt:"2026-04-20",title:"Сравнение библиотек i18n",description:"Узнайте, как Intlayer сопоставим с другими библиотеками i18n с точки зрения производительности и размера бандла.",keywords:$R[1576]=["benchmark","i18n","intl","nextjs","tanstack","intlayer"],slugs:$R[1577]=["doc","benchmark"],history:$R[1578]=[$R[1579]={version:"8.7.5",date:"2026-01-06",changes:"\"Инициализация бенчмарка\""}],author:"aymericzip",docKey:"./docs/en/benchmark/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/index.md",relativeUrl:"/ru/doc/benchmark",url:"https://intlayer.org/ru/doc/benchmark"},subSections:$R[1580]={nextjs:$R[1581]={title:"Next.js",default:$R[1582]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Лучшее решение i18n для Next.js в 2026 году - Отчет о бенчмарке",description:"Сравните библиотеки интернационализации (i18n) для Next.js, такие как next-intl, next-i18next и Intlayer. Подробный отчет о производительности, размере бандла, утечках и реактивности.",keywords:$R[1583]=["benchmark","i18n","intl","nextjs","производительность","intlayer"],slugs:$R[1584]=["doc","benchmark","nextjs"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n",history:$R[1585]=[$R[1586]={version:"8.9.8",date:"2026-05-18",changes:"\"Добавить сравнение звезд GitHub\""},$R[1587]={version:"8.7.5",date:"2026-01-06",changes:"\"Инициализация бенчмарка\""}],docKey:"./docs/en/benchmark/nextjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/nextjs.md",relativeUrl:"/ru/doc/benchmark/nextjs",url:"https://intlayer.org/ru/doc/benchmark/nextjs"},frameworks:$R[1588]=["nextjs","react"]},tanstack:$R[1589]={title:"TanStack",default:$R[1590]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Лучшее решение i18n для TanStack Start в 2026 году - Отчет о бенчмарке",description:"Сравните библиотеки интернационализации для TanStack Start, такие как react-i18next, use-intl и Intlayer. Подробный отчет о производительности, размере бандла, утечках и реактивности.",keywords:$R[1591]=["benchmark","i18n","intl","tanstack","производительность","intlayer"],slugs:$R[1592]=["doc","benchmark","tanstack"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template",history:$R[1593]=[$R[1594]={version:"8.9.8",date:"2026-05-18",changes:"\"Добавить сравнение звезд GitHub\""},$R[1595]={version:"8.7.5",date:"2026-01-06",changes:"\"Инициализация бенчмарка\""}],docKey:"./docs/en/benchmark/tanstack.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/tanstack.md",relativeUrl:"/ru/doc/benchmark/tanstack",url:"https://intlayer.org/ru/doc/benchmark/tanstack"},frameworks:$R[1596]=["tanstack","react"]},vue:$R[1597]={title:"Vue",default:$R[1598]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Лучшее i18n решение для Vue в 2026 году - Отчет о бенчмарке",description:"Сравните библиотеки интернационализации (i18n) для Vue, такие как vue-i18n, fluent-vue и Intlayer. Подробный отчет о производительности, размере бандла, утечках и реактивности.",keywords:$R[1599]=["benchmark","i18n","intl","vue","производительность","intlayer"],slugs:$R[1600]=["doc","benchmark","vue"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-vue-template",history:$R[1601]=[$R[1602]={version:"8.9.8",date:"2026-05-18",changes:"\"Добавить сравнение звезд GitHub\""},$R[1603]={version:"8.7.12",date:"2026-01-06",changes:"\"Инициализация бенчмарка\""}],docKey:"./docs/en/benchmark/vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/vue.md",relativeUrl:"/ru/doc/benchmark/vue",url:"https://intlayer.org/ru/doc/benchmark/vue"},frameworks:$R[1604]=["vue"]},solid:$R[1605]={title:"Solid",default:$R[1606]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Лучшее i18n решение для Solid в 2026 году - Отчет о бенчмарке",description:"Сравните библиотеки интернационализации (i18n) для Solid, такие как solid-primitives, solid-i18next и Intlayer. Подробный отчет о производительности, размере бандла, утечках и реактивности.",keywords:$R[1607]=["benchmark","i18n","intl","solid","производительность","intlayer"],slugs:$R[1608]=["doc","benchmark","solid"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-solid-template",history:$R[1609]=[$R[1610]={version:"8.9.8",date:"2026-05-18",changes:"\"Добавить сравнение звезд GitHub\""},$R[1611]={version:"8.7.12",date:"2026-01-06",changes:"\"Инициализация бенчмарка\""}],docKey:"./docs/en/benchmark/solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/solid.md",relativeUrl:"/ru/doc/benchmark/solid",url:"https://intlayer.org/ru/doc/benchmark/solid"},frameworks:$R[1612]=["solid"]},svelte:$R[1613]={title:"Svelte",default:$R[1614]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Лучшее i18n решение для Svelte в 2026 году - Отчет о бенчмарке",description:"Сравните библиотеки интернационализации (i18n) для Svelte, такие как svelte-i18n, Paraglide и Intlayer. Подробный отчет о производительности, размере бандла, утечках и реактивности.",keywords:$R[1615]=["benchmark","i18n","intl","svelte","производительность","intlayer"],slugs:$R[1616]=["doc","benchmark","svelte"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-svelte-template",history:$R[1617]=[$R[1618]={version:"8.9.8",date:"2026-05-18",changes:"\"Добавить сравнение звезд GitHub\""},$R[1619]={version:"8.7.12",date:"2026-01-06",changes:"\"Инициализация бенчмарка\""}],docKey:"./docs/en/benchmark/svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/svelte.md",relativeUrl:"/ru/doc/benchmark/svelte",url:"https://intlayer.org/ru/doc/benchmark/svelte"},frameworks:$R[1620]=["svelte"]}}}}},ssr:!0}],lastMatchId:"�{-$locale}�_docs�doc�$�ru�doc�environment�vite-and-svelte"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" async="" src="/assets/index-Bw9yQaJj.js"></script></body></html>