@intlayer/docs 9.5.6 → 9.5.8

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 (643) hide show
  1. package/blog/ar/i18next_vs_intlayer-i18next.md +122 -15
  2. package/blog/ar/i18next_vs_intlayer.md +130 -16
  3. package/blog/ar/is_intlayer_lighter_than_paraglide.md +284 -0
  4. package/blog/ar/lingui_vs_intlayer.md +122 -15
  5. package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
  6. package/blog/ar/next-intl_vs_intlayer.md +136 -20
  7. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
  8. package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
  9. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
  10. package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
  11. package/blog/de/i18next_vs_intlayer.md +128 -14
  12. package/blog/de/is_intlayer_lighter_than_paraglide.md +284 -0
  13. package/blog/de/lingui_vs_intlayer.md +122 -15
  14. package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
  15. package/blog/de/next-intl_vs_intlayer.md +125 -15
  16. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  17. package/blog/de/vue-i18n_vs_intlayer.md +193 -31
  18. package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
  19. package/blog/en/i18next_vs_intlayer.md +128 -14
  20. package/blog/en/is_intlayer_lighter_than_paraglide.md +288 -0
  21. package/blog/en/lingui_vs_intlayer.md +124 -15
  22. package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
  23. package/blog/en/next-intl_vs_intlayer.md +125 -13
  24. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
  25. package/blog/en/vue-i18n_vs_intlayer.md +188 -27
  26. package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
  27. package/blog/en-GB/i18next_vs_intlayer.md +128 -14
  28. package/blog/en-GB/is_intlayer_lighter_than_paraglide.md +285 -0
  29. package/blog/en-GB/lingui_vs_intlayer.md +122 -15
  30. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
  31. package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
  32. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  33. package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
  34. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
  35. package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
  36. package/blog/es/i18next_vs_intlayer.md +128 -14
  37. package/blog/es/is_intlayer_lighter_than_paraglide.md +284 -0
  38. package/blog/es/lingui_vs_intlayer.md +122 -15
  39. package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
  40. package/blog/es/next-intl_vs_intlayer.md +125 -15
  41. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  42. package/blog/es/vue-i18n_vs_intlayer.md +193 -31
  43. package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
  44. package/blog/fr/i18next_vs_intlayer.md +128 -14
  45. package/blog/fr/is_intlayer_lighter_than_paraglide.md +284 -0
  46. package/blog/fr/lingui_vs_intlayer.md +122 -15
  47. package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
  48. package/blog/fr/next-intl_vs_intlayer.md +127 -15
  49. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
  50. package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
  51. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
  52. package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
  53. package/blog/hi/i18next_vs_intlayer.md +130 -16
  54. package/blog/hi/is_intlayer_lighter_than_paraglide.md +284 -0
  55. package/blog/hi/lingui_vs_intlayer.md +122 -15
  56. package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
  57. package/blog/hi/next-intl_vs_intlayer.md +135 -19
  58. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  59. package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
  60. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  61. package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
  62. package/blog/id/i18next_vs_intlayer.md +128 -14
  63. package/blog/id/is_intlayer_lighter_than_paraglide.md +284 -0
  64. package/blog/id/lingui_vs_intlayer.md +122 -15
  65. package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
  66. package/blog/id/next-intl_vs_intlayer.md +135 -19
  67. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
  68. package/blog/id/vue-i18n_vs_intlayer.md +188 -26
  69. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
  70. package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
  71. package/blog/it/i18next_vs_intlayer.md +128 -14
  72. package/blog/it/is_intlayer_lighter_than_paraglide.md +284 -0
  73. package/blog/it/lingui_vs_intlayer.md +122 -15
  74. package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
  75. package/blog/it/next-intl_vs_intlayer.md +125 -15
  76. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  77. package/blog/it/vue-i18n_vs_intlayer.md +191 -31
  78. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
  79. package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
  80. package/blog/ja/i18next_vs_intlayer.md +129 -17
  81. package/blog/ja/is_intlayer_lighter_than_paraglide.md +284 -0
  82. package/blog/ja/lingui_vs_intlayer.md +122 -15
  83. package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
  84. package/blog/ja/next-intl_vs_intlayer.md +124 -14
  85. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  86. package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
  87. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
  88. package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
  89. package/blog/ko/i18next_vs_intlayer.md +129 -17
  90. package/blog/ko/is_intlayer_lighter_than_paraglide.md +284 -0
  91. package/blog/ko/lingui_vs_intlayer.md +122 -15
  92. package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
  93. package/blog/ko/next-intl_vs_intlayer.md +134 -18
  94. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  95. package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
  96. package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
  97. package/blog/pl/i18next_vs_intlayer.md +128 -14
  98. package/blog/pl/is_intlayer_lighter_than_paraglide.md +284 -0
  99. package/blog/pl/lingui_vs_intlayer.md +122 -15
  100. package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
  101. package/blog/pl/next-intl_vs_intlayer.md +134 -18
  102. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  103. package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
  104. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
  105. package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
  106. package/blog/pt/i18next_vs_intlayer.md +128 -14
  107. package/blog/pt/is_intlayer_lighter_than_paraglide.md +284 -0
  108. package/blog/pt/lingui_vs_intlayer.md +122 -15
  109. package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
  110. package/blog/pt/next-intl_vs_intlayer.md +131 -15
  111. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  112. package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
  113. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
  114. package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
  115. package/blog/ru/i18next_vs_intlayer.md +130 -16
  116. package/blog/ru/is_intlayer_lighter_than_paraglide.md +284 -0
  117. package/blog/ru/lingui_vs_intlayer.md +122 -15
  118. package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
  119. package/blog/ru/next-intl_vs_intlayer.md +123 -13
  120. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
  121. package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
  122. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
  123. package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
  124. package/blog/tr/i18next_vs_intlayer.md +128 -14
  125. package/blog/tr/is_intlayer_lighter_than_paraglide.md +284 -0
  126. package/blog/tr/lingui_vs_intlayer.md +122 -15
  127. package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
  128. package/blog/tr/next-intl_vs_intlayer.md +136 -20
  129. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  130. package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
  131. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
  132. package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
  133. package/blog/uk/i18next_vs_intlayer.md +130 -16
  134. package/blog/uk/is_intlayer_lighter_than_paraglide.md +284 -0
  135. package/blog/uk/lingui_vs_intlayer.md +122 -15
  136. package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
  137. package/blog/uk/next-intl_vs_intlayer.md +135 -19
  138. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
  139. package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
  140. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
  141. package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
  142. package/blog/vi/i18next_vs_intlayer.md +128 -14
  143. package/blog/vi/is_intlayer_lighter_than_paraglide.md +284 -0
  144. package/blog/vi/lingui_vs_intlayer.md +122 -15
  145. package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
  146. package/blog/vi/next-intl_vs_intlayer.md +135 -19
  147. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  148. package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
  149. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  150. package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
  151. package/blog/zh/i18next_vs_intlayer.md +128 -14
  152. package/blog/zh/is_intlayer_lighter_than_paraglide.md +284 -0
  153. package/blog/zh/lingui_vs_intlayer.md +122 -15
  154. package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
  155. package/blog/zh/next-intl_vs_intlayer.md +125 -15
  156. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  157. package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
  158. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
  159. package/dist/cjs/generated/blog.entry.cjs +20 -0
  160. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  161. package/dist/cjs/generated/docs.entry.cjs +60 -40
  162. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  163. package/dist/esm/generated/blog.entry.mjs +20 -0
  164. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  165. package/dist/esm/generated/docs.entry.mjs +60 -40
  166. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  167. package/dist/types/generated/blog.entry.d.ts +1 -0
  168. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  169. package/dist/types/generated/docs.entry.d.ts +3 -2
  170. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  171. package/docs/ar/benchmark/nextjs.md +19 -16
  172. package/docs/ar/benchmark/solid.md +26 -9
  173. package/docs/ar/benchmark/svelte.md +22 -7
  174. package/docs/ar/benchmark/tanstack.md +20 -16
  175. package/docs/ar/benchmark/vue.md +19 -10
  176. package/docs/ar/chrome_extension.md +130 -0
  177. package/docs/ar/cli/index.md +11 -1
  178. package/docs/ar/cli/infra.md +162 -0
  179. package/docs/ar/cli/init.md +24 -1
  180. package/docs/ar/cli/upgrade.md +125 -0
  181. package/docs/ar/dictionary/html.md +173 -5
  182. package/docs/ar/dictionary/markdown.md +263 -1
  183. package/docs/ar/intlayer_with_analog.md +23 -1
  184. package/docs/ar/intlayer_with_angular_19.md +24 -1
  185. package/docs/ar/intlayer_with_angular_21.md +24 -1
  186. package/docs/ar/intlayer_with_astro.md +24 -1
  187. package/docs/ar/intlayer_with_astro_lit.md +25 -1
  188. package/docs/ar/intlayer_with_astro_preact.md +26 -1
  189. package/docs/ar/intlayer_with_astro_react.md +26 -1
  190. package/docs/ar/intlayer_with_astro_solid.md +26 -1
  191. package/docs/ar/intlayer_with_astro_svelte.md +25 -1
  192. package/docs/ar/intlayer_with_astro_vue.md +25 -1
  193. package/docs/ar/intlayer_with_remix_3.md +22 -1
  194. package/docs/ar/self_hosting.md +406 -231
  195. package/docs/de/benchmark/nextjs.md +19 -16
  196. package/docs/de/benchmark/solid.md +26 -9
  197. package/docs/de/benchmark/svelte.md +22 -7
  198. package/docs/de/benchmark/tanstack.md +20 -16
  199. package/docs/de/benchmark/vue.md +19 -10
  200. package/docs/de/chrome_extension.md +130 -0
  201. package/docs/de/cli/index.md +11 -1
  202. package/docs/de/cli/infra.md +162 -0
  203. package/docs/de/cli/init.md +24 -1
  204. package/docs/de/cli/upgrade.md +125 -0
  205. package/docs/de/dictionary/html.md +173 -5
  206. package/docs/de/dictionary/markdown.md +263 -1
  207. package/docs/de/intlayer_with_analog.md +23 -1
  208. package/docs/de/intlayer_with_angular_19.md +24 -1
  209. package/docs/de/intlayer_with_angular_21.md +24 -1
  210. package/docs/de/intlayer_with_astro.md +24 -1
  211. package/docs/de/intlayer_with_astro_lit.md +25 -1
  212. package/docs/de/intlayer_with_astro_preact.md +26 -1
  213. package/docs/de/intlayer_with_astro_react.md +26 -1
  214. package/docs/de/intlayer_with_astro_solid.md +26 -1
  215. package/docs/de/intlayer_with_astro_svelte.md +25 -1
  216. package/docs/de/intlayer_with_astro_vue.md +25 -1
  217. package/docs/de/intlayer_with_remix_3.md +22 -1
  218. package/docs/de/self_hosting.md +404 -227
  219. package/docs/en/agent_skills.md +29 -1
  220. package/docs/en/benchmark/nextjs.md +19 -16
  221. package/docs/en/benchmark/solid.md +26 -9
  222. package/docs/en/benchmark/svelte.md +22 -7
  223. package/docs/en/benchmark/tanstack.md +21 -17
  224. package/docs/en/benchmark/vue.md +20 -11
  225. package/docs/en/chrome_extension.md +130 -0
  226. package/docs/en/cli/index.md +11 -1
  227. package/docs/en/cli/infra.md +175 -0
  228. package/docs/en/cli/init.md +25 -1
  229. package/docs/en/cli/upgrade.md +125 -0
  230. package/docs/en/dictionary/html.md +173 -5
  231. package/docs/en/dictionary/markdown.md +263 -1
  232. package/docs/en/intlayer_with_analog.md +23 -1
  233. package/docs/en/intlayer_with_angular_19.md +24 -1
  234. package/docs/en/intlayer_with_angular_21.md +24 -1
  235. package/docs/en/intlayer_with_astro.md +24 -1
  236. package/docs/en/intlayer_with_astro_lit.md +25 -1
  237. package/docs/en/intlayer_with_astro_preact.md +26 -1
  238. package/docs/en/intlayer_with_astro_react.md +26 -1
  239. package/docs/en/intlayer_with_astro_solid.md +26 -1
  240. package/docs/en/intlayer_with_astro_svelte.md +25 -1
  241. package/docs/en/intlayer_with_astro_vue.md +25 -1
  242. package/docs/en/intlayer_with_remix_3.md +22 -1
  243. package/docs/en/self_hosting.md +418 -176
  244. package/docs/en-GB/benchmark/nextjs.md +19 -16
  245. package/docs/en-GB/benchmark/solid.md +26 -9
  246. package/docs/en-GB/benchmark/svelte.md +22 -7
  247. package/docs/en-GB/benchmark/tanstack.md +20 -16
  248. package/docs/en-GB/benchmark/vue.md +20 -11
  249. package/docs/en-GB/chrome_extension.md +130 -0
  250. package/docs/en-GB/cli/index.md +11 -1
  251. package/docs/en-GB/cli/infra.md +162 -0
  252. package/docs/en-GB/cli/init.md +24 -1
  253. package/docs/en-GB/cli/upgrade.md +125 -0
  254. package/docs/en-GB/dictionary/html.md +173 -5
  255. package/docs/en-GB/dictionary/markdown.md +263 -1
  256. package/docs/en-GB/intlayer_with_analog.md +23 -1
  257. package/docs/en-GB/intlayer_with_angular_19.md +24 -1
  258. package/docs/en-GB/intlayer_with_angular_21.md +24 -1
  259. package/docs/en-GB/intlayer_with_astro.md +24 -1
  260. package/docs/en-GB/intlayer_with_astro_lit.md +25 -1
  261. package/docs/en-GB/intlayer_with_astro_preact.md +26 -1
  262. package/docs/en-GB/intlayer_with_astro_react.md +26 -1
  263. package/docs/en-GB/intlayer_with_astro_solid.md +26 -1
  264. package/docs/en-GB/intlayer_with_astro_svelte.md +25 -1
  265. package/docs/en-GB/intlayer_with_astro_vue.md +25 -1
  266. package/docs/en-GB/intlayer_with_remix_3.md +22 -1
  267. package/docs/en-GB/self_hosting.md +381 -206
  268. package/docs/es/benchmark/nextjs.md +19 -16
  269. package/docs/es/benchmark/solid.md +26 -9
  270. package/docs/es/benchmark/svelte.md +22 -7
  271. package/docs/es/benchmark/tanstack.md +20 -16
  272. package/docs/es/benchmark/vue.md +19 -10
  273. package/docs/es/chrome_extension.md +130 -0
  274. package/docs/es/cli/index.md +11 -1
  275. package/docs/es/cli/infra.md +162 -0
  276. package/docs/es/cli/init.md +24 -1
  277. package/docs/es/cli/upgrade.md +125 -0
  278. package/docs/es/dictionary/html.md +173 -5
  279. package/docs/es/dictionary/markdown.md +263 -1
  280. package/docs/es/intlayer_with_analog.md +23 -1
  281. package/docs/es/intlayer_with_angular_19.md +24 -1
  282. package/docs/es/intlayer_with_angular_21.md +24 -1
  283. package/docs/es/intlayer_with_astro.md +24 -1
  284. package/docs/es/intlayer_with_astro_lit.md +25 -1
  285. package/docs/es/intlayer_with_astro_preact.md +26 -1
  286. package/docs/es/intlayer_with_astro_react.md +26 -1
  287. package/docs/es/intlayer_with_astro_solid.md +26 -1
  288. package/docs/es/intlayer_with_astro_svelte.md +25 -1
  289. package/docs/es/intlayer_with_astro_vue.md +25 -1
  290. package/docs/es/intlayer_with_remix_3.md +22 -1
  291. package/docs/es/self_hosting.md +400 -223
  292. package/docs/fr/benchmark/nextjs.md +19 -16
  293. package/docs/fr/benchmark/solid.md +26 -9
  294. package/docs/fr/benchmark/svelte.md +22 -7
  295. package/docs/fr/benchmark/tanstack.md +20 -16
  296. package/docs/fr/benchmark/vue.md +20 -11
  297. package/docs/fr/chrome_extension.md +130 -0
  298. package/docs/fr/cli/index.md +11 -1
  299. package/docs/fr/cli/infra.md +162 -0
  300. package/docs/fr/cli/init.md +24 -1
  301. package/docs/fr/cli/upgrade.md +125 -0
  302. package/docs/fr/dictionary/html.md +173 -5
  303. package/docs/fr/dictionary/markdown.md +265 -4
  304. package/docs/fr/intlayer_with_analog.md +23 -1
  305. package/docs/fr/intlayer_with_angular_19.md +24 -1
  306. package/docs/fr/intlayer_with_angular_21.md +24 -1
  307. package/docs/fr/intlayer_with_astro.md +24 -1
  308. package/docs/fr/intlayer_with_astro_lit.md +25 -1
  309. package/docs/fr/intlayer_with_astro_preact.md +26 -1
  310. package/docs/fr/intlayer_with_astro_react.md +26 -1
  311. package/docs/fr/intlayer_with_astro_solid.md +26 -1
  312. package/docs/fr/intlayer_with_astro_svelte.md +25 -1
  313. package/docs/fr/intlayer_with_astro_vue.md +25 -1
  314. package/docs/fr/intlayer_with_remix_3.md +22 -1
  315. package/docs/fr/self_hosting.md +401 -224
  316. package/docs/hi/benchmark/nextjs.md +19 -16
  317. package/docs/hi/benchmark/solid.md +26 -9
  318. package/docs/hi/benchmark/svelte.md +22 -7
  319. package/docs/hi/benchmark/tanstack.md +20 -16
  320. package/docs/hi/benchmark/vue.md +20 -11
  321. package/docs/hi/chrome_extension.md +130 -0
  322. package/docs/hi/cli/index.md +11 -1
  323. package/docs/hi/cli/infra.md +162 -0
  324. package/docs/hi/cli/init.md +24 -1
  325. package/docs/hi/cli/upgrade.md +125 -0
  326. package/docs/hi/dictionary/html.md +173 -5
  327. package/docs/hi/dictionary/markdown.md +263 -1
  328. package/docs/hi/intlayer_with_analog.md +23 -1
  329. package/docs/hi/intlayer_with_angular_19.md +24 -1
  330. package/docs/hi/intlayer_with_angular_21.md +24 -1
  331. package/docs/hi/intlayer_with_astro.md +24 -1
  332. package/docs/hi/intlayer_with_astro_lit.md +25 -1
  333. package/docs/hi/intlayer_with_astro_preact.md +26 -1
  334. package/docs/hi/intlayer_with_astro_react.md +26 -1
  335. package/docs/hi/intlayer_with_astro_solid.md +26 -1
  336. package/docs/hi/intlayer_with_astro_svelte.md +25 -1
  337. package/docs/hi/intlayer_with_astro_vue.md +25 -1
  338. package/docs/hi/intlayer_with_remix_3.md +22 -1
  339. package/docs/hi/self_hosting.md +409 -235
  340. package/docs/id/benchmark/nextjs.md +19 -16
  341. package/docs/id/benchmark/solid.md +26 -9
  342. package/docs/id/benchmark/svelte.md +22 -7
  343. package/docs/id/benchmark/tanstack.md +20 -16
  344. package/docs/id/benchmark/vue.md +20 -11
  345. package/docs/id/chrome_extension.md +130 -0
  346. package/docs/id/cli/index.md +11 -1
  347. package/docs/id/cli/infra.md +162 -0
  348. package/docs/id/cli/init.md +24 -1
  349. package/docs/id/cli/upgrade.md +125 -0
  350. package/docs/id/dictionary/html.md +173 -5
  351. package/docs/id/dictionary/markdown.md +263 -1
  352. package/docs/id/intlayer_with_analog.md +23 -1
  353. package/docs/id/intlayer_with_angular_19.md +24 -1
  354. package/docs/id/intlayer_with_angular_21.md +24 -1
  355. package/docs/id/intlayer_with_astro.md +24 -1
  356. package/docs/id/intlayer_with_astro_lit.md +25 -1
  357. package/docs/id/intlayer_with_astro_preact.md +26 -1
  358. package/docs/id/intlayer_with_astro_react.md +26 -1
  359. package/docs/id/intlayer_with_astro_solid.md +26 -1
  360. package/docs/id/intlayer_with_astro_svelte.md +25 -1
  361. package/docs/id/intlayer_with_astro_vue.md +25 -1
  362. package/docs/id/intlayer_with_remix_3.md +22 -1
  363. package/docs/id/self_hosting.md +416 -243
  364. package/docs/it/benchmark/nextjs.md +19 -16
  365. package/docs/it/benchmark/solid.md +26 -9
  366. package/docs/it/benchmark/svelte.md +22 -7
  367. package/docs/it/benchmark/tanstack.md +20 -16
  368. package/docs/it/benchmark/vue.md +19 -10
  369. package/docs/it/chrome_extension.md +130 -0
  370. package/docs/it/cli/index.md +11 -1
  371. package/docs/it/cli/infra.md +162 -0
  372. package/docs/it/cli/init.md +24 -1
  373. package/docs/it/cli/upgrade.md +125 -0
  374. package/docs/it/dictionary/html.md +173 -5
  375. package/docs/it/dictionary/markdown.md +263 -1
  376. package/docs/it/intlayer_with_analog.md +23 -1
  377. package/docs/it/intlayer_with_angular_19.md +24 -1
  378. package/docs/it/intlayer_with_angular_21.md +24 -1
  379. package/docs/it/intlayer_with_astro.md +24 -1
  380. package/docs/it/intlayer_with_astro_lit.md +25 -1
  381. package/docs/it/intlayer_with_astro_preact.md +26 -1
  382. package/docs/it/intlayer_with_astro_react.md +26 -1
  383. package/docs/it/intlayer_with_astro_solid.md +26 -1
  384. package/docs/it/intlayer_with_astro_svelte.md +25 -1
  385. package/docs/it/intlayer_with_astro_vue.md +25 -1
  386. package/docs/it/intlayer_with_remix_3.md +22 -1
  387. package/docs/it/self_hosting.md +412 -237
  388. package/docs/ja/benchmark/nextjs.md +19 -16
  389. package/docs/ja/benchmark/solid.md +26 -9
  390. package/docs/ja/benchmark/svelte.md +22 -7
  391. package/docs/ja/benchmark/tanstack.md +18 -14
  392. package/docs/ja/benchmark/vue.md +19 -10
  393. package/docs/ja/chrome_extension.md +130 -0
  394. package/docs/ja/cli/index.md +11 -1
  395. package/docs/ja/cli/infra.md +162 -0
  396. package/docs/ja/cli/init.md +24 -1
  397. package/docs/ja/cli/upgrade.md +125 -0
  398. package/docs/ja/dictionary/html.md +173 -5
  399. package/docs/ja/dictionary/markdown.md +263 -1
  400. package/docs/ja/intlayer_with_analog.md +23 -1
  401. package/docs/ja/intlayer_with_angular_19.md +24 -1
  402. package/docs/ja/intlayer_with_angular_21.md +24 -1
  403. package/docs/ja/intlayer_with_astro.md +24 -1
  404. package/docs/ja/intlayer_with_astro_lit.md +25 -1
  405. package/docs/ja/intlayer_with_astro_preact.md +26 -1
  406. package/docs/ja/intlayer_with_astro_react.md +26 -1
  407. package/docs/ja/intlayer_with_astro_solid.md +26 -1
  408. package/docs/ja/intlayer_with_astro_svelte.md +25 -1
  409. package/docs/ja/intlayer_with_astro_vue.md +25 -1
  410. package/docs/ja/intlayer_with_remix_3.md +22 -1
  411. package/docs/ja/self_hosting.md +398 -223
  412. package/docs/ko/benchmark/nextjs.md +19 -16
  413. package/docs/ko/benchmark/solid.md +26 -9
  414. package/docs/ko/benchmark/svelte.md +22 -7
  415. package/docs/ko/benchmark/tanstack.md +20 -16
  416. package/docs/ko/benchmark/vue.md +20 -11
  417. package/docs/ko/chrome_extension.md +130 -0
  418. package/docs/ko/cli/index.md +11 -1
  419. package/docs/ko/cli/infra.md +162 -0
  420. package/docs/ko/cli/init.md +24 -1
  421. package/docs/ko/cli/upgrade.md +126 -0
  422. package/docs/ko/dictionary/html.md +173 -5
  423. package/docs/ko/dictionary/markdown.md +263 -1
  424. package/docs/ko/intlayer_with_analog.md +23 -1
  425. package/docs/ko/intlayer_with_angular_19.md +24 -1
  426. package/docs/ko/intlayer_with_angular_21.md +24 -1
  427. package/docs/ko/intlayer_with_astro.md +24 -1
  428. package/docs/ko/intlayer_with_astro_lit.md +25 -1
  429. package/docs/ko/intlayer_with_astro_preact.md +26 -1
  430. package/docs/ko/intlayer_with_astro_react.md +26 -1
  431. package/docs/ko/intlayer_with_astro_solid.md +26 -1
  432. package/docs/ko/intlayer_with_astro_svelte.md +25 -1
  433. package/docs/ko/intlayer_with_astro_vue.md +25 -1
  434. package/docs/ko/intlayer_with_remix_3.md +22 -1
  435. package/docs/ko/self_hosting.md +411 -238
  436. package/docs/pl/benchmark/nextjs.md +19 -16
  437. package/docs/pl/benchmark/solid.md +26 -9
  438. package/docs/pl/benchmark/svelte.md +22 -7
  439. package/docs/pl/benchmark/tanstack.md +20 -16
  440. package/docs/pl/benchmark/vue.md +20 -11
  441. package/docs/pl/chrome_extension.md +130 -0
  442. package/docs/pl/cli/index.md +11 -1
  443. package/docs/pl/cli/infra.md +162 -0
  444. package/docs/pl/cli/init.md +24 -1
  445. package/docs/pl/cli/upgrade.md +125 -0
  446. package/docs/pl/dictionary/html.md +173 -5
  447. package/docs/pl/dictionary/markdown.md +263 -1
  448. package/docs/pl/intlayer_with_analog.md +23 -1
  449. package/docs/pl/intlayer_with_angular_19.md +24 -1
  450. package/docs/pl/intlayer_with_angular_21.md +24 -1
  451. package/docs/pl/intlayer_with_astro.md +24 -1
  452. package/docs/pl/intlayer_with_astro_lit.md +25 -1
  453. package/docs/pl/intlayer_with_astro_preact.md +26 -1
  454. package/docs/pl/intlayer_with_astro_react.md +26 -1
  455. package/docs/pl/intlayer_with_astro_solid.md +26 -1
  456. package/docs/pl/intlayer_with_astro_svelte.md +25 -1
  457. package/docs/pl/intlayer_with_astro_vue.md +25 -1
  458. package/docs/pl/intlayer_with_remix_3.md +22 -1
  459. package/docs/pl/self_hosting.md +408 -233
  460. package/docs/pt/benchmark/nextjs.md +19 -16
  461. package/docs/pt/benchmark/solid.md +26 -9
  462. package/docs/pt/benchmark/svelte.md +22 -7
  463. package/docs/pt/benchmark/tanstack.md +20 -16
  464. package/docs/pt/benchmark/vue.md +19 -10
  465. package/docs/pt/chrome_extension.md +130 -0
  466. package/docs/pt/cli/index.md +11 -1
  467. package/docs/pt/cli/infra.md +162 -0
  468. package/docs/pt/cli/init.md +24 -1
  469. package/docs/pt/cli/upgrade.md +125 -0
  470. package/docs/pt/dictionary/html.md +173 -5
  471. package/docs/pt/dictionary/markdown.md +263 -1
  472. package/docs/pt/intlayer_with_analog.md +23 -1
  473. package/docs/pt/intlayer_with_angular_19.md +24 -1
  474. package/docs/pt/intlayer_with_angular_21.md +24 -1
  475. package/docs/pt/intlayer_with_astro.md +24 -1
  476. package/docs/pt/intlayer_with_astro_lit.md +25 -1
  477. package/docs/pt/intlayer_with_astro_preact.md +26 -1
  478. package/docs/pt/intlayer_with_astro_react.md +26 -1
  479. package/docs/pt/intlayer_with_astro_solid.md +26 -1
  480. package/docs/pt/intlayer_with_astro_svelte.md +25 -1
  481. package/docs/pt/intlayer_with_astro_vue.md +25 -1
  482. package/docs/pt/intlayer_with_remix_3.md +22 -1
  483. package/docs/pt/self_hosting.md +399 -224
  484. package/docs/ru/benchmark/nextjs.md +19 -16
  485. package/docs/ru/benchmark/solid.md +26 -9
  486. package/docs/ru/benchmark/svelte.md +22 -7
  487. package/docs/ru/benchmark/tanstack.md +20 -16
  488. package/docs/ru/benchmark/vue.md +20 -11
  489. package/docs/ru/chrome_extension.md +130 -0
  490. package/docs/ru/cli/index.md +11 -1
  491. package/docs/ru/cli/infra.md +162 -0
  492. package/docs/ru/cli/init.md +24 -1
  493. package/docs/ru/cli/upgrade.md +125 -0
  494. package/docs/ru/dictionary/html.md +173 -5
  495. package/docs/ru/dictionary/markdown.md +263 -1
  496. package/docs/ru/intlayer_with_analog.md +23 -1
  497. package/docs/ru/intlayer_with_angular_19.md +24 -1
  498. package/docs/ru/intlayer_with_angular_21.md +24 -1
  499. package/docs/ru/intlayer_with_astro.md +24 -1
  500. package/docs/ru/intlayer_with_astro_lit.md +25 -1
  501. package/docs/ru/intlayer_with_astro_preact.md +26 -1
  502. package/docs/ru/intlayer_with_astro_react.md +26 -1
  503. package/docs/ru/intlayer_with_astro_solid.md +26 -1
  504. package/docs/ru/intlayer_with_astro_svelte.md +25 -1
  505. package/docs/ru/intlayer_with_astro_vue.md +25 -1
  506. package/docs/ru/intlayer_with_remix_3.md +22 -1
  507. package/docs/ru/self_hosting.md +403 -228
  508. package/docs/tr/benchmark/nextjs.md +19 -16
  509. package/docs/tr/benchmark/solid.md +26 -9
  510. package/docs/tr/benchmark/svelte.md +22 -7
  511. package/docs/tr/benchmark/tanstack.md +20 -16
  512. package/docs/tr/benchmark/vue.md +20 -11
  513. package/docs/tr/chrome_extension.md +130 -0
  514. package/docs/tr/cli/index.md +11 -1
  515. package/docs/tr/cli/infra.md +162 -0
  516. package/docs/tr/cli/init.md +24 -1
  517. package/docs/tr/cli/upgrade.md +125 -0
  518. package/docs/tr/dictionary/html.md +173 -5
  519. package/docs/tr/dictionary/markdown.md +263 -1
  520. package/docs/tr/intlayer_with_analog.md +23 -1
  521. package/docs/tr/intlayer_with_angular_19.md +24 -1
  522. package/docs/tr/intlayer_with_angular_21.md +24 -1
  523. package/docs/tr/intlayer_with_astro.md +24 -1
  524. package/docs/tr/intlayer_with_astro_lit.md +25 -1
  525. package/docs/tr/intlayer_with_astro_preact.md +26 -1
  526. package/docs/tr/intlayer_with_astro_react.md +26 -1
  527. package/docs/tr/intlayer_with_astro_solid.md +26 -1
  528. package/docs/tr/intlayer_with_astro_svelte.md +25 -1
  529. package/docs/tr/intlayer_with_astro_vue.md +25 -1
  530. package/docs/tr/intlayer_with_remix_3.md +22 -1
  531. package/docs/tr/self_hosting.md +410 -234
  532. package/docs/uk/benchmark/nextjs.md +19 -16
  533. package/docs/uk/benchmark/solid.md +26 -9
  534. package/docs/uk/benchmark/svelte.md +22 -7
  535. package/docs/uk/benchmark/tanstack.md +20 -16
  536. package/docs/uk/benchmark/vue.md +20 -11
  537. package/docs/uk/chrome_extension.md +130 -0
  538. package/docs/uk/cli/index.md +11 -1
  539. package/docs/uk/cli/infra.md +162 -0
  540. package/docs/uk/cli/init.md +24 -1
  541. package/docs/uk/cli/upgrade.md +125 -0
  542. package/docs/uk/dictionary/html.md +173 -5
  543. package/docs/uk/dictionary/markdown.md +263 -1
  544. package/docs/uk/intlayer_with_analog.md +23 -1
  545. package/docs/uk/intlayer_with_angular_19.md +24 -1
  546. package/docs/uk/intlayer_with_angular_21.md +24 -1
  547. package/docs/uk/intlayer_with_astro.md +24 -1
  548. package/docs/uk/intlayer_with_astro_lit.md +25 -1
  549. package/docs/uk/intlayer_with_astro_preact.md +26 -1
  550. package/docs/uk/intlayer_with_astro_react.md +26 -1
  551. package/docs/uk/intlayer_with_astro_solid.md +26 -1
  552. package/docs/uk/intlayer_with_astro_svelte.md +25 -1
  553. package/docs/uk/intlayer_with_astro_vue.md +25 -1
  554. package/docs/uk/intlayer_with_remix_3.md +22 -1
  555. package/docs/uk/self_hosting.md +413 -238
  556. package/docs/vi/benchmark/nextjs.md +19 -16
  557. package/docs/vi/benchmark/solid.md +26 -9
  558. package/docs/vi/benchmark/svelte.md +22 -7
  559. package/docs/vi/benchmark/tanstack.md +20 -16
  560. package/docs/vi/benchmark/vue.md +20 -11
  561. package/docs/vi/chrome_extension.md +130 -0
  562. package/docs/vi/cli/index.md +11 -1
  563. package/docs/vi/cli/infra.md +162 -0
  564. package/docs/vi/cli/init.md +24 -1
  565. package/docs/vi/cli/upgrade.md +125 -0
  566. package/docs/vi/dictionary/html.md +173 -5
  567. package/docs/vi/dictionary/markdown.md +263 -1
  568. package/docs/vi/intlayer_with_analog.md +23 -1
  569. package/docs/vi/intlayer_with_angular_19.md +24 -1
  570. package/docs/vi/intlayer_with_angular_21.md +24 -1
  571. package/docs/vi/intlayer_with_astro.md +24 -1
  572. package/docs/vi/intlayer_with_astro_lit.md +25 -1
  573. package/docs/vi/intlayer_with_astro_preact.md +26 -1
  574. package/docs/vi/intlayer_with_astro_react.md +26 -1
  575. package/docs/vi/intlayer_with_astro_solid.md +26 -1
  576. package/docs/vi/intlayer_with_astro_svelte.md +25 -1
  577. package/docs/vi/intlayer_with_astro_vue.md +25 -1
  578. package/docs/vi/intlayer_with_remix_3.md +22 -1
  579. package/docs/vi/self_hosting.md +408 -234
  580. package/docs/zh/benchmark/nextjs.md +19 -16
  581. package/docs/zh/benchmark/solid.md +26 -9
  582. package/docs/zh/benchmark/svelte.md +22 -7
  583. package/docs/zh/benchmark/tanstack.md +19 -15
  584. package/docs/zh/benchmark/vue.md +20 -11
  585. package/docs/zh/chrome_extension.md +130 -0
  586. package/docs/zh/cli/index.md +11 -1
  587. package/docs/zh/cli/infra.md +162 -0
  588. package/docs/zh/cli/init.md +24 -1
  589. package/docs/zh/cli/upgrade.md +125 -0
  590. package/docs/zh/dictionary/html.md +172 -5
  591. package/docs/zh/dictionary/markdown.md +262 -1
  592. package/docs/zh/intlayer_with_analog.md +23 -1
  593. package/docs/zh/intlayer_with_angular_19.md +24 -1
  594. package/docs/zh/intlayer_with_angular_21.md +24 -1
  595. package/docs/zh/intlayer_with_astro.md +24 -1
  596. package/docs/zh/intlayer_with_astro_lit.md +25 -1
  597. package/docs/zh/intlayer_with_astro_preact.md +26 -1
  598. package/docs/zh/intlayer_with_astro_react.md +26 -1
  599. package/docs/zh/intlayer_with_astro_solid.md +26 -1
  600. package/docs/zh/intlayer_with_astro_svelte.md +25 -1
  601. package/docs/zh/intlayer_with_astro_vue.md +25 -1
  602. package/docs/zh/intlayer_with_remix_3.md +22 -1
  603. package/docs/zh/self_hosting.md +410 -237
  604. package/legal/ar/privacy_notice.md +9 -3
  605. package/legal/de/privacy_notice.md +9 -3
  606. package/legal/en/privacy_notice.md +10 -3
  607. package/legal/en-GB/privacy_notice.md +9 -3
  608. package/legal/es/privacy_notice.md +9 -3
  609. package/legal/fr/privacy_notice.md +9 -3
  610. package/legal/hi/privacy_notice.md +9 -3
  611. package/legal/id/privacy_notice.md +9 -3
  612. package/legal/it/privacy_notice.md +9 -3
  613. package/legal/ja/privacy_notice.md +9 -3
  614. package/legal/ko/privacy_notice.md +9 -3
  615. package/legal/pl/privacy_notice.md +9 -3
  616. package/legal/pt/privacy_notice.md +9 -3
  617. package/legal/ru/privacy_notice.md +9 -3
  618. package/legal/tr/privacy_notice.md +9 -3
  619. package/legal/uk/privacy_notice.md +9 -3
  620. package/legal/vi/privacy_notice.md +9 -3
  621. package/legal/zh/privacy_notice.md +9 -3
  622. package/package.json +6 -6
  623. package/src/generated/blog.entry.ts +20 -0
  624. package/src/generated/docs.entry.ts +60 -40
  625. package/docs/ar/roadmap.md +0 -321
  626. package/docs/de/roadmap.md +0 -322
  627. package/docs/en/intlayer_with_astro_vanilla.md +0 -713
  628. package/docs/en/roadmap.md +0 -325
  629. package/docs/en-GB/roadmap.md +0 -322
  630. package/docs/es/roadmap.md +0 -322
  631. package/docs/fr/roadmap.md +0 -322
  632. package/docs/hi/roadmap.md +0 -322
  633. package/docs/id/roadmap.md +0 -325
  634. package/docs/it/roadmap.md +0 -322
  635. package/docs/ja/roadmap.md +0 -322
  636. package/docs/ko/roadmap.md +0 -322
  637. package/docs/pl/roadmap.md +0 -325
  638. package/docs/pt/roadmap.md +0 -322
  639. package/docs/ru/roadmap.md +0 -322
  640. package/docs/tr/roadmap.md +0 -325
  641. package/docs/uk/roadmap.md +0 -325
  642. package/docs/vi/roadmap.md +0 -325
  643. package/docs/zh/roadmap.md +0 -322
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-02-07
3
- updatedAt: 2026-05-19
3
+ updatedAt: 2026-09-21
4
4
  title: Markdown
