@intlayer/docs 9.4.2 → 9.4.3

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 (1289) hide show
  1. package/blog/ar/date_time_number_formatting_locales.md +216 -0
  2. package/blog/ar/detecting_missing_translations.md +202 -0
  3. package/blog/ar/i18n_in_ci_cd_pipelines.md +247 -0
  4. package/blog/ar/i18n_meaning.md +0 -2
  5. package/blog/ar/i18n_testing_strategies.md +179 -0
  6. package/blog/ar/intlayer_with_i18next.md +3 -3
  7. package/blog/ar/intlayer_with_next-i18next.md +3 -3
  8. package/blog/ar/intlayer_with_next-intl.md +3 -3
  9. package/blog/ar/intlayer_with_react-i18next.md +3 -3
  10. package/blog/ar/intlayer_with_react-intl.md +3 -3
  11. package/blog/ar/intlayer_with_vue-i18n.md +3 -3
  12. package/blog/ar/is_i18next_outdated.md +315 -0
  13. package/blog/ar/is_next-intl_outdated.md +363 -0
  14. package/blog/ar/is_vue-i18n_outdated.md +338 -0
  15. package/blog/ar/list_i18n_technologies/build-tools/vite.md +177 -0
  16. package/blog/ar/list_i18n_technologies/frameworks/angular.md +0 -2
  17. package/blog/ar/list_i18n_technologies/frameworks/react-native.md +0 -2
  18. package/blog/ar/list_i18n_technologies/frameworks/react.md +0 -2
  19. package/blog/ar/list_i18n_technologies/frameworks/svelte.md +0 -2
  20. package/blog/ar/list_i18n_technologies/frameworks/vue.md +0 -2
  21. package/blog/ar/what_is_internationalization.md +0 -2
  22. package/blog/de/date_time_number_formatting_locales.md +216 -0
  23. package/blog/de/detecting_missing_translations.md +202 -0
  24. package/blog/de/i18n_in_ci_cd_pipelines.md +247 -0
  25. package/blog/de/i18n_meaning.md +0 -2
  26. package/blog/de/i18n_testing_strategies.md +179 -0
  27. package/blog/de/intlayer_with_i18next.md +3 -3
  28. package/blog/de/intlayer_with_next-i18next.md +3 -3
  29. package/blog/de/intlayer_with_next-intl.md +3 -3
  30. package/blog/de/intlayer_with_react-i18next.md +3 -3
  31. package/blog/de/intlayer_with_react-intl.md +3 -3
  32. package/blog/de/intlayer_with_vue-i18n.md +3 -3
  33. package/blog/de/is_i18next_outdated.md +315 -0
  34. package/blog/de/is_next-intl_outdated.md +363 -0
  35. package/blog/de/is_vue-i18n_outdated.md +338 -0
  36. package/blog/de/list_i18n_technologies/build-tools/vite.md +179 -0
  37. package/blog/de/list_i18n_technologies/frameworks/angular.md +0 -2
  38. package/blog/de/list_i18n_technologies/frameworks/react-native.md +0 -2
  39. package/blog/de/list_i18n_technologies/frameworks/react.md +0 -2
  40. package/blog/de/list_i18n_technologies/frameworks/svelte.md +0 -2
  41. package/blog/de/list_i18n_technologies/frameworks/vue.md +0 -2
  42. package/blog/de/what_is_internationalization.md +0 -2
  43. package/blog/en/date_time_number_formatting_locales.md +216 -0
  44. package/blog/en/detecting_missing_translations.md +202 -0
  45. package/blog/en/i18n_in_ci_cd_pipelines.md +247 -0
  46. package/blog/en/i18n_meaning.md +0 -2
  47. package/blog/en/i18n_testing_strategies.md +179 -0
  48. package/blog/en/icu_message_format.md +288 -0
  49. package/blog/en/intlayer_with_i18next.md +3 -3
  50. package/blog/en/intlayer_with_next-i18next.md +3 -3
  51. package/blog/en/intlayer_with_next-intl.md +3 -3
  52. package/blog/en/intlayer_with_react-i18next.md +3 -3
  53. package/blog/en/intlayer_with_react-intl.md +3 -3
  54. package/blog/en/intlayer_with_vue-i18n.md +3 -3
  55. package/blog/en/is_i18next_outdated.md +315 -0
  56. package/blog/en/is_next-intl_outdated.md +363 -0
  57. package/blog/en/is_vue-i18n_outdated.md +338 -0
  58. package/blog/en/list_i18n_technologies/build-tools/vite.md +179 -0
  59. package/blog/en/list_i18n_technologies/frameworks/angular.md +184 -108
  60. package/blog/en/list_i18n_technologies/frameworks/astro.md +268 -0
  61. package/blog/en/list_i18n_technologies/frameworks/nextjs.md +196 -0
  62. package/blog/en/list_i18n_technologies/frameworks/nuxt.md +255 -0
  63. package/blog/en/list_i18n_technologies/frameworks/react-native.md +133 -154
  64. package/blog/en/list_i18n_technologies/frameworks/react-router.md +331 -0
  65. package/blog/en/list_i18n_technologies/frameworks/react.md +176 -96
  66. package/blog/en/list_i18n_technologies/frameworks/solid.md +268 -0
  67. package/blog/en/list_i18n_technologies/frameworks/svelte.md +156 -88
  68. package/blog/en/list_i18n_technologies/frameworks/sveltekit.md +235 -0
  69. package/blog/en/list_i18n_technologies/frameworks/tanstack-start.md +280 -0
  70. package/blog/en/list_i18n_technologies/frameworks/vue.md +167 -95
  71. package/blog/en/what_is_internationalization.md +0 -2
  72. package/blog/en-GB/date_time_number_formatting_locales.md +216 -0
  73. package/blog/en-GB/detecting_missing_translations.md +202 -0
  74. package/blog/en-GB/i18n_in_ci_cd_pipelines.md +247 -0
  75. package/blog/en-GB/i18n_meaning.md +0 -2
  76. package/blog/en-GB/i18n_testing_strategies.md +179 -0
  77. package/blog/en-GB/intlayer_with_i18next.md +3 -3
  78. package/blog/en-GB/intlayer_with_next-i18next.md +3 -3
  79. package/blog/en-GB/intlayer_with_next-intl.md +3 -3
  80. package/blog/en-GB/intlayer_with_react-i18next.md +3 -3
  81. package/blog/en-GB/intlayer_with_react-intl.md +3 -3
  82. package/blog/en-GB/intlayer_with_vue-i18n.md +3 -3
  83. package/blog/en-GB/is_i18next_outdated.md +315 -0
  84. package/blog/en-GB/is_next-intl_outdated.md +363 -0
  85. package/blog/en-GB/is_vue-i18n_outdated.md +338 -0
  86. package/blog/en-GB/list_i18n_technologies/build-tools/vite.md +179 -0
  87. package/blog/en-GB/list_i18n_technologies/frameworks/angular.md +0 -2
  88. package/blog/en-GB/list_i18n_technologies/frameworks/react-native.md +0 -2
  89. package/blog/en-GB/list_i18n_technologies/frameworks/react.md +0 -2
  90. package/blog/en-GB/list_i18n_technologies/frameworks/svelte.md +0 -2
  91. package/blog/en-GB/list_i18n_technologies/frameworks/vue.md +0 -2
  92. package/blog/en-GB/what_is_internationalization.md +0 -2
  93. package/blog/es/date_time_number_formatting_locales.md +216 -0
  94. package/blog/es/detecting_missing_translations.md +202 -0
  95. package/blog/es/i18n_in_ci_cd_pipelines.md +247 -0
  96. package/blog/es/i18n_meaning.md +0 -2
  97. package/blog/es/i18n_testing_strategies.md +179 -0
  98. package/blog/es/intlayer_with_i18next.md +3 -3
  99. package/blog/es/intlayer_with_next-i18next.md +3 -3
  100. package/blog/es/intlayer_with_next-intl.md +3 -3
  101. package/blog/es/intlayer_with_react-i18next.md +3 -3
  102. package/blog/es/intlayer_with_react-intl.md +3 -3
  103. package/blog/es/intlayer_with_vue-i18n.md +3 -3
  104. package/blog/es/is_i18next_outdated.md +315 -0
  105. package/blog/es/is_next-intl_outdated.md +363 -0
  106. package/blog/es/is_vue-i18n_outdated.md +338 -0
  107. package/blog/es/list_i18n_technologies/build-tools/vite.md +179 -0
  108. package/blog/es/list_i18n_technologies/frameworks/angular.md +0 -2
  109. package/blog/es/list_i18n_technologies/frameworks/react-native.md +0 -2
  110. package/blog/es/list_i18n_technologies/frameworks/react.md +0 -2
  111. package/blog/es/list_i18n_technologies/frameworks/svelte.md +0 -2
  112. package/blog/es/list_i18n_technologies/frameworks/vue.md +0 -2
  113. package/blog/es/what_is_internationalization.md +0 -2
  114. package/blog/fr/date_time_number_formatting_locales.md +216 -0
  115. package/blog/fr/detecting_missing_translations.md +202 -0
  116. package/blog/fr/i18n_in_ci_cd_pipelines.md +247 -0
  117. package/blog/fr/i18n_meaning.md +0 -2
  118. package/blog/fr/i18n_testing_strategies.md +179 -0
  119. package/blog/fr/intlayer_with_i18next.md +3 -3
  120. package/blog/fr/intlayer_with_next-i18next.md +3 -3
  121. package/blog/fr/intlayer_with_next-intl.md +3 -3
  122. package/blog/fr/intlayer_with_react-i18next.md +3 -3
  123. package/blog/fr/intlayer_with_react-intl.md +3 -3
  124. package/blog/fr/intlayer_with_vue-i18n.md +3 -3
  125. package/blog/fr/is_i18next_outdated.md +315 -0
  126. package/blog/fr/is_next-intl_outdated.md +363 -0
  127. package/blog/fr/is_vue-i18n_outdated.md +338 -0
  128. package/blog/fr/list_i18n_technologies/build-tools/vite.md +179 -0
  129. package/blog/fr/list_i18n_technologies/frameworks/angular.md +0 -2
  130. package/blog/fr/list_i18n_technologies/frameworks/react-native.md +0 -2
  131. package/blog/fr/list_i18n_technologies/frameworks/react.md +0 -2
  132. package/blog/fr/list_i18n_technologies/frameworks/svelte.md +0 -2
  133. package/blog/fr/list_i18n_technologies/frameworks/vue.md +0 -2
  134. package/blog/fr/what_is_internationalization.md +0 -2
  135. package/blog/hi/date_time_number_formatting_locales.md +216 -0
  136. package/blog/hi/detecting_missing_translations.md +202 -0
  137. package/blog/hi/i18n_in_ci_cd_pipelines.md +247 -0
  138. package/blog/hi/i18n_meaning.md +0 -2
  139. package/blog/hi/i18n_testing_strategies.md +179 -0
  140. package/blog/hi/intlayer_with_i18next.md +3 -3
  141. package/blog/hi/intlayer_with_next-i18next.md +3 -3
  142. package/blog/hi/intlayer_with_next-intl.md +3 -3
  143. package/blog/hi/intlayer_with_react-i18next.md +3 -3
  144. package/blog/hi/intlayer_with_react-intl.md +3 -3
  145. package/blog/hi/intlayer_with_vue-i18n.md +3 -3
  146. package/blog/hi/is_i18next_outdated.md +317 -0
  147. package/blog/hi/is_next-intl_outdated.md +363 -0
  148. package/blog/hi/is_vue-i18n_outdated.md +338 -0
  149. package/blog/hi/list_i18n_technologies/build-tools/vite.md +177 -0
  150. package/blog/hi/list_i18n_technologies/frameworks/angular.md +0 -2
  151. package/blog/hi/list_i18n_technologies/frameworks/react-native.md +0 -2
  152. package/blog/hi/list_i18n_technologies/frameworks/react.md +0 -2
  153. package/blog/hi/list_i18n_technologies/frameworks/svelte.md +0 -2
  154. package/blog/hi/list_i18n_technologies/frameworks/vue.md +0 -2
  155. package/blog/hi/what_is_internationalization.md +0 -2
  156. package/blog/id/date_time_number_formatting_locales.md +216 -0
  157. package/blog/id/detecting_missing_translations.md +202 -0
  158. package/blog/id/i18n_in_ci_cd_pipelines.md +247 -0
  159. package/blog/id/i18n_meaning.md +0 -2
  160. package/blog/id/i18n_testing_strategies.md +179 -0
  161. package/blog/id/intlayer_with_i18next.md +3 -3
  162. package/blog/id/intlayer_with_next-i18next.md +3 -3
  163. package/blog/id/intlayer_with_next-intl.md +3 -3
  164. package/blog/id/intlayer_with_react-i18next.md +3 -3
  165. package/blog/id/intlayer_with_react-intl.md +3 -3
  166. package/blog/id/intlayer_with_vue-i18n.md +3 -3
  167. package/blog/id/is_i18next_outdated.md +317 -0
  168. package/blog/id/is_next-intl_outdated.md +363 -0
  169. package/blog/id/is_vue-i18n_outdated.md +338 -0
  170. package/blog/id/list_i18n_technologies/build-tools/vite.md +177 -0
  171. package/blog/id/list_i18n_technologies/frameworks/angular.md +0 -2
  172. package/blog/id/list_i18n_technologies/frameworks/react-native.md +0 -2
  173. package/blog/id/list_i18n_technologies/frameworks/react.md +0 -2
  174. package/blog/id/list_i18n_technologies/frameworks/svelte.md +0 -2
  175. package/blog/id/list_i18n_technologies/frameworks/vue.md +0 -2
  176. package/blog/id/what_is_internationalization.md +0 -2
  177. package/blog/it/date_time_number_formatting_locales.md +216 -0
  178. package/blog/it/detecting_missing_translations.md +202 -0
  179. package/blog/it/i18n_in_ci_cd_pipelines.md +247 -0
  180. package/blog/it/i18n_meaning.md +0 -2
  181. package/blog/it/i18n_testing_strategies.md +179 -0
  182. package/blog/it/intlayer_with_i18next.md +3 -3
  183. package/blog/it/intlayer_with_next-i18next.md +3 -3
  184. package/blog/it/intlayer_with_next-intl.md +3 -3
  185. package/blog/it/intlayer_with_react-i18next.md +3 -3
  186. package/blog/it/intlayer_with_react-intl.md +3 -3
  187. package/blog/it/intlayer_with_vue-i18n.md +3 -3
  188. package/blog/it/is_i18next_outdated.md +315 -0
  189. package/blog/it/is_next-intl_outdated.md +363 -0
  190. package/blog/it/is_vue-i18n_outdated.md +338 -0
  191. package/blog/it/list_i18n_technologies/build-tools/vite.md +179 -0
  192. package/blog/it/list_i18n_technologies/frameworks/angular.md +0 -2
  193. package/blog/it/list_i18n_technologies/frameworks/react-native.md +0 -2
  194. package/blog/it/list_i18n_technologies/frameworks/react.md +0 -2
  195. package/blog/it/list_i18n_technologies/frameworks/svelte.md +0 -2
  196. package/blog/it/list_i18n_technologies/frameworks/vue.md +0 -2
  197. package/blog/it/what_is_internationalization.md +0 -2
  198. package/blog/ja/date_time_number_formatting_locales.md +216 -0
  199. package/blog/ja/detecting_missing_translations.md +202 -0
  200. package/blog/ja/i18n_in_ci_cd_pipelines.md +247 -0
  201. package/blog/ja/i18n_meaning.md +0 -2
  202. package/blog/ja/i18n_testing_strategies.md +179 -0
  203. package/blog/ja/intlayer_with_i18next.md +3 -3
  204. package/blog/ja/intlayer_with_next-i18next.md +3 -3
  205. package/blog/ja/intlayer_with_next-intl.md +3 -3
  206. package/blog/ja/intlayer_with_react-i18next.md +3 -3
  207. package/blog/ja/intlayer_with_react-intl.md +3 -3
  208. package/blog/ja/intlayer_with_vue-i18n.md +3 -3
  209. package/blog/ja/is_i18next_outdated.md +315 -0
  210. package/blog/ja/is_next-intl_outdated.md +363 -0
  211. package/blog/ja/is_vue-i18n_outdated.md +338 -0
  212. package/blog/ja/list_i18n_technologies/build-tools/vite.md +179 -0
  213. package/blog/ja/list_i18n_technologies/frameworks/angular.md +0 -2
  214. package/blog/ja/list_i18n_technologies/frameworks/react-native.md +0 -2
  215. package/blog/ja/list_i18n_technologies/frameworks/react.md +0 -2
  216. package/blog/ja/list_i18n_technologies/frameworks/svelte.md +0 -2
  217. package/blog/ja/list_i18n_technologies/frameworks/vue.md +0 -2
  218. package/blog/ja/what_is_internationalization.md +0 -2
  219. package/blog/ko/date_time_number_formatting_locales.md +216 -0
  220. package/blog/ko/detecting_missing_translations.md +202 -0
  221. package/blog/ko/i18n_in_ci_cd_pipelines.md +247 -0
  222. package/blog/ko/i18n_meaning.md +0 -2
  223. package/blog/ko/i18n_testing_strategies.md +179 -0
  224. package/blog/ko/intlayer_with_i18next.md +3 -3
  225. package/blog/ko/intlayer_with_next-i18next.md +3 -3
  226. package/blog/ko/intlayer_with_next-intl.md +3 -3
  227. package/blog/ko/intlayer_with_react-i18next.md +3 -3
  228. package/blog/ko/intlayer_with_react-intl.md +3 -3
  229. package/blog/ko/intlayer_with_vue-i18n.md +3 -3
  230. package/blog/ko/is_i18next_outdated.md +317 -0
  231. package/blog/ko/is_next-intl_outdated.md +363 -0
  232. package/blog/ko/is_vue-i18n_outdated.md +338 -0
  233. package/blog/ko/list_i18n_technologies/build-tools/vite.md +179 -0
  234. package/blog/ko/list_i18n_technologies/frameworks/angular.md +0 -2
  235. package/blog/ko/list_i18n_technologies/frameworks/react-native.md +0 -2
  236. package/blog/ko/list_i18n_technologies/frameworks/react.md +0 -2
  237. package/blog/ko/list_i18n_technologies/frameworks/svelte.md +0 -2
  238. package/blog/ko/list_i18n_technologies/frameworks/vue.md +0 -2
  239. package/blog/ko/what_is_internationalization.md +0 -2
  240. package/blog/pl/date_time_number_formatting_locales.md +216 -0
  241. package/blog/pl/detecting_missing_translations.md +202 -0
  242. package/blog/pl/i18n_in_ci_cd_pipelines.md +247 -0
  243. package/blog/pl/i18n_meaning.md +0 -2
  244. package/blog/pl/i18n_testing_strategies.md +179 -0
  245. package/blog/pl/intlayer_with_i18next.md +3 -3
  246. package/blog/pl/intlayer_with_next-i18next.md +3 -3
  247. package/blog/pl/intlayer_with_next-intl.md +3 -3
  248. package/blog/pl/intlayer_with_react-i18next.md +3 -3
  249. package/blog/pl/intlayer_with_react-intl.md +3 -3
  250. package/blog/pl/intlayer_with_vue-i18n.md +3 -3
  251. package/blog/pl/is_i18next_outdated.md +315 -0
  252. package/blog/pl/is_next-intl_outdated.md +363 -0
  253. package/blog/pl/is_vue-i18n_outdated.md +338 -0
  254. package/blog/pl/list_i18n_technologies/build-tools/vite.md +177 -0
  255. package/blog/pl/list_i18n_technologies/frameworks/angular.md +0 -2
  256. package/blog/pl/list_i18n_technologies/frameworks/react-native.md +0 -2
  257. package/blog/pl/list_i18n_technologies/frameworks/react.md +0 -2
  258. package/blog/pl/list_i18n_technologies/frameworks/svelte.md +0 -2
  259. package/blog/pl/list_i18n_technologies/frameworks/vue.md +0 -2
  260. package/blog/pl/what_is_internationalization.md +0 -2
  261. package/blog/pt/date_time_number_formatting_locales.md +216 -0
  262. package/blog/pt/detecting_missing_translations.md +202 -0
  263. package/blog/pt/i18n_in_ci_cd_pipelines.md +247 -0
  264. package/blog/pt/i18n_meaning.md +0 -2
  265. package/blog/pt/i18n_testing_strategies.md +179 -0
  266. package/blog/pt/intlayer_with_i18next.md +3 -3
  267. package/blog/pt/intlayer_with_next-i18next.md +3 -3
  268. package/blog/pt/intlayer_with_next-intl.md +3 -3
  269. package/blog/pt/intlayer_with_react-i18next.md +3 -3
  270. package/blog/pt/intlayer_with_react-intl.md +3 -3
  271. package/blog/pt/intlayer_with_vue-i18n.md +3 -3
  272. package/blog/pt/is_i18next_outdated.md +315 -0
  273. package/blog/pt/is_next-intl_outdated.md +363 -0
  274. package/blog/pt/is_vue-i18n_outdated.md +338 -0
  275. package/blog/pt/list_i18n_technologies/build-tools/vite.md +179 -0
  276. package/blog/pt/list_i18n_technologies/frameworks/angular.md +0 -2
  277. package/blog/pt/list_i18n_technologies/frameworks/react-native.md +0 -2
  278. package/blog/pt/list_i18n_technologies/frameworks/react.md +0 -2
  279. package/blog/pt/list_i18n_technologies/frameworks/svelte.md +0 -2
  280. package/blog/pt/list_i18n_technologies/frameworks/vue.md +0 -2
  281. package/blog/pt/what_is_internationalization.md +0 -2
  282. package/blog/ru/date_time_number_formatting_locales.md +216 -0
  283. package/blog/ru/detecting_missing_translations.md +202 -0
  284. package/blog/ru/i18n_in_ci_cd_pipelines.md +247 -0
  285. package/blog/ru/i18n_meaning.md +0 -2
  286. package/blog/ru/i18n_testing_strategies.md +179 -0
  287. package/blog/ru/intlayer_with_i18next.md +3 -3
  288. package/blog/ru/intlayer_with_next-i18next.md +3 -3
  289. package/blog/ru/intlayer_with_next-intl.md +3 -3
  290. package/blog/ru/intlayer_with_react-i18next.md +3 -3
  291. package/blog/ru/intlayer_with_react-intl.md +3 -3
  292. package/blog/ru/intlayer_with_vue-i18n.md +3 -3
  293. package/blog/ru/is_i18next_outdated.md +315 -0
  294. package/blog/ru/is_next-intl_outdated.md +363 -0
  295. package/blog/ru/is_vue-i18n_outdated.md +338 -0
  296. package/blog/ru/list_i18n_technologies/build-tools/vite.md +179 -0
  297. package/blog/ru/list_i18n_technologies/frameworks/angular.md +0 -2
  298. package/blog/ru/list_i18n_technologies/frameworks/react-native.md +0 -2
  299. package/blog/ru/list_i18n_technologies/frameworks/react.md +0 -2
  300. package/blog/ru/list_i18n_technologies/frameworks/svelte.md +0 -2
  301. package/blog/ru/list_i18n_technologies/frameworks/vue.md +0 -2
  302. package/blog/ru/what_is_internationalization.md +0 -2
  303. package/blog/tr/date_time_number_formatting_locales.md +216 -0
  304. package/blog/tr/detecting_missing_translations.md +202 -0
  305. package/blog/tr/i18n_in_ci_cd_pipelines.md +247 -0
  306. package/blog/tr/i18n_meaning.md +0 -2
  307. package/blog/tr/i18n_testing_strategies.md +179 -0
  308. package/blog/tr/intlayer_with_i18next.md +3 -3
  309. package/blog/tr/intlayer_with_next-i18next.md +3 -3
  310. package/blog/tr/intlayer_with_next-intl.md +3 -3
  311. package/blog/tr/intlayer_with_react-i18next.md +3 -3
  312. package/blog/tr/intlayer_with_react-intl.md +3 -3
  313. package/blog/tr/intlayer_with_vue-i18n.md +3 -3
  314. package/blog/tr/is_i18next_outdated.md +315 -0
  315. package/blog/tr/is_next-intl_outdated.md +363 -0
  316. package/blog/tr/is_vue-i18n_outdated.md +338 -0
  317. package/blog/tr/list_i18n_technologies/build-tools/vite.md +179 -0
  318. package/blog/tr/list_i18n_technologies/frameworks/angular.md +0 -2
  319. package/blog/tr/list_i18n_technologies/frameworks/react-native.md +0 -2
  320. package/blog/tr/list_i18n_technologies/frameworks/react.md +0 -2
  321. package/blog/tr/list_i18n_technologies/frameworks/svelte.md +0 -2
  322. package/blog/tr/list_i18n_technologies/frameworks/vue.md +0 -2
  323. package/blog/tr/what_is_internationalization.md +0 -2
  324. package/blog/uk/date_time_number_formatting_locales.md +216 -0
  325. package/blog/uk/detecting_missing_translations.md +202 -0
  326. package/blog/uk/i18n_in_ci_cd_pipelines.md +247 -0
  327. package/blog/uk/i18n_meaning.md +0 -2
  328. package/blog/uk/i18n_testing_strategies.md +179 -0
  329. package/blog/uk/intlayer_with_i18next.md +3 -3
  330. package/blog/uk/intlayer_with_next-i18next.md +3 -3
  331. package/blog/uk/intlayer_with_next-intl.md +3 -3
  332. package/blog/uk/intlayer_with_react-i18next.md +3 -3
  333. package/blog/uk/intlayer_with_react-intl.md +3 -3
  334. package/blog/uk/intlayer_with_vue-i18n.md +3 -3
  335. package/blog/uk/is_i18next_outdated.md +315 -0
  336. package/blog/uk/is_next-intl_outdated.md +363 -0
  337. package/blog/uk/is_vue-i18n_outdated.md +338 -0
  338. package/blog/uk/list_i18n_technologies/build-tools/vite.md +177 -0
  339. package/blog/uk/list_i18n_technologies/frameworks/angular.md +0 -2
  340. package/blog/uk/list_i18n_technologies/frameworks/react-native.md +0 -2
  341. package/blog/uk/list_i18n_technologies/frameworks/react.md +0 -2
  342. package/blog/uk/list_i18n_technologies/frameworks/svelte.md +0 -2
  343. package/blog/uk/list_i18n_technologies/frameworks/vue.md +0 -2
  344. package/blog/uk/what_is_internationalization.md +0 -2
  345. package/blog/vi/date_time_number_formatting_locales.md +216 -0
  346. package/blog/vi/detecting_missing_translations.md +202 -0
  347. package/blog/vi/i18n_in_ci_cd_pipelines.md +247 -0
  348. package/blog/vi/i18n_meaning.md +0 -2
  349. package/blog/vi/i18n_testing_strategies.md +179 -0
  350. package/blog/vi/intlayer_with_i18next.md +3 -3
  351. package/blog/vi/intlayer_with_next-i18next.md +3 -3
  352. package/blog/vi/intlayer_with_next-intl.md +3 -3
  353. package/blog/vi/intlayer_with_react-i18next.md +3 -3
  354. package/blog/vi/intlayer_with_react-intl.md +3 -3
  355. package/blog/vi/intlayer_with_vue-i18n.md +3 -3
  356. package/blog/vi/is_i18next_outdated.md +317 -0
  357. package/blog/vi/is_next-intl_outdated.md +363 -0
  358. package/blog/vi/is_vue-i18n_outdated.md +338 -0
  359. package/blog/vi/list_i18n_technologies/build-tools/vite.md +177 -0
  360. package/blog/vi/list_i18n_technologies/frameworks/angular.md +0 -2
  361. package/blog/vi/list_i18n_technologies/frameworks/react-native.md +0 -2
  362. package/blog/vi/list_i18n_technologies/frameworks/react.md +0 -2
  363. package/blog/vi/list_i18n_technologies/frameworks/svelte.md +0 -2
  364. package/blog/vi/list_i18n_technologies/frameworks/vue.md +0 -2
  365. package/blog/vi/what_is_internationalization.md +0 -2
  366. package/blog/zh/date_time_number_formatting_locales.md +216 -0
  367. package/blog/zh/detecting_missing_translations.md +202 -0
  368. package/blog/zh/i18n_in_ci_cd_pipelines.md +247 -0
  369. package/blog/zh/i18n_meaning.md +0 -2
  370. package/blog/zh/i18n_testing_strategies.md +179 -0
  371. package/blog/zh/intlayer_with_i18next.md +3 -3
  372. package/blog/zh/intlayer_with_next-i18next.md +3 -3
  373. package/blog/zh/intlayer_with_next-intl.md +3 -3
  374. package/blog/zh/intlayer_with_react-i18next.md +3 -3
  375. package/blog/zh/intlayer_with_react-intl.md +3 -3
  376. package/blog/zh/intlayer_with_vue-i18n.md +3 -3
  377. package/blog/zh/is_i18next_outdated.md +317 -0
  378. package/blog/zh/is_next-intl_outdated.md +363 -0
  379. package/blog/zh/is_vue-i18n_outdated.md +338 -0
  380. package/blog/zh/list_i18n_technologies/build-tools/vite.md +179 -0
  381. package/blog/zh/list_i18n_technologies/frameworks/angular.md +0 -2
  382. package/blog/zh/list_i18n_technologies/frameworks/react-native.md +0 -2
  383. package/blog/zh/list_i18n_technologies/frameworks/react.md +0 -2
  384. package/blog/zh/list_i18n_technologies/frameworks/svelte.md +0 -2
  385. package/blog/zh/list_i18n_technologies/frameworks/vue.md +0 -2
  386. package/blog/zh/what_is_internationalization.md +0 -2
  387. package/dist/cjs/generated/blog.entry.cjs +320 -0
  388. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  389. package/dist/esm/generated/blog.entry.mjs +320 -0
  390. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  391. package/dist/types/generated/blog.entry.d.ts +16 -0
  392. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  393. package/docs/ar/bundle_optimization.md +186 -186
  394. package/docs/ar/intlayer_with_adonisjs.md +3 -3
  395. package/docs/ar/intlayer_with_analog.md +3 -3
  396. package/docs/ar/intlayer_with_angular_19.md +3 -3
  397. package/docs/ar/intlayer_with_angular_21.md +3 -3
  398. package/docs/ar/intlayer_with_astro.md +3 -3
  399. package/docs/ar/intlayer_with_astro_lit.md +3 -3
  400. package/docs/ar/intlayer_with_astro_preact.md +3 -3
  401. package/docs/ar/intlayer_with_astro_react.md +3 -3
  402. package/docs/ar/intlayer_with_astro_solid.md +3 -3
  403. package/docs/ar/intlayer_with_astro_svelte.md +3 -3
  404. package/docs/ar/intlayer_with_astro_vanilla.md +3 -3
  405. package/docs/ar/intlayer_with_astro_vue.md +3 -3
  406. package/docs/ar/intlayer_with_create_react_app.md +3 -3
  407. package/docs/ar/intlayer_with_elysia.md +4 -4
  408. package/docs/ar/intlayer_with_express.md +3 -3
  409. package/docs/ar/intlayer_with_fastify.md +4 -4
  410. package/docs/ar/intlayer_with_hono.md +3 -3
  411. package/docs/ar/intlayer_with_lynx+react.md +3 -3
  412. package/docs/ar/intlayer_with_nestjs.md +3 -3
  413. package/docs/ar/intlayer_with_next-i18next.md +3 -3
  414. package/docs/ar/intlayer_with_nextjs_14.md +3 -3
  415. package/docs/ar/intlayer_with_nextjs_15.md +3 -3
  416. package/docs/ar/intlayer_with_nextjs_16.md +3 -3
  417. package/docs/ar/intlayer_with_nextjs_compiler.md +3 -3
  418. package/docs/ar/intlayer_with_nextjs_no_locale_path.md +3 -3
  419. package/docs/ar/intlayer_with_nextjs_page_router.md +3 -3
  420. package/docs/ar/intlayer_with_nuxt.md +3 -3
  421. package/docs/ar/intlayer_with_react_native+expo.md +3 -3
  422. package/docs/ar/intlayer_with_react_router_v7.md +3 -3
  423. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +3 -3
  424. package/docs/ar/intlayer_with_solid_start.md +3 -3
  425. package/docs/ar/intlayer_with_svelte_kit.md +3 -3
  426. package/docs/ar/intlayer_with_tanstack+solid.md +3 -3
  427. package/docs/ar/intlayer_with_tanstack.md +3 -3
  428. package/docs/ar/intlayer_with_vite+lit.md +3 -3
  429. package/docs/ar/intlayer_with_vite+preact.md +3 -3
  430. package/docs/ar/intlayer_with_vite+react.md +3 -3
  431. package/docs/ar/intlayer_with_vite+react_compiler.md +3 -3
  432. package/docs/ar/intlayer_with_vite+solid.md +3 -3
  433. package/docs/ar/intlayer_with_vite+svelte.md +4 -12
  434. package/docs/ar/intlayer_with_vite+vanilla.md +3 -3
  435. package/docs/ar/intlayer_with_vite+vue.md +3 -3
  436. package/docs/ar/migration_from_i18next_to_intlayer.md +3 -3
  437. package/docs/ar/migration_from_next-i18next_to_intlayer.md +3 -3
  438. package/docs/ar/migration_from_next-intl_to_intlayer.md +3 -3
  439. package/docs/ar/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  440. package/docs/ar/migration_from_react-i18next_to_intlayer.md +3 -3
  441. package/docs/ar/migration_from_vue-i18n_to_intlayer.md +3 -3
  442. package/docs/bn/bundle_optimization.md +186 -186
  443. package/docs/bn/intlayer_with_angular_21.md +3 -3
  444. package/docs/bn/intlayer_with_fastify.md +4 -4
  445. package/docs/bn/intlayer_with_hono.md +3 -3
  446. package/docs/bn/intlayer_with_vite+lit.md +3 -3
  447. package/docs/bn/intlayer_with_vite+vanilla.md +3 -3
  448. package/docs/cs/bundle_optimization.md +186 -186
  449. package/docs/cs/intlayer_with_angular_21.md +3 -3
  450. package/docs/cs/intlayer_with_fastify.md +4 -4
  451. package/docs/cs/intlayer_with_hono.md +3 -3
  452. package/docs/cs/intlayer_with_vite+lit.md +3 -3
  453. package/docs/cs/intlayer_with_vite+vanilla.md +3 -3
  454. package/docs/de/bundle_optimization.md +186 -186
  455. package/docs/de/intlayer_with_adonisjs.md +3 -3
  456. package/docs/de/intlayer_with_analog.md +3 -3
  457. package/docs/de/intlayer_with_angular_19.md +3 -3
  458. package/docs/de/intlayer_with_angular_21.md +3 -3
  459. package/docs/de/intlayer_with_astro.md +3 -3
  460. package/docs/de/intlayer_with_astro_lit.md +3 -3
  461. package/docs/de/intlayer_with_astro_preact.md +3 -3
  462. package/docs/de/intlayer_with_astro_react.md +3 -3
  463. package/docs/de/intlayer_with_astro_solid.md +3 -3
  464. package/docs/de/intlayer_with_astro_svelte.md +3 -3
  465. package/docs/de/intlayer_with_astro_vanilla.md +3 -3
  466. package/docs/de/intlayer_with_astro_vue.md +3 -3
  467. package/docs/de/intlayer_with_create_react_app.md +3 -3
  468. package/docs/de/intlayer_with_elysia.md +4 -4
  469. package/docs/de/intlayer_with_express.md +3 -3
  470. package/docs/de/intlayer_with_fastify.md +4 -4
  471. package/docs/de/intlayer_with_hono.md +3 -3
  472. package/docs/de/intlayer_with_lynx+react.md +3 -3
  473. package/docs/de/intlayer_with_nestjs.md +3 -3
  474. package/docs/de/intlayer_with_next-i18next.md +3 -3
  475. package/docs/de/intlayer_with_nextjs_14.md +3 -3
  476. package/docs/de/intlayer_with_nextjs_15.md +3 -3
  477. package/docs/de/intlayer_with_nextjs_16.md +3 -3
  478. package/docs/de/intlayer_with_nextjs_compiler.md +3 -3
  479. package/docs/de/intlayer_with_nextjs_no_locale_path.md +3 -3
  480. package/docs/de/intlayer_with_nextjs_page_router.md +3 -3
  481. package/docs/de/intlayer_with_nuxt.md +3 -3
  482. package/docs/de/intlayer_with_react_native+expo.md +3 -3
  483. package/docs/de/intlayer_with_react_router_v7.md +3 -3
  484. package/docs/de/intlayer_with_solid_start.md +3 -3
  485. package/docs/de/intlayer_with_svelte_kit.md +3 -3
  486. package/docs/de/intlayer_with_tanstack+solid.md +3 -3
  487. package/docs/de/intlayer_with_tanstack.md +3 -3
  488. package/docs/de/intlayer_with_vite+lit.md +3 -3
  489. package/docs/de/intlayer_with_vite+preact.md +3 -3
  490. package/docs/de/intlayer_with_vite+react.md +3 -3
  491. package/docs/de/intlayer_with_vite+react_compiler.md +3 -3
  492. package/docs/de/intlayer_with_vite+solid.md +3 -3
  493. package/docs/de/intlayer_with_vite+svelte.md +4 -12
  494. package/docs/de/intlayer_with_vite+vanilla.md +3 -3
  495. package/docs/de/intlayer_with_vite+vue.md +3 -3
  496. package/docs/de/migration_from_i18next_to_intlayer.md +3 -3
  497. package/docs/de/migration_from_next-i18next_to_intlayer.md +3 -3
  498. package/docs/de/migration_from_next-intl_to_intlayer.md +3 -3
  499. package/docs/de/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  500. package/docs/de/migration_from_react-i18next_to_intlayer.md +3 -3
  501. package/docs/de/migration_from_vue-i18n_to_intlayer.md +3 -3
  502. package/docs/en/bundle_optimization.md +186 -186
  503. package/docs/en/intlayer_with_adonisjs.md +3 -3
  504. package/docs/en/intlayer_with_analog.md +3 -3
  505. package/docs/en/intlayer_with_angular_19.md +3 -3
  506. package/docs/en/intlayer_with_angular_21.md +3 -3
  507. package/docs/en/intlayer_with_astro.md +3 -3
  508. package/docs/en/intlayer_with_astro_lit.md +3 -3
  509. package/docs/en/intlayer_with_astro_preact.md +3 -3
  510. package/docs/en/intlayer_with_astro_react.md +3 -3
  511. package/docs/en/intlayer_with_astro_solid.md +3 -3
  512. package/docs/en/intlayer_with_astro_svelte.md +3 -3
  513. package/docs/en/intlayer_with_astro_vanilla.md +3 -3
  514. package/docs/en/intlayer_with_astro_vue.md +3 -3
  515. package/docs/en/intlayer_with_create_react_app.md +3 -3
  516. package/docs/en/intlayer_with_elysia.md +4 -4
  517. package/docs/en/intlayer_with_express.md +3 -3
  518. package/docs/en/intlayer_with_fastify.md +4 -4
  519. package/docs/en/intlayer_with_hono.md +3 -3
  520. package/docs/en/intlayer_with_lynx+react.md +3 -3
  521. package/docs/en/intlayer_with_nestjs.md +3 -3
  522. package/docs/en/intlayer_with_next-i18next.md +3 -3
  523. package/docs/en/intlayer_with_nextjs_14.md +3 -3
  524. package/docs/en/intlayer_with_nextjs_15.md +3 -3
  525. package/docs/en/intlayer_with_nextjs_16.md +3 -3
  526. package/docs/en/intlayer_with_nextjs_compiler.md +3 -3
  527. package/docs/en/intlayer_with_nextjs_no_locale_path.md +3 -3
  528. package/docs/en/intlayer_with_nextjs_page_router.md +3 -3
  529. package/docs/en/intlayer_with_nuxt.md +3 -3
  530. package/docs/en/intlayer_with_react_native+expo.md +3 -3
  531. package/docs/en/intlayer_with_react_router_v7.md +3 -3
  532. package/docs/en/intlayer_with_solid_start.md +3 -3
  533. package/docs/en/intlayer_with_svelte_kit.md +3 -3
  534. package/docs/en/intlayer_with_tanstack+solid.md +3 -3
  535. package/docs/en/intlayer_with_tanstack.md +3 -3
  536. package/docs/en/intlayer_with_vite+lit.md +3 -3
  537. package/docs/en/intlayer_with_vite+preact.md +3 -3
  538. package/docs/en/intlayer_with_vite+react.md +3 -3
  539. package/docs/en/intlayer_with_vite+react_compiler.md +3 -3
  540. package/docs/en/intlayer_with_vite+solid.md +3 -3
  541. package/docs/en/intlayer_with_vite+svelte.md +4 -12
  542. package/docs/en/intlayer_with_vite+vanilla.md +3 -3
  543. package/docs/en/intlayer_with_vite+vue.md +3 -3
  544. package/docs/en/migration_from_i18next_to_intlayer.md +3 -3
  545. package/docs/en/migration_from_next-i18next_to_intlayer.md +3 -3
  546. package/docs/en/migration_from_next-intl_to_intlayer.md +3 -3
  547. package/docs/en/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  548. package/docs/en/migration_from_react-i18next_to_intlayer.md +3 -3
  549. package/docs/en/migration_from_vue-i18n_to_intlayer.md +3 -3
  550. package/docs/en-GB/bundle_optimization.md +186 -186
  551. package/docs/en-GB/intlayer_with_adonisjs.md +3 -3
  552. package/docs/en-GB/intlayer_with_analog.md +3 -3
  553. package/docs/en-GB/intlayer_with_angular_19.md +3 -3
  554. package/docs/en-GB/intlayer_with_angular_21.md +3 -3
  555. package/docs/en-GB/intlayer_with_astro.md +3 -3
  556. package/docs/en-GB/intlayer_with_astro_lit.md +3 -3
  557. package/docs/en-GB/intlayer_with_astro_preact.md +3 -3
  558. package/docs/en-GB/intlayer_with_astro_react.md +3 -3
  559. package/docs/en-GB/intlayer_with_astro_solid.md +3 -3
  560. package/docs/en-GB/intlayer_with_astro_svelte.md +3 -3
  561. package/docs/en-GB/intlayer_with_astro_vanilla.md +3 -3
  562. package/docs/en-GB/intlayer_with_astro_vue.md +3 -3
  563. package/docs/en-GB/intlayer_with_create_react_app.md +3 -3
  564. package/docs/en-GB/intlayer_with_elysia.md +4 -4
  565. package/docs/en-GB/intlayer_with_express.md +3 -3
  566. package/docs/en-GB/intlayer_with_fastify.md +4 -4
  567. package/docs/en-GB/intlayer_with_hono.md +3 -3
  568. package/docs/en-GB/intlayer_with_lynx+react.md +3 -3
  569. package/docs/en-GB/intlayer_with_nestjs.md +3 -3
  570. package/docs/en-GB/intlayer_with_next-i18next.md +3 -3
  571. package/docs/en-GB/intlayer_with_nextjs_14.md +3 -3
  572. package/docs/en-GB/intlayer_with_nextjs_15.md +3 -3
  573. package/docs/en-GB/intlayer_with_nextjs_16.md +3 -3
  574. package/docs/en-GB/intlayer_with_nextjs_compiler.md +3 -3
  575. package/docs/en-GB/intlayer_with_nextjs_no_locale_path.md +3 -3
  576. package/docs/en-GB/intlayer_with_nextjs_page_router.md +3 -3
  577. package/docs/en-GB/intlayer_with_nuxt.md +3 -3
  578. package/docs/en-GB/intlayer_with_react_native+expo.md +3 -3
  579. package/docs/en-GB/intlayer_with_react_router_v7.md +3 -3
  580. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +3 -3
  581. package/docs/en-GB/intlayer_with_solid_start.md +3 -3
  582. package/docs/en-GB/intlayer_with_svelte_kit.md +3 -3
  583. package/docs/en-GB/intlayer_with_tanstack+solid.md +3 -3
  584. package/docs/en-GB/intlayer_with_tanstack.md +3 -3
  585. package/docs/en-GB/intlayer_with_vite+lit.md +3 -3
  586. package/docs/en-GB/intlayer_with_vite+preact.md +3 -3
  587. package/docs/en-GB/intlayer_with_vite+react.md +3 -3
  588. package/docs/en-GB/intlayer_with_vite+react_compiler.md +3 -3
  589. package/docs/en-GB/intlayer_with_vite+solid.md +3 -3
  590. package/docs/en-GB/intlayer_with_vite+svelte.md +4 -12
  591. package/docs/en-GB/intlayer_with_vite+vanilla.md +3 -3
  592. package/docs/en-GB/intlayer_with_vite+vue.md +3 -3
  593. package/docs/en-GB/migration_from_i18next_to_intlayer.md +3 -3
  594. package/docs/en-GB/migration_from_next-i18next_to_intlayer.md +3 -3
  595. package/docs/en-GB/migration_from_next-intl_to_intlayer.md +3 -3
  596. package/docs/en-GB/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  597. package/docs/en-GB/migration_from_react-i18next_to_intlayer.md +3 -3
  598. package/docs/en-GB/migration_from_vue-i18n_to_intlayer.md +3 -3
  599. package/docs/es/bundle_optimization.md +186 -186
  600. package/docs/es/intlayer_with_adonisjs.md +3 -3
  601. package/docs/es/intlayer_with_analog.md +3 -3
  602. package/docs/es/intlayer_with_angular_19.md +3 -3
  603. package/docs/es/intlayer_with_angular_21.md +3 -3
  604. package/docs/es/intlayer_with_astro.md +3 -3
  605. package/docs/es/intlayer_with_astro_lit.md +3 -3
  606. package/docs/es/intlayer_with_astro_preact.md +3 -3
  607. package/docs/es/intlayer_with_astro_react.md +3 -3
  608. package/docs/es/intlayer_with_astro_solid.md +3 -3
  609. package/docs/es/intlayer_with_astro_svelte.md +3 -3
  610. package/docs/es/intlayer_with_astro_vanilla.md +3 -3
  611. package/docs/es/intlayer_with_astro_vue.md +3 -3
  612. package/docs/es/intlayer_with_create_react_app.md +3 -3
  613. package/docs/es/intlayer_with_elysia.md +4 -4
  614. package/docs/es/intlayer_with_express.md +3 -3
  615. package/docs/es/intlayer_with_fastify.md +4 -4
  616. package/docs/es/intlayer_with_hono.md +3 -3
  617. package/docs/es/intlayer_with_lynx+react.md +3 -3
  618. package/docs/es/intlayer_with_nestjs.md +3 -3
  619. package/docs/es/intlayer_with_next-i18next.md +3 -3
  620. package/docs/es/intlayer_with_nextjs_14.md +3 -3
  621. package/docs/es/intlayer_with_nextjs_15.md +3 -3
  622. package/docs/es/intlayer_with_nextjs_16.md +3 -3
  623. package/docs/es/intlayer_with_nextjs_compiler.md +3 -3
  624. package/docs/es/intlayer_with_nextjs_no_locale_path.md +3 -3
  625. package/docs/es/intlayer_with_nextjs_page_router.md +3 -3
  626. package/docs/es/intlayer_with_nuxt.md +3 -3
  627. package/docs/es/intlayer_with_react_native+expo.md +3 -3
  628. package/docs/es/intlayer_with_react_router_v7.md +3 -3
  629. package/docs/es/intlayer_with_solid_start.md +3 -3
  630. package/docs/es/intlayer_with_svelte_kit.md +3 -3
  631. package/docs/es/intlayer_with_tanstack+solid.md +3 -3
  632. package/docs/es/intlayer_with_tanstack.md +3 -3
  633. package/docs/es/intlayer_with_vite+lit.md +3 -3
  634. package/docs/es/intlayer_with_vite+preact.md +3 -3
  635. package/docs/es/intlayer_with_vite+react.md +3 -3
  636. package/docs/es/intlayer_with_vite+react_compiler.md +3 -3
  637. package/docs/es/intlayer_with_vite+solid.md +3 -3
  638. package/docs/es/intlayer_with_vite+svelte.md +4 -12
  639. package/docs/es/intlayer_with_vite+vanilla.md +3 -3
  640. package/docs/es/intlayer_with_vite+vue.md +3 -3
  641. package/docs/es/migration_from_i18next_to_intlayer.md +3 -3
  642. package/docs/es/migration_from_next-i18next_to_intlayer.md +3 -3
  643. package/docs/es/migration_from_next-intl_to_intlayer.md +3 -3
  644. package/docs/es/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  645. package/docs/es/migration_from_react-i18next_to_intlayer.md +3 -3
  646. package/docs/es/migration_from_vue-i18n_to_intlayer.md +3 -3
  647. package/docs/fr/bundle_optimization.md +186 -186
  648. package/docs/fr/intlayer_with_adonisjs.md +3 -3
  649. package/docs/fr/intlayer_with_analog.md +3 -3
  650. package/docs/fr/intlayer_with_angular_19.md +3 -3
  651. package/docs/fr/intlayer_with_angular_21.md +3 -3
  652. package/docs/fr/intlayer_with_astro.md +3 -3
  653. package/docs/fr/intlayer_with_astro_lit.md +3 -3
  654. package/docs/fr/intlayer_with_astro_preact.md +3 -3
  655. package/docs/fr/intlayer_with_astro_react.md +3 -3
  656. package/docs/fr/intlayer_with_astro_solid.md +3 -3
  657. package/docs/fr/intlayer_with_astro_svelte.md +3 -3
  658. package/docs/fr/intlayer_with_astro_vanilla.md +3 -3
  659. package/docs/fr/intlayer_with_astro_vue.md +3 -3
  660. package/docs/fr/intlayer_with_create_react_app.md +3 -3
  661. package/docs/fr/intlayer_with_elysia.md +4 -4
  662. package/docs/fr/intlayer_with_express.md +3 -3
  663. package/docs/fr/intlayer_with_fastify.md +4 -4
  664. package/docs/fr/intlayer_with_hono.md +3 -3
  665. package/docs/fr/intlayer_with_lynx+react.md +3 -3
  666. package/docs/fr/intlayer_with_nestjs.md +3 -3
  667. package/docs/fr/intlayer_with_next-i18next.md +3 -3
  668. package/docs/fr/intlayer_with_nextjs_14.md +3 -3
  669. package/docs/fr/intlayer_with_nextjs_15.md +3 -3
  670. package/docs/fr/intlayer_with_nextjs_16.md +3 -3
  671. package/docs/fr/intlayer_with_nextjs_compiler.md +3 -3
  672. package/docs/fr/intlayer_with_nextjs_no_locale_path.md +3 -3
  673. package/docs/fr/intlayer_with_nextjs_page_router.md +3 -3
  674. package/docs/fr/intlayer_with_nuxt.md +3 -3
  675. package/docs/fr/intlayer_with_react_native+expo.md +3 -3
  676. package/docs/fr/intlayer_with_react_router_v7.md +3 -3
  677. package/docs/fr/intlayer_with_solid_start.md +3 -3
  678. package/docs/fr/intlayer_with_svelte_kit.md +3 -3
  679. package/docs/fr/intlayer_with_tanstack+solid.md +3 -3
  680. package/docs/fr/intlayer_with_tanstack.md +3 -3
  681. package/docs/fr/intlayer_with_vite+lit.md +3 -3
  682. package/docs/fr/intlayer_with_vite+preact.md +3 -3
  683. package/docs/fr/intlayer_with_vite+react.md +3 -3
  684. package/docs/fr/intlayer_with_vite+react_compiler.md +3 -3
  685. package/docs/fr/intlayer_with_vite+solid.md +3 -3
  686. package/docs/fr/intlayer_with_vite+svelte.md +4 -12
  687. package/docs/fr/intlayer_with_vite+vanilla.md +3 -3
  688. package/docs/fr/intlayer_with_vite+vue.md +3 -3
  689. package/docs/fr/migration_from_i18next_to_intlayer.md +3 -3
  690. package/docs/fr/migration_from_next-i18next_to_intlayer.md +3 -3
  691. package/docs/fr/migration_from_next-intl_to_intlayer.md +3 -3
  692. package/docs/fr/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  693. package/docs/fr/migration_from_react-i18next_to_intlayer.md +3 -3
  694. package/docs/fr/migration_from_vue-i18n_to_intlayer.md +3 -3
  695. package/docs/hi/bundle_optimization.md +186 -186
  696. package/docs/hi/intlayer_with_adonisjs.md +3 -3
  697. package/docs/hi/intlayer_with_analog.md +3 -3
  698. package/docs/hi/intlayer_with_angular_19.md +3 -3
  699. package/docs/hi/intlayer_with_angular_21.md +3 -3
  700. package/docs/hi/intlayer_with_astro.md +3 -3
  701. package/docs/hi/intlayer_with_astro_lit.md +3 -3
  702. package/docs/hi/intlayer_with_astro_preact.md +3 -3
  703. package/docs/hi/intlayer_with_astro_react.md +3 -3
  704. package/docs/hi/intlayer_with_astro_solid.md +3 -3
  705. package/docs/hi/intlayer_with_astro_svelte.md +3 -3
  706. package/docs/hi/intlayer_with_astro_vanilla.md +3 -3
  707. package/docs/hi/intlayer_with_astro_vue.md +3 -3
  708. package/docs/hi/intlayer_with_create_react_app.md +3 -3
  709. package/docs/hi/intlayer_with_elysia.md +4 -4
  710. package/docs/hi/intlayer_with_express.md +3 -3
  711. package/docs/hi/intlayer_with_fastify.md +4 -4
  712. package/docs/hi/intlayer_with_hono.md +3 -3
  713. package/docs/hi/intlayer_with_lynx+react.md +3 -3
  714. package/docs/hi/intlayer_with_nestjs.md +3 -3
  715. package/docs/hi/intlayer_with_next-i18next.md +3 -3
  716. package/docs/hi/intlayer_with_nextjs_14.md +3 -3
  717. package/docs/hi/intlayer_with_nextjs_15.md +3 -3
  718. package/docs/hi/intlayer_with_nextjs_16.md +3 -3
  719. package/docs/hi/intlayer_with_nextjs_compiler.md +3 -3
  720. package/docs/hi/intlayer_with_nextjs_no_locale_path.md +3 -3
  721. package/docs/hi/intlayer_with_nextjs_page_router.md +3 -3
  722. package/docs/hi/intlayer_with_nuxt.md +3 -3
  723. package/docs/hi/intlayer_with_react_native+expo.md +3 -3
  724. package/docs/hi/intlayer_with_react_router_v7.md +3 -3
  725. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +3 -3
  726. package/docs/hi/intlayer_with_solid_start.md +3 -3
  727. package/docs/hi/intlayer_with_svelte_kit.md +3 -3
  728. package/docs/hi/intlayer_with_tanstack+solid.md +3 -3
  729. package/docs/hi/intlayer_with_tanstack.md +3 -3
  730. package/docs/hi/intlayer_with_vite+lit.md +3 -3
  731. package/docs/hi/intlayer_with_vite+preact.md +3 -3
  732. package/docs/hi/intlayer_with_vite+react.md +3 -3
  733. package/docs/hi/intlayer_with_vite+react_compiler.md +3 -3
  734. package/docs/hi/intlayer_with_vite+solid.md +3 -3
  735. package/docs/hi/intlayer_with_vite+svelte.md +4 -12
  736. package/docs/hi/intlayer_with_vite+vanilla.md +3 -3
  737. package/docs/hi/intlayer_with_vite+vue.md +3 -3
  738. package/docs/hi/migration_from_i18next_to_intlayer.md +3 -3
  739. package/docs/hi/migration_from_next-i18next_to_intlayer.md +3 -3
  740. package/docs/hi/migration_from_next-intl_to_intlayer.md +3 -3
  741. package/docs/hi/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  742. package/docs/hi/migration_from_react-i18next_to_intlayer.md +3 -3
  743. package/docs/hi/migration_from_vue-i18n_to_intlayer.md +3 -3
  744. package/docs/hi/packages/intlayer/index.md +3 -3
  745. package/docs/id/bundle_optimization.md +186 -186
  746. package/docs/id/intlayer_with_adonisjs.md +3 -3
  747. package/docs/id/intlayer_with_analog.md +3 -3
  748. package/docs/id/intlayer_with_angular_19.md +3 -3
  749. package/docs/id/intlayer_with_angular_21.md +3 -3
  750. package/docs/id/intlayer_with_astro.md +3 -3
  751. package/docs/id/intlayer_with_astro_lit.md +3 -3
  752. package/docs/id/intlayer_with_astro_preact.md +3 -3
  753. package/docs/id/intlayer_with_astro_react.md +3 -3
  754. package/docs/id/intlayer_with_astro_solid.md +3 -3
  755. package/docs/id/intlayer_with_astro_svelte.md +3 -3
  756. package/docs/id/intlayer_with_astro_vanilla.md +3 -3
  757. package/docs/id/intlayer_with_astro_vue.md +3 -3
  758. package/docs/id/intlayer_with_create_react_app.md +3 -3
  759. package/docs/id/intlayer_with_elysia.md +4 -4
  760. package/docs/id/intlayer_with_express.md +3 -3
  761. package/docs/id/intlayer_with_fastify.md +4 -4
  762. package/docs/id/intlayer_with_hono.md +3 -3
  763. package/docs/id/intlayer_with_lynx+react.md +3 -3
  764. package/docs/id/intlayer_with_nestjs.md +3 -3
  765. package/docs/id/intlayer_with_next-i18next.md +3 -3
  766. package/docs/id/intlayer_with_nextjs_14.md +3 -3
  767. package/docs/id/intlayer_with_nextjs_15.md +3 -3
  768. package/docs/id/intlayer_with_nextjs_16.md +3 -3
  769. package/docs/id/intlayer_with_nextjs_compiler.md +3 -3
  770. package/docs/id/intlayer_with_nextjs_no_locale_path.md +3 -3
  771. package/docs/id/intlayer_with_nextjs_page_router.md +3 -3
  772. package/docs/id/intlayer_with_nuxt.md +3 -3
  773. package/docs/id/intlayer_with_react_native+expo.md +3 -3
  774. package/docs/id/intlayer_with_react_router_v7.md +3 -3
  775. package/docs/id/intlayer_with_solid_start.md +3 -3
  776. package/docs/id/intlayer_with_svelte_kit.md +3 -3
  777. package/docs/id/intlayer_with_tanstack+solid.md +3 -3
  778. package/docs/id/intlayer_with_tanstack.md +3 -3
  779. package/docs/id/intlayer_with_vite+lit.md +3 -3
  780. package/docs/id/intlayer_with_vite+preact.md +3 -3
  781. package/docs/id/intlayer_with_vite+react.md +3 -3
  782. package/docs/id/intlayer_with_vite+react_compiler.md +3 -3
  783. package/docs/id/intlayer_with_vite+solid.md +3 -3
  784. package/docs/id/intlayer_with_vite+svelte.md +4 -12
  785. package/docs/id/intlayer_with_vite+vanilla.md +3 -3
  786. package/docs/id/intlayer_with_vite+vue.md +3 -3
  787. package/docs/id/migration_from_i18next_to_intlayer.md +3 -3
  788. package/docs/id/migration_from_next-i18next_to_intlayer.md +3 -3
  789. package/docs/id/migration_from_next-intl_to_intlayer.md +3 -3
  790. package/docs/id/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  791. package/docs/id/migration_from_react-i18next_to_intlayer.md +3 -3
  792. package/docs/id/migration_from_vue-i18n_to_intlayer.md +3 -3
  793. package/docs/it/bundle_optimization.md +186 -186
  794. package/docs/it/intlayer_with_adonisjs.md +3 -3
  795. package/docs/it/intlayer_with_analog.md +3 -3
  796. package/docs/it/intlayer_with_angular_19.md +3 -3
  797. package/docs/it/intlayer_with_angular_21.md +3 -3
  798. package/docs/it/intlayer_with_astro.md +3 -3
  799. package/docs/it/intlayer_with_astro_lit.md +3 -3
  800. package/docs/it/intlayer_with_astro_preact.md +3 -3
  801. package/docs/it/intlayer_with_astro_react.md +3 -3
  802. package/docs/it/intlayer_with_astro_solid.md +3 -3
  803. package/docs/it/intlayer_with_astro_svelte.md +3 -3
  804. package/docs/it/intlayer_with_astro_vanilla.md +3 -3
  805. package/docs/it/intlayer_with_astro_vue.md +3 -3
  806. package/docs/it/intlayer_with_create_react_app.md +3 -3
  807. package/docs/it/intlayer_with_elysia.md +4 -4
  808. package/docs/it/intlayer_with_express.md +3 -3
  809. package/docs/it/intlayer_with_fastify.md +4 -4
  810. package/docs/it/intlayer_with_hono.md +3 -3
  811. package/docs/it/intlayer_with_lynx+react.md +3 -3
  812. package/docs/it/intlayer_with_nestjs.md +3 -3
  813. package/docs/it/intlayer_with_next-i18next.md +3 -3
  814. package/docs/it/intlayer_with_nextjs_14.md +3 -3
  815. package/docs/it/intlayer_with_nextjs_15.md +3 -3
  816. package/docs/it/intlayer_with_nextjs_16.md +3 -3
  817. package/docs/it/intlayer_with_nextjs_compiler.md +3 -3
  818. package/docs/it/intlayer_with_nextjs_no_locale_path.md +3 -3
  819. package/docs/it/intlayer_with_nextjs_page_router.md +3 -3
  820. package/docs/it/intlayer_with_nuxt.md +3 -3
  821. package/docs/it/intlayer_with_react_native+expo.md +3 -3
  822. package/docs/it/intlayer_with_react_router_v7.md +3 -3
  823. package/docs/it/intlayer_with_solid_start.md +3 -3
  824. package/docs/it/intlayer_with_svelte_kit.md +3 -3
  825. package/docs/it/intlayer_with_tanstack+solid.md +3 -3
  826. package/docs/it/intlayer_with_tanstack.md +3 -3
  827. package/docs/it/intlayer_with_vite+lit.md +3 -3
  828. package/docs/it/intlayer_with_vite+preact.md +3 -3
  829. package/docs/it/intlayer_with_vite+react.md +3 -3
  830. package/docs/it/intlayer_with_vite+react_compiler.md +3 -3
  831. package/docs/it/intlayer_with_vite+solid.md +3 -3
  832. package/docs/it/intlayer_with_vite+svelte.md +4 -12
  833. package/docs/it/intlayer_with_vite+vanilla.md +3 -3
  834. package/docs/it/intlayer_with_vite+vue.md +3 -3
  835. package/docs/it/migration_from_i18next_to_intlayer.md +3 -3
  836. package/docs/it/migration_from_next-i18next_to_intlayer.md +3 -3
  837. package/docs/it/migration_from_next-intl_to_intlayer.md +3 -3
  838. package/docs/it/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  839. package/docs/it/migration_from_react-i18next_to_intlayer.md +3 -3
  840. package/docs/it/migration_from_vue-i18n_to_intlayer.md +3 -3
  841. package/docs/ja/bundle_optimization.md +186 -186
  842. package/docs/ja/intlayer_with_adonisjs.md +3 -3
  843. package/docs/ja/intlayer_with_analog.md +3 -3
  844. package/docs/ja/intlayer_with_angular_19.md +3 -3
  845. package/docs/ja/intlayer_with_angular_21.md +3 -3
  846. package/docs/ja/intlayer_with_astro.md +3 -3
  847. package/docs/ja/intlayer_with_astro_lit.md +3 -3
  848. package/docs/ja/intlayer_with_astro_preact.md +3 -3
  849. package/docs/ja/intlayer_with_astro_react.md +3 -3
  850. package/docs/ja/intlayer_with_astro_solid.md +3 -3
  851. package/docs/ja/intlayer_with_astro_svelte.md +3 -3
  852. package/docs/ja/intlayer_with_astro_vanilla.md +3 -3
  853. package/docs/ja/intlayer_with_astro_vue.md +3 -3
  854. package/docs/ja/intlayer_with_create_react_app.md +3 -3
  855. package/docs/ja/intlayer_with_elysia.md +4 -4
  856. package/docs/ja/intlayer_with_express.md +3 -3
  857. package/docs/ja/intlayer_with_fastify.md +4 -4
  858. package/docs/ja/intlayer_with_hono.md +3 -3
  859. package/docs/ja/intlayer_with_lynx+react.md +3 -3
  860. package/docs/ja/intlayer_with_nestjs.md +3 -3
  861. package/docs/ja/intlayer_with_next-i18next.md +3 -3
  862. package/docs/ja/intlayer_with_nextjs_14.md +3 -3
  863. package/docs/ja/intlayer_with_nextjs_15.md +3 -3
  864. package/docs/ja/intlayer_with_nextjs_16.md +3 -3
  865. package/docs/ja/intlayer_with_nextjs_compiler.md +3 -3
  866. package/docs/ja/intlayer_with_nextjs_no_locale_path.md +3 -3
  867. package/docs/ja/intlayer_with_nextjs_page_router.md +3 -3
  868. package/docs/ja/intlayer_with_nuxt.md +3 -3
  869. package/docs/ja/intlayer_with_react_native+expo.md +3 -3
  870. package/docs/ja/intlayer_with_react_router_v7.md +3 -3
  871. package/docs/ja/intlayer_with_solid_start.md +3 -3
  872. package/docs/ja/intlayer_with_svelte_kit.md +3 -3
  873. package/docs/ja/intlayer_with_tanstack+solid.md +3 -3
  874. package/docs/ja/intlayer_with_tanstack.md +3 -3
  875. package/docs/ja/intlayer_with_vite+lit.md +3 -3
  876. package/docs/ja/intlayer_with_vite+preact.md +3 -3
  877. package/docs/ja/intlayer_with_vite+react.md +3 -3
  878. package/docs/ja/intlayer_with_vite+react_compiler.md +3 -3
  879. package/docs/ja/intlayer_with_vite+solid.md +3 -3
  880. package/docs/ja/intlayer_with_vite+svelte.md +4 -12
  881. package/docs/ja/intlayer_with_vite+vanilla.md +3 -3
  882. package/docs/ja/intlayer_with_vite+vue.md +3 -3
  883. package/docs/ja/migration_from_i18next_to_intlayer.md +3 -3
  884. package/docs/ja/migration_from_next-i18next_to_intlayer.md +3 -3
  885. package/docs/ja/migration_from_next-intl_to_intlayer.md +3 -3
  886. package/docs/ja/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  887. package/docs/ja/migration_from_react-i18next_to_intlayer.md +3 -3
  888. package/docs/ja/migration_from_vue-i18n_to_intlayer.md +3 -3
  889. package/docs/ko/bundle_optimization.md +186 -186
  890. package/docs/ko/intlayer_with_adonisjs.md +3 -3
  891. package/docs/ko/intlayer_with_analog.md +3 -3
  892. package/docs/ko/intlayer_with_angular_19.md +3 -3
  893. package/docs/ko/intlayer_with_angular_21.md +3 -3
  894. package/docs/ko/intlayer_with_astro.md +3 -3
  895. package/docs/ko/intlayer_with_astro_lit.md +3 -3
  896. package/docs/ko/intlayer_with_astro_preact.md +3 -3
  897. package/docs/ko/intlayer_with_astro_react.md +3 -3
  898. package/docs/ko/intlayer_with_astro_solid.md +3 -3
  899. package/docs/ko/intlayer_with_astro_svelte.md +3 -3
  900. package/docs/ko/intlayer_with_astro_vanilla.md +3 -3
  901. package/docs/ko/intlayer_with_astro_vue.md +3 -3
  902. package/docs/ko/intlayer_with_create_react_app.md +3 -3
  903. package/docs/ko/intlayer_with_elysia.md +4 -4
  904. package/docs/ko/intlayer_with_express.md +3 -3
  905. package/docs/ko/intlayer_with_fastify.md +4 -4
  906. package/docs/ko/intlayer_with_hono.md +3 -3
  907. package/docs/ko/intlayer_with_lynx+react.md +3 -3
  908. package/docs/ko/intlayer_with_nestjs.md +3 -3
  909. package/docs/ko/intlayer_with_next-i18next.md +3 -3
  910. package/docs/ko/intlayer_with_nextjs_14.md +3 -3
  911. package/docs/ko/intlayer_with_nextjs_15.md +3 -3
  912. package/docs/ko/intlayer_with_nextjs_16.md +3 -3
  913. package/docs/ko/intlayer_with_nextjs_compiler.md +3 -3
  914. package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -3
  915. package/docs/ko/intlayer_with_nextjs_page_router.md +3 -3
  916. package/docs/ko/intlayer_with_nuxt.md +3 -3
  917. package/docs/ko/intlayer_with_react_native+expo.md +3 -3
  918. package/docs/ko/intlayer_with_react_router_v7.md +3 -3
  919. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +3 -3
  920. package/docs/ko/intlayer_with_solid_start.md +3 -3
  921. package/docs/ko/intlayer_with_svelte_kit.md +3 -3
  922. package/docs/ko/intlayer_with_tanstack+solid.md +3 -3
  923. package/docs/ko/intlayer_with_tanstack.md +3 -3
  924. package/docs/ko/intlayer_with_vite+lit.md +3 -3
  925. package/docs/ko/intlayer_with_vite+preact.md +3 -3
  926. package/docs/ko/intlayer_with_vite+react.md +3 -3
  927. package/docs/ko/intlayer_with_vite+react_compiler.md +3 -3
  928. package/docs/ko/intlayer_with_vite+solid.md +3 -3
  929. package/docs/ko/intlayer_with_vite+svelte.md +4 -12
  930. package/docs/ko/intlayer_with_vite+vanilla.md +3 -3
  931. package/docs/ko/intlayer_with_vite+vue.md +3 -3
  932. package/docs/ko/migration_from_i18next_to_intlayer.md +3 -3
  933. package/docs/ko/migration_from_next-i18next_to_intlayer.md +3 -3
  934. package/docs/ko/migration_from_next-intl_to_intlayer.md +3 -3
  935. package/docs/ko/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  936. package/docs/ko/migration_from_react-i18next_to_intlayer.md +3 -3
  937. package/docs/ko/migration_from_vue-i18n_to_intlayer.md +3 -3
  938. package/docs/nl/bundle_optimization.md +186 -186
  939. package/docs/nl/intlayer_with_angular_21.md +3 -3
  940. package/docs/nl/intlayer_with_fastify.md +4 -4
  941. package/docs/nl/intlayer_with_hono.md +3 -3
  942. package/docs/nl/intlayer_with_vite+lit.md +3 -3
  943. package/docs/nl/intlayer_with_vite+vanilla.md +3 -3
  944. package/docs/pl/bundle_optimization.md +186 -186
  945. package/docs/pl/intlayer_with_adonisjs.md +3 -3
  946. package/docs/pl/intlayer_with_analog.md +3 -3
  947. package/docs/pl/intlayer_with_angular_19.md +3 -3
  948. package/docs/pl/intlayer_with_angular_21.md +3 -3
  949. package/docs/pl/intlayer_with_astro.md +3 -3
  950. package/docs/pl/intlayer_with_astro_lit.md +3 -3
  951. package/docs/pl/intlayer_with_astro_preact.md +3 -3
  952. package/docs/pl/intlayer_with_astro_react.md +3 -3
  953. package/docs/pl/intlayer_with_astro_solid.md +3 -3
  954. package/docs/pl/intlayer_with_astro_svelte.md +3 -3
  955. package/docs/pl/intlayer_with_astro_vanilla.md +3 -3
  956. package/docs/pl/intlayer_with_astro_vue.md +3 -3
  957. package/docs/pl/intlayer_with_create_react_app.md +3 -3
  958. package/docs/pl/intlayer_with_elysia.md +4 -4
  959. package/docs/pl/intlayer_with_express.md +3 -3
  960. package/docs/pl/intlayer_with_fastify.md +4 -4
  961. package/docs/pl/intlayer_with_hono.md +3 -3
  962. package/docs/pl/intlayer_with_lynx+react.md +3 -3
  963. package/docs/pl/intlayer_with_nestjs.md +3 -3
  964. package/docs/pl/intlayer_with_next-i18next.md +3 -3
  965. package/docs/pl/intlayer_with_nextjs_14.md +3 -3
  966. package/docs/pl/intlayer_with_nextjs_15.md +3 -3
  967. package/docs/pl/intlayer_with_nextjs_16.md +3 -3
  968. package/docs/pl/intlayer_with_nextjs_compiler.md +3 -3
  969. package/docs/pl/intlayer_with_nextjs_no_locale_path.md +3 -3
  970. package/docs/pl/intlayer_with_nextjs_page_router.md +3 -3
  971. package/docs/pl/intlayer_with_nuxt.md +3 -3
  972. package/docs/pl/intlayer_with_react_native+expo.md +3 -3
  973. package/docs/pl/intlayer_with_react_router_v7.md +3 -3
  974. package/docs/pl/intlayer_with_solid_start.md +3 -3
  975. package/docs/pl/intlayer_with_svelte_kit.md +3 -3
  976. package/docs/pl/intlayer_with_tanstack+solid.md +3 -3
  977. package/docs/pl/intlayer_with_tanstack.md +3 -3
  978. package/docs/pl/intlayer_with_vite+lit.md +3 -3
  979. package/docs/pl/intlayer_with_vite+preact.md +3 -3
  980. package/docs/pl/intlayer_with_vite+react.md +3 -3
  981. package/docs/pl/intlayer_with_vite+react_compiler.md +3 -3
  982. package/docs/pl/intlayer_with_vite+solid.md +3 -3
  983. package/docs/pl/intlayer_with_vite+svelte.md +4 -12
  984. package/docs/pl/intlayer_with_vite+vanilla.md +3 -3
  985. package/docs/pl/intlayer_with_vite+vue.md +3 -3
  986. package/docs/pl/migration_from_i18next_to_intlayer.md +3 -3
  987. package/docs/pl/migration_from_next-i18next_to_intlayer.md +3 -3
  988. package/docs/pl/migration_from_next-intl_to_intlayer.md +3 -3
  989. package/docs/pl/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  990. package/docs/pl/migration_from_react-i18next_to_intlayer.md +3 -3
  991. package/docs/pl/migration_from_vue-i18n_to_intlayer.md +3 -3
  992. package/docs/pt/bundle_optimization.md +186 -186
  993. package/docs/pt/intlayer_with_adonisjs.md +3 -3
  994. package/docs/pt/intlayer_with_analog.md +3 -3
  995. package/docs/pt/intlayer_with_angular_19.md +3 -3
  996. package/docs/pt/intlayer_with_angular_21.md +3 -3
  997. package/docs/pt/intlayer_with_astro.md +3 -3
  998. package/docs/pt/intlayer_with_astro_lit.md +3 -3
  999. package/docs/pt/intlayer_with_astro_preact.md +3 -3
  1000. package/docs/pt/intlayer_with_astro_react.md +3 -3
  1001. package/docs/pt/intlayer_with_astro_solid.md +3 -3
  1002. package/docs/pt/intlayer_with_astro_svelte.md +3 -3
  1003. package/docs/pt/intlayer_with_astro_vanilla.md +3 -3
  1004. package/docs/pt/intlayer_with_astro_vue.md +3 -3
  1005. package/docs/pt/intlayer_with_create_react_app.md +3 -3
  1006. package/docs/pt/intlayer_with_elysia.md +4 -4
  1007. package/docs/pt/intlayer_with_express.md +3 -3
  1008. package/docs/pt/intlayer_with_fastify.md +4 -4
  1009. package/docs/pt/intlayer_with_hono.md +3 -3
  1010. package/docs/pt/intlayer_with_lynx+react.md +3 -3
  1011. package/docs/pt/intlayer_with_nestjs.md +3 -3
  1012. package/docs/pt/intlayer_with_next-i18next.md +3 -3
  1013. package/docs/pt/intlayer_with_nextjs_14.md +3 -3
  1014. package/docs/pt/intlayer_with_nextjs_15.md +3 -3
  1015. package/docs/pt/intlayer_with_nextjs_16.md +3 -3
  1016. package/docs/pt/intlayer_with_nextjs_compiler.md +3 -3
  1017. package/docs/pt/intlayer_with_nextjs_no_locale_path.md +3 -3
  1018. package/docs/pt/intlayer_with_nextjs_page_router.md +3 -3
  1019. package/docs/pt/intlayer_with_nuxt.md +3 -3
  1020. package/docs/pt/intlayer_with_react_native+expo.md +3 -3
  1021. package/docs/pt/intlayer_with_react_router_v7.md +3 -3
  1022. package/docs/pt/intlayer_with_solid_start.md +3 -3
  1023. package/docs/pt/intlayer_with_svelte_kit.md +3 -3
  1024. package/docs/pt/intlayer_with_tanstack+solid.md +3 -3
  1025. package/docs/pt/intlayer_with_tanstack.md +3 -3
  1026. package/docs/pt/intlayer_with_vite+lit.md +3 -3
  1027. package/docs/pt/intlayer_with_vite+preact.md +3 -3
  1028. package/docs/pt/intlayer_with_vite+react.md +3 -3
  1029. package/docs/pt/intlayer_with_vite+react_compiler.md +3 -3
  1030. package/docs/pt/intlayer_with_vite+solid.md +3 -3
  1031. package/docs/pt/intlayer_with_vite+svelte.md +4 -12
  1032. package/docs/pt/intlayer_with_vite+vanilla.md +3 -3
  1033. package/docs/pt/intlayer_with_vite+vue.md +3 -3
  1034. package/docs/pt/migration_from_i18next_to_intlayer.md +3 -3
  1035. package/docs/pt/migration_from_next-i18next_to_intlayer.md +3 -3
  1036. package/docs/pt/migration_from_next-intl_to_intlayer.md +3 -3
  1037. package/docs/pt/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  1038. package/docs/pt/migration_from_react-i18next_to_intlayer.md +3 -3
  1039. package/docs/pt/migration_from_vue-i18n_to_intlayer.md +3 -3
  1040. package/docs/ru/bundle_optimization.md +186 -186
  1041. package/docs/ru/intlayer_with_adonisjs.md +3 -3
  1042. package/docs/ru/intlayer_with_analog.md +3 -3
  1043. package/docs/ru/intlayer_with_angular_19.md +3 -3
  1044. package/docs/ru/intlayer_with_angular_21.md +3 -3
  1045. package/docs/ru/intlayer_with_astro.md +3 -3
  1046. package/docs/ru/intlayer_with_astro_lit.md +3 -3
  1047. package/docs/ru/intlayer_with_astro_preact.md +3 -3
  1048. package/docs/ru/intlayer_with_astro_react.md +3 -3
  1049. package/docs/ru/intlayer_with_astro_solid.md +3 -3
  1050. package/docs/ru/intlayer_with_astro_svelte.md +3 -3
  1051. package/docs/ru/intlayer_with_astro_vanilla.md +3 -3
  1052. package/docs/ru/intlayer_with_astro_vue.md +3 -3
  1053. package/docs/ru/intlayer_with_create_react_app.md +3 -3
  1054. package/docs/ru/intlayer_with_elysia.md +4 -4
  1055. package/docs/ru/intlayer_with_express.md +3 -3
  1056. package/docs/ru/intlayer_with_fastify.md +4 -4
  1057. package/docs/ru/intlayer_with_hono.md +3 -3
  1058. package/docs/ru/intlayer_with_lynx+react.md +3 -3
  1059. package/docs/ru/intlayer_with_nestjs.md +3 -3
  1060. package/docs/ru/intlayer_with_next-i18next.md +3 -3
  1061. package/docs/ru/intlayer_with_nextjs_14.md +3 -3
  1062. package/docs/ru/intlayer_with_nextjs_15.md +3 -3
  1063. package/docs/ru/intlayer_with_nextjs_16.md +3 -3
  1064. package/docs/ru/intlayer_with_nextjs_compiler.md +3 -3
  1065. package/docs/ru/intlayer_with_nextjs_no_locale_path.md +3 -3
  1066. package/docs/ru/intlayer_with_nextjs_page_router.md +3 -3
  1067. package/docs/ru/intlayer_with_nuxt.md +3 -3
  1068. package/docs/ru/intlayer_with_react_native+expo.md +3 -3
  1069. package/docs/ru/intlayer_with_react_router_v7.md +3 -3
  1070. package/docs/ru/intlayer_with_solid_start.md +3 -3
  1071. package/docs/ru/intlayer_with_svelte_kit.md +3 -3
  1072. package/docs/ru/intlayer_with_tanstack+solid.md +3 -3
  1073. package/docs/ru/intlayer_with_tanstack.md +3 -3
  1074. package/docs/ru/intlayer_with_vite+lit.md +3 -3
  1075. package/docs/ru/intlayer_with_vite+preact.md +3 -3
  1076. package/docs/ru/intlayer_with_vite+react.md +3 -3
  1077. package/docs/ru/intlayer_with_vite+react_compiler.md +3 -3
  1078. package/docs/ru/intlayer_with_vite+solid.md +3 -3
  1079. package/docs/ru/intlayer_with_vite+svelte.md +4 -12
  1080. package/docs/ru/intlayer_with_vite+vanilla.md +3 -3
  1081. package/docs/ru/intlayer_with_vite+vue.md +3 -3
  1082. package/docs/ru/migration_from_i18next_to_intlayer.md +3 -3
  1083. package/docs/ru/migration_from_next-i18next_to_intlayer.md +3 -3
  1084. package/docs/ru/migration_from_next-intl_to_intlayer.md +3 -3
  1085. package/docs/ru/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  1086. package/docs/ru/migration_from_react-i18next_to_intlayer.md +3 -3
  1087. package/docs/ru/migration_from_vue-i18n_to_intlayer.md +3 -3
  1088. package/docs/tr/bundle_optimization.md +186 -186
  1089. package/docs/tr/intlayer_with_adonisjs.md +3 -3
  1090. package/docs/tr/intlayer_with_analog.md +3 -3
  1091. package/docs/tr/intlayer_with_angular_19.md +3 -3
  1092. package/docs/tr/intlayer_with_angular_21.md +3 -3
  1093. package/docs/tr/intlayer_with_astro.md +3 -3
  1094. package/docs/tr/intlayer_with_astro_lit.md +3 -3
  1095. package/docs/tr/intlayer_with_astro_preact.md +3 -3
  1096. package/docs/tr/intlayer_with_astro_react.md +3 -3
  1097. package/docs/tr/intlayer_with_astro_solid.md +3 -3
  1098. package/docs/tr/intlayer_with_astro_svelte.md +3 -3
  1099. package/docs/tr/intlayer_with_astro_vanilla.md +3 -3
  1100. package/docs/tr/intlayer_with_astro_vue.md +3 -3
  1101. package/docs/tr/intlayer_with_create_react_app.md +3 -3
  1102. package/docs/tr/intlayer_with_elysia.md +4 -4
  1103. package/docs/tr/intlayer_with_express.md +3 -3
  1104. package/docs/tr/intlayer_with_fastify.md +4 -4
  1105. package/docs/tr/intlayer_with_hono.md +3 -3
  1106. package/docs/tr/intlayer_with_lynx+react.md +3 -3
  1107. package/docs/tr/intlayer_with_nestjs.md +3 -3
  1108. package/docs/tr/intlayer_with_next-i18next.md +3 -3
  1109. package/docs/tr/intlayer_with_nextjs_14.md +3 -3
  1110. package/docs/tr/intlayer_with_nextjs_15.md +3 -3
  1111. package/docs/tr/intlayer_with_nextjs_16.md +3 -3
  1112. package/docs/tr/intlayer_with_nextjs_compiler.md +3 -3
  1113. package/docs/tr/intlayer_with_nextjs_no_locale_path.md +3 -3
  1114. package/docs/tr/intlayer_with_nextjs_page_router.md +3 -3
  1115. package/docs/tr/intlayer_with_nuxt.md +3 -3
  1116. package/docs/tr/intlayer_with_react_native+expo.md +3 -3
  1117. package/docs/tr/intlayer_with_react_router_v7.md +3 -3
  1118. package/docs/tr/intlayer_with_solid_start.md +3 -3
  1119. package/docs/tr/intlayer_with_svelte_kit.md +3 -3
  1120. package/docs/tr/intlayer_with_tanstack+solid.md +3 -3
  1121. package/docs/tr/intlayer_with_tanstack.md +3 -3
  1122. package/docs/tr/intlayer_with_vite+lit.md +3 -3
  1123. package/docs/tr/intlayer_with_vite+preact.md +3 -3
  1124. package/docs/tr/intlayer_with_vite+react.md +3 -3
  1125. package/docs/tr/intlayer_with_vite+react_compiler.md +3 -3
  1126. package/docs/tr/intlayer_with_vite+solid.md +3 -3
  1127. package/docs/tr/intlayer_with_vite+svelte.md +4 -12
  1128. package/docs/tr/intlayer_with_vite+vanilla.md +3 -3
  1129. package/docs/tr/intlayer_with_vite+vue.md +3 -3
  1130. package/docs/tr/migration_from_i18next_to_intlayer.md +3 -3
  1131. package/docs/tr/migration_from_next-i18next_to_intlayer.md +3 -3
  1132. package/docs/tr/migration_from_next-intl_to_intlayer.md +3 -3
  1133. package/docs/tr/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  1134. package/docs/tr/migration_from_react-i18next_to_intlayer.md +3 -3
  1135. package/docs/tr/migration_from_vue-i18n_to_intlayer.md +3 -3
  1136. package/docs/uk/bundle_optimization.md +186 -186
  1137. package/docs/uk/intlayer_with_adonisjs.md +3 -3
  1138. package/docs/uk/intlayer_with_analog.md +3 -3
  1139. package/docs/uk/intlayer_with_angular_19.md +3 -3
  1140. package/docs/uk/intlayer_with_angular_21.md +3 -3
  1141. package/docs/uk/intlayer_with_astro.md +3 -3
  1142. package/docs/uk/intlayer_with_astro_lit.md +3 -3
  1143. package/docs/uk/intlayer_with_astro_preact.md +3 -3
  1144. package/docs/uk/intlayer_with_astro_react.md +3 -3
  1145. package/docs/uk/intlayer_with_astro_solid.md +3 -3
  1146. package/docs/uk/intlayer_with_astro_svelte.md +3 -3
  1147. package/docs/uk/intlayer_with_astro_vanilla.md +3 -3
  1148. package/docs/uk/intlayer_with_astro_vue.md +3 -3
  1149. package/docs/uk/intlayer_with_create_react_app.md +3 -3
  1150. package/docs/uk/intlayer_with_elysia.md +4 -4
  1151. package/docs/uk/intlayer_with_express.md +3 -3
  1152. package/docs/uk/intlayer_with_fastify.md +4 -4
  1153. package/docs/uk/intlayer_with_hono.md +3 -3
  1154. package/docs/uk/intlayer_with_lynx+react.md +3 -3
  1155. package/docs/uk/intlayer_with_nestjs.md +3 -3
  1156. package/docs/uk/intlayer_with_next-i18next.md +3 -3
  1157. package/docs/uk/intlayer_with_nextjs_14.md +3 -3
  1158. package/docs/uk/intlayer_with_nextjs_15.md +3 -3
  1159. package/docs/uk/intlayer_with_nextjs_16.md +3 -3
  1160. package/docs/uk/intlayer_with_nextjs_compiler.md +3 -3
  1161. package/docs/uk/intlayer_with_nextjs_no_locale_path.md +3 -3
  1162. package/docs/uk/intlayer_with_nextjs_page_router.md +3 -3
  1163. package/docs/uk/intlayer_with_nuxt.md +3 -3
  1164. package/docs/uk/intlayer_with_react_native+expo.md +3 -3
  1165. package/docs/uk/intlayer_with_react_router_v7.md +3 -3
  1166. package/docs/uk/intlayer_with_solid_start.md +3 -3
  1167. package/docs/uk/intlayer_with_svelte_kit.md +3 -3
  1168. package/docs/uk/intlayer_with_tanstack+solid.md +3 -3
  1169. package/docs/uk/intlayer_with_tanstack.md +3 -3
  1170. package/docs/uk/intlayer_with_vite+lit.md +3 -3
  1171. package/docs/uk/intlayer_with_vite+preact.md +3 -3
  1172. package/docs/uk/intlayer_with_vite+react.md +3 -3
  1173. package/docs/uk/intlayer_with_vite+react_compiler.md +3 -3
  1174. package/docs/uk/intlayer_with_vite+solid.md +3 -3
  1175. package/docs/uk/intlayer_with_vite+svelte.md +4 -12
  1176. package/docs/uk/intlayer_with_vite+vanilla.md +3 -3
  1177. package/docs/uk/intlayer_with_vite+vue.md +3 -3
  1178. package/docs/uk/migration_from_i18next_to_intlayer.md +3 -3
  1179. package/docs/uk/migration_from_next-i18next_to_intlayer.md +3 -3
  1180. package/docs/uk/migration_from_next-intl_to_intlayer.md +3 -3
  1181. package/docs/uk/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  1182. package/docs/uk/migration_from_react-i18next_to_intlayer.md +3 -3
  1183. package/docs/uk/migration_from_vue-i18n_to_intlayer.md +3 -3
  1184. package/docs/ur/bundle_optimization.md +186 -186
  1185. package/docs/ur/intlayer_with_angular_21.md +3 -3
  1186. package/docs/ur/intlayer_with_fastify.md +4 -4
  1187. package/docs/ur/intlayer_with_hono.md +3 -3
  1188. package/docs/ur/intlayer_with_vite+lit.md +3 -3
  1189. package/docs/ur/intlayer_with_vite+vanilla.md +3 -3
  1190. package/docs/vi/bundle_optimization.md +186 -186
  1191. package/docs/vi/intlayer_with_adonisjs.md +3 -3
  1192. package/docs/vi/intlayer_with_analog.md +3 -3
  1193. package/docs/vi/intlayer_with_angular_19.md +3 -3
  1194. package/docs/vi/intlayer_with_angular_21.md +3 -3
  1195. package/docs/vi/intlayer_with_astro.md +3 -3
  1196. package/docs/vi/intlayer_with_astro_lit.md +3 -3
  1197. package/docs/vi/intlayer_with_astro_preact.md +3 -3
  1198. package/docs/vi/intlayer_with_astro_react.md +3 -3
  1199. package/docs/vi/intlayer_with_astro_solid.md +3 -3
  1200. package/docs/vi/intlayer_with_astro_svelte.md +3 -3
  1201. package/docs/vi/intlayer_with_astro_vanilla.md +3 -3
  1202. package/docs/vi/intlayer_with_astro_vue.md +3 -3
  1203. package/docs/vi/intlayer_with_create_react_app.md +3 -3
  1204. package/docs/vi/intlayer_with_elysia.md +4 -4
  1205. package/docs/vi/intlayer_with_express.md +3 -3
  1206. package/docs/vi/intlayer_with_fastify.md +4 -4
  1207. package/docs/vi/intlayer_with_hono.md +3 -3
  1208. package/docs/vi/intlayer_with_lynx+react.md +3 -3
  1209. package/docs/vi/intlayer_with_nestjs.md +3 -3
  1210. package/docs/vi/intlayer_with_next-i18next.md +3 -3
  1211. package/docs/vi/intlayer_with_nextjs_14.md +3 -3
  1212. package/docs/vi/intlayer_with_nextjs_15.md +3 -3
  1213. package/docs/vi/intlayer_with_nextjs_16.md +3 -3
  1214. package/docs/vi/intlayer_with_nextjs_compiler.md +3 -3
  1215. package/docs/vi/intlayer_with_nextjs_no_locale_path.md +3 -3
  1216. package/docs/vi/intlayer_with_nextjs_page_router.md +3 -3
  1217. package/docs/vi/intlayer_with_nuxt.md +3 -3
  1218. package/docs/vi/intlayer_with_react_native+expo.md +3 -3
  1219. package/docs/vi/intlayer_with_react_router_v7.md +3 -3
  1220. package/docs/vi/intlayer_with_solid_start.md +3 -3
  1221. package/docs/vi/intlayer_with_svelte_kit.md +3 -3
  1222. package/docs/vi/intlayer_with_tanstack+solid.md +3 -3
  1223. package/docs/vi/intlayer_with_tanstack.md +3 -3
  1224. package/docs/vi/intlayer_with_vite+lit.md +3 -3
  1225. package/docs/vi/intlayer_with_vite+preact.md +3 -3
  1226. package/docs/vi/intlayer_with_vite+react.md +3 -3
  1227. package/docs/vi/intlayer_with_vite+react_compiler.md +3 -3
  1228. package/docs/vi/intlayer_with_vite+solid.md +3 -3
  1229. package/docs/vi/intlayer_with_vite+svelte.md +4 -12
  1230. package/docs/vi/intlayer_with_vite+vanilla.md +3 -3
  1231. package/docs/vi/intlayer_with_vite+vue.md +3 -3
  1232. package/docs/vi/migration_from_i18next_to_intlayer.md +3 -3
  1233. package/docs/vi/migration_from_next-i18next_to_intlayer.md +3 -3
  1234. package/docs/vi/migration_from_next-intl_to_intlayer.md +3 -3
  1235. package/docs/vi/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  1236. package/docs/vi/migration_from_react-i18next_to_intlayer.md +3 -3
  1237. package/docs/vi/migration_from_vue-i18n_to_intlayer.md +3 -3
  1238. package/docs/zh/bundle_optimization.md +186 -186
  1239. package/docs/zh/intlayer_with_adonisjs.md +3 -3
  1240. package/docs/zh/intlayer_with_analog.md +3 -3
  1241. package/docs/zh/intlayer_with_angular_19.md +3 -3
  1242. package/docs/zh/intlayer_with_angular_21.md +3 -3
  1243. package/docs/zh/intlayer_with_astro.md +3 -3
  1244. package/docs/zh/intlayer_with_astro_lit.md +3 -3
  1245. package/docs/zh/intlayer_with_astro_preact.md +3 -3
  1246. package/docs/zh/intlayer_with_astro_react.md +3 -3
  1247. package/docs/zh/intlayer_with_astro_solid.md +3 -3
  1248. package/docs/zh/intlayer_with_astro_svelte.md +3 -3
  1249. package/docs/zh/intlayer_with_astro_vanilla.md +3 -3
  1250. package/docs/zh/intlayer_with_astro_vue.md +3 -3
  1251. package/docs/zh/intlayer_with_create_react_app.md +3 -3
  1252. package/docs/zh/intlayer_with_elysia.md +4 -4
  1253. package/docs/zh/intlayer_with_express.md +3 -3
  1254. package/docs/zh/intlayer_with_fastify.md +4 -4
  1255. package/docs/zh/intlayer_with_hono.md +3 -3
  1256. package/docs/zh/intlayer_with_lynx+react.md +3 -3
  1257. package/docs/zh/intlayer_with_nestjs.md +3 -3
  1258. package/docs/zh/intlayer_with_next-i18next.md +3 -3
  1259. package/docs/zh/intlayer_with_nextjs_14.md +3 -3
  1260. package/docs/zh/intlayer_with_nextjs_15.md +3 -3
  1261. package/docs/zh/intlayer_with_nextjs_16.md +3 -3
  1262. package/docs/zh/intlayer_with_nextjs_compiler.md +3 -3
  1263. package/docs/zh/intlayer_with_nextjs_no_locale_path.md +3 -3
  1264. package/docs/zh/intlayer_with_nextjs_page_router.md +3 -3
  1265. package/docs/zh/intlayer_with_nuxt.md +3 -3
  1266. package/docs/zh/intlayer_with_react_native+expo.md +3 -3
  1267. package/docs/zh/intlayer_with_react_router_v7.md +3 -3
  1268. package/docs/zh/intlayer_with_solid_start.md +3 -3
  1269. package/docs/zh/intlayer_with_svelte_kit.md +3 -3
  1270. package/docs/zh/intlayer_with_tanstack+solid.md +3 -3
  1271. package/docs/zh/intlayer_with_tanstack.md +3 -3
  1272. package/docs/zh/intlayer_with_vite+lit.md +3 -3
  1273. package/docs/zh/intlayer_with_vite+preact.md +3 -3
  1274. package/docs/zh/intlayer_with_vite+react.md +3 -3
  1275. package/docs/zh/intlayer_with_vite+react_compiler.md +3 -3
  1276. package/docs/zh/intlayer_with_vite+solid.md +3 -3
  1277. package/docs/zh/intlayer_with_vite+svelte.md +4 -12
  1278. package/docs/zh/intlayer_with_vite+vanilla.md +3 -3
  1279. package/docs/zh/intlayer_with_vite+vue.md +3 -3
  1280. package/docs/zh/migration_from_i18next_to_intlayer.md +3 -3
  1281. package/docs/zh/migration_from_next-i18next_to_intlayer.md +3 -3
  1282. package/docs/zh/migration_from_next-intl_to_intlayer.md +3 -3
  1283. package/docs/zh/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
  1284. package/docs/zh/migration_from_react-i18next_to_intlayer.md +3 -3
  1285. package/docs/zh/migration_from_vue-i18n_to_intlayer.md +3 -3
  1286. package/docs/zh-TW/bundle_optimization.md +186 -186
  1287. package/docs/zh-TW/intlayer_with_angular_21.md +3 -3
  1288. package/package.json +6 -6
  1289. package/src/generated/blog.entry.ts +329 -0
