@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,69 @@
1
+ ---
2
+ createdAt: 2024-24-12
3
+ updatedAt: 2025-06-29
4
+ title: Блог
5
+ description: Дізнайтеся про всі теми, пов'язані з Intlayer, інтернаціоналізацією та іншим
6
+ keywords:
7
+ - Intlayer
8
+ - Інтернаціоналізація
9
+ - Блог
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ slugs:
14
+ - blog
15
+ - search
16
+ ---
17
+
18
+ # Інтернаціоналізація в JavaScript: розширення глобального охоплення та SEO
19
+
20
+ Ласкаво просимо до нашого блогу, присвяченого всьому, що стосується **інтернаціоналізації** для застосунків на JavaScript! Тут ми розглядаємо найкращі практики, стратегії та інструменти, які допомагають розробникам масштабувати свої цифрові продукти по всьому світу.
21
+
22
+ ---
23
+
24
+ ## Чому інтернаціоналізація (i18n) важлива
25
+
26
+ У сьогоднішньому взаємозв’язаному світі користувачі очікують безшовного, локалізованого досвіду. Інтернаціоналізація (i18n) забезпечує можливість адаптації вашого веб-застосунку до різних мов і культурних особливостей. Впроваджуючи практики i18n з самого початку, ви відкриваєте для себе численні переваги, такі як:
27
+
28
+ 1. **Покращений користувацький досвід:** Користувачам зручніше взаємодіяти з контентом рідною мовою.
29
+ 2. **Ширше проникнення на ринку:** Наявність кількох мов допомагає виходити на нові регіони та розширювати базу користувачів.
30
+ 3. **Покращена доступність:** Добре структурована i18n часто відповідає стандартам доступності, роблячи ваш додаток більш інклюзивним.
31
+ 4. **Покращені SEO-показники:** Локалізований контент може підвищити вашу видимість у регіональних результатах пошуку.
32
+
33
+ ---
34
+
35
+ ## Open-Source рішення для інтернаціоналізації
36
+
37
+ Створення інтернаціоналізованого додатка не має бути складним. Спільнота open-source пропонує багато потужних, добре підтримуваних інструментів і бібліотек, які спрощують локалізацію. Популярні рішення, такі як **react-intl**, **i18next** та **FormatJS**, надають гнучкі API та просту інтеграцію з сучасними JavaScript-фреймворками, такими як React, Vue і Angular.
38
+
39
+ ### Ключові переваги open-source рішень
40
+
41
+ - **Гнучкість:** Бібліотеки, керовані спільнотою, швидко розвиваються і додають оновлення та нові функції відповідно до потреб.
42
+ - **Економія коштів:** Відсутність ліцензійних платежів, що спрощує тестування та масштабування вашого додатка.
43
+ - **Підтримка спільноти:** Великі спільноти зазвичай означають більше навчальних матеріалів, документації та готових плагінів.
44
+
45
+ ---
46
+
47
+ ## Оголошення та наступні кроки
48
+
49
+ Ми з радістю оголошуємо про майбутні підручники, найкращі практики та **кейси**, які покажуть, як оптимізувати ваші JavaScript-застосунки для глобальної аудиторії. Ось короткий огляд:
50
+
51
+ - **Поради з просунутої локалізації:** відточення pluralization, форматування дати/часу та динамічного контенту.
52
+ - **Оптимізація продуктивності:** мінімізація розмірів бандлів при підтримці кількох локалей.
53
+ - **Кейси від спільноти:** демонстрація реальних прикладів успішних i18n-реалізацій.
54
+
55
+ Слідкуйте за цими оновленнями та іншими матеріалами!
56
+
57
+ ---
58
+
59
+ ## Долучайтеся до нашого блогу!
60
+
61
+ Ми віримо в обмін знаннями, який ініціюється спільнотою. Якщо у вас є чудова ідея для публікації в блозі, пов'язана з інтернаціоналізацією, **SEO** або будь-якою іншою релевантною темою, нам буде приємно її почути. Ви можете надіслати Pull Request, додавши свою пропоновану статтю до нашого репозиторію на GitHub:
62
+
63
+ [**Надішліть свою публікацію тут**](https://github.com/aymericzip/intlayer/blob/main/docs/blog)
64
+
65
+ Ваші внески допомагають збагачувати цю платформу та розширювати можливості розробників у всьому світі.
66
+
67
+ ---
68
+
69
+ **Дякуємо за увагу, і ласкаво просимо до нашої i18n-спільноти!** Слідкуйте за оновленнями, щоб отримувати більше ідей, порад і кращих практик щодо того, як вивести ваші JavaScript-застосунки на міжнародний рівень.
@@ -0,0 +1,273 @@
1
+ ---
2
+ createdAt: 2024-12-24
3
+ updatedAt: 2025-06-29
4
+ title: SEO та інтернаціоналізація
5
+ description: Дізнайтеся, як оптимізувати ваш багатомовний вебсайт для пошукових систем та покращити SEO.
6
+ keywords:
7
+ - SEO
8
+ - Intlayer
9
+ - Інтернаціоналізація
10
+ - Блог
11
+ - Next.js
12
+ - JavaScript
13
+ - React
14
+ slugs:
15
+ - blog
16
+ - SEO-and-i18n
17
+ ---
18
+
19
+ # SEO та I18n: остаточний посібник зі створення багатомовного вебсайту
20
+
21
+ Хочете охопити більше користувачів у світі? Зробити ваш вебсайт багатомовним — один із найкращих способів розширити аудиторію та покращити SEO (Search Engine Optimization). У цьому дописі блогу ми розкладемо по поличках основи міжнародного SEO, часто званого **i18n** (скорочення від "internationalization"), простими та зрозумілими словами. Ви дізнаєтеся про ключові рішення, які потрібно прийняти, як використовувати технічні елементи, такі як `hreflang`, і чому інструменти на кшталт **Intlayer** можуть спростити ваші багатомовні проєкти на Next.js.
22
+
23
+ ---
24
+
25
+ ## 1. Що означає зробити ваш вебсайт багатомовним?
26
+
27
+ Багатомовний вебсайт пропонує свій вміст більш ніж однією мовою. Наприклад, у вас може бути англомовна версія (`example.com/en/`), франкомовна версія (`example.com/fr/`) та іспаномовна версія (`example.com/es/`). Такий підхід дозволяє пошуковим системам відображати користувачам відповідну мовну версію на основі їхніх уподобань або географічного розташування.
28
+
29
+ Коли зробити це правильно, ви створите значно зручніший досвід для користувачів, які не говорять англійською, що призведе до кращого залучення, вищих показників конверсії та покращення SEO в різних регіонах.
30
+
31
+ ---
32
+
33
+ ## 2. Вибір правильної структури URL-адрес
34
+
35
+ Якщо ви вирішите мати кілька мовних версій, вам знадобиться чіткий і послідовний спосіб організувати URL-адреси сайту. Кожна мова (або регіон) повинна мати власну унікальну "адресу" в інтернеті. Нижче наведено три поширені способи структурування багатомовних сайтів:
36
+
37
+ 1. Національні домени верхнього рівня (ccTLDs)
38
+ - Example: `example.fr`, `example.de`
39
+ - **Переваги:** Надсилає чіткий сигнал пошуковим системам щодо країни, на яку націлено вміст (наприклад, `.fr` = Франція).
40
+ - **Недоліки:** Управління кількома доменами може бути дорожчим і складнішим.
41
+
42
+ 2. **Піддомени**
43
+ - **Example:** `fr.example.com`, `de.example.com`
44
+ - **Переваги:** Кожна мова "мешкає" на власному піддомені, що робить додавання або видалення мов відносно простим.
45
+ - **Недоліки:** Пошукові системи іноді трактують субдомени як окремі сайти, тому це може розпорошувати авторитет вашого головного домену.
46
+
47
+ 3. **Підкаталоги (підпапки)**
48
+ - **Приклад:** `example.com/fr/`, `example.com/de/`
49
+ - **Переваги:** Легко керувати, і весь трафік спрямовується на один основний домен.
50
+ - **Недоліки:** Менш сильний сигнал для локального SEO порівняно з ccTLD (хоча за правильної реалізації це все одно ефективно).
51
+
52
+ > **Порада:** Якщо у вас глобальний бренд і ви хочете спростити управління, підкаталоги зазвичай працюють найкраще. Якщо ж ви орієнтуєтесь лише на одну-дві країни і хочете максимально підкреслити кожну з них, варто розглянути ccTLD.
53
+
54
+ ---
55
+
56
+ ## 3. Опановування таргетування мов за допомогою Hreflang
57
+
58
+ ### 3.1. Що таке Hreflang?
59
+
60
+ Коли у вас є ідентичний або дуже схожий вміст кількома мовами, пошукові системи, такі як Google, можуть заплутатися щодо того, яку версію показувати користувачеві. **Hreflang** — це атрибут HTML, який вказує пошуковим системам, для якої мови (та регіону) призначена конкретна сторінка, а також які альтернативні мовні/регіональні сторінки існують.
61
+
62
+ ### 3.2. Чому це важливо?
63
+
64
+ 1. Це запобігає проблемам з **дублюванням контенту** (коли пошукові системи вважають, що ви публікуєте один і той же вміст кілька разів).
65
+ 2. Це гарантує, що **франкомовні користувачі бачать французьку версію**, **іспаномовні користувачі бачать іспанську версію** та інші відповідні варіанти.
66
+ 3. Це покращує загальний досвід користувача — підвищує залученість і покращує позиції в пошуковій видачі.
67
+
68
+ ### 3.3. Як використовувати Hreflang у тегу `<head>`
69
+
70
+ У вашому HTML ви додасте щось на кшталт:
71
+
72
+ ```html
73
+ <link rel="alternate" hreflang="en" href="https://example.com/en" />
74
+ <link rel="alternate" hreflang="fr" href="https://example.com/fr" />
75
+ <link rel="alternate" hreflang="es" href="https://example.com/es" />
76
+ <link rel="alternate" hreflang="x-default" href="https://example.com/en" />
77
+ ```
78
+
79
+ - **`hreflang="en"`**: Вказує на англомовну версію сторінки.
80
+ - **`hreflang="fr"`**: Вказує на французьку версію сторінки.
81
+ - **`hreflang="es"`**: Вказує на іспаномовну версію сторінки.
82
+ - **`hreflang="x-default"`**: «fallback» — запасна мова або URL за замовчуванням, коли жодна з інших мов не відповідає вподобанням користувача.
83
+
84
+ > **Коротке зауваження:** Переконайтеся, що URL-адреси в цих тегах ведуть безпосередньо на фінальну сторінку, без будь-яких додаткових редиректів.
85
+
86
+ ---
87
+
88
+ ## 4. Робити контент справді «локальним» (не тільки перекладеним)
89
+
90
+ ### 4.1. Локалізація vs. Переклад
91
+
92
+ - **Переклад** означає перетворення тексту з однієї мови на іншу дослівно.
93
+ - **Локалізація** означає адаптацію формату контенту, валюти, одиниць виміру та культурних відсилань для місцевої аудиторії. Наприклад, якщо ви орієнтуєтеся на Францію, ви використаєте `€` замість `$`, і, можливо, згадаєте місцеві свята чи регіонально-специфічні деталі.
94
+
95
+ ### 4.2. Уникнення дубльованого контенту
96
+
97
+ Навіть за наявності якісних перекладів пошукові системи можуть позначити ваш сайт як такий, що містить дубльований контент, якщо сторінки надто схожі за структурою. hreflang допомагає пояснити, що ці сторінки не є дублікатами, а відрізняються мовною версією.
98
+
99
+ ---
100
+
101
+ ## 5. Необхідні технічні елементи SEO
102
+
103
+ ### 5.1. Оголошення мови (`lang` і `dir`)
104
+
105
+ У тегові <html> ви можете вказати мову так:
106
+
107
+ ```html
108
+ <html lang="en"></html>
109
+ ```
110
+
111
+ - **`lang="en"`** допомагає браузерам та засобам доступності розпізнати мову.
112
+
113
+ Для мов, що пишуться справа наліво (наприклад, арабська або іврит), додайте:
114
+
115
+ ```html
116
+ <html dir="rtl" lang="ar"></html>
117
+ ```
118
+
119
+ - **`dir="rtl"`** задає напрямок тексту справа наліво.
120
+
121
+ ### 5.2. Канонічні теги
122
+
123
+ Канонічні теги вказують пошуковим системам, яка сторінка є «оригіналом» або основною версією, якщо у вас є майже ідентичні сторінки. Зазвичай для мультимовних сайтів ви використовуєте **self-referencing** канонічний тег.
124
+
125
+ ```html
126
+ <link rel="canonical" href="https://example.com/fr/produits" />
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 6. On-Page SEO у кількох мовах
132
+
133
+ ### 6.1. Title & Meta Descriptions
134
+
135
+ - **Перекладені та оптимізовані** для кожної мови.
136
+ - Виконайте **дослідження ключових слів** для кожного ринку, оскільки те, що люди шукають англійською, може відрізнятися від пошукових запитів французькою чи іспанською.
137
+
138
+ ### 6.2. Headers (H1, H2, H3)
139
+
140
+ Ваші заголовки мають відображати **локальні фрази** або **ключові слова** для кожного регіону. Не обмежуйтеся простим перекладом оригінального англійського заголовка через Google Translate.
141
+
142
+ ### 6.3. Images & Media
143
+
144
+ - Локалізуйте alt-текст, підписи та імена файлів за потреби.
145
+ - Використовуйте візуальні матеріали, які резонують із цільовою культурою.
146
+
147
+ ---
148
+
149
+ ## 7. Language Switching & User Experience
150
+
151
+ ### 7.1. Auto-Redirect or a Language Selector?
152
+
153
+ - **Автоматичне перенаправлення** (на основі IP або налаштувань браузера) може бути зручним, але воно може направляти мандрівників або користувачів із VPN на неправильну версію.
154
+ - **Селектор мови** часто є більш прозорим — користувачі можуть самі вибрати свою мову, якщо автоматично визначена мова неправильна.
155
+
156
+ Ось спрощений приклад Next.js + Intlayer:
157
+
158
+ ```tsx
159
+ import { useLocation, useNavigate } from "react-router-dom";
160
+ import {
161
+ Locales,
162
+ getHTMLTextDir,
163
+ getLocaleName,
164
+ getLocalizedUrl,
165
+ } from "intlayer";
166
+ import { useLocale } from "react-intlayer";
167
+ import { type FC } from "react";
168
+
169
+ const LocaleSwitcher: FC = () => {
170
+ const { pathname, search } = useLocation(); // Отримати поточний шлях URL. Приклад: /fr/about?foo=bar
171
+ const navigate = useNavigate();
172
+
173
+ const { locale, availableLocales, setLocale } = useLocale({
174
+ onLocaleChange: (locale) => {
175
+ // Побудувати URL з оновленою локаллю
176
+ // Приклад: /es/about?foo=bar
177
+ const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
178
+
179
+ // Update the URL path
180
+ navigate(pathWithLocale);
181
+ },
182
+ });
183
+
184
+ return (
185
+ <ol>
186
+ {availableLocales.map((localeItem) => (
187
+ <li key={localeItem}>
188
+ <a
189
+ href={getLocalizedUrl(location.pathname, localeItem)}
190
+ hrefLang={locale === localeItem ? "x-default" : localeItem}
191
+ aria-current={locale === localeItem ? "page" : undefined}
192
+ onClick={(e) => {
193
+ e.preventDefault();
194
+ setLocale(localeItem);
195
+ }}
196
+ >
197
+ <span>
198
+ {/* Локаль — наприклад FR */}
199
+ {localeItem}
200
+ </span>
201
+ <span>
202
+ {/* Назва мови у власній локалі — наприклад Français */}
203
+ {getLocaleName(localeItem, locale)}
204
+ </span>
205
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
206
+ {/* Мова у поточній локалі — наприклад «Francés», коли поточна локаль встановлена на Locales.SPANISH */}
207
+ {getLocaleName(localeItem)}
208
+ </span>
209
+ <span dir="ltr" lang={Locales.ENGLISH}>
210
+ {/* Мова англійською — наприклад «French» */}
211
+ {getLocaleName(localeItem, Locales.ENGLISH)}
212
+ </span>
213
+ </a>
214
+ </li>
215
+ ))}
216
+ </ol>
217
+ );
218
+ };
219
+ ```
220
+
221
+ ### 7.2. Збереження уподобань
222
+
223
+ - Зберігайте вибір мови користувача в **cookie** або **session**.
224
+ - Наступного разу, коли вони відвідають ваш сайт, ви можете автоматично завантажити їхню уподобану мову.
225
+
226
+ ---
227
+
228
+ ## 8. Створення локальних зворотних посилань
229
+
230
+ **Зворотні посилання (backlinks)** (посилання з зовнішніх сайтів на ваш сайт) залишаються важливим фактором SEO. Коли ви керуєте багатомовним сайтом, врахуйте:
231
+
232
+ - Налагодьте контакти з місцевими новинними сайтами, блогами або форумами. Наприклад, домен `.fr`, що вказує на вашу французьку піддиректорію, може підсилити локальне французьке SEO.
233
+ - Моніторте зворотні посилання за мовами, щоб визначити, які регіони потребують більше PR/маркетингових зусиль.
234
+
235
+ ---
236
+
237
+ ## 9. Моніторинг і підтримка вашого багатомовного сайту
238
+
239
+ ### 9.1. Google Analytics і Search Console
240
+
241
+ - Розбивайте дані за кожним мовним каталогом (`/en/`, `/fr/`, `/es/`).
242
+ - Слідкуйте за **crawl errors**, **duplicate content flags** та **indexing issues** для кожної мови.
243
+
244
+ ### 9.2. Регулярні оновлення контенту
245
+
246
+ - Підтримуйте переклади в актуальному стані. Якщо ви змінюєте опис продукту англійською, оновіть його французькою, іспанською тощо.
247
+ - Застарілі переклади можуть збивати з пантелику клієнтів і підривати довіру користувачів.
248
+
249
+ ---
250
+
251
+ ## 10. Поширені помилки, яких слід уникати
252
+
253
+ 1. **Машинний переклад**
254
+ Автоматичні переклади без людської перевірки можуть містити численні помилки.
255
+
256
+ 2. **Неправильні або відсутні теги `hreflang`**
257
+ Пошукові системи не зможуть визначити мовні версії самостійно, якщо ваші теги неповні або містять неправильні коди.
258
+
259
+ 3. **Перемикання мови лише через `JavaScript`**
260
+ Якщо Google не може просканувати унікальні URL для кожної мови, ваші сторінки можуть не з'являтися у відповідних локальних результатах пошуку.
261
+
262
+ 4. **Ігнорування культурних нюансів**
263
+ Жарт або фраза, що працює в одній країні, може бути образливою або беззмістовною в іншій.
264
+
265
+ ---
266
+
267
+ ## Підсумок
268
+
269
+ Створення багатомовного вебсайту — це не лише переклад тексту. Йдеться про ефективну структуру URL-адрес, використання тегів `hreflang`, щоб допомогти пошуковим системам показувати правильну версію, і забезпечення відмінного користувацького досвіду з локалізованими візуалами, селекторами мови та послідовною навігацією. Дотримання цих найкращих практик підготує вас до успіху на світових ринках, підвищить задоволеність користувачів і, зрештою, покращить SEO-показники в різних регіонах.
270
+
271
+ Якщо ви використовуєте Next.js (особливо App Router у Next.js 13+), інструмент на кшталт **Intlayer** може оптимізувати увесь цей процес. Він допомагає з усього — від генерації локалізованих sitemaps до автоматичного керування `hreflang` лінками, визначення мови та іншого, щоб ви могли зосередитися на створенні якісного багатомовного контенту.
272
+
273
+ **Готові вийти на глобальний рівень?** Почніть впроваджувати ці стратегії SEO та i18n вже зараз і спостерігайте, як нові відвідувачі з усього світу знаходять і взаємодіють з вашим сайтом!
@@ -0,0 +1,211 @@
1
+ ---
2
+ createdAt: 2024-12-24
3
+ updatedAt: 2025-11-06
4
+ title: Як автоматизувати JSON-переклади i18next за допомогою Intlayer
5
+ description: Автоматизуйте ваші JSON-переклади за допомогою Intlayer та i18next для покращеної інтернаціоналізації в JavaScript-додатках.
6
+ keywords:
7
+ - Intlayer
8
+ - i18next
9
+ - Інтернаціоналізація
10
+ - i18n
11
+ - Локалізація
12
+ - Переклад
13
+ - React
14
+ - Next.js
15
+ - JavaScript
16
+ - TypeScript
17
+ - Міграція
18
+ - Інтеграція
19
+ slugs:
20
+ - blog
21
+ - intlayer-with-i18next
22
+ youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
23
+ history:
24
+ - version: 7.5.0
25
+ date: 2025-12-13
26
+ changes: Додано підтримку формату i18next
27
+ - version: 7.0.7
28
+ date: 2025-11-06
29
+ changes: Додано документацію щодо підтримки AI-провайдера
30
+ - version: 7.0.6
31
+ date: 2025-11-01
32
+ changes: Додано плагін loadJSON
33
+ - version: 7.0.0
34
+ date: 2025-10-29
35
+ changes: Change to syncJSON plugin
36
+ ---
37
+
38
+ # Як автоматизувати ваші JSON-переклади i18next за допомогою Intlayer
39
+
40
+ <iframe title="Як автоматизувати ваші JSON-переклади i18next за допомогою Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/MpGMxniDHNg?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
41
+
42
+ ## Зміст
43
+
44
+ <TOC/>
45
+
46
+ ## Що таке Intlayer?
47
+
48
+ **Intlayer** — інноваційна open-source бібліотека для інтернаціоналізації, створена для вирішення недоліків традиційних i18n-рішень. Вона пропонує сучасний підхід до керування контентом у JavaScript-додатках.
49
+
50
+ Дивіться конкретне порівняння з i18next у нашому дописі в блозі «next-i18next vs. next-intl vs. Intlayer»: https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md
51
+
52
+ ## Чому поєднувати Intlayer з i18next?
53
+
54
+ Хоча Intlayer пропонує відмінне автономне i18n-рішення (див. наш посібник з інтеграції Next.js: https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_nextjs_16.md), ви можете захотіти поєднати його з i18next з кількох причин.
55
+
56
+ Intlayer пропонує широкий набір розширених функцій, що виходять за межі традиційних i18n-інструментів. Він допомагає вам:
57
+
58
+ - **Автоматично виявляти та заповнювати відсутні переклади**, щоб спростити локалізацію.
59
+ - **Тестувати та перевіряти ваші переклади** безпосередньо у ваших робочих процесах розробки або CI/CD.
60
+ - **Керувати контентом на рівні компонентів**, що дозволяє отримати чисту, масштабовану та легку в підтримці структуру в усьому вашому додатку.
61
+ - **Виносити контент за межі коду**, роблячи його простим для редагування всією вашою командою (розробники, перекладачі та контент-менеджери).
62
+
63
+ Однак, **i18next** залишається відмінним і широко застосовуваним рішенням для i18n завдяки своїй **дозрілій екосистемі**, **широкій підтримці спільноти** та **широкій сумісності з плагінами**.
64
+
65
+ Поєднавши **Intlayer** з **i18next**, ви отримуєте найкраще з обох світів — стабільність і зрілість екосистеми i18next разом із сучасним керуванням контентом, автоматизацією та покращенням developer experience від Intlayer.
66
+
67
+ Цей посібник пояснює, як використовувати Intlayer як **адаптер для i18next**, що дозволяє вам:
68
+
69
+ - Поступово мігрувати з i18next на Intlayer.
70
+ - Зберігайте існуючі плагіни та робочі процеси i18next.
71
+ - Автоматизуйте ваші JSON-переклади у CLI або в CI/CD конвеєрах.
72
+ - Тестуйте, синхронізуйте та керуйте перекладами ефективніше.
73
+
74
+ ## Зміст
75
+
76
+ <TOC/>
77
+
78
+ ## Покроковий посібник із налаштування Intlayer з i18next
79
+
80
+ ### Крок 1: Встановлення залежностей
81
+
82
+ Встановіть необхідні пакети:
83
+
84
+ ```bash packageManager="npm"
85
+ npm install intlayer @intlayer/sync-json-plugin --save-dev
86
+ npx intlayer init
87
+ ```
88
+
89
+ ```bash packageManager="pnpm"
90
+ pnpm add intlayer @intlayer/sync-json-plugin --save-dev
91
+ pnpm intlayer init
92
+ ```
93
+
94
+ ```bash packageManager="yarn"
95
+ yarn add intlayer @intlayer/sync-json-plugin --dev
96
+ yarn intlayer init
97
+ ```
98
+
99
+ ```bash packageManager="bun"
100
+ bun add intlayer @intlayer/sync-json-plugin --dev
101
+ bunx intlayer init
102
+ ```
103
+
104
+ **Опис пакетів:**
105
+
106
+ - **intlayer**: Базова бібліотека для управління інтернаціоналізацією, декларації контенту та побудови
107
+ - **@intlayer/sync-json-plugin**: Плагін для експорту декларацій контенту Intlayer у формат JSON, сумісний з i18next
108
+
109
+ ### Крок 2: Реалізуйте плагін Intlayer для обгортання JSON
110
+
111
+ Створіть файл конфігурації Intlayer, щоб визначити підтримувані локалі:
112
+
113
+ **Якщо ви також хочете експортувати JSON-словники для i18next**, додайте плагін `syncJSON`:
114
+
115
+ ```typescript fileName="intlayer.config.ts"
116
+ import { Locales, type IntlayerConfig } from "intlayer";
117
+ import { syncJSON } from "@intlayer/sync-json-plugin";
118
+
119
+ const config: IntlayerConfig = {
120
+ internationalization: {
121
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
122
+ defaultLocale: Locales.ENGLISH,
123
+ },
124
+ plugins: [
125
+ syncJSON({
126
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
127
+ }),
128
+ ],
129
+ };
130
+
131
+ export default config;
132
+ ```
133
+
134
+ Плагін `syncJSON` автоматично обгортає JSON. Він читає та записує JSON-файли, не змінюючи архітектуру їхнього вмісту.
135
+
136
+ Якщо ви хочете, щоб ці JSON-файли співіснували з файлами декларацій контенту Intlayer (`.content` файли), Intlayer оброблятиме їх таким чином:
137
+
138
+ 1. завантажить як JSON, так і файли декларацій контенту і перетворить їх на словник Intlayer.
139
+ 2. якщо виникають конфлікти між JSON та файлами декларацій контенту, Intlayer виконає злиття всіх словників. Результат залежатиме від пріоритету плагінів і пріоритету файлів декларацій контенту (усі параметри можна налаштувати).
140
+
141
+ Якщо зміни вносяться за допомогою CLI для перекладу JSON або через CMS, Intlayer оновить JSON-файл з новими перекладами.
142
+
143
+ Щоб дізнатися більше про плагін `syncJSON`, див. [документацію плагіна syncJSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/plugins/sync-json.md).
144
+
145
+ ### Крок 4: Налаштування AI-провайдера
146
+
147
+ Intlayer надає набір просунутих автоматизаційних та дружніх до розробника функцій для вашого робочого процесу i18next.
148
+
149
+ - **Автоматичне виявлення та заповнення відсутніх перекладів**: Intlayer сканує ваші JSON-словники, знаходить неперекладені або відсутні ключі і перекладає лише їх, тож 99% вашого JSON залишається незмінним.
150
+ - **Поблочний переклад великих JSON-файлів**: Коли ваші файли перекладу дуже великі, Intlayer автоматично розбиває обробку на керовані блоки, перекладаючи їх незалежно, щоб уникнути обмежень API та проблем з пам’яттю.
151
+ - **Паралелізація просторів імен (namespaces)**: Якщо у вас сотні просторів імен (або файлів), Intlayer паралелізує задачі перекладу, ефективно прискорюючи ваші CI/CD або масові операції перекладу.
152
+ - **Гнучка підтримка AI-провайдерів**: Обирайте улюбленого AI-провайдера (наприклад, OpenAI, Claude, Gemini), просто налаштувавши облікові дані. Використовуйте власний API-ключ і за потреби перемикайте провайдерів.
153
+ - **Стійка обробка відповідей AI**: Intlayer може обробляти крайові випадки, коли ваш AI-провайдер повертає текст або як рядок, або як об’єкт, навіть автоматично повторюючи спроби, якщо формат є непослідовним.
154
+ - Готовий для CLI та CI/CD: запускайте перевірки Intlayer і автозаповнення безпосередньо у ваших тестах або пайплайнах, роблячи процес локалізації надійним та автоматизованим.
155
+ - Інтегрується поверх наявної конфігурації: вам не потрібно змінювати i18next або основу Next.js. Intlayer працює як додатковий плагін до вашої поточної установки, надаючи всі ці переваги з мінімальною міграцією.
156
+
157
+ Ось приклад того, як налаштувати AI-провайдера:
158
+
159
+ ```ts fileName="intlayer.config.ts"
160
+ import { Locales, type IntlayerConfig } from "intlayer";
161
+ import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
162
+
163
+ const config: IntlayerConfig = {
164
+ internationalization: {
165
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
166
+ defaultLocale: Locales.ENGLISH,
167
+ },
168
+ ai: {
169
+ provider: "openai",
170
+ model: "gpt-5-mini",
171
+ apiKey: process.env.OPENAI_API_KEY,
172
+ },
173
+ plugins: [
174
+ syncJSON({
175
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
176
+ }),
177
+ ],
178
+ };
179
+
180
+ export default config;
181
+ ```
182
+
183
+ Потім ви можете виконати наступну команду, щоб заповнити переклади:
184
+
185
+ ```bash
186
+ npx intlayer fill
187
+ ```
188
+
189
+ Це заповнить ваші переклади за допомогою AI-провайдера, якого ви налаштували.
190
+
191
+ > Перегляньте всіх доступних AI-провайдерів у [документації з конфігурації Intlayer AI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md#ai-configuration).
192
+ > Перегляньте всі доступні команди в [документації Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/index.md).
193
+
194
+ ---
195
+
196
+ ## Налаштування Git
197
+
198
+ Рекомендується ігнорувати автоматично згенеровані файли Intlayer:
199
+
200
+ ```plaintext fileName=".gitignore"
201
+ # Ігнорувати файли, згенеровані Intlayer
202
+ .intlayer
203
+ ```
204
+
205
+ Ці файли можуть бути повторно згенеровані під час збірки і їх не потрібно додавати до системи контролю версій.
206
+
207
+ ### Розширення для VS Code
208
+
209
+ Для покращення досвіду розробника встановіть офіційне **Intlayer VS Code Extension**:
210
+
211
+ [Встановити з VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)