@intlayer/docs 9.5.2 โ†’ 9.5.4-canary.0

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 (1052) hide show
  1. package/README.md +9 -9
  2. package/blog/ar/history_of_i18n.md +54 -54
  3. package/blog/ar/how_to_pick_react_i18n_library.md +548 -0
  4. package/blog/ar/how_to_pick_solid_i18n_library.md +438 -0
  5. package/blog/ar/how_to_pick_svelte_i18n_library.md +454 -0
  6. package/blog/ar/how_to_pick_vue_i18n_library.md +442 -0
  7. package/blog/ar/i18next_vs_intlayer-i18next.md +327 -0
  8. package/blog/ar/i18next_vs_intlayer.md +445 -0
  9. package/blog/ar/is_i18next_outdated.md +6 -2
  10. package/blog/ar/is_next-intl_outdated.md +6 -2
  11. package/blog/ar/is_vue-i18n_outdated.md +8 -2
  12. package/blog/ar/lingui_vs_intlayer-lingui.md +304 -0
  13. package/blog/ar/lingui_vs_intlayer.md +381 -0
  14. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  15. package/blog/ar/next-intl_vs_intlayer-next-intl.md +309 -0
  16. package/blog/ar/next-intl_vs_intlayer.md +397 -0
  17. package/blog/ar/per-component_vs_centralized_i18n.md +9 -4
  18. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  19. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +286 -0
  20. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +0 -0
  21. package/blog/de/history_of_i18n.md +54 -54
  22. package/blog/de/how_to_pick_react_i18n_library.md +548 -0
  23. package/blog/de/how_to_pick_solid_i18n_library.md +451 -0
  24. package/blog/de/how_to_pick_svelte_i18n_library.md +454 -0
  25. package/blog/de/how_to_pick_vue_i18n_library.md +448 -0
  26. package/blog/de/i18next_vs_intlayer-i18next.md +327 -0
  27. package/blog/de/i18next_vs_intlayer.md +445 -0
  28. package/blog/de/is_i18next_outdated.md +6 -2
  29. package/blog/de/is_next-intl_outdated.md +6 -2
  30. package/blog/de/is_vue-i18n_outdated.md +8 -2
  31. package/blog/de/lingui_vs_intlayer-lingui.md +304 -0
  32. package/blog/de/lingui_vs_intlayer.md +381 -0
  33. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  34. package/blog/de/next-intl_vs_intlayer-next-intl.md +309 -0
  35. package/blog/de/next-intl_vs_intlayer.md +415 -0
  36. package/blog/de/per-component_vs_centralized_i18n.md +9 -4
  37. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  38. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  39. package/blog/de/vue-i18n_vs_intlayer_benchmark.md +355 -0
  40. package/blog/en/history_of_i18n.md +54 -54
  41. package/blog/en/how_to_pick_react_i18n_library.md +542 -0
  42. package/blog/en/how_to_pick_solid_i18n_library.md +438 -0
  43. package/blog/en/how_to_pick_svelte_i18n_library.md +448 -0
  44. package/blog/en/how_to_pick_vue_i18n_library.md +442 -0
  45. package/blog/en/i18next_vs_intlayer-i18next.md +327 -0
  46. package/blog/en/i18next_vs_intlayer.md +445 -0
  47. package/blog/en/is_i18next_outdated.md +6 -2
  48. package/blog/en/is_next-intl_outdated.md +6 -2
  49. package/blog/en/is_vue-i18n_outdated.md +8 -2
  50. package/blog/en/lingui_vs_intlayer-lingui.md +304 -0
  51. package/blog/en/lingui_vs_intlayer.md +381 -0
  52. package/blog/en/list_i18n_technologies/frameworks/react-router.md +2 -3
  53. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  54. package/blog/en/next-intl_vs_intlayer-next-intl.md +309 -0
  55. package/blog/en/next-intl_vs_intlayer.md +415 -0
  56. package/blog/en/per-component_vs_centralized_i18n.md +9 -4
  57. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  58. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  59. package/blog/en/vue-i18n_vs_intlayer.md +1 -1
  60. package/blog/en/vue-i18n_vs_intlayer_benchmark.md +361 -0
  61. package/blog/en-GB/history_of_i18n.md +54 -54
  62. package/blog/en-GB/how_to_pick_react_i18n_library.md +542 -0
  63. package/blog/en-GB/how_to_pick_solid_i18n_library.md +438 -0
  64. package/blog/en-GB/how_to_pick_svelte_i18n_library.md +448 -0
  65. package/blog/en-GB/how_to_pick_vue_i18n_library.md +448 -0
  66. package/blog/en-GB/i18next_vs_intlayer-i18next.md +327 -0
  67. package/blog/en-GB/i18next_vs_intlayer.md +445 -0
  68. package/blog/en-GB/is_i18next_outdated.md +6 -2
  69. package/blog/en-GB/is_next-intl_outdated.md +6 -2
  70. package/blog/en-GB/is_vue-i18n_outdated.md +8 -2
  71. package/blog/en-GB/lingui_vs_intlayer-lingui.md +304 -0
  72. package/blog/en-GB/lingui_vs_intlayer.md +381 -0
  73. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  74. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +309 -0
  75. package/blog/en-GB/next-intl_vs_intlayer.md +415 -0
  76. package/blog/en-GB/per-component_vs_centralized_i18n.md +9 -4
  77. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  78. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  79. package/blog/en-GB/vue-i18n_vs_intlayer.md +1 -1
  80. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +245 -0
  81. package/blog/es/history_of_i18n.md +54 -54
  82. package/blog/es/how_to_pick_react_i18n_library.md +542 -0
  83. package/blog/es/how_to_pick_solid_i18n_library.md +446 -0
  84. package/blog/es/how_to_pick_svelte_i18n_library.md +448 -0
  85. package/blog/es/how_to_pick_vue_i18n_library.md +442 -0
  86. package/blog/es/i18next_vs_intlayer-i18next.md +327 -0
  87. package/blog/es/i18next_vs_intlayer.md +445 -0
  88. package/blog/es/is_i18next_outdated.md +6 -2
  89. package/blog/es/is_next-intl_outdated.md +6 -2
  90. package/blog/es/is_vue-i18n_outdated.md +8 -2
  91. package/blog/es/lingui_vs_intlayer-lingui.md +304 -0
  92. package/blog/es/lingui_vs_intlayer.md +381 -0
  93. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  94. package/blog/es/next-intl_vs_intlayer-next-intl.md +309 -0
  95. package/blog/es/next-intl_vs_intlayer.md +417 -0
  96. package/blog/es/per-component_vs_centralized_i18n.md +9 -4
  97. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  98. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  99. package/blog/es/vue-i18n_vs_intlayer_benchmark.md +363 -0
  100. package/blog/fr/history_of_i18n.md +54 -54
  101. package/blog/fr/how_to_pick_react_i18n_library.md +542 -0
  102. package/blog/fr/how_to_pick_solid_i18n_library.md +438 -0
  103. package/blog/fr/how_to_pick_svelte_i18n_library.md +448 -0
  104. package/blog/fr/how_to_pick_vue_i18n_library.md +442 -0
  105. package/blog/fr/i18next_vs_intlayer-i18next.md +327 -0
  106. package/blog/fr/i18next_vs_intlayer.md +445 -0
  107. package/blog/fr/is_i18next_outdated.md +6 -2
  108. package/blog/fr/is_next-intl_outdated.md +6 -2
  109. package/blog/fr/is_vue-i18n_outdated.md +8 -2
  110. package/blog/fr/lingui_vs_intlayer-lingui.md +304 -0
  111. package/blog/fr/lingui_vs_intlayer.md +381 -0
  112. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  113. package/blog/fr/next-intl_vs_intlayer-next-intl.md +309 -0
  114. package/blog/fr/next-intl_vs_intlayer.md +417 -0
  115. package/blog/fr/per-component_vs_centralized_i18n.md +9 -4
  116. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  117. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +287 -0
  118. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +39 -0
  119. package/blog/hi/history_of_i18n.md +54 -54
  120. package/blog/hi/how_to_pick_react_i18n_library.md +548 -0
  121. package/blog/hi/how_to_pick_solid_i18n_library.md +451 -0
  122. package/blog/hi/how_to_pick_svelte_i18n_library.md +448 -0
  123. package/blog/hi/how_to_pick_vue_i18n_library.md +442 -0
  124. package/blog/hi/i18next_vs_intlayer-i18next.md +327 -0
  125. package/blog/hi/i18next_vs_intlayer.md +445 -0
  126. package/blog/hi/is_i18next_outdated.md +6 -2
  127. package/blog/hi/is_next-intl_outdated.md +6 -2
  128. package/blog/hi/is_vue-i18n_outdated.md +8 -2
  129. package/blog/hi/lingui_vs_intlayer-lingui.md +304 -0
  130. package/blog/hi/lingui_vs_intlayer.md +381 -0
  131. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
  132. package/blog/hi/next-intl_vs_intlayer-next-intl.md +309 -0
  133. package/blog/hi/next-intl_vs_intlayer.md +397 -0
  134. package/blog/hi/per-component_vs_centralized_i18n.md +9 -4
  135. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  136. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  137. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +0 -0
  138. package/blog/id/history_of_i18n.md +54 -54
  139. package/blog/id/how_to_pick_react_i18n_library.md +548 -0
  140. package/blog/id/how_to_pick_solid_i18n_library.md +451 -0
  141. package/blog/id/how_to_pick_svelte_i18n_library.md +454 -0
  142. package/blog/id/how_to_pick_vue_i18n_library.md +442 -0
  143. package/blog/id/i18next_vs_intlayer-i18next.md +327 -0
  144. package/blog/id/i18next_vs_intlayer.md +445 -0
  145. package/blog/id/is_i18next_outdated.md +6 -2
  146. package/blog/id/is_next-intl_outdated.md +6 -2
  147. package/blog/id/is_vue-i18n_outdated.md +8 -2
  148. package/blog/id/lingui_vs_intlayer-lingui.md +304 -0
  149. package/blog/id/lingui_vs_intlayer.md +381 -0
  150. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  151. package/blog/id/next-intl_vs_intlayer-next-intl.md +310 -0
  152. package/blog/id/next-intl_vs_intlayer.md +397 -0
  153. package/blog/id/per-component_vs_centralized_i18n.md +9 -4
  154. package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  155. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +36 -0
  156. package/blog/id/vue-i18n_vs_intlayer.md +1 -1
  157. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +41 -0
  158. package/blog/it/history_of_i18n.md +54 -54
  159. package/blog/it/how_to_pick_react_i18n_library.md +549 -0
  160. package/blog/it/how_to_pick_solid_i18n_library.md +451 -0
  161. package/blog/it/how_to_pick_svelte_i18n_library.md +455 -0
  162. package/blog/it/how_to_pick_vue_i18n_library.md +449 -0
  163. package/blog/it/i18next_vs_intlayer-i18next.md +327 -0
  164. package/blog/it/i18next_vs_intlayer.md +445 -0
  165. package/blog/it/is_i18next_outdated.md +6 -2
  166. package/blog/it/is_next-intl_outdated.md +6 -2
  167. package/blog/it/is_vue-i18n_outdated.md +8 -2
  168. package/blog/it/lingui_vs_intlayer-lingui.md +304 -0
  169. package/blog/it/lingui_vs_intlayer.md +381 -0
  170. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  171. package/blog/it/next-intl_vs_intlayer-next-intl.md +309 -0
  172. package/blog/it/next-intl_vs_intlayer.md +418 -0
  173. package/blog/it/per-component_vs_centralized_i18n.md +9 -4
  174. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  175. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  176. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +34 -0
  177. package/blog/ja/history_of_i18n.md +54 -54
  178. package/blog/ja/how_to_pick_react_i18n_library.md +542 -0
  179. package/blog/ja/how_to_pick_solid_i18n_library.md +451 -0
  180. package/blog/ja/how_to_pick_svelte_i18n_library.md +457 -0
  181. package/blog/ja/how_to_pick_vue_i18n_library.md +442 -0
  182. package/blog/ja/i18next_vs_intlayer-i18next.md +327 -0
  183. package/blog/ja/i18next_vs_intlayer.md +447 -0
  184. package/blog/ja/is_i18next_outdated.md +6 -2
  185. package/blog/ja/is_next-intl_outdated.md +6 -2
  186. package/blog/ja/is_vue-i18n_outdated.md +8 -2
  187. package/blog/ja/lingui_vs_intlayer-lingui.md +304 -0
  188. package/blog/ja/lingui_vs_intlayer.md +381 -0
  189. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  190. package/blog/ja/next-intl_vs_intlayer-next-intl.md +310 -0
  191. package/blog/ja/next-intl_vs_intlayer.md +422 -0
  192. package/blog/ja/per-component_vs_centralized_i18n.md +9 -4
  193. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  194. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  195. package/blog/ja/vue-i18n_vs_intlayer.md +1 -1
  196. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +0 -0
  197. package/blog/ko/history_of_i18n.md +54 -54
  198. package/blog/ko/how_to_pick_react_i18n_library.md +548 -0
  199. package/blog/ko/how_to_pick_solid_i18n_library.md +451 -0
  200. package/blog/ko/how_to_pick_svelte_i18n_library.md +454 -0
  201. package/blog/ko/how_to_pick_vue_i18n_library.md +448 -0
  202. package/blog/ko/i18next_vs_intlayer-i18next.md +327 -0
  203. package/blog/ko/i18next_vs_intlayer.md +447 -0
  204. package/blog/ko/is_i18next_outdated.md +6 -2
  205. package/blog/ko/is_next-intl_outdated.md +6 -2
  206. package/blog/ko/is_vue-i18n_outdated.md +8 -2
  207. package/blog/ko/lingui_vs_intlayer-lingui.md +304 -0
  208. package/blog/ko/lingui_vs_intlayer.md +381 -0
  209. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  210. package/blog/ko/next-intl_vs_intlayer-next-intl.md +309 -0
  211. package/blog/ko/next-intl_vs_intlayer.md +397 -0
  212. package/blog/ko/per-component_vs_centralized_i18n.md +9 -4
  213. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  214. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  215. package/blog/ko/vue-i18n_vs_intlayer.md +1 -1
  216. package/blog/ko/vue-i18n_vs_intlayer_benchmark.md +366 -0
  217. package/blog/pl/history_of_i18n.md +54 -54
  218. package/blog/pl/how_to_pick_react_i18n_library.md +549 -0
  219. package/blog/pl/how_to_pick_solid_i18n_library.md +438 -0
  220. package/blog/pl/how_to_pick_svelte_i18n_library.md +460 -0
  221. package/blog/pl/how_to_pick_vue_i18n_library.md +442 -0
  222. package/blog/pl/i18next_vs_intlayer-i18next.md +327 -0
  223. package/blog/pl/i18next_vs_intlayer.md +445 -0
  224. package/blog/pl/is_i18next_outdated.md +6 -2
  225. package/blog/pl/is_next-intl_outdated.md +6 -2
  226. package/blog/pl/is_vue-i18n_outdated.md +8 -2
  227. package/blog/pl/lingui_vs_intlayer-lingui.md +304 -0
  228. package/blog/pl/lingui_vs_intlayer.md +381 -0
  229. package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  230. package/blog/pl/next-intl_vs_intlayer-next-intl.md +309 -0
  231. package/blog/pl/next-intl_vs_intlayer.md +397 -0
  232. package/blog/pl/per-component_vs_centralized_i18n.md +9 -4
  233. package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  234. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +289 -0
  235. package/blog/pl/vue-i18n_vs_intlayer.md +1 -1
  236. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +0 -0
  237. package/blog/pt/history_of_i18n.md +54 -54
  238. package/blog/pt/how_to_pick_react_i18n_library.md +549 -0
  239. package/blog/pt/how_to_pick_solid_i18n_library.md +451 -0
  240. package/blog/pt/how_to_pick_svelte_i18n_library.md +454 -0
  241. package/blog/pt/how_to_pick_vue_i18n_library.md +448 -0
  242. package/blog/pt/i18next_vs_intlayer-i18next.md +327 -0
  243. package/blog/pt/i18next_vs_intlayer.md +445 -0
  244. package/blog/pt/is_i18next_outdated.md +6 -2
  245. package/blog/pt/is_next-intl_outdated.md +6 -2
  246. package/blog/pt/is_vue-i18n_outdated.md +8 -2
  247. package/blog/pt/lingui_vs_intlayer-lingui.md +304 -0
  248. package/blog/pt/lingui_vs_intlayer.md +381 -0
  249. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  250. package/blog/pt/next-intl_vs_intlayer-next-intl.md +309 -0
  251. package/blog/pt/next-intl_vs_intlayer.md +411 -0
  252. package/blog/pt/per-component_vs_centralized_i18n.md +9 -4
  253. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  254. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  255. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +0 -0
  256. package/blog/ru/history_of_i18n.md +54 -54
  257. package/blog/ru/how_to_pick_react_i18n_library.md +553 -0
  258. package/blog/ru/how_to_pick_solid_i18n_library.md +451 -0
  259. package/blog/ru/how_to_pick_svelte_i18n_library.md +459 -0
  260. package/blog/ru/how_to_pick_vue_i18n_library.md +453 -0
  261. package/blog/ru/i18next_vs_intlayer-i18next.md +327 -0
  262. package/blog/ru/i18next_vs_intlayer.md +445 -0
  263. package/blog/ru/is_i18next_outdated.md +6 -2
  264. package/blog/ru/is_next-intl_outdated.md +6 -2
  265. package/blog/ru/is_vue-i18n_outdated.md +8 -2
  266. package/blog/ru/lingui_vs_intlayer-lingui.md +304 -0
  267. package/blog/ru/lingui_vs_intlayer.md +381 -0
  268. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  269. package/blog/ru/next-intl_vs_intlayer-next-intl.md +309 -0
  270. package/blog/ru/next-intl_vs_intlayer.md +417 -0
  271. package/blog/ru/per-component_vs_centralized_i18n.md +9 -4
  272. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  273. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  274. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +54 -0
  275. package/blog/tr/history_of_i18n.md +54 -54
  276. package/blog/tr/how_to_pick_react_i18n_library.md +548 -0
  277. package/blog/tr/how_to_pick_solid_i18n_library.md +451 -0
  278. package/blog/tr/how_to_pick_svelte_i18n_library.md +454 -0
  279. package/blog/tr/how_to_pick_vue_i18n_library.md +448 -0
  280. package/blog/tr/i18next_vs_intlayer-i18next.md +327 -0
  281. package/blog/tr/i18next_vs_intlayer.md +445 -0
  282. package/blog/tr/is_i18next_outdated.md +6 -2
  283. package/blog/tr/is_next-intl_outdated.md +6 -2
  284. package/blog/tr/is_vue-i18n_outdated.md +8 -2
  285. package/blog/tr/lingui_vs_intlayer-lingui.md +304 -0
  286. package/blog/tr/lingui_vs_intlayer.md +381 -0
  287. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  288. package/blog/tr/next-intl_vs_intlayer-next-intl.md +309 -0
  289. package/blog/tr/next-intl_vs_intlayer.md +397 -0
  290. package/blog/tr/per-component_vs_centralized_i18n.md +9 -4
  291. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  292. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  293. package/blog/tr/vue-i18n_vs_intlayer.md +1 -1
  294. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +0 -0
  295. package/blog/uk/history_of_i18n.md +54 -54
  296. package/blog/uk/how_to_pick_react_i18n_library.md +542 -0
  297. package/blog/uk/how_to_pick_solid_i18n_library.md +451 -0
  298. package/blog/uk/how_to_pick_svelte_i18n_library.md +448 -0
  299. package/blog/uk/how_to_pick_vue_i18n_library.md +443 -0
  300. package/blog/uk/i18next_vs_intlayer-i18next.md +327 -0
  301. package/blog/uk/i18next_vs_intlayer.md +445 -0
  302. package/blog/uk/is_i18next_outdated.md +6 -2
  303. package/blog/uk/is_next-intl_outdated.md +6 -2
  304. package/blog/uk/is_vue-i18n_outdated.md +8 -2
  305. package/blog/uk/lingui_vs_intlayer-lingui.md +304 -0
  306. package/blog/uk/lingui_vs_intlayer.md +381 -0
  307. package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  308. package/blog/uk/next-intl_vs_intlayer-next-intl.md +309 -0
  309. package/blog/uk/next-intl_vs_intlayer.md +397 -0
  310. package/blog/uk/per-component_vs_centralized_i18n.md +9 -4
  311. package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  312. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +270 -0
  313. package/blog/uk/vue-i18n_vs_intlayer.md +1 -1
  314. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +0 -0
  315. package/blog/vi/history_of_i18n.md +54 -54
  316. package/blog/vi/how_to_pick_react_i18n_library.md +548 -0
  317. package/blog/vi/how_to_pick_solid_i18n_library.md +438 -0
  318. package/blog/vi/how_to_pick_svelte_i18n_library.md +448 -0
  319. package/blog/vi/how_to_pick_vue_i18n_library.md +442 -0
  320. package/blog/vi/i18next_vs_intlayer-i18next.md +327 -0
  321. package/blog/vi/i18next_vs_intlayer.md +445 -0
  322. package/blog/vi/is_i18next_outdated.md +6 -2
  323. package/blog/vi/is_next-intl_outdated.md +6 -2
  324. package/blog/vi/is_vue-i18n_outdated.md +8 -2
  325. package/blog/vi/lingui_vs_intlayer-lingui.md +304 -0
  326. package/blog/vi/lingui_vs_intlayer.md +381 -0
  327. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  328. package/blog/vi/next-intl_vs_intlayer-next-intl.md +309 -0
  329. package/blog/vi/next-intl_vs_intlayer.md +397 -0
  330. package/blog/vi/per-component_vs_centralized_i18n.md +9 -4
  331. package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  332. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  333. package/blog/vi/vue-i18n_vs_intlayer.md +1 -1
  334. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +0 -0
  335. package/blog/zh/history_of_i18n.md +54 -54
  336. package/blog/zh/how_to_pick_react_i18n_library.md +548 -0
  337. package/blog/zh/how_to_pick_solid_i18n_library.md +451 -0
  338. package/blog/zh/how_to_pick_svelte_i18n_library.md +454 -0
  339. package/blog/zh/how_to_pick_vue_i18n_library.md +448 -0
  340. package/blog/zh/i18next_vs_intlayer-i18next.md +327 -0
  341. package/blog/zh/i18next_vs_intlayer.md +445 -0
  342. package/blog/zh/is_i18next_outdated.md +6 -2
  343. package/blog/zh/is_next-intl_outdated.md +6 -2
  344. package/blog/zh/is_vue-i18n_outdated.md +8 -2
  345. package/blog/zh/lingui_vs_intlayer-lingui.md +304 -0
  346. package/blog/zh/lingui_vs_intlayer.md +381 -0
  347. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
  348. package/blog/zh/next-intl_vs_intlayer-next-intl.md +309 -0
  349. package/blog/zh/next-intl_vs_intlayer.md +422 -0
  350. package/blog/zh/per-component_vs_centralized_i18n.md +9 -4
  351. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
  352. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  353. package/blog/zh/vue-i18n_vs_intlayer.md +1 -1
  354. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +30 -0
  355. package/dist/cjs/generated/blog.entry.cjs +240 -0
  356. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  357. package/dist/cjs/generated/frequentQuestions.entry.cjs +20 -0
  358. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  359. package/dist/cjs/index.cjs +1 -1
  360. package/dist/esm/generated/blog.entry.mjs +240 -0
  361. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  362. package/dist/esm/generated/frequentQuestions.entry.mjs +20 -0
  363. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  364. package/dist/esm/index.mjs +1 -1
  365. package/dist/types/generated/blog.entry.d.ts +12 -0
  366. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  367. package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
  368. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  369. package/docs/ar/benchmark/nextjs.md +1 -1
  370. package/docs/ar/benchmark/solid.md +1 -1
  371. package/docs/ar/benchmark/svelte.md +1 -1
  372. package/docs/ar/benchmark/tanstack.md +1 -1
  373. package/docs/ar/benchmark/vue.md +1 -1
  374. package/docs/ar/bundle_optimization.md +5 -1
  375. package/docs/ar/how_works_intlayer.md +2 -2
  376. package/docs/ar/interest_of_intlayer.md +7 -7
  377. package/docs/ar/intlayer_CMS.md +1 -1
  378. package/docs/ar/intlayer_with_adonisjs.md +1 -1
  379. package/docs/ar/intlayer_with_analog.md +1 -1
  380. package/docs/ar/intlayer_with_angular_19.md +1 -1
  381. package/docs/ar/intlayer_with_angular_21.md +1 -1
  382. package/docs/ar/intlayer_with_astro.md +1 -1
  383. package/docs/ar/intlayer_with_astro_lit.md +1 -1
  384. package/docs/ar/intlayer_with_astro_preact.md +1 -1
  385. package/docs/ar/intlayer_with_astro_react.md +1 -1
  386. package/docs/ar/intlayer_with_astro_solid.md +1 -1
  387. package/docs/ar/intlayer_with_astro_svelte.md +1 -1
  388. package/docs/ar/intlayer_with_astro_vanilla.md +1 -1
  389. package/docs/ar/intlayer_with_astro_vue.md +1 -1
  390. package/docs/ar/intlayer_with_create_react_app.md +1 -1
  391. package/docs/ar/intlayer_with_express.md +1 -1
  392. package/docs/ar/intlayer_with_hono.md +1 -1
  393. package/docs/ar/intlayer_with_nestjs.md +1 -1
  394. package/docs/ar/intlayer_with_nextjs_14.md +1 -1
  395. package/docs/ar/intlayer_with_nextjs_15.md +1 -1
  396. package/docs/ar/intlayer_with_nextjs_16.md +1 -1
  397. package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
  398. package/docs/ar/intlayer_with_react_router_v7.md +1 -1
  399. package/docs/ar/intlayer_with_vite+preact.md +1 -1
  400. package/docs/ar/intlayer_with_vite+react.md +1 -1
  401. package/docs/ar/intlayer_with_vite+vue.md +1 -1
  402. package/docs/ar/introduction.md +0 -1
  403. package/docs/ar/readme.md +8 -8
  404. package/docs/bn/bundle_optimization.md +5 -1
  405. package/docs/bn/interest_of_intlayer.md +22 -22
  406. package/docs/bn/intlayer_CMS.md +1 -1
  407. package/docs/bn/intlayer_with_angular_21.md +1 -1
  408. package/docs/bn/intlayer_with_hono.md +1 -1
  409. package/docs/bn/introduction.md +0 -1
  410. package/docs/cs/bundle_optimization.md +5 -1
  411. package/docs/cs/interest_of_intlayer.md +7 -7
  412. package/docs/cs/intlayer_with_angular_21.md +1 -1
  413. package/docs/cs/intlayer_with_hono.md +1 -1
  414. package/docs/cs/introduction.md +0 -1
  415. package/docs/de/benchmark/nextjs.md +1 -1
  416. package/docs/de/benchmark/solid.md +1 -1
  417. package/docs/de/benchmark/svelte.md +1 -1
  418. package/docs/de/benchmark/tanstack.md +1 -1
  419. package/docs/de/benchmark/vue.md +1 -1
  420. package/docs/de/bundle_optimization.md +5 -1
  421. package/docs/de/how_works_intlayer.md +2 -2
  422. package/docs/de/interest_of_intlayer.md +7 -7
  423. package/docs/de/intlayer_CMS.md +1 -1
  424. package/docs/de/intlayer_with_adonisjs.md +1 -1
  425. package/docs/de/intlayer_with_analog.md +1 -1
  426. package/docs/de/intlayer_with_angular_19.md +1 -1
  427. package/docs/de/intlayer_with_angular_21.md +1 -1
  428. package/docs/de/intlayer_with_astro.md +1 -1
  429. package/docs/de/intlayer_with_astro_lit.md +1 -1
  430. package/docs/de/intlayer_with_astro_preact.md +1 -1
  431. package/docs/de/intlayer_with_astro_react.md +1 -1
  432. package/docs/de/intlayer_with_astro_solid.md +1 -1
  433. package/docs/de/intlayer_with_astro_svelte.md +1 -1
  434. package/docs/de/intlayer_with_astro_vanilla.md +1 -1
  435. package/docs/de/intlayer_with_astro_vue.md +1 -1
  436. package/docs/de/intlayer_with_create_react_app.md +1 -1
  437. package/docs/de/intlayer_with_express.md +1 -1
  438. package/docs/de/intlayer_with_hono.md +1 -1
  439. package/docs/de/intlayer_with_nestjs.md +1 -1
  440. package/docs/de/intlayer_with_nextjs_14.md +1 -1
  441. package/docs/de/intlayer_with_nextjs_15.md +1 -1
  442. package/docs/de/intlayer_with_nextjs_16.md +1 -1
  443. package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
  444. package/docs/de/intlayer_with_vite+preact.md +1 -1
  445. package/docs/de/intlayer_with_vite+react.md +1 -1
  446. package/docs/de/intlayer_with_vite+vue.md +1 -1
  447. package/docs/de/introduction.md +0 -1
  448. package/docs/de/readme.md +8 -8
  449. package/docs/en/benchmark/nextjs.md +1 -1
  450. package/docs/en/benchmark/solid.md +1 -1
  451. package/docs/en/benchmark/svelte.md +1 -1
  452. package/docs/en/benchmark/tanstack.md +1 -1
  453. package/docs/en/benchmark/vue.md +1 -1
  454. package/docs/en/bundle_optimization.md +5 -1
  455. package/docs/en/how_works_intlayer.md +2 -2
  456. package/docs/en/interest_of_intlayer.md +7 -7
  457. package/docs/en/intlayer_CMS.md +1 -1
  458. package/docs/en/intlayer_with_adonisjs.md +1 -1
  459. package/docs/en/intlayer_with_analog.md +1 -1
  460. package/docs/en/intlayer_with_angular_19.md +1 -1
  461. package/docs/en/intlayer_with_angular_21.md +1 -1
  462. package/docs/en/intlayer_with_astro.md +1 -1
  463. package/docs/en/intlayer_with_astro_lit.md +1 -1
  464. package/docs/en/intlayer_with_astro_preact.md +1 -1
  465. package/docs/en/intlayer_with_astro_react.md +1 -1
  466. package/docs/en/intlayer_with_astro_solid.md +1 -1
  467. package/docs/en/intlayer_with_astro_svelte.md +1 -1
  468. package/docs/en/intlayer_with_astro_vanilla.md +1 -1
  469. package/docs/en/intlayer_with_astro_vue.md +1 -1
  470. package/docs/en/intlayer_with_create_react_app.md +1 -1
  471. package/docs/en/intlayer_with_express.md +1 -1
  472. package/docs/en/intlayer_with_hono.md +1 -1
  473. package/docs/en/intlayer_with_nestjs.md +1 -1
  474. package/docs/en/intlayer_with_nextjs_14.md +1 -1
  475. package/docs/en/intlayer_with_nextjs_15.md +1 -1
  476. package/docs/en/intlayer_with_nextjs_16.md +1 -1
  477. package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
  478. package/docs/en/intlayer_with_vite+preact.md +1 -1
  479. package/docs/en/intlayer_with_vite+react.md +1 -1
  480. package/docs/en/intlayer_with_vite+vue.md +1 -1
  481. package/docs/en/introduction.md +0 -1
  482. package/docs/en/readme.md +8 -8
  483. package/docs/en-GB/benchmark/nextjs.md +1 -1
  484. package/docs/en-GB/benchmark/solid.md +1 -1
  485. package/docs/en-GB/benchmark/svelte.md +1 -1
  486. package/docs/en-GB/benchmark/tanstack.md +1 -1
  487. package/docs/en-GB/benchmark/vue.md +1 -1
  488. package/docs/en-GB/bundle_optimization.md +5 -1
  489. package/docs/en-GB/how_works_intlayer.md +2 -2
  490. package/docs/en-GB/interest_of_intlayer.md +7 -7
  491. package/docs/en-GB/intlayer_CMS.md +1 -1
  492. package/docs/en-GB/intlayer_with_adonisjs.md +1 -1
  493. package/docs/en-GB/intlayer_with_analog.md +1 -1
  494. package/docs/en-GB/intlayer_with_angular_19.md +1 -1
  495. package/docs/en-GB/intlayer_with_angular_21.md +1 -1
  496. package/docs/en-GB/intlayer_with_astro.md +1 -1
  497. package/docs/en-GB/intlayer_with_astro_lit.md +1 -1
  498. package/docs/en-GB/intlayer_with_astro_preact.md +1 -1
  499. package/docs/en-GB/intlayer_with_astro_react.md +1 -1
  500. package/docs/en-GB/intlayer_with_astro_solid.md +1 -1
  501. package/docs/en-GB/intlayer_with_astro_svelte.md +1 -1
  502. package/docs/en-GB/intlayer_with_astro_vanilla.md +1 -1
  503. package/docs/en-GB/intlayer_with_astro_vue.md +1 -1
  504. package/docs/en-GB/intlayer_with_create_react_app.md +1 -1
  505. package/docs/en-GB/intlayer_with_express.md +1 -1
  506. package/docs/en-GB/intlayer_with_hono.md +1 -1
  507. package/docs/en-GB/intlayer_with_nestjs.md +1 -1
  508. package/docs/en-GB/intlayer_with_nextjs_14.md +1 -1
  509. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -1
  510. package/docs/en-GB/intlayer_with_nextjs_16.md +1 -1
  511. package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
  512. package/docs/en-GB/intlayer_with_vite+preact.md +1 -1
  513. package/docs/en-GB/intlayer_with_vite+react.md +1 -1
  514. package/docs/en-GB/intlayer_with_vite+vue.md +1 -1
  515. package/docs/en-GB/introduction.md +0 -1
  516. package/docs/en-GB/readme.md +8 -8
  517. package/docs/es/benchmark/nextjs.md +1 -1
  518. package/docs/es/benchmark/solid.md +1 -1
  519. package/docs/es/benchmark/svelte.md +1 -1
  520. package/docs/es/benchmark/tanstack.md +1 -1
  521. package/docs/es/benchmark/vue.md +1 -1
  522. package/docs/es/bundle_optimization.md +5 -1
  523. package/docs/es/how_works_intlayer.md +2 -2
  524. package/docs/es/interest_of_intlayer.md +7 -7
  525. package/docs/es/intlayer_CMS.md +1 -1
  526. package/docs/es/intlayer_with_adonisjs.md +1 -1
  527. package/docs/es/intlayer_with_analog.md +1 -1
  528. package/docs/es/intlayer_with_angular_19.md +1 -1
  529. package/docs/es/intlayer_with_angular_21.md +1 -1
  530. package/docs/es/intlayer_with_astro.md +1 -1
  531. package/docs/es/intlayer_with_astro_lit.md +1 -1
  532. package/docs/es/intlayer_with_astro_preact.md +1 -1
  533. package/docs/es/intlayer_with_astro_react.md +1 -1
  534. package/docs/es/intlayer_with_astro_solid.md +1 -1
  535. package/docs/es/intlayer_with_astro_svelte.md +1 -1
  536. package/docs/es/intlayer_with_astro_vanilla.md +1 -1
  537. package/docs/es/intlayer_with_astro_vue.md +1 -1
  538. package/docs/es/intlayer_with_create_react_app.md +1 -1
  539. package/docs/es/intlayer_with_express.md +1 -1
  540. package/docs/es/intlayer_with_hono.md +1 -1
  541. package/docs/es/intlayer_with_nestjs.md +1 -1
  542. package/docs/es/intlayer_with_nextjs_14.md +1 -1
  543. package/docs/es/intlayer_with_nextjs_15.md +1 -1
  544. package/docs/es/intlayer_with_nextjs_16.md +1 -1
  545. package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
  546. package/docs/es/intlayer_with_vite+preact.md +1 -1
  547. package/docs/es/intlayer_with_vite+react.md +1 -1
  548. package/docs/es/intlayer_with_vite+vue.md +1 -1
  549. package/docs/es/introduction.md +0 -1
  550. package/docs/es/readme.md +8 -8
  551. package/docs/fr/benchmark/nextjs.md +1 -1
  552. package/docs/fr/benchmark/solid.md +1 -1
  553. package/docs/fr/benchmark/svelte.md +1 -1
  554. package/docs/fr/benchmark/tanstack.md +1 -1
  555. package/docs/fr/benchmark/vue.md +1 -1
  556. package/docs/fr/bundle_optimization.md +5 -1
  557. package/docs/fr/how_works_intlayer.md +2 -2
  558. package/docs/fr/interest_of_intlayer.md +7 -7
  559. package/docs/fr/intlayer_CMS.md +1 -1
  560. package/docs/fr/intlayer_with_adonisjs.md +1 -1
  561. package/docs/fr/intlayer_with_analog.md +1 -1
  562. package/docs/fr/intlayer_with_angular_19.md +1 -1
  563. package/docs/fr/intlayer_with_angular_21.md +1 -1
  564. package/docs/fr/intlayer_with_astro.md +1 -1
  565. package/docs/fr/intlayer_with_astro_lit.md +1 -1
  566. package/docs/fr/intlayer_with_astro_preact.md +1 -1
  567. package/docs/fr/intlayer_with_astro_react.md +1 -1
  568. package/docs/fr/intlayer_with_astro_solid.md +1 -1
  569. package/docs/fr/intlayer_with_astro_svelte.md +1 -1
  570. package/docs/fr/intlayer_with_astro_vanilla.md +1 -1
  571. package/docs/fr/intlayer_with_astro_vue.md +1 -1
  572. package/docs/fr/intlayer_with_create_react_app.md +1 -1
  573. package/docs/fr/intlayer_with_express.md +1 -1
  574. package/docs/fr/intlayer_with_hono.md +1 -1
  575. package/docs/fr/intlayer_with_nestjs.md +1 -1
  576. package/docs/fr/intlayer_with_nextjs_14.md +1 -1
  577. package/docs/fr/intlayer_with_nextjs_15.md +1 -1
  578. package/docs/fr/intlayer_with_nextjs_16.md +1 -1
  579. package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
  580. package/docs/fr/intlayer_with_react_router_v7.md +2 -2
  581. package/docs/fr/intlayer_with_vite+preact.md +1 -1
  582. package/docs/fr/intlayer_with_vite+react.md +1 -1
  583. package/docs/fr/intlayer_with_vite+vue.md +1 -1
  584. package/docs/fr/introduction.md +0 -1
  585. package/docs/fr/readme.md +8 -8
  586. package/docs/hi/benchmark/nextjs.md +1 -1
  587. package/docs/hi/benchmark/solid.md +1 -1
  588. package/docs/hi/benchmark/svelte.md +1 -1
  589. package/docs/hi/benchmark/tanstack.md +1 -1
  590. package/docs/hi/benchmark/vue.md +1 -1
  591. package/docs/hi/bundle_optimization.md +5 -1
  592. package/docs/hi/how_works_intlayer.md +2 -2
  593. package/docs/hi/interest_of_intlayer.md +7 -7
  594. package/docs/hi/intlayer_CMS.md +1 -1
  595. package/docs/hi/intlayer_with_adonisjs.md +1 -1
  596. package/docs/hi/intlayer_with_analog.md +1 -1
  597. package/docs/hi/intlayer_with_angular_19.md +1 -1
  598. package/docs/hi/intlayer_with_angular_21.md +1 -1
  599. package/docs/hi/intlayer_with_astro.md +1 -1
  600. package/docs/hi/intlayer_with_astro_lit.md +1 -1
  601. package/docs/hi/intlayer_with_astro_preact.md +1 -1
  602. package/docs/hi/intlayer_with_astro_react.md +1 -1
  603. package/docs/hi/intlayer_with_astro_solid.md +1 -1
  604. package/docs/hi/intlayer_with_astro_svelte.md +1 -1
  605. package/docs/hi/intlayer_with_astro_vanilla.md +1 -1
  606. package/docs/hi/intlayer_with_astro_vue.md +1 -1
  607. package/docs/hi/intlayer_with_create_react_app.md +1 -1
  608. package/docs/hi/intlayer_with_express.md +1 -1
  609. package/docs/hi/intlayer_with_hono.md +1 -1
  610. package/docs/hi/intlayer_with_nestjs.md +1 -1
  611. package/docs/hi/intlayer_with_nextjs_14.md +1 -1
  612. package/docs/hi/intlayer_with_nextjs_15.md +1 -1
  613. package/docs/hi/intlayer_with_nextjs_16.md +1 -1
  614. package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
  615. package/docs/hi/intlayer_with_react_router_v7.md +1 -1
  616. package/docs/hi/intlayer_with_vite+preact.md +1 -1
  617. package/docs/hi/intlayer_with_vite+react.md +1 -1
  618. package/docs/hi/intlayer_with_vite+vue.md +1 -1
  619. package/docs/hi/introduction.md +0 -1
  620. package/docs/hi/readme.md +8 -8
  621. package/docs/id/benchmark/nextjs.md +1 -1
  622. package/docs/id/benchmark/solid.md +1 -1
  623. package/docs/id/benchmark/svelte.md +1 -1
  624. package/docs/id/benchmark/tanstack.md +1 -1
  625. package/docs/id/benchmark/vue.md +1 -1
  626. package/docs/id/bundle_optimization.md +5 -1
  627. package/docs/id/how_works_intlayer.md +2 -2
  628. package/docs/id/interest_of_intlayer.md +7 -7
  629. package/docs/id/intlayer_CMS.md +1 -1
  630. package/docs/id/intlayer_with_adonisjs.md +1 -1
  631. package/docs/id/intlayer_with_analog.md +1 -1
  632. package/docs/id/intlayer_with_angular_19.md +1 -1
  633. package/docs/id/intlayer_with_angular_21.md +1 -1
  634. package/docs/id/intlayer_with_astro.md +1 -1
  635. package/docs/id/intlayer_with_astro_lit.md +1 -1
  636. package/docs/id/intlayer_with_astro_preact.md +1 -1
  637. package/docs/id/intlayer_with_astro_react.md +1 -1
  638. package/docs/id/intlayer_with_astro_solid.md +1 -1
  639. package/docs/id/intlayer_with_astro_svelte.md +1 -1
  640. package/docs/id/intlayer_with_astro_vanilla.md +1 -1
  641. package/docs/id/intlayer_with_astro_vue.md +1 -1
  642. package/docs/id/intlayer_with_create_react_app.md +1 -1
  643. package/docs/id/intlayer_with_express.md +1 -1
  644. package/docs/id/intlayer_with_hono.md +1 -1
  645. package/docs/id/intlayer_with_nestjs.md +1 -1
  646. package/docs/id/intlayer_with_nextjs_14.md +1 -1
  647. package/docs/id/intlayer_with_nextjs_15.md +1 -1
  648. package/docs/id/intlayer_with_nextjs_16.md +1 -1
  649. package/docs/id/intlayer_with_nextjs_page_router.md +1 -1
  650. package/docs/id/intlayer_with_react_router_v7.md +1 -1
  651. package/docs/id/intlayer_with_vite+preact.md +1 -1
  652. package/docs/id/intlayer_with_vite+react.md +1 -1
  653. package/docs/id/intlayer_with_vite+vue.md +1 -1
  654. package/docs/id/introduction.md +0 -1
  655. package/docs/id/readme.md +8 -8
  656. package/docs/it/benchmark/nextjs.md +1 -1
  657. package/docs/it/benchmark/solid.md +1 -1
  658. package/docs/it/benchmark/svelte.md +1 -1
  659. package/docs/it/benchmark/tanstack.md +1 -1
  660. package/docs/it/benchmark/vue.md +1 -1
  661. package/docs/it/bundle_optimization.md +5 -1
  662. package/docs/it/how_works_intlayer.md +2 -2
  663. package/docs/it/interest_of_intlayer.md +7 -7
  664. package/docs/it/intlayer_CMS.md +1 -1
  665. package/docs/it/intlayer_with_adonisjs.md +1 -1
  666. package/docs/it/intlayer_with_analog.md +1 -1
  667. package/docs/it/intlayer_with_angular_19.md +1 -1
  668. package/docs/it/intlayer_with_angular_21.md +1 -1
  669. package/docs/it/intlayer_with_astro.md +1 -1
  670. package/docs/it/intlayer_with_astro_lit.md +1 -1
  671. package/docs/it/intlayer_with_astro_preact.md +1 -1
  672. package/docs/it/intlayer_with_astro_react.md +1 -1
  673. package/docs/it/intlayer_with_astro_solid.md +1 -1
  674. package/docs/it/intlayer_with_astro_svelte.md +1 -1
  675. package/docs/it/intlayer_with_astro_vanilla.md +1 -1
  676. package/docs/it/intlayer_with_astro_vue.md +1 -1
  677. package/docs/it/intlayer_with_create_react_app.md +1 -1
  678. package/docs/it/intlayer_with_express.md +1 -1
  679. package/docs/it/intlayer_with_hono.md +1 -1
  680. package/docs/it/intlayer_with_nestjs.md +1 -1
  681. package/docs/it/intlayer_with_nextjs_14.md +1 -1
  682. package/docs/it/intlayer_with_nextjs_15.md +1 -1
  683. package/docs/it/intlayer_with_nextjs_16.md +1 -1
  684. package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
  685. package/docs/it/intlayer_with_react_router_v7.md +2 -2
  686. package/docs/it/intlayer_with_vite+preact.md +1 -1
  687. package/docs/it/intlayer_with_vite+react.md +1 -1
  688. package/docs/it/intlayer_with_vite+vue.md +1 -1
  689. package/docs/it/introduction.md +0 -1
  690. package/docs/it/readme.md +8 -8
  691. package/docs/ja/benchmark/nextjs.md +1 -1
  692. package/docs/ja/benchmark/solid.md +1 -1
  693. package/docs/ja/benchmark/svelte.md +1 -1
  694. package/docs/ja/benchmark/tanstack.md +1 -1
  695. package/docs/ja/benchmark/vue.md +1 -1
  696. package/docs/ja/bundle_optimization.md +5 -1
  697. package/docs/ja/how_works_intlayer.md +2 -2
  698. package/docs/ja/interest_of_intlayer.md +7 -7
  699. package/docs/ja/intlayer_CMS.md +1 -1
  700. package/docs/ja/intlayer_with_adonisjs.md +1 -1
  701. package/docs/ja/intlayer_with_analog.md +1 -1
  702. package/docs/ja/intlayer_with_angular_19.md +1 -1
  703. package/docs/ja/intlayer_with_angular_21.md +1 -1
  704. package/docs/ja/intlayer_with_astro.md +1 -1
  705. package/docs/ja/intlayer_with_astro_lit.md +1 -1
  706. package/docs/ja/intlayer_with_astro_preact.md +1 -1
  707. package/docs/ja/intlayer_with_astro_react.md +1 -1
  708. package/docs/ja/intlayer_with_astro_solid.md +1 -1
  709. package/docs/ja/intlayer_with_astro_svelte.md +1 -1
  710. package/docs/ja/intlayer_with_astro_vanilla.md +1 -1
  711. package/docs/ja/intlayer_with_astro_vue.md +1 -1
  712. package/docs/ja/intlayer_with_create_react_app.md +1 -1
  713. package/docs/ja/intlayer_with_express.md +1 -1
  714. package/docs/ja/intlayer_with_hono.md +1 -1
  715. package/docs/ja/intlayer_with_nestjs.md +1 -1
  716. package/docs/ja/intlayer_with_nextjs_14.md +1 -1
  717. package/docs/ja/intlayer_with_nextjs_15.md +1 -1
  718. package/docs/ja/intlayer_with_nextjs_16.md +1 -1
  719. package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
  720. package/docs/ja/intlayer_with_vite+preact.md +1 -1
  721. package/docs/ja/intlayer_with_vite+react.md +1 -1
  722. package/docs/ja/intlayer_with_vite+vue.md +1 -1
  723. package/docs/ja/introduction.md +0 -1
  724. package/docs/ja/readme.md +8 -8
  725. package/docs/ko/benchmark/nextjs.md +1 -1
  726. package/docs/ko/benchmark/solid.md +1 -1
  727. package/docs/ko/benchmark/svelte.md +1 -1
  728. package/docs/ko/benchmark/tanstack.md +1 -1
  729. package/docs/ko/benchmark/vue.md +1 -1
  730. package/docs/ko/bundle_optimization.md +5 -1
  731. package/docs/ko/how_works_intlayer.md +2 -2
  732. package/docs/ko/interest_of_intlayer.md +7 -7
  733. package/docs/ko/intlayer_CMS.md +1 -1
  734. package/docs/ko/intlayer_with_adonisjs.md +1 -1
  735. package/docs/ko/intlayer_with_analog.md +1 -1
  736. package/docs/ko/intlayer_with_angular_19.md +1 -1
  737. package/docs/ko/intlayer_with_angular_21.md +1 -1
  738. package/docs/ko/intlayer_with_astro.md +1 -1
  739. package/docs/ko/intlayer_with_astro_lit.md +1 -1
  740. package/docs/ko/intlayer_with_astro_preact.md +1 -1
  741. package/docs/ko/intlayer_with_astro_react.md +1 -1
  742. package/docs/ko/intlayer_with_astro_solid.md +1 -1
  743. package/docs/ko/intlayer_with_astro_svelte.md +1 -1
  744. package/docs/ko/intlayer_with_astro_vanilla.md +1 -1
  745. package/docs/ko/intlayer_with_astro_vue.md +1 -1
  746. package/docs/ko/intlayer_with_create_react_app.md +1 -1
  747. package/docs/ko/intlayer_with_express.md +1 -1
  748. package/docs/ko/intlayer_with_hono.md +1 -1
  749. package/docs/ko/intlayer_with_nestjs.md +1 -1
  750. package/docs/ko/intlayer_with_nextjs_14.md +1 -1
  751. package/docs/ko/intlayer_with_nextjs_15.md +1 -1
  752. package/docs/ko/intlayer_with_nextjs_16.md +1 -1
  753. package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
  754. package/docs/ko/intlayer_with_react_router_v7.md +2 -2
  755. package/docs/ko/intlayer_with_vite+preact.md +1 -1
  756. package/docs/ko/intlayer_with_vite+react.md +1 -1
  757. package/docs/ko/intlayer_with_vite+vue.md +1 -1
  758. package/docs/ko/introduction.md +0 -1
  759. package/docs/ko/readme.md +8 -8
  760. package/docs/nl/bundle_optimization.md +5 -1
  761. package/docs/nl/interest_of_intlayer.md +7 -7
  762. package/docs/nl/intlayer_with_angular_21.md +1 -1
  763. package/docs/nl/intlayer_with_hono.md +1 -1
  764. package/docs/nl/introduction.md +0 -1
  765. package/docs/pl/benchmark/nextjs.md +1 -1
  766. package/docs/pl/benchmark/solid.md +1 -1
  767. package/docs/pl/benchmark/svelte.md +1 -1
  768. package/docs/pl/benchmark/tanstack.md +1 -1
  769. package/docs/pl/benchmark/vue.md +1 -1
  770. package/docs/pl/bundle_optimization.md +5 -1
  771. package/docs/pl/how_works_intlayer.md +2 -2
  772. package/docs/pl/interest_of_intlayer.md +7 -7
  773. package/docs/pl/intlayer_CMS.md +1 -1
  774. package/docs/pl/intlayer_with_adonisjs.md +1 -1
  775. package/docs/pl/intlayer_with_analog.md +1 -1
  776. package/docs/pl/intlayer_with_angular_19.md +1 -1
  777. package/docs/pl/intlayer_with_angular_21.md +1 -1
  778. package/docs/pl/intlayer_with_astro.md +1 -1
  779. package/docs/pl/intlayer_with_astro_lit.md +1 -1
  780. package/docs/pl/intlayer_with_astro_preact.md +1 -1
  781. package/docs/pl/intlayer_with_astro_react.md +1 -1
  782. package/docs/pl/intlayer_with_astro_solid.md +1 -1
  783. package/docs/pl/intlayer_with_astro_svelte.md +1 -1
  784. package/docs/pl/intlayer_with_astro_vanilla.md +1 -1
  785. package/docs/pl/intlayer_with_astro_vue.md +1 -1
  786. package/docs/pl/intlayer_with_create_react_app.md +1 -1
  787. package/docs/pl/intlayer_with_express.md +1 -1
  788. package/docs/pl/intlayer_with_hono.md +1 -1
  789. package/docs/pl/intlayer_with_nestjs.md +1 -1
  790. package/docs/pl/intlayer_with_nextjs_14.md +1 -1
  791. package/docs/pl/intlayer_with_nextjs_15.md +1 -1
  792. package/docs/pl/intlayer_with_nextjs_16.md +1 -1
  793. package/docs/pl/intlayer_with_nextjs_page_router.md +1 -1
  794. package/docs/pl/intlayer_with_react_router_v7.md +2 -2
  795. package/docs/pl/intlayer_with_vite+preact.md +1 -1
  796. package/docs/pl/intlayer_with_vite+react.md +1 -1
  797. package/docs/pl/intlayer_with_vite+vue.md +1 -1
  798. package/docs/pl/introduction.md +0 -1
  799. package/docs/pl/readme.md +8 -8
  800. package/docs/pt/benchmark/nextjs.md +1 -1
  801. package/docs/pt/benchmark/solid.md +1 -1
  802. package/docs/pt/benchmark/svelte.md +1 -1
  803. package/docs/pt/benchmark/tanstack.md +1 -1
  804. package/docs/pt/benchmark/vue.md +1 -1
  805. package/docs/pt/bundle_optimization.md +5 -1
  806. package/docs/pt/how_works_intlayer.md +2 -2
  807. package/docs/pt/interest_of_intlayer.md +7 -7
  808. package/docs/pt/intlayer_CMS.md +1 -1
  809. package/docs/pt/intlayer_with_adonisjs.md +1 -1
  810. package/docs/pt/intlayer_with_analog.md +1 -1
  811. package/docs/pt/intlayer_with_angular_19.md +1 -1
  812. package/docs/pt/intlayer_with_angular_21.md +1 -1
  813. package/docs/pt/intlayer_with_astro.md +1 -1
  814. package/docs/pt/intlayer_with_astro_lit.md +1 -1
  815. package/docs/pt/intlayer_with_astro_preact.md +1 -1
  816. package/docs/pt/intlayer_with_astro_react.md +1 -1
  817. package/docs/pt/intlayer_with_astro_solid.md +1 -1
  818. package/docs/pt/intlayer_with_astro_svelte.md +1 -1
  819. package/docs/pt/intlayer_with_astro_vanilla.md +1 -1
  820. package/docs/pt/intlayer_with_astro_vue.md +1 -1
  821. package/docs/pt/intlayer_with_create_react_app.md +1 -1
  822. package/docs/pt/intlayer_with_express.md +1 -1
  823. package/docs/pt/intlayer_with_hono.md +1 -1
  824. package/docs/pt/intlayer_with_nestjs.md +1 -1
  825. package/docs/pt/intlayer_with_nextjs_14.md +1 -1
  826. package/docs/pt/intlayer_with_nextjs_15.md +1 -1
  827. package/docs/pt/intlayer_with_nextjs_16.md +1 -1
  828. package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
  829. package/docs/pt/intlayer_with_react_router_v7.md +2 -2
  830. package/docs/pt/intlayer_with_vite+preact.md +1 -1
  831. package/docs/pt/intlayer_with_vite+react.md +1 -1
  832. package/docs/pt/intlayer_with_vite+vue.md +1 -1
  833. package/docs/pt/introduction.md +0 -1
  834. package/docs/pt/readme.md +8 -8
  835. package/docs/ru/benchmark/nextjs.md +1 -1
  836. package/docs/ru/benchmark/solid.md +1 -1
  837. package/docs/ru/benchmark/svelte.md +1 -1
  838. package/docs/ru/benchmark/tanstack.md +1 -1
  839. package/docs/ru/benchmark/vue.md +1 -1
  840. package/docs/ru/bundle_optimization.md +5 -1
  841. package/docs/ru/how_works_intlayer.md +2 -2
  842. package/docs/ru/interest_of_intlayer.md +7 -7
  843. package/docs/ru/intlayer_CMS.md +1 -1
  844. package/docs/ru/intlayer_with_adonisjs.md +1 -1
  845. package/docs/ru/intlayer_with_analog.md +1 -1
  846. package/docs/ru/intlayer_with_angular_19.md +1 -1
  847. package/docs/ru/intlayer_with_angular_21.md +1 -1
  848. package/docs/ru/intlayer_with_astro.md +1 -1
  849. package/docs/ru/intlayer_with_astro_lit.md +1 -1
  850. package/docs/ru/intlayer_with_astro_preact.md +1 -1
  851. package/docs/ru/intlayer_with_astro_react.md +1 -1
  852. package/docs/ru/intlayer_with_astro_solid.md +1 -1
  853. package/docs/ru/intlayer_with_astro_svelte.md +1 -1
  854. package/docs/ru/intlayer_with_astro_vanilla.md +1 -1
  855. package/docs/ru/intlayer_with_astro_vue.md +1 -1
  856. package/docs/ru/intlayer_with_create_react_app.md +1 -1
  857. package/docs/ru/intlayer_with_express.md +1 -1
  858. package/docs/ru/intlayer_with_hono.md +1 -1
  859. package/docs/ru/intlayer_with_nestjs.md +1 -1
  860. package/docs/ru/intlayer_with_nextjs_14.md +1 -1
  861. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  862. package/docs/ru/intlayer_with_nextjs_16.md +1 -1
  863. package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
  864. package/docs/ru/intlayer_with_react_router_v7.md +2 -2
  865. package/docs/ru/intlayer_with_vite+preact.md +1 -1
  866. package/docs/ru/intlayer_with_vite+react.md +1 -1
  867. package/docs/ru/intlayer_with_vite+vue.md +1 -1
  868. package/docs/ru/introduction.md +0 -1
  869. package/docs/ru/readme.md +8 -8
  870. package/docs/tr/benchmark/nextjs.md +1 -1
  871. package/docs/tr/benchmark/solid.md +1 -1
  872. package/docs/tr/benchmark/svelte.md +1 -1
  873. package/docs/tr/benchmark/tanstack.md +1 -1
  874. package/docs/tr/benchmark/vue.md +1 -1
  875. package/docs/tr/bundle_optimization.md +5 -1
  876. package/docs/tr/how_works_intlayer.md +2 -2
  877. package/docs/tr/interest_of_intlayer.md +7 -7
  878. package/docs/tr/intlayer_CMS.md +1 -1
  879. package/docs/tr/intlayer_with_adonisjs.md +1 -1
  880. package/docs/tr/intlayer_with_analog.md +1 -1
  881. package/docs/tr/intlayer_with_angular_19.md +1 -1
  882. package/docs/tr/intlayer_with_angular_21.md +1 -1
  883. package/docs/tr/intlayer_with_astro.md +1 -1
  884. package/docs/tr/intlayer_with_astro_lit.md +1 -1
  885. package/docs/tr/intlayer_with_astro_preact.md +1 -1
  886. package/docs/tr/intlayer_with_astro_react.md +1 -1
  887. package/docs/tr/intlayer_with_astro_solid.md +1 -1
  888. package/docs/tr/intlayer_with_astro_svelte.md +1 -1
  889. package/docs/tr/intlayer_with_astro_vanilla.md +1 -1
  890. package/docs/tr/intlayer_with_astro_vue.md +1 -1
  891. package/docs/tr/intlayer_with_create_react_app.md +1 -1
  892. package/docs/tr/intlayer_with_express.md +1 -1
  893. package/docs/tr/intlayer_with_hono.md +1 -1
  894. package/docs/tr/intlayer_with_nestjs.md +1 -1
  895. package/docs/tr/intlayer_with_nextjs_14.md +1 -1
  896. package/docs/tr/intlayer_with_nextjs_15.md +1 -1
  897. package/docs/tr/intlayer_with_nextjs_16.md +1 -1
  898. package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
  899. package/docs/tr/intlayer_with_react_router_v7.md +1 -1
  900. package/docs/tr/intlayer_with_vite+preact.md +1 -1
  901. package/docs/tr/intlayer_with_vite+react.md +1 -1
  902. package/docs/tr/intlayer_with_vite+vue.md +1 -1
  903. package/docs/tr/introduction.md +0 -1
  904. package/docs/tr/readme.md +8 -8
  905. package/docs/uk/benchmark/nextjs.md +1 -1
  906. package/docs/uk/benchmark/solid.md +1 -1
  907. package/docs/uk/benchmark/svelte.md +1 -1
  908. package/docs/uk/benchmark/tanstack.md +1 -1
  909. package/docs/uk/benchmark/vue.md +1 -1
  910. package/docs/uk/bundle_optimization.md +5 -1
  911. package/docs/uk/how_works_intlayer.md +2 -2
  912. package/docs/uk/interest_of_intlayer.md +7 -7
  913. package/docs/uk/intlayer_CMS.md +1 -1
  914. package/docs/uk/intlayer_with_adonisjs.md +1 -1
  915. package/docs/uk/intlayer_with_analog.md +1 -1
  916. package/docs/uk/intlayer_with_angular_19.md +1 -1
  917. package/docs/uk/intlayer_with_angular_21.md +1 -1
  918. package/docs/uk/intlayer_with_astro.md +1 -1
  919. package/docs/uk/intlayer_with_astro_lit.md +1 -1
  920. package/docs/uk/intlayer_with_astro_preact.md +1 -1
  921. package/docs/uk/intlayer_with_astro_react.md +1 -1
  922. package/docs/uk/intlayer_with_astro_solid.md +1 -1
  923. package/docs/uk/intlayer_with_astro_svelte.md +1 -1
  924. package/docs/uk/intlayer_with_astro_vanilla.md +1 -1
  925. package/docs/uk/intlayer_with_astro_vue.md +1 -1
  926. package/docs/uk/intlayer_with_create_react_app.md +1 -1
  927. package/docs/uk/intlayer_with_express.md +1 -1
  928. package/docs/uk/intlayer_with_hono.md +1 -1
  929. package/docs/uk/intlayer_with_nestjs.md +1 -1
  930. package/docs/uk/intlayer_with_nextjs_14.md +1 -1
  931. package/docs/uk/intlayer_with_nextjs_15.md +1 -1
  932. package/docs/uk/intlayer_with_nextjs_16.md +1 -1
  933. package/docs/uk/intlayer_with_nextjs_page_router.md +1 -1
  934. package/docs/uk/intlayer_with_react_router_v7.md +1 -1
  935. package/docs/uk/intlayer_with_vite+preact.md +1 -1
  936. package/docs/uk/intlayer_with_vite+react.md +1 -1
  937. package/docs/uk/intlayer_with_vite+vue.md +1 -1
  938. package/docs/uk/introduction.md +0 -1
  939. package/docs/uk/readme.md +8 -8
  940. package/docs/ur/bundle_optimization.md +5 -1
  941. package/docs/ur/interest_of_intlayer.md +7 -7
  942. package/docs/ur/intlayer_with_angular_21.md +1 -1
  943. package/docs/ur/intlayer_with_hono.md +1 -1
  944. package/docs/ur/introduction.md +0 -1
  945. package/docs/vi/benchmark/nextjs.md +1 -1
  946. package/docs/vi/benchmark/solid.md +1 -1
  947. package/docs/vi/benchmark/svelte.md +1 -1
  948. package/docs/vi/benchmark/tanstack.md +1 -1
  949. package/docs/vi/benchmark/vue.md +1 -1
  950. package/docs/vi/bundle_optimization.md +5 -1
  951. package/docs/vi/how_works_intlayer.md +2 -2
  952. package/docs/vi/interest_of_intlayer.md +7 -7
  953. package/docs/vi/intlayer_CMS.md +1 -1
  954. package/docs/vi/intlayer_with_adonisjs.md +1 -1
  955. package/docs/vi/intlayer_with_analog.md +1 -1
  956. package/docs/vi/intlayer_with_angular_19.md +1 -1
  957. package/docs/vi/intlayer_with_angular_21.md +1 -1
  958. package/docs/vi/intlayer_with_astro.md +1 -1
  959. package/docs/vi/intlayer_with_astro_lit.md +1 -1
  960. package/docs/vi/intlayer_with_astro_preact.md +1 -1
  961. package/docs/vi/intlayer_with_astro_react.md +1 -1
  962. package/docs/vi/intlayer_with_astro_solid.md +1 -1
  963. package/docs/vi/intlayer_with_astro_svelte.md +1 -1
  964. package/docs/vi/intlayer_with_astro_vanilla.md +1 -1
  965. package/docs/vi/intlayer_with_astro_vue.md +1 -1
  966. package/docs/vi/intlayer_with_create_react_app.md +1 -1
  967. package/docs/vi/intlayer_with_express.md +1 -1
  968. package/docs/vi/intlayer_with_hono.md +1 -1
  969. package/docs/vi/intlayer_with_nestjs.md +1 -1
  970. package/docs/vi/intlayer_with_nextjs_14.md +1 -1
  971. package/docs/vi/intlayer_with_nextjs_15.md +1 -1
  972. package/docs/vi/intlayer_with_nextjs_16.md +1 -1
  973. package/docs/vi/intlayer_with_nextjs_page_router.md +1 -1
  974. package/docs/vi/intlayer_with_vite+preact.md +1 -1
  975. package/docs/vi/intlayer_with_vite+react.md +1 -1
  976. package/docs/vi/intlayer_with_vite+vue.md +1 -1
  977. package/docs/vi/introduction.md +0 -1
  978. package/docs/vi/readme.md +8 -8
  979. package/docs/zh/benchmark/nextjs.md +1 -1
  980. package/docs/zh/benchmark/solid.md +1 -1
  981. package/docs/zh/benchmark/svelte.md +1 -1
  982. package/docs/zh/benchmark/tanstack.md +1 -1
  983. package/docs/zh/benchmark/vue.md +1 -1
  984. package/docs/zh/bundle_optimization.md +5 -1
  985. package/docs/zh/how_works_intlayer.md +2 -2
  986. package/docs/zh/interest_of_intlayer.md +7 -7
  987. package/docs/zh/intlayer_CMS.md +1 -1
  988. package/docs/zh/intlayer_with_adonisjs.md +1 -1
  989. package/docs/zh/intlayer_with_analog.md +1 -1
  990. package/docs/zh/intlayer_with_angular_19.md +1 -1
  991. package/docs/zh/intlayer_with_angular_21.md +1 -1
  992. package/docs/zh/intlayer_with_astro.md +1 -1
  993. package/docs/zh/intlayer_with_astro_lit.md +1 -1
  994. package/docs/zh/intlayer_with_astro_preact.md +1 -1
  995. package/docs/zh/intlayer_with_astro_react.md +1 -1
  996. package/docs/zh/intlayer_with_astro_solid.md +1 -1
  997. package/docs/zh/intlayer_with_astro_svelte.md +1 -1
  998. package/docs/zh/intlayer_with_astro_vanilla.md +1 -1
  999. package/docs/zh/intlayer_with_astro_vue.md +1 -1
  1000. package/docs/zh/intlayer_with_create_react_app.md +1 -1
  1001. package/docs/zh/intlayer_with_express.md +1 -1
  1002. package/docs/zh/intlayer_with_hono.md +1 -1
  1003. package/docs/zh/intlayer_with_nestjs.md +1 -1
  1004. package/docs/zh/intlayer_with_nextjs_14.md +1 -1
  1005. package/docs/zh/intlayer_with_nextjs_15.md +1 -1
  1006. package/docs/zh/intlayer_with_nextjs_16.md +1 -1
  1007. package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
  1008. package/docs/zh/intlayer_with_react_router_v7.md +2 -2
  1009. package/docs/zh/intlayer_with_vite+preact.md +1 -1
  1010. package/docs/zh/intlayer_with_vite+react.md +1 -1
  1011. package/docs/zh/intlayer_with_vite+vue.md +1 -1
  1012. package/docs/zh/introduction.md +0 -1
  1013. package/docs/zh/readme.md +8 -8
  1014. package/docs/zh-TW/bundle_optimization.md +5 -1
  1015. package/docs/zh-TW/interest_of_intlayer.md +7 -7
  1016. package/docs/zh-TW/intlayer_with_angular_21.md +1 -1
  1017. package/docs/zh-TW/introduction.md +0 -1
  1018. package/frequent_questions/ar/claude_code_token_consumption.md +152 -0
  1019. package/frequent_questions/de/claude_code_token_consumption.md +152 -0
  1020. package/frequent_questions/en/claude_code_token_consumption.md +152 -0
  1021. package/frequent_questions/en-GB/claude_code_token_consumption.md +152 -0
  1022. package/frequent_questions/es/claude_code_token_consumption.md +152 -0
  1023. package/frequent_questions/fr/claude_code_token_consumption.md +152 -0
  1024. package/frequent_questions/hi/claude_code_token_consumption.md +152 -0
  1025. package/frequent_questions/id/claude_code_token_consumption.md +152 -0
  1026. package/frequent_questions/it/claude_code_token_consumption.md +152 -0
  1027. package/frequent_questions/ja/claude_code_token_consumption.md +152 -0
  1028. package/frequent_questions/ko/claude_code_token_consumption.md +152 -0
  1029. package/frequent_questions/pl/claude_code_token_consumption.md +152 -0
  1030. package/frequent_questions/pt/claude_code_token_consumption.md +152 -0
  1031. package/frequent_questions/ru/claude_code_token_consumption.md +152 -0
  1032. package/frequent_questions/tr/claude_code_token_consumption.md +152 -0
  1033. package/frequent_questions/uk/claude_code_token_consumption.md +152 -0
  1034. package/frequent_questions/vi/claude_code_token_consumption.md +152 -0
  1035. package/frequent_questions/zh/claude_code_token_consumption.md +152 -0
  1036. package/package.json +8 -7
  1037. package/src/generated/blog.entry.ts +240 -0
  1038. package/src/generated/frequentQuestions.entry.ts +20 -0
  1039. package/blog/en/___per-component_vs_centralized_i18n.md +0 -255
  1040. package/blog/pl/___per-component_vs_centralized_i18n.md +0 -100
  1041. package/docs/en/benchmark/___NOTE.md +0 -101
  1042. package/docs/en/benchmark/___nextjs.md +0 -197
  1043. package/docs/en/benchmark/___solid.md +0 -12
  1044. package/docs/en/benchmark/___svelte.md +0 -16
  1045. package/docs/en/benchmark/___tanstack.md +0 -190
  1046. package/docs/en/benchmark/___vue.md +0 -7
  1047. package/docs/pl/benchmark/___NOTE.md +0 -101
  1048. package/docs/pl/benchmark/___nextjs.md +0 -198
  1049. package/docs/pl/benchmark/___solid.md +0 -36
  1050. package/docs/pl/benchmark/___svelte.md +0 -36
  1051. package/docs/pl/benchmark/___tanstack.md +0 -36
  1052. package/docs/pl/benchmark/___vue.md +0 -36
