@intlayer/docs 8.3.0-canary.4 → 8.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ar/compiler.md +84 -49
- package/docs/ar/configuration.md +80 -37
- package/docs/ar/intlayer_with_nextjs_16.md +174 -1
- package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ar/intlayer_with_react_router_v7.md +224 -1
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ar/intlayer_with_svelte_kit.md +175 -2
- package/docs/ar/intlayer_with_tanstack.md +176 -1
- package/docs/ar/intlayer_with_vite+preact.md +174 -1
- package/docs/ar/intlayer_with_vite+react.md +174 -1
- package/docs/ar/intlayer_with_vite+solid.md +174 -1
- package/docs/ar/intlayer_with_vite+svelte.md +174 -1
- package/docs/ar/intlayer_with_vite+vue.md +174 -1
- package/docs/de/compiler.md +83 -48
- package/docs/de/configuration.md +434 -212
- package/docs/de/intlayer_with_nextjs_16.md +176 -1
- package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
- package/docs/de/intlayer_with_react_router_v7.md +225 -2
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
- package/docs/de/intlayer_with_svelte_kit.md +158 -2
- package/docs/de/intlayer_with_tanstack.md +159 -1
- package/docs/de/intlayer_with_vite+preact.md +157 -1
- package/docs/de/intlayer_with_vite+react.md +157 -1
- package/docs/de/intlayer_with_vite+solid.md +159 -3
- package/docs/de/intlayer_with_vite+svelte.md +157 -1
- package/docs/de/intlayer_with_vite+vue.md +157 -1
- package/docs/en/compiler.md +60 -33
- package/docs/en/configuration.md +80 -57
- package/docs/en/intlayer_with_nextjs_16.md +176 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
- package/docs/en/intlayer_with_react_router_v7.md +159 -0
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
- package/docs/en/intlayer_with_svelte_kit.md +159 -0
- package/docs/en/intlayer_with_tanstack.md +160 -1
- package/docs/en/intlayer_with_vite+preact.md +159 -0
- package/docs/en/intlayer_with_vite+react.md +159 -0
- package/docs/en/intlayer_with_vite+solid.md +148 -27
- package/docs/en/intlayer_with_vite+svelte.md +159 -0
- package/docs/en/intlayer_with_vite+vue.md +142 -41
- package/docs/en-GB/compiler.md +66 -34
- package/docs/en-GB/configuration.md +78 -36
- package/docs/es/compiler.md +83 -48
- package/docs/es/configuration.md +429 -206
- package/docs/es/intlayer_with_adonisjs.md +1 -1
- package/docs/es/intlayer_with_express.md +1 -1
- package/docs/es/intlayer_with_fastify.md +1 -1
- package/docs/es/intlayer_with_hono.md +1 -1
- package/docs/es/intlayer_with_nestjs.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.md +176 -3
- package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
- package/docs/es/intlayer_with_nuxt.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +227 -4
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
- package/docs/es/intlayer_with_svelte_kit.md +158 -2
- package/docs/es/intlayer_with_tanstack.md +160 -2
- package/docs/es/intlayer_with_vite+preact.md +162 -6
- package/docs/es/intlayer_with_vite+react.md +160 -4
- package/docs/es/intlayer_with_vite+solid.md +163 -7
- package/docs/es/intlayer_with_vite+svelte.md +157 -1
- package/docs/es/intlayer_with_vite+vue.md +165 -9
- package/docs/fr/compiler.md +81 -46
- package/docs/fr/configuration.md +355 -134
- package/docs/fr/intlayer_with_adonisjs.md +1 -1
- package/docs/fr/intlayer_with_express.md +1 -1
- package/docs/fr/intlayer_with_fastify.md +1 -1
- package/docs/fr/intlayer_with_hono.md +1 -1
- package/docs/fr/intlayer_with_nestjs.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.md +183 -7
- package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
- package/docs/fr/intlayer_with_react_router_v7.md +229 -3
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
- package/docs/fr/intlayer_with_svelte_kit.md +158 -2
- package/docs/fr/intlayer_with_tanstack.md +159 -1
- package/docs/fr/intlayer_with_vite+preact.md +164 -8
- package/docs/fr/intlayer_with_vite+react.md +162 -6
- package/docs/fr/intlayer_with_vite+solid.md +163 -7
- package/docs/fr/intlayer_with_vite+svelte.md +157 -1
- package/docs/fr/intlayer_with_vite+vue.md +164 -8
- package/docs/hi/compiler.md +81 -46
- package/docs/hi/configuration.md +87 -44
- package/docs/hi/intlayer_with_nextjs_16.md +174 -1
- package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/hi/intlayer_with_react_router_v7.md +224 -1
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/hi/intlayer_with_svelte_kit.md +158 -2
- package/docs/hi/intlayer_with_tanstack.md +159 -1
- package/docs/hi/intlayer_with_vite+preact.md +157 -1
- package/docs/hi/intlayer_with_vite+react.md +157 -1
- package/docs/hi/intlayer_with_vite+solid.md +157 -1
- package/docs/hi/intlayer_with_vite+svelte.md +157 -1
- package/docs/hi/intlayer_with_vite+vue.md +157 -1
- package/docs/id/compiler.md +84 -51
- package/docs/id/configuration.md +83 -45
- package/docs/id/intlayer_with_nextjs_16.md +174 -1
- package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/id/intlayer_with_react_router_v7.md +224 -1
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/id/intlayer_with_svelte_kit.md +158 -2
- package/docs/id/intlayer_with_tanstack.md +159 -1
- package/docs/id/intlayer_with_vite+preact.md +157 -1
- package/docs/id/intlayer_with_vite+react.md +157 -1
- package/docs/id/intlayer_with_vite+solid.md +157 -1
- package/docs/id/intlayer_with_vite+svelte.md +157 -1
- package/docs/id/intlayer_with_vite+vue.md +157 -1
- package/docs/it/compiler.md +81 -46
- package/docs/it/configuration.md +426 -204
- package/docs/it/intlayer_with_nextjs_16.md +174 -1
- package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/it/intlayer_with_react_router_v7.md +225 -2
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/it/intlayer_with_svelte_kit.md +158 -2
- package/docs/it/intlayer_with_tanstack.md +159 -1
- package/docs/it/intlayer_with_vite+preact.md +157 -1
- package/docs/it/intlayer_with_vite+react.md +157 -1
- package/docs/it/intlayer_with_vite+solid.md +159 -3
- package/docs/it/intlayer_with_vite+svelte.md +157 -1
- package/docs/it/intlayer_with_vite+vue.md +157 -1
- package/docs/ja/compiler.md +94 -58
- package/docs/ja/configuration.md +88 -45
- package/docs/ja/intlayer_with_nextjs_16.md +174 -1
- package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ja/intlayer_with_react_router_v7.md +184 -394
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ja/intlayer_with_svelte_kit.md +119 -595
- package/docs/ja/intlayer_with_tanstack.md +131 -642
- package/docs/ja/intlayer_with_vite+preact.md +111 -1231
- package/docs/ja/intlayer_with_vite+react.md +129 -1304
- package/docs/ja/intlayer_with_vite+solid.md +159 -3
- package/docs/ja/intlayer_with_vite+svelte.md +157 -1
- package/docs/ja/intlayer_with_vite+vue.md +157 -1
- package/docs/ko/compiler.md +88 -52
- package/docs/ko/configuration.md +87 -44
- package/docs/ko/intlayer_with_nextjs_16.md +174 -1
- package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ko/intlayer_with_react_router_v7.md +225 -2
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ko/intlayer_with_svelte_kit.md +158 -2
- package/docs/ko/intlayer_with_tanstack.md +159 -1
- package/docs/ko/intlayer_with_vite+preact.md +157 -1
- package/docs/ko/intlayer_with_vite+react.md +157 -1
- package/docs/ko/intlayer_with_vite+solid.md +159 -3
- package/docs/ko/intlayer_with_vite+svelte.md +157 -1
- package/docs/ko/intlayer_with_vite+vue.md +157 -1
- package/docs/pl/compiler.md +84 -51
- package/docs/pl/configuration.md +83 -37
- package/docs/pl/intlayer_with_nextjs_16.md +174 -1
- package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pl/intlayer_with_react_router_v7.md +224 -1
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pl/intlayer_with_svelte_kit.md +158 -2
- package/docs/pl/intlayer_with_tanstack.md +159 -1
- package/docs/pl/intlayer_with_vite+preact.md +157 -1
- package/docs/pl/intlayer_with_vite+react.md +157 -1
- package/docs/pl/intlayer_with_vite+solid.md +157 -1
- package/docs/pl/intlayer_with_vite+svelte.md +157 -1
- package/docs/pl/intlayer_with_vite+vue.md +157 -1
- package/docs/pt/compiler.md +81 -46
- package/docs/pt/configuration.md +404 -194
- package/docs/pt/intlayer_with_nextjs_16.md +174 -1
- package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pt/intlayer_with_react_router_v7.md +224 -1
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pt/intlayer_with_svelte_kit.md +158 -2
- package/docs/pt/intlayer_with_tanstack.md +159 -1
- package/docs/pt/intlayer_with_vite+preact.md +157 -1
- package/docs/pt/intlayer_with_vite+react.md +157 -1
- package/docs/pt/intlayer_with_vite+solid.md +157 -1
- package/docs/pt/intlayer_with_vite+svelte.md +157 -1
- package/docs/pt/intlayer_with_vite+vue.md +157 -1
- package/docs/ru/compiler.md +90 -57
- package/docs/ru/configuration.md +76 -46
- package/docs/ru/intlayer_with_nextjs_16.md +174 -1
- package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ru/intlayer_with_react_router_v7.md +224 -1
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ru/intlayer_with_svelte_kit.md +158 -2
- package/docs/ru/intlayer_with_tanstack.md +159 -1
- package/docs/ru/intlayer_with_vite+preact.md +157 -1
- package/docs/ru/intlayer_with_vite+react.md +157 -1
- package/docs/ru/intlayer_with_vite+solid.md +157 -1
- package/docs/ru/intlayer_with_vite+svelte.md +157 -1
- package/docs/ru/intlayer_with_vite+vue.md +157 -1
- package/docs/tr/compiler.md +85 -52
- package/docs/tr/configuration.md +83 -40
- package/docs/tr/intlayer_with_nextjs_16.md +174 -1
- package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/tr/intlayer_with_react_router_v7.md +224 -1
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/tr/intlayer_with_svelte_kit.md +158 -2
- package/docs/tr/intlayer_with_tanstack.md +159 -1
- package/docs/tr/intlayer_with_vite+preact.md +157 -1
- package/docs/tr/intlayer_with_vite+react.md +157 -1
- package/docs/tr/intlayer_with_vite+solid.md +157 -1
- package/docs/tr/intlayer_with_vite+svelte.md +157 -1
- package/docs/tr/intlayer_with_vite+vue.md +157 -1
- package/docs/uk/compiler.md +96 -61
- package/docs/uk/configuration.md +83 -37
- package/docs/uk/intlayer_with_nextjs_16.md +174 -1
- package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/uk/intlayer_with_react_router_v7.md +224 -1
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/uk/intlayer_with_svelte_kit.md +157 -1
- package/docs/uk/intlayer_with_tanstack.md +159 -1
- package/docs/uk/intlayer_with_vite+preact.md +157 -1
- package/docs/uk/intlayer_with_vite+react.md +157 -1
- package/docs/uk/intlayer_with_vite+solid.md +157 -1
- package/docs/uk/intlayer_with_vite+svelte.md +157 -1
- package/docs/uk/intlayer_with_vite+vue.md +157 -1
- package/docs/vi/compiler.md +85 -50
- package/docs/vi/configuration.md +85 -39
- package/docs/vi/intlayer_with_nextjs_16.md +174 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/vi/intlayer_with_react_router_v7.md +224 -1
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/vi/intlayer_with_svelte_kit.md +158 -2
- package/docs/vi/intlayer_with_tanstack.md +159 -1
- package/docs/vi/intlayer_with_vite+preact.md +157 -1
- package/docs/vi/intlayer_with_vite+react.md +157 -1
- package/docs/vi/intlayer_with_vite+solid.md +157 -1
- package/docs/vi/intlayer_with_vite+svelte.md +157 -1
- package/docs/vi/intlayer_with_vite+vue.md +157 -1
- package/docs/zh/compiler.md +84 -49
- package/docs/zh/configuration.md +80 -37
- package/docs/zh/intlayer_with_adonisjs.md +1 -1
- package/docs/zh/intlayer_with_express.md +1 -1
- package/docs/zh/intlayer_with_fastify.md +1 -1
- package/docs/zh/intlayer_with_hono.md +1 -1
- package/docs/zh/intlayer_with_nestjs.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.md +174 -1
- package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/zh/intlayer_with_react_router_v7.md +227 -4
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
- package/docs/zh/intlayer_with_svelte_kit.md +158 -2
- package/docs/zh/intlayer_with_tanstack.md +159 -1
- package/docs/zh/intlayer_with_vite+preact.md +159 -3
- package/docs/zh/intlayer_with_vite+react.md +157 -1
- package/docs/zh/intlayer_with_vite+solid.md +161 -5
- package/docs/zh/intlayer_with_vite+svelte.md +157 -1
- package/docs/zh/intlayer_with_vite+vue.md +158 -2
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-12-06
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: Next.js i18n - Как перевести приложение Next.js 16 в 2026
|
|
5
5
|
description: Узнайте, как сделать ваш сайт на Next.js 16 многоязычным. Следуйте документации для интернационализации (i18n) и перевода.
|
|
6
6
|
keywords:
|
|
@@ -1695,6 +1695,179 @@ Intlayer использует расширение модулей (module augmen
|
|
|
1695
1695
|
|
|
1696
1696
|
Более подробную информацию о том, как использовать расширение, можно найти в [документации расширения Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
1697
1697
|
|
|
1698
|
+
### (Опционально) Шаг 1 : Извлечение содержимого ваших компонентов
|
|
1699
|
+
|
|
1700
|
+
Если у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.
|
|
1701
|
+
|
|
1702
|
+
Чтобы упростить этот процесс, Intlayer предлагает [компилятор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/compiler.md) / [экстрактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/extract.md) для преобразования ваших компонентов и извлечения содержимого.
|
|
1703
|
+
|
|
1704
|
+
Чтобы настроить его, вы можете добавить раздел `compiler` в ваш файл `intlayer.config.ts`:
|
|
1705
|
+
|
|
1706
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
1707
|
+
import { type IntlayerConfig } from "intlayer";
|
|
1708
|
+
|
|
1709
|
+
const config: IntlayerConfig = {
|
|
1710
|
+
// ... Остальная часть вашей конфигурации
|
|
1711
|
+
compiler: {
|
|
1712
|
+
/**
|
|
1713
|
+
* Указывает, должен ли быть включен компилятор.
|
|
1714
|
+
*/
|
|
1715
|
+
enabled: true,
|
|
1716
|
+
|
|
1717
|
+
/**
|
|
1718
|
+
* Определяет путь к выходным файлам
|
|
1719
|
+
*/
|
|
1720
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
1721
|
+
|
|
1722
|
+
/**
|
|
1723
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
1724
|
+
*/
|
|
1725
|
+
saveComponents: false,
|
|
1726
|
+
|
|
1727
|
+
/**
|
|
1728
|
+
* Префикс ключа словаря
|
|
1729
|
+
*/
|
|
1730
|
+
dictionaryKeyPrefix: "",
|
|
1731
|
+
},
|
|
1732
|
+
};
|
|
1733
|
+
|
|
1734
|
+
export default config;
|
|
1735
|
+
```
|
|
1736
|
+
|
|
1737
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
1738
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
1739
|
+
const config = {
|
|
1740
|
+
// ... Остальная часть вашей конфигурации
|
|
1741
|
+
compiler: {
|
|
1742
|
+
/**
|
|
1743
|
+
* Указывает, должен ли быть включен компилятор.
|
|
1744
|
+
*/
|
|
1745
|
+
enabled: true,
|
|
1746
|
+
|
|
1747
|
+
/**
|
|
1748
|
+
* Определяет путь к выходным файлам
|
|
1749
|
+
*/
|
|
1750
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
1751
|
+
|
|
1752
|
+
/**
|
|
1753
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
1754
|
+
*/
|
|
1755
|
+
saveComponents: false,
|
|
1756
|
+
|
|
1757
|
+
/**
|
|
1758
|
+
* Префикс ключа словаря
|
|
1759
|
+
*/
|
|
1760
|
+
dictionaryKeyPrefix: "",
|
|
1761
|
+
},
|
|
1762
|
+
};
|
|
1763
|
+
|
|
1764
|
+
export default config;
|
|
1765
|
+
```
|
|
1766
|
+
|
|
1767
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
1768
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
1769
|
+
const config = {
|
|
1770
|
+
// ... Остальная часть вашей конфигурации
|
|
1771
|
+
compiler: {
|
|
1772
|
+
/**
|
|
1773
|
+
* Указывает, должен ли быть включен компилятор.
|
|
1774
|
+
*/
|
|
1775
|
+
enabled: true,
|
|
1776
|
+
|
|
1777
|
+
/**
|
|
1778
|
+
* Определяет путь к выходным файлам
|
|
1779
|
+
*/
|
|
1780
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
1781
|
+
|
|
1782
|
+
/**
|
|
1783
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
1784
|
+
*/
|
|
1785
|
+
saveComponents: false,
|
|
1786
|
+
|
|
1787
|
+
/**
|
|
1788
|
+
* Префикс ключа словаря
|
|
1789
|
+
*/
|
|
1790
|
+
dictionaryKeyPrefix: "",
|
|
1791
|
+
},
|
|
1792
|
+
};
|
|
1793
|
+
|
|
1794
|
+
module.exports = config;
|
|
1795
|
+
```
|
|
1796
|
+
|
|
1797
|
+
<Tabs>
|
|
1798
|
+
<Tab value='Команда извлечения'>
|
|
1799
|
+
|
|
1800
|
+
Запустите экстрактор для преобразования компонентов и извлечения содержимого
|
|
1801
|
+
|
|
1802
|
+
```bash packageManager="npm"
|
|
1803
|
+
npx intlayer extract
|
|
1804
|
+
```
|
|
1805
|
+
|
|
1806
|
+
```bash packageManager="pnpm"
|
|
1807
|
+
pnpm intlayer extract
|
|
1808
|
+
```
|
|
1809
|
+
|
|
1810
|
+
```bash packageManager="yarn"
|
|
1811
|
+
yarn intlayer extract
|
|
1812
|
+
```
|
|
1813
|
+
|
|
1814
|
+
```bash packageManager="bun"
|
|
1815
|
+
bunx intlayer extract
|
|
1816
|
+
```
|
|
1817
|
+
|
|
1818
|
+
</Tab>
|
|
1819
|
+
<Tab value='Компилятор Babel'>
|
|
1820
|
+
|
|
1821
|
+
```bash packageManager="npm"
|
|
1822
|
+
npm install @intlayer/babel --save-dev
|
|
1823
|
+
```
|
|
1824
|
+
|
|
1825
|
+
```bash packageManager="pnpm"
|
|
1826
|
+
pnpm add @intlayer/babel --save-dev
|
|
1827
|
+
```
|
|
1828
|
+
|
|
1829
|
+
```bash packageManager="yarn"
|
|
1830
|
+
yarn add @intlayer/babel --save-dev
|
|
1831
|
+
```
|
|
1832
|
+
|
|
1833
|
+
```bash packageManager="bun"
|
|
1834
|
+
bun add @intlayer/babel --dev
|
|
1835
|
+
```
|
|
1836
|
+
|
|
1837
|
+
```js fileName="babel.config.js"
|
|
1838
|
+
const {
|
|
1839
|
+
intlayerExtractBabelPlugin,
|
|
1840
|
+
getExtractPluginOptions,
|
|
1841
|
+
} = require("@intlayer/babel");
|
|
1842
|
+
|
|
1843
|
+
module.exports = {
|
|
1844
|
+
presets: ["next/babel"],
|
|
1845
|
+
plugins: [
|
|
1846
|
+
// Извлечение содержимого из компонентов в словари
|
|
1847
|
+
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
1848
|
+
],
|
|
1849
|
+
};
|
|
1850
|
+
```
|
|
1851
|
+
|
|
1852
|
+
```bash packageManager="npm"
|
|
1853
|
+
npm run build # Или npm run dev
|
|
1854
|
+
```
|
|
1855
|
+
|
|
1856
|
+
```bash packageManager="pnpm"
|
|
1857
|
+
pnpm run build # Or pnpm run dev
|
|
1858
|
+
```
|
|
1859
|
+
|
|
1860
|
+
```bash packageManager="yarn"
|
|
1861
|
+
yarn build # Or yarn dev
|
|
1862
|
+
```
|
|
1863
|
+
|
|
1864
|
+
```bash packageManager="bun"
|
|
1865
|
+
bun run build # Or bun run dev
|
|
1866
|
+
```
|
|
1867
|
+
|
|
1868
|
+
</Tab>
|
|
1869
|
+
</Tabs>
|
|
1870
|
+
|
|
1698
1871
|
### Идите дальше
|
|
1699
1872
|
|
|
1700
1873
|
Чтобы пойти дальше, вы можете внедрить [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) или экстернализировать ваш контент с помощью [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-01-10
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: Next.js i18n - Превращение существующего приложения Next.js в многоязычное приложение в 2026
|
|
5
5
|
description: Узнайте, как сделать ваше существующее приложение Next.js многоязычным с помощью компилятора Intlayer. Следуйте документации для интернационализации (i18n) и перевода вашего приложения с помощью ИИ.
|
|
6
6
|
keywords:
|
|
@@ -501,6 +501,179 @@ Intlayer использует расширение модулей (module augmen
|
|
|
501
501
|
|
|
502
502
|
Для получения подробной информации об использовании расширения см. [документацию расширения Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
503
503
|
|
|
504
|
+
### (Опционально) Шаг 1 : Извлечение содержимого ваших компонентов
|
|
505
|
+
|
|
506
|
+
Если у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.
|
|
507
|
+
|
|
508
|
+
Чтобы упростить этот процесс, Intlayer предлагает [компилятор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/compiler.md) / [экстрактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/extract.md) для преобразования ваших компонентов и извлечения содержимого.
|
|
509
|
+
|
|
510
|
+
Чтобы настроить его, вы можете добавить раздел `compiler` в ваш файл `intlayer.config.ts`:
|
|
511
|
+
|
|
512
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
513
|
+
import { type IntlayerConfig } from "intlayer";
|
|
514
|
+
|
|
515
|
+
const config: IntlayerConfig = {
|
|
516
|
+
// ... Остальная часть вашей конфигурации
|
|
517
|
+
compiler: {
|
|
518
|
+
/**
|
|
519
|
+
* Указывает, должен ли быть включен компилятор.
|
|
520
|
+
*/
|
|
521
|
+
enabled: true,
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Определяет путь к выходным файлам
|
|
525
|
+
*/
|
|
526
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
530
|
+
*/
|
|
531
|
+
saveComponents: false,
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Префикс ключа словаря
|
|
535
|
+
*/
|
|
536
|
+
dictionaryKeyPrefix: "",
|
|
537
|
+
},
|
|
538
|
+
};
|
|
539
|
+
|
|
540
|
+
export default config;
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
544
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
545
|
+
const config = {
|
|
546
|
+
// ... Остальная часть вашей конфигурации
|
|
547
|
+
compiler: {
|
|
548
|
+
/**
|
|
549
|
+
* Указывает, должен ли быть включен компилятор.
|
|
550
|
+
*/
|
|
551
|
+
enabled: true,
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Определяет путь к выходным файлам
|
|
555
|
+
*/
|
|
556
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
560
|
+
*/
|
|
561
|
+
saveComponents: false,
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* Префикс ключа словаря
|
|
565
|
+
*/
|
|
566
|
+
dictionaryKeyPrefix: "",
|
|
567
|
+
},
|
|
568
|
+
};
|
|
569
|
+
|
|
570
|
+
export default config;
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
574
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
575
|
+
const config = {
|
|
576
|
+
// ... Остальная часть вашей конфигурации
|
|
577
|
+
compiler: {
|
|
578
|
+
/**
|
|
579
|
+
* Указывает, должен ли быть включен компилятор.
|
|
580
|
+
*/
|
|
581
|
+
enabled: true,
|
|
582
|
+
|
|
583
|
+
/**
|
|
584
|
+
* Определяет путь к выходным файлам
|
|
585
|
+
*/
|
|
586
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
590
|
+
*/
|
|
591
|
+
saveComponents: false,
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* Префикс ключа словаря
|
|
595
|
+
*/
|
|
596
|
+
dictionaryKeyPrefix: "",
|
|
597
|
+
},
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
module.exports = config;
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
<Tabs>
|
|
604
|
+
<Tab value='Команда извлечения'>
|
|
605
|
+
|
|
606
|
+
Запустите экстрактор для преобразования компонентов и извлечения содержимого
|
|
607
|
+
|
|
608
|
+
```bash packageManager="npm"
|
|
609
|
+
npx intlayer extract
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
```bash packageManager="pnpm"
|
|
613
|
+
pnpm intlayer extract
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
```bash packageManager="yarn"
|
|
617
|
+
yarn intlayer extract
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
```bash packageManager="bun"
|
|
621
|
+
bunx intlayer extract
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
</Tab>
|
|
625
|
+
<Tab value='Компилятор Babel'>
|
|
626
|
+
|
|
627
|
+
```bash packageManager="npm"
|
|
628
|
+
npm install @intlayer/babel --save-dev
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
```bash packageManager="pnpm"
|
|
632
|
+
pnpm add @intlayer/babel --save-dev
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
```bash packageManager="yarn"
|
|
636
|
+
yarn add @intlayer/babel --save-dev
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
```bash packageManager="bun"
|
|
640
|
+
bun add @intlayer/babel --dev
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
```js fileName="babel.config.js"
|
|
644
|
+
const {
|
|
645
|
+
intlayerExtractBabelPlugin,
|
|
646
|
+
getExtractPluginOptions,
|
|
647
|
+
} = require("@intlayer/babel");
|
|
648
|
+
|
|
649
|
+
module.exports = {
|
|
650
|
+
presets: ["next/babel"],
|
|
651
|
+
plugins: [
|
|
652
|
+
// Извлечение содержимого из компонентов в словари
|
|
653
|
+
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
654
|
+
],
|
|
655
|
+
};
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
```bash packageManager="npm"
|
|
659
|
+
npm run build # Или npm run dev
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
```bash packageManager="pnpm"
|
|
663
|
+
pnpm run build # Or pnpm run dev
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
```bash packageManager="yarn"
|
|
667
|
+
yarn build # Or yarn dev
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
```bash packageManager="bun"
|
|
671
|
+
bun run build # Or bun run dev
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
</Tab>
|
|
675
|
+
</Tabs>
|
|
676
|
+
|
|
504
677
|
### Идите дальше
|
|
505
678
|
|
|
506
679
|
Чтобы пойти еще дальше, вы можете внедрить [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) или вынести свой контент во внешнюю среду с помощью [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-04
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: React Router v7 i18n - Как перевести приложение React Router v7 в 2026
|
|
5
5
|
description: Узнайте, как добавить интернационализацию (i18n) в ваше приложение на React Router v7 с помощью Intlayer. Следуйте этому подробному руководству, чтобы сделать ваше приложение многоязычным с маршрутизацией, учитывающей локаль.
|
|
6
6
|
keywords:
|
|
@@ -506,6 +506,229 @@ export default function RootLayout() {
|
|
|
506
506
|
}
|
|
507
507
|
```
|
|
508
508
|
|
|
509
|
+
### (Опционально) Шаг 1 : Извлечение содержимого ваших компонентов
|
|
510
|
+
|
|
511
|
+
Если у вас есть существующая кодовая база, преобразование тысяч файлов может занять много времени.
|
|
512
|
+
|
|
513
|
+
Чтобы упростить этот процесс, Intlayer предлагает [компилятор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/compiler.md) / [экстрактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/extract.md) для преобразования ваших компонентов и извлечения содержимого.
|
|
514
|
+
|
|
515
|
+
Чтобы настроить его, вы можете добавить раздел `compiler` в ваш файл `intlayer.config.ts`:
|
|
516
|
+
|
|
517
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
518
|
+
import { type IntlayerConfig } from "intlayer";
|
|
519
|
+
|
|
520
|
+
const config: IntlayerConfig = {
|
|
521
|
+
// ... Остальная часть вашей конфигурации
|
|
522
|
+
compiler: {
|
|
523
|
+
/**
|
|
524
|
+
* Указывает, должен ли быть включен компилятор.
|
|
525
|
+
*/
|
|
526
|
+
enabled: true,
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* Определяет путь к выходным файлам
|
|
530
|
+
*/
|
|
531
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
535
|
+
*/
|
|
536
|
+
saveComponents: false,
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Префикс ключа словаря
|
|
540
|
+
*/
|
|
541
|
+
dictionaryKeyPrefix: "",
|
|
542
|
+
},
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
export default config;
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
549
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
550
|
+
const config = {
|
|
551
|
+
// ... Остальная часть вашей конфигурации
|
|
552
|
+
compiler: {
|
|
553
|
+
/**
|
|
554
|
+
* Указывает, должен ли быть включен компилятор.
|
|
555
|
+
*/
|
|
556
|
+
enabled: true,
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Определяет путь к выходным файлам
|
|
560
|
+
*/
|
|
561
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
565
|
+
*/
|
|
566
|
+
saveComponents: false,
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Префикс ключа словаря
|
|
570
|
+
*/
|
|
571
|
+
dictionaryKeyPrefix: "",
|
|
572
|
+
},
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
export default config;
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
579
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
580
|
+
const config = {
|
|
581
|
+
// ... Остальная часть вашей конфигурации
|
|
582
|
+
compiler: {
|
|
583
|
+
/**
|
|
584
|
+
* Указывает, должен ли быть включен компилятор.
|
|
585
|
+
*/
|
|
586
|
+
enabled: true,
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Определяет путь к выходным файлам
|
|
590
|
+
*/
|
|
591
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* Указывает, должны ли компоненты сохраняться после преобразования. Таким образом, компилятор можно запустить только один раз для преобразования приложения, а затем удалить.
|
|
595
|
+
*/
|
|
596
|
+
saveComponents: false,
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* Префикс ключа словаря
|
|
600
|
+
*/
|
|
601
|
+
dictionaryKeyPrefix: "",
|
|
602
|
+
},
|
|
603
|
+
};
|
|
604
|
+
|
|
605
|
+
module.exports = config;
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
<Tabs>
|
|
609
|
+
<Tab value='Команда извлечения'>
|
|
610
|
+
|
|
611
|
+
Запустите экстрактор для преобразования компонентов и извлечения содержимого
|
|
612
|
+
|
|
613
|
+
```bash packageManager="npm"
|
|
614
|
+
npx intlayer extract
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
```bash packageManager="pnpm"
|
|
618
|
+
pnpm intlayer extract
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
```bash packageManager="yarn"
|
|
622
|
+
yarn intlayer extract
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
```bash packageManager="bun"
|
|
626
|
+
bunx intlayer extract
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
</Tab>
|
|
630
|
+
<Tab value='Компилятор Babel'>
|
|
631
|
+
|
|
632
|
+
Обновите ваш `vite.config.ts`, чтобы включить плагин `intlayerCompiler`:
|
|
633
|
+
|
|
634
|
+
```ts fileName="vite.config.ts"
|
|
635
|
+
import { defineConfig } from "vite";
|
|
636
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
637
|
+
|
|
638
|
+
export default defineConfig({
|
|
639
|
+
plugins: [
|
|
640
|
+
intlayer(),
|
|
641
|
+
intlayerCompiler(), // Добавляет плагин компилятора
|
|
642
|
+
],
|
|
643
|
+
});
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
```bash packageManager="npm"
|
|
647
|
+
npm run build # Или npm run dev
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
```bash packageManager="pnpm"
|
|
651
|
+
pnpm run build # Or pnpm run dev
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
```bash packageManager="yarn"
|
|
655
|
+
yarn build # Or yarn dev
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
```bash packageManager="bun"
|
|
659
|
+
bun run build # Or bun run dev
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
</Tab>
|
|
663
|
+
</Tabs>
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## Configure TypeScript
|
|
668
|
+
|
|
669
|
+
Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
|
|
670
|
+
|
|
671
|
+
Ensure your TypeScript configuration includes the autogenerated types:
|
|
672
|
+
|
|
673
|
+
```json5 fileName="tsconfig.json"
|
|
674
|
+
{
|
|
675
|
+
// ... your existing configurations
|
|
676
|
+
include: [
|
|
677
|
+
// ... your existing includes
|
|
678
|
+
".intlayer/**/*.ts", // Include the auto-generated types
|
|
679
|
+
],
|
|
680
|
+
}
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
---
|
|
684
|
+
|
|
685
|
+
## Git Configuration
|
|
686
|
+
|
|
687
|
+
It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
|
|
688
|
+
|
|
689
|
+
To do this, you can add the following instructions to your `.gitignore` file:
|
|
690
|
+
|
|
691
|
+
```plaintext fileName=".gitignore"
|
|
692
|
+
# Ignore the files generated by Intlayer
|
|
693
|
+
.intlayer
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
|
|
698
|
+
## VS Code Extension
|
|
699
|
+
|
|
700
|
+
To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
|
|
701
|
+
|
|
702
|
+
[Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
703
|
+
|
|
704
|
+
This extension provides:
|
|
705
|
+
|
|
706
|
+
- **Autocompletion** for translation keys.
|
|
707
|
+
- **Real-time error detection** for missing translations.
|
|
708
|
+
- **Inline previews** of translated content.
|
|
709
|
+
- **Quick actions** to easily create and update translations.
|
|
710
|
+
|
|
711
|
+
For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
## Go Further
|
|
716
|
+
|
|
717
|
+
To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
|
|
718
|
+
|
|
719
|
+
---
|
|
720
|
+
|
|
721
|
+
## Documentation References
|
|
722
|
+
|
|
723
|
+
- [Intlayer Documentation](https://intlayer.org)
|
|
724
|
+
- [React Router v7 Documentation](https://reactrouter.com/)
|
|
725
|
+
- [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
|
|
726
|
+
- [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
|
|
727
|
+
- [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
|
|
728
|
+
- [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
|
|
729
|
+
|
|
730
|
+
This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 for a fully internationalized application with locale-aware routing and TypeScript support.
|
|
731
|
+
|
|
509
732
|
### Шаг 11: Добавьте middleware (необязательно)
|
|
510
733
|
|
|
511
734
|
Вы также можете использовать `intlayerProxy` для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующее cookie с локалью. Если локаль не указана, плагин определит наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не будет обнаружена, произойдет перенаправление на локаль по умолчанию.
|