@intlayer/docs 8.6.0 → 8.6.10

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.
Files changed (197) hide show
  1. package/dist/cjs/doc.cjs.map +1 -1
  2. package/dist/cjs/generated/docs.entry.cjs +60 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/doc.mjs.map +1 -1
  5. package/dist/esm/generated/docs.entry.mjs +60 -0
  6. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  7. package/dist/types/doc.d.ts.map +1 -1
  8. package/dist/types/generated/docs.entry.d.ts +3 -0
  9. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  10. package/docs/ar/cli/index.md +54 -42
  11. package/docs/ar/cli/init.md +32 -20
  12. package/docs/ar/cli/standalone.md +91 -0
  13. package/docs/ar/configuration.md +39 -7
  14. package/docs/ar/custom_domains.md +250 -0
  15. package/docs/ar/intlayer_with_tanstack+solid.md +14 -33
  16. package/docs/ar/intlayer_with_tanstack.md +25 -16
  17. package/docs/ar/intlayer_with_vanilla.md +506 -0
  18. package/docs/bn/cli/index.md +195 -0
  19. package/docs/bn/cli/init.md +96 -0
  20. package/docs/bn/cli/standalone.md +91 -0
  21. package/docs/bn/configuration.md +46 -14
  22. package/docs/bn/custom_domains.md +250 -0
  23. package/docs/bn/intlayer_with_vanilla.md +506 -0
  24. package/docs/cs/cli/index.md +195 -0
  25. package/docs/cs/cli/init.md +96 -0
  26. package/docs/cs/cli/standalone.md +91 -0
  27. package/docs/cs/configuration.md +46 -7
  28. package/docs/cs/custom_domains.md +250 -0
  29. package/docs/cs/intlayer_with_vanilla.md +506 -0
  30. package/docs/de/cli/index.md +53 -41
  31. package/docs/de/cli/standalone.md +91 -0
  32. package/docs/de/configuration.md +46 -7
  33. package/docs/de/custom_domains.md +250 -0
  34. package/docs/de/intlayer_with_tanstack+solid.md +15 -36
  35. package/docs/de/intlayer_with_tanstack.md +25 -16
  36. package/docs/de/intlayer_with_vanilla.md +506 -0
  37. package/docs/en/bundle_optimization.md +288 -23
  38. package/docs/en/cli/index.md +6 -1
  39. package/docs/en/cli/init.md +13 -1
  40. package/docs/en/cli/standalone.md +91 -0
  41. package/docs/en/configuration.md +46 -7
  42. package/docs/en/custom_domains.md +245 -0
  43. package/docs/en/intlayer_with_tanstack+solid.md +15 -36
  44. package/docs/en/intlayer_with_tanstack.md +25 -16
  45. package/docs/en/intlayer_with_vanilla.md +506 -0
  46. package/docs/en-GB/cli/index.md +56 -44
  47. package/docs/en-GB/cli/init.md +28 -21
  48. package/docs/en-GB/cli/standalone.md +91 -0
  49. package/docs/en-GB/configuration.md +53 -14
  50. package/docs/en-GB/custom_domains.md +250 -0
  51. package/docs/en-GB/intlayer_with_tanstack+solid.md +15 -36
  52. package/docs/en-GB/intlayer_with_tanstack.md +25 -16
  53. package/docs/en-GB/intlayer_with_vanilla.md +506 -0
  54. package/docs/es/cli/index.md +65 -53
  55. package/docs/es/cli/init.md +33 -21
  56. package/docs/es/cli/standalone.md +91 -0
  57. package/docs/es/configuration.md +39 -1
  58. package/docs/es/custom_domains.md +250 -0
  59. package/docs/es/intlayer_with_tanstack+solid.md +15 -36
  60. package/docs/es/intlayer_with_tanstack.md +25 -16
  61. package/docs/es/intlayer_with_vanilla.md +506 -0
  62. package/docs/fr/cli/index.md +43 -31
  63. package/docs/fr/cli/init.md +37 -25
  64. package/docs/fr/cli/standalone.md +91 -0
  65. package/docs/fr/configuration.md +46 -7
  66. package/docs/fr/custom_domains.md +250 -0
  67. package/docs/fr/intlayer_with_tanstack+solid.md +15 -36
  68. package/docs/fr/intlayer_with_tanstack.md +25 -16
  69. package/docs/fr/intlayer_with_vanilla.md +506 -0
  70. package/docs/hi/cli/index.md +71 -59
  71. package/docs/hi/cli/init.md +37 -33
  72. package/docs/hi/cli/standalone.md +91 -0
  73. package/docs/hi/configuration.md +39 -7
  74. package/docs/hi/custom_domains.md +250 -0
  75. package/docs/hi/intlayer_with_tanstack+solid.md +14 -33
  76. package/docs/hi/intlayer_with_tanstack.md +25 -16
  77. package/docs/hi/intlayer_with_vanilla.md +506 -0
  78. package/docs/id/cli/index.md +59 -47
  79. package/docs/id/cli/init.md +32 -25
  80. package/docs/id/cli/standalone.md +91 -0
  81. package/docs/id/configuration.md +46 -7
  82. package/docs/id/custom_domains.md +250 -0
  83. package/docs/id/intlayer_with_tanstack+solid.md +14 -33
  84. package/docs/id/intlayer_with_tanstack.md +25 -16
  85. package/docs/id/intlayer_with_vanilla.md +506 -0
  86. package/docs/it/cli/index.md +58 -41
  87. package/docs/it/cli/init.md +37 -38
  88. package/docs/it/cli/standalone.md +91 -0
  89. package/docs/it/configuration.md +46 -7
  90. package/docs/it/custom_domains.md +250 -0
  91. package/docs/it/intlayer_with_tanstack+solid.md +15 -36
  92. package/docs/it/intlayer_with_tanstack.md +25 -16
  93. package/docs/it/intlayer_with_vanilla.md +506 -0
  94. package/docs/ja/cli/index.md +59 -47
  95. package/docs/ja/cli/init.md +36 -24
  96. package/docs/ja/cli/standalone.md +91 -0
  97. package/docs/ja/configuration.md +46 -7
  98. package/docs/ja/custom_domains.md +250 -0
  99. package/docs/ja/intlayer_with_tanstack+solid.md +15 -36
  100. package/docs/ja/intlayer_with_tanstack.md +25 -16
  101. package/docs/ja/intlayer_with_vanilla.md +506 -0
  102. package/docs/ko/cli/index.md +58 -46
  103. package/docs/ko/cli/init.md +39 -35
  104. package/docs/ko/cli/standalone.md +91 -0
  105. package/docs/ko/configuration.md +47 -8
  106. package/docs/ko/custom_domains.md +250 -0
  107. package/docs/ko/intlayer_with_tanstack+solid.md +15 -36
  108. package/docs/ko/intlayer_with_tanstack.md +25 -16
  109. package/docs/ko/intlayer_with_vanilla.md +506 -0
  110. package/docs/nl/cli/index.md +195 -0
  111. package/docs/nl/cli/init.md +96 -0
  112. package/docs/nl/cli/standalone.md +91 -0
  113. package/docs/nl/configuration.md +46 -7
  114. package/docs/nl/custom_domains.md +250 -0
  115. package/docs/nl/intlayer_with_vanilla.md +506 -0
  116. package/docs/pl/cli/index.md +56 -44
  117. package/docs/pl/cli/init.md +36 -32
  118. package/docs/pl/cli/standalone.md +91 -0
  119. package/docs/pl/configuration.md +46 -7
  120. package/docs/pl/custom_domains.md +250 -0
  121. package/docs/pl/intlayer_with_tanstack+solid.md +14 -33
  122. package/docs/pl/intlayer_with_tanstack.md +25 -16
  123. package/docs/pl/intlayer_with_vanilla.md +506 -0
  124. package/docs/pt/cli/index.md +64 -52
  125. package/docs/pt/cli/init.md +35 -31
  126. package/docs/pt/cli/standalone.md +91 -0
  127. package/docs/pt/configuration.md +46 -7
  128. package/docs/pt/custom_domains.md +250 -0
  129. package/docs/pt/intlayer_with_tanstack+solid.md +15 -36
  130. package/docs/pt/intlayer_with_tanstack.md +25 -16
  131. package/docs/pt/intlayer_with_vanilla.md +506 -0
  132. package/docs/ru/cli/index.md +54 -42
  133. package/docs/ru/cli/init.md +31 -27
  134. package/docs/ru/cli/standalone.md +91 -0
  135. package/docs/ru/configuration.md +46 -7
  136. package/docs/ru/custom_domains.md +250 -0
  137. package/docs/ru/intlayer_with_tanstack+solid.md +15 -36
  138. package/docs/ru/intlayer_with_tanstack.md +25 -16
  139. package/docs/ru/intlayer_with_vanilla.md +506 -0
  140. package/docs/tr/cli/index.md +64 -52
  141. package/docs/tr/cli/init.md +37 -30
  142. package/docs/tr/cli/standalone.md +91 -0
  143. package/docs/tr/configuration.md +46 -7
  144. package/docs/tr/custom_domains.md +250 -0
  145. package/docs/tr/intlayer_with_tanstack+solid.md +14 -33
  146. package/docs/tr/intlayer_with_tanstack.md +25 -16
  147. package/docs/tr/intlayer_with_vanilla.md +506 -0
  148. package/docs/uk/cli/index.md +60 -55
  149. package/docs/uk/cli/init.md +32 -20
  150. package/docs/uk/cli/standalone.md +91 -0
  151. package/docs/uk/configuration.md +46 -7
  152. package/docs/uk/custom_domains.md +250 -0
  153. package/docs/uk/intlayer_with_tanstack+solid.md +14 -33
  154. package/docs/uk/intlayer_with_tanstack.md +25 -16
  155. package/docs/uk/intlayer_with_vanilla.md +506 -0
  156. package/docs/ur/cli/index.md +195 -0
  157. package/docs/ur/cli/init.md +96 -0
  158. package/docs/ur/cli/standalone.md +91 -0
  159. package/docs/ur/configuration.md +46 -7
  160. package/docs/ur/custom_domains.md +250 -0
  161. package/docs/ur/intlayer_with_vanilla.md +506 -0
  162. package/docs/vi/cli/index.md +72 -61
  163. package/docs/vi/cli/init.md +33 -21
  164. package/docs/vi/cli/standalone.md +91 -0
  165. package/docs/vi/configuration.md +46 -7
  166. package/docs/vi/custom_domains.md +250 -0
  167. package/docs/vi/intlayer_with_tanstack+solid.md +14 -33
  168. package/docs/vi/intlayer_with_tanstack.md +25 -16
  169. package/docs/vi/intlayer_with_vanilla.md +506 -0
  170. package/docs/zh/cli/index.md +56 -49
  171. package/docs/zh/cli/init.md +30 -18
  172. package/docs/zh/cli/standalone.md +91 -0
  173. package/docs/zh/configuration.md +46 -7
  174. package/docs/zh/custom_domains.md +250 -0
  175. package/docs/zh/intlayer_with_tanstack+solid.md +15 -36
  176. package/docs/zh/intlayer_with_tanstack.md +25 -16
  177. package/docs/zh/intlayer_with_vanilla.md +506 -0
  178. package/package.json +8 -8
  179. package/src/doc.ts +4 -1
  180. package/src/generated/docs.entry.ts +60 -0
  181. package/docs/ar/bundle_optimization.md +0 -185
  182. package/docs/de/bundle_optimization.md +0 -195
  183. package/docs/en-GB/bundle_optimization.md +0 -184
  184. package/docs/es/bundle_optimization.md +0 -194
  185. package/docs/fr/bundle_optimization.md +0 -184
  186. package/docs/hi/bundle_optimization.md +0 -185
  187. package/docs/id/bundle_optimization.md +0 -185
  188. package/docs/it/bundle_optimization.md +0 -185
  189. package/docs/ja/bundle_optimization.md +0 -185
  190. package/docs/ko/bundle_optimization.md +0 -185
  191. package/docs/pl/bundle_optimization.md +0 -185
  192. package/docs/pt/bundle_optimization.md +0 -184
  193. package/docs/ru/bundle_optimization.md +0 -185
  194. package/docs/tr/bundle_optimization.md +0 -184
  195. package/docs/uk/bundle_optimization.md +0 -186
  196. package/docs/vi/bundle_optimization.md +0 -185
  197. package/docs/zh/bundle_optimization.md +0 -185
