@intlayer/docs 9.5.2 → 9.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/blog/ar/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ar/i18next_vs_intlayer.md +445 -0
- package/blog/ar/is_i18next_outdated.md +1 -1
- package/blog/ar/is_next-intl_outdated.md +1 -1
- package/blog/ar/is_vue-i18n_outdated.md +1 -1
- package/blog/ar/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ar/lingui_vs_intlayer.md +381 -0
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ar/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/ar/next-intl_vs_intlayer.md +397 -0
- package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +286 -0
- package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/de/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/de/i18next_vs_intlayer.md +445 -0
- package/blog/de/is_i18next_outdated.md +1 -1
- package/blog/de/is_next-intl_outdated.md +1 -1
- package/blog/de/is_vue-i18n_outdated.md +1 -1
- package/blog/de/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/de/lingui_vs_intlayer.md +381 -0
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/de/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/de/next-intl_vs_intlayer.md +415 -0
- package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/de/vue-i18n_vs_intlayer_benchmark.md +355 -0
- package/blog/en/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/en/i18next_vs_intlayer.md +445 -0
- package/blog/en/is_i18next_outdated.md +1 -1
- package/blog/en/is_next-intl_outdated.md +1 -1
- package/blog/en/is_vue-i18n_outdated.md +1 -1
- package/blog/en/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/en/lingui_vs_intlayer.md +381 -0
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/en/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/en/next-intl_vs_intlayer.md +415 -0
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/en/vue-i18n_vs_intlayer.md +1 -1
- package/blog/en/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/en-GB/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/en-GB/i18next_vs_intlayer.md +445 -0
- package/blog/en-GB/is_i18next_outdated.md +1 -1
- package/blog/en-GB/is_next-intl_outdated.md +1 -1
- package/blog/en-GB/is_vue-i18n_outdated.md +1 -1
- package/blog/en-GB/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/en-GB/lingui_vs_intlayer.md +381 -0
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/en-GB/next-intl_vs_intlayer.md +415 -0
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/en-GB/vue-i18n_vs_intlayer.md +1 -1
- package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +245 -0
- package/blog/es/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/es/i18next_vs_intlayer.md +445 -0
- package/blog/es/is_i18next_outdated.md +1 -1
- package/blog/es/is_next-intl_outdated.md +1 -1
- package/blog/es/is_vue-i18n_outdated.md +1 -1
- package/blog/es/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/es/lingui_vs_intlayer.md +381 -0
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/es/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/es/next-intl_vs_intlayer.md +417 -0
- package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/es/vue-i18n_vs_intlayer_benchmark.md +363 -0
- package/blog/fr/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/fr/i18next_vs_intlayer.md +445 -0
- package/blog/fr/is_i18next_outdated.md +1 -1
- package/blog/fr/is_next-intl_outdated.md +1 -1
- package/blog/fr/is_vue-i18n_outdated.md +1 -1
- package/blog/fr/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/fr/lingui_vs_intlayer.md +381 -0
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/fr/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/fr/next-intl_vs_intlayer.md +417 -0
- package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +287 -0
- package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +39 -0
- package/blog/hi/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/hi/i18next_vs_intlayer.md +445 -0
- package/blog/hi/is_i18next_outdated.md +1 -1
- package/blog/hi/is_next-intl_outdated.md +1 -1
- package/blog/hi/is_vue-i18n_outdated.md +1 -1
- package/blog/hi/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/hi/lingui_vs_intlayer.md +381 -0
- package/blog/hi/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/hi/next-intl_vs_intlayer.md +397 -0
- package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/id/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/id/i18next_vs_intlayer.md +445 -0
- package/blog/id/is_i18next_outdated.md +1 -1
- package/blog/id/is_next-intl_outdated.md +1 -1
- package/blog/id/is_vue-i18n_outdated.md +1 -1
- package/blog/id/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/id/lingui_vs_intlayer.md +381 -0
- package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/id/next-intl_vs_intlayer-next-intl.md +310 -0
- package/blog/id/next-intl_vs_intlayer.md +397 -0
- package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +36 -0
- package/blog/id/vue-i18n_vs_intlayer.md +1 -1
- package/blog/id/vue-i18n_vs_intlayer_benchmark.md +41 -0
- package/blog/it/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/it/i18next_vs_intlayer.md +445 -0
- package/blog/it/is_i18next_outdated.md +1 -1
- package/blog/it/is_next-intl_outdated.md +1 -1
- package/blog/it/is_vue-i18n_outdated.md +1 -1
- package/blog/it/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/it/lingui_vs_intlayer.md +381 -0
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/it/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/it/next-intl_vs_intlayer.md +418 -0
- package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/it/vue-i18n_vs_intlayer_benchmark.md +34 -0
- package/blog/ja/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ja/i18next_vs_intlayer.md +447 -0
- package/blog/ja/is_i18next_outdated.md +1 -1
- package/blog/ja/is_next-intl_outdated.md +1 -1
- package/blog/ja/is_vue-i18n_outdated.md +1 -1
- package/blog/ja/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ja/lingui_vs_intlayer.md +381 -0
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ja/next-intl_vs_intlayer-next-intl.md +310 -0
- package/blog/ja/next-intl_vs_intlayer.md +422 -0
- package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/ja/vue-i18n_vs_intlayer.md +1 -1
- package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/ko/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ko/i18next_vs_intlayer.md +447 -0
- package/blog/ko/is_i18next_outdated.md +1 -1
- package/blog/ko/is_next-intl_outdated.md +1 -1
- package/blog/ko/is_vue-i18n_outdated.md +1 -1
- package/blog/ko/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ko/lingui_vs_intlayer.md +381 -0
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ko/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/ko/next-intl_vs_intlayer.md +397 -0
- package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/ko/vue-i18n_vs_intlayer.md +1 -1
- package/blog/ko/vue-i18n_vs_intlayer_benchmark.md +366 -0
- package/blog/pl/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/pl/i18next_vs_intlayer.md +445 -0
- package/blog/pl/is_i18next_outdated.md +1 -1
- package/blog/pl/is_next-intl_outdated.md +1 -1
- package/blog/pl/is_vue-i18n_outdated.md +1 -1
- package/blog/pl/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/pl/lingui_vs_intlayer.md +381 -0
- package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/pl/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/pl/next-intl_vs_intlayer.md +397 -0
- package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +289 -0
- package/blog/pl/vue-i18n_vs_intlayer.md +1 -1
- package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/pt/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/pt/i18next_vs_intlayer.md +445 -0
- package/blog/pt/is_i18next_outdated.md +1 -1
- package/blog/pt/is_next-intl_outdated.md +1 -1
- package/blog/pt/is_vue-i18n_outdated.md +1 -1
- package/blog/pt/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/pt/lingui_vs_intlayer.md +381 -0
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/pt/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/pt/next-intl_vs_intlayer.md +411 -0
- package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/ru/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ru/i18next_vs_intlayer.md +445 -0
- package/blog/ru/is_i18next_outdated.md +1 -1
- package/blog/ru/is_next-intl_outdated.md +1 -1
- package/blog/ru/is_vue-i18n_outdated.md +1 -1
- package/blog/ru/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ru/lingui_vs_intlayer.md +381 -0
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ru/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/ru/next-intl_vs_intlayer.md +417 -0
- package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +54 -0
- package/blog/tr/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/tr/i18next_vs_intlayer.md +445 -0
- package/blog/tr/is_i18next_outdated.md +1 -1
- package/blog/tr/is_next-intl_outdated.md +1 -1
- package/blog/tr/is_vue-i18n_outdated.md +1 -1
- package/blog/tr/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/tr/lingui_vs_intlayer.md +381 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/tr/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/tr/next-intl_vs_intlayer.md +397 -0
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/tr/vue-i18n_vs_intlayer.md +1 -1
- package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/uk/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/uk/i18next_vs_intlayer.md +445 -0
- package/blog/uk/is_i18next_outdated.md +1 -1
- package/blog/uk/is_next-intl_outdated.md +1 -1
- package/blog/uk/is_vue-i18n_outdated.md +1 -1
- package/blog/uk/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/uk/lingui_vs_intlayer.md +381 -0
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/uk/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/uk/next-intl_vs_intlayer.md +397 -0
- package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +270 -0
- package/blog/uk/vue-i18n_vs_intlayer.md +1 -1
- package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/vi/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/vi/i18next_vs_intlayer.md +445 -0
- package/blog/vi/is_i18next_outdated.md +1 -1
- package/blog/vi/is_next-intl_outdated.md +1 -1
- package/blog/vi/is_vue-i18n_outdated.md +1 -1
- package/blog/vi/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/vi/lingui_vs_intlayer.md +381 -0
- package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/vi/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/vi/next-intl_vs_intlayer.md +397 -0
- package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/vi/vue-i18n_vs_intlayer.md +1 -1
- package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/zh/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/zh/i18next_vs_intlayer.md +445 -0
- package/blog/zh/is_i18next_outdated.md +1 -1
- package/blog/zh/is_next-intl_outdated.md +1 -1
- package/blog/zh/is_vue-i18n_outdated.md +1 -1
- package/blog/zh/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/zh/lingui_vs_intlayer.md +381 -0
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/zh/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/zh/next-intl_vs_intlayer.md +422 -0
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/zh/vue-i18n_vs_intlayer.md +1 -1
- package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +30 -0
- package/dist/cjs/generated/blog.entry.cjs +160 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +20 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +160 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +20 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +8 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/nextjs.md +1 -1
- package/docs/ar/benchmark/solid.md +1 -1
- package/docs/ar/benchmark/svelte.md +1 -1
- package/docs/ar/benchmark/tanstack.md +1 -1
- package/docs/ar/benchmark/vue.md +1 -1
- package/docs/ar/interest_of_intlayer.md +1 -1
- package/docs/bn/interest_of_intlayer.md +1 -1
- package/docs/cs/interest_of_intlayer.md +1 -1
- package/docs/de/benchmark/nextjs.md +1 -1
- package/docs/de/benchmark/solid.md +1 -1
- package/docs/de/benchmark/svelte.md +1 -1
- package/docs/de/benchmark/tanstack.md +1 -1
- package/docs/de/benchmark/vue.md +1 -1
- package/docs/de/interest_of_intlayer.md +1 -1
- package/docs/en/benchmark/nextjs.md +1 -1
- package/docs/en/benchmark/solid.md +1 -1
- package/docs/en/benchmark/svelte.md +1 -1
- package/docs/en/benchmark/tanstack.md +1 -1
- package/docs/en/benchmark/vue.md +1 -1
- package/docs/en/interest_of_intlayer.md +1 -1
- package/docs/en-GB/benchmark/nextjs.md +1 -1
- package/docs/en-GB/benchmark/solid.md +1 -1
- package/docs/en-GB/benchmark/svelte.md +1 -1
- package/docs/en-GB/benchmark/tanstack.md +1 -1
- package/docs/en-GB/benchmark/vue.md +1 -1
- package/docs/en-GB/interest_of_intlayer.md +1 -1
- package/docs/es/benchmark/nextjs.md +1 -1
- package/docs/es/benchmark/solid.md +1 -1
- package/docs/es/benchmark/svelte.md +1 -1
- package/docs/es/benchmark/tanstack.md +1 -1
- package/docs/es/benchmark/vue.md +1 -1
- package/docs/es/interest_of_intlayer.md +1 -1
- package/docs/fr/benchmark/nextjs.md +1 -1
- package/docs/fr/benchmark/solid.md +1 -1
- package/docs/fr/benchmark/svelte.md +1 -1
- package/docs/fr/benchmark/tanstack.md +1 -1
- package/docs/fr/benchmark/vue.md +1 -1
- package/docs/fr/interest_of_intlayer.md +1 -1
- package/docs/hi/benchmark/nextjs.md +1 -1
- package/docs/hi/benchmark/solid.md +1 -1
- package/docs/hi/benchmark/svelte.md +1 -1
- package/docs/hi/benchmark/tanstack.md +1 -1
- package/docs/hi/benchmark/vue.md +1 -1
- package/docs/hi/interest_of_intlayer.md +1 -1
- package/docs/id/benchmark/nextjs.md +1 -1
- package/docs/id/benchmark/solid.md +1 -1
- package/docs/id/benchmark/svelte.md +1 -1
- package/docs/id/benchmark/tanstack.md +1 -1
- package/docs/id/benchmark/vue.md +1 -1
- package/docs/id/interest_of_intlayer.md +1 -1
- package/docs/it/benchmark/nextjs.md +1 -1
- package/docs/it/benchmark/solid.md +1 -1
- package/docs/it/benchmark/svelte.md +1 -1
- package/docs/it/benchmark/tanstack.md +1 -1
- package/docs/it/benchmark/vue.md +1 -1
- package/docs/it/interest_of_intlayer.md +1 -1
- package/docs/ja/benchmark/nextjs.md +1 -1
- package/docs/ja/benchmark/solid.md +1 -1
- package/docs/ja/benchmark/svelte.md +1 -1
- package/docs/ja/benchmark/tanstack.md +1 -1
- package/docs/ja/benchmark/vue.md +1 -1
- package/docs/ja/interest_of_intlayer.md +1 -1
- package/docs/ko/benchmark/nextjs.md +1 -1
- package/docs/ko/benchmark/solid.md +1 -1
- package/docs/ko/benchmark/svelte.md +1 -1
- package/docs/ko/benchmark/tanstack.md +1 -1
- package/docs/ko/benchmark/vue.md +1 -1
- package/docs/ko/interest_of_intlayer.md +1 -1
- package/docs/nl/interest_of_intlayer.md +1 -1
- package/docs/pl/benchmark/nextjs.md +1 -1
- package/docs/pl/benchmark/solid.md +1 -1
- package/docs/pl/benchmark/svelte.md +1 -1
- package/docs/pl/benchmark/tanstack.md +1 -1
- package/docs/pl/benchmark/vue.md +1 -1
- package/docs/pl/interest_of_intlayer.md +1 -1
- package/docs/pt/benchmark/nextjs.md +1 -1
- package/docs/pt/benchmark/solid.md +1 -1
- package/docs/pt/benchmark/svelte.md +1 -1
- package/docs/pt/benchmark/tanstack.md +1 -1
- package/docs/pt/benchmark/vue.md +1 -1
- package/docs/pt/interest_of_intlayer.md +1 -1
- package/docs/ru/benchmark/nextjs.md +1 -1
- package/docs/ru/benchmark/solid.md +1 -1
- package/docs/ru/benchmark/svelte.md +1 -1
- package/docs/ru/benchmark/tanstack.md +1 -1
- package/docs/ru/benchmark/vue.md +1 -1
- package/docs/ru/interest_of_intlayer.md +1 -1
- package/docs/tr/benchmark/nextjs.md +1 -1
- package/docs/tr/benchmark/solid.md +1 -1
- package/docs/tr/benchmark/svelte.md +1 -1
- package/docs/tr/benchmark/tanstack.md +1 -1
- package/docs/tr/benchmark/vue.md +1 -1
- package/docs/tr/interest_of_intlayer.md +1 -1
- package/docs/uk/benchmark/nextjs.md +1 -1
- package/docs/uk/benchmark/solid.md +1 -1
- package/docs/uk/benchmark/svelte.md +1 -1
- package/docs/uk/benchmark/tanstack.md +1 -1
- package/docs/uk/benchmark/vue.md +1 -1
- package/docs/uk/interest_of_intlayer.md +1 -1
- package/docs/ur/interest_of_intlayer.md +1 -1
- package/docs/vi/benchmark/nextjs.md +1 -1
- package/docs/vi/benchmark/solid.md +1 -1
- package/docs/vi/benchmark/svelte.md +1 -1
- package/docs/vi/benchmark/tanstack.md +1 -1
- package/docs/vi/benchmark/vue.md +1 -1
- package/docs/vi/interest_of_intlayer.md +1 -1
- package/docs/zh/benchmark/nextjs.md +1 -1
- package/docs/zh/benchmark/solid.md +1 -1
- package/docs/zh/benchmark/svelte.md +1 -1
- package/docs/zh/benchmark/tanstack.md +1 -1
- package/docs/zh/benchmark/vue.md +1 -1
- package/docs/zh/interest_of_intlayer.md +1 -1
- package/docs/zh-TW/interest_of_intlayer.md +1 -1
- package/frequent_questions/ar/claude_code_token_consumption.md +152 -0
- package/frequent_questions/de/claude_code_token_consumption.md +152 -0
- package/frequent_questions/en/claude_code_token_consumption.md +152 -0
- package/frequent_questions/en-GB/claude_code_token_consumption.md +152 -0
- package/frequent_questions/es/claude_code_token_consumption.md +152 -0
- package/frequent_questions/fr/claude_code_token_consumption.md +152 -0
- package/frequent_questions/hi/claude_code_token_consumption.md +152 -0
- package/frequent_questions/id/claude_code_token_consumption.md +152 -0
- package/frequent_questions/it/claude_code_token_consumption.md +152 -0
- package/frequent_questions/ja/claude_code_token_consumption.md +152 -0
- package/frequent_questions/ko/claude_code_token_consumption.md +152 -0
- package/frequent_questions/pl/claude_code_token_consumption.md +152 -0
- package/frequent_questions/pt/claude_code_token_consumption.md +152 -0
- package/frequent_questions/ru/claude_code_token_consumption.md +152 -0
- package/frequent_questions/tr/claude_code_token_consumption.md +152 -0
- package/frequent_questions/uk/claude_code_token_consumption.md +152 -0
- package/frequent_questions/vi/claude_code_token_consumption.md +152 -0
- package/frequent_questions/zh/claude_code_token_consumption.md +152 -0
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +160 -0
- package/src/generated/frequentQuestions.entry.ts +20 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: Como limitar o consumo de tokens do Claude Code para gerar traduções
|
|
5
|
+
description: Por que traduzir com o Claude Code gasta tokens em excesso, o que o Intlayer faz em vez disso (filtra chaves traduzidas, divide JSON em blocos, traduz markdown bloco a bloco) e como reutilizar sua assinatura do Claude com claude setup-token.
|
|
6
|
+
keywords:
|
|
7
|
+
- claude code
|
|
8
|
+
- tokens
|
|
9
|
+
- consumo de tokens
|
|
10
|
+
- setup-token
|
|
11
|
+
- i18n
|
|
12
|
+
- internacionalização
|
|
13
|
+
- tradução
|
|
14
|
+
- fill
|
|
15
|
+
- mcp
|
|
16
|
+
- agente
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- claude-code-token-consumption
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Como limitar o consumo de tokens do Claude Code para gerar traduções
|
|
24
|
+
|
|
25
|
+
## Descrição do problema
|
|
26
|
+
|
|
27
|
+
Pedir ao Claude Code (ou a qualquer agente de programação) para traduzir seu conteúdo é a forma mais cara de realizá-lo. Em cada execução, o agente precisa:
|
|
28
|
+
|
|
29
|
+
- Carregar todo o arquivo JSON ou de conteúdo no seu contexto, até mesmo as chaves já traduzidas.
|
|
30
|
+
- Buscar nos arquivos relacionados para identificar onde o conteúdo reside e como está estruturado.
|
|
31
|
+
- Descobrir quais locales estão ausentes e precisam ser gerados.
|
|
32
|
+
- Reler suas instruções personalizadas a cada execução ("transformar URLs desta maneira", "manter o nome da marca em inglês", "usar forma informal").
|
|
33
|
+
- Reescrever todo o arquivo, inclusive as partes que não foram alteradas.
|
|
34
|
+
|
|
35
|
+
Tudo isso é reenviado a cada interação, fazendo com que o custo cresça conforme `tamanho do conteúdo × número de locales × número de turnos`, e qualquer divergência de formatação ou de chaves precise ser corrigida manualmente.
|
|
36
|
+
|
|
37
|
+
## O que o Intlayer faz em vez disso
|
|
38
|
+
|
|
39
|
+
O diferencial do Intlayer é realizar esse trabalho fora do agente, através de um pipeline construído especificamente para tradução:
|
|
40
|
+
|
|
41
|
+
- **Filtra traduções existentes** para limitar o uso de tokens. As chaves já traduzidas no seu JSON são ignoradas, enviando apenas as pendentes ao modelo.
|
|
42
|
+
- **Traduz markdown bloco a bloco.** Para a documentação, [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/doc-translate.md) e [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/doc-review.md) comparam cada bloco com o documento base e ignoram blocos já traduzidos ou inalterados.
|
|
43
|
+
- **Divide o seu JSON em partes (chunking)** se for muito grande, garantindo operação na melhor faixa da janela de contexto.
|
|
44
|
+
- **Achata e reconstrói o seu JSON** para otimizar o consumo de tokens.
|
|
45
|
+
- **Insere prompts personalizados** para regras específicas da sua marca e terminologia (`applicationContext`, `--custom-instructions`), permitindo que você as defina uma única vez em vez de repeti-las em cada conversa.
|
|
46
|
+
- **Valida a estrutura** para assegurar consistência e evitar desvio de chaves, preservando a formatação (markdown, HTML, inserções, plurais).
|
|
47
|
+
- **Implementa gestão de novas tentativas (retry)** caso a saída apresente formato inválido.
|
|
48
|
+
- **Enfileira e paraleliza requisições** entre arquivos, blocos e locales para aumentar a velocidade.
|
|
49
|
+
|
|
50
|
+
Nada disso transita pelo contexto do agente. A regra prática: deixe o agente decidir **o que** internacionalizar, e deixe o Intlayer cuidar do trabalho repetitivo.
|
|
51
|
+
|
|
52
|
+
## Solução
|
|
53
|
+
|
|
54
|
+
### 1. Delegar a extração para `intlayer extract`
|
|
55
|
+
|
|
56
|
+
Em vez de pedir ao agente para reescrever cada componente manualmente, deixe-o executar o comando [`extract`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/extract.md). Ele move strings fixas para um arquivo `.content` ao lado do componente sem carregar o arquivo completo no contexto do agente.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx intlayer extract --file src/components/Header.tsx
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Delegar a tradução para `intlayer fill`
|
|
63
|
+
|
|
64
|
+
Nunca peça ao agente para traduzir. O comando [`fill`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/fill.md) aplica o pipeline acima: envia apenas as chaves ausentes, as fragmenta, processa os locales em paralelo e grava o resultado de volta nos seus arquivos de conteúdo.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx intlayer fill
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Algumas flags mantêm a execução enxuta:
|
|
71
|
+
|
|
72
|
+
- `--git-diff` (ou `--uncommitted`) processa apenas os dicionários alterados no branch atual.
|
|
73
|
+
- `--file` ou `--keys` foca em arquivos de conteúdo específicos.
|
|
74
|
+
- `--output-locales fr es` restringe a execução aos locales realmente necessários no momento.
|
|
75
|
+
- `--skip-metadata` ignora a criação de título, descrição e tags.
|
|
76
|
+
- `--data-serialization toon` envia uma carga útil mais compacta para o modelo (menos tokens, saída ligeiramente menos previsível).
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx intlayer fill --git-diff --output-locales fr es --skip-metadata
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Traduzir markdown com `doc translate` e `doc review`
|
|
83
|
+
|
|
84
|
+
Pedir a um agente para traduzir um arquivo `.md` significa colar todo o documento, para cada locale, a cada alteração. Os comandos [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/doc-translate.md) e [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/doc-review.md) operam bloco a bloco.
|
|
85
|
+
|
|
86
|
+
Use `doc translate` quando o arquivo traduzido ainda não existir. Ele divide o markdown, traduz em paralelo e grava os arquivos de destino:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx intlayer doc translate --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Use `doc review` quando o arquivo traduzido já existir. Ele compara cada bloco com o documento base, ignora os blocos já traduzidos ou inalterados e envia apenas os divergentes:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx intlayer doc review --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Ambos os comandos aceitam suas regras uma única vez, sem a necessidade de repeti-las em cada prompt:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npx intlayer doc translate --custom-instructions "Do not translate URLs. Keep the markdown structure and the code blocks untouched."
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Dois modos de `doc review` são úteis quando o agente precisa continuar no fluxo sem disparar chamadas de IA pelo Intlayer:
|
|
105
|
+
|
|
106
|
+
- `--mode report` lista os blocos que exigem atenção com números de linha, permitindo que o agente edite apenas esses blocos.
|
|
107
|
+
- `--mode synthesis` reporta apenas quais documentos estão em dia e quais contêm blocos pendentes de edição.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx intlayer doc review --mode report --locales fr
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 4. Permitir que o agente chame a CLI através do servidor MCP
|
|
114
|
+
|
|
115
|
+
Com o [servidor MCP do Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/mcp_server.md), o agente responde com base na documentação atualizada e executa `intlayer fill` ou `intlayer doc review` por conta própria em vez de reimplementar a lógica na conversa.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
claude mcp add intlayer npx -y @intlayer/mcp
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Instalar as [Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/agent_skills.md) com `npx intlayer init skills` também evita que o agente tente adivinhar a API do Intlayer e releia a documentação em cada tarefa.
|
|
122
|
+
|
|
123
|
+
### 5. Reutilizar sua assinatura do Claude com `claude setup-token`
|
|
124
|
+
|
|
125
|
+
Executar a configuração de i18n na sua sessão interativa do Claude Code mantém todo o histórico da conversa no contexto. Transfira esse trabalho pesado para uma sessão curta em modo headless.
|
|
126
|
+
|
|
127
|
+
Gere um token de longa duração a partir da sua assinatura do Claude:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
claude setup-token
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Armazene-o como `CLAUDE_CODE_OAUTH_TOKEN` (em um arquivo `.env` ou nas variáveis secretas do seu CI) e reutilize-o para uma sessão pontual que execute os comandos do Intlayer:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
CLAUDE_CODE_OAUTH_TOKEN=... claude -p "Run npx intlayer extract on src/components, then npx intlayer fill --uncommitted"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
A sessão carregará apenas esse prompt e a saída do comando, sem o histórico da sua conversa. O mesmo token funciona na [Claude Code GitHub Action](https://github.com/anthropics/claude-code-action) para rodar `intlayer fill` em cada pull request.
|
|
140
|
+
|
|
141
|
+
> O token gerado por `claude setup-token` autentica somente o Claude Code. Ele não pode ser usado como chave de API da Anthropic em `ai.apiKey`. Para a tradução em si, `intlayer fill` usa a sua [conta do Intlayer](https://app.intlayer.org) (plano gratuito incluso) ou a sua chave própria configurada em [`ai`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md#ai-configuration).
|
|
142
|
+
|
|
143
|
+
## Resumo
|
|
144
|
+
|
|
145
|
+
| Tarefa | Quem executa | Tokens no contexto do agente |
|
|
146
|
+
| ----------------------- | ---------------------------- | ---------------------------- |
|
|
147
|
+
| Decidir o que localizar | Claude Code | Baixo |
|
|
148
|
+
| Extrair strings | `intlayer extract` | Nenhum |
|
|
149
|
+
| Traduzir conteúdo | `intlayer fill` | Nenhum |
|
|
150
|
+
| Traduzir documentação | `intlayer doc translate` | Nenhum |
|
|
151
|
+
| Atualizar documentação | `intlayer doc review` | Nenhum |
|
|
152
|
+
| Executar os comandos | Claude Code em modo headless | Prompt + saída do comando |
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: Как ограничить расход токенов Claude Code при генерации переводов
|
|
5
|
+
description: Почему перевод с помощью Claude Code сжигает токены, что делает Intlayer вместо этого (фильтрует переведенные ключи, делит JSON на блоки, переводит markdown по блокам) и как повторно использовать подписку Claude с помощью claude setup-token.
|
|
6
|
+
keywords:
|
|
7
|
+
- claude code
|
|
8
|
+
- токены
|
|
9
|
+
- расход токенов
|
|
10
|
+
- setup-token
|
|
11
|
+
- i18n
|
|
12
|
+
- интернационализация
|
|
13
|
+
- перевод
|
|
14
|
+
- fill
|
|
15
|
+
- mcp
|
|
16
|
+
- агент
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- claude-code-token-consumption
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Как ограничить расход токенов Claude Code при генерации переводов
|
|
24
|
+
|
|
25
|
+
## Описание проблемы
|
|
26
|
+
|
|
27
|
+
Запрос к Claude Code (или любому другому агенту разработки) на перевод контента является самым дорогостоящим способом. При каждом запуске агент вынужден:
|
|
28
|
+
|
|
29
|
+
- Загружать весь файл JSON или файл контента в свой контекст, включая уже переведенные ключи.
|
|
30
|
+
- Искать связанные файлы, чтобы понять, где находится контент и как он структурирован.
|
|
31
|
+
- Определять, какие локали отсутствуют и должны быть сгенерированы.
|
|
32
|
+
- Каждый раз заново считывать ваши пользовательские инструкции ("преобразовывать URL определенным образом", "оставлять название бренда на английском", "использовать обращение на ты").
|
|
33
|
+
- Переписывать весь файл целиком, включая части, которые не менялись.
|
|
34
|
+
|
|
35
|
+
Все это повторно отправляется на каждой итерации, поэтому стоимость возрастает по формуле `размер контента × количество локалей × количество итераций`, а любые расхождения в форматировании или ключах приходится отслеживать вручную.
|
|
36
|
+
|
|
37
|
+
## Что Intlayer делает вместо этого
|
|
38
|
+
|
|
39
|
+
Преимущество Intlayer заключается в выполнении этой работы вне агента с помощью конвейера, созданного специально для перевода:
|
|
40
|
+
|
|
41
|
+
- **Фильтрует существующие переводы** для ограничения расхода токенов. Уже переведенные ключи в вашем JSON удаляются, и модели отправляются только недостающие.
|
|
42
|
+
- **Переводит markdown по блокам.** Для документации команды [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/doc-translate.md) и [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/doc-review.md) сравнивают каждый блок с исходным документом и пропускают уже переведенные или неизмененные блоки.
|
|
43
|
+
- **Разбивает ваш JSON на части (chunking)**, если он слишком большой, чтобы оставаться в оптимальной части контекстного окна.
|
|
44
|
+
- **Сглаживает и восстанавливает структуру JSON** для оптимизации расхода токенов.
|
|
45
|
+
- **Вставляет пользовательские промпты** для специфических правил бренда и терминологии (`applicationContext`, `--custom-instructions`), позволяя написать их один раз вместо повторения в каждом диалоге.
|
|
46
|
+
- **Проверяет структуру** для обеспечения согласованности и предотвращения расхождения ключей, сохраняя форматирование (markdown, HTML, вставки, множественные числа).
|
|
47
|
+
- **Реализует повторные попытки (retry)** в случае некорректного формата ответа.
|
|
48
|
+
- **Ставит в очередь и распараллеливает запросы** по файлам, фрагментам и локалям для максимальной скорости.
|
|
49
|
+
|
|
50
|
+
Ничто из этого не проходит через контекст агента. Главное правило: пусть агент решает, **что** интернационализировать, а Intlayer выполняет повторяющуюся рутинную работу.
|
|
51
|
+
|
|
52
|
+
## Решение
|
|
53
|
+
|
|
54
|
+
### 1. Делегируйте извлечение команде `intlayer extract`
|
|
55
|
+
|
|
56
|
+
Вместо того чтобы просить агента вручную переписывать каждый компонент, выполните команду [`extract`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/extract.md). Она переносит жестко заданные строки в файл `.content` рядом с компонентом без загрузки всего исходного файла в контекст агента.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx intlayer extract --file src/components/Header.tsx
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Делегируйте перевод команде `intlayer fill`
|
|
63
|
+
|
|
64
|
+
Никогда не поручайте агенту перевод напрямую. Команда [`fill`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/fill.md) применяет описанный выше конвейер: она отправляет только недостающие ключи, разбивает их на части, обрабатывает локали параллельно и записывает результат обратно в ваши файлы контента.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx intlayer fill
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Несколько флагов позволяют оптимизировать запуск:
|
|
71
|
+
|
|
72
|
+
- `--git-diff` (или `--uncommitted`) обрабатывает только словари, измененные в текущей ветке.
|
|
73
|
+
- `--file` или `--keys` выбирает конкретные файлы контента.
|
|
74
|
+
- `--output-locales fr es` ограничивает выполнение только теми локалями, которые необходимы прямо сейчас.
|
|
75
|
+
- `--skip-metadata` пропускает создание заголовка, описания и тегов.
|
|
76
|
+
- `--data-serialization toon` передает более компактные данные модели (меньше токенов, немного менее предсказуемый вывод).
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx intlayer fill --git-diff --output-locales fr es --skip-metadata
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Переводите markdown с помощью `doc translate` и `doc review`
|
|
83
|
+
|
|
84
|
+
Запрос агенту на перевод файла `.md` приводит к отправке всего документа для каждой локали при каждом изменении. Команды [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/doc-translate.md) и [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/doc-review.md) работают поблочно.
|
|
85
|
+
|
|
86
|
+
Используйте `doc translate`, если переведенного файла еще не существует. Команда разбивает markdown, переводит его параллельно и создает целевые файлы:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx intlayer doc translate --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Используйте `doc review`, если переведенный файл уже существует. Команда сравнивает каждый блок с базовым документом, пропускает уже переведенные или неизмененные блоки и отправляет только отличающиеся:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx intlayer doc review --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Обе команды принимают ваши инструкции один раз, избавляя от необходимости повторять их в каждом промпте:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npx intlayer doc translate --custom-instructions "Do not translate URLs. Keep the markdown structure and the code blocks untouched."
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Два режима `doc review` особенно полезны, когда агенту необходимо участвовать в процессе без вызовов ИИ со стороны Intlayer:
|
|
105
|
+
|
|
106
|
+
- `--mode report` выводит блоки, требующие внимания, с номерами строк, позволяя агенту изменять только их.
|
|
107
|
+
- `--mode synthesis` сообщает только о том, какие документы актуальны, а какие содержат блоки для редактирования.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx intlayer doc review --mode report --locales fr
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 4. Позвольте агенту обращаться к CLI через сервер MCP
|
|
114
|
+
|
|
115
|
+
Благодаря [серверу MCP Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/mcp_server.md) агент отвечает на основе актуальной документации и запускает `intlayer fill` или `intlayer doc review` самостоятельно вместо повторной реализации логики в диалоге.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
claude mcp add intlayer npx -y @intlayer/mcp
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Установка [Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/agent_skills.md) с помощью `npx intlayer init skills` также избавляет агента от необходимости угадывать API Intlayer и перечитывать документацию при каждой задаче.
|
|
122
|
+
|
|
123
|
+
### 5. Повторно используйте подписку Claude с помощью `claude setup-token`
|
|
124
|
+
|
|
125
|
+
Настройка i18n в интерактивной сессии Claude Code сохраняет всю историю разговора в контексте. Перенесите ресурсоемкие операции в короткую headless-сессию.
|
|
126
|
+
|
|
127
|
+
Сгенерируйте долгоживущий токен из вашей подписки Claude:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
claude setup-token
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Сохраните его как `CLAUDE_CODE_OAUTH_TOKEN` (в файле `.env` или в секретах CI) и используйте для разовой сессии, запускающей команды Intlayer:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
CLAUDE_CODE_OAUTH_TOKEN=... claude -p "Run npx intlayer extract on src/components, then npx intlayer fill --uncommitted"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Сессия будет содержать только этот промпт и вывод команды, исключая всю предыдущую переписку. Этот же токен работает в [Claude Code GitHub Action](https://github.com/anthropics/claude-code-action) для запуска `intlayer fill` при каждом pull request.
|
|
140
|
+
|
|
141
|
+
> Токен, созданный командой `claude setup-token`, авторизует исключительно Claude Code. Его нельзя использовать в качестве ключа API Anthropic в параметре `ai.apiKey`. Для самого перевода `intlayer fill` задействует ваш [аккаунт Intlayer](https://app.intlayer.org) (включая бесплатный тариф) или ваш собственный ключ провайдера, настроенный в секции [`ai`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md#ai-configuration).
|
|
142
|
+
|
|
143
|
+
## Итоги
|
|
144
|
+
|
|
145
|
+
| Задача | Кто выполняет | Токены в контексте агента |
|
|
146
|
+
| ------------------------ | ------------------------ | ------------------------- |
|
|
147
|
+
| Решать, что локализовать | Claude Code | Мало |
|
|
148
|
+
| Извлекать строки | `intlayer extract` | Нет |
|
|
149
|
+
| Переводить контент | `intlayer fill` | Нет |
|
|
150
|
+
| Переводить документацию | `intlayer doc translate` | Нет |
|
|
151
|
+
| Обновлять документацию | `intlayer doc review` | Нет |
|
|
152
|
+
| Выполнять команды | Headless Claude Code | Промпт + вывод команды |
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: Çeviri üretirken Claude Code token tüketimi nasıl sınırlandırılır
|
|
5
|
+
description: Claude Code ile çeviri yapmanın neden aşırı token harcadığı, Intlayer'ın bunun yerine ne yaptığı (çevrilmiş anahtarları filtreler, JSON'u parçalar, markdown'ı blok blok çevirir) ve claude setup-token ile Claude aboneliğinizi nasıl yeniden kullanabileceğiniz.
|
|
6
|
+
keywords:
|
|
7
|
+
- claude code
|
|
8
|
+
- tokens
|
|
9
|
+
- token tüketimi
|
|
10
|
+
- setup-token
|
|
11
|
+
- i18n
|
|
12
|
+
- uluslararasılaştırma
|
|
13
|
+
- çeviri
|
|
14
|
+
- fill
|
|
15
|
+
- mcp
|
|
16
|
+
- ajan
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- claude-code-token-consumption
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Çeviri üretirken Claude Code token tüketimi nasıl sınırlandırılır
|
|
24
|
+
|
|
25
|
+
## Sorun Açıklaması
|
|
26
|
+
|
|
27
|
+
Claude Code'dan (veya herhangi bir kodlama ajanından) içeriğinizi çevirmesini istemek, bu işi yapmanın en maliyetli yoludur. Her çalıştırmada ajanın şunları yapması gerekir:
|
|
28
|
+
|
|
29
|
+
- Zaten çevrilmiş anahtarlar dahil olmak üzere tüm JSON veya içerik dosyasını bağlamına yüklemek.
|
|
30
|
+
- İçeriğin nerede bulunduğunu ve nasıl yapılandırıldığını anlamak için ilgili dosyaları aramak.
|
|
31
|
+
- Hangi dillerin eksik olduğunu ve oluşturulması gerektiğini belirlemek.
|
|
32
|
+
- Özel talimatlarınızı her seferinde yeniden okumak ("URL'leri şu şekilde dönüştür", "marka adını İngilizce bırak", "samimi bir dil kullan").
|
|
33
|
+
- Değişmeyen kısımlar dahil olmak üzere tüm dosyayı baştan yazmak.
|
|
34
|
+
|
|
35
|
+
Tüm bunlar her turda yeniden gönderilir, bu nedenle maliyet `içerik boyutu × dil sayısı × tur sayısı` formülüyle katlanarak artar ve biçimlendirme veya anahtarlardaki herhangi bir kaymanın manuel olarak düzeltilmesi gerekir.
|
|
36
|
+
|
|
37
|
+
## Intlayer bunun yerine ne yapar
|
|
38
|
+
|
|
39
|
+
Intlayer'ın temel avantajı, bu işi ajanın dışında, çeviri için özel olarak oluşturulmuş bir işlem hattıyla (pipeline) gerçekleştirmesidir:
|
|
40
|
+
|
|
41
|
+
- **Mevcut çevirileri filtreler** ve token kullanımını sınırlar. JSON'unuzda zaten çevrilmiş olan anahtarlar ayıklanır ve modele yalnızca eksik olanlar gönderilir.
|
|
42
|
+
- **Markdown'ı blok blok çevirir.** Belgeler için [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/cli/doc-translate.md) ve [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/cli/doc-review.md) komutları, her bloğu temel belgeyle karşılaştırır ve zaten çevrilmiş veya değişmemiş blokları atlar.
|
|
43
|
+
- **JSON'unuz çok büyükse parçalara (chunk) ayırır**, böylece bağlam penceresinin en verimli aralığında kalınmasını sağlar.
|
|
44
|
+
- **JSON'unuzu düzleştirir ve yeniden yapılandırır**, bu sayede token tüketimini optimize eder.
|
|
45
|
+
- **Özel komut istemleri ekler**, böylece markanız ve terminolojinizle ilgili özel kuralları (`applicationContext`, `--custom-instructions`) her sohbette tekrarlamak yerine yalnızca bir kez tanımlarsınız.
|
|
46
|
+
- **Yapıyı doğrular**, tutarlılığı garanti altına alır, anahtar kaymalarını önler ve biçimlendirmeyi (markdown, HTML, eklemeler, çoğullar) korur.
|
|
47
|
+
- **Yeniden deneme (retry) yönetimi uygular**, böylece çıktı hatalı olduğunda süreci otomatik olarak toparlar.
|
|
48
|
+
- **İstekleri sıraya alır ve paralelleştirir**, dosyalar, parçalar ve diller arasında işlem hızını artırır.
|
|
49
|
+
|
|
50
|
+
Bunların hiçbiri ajanın bağlamından geçmez. Temel kural: neyin uluslararasılaştırılacağına ajanın karar vermesini sağlayın, tekrarlayan rutin işleri ise Intlayer'a bırakın.
|
|
51
|
+
|
|
52
|
+
## Çözüm
|
|
53
|
+
|
|
54
|
+
### 1. Ayıklama işlemini `intlayer extract` komutuna devredin
|
|
55
|
+
|
|
56
|
+
Ajanın her bileşeni elle yeniden yazmasını istemek yerine [`extract`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/cli/extract.md) komutunu çalıştırmasını sağlayın. Bu komut, tüm dosyayı ajanın bağlamına yüklemeden sabit kodlanmış metinleri bileşenin yanındaki bir `.content` dosyasına taşır.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx intlayer extract --file src/components/Header.tsx
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Çeviri işlemini `intlayer fill` komutuna devredin
|
|
63
|
+
|
|
64
|
+
Ajanın doğrudan çeviri yapmasını asla istemeyin. [`fill`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/cli/fill.md) komutu yukarıdaki işlem hattını uygular: yalnızca eksik anahtarları gönderir, bunları parçalara ayırır, dilleri paralel olarak çalıştırır ve sonucu içerik dosyalarınıza geri yazar.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx intlayer fill
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Birkaç bayrak işlemi sınırlandırmanızı sağlar:
|
|
71
|
+
|
|
72
|
+
- `--git-diff` (veya `--uncommitted`) yalnızca geçerli daldaki değiştirilmiş sözlükleri işler.
|
|
73
|
+
- `--file` veya `--keys` belirli içerik dosyalarını hedefler.
|
|
74
|
+
- `--output-locales fr es` çalışmayı yalnızca şu anda gerçekten ihtiyacınız olan dillerle sınırlandırır.
|
|
75
|
+
- `--skip-metadata` başlık, açıklama ve etiket oluşturmayı atlar.
|
|
76
|
+
- `--data-serialization toon` modele daha kompakt bir veri yükü gönderir (daha az token, biraz daha az öngörülebilir çıktı).
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx intlayer fill --git-diff --output-locales fr es --skip-metadata
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Markdown'ı `doc translate` ve `doc review` ile çevirin
|
|
83
|
+
|
|
84
|
+
Bir ajandan `.md` dosyasını çevirmesini istemek, her değişiklikte ve her dil için tüm belgenin yapıştırılması anlamına gelir. Buna karşılık [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/cli/doc-translate.md) ve [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/cli/doc-review.md) komutları blok blok çalışır.
|
|
85
|
+
|
|
86
|
+
Çevrilmiş dosya henüz mevcut olmadığında `doc translate` kullanın. Markdown'ı parçalara böler, paralel olarak çevirir ve hedef dosyaları yazar:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx intlayer doc translate --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Çevrilmiş dosya zaten mevcut olduğunda `doc review` kullanın. Her bloğu temel belgeyle karşılaştırır, zaten çevrilmiş veya değişmemiş blokları atlar ve yalnızca farklılık gösteren blokları gönderir:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx intlayer doc review --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Her iki komut da kurallarınızı her istemde tekrarlamak yerine tek bir seferde kabul eder:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npx intlayer doc translate --custom-instructions "Do not translate URLs. Keep the markdown structure and the code blocks untouched."
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Intlayer tarafında herhangi bir yapay zeka çağrısı olmadan ajanın döngüde kalması gerektiğinde `doc review` komutunun iki modu oldukça kullanışlıdır:
|
|
105
|
+
|
|
106
|
+
- `--mode report` müdahale gerektiren blokları satır numaralarıyla birlikte günlüğe kaydeder, böylece ajan yalnızca bu blokları düzenler.
|
|
107
|
+
- `--mode synthesis` yalnızca hangi belgelerin güncel olduğunu ve hangilerinde düzenlenecek blok kaldığını raporlar.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx intlayer doc review --mode report --locales fr
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 4. Ajanın CLI'ı MCP sunucusu üzerinden çağırmasını sağlayın
|
|
114
|
+
|
|
115
|
+
[Intlayer MCP sunucusu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/mcp_server.md) sayesinde ajan güncel belgelere dayanarak yanıt verir ve konuşma içinde mantığı yeniden üretmek yerine `intlayer fill` veya `intlayer doc review` komutlarını doğrudan kendisi çalıştırır.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
claude mcp add intlayer npx -y @intlayer/mcp
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
`npx intlayer init skills` ile [Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/agent_skills.md) kurulumunu yapmak, ajanın Intlayer API'sini tahmin etmesini ve her görevde belgeleri tekrar okumasını da engeller.
|
|
122
|
+
|
|
123
|
+
### 5. Claude aboneliğinizi `claude setup-token` ile yeniden kullanın
|
|
124
|
+
|
|
125
|
+
Etkileşimli Claude Code oturumunuzda i18n kurulumunu çalıştırmak, tüm konuşma geçmişini bağlamda tutar. Bunun yerine yoğun iş yükünü kısa ve gözetimsiz (headless) bir oturuma taşıyın.
|
|
126
|
+
|
|
127
|
+
Claude aboneliğinizden uzun ömürlü bir token oluşturun:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
claude setup-token
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Bunu `CLAUDE_CODE_OAUTH_TOKEN` olarak kaydedin (bir `.env` dosyasında veya CI sırlarınızda), ardından Intlayer komutlarını çalıştıran tek seferlik bir oturum için yeniden kullanın:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
CLAUDE_CODE_OAUTH_TOKEN=... claude -p "Run npx intlayer extract on src/components, then npx intlayer fill --uncommitted"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Oturum, önceki konuşma geçmişinizi taşımadan yalnızca bu komut istemini ve komut çıktısını barındırır. Aynı token, her çekme isteğinde (Pull Request) `intlayer fill` çalıştırmak için [Claude Code GitHub Action](https://github.com/anthropics/claude-code-action) içinde de çalışır.
|
|
140
|
+
|
|
141
|
+
> `claude setup-token` tarafından verilen token yalnızca Claude Code kimliğini doğrular. `ai.apiKey` içinde bir Anthropic API anahtarı olarak kullanılamaz. Çevirinin kendisi için `intlayer fill`, [Intlayer hesabınızı](https://app.intlayer.org) (ücretsiz plan dahildir) veya [`ai`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md#ai-configuration) içinde yapılandırılan kendi sağlayıcı anahtarınızı kullanır.
|
|
142
|
+
|
|
143
|
+
## Özet
|
|
144
|
+
|
|
145
|
+
| Görev | Kim yapar | Ajan bağlamındaki tokenlar |
|
|
146
|
+
| --------------------------------------- | ------------------------ | -------------------------- |
|
|
147
|
+
| Neyin yerelleştirileceğine karar vermek | Claude Code | Düşük |
|
|
148
|
+
| Dizeleri ayıklamak | `intlayer extract` | Yok |
|
|
149
|
+
| İçeriği çevirmek | `intlayer fill` | Yok |
|
|
150
|
+
| Belgeleri çevirmek | `intlayer doc translate` | Yok |
|
|
151
|
+
| Belgeleri güncellemek | `intlayer doc review` | Yok |
|
|
152
|
+
| Komutları çalıştırmak | Headless Claude Code | İstem + komut çıktısı |
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: Як обмежити споживання токенів Claude Code під час генерації перекладів
|
|
5
|
+
description: Чому переклад за допомогою Claude Code спалює токени, що натомість робить Intlayer (фільтрує перекладені ключі, розбиває JSON на частини, перекладає markdown блок за блоком) та як повторно використати підписку Claude за допомогою claude setup-token.
|
|
6
|
+
keywords:
|
|
7
|
+
- claude code
|
|
8
|
+
- tokens
|
|
9
|
+
- споживання токенів
|
|
10
|
+
- setup-token
|
|
11
|
+
- i18n
|
|
12
|
+
- інтернаціоналізація
|
|
13
|
+
- переклад
|
|
14
|
+
- fill
|
|
15
|
+
- mcp
|
|
16
|
+
- агент
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- claude-code-token-consumption
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Як обмежити споживання токенів Claude Code під час генерації перекладів
|
|
24
|
+
|
|
25
|
+
## Опис проблеми
|
|
26
|
+
|
|
27
|
+
Звернення до Claude Code (або будь-якого іншого кодинг-агента) для перекладу вашого контенту є найдорожчим способом. Під час кожного запуску агент змушений:
|
|
28
|
+
|
|
29
|
+
- Завантажувати повний файл JSON або файл контенту у свій контекст, навіть ті ключі, які вже перекладені.
|
|
30
|
+
- Шукати пов'язані файли, щоб зрозуміти, де розташований контент та як він структурований.
|
|
31
|
+
- Визначати, які локалі відсутні та мають бути згенеровані.
|
|
32
|
+
- Щоразу наново зчитувати ваші користувацькі інструкції ("перетворювати URL-адреси саме так", "залишати назву бренду англійською", "використовувати звернення на ти").
|
|
33
|
+
- Переписувати весь файл цілком, включаючи частини, які не зазнали змін.
|
|
34
|
+
|
|
35
|
+
Усе це повторно надсилається на кожній ітерації, через що витрати зростають за формулою `розмір контенту × кількість локалей × кількість ітерацій`, а будь-які невідповідності форматування чи ключів доводиться виправляти вручну.
|
|
36
|
+
|
|
37
|
+
## Що Intlayer робить натомість
|
|
38
|
+
|
|
39
|
+
Перевага Intlayer полягає у виконанні цієї роботи за межами агента завдяки конвеєру (pipeline), створеному спеціально для перекладу:
|
|
40
|
+
|
|
41
|
+
- **Фільтрує наявні переклади** для обмеження використання токенів. Вже перекладені ключі у вашому JSON відсіюються, і до моделі надсилаються лише відсутні.
|
|
42
|
+
- **Перекладає markdown блок за блоком.** Для документації команди [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/doc-translate.md) та [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/doc-review.md) порівнюють кожен блок із базовим документом та пропускають блоки, які вже перекладені або не змінилися.
|
|
43
|
+
- **Розбиває JSON на частини (chunking)**, якщо він завеликий, щоб залишатися в оптимальній зоні контекстного вікна.
|
|
44
|
+
- **Сплощує та реконструює ваш JSON** для оптимізації споживання токенів.
|
|
45
|
+
- **Вставляє користувацькі промпти** для специфічних правил вашого бренду та термінології (`applicationContext`, `--custom-instructions`), що дозволяє описати їх один раз замість повторення в кожному діалозі.
|
|
46
|
+
- **Перевіряє структуру** для гарантування узгодженості та запобігання відхиленню ключів, зберігаючи початкове форматування (markdown, HTML, вставки, множину).
|
|
47
|
+
- **Забезпечує керування повторними спробами (retry)** у разі некоректного формату відповіді.
|
|
48
|
+
- **Ставить у чергу та розпаралелює запити** між файлами, частинами та локалями для досягнення максимальної швидкості.
|
|
49
|
+
|
|
50
|
+
Жоден із цих етапів не навантажує контекст агента. Головне правило: дозвольте агенту вирішувати, **що** потрібно інтернаціоналізувати, а рутинну повторювану роботу довірте Intlayer.
|
|
51
|
+
|
|
52
|
+
## Рішення
|
|
53
|
+
|
|
54
|
+
### 1. Делегуйте вилучення команді `intlayer extract`
|
|
55
|
+
|
|
56
|
+
Замість того щоб просити агента вручну переписувати кожен компонент, доручіть йому виконати команду [`extract`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/extract.md). Вона переносить захардкоджені рядки у файл `.content` поруч із компонентом без завантаження всього вихідного файлу в контекст агента.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx intlayer extract --file src/components/Header.tsx
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Делегуйте переклад команді `intlayer fill`
|
|
63
|
+
|
|
64
|
+
Ніколи не просіть агента перекладати напряму. Команда [`fill`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/fill.md) застосовує описаний вище конвеєр: вона надсилає лише відсутні ключі, розбиває їх на частини, обробляє локалі паралельно та записує результат назад у ваші файли контенту.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx intlayer fill
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Кілька прапорців дозволяють оптимізувати виконання:
|
|
71
|
+
|
|
72
|
+
- `--git-diff` (або `--uncommitted`) обробляє лише словники, змінені в поточній гілці.
|
|
73
|
+
- `--file` або `--keys` обирає конкретні файли контенту.
|
|
74
|
+
- `--output-locales fr es` обмежує запуск лише тими локалями, які вам справді потрібні зараз.
|
|
75
|
+
- `--skip-metadata` пропускає генерацію заголовка, опису та тегів.
|
|
76
|
+
- `--data-serialization toon` передає моделі більш компактні дані (менше токенів, дещо менш передбачуваний результат).
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx intlayer fill --git-diff --output-locales fr es --skip-metadata
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Перекладайте markdown за допомогою `doc translate` та `doc review`
|
|
83
|
+
|
|
84
|
+
Запит до агента на переклад файлу `.md` змушує щоразу вставляти весь документ для кожної локалі при будь-якій зміні. Натомість команди [`doc translate`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/doc-translate.md) та [`doc review`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/doc-review.md) працюють поблочно.
|
|
85
|
+
|
|
86
|
+
Використовуйте `doc translate`, коли перекладеного файлу ще не існує. Команда ділить markdown на частини, перекладає його паралельно та створює цільові файли:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx intlayer doc translate --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Використовуйте `doc review`, коли перекладений файл уже існує. Команда порівнює кожен блок із базовим документом, пропускає блоки, які вже перекладені або не змінилися, і надсилає лише відмінні блоки:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx intlayer doc review --doc-pattern "docs/**/*.md" --base-locale en --locales fr es
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Обидві команди приймають ваші правила один раз, позбавляючи потреби дублювати їх у кожному запиті:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npx intlayer doc translate --custom-instructions "Do not translate URLs. Keep the markdown structure and the code blocks untouched."
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Два режими `doc review` є дуже корисними, коли агент має брати участь у процесі без викликів штучного інтелекту з боку Intlayer:
|
|
105
|
+
|
|
106
|
+
- `--mode report` виводить блоки, що потребують уваги, з номерами рядків, завдяки чому агент редагує тільки їх.
|
|
107
|
+
- `--mode synthesis` повідомляє лише про те, які документи є актуальними, а в яких ще залишилися блоки для редагування.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx intlayer doc review --mode report --locales fr
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 4. Дозвольте агенту викликати CLI через сервер MCP
|
|
114
|
+
|
|
115
|
+
Завдяки [серверу MCP Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/mcp_server.md) агент відповідає на основі актуальної документації та самостійно виконує `intlayer fill` або `intlayer doc review`, замість повторної реалізації цієї логіки в діалозі.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
claude mcp add intlayer npx -y @intlayer/mcp
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Встановлення [Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/agent_skills.md) за допомогою `npx intlayer init skills` також позбавляє агента необхідності вгадувати API Intlayer та перечитувати документацію під час виконання кожного завдання.
|
|
122
|
+
|
|
123
|
+
### 5. Повторно використовуйте підписку Claude за допомогою `claude setup-token`
|
|
124
|
+
|
|
125
|
+
Налаштування i18n в інтерактивній сесії Claude Code зберігає всю історію розмови в контексті. Перенесіть це ресурсомістке навантаження у коротку headless-сесію.
|
|
126
|
+
|
|
127
|
+
Згенеруйте довгоживучий токен із вашої підписки Claude:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
claude setup-token
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Збережіть його як `CLAUDE_CODE_OAUTH_TOKEN` (у файлі `.env` або у секретах CI), а потім використайте для одноразової сесії, яка виконує команди Intlayer:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
CLAUDE_CODE_OAUTH_TOKEN=... claude -p "Run npx intlayer extract on src/components, then npx intlayer fill --uncommitted"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Ця сесія міститиме лише зазначений промпт та вивід команди, без перенесення всієї попередньої розмови. Цей самий токен працює в [Claude Code GitHub Action](https://github.com/anthropics/claude-code-action) для запуску `intlayer fill` під час кожного pull request.
|
|
140
|
+
|
|
141
|
+
> Токен, згенерований через `claude setup-token`, автентифікує виключно Claude Code. Його не можна використовувати як ключ Anthropic API у параметрі `ai.apiKey`. Для самого перекладу `intlayer fill` застосовує ваш [обліковий запис Intlayer](https://app.intlayer.org) (включно з безкоштовним тарифом) або ваш власний ключ провайдера, налаштований у секції [`ai`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md#ai-configuration).
|
|
142
|
+
|
|
143
|
+
## Підсумок
|
|
144
|
+
|
|
145
|
+
| Завдання | Хто виконує | Токени в контексті агента |
|
|
146
|
+
| -------------------------- | ------------------------ | ------------------------- |
|
|
147
|
+
| Визначати, що локалізувати | Claude Code | Низькі |
|
|
148
|
+
| Вилучати рядки | `intlayer extract` | Немає |
|
|
149
|
+
| Перекладати контент | `intlayer fill` | Немає |
|
|
150
|
+
| Перекладати документацію | `intlayer doc translate` | Немає |
|
|
151
|
+
| Оновлювати документацію | `intlayer doc review` | Немає |
|
|
152
|
+
| Виконувати команди | Headless Claude Code | Промпт + вивід команди |
|