@intlayer/docs 7.2.3 → 7.3.0-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 (461) hide show
  1. package/README.md +2 -0
  2. package/blog/ar/compiler_vs_declarative_i18n.md +138 -0
  3. package/blog/ar/intlayer_with_next-i18next.md +0 -1
  4. package/blog/ar/intlayer_with_vue-i18n.md +0 -1
  5. package/blog/de/compiler_vs_declarative_i18n.md +138 -0
  6. package/blog/de/intlayer_with_next-i18next.md +0 -1
  7. package/blog/de/intlayer_with_vue-i18n.md +0 -1
  8. package/blog/en/compiler_vs_declarative_i18n.md +138 -0
  9. package/blog/en/i18n_using_next-i18next.md +1 -1
  10. package/blog/en/i18n_using_next-intl.md +1 -1
  11. package/blog/en/intlayer_with_i18next.md +1 -1
  12. package/blog/en/intlayer_with_next-i18next.md +1 -2
  13. package/blog/en/intlayer_with_next-intl.md +1 -1
  14. package/blog/en/intlayer_with_react-i18next.md +1 -1
  15. package/blog/en/intlayer_with_react-intl.md +1 -1
  16. package/blog/en/intlayer_with_vue-i18n.md +1 -2
  17. package/blog/en-GB/compiler_vs_declarative_i18n.md +138 -0
  18. package/blog/en-GB/intlayer_with_next-i18next.md +0 -1
  19. package/blog/en-GB/intlayer_with_vue-i18n.md +0 -1
  20. package/blog/es/compiler_vs_declarative_i18n.md +138 -0
  21. package/blog/es/intlayer_with_next-i18next.md +0 -1
  22. package/blog/es/intlayer_with_vue-i18n.md +0 -1
  23. package/blog/fr/compiler_vs_declarative_i18n.md +138 -0
  24. package/blog/fr/intlayer_with_next-i18next.md +0 -1
  25. package/blog/fr/intlayer_with_vue-i18n.md +0 -1
  26. package/blog/hi/compiler_vs_declarative_i18n.md +138 -0
  27. package/blog/hi/intlayer_with_next-i18next.md +0 -1
  28. package/blog/hi/intlayer_with_vue-i18n.md +0 -1
  29. package/blog/id/compiler_vs_declarative_i18n.md +138 -0
  30. package/blog/id/intlayer_with_next-i18next.md +0 -1
  31. package/blog/id/intlayer_with_vue-i18n.md +0 -1
  32. package/blog/it/compiler_vs_declarative_i18n.md +138 -0
  33. package/blog/it/intlayer_with_next-i18next.md +0 -1
  34. package/blog/it/intlayer_with_vue-i18n.md +0 -1
  35. package/blog/ja/compiler_vs_declarative_i18n.md +138 -0
  36. package/blog/ja/intlayer_with_next-i18next.md +0 -1
  37. package/blog/ja/intlayer_with_vue-i18n.md +0 -1
  38. package/blog/ko/compiler_vs_declarative_i18n.md +138 -0
  39. package/blog/ko/intlayer_with_next-i18next.md +0 -1
  40. package/blog/ko/intlayer_with_vue-i18n.md +0 -1
  41. package/blog/pl/compiler_vs_declarative_i18n.md +138 -0
  42. package/blog/pl/intlayer_with_next-i18next.md +0 -1
  43. package/blog/pl/intlayer_with_vue-i18n.md +0 -1
  44. package/blog/pt/compiler_vs_declarative_i18n.md +138 -0
  45. package/blog/pt/intlayer_with_next-i18next.md +0 -1
  46. package/blog/pt/intlayer_with_vue-i18n.md +0 -1
  47. package/blog/ru/compiler_vs_declarative_i18n.md +138 -0
  48. package/blog/ru/intlayer_with_next-i18next.md +0 -1
  49. package/blog/ru/intlayer_with_vue-i18n.md +0 -1
  50. package/blog/tr/compiler_vs_declarative_i18n.md +138 -0
  51. package/blog/tr/intlayer_with_next-i18next.md +0 -1
  52. package/blog/tr/intlayer_with_vue-i18n.md +0 -1
  53. package/blog/vi/compiler_vs_declarative_i18n.md +138 -0
  54. package/blog/vi/intlayer_with_next-i18next.md +0 -1
  55. package/blog/vi/intlayer_with_vue-i18n.md +0 -1
  56. package/blog/zh/compiler_vs_declarative_i18n.md +138 -0
  57. package/blog/zh/intlayer_with_next-i18next.md +0 -1
  58. package/blog/zh/intlayer_with_vue-i18n.md +0 -1
  59. package/dist/cjs/generated/blog.entry.cjs +19 -0
  60. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  61. package/dist/cjs/generated/docs.entry.cjs +323 -19
  62. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  63. package/dist/esm/generated/blog.entry.mjs +19 -0
  64. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  65. package/dist/esm/generated/docs.entry.mjs +323 -19
  66. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  67. package/dist/types/generated/blog.entry.d.ts +1 -0
  68. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  69. package/dist/types/generated/docs.entry.d.ts +17 -1
  70. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  71. package/docs/ar/cli/build.md +64 -0
  72. package/docs/ar/cli/configuration.md +63 -0
  73. package/docs/ar/cli/debug.md +46 -0
  74. package/docs/ar/cli/doc-review.md +43 -0
  75. package/docs/ar/cli/doc-translate.md +132 -0
  76. package/docs/ar/cli/editor.md +28 -0
  77. package/docs/ar/cli/fill.md +130 -0
  78. package/docs/ar/cli/index.md +163 -0
  79. package/docs/ar/cli/list.md +53 -0
  80. package/docs/ar/cli/live.md +41 -0
  81. package/docs/ar/cli/pull.md +78 -0
  82. package/docs/ar/cli/push.md +98 -0
  83. package/docs/ar/cli/sdk.md +67 -0
  84. package/docs/ar/cli/test.md +76 -0
  85. package/docs/ar/cli/transform.md +65 -0
  86. package/docs/ar/cli/version.md +24 -0
  87. package/docs/ar/cli/watch.md +37 -0
  88. package/docs/ar/packages/intlayer/getPrefix.md +210 -0
  89. package/docs/de/cli/build.md +64 -0
  90. package/docs/de/cli/configuration.md +63 -0
  91. package/docs/de/cli/debug.md +46 -0
  92. package/docs/de/cli/doc-review.md +43 -0
  93. package/docs/de/cli/doc-translate.md +132 -0
  94. package/docs/de/cli/editor.md +28 -0
  95. package/docs/de/cli/fill.md +130 -0
  96. package/docs/de/cli/index.md +163 -0
  97. package/docs/de/cli/list.md +53 -0
  98. package/docs/de/cli/live.md +41 -0
  99. package/docs/de/cli/pull.md +78 -0
  100. package/docs/de/cli/push.md +98 -0
  101. package/docs/de/cli/sdk.md +67 -0
  102. package/docs/de/cli/test.md +76 -0
  103. package/docs/de/cli/transform.md +65 -0
  104. package/docs/de/cli/version.md +24 -0
  105. package/docs/de/cli/watch.md +37 -0
  106. package/docs/de/packages/intlayer/getPrefix.md +213 -0
  107. package/docs/en/CI_CD.md +2 -2
  108. package/docs/en/autoFill.md +24 -2
  109. package/docs/en/cli/build.md +64 -0
  110. package/docs/en/cli/configuration.md +63 -0
  111. package/docs/en/cli/debug.md +46 -0
  112. package/docs/en/cli/doc-review.md +43 -0
  113. package/docs/en/cli/doc-translate.md +132 -0
  114. package/docs/en/cli/editor.md +28 -0
  115. package/docs/en/cli/fill.md +130 -0
  116. package/docs/en/cli/index.md +163 -0
  117. package/docs/en/cli/list.md +53 -0
  118. package/docs/en/cli/live.md +41 -0
  119. package/docs/en/cli/pull.md +78 -0
  120. package/docs/en/cli/push.md +98 -0
  121. package/docs/en/cli/sdk.md +67 -0
  122. package/docs/en/cli/test.md +76 -0
  123. package/docs/en/cli/transform.md +65 -0
  124. package/docs/en/cli/version.md +24 -0
  125. package/docs/en/cli/watch.md +37 -0
  126. package/docs/en/dictionary/condition.md +1 -1
  127. package/docs/en/dictionary/enumeration.md +1 -1
  128. package/docs/en/dictionary/file.md +1 -1
  129. package/docs/en/dictionary/gender.md +1 -1
  130. package/docs/en/dictionary/insertion.md +1 -1
  131. package/docs/en/dictionary/markdown.md +1 -1
  132. package/docs/en/dictionary/nesting.md +1 -1
  133. package/docs/en/index.md +1 -1
  134. package/docs/en/intlayer_with_angular.md +1 -1
  135. package/docs/en/intlayer_with_astro.md +1 -1
  136. package/docs/en/intlayer_with_create_react_app.md +1 -1
  137. package/docs/en/intlayer_with_lynx+react.md +1 -1
  138. package/docs/en/intlayer_with_next-i18next.md +1 -1
  139. package/docs/en/intlayer_with_next-intl.md +1 -1
  140. package/docs/en/intlayer_with_nextjs_14.md +1 -1
  141. package/docs/en/intlayer_with_nextjs_15.md +1 -1
  142. package/docs/en/intlayer_with_nextjs_16.md +1 -1
  143. package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
  144. package/docs/en/intlayer_with_nuxt.md +1 -1
  145. package/docs/en/intlayer_with_react_native+expo.md +1 -1
  146. package/docs/en/intlayer_with_react_router_v7.md +1 -1
  147. package/docs/en/intlayer_with_tanstack.md +1 -1
  148. package/docs/en/intlayer_with_vite+preact.md +1 -1
  149. package/docs/en/intlayer_with_vite+react.md +1 -1
  150. package/docs/en/intlayer_with_vite+solid.md +1 -1
  151. package/docs/en/intlayer_with_vite+svelte.md +1 -1
  152. package/docs/en/intlayer_with_vite+vue.md +1 -1
  153. package/docs/en/introduction.md +1 -1
  154. package/docs/en/mcp_server.md +1 -2
  155. package/docs/en/per_locale_file.md +1 -1
  156. package/docs/en/plugins/sync-json.md +1 -1
  157. package/docs/en/releases/v6.md +2 -2
  158. package/docs/en/roadmap.md +1 -1
  159. package/docs/en-GB/cli/build.md +64 -0
  160. package/docs/en-GB/cli/configuration.md +63 -0
  161. package/docs/en-GB/cli/debug.md +46 -0
  162. package/docs/en-GB/cli/doc-review.md +43 -0
  163. package/docs/en-GB/cli/doc-translate.md +132 -0
  164. package/docs/en-GB/cli/editor.md +28 -0
  165. package/docs/en-GB/cli/fill.md +130 -0
  166. package/docs/en-GB/cli/index.md +163 -0
  167. package/docs/en-GB/cli/list.md +53 -0
  168. package/docs/en-GB/cli/live.md +41 -0
  169. package/docs/en-GB/cli/pull.md +78 -0
  170. package/docs/en-GB/cli/push.md +98 -0
  171. package/docs/en-GB/cli/sdk.md +67 -0
  172. package/docs/en-GB/cli/test.md +100 -0
  173. package/docs/en-GB/cli/transform.md +65 -0
  174. package/docs/en-GB/cli/version.md +24 -0
  175. package/docs/en-GB/cli/watch.md +37 -0
  176. package/docs/en-GB/dictionary/condition.md +1 -1
  177. package/docs/en-GB/dictionary/markdown.md +1 -1
  178. package/docs/en-GB/dictionary/nesting.md +1 -1
  179. package/docs/en-GB/intlayer_with_nextjs_14.md +1 -1
  180. package/docs/en-GB/intlayer_with_react_native+expo.md +1 -1
  181. package/docs/en-GB/packages/intlayer/getPrefix.md +213 -0
  182. package/docs/es/cli/build.md +64 -0
  183. package/docs/es/cli/configuration.md +63 -0
  184. package/docs/es/cli/debug.md +46 -0
  185. package/docs/es/cli/doc-review.md +43 -0
  186. package/docs/es/cli/doc-translate.md +132 -0
  187. package/docs/es/cli/editor.md +28 -0
  188. package/docs/es/cli/fill.md +130 -0
  189. package/docs/es/cli/index.md +163 -0
  190. package/docs/es/cli/list.md +53 -0
  191. package/docs/es/cli/live.md +41 -0
  192. package/docs/es/cli/pull.md +78 -0
  193. package/docs/es/cli/push.md +98 -0
  194. package/docs/es/cli/sdk.md +67 -0
  195. package/docs/es/cli/test.md +76 -0
  196. package/docs/es/cli/transform.md +65 -0
  197. package/docs/es/cli/version.md +24 -0
  198. package/docs/es/cli/watch.md +37 -0
  199. package/docs/es/packages/intlayer/getPrefix.md +213 -0
  200. package/docs/fr/cli/build.md +64 -0
  201. package/docs/fr/cli/configuration.md +63 -0
  202. package/docs/fr/cli/debug.md +46 -0
  203. package/docs/fr/cli/doc-review.md +43 -0
  204. package/docs/fr/cli/doc-translate.md +132 -0
  205. package/docs/fr/cli/editor.md +28 -0
  206. package/docs/fr/cli/fill.md +130 -0
  207. package/docs/fr/cli/index.md +163 -0
  208. package/docs/fr/cli/list.md +53 -0
  209. package/docs/fr/cli/live.md +41 -0
  210. package/docs/fr/cli/pull.md +78 -0
  211. package/docs/fr/cli/push.md +98 -0
  212. package/docs/fr/cli/sdk.md +67 -0
  213. package/docs/fr/cli/test.md +76 -0
  214. package/docs/fr/cli/transform.md +65 -0
  215. package/docs/fr/cli/version.md +24 -0
  216. package/docs/fr/cli/watch.md +37 -0
  217. package/docs/fr/packages/intlayer/getPrefix.md +213 -0
  218. package/docs/hi/cli/build.md +64 -0
  219. package/docs/hi/cli/configuration.md +63 -0
  220. package/docs/hi/cli/debug.md +46 -0
  221. package/docs/hi/cli/doc-review.md +43 -0
  222. package/docs/hi/cli/doc-translate.md +132 -0
  223. package/docs/hi/cli/editor.md +28 -0
  224. package/docs/hi/cli/fill.md +130 -0
  225. package/docs/hi/cli/index.md +163 -0
  226. package/docs/hi/cli/list.md +53 -0
  227. package/docs/hi/cli/live.md +41 -0
  228. package/docs/hi/cli/pull.md +78 -0
  229. package/docs/hi/cli/push.md +98 -0
  230. package/docs/hi/cli/sdk.md +67 -0
  231. package/docs/hi/cli/test.md +76 -0
  232. package/docs/hi/cli/transform.md +65 -0
  233. package/docs/hi/cli/version.md +24 -0
  234. package/docs/hi/cli/watch.md +37 -0
  235. package/docs/hi/intlayer_with_tanstack.md +1 -1
  236. package/docs/hi/intlayer_with_vite+solid.md +1 -1
  237. package/docs/hi/packages/intlayer/getPrefix.md +217 -0
  238. package/docs/id/cli/build.md +64 -0
  239. package/docs/id/cli/configuration.md +62 -0
  240. package/docs/id/cli/debug.md +46 -0
  241. package/docs/id/cli/doc-review.md +43 -0
  242. package/docs/id/cli/doc-translate.md +132 -0
  243. package/docs/id/cli/editor.md +28 -0
  244. package/docs/id/cli/fill.md +130 -0
  245. package/docs/id/cli/index.md +163 -0
  246. package/docs/id/cli/list.md +53 -0
  247. package/docs/id/cli/live.md +41 -0
  248. package/docs/id/cli/pull.md +78 -0
  249. package/docs/id/cli/push.md +98 -0
  250. package/docs/id/cli/sdk.md +67 -0
  251. package/docs/id/cli/test.md +76 -0
  252. package/docs/id/cli/transform.md +65 -0
  253. package/docs/id/cli/version.md +24 -0
  254. package/docs/id/cli/watch.md +37 -0
  255. package/docs/id/packages/intlayer/getPrefix.md +210 -0
  256. package/docs/it/cli/build.md +64 -0
  257. package/docs/it/cli/configuration.md +63 -0
  258. package/docs/it/cli/debug.md +46 -0
  259. package/docs/it/cli/doc-review.md +43 -0
  260. package/docs/it/cli/doc-translate.md +132 -0
  261. package/docs/it/cli/editor.md +28 -0
  262. package/docs/it/cli/fill.md +130 -0
  263. package/docs/it/cli/index.md +158 -0
  264. package/docs/it/cli/list.md +53 -0
  265. package/docs/it/cli/live.md +41 -0
  266. package/docs/it/cli/pull.md +78 -0
  267. package/docs/it/cli/push.md +98 -0
  268. package/docs/it/cli/sdk.md +67 -0
  269. package/docs/it/cli/test.md +76 -0
  270. package/docs/it/cli/transform.md +65 -0
  271. package/docs/it/cli/version.md +24 -0
  272. package/docs/it/cli/watch.md +39 -0
  273. package/docs/it/packages/intlayer/getPrefix.md +211 -0
  274. package/docs/ja/cli/build.md +78 -0
  275. package/docs/ja/cli/configuration.md +63 -0
  276. package/docs/ja/cli/debug.md +46 -0
  277. package/docs/ja/cli/doc-review.md +43 -0
  278. package/docs/ja/cli/doc-translate.md +132 -0
  279. package/docs/ja/cli/editor.md +28 -0
  280. package/docs/ja/cli/fill.md +130 -0
  281. package/docs/ja/cli/index.md +163 -0
  282. package/docs/ja/cli/list.md +53 -0
  283. package/docs/ja/cli/live.md +41 -0
  284. package/docs/ja/cli/pull.md +78 -0
  285. package/docs/ja/cli/push.md +113 -0
  286. package/docs/ja/cli/sdk.md +67 -0
  287. package/docs/ja/cli/test.md +76 -0
  288. package/docs/ja/cli/transform.md +65 -0
  289. package/docs/ja/cli/version.md +24 -0
  290. package/docs/ja/cli/watch.md +37 -0
  291. package/docs/ja/packages/intlayer/getPrefix.md +212 -0
  292. package/docs/ko/cli/build.md +64 -0
  293. package/docs/ko/cli/configuration.md +63 -0
  294. package/docs/ko/cli/debug.md +46 -0
  295. package/docs/ko/cli/doc-review.md +43 -0
  296. package/docs/ko/cli/doc-translate.md +132 -0
  297. package/docs/ko/cli/editor.md +28 -0
  298. package/docs/ko/cli/fill.md +130 -0
  299. package/docs/ko/cli/index.md +163 -0
  300. package/docs/ko/cli/list.md +53 -0
  301. package/docs/ko/cli/live.md +41 -0
  302. package/docs/ko/cli/pull.md +78 -0
  303. package/docs/ko/cli/push.md +113 -0
  304. package/docs/ko/cli/sdk.md +67 -0
  305. package/docs/ko/cli/test.md +76 -0
  306. package/docs/ko/cli/transform.md +65 -0
  307. package/docs/ko/cli/version.md +24 -0
  308. package/docs/ko/cli/watch.md +37 -0
  309. package/docs/ko/packages/intlayer/getPrefix.md +213 -0
  310. package/docs/pl/cli/build.md +64 -0
  311. package/docs/pl/cli/configuration.md +63 -0
  312. package/docs/pl/cli/debug.md +46 -0
  313. package/docs/pl/cli/doc-review.md +43 -0
  314. package/docs/pl/cli/doc-translate.md +132 -0
  315. package/docs/pl/cli/editor.md +28 -0
  316. package/docs/pl/cli/fill.md +130 -0
  317. package/docs/pl/cli/index.md +163 -0
  318. package/docs/pl/cli/list.md +53 -0
  319. package/docs/pl/cli/live.md +41 -0
  320. package/docs/pl/cli/pull.md +78 -0
  321. package/docs/pl/cli/push.md +98 -0
  322. package/docs/pl/cli/sdk.md +67 -0
  323. package/docs/pl/cli/test.md +76 -0
  324. package/docs/pl/cli/transform.md +65 -0
  325. package/docs/pl/cli/version.md +24 -0
  326. package/docs/pl/cli/watch.md +39 -0
  327. package/docs/pl/packages/intlayer/getPrefix.md +217 -0
  328. package/docs/pt/cli/build.md +64 -0
  329. package/docs/pt/cli/configuration.md +63 -0
  330. package/docs/pt/cli/debug.md +46 -0
  331. package/docs/pt/cli/doc-review.md +43 -0
  332. package/docs/pt/cli/doc-translate.md +132 -0
  333. package/docs/pt/cli/editor.md +28 -0
  334. package/docs/pt/cli/fill.md +130 -0
  335. package/docs/pt/cli/index.md +163 -0
  336. package/docs/pt/cli/list.md +53 -0
  337. package/docs/pt/cli/live.md +41 -0
  338. package/docs/pt/cli/pull.md +78 -0
  339. package/docs/pt/cli/push.md +98 -0
  340. package/docs/pt/cli/sdk.md +67 -0
  341. package/docs/pt/cli/test.md +76 -0
  342. package/docs/pt/cli/transform.md +65 -0
  343. package/docs/pt/cli/version.md +24 -0
  344. package/docs/pt/cli/watch.md +39 -0
  345. package/docs/pt/packages/intlayer/getPrefix.md +217 -0
  346. package/docs/ru/cli/build.md +64 -0
  347. package/docs/ru/cli/configuration.md +63 -0
  348. package/docs/ru/cli/debug.md +46 -0
  349. package/docs/ru/cli/doc-review.md +43 -0
  350. package/docs/ru/cli/doc-translate.md +132 -0
  351. package/docs/ru/cli/editor.md +28 -0
  352. package/docs/ru/cli/fill.md +130 -0
  353. package/docs/ru/cli/index.md +163 -0
  354. package/docs/ru/cli/list.md +53 -0
  355. package/docs/ru/cli/live.md +41 -0
  356. package/docs/ru/cli/pull.md +78 -0
  357. package/docs/ru/cli/push.md +98 -0
  358. package/docs/ru/cli/sdk.md +67 -0
  359. package/docs/ru/cli/test.md +76 -0
  360. package/docs/ru/cli/transform.md +65 -0
  361. package/docs/ru/cli/version.md +24 -0
  362. package/docs/ru/cli/watch.md +39 -0
  363. package/docs/ru/packages/intlayer/getPrefix.md +213 -0
  364. package/docs/tr/CI_CD.md +2 -2
  365. package/docs/tr/cli/build.md +64 -0
  366. package/docs/tr/cli/configuration.md +63 -0
  367. package/docs/tr/cli/debug.md +46 -0
  368. package/docs/tr/cli/doc-review.md +43 -0
  369. package/docs/tr/cli/doc-translate.md +132 -0
  370. package/docs/tr/cli/editor.md +28 -0
  371. package/docs/tr/cli/fill.md +130 -0
  372. package/docs/tr/cli/index.md +163 -0
  373. package/docs/tr/cli/list.md +53 -0
  374. package/docs/tr/cli/live.md +41 -0
  375. package/docs/tr/cli/pull.md +78 -0
  376. package/docs/tr/cli/push.md +98 -0
  377. package/docs/tr/cli/sdk.md +67 -0
  378. package/docs/tr/cli/test.md +76 -0
  379. package/docs/tr/cli/transform.md +65 -0
  380. package/docs/tr/cli/version.md +24 -0
  381. package/docs/tr/cli/watch.md +39 -0
  382. package/docs/tr/dictionary/condition.md +1 -1
  383. package/docs/tr/dictionary/enumeration.md +1 -1
  384. package/docs/tr/dictionary/file.md +1 -1
  385. package/docs/tr/dictionary/gender.md +1 -1
  386. package/docs/tr/dictionary/insertion.md +1 -1
  387. package/docs/tr/dictionary/markdown.md +1 -1
  388. package/docs/tr/dictionary/nesting.md +1 -1
  389. package/docs/tr/index.md +1 -1
  390. package/docs/tr/intlayer_with_angular.md +1 -1
  391. package/docs/tr/intlayer_with_create_react_app.md +1 -1
  392. package/docs/tr/intlayer_with_lynx+react.md +1 -1
  393. package/docs/tr/intlayer_with_nextjs_15.md +1 -1
  394. package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
  395. package/docs/tr/intlayer_with_nuxt.md +1 -1
  396. package/docs/tr/intlayer_with_react_native+expo.md +1 -1
  397. package/docs/tr/intlayer_with_vite+preact.md +1 -1
  398. package/docs/tr/intlayer_with_vite+react.md +1 -1
  399. package/docs/tr/intlayer_with_vite+solid.md +1 -1
  400. package/docs/tr/intlayer_with_vite+vue.md +1 -1
  401. package/docs/tr/introduction.md +1 -1
  402. package/docs/tr/mcp_server.md +1 -1
  403. package/docs/tr/packages/intlayer/getPrefix.md +213 -0
  404. package/docs/tr/per_locale_file.md +1 -1
  405. package/docs/tr/roadmap.md +1 -1
  406. package/docs/vi/cli/build.md +64 -0
  407. package/docs/vi/cli/configuration.md +63 -0
  408. package/docs/vi/cli/debug.md +46 -0
  409. package/docs/vi/cli/doc-review.md +43 -0
  410. package/docs/vi/cli/doc-translate.md +132 -0
  411. package/docs/vi/cli/editor.md +28 -0
  412. package/docs/vi/cli/fill.md +130 -0
  413. package/docs/vi/cli/index.md +163 -0
  414. package/docs/vi/cli/list.md +53 -0
  415. package/docs/vi/cli/live.md +41 -0
  416. package/docs/vi/cli/pull.md +78 -0
  417. package/docs/vi/cli/push.md +98 -0
  418. package/docs/vi/cli/sdk.md +67 -0
  419. package/docs/vi/cli/test.md +76 -0
  420. package/docs/vi/cli/transform.md +65 -0
  421. package/docs/vi/cli/version.md +24 -0
  422. package/docs/vi/cli/watch.md +37 -0
  423. package/docs/vi/packages/intlayer/getPrefix.md +213 -0
  424. package/docs/zh/cli/build.md +64 -0
  425. package/docs/zh/cli/configuration.md +63 -0
  426. package/docs/zh/cli/debug.md +46 -0
  427. package/docs/zh/cli/doc-review.md +43 -0
  428. package/docs/zh/cli/doc-translate.md +132 -0
  429. package/docs/zh/cli/editor.md +28 -0
  430. package/docs/zh/cli/fill.md +130 -0
  431. package/docs/zh/cli/index.md +168 -0
  432. package/docs/zh/cli/list.md +53 -0
  433. package/docs/zh/cli/live.md +41 -0
  434. package/docs/zh/cli/pull.md +78 -0
  435. package/docs/zh/cli/push.md +113 -0
  436. package/docs/zh/cli/sdk.md +67 -0
  437. package/docs/zh/cli/test.md +76 -0
  438. package/docs/zh/cli/transform.md +65 -0
  439. package/docs/zh/cli/version.md +24 -0
  440. package/docs/zh/cli/watch.md +37 -0
  441. package/docs/zh/packages/intlayer/getPrefix.md +213 -0
  442. package/package.json +7 -7
  443. package/src/generated/blog.entry.ts +19 -0
  444. package/src/generated/docs.entry.ts +323 -19
  445. package/docs/ar/intlayer_cli.md +0 -614
  446. package/docs/de/intlayer_cli.md +0 -615
  447. package/docs/en/intlayer_cli.md +0 -897
  448. package/docs/en-GB/intlayer_cli.md +0 -615
  449. package/docs/es/intlayer_cli.md +0 -614
  450. package/docs/fr/intlayer_cli.md +0 -614
  451. package/docs/hi/intlayer_cli.md +0 -616
  452. package/docs/id/intlayer_cli.md +0 -886
  453. package/docs/it/intlayer_cli.md +0 -610
  454. package/docs/ja/intlayer_cli.md +0 -616
  455. package/docs/ko/intlayer_cli.md +0 -614
  456. package/docs/pl/intlayer_cli.md +0 -893
  457. package/docs/pt/intlayer_cli.md +0 -615
  458. package/docs/ru/intlayer_cli.md +0 -885
  459. package/docs/tr/intlayer_cli.md +0 -614
  460. package/docs/vi/intlayer_cli.md +0 -886
  461. package/docs/zh/intlayer_cli.md +0 -613