5
5
  description: Intlayer를 사용하여 다국어 웹사이트에서 Markdown 콘텐츠를 선언하고 사용하는 방법을 알아보세요. 이 온라인 문서의 단계를 따라 Markdown을 프로젝트에 원활하게 통합하세요.
6
6
  keywords:
@@ -11,6 +11,8 @@ keywords:
11
11
  - Next.js
12
12
  - JavaScript
13
13
  - React
14
+ - Remix
15
+ - Astro
14
16
  slugs:
15
17
  - doc
16
18
  - concept
@@ -487,6 +489,111 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
487
489
  ```
488
490
 
489
491
  </Tab>
492
+ <Tab label="Remix" value="remix">
493
+ Remix 3에서 마크다운 노드는 서버에서 HTML 문자열로 렌더링됩니다. Remix JSX의 `innerHTML` prop 또는 `html-template` 뷰의 `html.raw`를 사용하여 삽입하세요.
494
+
495
+ ```tsx fileName="src/views/home.tsx"
496
+ import { useIntlayer } from "remix-intlayer";
497
+
498
+ export const HomePage = () => () => {
499
+ const { myMarkdownContent } = useIntlayer("app");
500
+
501
+ return <div innerHTML={myMarkdownContent.value} />;
502
+ };
503
+ ```
504
+
505
+ ```ts fileName="src/views/home.ts"
506
+ import { html } from "remix/html-template";
507
+ import { useIntlayer } from "remix-intlayer";
508
+
509
+ export const renderHomePage = () => {
510
+ const { myMarkdownContent } = useIntlayer("app");
511
+
512
+ return html.raw`<div>${myMarkdownContent.value}</div>`;
513
+ };
514
+ ```
515
+
516
+ > Remix는 기본적으로 보간된 값을 이스케이프합니다. `innerHTML`과 `html.raw`는 렌더링된 마크다운 문자열에 필요한 두 가지 이스케이프 제외 방법입니다.
517
+
518
+ `.use()` 메서드를 사용하여 특정 태그에 대한 로컬 재정의를 제공할 수도 있습니다. 재정의는 HTML 문자열을 반환하는 함수입니다:
519
+
520
+ ```tsx
521
+ <div
522
+ innerHTML={myMarkdownContent.use({
523
+ h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
524
+ })}
525
+ />
526
+ ```
527
+
528
+ `.value`는 렌더링된 HTML 문자열이며, `String()` / `.toString()`은 원시 Markdown 소스를 반환합니다:
529
+
530
+ ```tsx
531
+ myMarkdownContent.value // "<h1>…</h1>"
532
+ String(myMarkdownContent) // "# …"
533
+ myMarkdownContent.toString() // "# …"
534
+ ```
535
+
536
+ 그리고 다음과 같이 마크다운 메타데이터에 액세스할 수 있습니다:
537
+
538
+ ```tsx
539
+ myMarkdownContent.metadata
540
+ myMarkdownContent.metadata.title
541
+ ```
542
+
543
+ </Tab>
544
+ <Tab label="Astro" value="astro">
545
+ Astro에서 마크다운 노드는 HTML 문자열로 렌더링됩니다. 템플릿의 `set:html` 디렉티브 또는 클라이언트 `<script>`의 `innerHTML`을 사용하여 삽입하세요.
546
+
547
+ ```astro fileName="src/pages/index.astro"
548
+ ---
549
+ import { useIntlayer } from "astro-intlayer";
550
+
551
+ const { myMarkdownContent } = useIntlayer("app");
552
+ ---
553
+
554
+ <div set:html={myMarkdownContent.value} />
555
+ ```
556
+
557
+ ```astro fileName="src/components/Content.astro"
558
+ <div id="content"></div>
559
+
560
+ <script>
561
+ import { useIntlayer } from "astro-intlayer";
562
+
563
+ const { myMarkdownContent } = useIntlayer("app");
564
+
565
+ document.querySelector("#content")!.innerHTML = myMarkdownContent.value;
566
+ </script>
567
+ ```
568
+
569
+ > Astro는 기본적으로 `{표현식}`을 이스케이프합니다. `set:html`은 렌더링된 마크다운 문자열에 필요한 이스케이프 제외 방법입니다.
570
+
571
+ `.use()` 메서드를 사용하여 특정 태그에 대한 로컬 재정의를 제공할 수도 있습니다. 재정의는 HTML 문자열을 반환하는 함수입니다:
572
+
573
+ ```astro
574
+ <div
575
+ set:html={myMarkdownContent.use({
576
+ h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
577
+ })}
578
+ />
579
+ ```
580
+
581
+ `.value`는 렌더링된 HTML 문자열이며, `String()` / `.toString()`은 원시 Markdown 소스를 반환합니다:
582
+
583
+ ```astro
584
+ myMarkdownContent.value // "<h1>…</h1>"
585
+ String(myMarkdownContent) // "# …"
586
+ myMarkdownContent.toString() // "# …"
587
+ ```
588
+
589
+ 그리고 다음과 같이 마크다운 메타데이터에 액세스할 수 있습니다:
590
+
591
+ ```astro
592
+ myMarkdownContent.metadata
593
+ myMarkdownContent.metadata.title
594
+ ```
595
+
596
+ </Tab>
490
597
  </Tabs>
491
598
 
492
599
  ### 2. 도우미 유틸리티 (Markdown 문자열 전용)
@@ -698,6 +805,60 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
698
805
  ```