@@ -0,0 +1,247 @@
1
+ ---
2
+ createdAt: 2026-09-02
3
+ updatedAt: 2026-09-02
4
+ title: "Tự động hóa dịch thuật trong CI/CD mà không xuất bản nội dung kém chất lượng"
5
+ description: Ba giai đoạn tự động hóa i18n, pre-push, pull request và runtime. Cách chặn build dựa trên độ bao phủ, tự động điền an toàn và tránh vòng lặp commit vô tận trong CI.
6
+ keywords:
7
+ - tự động hóa dịch thuật ci
8
+ - i18n ci cd
9
+ - github actions dịch thuật
10
+ - husky pre-push
11
+ - bản địa hóa liên tục
12
+ - pipeline dịch thuật
13
+ slugs:
14
+ - blog
15
+ - i18n-in-ci-cd-pipelines
16
+ author: aymericzip
17
+ ---
18
+
19
+ # Tự động hóa dịch thuật trong CI/CD mà không xuất bản nội dung kém chất lượng
20
+
21
+ Dịch thuật thủ công không thể theo kịp tốc độ phát hành phần mềm hiện đại. Một lập trình viên thêm một chuỗi văn bản vào thứ Sáu, việc trích xuất dời sang sprint tiếp theo, và tới lúc đó ba ngôn ngữ khác đã bị tụt hậu. Tự động hóa bản thân nó rất đơn giản. Tự động hóa mà không âm thầm đưa các bản dịch máy móc chưa qua kiểm duyệt tới khách hàng mới là điều đáng để đầu tư suy nghĩ.
22
+
23
+ ## Mục lục
24
+
25
+ <TOC/>
26
+
27
+ ## Bạn không cần di chuyển mã nguồn để tự động hóa
28
+
29
+ Các cấu trúc pipeline dưới đây hoàn toàn độc lập với thư viện, và công cụ cũng vậy. Nếu các thông điệp của bạn là các danh mục JSON cho i18next, next-intl, react-intl, vue-i18n hoặc next-translate, [plugin Sync JSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/plugins/sync-json.md) sẽ đọc và ghi trực tiếp vào các file đó tại chỗ:
30
+
31
+ ```ts fileName="intlayer.config.ts"
32
+ import { syncJSON } from "@intlayer/sync-json-plugin";
33
+
34
+ const config = {
35
+ plugins: [
36
+ syncJSON({
37
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
38
+ format: "i18next", // hoặc "icu" cho next-intl / react-intl
39
+ }),
40
+ ],
41
+ };
42
+
43
+ export default config;
44
+ ```
45
+
46
+ Ứng dụng của bạn vẫn tiếp tục import những gì nó vốn import. Các tác vụ CI sau đó sẽ tự động điền và kiểm tra các danh mục hiện có, và diff mà reviewer nhìn thấy chỉ là thay đổi trên `locales/fr/checkout.json`, không phải là một đợt di chuyển kiến trúc mã nguồn. Ngoài ra còn có [plugin Sync PO](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/plugins/sync-po.md) cho quy trình gettext và [adapter tương thích](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/index.md) nếu bạn muốn giữ nguyên runtime API.
47
+
48
+ ## Phân tách rào chắn kiểm tra (gate) khỏi quá trình điền dữ liệu (fill)
49
+
50
+ Hai nhiệm vụ hoàn toàn khác biệt này thường xuyên bị nhầm lẫn.
51
+
52
+ Một **gate** là một kiểm tra có thể thất bại. Nó tuyên bố bản build này không được phép phát hành vì thiếu các locale bắt buộc. Nó không ghi bất kỳ file nào.
53
+
54
+ Một **fill** là một thao tác thay đổi dữ liệu. Nó sinh ra các bản dịch còn thiếu và commit chúng. Nó không bao giờ làm fail một bản build.
55
+
56
+ Chỉ chạy fill đồng nghĩa với việc không bao giờ có gì bị chặn, và văn bản máy dịch chưa qua kiểm duyệt sẽ được đẩy thẳng lên production. Chỉ chạy gate đồng nghĩa với việc build liên tục báo đỏ và con người phải can thiệp thủ công mỗi lần. Hầu hết các đội ngũ đều cần cả hai, gắn với các trigger khác nhau: fill trên pull request, gate khi merge vào release branch.
57
+
58
+ ## Nơi tự động hóa có thể hoạt động
59
+
60
+ | Giai đoạn | Trigger | Phù hợp cho | Chi phí |
61
+ | :------------- | :-------- | :---------------------------------------- | :------------------------------------------------- |
62
+ | Hook pre-push | Git local | Phản hồi nhanh, không tốn phút CI | Chạy trên máy lập trình viên và dùng API key riêng |
63
+ | Pull request | Job CI | Review trước khi merge, tập trung secrets | Tốn phút CI cộng với chi phí gọi model theo mỗi PR |
64
+ | Release branch | Job CI | Rào chắn nghiêm ngặt về độ bao phủ | Rẻ, không gọi AI model |
65
+ | Runtime | CMS | Sửa nội dung mà không cần build lại | Phụ thuộc vào dịch vụ lưu trữ |
66
+
67
+ ## Pre-push: vòng lặp nhanh nhất
68
+
69
+ Husky chạy việc điền bản dịch trước khi mã nguồn rời khỏi máy cá nhân, do đó các bản dịch sẽ tới trong cùng một push với các chuỗi mới được tạo ra.
70
+
71
+ ```bash fileName=".husky/pre-push"
72
+ npx intlayer build
73
+ npx intlayer fill --unpushed --mode complete
74
+ ```
75
+
76
+ `--unpushed` giới hạn phạm vi xử lý cho các nội dung chưa được push, giúp tránh việc push bị chậm cả phút mỗi lần. `--mode complete` chỉ điền những gì còn thiếu mà không ghi đè lên các mục đã có giá trị, đảm bảo bản dịch đã duyệt không bao giờ bị thay thế âm thầm.
77
+
78
+ Trong mô hình monorepo, phân chia phạm vi cho từng ứng dụng:
79
+
80
+ ```bash fileName=".husky/pre-push"
81
+ npx intlayer build --base-dir ./app1
82
+ npx intlayer fill --base-dir ./app1 --unpushed --mode complete
83
+ npx intlayer build --base-dir ./app2
84
+ npx intlayer fill --base-dir ./app2 --unpushed --mode complete
85
+ ```
86
+
87
+ Nhược điểm rất rõ ràng: mỗi lập trình viên đều cần một API key và chi phí đè nặng lên người thực hiện push. Đó là lý do hầu hết các nhóm chuyển bước này sang CI khi quy mô bắt đầu tăng.
88
+
89
+ ## Pull request: điền dữ liệu ngay tại nơi diễn ra review
90
+
91
+ Cùng một quy trình đó trong GitHub Actions, giới hạn trong phạm vi diff:
92
+
93
+ ```yaml fileName=".github/workflows/intlayer-translate.yml"
94
+ name: Intlayer Auto-Fill
95
+ on:
96
+ pull_request:
97
+ branches: ["main"]
98
+
99
+ permissions:
100
+ contents: write
101
+ pull-requests: write
102
+
103
+ concurrency:
104
+ group: "autofill-${{ github.ref }}"
105
+ cancel-in-progress: true
106
+
107
+ jobs:
108
+ autofill:
109
+ runs-on: ubuntu-latest
110
+ env:
111
+ AI_PROVIDER: openai
112
+ AI_MODEL: gpt-5-mini
113
+ AI_API_KEY: ${{ secrets.AI_API_KEY }}
114
+ steps:
115
+ - uses: actions/checkout@v4
116
+ with:
117
+ persist-credentials: true
118
+ fetch-depth: 0
119
+ - uses: actions/setup-node@v4
120
+ with:
121
+ node-version: 20
122
+ - run: npm install
123
+ - run: npx intlayer build
124
+ - run: npx intlayer fill --git-diff --mode complete --provider $AI_PROVIDER --model $AI_MODEL --api-key $AI_API_KEY
125
+ - name: Commit
126
+ run: |
127
+ if [ -n "$(git status --porcelain)" ]; then
128
+ git config --local user.email "action@github.com"
129
+ git config --local user.name "GitHub Action"
130
+ git add .
131
+ git commit -m "chore: auto-fill missing translations [skip ci]"
132
+ git push origin HEAD:${{ github.head_ref }}
133
+ fi
134
+ ```
135
+
136
+ Bốn chi tiết ở đây mang tính quyết định:
137
+
138
+ - **`fetch-depth: 0`** là bắt buộc để `--git-diff` hoạt động. Bản shallow clone không có base để so sánh diff và việc fill sẽ âm thầm không xử lý gì cả.
139
+ - **`[skip ci]` trong commit message** ngăn workflow tự kích hoạt chính nó lặp vô tận. Thiếu nó, commit sẽ kích hoạt lượt chạy mới, lượt chạy đó lại commit tiếp, đốt sạch ngân sách CI qua đêm.
140
+ - **`concurrency` kết hợp `cancel-in-progress`** ngăn hai lần push cạnh tranh ghi đè lên cùng các file.
141
+ - **`--git-diff`** giới hạn quá trình fill chỉ trong những gì thay đổi ở PR. Bỏ quên cờ này, bạn sẽ dịch lại toàn bộ danh mục ở mọi lượt chạy.
142
+
143
+ Các bản dịch xuất hiện dưới dạng commit trên nhánh PR, giúp reviewer có thể xem xét chúng trực tiếp trong diff. Đó là toàn bộ lý do nên làm điều này tại PR thay vì đợi sau khi merge.
144
+
145
+ ## Release branch: rào chắn kiểm tra (gate)
146
+
147
+ Gate không cần gọi model và phải chạy rất nhanh.
148
+
149
+ ```yaml fileName=".github/workflows/ci.yml"
150
+ - run: npm run test:i18n
151
+ ```
152
+
153
+ Được hỗ trợ bởi một bài test xác nhận độ bao phủ thay vì chỉ trông cậy vào báo cáo văn bản của CLI:
154
+
155
+ ```ts fileName="i18n.test.ts"
156
+ import { listMissingTranslations } from "intlayer/cli";
157
+
158
+ test("has no missing required locales", async () => {
159
+ const result = await listMissingTranslations();
160
+ if (result.missingRequiredLocales.length > 0) {
161
+ console.log(result.missingTranslations);
162
+ }
163
+ expect(result.missingRequiredLocales).toHaveLength(0);
164
+ });
165
+ ```
166
+
167
+ Lệnh `npx intlayer content test` in báo cáo nhưng thoát với mã 0, chỉ có tác dụng thông báo chứ không chặn quy trình. Hãy dùng nó ở máy local; còn trên CI, hãy dùng kiểm thử với assertion. Chi tiết hơn trong [phát hiện bản dịch còn thiếu](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/detecting_missing_translations.md).
168
+
169
+ ## `requiredLocales` là yếu tố giúp gate tồn tại trong thực tế
170
+
171
+ Một rào chắn yêu cầu đủ cả mười tám ngôn ngữ sẽ chặn mọi đợt phát hành cho đến khi ngôn ngữ chậm nhất hoàn tất, và kết quả là nó sẽ bị vô hiệu hóa trong vòng một tháng.
172
+
173
+ ```ts fileName="intlayer.config.ts"
174
+ import { Locales, type IntlayerConfig } from "intlayer";
175
+
176
+ const config: IntlayerConfig = {
177
+ internationalization: {
178
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
179
+ requiredLocales: [Locales.ENGLISH],
180
+ defaultLocale: Locales.ENGLISH,
181
+ },
182
+ };
183
+
184
+ export default config;
185
+ ```
186
+
187
+ Khai báo tất cả các ngôn ngữ bạn hỗ trợ, nhưng chỉ bắt buộc các ngôn ngữ thực sự cần thiết để chặn đợt phát hành. Phần còn lại được bổ sung bất đồng bộ và không làm gián đoạn kế hoạch deploy.
188
+
189
+ ## Đưa toàn bộ bản dịch ra khỏi kho mã nguồn (repo)
190
+
191
+ Một mô hình khác là chỉ khai báo một locale gốc trong code và quản lý phần còn lại từ xa thông qua CMS có Live Sync. Việc sửa đổi nội dung lúc này không yêu cầu build lại ứng dụng, tách rời hoàn toàn chu kỳ biên tập nội dung khỏi chu kỳ triển khai kỹ thuật.
192
+
193
+ ```ts fileName="intlayer.config.ts"
194
+ const config: IntlayerConfig = {
195
+ internationalization: {
196
+ locales: [Locales.ENGLISH, Locales.SPANISH, Locales.FRENCH],
197
+ requiredLocales: [Locales.ENGLISH],
198
+ defaultLocale: Locales.ENGLISH,
199
+ },
200
+ editor: {
201
+ clientId: process.env.INTLAYER_CLIENT_ID,
202
+ clientSecret: process.env.INTLAYER_CLIENT_SECRET,
203
+ liveSync: true,
204
+ },
205
+ };
206
+
207
+ export default config;
208
+ ```
209
+
210
+ Cách này phù hợp với các nhóm nơi người phụ trách nội dung không phải là lập trình viên. Đó là một sự đánh đổi: bạn có được sự tự chủ trong chỉnh sửa nhưng mất đi tính chất git checkout phản ánh chính xác 100% những gì hiển thị trên màn hình. Chi tiết tại [tài liệu CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md).
211
+
212
+ Lưu ý rằng `clientSecret` là thông tin xác thực phía server. Nó chỉ được nằm trong CI secrets và biến môi trường server, tuyệt đối không được đưa vào bundle phía client.
213
+
214
+ ## Giới hạn thực tế cần nhìn nhận thẳng thắn
215
+
216
+ Tất cả những điều trên chỉ tự động hóa **độ bao phủ**, không tự động hóa **chất lượng**. Một lượt điền tự động biến một khoảng trống nhìn thấy được thành một khoảng trống vô hình: audit báo xanh vì key đã có giá trị, nhưng chưa có con người nào đọc qua câu chữ đó.
217
+
218
+ Điều này có thể chấp nhận được với công cụ nội bộ, changelog hoặc ngôn ngữ beta. Nhưng không thể chấp nhận được với trang bảng giá, điều khoản pháp lý, thông báo lỗi thanh toán hoặc bất cứ điều gì khách hàng đọc trước khi đưa ra quyết định. Hãy chuyển các phần quan trọng đó qua quy trình duyệt của con người và luôn dùng `--mode complete` để văn bản đã duyệt không bao giờ bị ghi đè.
219
+
220
+ Cung cấp ngữ cảnh cho model để đầu ra ít nhất có sự nhất quán:
221
+
222
+ ```ts
223
+ ai: {
224
+ applicationContext: "Ứng dụng xuất hóa đơn B2B. Giọng văn trang trọng. Tuyệt đối không dịch tên sản phẩm.",
225
+ }
226
+ ```
227
+
228
+ ## Các sai lầm thường gặp
229
+
230
+ - **Quên `[skip ci]` trong commit tự động.** Workflow tự kích hoạt lại trong vòng lặp vô tận.
231
+ - **Shallow clone khi dùng `--git-diff`.** Không có base để so sánh, không có gì được điền và không có cảnh báo nào.
232
+ - **Điền toàn bộ catalog ở mỗi lần chạy.** Hãy giới hạn với `--git-diff` hoặc `--unpushed` để kiểm soát chi phí.
233
+ - **Dùng báo cáo CLI làm rào chắn (gate).** Lệnh thoát với mã 0 nên không chặn được lỗi.
234
+ - **Bắt buộc mọi ngôn ngữ.** Rào chắn sẽ bị gỡ bỏ ngay lần đầu tiên nó làm nghẽn đợt phát hành.
235
+ - **Có job fill nhưng không có gate ở đâu cả.** Không có gì báo lỗi và văn bản dịch thô từ máy móc lên thẳng production.
236
+ - **Để lộ API key của model trong repo.** Phải đưa vào CI secrets tương tự như `clientSecret`.
237
+
238
+ ## Tìm hiểu thêm
239
+
240
+ - [CI/CD: tự động sinh bản dịch với Husky, GitHub Actions và CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/CI_CD.md)
241
+ - [Kiểm thử nội dung và chặn bản build dựa trên độ bao phủ](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/testing.md)
242
+ - [autoFill: sinh file khai báo cho từng locale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/autoFill.md)
243
+ - [Tài liệu tham khảo cấu hình: `locales`, `requiredLocales`, `editor`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md)
244
+ - [Báo cáo benchmark so sánh giữa các framework](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/benchmark/index.md)
245
+ - [Adapter tương thích i18next](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/i18next.md)
246
+ - [Cách phát hiện các bản dịch còn thiếu](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/detecting_missing_translations.md)
247
+ - [Cách kiểm thử bản dịch mà không tạo ra các bài test dễ vỡ](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/i18n_testing_strategies.md)
@@ -19,8 +19,6 @@ author: aymericzip
19
19
 