@@ -176,7 +176,6 @@ export default config;
176
176
  ```plaintext fileName=".gitignore"
177
177
  # Intlayer에서 생성된 파일 무시
178
178
  .intlayer
179
- intl
180
179
  ```
181
180
 
182
181
  이 파일들은 빌드 과정에서 자동으로 다시 생성되므로 저장소에 커밋할 필요가 없습니다.
@@ -166,7 +166,6 @@ export default config;
166
166
  ```plaintext fileName=".gitignore"
167
167
  # Intlayer에서 생성된 파일 무시
168
168
  .intlayer
169
- intl
170
169
  ```
171
170
 
172
171
  이 파일들은 빌드 과정에서 자동으로 다시 생성되므로 저장소에 커밋할 필요가 없습니다.
@@ -0,0 +1,138 @@
1
+ ---
2
+ createdAt: 2025-11-24
3
+ updatedAt: 2025-11-24
4
+ title: Kompilator kontra deklaratywne i18n
5
+ description: Eksploracja kompromisów architektonicznych między "magiczna" internacjonalizacją opartą na kompilatorze a explicytnym, deklaratywnym zarządzaniem treścią.
6
+ keywords:
7
+ - Intlayer
8
+ - Internacjonalizacja
9
+ - Blog
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ - i18n
14
+ - Kompilator
15
+ - Deklaratywne
16
+ slugs:
17
+ - compiler-vs-declarative-i18n
18
+ - blog
19
+ - i18n
20
+ ---
21
+
22
+ # Argumenty za i przeciw internacjonalizacji opartej na kompilatorze
23
+
24
+ Jeśli tworzysz aplikacje webowe od ponad dekady, wiesz, że internacjonalizacja (i18n) zawsze była punktem zapalnym. Często jest to zadanie, którego nikt nie chce wykonywać — wyciąganie stringów, zarządzanie plikami JSON i martwienie się o zasady pluralizacji.
25
+
26
+ Ostatnio pojawiła się nowa fala narzędzi i18n opartych na "kompilatorze", obiecujących, że ta uciążliwość zniknie. Przekaz jest kuszący: **Po prostu pisz tekst w swoich komponentach, a narzędzie budujące zajmie się resztą.** Bez kluczy, bez importów, po prostu magia.
27
+
28
+ Ale jak to bywa ze wszystkimi abstrakcjami w inżynierii oprogramowania, magia ma swoją cenę.
29
+
30
+ W tym wpisie na blogu przyjrzymy się przejściu od bibliotek deklaratywnych do podejść opartych na kompilatorze, ukrytym długom architektonicznym, które one wprowadzają, oraz dlaczego "nudny" sposób może nadal być najlepszym rozwiązaniem dla profesjonalnych aplikacji.
31
+
32
+ ## Krótka historia tłumaczeń
33
+
34
+ Aby zrozumieć, gdzie jesteśmy, musimy spojrzeć wstecz, skąd zaczęliśmy.
35
+
36
+ Około 2011–2012 krajobraz JavaScript wyglądał zupełnie inaczej. Bundlery takie jak znamy je dziś (Webpack, Vite) nie istniały lub były we wczesnym stadium rozwoju. Sklejaliśmy skrypty bezpośrednio w przeglądarce. W tym okresie powstały biblioteki takie jak **i18next**.
37
+
38
+ Rozwiązały one problem w jedyny możliwy wtedy sposób: **Słowniki w czasie wykonywania (Runtime Dictionaries)**. Ładowało się ogromny obiekt JSON do pamięci, a funkcja wyszukiwała klucze na bieżąco. Było to niezawodne, jawne i działało wszędzie.
39
+
40
+ Przenieśmy się do dziś. Mamy potężne kompilatory (SWC, bundlery oparte na Rust), które potrafią analizować Abstrakcyjne Drzewa Składniowe (AST) w ciągu milisekund. Ta moc dała początek nowemu pomysłowi: _Dlaczego ręcznie zarządzamy kluczami? Dlaczego kompilator nie może po prostu zobaczyć tekstu "Hello World" i zamienić go za nas?_
41
+
42
+ Tak narodziło się i18n oparte na kompilatorze.
43
+
44
+ ## Urok Kompilatora (Podejście „Magiczne”)
45
+
46
+ Istnieje powód, dla którego to nowe podejście zyskuje na popularności. Dla dewelopera doświadczenie jest niesamowite.
47
+
48
+ ### 1. Szybkość i „Flow”
49
+
50
+ Kiedy jesteś w strefie, zatrzymanie się, by wymyślić nazwę zmiennej (`home_hero_title_v2`), przerywa twój flow. Przy podejściu kompilatorowym wpisujesz `<p>Welcome back</p>` i idziesz dalej. Tarcie jest zerowe.
51
+
52
+ ### 2. Misja Ratunkowa dla Dziedzictwa
53
+
54
+ Wyobraź sobie, że dziedziczysz ogromną bazę kodu z 5000 komponentów i zerowymi tłumaczeniami. Dopasowanie tego do ręcznego systemu opartego na kluczach to koszmar trwający miesiące. Narzędzie oparte na kompilatorze działa jako strategia ratunkowa, natychmiast wyciągając tysiące stringów bez konieczności ręcznego dotykania choćby jednego pliku.
55
+
56
+ ### 3. Era AI
57
+
58
+ To nowoczesna korzyść, której nie powinniśmy pomijać. Asystenci kodowania AI (tacy jak Copilot czy ChatGPT) naturalnie generują standardowy JSX/HTML. Nie znają twojego specyficznego schematu kluczy tłumaczeń.
59
+
60
+ - **Deklaratywne:** Musisz przepisać wynik AI, aby zastąpić tekst kluczami.
61
+ - **Kompilator:** Kopiujesz i wklejasz kod AI i po prostu działa.
62
+
63
+ ## Sprawdzenie Rzeczywistości: Dlaczego „Magia” jest Niebezpieczna
64
+
65
+ Chociaż „magia” jest kusząca, abstrakcja przecieka. Poleganie na narzędziu budującym, które ma rozumieć intencje człowieka, wprowadza architektoniczną kruchość.
66
+
67
+ ### 1. Kruchość Heurystyczna (Gra w Zgadywanie)
68
+
69
+ Kompilator musi zgadnąć, co jest treścią, a co kodem.
70
+
71
+ - Czy `className="active"` jest tłumaczone? To jest string.
72
+ - Czy `status="pending"` jest tłumaczone?
73
+ - Czy `<MyComponent errorMessage="An error occurred" />` jest tłumaczone?
74
+ - Czy identyfikator produktu taki jak `"AX-99"` jest tłumaczony?
75
+
76
+ Nieuchronnie kończysz na „walce” z kompilatorem, dodając specyficzne komentarze (np. `// ignore-translation`), aby zapobiec złamaniu logiki twojej aplikacji.
77
+
78
+ ### 2. Twardy Limit Danych Dynamicznych
79
+
80
+ Ekstrakcja przez kompilator opiera się na **analizie statycznej**. Musi zobaczyć dosłowny ciąg znaków w twoim kodzie, aby wygenerować stabilny identyfikator.
81
+ Jeśli twoje API zwraca kod błędu w postaci ciągu znaków, np. `server_error`, nie możesz go przetłumaczyć za pomocą kompilatora, ponieważ kompilator nie wie o istnieniu tego ciągu w czasie budowania. Jesteś zmuszony do stworzenia drugiego systemu działającego tylko w czasie wykonywania, przeznaczonego wyłącznie dla danych dynamicznych.
82
+
83
+ ### 3. „Eksplozja Fragmentów” i Kaskady Sieciowe
84
+
85
+ Aby umożliwić tree-shaking, narzędzia kompilatora często dzielą tłumaczenia na poszczególne komponenty.
86
+
87
+ - **Konsekwencja:** Pojedyncze wyświetlenie strony z 50 małymi komponentami może wywołać **50 oddzielnych żądań HTTP** dla drobnych fragmentów tłumaczeń. Nawet przy HTTP/2 tworzy to efekt wodospadu sieciowego, który sprawia, że Twoja aplikacja działa wolniej w porównaniu do załadowania pojedynczego, zoptymalizowanego pakietu językowego.
88
+
89
+ ### 4. Obciążenie wydajności w czasie wykonywania
90
+
91
+ Aby tłumaczenia były reaktywne (tak, aby aktualizowały się natychmiast po zmianie języka), kompilator często wstrzykuje hooki zarządzania stanem do _każdego_ komponentu.
92
+
93
+ - **Koszt:** Jeśli renderujesz listę 5 000 elementów, inicjujesz 5 000 hooków `useState` i `useEffect` wyłącznie dla tekstu. Zużywa to pamięć i cykle CPU, które biblioteki deklaratywne (zazwyczaj używające pojedynczego dostawcy Context) oszczędzają.
94
+
95
+ ## Pułapka: Vendor Lock-in
96
+
97
+ To prawdopodobnie najniebezpieczniejszy aspekt i18n opartego na kompilatorze.
98
+
99
+ W bibliotece deklaratywnej Twój kod źródłowy zawiera wyraźny zamiar. Posiadasz klucze. Jeśli zmienisz bibliotekę, wystarczy, że zmienisz import.
100
+
101
+ W podejściu opartym na kompilatorze, **Twój kod źródłowy to tylko tekst w języku angielskim.** „Logika tłumaczenia” istnieje tylko w konfiguracji wtyczki build.
102
+ Jeśli ta biblioteka przestanie być utrzymywana lub jeśli ją przerosniesz, utkniesz. Nie możesz łatwo „wyjść” z niej, ponieważ nie masz żadnych kluczy tłumaczeń w swoim kodzie źródłowym. Musiałbyś ręcznie przepisać całą aplikację, aby przejść na inne rozwiązanie.
103
+
104
+ ## Druga strona medalu: Ryzyka podejścia deklaratywnego
105
+
106
+ Aby być sprawiedliwym, tradycyjny sposób deklaratywny też nie jest idealny. Ma swoje własne „pułapki”.
107
+
108
+ 1. **Piekło przestrzeni nazw:** Często musisz ręcznie zarządzać, które pliki JSON załadować (`common.json`, `dashboard.json`, `footer.json`). Jeśli zapomnisz o jednym, użytkownik zobaczy surowe klucze.
109
+ 2. **Nadmierne pobieranie:** Bez ostrożnej konfiguracji bardzo łatwo jest przypadkowo załadować _wszystkie_ klucze tłumaczeń dla _wszystkich_ stron podczas początkowego ładowania, co powoduje nadmierne powiększenie rozmiaru paczki.
110
+ 3. **Sync Drift:** Często zdarza się, że klucze pozostają w pliku JSON długo po usunięciu komponentu, który ich używał. Twoje pliki tłumaczeń rosną w nieskończoność, wypełnione „zombie kluczami”.
111
+
112
+ ## Środkowa Droga Intlayer
113
+
114
+ To właśnie tutaj narzędzia takie jak **Intlayer** próbują wprowadzać innowacje. Intlayer rozumie, że chociaż kompilatory są potężne, to ukryta magia jest niebezpieczna.
115
+
116
+ Intlayer oferuje unikalne polecenie **`transform`**. Zamiast po prostu wykonywać magię w ukrytym kroku budowania, może faktycznie **przepisać kod twojego komponentu**. Skanuje twój tekst i zastępuje go jawnie zadeklarowaną zawartością w twojej bazie kodu.
117
+
118
+ Daje to najlepsze z obu światów:
119
+
120
+ 1. **Szczegółowość:** Trzymasz tłumaczenia blisko swoich komponentów (poprawiając modularność i tree-shaking).
121
+ 2. **Bezpieczeństwo:** Tłumaczenie staje się jawnie zapisanym kodem, a nie ukrytą magią podczas kompilacji.
122
+ 3. **Brak uzależnienia:** Ponieważ kod jest przekształcany do standardowej, deklaratywnej struktury w Twoim repozytorium, nie ukrywasz logiki w wtyczce webpack.
123
+
124
+ ## Podsumowanie
125
+
126
+ Więc, którą opcję powinieneś wybrać?
127
+
128
+ **Jeśli jesteś Junior Developerem, Samodzielnym Założycielem lub tworzysz MVP:**
129
+ Podejście oparte na kompilatorze jest dobrym wyborem. Pozwala Ci działać niesamowicie szybko. Nie musisz martwić się strukturą plików ani kluczami. Po prostu budujesz. Dług techniczny to problem dla „Przyszłego Ciebie”.
130
+
131
+ **Jeśli tworzysz profesjonalną aplikację klasy enterprise:**
132
+ Magia zazwyczaj jest złym pomysłem. Potrzebujesz kontroli.
133
+
134
+ - Musisz obsługiwać dynamiczne dane z backendów.
135
+ - Musisz zapewnić wydajność na urządzeniach o niskich parametrach (unikając eksplozji hooków).
136
+ - Musisz upewnić się, że nie jesteś na stałe związany z konkretnym narzędziem do budowania.
137
+
138
+ W przypadku profesjonalnych aplikacji, **Deklaratywne Zarządzanie Treścią** (takie jak Intlayer lub uznane biblioteki) pozostaje złotym standardem. Oddziela Twoje obszary odpowiedzialności, utrzymuje czystą architekturę i zapewnia, że zdolność Twojej aplikacji do obsługi wielu języków nie zależy od „czarnej skrzynki” kompilatora, która zgaduje Twoje intencje.
@@ -187,7 +187,6 @@ Wyklucz generowane pliki z kontroli wersji:
187
187
  ```plaintext fileName=".gitignore"
188
188
  # Ignoruj pliki generowane przez Intlayer
189
189
  .intlayer
190
- intl
191
190
  ```