@@ -1,185 +0,0 @@
1
- ---
2
- createdAt: 2025-11-25
3
- updatedAt: 2025-11-25
4
- title: Оптимизация размера и производительности i18n-бандла
5
- description: Сократите размер бандла приложения, оптимизируя контент интернационализации (i18n). Узнайте, как использовать tree shaking и ленивую загрузку словарей с Intlayer.
6
- keywords:
7
- - Оптимизация бандла
8
- - Автоматизация контента
9
- - Динамический контент
10
- - Intlayer
11
- - Next.js
12
- - JavaScript
13
- - React
14
- slugs:
15
- - doc
16
- - concept
17
- - bundle-optimization
18
- history:
19
- - version: 6.0.0
20
- date: 2025-11-25
21
- changes: "Инициализация истории"
22
- ---
23
-
24
- # Оптимизация размера и производительности i18n-бандла
25
-
26
- Одна из самых распространённых проблем традиционных решений i18n, основанных на JSON-файлах,, это управление размером контента. Если разработчики не разделяют контент вручную по namespace, пользователи часто загружают переводы для каждой страницы и, возможно, для каждого языка, чтобы просмотреть всего одну страницу.
27
-
28
- Например, приложение с 10 страницами, переведёнными на 10 языков, может привести к тому, что пользователь загрузит контент 100 страниц, хотя ему нужна только **одна** (текущая страница на текущем языке). Это приводит к излишнему расходу трафика и замедлению времени загрузки.
29
-
30
- > Для обнаружения этой проблемы можно использовать анализаторы бандлов, такие как `rollup-plugin-visualizer` (vite), `@next/bundle-analyzer` (next.js) или `webpack-bundle-analyzer` (React CRA / Angular / и др.).
31
-
32
- **Intlayer решает эту проблему за счёт оптимизации на этапе сборки.** Он анализирует ваш код, чтобы определить, какие словари действительно используются в каждом компоненте, и внедряет в бандл только необходимый контент.
33
-
34
- ## Содержание
35
-
36
- <TOC />
37
-
38
- ## Как это работает
39
-
40
- Intlayer использует **подход на уровне компонентов**. В отличие от глобальных JSON-файлов, ваш контент определяется рядом с компонентами или внутри них. Во время процесса сборки Intlayer:
41
-
42
- 1. **Анализирует** ваш код, чтобы найти вызовы `useIntlayer`.
43
- 2. **Формирует** соответствующий словарь с контентом.
44
- 3. **Заменяет** вызов `useIntlayer` на оптимизированный код в соответствии с вашей конфигурацией.
45
-
46
- Это гарантирует, что:
47
-
48
- - Если компонент не импортируется, его контент не включается в бандл (удаление неиспользуемого кода).
49
- - Если компонент загружается лениво, его контент также загружается лениво.
50
-
51
- ## Настройка по платформам
52
-
53
- ### Next.js
54
-
55
- Next.js требует плагин `@intlayer/swc` для обработки трансформации, так как Next.js использует SWC для сборки.
56
-
57
- > Этот плагин установлен по умолчанию, поскольку плагины SWC для Next.js всё ещё находятся в экспериментальной стадии. В будущем это может измениться.
58
-
59
- ### Vite
60
-
61
- Vite использует плагин `@intlayer/babel`, который включён как зависимость в `vite-intlayer`. Оптимизация включена по умолчанию.
62
-
63
- ### Webpack
64
-
65
- Чтобы включить оптимизацию бандла с Intlayer в Webpack, необходимо установить и настроить соответствующий плагин Babel (`@intlayer/babel`) или SWC (`@intlayer/swc`).
66
-
67
- ### Expo / Lynx
68
-
69
- Оптимизация бандла **пока недоступна** для этой платформы. Поддержка будет добавлена в будущих релизах.
70
-
71
- ## Конфигурация
72
-
73
- Вы можете управлять тем, как Intlayer оптимизирует ваш бандл, через свойство `build` в вашем файле `intlayer.config.ts`.
74
-
75
- ```typescript fileName="intlayer.config.ts"
76
- import { Locales, type IntlayerConfig } from "intlayer";
77
-
78
- const config: IntlayerConfig = {
79
- internationalization: {
80
- locales: [Locales.ENGLISH, Locales.FRENCH], // локали
81
- defaultLocale: Locales.ENGLISH, // локаль по умолчанию
82
- },
83
- dictionary: {},
84
- build: {
85
- optimize: true, // включить оптимизацию
86
- importMode: "static", // или 'dynamic' - режим импорта
87
- traversePattern: ["**/*.{js,ts,mjs,cjs,jsx,tsx}", "!**/node_modules/**"], // шаблоны обхода файлов
88
- },
89
- };
90
-
91
- export default config;
92
- ```
93
-
94
- > Рекомендуется сохранять значение по умолчанию для `optimize` в большинстве случаев.
95
-
96
- > Подробнее о конфигурации смотрите в документации: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md)
97
-
98
- ### Опции сборки
99
-
100
- Следующие параметры доступны в объекте конфигурации `build`:
101
-
102
- | Свойство | Тип | Значение по умолчанию | Описание |
103
- | :-------------------- | :------------------------------- | :------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
104
- | **`optimize`** | `boolean` | `undefined` | Управляет включением оптимизации сборки. Если `true`, Intlayer заменяет вызовы словарей на оптимизированные инъекции. Если `false`, оптимизация отключена. В идеале устанавливать `true` в продакшене. |
105
- | **`importMode`** | `'static' , 'dynamic' , 'fetch'` | `'static'` | **Deprecated**: Use `dictionary.importMode` instead. Определяет способ загрузки словарей (подробнее см. ниже). |
106
- | **`traversePattern`** | `string[]` | `['**/*.{js,ts,jsx,tsx}', ...]` | Глобальные шаблоны, определяющие, какие файлы Intlayer должен сканировать для оптимизации. Используйте это, чтобы исключить несвязанные файлы и ускорить сборку. |
107
- | **`outputFormat`** | `'esm', 'cjs'` | `'esm', 'cjs'` | Управляет форматом вывода собранных словарей. |
108
-
109
- ## Режимы импорта
110
-
111
- Настройка `importMode` определяет, как содержимое словаря внедряется в ваш компонент.
112
-
113
- ### 1. Статический режим (`default`)
114
-
115
- В статическом режиме Intlayer заменяет `useIntlayer` на `useDictionary` и внедряет словарь непосредственно в JavaScript-бандл.
116
-
117
- - **Преимущества:** Мгновенный рендеринг (синхронный), отсутствие дополнительных сетевых запросов во время гидратации.
118
- - **Недостатки:** Бандл включает переводы для **всех** доступных языков для данного компонента.
119
- - **Лучше всего подходит для:** Одностраничных приложений (SPA).
120
-
121
- **Пример преобразованного кода:**
122
-
123
- ```tsx
124
- // Ваш код
125
- const content = useIntlayer("my-key");
126
-
127
- // Оптимизированный код (Статический)
128
- const content = useDictionary({
129
- key: "my-key",
130
- content: {
131
- nodeType: "translation",
132
- translation: {
133
- en: "My title",
134
- fr: "Mon titre",
135
- },
136
- },
137
- });
138
- ```
139
-
140
- ### 2. Динамический режим
141
-
142
- В динамическом режиме Intlayer заменяет `useIntlayer` на `useDictionaryAsync`. Это использует `import()` (механизм, похожий на Suspense) для ленивой загрузки JSON-файла конкретно для текущей локали.
143
-
144
- - **Преимущества:** **Tree shaking на уровне локали.** Пользователь, просматривающий английскую версию, загрузит _только_ английский словарь. Французский словарь никогда не загружается.
145
- - **Недостатки:** Во время гидратации для каждого компонента выполняется сетевой запрос (загрузка ассета).
146
- - **Лучше всего подходит для:** Больших текстовых блоков, статей или приложений, поддерживающих множество языков, где критичен размер бандла.
147
-
148
- **Пример преобразованного кода:**
149
-
150
- ```tsx
151
- // Ваш код
152
- const content = useIntlayer("my-key");
153
-
154
- // Оптимизированный код (Динамический)
155
- const content = useDictionaryAsync({
156
- en: () =>
157
- import(".intlayer/dynamic_dictionary/my-key/en.json").then(
158
- (mod) => mod.default
159
- ),
160
- fr: () =>
161
- import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
162
- (mod) => mod.default
163
- ),
164
- });
165
- ```
166
-
167
- > При использовании `importMode: 'dynamic'`, если на одной странице 100 компонентов используют `useIntlayer`, браузер попытается выполнить 100 отдельных запросов. Чтобы избежать такой "водопадной" загрузки, группируйте контент в меньшее количество файлов `.content` (например, один словарь на секцию страницы), а не по одному на каждый атомарный компонент.
168
-
169
- > В настоящее время `importMode: 'dynamic'` не полностью поддерживается для Vue и Svelte. Рекомендуется использовать `importMode: 'static'` для этих фреймворков до выхода дальнейших обновлений.
170
-
171
- ### 3. Live Mode
172
-
173
- Ведет себя аналогично динамическому режиму, но сначала пытается получить словари через Intlayer Live Sync API. Если вызов API не удался или контент не помечен для живых обновлений, происходит возврат к динамическому импорту.
174
-
175
- > Подробнее смотрите в документации CMS: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md)
176
-
177
- ## Сводка: Статический vs Динамический
178
-
179
- | Особенность | Статический режим | Динамический режим |
180
- | :--------------------- | :----------------------------------------- | :-------------------------------------------------- |
181
- | **Размер JS-бандла** | Больше (включает все языки для компонента) | Самый маленький (только код, без контента) |
182
- | **Начальная загрузка** | Мгновенно (контент включен в бандл) | Небольшая задержка (загрузка JSON) |
183
- | **Сетевые запросы** | 0 дополнительных запросов | 1 запрос на каждый словарь |
184
- | **Tree Shaking** | На уровне компонента | На уровне компонента + локали |
185
- | **Лучшее применение** | UI-компоненты, небольшие приложения | Страницы с большим количеством текста, много языков |
@@ -1,184 +0,0 @@
1
- ---
2
- createdAt: 2025-11-25
3
- updatedAt: 2025-11-25
4
- title: i18n Paket Boyutu ve Performansını Optimize Etme
5
- description: Uluslararasılaştırma (i18n) içeriğini optimize ederek uygulama paket boyutunu azaltın. Intlayer ile sözlüklerde tree shaking ve lazy loading nasıl kullanılır öğrenin.
6
- keywords:
7
- - Paket Optimizasyonu
8
- - İçerik Otomasyonu
9
- - Dinamik İçerik
10
- - Intlayer
11
- - Next.js
12
- - JavaScript
13
- - React
14
- slugs:
15
- - doc
16
- - concept
17
- - bundle-optimization
18
- history:
19
- - version: 6.0.0
20
- date: 2025-11-25
21
- changes: "Başlangıç geçmişi"
22
- ---
23
-
24
- # i18n Paket Boyutu ve Performansını Optimize Etme
25
-
26
- JSON dosyalarına dayanan geleneksel i18n çözümlerinde en yaygın zorluklardan biri içerik boyutunu yönetmektir. Geliştiriciler içeriği manuel olarak namespace'lere ayırmazsa, kullanıcılar genellikle tek bir sayfayı görüntülemek için her sayfanın ve potansiyel olarak her dilin çevirilerini indirirler.
27
-
28
- Örneğin, 10 sayfadan oluşan ve 10 dile çevrilmiş bir uygulamada, kullanıcı yalnızca **bir** sayfaya (mevcut dildeki mevcut sayfa) ihtiyaç duysa bile, 100 sayfanın içeriğini indirmek zorunda kalabilir. Bu durum, gereksiz bant genişliği kullanımına ve daha yavaş yükleme sürelerine yol açar.
29
-
30
- > Bunu tespit etmek için `rollup-plugin-visualizer` (vite), `@next/bundle-analyzer` (next.js) veya `webpack-bundle-analyzer` (React CRA / Angular / vb.) gibi bundle analizörleri kullanabilirsiniz.
31
-
32
- **Intlayer bu sorunu derleme zamanı optimizasyonu ile çözer.** Kodunuzu analiz ederek her bileşen için hangi sözlüklerin gerçekten kullanıldığını tespit eder ve yalnızca gerekli içeriği paketinizin içine yeniden enjekte eder.
33
-
34
- ## İçindekiler
35
-
36
- <TOC />
37
-
38
- ## Nasıl Çalışır
39
-
40
- Intlayer, **bileşen başına yaklaşım** kullanır. Küresel JSON dosyalarının aksine, içeriğiniz bileşenlerinizin yanında veya içinde tanımlanır. Derleme sürecinde Intlayer:
41
-
42
- 1. `useIntlayer` çağrılarını bulmak için kodunuzu **analiz eder**.
43
- 2. İlgili sözlük içeriğini **oluşturur**.
44
- 3. `useIntlayer` çağrısını yapılandırmanıza bağlı olarak optimize edilmiş kodla **değiştirir**.
45
-
46
- Bu, şunları garanti eder:
47
-
48
- - Bir bileşen içe aktarılmamışsa, içeriği pakete dahil edilmez (Ölü Kod Eliminasyonu).
49
- - Bir bileşen tembel yükleniyorsa, içeriği de tembel yüklenir.
50
-
51
- ## Platforma Göre Kurulum
52
-
53
- ### Next.js
54
-
55
- Next.js, dönüşümü yönetmek için `@intlayer/swc` eklentisini gerektirir, çünkü Next.js derlemeler için SWC kullanır.
56
-
57
- > Bu eklenti varsayılan olarak yüklüdür çünkü SWC eklentileri Next.js için hâlâ deneysel durumdadır. Gelecekte değişebilir.
58
-
59
- ### Vite
60
-
61
- Vite, `vite-intlayer` bağımlılığı olarak dahil edilen `@intlayer/babel` eklentisini kullanır. Optimizasyon varsayılan olarak etkinleştirilmiştir.
62
-
63
- ### Webpack
64
-
65
- Webpack üzerinde Intlayer ile paket optimizasyonunu etkinleştirmek için uygun Babel (`@intlayer/babel`) veya SWC (`@intlayer/swc`) eklentisini yükleyip yapılandırmanız gerekir.
66
-
67
- ### Expo / Lynx
68
-
69
- Bu platform için paket optimizasyonu **henüz mevcut değildir**. Destek gelecekteki bir sürümde eklenecektir.
70
-
71
- ## Yapılandırma
72
-
73
- Intlayer'ın paket optimizasyonunu `intlayer.config.ts` dosyanızdaki `build` özelliği aracılığıyla kontrol edebilirsiniz.
74
-
75
- ```typescript fileName="intlayer.config.ts"
76
- import { Locales, type IntlayerConfig } from "intlayer";
77
-
78
- const config: IntlayerConfig = {
79
- internationalization: {
80
- locales: [Locales.ENGLISH, Locales.FRENCH],
81
- defaultLocale: Locales.ENGLISH,
82
- },
83
- dictionary: {},
84
- build: {
85
- optimize: true,
86
- traversePattern: ["**/*.{js,ts,mjs,cjs,jsx,tsx}", "!**/node_modules/**"],
87
- },
88
- };
89
-
90
- export default config;
91
- ```
92
-
93
- > `optimize` için varsayılan seçeneğin korunması çoğu durumda önerilir.
94
-
95
- > Daha fazla detay için doküman yapılandırmasına bakınız: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md)
96
-
97
- ### Build Seçenekleri
98
-
99
- `build` yapılandırma nesnesi altında aşağıdaki seçenekler mevcuttur:
100
-
101
- | Özellik | Tür | Varsayılan | Açıklama |
102
- | :-------------------- | :------------------------------- | :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
103
- | **`optimize`** | `boolean` | `undefined` | Derleme optimizasyonunun etkin olup olmadığını kontrol eder. `true` ise, Intlayer sözlük çağrılarını optimize edilmiş enjeksiyonlarla değiştirir. `false` ise optimizasyon devre dışı bırakılır. Üretimde ideal olarak `true` olarak ayarlanmalıdır. |
104
- | **`importMode`** | `'static' , 'dynamic' , 'fetch'` | `'static'` | **Deprecated**: Use `dictionary.importMode` instead. Sözlüklerin nasıl yükleneceğini belirler (detaylar aşağıda). |
105
- | **`traversePattern`** | `string[]` | `['**/*.{js,ts,jsx,tsx}', ...]` | Intlayer'ın optimizasyon için taraması gereken dosyaları tanımlayan glob desenleri. İlgisiz dosyaları hariç tutmak ve derlemeleri hızlandırmak için bunu kullanın. |
106
- | **`outputFormat`** | `'esm', 'cjs'` | `'esm', 'cjs'` | Oluşturulan sözlüklerin çıktı formatını kontrol eder. |
107
-
108
- ## İçe Aktarım Modları
109
-
110
- `importMode` ayarı, sözlük içeriğinin bileşeninize nasıl enjekte edileceğini belirler.
111
-
112
- ### 1. Statik Mod (`default`)
113
-
114
- Statik modda, Intlayer `useIntlayer`'ı `useDictionary` ile değiştirir ve sözlüğü doğrudan JavaScript paketine enjekte eder.
115
-
116
- - **Avantajlar:** Anında render (eşzamanlı), hydration sırasında ekstra ağ isteği yok.
117
- - **Dezavantajlar:** Paket, o belirli bileşen için mevcut **tüm** dillerin çevirilerini içerir.
118
- - **En uygun:** Tek Sayfa Uygulamaları (SPA).
119
-
120
- **Dönüştürülmüş Kod Örneği:**
121
-
122
- ```tsx
123
- // Kodunuz
124
- const content = useIntlayer("my-key");
125
-
126
- // Optimize edilmiş kod (Statik)
127
- const content = useDictionary({
128
- key: "my-key",
129
- content: {
130
- nodeType: "translation",
131
- translation: {
132
- en: "My title",
133
- fr: "Mon titre",
134
- },
135
- },
136
- });
137
- ```
138
-
139
- ### 2. Dinamik Mod
140
-
141
- Dinamik modda, Intlayer `useIntlayer`'ı `useDictionaryAsync` ile değiştirir. Bu, `import()` (Suspense benzeri mekanizma) kullanarak mevcut yerel ayar için JSON'u tembel yükler.
142
-
143
- - **Avantajlar:** **Yerel düzeyde tree shaking.** İngilizce sürümü görüntüleyen bir kullanıcı sadece İngilizce sözlüğü indirir. Fransızca sözlük asla yüklenmez.
144
- - **Dezavantajlar:** Hydration sırasında her bileşen için bir ağ isteği (varlık alma) tetikler.
145
- - **En uygun:** Paket boyutunun kritik olduğu, çok sayıda dili destekleyen büyük metin blokları, makaleler veya uygulamalar için.
146
-
147
- **Dönüştürülmüş Kod Örneği:**
148
-
149
- ```tsx
150
- // Kodunuz
151
- const content = useIntlayer("my-key");
152
-
153
- // Optimize edilmiş kod (Dinamik)
154
- const content = useDictionaryAsync({
155
- en: () =>
156
- import(".intlayer/dynamic_dictionary/my-key/en.json").then(
157
- (mod) => mod.default
158
- ),
159
- fr: () =>
160
- import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
161
- (mod) => mod.default
162
- ),
163
- });
164
- ```
165
-
166
- > `importMode: 'dynamic'` kullanıldığında, tek bir sayfada `useIntlayer` kullanan 100 bileşen varsa, tarayıcı 100 ayrı fetch denemesi yapacaktır. Bu istek "şelalesi"nden kaçınmak için içeriği daha az sayıda `.content` dosyasına (örneğin, sayfa bölümü başına bir sözlük) gruplayın, atom bileşen başına değil.
167
-
168
- > Şu anda, `importMode: 'dynamic'` Vue ve Svelte için tam olarak desteklenmemektedir. Bu çerçeveler için ek güncellemelere kadar `importMode: 'static'` kullanılması önerilir.
169
-
170
- ### 3. Canlı Mod (Live Mode)
171
-
172
- Dinamik moda benzer şekilde davranır ancak önce sözlükleri Intlayer Live Sync API'den getirmeye çalışır. Eğer API çağrısı başarısız olursa veya içerik canlı güncellemeler için işaretlenmemişse, dinamik import yöntemine geri döner.
173
-
174
- > Daha fazla detay için CMS dokümantasyonuna bakınız: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_CMS.md)
175
-
176
- ## Özet: Statik vs Dinamik
177
-
178
- | Özellik | Statik Mod | Dinamik Mod |
179
- | :------------------ | :------------------------------------------- | :-------------------------------------- |
180
- | **JS Paket Boyutu** | Daha büyük (bileşen için tüm dilleri içerir) | En küçük (sadece kod, içerik yok) |
181
- | **İlk Yükleme** | Anında (İçerik pakette) | Hafif gecikme (JSON çeker) |
182
- | **Ağ İstekleri** | Ekstra 0 istek | Her sözlük için 1 istek |
183
- | **Tree Shaking** | Bileşen seviyesi | Bileşen seviyesi + Dil seviyesi |
184
- | **En İyi Kullanım** | UI Bileşenleri, Küçük Uygulamalar | Çok metin içeren sayfalar, Çoklu Diller |
@@ -1,186 +0,0 @@
1
- ---
2
- createdAt: 2025-11-25
3
- updatedAt: 2025-11-25
4
- title: Оптимізація розміру бандла та продуктивності i18n
5
- description: Зменшіть розмір бандла застосунку, оптимізуючи контент інтернаціоналізації (i18n). Дізнайтесь, як використовувати tree shaking та lazy loading для словників з Intlayer.
6
- keywords:
7
- - Оптимізація bundle
8
- - Автоматизація контенту
9
- - Динамічний контент
10
- - Intlayer
11
- - Next.js
12
- - JavaScript
13
- - React
14
- slugs:
15
- - doc
16
- - concept
17
- - bundle-optimization
18
- history:
19
- - version: 6.0.0
20
- date: 2025-11-25
21
- changes: "Init history"
22
- ---
23
-
24
- # Оптимізація розміру бандла та продуктивності i18n
25
-
26
- Одна з найпоширеніших проблем традиційних i18n-рішень, що базуються на JSON-файлах, це керування розміром контенту. Якщо розробники не розділяють контент вручну по неймспейсах, користувачі часто в кінцевому підсумку завантажують переклади для всіх сторінок і, можливо, для всіх мов лише для перегляду однієї сторінки.
27
-
28
- Наприклад, застосунок з 10 сторінками, перекладеними на 10 мов, може призвести до того, що користувач завантажує контент 100 сторінок, хоча йому потрібна лише **одна** (поточна сторінка поточною мовою). Це призводить до марної витрати трафіку та повільнішого завантаження.
29
-
30
- > Щоб виявити це, ви можете використовувати аналізатор бандлу, такий як `rollup-plugin-visualizer` (vite), `@next/bundle-analyzer` (next.js) або `webpack-bundle-analyzer` (React CRA / Angular / тощо).
31
-
32
- **Intlayer вирішує цю проблему через оптимізацію під час збірки.** Він аналізує ваш код, щоб визначити, які словники фактично використовуються для кожного компонента, і повторно вбудовує в бандл лише необхідний вміст.
33
-
34
- ## Зміст
35
-
36
- <TOC />
37
-
38
- ## Як це працює
39
-
40
- Intlayer використовує **підхід на рівні компонентів**. На відміну від глобальних JSON-файлів, ваш вміст визначається поруч із компонентами або всередині них. Під час процесу збірки Intlayer:
41
-
42
- 1. **Аналізує** ваш код, щоб знайти виклики `useIntlayer`.
43
- 2. **Формує** відповідний вміст словників.
44
- 3. **Замінює** виклик `useIntlayer` на оптимізований код відповідно до вашої конфігурації.
45
-
46
- Це гарантує, що:
47
-
48
- - Якщо компонент не імпортується, його вміст не включається до бандла (видалення мертвого коду. Dead Code Elimination).
49
- - Якщо компонент завантажується lazy-loaded, його вміст також завантажується lazy-loaded.
50
-
51
- ## Налаштування за платформою
52
-
53
- ### Next.js
54
-
55
- Next.js вимагає плагін `@intlayer/swc` для обробки трансформації, оскільки Next.js використовує SWC для збірок.
56
-
57
- > Цей плагін встановлено за замовчуванням, оскільки SWC-плагіни досі експериментальні для Next.js. Це може змінитися в майбутньому.
58
-
59
- ### Vite
60
-
61
- Vite використовує плагін `@intlayer/babel`, який включений як залежність `vite-intlayer`. Оптимізація увімкнена за замовчуванням.
62
-
63
- ### Webpack
64
-
65
- Щоб увімкнути оптимізацію бандла з Intlayer на Webpack, потрібно встановити та налаштувати відповідний плагін Babel (`@intlayer/babel`) або SWC (`@intlayer/swc`).
66
-
67
- ### Expo / Lynx
68
-
69
- Оптимізація бандла **ще недоступна** для цієї платформи. Підтримка буде додана в майбутньому релізі.
70
-
71
- ## Конфігурація
72
-
73
- Ви можете контролювати, як Intlayer оптимізує ваш бандл через властивість `build` у файлі `intlayer.config.ts`.
74
-
75
- ```typescript fileName="intlayer.config.ts"
76
- import { Locales, type IntlayerConfig } from "intlayer";
77
-
78
- const config: IntlayerConfig = {
79
- internationalization: {
80
- locales: [Locales.ENGLISH, Locales.FRENCH],
81
- defaultLocale: Locales.ENGLISH,
82
- },
83
- dictionary: {},
84
- build: {
85
- optimize: true,
86
- importMode: "static", // або 'dynamic'
87
- traversePattern: ["**/*.{js,ts,mjs,cjs,jsx,tsx}", "!**/node_modules/**"],
88
- },
89
- };
90
-
91
- export default config;
92
- ```
93
-
94
- > У більшості випадків рекомендовано залишати опцію `optimize` за замовчуванням.
95
-
96
- > Див. документацію з конфігурації для більш детальної інформації: [Конфігурація](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
97
-
98
- ### Параметри збірки
99
-
100
- Наступні параметри доступні в об'єкті конфігурації `build`:
101
-
102
- | Властивість | Тип | Значення за замовчуванням | Опис |
103
- | :-------------------- | :------------------------------- | :------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
104
- | **`optimize`** | `boolean` | `undefined` | Керує тим, чи увімкнена оптимізація під час збірки. Якщо `true`, Intlayer замінює виклики словників на оптимізовані інжекти. Якщо `false`, оптимізація вимкнена. Рекомендовано встановлювати `true` у production. |
105
- | **`importMode`** | `'static' , 'dynamic' , 'fetch'` | `'static'` | **Deprecated**: Use `dictionary.importMode` instead. Визначає, як завантажуються словники (див. деталі нижче). |
106
- | **`traversePattern`** | `string[]` | `['**/*.{js,ts,jsx,tsx}', ...]` | Glob-шаблони, що визначають, які файли Intlayer має сканувати для оптимізації. Використовуйте це, щоб виключати несуміжні файли та прискорити збірку. |
107
- | **`outputFormat`** | `'esm', 'cjs'` | `'esm', 'cjs'` | Керує форматом згенерованих словників. |
108
-
109
- ## Режими імпорту
110
-
111
- Налаштування `importMode` визначає, як вміст словника вставляється у ваш компонент.
112
-
113
- ### 1. Статичний режим (`default`)
114
-
115
- У статичному режимі Intlayer замінює `useIntlayer` на `useDictionary` і вбудовує словник безпосередньо в JavaScript-бандл.
116
-
117
- - **Переваги:** Миттєвий рендеринг (синхронно), відсутність додаткових мережевих запитів під час гідратації.
118
- - **Недоліки:** Бандл містить переклади для **усіх** доступних мов для цього конкретного компонента.
119
- - **Найкраще для:** односторінкових додатків (SPA).
120
-
121
- **Приклад трансформованого коду:**
122
-
123
- ```tsx
124
- // Ваш код
125
- const content = useIntlayer("my-key");
126
-
127
- // Оптимізований код (Статичний)
128
- const content = useDictionary({
129
- key: "my-key",
130
- content: {
131
- nodeType: "translation",
132
- translation: {
133
- uk: "Мій заголовок",
134
- en: "My title",
135
- fr: "Mon titre",
136
- },
137
- },
138
- });
139
- ```
140
-
141
- ### 2. Динамічний режим
142
-
143
- У динамічному режимі Intlayer замінює `useIntlayer` на `useDictionaryAsync`. Це використовує `import()` (механізм, схожий на Suspense) для лінивого підвантаження саме JSON для поточної локалі.
144
-
145
- - **Плюси:** **Tree-shaking на рівні локалі.** Користувач, який переглядає англійську версію, завантажить _лише_ англійський словник. Французький словник ніколи не завантажується.
146
- - **Мінуси:** Під час гідратації ініціюється мережевий запит (завантаження ресурсу) для кожного компонента.
147
- - **Кращий вибір для:** Великих текстових блоків, статей або застосунків з підтримкою багатьох мов, де розмір бандла критично важливий.
148
-
149
- **Приклад трансформованого коду:**
150
-
151
- ```tsx
152
- // Ваш код
153
- const content = useIntlayer("my-key");
154
-
155
- // Оптимізований код (Динамічний)
156
- const content = useDictionaryAsync({
157
- en: () =>
158
- import(".intlayer/dynamic_dictionary/my-key/en.json").then(
159
- (mod) => mod.default
160
- ),
161
- fr: () =>
162
- import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
163
- (mod) => mod.default
164
- ),
165
- });
166
- ```
167
-
168
- > Коли ви використовуєте `importMode: 'dynamic'`, якщо на одній сторінці 100 компонентів використовують `useIntlayer`, браузер спробує виконати 100 окремих запитів. Щоб уникнути цього «водоспаду» запитів, групуйте контент у меншу кількість `.content` файлів (наприклад, по одному словнику на секцію сторінки), замість одного файлу на кожен атом-компонент.
169
-
170
- > Наразі `importMode: 'dynamic'` не повністю підтримується для Vue та Svelte. Рекомендується використовувати `importMode: 'static'` для цих фреймворків до наступних оновлень.
171
-
172
- ### 3. Живий режим
173
-
174
- Працює аналогічно динамічному режиму, але спочатку намагається отримати словники з Intlayer Live Sync API. Якщо виклик API не вдасться або вміст не позначено для живих оновлень, виконується відкат до динамічного імпорту.
175
-
176
- > Див. документацію CMS для детальнішої інформації: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md)
177
-
178
- ## Підсумок: Статичний vs Динамічний
179
-
180
- | Особливість | Статичний режим | Динамічний режим |
181
- | :------------------------- | :---------------------------------------- | :---------------------------------------------- |
182
- | **Розмір JS-бандла** | Більший (включає всі мови для компонента) | Найменший (тільки код, без контенту) |
183
- | **Початкове завантаження** | Миттєво (вміст у bundle) | Невелика затримка (завантажує JSON) |
184
- | **Мережеві запити** | 0 додаткових запитів | 1 запит на словник |
185
- | **Tree Shaking** | На рівні компонентів | На рівні компонентів + на рівні локалі |
186
- | **Найкраще використання** | UI Components, невеликі додатки | Сторінки з великою кількістю тексту, багато мов |