@intlayer/docs 7.5.11 → 7.5.13

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 (417) hide show
  1. package/blog/ar/intlayer_with_i18next.md +0 -2
  2. package/blog/ar/intlayer_with_next-i18next.md +0 -2
  3. package/blog/ar/intlayer_with_react-i18next.md +0 -2
  4. package/blog/de/intlayer_with_i18next.md +0 -45
  5. package/blog/de/intlayer_with_next-i18next.md +0 -46
  6. package/blog/de/intlayer_with_react-i18next.md +0 -2
  7. package/blog/en/intlayer_with_i18next.md +0 -46
  8. package/blog/en/intlayer_with_next-i18next.md +0 -48
  9. package/blog/en/intlayer_with_next-intl.md +0 -44
  10. package/blog/en/intlayer_with_react-i18next.md +0 -44
  11. package/blog/en/intlayer_with_react-intl.md +0 -42
  12. package/blog/en/intlayer_with_vue-i18n.md +0 -44
  13. package/blog/en-GB/intlayer_with_i18next.md +0 -45
  14. package/blog/en-GB/intlayer_with_next-i18next.md +0 -47
  15. package/blog/en-GB/intlayer_with_next-intl.md +0 -42
  16. package/blog/en-GB/intlayer_with_react-i18next.md +0 -43
  17. package/blog/en-GB/intlayer_with_react-intl.md +0 -42
  18. package/blog/en-GB/intlayer_with_vue-i18n.md +0 -46
  19. package/blog/es/intlayer_with_i18next.md +0 -45
  20. package/blog/es/intlayer_with_next-i18next.md +0 -47
  21. package/blog/es/intlayer_with_next-intl.md +0 -42
  22. package/blog/es/intlayer_with_react-i18next.md +0 -43
  23. package/blog/es/intlayer_with_react-intl.md +0 -42
  24. package/blog/es/intlayer_with_vue-i18n.md +0 -46
  25. package/blog/fr/intlayer_with_i18next.md +0 -45
  26. package/blog/fr/intlayer_with_next-i18next.md +0 -47
  27. package/blog/fr/intlayer_with_next-intl.md +0 -42
  28. package/blog/fr/intlayer_with_react-i18next.md +0 -43
  29. package/blog/fr/intlayer_with_react-intl.md +0 -42
  30. package/blog/fr/intlayer_with_vue-i18n.md +0 -46
  31. package/blog/hi/intlayer_with_i18next.md +0 -2
  32. package/blog/hi/intlayer_with_next-i18next.md +0 -2
  33. package/blog/hi/intlayer_with_react-i18next.md +0 -2
  34. package/blog/id/intlayer_with_i18next.md +0 -2
  35. package/blog/id/intlayer_with_next-i18next.md +0 -2
  36. package/blog/id/intlayer_with_react-i18next.md +0 -2
  37. package/blog/it/intlayer_with_i18next.md +0 -2
  38. package/blog/it/intlayer_with_next-i18next.md +0 -2
  39. package/blog/it/intlayer_with_react-i18next.md +0 -2
  40. package/blog/ja/intlayer_with_i18next.md +0 -45
  41. package/blog/ja/intlayer_with_next-i18next.md +0 -46
  42. package/blog/ja/intlayer_with_next-intl.md +0 -42
  43. package/blog/ja/intlayer_with_react-i18next.md +0 -42
  44. package/blog/ja/intlayer_with_react-intl.md +0 -42
  45. package/blog/ja/intlayer_with_vue-i18n.md +0 -46
  46. package/blog/ko/intlayer_with_i18next.md +0 -2
  47. package/blog/ko/intlayer_with_next-i18next.md +0 -2
  48. package/blog/ko/intlayer_with_react-i18next.md +0 -1
  49. package/blog/pl/intlayer_with_i18next.md +0 -45
  50. package/blog/pl/intlayer_with_next-i18next.md +0 -46
  51. package/blog/pl/intlayer_with_next-intl.md +0 -42
  52. package/blog/pl/intlayer_with_react-i18next.md +0 -43
  53. package/blog/pl/intlayer_with_react-intl.md +0 -42
  54. package/blog/pl/intlayer_with_vue-i18n.md +0 -46
  55. package/blog/pt/intlayer_with_i18next.md +0 -2
  56. package/blog/pt/intlayer_with_next-i18next.md +0 -2
  57. package/blog/pt/intlayer_with_react-i18next.md +0 -2
  58. package/blog/ru/intlayer_with_i18next.md +0 -45
  59. package/blog/ru/intlayer_with_next-i18next.md +0 -47
  60. package/blog/ru/intlayer_with_next-intl.md +0 -42
  61. package/blog/ru/intlayer_with_react-i18next.md +0 -43
  62. package/blog/ru/intlayer_with_react-intl.md +0 -42
  63. package/blog/ru/intlayer_with_vue-i18n.md +0 -46
  64. package/blog/tr/intlayer_with_i18next.md +0 -2
  65. package/blog/tr/intlayer_with_next-i18next.md +0 -1
  66. package/blog/tr/intlayer_with_react-i18next.md +0 -2
  67. package/blog/uk/compiler_vs_declarative_i18n.md +224 -0
  68. package/blog/uk/i18n_using_next-i18next.md +1086 -0
  69. package/blog/uk/i18n_using_next-intl.md +760 -0
  70. package/blog/uk/index.md +69 -0
  71. package/blog/uk/internationalization_and_SEO.md +273 -0
  72. package/blog/uk/intlayer_with_i18next.md +211 -0
  73. package/blog/uk/intlayer_with_next-i18next.md +202 -0
  74. package/blog/uk/intlayer_with_next-intl.md +203 -0
  75. package/blog/uk/intlayer_with_react-i18next.md +200 -0
  76. package/blog/uk/intlayer_with_react-intl.md +202 -0
  77. package/blog/uk/intlayer_with_vue-i18n.md +206 -0
  78. package/blog/uk/l10n_platform_alternative/Lokalise.md +80 -0
  79. package/blog/uk/l10n_platform_alternative/crowdin.md +80 -0
  80. package/blog/uk/l10n_platform_alternative/phrase.md +78 -0
  81. package/blog/uk/list_i18n_technologies/CMS/drupal.md +143 -0
  82. package/blog/uk/list_i18n_technologies/CMS/wix.md +167 -0
  83. package/blog/uk/list_i18n_technologies/CMS/wordpress.md +189 -0
  84. package/blog/uk/list_i18n_technologies/frameworks/angular.md +125 -0
  85. package/blog/uk/list_i18n_technologies/frameworks/flutter.md +128 -0
  86. package/blog/uk/list_i18n_technologies/frameworks/react-native.md +217 -0
  87. package/blog/uk/list_i18n_technologies/frameworks/react.md +155 -0
  88. package/blog/uk/list_i18n_technologies/frameworks/svelte.md +145 -0
  89. package/blog/uk/list_i18n_technologies/frameworks/vue.md +144 -0
  90. package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1499 -0
  91. package/blog/uk/nextjs-multilingual-seo-comparison.md +360 -0
  92. package/blog/uk/rag_powered_documentation_assistant.md +288 -0
  93. package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  94. package/blog/uk/vue-i18n_vs_intlayer.md +279 -0
  95. package/blog/uk/what_is_internationalization.md +167 -0
  96. package/blog/vi/intlayer_with_i18next.md +0 -2
  97. package/blog/vi/intlayer_with_next-i18next.md +0 -2
  98. package/blog/vi/intlayer_with_react-i18next.md +0 -2
  99. package/blog/zh/intlayer_with_i18next.md +0 -2
  100. package/blog/zh/intlayer_with_next-i18next.md +0 -2
  101. package/blog/zh/intlayer_with_react-i18next.md +0 -2
  102. package/blog/zh/intlayer_with_vue-i18n.md +0 -46
  103. package/dist/cjs/generated/blog.entry.cjs +58 -29
  104. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  105. package/dist/cjs/generated/docs.entry.cjs +218 -99
  106. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  107. package/dist/cjs/generated/frequentQuestions.entry.cjs +50 -15
  108. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  109. package/dist/cjs/generated/legal.entry.cjs +4 -2
  110. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  111. package/dist/esm/generated/blog.entry.mjs +58 -29
  112. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  113. package/dist/esm/generated/docs.entry.mjs +218 -99
  114. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  115. package/dist/esm/generated/frequentQuestions.entry.mjs +50 -15
  116. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  117. package/dist/esm/generated/legal.entry.mjs +4 -2
  118. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  119. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  120. package/dist/types/generated/docs.entry.d.ts +1 -0
  121. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  122. package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
  123. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  124. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  125. package/docs/ar/configuration.md +6 -1
  126. package/docs/ar/dictionary/content_file.md +6 -1
  127. package/docs/ar/intlayer_with_next-i18next.md +0 -1
  128. package/docs/ar/intlayer_with_nextjs_14.md +28 -0
  129. package/docs/ar/intlayer_with_nextjs_15.md +28 -0
  130. package/docs/ar/intlayer_with_nextjs_16.md +28 -0
  131. package/docs/ar/intlayer_with_nextjs_no_locale_path.md +1159 -0
  132. package/docs/ar/plugins/sync-json.md +6 -2
  133. package/docs/de/configuration.md +6 -1
  134. package/docs/de/dictionary/content_file.md +6 -1
  135. package/docs/de/intlayer_with_next-i18next.md +0 -1
  136. package/docs/de/intlayer_with_nextjs_14.md +28 -0
  137. package/docs/de/intlayer_with_nextjs_15.md +28 -0
  138. package/docs/de/intlayer_with_nextjs_16.md +28 -0
  139. package/docs/de/intlayer_with_nextjs_no_locale_path.md +1152 -0
  140. package/docs/de/plugins/sync-json.md +6 -2
  141. package/docs/en/configuration.md +6 -1
  142. package/docs/en/dictionary/content_file.md +6 -1
  143. package/docs/en/intlayer_with_next-i18next.md +0 -1
  144. package/docs/en/intlayer_with_nextjs_14.md +28 -0
  145. package/docs/en/intlayer_with_nextjs_15.md +28 -0
  146. package/docs/en/intlayer_with_nextjs_16.md +31 -1
  147. package/docs/en/intlayer_with_nextjs_no_locale_path.md +1132 -0
  148. package/docs/en/plugins/sync-json.md +6 -2
  149. package/docs/en-GB/configuration.md +6 -1
  150. package/docs/en-GB/dictionary/content_file.md +3 -1
  151. package/docs/en-GB/intlayer_with_next-i18next.md +0 -1
  152. package/docs/en-GB/intlayer_with_nextjs_14.md +28 -0
  153. package/docs/en-GB/intlayer_with_nextjs_15.md +28 -0
  154. package/docs/en-GB/intlayer_with_nextjs_16.md +28 -0
  155. package/docs/en-GB/intlayer_with_nextjs_no_locale_path.md +1154 -0
  156. package/docs/en-GB/plugins/sync-json.md +6 -2
  157. package/docs/es/configuration.md +6 -1
  158. package/docs/es/dictionary/content_file.md +6 -1
  159. package/docs/es/intlayer_with_next-i18next.md +0 -1
  160. package/docs/es/intlayer_with_nextjs_14.md +28 -0
  161. package/docs/es/intlayer_with_nextjs_15.md +28 -0
  162. package/docs/es/intlayer_with_nextjs_16.md +28 -0
  163. package/docs/es/intlayer_with_nextjs_no_locale_path.md +1143 -0
  164. package/docs/es/plugins/sync-json.md +6 -2
  165. package/docs/fr/configuration.md +6 -1
  166. package/docs/fr/dictionary/content_file.md +3 -1
  167. package/docs/fr/intlayer_with_next-i18next.md +0 -1
  168. package/docs/fr/intlayer_with_nextjs_14.md +28 -0
  169. package/docs/fr/intlayer_with_nextjs_15.md +28 -0
  170. package/docs/fr/intlayer_with_nextjs_16.md +28 -0
  171. package/docs/fr/intlayer_with_nextjs_no_locale_path.md +1174 -0
  172. package/docs/fr/plugins/sync-json.md +9 -5
  173. package/docs/hi/configuration.md +6 -1
  174. package/docs/hi/dictionary/content_file.md +3 -1
  175. package/docs/hi/intlayer_with_next-i18next.md +0 -1
  176. package/docs/hi/intlayer_with_nextjs_14.md +28 -0
  177. package/docs/hi/intlayer_with_nextjs_15.md +28 -0
  178. package/docs/hi/intlayer_with_nextjs_16.md +28 -0
  179. package/docs/hi/intlayer_with_nextjs_no_locale_path.md +1151 -0
  180. package/docs/hi/plugins/sync-json.md +6 -2
  181. package/docs/id/configuration.md +6 -1
  182. package/docs/id/dictionary/content_file.md +3 -1
  183. package/docs/id/intlayer_with_next-i18next.md +0 -1
  184. package/docs/id/intlayer_with_nextjs_14.md +28 -0
  185. package/docs/id/intlayer_with_nextjs_15.md +28 -0
  186. package/docs/id/intlayer_with_nextjs_16.md +28 -0
  187. package/docs/id/intlayer_with_nextjs_no_locale_path.md +1154 -0
  188. package/docs/id/plugins/sync-json.md +6 -2
  189. package/docs/it/configuration.md +6 -1
  190. package/docs/it/dictionary/content_file.md +3 -1
  191. package/docs/it/intlayer_with_next-i18next.md +0 -1
  192. package/docs/it/intlayer_with_nextjs_14.md +28 -0
  193. package/docs/it/intlayer_with_nextjs_15.md +28 -0
  194. package/docs/it/intlayer_with_nextjs_16.md +28 -0
  195. package/docs/it/intlayer_with_nextjs_no_locale_path.md +1148 -0
  196. package/docs/it/plugins/sync-json.md +6 -2
  197. package/docs/ja/configuration.md +6 -1
  198. package/docs/ja/dictionary/content_file.md +3 -1
  199. package/docs/ja/intlayer_with_next-i18next.md +0 -1
  200. package/docs/ja/intlayer_with_nextjs_14.md +28 -0
  201. package/docs/ja/intlayer_with_nextjs_15.md +28 -0
  202. package/docs/ja/intlayer_with_nextjs_16.md +28 -0
  203. package/docs/ja/intlayer_with_nextjs_no_locale_path.md +1222 -0
  204. package/docs/ja/plugins/sync-json.md +6 -2
  205. package/docs/ko/configuration.md +6 -1
  206. package/docs/ko/dictionary/content_file.md +3 -1
  207. package/docs/ko/intlayer_with_next-i18next.md +0 -1
  208. package/docs/ko/intlayer_with_nextjs_14.md +28 -0
  209. package/docs/ko/intlayer_with_nextjs_15.md +28 -0
  210. package/docs/ko/intlayer_with_nextjs_16.md +28 -0
  211. package/docs/ko/intlayer_with_nextjs_no_locale_path.md +1205 -0
  212. package/docs/ko/plugins/sync-json.md +6 -2
  213. package/docs/pl/configuration.md +3 -1
  214. package/docs/pl/dictionary/content_file.md +3 -1
  215. package/docs/pl/intlayer_with_next-i18next.md +0 -1
  216. package/docs/pl/intlayer_with_nextjs_14.md +28 -0
  217. package/docs/pl/intlayer_with_nextjs_15.md +28 -0
  218. package/docs/pl/intlayer_with_nextjs_16.md +28 -0
  219. package/docs/pl/intlayer_with_nextjs_no_locale_path.md +1149 -0
  220. package/docs/pl/plugins/sync-json.md +6 -2
  221. package/docs/pt/configuration.md +6 -1
  222. package/docs/pt/dictionary/content_file.md +3 -1
  223. package/docs/pt/intlayer_with_next-i18next.md +0 -1
  224. package/docs/pt/intlayer_with_nextjs_14.md +28 -0
  225. package/docs/pt/intlayer_with_nextjs_15.md +28 -0
  226. package/docs/pt/intlayer_with_nextjs_16.md +28 -0
  227. package/docs/pt/intlayer_with_nextjs_no_locale_path.md +1152 -0
  228. package/docs/pt/plugins/sync-json.md +6 -2
  229. package/docs/ru/configuration.md +6 -1
  230. package/docs/ru/dictionary/content_file.md +6 -1
  231. package/docs/ru/intlayer_with_next-i18next.md +0 -1
  232. package/docs/ru/intlayer_with_nextjs_14.md +28 -0
  233. package/docs/ru/intlayer_with_nextjs_15.md +28 -0
  234. package/docs/ru/intlayer_with_nextjs_16.md +28 -0
  235. package/docs/ru/intlayer_with_nextjs_no_locale_path.md +1204 -0
  236. package/docs/ru/plugins/sync-json.md +6 -2
  237. package/docs/tr/configuration.md +6 -1
  238. package/docs/tr/dictionary/content_file.md +3 -1
  239. package/docs/tr/intlayer_with_next-i18next.md +0 -1
  240. package/docs/tr/intlayer_with_nextjs_14.md +28 -0
  241. package/docs/tr/intlayer_with_nextjs_15.md +28 -0
  242. package/docs/tr/intlayer_with_nextjs_16.md +28 -0
  243. package/docs/tr/intlayer_with_nextjs_no_locale_path.md +1159 -0
  244. package/docs/tr/plugins/sync-json.md +6 -2
  245. package/docs/uk/CI_CD.md +198 -0
  246. package/docs/uk/autoFill.md +307 -0
  247. package/docs/uk/bundle_optimization.md +185 -0
  248. package/docs/uk/cli/build.md +64 -0
  249. package/docs/uk/cli/ci.md +137 -0
  250. package/docs/uk/cli/configuration.md +63 -0
  251. package/docs/uk/cli/debug.md +46 -0
  252. package/docs/uk/cli/doc-review.md +43 -0
  253. package/docs/uk/cli/doc-translate.md +132 -0
  254. package/docs/uk/cli/editor.md +28 -0
  255. package/docs/uk/cli/fill.md +130 -0
  256. package/docs/uk/cli/index.md +190 -0
  257. package/docs/uk/cli/init.md +84 -0
  258. package/docs/uk/cli/list.md +90 -0
  259. package/docs/uk/cli/list_projects.md +128 -0
  260. package/docs/uk/cli/live.md +41 -0
  261. package/docs/uk/cli/login.md +157 -0
  262. package/docs/uk/cli/pull.md +78 -0
  263. package/docs/uk/cli/push.md +98 -0
  264. package/docs/uk/cli/sdk.md +71 -0
  265. package/docs/uk/cli/test.md +76 -0
  266. package/docs/uk/cli/transform.md +65 -0
  267. package/docs/uk/cli/version.md +24 -0
  268. package/docs/uk/cli/watch.md +37 -0
  269. package/docs/uk/compiler.md +133 -0
  270. package/docs/uk/component_i18n.md +194 -0
  271. package/docs/uk/configuration.md +742 -0
  272. package/docs/uk/dictionary/condition.md +237 -0
  273. package/docs/uk/dictionary/content_file.md +1134 -0
  274. package/docs/uk/dictionary/enumeration.md +245 -0
  275. package/docs/uk/dictionary/file.md +232 -0
  276. package/docs/uk/dictionary/function_fetching.md +212 -0
  277. package/docs/uk/dictionary/gender.md +273 -0
  278. package/docs/uk/dictionary/insertion.md +187 -0
  279. package/docs/uk/dictionary/markdown.md +383 -0
  280. package/docs/uk/dictionary/nesting.md +273 -0
  281. package/docs/uk/dictionary/translation.md +332 -0
  282. package/docs/uk/formatters.md +595 -0
  283. package/docs/uk/how_works_intlayer.md +256 -0
  284. package/docs/uk/index.md +175 -0
  285. package/docs/uk/interest_of_intlayer.md +297 -0
  286. package/docs/uk/intlayer_CMS.md +569 -0
  287. package/docs/uk/intlayer_visual_editor.md +292 -0
  288. package/docs/uk/intlayer_with_angular.md +710 -0
  289. package/docs/uk/intlayer_with_astro.md +256 -0
  290. package/docs/uk/intlayer_with_create_react_app.md +1258 -0
  291. package/docs/uk/intlayer_with_express.md +429 -0
  292. package/docs/uk/intlayer_with_fastify.md +446 -0
  293. package/docs/uk/intlayer_with_lynx+react.md +548 -0
  294. package/docs/uk/intlayer_with_nestjs.md +283 -0
  295. package/docs/uk/intlayer_with_next-i18next.md +640 -0
  296. package/docs/uk/intlayer_with_next-intl.md +456 -0
  297. package/docs/uk/intlayer_with_nextjs_14.md +1646 -0
  298. package/docs/uk/intlayer_with_nextjs_15.md +1910 -0
  299. package/docs/uk/intlayer_with_nextjs_16.md +1763 -0
  300. package/docs/uk/intlayer_with_nextjs_no_locale_path.md +1159 -0
  301. package/docs/uk/intlayer_with_nextjs_page_router.md +1541 -0
  302. package/docs/uk/intlayer_with_nuxt.md +711 -0
  303. package/docs/uk/intlayer_with_react_native+expo.md +715 -0
  304. package/docs/uk/intlayer_with_react_router_v7.md +600 -0
  305. package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +669 -0
  306. package/docs/uk/intlayer_with_svelte_kit.md +579 -0
  307. package/docs/uk/intlayer_with_tanstack.md +818 -0
  308. package/docs/uk/intlayer_with_vite+preact.md +1748 -0
  309. package/docs/uk/intlayer_with_vite+react.md +1449 -0
  310. package/docs/uk/intlayer_with_vite+solid.md +302 -0
  311. package/docs/uk/intlayer_with_vite+svelte.md +520 -0
  312. package/docs/uk/intlayer_with_vite+vue.md +1113 -0
  313. package/docs/uk/introduction.md +222 -0
  314. package/docs/uk/locale_mapper.md +242 -0
  315. package/docs/uk/mcp_server.md +211 -0
  316. package/docs/uk/packages/express-intlayer/t.md +465 -0
  317. package/docs/uk/packages/intlayer/getConfiguration.md +145 -0
  318. package/docs/uk/packages/intlayer/getEnumeration.md +159 -0
  319. package/docs/uk/packages/intlayer/getHTMLTextDir.md +121 -0
  320. package/docs/uk/packages/intlayer/getLocaleLang.md +81 -0
  321. package/docs/uk/packages/intlayer/getLocaleName.md +135 -0
  322. package/docs/uk/packages/intlayer/getLocalizedUrl.md +338 -0
  323. package/docs/uk/packages/intlayer/getMultilingualUrls.md +359 -0
  324. package/docs/uk/packages/intlayer/getPathWithoutLocale.md +75 -0
  325. package/docs/uk/packages/intlayer/getPrefix.md +213 -0
  326. package/docs/uk/packages/intlayer/getTranslation.md +190 -0
  327. package/docs/uk/packages/intlayer/getTranslationContent.md +189 -0
  328. package/docs/uk/packages/next-intlayer/t.md +365 -0
  329. package/docs/uk/packages/next-intlayer/useDictionary.md +276 -0
  330. package/docs/uk/packages/next-intlayer/useIntlayer.md +263 -0
  331. package/docs/uk/packages/next-intlayer/useLocale.md +166 -0
  332. package/docs/uk/packages/react-intlayer/t.md +311 -0
  333. package/docs/uk/packages/react-intlayer/useDictionary.md +295 -0
  334. package/docs/uk/packages/react-intlayer/useI18n.md +250 -0
  335. package/docs/uk/packages/react-intlayer/useIntlayer.md +251 -0
  336. package/docs/uk/packages/react-intlayer/useLocale.md +210 -0
  337. package/docs/uk/per_locale_file.md +345 -0
  338. package/docs/uk/plugins/sync-json.md +398 -0
  339. package/docs/uk/readme.md +265 -0
  340. package/docs/uk/releases/v6.md +305 -0
  341. package/docs/uk/releases/v7.md +624 -0
  342. package/docs/uk/roadmap.md +346 -0
  343. package/docs/uk/testing.md +204 -0
  344. package/docs/uk/vs_code_extension.md +133 -0
  345. package/docs/vi/configuration.md +6 -1
  346. package/docs/vi/dictionary/content_file.md +6 -1
  347. package/docs/vi/intlayer_with_next-i18next.md +0 -1
  348. package/docs/vi/intlayer_with_nextjs_14.md +28 -0
  349. package/docs/vi/intlayer_with_nextjs_15.md +28 -0
  350. package/docs/vi/intlayer_with_nextjs_16.md +28 -0
  351. package/docs/vi/intlayer_with_nextjs_no_locale_path.md +1151 -0
  352. package/docs/vi/plugins/sync-json.md +6 -2
  353. package/docs/zh/configuration.md +6 -1
  354. package/docs/zh/dictionary/content_file.md +6 -1
  355. package/docs/zh/intlayer_with_next-i18next.md +0 -1
  356. package/docs/zh/intlayer_with_nextjs_14.md +28 -0
  357. package/docs/zh/intlayer_with_nextjs_15.md +28 -0
  358. package/docs/zh/intlayer_with_nextjs_16.md +28 -0
  359. package/docs/zh/intlayer_with_nextjs_no_locale_path.md +1206 -0
  360. package/docs/zh/plugins/sync-json.md +9 -5
  361. package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -1
  362. package/frequent_questions/ar/error-vite-env-only.md +77 -0
  363. package/frequent_questions/de/SSR_Next_no_[locale].md +1 -1
  364. package/frequent_questions/de/error-vite-env-only.md +77 -0
  365. package/frequent_questions/en/SSR_Next_no_[locale].md +1 -1
  366. package/frequent_questions/en/error-vite-env-only.md +77 -0
  367. package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -1
  368. package/frequent_questions/en-GB/error-vite-env-only.md +77 -0
  369. package/frequent_questions/es/SSR_Next_no_[locale].md +1 -1
  370. package/frequent_questions/es/error-vite-env-only.md +76 -0
  371. package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -1
  372. package/frequent_questions/fr/error-vite-env-only.md +77 -0
  373. package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -1
  374. package/frequent_questions/hi/error-vite-env-only.md +77 -0
  375. package/frequent_questions/id/SSR_Next_no_[locale].md +1 -1
  376. package/frequent_questions/id/error-vite-env-only.md +77 -0
  377. package/frequent_questions/it/SSR_Next_no_[locale].md +1 -1
  378. package/frequent_questions/it/error-vite-env-only.md +77 -0
  379. package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -1
  380. package/frequent_questions/ja/error-vite-env-only.md +77 -0
  381. package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -1
  382. package/frequent_questions/ko/error-vite-env-only.md +77 -0
  383. package/frequent_questions/pl/SSR_Next_no_[locale].md +1 -1
  384. package/frequent_questions/pl/error-vite-env-only.md +77 -0
  385. package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -1
  386. package/frequent_questions/pt/error-vite-env-only.md +77 -0
  387. package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -1
  388. package/frequent_questions/ru/error-vite-env-only.md +77 -0
  389. package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -1
  390. package/frequent_questions/tr/error-vite-env-only.md +77 -0
  391. package/frequent_questions/uk/SSR_Next_no_[locale].md +104 -0
  392. package/frequent_questions/uk/array_as_content_declaration.md +72 -0
  393. package/frequent_questions/uk/build_dictionaries.md +58 -0
  394. package/frequent_questions/uk/build_error_CI_CD.md +74 -0
  395. package/frequent_questions/uk/bun_set_up.md +53 -0
  396. package/frequent_questions/uk/customized_locale_list.md +64 -0
  397. package/frequent_questions/uk/domain_routing.md +113 -0
  398. package/frequent_questions/uk/error-vite-env-only.md +77 -0
  399. package/frequent_questions/uk/esbuild_error.md +29 -0
  400. package/frequent_questions/uk/get_locale_cookie.md +142 -0
  401. package/frequent_questions/uk/intlayer_command_undefined.md +155 -0
  402. package/frequent_questions/uk/locale_incorect_in_url.md +73 -0
  403. package/frequent_questions/uk/package_version_error.md +181 -0
  404. package/frequent_questions/uk/static_rendering.md +44 -0
  405. package/frequent_questions/uk/translated_path_url.md +55 -0
  406. package/frequent_questions/uk/unknown_command.md +97 -0
  407. package/frequent_questions/vi/SSR_Next_no_[locale].md +1 -1
  408. package/frequent_questions/vi/error-vite-env-only.md +77 -0
  409. package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -1
  410. package/frequent_questions/zh/error-vite-env-only.md +77 -0
  411. package/legal/uk/privacy_notice.md +83 -0
  412. package/legal/uk/terms_of_service.md +55 -0
  413. package/package.json +6 -6
  414. package/src/generated/blog.entry.ts +29 -0
  415. package/src/generated/docs.entry.ts +119 -0
  416. package/src/generated/frequentQuestions.entry.ts +35 -0
  417. package/src/generated/legal.entry.ts +2 -0