699
806
 
700
807
  </Tab>
808
+ <Tab label="Remix" value="remix">
809
+ #### `useMarkdownRenderer()` 훅
810
+
811
+ `installIntlayerMarkdown()`으로 사전 구성된 렌더러 함수를 가져옵니다. HTML 문자열을 반환합니다.
812
+
813
+ ```tsx
814
+ import { useMarkdownRenderer } from "remix-intlayer/markdown";
815
+
816
+ const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
817
+
818
+ return <div innerHTML={renderMarkdown("# My Title")} />;
819
+ ```
820
+
821
+ #### `renderMarkdown()` 유틸리티
822
+
823
+ 전역 구성을 무시하는 독립형 유틸리티입니다.
824
+
825
+ ```tsx
826
+ import { renderMarkdown } from "remix-intlayer/markdown";
827
+
828
+ const html = renderMarkdown("# My Title", { forceBlock: true });
829
+ ```
830
+
831
+ </Tab>
832
+ <Tab label="Astro" value="astro">
833
+ #### `useMarkdownRenderer()` 훅
834
+
835
+ `installIntlayerMarkdown()`으로 사전 구성된 렌더러 함수를 가져옵니다. HTML 문자열을 반환합니다.
836
+
837
+ ```astro
838
+ ---
839
+ import { useMarkdownRenderer } from "astro-intlayer/markdown";
840
+
841
+ const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
842
+ ---
843
+
844
+ <div set:html={renderMarkdown("# My Title")} />
845
+ ```
846
+
847
+ #### `renderMarkdown()` 유틸리티
848
+
849
+ 전역 구성을 무시하는 독립형 유틸리티입니다.
850
+
851
+ ```astro
852
+ ---
853
+ import { renderMarkdown } from "astro-intlayer/markdown";
854
+
855
+ const html = renderMarkdown("# My Title", { forceBlock: true });
856
+ ---
857
+
858
+ <div set:html={html} />
859
+ ```
860
+
861
+ </Tab>
701
862
  </Tabs>