20
20
  # Ý nghĩa i18n: Quốc tế hóa là gì và tại sao nó lại quan trọng?
21
21
 
22
- ![minh họa i18n](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18n.webp)
23
-
24
22
  ## Hiểu về "Ý nghĩa i18n"
25
23
 
26
24
  Nếu bạn tham gia vào lĩnh vực phát triển phần mềm, thiết kế web hoặc tiếp thị kỹ thuật số, có thể bạn đã bắt gặp thuật ngữ **i18n**. **Ý nghĩa i18n** thực sự chỉ đơn giản là một từ viết tắt bằng số cho **internationalization** (quốc tế hóa).
@@ -0,0 +1,179 @@
1
+ ---
2
+ createdAt: 2026-09-02
3
+ updatedAt: 2026-09-02
4
+ title: "Cách kiểm thử bản dịch mà không tạo ra các bài test dễ vỡ"
5
+ description: Những gì đáng để kiểm thử trong một ứng dụng i18n và những gì không nên. Kiểm thử render dựa trên Provider, giả bản địa hóa (pseudolocalization), độ bao phủ RTL và số nhiều, cùng bẫy snapshot.
6
+ keywords:
7
+ - kiểm thử bản dịch
8
+ - i18n testing
9
+ - testing library i18n
10
+ - giả bản địa hóa
11
+ - test provider locale
12
+ - snapshot test i18n
13
+ slugs:
14
+ - blog
15
+ - i18n-testing-strategies
16
+ author: aymericzip
17
+ ---
18
+
19
+ # Cách kiểm thử bản dịch mà không tạo ra các bài test dễ vỡ
20
+
21
+ Hầu hết các bộ kiểm thử i18n đều thất bại theo một trong hai cách. Hoặc là chúng xác nhận văn bản theo nghĩa đen, khiến mọi thay đổi nhỏ về từ ngữ làm hỏng năm mươi bài test và đội ngũ phát triển quyết định xóa bỏ chúng. Hoặc là chúng chỉ render mọi thứ ở locale mặc định, không chứng minh được điều gì về mười bảy ngôn ngữ còn lại. Cả hai đều dẫn đến cùng một kết quả: một bộ test không ai tin tưởng.
22
+
23
+ ## Mục lục
24
+
25
+ <TOC/>
26
+
27
+ ## Các mẫu kiểm thử không phụ thuộc vào thư viện
28
+
29
+ Mọi mẫu bên dưới đều hoạt động trên bất kỳ stack i18n nào. Thay thế provider bằng `I18nextProvider`, `NextIntlClientProvider` hoặc `IntlProvider` thì các bài kiểm thử vẫn giống hệt nhau, bởi vì chúng xác nhận kết quả được render thay vì kiểm tra API riêng của thư viện.
30
+
31
+ Công cụ kiểm tra độ bao phủ cũng có thể chuyển đổi dễ dàng: với [plugin Sync JSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/plugins/sync-json.md) trỏ vào các danh mục hiện có, hoặc một [adapter tương thích](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/index.md) đặt bí danh cho các import hiện tại, xác nhận độ bao phủ sẽ chạy trực tiếp trên file JSON bạn đang có.
32
+
33
+ ## Xác định những gì bạn thực sự đang kiểm thử
34
+
35
+ Chất lượng dịch thuật không thể kiểm tra bằng mã test. Không có assertion nào có thể cho bạn biết tiếng Đức có tự nhiên hay không, và cố gắng làm điều đó chỉ khiến bộ test ngập tràn các chuỗi hardcode.
36
+
37
+ Những gì máy móc có thể và đáng để kiểm thử:
38
+
39
+ | Đáng kiểm thử | Không đáng kiểm thử |
40
+ | :----------------------------------------- | :------------------------------- |
41
+ | Mỗi locale bắt buộc đều có giá trị | Câu từ có mượt mà hay không |
42
+ | Đúng locale được truyền vào component | Văn bản chính xác của từng nhãn |
43
+ | Dạng số nhiều hoạt động cho từng phân loại | Người dịch có làm tốt việc không |
44
+ | Locale RTL thiết lập đúng hướng và mirror | Mọi chuỗi trong tất cả ngôn ngữ |
45
+ | Ngày và số được định dạng theo đúng locale | Tính chính xác nội bộ của `Intl` |
46
+
47
+ Độ bao phủ nên được kiểm tra trong một bài test hướng dữ liệu duy nhất, không phải trong bài test component. Điều này được thảo luận trong [cách phát hiện bản dịch còn thiếu](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/detecting_missing_translations.md); bài viết này tập trung vào phần còn lại.
48
+
49
+ ## Render dưới Provider và truy vấn theo Role
50
+
51
+ Mẫu cốt lõi là gắn component bên trong một locale provider và truy vấn theo role hoặc test id thay vì theo chuỗi văn bản.
52
+
53
+ ```tsx fileName="CartSummary.test.tsx"
54
+ import { render, screen } from "@testing-library/react";
55
+ import { IntlayerProvider } from "react-intlayer/client";
56
+ import { CartSummary } from "./CartSummary";
57
+
58
+ test("render tiêu đề tóm tắt bằng tiếng Pháp", () => {
59
+ render(
60
+ <IntlayerProvider locale="fr-FR">
61
+ <CartSummary />
62
+ </IntlayerProvider>
63
+ );
64
+
65
+ expect(screen.getByRole("heading")).toBeInTheDocument();
66
+ });
67
+ ```
68
+
69
+ Truy vấn bằng `getByRole("heading")` vẫn an toàn khi văn bản thay đổi. `getByText("Récapitulatif")` sẽ hỏng ngay khi sửa chữ. Chỉ sử dụng chuỗi văn bản cố định khi chính chuỗi đó là đối tượng cần kiểm tra, điều vốn hiếm khi xảy ra.
70
+
71
+ Đối với các thuộc tính như `aria-label`, bạn cần chuỗi thô thay vì một node có thể render. Trong React, các mục `useIntlayer` cung cấp trường `.value` cho mục đích này.
72
+
73
+ ## Tham số hóa các bài kiểm thử qua nhiều locale
74
+
75
+ Một khối kiểm thử duy nhất chạy trên tất cả các locale có giá trị hơn nhiều so với việc viết từng bài test riêng cho mỗi ngôn ngữ.
76
+
77
+ ```tsx fileName="direction.test.tsx"
78
+ import { getHTMLTextDir } from "intlayer";
79
+ import { render } from "@testing-library/react";
80
+ import { IntlayerProvider } from "react-intlayer/client";
81
+
82
+ describe.each(["en", "fr", "ja", "ar"])("locale %s", (locale) => {
83
+ it("render mà không bị fallback về key", () => {
84
+ const { container } = render(
85
+ <IntlayerProvider locale={locale}>
86
+ <CartSummary />
87
+ </IntlayerProvider>
88
+ );
89
+
90
+ // Việc key bị render có nghĩa là quá trình tìm kiếm thất bại.
91
+ expect(container.textContent).not.toMatch(/^[a-z]+(\.[a-z]+)+$/);
92
+ });
93
+
94
+ it("thiết lập đúng hướng văn bản", () => {
95
+ expect(getHTMLTextDir(locale)).toBe(locale === "ar" ? "rtl" : "ltr");
96
+ });
97
+ });
98
+ ```
99
+
100
+ Assertion đầu tiên mang lại lợi ích phổ quát: nếu việc tìm kiếm thất bại và thư viện in ra key, DOM sẽ xuất hiện cấu trúc dạng `cart.summary.title`. Điều này bắt được cả một nhóm lỗi mà không cần chỉ định bất kỳ chuỗi cụ thể nào.
101
+
102
+ ## Giả bản địa hóa (Pseudolocalization) phát hiện những gì danh mục bỏ sót
103
+
104
+ Thêm một locale giả để biến đổi mọi chuỗi, ví dụ biến `Checkout` thành `[!!! Çĥéçķöũţ !!!]`. Sau đó render trang web bằng locale này.
105
+
106
+ Bất cứ nội dung nào vẫn hiển thị bằng tiếng Anh thông thường đều là nội dung bị hardcode trong mã nguồn. Không một quy trình kiểm tra danh mục nào có thể thấy được điều này, bởi vì đối với công cụ, chuỗi đó chưa từng tồn tại. Các dấu ngoặc vuông đóng vai trò thứ hai: chúng kéo dài văn bản thêm khoảng 30 phần trăm, làm lộ ra các lỗi vỡ giao diện trước khi gặp phải chúng trong tiếng Đức.
107
+
108
+ Nên chạy bước này như một đợt kiểm thử trực quan hoặc end-to-end thay vì unit test, vì lỗi hiển thị trực tiếp trước mắt.
109
+
110
+ ## Số nhiều cần bài kiểm tra theo từng danh mục, không phải theo ngôn ngữ
111
+
112
+ Lỗi số nhiều thường bị ẩn đi vì tiếng Anh chỉ có hai dạng và hầu hết lập trình viên chỉ kiểm thử hai dạng đó. Tiếng Ba Lan có bốn dạng, tiếng Ả Rập có sáu dạng.
113
+
114
+ ```ts fileName="plural.test.ts"
115
+ // Tiếng Ả Rập kiểm tra zero, one, two, few, many, other.
116
+ describe.each([0, 1, 2, 3, 11, 100])("số lượng %i", (count) => {
117
+ it("tạo ra một chuỗi không rỗng trong tiếng Ả Rập", () => {
118
+ expect(formatItems(count, "ar")).not.toBe("");
119
+ });
120
+ });
121
+ ```
122
+
123
+ Hãy chọn các con số tương ứng với từng danh mục CLDR cho ngôn ngữ phức tạp nhất của bạn thay vì chỉ thử 1 và 2 ở mọi nơi. `Intl.PluralRules` cho biết một số rơi vào danh mục nào, giúp bạn xây dựng tập mẫu mà không phải đoán mò. Xem thêm về các danh mục trong [bài viết về định dạng thông điệp ICU](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/icu_message_format.md).
124
+
125
+ ## Cái bẫy của Snapshot test
126
+
127
+ Snapshot và i18n là một sự kết hợp tồi. Snapshot của một component đa ngôn ngữ sẽ mã hóa toàn bộ văn bản trong đó: khi một dịch giả sửa lỗi chính tả trong tiếng Bồ Đào Nha, một bài test xanh biến thành đỏ trong một file mà người review không thể hiểu rõ. Sau vài lần như vậy, ai đó sẽ chạy `-u` mà không đọc diff, và snapshot hoàn toàn mất đi giá trị.
128
+
129
+ Nếu bạn muốn dùng snapshot, hãy chỉ chụp trên một locale duy nhất và coi đó là kiểm tra cấu trúc chứ không phải kiểm tra nội dung. Mọi chi tiết phụ thuộc locale nên nằm trong các assertion rõ ràng.
130
+
131
+ ## Kiểm thử quá trình xác định locale, không chỉ là việc render
132
+
133
+ Lỗi i18n phổ biến nhất trên môi trường production không phải là chuỗi bị thiếu. Đó là việc chọn sai locale: URL ghi `/fr/`, client đọc `navigator.language`, và hai bên xung đột.
134
+
135
+ Kiểm tra trực tiếp thứ tự giải quyết locale như một hàm thuần túy, tách biệt khỏi component:
136
+
137
+ ```ts fileName="locale-resolution.test.ts"
138
+ it("ưu tiên URL hơn tùy chọn đã lưu", () => {
139
+ expect(resolveLocale({ url: "/fr/about", stored: "de", header: "ja" })).toBe(
140
+ "fr"
141
+ );
142
+ });
143
+
144
+ it("fallback về header khi URL không có tiền tố", () => {
145
+ expect(resolveLocale({ url: "/about", stored: null, header: "ja" })).toBe(
146
+ "ja"
147
+ );
148
+ });
149
+ ```
150
+
151
+ Đây là bài kiểm tra i18n có giá trị cao nhất mà hầu hết dự án đều thiếu, và nó hoàn toàn không cần tới DOM.
152
+
153
+ ## Chạy cái gì và ở đâu
154
+
155
+ - **Unit**: Lựa chọn locale, bộ định dạng, các danh mục số nhiều. Nhanh, không cần DOM.
156
+ - **Component**: Một lần render dựa trên provider cho mỗi locale, kiểm tra role và việc không có key thô.
157
+ - **Độ bao phủ**: Một bài test hướng dữ liệu xác nhận không thiếu locale bắt buộc nào.
158
+ - **Visual hoặc E2E**: Chạy thử pseudolocalization và một trang RTL, vì đây là các lỗi giao diện trực quan.
159
+
160
+ Giữ ba phần đầu trong pipeline CI tại mỗi commit. Phần cuối cùng nên chạy định kỳ ban đêm để tiết kiệm tài nguyên.
161
+
162
+ ## Các sai lầm thường gặp
163
+
164
+ - **Xác nhận văn bản theo nghĩa đen ở khắp nơi.** Khiến bộ test chắc chắn bị xóa bỏ sau vài tháng.
165
+ - **Chụp snapshot các component đã địa phương hóa.** Người dịch làm đứt gãy build và reviewer phê duyệt mà không đọc.
166
+ - **Chỉ kiểm thử locale mặc định.** Locale duy nhất không bao giờ bị thiếu.
167
+ - **Chỉ kiểm thử 1 và 2 cho dạng số nhiều.** Bỏ sót toàn bộ danh mục mà tiếng Anh không có.
168
+ - **Mock toàn bộ thư viện i18n.** Lúc đó bạn chỉ đang kiểm tra xem mock có trả về chuỗi hay không.
169
+ - **Không bao giờ kiểm tra logic chọn locale.** Lỗi phổ biến nhất ngoài đời thực và dễ kiểm thử nhất.
170
+
171
+ ## Tìm hiểu thêm
172
+
173
+ - [Kiểm thử nội dung: kiểm toán CLI, API lập trình và UI assertion](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/testing.md)
174
+ - [Plugin ESLint: phát hiện chuỗi hardcode và nội dung không sử dụng](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/eslint.md)
175
+ - [Bộ định dạng và tiện ích locale, bao gồm `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/formatters.md)
176
+ - [Báo cáo benchmark so sánh giữa các framework](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/benchmark/index.md)
177
+ - [Adapter tương thích react-i18next](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/react-i18next.md)
178
+ - [Cách phát hiện bản dịch còn thiếu](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/detecting_missing_translations.md)
179
+ - [Định dạng thông điệp ICU: số nhiều, select và skeleton](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/icu_message_format.md)
@@ -74,15 +74,15 @@ npx intlayer init --interactive
74
74
  ```
75
75
 
76
76
  ```bash packageManager="pnpm"
77
- pnpm dlx intlayer@canary init --interactive
77
+ pnpm dlx intlayer init --interactive
78
78
  ```
79
79
 
80
80
  ```bash packageManager="yarn"
81
- yarn dlx intlayer@canary init --interactive
81
+ yarn dlx intlayer init --interactive
82
82
  ```
83
83
 
84
84
  ```bash packageManager="bun"
85
- bunx intlayer@canary init --interactive
85
+ bunx intlayer init --interactive
86
86
  ```
87
87
 
88
88
  > cờ `--interactive` là tùy chọn. Sử dụng `intlayer-cli init` nếu bạn là tác nhân AI.
@@ -67,15 +67,15 @@ npx intlayer init --interactive
67
67
  ```
68
68
 
69
69
  ```bash packageManager="pnpm"
70
- pnpm dlx intlayer@canary init --interactive
70
+ pnpm dlx intlayer init --interactive
71
71
  ```
72
72
 
73
73
  ```bash packageManager="yarn"
74
- yarn dlx intlayer@canary init --interactive
74
+ yarn dlx intlayer init --interactive
75
75
  ```
76
76
 
77
77
  ```bash packageManager="bun"
78
- bunx intlayer@canary init --interactive
78
+ bunx intlayer init --interactive
79
79
  ```
80
80
 
81
81
  > cờ `--interactive` là tùy chọn. Sử dụng `intlayer-cli init` nếu bạn là tác nhân AI.
@@ -69,15 +69,15 @@ npx intlayer init --interactive
69
69
  ```
70
70
 
71
71
  ```bash packageManager="pnpm"
72
- pnpm dlx intlayer@canary init --interactive
72
+ pnpm dlx intlayer init --interactive
73
73
  ```
74
74
 
75
75
  ```bash packageManager="yarn"
76
- yarn dlx intlayer@canary init --interactive
76
+ yarn dlx intlayer init --interactive
77
77
  ```
78
78
 
79
79
  ```bash packageManager="bun"
80
- bunx intlayer@canary init --interactive
80
+ bunx intlayer init --interactive
81
81
  ```
82
82
 
83
83
  > cờ `--interactive` là tùy chọn. Sử dụng `intlayer-cli init` nếu bạn là tác nhân AI.
@@ -68,15 +68,15 @@ npx intlayer init --interactive
68
68
  ```
69
69
 
70
70
  ```bash packageManager="pnpm"
71
- pnpm dlx intlayer@canary init --interactive
71
+ pnpm dlx intlayer init --interactive
72
72
  ```
73
73
 
74
74
  ```bash packageManager="yarn"
75
- yarn dlx intlayer@canary init --interactive
75
+ yarn dlx intlayer init --interactive
76
76
  ```
77
77
 
78
78
  ```bash packageManager="bun"
79
- bunx intlayer@canary init --interactive
79
+ bunx intlayer init --interactive
80
80
  ```
81
81
 
82
82
  > cờ `--interactive` là tùy chọn. Sử dụng `intlayer-cli init` nếu bạn là tác nhân AI.
@@ -66,15 +66,15 @@ npx intlayer init --interactive
66
66
  ```
67
67
 
68
68
  ```bash packageManager="pnpm"
69
- pnpm dlx intlayer@canary init --interactive
69
+ pnpm dlx intlayer init --interactive
70
70
  ```
71
71
 
72
72
  ```bash packageManager="yarn"
73
- yarn dlx intlayer@canary init --interactive
73
+ yarn dlx intlayer init --interactive
74
74
  ```
75
75
 
76
76
  ```bash packageManager="bun"
77
- bunx intlayer@canary init --interactive
77
+ bunx intlayer init --interactive
78
78
  ```
79
79
 
80
80
  > cờ `--interactive` là tùy chọn. Sử dụng `intlayer-cli init` nếu bạn là tác nhân AI.
@@ -68,15 +68,15 @@ npx intlayer init --interactive
68
68
  ```
69
69
 
70
70
  ```bash packageManager="pnpm"
71
- pnpm dlx intlayer@canary init --interactive
71
+ pnpm dlx intlayer init --interactive
72
72
  ```
73
73
 
74
74
  ```bash packageManager="yarn"
75
- yarn dlx intlayer@canary init --interactive
75
+ yarn dlx intlayer init --interactive
76
76
  ```
77
77
 
78
78
  ```bash packageManager="bun"
79
- bunx intlayer@canary init --interactive
79
+ bunx intlayer init --interactive
80
80
  ```
81
81
 
82
82
  > cờ `--interactive` là tùy chọn. Sử dụng `intlayer-cli init` nếu bạn là tác nhân AI.