@@ -0,0 +1,167 @@
1
+ ---
2
+ createdAt: 2025-01-16
3
+ updatedAt: 2025-06-29
4
+ title: Що таке інтернаціоналізація (i18n)? Визначення та виклики
5
+ description: Дізнайтеся, чому інтернаціоналізація вашого сайту є важливою. Ознайомтесь з ключовими принципами для підвищення SEO, покращення досвіду користувачів та розширення глобального охоплення.
6
+ keywords:
7
+ - i18n
8
+ - багатомовний
9
+ - SEO
10
+ - Інтернаціоналізація
11
+ - Blog
12
+ - Next.js
13
+ - JavaScript
14
+ - React
15
+ slugs:
16
+ - blog
17
+ - what-is-internationalization
18
+ ---
19
+
20
+ # Що таке інтернаціоналізація (i18n)? Визначення та виклики
21
+
22
+ ![ілюстрація i18n](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18n.webp)
23
+
24
+ ## Розуміння інтернаціоналізації (i18n)
25
+
26
+ **Інтернаціоналізація**, часто скорочено як **i18n**, — це процес проєктування та підготовки застосунку для підтримки кількох мов, культур і регіональних конвенцій **без** значних змін у кодовій базі. Назва i18n походить від того, що між буквами **i** та **n** у слові "internationalization" є 18 літер.
27
+
28
+ ## Чому i18n важливий
29
+
30
+ ### SEO
31
+
32
+ Інтернаціоналізація відіграє критичну роль у покращенні SEO вебсайту. Пошукові системи, такі як Google і Bing, аналізують мову та культурну релевантність вашого контенту для визначення його позицій у видачі. Налаштувавши сайт для підтримки кількох мов і регіональних форматів, ви можете значно підвищити його помітність у результатах пошуку. Це не лише залучає ширшу аудиторію, а й допомагає сайту займати вищі позиції, оскільки пошукові системи відзначають зусилля, спрямовані на обслуговування різноманітної бази користувачів.
33
+
34
+ ### Глобальне охоплення
35
+
36
+ Не менш важливим є глобальне охоплення, яке забезпечує інтернаціоналізація. Коли ви усуваєте мовні бар'єри та проєктуєте ваш застосунок з підтримкою різних культурних норм, ви відкриваєте двері для мільйонів потенційних користувачів зі всього світу. Надання локалізованого контенту та користувацьких інтерфейсів вирізняє ваш продукт серед конкурентів, які можуть пропонувати підтримку лише обмеженої кількості мов. Такий інклюзивний підхід гарантує, що користувачі відчувають себе визнаними та цінними, незалежно від місця їхнього перебування, що в кінцевому підсумку розширює ринок вашого продукту та підвищує його конкурентоспроможність на глобальному рівні.
37
+
38
+ ### Користувацький досвід
39
+
40
+ Ще однією важливою перевагою i18n є покращення досвіду користувача. Користувачі зазвичай почуваються більш комфортно та емоційно пов’язаними з програмним забезпеченням, яке спілкується їхньою рідною мовою та поважає локальні конвенції, такі як формати дат, валюти та одиниці вимірювання. Цей персоналізований досвід є ключем до створення довіри й задоволення, сприяючи довгостроковому утриманню користувачів. Коли користувачі можуть безперешкодно орієнтуватися та розуміти додаток, вони з більшою вірогідністю будуть активно ним користуватися, що відкриває шлях до позитивних відгуків, рекомендацій і сталого зростання.
41
+
42
+ ## Інтернаціоналізація (i18n) vs. Локалізація (l10n)
43
+
44
+ **Інтернаціоналізація (i18n)** — це процес проєктування вашого продукту так, щоб він міг легко підтримувати кілька мов і регіональних відмінностей. Наприклад, якщо ви створюєте вебсайт з урахуванням інтернаціоналізації, ви забезпечуєте підтримку різних наборів символів у текстових полях, відображення дат відповідно до локальних форматів і адаптацію макетів для розширення тексту при перекладі на інші мови.
45
+
46
+ **Локалізація (l10n)** — це робота, яка виконується після інтернаціоналізації. Вона полягає у перекладі вмісту та налаштуванні культурних деталей для задоволення потреб конкретної аудиторії. Наприклад, коли вебсайт вже інтернаціоналізовано, ви можете локалізувати його для французьких користувачів, переклавши весь текст, змінивши формат дати на день/місяць/рік і навіть підкоригувавши зображення або іконки, щоб вони краще відповідали французьким культурним нормам.
47
+
48
+ Підсумовуючи, інтернаціоналізація готує ваш продукт до глобального використання, тоді як локалізація адаптує його для конкретного ринку.
49
+
50
+ ## Що слід інтернаціоналізувати на вебсайті?
51
+
52
+ 1. **Текстовий вміст:** Усі письмові елементи, такі як заголовки, основний текст і кнопки, потребують перекладу. Наприклад, заголовок на кшталт "Welcome to our website" має стати "Bienvenido a nuestro sitio web" для іспаномовної аудиторії.
53
+
54
+ 2. **Повідомлення про помилки:** Чіткі та лаконічні повідомлення про помилки є критично важливими. Якщо помилка у формі повідомляє "Invalid email address", її слід відобразити французькою як "Adresse e-mail non valide", щоб допомогти користувачам зрозуміти проблему.
55
+
56
+ 3. **Електронні листи та сповіщення:** Автоматизовані повідомлення, включно зі скиданням пароля або підтвердженням замовлення, мають бути локалізовані. Лист-підтвердження замовлення може звертатися до користувача як "Dear Customer" англійською і "Cher(e) client(e)" французькою для відповідної аудиторії.
57
+
58
+ 4. **Мітки доступності:** Мітки та атрибути alt для зображень потрібно перекладати, щоб допоміжні технології працювали правильно. Зображення з alt-текстом «Smiling child playing» має бути адаптовано як «Enfant souriant qui joue» французькою.
59
+
60
+ 5. **Формат чисел:** Різні регіони форматують числа по-різному. Хоча «1,000.50» підходить для англомовних локалей, багато європейських форматів вимагають «1.000,50», тому локалізація важлива.
61
+
62
+ 6. **Валюта:** Відображайте ціни з використанням правильних символів і форматів для відповідної локалі. Наприклад, товар, ціна якого вказана як «$99.99» у Сполучених Штатах, має бути конвертований у «€97.10» при націлюванні на європейських клієнтів.
63
+
64
+ 7. **Одиниці виміру:** Одиниці, такі як температура, відстань і об'єм, мають відображатися відповідно до локальних уподобань. Наприклад, погодний додаток може показувати **“68°F”** для американських користувачів, але **“20°C”** для інших.
65
+
66
+ 8. **Напрямок тексту:** Порядок читання та макет мають бути налаштовані для мов із різним напрямком письма. Вебсайт англійською (зліва направо) повинен змінити своє вирівнювання при локалізації для арабської, яку читають справа наліво.
67
+
68
+ 9. **Дата та час:** Формати відрізняються в різних регіонах. Подію, що відображається як **“12/25/2025 о 3:00 PM”** в США, може знадобитися показати як **“25/12/2025 о 15:00”** в інших місцях, щоб уникнути непорозумінь.
69
+
70
+ 10. **Часовий пояс**: Налаштування під місцеві часові пояси забезпечує, що часочутливий контент, такий як **розклад подій, терміни доставки або години роботи служби підтримки**, відображається точно. Наприклад, онлайн-вебінар, запланований на **"3:00 PM EST"**, має бути конвертований у відповідний місцевий час, наприклад **"8:00 PM GMT"** для користувачів у Великій Британії.
71
+
72
+ Цей стислий огляд охоплює основні елементи, які слід інтернаціоналізувати, забезпечуючи, що контент є доступним, культурно доречним і легко зрозумілим для глобальної аудиторії.
73
+
74
+ ## Поширені проблеми i18n
75
+
76
+ ![ілюстрація проблем i18n](https://github.com/aymericzip/intlayer/blob/main/docs/assets/pain_i18n.webp)
77
+
78
+ - **підтримуваність**
79
+
80
+ Кожне оновлення вебсайту має бути відображене у всіх мовних версіях, що вимагає ефективних робочих процесів і ретельної координації для забезпечення узгодженості між усіма версіями.
81
+
82
+ - **Конкатенація рядків**
83
+ Уникайте побудови повідомлень типу ` "Hello, " + username + "!"` оскільки порядок слів може відрізнятися в різних мовах; натомість використовуйте заповнювачі, наприклад `Hello, {username}!`, щоб врахувати мовні варіації.
84
+
85
+ - **Плюралізація**
86
+ У різних мов є різні правила множини, іноді з кількома формами. Використання бібліотек на кшталт ICU MessageFormat може спростити обробку цих складнощів.
87
+
88
+ - **UI та довжина тексту**
89
+ Деякі мови, наприклад німецька, зазвичай мають довші тексти, ніж англійська. Це може порушити макети, якщо дизайн не є гнучким, тому адаптивний (responsive) дизайн є ключовим.
90
+
91
+ - **Кодування символів**
92
+ Використання коректного кодування символів (наприклад UTF-8) має вирішальне значення для правильного відображення різноманітних алфавітів і символів, запобігаючи неправильному інтерпретуванню або пошкодженому тексту.
93
+
94
+ - **Жорстко задані макети**
95
+ UI-компоненти фіксованого розміру можуть неправильно підлаштовуватися під довші переклади, що призводить до перетікання тексту. Гнучкий, адаптивний макет допомагає зменшити цю проблему.
96
+
97
+ - **Динамічна зміна мови**
98
+ Користувачі очікують можливості змінювати мову без перезапуску застосунку або повторної автентифікації. Ця функція потребує безшовної, ретельно спланованої реалізації в архітектурі.
99
+
100
+ - **Підтримка напрямку письма**
101
+ Ігнорування підтримки мов із письмом справа-наліво (RTL) може створити значні проблеми з редизайном пізніше. Краще планувати сумісність з RTL з самого початку.
102
+
103
+ - **Культурні чутливості**
104
+ Іконки, кольори та символи можуть мати різне значення в різних культурах. Важливо адаптувати візуальний і текстовий контент з урахуванням локальних культурних нюансів.
105
+
106
+ ---
107
+
108
+ ## Найкращі практики для впровадження i18n
109
+
110
+ - **Плануйте заздалегідь**
111
+ Інтегруйте internationalization з самого початку вашого проєкту. Вирішення питань i18n на ранніх стадіях дешевше й простіше, ніж додавання їх пізніше, що забезпечує більш плавний процес розробки з самого початку.
112
+
113
+ - **Автоматизуйте управління перекладами**
114
+ Використовуйте сервіси перекладу на основі AI, такі як ті, що надає Intlayer, для ефективного управління перекладами. Завдяки автоматизації, коли ви публікуєте нову статтю, всі переклади створюються автоматично, що економить час і зменшує кількість ручних помилок.
115
+
116
+ - **Використання візуального редактора**
117
+ Реалізуйте візуальний редактор, щоб допомогти перекладачам бачити контент у його фактичному UI-контексті. Інструменти, такі як візуальний редактор Intlayer, мінімізують помилки та непорозуміння, забезпечуючи точність перекладів і їх відповідність остаточному дизайну.
118
+
119
+ - **Повторне використання перекладів**
120
+ Організуйте файли перекладів так, щоб їх можна було повторно використовувати в різних вебсайтах або застосунках. Наприклад, якщо у вас є багатомовний футер або хедер, створіть окремі файли перекладу, щоб спільні елементи можна було легко застосовувати в усіх проєктах.
121
+
122
+ ---
123
+
124
+ ## Словник локалі проти екстерналізації контенту в CMS
125
+
126
+ Під час створення вебсайту **система керування контентом (CMS), така як WordPress, Wix або Drupal, зазвичай забезпечує кращу підтримуваність**. Це особливо актуально для блогів або лендінгів, завдяки їхній інтегрованій підтримці i18n.
127
+
128
+ Однак для застосунків зі складною функціональністю або бізнес‑логікою **CMS може виявитися надто негнучкою, і вам доведеться розглянути можливість використання i18n‑бібліотеки**.
129
+
130
+ **Проблема багатьох i18n‑бібліотек у тому, що вони часто вимагають, щоб переклади були жорстко вбудовані в codebase**. Це означає, що якщо контент‑менеджеру потрібно оновити переклад, йому доводиться змінювати код і перезбирати застосунок. Щоб пом’якшити цю проблему, з’явилися інструменти типу «Git‑based CMS» або «i18n CMS», які допомагають контент‑менеджерам. Однак навіть **ці рішення зазвичай вимагають оновлення codebase і перезбирання при внесенні змін у контент**.
131
+
132
+ Ураховуючи ці виклики, часто обирають headless CMS, щоб винести контент і спростити керування перекладами. Однак при використанні CMS для i18n є помітні недоліки:
133
+
134
+ - **Не всі CMS пропонують функції i18n:** Деякі популярні платформи CMS позбавлені повноцінних можливостей інтернаціоналізації, через що доводиться шукати додаткові плагіни або обхідні шляхи.
135
+ - **Подвійна конфігурація:** Керування перекладами часто вимагає налаштування як CMS, так і коду додатка, що призводить до дублювання зусиль і потенційних невідповідностей.
136
+ - **Складно підтримувати:** Коли переклади розкидані між CMS і кодом, з часом підтримувати послідовну та вільну від помилок систему стає складно.
137
+ - **Вартість ліцензій:** Преміум CMS-платформи або додаткові інструменти для i18n можуть створювати додаткові витрати на ліцензії, які можуть бути не по кишені для кожного проєкту.
138
+
139
+ Важливо вибрати правильний інструмент відповідно до ваших потреб і планувати стратегію інтернаціоналізації з самого початку. **Intlayer пропонує переконливе рішення, поєднуючи декларацію локалізованого контенту з тісно інтегрованим headless CMS, що забезпечує найкраще з обох підходів.**
140
+
141
+ ---
142
+
143
+ ### Перелік i18n бібліотек та інструментів за технологією
144
+
145
+ Якщо ви шукаєте перелік i18n бібліотек та інструментів для конкретних технологій, перегляньте наведені ресурси:
146
+
147
+ ### Для систем управління контентом (CMS)
148
+
149
+ - WordPress: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/CMS/wordpress.md)
150
+ - Wix: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/CMS/wix.md)
151
+ - Drupal: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/CMS/drupal.md)
152
+
153
+ ### Для JavaScript-додатків (Frontend)
154
+
155
+ - React: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/react.md)
156
+ - Angular: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/angular.md)
157
+ - Vue: [Див. перелік бібліотек та інструментів i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/vue.md)
158
+ - Svelte: [Див. перелік бібліотек та інструментів i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/svelte.md)
159
+ - React Native : [Див. перелік бібліотек та інструментів i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/react-native.md)
160
+
161
+ ---
162
+
163
+ ## Висновок
164
+
165
+ Інтернаціоналізація (i18n) — це більше, ніж просто технічне завдання; це **стратегічна інвестиція**, яка дозволяє вашому програмному забезпеченню буквально говорити мовою ваших користувачів. Абстрагуючи локально-залежні елементи, враховуючи мовні та культурні відмінності та плануючи майбутнє розширення, ви надаєте своєму продукту змогу процвітати на глобальному ринку.
166
+
167
+ Чи ви створюєте мобільний застосунок, SaaS-платформу або корпоративний інструмент, **i18n гарантує, що ваш продукт зможе адаптуватиись і приваблювати користувачів із усього світу**, без потреби постійно переписувати код. Використовуючи best practices, надійні frameworks і continuous localization strategies, розробники та продуктові команди можуть доставляти **істинно глобальний** користувацький досвід програмного забезпечення.
@@ -104,7 +104,6 @@ const config: IntlayerConfig = {
104
104
  },