702
863
 
703
864
  ## `MarkdownProvider`를 통한 전역 구성
@@ -998,6 +1159,73 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
998
1159
  > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
999
1160
 
1000
1161
  </Tab>
1162
+ <Tab label="Remix" value="remix">
1163
+
1164
+ Remix에는 프로바이더를 담을 컴포넌트 트리가 없으므로 설정은 서버 시작 시 싱글톤으로 한 번 설치됩니다. `useMarkdownRenderer()`가 반환하는 렌더러를 구성합니다. `useIntlayer`가 반환하는 `md` 노드는 기본 컴파일러로 렌더링되며, 노드별로 `.use()`를 사용하여 태그를 재정의하세요.
1165
+
1166
+ ```typescript fileName="src/router.ts"
1167
+ import { installIntlayerMarkdown } from "remix-intlayer/markdown";
1168
+
1169
+ installIntlayerMarkdown({
1170
+ forceBlock: true,
1171
+ components: {
1172
+ h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
1173
+ },
1174
+ });
1175
+ ```
1176
+
1177
+ 자체 마크다운 렌더러를 사용할 수도 있습니다:
1178
+
1179
+ ```typescript fileName="src/router.ts"
1180
+ import { installIntlayerMarkdown } from "remix-intlayer/markdown";
1181
+
1182
+ installIntlayerMarkdown({
1183
+ renderMarkdown: async (md) => {
1184
+ const { marked } = await import("marked");
1185
+ return marked(md) as string;
1186
+ },
1187
+ });
1188
+ ```
1189
+
1190
+ > 렌더러 자체를 지연 로드하려면 `installIntlayerMarkdownDynamic(async () => …)`를 사용하세요. 로더는 첫 번째 호출 시에만 실행됩니다.
1191
+
1192
+ </Tab>
1193
+ <Tab label="Astro" value="astro">
1194
+
1195
+ Astro에는 프로바이더를 담을 컴포넌트 트리가 없으므로 설정은 미들웨어(서버) 및 클라이언트 `<script>`(브라우저)에서 싱글톤으로 한 번 설치됩니다. `useMarkdownRenderer()`가 반환하는 렌더러를 구성합니다. `useIntlayer`가 반환하는 `md` 노드는 기본 컴파일러로 렌더링되며, 노드별로 `.use()`를 사용하여 태그를 재정의하세요.
1196
+
1197
+ ```typescript fileName="src/middleware.ts"
1198
+ import { installIntlayerMarkdown } from "astro-intlayer/markdown";
1199
+ import { defineMiddleware } from "astro:middleware";
1200
+
1201
+ // 서버 시작 시 한 번 실행됩니다. Intlayer 미들웨어 자체는
1202
+ // 이 파일보다 앞서 통합에 의해 등록됩니다.
1203
+ installIntlayerMarkdown({
1204
+ forceBlock: true,
1205
+ components: {
1206
+ h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
1207
+ },
1208
+ });
1209
+
1210
+ export const onRequest = defineMiddleware((_context, next) => next());
1211
+ ```
1212
+
1213
+ 자체 마크다운 렌더러를 사용할 수도 있습니다:
1214
+
1215
+ ```typescript fileName="src/middleware.ts"
1216
+ import { installIntlayerMarkdown } from "astro-intlayer/markdown";
1217
+
1218
+ installIntlayerMarkdown({
1219
+ renderMarkdown: async (md) => {
1220
+ const { marked } = await import("marked");
1221
+ return marked(md) as string;
1222
+ },
1223
+ });
1224
+ ```
1225
+
1226
+ > 렌더러 자체를 지연 로드하려면 `installIntlayerMarkdownDynamic(async () => …)`를 사용하세요. 로더는 첫 번째 호출 시에만 실행됩니다.
1227
+
1228
+ </Tab>
1001
1229
  </Tabs>