192
191
 
193
192
  Te pliki są automatycznie generowane podczas procesu budowania i nie muszą być zatwierdzane do Twojego repozytorium.
@@ -166,7 +166,6 @@ Wyklucz generowane pliki z kontroli wersji:
166
166
  ```plaintext fileName=".gitignore"
167
167
  # Ignoruj pliki generowane przez Intlayer
168
168
  .intlayer
169
- intl
170
169
  ```
171
170
 
172
171
  Te pliki są automatycznie generowane podczas procesu budowania i nie muszą być zatwierdzane do Twojego repozytorium.
@@ -0,0 +1,138 @@
1
+ ---
2
+ createdAt: 2025-11-24
3
+ updatedAt: 2025-11-24
4
+ title: Compilador vs. i18n Declarativo
5
+ description: Explorando as trocas arquitetônicas entre a internacionalização "mágica" baseada em compilador e o gerenciamento explícito de conteúdo declarativo.
6
+ keywords:
7
+ - Intlayer
8
+ - Internacionalização
9
+ - Blog
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ - i18n
14
+ - Compilador
15
+ - Declarativo
16
+ slugs:
17
+ - compiler-vs-declarative-i18n
18
+ - blog
19
+ - i18n
20
+ ---
21
+
22
+ # O Caso a Favor e Contra a i18n Baseada em Compilador
23
+
24
+ Se você tem construído aplicações web por mais de uma década, sabe que a Internacionalização (i18n) sempre foi um ponto de atrito. Frequentemente é a tarefa que ninguém quer fazer — extrair strings, gerenciar arquivos JSON e se preocupar com regras de pluralização.
25
+
26
+ Recentemente, uma nova onda de ferramentas de i18n "baseadas em compilador" surgiu, prometendo fazer essa dor desaparecer. A proposta é sedutora: **Basta escrever o texto nos seus componentes e deixar a ferramenta de build cuidar do resto.** Sem chaves, sem imports, apenas magia.
27
+
28
+ Mas, como em todas as abstrações na engenharia de software, magia tem um preço.
29
+
30
+ Neste post do blog, exploraremos a mudança das bibliotecas declarativas para abordagens baseadas em compilador, as dívidas arquitetônicas ocultas que elas introduzem e por que o jeito "chato" pode ainda ser o melhor para aplicações profissionais.
31
+
32
+ ## Uma Breve História da Tradução
33
+
34
+ Para entender onde estamos, precisamos olhar para onde começamos.
35
+
36
+ Por volta de 2011–2012, o cenário do JavaScript era muito diferente. Bundlers como os conhecemos hoje (Webpack, Vite) não existiam ou estavam em sua infância. Estávamos juntando scripts diretamente no navegador. Nessa época, bibliotecas como **i18next** nasceram.
37
+
38
+ Elas resolveram o problema da única forma possível na época: **Dicionários em tempo de execução**. Você carregava um enorme objeto JSON na memória, e uma função buscava as chaves dinamicamente. Era confiável, explícito e funcionava em qualquer lugar.
39
+
40
+ Avançando para hoje. Temos compiladores poderosos (SWC, bundlers baseados em Rust) que conseguem analisar Árvores de Sintaxe Abstrata (AST) em milissegundos. Esse poder deu origem a uma nova ideia: _Por que gerenciar chaves manualmente? Por que o compilador não pode simplesmente ver o texto "Hello World" e substituí-lo para nós?_
41
+
42
+ Assim, nasceu o i18n baseado em compilador.
43
+
44
+ ## O Encanto do Compilador (A Abordagem "Mágica")
45
+
46
+ Há uma razão pela qual essa nova abordagem está em alta. Para um desenvolvedor, a experiência é incrível.
47
+
48
+ ### 1. Velocidade e "Flow"
49
+
50
+ Quando você está concentrado, parar para pensar em um nome de variável (`home_hero_title_v2`) quebra seu fluxo. Com a abordagem do compilador, você digita `<p>Welcome back</p>` e continua. O atrito é zero.
51
+
52
+ ### 2. A Missão de Resgate do Legado
53
+
54
+ Imagine herdar uma base de código enorme com 5.000 componentes e zero traduções. Adaptar isso para um sistema manual baseado em chaves é um pesadelo que dura meses. Uma ferramenta baseada em compilador atua como uma estratégia de resgate, extraindo instantaneamente milhares de strings sem que você precise tocar manualmente em um único arquivo.
55
+
56
+ ### 3. A Era da IA
57
+
58
+ Este é um benefício moderno que não devemos ignorar. Assistentes de codificação com IA (como Copilot ou ChatGPT) geram naturalmente JSX/HTML padrão. Eles não conhecem seu esquema específico de chaves de tradução.
59
+
60
+ - **Declarativo:** Você precisa reescrever a saída da IA para substituir o texto por chaves.
61
+ - **Compilador:** Você copia e cola o código da IA, e ele simplesmente funciona.
62
+
63
+ ## A Verificação da Realidade: Por que a "Magia" é Perigosa
64
+
65
+ Embora a "magia" seja atraente, a abstração apresenta vazamentos. Confiar em uma ferramenta de build para entender a intenção humana introduz fragilidade arquitetural.
66
+
67
+ ### 1. Fragilidade Heurística (O Jogo de Adivinhação)
68
+
69
+ O compilador precisa adivinhar o que é conteúdo e o que é código.
70
+
71
+ - `className="active"` é traduzido? É uma string.
72
+ - `status="pending"` é traduzido?
73
+ - O `<MyComponent errorMessage="An error occurred" />` é traduzido?
74
+ - Um ID de produto como `"AX-99"` é traduzido?
75
+
76
+ Inevitavelmente, você acaba "lutando" contra o compilador, adicionando comentários específicos (como `// ignore-translation`) para evitar que ele quebre a lógica da sua aplicação.
77
+
78
+ ### 2. O Limite Rígido dos Dados Dinâmicos
79
+
80
+ A extração pelo compilador depende de **análise estática**. Ele precisa ver a string literal no seu código para gerar um ID estável.
81
+ Se sua API retorna uma string de código de erro como `server_error`, você não pode traduzi-la com um compilador porque ele não sabe que essa string existe em tempo de build. Você é forçado a construir um sistema secundário "apenas em tempo de execução" só para dados dinâmicos.
82
+
83
+ ### 3. "Explosão de Chunks" e Cascatas de Rede
84
+
85
+ Para permitir tree-shaking, as ferramentas de compilação frequentemente dividem as traduções por componente.
86
+
87
+ - **A Consequência:** Uma única visualização de página com 50 pequenos componentes pode disparar **50 requisições HTTP separadas** para pequenos fragmentos de tradução. Mesmo com HTTP/2, isso cria um efeito cascata na rede que faz sua aplicação parecer lenta em comparação ao carregamento de um único pacote de idioma otimizado.
88
+
89
+ ### 4. Sobrecarga de Performance em Tempo de Execução
90
+
91
+ Para tornar as traduções reativas (para que atualizem instantaneamente quando você troca de idioma), o compilador frequentemente injeta hooks de gerenciamento de estado em _cada_ componente.
92
+
93
+ - **O Custo:** Se você renderizar uma lista de 5.000 itens, estará inicializando 5.000 hooks `useState` e `useEffect` apenas para texto. Isso consome memória e ciclos de CPU que bibliotecas declarativas (que normalmente usam um único provedor Context) economizam.
94
+
95
+ ## A Armadilha: Vendor Lock-in
96
+
97
+ Este é, sem dúvida, o aspecto mais perigoso da i18n baseada em compilador.
98
+
99
+ Em uma biblioteca declarativa, seu código-fonte contém a intenção explícita. Você possui as chaves. Se trocar de biblioteca, basta alterar a importação.
100
+
101
+ Em uma abordagem baseada em compilador, **seu código-fonte é apenas texto em inglês.** A "lógica de tradução" existe apenas dentro da configuração do plugin de build.
102
+ Se essa biblioteca deixar de ser mantida, ou se você ultrapassar suas limitações, ficará preso. Você não pode "ejetar" facilmente porque não há nenhuma chave de tradução no seu código-fonte. Você teria que reescrever manualmente toda a sua aplicação para migrar para outra solução.
103
+
104
+ ## O Outro Lado: Riscos da Abordagem Declarativa
105
+
106
+ Para ser justo, a forma tradicional declarativa também não é perfeita. Ela tem seu próprio conjunto de "armadilhas".
107
+
108
+ 1. **Inferno dos Namespaces:** Frequentemente, você precisa gerenciar manualmente quais arquivos JSON carregar (`common.json`, `dashboard.json`, `footer.json`). Se esquecer algum, o usuário verá as chaves brutas.
109
+ 2. **Carregamento Excessivo:** Sem uma configuração cuidadosa, é muito fácil carregar acidentalmente _todas_ as suas chaves de tradução para _todas_ as páginas no carregamento inicial, inchando o tamanho do seu bundle.
110
+ 3. **Descompasso de Sincronização:** É comum que chaves permaneçam no arquivo JSON muito tempo depois do componente que as utiliza ter sido deletado. Seus arquivos de tradução crescem indefinidamente, cheios de "chaves zumbi".
111
+
112
+ ## O Meio-Termo do Intlayer
113
+
114
+ É aqui que ferramentas como o **Intlayer** estão tentando inovar. O Intlayer entende que, embora compiladores sejam poderosos, magia implícita é perigosa.
115
+
116
+ O Intlayer oferece um comando único chamado **`transform`**. Em vez de apenas fazer mágica na etapa oculta de build, ele pode realmente **reescrever o código do seu componente**. Ele escaneia seu texto e o substitui por declarações explícitas de conteúdo na sua base de código.
117
+
118
+ Isso lhe dá o melhor dos dois mundos:
119
+
120
+ 1. **Granularidade:** Você mantém suas traduções próximas aos seus componentes (melhorando modularidade e tree-shaking).
121
+ 2. **Segurança:** A tradução torna-se código explícito, não uma mágica oculta em tempo de build.
122
+ 3. **Sem Aprisionamento:** Como o código é transformado em uma estrutura declarativa padrão dentro do seu repositório, você não está escondendo lógica em um plugin do webpack.
123
+
124
+ ## Conclusão
125
+
126
+ Então, qual você deve escolher?
127
+
128
+ **Se você é um Desenvolvedor Júnior, um Fundador Solo ou está construindo um MVP:**
129
+ A abordagem baseada em compilador é uma escolha válida. Ela permite que você avance incrivelmente rápido. Você não precisa se preocupar com estruturas de arquivos ou chaves. Você simplesmente constrói. A dívida técnica é um problema para o "Você do Futuro".
130
+
131
+ **Se você está construindo uma Aplicação Profissional, de Nível Empresarial:**
132
+ Mágica geralmente é uma má ideia. Você precisa de controle.
133
+
134
+ - Você precisa lidar com dados dinâmicos provenientes de backends.
135
+ - Você precisa garantir desempenho em dispositivos de baixo custo (evitando explosões de hooks).
136
+ - Você precisa garantir que não fique preso a uma ferramenta de build específica para sempre.
137
+
138
+ Para aplicativos profissionais, **Gerenciamento Declarativo de Conteúdo** (como Intlayer ou bibliotecas consolidadas) continua sendo o padrão ouro. Ele separa suas preocupações, mantém sua arquitetura limpa e garante que a capacidade do seu aplicativo de falar múltiplos idiomas não dependa de um compilador "caixa preta" tentando adivinhar suas intenções.
@@ -176,7 +176,6 @@ Exclua arquivos gerados do controle de versão:
176
176
  ```plaintext fileName=".gitignore"
177
177
  # Ignorar arquivos gerados pelo Intlayer
178
178
  .intlayer
179
- intl
180
179
  ```