105
105
  plugins: [
106
106
  syncJSON({
107
- format: "i18next",
108
107
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
109
108
  }),
110
109
  ],
@@ -154,7 +153,6 @@ const config: IntlayerConfig = {
154
153
  * Sẽ tải, và ghi đầu ra cùng các bản dịch trở lại các tệp JSON trong thư mục locales
155
154
  */
156
155
  syncJSON({
157
- format: "i18next",
158
156
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
159
157
  priority: 0,
160
158
  }),
@@ -112,7 +112,6 @@ const config: IntlayerConfig = {
112
112
  },
113
113
  plugins: [
114
114
  syncJSON({
115
- format: "i18next",
116
115
  source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
117
116
  }),
118
117
  ],
@@ -164,7 +163,6 @@ const config: IntlayerConfig = {
164
163
  * Sẽ tải và ghi lại đầu ra cùng các bản dịch trở lại các file JSON trong thư mục locales
165
164
  */
166
165
  syncJSON({
167
- format: "i18next",
168
166
  source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
169
167
  priority: 0,
170
168
  }),
@@ -102,7 +102,6 @@ const config: IntlayerConfig = {
102
102
  },
103
103
  plugins: [
104
104
  syncJSON({
105
- format: "i18next",
106
105
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
107
106
  }),
108
107
  ],
@@ -152,7 +151,6 @@ const config: IntlayerConfig = {
152
151
  * Sẽ tải và ghi đầu ra cùng các bản dịch trở lại các tệp JSON trong thư mục locales
153
152
  */
154
153
  syncJSON({
155
- format: "i18next",
156
154
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
157
155
  priority: 0,
158
156
  }),
@@ -104,7 +104,6 @@ const config: IntlayerConfig = {
104
104
  },
105
105
  plugins: [
106
106
  syncJSON({
107
- format: "i18next",
108
107
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
109
108
  }),
110
109
  ],
@@ -154,7 +153,6 @@ const config: IntlayerConfig = {
154
153
  * 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
155
154
  */
156
155
  syncJSON({
157
- format: "i18next",
158
156
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
159
157
  priority: 0,
160
158
  }),
@@ -112,7 +112,6 @@ const config: IntlayerConfig = {
112
112
  },
113
113
  plugins: [
114
114
  syncJSON({
115
- format: "i18next",
116
115
  source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
117
116
  }),
118
117
  ],
@@ -164,7 +163,6 @@ const config: IntlayerConfig = {
164
163
  * 将输出和翻译写回到 locales 目录中的 JSON 文件
165
164
  */
166
165
  syncJSON({
167
- format: "i18next",
168
166
  source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
169
167
  priority: 0,
170
168
  }),
@@ -102,7 +102,6 @@ const config: IntlayerConfig = {
102
102
  },
103
103
  plugins: [
104
104
  syncJSON({
105
- format: "i18next",
106
105
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
107
106
  }),
108
107
  ],
@@ -152,7 +151,6 @@ const config: IntlayerConfig = {
152
151
  * 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
153
152
  */
154
153
  syncJSON({
155
- format: "i18next",
156
154
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
157
155
  priority: 0,
158
156
  }),
@@ -122,52 +122,6 @@ export default config;
122
122
 
123
123
  要查看更多关于 `syncJSON` 插件的详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
124
124
 
125
- ---
126
-
127
- ### (可选)步骤3:实现按组件的 JSON 翻译
128
-
129
- 默认情况下,Intlayer 会加载、合并并同步 JSON 和内容声明文件。更多详情请参阅 [内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任意位置实现按组件管理本地化的 JSON。
130
-
131
- 为此,你可以使用 `loadJSON` 插件。
132
-
133
- ```ts fileName="intlayer.config.ts"
134
- import { Locales, type IntlayerConfig } from "intlayer";
135
- import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
136
-
137
- const config: IntlayerConfig = {
138
- internationalization: {
139
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
140
- defaultLocale: Locales.ENGLISH,
141
- },
142
-
143
- // 保持您当前的 JSON 文件与 Intlayer 词典同步
144
- plugins: [
145
- /**
146
- * 将加载 src 目录中所有匹配模式 {key}.i18n.json 的 JSON 文件
147
- */
148
- loadJSON({
149
- source: ({ key }) => `./src/**/${key}.i18n.json`,
150
- locale: Locales.ENGLISH,
151
- priority: 1, // 确保这些 JSON 文件优先于 `./locales/en/${key}.json` 中的文件
152
- }),
153
- /**
154
- * 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
155
- */
156
- syncJSON({
157
- format: "vue-i18n",
158
- source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
159
- priority: 0,
160
- }),
161
- ],
162
- };
163
-
164
- export default config;
165
- ```
166
-
167
- 这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
168
-
169
- ---
170
-
171
125
  ## Git 配置
172
126
 
173
127
  将生成的文件排除在版本控制之外:
@@ -41,7 +41,8 @@ const blogEntry = {
41
41
  tr: readLocale("compiler_vs_declarative_i18n.md", "tr"),
42
42
  pl: readLocale("compiler_vs_declarative_i18n.md", "pl"),
43
43
  id: readLocale("compiler_vs_declarative_i18n.md", "id"),
44
- vi: readLocale("compiler_vs_declarative_i18n.md", "vi")
44
+ vi: readLocale("compiler_vs_declarative_i18n.md", "vi"),
45
+ uk: readLocale("compiler_vs_declarative_i18n.md", "uk")
45
46
  },
46
47
  "./blog/en/i18n_using_next-i18next.md": {
47
48
  en: readLocale("i18n_using_next-i18next.md", "en"),
@@ -60,7 +61,8 @@ const blogEntry = {
60
61
  tr: readLocale("i18n_using_next-i18next.md", "tr"),
61
62
  pl: readLocale("i18n_using_next-i18next.md", "pl"),
62
63
  id: readLocale("i18n_using_next-i18next.md", "id"),
63
- vi: readLocale("i18n_using_next-i18next.md", "vi")
64
+ vi: readLocale("i18n_using_next-i18next.md", "vi"),
65
+ uk: readLocale("i18n_using_next-i18next.md", "uk")
64
66
  },
65
67
  "./blog/en/i18n_using_next-intl.md": {
66
68
  en: readLocale("i18n_using_next-intl.md", "en"),
@@ -79,7 +81,8 @@ const blogEntry = {
79
81
  tr: readLocale("i18n_using_next-intl.md", "tr"),
80
82
  pl: readLocale("i18n_using_next-intl.md", "pl"),
81
83
  id: readLocale("i18n_using_next-intl.md", "id"),
82
- vi: readLocale("i18n_using_next-intl.md", "vi")
84
+ vi: readLocale("i18n_using_next-intl.md", "vi"),
85
+ uk: readLocale("i18n_using_next-intl.md", "uk")
83
86
  },
84
87
  "./blog/en/index.md": {
85
88
  en: readLocale("index.md", "en"),
@@ -98,7 +101,8 @@ const blogEntry = {
98
101
  tr: readLocale("index.md", "tr"),
99
102
  pl: readLocale("index.md", "pl"),
100
103
  id: readLocale("index.md", "id"),
101
- vi: readLocale("index.md", "vi")
104
+ vi: readLocale("index.md", "vi"),
105
+ uk: readLocale("index.md", "uk")
102
106
  },
103
107
  "./blog/en/internationalization_and_SEO.md": {
104
108
  en: readLocale("internationalization_and_SEO.md", "en"),
@@ -117,7 +121,8 @@ const blogEntry = {
117
121
  tr: readLocale("internationalization_and_SEO.md", "tr"),
118
122
  pl: readLocale("internationalization_and_SEO.md", "pl"),
119
123
  id: readLocale("internationalization_and_SEO.md", "id"),
120
- vi: readLocale("internationalization_and_SEO.md", "vi")
124
+ vi: readLocale("internationalization_and_SEO.md", "vi"),
125
+ uk: readLocale("internationalization_and_SEO.md", "uk")
121
126
  },
122
127
  "./blog/en/intlayer_with_i18next.md": {
123
128
  en: readLocale("intlayer_with_i18next.md", "en"),
@@ -136,7 +141,8 @@ const blogEntry = {
136
141
  tr: readLocale("intlayer_with_i18next.md", "tr"),
137
142
  pl: readLocale("intlayer_with_i18next.md", "pl"),
138
143
  id: readLocale("intlayer_with_i18next.md", "id"),
139
- vi: readLocale("intlayer_with_i18next.md", "vi")
144
+ vi: readLocale("intlayer_with_i18next.md", "vi"),
145
+ uk: readLocale("intlayer_with_i18next.md", "uk")
140
146
  },
141
147
  "./blog/en/intlayer_with_next-i18next.md": {
142
148
  en: readLocale("intlayer_with_next-i18next.md", "en"),
@@ -155,7 +161,8 @@ const blogEntry = {
155
161
  tr: readLocale("intlayer_with_next-i18next.md", "tr"),
156
162
  pl: readLocale("intlayer_with_next-i18next.md", "pl"),
157
163
  id: readLocale("intlayer_with_next-i18next.md", "id"),
158
- vi: readLocale("intlayer_with_next-i18next.md", "vi")
164
+ vi: readLocale("intlayer_with_next-i18next.md", "vi"),
165
+ uk: readLocale("intlayer_with_next-i18next.md", "uk")
159
166
  },
160
167
  "./blog/en/intlayer_with_next-intl.md": {
161
168
  en: readLocale("intlayer_with_next-intl.md", "en"),
@@ -174,7 +181,8 @@ const blogEntry = {
174
181
  tr: readLocale("intlayer_with_next-intl.md", "tr"),
175
182
  pl: readLocale("intlayer_with_next-intl.md", "pl"),
176
183
  id: readLocale("intlayer_with_next-intl.md", "id"),
177
- vi: readLocale("intlayer_with_next-intl.md", "vi")
184
+ vi: readLocale("intlayer_with_next-intl.md", "vi"),
185
+ uk: readLocale("intlayer_with_next-intl.md", "uk")
178
186
  },
179
187
  "./blog/en/intlayer_with_react-i18next.md": {
180
188
  en: readLocale("intlayer_with_react-i18next.md", "en"),
@@ -193,7 +201,8 @@ const blogEntry = {
193
201
  tr: readLocale("intlayer_with_react-i18next.md", "tr"),
194
202
  pl: readLocale("intlayer_with_react-i18next.md", "pl"),
195
203
  id: readLocale("intlayer_with_react-i18next.md", "id"),
196
- vi: readLocale("intlayer_with_react-i18next.md", "vi")
204
+ vi: readLocale("intlayer_with_react-i18next.md", "vi"),
205
+ uk: readLocale("intlayer_with_react-i18next.md", "uk")
197
206
  },
198
207
  "./blog/en/intlayer_with_react-intl.md": {
199
208
  en: readLocale("intlayer_with_react-intl.md", "en"),
@@ -212,7 +221,8 @@ const blogEntry = {
212
221
  tr: readLocale("intlayer_with_react-intl.md", "tr"),
213
222
  pl: readLocale("intlayer_with_react-intl.md", "pl"),
214
223
  id: readLocale("intlayer_with_react-intl.md", "id"),
215
- vi: readLocale("intlayer_with_react-intl.md", "vi")
224
+ vi: readLocale("intlayer_with_react-intl.md", "vi"),
225
+ uk: readLocale("intlayer_with_react-intl.md", "uk")
216
226
  },
217
227
  "./blog/en/intlayer_with_vue-i18n.md": {
218
228
  en: readLocale("intlayer_with_vue-i18n.md", "en"),
@@ -231,7 +241,8 @@ const blogEntry = {
231
241
  tr: readLocale("intlayer_with_vue-i18n.md", "tr"),
232
242
  pl: readLocale("intlayer_with_vue-i18n.md", "pl"),
233
243
  id: readLocale("intlayer_with_vue-i18n.md", "id"),
234
- vi: readLocale("intlayer_with_vue-i18n.md", "vi")
244
+ vi: readLocale("intlayer_with_vue-i18n.md", "vi"),
245
+ uk: readLocale("intlayer_with_vue-i18n.md", "uk")
235
246
  },
236
247
  "./blog/en/l10n_platform_alternative/Lokalise.md": {
237
248
  en: readLocale("l10n_platform_alternative/Lokalise.md", "en"),
@@ -250,7 +261,8 @@ const blogEntry = {
250
261
  tr: readLocale("l10n_platform_alternative/Lokalise.md", "tr"),
251
262
  pl: readLocale("l10n_platform_alternative/Lokalise.md", "pl"),
252
263
  id: readLocale("l10n_platform_alternative/Lokalise.md", "id"),
253
- vi: readLocale("l10n_platform_alternative/Lokalise.md", "vi")
264
+ vi: readLocale("l10n_platform_alternative/Lokalise.md", "vi"),
265
+ uk: readLocale("l10n_platform_alternative/Lokalise.md", "uk")
254
266
  },
255
267
  "./blog/en/l10n_platform_alternative/crowdin.md": {
256
268
  en: readLocale("l10n_platform_alternative/crowdin.md", "en"),
@@ -269,7 +281,8 @@ const blogEntry = {
269
281
  tr: readLocale("l10n_platform_alternative/crowdin.md", "tr"),
270
282
  pl: readLocale("l10n_platform_alternative/crowdin.md", "pl"),
271
283
  id: readLocale("l10n_platform_alternative/crowdin.md", "id"),
272
- vi: readLocale("l10n_platform_alternative/crowdin.md", "vi")
284
+ vi: readLocale("l10n_platform_alternative/crowdin.md", "vi"),
285
+ uk: readLocale("l10n_platform_alternative/crowdin.md", "uk")
273
286
  },
274
287
  "./blog/en/l10n_platform_alternative/phrase.md": {
275
288
  en: readLocale("l10n_platform_alternative/phrase.md", "en"),
@@ -288,7 +301,8 @@ const blogEntry = {
288
301
  tr: readLocale("l10n_platform_alternative/phrase.md", "tr"),
289
302
  pl: readLocale("l10n_platform_alternative/phrase.md", "pl"),
290
303
  id: readLocale("l10n_platform_alternative/phrase.md", "id"),
291
- vi: readLocale("l10n_platform_alternative/phrase.md", "vi")
304
+ vi: readLocale("l10n_platform_alternative/phrase.md", "vi"),
305
+ uk: readLocale("l10n_platform_alternative/phrase.md", "uk")
292
306
  },
293
307
  "./blog/en/list_i18n_technologies/CMS/drupal.md": {
294
308
  en: readLocale("list_i18n_technologies/CMS/drupal.md", "en"),
@@ -307,7 +321,8 @@ const blogEntry = {
307
321
  tr: readLocale("list_i18n_technologies/CMS/drupal.md", "tr"),
308
322
  pl: readLocale("list_i18n_technologies/CMS/drupal.md", "pl"),
309
323
  id: readLocale("list_i18n_technologies/CMS/drupal.md", "id"),
310
- vi: readLocale("list_i18n_technologies/CMS/drupal.md", "vi")
324
+ vi: readLocale("list_i18n_technologies/CMS/drupal.md", "vi"),
325
+ uk: readLocale("list_i18n_technologies/CMS/drupal.md", "uk")
311
326
  },
312
327
  "./blog/en/list_i18n_technologies/CMS/wix.md": {
313
328
  en: readLocale("list_i18n_technologies/CMS/wix.md", "en"),
@@ -326,7 +341,8 @@ const blogEntry = {
326
341
  tr: readLocale("list_i18n_technologies/CMS/wix.md", "tr"),
327
342
  pl: readLocale("list_i18n_technologies/CMS/wix.md", "pl"),
328
343
  id: readLocale("list_i18n_technologies/CMS/wix.md", "id"),
329
- vi: readLocale("list_i18n_technologies/CMS/wix.md", "vi")
344
+ vi: readLocale("list_i18n_technologies/CMS/wix.md", "vi"),
345
+ uk: readLocale("list_i18n_technologies/CMS/wix.md", "uk")
330
346
  },
331
347
  "./blog/en/list_i18n_technologies/CMS/wordpress.md": {
332
348
  en: readLocale("list_i18n_technologies/CMS/wordpress.md", "en"),
@@ -345,7 +361,8 @@ const blogEntry = {
345
361
  tr: readLocale("list_i18n_technologies/CMS/wordpress.md", "tr"),
346
362
  pl: readLocale("list_i18n_technologies/CMS/wordpress.md", "pl"),
347
363
  id: readLocale("list_i18n_technologies/CMS/wordpress.md", "id"),
348
- vi: readLocale("list_i18n_technologies/CMS/wordpress.md", "vi")
364
+ vi: readLocale("list_i18n_technologies/CMS/wordpress.md", "vi"),
365
+ uk: readLocale("list_i18n_technologies/CMS/wordpress.md", "uk")
349
366
  },
350
367
  "./blog/en/list_i18n_technologies/frameworks/angular.md": {
351
368
  en: readLocale("list_i18n_technologies/frameworks/angular.md", "en"),
@@ -364,7 +381,8 @@ const blogEntry = {
364
381
  tr: readLocale("list_i18n_technologies/frameworks/angular.md", "tr"),
365
382
  pl: readLocale("list_i18n_technologies/frameworks/angular.md", "pl"),
366
383
  id: readLocale("list_i18n_technologies/frameworks/angular.md", "id"),
367
- vi: readLocale("list_i18n_technologies/frameworks/angular.md", "vi")
384
+ vi: readLocale("list_i18n_technologies/frameworks/angular.md", "vi"),
385
+ uk: readLocale("list_i18n_technologies/frameworks/angular.md", "uk")
368
386
  },
369
387
  "./blog/en/list_i18n_technologies/frameworks/flutter.md": {
370
388
  en: readLocale("list_i18n_technologies/frameworks/flutter.md", "en"),
@@ -383,7 +401,8 @@ const blogEntry = {
383
401
  tr: readLocale("list_i18n_technologies/frameworks/flutter.md", "tr"),
384
402
  pl: readLocale("list_i18n_technologies/frameworks/flutter.md", "pl"),
385
403
  id: readLocale("list_i18n_technologies/frameworks/flutter.md", "id"),
386
- vi: readLocale("list_i18n_technologies/frameworks/flutter.md", "vi")
404
+ vi: readLocale("list_i18n_technologies/frameworks/flutter.md", "vi"),
405
+ uk: readLocale("list_i18n_technologies/frameworks/flutter.md", "uk")
387
406
  },
388
407
  "./blog/en/list_i18n_technologies/frameworks/react-native.md": {
389
408
  en: readLocale("list_i18n_technologies/frameworks/react-native.md", "en"),
@@ -402,7 +421,8 @@ const blogEntry = {
402
421
  tr: readLocale("list_i18n_technologies/frameworks/react-native.md", "tr"),
403
422
  pl: readLocale("list_i18n_technologies/frameworks/react-native.md", "pl"),
404
423
  id: readLocale("list_i18n_technologies/frameworks/react-native.md", "id"),
405
- vi: readLocale("list_i18n_technologies/frameworks/react-native.md", "vi")
424
+ vi: readLocale("list_i18n_technologies/frameworks/react-native.md", "vi"),
425
+ uk: readLocale("list_i18n_technologies/frameworks/react-native.md", "uk")
406
426
  },
407
427
  "./blog/en/list_i18n_technologies/frameworks/react.md": {
408
428
  en: readLocale("list_i18n_technologies/frameworks/react.md", "en"),
@@ -421,7 +441,8 @@ const blogEntry = {
421
441
  tr: readLocale("list_i18n_technologies/frameworks/react.md", "tr"),
422
442
  pl: readLocale("list_i18n_technologies/frameworks/react.md", "pl"),
423
443
  id: readLocale("list_i18n_technologies/frameworks/react.md", "id"),
424
- vi: readLocale("list_i18n_technologies/frameworks/react.md", "vi")
444
+ vi: readLocale("list_i18n_technologies/frameworks/react.md", "vi"),
445
+ uk: readLocale("list_i18n_technologies/frameworks/react.md", "uk")
425
446
  },
426
447
  "./blog/en/list_i18n_technologies/frameworks/svelte.md": {
427
448
  en: readLocale("list_i18n_technologies/frameworks/svelte.md", "en"),
@@ -440,7 +461,8 @@ const blogEntry = {
440
461
  tr: readLocale("list_i18n_technologies/frameworks/svelte.md", "tr"),
441
462
  pl: readLocale("list_i18n_technologies/frameworks/svelte.md", "pl"),
442
463
  id: readLocale("list_i18n_technologies/frameworks/svelte.md", "id"),
443
- vi: readLocale("list_i18n_technologies/frameworks/svelte.md", "vi")
464
+ vi: readLocale("list_i18n_technologies/frameworks/svelte.md", "vi"),
465
+ uk: readLocale("list_i18n_technologies/frameworks/svelte.md", "uk")
444
466
  },
445
467
  "./blog/en/list_i18n_technologies/frameworks/vue.md": {
446
468
  en: readLocale("list_i18n_technologies/frameworks/vue.md", "en"),
@@ -459,7 +481,8 @@ const blogEntry = {
459
481
  tr: readLocale("list_i18n_technologies/frameworks/vue.md", "tr"),
460
482
  pl: readLocale("list_i18n_technologies/frameworks/vue.md", "pl"),
461
483
  id: readLocale("list_i18n_technologies/frameworks/vue.md", "id"),
462
- vi: readLocale("list_i18n_technologies/frameworks/vue.md", "vi")
484
+ vi: readLocale("list_i18n_technologies/frameworks/vue.md", "vi"),
485
+ uk: readLocale("list_i18n_technologies/frameworks/vue.md", "uk")
463
486
  },
464
487
  "./blog/en/next-i18next_vs_next-intl_vs_intlayer.md": {
465
488
  en: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "en"),
@@ -478,7 +501,8 @@ const blogEntry = {
478
501
  tr: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "tr"),
479
502
  pl: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "pl"),
480
503
  id: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "id"),
481
- vi: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "vi")
504
+ vi: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "vi"),
505
+ uk: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "uk")
482
506
  },
483
507
  "./blog/en/nextjs-multilingual-seo-comparison.md": {
484
508
  en: readLocale("nextjs-multilingual-seo-comparison.md", "en"),
@@ -497,7 +521,8 @@ const blogEntry = {
497
521
  tr: readLocale("nextjs-multilingual-seo-comparison.md", "tr"),
498
522
  pl: readLocale("nextjs-multilingual-seo-comparison.md", "pl"),
499
523
  id: readLocale("nextjs-multilingual-seo-comparison.md", "id"),
500
- vi: readLocale("nextjs-multilingual-seo-comparison.md", "vi")
524
+ vi: readLocale("nextjs-multilingual-seo-comparison.md", "vi"),
525
+ uk: readLocale("nextjs-multilingual-seo-comparison.md", "uk")
501
526
  },
502
527
  "./blog/en/rag_powered_documentation_assistant.md": {
503
528
  en: readLocale("rag_powered_documentation_assistant.md", "en"),
@@ -516,7 +541,8 @@ const blogEntry = {
516
541
  tr: readLocale("rag_powered_documentation_assistant.md", "tr"),
517
542
  pl: readLocale("rag_powered_documentation_assistant.md", "pl"),
518
543
  id: readLocale("rag_powered_documentation_assistant.md", "id"),
519
- vi: readLocale("rag_powered_documentation_assistant.md", "vi")
544
+ vi: readLocale("rag_powered_documentation_assistant.md", "vi"),
545
+ uk: readLocale("rag_powered_documentation_assistant.md", "uk")
520
546
  },
521
547
  "./blog/en/react-i18next_vs_react-intl_vs_intlayer.md": {
522
548
  en: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "en"),
@@ -535,7 +561,8 @@ const blogEntry = {
535
561
  tr: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "tr"),
536
562
  pl: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "pl"),
537
563
  id: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "id"),
538
- vi: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "vi")
564
+ vi: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "vi"),
565
+ uk: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "uk")
539
566
  },
540
567
  "./blog/en/vue-i18n_vs_intlayer.md": {
541
568
  en: readLocale("vue-i18n_vs_intlayer.md", "en"),
@@ -554,7 +581,8 @@ const blogEntry = {
554
581
  tr: readLocale("vue-i18n_vs_intlayer.md", "tr"),
555
582
  pl: readLocale("vue-i18n_vs_intlayer.md", "pl"),
556
583
  id: readLocale("vue-i18n_vs_intlayer.md", "id"),
557
- vi: readLocale("vue-i18n_vs_intlayer.md", "vi")
584
+ vi: readLocale("vue-i18n_vs_intlayer.md", "vi"),
585
+ uk: readLocale("vue-i18n_vs_intlayer.md", "uk")
558
586
  },
559
587
  "./blog/en/what_is_internationalization.md": {
560
588
  en: readLocale("what_is_internationalization.md", "en"),
@@ -573,7 +601,8 @@ const blogEntry = {
573
601
  tr: readLocale("what_is_internationalization.md", "tr"),
574
602
  pl: readLocale("what_is_internationalization.md", "pl"),
575
603
  id: readLocale("what_is_internationalization.md", "id"),
576
- vi: readLocale("what_is_internationalization.md", "vi")
604
+ vi: readLocale("what_is_internationalization.md", "vi"),
605
+ uk: readLocale("what_is_internationalization.md", "uk")
577
606
  }
578
607
  };
579
608