@intlayer/docs 5.8.1 → 6.0.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.
- package/blog/ar/rag_powered_documentation_assistant.md +282 -0
- package/blog/de/rag_powered_documentation_assistant.md +282 -0
- package/blog/en/rag_powered_documentation_assistant.md +289 -0
- package/blog/en-GB/rag_powered_documentation_assistant.md +284 -0
- package/blog/es/rag_powered_documentation_assistant.md +308 -0
- package/blog/fr/rag_powered_documentation_assistant.md +308 -0
- package/blog/hi/rag_powered_documentation_assistant.md +284 -0
- package/blog/it/rag_powered_documentation_assistant.md +284 -0
- package/blog/ja/rag_powered_documentation_assistant.md +284 -0
- package/blog/ko/rag_powered_documentation_assistant.md +283 -0
- package/blog/pt/rag_powered_documentation_assistant.md +284 -0
- package/blog/ru/rag_powered_documentation_assistant.md +284 -0
- package/blog/tr/index.md +69 -0
- package/blog/tr/internationalization_and_SEO.md +273 -0
- package/blog/tr/intlayer_with_i18next.md +162 -0
- package/blog/tr/intlayer_with_next-i18next.md +367 -0
- package/blog/tr/intlayer_with_next-intl.md +392 -0
- package/blog/tr/intlayer_with_react-i18next.md +346 -0
- package/blog/tr/intlayer_with_react-intl.md +345 -0
- package/blog/tr/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/tr/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/tr/list_i18n_technologies/CMS/wordpress.md +188 -0
- package/blog/tr/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/tr/list_i18n_technologies/frameworks/flutter.md +150 -0
- package/blog/tr/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/tr/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/tr/list_i18n_technologies/frameworks/svelte.md +129 -0
- package/blog/tr/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +170 -0
- package/blog/tr/rag_powered_documentation_assistant.md +284 -0
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +162 -0
- package/blog/tr/vue-i18n_vs_intlayer.md +276 -0
- package/blog/tr/what_is_internationalization.md +166 -0
- package/blog/zh/rag_powered_documentation_assistant.md +284 -0
- package/dist/cjs/generated/blog.entry.cjs +212 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +660 -132
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +84 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +6 -0
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +212 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +660 -132
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +84 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +6 -0
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +5 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/autoFill.md +41 -40
- package/docs/ar/configuration.md +202 -199
- package/docs/ar/dictionary/content_file.md +1059 -0
- package/docs/ar/intlayer_CMS.md +4 -4
- package/docs/ar/intlayer_with_nestjs.md +271 -0
- package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ar/intlayer_with_react_router_v7.md +533 -0
- package/docs/ar/intlayer_with_tanstack.md +465 -299
- package/docs/ar/intlayer_with_vite+preact.md +7 -7
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/ar/packages/vite-intlayer/index.md +3 -3
- package/docs/ar/readme.md +261 -0
- package/docs/ar/testing.md +199 -0
- package/docs/de/autoFill.md +42 -19
- package/docs/de/configuration.md +155 -147
- package/docs/de/dictionary/content_file.md +1059 -0
- package/docs/de/intlayer_CMS.md +4 -5
- package/docs/de/intlayer_with_nestjs.md +270 -0
- package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/de/intlayer_with_react_router_v7.md +537 -0
- package/docs/de/intlayer_with_tanstack.md +469 -302
- package/docs/de/intlayer_with_vite+preact.md +7 -7
- package/docs/de/intlayer_with_vite+react.md +7 -7
- package/docs/de/intlayer_with_vite+vue.md +9 -9
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/de/readme.md +261 -0
- package/docs/de/testing.md +200 -0
- package/docs/en/CI_CD.md +4 -6
- package/docs/en/autoFill.md +25 -5
- package/docs/en/configuration.md +45 -54
- package/docs/en/dictionary/content_file.md +1054 -0
- package/docs/en/intlayer_CMS.md +8 -7
- package/docs/en/intlayer_cli.md +112 -5
- package/docs/en/intlayer_with_nestjs.md +268 -0
- package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en/intlayer_with_react_router_v7.md +531 -0
- package/docs/en/intlayer_with_tanstack.md +463 -294
- package/docs/en/intlayer_with_vite+preact.md +8 -8
- package/docs/en/intlayer_with_vite+react.md +8 -8
- package/docs/en/intlayer_with_vite+vue.md +8 -8
- package/docs/en/packages/intlayer/getLocalizedUrl.md +102 -25
- package/docs/en/packages/vite-intlayer/index.md +3 -3
- package/docs/en/readme.md +261 -0
- package/docs/en/testing.md +200 -0
- package/docs/en-GB/autoFill.md +29 -6
- package/docs/en-GB/configuration.md +79 -71
- package/docs/en-GB/dictionary/content_file.md +1084 -0
- package/docs/en-GB/intlayer_CMS.md +4 -5
- package/docs/en-GB/intlayer_with_nestjs.md +268 -0
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en-GB/intlayer_with_react_router_v7.md +533 -0
- package/docs/en-GB/intlayer_with_tanstack.md +466 -299
- package/docs/en-GB/intlayer_with_vite+preact.md +7 -7
- package/docs/en-GB/intlayer_with_vite+react.md +7 -7
- package/docs/en-GB/intlayer_with_vite+vue.md +9 -9
- package/docs/en-GB/packages/vite-intlayer/index.md +3 -3
- package/docs/en-GB/readme.md +261 -0
- package/docs/en-GB/testing.md +200 -0
- package/docs/es/autoFill.md +45 -23
- package/docs/es/configuration.md +171 -167
- package/docs/es/dictionary/content_file.md +1088 -0
- package/docs/es/intlayer_CMS.md +4 -5
- package/docs/es/intlayer_with_nestjs.md +268 -0
- package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +533 -0
- package/docs/es/intlayer_with_tanstack.md +469 -280
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/es/packages/vite-intlayer/index.md +3 -3
- package/docs/es/readme.md +261 -0
- package/docs/es/testing.md +200 -0
- package/docs/fr/autoFill.md +47 -24
- package/docs/fr/configuration.md +213 -198
- package/docs/fr/dictionary/content_file.md +1054 -0
- package/docs/fr/intlayer_CMS.md +4 -5
- package/docs/fr/intlayer_with_nestjs.md +268 -0
- package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/fr/intlayer_with_react_router_v7.md +549 -0
- package/docs/fr/intlayer_with_tanstack.md +465 -279
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/packages/vite-intlayer/index.md +3 -3
- package/docs/fr/readme.md +261 -0
- package/docs/fr/testing.md +200 -0
- package/docs/hi/autoFill.md +47 -25
- package/docs/hi/configuration.md +194 -189
- package/docs/hi/dictionary/content_file.md +1056 -0
- package/docs/hi/intlayer_CMS.md +4 -5
- package/docs/hi/intlayer_with_nestjs.md +269 -0
- package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7.md +533 -0
- package/docs/hi/intlayer_with_tanstack.md +467 -282
- package/docs/hi/intlayer_with_vite+preact.md +7 -7
- package/docs/hi/intlayer_with_vite+react.md +7 -7
- package/docs/hi/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/packages/vite-intlayer/index.md +3 -3
- package/docs/hi/readme.md +261 -0
- package/docs/hi/testing.md +200 -0
- package/docs/it/autoFill.md +46 -24
- package/docs/it/configuration.md +169 -161
- package/docs/it/dictionary/content_file.md +1061 -0
- package/docs/it/intlayer_CMS.md +4 -5
- package/docs/it/intlayer_with_nestjs.md +268 -0
- package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/it/intlayer_with_react_router_v7.md +535 -0
- package/docs/it/intlayer_with_tanstack.md +467 -301
- package/docs/it/intlayer_with_vite+preact.md +7 -7
- package/docs/it/intlayer_with_vite+react.md +7 -7
- package/docs/it/intlayer_with_vite+vue.md +9 -9
- package/docs/it/packages/vite-intlayer/index.md +3 -3
- package/docs/it/readme.md +261 -0
- package/docs/it/testing.md +200 -0
- package/docs/ja/autoFill.md +45 -23
- package/docs/ja/configuration.md +243 -204
- package/docs/ja/dictionary/content_file.md +1064 -0
- package/docs/ja/intlayer_CMS.md +4 -5
- package/docs/ja/intlayer_with_nestjs.md +268 -0
- package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ja/intlayer_with_react_router_v7.md +534 -0
- package/docs/ja/intlayer_with_tanstack.md +467 -303
- package/docs/ja/intlayer_with_vite+preact.md +7 -7
- package/docs/ja/intlayer_with_vite+react.md +7 -7
- package/docs/ja/intlayer_with_vite+vue.md +9 -9
- package/docs/ja/packages/vite-intlayer/index.md +3 -3
- package/docs/ja/readme.md +263 -0
- package/docs/ja/testing.md +200 -0
- package/docs/ko/autoFill.md +39 -16
- package/docs/ko/configuration.md +217 -197
- package/docs/ko/dictionary/content_file.md +1060 -0
- package/docs/ko/intlayer_CMS.md +4 -5
- package/docs/ko/intlayer_with_nestjs.md +268 -0
- package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ko/intlayer_with_react_router_v7.md +540 -0
- package/docs/ko/intlayer_with_tanstack.md +466 -302
- package/docs/ko/intlayer_with_vite+preact.md +7 -7
- package/docs/ko/intlayer_with_vite+react.md +7 -7
- package/docs/ko/intlayer_with_vite+vue.md +9 -9
- package/docs/ko/packages/vite-intlayer/index.md +3 -3
- package/docs/ko/readme.md +261 -0
- package/docs/ko/testing.md +200 -0
- package/docs/pt/autoFill.md +39 -15
- package/docs/pt/configuration.md +165 -147
- package/docs/pt/dictionary/content_file.md +1062 -0
- package/docs/pt/intlayer_CMS.md +4 -5
- package/docs/pt/intlayer_with_nestjs.md +271 -0
- package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pt/intlayer_with_react_router_v7.md +535 -0
- package/docs/pt/intlayer_with_tanstack.md +469 -300
- package/docs/pt/intlayer_with_vite+preact.md +7 -7
- package/docs/pt/intlayer_with_vite+react.md +7 -7
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/pt/packages/vite-intlayer/index.md +3 -3
- package/docs/pt/readme.md +261 -0
- package/docs/pt/testing.md +200 -0
- package/docs/ru/autoFill.md +52 -30
- package/docs/ru/configuration.md +164 -117
- package/docs/ru/dictionary/content_file.md +1064 -0
- package/docs/ru/intlayer_CMS.md +4 -4
- package/docs/ru/intlayer_with_nestjs.md +270 -0
- package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ru/intlayer_with_react_router_v7.md +534 -0
- package/docs/ru/intlayer_with_tanstack.md +470 -305
- package/docs/ru/intlayer_with_vite+preact.md +7 -7
- package/docs/ru/intlayer_with_vite+react.md +7 -7
- package/docs/ru/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/packages/vite-intlayer/index.md +3 -3
- package/docs/ru/readme.md +261 -0
- package/docs/ru/testing.md +202 -0
- package/docs/tr/CI_CD.md +198 -0
- package/docs/tr/autoFill.md +201 -0
- package/docs/tr/configuration.md +585 -0
- package/docs/tr/dictionary/condition.md +243 -0
- package/docs/tr/dictionary/content_file.md +1055 -0
- package/docs/tr/dictionary/enumeration.md +251 -0
- package/docs/tr/dictionary/file.md +228 -0
- package/docs/tr/dictionary/function_fetching.md +218 -0
- package/docs/tr/dictionary/gender.md +279 -0
- package/docs/tr/dictionary/insertion.md +191 -0
- package/docs/tr/dictionary/markdown.md +385 -0
- package/docs/tr/dictionary/nesting.md +279 -0
- package/docs/tr/dictionary/translation.md +315 -0
- package/docs/tr/formatters.md +618 -0
- package/docs/tr/how_works_intlayer.md +254 -0
- package/docs/tr/index.md +168 -0
- package/docs/tr/interest_of_intlayer.md +288 -0
- package/docs/tr/intlayer_CMS.md +347 -0
- package/docs/tr/intlayer_cli.md +570 -0
- package/docs/tr/intlayer_visual_editor.md +269 -0
- package/docs/tr/intlayer_with_angular.md +694 -0
- package/docs/tr/intlayer_with_create_react_app.md +1218 -0
- package/docs/tr/intlayer_with_express.md +415 -0
- package/docs/tr/intlayer_with_lynx+react.md +511 -0
- package/docs/tr/intlayer_with_nestjs.md +268 -0
- package/docs/tr/intlayer_with_nextjs_14.md +1029 -0
- package/docs/tr/intlayer_with_nextjs_15.md +1506 -0
- package/docs/tr/intlayer_with_nextjs_page_router.md +1484 -0
- package/docs/tr/intlayer_with_nuxt.md +773 -0
- package/docs/tr/intlayer_with_react_native+expo.md +660 -0
- package/docs/tr/intlayer_with_react_router_v7.md +531 -0
- package/docs/tr/intlayer_with_tanstack.md +452 -0
- package/docs/tr/intlayer_with_vite+preact.md +1673 -0
- package/docs/tr/intlayer_with_vite+react.md +1632 -0
- package/docs/tr/intlayer_with_vite+solid.md +288 -0
- package/docs/tr/intlayer_with_vite+svelte.md +288 -0
- package/docs/tr/intlayer_with_vite+vue.md +1042 -0
- package/docs/tr/introduction.md +209 -0
- package/docs/tr/locale_mapper.md +244 -0
- package/docs/tr/mcp_server.md +207 -0
- package/docs/tr/packages/@intlayer/api/index.md +58 -0
- package/docs/tr/packages/@intlayer/chokidar/index.md +57 -0
- package/docs/tr/packages/@intlayer/cli/index.md +47 -0
- package/docs/tr/packages/@intlayer/config/index.md +142 -0
- package/docs/tr/packages/@intlayer/core/index.md +51 -0
- package/docs/tr/packages/@intlayer/design-system/index.md +47 -0
- package/docs/tr/packages/@intlayer/dictionary-entry/index.md +53 -0
- package/docs/tr/packages/@intlayer/editor/index.md +47 -0
- package/docs/tr/packages/@intlayer/editor-react/index.md +47 -0
- package/docs/tr/packages/@intlayer/webpack/index.md +61 -0
- package/docs/tr/packages/angular-intlayer/index.md +59 -0
- package/docs/tr/packages/express-intlayer/index.md +258 -0
- package/docs/tr/packages/express-intlayer/t.md +459 -0
- package/docs/tr/packages/intlayer/getConfiguration.md +151 -0
- package/docs/tr/packages/intlayer/getEnumeration.md +165 -0
- package/docs/tr/packages/intlayer/getHTMLTextDir.md +127 -0
- package/docs/tr/packages/intlayer/getLocaleLang.md +87 -0
- package/docs/tr/packages/intlayer/getLocaleName.md +124 -0
- package/docs/tr/packages/intlayer/getLocalizedUrl.md +324 -0
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +225 -0
- package/docs/tr/packages/intlayer/getPathWithoutLocale.md +81 -0
- package/docs/tr/packages/intlayer/getTranslation.md +196 -0
- package/docs/tr/packages/intlayer/getTranslationContent.md +195 -0
- package/docs/tr/packages/intlayer/index.md +505 -0
- package/docs/tr/packages/intlayer-cli/index.md +71 -0
- package/docs/tr/packages/intlayer-editor/index.md +139 -0
- package/docs/tr/packages/lynx-intlayer/index.md +85 -0
- package/docs/tr/packages/next-intlayer/index.md +154 -0
- package/docs/tr/packages/next-intlayer/t.md +354 -0
- package/docs/tr/packages/next-intlayer/useDictionary.md +270 -0
- package/docs/tr/packages/next-intlayer/useIntlayer.md +265 -0
- package/docs/tr/packages/next-intlayer/useLocale.md +133 -0
- package/docs/tr/packages/nuxt-intlayer/index.md +59 -0
- package/docs/tr/packages/preact-intlayer/index.md +55 -0
- package/docs/tr/packages/react-intlayer/index.md +148 -0
- package/docs/tr/packages/react-intlayer/t.md +304 -0
- package/docs/tr/packages/react-intlayer/useDictionary.md +554 -0
- package/docs/tr/packages/react-intlayer/useI18n.md +478 -0
- package/docs/tr/packages/react-intlayer/useIntlayer.md +253 -0
- package/docs/tr/packages/react-intlayer/useLocale.md +212 -0
- package/docs/tr/packages/react-native-intlayer/index.md +85 -0
- package/docs/tr/packages/react-scripts-intlayer/index.md +82 -0
- package/docs/tr/packages/solid-intlayer/index.md +56 -0
- package/docs/tr/packages/svelte-intlayer/index.md +55 -0
- package/docs/tr/packages/vite-intlayer/index.md +82 -0
- package/docs/tr/packages/vue-intlayer/index.md +59 -0
- package/docs/tr/per_locale_file.md +321 -0
- package/docs/tr/readme.md +261 -0
- package/docs/tr/roadmap.md +338 -0
- package/docs/tr/testing.md +200 -0
- package/docs/tr/vs_code_extension.md +154 -0
- package/docs/zh/autoFill.md +40 -18
- package/docs/zh/configuration.md +245 -226
- package/docs/zh/dictionary/content_file.md +1064 -0
- package/docs/zh/intlayer_CMS.md +4 -5
- package/docs/zh/intlayer_with_nestjs.md +268 -0
- package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +535 -0
- package/docs/zh/intlayer_with_tanstack.md +468 -278
- package/docs/zh/intlayer_with_vite+preact.md +7 -7
- package/docs/zh/intlayer_with_vite+react.md +7 -7
- package/docs/zh/intlayer_with_vite+vue.md +7 -7
- package/docs/zh/packages/vite-intlayer/index.md +3 -3
- package/docs/zh/readme.md +261 -0
- package/docs/zh/testing.md +198 -0
- package/frequent_questions/tr/SSR_Next_no_[locale].md +105 -0
- package/frequent_questions/tr/array_as_content_declaration.md +72 -0
- package/frequent_questions/tr/build_dictionaries.md +59 -0
- package/frequent_questions/tr/build_error_CI_CD.md +75 -0
- package/frequent_questions/tr/customized_locale_list.md +65 -0
- package/frequent_questions/tr/domain_routing.md +114 -0
- package/frequent_questions/tr/esbuild_error.md +30 -0
- package/frequent_questions/tr/get_locale_cookie.md +142 -0
- package/frequent_questions/tr/intlayer_command_undefined.md +156 -0
- package/frequent_questions/tr/locale_incorect_in_url.md +74 -0
- package/frequent_questions/tr/static_rendering.md +45 -0
- package/frequent_questions/tr/translated_path_url.md +56 -0
- package/frequent_questions/tr/unknown_command.md +98 -0
- package/legal/tr/privacy_notice.md +83 -0
- package/legal/tr/terms_of_service.md +55 -0
- package/package.json +12 -12
- package/src/generated/blog.entry.ts +212 -0
- package/src/generated/docs.entry.ts +663 -135
- package/src/generated/frequentQuestions.entry.ts +85 -1
- package/src/generated/legal.entry.ts +7 -1
- package/docs/ar/dictionary/content_extention_customization.md +0 -100
- package/docs/ar/dictionary/get_started.md +0 -527
- package/docs/de/dictionary/content_extention_customization.md +0 -100
- package/docs/de/dictionary/get_started.md +0 -531
- package/docs/en/dictionary/content_extention_customization.md +0 -102
- package/docs/en/dictionary/get_started.md +0 -529
- package/docs/en-GB/dictionary/content_extention_customization.md +0 -100
- package/docs/en-GB/dictionary/get_started.md +0 -591
- package/docs/es/dictionary/content_extention_customization.md +0 -100
- package/docs/es/dictionary/get_started.md +0 -527
- package/docs/fr/dictionary/content_extention_customization.md +0 -100
- package/docs/fr/dictionary/get_started.md +0 -527
- package/docs/hi/dictionary/content_extention_customization.md +0 -100
- package/docs/hi/dictionary/get_started.md +0 -527
- package/docs/it/dictionary/content_extention_customization.md +0 -113
- package/docs/it/dictionary/get_started.md +0 -573
- package/docs/ja/dictionary/content_extention_customization.md +0 -113
- package/docs/ja/dictionary/get_started.md +0 -576
- package/docs/ko/dictionary/content_extention_customization.md +0 -100
- package/docs/ko/dictionary/get_started.md +0 -530
- package/docs/pt/dictionary/content_extention_customization.md +0 -100
- package/docs/pt/dictionary/get_started.md +0 -532
- package/docs/ru/dictionary/content_extention_customization.md +0 -100
- package/docs/ru/dictionary/get_started.md +0 -575
- package/docs/zh/dictionary/content_extention_customization.md +0 -117
- package/docs/zh/dictionary/get_started.md +0 -533
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-09-07
|
|
3
|
+
updatedAt: 2025-09-07
|
|
4
|
+
title: Intlayer ve react-i18next
|
|
5
|
+
description: React uygulaması için Intlayer'ı react-i18next ile karşılaştırın
|
|
6
|
+
keywords:
|
|
7
|
+
- react-i18next
|
|
8
|
+
- i18next
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Internationalization
|
|
11
|
+
- Blog
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- intlayer-with-react-i18next
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# React Uluslararasılaştırma (i18n) ile react-i18next ve Intlayer
|
|
21
|
+
|
|
22
|
+
## Genel Bakış
|
|
23
|
+
|
|
24
|
+
- **Intlayer**, çevirileri **bileşen düzeyinde** içerik beyan dosyaları aracılığıyla yönetmenize yardımcı olur.
|
|
25
|
+
- **react-i18next**, bileşenlerinizde yerelleştirilmiş dizeleri getirmek için `useTranslation` gibi hook'lar sağlayan **i18next** için popüler bir React entegrasyonudur.
|
|
26
|
+
|
|
27
|
+
Birleştirildiğinde, Intlayer **i18next-uyumlu JSON** olarak sözlükleri **dışa aktarabilir**, böylece react-i18next bunları çalışma zamanında **tüketebilir**.
|
|
28
|
+
|
|
29
|
+
## Neden Intlayer'ı react-i18next ile Kullanmalı?
|
|
30
|
+
|
|
31
|
+
**Intlayer** içerik beyan dosyaları daha iyi bir geliştirici deneyimi sunar çünkü:
|
|
32
|
+
|
|
33
|
+
1. **Dosya Yerleşiminde Esnek**
|
|
34
|
+
Her içerik beyan dosyasını ihtiyacı olan bileşenin yanına koyun. Bu yapı, çevirileri birlikte konumlandırarak bileşenler taşındığında veya silindiğinde yetim çevirileri önler.
|
|
35
|
+
|
|
36
|
+
```bash codeFormat="typescript"
|
|
37
|
+
.
|
|
38
|
+
└── src
|
|
39
|
+
└── components
|
|
40
|
+
└── MyComponent
|
|
41
|
+
├── index.content.ts # İçerik beyan dosyası
|
|
42
|
+
└── index.tsx
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```bash codeFormat="esm"
|
|
46
|
+
.
|
|
47
|
+
└── src
|
|
48
|
+
└── components
|
|
49
|
+
└── MyComponent
|
|
50
|
+
├── index.content.mjs # İçerik beyan dosyası
|
|
51
|
+
└── index.mjx
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```bash codeFormat="cjs"
|
|
55
|
+
.
|
|
56
|
+
└── src
|
|
57
|
+
└── components
|
|
58
|
+
└── MyComponent
|
|
59
|
+
├── index.content.cjs # İçerik beyan dosyası
|
|
60
|
+
└── index.cjx
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```bash codeFormat="json"
|
|
64
|
+
.
|
|
65
|
+
└── src
|
|
66
|
+
└── components
|
|
67
|
+
└── MyComponent
|
|
68
|
+
├── index.content.json # İçerik beyan dosyası
|
|
69
|
+
└── index.jsx
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
2. **Merkezi Çeviriler**
|
|
73
|
+
Tek bir içerik beyan dosyası bir bileşen için gerekli tüm çevirileri toplar, eksik çevirileri yakalamayı kolaylaştırır.
|
|
74
|
+
TypeScript ile, çeviriler eksikse derleme zamanı hataları bile alırsınız.
|
|
75
|
+
|
|
76
|
+
## Kurulum
|
|
77
|
+
|
|
78
|
+
Create React App projesinde, bu bağımlılıkları yükleyin:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# npm ile
|
|
82
|
+
npm install intlayer react-i18next i18next i18next-resources-to-backend
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# yarn ile
|
|
87
|
+
yarn add intlayer react-i18next i18next i18next-resources-to-backend
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# pnpm ile
|
|
92
|
+
pnpm add intlayer react-i18next i18next i18next-resources-to-backend
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Bu Paketler Nedir?
|
|
96
|
+
|
|
97
|
+
- **intlayer** – i18n yapılandırmalarını, içerik beyanlarını yönetmek ve sözlük çıktılarını oluşturmak için CLI ve çekirdek kütüphane.
|
|
98
|
+
- **react-intlayer** – Intlayer için React'e özel entegrasyon, özellikle sözlüklerin otomatik oluşturulmasını sağlayan bazı script'ler sağlar.
|
|
99
|
+
- **react-i18next** – i18next için React'e özel entegrasyon kütüphanesi, `useTranslation` hook'unu içerir.
|
|
100
|
+
- **i18next** – Çeviri işlemeyi yöneten temel çerçeve.
|
|
101
|
+
- **i18next-resources-to-backend** – JSON kaynaklarını dinamik olarak içe aktaran bir i18next arka ucu.
|
|
102
|
+
|
|
103
|
+
## i18next Sözlüklerini Dışa Aktarmak İçin Intlayer'ı Yapılandırma
|
|
104
|
+
|
|
105
|
+
Projenizin kökünde `intlayer.config.ts` dosyasını oluşturun (veya güncelleyin):
|
|
106
|
+
|
|
107
|
+
```typescript title="intlayer.config.ts"
|
|
108
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
109
|
+
|
|
110
|
+
const config: IntlayerConfig = {
|
|
111
|
+
internationalization: {
|
|
112
|
+
// İstediğiniz kadar yerel ekleyin
|
|
113
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
114
|
+
defaultLocale: Locales.ENGLISH,
|
|
115
|
+
},
|
|
116
|
+
content: {
|
|
117
|
+
// Intlayer'a i18next-uyumlu JSON oluşturmasını söyleyin
|
|
118
|
+
dictionaryOutput: ["i18next"],
|
|
119
|
+
|
|
120
|
+
// Oluşturulan kaynaklar için bir çıktı dizini seçin
|
|
121
|
+
// Bu klasör henüz yoksa oluşturulacaktır.
|
|
122
|
+
i18nextResourcesDir: "./i18next/resources",
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export default config;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
> **Not**: TypeScript kullanmıyorsanız, bu yapılandırma dosyasını `.cjs`, `.mjs` veya `.js` olarak oluşturabilirsiniz (detaylar için [Intlayer dokümantasyonuna](https://intlayer.org/en/doc/concept/configuration) bakın).
|
|
130
|
+
|
|
131
|
+
## i18next Kaynaklarını Oluşturma
|
|
132
|
+
|
|
133
|
+
İçerik beyanlarınız yerleştirildikten sonra (sonraki bölüm), **Intlayer build komutunu** çalıştırın:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# npm ile
|
|
137
|
+
npx run intlayer build
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# yarn ile
|
|
142
|
+
yarn intlayer build
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# pnpm ile
|
|
147
|
+
pnpm intlayer build
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
> Bu, varsayılan olarak `./i18next/resources` dizini içinde i18next kaynaklarınızı oluşturacaktır.
|
|
151
|
+
|
|
152
|
+
Tipik bir çıktı şöyle görünebilir:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
.
|
|
156
|
+
└── i18next
|
|
157
|
+
└── resources
|
|
158
|
+
├── en
|
|
159
|
+
│ └── my-content.json
|
|
160
|
+
├── fr
|
|
161
|
+
│ └── my-content.json
|
|
162
|
+
└── es
|
|
163
|
+
└── my-content.json
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Burada her **Intlayer** beyan anahtarı bir **i18next ad alanı** olarak kullanılır (örneğin, `my-content.json`).
|
|
167
|
+
|
|
168
|
+
## Sözlükleri react-i18next Yapılandırmanıza İçe Aktarma
|
|
169
|
+
|
|
170
|
+
Bu kaynakları çalışma zamanında dinamik olarak yüklemek için [`i18next-resources-to-backend`](https://www.npmjs.com/package/i18next-resources-to-backend) kullanın. Örneğin, projenizde bir `i18n.ts` (veya `.js`) dosyası oluşturun:
|
|
171
|
+
|
|
172
|
+
```typescript title="i18n.ts"
|
|
173
|
+
import i18next from "i18next";
|
|
174
|
+
import { initReactI18next } from "react-i18next";
|
|
175
|
+
import resourcesToBackend from "i18next-resources-to-backend";
|
|
176
|
+
|
|
177
|
+
i18next
|
|
178
|
+
// react-i18next eklentisi
|
|
179
|
+
.use(initReactI18next)
|
|
180
|
+
// kaynakları dinamik olarak yükle
|
|
181
|
+
.use(
|
|
182
|
+
resourcesToBackend((language: string, namespace: string) => {
|
|
183
|
+
// İçe aktarma yolunu kaynak dizininize göre ayarlayın
|
|
184
|
+
return import(`../i18next/resources/${language}/${namespace}.json`);
|
|
185
|
+
})
|
|
186
|
+
)
|
|
187
|
+
// i18next'i başlat
|
|
188
|
+
.init({
|
|
189
|
+
// Yedek yerel
|
|
190
|
+
fallbackLng: "en",
|
|
191
|
+
|
|
192
|
+
// Diğer i18next yapılandırma seçeneklerini buraya ekleyebilirsiniz, bkz.:
|
|
193
|
+
// https://www.i18next.com/overview/configuration-options
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
export default i18next;
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```javascript title="i18n.js"
|
|
200
|
+
import i18next from "i18next";
|
|
201
|
+
import { initReactI18next } from "react-i18next";
|
|
202
|
+
import resourcesToBackend from "i18next-resources-to-backend";
|
|
203
|
+
|
|
204
|
+
i18next
|
|
205
|
+
.use(initReactI18next)
|
|
206
|
+
.use(
|
|
207
|
+
resourcesToBackend(
|
|
208
|
+
(language, namespace) =>
|
|
209
|
+
import(`../i18next/resources/${language}/${namespace}.json`)
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
.init({
|
|
213
|
+
fallbackLng: "en",
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
export default i18next;
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Sonra, **kök** veya **index** dosyanızda (örneğin, `src/index.tsx`), bu `i18n` kurulumunu `App` render edilmeden **önce** içe aktarın:
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
import React from "react";
|
|
223
|
+
import ReactDOM from "react-dom/client";
|
|
224
|
+
// Her şeyden önce i18n'i başlat
|
|
225
|
+
import "./i18n";
|
|
226
|
+
import App from "./App";
|
|
227
|
+
|
|
228
|
+
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
|
229
|
+
<React.StrictMode>
|
|
230
|
+
<App />
|
|
231
|
+
</React.StrictMode>
|
|
232
|
+
);
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Sözlüklerinizi Oluşturma ve Yönetme
|
|
236
|
+
|
|
237
|
+
Intlayer çevirileri `./src` altında (varsayılan olarak) bulunan "içerik beyan dosyalarından" çıkarır.
|
|
238
|
+
TypeScript'te minimal bir örnek burada:
|
|
239
|
+
|
|
240
|
+
```typescript title="src/components/MyComponent/MyComponent.content.ts"
|
|
241
|
+
import { t, type Dictionary } from "intlayer";
|
|
242
|
+
|
|
243
|
+
const content = {
|
|
244
|
+
// "key" sizin i18next ad alanınız olacak (örneğin, "my-component")
|
|
245
|
+
key: "my-component",
|
|
246
|
+
content: {
|
|
247
|
+
// Her "t" çağrısı ayrı bir çeviri düğümüdür
|
|
248
|
+
heading: t({
|
|
249
|
+
en: "Hello World",
|
|
250
|
+
es: "Hola Mundo",
|
|
251
|
+
fr: "Bonjour le monde",
|
|
252
|
+
}),
|
|
253
|
+
description: t({
|
|
254
|
+
en: "My i18n description text...",
|
|
255
|
+
fr: "Ma description en i18n...",
|
|
256
|
+
es: "Mi descripción en i18n...",
|
|
257
|
+
}),
|
|
258
|
+
},
|
|
259
|
+
} satisfies Dictionary;
|
|
260
|
+
|
|
261
|
+
export default content;
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
JSON, `.cjs` veya `.mjs` tercih ederseniz, [Intlayer dokümantasyonuna](https://intlayer.org/en/doc/concept/content) bakın.
|
|
265
|
+
|
|
266
|
+
> Varsayılan olarak, geçerli içerik beyanları dosya uzantısı kalıbıyla eşleşir:
|
|
267
|
+
|
|
268
|
+
> `*.content.{ts,tsx,js,jsx,mjs,mjx,cjs,cjx,json}`
|
|
269
|
+
|
|
270
|
+
## React Bileşenlerinde Çevirileri Kullanma
|
|
271
|
+
|
|
272
|
+
Intlayer kaynaklarınızı **oluşturduktan** ve react-i18next'i yapılandırdıktan sonra, **react-i18next**'ten `useTranslation` hook'unu doğrudan kullanabilirsiniz.
|
|
273
|
+
Örneğin:
|
|
274
|
+
|
|
275
|
+
```tsx title="src/components/MyComponent/MyComponent.tsx"
|
|
276
|
+
import type { FC } from "react";
|
|
277
|
+
import { useTranslation } from "react-i18next";
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* i18next "ad alanı" "MyComponent.content.ts" dosyasındaki Intlayer `key`'dir
|
|
281
|
+
* bu yüzden useTranslation()'a "my-component" geçireceğiz.
|
|
282
|
+
*/
|
|
283
|
+
const MyComponent: FC = () => {
|
|
284
|
+
const { t } = useTranslation("my-component");
|
|
285
|
+
|
|
286
|
+
return (
|
|
287
|
+
<div>
|
|
288
|
+
<h1>{t("heading")}</h1>
|
|
289
|
+
<p>{t("description")}</p>
|
|
290
|
+
</div>
|
|
291
|
+
);
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
export default MyComponent;
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
> `t` fonksiyonunun oluşturulan JSON içindeki **anahtarlara** başvurduğunu unutmayın. `heading` adlı bir Intlayer içerik girişi için `t("heading")` kullanacaksınız.
|
|
298
|
+
|
|
299
|
+
## İsteğe Bağlı: Create React App Scripts (CRACO) ile Entegrasyon
|
|
300
|
+
|
|
301
|
+
**react-intlayer**, özel yapılar ve dev sunucu yapılandırması için CRACO tabanlı bir yaklaşım sağlar. Intlayer'ın build adımını sorunsuz bir şekilde entegre etmek istiyorsanız:
|
|
302
|
+
|
|
303
|
+
1. **react-intlayer** yükleyin (henüz yüklemediyseniz):
|
|
304
|
+
```bash
|
|
305
|
+
npm install react-intlayer --save-dev
|
|
306
|
+
```
|
|
307
|
+
2. **`package.json` script'lerinizi** `react-intlayer` script'lerini kullanacak şekilde ayarlayın:
|
|
308
|
+
|
|
309
|
+
```jsonc
|
|
310
|
+
"scripts": {
|
|
311
|
+
"start": "react-intlayer start",
|
|
312
|
+
"build": "react-intlayer build",
|
|
313
|
+
"transpile": "intlayer build"
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
> `react-intlayer` script'leri [CRACO](https://craco.js.org/) tabanlıdır. intlayer craco eklentisine dayalı kendi kurulumunuzu da uygulayabilirsiniz. [Örneğe buradan bakın](https://github.com/aymericzip/intlayer/blob/main/examples/react-app/craco.config.js).
|
|
318
|
+
|
|
319
|
+
Şimdi, `npm run build`, `yarn build` veya `pnpm build` çalıştırmak hem Intlayer hem de CRA yapılarını tetikler.
|
|
320
|
+
|
|
321
|
+
## TypeScript Yapılandırması
|
|
322
|
+
|
|
323
|
+
**Intlayer**, içeriğiniz için **otomatik oluşturulan tip tanımlarını** sağlar. TypeScript'in bunları almasını sağlamak için **`types`** (veya farklı yapılandırdıysanız `types`) dizinini `tsconfig.json` **include** dizisine ekleyin:
|
|
324
|
+
|
|
325
|
+
```json5 title="tsconfig.json"
|
|
326
|
+
{
|
|
327
|
+
"compilerOptions": {
|
|
328
|
+
// ...
|
|
329
|
+
},
|
|
330
|
+
"include": ["src", "types"],
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
> Bu, TypeScript'in çevirilerinizin şeklini çıkararak daha iyi otomatik tamamlama ve hata algılama sağlamasına izin verir.
|
|
335
|
+
|
|
336
|
+
## Git Yapılandırması
|
|
337
|
+
|
|
338
|
+
Intlayer tarafından otomatik oluşturulan dosyaları ve klasörleri **yoksaymak** önerilir. `.gitignore` dosyanıza bu satırı ekleyin:
|
|
339
|
+
|
|
340
|
+
```plaintext
|
|
341
|
+
# Intlayer tarafından oluşturulan dosyaları yoksay
|
|
342
|
+
.intlayer
|
|
343
|
+
i18next
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Genellikle bu kaynakları veya `.intlayer` iç yapı eserlerini **commit etmezsiniz**, çünkü her yapıda yeniden oluşturulabilirler.
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-09-07
|
|
3
|
+
updatedAt: 2025-09-07
|
|
4
|
+
title: Intlayer ve react-intl
|
|
5
|
+
description: React uygulaması için Intlayer'ı react-intl ile entegre edin
|
|
6
|
+
keywords:
|
|
7
|
+
- react-intl
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Internationalization
|
|
10
|
+
- Blog
|
|
11
|
+
- Next.js
|
|
12
|
+
- JavaScript
|
|
13
|
+
- React
|
|
14
|
+
slugs:
|
|
15
|
+
- blog
|
|
16
|
+
- intlayer-with-react-intl
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# React Uluslararasılaştırma (i18n) ile **react-intl** ve Intlayer
|
|
20
|
+
|
|
21
|
+
Bu rehber, React uygulamasında çevirileri yönetmek için **Intlayer**'ı **react-intl** ile nasıl entegre edeceğinizi gösterir. Çevrilebilir içeriğinizi Intlayer ile beyan edeceksiniz ve ardından bu mesajları **react-intl** ile tüketeceksiniz, [FormatJS](https://formatjs.io/docs/react-intl) ekosisteminden popüler bir kütüphane.
|
|
22
|
+
|
|
23
|
+
## Genel Bakış
|
|
24
|
+
|
|
25
|
+
- **Intlayer**, çevirileri projenizde **bileşen düzeyinde** içerik beyan dosyalarında (JSON, JS, TS vb.) saklamanıza izin verir.
|
|
26
|
+
- **react-intl**, yerelleştirilmiş dizeleri görüntülemek için React bileşenleri ve hook'lar ( `<FormattedMessage>` ve `useIntl()` gibi) sağlar.
|
|
27
|
+
|
|
28
|
+
Intlayer'ı çevirileri **react-intl–uyumlu** bir formatta **dışa aktarmak** için yapılandırarak, `<IntlProvider>` (react-intl'den) tarafından gereken mesaj dosyalarını otomatik olarak **oluşturabilir** ve **güncelleyebilirsiniz**.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Neden Intlayer'ı react-intl ile Kullanmalı?
|
|
33
|
+
|
|
34
|
+
1. **Bileşen Başına Sözlükler**
|
|
35
|
+
Intlayer içerik beyan dosyaları React bileşenlerinizin yanında yaşayabilir, bileşenler taşındığında veya kaldırıldığında "yetim" çevirileri önler. Örneğin:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
.
|
|
39
|
+
└── src
|
|
40
|
+
└── components
|
|
41
|
+
└── MyComponent
|
|
42
|
+
├── index.content.ts # Intlayer içerik beyan
|
|
43
|
+
└── index.tsx # React bileşeni
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
2. **Merkezi Çeviriler**
|
|
47
|
+
Her içerik beyan dosyası bir bileşen tarafından ihtiyaç duyulan tüm çevirileri toplar. Bu, özellikle TypeScript projelerinde yardımcı olur: eksik çeviriler **derleme zamanında** yakalanabilir.
|
|
48
|
+
|
|
49
|
+
3. **Otomatik Oluşturma ve Yeniden Oluşturma**
|
|
50
|
+
Çeviri eklediğinizde veya güncellediğinizde, Intlayer mesaj JSON dosyalarını yeniden oluşturur. Bunları react-intl’in `<IntlProvider>`'ına geçebilirsiniz.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Kurulum
|
|
55
|
+
|
|
56
|
+
Tipik bir React projesinde şunları yükleyin:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# npm ile
|
|
60
|
+
npm install intlayer react-intl
|
|
61
|
+
|
|
62
|
+
# yarn ile
|
|
63
|
+
yarn add intlayer react-intl
|
|
64
|
+
|
|
65
|
+
# pnpm ile
|
|
66
|
+
pnpm add intlayer react-intl
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Bu Paketler Neden?
|
|
70
|
+
|
|
71
|
+
- **intlayer**: İçerik beyanlarını tarar, birleştirir ve sözlük çıktılarını oluşturur.
|
|
72
|
+
- **react-intl**: FormatJS'ten ana kütüphane, `<IntlProvider>`, `<FormattedMessage>`, `useIntl()` ve diğer uluslararasılaştırma primitiflerini sağlar.
|
|
73
|
+
|
|
74
|
+
> React'i henüz yüklemediyseniz, onu da yüklemeniz gerekir (`react` ve `react-dom`).
|
|
75
|
+
|
|
76
|
+
## react-intl Mesajlarını Dışa Aktarmak İçin Intlayer'ı Yapılandırma
|
|
77
|
+
|
|
78
|
+
Projenizin kökünde **`intlayer.config.ts`** (veya `.js`, `.mjs`, `.cjs`) oluşturun:
|
|
79
|
+
|
|
80
|
+
```typescript title="intlayer.config.ts"
|
|
81
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
82
|
+
|
|
83
|
+
const config: IntlayerConfig = {
|
|
84
|
+
internationalization: {
|
|
85
|
+
// İstediğiniz kadar yerel ekleyin
|
|
86
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
87
|
+
defaultLocale: Locales.ENGLISH,
|
|
88
|
+
},
|
|
89
|
+
content: {
|
|
90
|
+
// Intlayer'a react-intl için mesaj dosyaları oluşturmasını söyler
|
|
91
|
+
dictionaryOutput: ["react-intl"],
|
|
92
|
+
|
|
93
|
+
// Intlayer'ın mesaj JSON dosyalarınızı yazacağı dizin
|
|
94
|
+
reactIntlMessagesDir: "./react-intl/messages",
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export default config;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
> **Not**: Diğer dosya uzantıları için (`.mjs`, `.cjs`, `.js`), kullanım detayları için [Intlayer dokümantasyonuna](https://intlayer.org/en/doc/concept/configuration) bakın.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Intlayer Sözlüklerinizi Oluşturma
|
|
106
|
+
|
|
107
|
+
Intlayer kod tabanınızı (varsayılan olarak `./src` altında) `*.content.{ts,tsx,js,jsx,mjs,mjx,cjs,cjx,json}` ile eşleşen dosyalar için tarar.
|
|
108
|
+
**TypeScript** örneği burada:
|
|
109
|
+
|
|
110
|
+
```typescript title="src/components/MyComponent/index.content.ts"
|
|
111
|
+
import { t, type Dictionary } from "intlayer";
|
|
112
|
+
|
|
113
|
+
const content = {
|
|
114
|
+
// "key" react-intl JSON dosyanızda üst düzey mesaj anahtarı olur
|
|
115
|
+
key: "my-component",
|
|
116
|
+
|
|
117
|
+
content: {
|
|
118
|
+
// t() çağrısının her biri çevrilebilir bir alan beyan eder
|
|
119
|
+
helloWorld: t({
|
|
120
|
+
en: "Hello World",
|
|
121
|
+
es: "Hola Mundo",
|
|
122
|
+
fr: "Bonjour le monde",
|
|
123
|
+
}),
|
|
124
|
+
description: t({
|
|
125
|
+
en: "This is a description",
|
|
126
|
+
fr: "Ceci est une description",
|
|
127
|
+
es: "Esta es una descripción",
|
|
128
|
+
}),
|
|
129
|
+
},
|
|
130
|
+
} satisfies Dictionary;
|
|
131
|
+
|
|
132
|
+
export default content;
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
JSON veya farklı JS türlerini tercih ederseniz (`.cjs`, `.mjs`), yapı büyük ölçüde aynıdır, bkz. [Intlayer içerik beyan dokümantasyonu](https://intlayer.org/en/doc/concept/content).
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## react-intl Mesajlarını Oluşturma
|
|
140
|
+
|
|
141
|
+
**react-intl** için gerçek mesaj JSON dosyalarını oluşturmak için şunu çalıştırın:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# npm ile
|
|
145
|
+
npx intlayer dictionaries build
|
|
146
|
+
|
|
147
|
+
# yarn ile
|
|
148
|
+
yarn intlayer build
|
|
149
|
+
|
|
150
|
+
# pnpm ile
|
|
151
|
+
pnpm intlayer build
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Bu, tüm `*.content.*` dosyalarını tarar, derler ve sonuçları **`intlayer.config.ts`**'inizde belirtilen dizine yazar, bu örnekte `./react-intl/messages`.
|
|
155
|
+
Tipik bir çıktı şöyle görünebilir:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
.
|
|
159
|
+
└── react-intl
|
|
160
|
+
└── messages
|
|
161
|
+
├── en.json
|
|
162
|
+
├── fr.json
|
|
163
|
+
└── es.json
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Her dosya, beyanlarınızın her **`content.key`**'ine karşılık gelen **üst düzey anahtarlara** sahip bir JSON nesnesidir. **Alt anahtarlar** ( `helloWorld` gibi) o içerik öğesi içinde beyan edilen çevirileri yansıtır.
|
|
167
|
+
|
|
168
|
+
Örneğin, **en.json** şöyle görünebilir:
|
|
169
|
+
|
|
170
|
+
```json fileName="react-intl/messages/en/my-component.json"
|
|
171
|
+
{
|
|
172
|
+
"helloWorld": "Hello World",
|
|
173
|
+
"description": "This is a description"
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## React Uygulamanızda react-intl'i Başlatma
|
|
180
|
+
|
|
181
|
+
### 1. Oluşturulan Mesajları Yükleyin
|
|
182
|
+
|
|
183
|
+
Uygulamanızın kök bileşenini yapılandırdığınız yerde (örneğin, `src/main.tsx` veya `src/index.tsx`), şunları yapmanız gerekir:
|
|
184
|
+
|
|
185
|
+
1. **İçe aktarın** oluşturulan mesaj dosyalarını (statik olarak veya dinamik olarak).
|
|
186
|
+
2. **Sağlayın** bunları `react-intl`'den `<IntlProvider>`'a.
|
|
187
|
+
|
|
188
|
+
Basit bir yaklaşım onları **statik olarak** içe aktarmaktır:
|
|
189
|
+
|
|
190
|
+
```typescript title="src/index.tsx"
|
|
191
|
+
import React from "react";
|
|
192
|
+
import ReactDOM from "react-dom/client";
|
|
193
|
+
import { IntlProvider } from "react-intl";
|
|
194
|
+
import App from "./App";
|
|
195
|
+
|
|
196
|
+
// Yapı çıktısından JSON dosyalarını içe aktarın.
|
|
197
|
+
// Alternatif olarak, kullanıcının seçtiği yerele göre dinamik olarak içe aktarabilirsiniz.
|
|
198
|
+
import en from "../react-intl/messages/en.json";
|
|
199
|
+
import fr from "../react-intl/messages/fr.json";
|
|
200
|
+
import es from "../react-intl/messages/es.json";
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
// Vite'nin import.meta.glob kullanarak tüm JSON dosyalarını dinamik olarak içe aktarın
|
|
205
|
+
const messages = import.meta.glob("../react-intl/messages/**/*.json", {
|
|
206
|
+
eager: true,
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
// Mesajları yapılandırılmış bir kayda toplayın
|
|
210
|
+
const messagesRecord: Record<string, Record<string, any>> = {};
|
|
211
|
+
|
|
212
|
+
Object.entries(messages).forEach(([path, module]) => {
|
|
213
|
+
// Dosya yolundan yerel ve ad alanını çıkarın
|
|
214
|
+
const [, locale, namespace] = path.match(/messages\/(\w+)\/(.+?)\.json$/) ?? [];
|
|
215
|
+
if (locale && namespace) {
|
|
216
|
+
messagesRecord[locale] = messagesRecord[locale] ?? {};
|
|
217
|
+
messagesRecord[locale][namespace] = module.default; // JSON içeriğini atayın
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// Her yerel için ad alanlarını birleştirin
|
|
222
|
+
const mergeMessages = (locale: string) =>
|
|
223
|
+
Object.values(messagesRecord[locale] ?? {}).reduce(
|
|
224
|
+
(acc, namespaceMessages) => ({ ...acc, ...namespaceMessages }),
|
|
225
|
+
{}
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
// Kullanıcının dilini algılamak için bir mekanizmanız varsa, burada ayarlayın.
|
|
229
|
+
// Basitlik için İngilizce'yi seçelim.
|
|
230
|
+
const locale = "en";
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
|
234
|
+
<React.StrictMode>
|
|
235
|
+
<IntlProvider locale={locale} messages={mergeMessages(locale)}>
|
|
236
|
+
<App />
|
|
237
|
+
</IntlProvider>
|
|
238
|
+
</React.StrictMode>
|
|
239
|
+
);
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
> **İpucu**: Gerçek projeler için şunları yapabilirsiniz:
|
|
243
|
+
|
|
244
|
+
> - JSON mesajlarını çalışma zamanında dinamik olarak yükleyin.
|
|
245
|
+
> - Ortama dayalı, tarayıcıya dayalı veya kullanıcı hesabına dayalı yerel algılama kullanın.
|
|
246
|
+
|
|
247
|
+
### 2. `<FormattedMessage>` veya `useIntl()` Kullanın
|
|
248
|
+
|
|
249
|
+
Mesajlarınız `<IntlProvider>`'a yüklendikten sonra, herhangi bir alt bileşen react-intl'i yerelleştirilmiş dizelere erişmek için kullanabilir. İki ana yaklaşım vardır:
|
|
250
|
+
|
|
251
|
+
- **`<FormattedMessage>`** bileşeni
|
|
252
|
+
- **`useIntl()`** hook'u
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## React Bileşenlerinde Çevirileri Kullanma
|
|
257
|
+
|
|
258
|
+
### Yaklaşım A: `<FormattedMessage>`
|
|
259
|
+
|
|
260
|
+
Hızlı satır içi kullanım için:
|
|
261
|
+
|
|
262
|
+
```tsx title="src/components/MyComponent/index.tsx"
|
|
263
|
+
import React from "react";
|
|
264
|
+
import { FormattedMessage } from "react-intl";
|
|
265
|
+
|
|
266
|
+
export default function MyComponent() {
|
|
267
|
+
return (
|
|
268
|
+
<div>
|
|
269
|
+
<h1>
|
|
270
|
+
{/* “my-component.helloWorld” en.json, fr.json vb.'den anahtara başvurur */}
|
|
271
|
+
<FormattedMessage id="my-component.helloWorld" />
|
|
272
|
+
</h1>
|
|
273
|
+
|
|
274
|
+
<p>
|
|
275
|
+
<FormattedMessage id="my-component.description" />
|
|
276
|
+
</p>
|
|
277
|
+
</div>
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
> `<FormattedMessage>`'teki **`id`** prop'u **üst düzey anahtar** (`my-component`) artı herhangi bir alt anahtar (`helloWorld`) ile eşleşmelidir.
|
|
283
|
+
|
|
284
|
+
### Yaklaşım B: `useIntl()`
|
|
285
|
+
|
|
286
|
+
Daha dinamik kullanım için:
|
|
287
|
+
|
|
288
|
+
```tsx title="src/components/MyComponent/index.tsx"
|
|
289
|
+
import React from "react";
|
|
290
|
+
import { useIntl } from "react-intl";
|
|
291
|
+
|
|
292
|
+
export default function MyComponent() {
|
|
293
|
+
const intl = useIntl();
|
|
294
|
+
|
|
295
|
+
return (
|
|
296
|
+
<div>
|
|
297
|
+
<h1>{intl.formatMessage({ id: "my-component.helloWorld" })}</h1>
|
|
298
|
+
<p>{intl.formatMessage({ id: "my-component.description" })}</p>
|
|
299
|
+
</div>
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Her iki yaklaşım da geçerlidir, uygulamanıza uygun olanı seçin.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## Yeni Çeviriler Güncelleme veya Ekleme
|
|
309
|
+
|
|
310
|
+
1. Herhangi bir `*.content.*` dosyasında içeriği **ekleyin veya değiştirin**.
|
|
311
|
+
2. `./react-intl/messages` altında JSON dosyalarını yeniden oluşturmak için `intlayer build` komutunu yeniden çalıştırın.
|
|
312
|
+
3. React (ve react-intl) güncellemeleri bir sonraki yeniden oluşturma veya yeniden yükleme sırasında alacak.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## TypeScript Entegrasyonu (İsteğe Bağlı)
|
|
317
|
+
|
|
318
|
+
TypeScript kullanıyorsanız, Intlayer çevirileriniz için **tip tanımlarını oluşturabilir**.
|
|
319
|
+
|
|
320
|
+
- `tsconfig.json`'ınızın `"include"` dizisinde `types` klasörünüzü (veya Intlayer'ın oluşturduğu çıktı klasörünü) içerdiğinden emin olun.
|
|
321
|
+
|
|
322
|
+
```json5
|
|
323
|
+
{
|
|
324
|
+
"compilerOptions": {
|
|
325
|
+
// ...
|
|
326
|
+
},
|
|
327
|
+
"include": ["src", "types"],
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Oluşturulan tipler, React bileşenlerinizde eksik çevirileri veya geçersiz anahtarları derleme zamanında algılamaya yardımcı olabilir.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Git Yapılandırması
|
|
336
|
+
|
|
337
|
+
Intlayer'ın iç yapı eserlerini sürüm kontrolünden **hariç tutmak** yaygındır. `.gitignore` dosyanıza şunu ekleyin:
|
|
338
|
+
|
|
339
|
+
```plaintext
|
|
340
|
+
# Intlayer yapı eserlerini yoksay
|
|
341
|
+
.intlayer
|
|
342
|
+
react-intl
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
İş akışınıza bağlı olarak, `./react-intl/messages` içindeki son sözlükleri yoksayabilir veya commit edebilirsiniz. CI/CD boru hattınız onları yeniden oluşturuyorsa, güvenle yoksayabilirsiniz; aksi takdirde, üretim dağıtımları için ihtiyaç duyarsanız commit edin.
|