181
180
 
182
181
  Esses arquivos são automaticamente regenerados durante o processo de build e não precisam ser commitados no seu repositório.
@@ -166,7 +166,6 @@ Exclua arquivos gerados do controle de versão:
166
166
  ```plaintext fileName=".gitignore"
167
167
  # Ignorar arquivos gerados pelo Intlayer
168
168
  .intlayer
169
- intl
170
169
  ```
171
170
 
172
171
  Esses arquivos são automaticamente regenerados durante o processo de build e não precisam ser comitados no seu repositório.
@@ -0,0 +1,138 @@
1
+ ---
2
+ createdAt: 2025-11-24
3
+ updatedAt: 2025-11-24
4
+ title: Компилятор против декларативного i18n
5
+ description: Исследование архитектурных компромиссов между «магической» интернационализацией на основе компилятора и явным декларативным управлением контентом.
6
+ keywords:
7
+ - Intlayer
8
+ - Интернационализация
9
+ - Блог
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ - i18n
14
+ - Компилятор
15
+ - Декларативный
16
+ slugs:
17
+ - compiler-vs-declarative-i18n
18
+ - blog
19
+ - i18n
20
+ ---
21
+
22
+ # Аргументы за и против интернационализации на основе компилятора
23
+
24
+ Если вы разрабатываете веб-приложения более десяти лет, вы знаете, что интернационализация (i18n) всегда была источником сложностей. Это часто та задача, которую никто не хочет выполнять — извлечение строк, управление JSON-файлами и заботы о правилах множественного числа.
25
+
26
+ В последнее время появилась новая волна инструментов i18n на основе «компилятора», обещающих избавить от этих проблем. Обещание звучит заманчиво: **Просто пишите текст в своих компонентах, а остальное пусть сделает инструмент сборки.** Без ключей, без импортов, просто магия.
27
+
28
+ Но, как и во всех абстракциях в программной инженерии, магия имеет свою цену.
29
+
30
+ В этом блоге мы рассмотрим переход от декларативных библиотек к подходам на основе компилятора, скрытые архитектурные долги, которые они вносят, и почему «скучный» способ может оставаться лучшим для профессиональных приложений.
31
+
32
+ ## Краткая история перевода
33
+
34
+ Чтобы понять, где мы сейчас, нужно оглянуться назад и вспомнить, с чего мы начинали.
35
+
36
+ Около 2011–2012 годов ландшафт JavaScript был кардинально другим. Такие бандлеры, как мы их знаем сегодня (Webpack, Vite), либо не существовали, либо только зарождались. Мы склеивали скрипты прямо в браузере. В эту эпоху появились библиотеки, такие как **i18next**.
37
+
38
+ Они решили проблему единственным возможным на тот момент способом: **словарями во время выполнения**. Вы загружали огромный JSON-объект в память, и функция искала ключи на лету. Это было надежно, явно и работало везде.
39
+
40
+ Перенесемся в настоящее. У нас есть мощные компиляторы (SWC, бандлеры на базе Rust), которые могут парсить абстрактные синтаксические деревья (AST) за миллисекунды. Эта мощь породила новую идею: _Зачем нам вручную управлять ключами? Почему компилятор просто не видит текст "Hello World" и не заменит его за нас?_
41
+
42
+ Так родился i18n на основе компилятора.
43
+
44
+ ## Привлекательность компилятора (подход "магии")
45
+
46
+ Есть причина, по которой этот новый подход набирает популярность. Для разработчика опыт кажется невероятным.
47
+
48
+ ### 1. Скорость и "погружение"
49
+
50
+ Когда вы полностью сосредоточены, остановка, чтобы придумать имя переменной (`home_hero_title_v2`), нарушает ваш поток работы. С подходом компилятора вы просто пишете `<p>Welcome back</p>` и продолжаете. Трения нет.
51
+
52
+ ### 2. Миссия спасения наследия
53
+
54
+ Представьте, что вы унаследовали огромную кодовую базу с 5000 компонентов и нулевыми переводами. Переделка этого с помощью ручной системы ключей — это кошмар, который может занять месяцы. Инструмент на базе компилятора действует как стратегия спасения, мгновенно извлекая тысячи строк без необходимости вручную трогать ни один файл.
55
+
56
+ ### 3. Эра ИИ
57
+
58
+ Это современное преимущество, которое не стоит упускать из виду. Ассистенты по написанию кода на базе ИИ (например, Copilot или ChatGPT) естественным образом генерируют стандартный JSX/HTML. Они не знают вашу конкретную схему ключей для перевода.
59
+
60
+ - **Декларативный:** вам нужно переписать вывод ИИ, чтобы заменить текст на ключи.
61
+ - **Компилятор:** вы копируете и вставляете код ИИ, и он просто работает.
62
+
63
+ ## Проверка реальности: почему "магия" опасна
64
+
65
+ Хотя "магия" привлекательна, абстракция протекает. Полагаться на инструмент сборки, чтобы понять человеческие намерения, вводит архитектурную хрупкость.
66
+
67
+ ### 1. Эвристическая хрупкость (игра в угадайку)
68
+
69
+ Компилятор должен угадывать, что является контентом, а что — кодом.
70
+
71
+ - Переводится ли `className="active"`? Это строка.
72
+ - Переводится ли `status="pending"`?
73
+ - Переводится ли `<MyComponent errorMessage="An error occurred" />`?
74
+ - Переводится ли идентификатор продукта, например `"AX-99"`?
75
+
76
+ В конечном итоге вы неизбежно начинаете "бороться" с компилятором, добавляя специальные комментарии (например, `// ignore-translation`), чтобы предотвратить нарушение логики вашего приложения.
77
+
78
+ ### 2. Жесткое ограничение динамических данных
79
+
80
+ Извлечение компилятором основано на **статическом анализе**. Он должен видеть буквальную строку в вашем коде, чтобы сгенерировать стабильный ID.
81
+ Если ваш API возвращает строку с кодом ошибки, например `server_error`, вы не сможете перевести её с помощью компилятора, потому что компилятор не знает о существовании этой строки во время сборки. Вам придется создавать вторичную систему "только во время выполнения" специально для динамических данных.
82
+
83
+ ### 3. "Взрыв чанков" и сетевые водопады
84
+
85
+ Для поддержки tree-shaking инструменты компилятора часто разбивают переводы по компонентам.
86
+
87
+ - **Последствие:** Один просмотр страницы с 50 небольшими компонентами может вызвать **50 отдельных HTTP-запросов** для маленьких фрагментов перевода. Даже с HTTP/2 это создает сетевой "водопад", из-за которого ваше приложение кажется медленным по сравнению с загрузкой одного оптимизированного языкового пакета.
88
+
89
+ ### 4. Нагрузка на производительность во время выполнения
90
+
91
+ Чтобы сделать переводы реактивными (чтобы они обновлялись мгновенно при переключении языков), компилятор часто внедряет хуки управления состоянием в _каждый_ компонент.
92
+
93
+ - **Стоимость:** Если вы рендерите список из 5000 элементов, вы инициализируете 5000 хуков `useState` и `useEffect` исключительно для текста. Это потребляет память и ресурсы процессора, которые декларативные библиотеки (которые обычно используют один провайдер Context) экономят.
94
+
95
+ ## Ловушка: Зависимость от поставщика
96
+
97
+ Это, пожалуй, самый опасный аспект i18n на основе компилятора.
98
+
99
+ В декларативной библиотеке ваш исходный код содержит явное намерение. Вы владеете ключами. Если вы меняете библиотеку, вы просто меняете импорт.
100
+
101
+ В подходе на основе компилятора **ваш исходный код — это просто английский текст.** "Логика перевода" существует только внутри конфигурации плагина сборки.
102
+ Если эта библиотека перестанет поддерживаться или вы перерастёте её, вы окажетесь в ловушке. Вы не сможете легко "выйти" из неё, потому что в вашем исходном коде нет ни одного ключа перевода. Вам придётся вручную переписать всё приложение, чтобы мигрировать на другую систему.
103
+
104
+ ## Другая сторона: риски декларативного подхода
105
+
106
+ Честно говоря, традиционный декларативный способ тоже не идеален. У него есть свои "подводные камни".
107
+
108
+ 1. **Ад namespace:** Часто приходится вручную управлять тем, какие JSON-файлы загружать (`common.json`, `dashboard.json`, `footer.json`). Если вы забудете один из них, пользователь увидит необработанные ключи.
109
+ 2. **Перезагрузка:** Без тщательной настройки очень легко случайно загрузить _все_ ключи перевода для _всех_ страниц при первоначальной загрузке, что увеличивает размер вашего бандла.
110
+ 3. **Синхронизационный дрейф:** Часто ключи остаются в JSON-файле задолго после того, как компонент, использующий их, был удалён. Ваши файлы перевода растут бесконечно, заполненные "зомби-ключами".
111
+
112
+ ## Средний путь Intlayer
113
+
114
+ Именно здесь такие инструменты, как **Intlayer**, пытаются внести инновации. Intlayer понимает, что хотя компиляторы мощные, неявная магия опасна.
115
+
116
+ Intlayer предлагает уникальную команду **`transform`**. Вместо того чтобы просто делать магию на скрытом этапе сборки, она фактически может **переписать ваш код компонента**. Она сканирует ваш текст и заменяет его явными декларациями контента в вашей кодовой базе.
117
+
118
+ Это даёт вам лучшее из обоих миров:
119
+
120
+ 1. **Гранулярность:** Вы держите переводы рядом с вашими компонентами (улучшая модульность и tree-shaking).
121
+ 2. **Безопасность:** Перевод становится явным кодом, а не скрытой магией на этапе сборки.
122
+ 3. **Отсутствие зависимости:** Поскольку код преобразуется в стандартную декларативную структуру внутри вашего репозитория, вы не скрываете логику в плагине webpack.
123
+
124
+ ## Заключение
125
+
126
+ Итак, что же выбрать?
127
+
128
+ **Если вы начинающий разработчик, соло-фаундер или создаёте MVP:**
129
+ Подход на основе компилятора — это приемлемый выбор. Он позволяет двигаться невероятно быстро. Вам не нужно беспокоиться о структуре файлов или ключах. Вы просто создаёте. Технический долг — это проблема "будущего вас".
130
+
131
+ **Если вы создаёте профессиональное корпоративное приложение:**
132
+ Магия обычно — плохая идея. Вам нужен контроль.
133
+
134
+ - Вам нужно обрабатывать динамические данные с бэкендов.
135
+ - Вам нужно обеспечить производительность на устройствах с низкими характеристиками (избегая взрывов хуков).
136
+ - Вам нужно гарантировать, что вы не будете навсегда привязаны к конкретному инструменту сборки.
137
+
138
+ Для профессиональных приложений **Декларативное управление контентом** (например, Intlayer или проверенные библиотеки) остается золотым стандартом. Оно разделяет ваши задачи, сохраняет архитектуру чистой и гарантирует, что способность вашего приложения поддерживать несколько языков не зависит от "черного ящика" компилятора, который пытается угадать ваши намерения.
@@ -176,7 +176,6 @@ export default config;
176
176
  ```plaintext fileName=".gitignore"
177
177
  # Игнорировать файлы, сгенерированные Intlayer
178
178
  .intlayer
179
- intl
180
179
  ```