1002
1230
 
1003
1231
  ## 서스펜스 (Suspense)
@@ -1326,6 +1554,40 @@ remark / rehype와 같은 다른 마크다운 파서와 비교할 때, Intlayer
1326
1554
  ```
1327
1555
 
1328
1556
  </Tab>
1557
+ <Tab label="Remix" value="remix">
1558
+
1559
+ Remix 3는 서버에서 렌더링하고 HTML을 스트리밍하므로 AST가 클라이언트로 전달될 필요가 없습니다. 한 번 파싱하고 페이지가 빌드되는 곳에서 AST를 렌더링하세요:
1560
+
1561
+ ```tsx fileName="src/views/article.tsx"
1562
+ import { parseMarkdown, renderMarkdown } from "remix-intlayer/markdown";
1563
+
1564
+ // 1. 마크다운을 직렬화 가능한 AST로 파싱 (예: 모듈 로드 시 한 번)
1565
+ const ast = parseMarkdown("## My title \n\nLorem Ipsum");
1566
+
1567
+ export const ArticlePage = () => () => (
1568
+ // 2. AST 렌더링: 렌더러는 원시 문자열 또는 파싱된 AST를 허용합니다
1569
+ <article innerHTML={renderMarkdown(ast)} />
1570
+ );
1571
+ ```
1572
+
1573
+ </Tab>
1574
+ <Tab label="Astro" value="astro">
1575
+
1576
+ Astro 페이지는 서버에서 렌더링되므로 AST가 클라이언트로 전달될 필요가 없습니다. 프론트매터에서 Markdown을 파싱하고 `set:html`로 렌더링하세요:
1577
+
1578
+ ```astro fileName="src/pages/article.astro"
1579
+ ---
1580
+ import { parseMarkdown, renderMarkdown } from "astro-intlayer/markdown";
1581
+
1582
+ // 1. 마크다운을 직렬화 가능한 AST로 파싱
1583
+ const ast = parseMarkdown("## My title \n\nLorem Ipsum");
1584
+ ---
1585
+
1586
+ <!-- 2. AST 렌더링: 렌더러는 원시 문자열 또는 파싱된 AST를 허용합니다 -->
1587
+ <article set:html={renderMarkdown(ast)} />
1588
+ ```
1589
+
1590
+ </Tab>
1329
1591
  </Tabs>
1330
1592
 
1331
1593
  이 패턴을 통해 마크다운 파싱 로직을 서버에서 완벽히 실행함으로써 클라이언트 사이드 실행 시간을 크게 단축하고 초기 하이드레이션 속도를 개선할 수 있습니다.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
- updatedAt: 2026-08-30
3
+ updatedAt: 2026-09-21
4
4
  title: "Analog i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Analog 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -157,6 +157,28 @@ bun add intlayer angular-intlayer vite-intlayer
157
157
  </Step>
158
158
  <Step number={2} title="프로젝트 설정">
159
159
 
160
+ ### 아키텍처
161
+
162
+ 이 아키텍처에서 `angular-intlayer`는 `provideIntlayer()`를 제공하며, `src/app/app.config.ts`에 등록되어 모든 컴포넌트와 파일 기반 페이지가 `useIntlayer` 시그널을 통해 콘텐츠를 읽을 수 있습니다. Analog는 Vite를 기반으로 구축되므로 `vite.config.ts`에서 `analog()` 옆에 `vite-intlayer`의 `intlayer()` 플러그인이 추가되어 콘텐츠 선언을 감시하고 다시 빌드하며 로케일 프록시를 실행합니다. 콘텐츠 선언은 `src/app/`의 컴포넌트 및 페이지와 함께 배치됩니다.
163
+
164
+ ```bash
165
+ .
166
+ ├── src
167
+ │ ├── app
168
+ │ │ ├── pages
169
+ │ │ │ └── index.page.ts # File-based route using useIntlayer
170
+ │ │ ├── app.config.ts # Application config with provideIntlayer()
171
+ │ │ ├── app.content.ts # App content declaration
172
+ │ │ └── locale-switcher.component.ts
173
+ │ └── main.ts
174
+ ├── intlayer.config.ts
175
+ ├── package.json
176
+ ├── tsconfig.json
177
+ └── vite.config.ts # analog() and intlayer() Vite plugins
178
+ ```
179
+
180
+ ### 설정
181
+
160
182
  애플리케이션의 언어를 설정하기 위한 설정 파일을 생성합니다:
161
183
 
162
184
  ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
- updatedAt: 2026-08-30
3
+ updatedAt: 2026-09-21
4
4
  title: "Angular 19 i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Angular 19 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -164,6 +164,29 @@ bun add @angular-builders/custom-webpack --dev
164
164
  </Step>
165
165
  <Step number={2} title="프로젝트 구성">
166
166
 
167
+ ### 아키텍처
168
+
169
+ 이 아키텍처에서 `angular-intlayer`는 `provideIntlayer()`를 제공하며, `src/app/app.config.ts`에 등록되어 모든 컴포넌트가 `useIntlayer` 시그널을 통해 콘텐츠를 읽을 수 있습니다. Angular CLI는 커스텀 Webpack 빌더로 전환되며, `webpack.config.ts`는 Intlayer 플러그인을 빌드에 병합하여 콘텐츠 선언을 감시하고 다시 빌드합니다. 콘텐츠 선언은 `src/app/`의 컴포넌트와 함께 배치됩니다.
170
+
171
+ ```bash
172
+ .
173
+ ├── src
174
+ │ ├── app
175
+ │ │ ├── app.component.html # Root template reading the content signal
176
+ │ │ ├── app.component.ts # Root component using useIntlayer
177
+ │ │ ├── app.config.ts # Application config with provideIntlayer()
178
+ │ │ ├── app.content.ts # App content declaration
179
+ │ │ └── locale-switcher.component.ts
180
+ │ └── main.ts
181
+ ├── angular.json # Custom Webpack builder for build and serve
182
+ ├── intlayer.config.ts
183
+ ├── package.json
184
+ ├── tsconfig.json
185
+ └── webpack.config.ts # mergeConfig() from angular-intlayer/webpack
186
+ ```
187
+
188
+ ### 설정
189
+
167
190
  애플리케이션의 언어를 구성하기 위한 설정 파일을 생성합니다:
168
191
 
169
192
  ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
- updatedAt: 2026-08-30
3
+ updatedAt: 2026-09-21
4
4
  title: "Angular 22 i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Angular 22 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -166,6 +166,29 @@ bun add @angular-builders/custom-esbuild --dev
166
166
  </Step>
167
167
  <Step number={2} title="프로젝트 구성">
168
168
 
169
+ ### 아키텍처
170
+
171
+ 이 아키텍처에서 `angular-intlayer`는 `provideIntlayer()`를 제공하며, `src/app/app.config.ts`에 등록되어 모든 컴포넌트가 `useIntlayer` 시그널을 통해 콘텐츠를 읽을 수 있습니다. Angular CLI는 커스텀 esbuild 빌더로 전환되며, `esbuild.plugins.ts`는 Intlayer 플러그인을 빌드에 등록하여 콘텐츠 선언을 감시하고 다시 빌드합니다. 콘텐츠 선언은 `src/app/`의 컴포넌트와 함께 배치됩니다.
172
+
173
+ ```bash
174
+ .
175
+ ├── src
176
+ │ ├── app
177
+ │ │ ├── app.component.html # Root template reading the content signal
178
+ │ │ ├── app.component.ts # Root component using useIntlayer
179
+ │ │ ├── app.config.ts # Application config with provideIntlayer()
180
+ │ │ ├── app.content.ts # App content declaration
181
+ │ │ └── locale-switcher.component.ts
182
+ │ └── main.ts
183
+ ├── angular.json # Custom esbuild builder for build and serve
184
+ ├── esbuild.plugins.ts # intlayerEsbuildPlugin() from angular-intlayer/esbuild
185
+ ├── intlayer.config.ts
186
+ ├── package.json
187
+ └── tsconfig.json
188
+ ```
189
+
190
+ ### 설정
191
+
169
192
  애플리케이션의 언어를 구성하기 위해 구성 파일을 만듭니다:
170
193
 
171
194
  ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-03-07
3
- updatedAt: 2026-09-20
3
+ updatedAt: 2026-09-21
4
4
  title: "Astro i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Astro 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -160,6 +160,29 @@ bun add intlayer astro-intlayer
160
160
  </Step>
161
161
  <Step number={2} title="프로젝트 설정">
162
162
 
163
+ ### 아키텍처
164
+
165
+ 이 아키텍처에서 `astro.config.ts`에 등록된 `intlayer()` 통합은 사전을 빌드하고 모든 요청의 로케일을 확인하여 `Astro.locals.intlayer`에 노출하는 미들웨어를 추가합니다. 페이지는 `src/pages/[...locale]/` 나머지(rest) 세그먼트 아래에 위치하므로 기본 로케일은 접두사 없이 제공되고 다른 모든 로케일은 전용 URL을 갖습니다. `.astro` 파일은 `astro-intlayer`의 `useIntlayer` / `useLocale` 훅을 사용하여 콘텐츠를 읽으며, 콘텐츠 선언은 `src/`의 컴포넌트와 함께 배치됩니다.
166
+
167
+ ```bash
168
+ .
169
+ ├── src
170
+ │ ├── app.content.tsx # App content declaration
171
+ │ ├── components
172
+ │ │ └── LocaleSwitcher.astro # Locale switcher component
173
+ │ └── pages
174
+ │ ├── [...locale]
175
+ │ │ └── index.astro # Localized page (rest param also serves the default locale)
176
+ │ ├── robots.txt.ts # robots.txt endpoint
177
+ │ └── sitemap.xml.ts # Localized sitemap endpoint
178
+ ├── astro.config.ts # Astro config with the intlayer() integration
179
+ ├── intlayer.config.ts
180
+ ├── package.json
181
+ └── tsconfig.json
182
+ ```
183
+
184
+ ### 설정
185
+
163
186
  애플리케이션의 언어를 설정하기 위한 설정 파일을 생성합니다:
164
187
 
165
188
  ```typescript fileName="intlayer.config.ts"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-24