@@ -0,0 +1,381 @@
1
+ ---
2
+ createdAt: 2026-09-13
3
+ updatedAt: 2026-09-13
4
+ title: "Lingui vs Intlayer: 2026๋…„ ๋ฒค์น˜๋งˆํฌ ๋ฐ ์ข…ํ•ฉ ๋น„๊ต"
5
+ description: "Next.js ๋ฐ TanStack Start ํ™˜๊ฒฝ์—์„œ ์ธก์ •๋œ ๋‘ ์ปดํŒŒ์ผ๋Ÿฌ ๊ธฐ๋ฐ˜ i18n ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ๋ฒˆ๋“ค ํฌ๊ธฐ, ์ฝ˜ํ…์ธ  ๋ˆ„์ˆ˜, ์ปดํฌ๋„ŒํŠธ ํฌ๊ธฐ, ํ•˜์ด๋“œ๋ ˆ์ด์…˜, ์–ธ์–ด ์ „ํ™˜ ๋ฐ˜์‘์„ฑ ๋ฐ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋น„๊ต."
6
+ keywords:
7
+ - Lingui
8
+ - Intlayer
9
+ - ๊ตญ์ œํ™”
10
+ - i18n
11
+ - ๋ฒค์น˜๋งˆํฌ
12
+ - ๋ฒˆ๋“ค ํฌ๊ธฐ
13
+ - ์ปดํŒŒ์ผ๋Ÿฌ
14
+ - ๋ธ”๋กœ๊ทธ
15
+ - Next.js
16
+ - TanStack Start
17
+ - JavaScript
18
+ - React
19
+ slugs:
20
+ - blog
21
+ - lingui-vs-intlayer
22
+ author: aymericzip
23
+ ---
24
+
25
+ # Lingui VS Intlayer | React & Next.js ๊ตญ์ œํ™” (i18n) ๋ฒค์น˜๋งˆํฌ ๋น„๊ต
26
+
27
+ Lingui์™€ Intlayer๋Š” ์ด๋ฒˆ ๋ฒค์น˜๋งˆํฌ์—์„œ ๋‹จ์ˆœํ•œ ๋Ÿฐํƒ€์ž„ ๋Œ€์‹  **์ปดํŒŒ์ผ๋Ÿฌ**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Lingui๋Š” ๋นŒ๋“œ ์‹œ ๋งคํฌ๋กœ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์–ธ์–ด๋ณ„ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. Intlayer๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์–ธ์–ด๋ณ„๋กœ Tree-shaking์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ก ์ƒ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์„ฑ๋Šฅ์€ ๋งค์šฐ ์œ ์‚ฌํ•ด์•ผ ํ•˜์ง€๋งŒ, ์‹ค์ œ ์ธก์ • ๋ฐ์ดํ„ฐ๋Š” ๋ช…ํ™•ํ•œ ์ฐจ์ด์ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
28
+
29
+ ๋ณธ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ค์ œ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ…Œ์ŠคํŠธ ๋„๊ตฌ์ธ [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom)์—์„œ ์ถ”์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
30
+
31
+ <TOC/>
32
+
33
+ > **์š”์•ฝ (tl;dr)**: ์ˆœ์ˆ˜ ํŽ˜์ด์ง€๋‹น JavaScript ํฌ๊ธฐ ์ธก๋ฉด์—์„œ Lingui๋Š” Intlayer์— ๊ฐ€์žฅ ๊ทผ์ ‘ํ•ฉ๋‹ˆ๋‹ค. ์ง€์—ฐ ๋กœ๋”ฉ์„ ์„ค์ •ํ•œ TanStack Start์—์„œ๋Š” **115~120 KB** ๋Œ€ **118.6 KB**, Next.js์—์„œ๋Š” **148.6 KB** ๋Œ€ **141.3 KB**๋ฅผ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์ง€ํ‘œ๋“ค์—์„œ ๊ฒฉ์ฐจ๊ฐ€ ๋ฒŒ์–ด์ง‘๋‹ˆ๋‹ค. ๋‹จ๋… ์ปดํŒŒ์ผ๋œ ์ปดํฌ๋„ŒํŠธ ํฌ๊ธฐ๋Š” Intlayer์˜ **6~8 KB**์— ๋น„ํ•ด Lingui๋Š” **58~153 KB**์— ๋‹ฌํ•˜๊ณ , ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์‹œ๊ฐ„์€ Intlayer์˜ **11~14 ms** ๋Œ€๋น„ **28~34 ms**๊ฐ€ ์†Œ์š”๋˜๋ฉฐ, ์ตœ์ ํ™”๋œ ์„ค์ •์—์„œ๋„ ๊ธฐ๋ณธ ์˜์–ด ํด๋ฐฑ ๋ฌธ์ž์—ด์ด ํ”„๋ž‘์Šค์–ด ํŽ˜์ด์ง€๋กœ **3~15%** ๋ˆ„์ˆ˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ผ์šฐํŠธ๋ณ„ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”์ถœ, ์ปดํŒŒ์ผ, ๋ถ„ํ• ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Intlayer๋Š” ์„ค์ • ์—†์ด๋„ ์ด๋ฅผ ๊ธฐ๋ณธ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
34
+
35
+ ## ํ•ต์‹ฌ ์š”์•ฝ
36
+
37
+ - **Lingui** - ๋งคํฌ๋กœ ๊ธฐ๋ฐ˜(`` t`...` ``, `<Trans>`, `msg`), ICU MessageFormat, `.po` / JSON ์นดํƒˆ๋กœ๊ทธ, `lingui extract` + `lingui compile` ์›Œํฌํ”Œ๋กœ์šฐ. ๋ฉ”์‹œ์ง€ ID๋ฅผ ์งง์€ ํ•ด์‹œ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  ์–ธ์–ด๋ณ„ ๋™์  ์นดํƒˆ๋กœ๊ทธ ๋กœ๋”ฉ์„ ์ง€์›. ์˜ค๋žœ ๊ธฐ๊ฐ„ ๊ฒ€์ฆ๋˜์—ˆ์œผ๋ฉฐ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋…๋ฆฝ์ ์ด๊ณ , `.po` ๊ธฐ๋ฐ˜์˜ ๋ฒˆ์—ญ ํˆด์ฒด์ธ์ด ํƒ„ํƒ„ํ•จ.
38
+ - **Intlayer** - ์ปดํฌ๋„ŒํŠธ ์ค‘์‹ฌ ์ฝ˜ํ…์ธ  ๋ชจ๋ธ. `.content.ts` ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ๋ฐ”๋กœ ์˜†์— ์œ„์น˜ํ•˜๋ฉฐ, ๋นŒ๋“œ ํƒ€์ž„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์–ธ์–ด ๋‹จ์œ„๋กœ Tree-shaking๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ์„ ์ž๋™ ์ฒ˜๋ฆฌ. ์ฝ˜ํ…์ธ ๋กœ๋ถ€ํ„ฐ ์—„๊ฒฉํ•œ TypeScript ํƒ€์ž…์„ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ๋ฒˆ์—ญ์€ ๋นŒ๋“œ ์—๋Ÿฌ๋กœ ๊ฐ์ง€. ๋ฏธ๋“ค์›จ์–ด, SEO ํ—ฌํผ, ๋น„์ฃผ์–ผ ์—๋””ํ„ฐ / CMS ๋ฐ AI ๋ฒˆ์—ญ ๊ธฐ๋Šฅ ๊ธฐ๋ณธ ํƒ‘์žฌ.
39
+
40
+ | ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ | GitHub Stars | ์ด ์ปค๋ฐ‹ ์ˆ˜ | ์ตœ๊ทผ ์ปค๋ฐ‹ | ์ตœ์ดˆ ๋ฆด๋ฆฌ์Šค | NPM ๋ฒ„์ „ | NPM ๋‹ค์šด๋กœ๋“œ ์ˆ˜ |
41
+ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
42
+ | `aymericzip/intlayer` | [![GitHub Repo stars](https://img.shields.io/github/stars/aymericzip/intlayer?style=for-the-badge&label=%E2%AD%90%20stars)](https://github.com/aymericzip/intlayer/stargazers) | [![GitHub commit activity](https://img.shields.io/github/commit-activity/t/aymericzip/intlayer?style=for-the-badge&label=commits)](https://github.com/aymericzip/intlayer/commits) | [![Last Commit](https://img.shields.io/github/last-commit/aymericzip/intlayer?style=for-the-badge)](https://github.com/aymericzip/intlayer/commits) | 2024๋…„ 4์›” | [![npm](https://img.shields.io/npm/v/intlayer?style=for-the-badge)](https://www.npmjs.com/package/intlayer) | [![npm downloads](https://img.shields.io/npm/dm/intlayer?style=for-the-badge)](https://www.npmjs.com/package/intlayer) |
43
+ | `lingui/js-lingui` | [![GitHub Repo stars](https://img.shields.io/github/stars/lingui/js-lingui?style=for-the-badge&label=%E2%AD%90%20stars)](https://github.com/lingui/js-lingui/stargazers) | [![GitHub commit activity](https://img.shields.io/github/commit-activity/t/lingui/js-lingui?style=for-the-badge&label=commits)](https://github.com/lingui/js-lingui/commits) | [![Last Commit](https://img.shields.io/github/last-commit/lingui/js-lingui?style=for-the-badge)](https://github.com/lingui/js-lingui/commits) | 2016๋…„ 12์›” | [![npm](https://img.shields.io/npm/v/@lingui/core?style=for-the-badge)](https://www.npmjs.com/package/@lingui/core) | [![npm downloads](https://img.shields.io/npm/dm/@lingui/core?style=for-the-badge)](https://www.npmjs.com/package/@lingui/core) |
44
+
45
+ > ๋ฐฐ์ง€๋Š” ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์Šค๋ƒ…์ƒท ์ˆ˜์น˜๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
46
+
47
+ ## ์ฃผ์š” ๊ธฐ๋Šฅ ์ผ๋Œ€์ผ ๋น„๊ต
48
+
49
+ | ๊ธฐ๋Šฅ | Intlayer (`react-intlayer` / `next-intlayer`) | Lingui (`@lingui/core` / `@lingui/react`) |
50
+ | ------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
51
+ | **์ปดํฌ๋„ŒํŠธ ์ธ๊ทผ ๋ฒˆ์—ญ ๊ด€๋ฆฌ** | โœ… ์ง€์›, ๊ฐ ์ปดํฌ๋„ŒํŠธ์™€ ๋™์ผํ•œ ์œ„์น˜์— `.content.ts` ๋ฐฐ์น˜ | โš ๏ธ JSX ๋‚ด ๋งคํฌ๋กœ๋กœ ์†Œ์Šค ๋ฌธ์ž์—ด ์ž‘์„ฑ, ๋ฒˆ์—ญ๋ฌธ์€ ์ค‘์•™ ์ง‘์ค‘์‹ `.po` ์นดํƒˆ๋กœ๊ทธ์—์„œ ๊ด€๋ฆฌ |
52
+ | **TypeScript ํ†ตํ•ฉ** | โœ… ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์—„๊ฒฉํ•œ ํƒ€์ž… ์ž๋™ ์ƒ์„ฑ | โš ๏ธ ๋งคํฌ๋กœ๋Š” ํƒ€์ž…์ด ์ง€์ •๋˜์ง€๋งŒ ๋ฉ”์‹œ์ง€ ID๋Š” ๋ฏธ์ง€์ •, ์นดํƒˆ๋กœ๊ทธ ๋ˆ„๋ฝ ํ‚ค๋Š” ๊ฐ์ง€ ๋ถˆ๊ฐ€ |
53
+ | **๋ˆ„๋ฝ๋œ ๋ฒˆ์—ญ ๊ฐ์ง€** | โœ… TypeScript ์˜ค๋ฅ˜ + ๋นŒ๋“œ ํƒ€์ž„ ์˜ค๋ฅ˜/๊ฒฝ๊ณ  | โš ๏ธ `lingui extract`๊ฐ€ ํ†ต๊ณ„๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ, ๋Ÿฐํƒ€์ž„์—๋Š” ์˜์–ด ์›๋ฌธ์œผ๋กœ ์ž๋™ ๋Œ€์ฒด๋จ |
54
+ | **๋ฆฌ์น˜ ์ฝ˜ํ…์ธ  (JSX / Markdown / ์ปดํฌ๋„ŒํŠธ)** | โœ… ๊ธฐ๋ณธ ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์› | โœ… ์ปดํฌ๋„ŒํŠธ ์ค‘์ฒฉ์ด ๊ฐ€๋Šฅํ•œ `<Trans>` ์ œ๊ณต |
55
+ | **ICU ์ง€์›** | โš ๏ธ ๊ฐœ๋ฐœ ์ง„ํ–‰ ์ค‘ | โœ… ์ง€์› (`plural`, `select`, `selectOrdinal` ๋งคํฌ๋กœ) |
56
+ | **ํฌ๋งทํŒ… (๋‚ ์งœ, ์ˆซ์ž, ํ†ตํ™”)** | โœ… `useNumber`, `useDate`, ... (๋‚ด๋ถ€์ ์œผ๋กœ `Intl` ํ™œ์šฉ) | โœ… `i18n.date()`, `i18n.number()` |
57
+ | **์ง€์—ญํ™”๋œ ๋ผ์šฐํŒ… ๋ฐ ๋ฏธ๋“ค์›จ์–ด** | โœ… ๋‚ด์žฅ ํ”„๋ก์‹œ/๋ฏธ๋“ค์›จ์–ด, `getMultilingualUrls` ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ œ๊ณต | โŒ ์ฝ”์–ด ๋ฏธ์ง€์› |
58
+ | **SEO ํ—ฌํผ (hreflang, sitemap, robots)** | โœ… ๋‚ด์žฅ ํ—ฌํผ ๊ธฐ๋ณธ ํƒ‘์žฌ | โŒ ์ˆ˜๋™ ๊ตฌํ˜„ ํ•„์š” |
59
+ | **๋™๊ธฐ์‹ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ (RSC)** | โœ… `next-intlayer/server`์˜ `useIntlayer`๊ฐ€ ๋ชจ๋“  ํ•˜์œ„ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ž‘ | โš ๏ธ ์š”์ฒญ๋งˆ๋‹ค `I18n` ์ธ์Šคํ„ด์Šค ํ•„์š” (Props ์ „๋‹ฌ ๋˜๋Š” `setI18n` ์‚ฌ์šฉ) |
60
+ | **Tree-shaking (์‚ฌ์šฉ๋œ ์ฝ˜ํ…์ธ ๋งŒ ๋ฐฐํฌ)** | โœ… ์ปดํฌ๋„ŒํŠธ๋ณ„, ์–ธ์–ด๋ณ„๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ „์ž๋™ ์ฒ˜๋ฆฌ | โš ๏ธ `lingui compile`์„ ํ†ตํ•œ ์–ธ์–ด๋ณ„ ๋ถ„๋ฆฌ ์ง€์›, ๋ผ์šฐํŠธ๋ณ„ ๋ถ„๋ฆฌ๋Š” ์นดํƒˆ๋กœ๊ทธ ์ˆ˜๋™ ๋ถ„ํ•  ํ•„์š” |
61
+ | **์ง€์—ฐ ๋กœ๋”ฉ (Lazy loading)** | โœ… `importMode: 'dynamic'` (์„ค์ • ํ•œ ์ค„๋กœ ์™„๋ฃŒ) | โš ๏ธ ์ปดํŒŒ์ผ๋œ ์นดํƒˆ๋กœ๊ทธ `import()` ๋ฐ `i18n.load()` / `i18n.activate()` ์ˆ˜๋™ ํ˜ธ์ถœ ํ•„์š” |
62
+ | **๋ฏธ์‚ฌ์šฉ ์ฝ˜ํ…์ธ  ์ •๋ฆฌ** | โœ… ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋นŒ๋“œ ์‹œ ์ œ๊ฑฐ | โœ… `lingui extract --clean`์œผ๋กœ ์˜ค๋ž˜๋œ ๋ฉ”์‹œ์ง€ ์ •๋ฆฌ ๊ฐ€๋Šฅ |
63
+ | **๋ˆ„๋ฝ ๋ฒˆ์—ญ ํ…Œ์ŠคํŠธ (CLI / CI)** | โœ… `npx intlayer content test` | โš ๏ธ `lingui extract` ํ†ต๊ณ„ ํ™•์ธ (๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํŒจ ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ) |
64
+ | **๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ** | โœ… ํ”Œ๋Ÿฌ๊ทธ์ธ 1๊ฐœ (`@intlayer/swc` / `@intlayer/babel` / `vite-intlayer`) | โš ๏ธ ๋งคํฌ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ(Babel ๋˜๋Š” SWC) + `extract` + `compile` ๊ฐœ๋ณ„ ๋‹จ๊ณ„ ํ•„์š” |
65
+ | **AI ๋ฒˆ์—ญ ์ž๋™ํ™”** | โœ… ๊ธฐ๋ณธ ๋‚ด์žฅ, ๋ณด์œ ํ•œ API ํ‚ค ์‚ฌ์šฉ (OpenAI, Anthropic, Mistral ๋“ฑ) | โŒ ๋ฏธ์ง€์› |
66
+ | **๋น„์ฃผ์–ผ ์—๋””ํ„ฐ / CMS** | โœ… ๋ฌด๋ฃŒ Visual Editor + ์„ ํƒํ˜• CMS | โŒ ๋ฏธ์ง€์› (`.po` ํŒŒ์ผ๋กœ ์™ธ๋ถ€ TMS์™€ ์—ฐ๋™) |
67
+ | **MCP ์„œ๋ฒ„ ๋ฐ ์—์ด์ „ํŠธ ์Šคํ‚ฌ** | โœ… ์ง€์› | โŒ ๋ฏธ์ง€์› |
68
+ | **์ƒํƒœ๊ณ„ ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ** | โš ๏ธ ์‹ ์ƒ์ด๋‚˜ ๊ฐ€ํŒŒ๋ฅด๊ฒŒ ์„ฑ์žฅ ์ค‘ | โœ… ๊ฒ€์ฆ๋จ, ํ”„๋ ˆ์ž„์›Œํฌ ๋…๋ฆฝ์  |
69
+
70
+ ## ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ
71
+
72
+ ### ๋ฌด์—‡์„ ์ธก์ •ํ–ˆ๋Š”๊ฐ€
73
+
74
+ [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) ์ œํ’ˆ๊ตฐ์€ ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ **์™„์ „ํžˆ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜**์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค: **10๊ฐœ ํŽ˜์ด์ง€**(home, about, blog, careers, contact, FAQ, pricing, products, settings, team), **10๊ฐœ ์–ธ์–ด**(`en`, `fr`, `es`, `de`, `it`, `pt`, `zh`, `ja`, `ko`, `ru`), ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ ๋ฐ ๋™์ผํ•œ ์ฝ˜ํ…์ธ . ํŽ˜์ด์ง€ ์ธก์ •์€ `en`๊ณผ `fr`์„ ๋Œ€์ƒ์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ตœ๋Œ€ 4๊ฐ€์ง€ **๋กœ๋”ฉ ์ „๋žต**์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
75
+
76
+ | ์ „๋žต | ์„ค๋ช… | ์ผ๋ฐ˜์ ์ธ ์ ์šฉ ์‚ฌ๋ก€ |
77
+ | ------------------ | ---------------------------------------------------------------------------- | ------------------------------- |
78
+ | **static** | ๋ชจ๋“  ์–ธ์–ด์˜ ์ปดํŒŒ์ผ๋œ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ดˆ๊ธฐ์— ํ•œ ๋ฒˆ์— ์ž„ํฌํŠธํ•˜์—ฌ ๋กœ๋“œ | ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ž…, AI ์ƒ์„ฑ ์ฝ”๋“œ |
79
+ | **dynamic** | ํ™œ์„ฑ ์–ธ์–ด์˜ ์นดํƒˆ๋กœ๊ทธ๋งŒ `import()`ํ•˜์ง€๋งŒ, ์‚ฌ์ดํŠธ ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ํฌํ•จ๋จ | ๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ฐ˜ ํ”„๋กœ์ ํŠธ |
80
+ | **scoped-static** | ๋ผ์šฐํŠธ๋ณ„๋กœ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๋ถ„ํ• ํ•˜๋˜, ์ดˆ๊ธฐ ๋ฒˆ๋“ค์— ๋ชจ๋‘ ํฌํ•จ์‹œํ‚ด | ๋“œ๋ฌธ ๊ฒฝ์šฐ |
81
+ | **scoped-dynamic** | ๋ผ์šฐํŠธ๋ณ„ ์นดํƒˆ๋กœ๊ทธ ๋ถ„ํ•  + ์ง€์—ฐ `import()`. ํ˜„์žฌ ํŽ˜์ด์ง€์™€ ํ˜„์žฌ ์–ธ์–ด๋งŒ ๋‹ค์šด๋กœ๋“œ | ์—„๊ฒฉํ•œ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ œํ•œ์ด ์žˆ๋Š” ์•ฑ |
82
+
83
+ Intlayer๋Š” ๋ณ„๋„์˜ "scoped" ๋ฒ„์ „์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ **์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„**๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ž๋™ ๋ถ„ํ• ํ•˜๋ฏ€๋กœ `static`๊ณผ `dynamic` ํ–‰ ์ž์ฒด๊ฐ€ ์ด๋ฏธ ์ตœ์ ์œผ๋กœ ๋ถ„ํ• ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
84
+
85
+ ๊ฐ ๋นŒ๋“œ๋ณ„๋กœ ๋‹ค์Œ ์ง€ํ‘œ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค:
86
+
87
+ - **Lib size**: i18n ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์ž„ํฌํŠธํ•˜๋Š” ๋นˆ ์ปดํฌ๋„ŒํŠธ์˜ gzip ํฌ๊ธฐ (๊ณ ์ • ๋Ÿฐํƒ€์ž„ ๋น„์šฉ).
88
+ - **Page JS**: ์ „์ฒด ํŽ˜์ด์ง€ ๋ฐ ์–ธ์–ด ํ‰๊ท ์œผ๋กœ ํŽ˜์ด์ง€๋‹น ๋‹ค์šด๋กœ๋“œ๋œ gzip JavaScript ํฌ๊ธฐ.
89
+ - **Locale leak %**: ๋‹ค์šด๋กœ๋“œ๋œ JS ์ค‘ ์‚ฌ์šฉ์ž๊ฐ€ ์กฐํšŒํ•˜์ง€ **์•Š๋Š”** ์–ธ์–ด์— ์†ํ•œ ๋ฒˆ์—ญ ๋ฌธ์ž์—ด์˜ ๋น„์œจ.
90
+ - **Page leak %**: ๋‹ค์šด๋กœ๋“œ๋œ JS ์ค‘ ์‚ฌ์šฉ์ž๊ฐ€ ๋จธ๋ฌผ๊ณ  ์žˆ์ง€ **์•Š๋Š”** ํŽ˜์ด์ง€์— ์†ํ•œ ๋ฒˆ์—ญ ๋ฌธ์ž์—ด์˜ ๋น„์œจ.
91
+ - **Component avg**: ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ปดํŒŒ์ผํ–ˆ์„ ๋•Œ์˜ ํ‰๊ท  gzip ํฌ๊ธฐ.
92
+ - **E2E reactivity**: ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ์„ ํƒํ•œ ์‹œ์ ๋ถ€ํ„ฐ DOM์—์„œ `html[lang]`์ด ๊ฐฑ์‹ ๋  ๋•Œ๊นŒ์ง€์˜ ์‹ค์ธก ์†Œ์š” ์‹œ๊ฐ„(Playwright, 5ํšŒ ๋ฐ˜๋ณต ํ‰๊ท ).
93
+ - **Hydration**: React ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ๋‹จ๊ณ„ ์†Œ์š” ์‹œ๊ฐ„.
94
+
95
+ > ์•„๋ž˜ ์ˆ˜์น˜๋Š” `@lingui/react` 6.6.0 ๋ฐ `intlayer` 9.5.1์„ ์‚ฌ์šฉํ•œ **2026-09-12** ์ธก์ • ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๋ˆ„์ˆ˜์œจ์€ ์ฝ˜ํ…์ธ  ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์‹ฌํ™”๋˜๋Š” **๊ตฌ์กฐ์  ํŒจํ„ด**์„ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค.
96
+
97
+ ### Next.js ์ธก์ • ๊ฒฐ๊ณผ
98
+
99
+ | ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ | ์ „๋žต | Lib size (gz) | Page JS ํ‰๊ท  (gz) | ์–ธ์–ด ๋ˆ„์ˆ˜์œจ | ํŽ˜์ด์ง€ ๋ˆ„์ˆ˜์œจ | ์ปดํฌ๋„ŒํŠธ ํ‰๊ท  (gz) | E2E ๋ฐ˜์‘์„ฑ | ํ•˜์ด๋“œ๋ ˆ์ด์…˜ |
100
+ | -------------------- | -------------- | ------------: | ----------------: | ----------: | ------------: | -----------------: | ----------: | -----------: |
101
+ | **base** (i18n ์—†์Œ) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
102
+ | Lingui | static | 11.9 KB | 207.4 KB | 50.0% | 90.0% | 73.3 KB | 15.3 ms | 15.2 ms |
103
+ | Lingui | dynamic | 11.9 KB | 145.4 KB | 2.8% | 89.9% | 19.9 KB | 15.7 ms | 12.7 ms |
104
+ | Lingui | scoped-static | 11.9 KB | 148.2 KB | 2.7% | 89.1% | 20.4 KB | 15.1 ms | 13.1 ms |
105
+ | Lingui | scoped-dynamic | 11.9 KB | 148.6 KB | 14.8% | 0.0% | 152.6 KB | 16.1 ms | 14.8 ms |
106
+ | **`next-intlayer`** | static | **5.5 KB** | **141.3 KB** | **0.0%** | **0.0%** | **8.5 KB** | 15.5 ms | 16.9 ms |
107
+ | **`next-intlayer`** | dynamic | **5.5 KB** | **141.3 KB** | **0.0%** | **0.0%** | **6.9 KB** | **15.3 ms** | 15.9 ms |
108
+
109
+ **์ง€ํ‘œ ๋ถ„์„**
110
+
111
+ - **๋Ÿฐํƒ€์ž„ ๊ณ ์ • ๋น„์šฉ.** ๋นˆ ์ปดํฌ๋„ŒํŠธ ๊ธฐ์ค€ Lingui๋Š” 11.9 KB gzip, Intlayer๋Š” 5.5 KB๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํŽ˜์ด์ง€ ๊ธฐ์ค€ Lingui์˜ ์ตœ์  ๊ตฌ์„ฑ์€ Intlayer ๋Œ€๋น„ **+7.3 KB**(148.6 KB ๋Œ€ 141.3 KB)์ด๋ฉฐ, Intlayer๋Š” i18n์ด ์—†๋Š” ๊ธฐ๋ณธ ์•ฑ ๋Œ€๋น„ ๋ถˆ๊ณผ **+0.3 KB** ์ฆ๊ฐ€์— ๊ทธ์ณค์Šต๋‹ˆ๋‹ค.
112
+ - **๋‹จ์ˆœ ๊ตฌ์„ฑ์˜ ์น˜๋ช…์  ์˜ค๋ฒ„ํ—ค๋“œ.** ๋ชจ๋“  ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์‚ฌ์ „์— ๋กœ๋“œํ•˜๋ฉด **ํŽ˜์ด์ง€๋‹น 207.4 KB**๋กœ ๊ธฐ๋ณธ ์•ฑ ๋Œ€๋น„ +66 KB๊ฐ€ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์˜ ์ ˆ๋ฐ˜์€ ํ•„์š” ์—†๋Š” ์–ธ์–ด์ด๊ณ , 90%๋Š” ๋‹ค๋ฅธ ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.
113
+ - **๋™์  ๋กœ๋”ฉ์€ ์–ธ์–ด๋งŒ ํ•ด๊ฒฐํ•  ๋ฟ ํŽ˜์ด์ง€๋Š” ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•จ.** ์–ธ์–ด๋ณ„ ๋‹จ์ผ ์นดํƒˆ๋กœ๊ทธ ๋ฐฉ์‹์—์„œ๋Š” ํŽ˜์ด์ง€ ๋ˆ„์ˆ˜์œจ์ด ์•ฝ 90%๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ”„๋ž‘์Šค์–ด ์ „์ฒด ์นดํƒˆ๋กœ๊ทธ๊ฐ€ ๋ชจ๋“  ๊ฐœ๋ณ„ ํŽ˜์ด์ง€์— ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Lingui์—์„œ ํŽ˜์ด์ง€ ๋ˆ„์ˆ˜๋ฅผ 0%๋กœ ๋งŒ๋“ค๋ ค๋ฉด `scoped-dynamic`(๋ผ์šฐํŠธ๋ณ„๋กœ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ˆ˜๋™ ์ถ”์ถœ ๋ฐ ์ปดํŒŒ์ผํ•˜์—ฌ ๊ฐ ํŽ˜์ด์ง€์— ์ง€์ • ๋กœ๋“œ)์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
114
+ - **์˜์–ด ์›๋ฌธ ํด๋ฐฑ์˜ ๋ฒˆ๋“ค ์œ ์ž….** ์ตœ์ ํ™”๋œ ์„ค์ •์—์„œ๋„ **ํ”„๋ž‘์Šค์–ด ํŽ˜์ด์ง€์— 3~15%์˜ ์˜์–ด ๋ฌธ์ž์—ด์ด ํ•ญ์ƒ ํฌํ•จ**๋ฉ๋‹ˆ๋‹ค. Lingui ๋งคํฌ๋กœ๋Š” ๋งŒ์•ฝ์„ ๋Œ€๋น„ํ•ด ์›๋ฌธ ๋ฌธ์ž์—ด์„ ๋ฒˆ๋“ค์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Intlayer๋Š” ๋นŒ๋“œ ์‹œ์ ์— ํด๋ฐฑ์„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ํ™œ์„ฑ ์–ธ์–ด๋งŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
115
+ - **`scoped-dynamic`์—์„œ ์ปดํฌ๋„ŒํŠธ ํฌ๊ธฐ ๊ธ‰์ฆ.** ๊ฐœ๋ณ„ ์ปดํŒŒ์ผ๋œ ์ปดํฌ๋„ŒํŠธ๋Š” ํ‰๊ท  **152.6 KB**์— ๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ž„ํฌํŠธ ์ฒด์ธ์„ ํ†ตํ•ด ๋ผ์šฐํŠธ ์นดํƒˆ๋กœ๊ทธ ์ „์ฒด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋™์ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ `useIntlayer()`๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ํ‰๊ท  **6.9 KB**์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.
116
+
117
+ ### TanStack Start ์ธก์ • ๊ฒฐ๊ณผ
118
+
119
+ | ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ | ์ „๋žต | Lib size (gz) | Page JS ํ‰๊ท  (gz) | ์–ธ์–ด ๋ˆ„์ˆ˜์œจ | ํŽ˜์ด์ง€ ๋ˆ„์ˆ˜์œจ | ์ปดํฌ๋„ŒํŠธ ํ‰๊ท  (gz) | E2E ๋ฐ˜์‘์„ฑ | ํ•˜์ด๋“œ๋ ˆ์ด์…˜ |
120
+ | --------------------------- | -------------- | ------------: | ----------------: | ----------: | ------------: | -----------------: | ---------: | -----------: |
121
+ | **base** (i18n ์—†์Œ) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms | 21.6 ms |
122
+ | Lingui | static | 11.2 KB | 152.2 KB | 50.0% | 90.0% | 58.0 KB | 3.9 ms | 19.9 ms |
123
+ | Lingui | dynamic | 11.2 KB | 115.2 KB | 9.3% | 0.0% | 85.5 KB | 5.9 ms | 28.0 ms |
124
+ | Lingui | scoped-static | 11.2 KB | 120.8 KB | 4.0% | 0.0% | 147.9 KB | 7.1 ms | 33.9 ms |
125
+ | Lingui | scoped-dynamic | 11.2 KB | 120.2 KB | 8.6% | 0.0% | 83.7 KB | 42.1 ms | 32.9 ms |
126
+ | **`intlayer`** | static | **5.0 KB** | **125.8 KB** | 50.0% | **0.0%** | **8.1 KB** | **3.2 ms** | **11.5 ms** |
127
+ | **`intlayer`** | dynamic | **5.0 KB** | **118.6 KB** | **0.0%** | **0.0%** | **6.3 KB** | 3.6 ms | **14.1 ms** |
128
+ | `@intlayer/lingui` (์–ด๋Œ‘ํ„ฐ) | dynamic | 10.3 KB | 137.0 KB | 9.9% | 0.0% | 12.8 KB | **2.9 ms** | 19.7 ms |
129
+
130
+ **์ง€ํ‘œ ๋ถ„์„**
131
+
132
+ - **ํŽ˜์ด์ง€๋‹น JS ํฌ๊ธฐ๋Š” Lingui๊ฐ€ ๋ฏธ์„ธํ•˜๊ฒŒ ์šฐ์„ธ.** `dynamic` ๋ชจ๋“œ์˜ Lingui๋Š” **115.2 KB**๋กœ Intlayer์˜ 118.6 KB๋ณด๋‹ค 3.4 KB ๊ฐ€๋ณ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ ๊ธฐ๋ฐ˜์˜ ์ปดํŒŒ์ผ๋œ ์นดํƒˆ๋กœ๊ทธ๊ฐ€ ๊ณ ๋ฐ€๋„๋กœ ์••์ถ•๋˜๋ฉฐ, TanStack Start ๋ผ์šฐํ„ฐ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ `dynamic` ๋‹จ๊ณ„์—์„œ ์ด๋ฏธ ํŽ˜์ด์ง€ ๋ˆ„์ˆ˜์œจ์ด 0%๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
133
+ - **๊ทธ ์™ธ ๋ชจ๋“  ์˜์—ญ์—์„œ๋Š” Intlayer๊ฐ€ ํ™•์‹คํ•œ ์šฐ์œ„.** ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์‹œ๊ฐ„์€ Lingui๊ฐ€ **28~34 ms**์ธ ๋ฐ˜๋ฉด Intlayer๋Š” **11~14 ms**์ž…๋‹ˆ๋‹ค. `i18n.load()` + `i18n.activate()`๊ฐ€ React ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์ „์— ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ํฌ๊ธฐ ์—ญ์‹œ Lingui๊ฐ€ **58~148 KB**์ธ ๋ฐ˜๋ฉด Intlayer๋Š” **6~8 KB**์ด๋ฉฐ, ์–ธ์–ด ๋ˆ„์ˆ˜์œจ๋„ ํด๋ฐฑ ๊ตฌ์กฐ๋กœ ์ธํ•ด Lingui๋Š” 0%๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
134
+ - **์ตœ์ ํ™” ์„ค์ •์—์„œ ์–ธ์–ด ์ „ํ™˜ ์‹œ ์ง€์—ฐ ๋ฐœ์ƒ.** `scoped-dynamic` Lingui๋Š” ๋ผ์šฐํŠธ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐ€์ ธ์™€ ํŒŒ์‹ฑํ•˜๊ณ  ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ ํ™”๋ฉด ๊ฐฑ์‹ ์ด ๋ฉˆ์ถ”๋ฏ€๋กœ `html[lang]` ๋ณ€๊ฒฝ์— **42 ms**๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. Intlayer๋Š” ๋‘ ๋ชจ๋“œ ๋ชจ๋‘์—์„œ **3~4 ms**๋งŒ์— ์ฆ‰๊ฐ ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค.
135
+ - **Intlayer์˜ `static`์€ ์ด๋ฏธ ํŽ˜์ด์ง€ ๋ˆ„์ˆ˜ 0% ๋‹ฌ์„ฑ.** ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋งŒ ๋ฒˆ๋“ค๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„ค์ •์— `importMode: 'dynamic'`์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ธ์–ด ๋ˆ„์ˆ˜๊นŒ์ง€ ์™„๋ฒฝํžˆ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
136
+ - **`@intlayer/lingui`**๋Š” Lingui์˜ ๋งคํฌ๋กœ ๊ตฌ๋ฌธ์„ ์œ ์ง€ํ•˜๋ฉด์„œ Intlayer ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋น™ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ํฌ๊ธฐ(๋งคํฌ๋กœ ๋Ÿฐํƒ€์ž„ ์œ ์ง€๋กœ ์ธํ•ด 137 KB)๋ฅผ ์†Œํญ ์–‘๋ณดํ•˜๋Š” ๋Œ€์‹  ํ›จ์”ฌ ๊ฐ€๋ฒผ์šด ์ปดํฌ๋„ŒํŠธ(12.8 KB)์™€ ๋น ๋ฅธ ํ•˜์ด๋“œ๋ ˆ์ด์…˜์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด ํ›Œ๋ฅญํ•œ ์ „ํ™˜ ๊ฒฝ๋กœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
137
+
138
+ ## ์™œ ์ด๋Ÿฐ ๊ฒฉ์ฐจ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? ๋‘ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—… ๋‹จ์œ„
139
+
140
+ ๋‘ ๋„๊ตฌ ๋ชจ๋‘ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ์ฐจ์ด๋Š” **๋ฌด์—‡์„** ์ปดํŒŒ์ผํ•˜๋Š”๊ฐ€์— ์žˆ์Šต๋‹ˆ๋‹ค.
141
+
142
+ **Lingui๋Š” ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.** ์†Œ์Šค ๋‚ด ๋งคํฌ๋กœ๋Š” ์–ธ์–ด๋ณ„ `.po` ํŒŒ์ผ๋กœ ์ถ”์ถœ๋œ ํ›„ ์–ธ์–ด๋ณ„ JS ๋ชจ๋“ˆ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” **๋กœ์ผ€์ผ(์–ธ์–ด ์ „์ฒด)**์ž…๋‹ˆ๋‹ค. ๋ผ์šฐํŠธ๋‚˜ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์„ธ๋ถ„ํ™”ํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , `lingui.config.ts`์—์„œ ๊ฐ ํŒŒ์ผ์„ ๋ณ„๋„ ์ถ”์ถœํ•˜๋„๋ก ๋งคํ•‘ํ•œ ํ›„, ๊ฐ ๋ผ์šฐํŠธ์—์„œ ์ˆ˜๋™์œผ๋กœ ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. `I18n` ์ธ์Šคํ„ด์Šค๋Š” ์ „์—ญ ์ƒํƒœ์ด๋ฉฐ, ๋ชจ๋“  `useLingui()`๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด ์ „์—ญ ์ธ์Šคํ„ด์Šค์— ์ข…์†์‹œํ‚ต๋‹ˆ๋‹ค.
143
+
144
+ ```bash
145
+ .
146
+ โ”œโ”€โ”€ lingui.config.ts
147
+ โ””โ”€โ”€ src
148
+ โ”œโ”€โ”€ i18n.ts # setupI18n(), load(), activate()
149
+ โ”œโ”€โ”€ locales
150
+ โ”‚ โ”œโ”€โ”€ en
151
+ โ”‚ โ”‚ โ”œโ”€โ”€ messages.po
152
+ โ”‚ โ”‚ โ””โ”€โ”€ messages.mjs # lingui compile ๊ฒฐ๊ณผ๋ฌผ
153
+ โ”‚ โ””โ”€โ”€ fr
154
+ โ”‚ โ”œโ”€โ”€ messages.po
155
+ โ”‚ โ””โ”€โ”€ messages.mjs
156
+ โ”œโ”€โ”€ components
157
+ โ”‚ โ””โ”€โ”€ Counter.tsx # const { t } = useLingui(); t`Increment`
158
+ โ””โ”€โ”€ routes
159
+ โ””โ”€โ”€ $locale
160
+ โ””โ”€โ”€ about.tsx # await import(`../locales/${locale}/messages.mjs`)
161
+ ```
162
+
163
+ **Intlayer๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.** ๊ฐ `.content.ts` ํŒŒ์ผ์€ ํŠน์ • ํ‚ค์— ๊ฒฐํ•ฉ๋œ ๊ฐœ๋ณ„ ๋”•์…”๋„ˆ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ค ํ‚ค๋ฅผ ์ž„ํฌํŠธํ•˜๋Š”์ง€ ์ถ”์ ํ•˜์—ฌ, ๋”•์…”๋„ˆ๋ฆฌ๋ณ„ ๋ฐ ์–ธ์–ด๋ณ„๋กœ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ JSON๋งŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” **์ปดํฌ๋„ŒํŠธ**์ž…๋‹ˆ๋‹ค. ๋ผ์šฐํŠธ ์Šค์ฝ”ํ”„ ๋ถ„ํ• ์€ ์ด ๊ตฌ์กฐ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๋ฌผ์ด๋ฉฐ, ํŽ˜์ด์ง€๋Š” ์˜ค์ง ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ๋”•์…”๋„ˆ๋ฆฌ๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
164
+
165
+ ```bash
166
+ .
167
+ โ”œโ”€โ”€ intlayer.config.ts
168
+ โ””โ”€โ”€ src
169
+ โ”œโ”€โ”€ components
170
+ โ”‚ โ””โ”€โ”€ Counter
171
+ โ”‚ โ”œโ”€โ”€ index.tsx # useIntlayer("counter")
172
+ โ”‚ โ””โ”€โ”€ index.content.ts
173
+ โ””โ”€โ”€ routes
174
+ โ””โ”€โ”€ $locale
175
+ โ”œโ”€โ”€ about.tsx
176
+ โ””โ”€โ”€ about.content.ts
177
+ ```
178
+
179
+ ์ด๊ฒƒ์ด ๋ฐ”๋กœ `scoped-dynamic` ํŒจํ„ด์ด Intlayer์—์„œ๋Š” ๊ธฐ๋ณธ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ธ ๋ฐ˜๋ฉด, Lingui์—์„œ๋Š” ๋ณต์žกํ•œ ์ˆ˜๋™ ์—”์ง€๋‹ˆ์–ด๋ง ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.
180
+
181
+ > `dynamic` ํ–‰์˜ ์ธก์ • ๊ฒฐ๊ณผ๋ฅผ ์žฌํ˜„ํ•˜๋ ค๋ฉด `intlayer.config.ts`์—์„œ `dictionary.importMode: 'dynamic'`์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [๋ฒˆ๋“ค ์ตœ์ ํ™” ๋ฌธ์„œ](https://intlayer.org/ko/doc/concept/bundle-optimization)๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
182
+
183
+ ## ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ (DX)
184
+
185
+ ### ์ดˆ๊ธฐ ์„ค์ •
186
+
187
+ **Lingui**
188
+
189
+ ```ts fileName="lingui.config.ts"
190
+ import { defineConfig } from "@lingui/cli";
191
+
192
+ export default defineConfig({
193
+ sourceLocale: "en",
194
+ locales: ["en", "fr"],
195
+ catalogs: [
196
+ {
197
+ path: "<rootDir>/src/locales/{locale}/messages",
198
+ include: ["src"],
199
+ },
200
+ ],
201
+ });
202
+ ```
203
+
204
+ ```ts fileName="src/i18n.ts"
205
+ import { setupI18n } from "@lingui/core";
206
+
207
+ export const loadCatalog = async (locale: string) => {
208
+ const { messages } = await import(`./locales/${locale}/messages.mjs`);
209
+ const i18n = setupI18n();
210
+ i18n.load(locale, messages);
211
+ i18n.activate(locale);
212
+ return i18n;
213
+ };
214
+ ```
215
+
216
+ ์ดํ›„ ๋ฒˆ๋“ค๋Ÿฌ์— `@lingui/babel-plugin-lingui-macro`(๋˜๋Š” `@lingui/swc-plugin`)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์†Œ์Šค ์ˆ˜์ • ํ›„ `lingui extract`, ๋นŒ๋“œ ์ „ `lingui compile`์„ ์‹คํ–‰ํ•˜๋ฉฐ, ์ตœ์ƒ์œ„ ํŠธ๋ฆฌ๋ฅผ `<I18nProvider i18n={i18n}>`์œผ๋กœ ๊ฐ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
217
+
218
+ **Intlayer**
219
+
220
+ ```ts fileName="intlayer.config.ts"
221
+ import { type IntlayerConfig, Locales } from "intlayer";
222
+
223
+ const config: IntlayerConfig = {
224
+ internationalization: {
225
+ locales: [Locales.ENGLISH, Locales.FRENCH],
226
+ defaultLocale: Locales.ENGLISH,
227
+ },
228
+ };
229
+
230
+ export default config;
231
+ ```
232
+
233
+ `vite.config.ts`์— `intlayer()` ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€(Next.js์˜ ๊ฒฝ์šฐ `next.config.ts`์— `withIntlayer()`)ํ•˜๊ณ  ํŠธ๋ฆฌ๋ฅผ `<IntlayerProvider>`๋กœ ๊ฐ์‹ธ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์ถ”์ถœ ๋ฐ ์ปดํŒŒ์ผ ๋ช…๋ น์–ด ์—†์ด ๋ฒˆ๋“ค๋Ÿฌ ์‹คํ–‰ ์‹œ ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.
234
+
235
+ ### ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ
236
+
237
+ **Lingui**
238
+
239
+ ```tsx fileName="src/components/Counter.tsx"
240
+ import { useState } from "react";
241
+ import { useLingui } from "@lingui/react/macro";
242
+ import { Trans } from "@lingui/react/macro";
243
+
244
+ export const Counter = () => {
245
+ const { t, i18n } = useLingui();
246
+ const [count, setCount] = useState(0);
247
+
248
+ return (
249
+ <div>
250
+ <p>{i18n.number(count)}</p>
251
+ <button aria-label={t`Counter`} onClick={() => setCount((c) => c + 1)}>
252
+ <Trans>Increment</Trans>
253
+ </button>
254
+ </div>
255
+ );
256
+ };
257
+ ```
258
+
259
+ ์˜์–ด ํ…์ŠคํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์ง์ ‘ ์ž‘์„ฑ๋˜๋ฉฐ, ํ”„๋ž‘์Šค์–ด ๋ฒˆ์—ญ์€ `lingui extract` ์‹คํ–‰ ํ›„ `src/locales/fr/messages.po` ํŒŒ์ผ์— ํ•ด์‹œ ID ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ถ”์ถœ ๋˜๋Š” ์ปดํŒŒ์ผ์„ ์žŠ์–ด๋ฒ„๋ฆฌ๋ฉด ์กฐ์šฉํžˆ ์˜์–ด ์›๋ฌธ์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.
260
+
261
+ **Intlayer**
262
+
263
+ ```ts fileName="src/components/Counter/index.content.ts"
264
+ import { t, type Dictionary } from "intlayer";
265
+
266
+ const counterContent = {
267
+ key: "counter",
268
+ content: {
269
+ label: t({ en: "Counter", fr: "Compteur" }),
270
+ increment: t({ en: "Increment", fr: "Incrรฉmenter" }),
271
+ },
272
+ } satisfies Dictionary;
273
+
274
+ export default counterContent;
275
+ ```
276
+
277
+ ```tsx fileName="src/components/Counter/index.tsx"
278
+ import { useState } from "react";
279
+ import { useIntlayer } from "react-intlayer";
280
+ import { useNumber } from "react-intlayer/format";
281
+
282
+ export const Counter = () => {
283
+ const { label, increment } = useIntlayer("counter");
284
+ const number = useNumber();
285
+ const [count, setCount] = useState(0);
286
+
287
+ return (
288
+ <div>
289
+ <p>{number(count)}</p>
290
+ <button aria-label={label} onClick={() => setCount((c) => c + 1)}>
291
+ {increment}
292
+ </button>
293
+ </div>
294
+ );
295
+ };
296
+ ```
297
+
298
+ ๋‘ ์–ธ์–ด๊ฐ€ ์ปดํฌ๋„ŒํŠธ ๋ฐ”๋กœ ์˜† ๋‹จ์ผ ํŒŒ์ผ์— ํ•จ๊ป˜ ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ž‘์Šค์–ด ๊ฐ’์ด ๋ˆ„๋ฝ๋˜๋ฉด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋ฉฐ, ํ‚ค ์ด๋ฆ„์„ ์ž˜๋ชป ์ž…๋ ฅํ•˜๋ฉด TypeScript๊ฐ€ ์ฆ‰์‹œ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
299
+
300
+ ### ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ์˜ ์‚ฌ์šฉ
301
+
302
+ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋กœ๋”, ์„œ๋ฒ„ ํ•จ์ˆ˜ ๋“ฑ React ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ณณ์—์„œ์˜ ์‚ฌ์šฉ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
303
+
304
+ **Lingui**
305
+
306
+ ```ts fileName="src/routes/$locale/about.tsx"
307
+ import { setupI18n } from "@lingui/core";
308
+ import { msg } from "@lingui/core/macro";
309
+
310
+ const title = msg`About us`;
311
+
312
+ export const loader = async ({ params }: { params: { locale: string } }) => {
313
+ const { messages } = await import(
314
+ `../../locales/${params.locale}/messages.mjs`
315
+ );
316
+ const i18n = setupI18n({
317
+ locale: params.locale,
318
+ messages: { [params.locale]: messages },
319
+ });
320
+
321
+ return { title: i18n._(title) };
322
+ };
323
+ ```
324
+
325
+ ํ˜ธ์ถœ๋งˆ๋‹ค ์ƒˆ๋กœ์šด `I18n` ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ ํ•ฉํ•œ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ˆ˜๋™ ์ž„ํฌํŠธํ•œ ๋’ค, `t` ๋Œ€์‹  `msg` + `i18n._()`๋ฅผ ์กฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. [๋ฒค์น˜๋งˆํฌ ๋…ธํŠธ](https://github.com/intlayer-org/benchmark-bloom/blob/main/report/NOTE.md)์—์„œ๋„ ์ง€์ ํ•˜๋“ฏ, ์ƒํ™ฉ์— ๋งž์ถฐ `t`, `` t` ` ``, `i18n.t()`, `msg`, `<Trans>`๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น„์ง๊ด€์ ์ž…๋‹ˆ๋‹ค.
326
+
327
+ **Intlayer**
328
+
329
+ ```ts fileName="src/routes/$locale/about.tsx"
330
+ import { getIntlayer } from "intlayer";
331
+
332
+ export const loader = async ({ params }: { params: { locale: string } }) => {
333
+ const { title } = getIntlayer("about-metadata", params.locale);
334
+
335
+ return { title };
336
+ };
337
+ ```
338
+
339
+ ## Lingui ๋งคํฌ๋กœ๋Š” ์œ ์ง€ํ•˜๊ณ  Intlayer ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์„œ๋น™ํ•˜๊ธฐ
340
+
341
+ `@intlayer/lingui`๋Š” `@lingui/core` ๋ฐ `@lingui/react`๋ฅผ ์œ„ํ•œ ์›ํด๋ฆญ ํ˜ธํ™˜ ์–ด๋Œ‘ํ„ฐ์ž…๋‹ˆ๋‹ค. ๋งคํฌ๋กœ๋Š” ๊ธฐ์กด์ฒ˜๋Ÿผ ์ปดํŒŒ์ผ๋˜๋ฉฐ ์ƒ์„ฑ๋œ `i18n._()` ํ˜ธ์ถœ์€ Intlayer ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ์„œ๋น™๋ฉ๋‹ˆ๋‹ค. `.po` ๋™๊ธฐํ™” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ธฐ์กด ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›์œผ๋กœ ์œ ์ง€ํ•ด์ฃผ๋ฉฐ, ICU ๋ณต์ˆ˜ํ˜• ๋ฐ ๋ถ„๊ธฐ๋ฌธ๋„ ์™„๋ฒฝํžˆ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
342
+
343
+ ```ts fileName="vite.config.ts"
344
+ import { defineConfig } from "vite";
345
+ import { lingui } from "@intlayer/lingui/plugin";
346
+
347
+ export default defineConfig({
348
+ plugins: [lingui()],
349
+ });
350
+ ```
351
+
352
+ ๋นŒ๋“œ ์„ค์ •์—์„œ Intlayer ์ปดํŒŒ์ผ๋Ÿฌ ์ด์ „์— `@lingui/babel-plugin-lingui-macro` ๋˜๋Š” `@lingui/swc-plugin`์ด ์‹คํ–‰๋˜๋„๋ก ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [Lingui ํ˜ธํ™˜์„ฑ ๋ฌธ์„œ](https://intlayer.org/ko/doc/compatibility/lingui)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
353
+
354
+ ## ์–ธ์ œ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
355
+
356
+ - **Lingui๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ฒฝ์šฐ**: ์ •๋ฐ€ํ•œ **ICU MessageFormat** ๊ตฌ๋ฌธ๊ณผ ํƒ€์ž… ์•ˆ์ „ํ•œ ๋งคํฌ๋กœ๊ฐ€ ํ•„์ˆ˜์ ์ธ ๊ฒฝ์šฐ, ๋ฒˆ์—ญ ํŒ€์ด ๊ธฐ์กด TMS์™€ ์—ฐ๊ณ„๋œ **`.po`** ํŒŒ์ผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ, JSX ๋‚ด ์ธ๋ผ์ธ ์›๋ฌธ ์ž‘์„ฑ์„ ์„ ํ˜ธํ•˜๊ณ  ์นดํƒˆ๋กœ๊ทธ ์ถ”์ถœ/์ปดํŒŒ์ผ/๋ถ„ํ•  ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ์— ์ต์ˆ™ํ•œ ํŒ€์ธ ๊ฒฝ์šฐ. ์ง€์—ฐ ๋กœ๋”ฉ์„ ๊ฐ–์ถ”๋ฉด ํŽ˜์ด์ง€ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
357
+ - **Intlayer๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ฒฝ์šฐ**: **์ปดํฌ๋„ŒํŠธ ์Šค์ฝ”ํ”„ ์ฝ˜ํ…์ธ **, **์—„๊ฒฉํ•œ TypeScript ์—ฐ๋™**, **๋นŒ๋“œ ํƒ€์ž„ ๋ˆ„๋ฝ ํ‚ค ๊ฐ์ง€**, **๋ฌด์„ค์ • ์ž๋™ Tree-shaking ๋ฐ ์ง€์—ฐ ๋กœ๋”ฉ**, ์ดˆ๊ฒฝ๋Ÿ‰ ์ปดํฌ๋„ŒํŠธ, ๋น ๋ฅธ ํ•˜์ด๋“œ๋ ˆ์ด์…˜, ์ง€์—ฐ ์—†๋Š” ์–ธ์–ด ์ „ํ™˜, ๊ธฐ๋ณธ ๋‚ด์žฅ๋œ ์—๋””ํ„ฐ ํˆดํ‚ท(๋น„์ฃผ์–ผ ์—๋””ํ„ฐ, CMS, AI ๋ฒˆ์—ญ, MCP ์„œ๋ฒ„)์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ. ๋Œ€๊ทœ๋ชจ ๋ชจ๋“ˆํ˜• ํ”„๋กœ์ ํŠธ๋‚˜ ๋””์ž์ธ ์‹œ์Šคํ…œ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
358
+ - **`@intlayer/lingui`๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ฒฝ์šฐ**: ๊ธฐ์กด Lingui ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งคํฌ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  Intlayer์˜ ๋ชจ๋“ˆํ˜• ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋‹จ๊ณ„์  ์ „ํ™˜์„ ๊พ€ํ•  ๋•Œ.
359
+
360
+ ## ๊ด€๋ จ ๋น„๊ต ์ž๋ฃŒ
361
+
362
+ - [next-intl vs Intlayer](https://intlayer.org/ko/blog/next-intl-vs-intlayer) (๋™์ผ ๋ฒค์น˜๋งˆํฌ)
363
+ - [i18next vs Intlayer](https://intlayer.org/ko/blog/i18next-vs-intlayer) (๋™์ผ ๋ฒค์น˜๋งˆํฌ)
364
+ - [vue-i18n vs Intlayer](https://intlayer.org/ko/blog/vue-i18n-vs-intlayer-benchmark) (๋™์ผ ๋ฒค์น˜๋งˆํฌ)
365
+ - [์ปดํŒŒ์ผ๋Ÿฌ vs ์„ ์–ธํ˜• i18n](https://intlayer.org/ko/blog/compiler-vs-declarative-i18n)
366
+
367
+ ## GitHub ์Šคํƒ€ ์ถ”์ด
368
+
369
+ GitHub ์Šคํƒ€ ์ˆ˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ธ์ง€๋„, ์ปค๋ฎค๋‹ˆํ‹ฐ ์‹ ๋ขฐ ๋ฐ ์žฅ๊ธฐ์ ์ธ ์ง€์† ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ€๋Š ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ์ฒ™๋„์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ง์ ‘ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์ง€ํ•˜๊ณ  ์ฑ„ํƒํ•˜๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
370
+
371
+ [![์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ ์ฐจํŠธ](https://api.star-history.com/chart?repos=lingui%2Fjs-lingui%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#lingui/js-lingui&aymericzip/intlayer)
372
+
373
+ ## ๊ฒฐ๋ก 
374
+
375
+ Lingui๋Š” ์ด๋ฒˆ ๋ฒค์น˜๋งˆํฌ์—์„œ ๋Ÿฐํƒ€์ž„๊ณผ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•œ ์ „ํ†ต์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ ๊ธฐ๋ฐ˜์˜ ์••์ถ•๋œ ์นดํƒˆ๋กœ๊ทธ ๋•๋ถ„์— ํŽ˜์ด์ง€๋‹น JavaScript ํฌ๊ธฐ๋ฅผ Intlayer ์ˆ˜์ค€์— ๊ทผ์ ‘ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉฐ, TanStack Start์—์„œ๋Š” ์•„์ฃผ ๊ทผ์†Œํ•˜๊ฒŒ ์•ž์„œ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋‹น ์›์‹œ ๋ฐ”์ดํŠธ ์ˆ˜๋งŒ ํ‰๊ฐ€ํ•œ๋‹ค๋ฉด ์‚ฌ์‹ค์ƒ ๋ฌด์Šน๋ถ€์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.
376
+
377
+ ํ•˜์ง€๋งŒ ํ‰๊ฐ€ ๊ธฐ์ค€์€ ๊ทธ๊ฒƒ๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. Lingui ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์–ธ์–ด ๋‹จ์œ„์—์„œ ๋ฉˆ์ถ”๋ฉฐ, ๊ทธ ์ดํ•˜ ๋‹จ๊ณ„(๋ผ์šฐํŠธ๋ณ„ ์นดํƒˆ๋กœ๊ทธ ๋ถ„ํ• , ์ง€์—ฐ ๋กœ๋”ฉ, ํด๋ฐฑ ๋ฌธ์ž์—ด ๋ถ„๋ฆฌ)๋Š” ๋ชจ๋‘ ์ˆ˜๋™ ์„ค์ •์˜ ๋ชซ์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ๋ฒค์น˜๋งˆํฌ๋Š” ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ํ•œ๊ณ„์˜ ๋น„์šฉ์„ ์ ๋‚˜๋ผํ•˜๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค: **10~20๋ฐฐ ๋ฌด๊ฑฐ์šด ์ปดํฌ๋„ŒํŠธ**, **2~3๋ฐฐ ๋А๋ฆฐ ํ•˜์ด๋“œ๋ ˆ์ด์…˜**, ๊ตฌ์กฐ์ ์œผ๋กœ ๋‚จ๋Š” **3~15%์˜ ์–ธ์–ด ๋ˆ„์ˆ˜**, ์ตœ์ ํ™” ์„ค์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” **42 ms**์˜ ์–ธ์–ด ์ „ํ™˜ ์ง€์—ฐ. ๋ฐ˜๋ฉด Intlayer ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์ •๋ฐ€ ์ž‘๋™ํ•˜์—ฌ ๋ณ„๋„์˜ ๋ณต์žกํ•œ ์„ค์ • ์—†์ด๋„ **6~8 KB**, **11~14 ms**, **0%**, **3~4 ms**๋ฅผ ์™„๋ฒฝํžˆ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
378
+
379
+ ๋ชจ๋“  ์›์‹œ ์ธก์ • ๋ฐ์ดํ„ฐ, ํ…Œ์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์Šคํฌ๋ฆฝํŠธ๋Š” [Benchmark Bloom ์ €์žฅ์†Œ](https://github.com/intlayer-org/benchmark-bloom)์—์„œ ์ง์ ‘ ํ™•์ธํ•˜๊ณ  ์‹คํ–‰ํ•ด ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
380
+
381
+ ๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ['์™œ Intlayer์ธ๊ฐ€?' ๋ฌธ์„œ](https://intlayer.org/ko/doc/why)๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-08-23
3
- updatedAt: 2026-05-31
3
+ updatedAt: 2026-09-16
4
4
  title: "next-i18next vs next-intl vs Intlayer - ์™„์ „ํ•œ ๋ฒˆ์—ญ ๊ฐ€์ด๋“œ: next-i18next vs next-intl vs Intlayer: 2026 Comparison"
5
5
  description: ๋ฒˆ๋“ค ํฌ๊ธฐ, SEO, ์„ฑ๋Šฅ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•œ ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜. 2026๋…„์— Next.js ์›น์‚ฌ์ดํŠธ๋ฅผ ๋‹ค๊ตญ์–ด๋กœ ๋งŒ๋“œ์„ธ์š”, LLM ๋ฒˆ์—ญ, Agent Skills & MCP.
6
6
  keywords:
@@ -22,7 +22,7 @@ author: aymericzip
22
22
 
23
23
  <TOC/>
24
24
 
25
- ![next-i18next VS next-intl VS intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18next-next-intl-intlayer.png?raw=true)
25
+ ![next-i18next VS next-intl VS intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18next-next-intl-intlayer.webp?raw=true)
26
26
 
27
27
  Next.js๋ฅผ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ i18n ์˜ต์…˜์ธ next-i18next, next-intl, Intlayer์˜ ์œ ์‚ฌ์ ๊ณผ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
28
28
 
@@ -134,6 +134,10 @@ Next.js๋Š” ๊ตญ์ œํ™”๋œ ๋ผ์šฐํŒ…(์˜ˆ: ๋กœ์ผ€์ผ ์„ธ๊ทธ๋จผํŠธ)์„ ๊ธฐ๋ณธ์ ์œผ
134
134
 
135
135
  > ๋‚ด๊ฐ€ `/fr/about` ํŽ˜์ด์ง€์— ์žˆ๋‹ค๋ฉด, `/en/about` ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
136
136
 
137
+ ์•„๋ž˜ ๊ทธ๋ž˜ํ”„๋Š” 1~~10๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ 1~~10๊ฐœ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•œ ์ด๋ก ์ƒ์˜ ์•ฑ(ํŽ˜์ด์ง€๋‹น ์•ฝ 30KB์˜ ํ…์ŠคํŠธ)์˜ ์ฝ˜ํ…์ธ  ์šฉ๋Ÿ‰์„ ์ถ”์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋กœ์ผ€์ผ๋ณ„ ๋™์  ๋กœ๋”ฉ์€ ์–ธ์–ด ์ถ•์„ ์—†์• ๊ณ , ์ปดํฌ๋„ŒํŠธ๋‚˜ ๋ผ์šฐํŠธ ๋‹จ์œ„๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์Šค์ฝ”ํ”„ํ•˜๋ฉด ํŽ˜์ด์ง€ ์ถ•์ด ์—†์–ด์ง€๋ฉฐ, ๋‘ ๊ฐ€์ง€๋ฅผ ๊ฒฐํ•ฉํ–ˆ์„ ๋•Œ๋งŒ ์šฉ๋Ÿ‰์ด ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
138
+
139
+ ![์•„ํ‚คํ…์ฒ˜๋ณ„ ์ด๋ก ์ƒ์˜ ์ฝ˜ํ…์ธ  ๋ˆ„์ˆ˜](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
140
+
137
141
  ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์„ธ ๊ฐ€์ง€ ์†”๋ฃจ์…˜ ๋ชจ๋‘ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์„ธ ์†”๋ฃจ์…˜ ๊ฐ„์˜ ์ฐจ์ด๋Š” DX(๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜)์— ์žˆ์Šต๋‹ˆ๋‹ค.
138
142
 
139
143
  `next-intl`๊ณผ `next-i18next`๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒˆ์—ญ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋กœ์ผ€์ผ๋ณ„ ๋ฐ ํ•˜์œ„ ํŒŒ์ผ๋ณ„๋กœ JSON์„ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `next-i18next`์—์„œ๋Š” JSON ํŒŒ์ผ์„ '๋„ค์ž„์ŠคํŽ˜์ด์Šค(namespaces)'๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , `next-intl`์€ ๋ฉ”์‹œ์ง€๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. `intlayer`์—์„œ๋Š” JSON ํŒŒ์ผ์„ '์‚ฌ์ „(dictionaries)'์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
@@ -156,9 +160,9 @@ Next.js๋Š” ๊ตญ์ œํ™”๋œ ๋ผ์šฐํŒ…(์˜ˆ: ๋กœ์ผ€์ผ ์„ธ๊ทธ๋จผํŠธ)์„ ๊ธฐ๋ณธ์ ์œผ
156
160
 
157
161
  ๋‹ค์Œ์€ vite + react ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ `intlayer`๋ฅผ ์‚ฌ์šฉํ•œ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™”์˜ ์˜ํ–ฅ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:
158
162
 
159
- | ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค | ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ๋ฒˆ๋“ค |
160
- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
161
- | ![์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) | ![์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ๋ฒˆ๋“ค](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.png?raw=true) |
163
+ | ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค | ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ๋ฒˆ๋“ค |
164
+ | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
165
+ | ![์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.webp?raw=true) | ![์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ๋ฒˆ๋“ค](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.webp?raw=true) |
162
166
 
163
167
  ## TypeScript ๋ฐ ์•ˆ์ „์„ฑ
164
168
 
@@ -1296,7 +1300,7 @@ middleware์˜ ์„ค์ •์€ `intlayer.config.ts` ํŒŒ์ผ์— ์ค‘์•™ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ
1296
1300
 
1297
1301
  GitHub ์Šคํƒ€๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ธ๊ธฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ ์‹ ๋ขฐ๋„, ๊ทธ๋ฆฌ๊ณ  ์žฅ๊ธฐ์ ์ธ ๊ด€๋ จ์„ฑ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์  ํ’ˆ์งˆ์˜ ์ง์ ‘์ ์ธ ์ฒ™๋„๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ , ์ง„ํ–‰ ์ƒํ™ฉ์„ ํŒ”๋กœ์šฐํ•˜๋ฉฐ, ์ฑ„ํƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”์ง€๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€์น˜๋ฅผ ํ‰๊ฐ€ํ•  ๋•Œ, ์Šคํƒ€๋Š” ๋Œ€์•ˆ๋“ค ๊ฐ„์˜ ๊ด€์‹ฌ๋„๋ฅผ ๋น„๊ตํ•˜๊ณ  ์ƒํƒœ๊ณ„ ์„ฑ์žฅ์— ๋Œ€ํ•œ ํ†ต์ฐฐ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
1298
1302
 
1299
- [![์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ ์ฐจํŠธ](https://api.star-history.com/chart?repos=i18next/next-i18next%2Camannn/next-intl%2Caymericzip/intlayer&type=date&legend=top-left)](https://www.star-history.com/#i18next/next-i18next&amannn/next-intl&aymericzip/intlayer)
1303
+ [![์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ ์ฐจํŠธ](https://api.star-history.com/chart?repos=i18next/next-i18next%2Camannn/next-intl%2Caymericzip/intlayer&type=date&legend=top-left)](https://star-history.com/#i18next/next-i18next&amannn/next-intl&aymericzip/intlayer)
1300
1304
 
1301
1305
  ## ๊ฒฐ๋ก 
1302
1306