181
180
 
182
181
  Эти файлы автоматически пересоздаются во время процесса сборки и не требуют коммита в ваш репозиторий.
@@ -166,7 +166,6 @@ export default config;
166
166
  ```plaintext fileName=".gitignore"
167
167
  # Игнорировать файлы, сгенерированные Intlayer
168
168
  .intlayer
169
- intl
170
169
  ```
171
170
 
172
171
  Эти файлы автоматически пересоздаются в процессе сборки и не требуют добавления в ваш репозиторий.
@@ -0,0 +1,138 @@
1
+ ---
2
+ createdAt: 2025-11-24
3
+ updatedAt: 2025-11-24
4
+ title: Derleyici Tabanlı ve Deklaratif i18n Karşılaştırması
5
+ description: "Sihirli" derleyici tabanlı uluslararasılaştırma ile açık deklaratif içerik yönetimi arasındaki mimari ödünleşimleri keşfetmek.
6
+ keywords:
7
+ - Intlayer
8
+ - Uluslararasılaştırma
9
+ - Blog
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ - i18n
14
+ - Derleyici
15
+ - Deklaratif
16
+ slugs:
17
+ - compiler-vs-declarative-i18n
18
+ - blog
19
+ - i18n
20
+ ---
21
+
22
+ # Derleyici Tabanlı i18n İçin ve Karşı Argümanlar
23
+
24
+ On yıldan fazla süredir web uygulamaları geliştiriyorsanız, Uluslararasılaştırmanın (i18n) her zaman bir zorluk noktası olduğunu bilirsiniz. Genellikle kimsenin yapmak istemediği bir görevdir—metinleri çıkarmak, JSON dosyalarını yönetmek ve çoğul ek kurallarıyla uğraşmak.
25
+
26
+ Son zamanlarda, bu acıyı ortadan kaldırmayı vaat eden yeni bir "Derleyici tabanlı" i18n araç dalgası ortaya çıktı. Teklif cazip: **Sadece bileşenlerinizde metni yazın, gerisini derleme aracı halletsin.** Anahtar yok, import yok, sadece sihir.
27
+
28
+ Ancak yazılım mühendisliğindeki tüm soyutlamalarda olduğu gibi, sihrin de bir bedeli vardır.
29
+
30
+ Bu blog yazısında, deklaratif kütüphanelerden derleyici tabanlı yaklaşımlara geçişi, getirdikleri gizli mimari borçları ve neden "sıkıcı" yolun profesyonel uygulamalar için hala en iyi yol olabileceğini inceleyeceğiz.
31
+
32
+ ## Çevirinin Kısa Tarihi
33
+
34
+ Nerede olduğumuzu anlamak için, başladığımız yere bakmamız gerekiyor.
35
+
36
+ 2011–2012 yıllarında, JavaScript dünyası oldukça farklıydı. Bildiğimiz bundlerlar (Webpack, Vite) ya yoktu ya da çok erken aşamalardaydı. Tarayıcıda scriptleri birbirine yapıştırıyorduk. Bu dönemde, **i18next** gibi kütüphaneler doğdu.
37
+
38
+ O zamanlar problemi çözmenin tek yolu vardı: **Çalışma Zamanı Sözlükleri**. Büyük bir JSON nesnesini belleğe yüklüyordunuz ve bir fonksiyon anahtarları anında arıyordu. Bu yöntem güvenilir, açık ve her yerde çalışıyordu.
39
+
40
+ Bugüne hızlıca gelirsek. Milisaniyeler içinde Abstract Syntax Tree (AST) çözümleyebilen güçlü derleyicilerimiz var (SWC, Rust tabanlı bundlerlar). Bu güç yeni bir fikrin doğmasına yol açtı: _Neden anahtarları manuel olarak yönetiyoruz? Derleyici neden "Hello World" metnini görüp bizim için değiştirmesin?_
41
+
42
+ Böylece, Derleyici tabanlı i18n doğdu.
43
+
44
+ ## Derleyicinin Cazibesi ("Sihirli" Yaklaşım)
45
+
46
+ Bu yeni yaklaşımın popüler olmasının bir nedeni var. Bir geliştirici için deneyim inanılmazdır.
47
+
48
+ ### 1. Hız ve "Akış"
49
+
50
+ İşin içindeyken, bir değişken adı (`home_hero_title_v2`) düşünmek için durmak akışınızı bozar. Derleyici yaklaşımıyla, `<p>Welcome back</p>` yazarsınız ve devam edersiniz. Sürtünme sıfırdır.
51
+
52
+ ### 2. Miras Kurtarma Görevi
53
+
54
+ 5.000 bileşenli ve hiç çevirisi olmayan devasa bir kod tabanını devraldığınızı hayal edin. Bunu manuel anahtar tabanlı bir sistemle sonradan uyarlamak aylar süren bir kabus olur. Derleyici tabanlı bir araç, tek bir dosyaya elle dokunmanıza gerek kalmadan binlerce metni anında çıkaran bir kurtarma stratejisi olarak görev yapar.
55
+
56
+ ### 3. Yapay Zeka Çağı
57
+
58
+ Bu, göz ardı etmememiz gereken modern bir avantajdır. AI kodlama asistanları (Copilot veya ChatGPT gibi) doğal olarak standart JSX/HTML üretir. Özel çeviri anahtarı şemanızı bilmezler.
59
+
60
+ - **Deklaratif:** AI'nın çıktısını, metni anahtarlarla değiştirmek için yeniden yazmanız gerekir.
61
+ - **Derleyici:** AI'nın kodunu kopyalayıp yapıştırırsınız ve sadece çalışır.
62
+
63
+ ## Gerçeklik Kontrolü: Neden "Sihir" Tehlikelidir
64
+
65
+ "Sihir" çekici olsa da, soyutlama sızar. İnsan niyetini anlaması için bir derleme aracına güvenmek mimari kırılganlık getirir.
66
+
67
+ ### 1. Sezgisel Kırılganlık (Tahmin Oyunu)
68
+
69
+ Derleyici, içeriğin ne olduğunu ve kodun ne olduğunu tahmin etmek zorundadır.
70
+
71
+ - `className="active"` çevrilir mi? Bu bir string.
72
+ - `status="pending"` çevrilir mi?
73
+ - `<MyComponent errorMessage="An error occurred" />` çevrilir mi?
74
+ - `"AX-99"` gibi bir ürün kimliği çevrilir mi?
75
+
76
+ Sonuç olarak, derleyiciyle "mücadele" etmek zorunda kalırsınız ve uygulama mantığınızı bozmasını önlemek için `// ignore-translation` gibi özel yorumlar eklersiniz.
77
+
78
+ ### 2. Dinamik Veri Sert Sınırı
79
+
80
+ Derleyici çıkarımı **statik analiz**e dayanır. Kararlı bir ID oluşturmak için kodunuzda literal stringi görmesi gerekir.
81
+ API'niz `server_error` gibi bir hata kodu stringi dönerse, derleyici bunu derleme zamanında bilmediği için çeviremezsiniz. Dinamik veriler için yalnızca çalışma zamanı "runtime-only" ikinci bir sistem kurmak zorunda kalırsınız.
82
+
83
+ ### 3. "Parça Patlaması" ve Ağ Şelaleleri
84
+
85
+ Ağaç sarsma (tree-shaking) için, derleyici araçları genellikle çevirileri bileşen bazında böler.
86
+
87
+ - **Sonuç:** 50 küçük bileşene sahip tek bir sayfa görüntülemesi, küçük çeviri parçaları için **50 ayrı HTTP isteği** tetikleyebilir. HTTP/2 olsa bile, bu durum tek, optimize edilmiş bir dil paketi yüklemeye kıyasla uygulamanızın yavaş hissetmesine neden olan bir ağ şelalesi oluşturur.
88
+
89
+ ### 4. Çalışma Zamanı Performans Yükü
90
+
91
+ Çevirilerin reaktif olmasını sağlamak (yani dil değiştirdiğinizde anında güncellenmesi için), derleyici genellikle _her_ bileşene durum yönetimi (state management) hook'ları enjekte eder.
92
+
93
+ - **Maliyet:** Eğer 5.000 öğeden oluşan bir liste render ederseniz, yalnızca metin için 5.000 `useState` ve `useEffect` hook'u başlatıyorsunuz demektir. Bu, deklaratif kütüphanelerin (genellikle tek bir Context sağlayıcı kullanan) tasarruf ettiği bellek ve CPU döngülerini tüketir.
94
+
95
+ ## Tuzak: Vendor Lock-in (Tedarikçi Bağımlılığı)
96
+
97
+ Bu, derleyici tabanlı i18n'nin muhtemelen en tehlikeli yönüdür.
98
+
99
+ Deklaratif bir kütüphanede, kaynak kodunuz açık niyet içerir. Anahtarlar size aittir. Kütüphane değiştirirseniz, sadece import'u değiştirirsiniz.
100
+
101
+ Derleyici tabanlı bir yaklaşımda, **kaynak kodunuz sadece İngilizce metindir.** "Çeviri mantığı" sadece build eklentisinin yapılandırması içinde vardır.
102
+ Eğer o kütüphane bakım dışı kalırsa veya ihtiyaçlarınızı karşılamaz hale gelirse, sıkışıp kalırsınız. Kaynak kodunuzda hiç çeviri anahtarı olmadığından kolayca "eject" yapamazsınız. Göç etmek için tüm uygulamanızı manuel olarak yeniden yazmanız gerekir.
103
+
104
+ ## Diğer Taraf: Deklaratif Yaklaşımın Riskleri
105
+
106
+ Adil olmak gerekirse, geleneksel deklaratif yöntem de mükemmel değildir. Kendi "kendi ayağına sıkma" sorunları vardır.
107
+
108
+ 1. **Namespace Cehennemi:** Hangi JSON dosyalarının yükleneceğini (`common.json`, `dashboard.json`, `footer.json`) genellikle manuel olarak yönetmeniz gerekir. Birini unutursanız, kullanıcı ham anahtarları görür.
109
+ 2. **Aşırı Yükleme:** Dikkatli yapılandırma yapılmazsa, başlangıç yüklemesinde _tüm_ sayfalarınız için _tüm_ çeviri anahtarlarınızı yanlışlıkla yüklemek çok kolaydır ve bu da paket boyutunuzu şişirir.
110
+ 3. **Senkronizasyon Kayması:** Bir bileşeni kullanan anahtarlar silindikten sonra bile JSON dosyasında kalması yaygındır. Çeviri dosyalarınız "zombi anahtarlarla" dolarak sonsuz şekilde büyür.
111
+
112
+ ## Intlayer Orta Yolu
113
+
114
+ İşte **Intlayer** gibi araçların yenilik yapmaya çalıştığı yer burasıdır. Intlayer, derleyicilerin güçlü olduğunu ancak örtük sihrin tehlikeli olduğunu anlar.
115
+
116
+ Intlayer benzersiz bir **`transform` komutu** sunar. Gizli derleme adımında sadece sihir yapmak yerine, aslında **bileşen kodunuzu yeniden yazabilir**. Metninizi tarar ve kod tabanınızda açık içerik beyanları ile değiştirir.
117
+
118
+ Bu size her iki dünyanın en iyisini sunar:
119
+
120
+ 1. **Detaylılık:** Çevirilerinizi bileşenlerinize yakın tutarsınız (modülerliği ve tree-shaking'i geliştirir).
121
+ 2. **Güvenlik:** Çeviri, gizli derleme zamanı sihri değil, açık kod haline gelir.
122
+ 3. **Kilitlenme Yok:** Kod, depo içinde standart bir deklaratif yapıya dönüştürüldüğünden, mantığı bir webpack eklentisinde gizlememiş olursunuz.
123
+
124
+ ## Sonuç
125
+
126
+ Peki, hangisini seçmelisiniz?
127
+
128
+ **Eğer Junior Geliştirici, Tek Kurucu ya da bir MVP geliştiriyorsanız:**
129
+ Derleyici tabanlı yaklaşım geçerli bir seçimdir. Çok hızlı ilerlemenizi sağlar. Dosya yapıları veya anahtarlar hakkında endişelenmenize gerek yoktur. Sadece inşa edersiniz. Teknik borç "Gelecekteki Siz" için bir sorundur.
130
+
131
+ **Eğer Profesyonel, Kurumsal Düzeyde Bir Uygulama Geliştiriyorsanız:**
132
+ Sihir genellikle kötü bir fikirdir. Kontrole ihtiyacınız vardır.
133
+
134
+ - Backendlerden dinamik verileri yönetmeniz gerekir.
135
+ - Düşük donanımlı cihazlarda performansı garanti etmeniz gerekir (hook patlamalarını önleyerek).
136
+ - Belirli bir derleme aracına sonsuza kadar bağımlı kalmadığınızdan emin olmanız gerekir.
137
+
138
+ Profesyonel uygulamalar için, **Deklaratif İçerik Yönetimi** (Intlayer veya yerleşik kütüphaneler gibi) altın standart olmaya devam eder. Bu, endişelerinizi ayırır, mimarinizi temiz tutar ve uygulamanızın birden fazla dili konuşma yeteneğinin, niyetlerinizi tahmin eden "kara kutu" bir derleyiciye bağlı olmamasını sağlar.