3
- updatedAt: 2026-09-20
3
+ updatedAt: 2026-09-21
4
4
  title: "Astro + Lit i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Astro + Lit 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -180,6 +180,30 @@ bun x intlayer init
180
180
  </Step>
181
181
  <Step number={2} title="프로젝트 설정">
182
182
 
183
+ ### 아키텍처
184
+
185
+ 이 아키텍처에서 `astro.config.ts`에 등록된 `intlayer()` 통합은 사전을 빌드하고 모든 요청의 로케일을 확인하여 `Astro.locals.intlayer`에 노출하는 미들웨어를 추가합니다. 페이지는 `src/pages/[...locale]/` 나머지(rest) 세그먼트 아래에 위치하므로 기본 로케일은 접두사 없이 제공되고 다른 모든 로케일은 전용 URL을 갖습니다. `.astro` 파일은 서버 렌더링을 위해 `astro-intlayer`의 `useIntlayer` / `useLocale` 훅을 사용하여 콘텐츠를 읽고, Lit 아일랜드(`src/components/lit/LitDemo.ts`)는 서버에서 감지된 로케일을 prop으로 받아 대화형 처리를 위해 `lit-intlayer`에 전달합니다. 콘텐츠 선언은 `src/`의 컴포넌트와 함께 배치됩니다.
186
+
187
+ ```bash
188
+ .
189
+ ├── src
190
+ │ ├── components
191
+ │ │ └── lit
192
+ │ │ ├── app.content.ts # App content declaration
193
+ │ │ └── LitDemo.ts # Lit custom element (content + locale switcher)
194
+ │ └── pages
195
+ │ ├── [...locale]
196
+ │ │ └── index.astro # Localized page mounting the custom element
197
+ │ ├── robots.txt.ts # robots.txt endpoint
198
+ │ └── sitemap.xml.ts # Localized sitemap endpoint
199
+ ├── astro.config.ts # Astro config with the intlayer() and lit() integrations
200
+ ├── intlayer.config.ts
201
+ ├── package.json
202
+ └── tsconfig.json
203
+ ```
204
+
205
+ ### 설정
206
+
183
207
  애플리케이션의 언어를 설정하기 위한 설정 파일을 생성합니다:
