@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,216 @@
1
+ ---
2
+ createdAt: 2026-09-02
3
+ updatedAt: 2026-09-02
4
+ title: "使用 Intl 针对不同语言环境格式化日期和数字"
5
+ description: 你很可能不需要单独引入格式化库。深入解析 Intl 如何处理各语言环境下的日期、数字、货币和列表,实例缓存的开销,以及只在生产环境爆发的时区 Bug。
6
+ keywords:
7
+ - 按语言环境格式化日期
8
+ - Intl.DateTimeFormat
9
+ - Intl.NumberFormat
10
+ - toLocaleDateString
11
+ - 语言环境货币格式
12
+ - 相对时间格式化
13
+ slugs:
14
+ - blog
15
+ - date-time-number-formatting-locales
16
+ author: aymericzip
17
+ ---
18
+
19
+ # 使用 Intl 针对不同语言环境格式化日期和数字
20
+
21
+ 翻译文本只是国际化(i18n)肉眼可见的一半。产生大量缺陷工单的另一半往往是格式化:德国用户看到的数字是 `1,234.56` 而不是标准的 `1.234,56`;日本用户把 `08/02/2026` 误以为是 8 月;或者同一个日期在服务端与客户端渲染结果不一致,导致 React 发生注水错误(Hydration mismatch)而白屏。
22
+
23
+ 这些场景统统不需要引入第三方库。现代 JavaScript 运行时已经原生内置了 `Intl` API。
24
+
25
+ ## 目录
26
+
27
+ <TOC/>
28
+
29
+ ## 第一步:删掉你手写的手工日期辅助函数
30
+
31
+ 几乎每个老项目的代码库里,都藏着在考虑国际化之前写的 `formatDate` 函数。它硬编码了字段顺序、分隔符,甚至把英文月份名写死在代码中。
32
+
33
+ ```ts
34
+ // 应该彻底删掉的代码:
35
+ const formatDate = (d: Date) =>
36
+ `${d.getMonth() + 1}/${d.getDate()}/${d.getFullYear()}`;
37
+ ```
38
+
39
+ `Intl.DateTimeFormat` 可以完美取而代之,且在所有语言环境下都能正确解析:
40
+
41
+ ```ts
42
+ new Intl.DateTimeFormat("de-DE", { dateStyle: "long" }).format(date);
43
+ // "2. August 2026"
44
+ new Intl.DateTimeFormat("ja-JP", { dateStyle: "long" }).format(date);
45
+ // "2026年8月2日"
46
+ ```
47
+
48
+ 数字处理也是同样道理。调用 `toFixed(2)` 在任何环境下都会生成 `1234.56`,这在欧洲大部分地区都是不符合书写习惯的。
49
+
50
+ ## `Intl` 涵盖的功能全貌
51
+
52
+ | API | 适用场景 |
53
+ | :------------------------ | :------------------------------------------------------- |
54
+ | `Intl.DateTimeFormat` | 日期与时间,支持 `dateStyle` / `timeStyle` 预设风格 |
55
+ | `Intl.NumberFormat` | 小数、货币、百分比、物理单位、紧凑记数法 |
56
+ | `Intl.RelativeTimeFormat` | "3 天前"、"2 小时后" 等相对时间表达 |
57
+ | `Intl.ListFormat` | 语言学列表拼接(如中文的“A、B 和 C”,法文的“a, b et c”) |
58
+ | `Intl.PluralRules` | 确定数字对应的复数分类规则 |
59
+ | `Intl.Collator` | 遵循特定语言规则的正确字符串排序 |
60
+
61
+ `Intl.Collator` 是常常被开发者遗漏的工具。对字符串直接调用 `array.sort()` 依据的是 Unicode 码点顺序,这会导致带声调或重音的字符排到 `z` 之后,瑞典语的 `ö` 也会排在错误的位置。只要是给用户看的可视化列表,都应当使用 collator 排序。
62
+
63
+ ```ts
64
+ ["zebra", "édouard", "apple"].sort(new Intl.Collator("zh").compare);
65
+ // ["apple", "édouard", "zebra"]
66
+ ```
67
+
68
+ ## 优先选用预设模式,而非手工拼接选项
69
+
70
+ `dateStyle` 与 `timeStyle` 允许各语言环境根据其文化规范自动决定展示顺序与分隔符。逐个指定 `year`、`month` 和 `day` 会赋予你多余的控制权,但这往往是有害的,因为不同地区的习惯顺序大相径庭,这样做无异于用开发者的个人猜测去覆盖 CLDR 的权威数据。
71
+
72
+ ```ts
73
+ // 由语言环境决定排版布局:
74
+ new Intl.DateTimeFormat(locale, { dateStyle: "medium" }).format(d);
75
+
76
+ // 手工强制指定结构,在其他地区很可能出现格式错误:
77
+ new Intl.DateTimeFormat(locale, {
78
+ year: "numeric",
79
+ month: "2-digit",
80
+ day: "2-digit",
81
+ }).format(d);
82
+ ```
83
+
84
+ 仅在视觉设计上有极其严苛的固定宽度要求(例如紧凑的数据表格列)时,才考虑显式指定各个字段分量。
85
+
86
+ ## 构造格式化实例的开销不可忽视
87
+
88
+ 这是一个直接影响性能的关键细节。初始化一个 `Intl.NumberFormat` 需要加载庞大的语言环境数据,其耗时远远高于后续调用 `.format()` 的耗时。若在长列表渲染循环中针对每一行数据都新建一次格式化实例,会导致非常明显的性能卡顿。
89
+
90
+ ```ts
91
+ // 每一行都重新创建实例(低效):
92
+ rows.map((r) => new Intl.NumberFormat(locale).format(r.total));
93
+
94
+ // 创建一次并重复复用(高效):
95
+ const nf = new Intl.NumberFormat(locale);
96
+ rows.map((r) => nf.format(r.total));
97
+ ```
98
+
99
+ `toLocaleDateString()` 和 `toLocaleString()` 内部暗藏完全相同的性能陷阱:每次调用都在底层构造新的格式化实例。对于单个独立数值无伤大雅,但绝不适用于数组或列表遍历。
100
+
101
+ 应基于语言环境和选项组合对其进行缓存:
102
+
103
+ ```ts
104
+ const cache = new Map<string, Intl.NumberFormat>();
105
+
106
+ const getNumberFormat = (
107
+ locale: string,
108
+ options: Intl.NumberFormatOptions = {}
109
+ ) => {
110
+ const key = `${locale}:${JSON.stringify(options)}`;
111
+ let formatter = cache.get(key);
112
+ if (!formatter) {
113
+ formatter = new Intl.NumberFormat(locale, options);
114
+ cache.set(key, formatter);
115
+ }
116
+ return formatter;
117
+ };
118
+ ```
119
+
120
+ ## 只在生产环境现身的时区 Bug
121
+
122
+ 这个陷阱曾经耗费无数开发者一整个下午的时间。服务端通过 SSR 生成了日期字符串,浏览器端接管并进行注水(hydration),此时 React 抛出注水不匹配错误并崩溃,原因是两端生成的日期文字并不一致。
123
+
124
+ 其根源在于:如果没有显式声明时区,`Intl.DateTimeFormat` 会默认抓取宿主操作系统的当前时区。生产环境的容器通常运行在 UTC 时区下,而开发者的本地开发机则处于本地时区(如 UTC+8)。这使得 Bug 在本地开发时毫无踪迹,却在上线后必定爆发。
125
+
126
+ ```ts
127
+ // 服务端(UTC)与客户端浏览器(UTC+8)输出不同,注水崩溃:
128
+ new Intl.DateTimeFormat(locale, { dateStyle: "short" }).format(d);
129
+
130
+ // 显式锁定时区,双端输出绝对一致:
131
+ new Intl.DateTimeFormat(locale, { dateStyle: "short", timeZone: "UTC" }).format(
132
+ d
133
+ );
134
+ ```
135
+
136
+ 三种可行的工程化方案:
137
+
138
+ - **服务端强锁固定时区**并显式透传。确定性高且稳定,但所有用户看到的都是 UTC 时间。
139
+ - **纯客户端渲染日期**,在服务端直出时展示统一的骨架占位符。能精准对应用户本地时间,但存在轻微视觉闪烁。
140
+ - **采集并记录用户所在时区**,在服务端与客户端同步注入。体验最佳,但需要额外的数据流维护成本。
141
+
142
+ 无论选择哪种方式,只要日期同时由服务端与客户端渲染,就必须显式传入 `timeZone`。未明确指定时区的日期,本质上就是一个包含两个不同输出值的隐形炸弹。
143
+
144
+ ## 货币需要的是货币代码,而不是语言环境
145
+
146
+ 语言环境与货币是两个正交的概念。`fr-FR` 并不代表计价单位一定是欧元:法国用户完全可能正在查阅一份以美元结算的账单。
147
+
148
+ ```ts
149
+ new Intl.NumberFormat("fr-FR", { style: "currency", currency: "USD" }).format(
150
+ 1234.5
151
+ );
152
+ // "1 234,50 $US"
153
+ ```
154
+
155
+ 语言环境决定的是千分位分隔符、数字分节以及货币符号的摆放位置。货币本身应来源于业务数据。从语言环境直接臆断货币,属于会直接引发财务核算错误的严重缺陷。
156
+
157
+ 此外,建议关注 `currencyDisplay` 属性。在存在多种使用美元符号($)的币种共存的场景下,将其设为 `"code"` 可以彻底消除美元、加元与澳元之间的歧义。
158
+
159
+ ## 相对时间比绝对时间更具可读性
160
+
161
+ 对于近期发生的操作,“2 小时前”远比冗长的时间戳直观得多,而 `Intl.RelativeTimeFormat` 原生支持精准的本地化转换。
162
+
163
+ ```ts
164
+ new Intl.RelativeTimeFormat("zh", { numeric: "auto" }).format(-1, "day");
165
+ // "昨天"
166
+ ```
167
+
168
+ 指定 `numeric: "auto"` 可以得到“昨天”而不是生硬的“1 天前”。
169
+
170
+ ## Intlayer 提供的增强能力
171
+
172
+ Intlayer 将上述底层 API 封装成了内置缓存的轻量工具函数,省去了手动维护 Map 缓存的繁琐操作,并且会自动将当前激活的语言环境作为默认值注入,无需在每个调用点重复传递。
173
+
174
+ ```ts
175
+ import {
176
+ number,
177
+ currency,
178
+ date,
179
+ relativeTime,
180
+ units,
181
+ compact,
182
+ list,
183
+ } from "intlayer";
184
+
185
+ number(1234.5); // "1,234.5"
186
+ currency(1234.5, { currency: "EUR" }); // "€1,234.50"
187
+ date(new Date(), "short");
188
+ relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 小时前"
189
+ units(5, { unit: "kilometer", unitDisplay: "long" }); // "5 公里"
190
+ compact(1200); // "1.2千"
191
+ list(["苹果", "香蕉", "橙子"]); // "苹果、香蕉和橙子"
192
+ ```
193
+
194
+ `date()` 函数同样支持常用预设(`"short"`, `"long"`, `"dateOnly"`, `"timeOnly"`, `"full"`),常规场景无需编写繁琐的配置对象。对于 React 和 Vue,Intlayer 还提供了对应的 hooks 与 composables,自动从上下文解析当前语言。
195
+
196
+ 其底层完全基于标准的 `Intl` 实现,属于优雅的缓存与上下文解析封装。详细的方法签名可查阅 [格式化工具文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/formatters.md)。
197
+
198
+ ## 常见错误
199
+
200
+ - **调用 `toLocaleDateString()` 时未传语言环境。** 默认采用宿主环境设定,在服务端易受容器环境漂移影响。
201
+ - **在遍历循环中反复构造实例。** 实例初始化的开销远高于格式化本身,务必复用。
202
+ - **同构渲染日期遗漏 `timeZone` 声明。** 导致本地无法复现的注水匹配失败。
203
+ - **通过语言环境推测货币。** `fr-FR` 不等同于必须展示为欧元。
204
+ - **对用户可见文字直接使用普通 `sort()`。** 请始终采用 `Intl.Collator`。
205
+ - **在源码中硬编码月份或星期。** CLDR 已完整内置各语言的权威名称。
206
+ - **相对时间保留 `numeric: "always"`。** 会导致本该说“昨天”的地方机械地输出“1 天前”。
207
+
208
+ ## 深入阅读
209
+
210
+ - [格式化工具与语言环境实用函数:`number`, `currency`, `date`, `relativeTime`, `list`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/formatters.md)
211
+ - [配置参考指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)
212
+ - [跨框架性能基准报告](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/benchmark/index.md)
213
+ - [react-intl 兼容适配器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compat/react-intl.md)
214
+ - [ICU 消息格式:复数、分支选择与数字骨架](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/icu_message_format.md)
215
+ - [国际化测试策略:覆盖格式化与复数分支](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/i18n_testing_strategies.md)
216
+ - [国际化真正涵盖的核心范畴](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/what_is_internationalization.md)
@@ -0,0 +1,202 @@
1
+ ---
2
+ createdAt: 2026-09-02
3
+ updatedAt: 2026-09-02
4
+ title: "如何在用户发现之前检测缺失的翻译"
5
+ description: 缺失的翻译通常会静默失败。为什么回退机制会掩盖问题,真正有效的四层检测机制,以及如何在遇到未翻译键时阻断构建。
6
+ keywords:
7
+ - 查找缺失翻译
8
+ - 缺失翻译键
9
+ - i18n 审计
10
+ - 未翻译字符串
11
+ - 翻译覆盖率
12
+ - i18n lint
13
+ slugs:
14
+ - blog
15
+ - detecting-missing-translations
16
+ author: aymericzip
17
+ ---
18
+
19
+ # 如何在用户发现之前检测缺失的翻译
20
+
21
+ 缺失的翻译几乎从不抛出异常。根据你的配置,它要么向日本用户展示英文文本,要么在生产环境页面上直接打印 `checkout.summary.total`。这两种情况都能顺利发布,都能通过代码审查,并且最终都是由客户而不是你发现的。
22
+
23
+ ## 目录
24
+
25
+ <TOC/>
26
+
27
+ ## 无论你使用什么库,这套方案都适用
28
+
29
+ 本文介绍的内容不局限于某一个特定技术栈。下面介绍的检测层在 i18next、react-i18next、next-intl、react-intl、vue-i18n、next-translate 或 Lingui 中均可同样工作,因为它们都以相同的方式解析键,并以相同的方式产生缺陷。
30
+
31
+ 工具链同样具备很强的可移植性。如果你的翻译消息当前保存在 JSON 字典目录中,[Sync JSON 插件](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md) 可以直接将 Intlayer 接入这些文件,从而让你无需移动内容或修改导入路径即可使用审计、填充和测试命令:
32
+
33
+ ```ts fileName="intlayer.config.ts"
34
+ import { syncJSON } from "@intlayer/sync-json-plugin";
35
+
36
+ const config = {
37
+ plugins: [
38
+ syncJSON({
39
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
40
+ format: "i18next", // 或针对 next-intl / react-intl 的 "icu"
41
+ }),
42
+ ],
43
+ };
44
+
45
+ export default config;
46
+ ```
47
+
48
+ 如果你希望同时保留运行时的 API,[兼容适配器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compat/index.md) 可以在打包工具层对 `useTranslation`、`$t` 等进行别名替换。无论采用哪种方式,都可以将下文的命令视作这一思想的具体实践,而非强制要求。
49
+
50
+ ## 为什么缺失的翻译往往隐蔽无形
51
+
52
+ 所有 i18n 库都通过同一条链条解析键:查找当前激活的语言环境,回退到默认语言,如果依然找不到,就直接返回键名字符串。最后这一步正是问题的根源。系统中没有抛出错误,生产环境中没有警告,也没有任何测试失败,因为整个流水线中没有任何环节将缺失的键视为异常状态。
53
+
54
+ 回退机制让情况变得更糟而不是更好。一个静默以英文渲染的页面,对于讲英语的开发者以及所有自动化检查来说都显得毫无破绽。这个 Bug 只有那些无法阅读最终结果的用户才能看到。
55
+
56
+ 因此,核心问题不在于“如何在运行时处理缺失的翻译”。而在于“如何让包含缺失翻译的代码根本无法被合并”。
57
+
58
+ ## 捕捉缺失翻译的四个层级
59
+
60
+ 每个层级都能捕获其他层级无法发现的漏洞。你需要结合多个层级来构建防护。
61
+
62
+ | 层级 | 能够捕获 | 会遗漏 |
63
+ | :-------------- | :--------------------------------- | :--------------------------------- |
64
+ | 类型系统 | 根本不存在的键名 | 键名存在但 `ja` 语言环境下的值为空 |
65
+ | 语法检查 (Lint) | 从未被提取供翻译的硬编码字符串 | 字典中遗漏的键 |
66
+ | 覆盖率审计 | 每个已声明键在各语言环境中的覆盖率 | 从未被标记为可翻译的原始文本 |
67
+ | 渲染测试 | 能够解析但渲染结果不正确的键 | 未被测试用例覆盖的界面内容 |
68
+
69
+ 绝大多数团队存在的盲区在第三行:他们知道自己的键名是有效的,但没有任何工具检查十八种语言是否真的都已填入内容。
70
+
71
+ ## 层级 1:将键转化为类型,而非普通字符串
72
+
73
+ `t("checkout.summry.total")` 是一个可以正常通过编译的拼写错误。如果你的键是纯文本字符串,每次重命名都是生产风险,每次删除都会留下孤立的废弃键。
74
+
75
+ 类型化的键将这种隐患转化为构建阶段的错误。`react-i18next` 通过声明合并(declaration merging)提供支持,`next-intl` 从消息结构推断类型,Lingui 从源码文本派生 ID,而 Intlayer 则直接从声明文件中生成严谨的类型。它们都行之有效;不同之处仅在于需要编写多少配置代码。
76
+
77
+ 这一层是必要的,但并非万全之策。类型仅能约束默认字典的骨架,它无法证明韩语是否真的为该键配置了对应的翻译。
78
+
79
+ ## 层级 2:通过 Lint 捕获从未变成键的原始字符串
80
+
81
+ 最难找到的翻译往往是从未被外部化的文案。组件内部硬编码的文本对任何基于字典目录的审计工具都是不可见的,因为在工具看来,该字符串根本不存在。
82
+
83
+ Intlayer 的 ESLint 插件通过 `no-raw-text` 规则覆盖了这一问题,并搭配 `no-unused-content` 检查反向问题:已经声明但没有任何代码引用的死内容。
84
+
85
+ ```js fileName="eslint.config.mjs"
86
+ import intlayer from "@intlayer/eslint-plugin";
87
+
88
+ export default [
89
+ intlayer.configs.recommended,
90
+ {
91
+ rules: {
92
+ "@intlayer/no-raw-text": "error",
93
+ "@intlayer/no-unused-content": "warn",
94
+ },
95
+ },
96
+ ];
97
+ ```
98
+
99
+ `no-unused-content` 可以防止字典目录无限膨胀。无用键虽然不会破坏代码执行,但会增加翻译供应商的账单。完整规则清单请见 [ESLint 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/eslint.md)。
100
+
101
+ ## 层级 3:审计各语言环境的覆盖率
102
+
103
+ 这是直接回答核心问题的一层。Intlayer 将其作为一条 CLI 命令提供:
104
+
105
+ ```bash packageManager="npm"
106
+ npx intlayer content test
107
+ ```
108
+
109
+ 它会读取配置的语言环境及声明的字典,详细报告哪些文件的哪些键缺少了哪些语言环境。
110
+
111
+ 在将其接入自动化流程前需注意:**该 CLI 会输出检查报告,但退出状态码始终为 0。** 如果直接将其放入流水线中寄希望于它阻断构建,你只会得到一个正常通过的构建以及一段没人会看的大段文本输出。要真正进行拦截,请使用下文介绍的编程式 API。
112
+
113
+ ## 层级 4:在测试套件中通过断言进行验证
114
+
115
+ `listMissingTranslations()` 会以结构化数据的形式返回相同的审计结果,非常适合用作构建拦截门禁。
116
+
117
+ ```ts fileName="i18n.test.ts"
118
+ /* @vitest-environment node */
119
+ import { listMissingTranslations } from "intlayer/cli";
120
+ import { describe, expect, it } from "vitest";
121
+
122
+ describe("translations", () => {
123
+ it("没有缺失必需的语言环境", async () => {
124
+ const result = await listMissingTranslations();
125
+
126
+ if (result.missingRequiredLocales.length > 0) {
127
+ console.log(result.missingTranslations);
128
+ }
129
+
130
+ expect(result.missingRequiredLocales).toHaveLength(0);
131
+ });
132
+ });
133
+ ```
134
+
135
+ 接口会返回三个关键字段:
136
+
137
+ - `missingTranslations`:按键名细分,指明缺少哪些语言环境及所在的文件。这是测试失败时应当打印的内容。
138
+ - `missingLocales`:跨所有键汇总后缺失的所有语言集合。
139
+ - `missingRequiredLocales`:仅限制在配置中的 `requiredLocales` 范围内(若未配置则等同于全部语言)。
140
+
141
+ ## `requiredLocales` 是让门禁可持续运行的关键
142
+
143
+ 支持十八种语言并不意味着上线前所有十八种语言都必须 100% 完成。大多数团队都会划分核心阻塞语言与渐进补充语言。
144
+
145
+ ```ts fileName="intlayer.config.ts"
146
+ import { Locales, type IntlayerConfig } from "intlayer";
147
+
148
+ const config: IntlayerConfig = {
149
+ internationalization: {
150
+ locales: [
151
+ Locales.ENGLISH,
152
+ Locales.FRENCH,
153
+ Locales.JAPANESE,
154
+ Locales.POLISH,
155
+ ],
156
+ requiredLocales: [Locales.ENGLISH, Locales.FRENCH],
157
+ defaultLocale: Locales.ENGLISH,
158
+ },
159
+ };
160
+
161
+ export default config;
162
+ ```
163
+
164
+ 如果没有设置 `requiredLocales`,所有声明的语言都会成为强制要求,只要最后一种语言尚未完成,构建就会一直处于红灯状态。这通常会导致团队最终彻底禁用该检查。
165
+
166
+ ## 发现已经流入生产环境的缺失
167
+
168
+ 上述层级能够防止新问题的产生。对于已经发布的线上应用,有两种非常有效的排查策略。
169
+
170
+ **伪本地化(Pseudolocalization)。** 启用一个将每个字符都进行特殊转换的伪语言环境,例如将 `Checkout` 变成 `[!!! Ĉĥéçķöũţ !!!]`。页面渲染后,任何依然显示为正常英语的内容都毫无疑问是硬编码文案。因为它测试的是最终渲染结果,能在十分钟内发现字典审计永远无法看到的问题。
171
+
172
+ **爬取自己的网站。** 如果你提供按语言划分的 URL,可以抓取每个语言环境的典型页面,并在 HTML 中检索默认语言的文本。如果在 `/ja/` 页面中检索到了 "Add to cart",这要么是翻译遗漏,要么是未预期的语言回退。
173
+
174
+ ```bash
175
+ curl -s https://example.com/ja/checkout | grep -c "Add to cart"
176
+ ```
177
+
178
+ ## 填补空白
179
+
180
+ 确定缺失的内容后,可以使用 `intlayer fill` 自动补全空条目,而 `autoFill` 选项可以在声明内容时直接生成各语言环境的文件。详见 [autoFill](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/autoFill.md)。
181
+
182
+ 我们必须清醒地认识到:机器自动填充只是把一个**看得见的漏洞**变成了**看不见的漏洞**。键名填上了内容,审计变绿通过了,但文案还没有任何人审阅过。可以用它来解救紧急上线,但对于任何涉及付费、法律条款或转化决策的核心文案,必须安排人工复核。
183
+
184
+ ## 常见错误
185
+
186
+ - **将回退机制视作安全保护。** 它只是兜底渲染手段,不是保险锁。静默显示的英文页面本身就是一个 Bug。
187
+ - **依赖 CLI 输出来拦截 CI。** `intlayer content test` 退出码为 0,务必在单元测试中进行断言。
188
+ - **强制要求所有语言都齐全。** 只要发生一次阻塞紧急发布,该检查就会被团队彻底移除。
189
+ - **只查字典目录从不检查渲染画面。** 硬编码字符串在字典中是绝对不可见的。
190
+ - **测试中仅验证默认语言。** 唯一绝不可能缺失的语言就是默认语言。
191
+ - **以机器自动填充作为流程终点。** 审计变绿但文案质量毫无保障。
192
+
193
+ ## 深入阅读
194
+
195
+ - [测试你的内容:CLI 审计、编程式 API 与 UI 断言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/testing.md)
196
+ - [ESLint 插件规则(包括 `no-raw-text` 与 `no-unused-content`)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/eslint.md)
197
+ - [autoFill:自动生成各语言环境的声明文件](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/autoFill.md)
198
+ - [配置参考:`locales`、`requiredLocales`、`defaultLocale`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)
199
+ - [跨框架性能基准报告](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/benchmark/index.md)
200
+ - [i18next 兼容适配器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compat/i18next.md)
201
+ - [国际化到底涵盖哪些内容](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/what_is_internationalization.md)
202
+ - [组件级 i18n 与集中式 i18n 的架构对比](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/per-component_vs_centralized_i18n.md)
@@ -0,0 +1,247 @@
1
+ ---
2
+ createdAt: 2026-09-02
3
+ updatedAt: 2026-09-02
4
+ title: "在 CI/CD 中自动化翻译而不发布糟糕文案"
5
+ description: 在三个阶段自动化 i18n,pre-push、pull request 与运行时。如何基于覆盖率拦截构建、安全自动补全并避免无限提交循环。
6
+ keywords:
7
+ - 自动化翻译 ci
8
+ - i18n ci cd
9
+ - github actions 翻译
10
+ - husky pre-push
11
+ - 持续本地化
12
+ - 翻译流水线
13
+ slugs:
14
+ - blog
15
+ - i18n-in-ci-cd-pipelines
16
+ author: aymericzip
17
+ ---
18
+
19
+ # 在 CI/CD 中自动化翻译而不发布糟糕文案
20
+
21
+ 手动翻译根本无法跟上现代软件的发布节奏。周五有人新增了一个文案字符串,导出操作要等到下一个迭代,而此时又有另外三种语言落后了。实现自动化并不复杂。如何在不悄悄向用户发布未经验证的机器输出的前提下实现自动化,才是真正值得深入思考的问题。
22
+
23
+ ## 目录
24
+
25
+ <TOC/>
26
+
27
+ ## 无需迁移现有代码即可实现自动化
28
+
29
+ 下面介绍的流水线架构与具体的库无关,工具本身也是如此。如果你的文案采用 i18next、next-intl、react-intl、vue-i18n 或 next-translate 的 JSON 字典格式,[Sync JSON 插件](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md) 可以就地读写这些文件:
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", // 或针对 next-intl / react-intl 的 "icu"
39
+ }),
40
+ ],
41
+ };
42
+
43
+ export default config;
44
+ ```
45
+
46
+ 你的应用可以继续保持原有的导入方式。后续的 CI 任务将直接填充并校验你现有的字典,审查者在 PR 中看到的 diff 只是 `locales/fr/checkout.json` 的更新,而不是大规模的代码迁移。还有用于 gettext 工作流的 [Sync PO 插件](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-po.md),以及保持运行时 API 不变的 [兼容适配器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compat/index.md)。
47
+
48
+ ## 将拦截门禁(Gate)与内容填充(Fill)分离
49
+
50
+ 两项完全不同的任务经常被混淆。
51
+
52
+ **门禁(Gate)** 是一项会失败的检查。它的作用是声明当前构建不可发布,因为缺少必需的语言环境。它不写入任何文件。
53
+
54
+ **填充(Fill)** 是一项变更操作。它生成缺失的翻译并提交代码。它绝不会导致构建失败。
55
+
56
+ 仅运行填充意味着没有任何机制进行拦截,未经验证的机器文案会直接流向生产环境。仅运行门禁意味着构建频繁变红,每次都需要人工介入修复。大多数团队希望同时拥有两者,但绑定到不同的触发器上:在 Pull Request 上触发填充,在合并到发布分支时触发门禁。
57
+
58
+ ## 自动化的落脚点对比
59
+
60
+ | 阶段 | 触发器 | 适用场景 | 成本 |
61
+ | :------------ | :------- | :--------------------------- | :------------------------------------- |
62
+ | Pre-push 钩子 | 本地 Git | 快速反馈,不消耗 CI 分钟数 | 在开发者的机器上运行并消耗个人 API Key |
63
+ | Pull request | CI 任务 | 合并前审查,安全统一管理密钥 | 消耗 CI 分钟数及每个 PR 的模型调用费用 |
64
+ | 发布分支 | CI 任务 | 基于覆盖率的严格拦截门禁 | 廉价,无模型调用 |
65
+ | 运行时 | CMS | 无需重新构建即可更新内容 | 依赖托管服务 |
66
+
67
+ ## Pre-push:最快速的反馈循环
68
+
69
+ Husky 可以在代码离开本地机器之前完成填充,因此新生成的翻译会与引入新字符串的代码处于同一个推送中。
70
+
71
+ ```bash fileName=".husky/pre-push"
72
+ npx intlayer build
73
+ npx intlayer fill --unpushed --mode complete
74
+ ```
75
+
76
+ `--unpushed` 将工作范围限制为尚未推送的内容,从而避免每次推送都耗费大量时间。`--mode complete` 只填充缺失的内容,不会重写已经有值的条目,确保人工审查过的翻译绝不会被静默覆盖。
77
+
78
+ 在 Monorepo 中,可以针对各个应用单独限定范围:
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
+ 缺点也是显而易见的:每个开发者都需要一个 API Key,而且费用由执行推送的人承担。这就是为什么团队扩大后大多数会将其迁移到 CI 的原因。
88
+
89
+ ## Pull request:在审查发生的地方进行填充
90
+
91
+ 在 GitHub Actions 中处理相同的逻辑,并将范围限制在 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
+ 其中有四个关键配置:
137
+
138
+ - **`fetch-depth: 0`** 是 `--git-diff` 正常运行所必需的。浅克隆(Shallow clone)没有基准分支来进行 diff,填充过程会静默处理空内容。
139
+ - **提交信息中的 `[skip ci]`** 可以防止工作流无限次互相触发。如果没有它,该任务会触发新的运行并再次提交,一夜之间就会耗尽 CI 配额。
140
+ - **带有 `cancel-in-progress` 的 `concurrency`** 可以防止并发推送相互竞争写入相同的文件。
141
+ - **`--git-diff`** 将填充范围限定在 PR 中变更的内容。如果省略它,每次运行都会重新翻译整个字典。
142
+
143
+ 翻译内容会作为 commit 提交到 PR 分支,这意味着代码审查者可以在 diff 中进行审核。这正是选择在此阶段执行而不是合并后再执行的根本原因。
144
+
145
+ ## 发布分支:门禁检查
146
+
147
+ 门禁不需要访问 AI 模型,执行速度应当非常快。
148
+
149
+ ```yaml fileName=".github/workflows/ci.yml"
150
+ - run: npm run test:i18n
151
+ ```
152
+
153
+ 通过断言覆盖率的测试来提供保障,而不是依赖终端输出:
154
+
155
+ ```ts fileName="i18n.test.ts"
156
+ import { listMissingTranslations } from "intlayer/cli";
157
+
158
+ test("没有缺失必需的语言环境", 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
+ `npx intlayer content test` 虽然会输出检查报告,但退出状态码始终为 0,仅供参考而不会阻断流水线。可以在本地使用该命令;而在 CI 中使用测试断言。更多区别参见 [如何检测缺失的翻译](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/detecting_missing_translations.md)。
168
+
169
+ ## `requiredLocales` 让门禁在实际开发中可持续运行
170
+
171
+ 如果门禁要求所有十八种语言全部完整,就会因为最慢的一种语言未就绪而阻塞所有发布,最终在一个月内被团队彻底禁用。
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
+ 声明你支持的所有语言,并且仅将那些必须阻断发布的语言设为必需项。其余语言可以异步补充,绝不会拖延代码上线。
188
+
189
+ ## 将翻译完全移出代码仓库
190
+
191
+ 另一种模式是在代码中仅保留一种基准语言,其余语言通过带有 Live Sync 功能的 CMS 进行远程管理。这样内容变动完全不需要重新构建应用,使文案修改周期与技术部署周期解耦。
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
+ 这非常适合非技术人员负责文案的团队。这是一种权衡:你获得了内容编辑的自主权,但放弃了仅通过 git checkout 即可完全确定应用渲染状态的确定性。详情见 [CMS 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)。
211
+
212
+ 请注意,`clientSecret` 属于服务端凭证。它应当保存在 CI Secrets 和服务器环境变量中,绝不能暴露给客户端 bundle。
213
+
214
+ ## 坦诚面对局限性
215
+
216
+ 以上所有方案自动化的都是**覆盖率**,而不是**翻译质量**。机器自动填充把一个原本显眼的缺失变成了看不见的缺失:由于 key 已经有了值,审计顺利通过,但没有任何人阅读过这段文案。
217
+
218
+ 对于内部后台、更新日志或处于 Beta 阶段的语言,这完全可以接受。但对于定价页面、法律条款、支付失败提示或任何用户做决策前阅读的内容,这是不可接受的。这些内容必须经过人工审核,并全程使用 `--mode complete`,确保审核过的文案不会在后续构建中被自动覆盖。
219
+
220
+ 同时为模型提供上下文以保证文案风格统一:
221
+
222
+ ```ts
223
+ ai: {
224
+ applicationContext: "B2B 发票管理应用。正式专业语调。绝不要翻译产品名称。",
225
+ }
226
+ ```
227
+
228
+ ## 常见错误
229
+
230
+ - **自动提交中缺少 `[skip ci]`。** 导致任务陷入死循环耗尽配额。
231
+ - **使用 `--git-diff` 时进行了浅克隆(Shallow clone)。** 没有比较基准,什么都没填充且没有任何警告。
232
+ - **每次运行都填充整个字典目录。** 务必使用 `--git-diff` 或 `--unpushed` 控制成本。
233
+ - **将 CLI 报告用作门禁检查。** 退出状态码为 0,无法阻断流程。
234
+ - **将每种语言都设为必需(required)。** 首次阻塞发布时就会导致检查被永久移除。
235
+ - **只配置了填充任务却没有设置任何门禁。** 没有任何步骤会报错,未经审查的机翻直接上线。
236
+ - **将模型 API Key 存放在代码库中。** 必须和 `clientSecret` 一样保存在 CI Secrets 中。
237
+
238
+ ## 深入阅读
239
+
240
+ - [CI/CD:通过 Husky、GitHub Actions 与 CMS 自动生成翻译](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/CI_CD.md)
241
+ - [测试你的内容并在覆盖率不足时阻断构建](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/testing.md)
242
+ - [autoFill:自动生成各语言环境的声明文件](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/autoFill.md)
243
+ - [配置参考:`locales`、`requiredLocales`、`editor`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)
244
+ - [跨框架性能基准报告](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/benchmark/index.md)
245
+ - [i18next 兼容适配器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compat/i18next.md)
246
+ - [如何检测缺失的翻译](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/detecting_missing_translations.md)
247
+ - [如何测试翻译而不写出脆弱的测试](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/i18n_testing_strategies.md)