184
208
 
185
209
  ```typescript fileName="intlayer.config.ts"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-24
3
- updatedAt: 2026-09-20
3
+ updatedAt: 2026-09-21
4
4
  title: "Astro + Preact i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Astro + Preact 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -179,6 +179,31 @@ bun x intlayer init
179
179
  </Step>
180
180
  <Step number={2} title="프로젝트 설정">
181
181
 
182
+ ### 아키텍처
183
+
184
+ 이 아키텍처에서 `astro.config.ts`에 등록된 `intlayer()` 통합은 사전을 빌드하고 모든 요청의 로케일을 확인하여 `Astro.locals.intlayer`에 노출하는 미들웨어를 추가합니다. 페이지는 `src/pages/[...locale]/` 나머지(rest) 세그먼트 아래에 위치하므로 기본 로케일은 접두사 없이 제공되고 다른 모든 로케일은 전용 URL을 갖습니다. `.astro` 파일은 서버 렌더링을 위해 `astro-intlayer`의 `useIntlayer` / `useLocale` 훅을 사용하여 콘텐츠를 읽고, Preact 아일랜드(`src/components/preact/PreactIsland.tsx`)는 서버에서 감지된 로케일을 prop으로 받아 대화형 처리를 위해 `preact-intlayer`에 전달합니다. 콘텐츠 선언은 `src/`의 컴포넌트와 함께 배치됩니다.
185
+
186
+ ```bash
187
+ .
188
+ ├── src
189
+ │ ├── app.content.tsx # App content declaration
190
+ │ ├── components
191
+ │ │ └── preact
192
+ │ │ ├── LocaleSwitcher.tsx # Locale switcher rendered inside the island
193
+ │ │ └── PreactIsland.tsx # Preact island wrapping the tree in IntlayerProvider
194
+ │ └── pages
195
+ │ ├── [...locale]
196
+ │ │ └── index.astro # Localized page mounting the island
197
+ │ ├── robots.txt.ts # robots.txt endpoint
198
+ │ └── sitemap.xml.ts # Localized sitemap endpoint
199
+ ├── astro.config.ts # Astro config with the intlayer() and preact() integrations
200
+ ├── intlayer.config.ts
201
+ ├── package.json
202
+ └── tsconfig.json
203
+ ```
204
+
205
+ ### 설정
206
+
182
207
  애플리케이션의 언어를 설정하기 위한 설정 파일을 생성합니다:
183
208
 
184
209
  ```typescript fileName="intlayer.config.ts"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-03-07
3
- updatedAt: 2026-09-20
3
+ updatedAt: 2026-09-21
4
4
  title: "Astro + React i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Astro + React 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -182,6 +182,31 @@ bun x intlayer init
182
182
  </Step>
183
183
  <Step number={2} title="프로젝트 설정">
184
184
 
185
+ ### 아키텍처
186
+
187
+ 이 아키텍처에서 `astro.config.ts`에 등록된 `intlayer()` 통합은 사전을 빌드하고 모든 요청의 로케일을 확인하여 `Astro.locals.intlayer`에 노출하는 미들웨어를 추가합니다. 페이지는 `src/pages/[...locale]/` 나머지(rest) 세그먼트 아래에 위치하므로 기본 로케일은 접두사 없이 제공되고 다른 모든 로케일은 전용 URL을 갖습니다. `.astro` 파일은 서버 렌더링을 위해 `astro-intlayer`의 `useIntlayer` / `useLocale` 훅을 사용하여 콘텐츠를 읽고, React 아일랜드(`src/components/react/ReactIsland.tsx`)는 서버에서 감지된 로케일을 prop으로 받아 대화형 처리를 위해 `react-intlayer`에 전달합니다. 콘텐츠 선언은 `src/`의 컴포넌트와 함께 배치됩니다.
188
+
189
+ ```bash
190
+ .
191
+ ├── src
192
+ │ ├── app.content.tsx # App content declaration
193
+ │ ├── components
194
+ │ │ └── react
195
+ │ │ ├── LocaleSwitcher.tsx # Locale switcher rendered inside the island
196
+ │ │ └── ReactIsland.tsx # React island wrapping the tree in IntlayerProvider
197
+ │ └── pages
198
+ │ ├── [...locale]
199
+ │ │ └── index.astro # Localized page mounting the island
200
+ │ ├── robots.txt.ts # robots.txt endpoint
201
+ │ └── sitemap.xml.ts # Localized sitemap endpoint
202
+ ├── astro.config.ts # Astro config with the intlayer() and react() integrations
203
+ ├── intlayer.config.ts
204
+ ├── package.json
205
+ └── tsconfig.json
206
+ ```
207
+
208
+ ### 설정
209
+
185
210
  애플리케이션의 언어를 설정하기 위한 설정 파일을 생성합니다:
186
211
 
187
212
  ```typescript fileName="intlayer.config.ts"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-24
3
- updatedAt: 2026-09-20
3
+ updatedAt: 2026-09-21
4
4
  title: "Astro + Solid i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Astro + Solid 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -179,6 +179,31 @@ bun x intlayer init
179
179
  </Step>
180
180
  <Step number={2} title="프로젝트 설정">
181
181
 
182
+ ### 아키텍처
183
+
184
+ 이 아키텍처에서 `astro.config.ts`에 등록된 `intlayer()` 통합은 사전을 빌드하고 모든 요청의 로케일을 확인하여 `Astro.locals.intlayer`에 노출하는 미들웨어를 추가합니다. 페이지는 `src/pages/[...locale]/` 나머지(rest) 세그먼트 아래에 위치하므로 기본 로케일은 접두사 없이 제공되고 다른 모든 로케일은 전용 URL을 갖습니다. `.astro` 파일은 서버 렌더링을 위해 `astro-intlayer`의 `useIntlayer` / `useLocale` 훅을 사용하여 콘텐츠를 읽고, Solid 아일랜드(`src/components/solid/SolidIsland.tsx`)는 서버에서 감지된 로케일을 prop으로 받아 대화형 처리를 위해 `solid-intlayer`에 전달합니다. 콘텐츠 선언은 `src/`의 컴포넌트와 함께 배치됩니다.
185
+
186
+ ```bash
187
+ .
188
+ ├── src
189
+ │ ├── app.content.tsx # App content declaration
190
+ │ ├── components
191
+ │ │ └── solid
192
+ │ │ ├── LocaleSwitcher.tsx # Locale switcher rendered inside the island
193
+ │ │ └── SolidIsland.tsx # Solid island wrapping the tree in IntlayerProvider
194
+ │ └── pages
195
+ │ ├── [...locale]
196
+ │ │ └── index.astro # Localized page mounting the island
197
+ │ ├── robots.txt.ts # robots.txt endpoint
198
+ │ └── sitemap.xml.ts # Localized sitemap endpoint
199
+ ├── astro.config.ts # Astro config with the intlayer() and solid() integrations
200
+ ├── intlayer.config.ts
201
+ ├── package.json
202
+ └── tsconfig.json
203
+ ```
204
+
205
+ ### 설정
206
+
182
207
  애플리케이션의 언어를 설정하기 위한 설정 파일을 생성합니다:
183
208
 
184
209
  ```typescript fileName="intlayer.config.ts"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-24
3
- updatedAt: 2026-09-20
3
+ updatedAt: 2026-09-21
4
4
  title: "Astro + Svelte i18n - 앱을 번역하는 완전 가이드"
5
5
  description: "i18next는 이제 그만. 2026년 다국어 (i18n) Astro + Svelte 앱 구축 가이드. AI 에이전트로 번역하고 번들 크기, SEO, 성능을 최적화하세요."
6
6
  keywords:
@@ -179,6 +179,30 @@ bun x intlayer init
179
179
  </Step>
180
180
  <Step number={2} title="프로젝트 설정">
181
181
 
182
+ ### 아키텍처
183
+
184
+ 이 아키텍처에서 `astro.config.ts`에 등록된 `intlayer()` 통합은 사전을 빌드하고 모든 요청의 로케일을 확인하여 `Astro.locals.intlayer`에 노출하는 미들웨어를 추가합니다. 페이지는 `src/pages/[...locale]/` 나머지(rest) 세그먼트 아래에 위치하므로 기본 로케일은 접두사 없이 제공되고 다른 모든 로케일은 전용 URL을 갖습니다. `.astro` 파일은 서버 렌더링을 위해 `astro-intlayer`의 `useIntlayer` / `useLocale` 훅을 사용하여 콘텐츠를 읽고, Svelte 아일랜드(`src/components/svelte/SvelteIsland.svelte`)는 서버에서 감지된 로케일을 prop으로 받아 대화형 처리를 위해 `svelte-intlayer`에 전달합니다. 콘텐츠 선언은 `src/`의 컴포넌트와 함께 배치됩니다.
185
+
186
+ ```bash
187
+ .
188
+ ├── src
189
+ │ ├── app.content.ts # App content declaration
190
+ │ ├── components
191
+ │ │ └── svelte
192
+ │ │ └── SvelteIsland.svelte # Svelte island (content + locale switcher)
193
+ │ └── pages
194
+ │ ├── [...locale]
195
+ │ │ └── index.astro # Localized page mounting the island
196
+ │ ├── robots.txt.ts # robots.txt endpoint
197
+ │ └── sitemap.xml.ts # Localized sitemap endpoint
198
+ ├── astro.config.ts # Astro config with the intlayer() and svelte() integrations
199
+ ├── intlayer.config.ts
200
+ ├── package.json
201
+ └── tsconfig.json
202
+ ```
203
+
204
+ ### 설정
205
+
182
206
  애플리케이션의 언어를 설정하기 위한 설정 파일을 생성합니다:
183
207
 
184
208
  ```typescript fileName="intlayer.config.ts"