@intlayer/docs 9.0.0-canary.4 → 9.0.0-canary.5
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/intlayer_with_i18next.md +4 -0
- package/blog/ar/intlayer_with_next-i18next.md +0 -11
- package/blog/ar/intlayer_with_next-intl.md +4 -0
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +35 -28
- package/blog/ar/rag_powered_documentation_assistant.md +13 -0
- package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +6 -0
- package/blog/ar/vue-i18n_vs_intlayer.md +8 -0
- package/blog/de/intlayer_with_i18next.md +4 -0
- package/blog/de/intlayer_with_next-i18next.md +0 -11
- package/blog/de/intlayer_with_next-intl.md +4 -0
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +121 -36
- package/blog/de/rag_powered_documentation_assistant.md +0 -193
- package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +8 -0
- package/blog/de/vue-i18n_vs_intlayer.md +8 -0
- package/blog/en-GB/intlayer_with_i18next.md +4 -0
- package/blog/en-GB/intlayer_with_next-i18next.md +0 -11
- package/blog/en-GB/intlayer_with_next-intl.md +4 -0
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +121 -28
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +14 -0
- package/blog/en-GB/vue-i18n_vs_intlayer.md +16 -0
- package/blog/es/intlayer_with_i18next.md +4 -0
- package/blog/es/intlayer_with_next-i18next.md +0 -11
- package/blog/es/intlayer_with_next-intl.md +4 -0
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +121 -28
- package/blog/es/rag_powered_documentation_assistant.md +13 -0
- package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +8 -0
- package/blog/es/vue-i18n_vs_intlayer.md +8 -0
- package/blog/fr/i18n_meaning.md +95 -0
- package/blog/fr/intlayer_with_next-i18next.md +0 -11
- package/blog/fr/intlayer_with_next-intl.md +4 -0
- package/blog/fr/intlayer_with_react-i18next.md +0 -8
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +121 -28
- package/blog/fr/rag_powered_documentation_assistant.md +0 -62
- package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +8 -0
- package/blog/fr/vue-i18n_vs_intlayer.md +8 -0
- package/blog/hi/intlayer_with_i18next.md +4 -0
- package/blog/hi/intlayer_with_next-i18next.md +0 -11
- package/blog/hi/intlayer_with_next-intl.md +4 -0
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +1256 -0
- package/blog/hi/rag_powered_documentation_assistant.md +13 -0
- package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +6 -0
- package/blog/hi/vue-i18n_vs_intlayer.md +8 -0
- package/blog/id/internationalization_and_SEO.md +0 -91
- package/blog/id/intlayer_with_i18next.md +4 -0
- package/blog/id/intlayer_with_next-i18next.md +0 -11
- package/blog/id/intlayer_with_next-intl.md +4 -0
- package/blog/id/rag_powered_documentation_assistant.md +13 -0
- package/blog/it/intlayer_with_i18next.md +4 -0
- package/blog/it/intlayer_with_next-i18next.md +0 -11
- package/blog/it/intlayer_with_next-intl.md +4 -0
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +121 -36
- package/blog/it/rag_powered_documentation_assistant.md +0 -195
- package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +8 -0
- package/blog/it/vue-i18n_vs_intlayer.md +8 -0
- package/blog/ja/intlayer_with_i18next.md +4 -0
- package/blog/ja/intlayer_with_next-i18next.md +0 -11
- package/blog/ja/intlayer_with_next-intl.md +4 -0
- package/blog/ja/l10n_platform_alternative/Lokalise.md +10 -0
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +121 -26
- package/blog/ja/rag_powered_documentation_assistant.md +13 -0
- package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +6 -0
- package/blog/ja/vue-i18n_vs_intlayer.md +8 -0
- package/blog/ko/intlayer_with_i18next.md +4 -0
- package/blog/ko/intlayer_with_next-i18next.md +0 -11
- package/blog/ko/intlayer_with_next-intl.md +4 -0
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +121 -18
- package/blog/ko/rag_powered_documentation_assistant.md +0 -194
- package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +6 -0
- package/blog/ko/vue-i18n_vs_intlayer.md +8 -0
- package/blog/ko/what_is_internationalization.md +0 -4
- package/blog/pl/___per-component_vs_centralized_i18n.md +100 -0
- package/blog/pl/internationalization_and_SEO.md +0 -91
- package/blog/pl/intlayer_with_i18next.md +4 -0
- package/blog/pl/intlayer_with_next-i18next.md +0 -11
- package/blog/pl/intlayer_with_next-intl.md +4 -0
- package/blog/pl/l10n_platform_alternative/Lokalise.md +6 -0
- package/blog/pl/rag_powered_documentation_assistant.md +13 -0
- package/blog/pt/internationalization_and_SEO.md +1 -1
- package/blog/pt/intlayer_with_i18next.md +4 -0
- package/blog/pt/intlayer_with_next-i18next.md +0 -11
- package/blog/pt/intlayer_with_next-intl.md +4 -0
- package/blog/pt/intlayer_with_react-intl.md +0 -4
- package/blog/pt/l10n_platform_alternative/crowdin.md +0 -6
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +121 -28
- package/blog/pt/rag_powered_documentation_assistant.md +0 -195
- package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +8 -0
- package/blog/pt/vue-i18n_vs_intlayer.md +8 -0
- package/blog/ru/intlayer_with_i18next.md +4 -0
- package/blog/ru/intlayer_with_next-i18next.md +0 -11
- package/blog/ru/intlayer_with_next-intl.md +4 -0
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +121 -36
- package/blog/ru/rag_powered_documentation_assistant.md +13 -0
- package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +8 -0
- package/blog/ru/vue-i18n_vs_intlayer.md +8 -0
- package/blog/tr/intlayer_with_i18next.md +4 -0
- package/blog/tr/intlayer_with_next-i18next.md +0 -11
- package/blog/tr/intlayer_with_next-intl.md +4 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +1189 -0
- package/blog/tr/rag_powered_documentation_assistant.md +0 -38
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +9 -0
- package/blog/uk/rag_powered_documentation_assistant.md +13 -0
- package/blog/vi/internationalization_and_SEO.md +0 -91
- package/blog/vi/intlayer_with_i18next.md +4 -0
- package/blog/vi/intlayer_with_next-i18next.md +0 -11
- package/blog/vi/intlayer_with_next-intl.md +4 -0
- package/blog/vi/rag_powered_documentation_assistant.md +13 -0
- package/blog/zh/intlayer_with_i18next.md +4 -47
- package/blog/zh/intlayer_with_next-i18next.md +0 -58
- package/blog/zh/intlayer_with_next-intl.md +4 -47
- package/blog/zh/intlayer_with_react-i18next.md +0 -47
- package/blog/zh/intlayer_with_react-intl.md +0 -47
- package/blog/zh/intlayer_with_vue-i18n.md +0 -47
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +121 -26
- package/blog/zh/nextjs-multilingual-seo-comparison.md +0 -30
- package/blog/zh/rag_powered_documentation_assistant.md +0 -191
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +6 -0
- package/blog/zh/vue-i18n_vs_intlayer.md +8 -0
- package/docs/ar/CI_CD.md +4 -0
- package/docs/ar/autoFill.md +81 -0
- package/docs/ar/benchmark/solid.md +22 -0
- package/docs/ar/benchmark/svelte.md +22 -0
- package/docs/ar/benchmark/tanstack.md +22 -0
- package/docs/ar/cli/ci.md +22 -0
- package/docs/ar/cli/fill.md +8 -0
- package/docs/ar/compat/i18n-js.md +44 -0
- package/docs/ar/compat/i18next.md +59 -0
- package/docs/ar/compat/index.md +51 -0
- package/docs/ar/compat/lingui.md +44 -0
- package/docs/ar/compat/next-i18next.md +57 -0
- package/docs/ar/compat/next-intl.md +59 -0
- package/docs/ar/compat/next-translate.md +45 -0
- package/docs/ar/compat/ngx-translate.md +45 -0
- package/docs/ar/compat/nuxtjs-i18n.md +46 -0
- package/docs/ar/compat/polyglot.md +45 -0
- package/docs/ar/compat/react-i18next.md +58 -0
- package/docs/ar/compat/react-intl.md +55 -0
- package/docs/ar/compat/svelte-i18n.md +47 -0
- package/docs/ar/compat/transloco.md +45 -0
- package/docs/ar/compat/vue-i18n.md +58 -0
- package/docs/ar/compiler.md +3 -1
- package/docs/ar/configuration.md +19 -17
- package/docs/ar/custom_domains.md +1 -1
- package/docs/ar/custom_url_rewrites.md +1 -1
- package/docs/ar/dictionary/content_file.md +4 -7
- package/docs/ar/dictionary/enumeration.md +0 -187
- package/docs/ar/dictionary/file.md +8 -0
- package/docs/ar/dictionary/nesting.md +39 -0
- package/docs/ar/dictionary/translation.md +0 -61
- package/docs/ar/formatters.md +59 -0
- package/docs/ar/how_works_intlayer.md +4 -0
- package/docs/ar/interest_of_intlayer.md +193 -0
- package/docs/ar/intlayer_CMS.md +6 -0
- package/docs/ar/intlayer_with_astro.md +129 -2
- package/docs/ar/intlayer_with_astro_lit.md +1 -1
- package/docs/ar/intlayer_with_astro_preact.md +1 -1
- package/docs/ar/intlayer_with_astro_react.md +1 -1
- package/docs/ar/intlayer_with_astro_solid.md +1 -1
- package/docs/ar/intlayer_with_astro_svelte.md +1 -1
- package/docs/ar/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ar/intlayer_with_astro_vue.md +1 -1
- package/docs/ar/intlayer_with_create_react_app.md +0 -14
- package/docs/ar/intlayer_with_express.md +0 -21
- package/docs/ar/intlayer_with_nestjs.md +0 -18
- package/docs/ar/intlayer_with_nextjs_14.md +30 -7
- package/docs/ar/intlayer_with_nextjs_15.md +21 -1
- package/docs/ar/intlayer_with_nextjs_16.md +124 -2
- package/docs/ar/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/ar/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ar/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/ar/intlayer_with_react_native+expo.md +36 -0
- package/docs/ar/intlayer_with_react_router_v7.md +1 -95
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +20 -96
- package/docs/ar/intlayer_with_svelte_kit.md +1 -207
- package/docs/ar/intlayer_with_tanstack+solid.md +3 -1
- package/docs/ar/intlayer_with_tanstack.md +1 -1
- package/docs/ar/intlayer_with_vite+lit.md +1 -1
- package/docs/ar/intlayer_with_vite+preact.md +40 -40
- package/docs/ar/intlayer_with_vite+react.md +1 -1
- package/docs/ar/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ar/intlayer_with_vite+solid.md +25 -25
- package/docs/ar/intlayer_with_vite+svelte.md +12 -12
- package/docs/ar/intlayer_with_vite+vanilla.md +1 -1
- package/docs/ar/intlayer_with_vite+vue.md +44 -114
- package/docs/ar/mcp_server.md +22 -0
- package/docs/ar/migration_from_i18next_to_intlayer.md +333 -0
- package/docs/ar/migration_from_next-i18next_to_intlayer.md +355 -0
- package/docs/ar/migration_from_next-intl_to_intlayer.md +364 -0
- package/docs/ar/migration_from_nuxtjs_i18n_to_intlayer.md +328 -0
- package/docs/ar/migration_from_react-i18next_to_intlayer.md +384 -0
- package/docs/ar/migration_from_vue-i18n_to_intlayer.md +359 -0
- package/docs/ar/packages/intlayer/getLocalizedUrl.md +73 -0
- package/docs/ar/packages/intlayer/getMultilingualUrls.md +111 -0
- package/docs/ar/packages/intlayer/getPathWithoutLocale.md +0 -4
- package/docs/ar/packages/react-intlayer/t.md +0 -13
- package/docs/ar/packages/react-intlayer/useDictionary.md +0 -104
- package/docs/ar/packages/react-intlayer/useI18n.md +0 -4
- package/docs/ar/packages/react-intlayer/useIntlayer.md +0 -55
- package/docs/ar/releases/v6.md +28 -0
- package/docs/ar/releases/v7.md +128 -0
- package/docs/ar/releases/v9.md +37 -1
- package/docs/ar/roadmap.md +6 -0
- package/docs/de/CI_CD.md +4 -0
- package/docs/de/autoFill.md +81 -0
- package/docs/de/benchmark/solid.md +22 -0
- package/docs/de/benchmark/svelte.md +22 -0
- package/docs/de/benchmark/tanstack.md +22 -0
- package/docs/de/cli/ci.md +22 -0
- package/docs/de/cli/fill.md +8 -0
- package/docs/de/cli/init.md +20 -0
- package/docs/de/compat/i18n-js.md +44 -0
- package/docs/de/compat/i18next.md +59 -0
- package/docs/de/compat/index.md +51 -0
- package/docs/de/compat/lingui.md +44 -0
- package/docs/de/compat/next-i18next.md +57 -0
- package/docs/de/compat/next-intl.md +59 -0
- package/docs/de/compat/next-translate.md +45 -0
- package/docs/de/compat/ngx-translate.md +45 -0
- package/docs/de/compat/nuxtjs-i18n.md +46 -0
- package/docs/de/compat/polyglot.md +45 -0
- package/docs/de/compat/react-i18next.md +58 -0
- package/docs/de/compat/react-intl.md +55 -0
- package/docs/de/compat/svelte-i18n.md +47 -0
- package/docs/de/compat/transloco.md +45 -0
- package/docs/de/compat/vue-i18n.md +58 -0
- package/docs/de/compiler.md +3 -1
- package/docs/de/configuration.md +19 -17
- package/docs/de/custom_domains.md +1 -1
- package/docs/de/custom_url_rewrites.md +1 -1
- package/docs/de/dictionary/content_file.md +4 -0
- package/docs/de/dictionary/enumeration.md +0 -199
- package/docs/de/dictionary/file.md +8 -0
- package/docs/de/dictionary/insertion.md +0 -4
- package/docs/de/dictionary/nesting.md +39 -0
- package/docs/de/dictionary/translation.md +0 -61
- package/docs/de/dynamic_dictionaries/index.md +6 -0
- package/docs/de/formatters.md +130 -0
- package/docs/de/how_works_intlayer.md +4 -0
- package/docs/de/intlayer_CMS.md +6 -0
- package/docs/de/intlayer_with_astro.md +129 -2
- package/docs/de/intlayer_with_astro_lit.md +1 -1
- package/docs/de/intlayer_with_astro_preact.md +1 -1
- package/docs/de/intlayer_with_astro_react.md +1 -1
- package/docs/de/intlayer_with_astro_solid.md +1 -1
- package/docs/de/intlayer_with_astro_svelte.md +1 -1
- package/docs/de/intlayer_with_astro_vanilla.md +1 -1
- package/docs/de/intlayer_with_astro_vue.md +1 -1
- package/docs/de/intlayer_with_create_react_app.md +15 -0
- package/docs/de/intlayer_with_express.md +0 -23
- package/docs/de/intlayer_with_lynx+react.md +4 -2
- package/docs/de/intlayer_with_nestjs.md +0 -8
- package/docs/de/intlayer_with_nextjs_14.md +28 -7
- package/docs/de/intlayer_with_nextjs_15.md +21 -1
- package/docs/de/intlayer_with_nextjs_16.md +1 -1
- package/docs/de/intlayer_with_nextjs_compiler.md +49 -1
- package/docs/de/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/de/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/de/intlayer_with_react_native+expo.md +36 -0
- package/docs/de/intlayer_with_react_router_v7.md +1 -95
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +1 -91
- package/docs/de/intlayer_with_svelte_kit.md +1 -207
- package/docs/de/intlayer_with_tanstack+solid.md +3 -1
- package/docs/de/intlayer_with_tanstack.md +1 -1
- package/docs/de/intlayer_with_vite+lit.md +1 -1
- package/docs/de/intlayer_with_vite+preact.md +61 -57
- package/docs/de/intlayer_with_vite+react.md +1 -1
- package/docs/de/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/de/intlayer_with_vite+solid.md +33 -42
- package/docs/de/intlayer_with_vite+svelte.md +27 -29
- package/docs/de/intlayer_with_vite+vanilla.md +1 -1
- package/docs/de/intlayer_with_vite+vue.md +54 -102
- package/docs/de/mcp_server.md +22 -0
- package/docs/de/packages/intlayer/getLocalizedUrl.md +75 -0
- package/docs/de/packages/intlayer/getMultilingualUrls.md +111 -0
- package/docs/de/packages/react-intlayer/useDictionary.md +0 -116
- package/docs/de/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/de/releases/v6.md +10 -6
- package/docs/de/releases/v7.md +128 -0
- package/docs/de/releases/v9.md +37 -1
- package/docs/de/roadmap.md +6 -16
- package/docs/en/bundle_optimization.md +8 -3
- package/docs/en/compiler.md +12 -6
- package/docs/en/configuration.md +22 -8
- package/docs/en/custom_domains.md +2 -0
- package/docs/en/custom_url_rewrites.md +2 -0
- package/docs/en/intlayer_with_astro.md +2 -0
- package/docs/en/intlayer_with_astro_lit.md +2 -0
- package/docs/en/intlayer_with_astro_preact.md +2 -0
- package/docs/en/intlayer_with_astro_react.md +2 -0
- package/docs/en/intlayer_with_astro_solid.md +2 -0
- package/docs/en/intlayer_with_astro_svelte.md +2 -0
- package/docs/en/intlayer_with_astro_vanilla.md +2 -0
- package/docs/en/intlayer_with_astro_vue.md +2 -0
- package/docs/en/intlayer_with_nextjs_14.md +2 -0
- package/docs/en/intlayer_with_nextjs_15.md +2 -0
- package/docs/en/intlayer_with_nextjs_16.md +2 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +2 -0
- package/docs/en/intlayer_with_nextjs_no_locale_path.md +2 -0
- package/docs/en/intlayer_with_nextjs_page_router.md +2 -0
- package/docs/en/intlayer_with_react_native+expo.md +8 -0
- package/docs/en/intlayer_with_react_router_v7.md +2 -0
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +2 -0
- package/docs/en/intlayer_with_svelte_kit.md +4 -0
- package/docs/en/intlayer_with_tanstack+solid.md +2 -0
- package/docs/en/intlayer_with_tanstack.md +2 -0
- package/docs/en/intlayer_with_vite+lit.md +2 -0
- package/docs/en/intlayer_with_vite+preact.md +2 -0
- package/docs/en/intlayer_with_vite+react.md +2 -0
- package/docs/en/intlayer_with_vite+react_compiler.md +2 -0
- package/docs/en/intlayer_with_vite+solid.md +2 -0
- package/docs/en/intlayer_with_vite+svelte.md +2 -0
- package/docs/en/intlayer_with_vite+vanilla.md +4 -0
- package/docs/en/intlayer_with_vite+vue.md +2 -0
- package/docs/en/releases/v9.md +38 -1
- package/docs/en-GB/CI_CD.md +4 -0
- package/docs/en-GB/autoFill.md +81 -0
- package/docs/en-GB/benchmark/solid.md +22 -0
- package/docs/en-GB/benchmark/svelte.md +22 -0
- package/docs/en-GB/benchmark/tanstack.md +22 -0
- package/docs/en-GB/cli/ci.md +22 -0
- package/docs/en-GB/cli/fill.md +8 -0
- package/docs/en-GB/cli/login.md +0 -36
- package/docs/en-GB/cli/test.md +0 -36
- package/docs/en-GB/compat/i18n-js.md +44 -0
- package/docs/en-GB/compat/i18next.md +59 -0
- package/docs/en-GB/compat/index.md +51 -0
- package/docs/en-GB/compat/lingui.md +44 -0
- package/docs/en-GB/compat/next-i18next.md +57 -0
- package/docs/en-GB/compat/next-intl.md +59 -0
- package/docs/en-GB/compat/next-translate.md +45 -0
- package/docs/en-GB/compat/ngx-translate.md +45 -0
- package/docs/en-GB/compat/nuxtjs-i18n.md +46 -0
- package/docs/en-GB/compat/polyglot.md +45 -0
- package/docs/en-GB/compat/react-i18next.md +58 -0
- package/docs/en-GB/compat/react-intl.md +55 -0
- package/docs/en-GB/compat/svelte-i18n.md +47 -0
- package/docs/en-GB/compat/transloco.md +45 -0
- package/docs/en-GB/compat/vue-i18n.md +58 -0
- package/docs/en-GB/compiler.md +3 -1
- package/docs/en-GB/configuration.md +4 -1
- package/docs/en-GB/custom_domains.md +1 -1
- package/docs/en-GB/custom_url_rewrites.md +1 -1
- package/docs/en-GB/dictionary/content_file.md +4 -7
- package/docs/en-GB/dictionary/file.md +8 -0
- package/docs/en-GB/dictionary/function_fetching.md +0 -4
- package/docs/en-GB/dictionary/nesting.md +8 -0
- package/docs/en-GB/dictionary/translation.md +0 -61
- package/docs/en-GB/formatters.md +59 -0
- package/docs/en-GB/how_works_intlayer.md +4 -16
- package/docs/en-GB/intlayer_CMS.md +6 -0
- package/docs/en-GB/intlayer_with_astro.md +129 -2
- package/docs/en-GB/intlayer_with_astro_lit.md +1 -1
- package/docs/en-GB/intlayer_with_astro_preact.md +1 -1
- package/docs/en-GB/intlayer_with_astro_react.md +1 -1
- package/docs/en-GB/intlayer_with_astro_solid.md +1 -1
- package/docs/en-GB/intlayer_with_astro_svelte.md +1 -1
- package/docs/en-GB/intlayer_with_astro_vanilla.md +1 -1
- package/docs/en-GB/intlayer_with_astro_vue.md +1 -1
- package/docs/en-GB/intlayer_with_create_react_app.md +0 -46
- package/docs/en-GB/intlayer_with_express.md +0 -23
- package/docs/en-GB/intlayer_with_nestjs.md +0 -8
- package/docs/en-GB/intlayer_with_nextjs_14.md +13 -5
- package/docs/en-GB/intlayer_with_nextjs_15.md +23 -1
- package/docs/en-GB/intlayer_with_nextjs_16.md +3 -1
- package/docs/en-GB/intlayer_with_nextjs_compiler.md +3 -1
- package/docs/en-GB/intlayer_with_nextjs_no_locale_path.md +3 -1
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/en-GB/intlayer_with_react_native+expo.md +36 -0
- package/docs/en-GB/intlayer_with_react_router_v7.md +1 -1
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +20 -1
- package/docs/en-GB/intlayer_with_svelte_kit.md +1 -207
- package/docs/en-GB/intlayer_with_tanstack+solid.md +3 -1
- package/docs/en-GB/intlayer_with_tanstack.md +1 -1
- package/docs/en-GB/intlayer_with_vite+lit.md +1 -1
- package/docs/en-GB/intlayer_with_vite+preact.md +5 -1
- package/docs/en-GB/intlayer_with_vite+react.md +1 -1
- package/docs/en-GB/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/en-GB/intlayer_with_vite+solid.md +1 -1
- package/docs/en-GB/intlayer_with_vite+svelte.md +1 -1
- package/docs/en-GB/intlayer_with_vite+vanilla.md +1 -1
- package/docs/en-GB/intlayer_with_vite+vue.md +9 -180
- package/docs/en-GB/migration_from_i18next_to_intlayer.md +333 -0
- package/docs/en-GB/migration_from_next-i18next_to_intlayer.md +355 -0
- package/docs/en-GB/migration_from_next-intl_to_intlayer.md +364 -0
- package/docs/en-GB/migration_from_nuxtjs_i18n_to_intlayer.md +328 -0
- package/docs/en-GB/migration_from_react-i18next_to_intlayer.md +384 -0
- package/docs/en-GB/migration_from_vue-i18n_to_intlayer.md +359 -0
- package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +75 -0
- package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +44 -0
- package/docs/en-GB/packages/intlayer/getTranslation.md +0 -16
- package/docs/en-GB/packages/react-intlayer/useDictionary.md +0 -123
- package/docs/en-GB/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/en-GB/plugins/sync-json.md +0 -59
- package/docs/en-GB/releases/v6.md +10 -6
- package/docs/en-GB/releases/v7.md +128 -0
- package/docs/en-GB/releases/v8.md +190 -0
- package/docs/en-GB/releases/v9.md +37 -1
- package/docs/en-GB/roadmap.md +6 -0
- package/docs/es/CI_CD.md +4 -0
- package/docs/es/autoFill.md +81 -0
- package/docs/es/benchmark/solid.md +22 -0
- package/docs/es/benchmark/svelte.md +22 -0
- package/docs/es/benchmark/tanstack.md +22 -0
- package/docs/es/cli/ci.md +22 -0
- package/docs/es/cli/fill.md +8 -0
- package/docs/es/cli/login.md +0 -36
- package/docs/es/compat/i18n-js.md +44 -0
- package/docs/es/compat/i18next.md +59 -0
- package/docs/es/compat/index.md +51 -0
- package/docs/es/compat/lingui.md +44 -0
- package/docs/es/compat/next-i18next.md +57 -0
- package/docs/es/compat/next-intl.md +61 -0
- package/docs/es/compat/next-translate.md +45 -0
- package/docs/es/compat/ngx-translate.md +45 -0
- package/docs/es/compat/nuxtjs-i18n.md +46 -0
- package/docs/es/compat/polyglot.md +45 -0
- package/docs/es/compat/react-i18next.md +58 -0
- package/docs/es/compat/react-intl.md +55 -0
- package/docs/es/compat/svelte-i18n.md +47 -0
- package/docs/es/compat/transloco.md +45 -0
- package/docs/es/compat/vue-i18n.md +58 -0
- package/docs/es/compiler.md +3 -1
- package/docs/es/configuration.md +19 -17
- package/docs/es/custom_domains.md +1 -1
- package/docs/es/custom_url_rewrites.md +1 -1
- package/docs/es/dictionary/content_file.md +4 -0
- package/docs/es/dictionary/file.md +8 -0
- package/docs/es/dictionary/nesting.md +39 -0
- package/docs/es/dictionary/translation.md +0 -61
- package/docs/es/formatters.md +82 -0
- package/docs/es/how_works_intlayer.md +4 -4
- package/docs/es/intlayer_CMS.md +21 -0
- package/docs/es/intlayer_visual_editor.md +0 -23
- package/docs/es/intlayer_with_astro.md +129 -2
- package/docs/es/intlayer_with_astro_lit.md +1 -1
- package/docs/es/intlayer_with_astro_preact.md +1 -1
- package/docs/es/intlayer_with_astro_react.md +1 -1
- package/docs/es/intlayer_with_astro_solid.md +1 -1
- package/docs/es/intlayer_with_astro_svelte.md +1 -1
- package/docs/es/intlayer_with_astro_vanilla.md +1 -1
- package/docs/es/intlayer_with_astro_vue.md +1 -1
- package/docs/es/intlayer_with_express.md +0 -4
- package/docs/es/intlayer_with_nestjs.md +0 -18
- package/docs/es/intlayer_with_nextjs_14.md +10 -4
- package/docs/es/intlayer_with_nextjs_15.md +21 -1
- package/docs/es/intlayer_with_nextjs_16.md +1 -1
- package/docs/es/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/es/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/es/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/es/intlayer_with_react_native+expo.md +36 -0
- package/docs/es/intlayer_with_react_router_v7.md +1 -95
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/es/intlayer_with_svelte_kit.md +1 -207
- package/docs/es/intlayer_with_tanstack+solid.md +3 -1
- package/docs/es/intlayer_with_tanstack.md +1 -1
- package/docs/es/intlayer_with_vite+lit.md +1 -1
- package/docs/es/intlayer_with_vite+preact.md +5 -1
- package/docs/es/intlayer_with_vite+react.md +1 -1
- package/docs/es/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/es/intlayer_with_vite+solid.md +1 -1
- package/docs/es/intlayer_with_vite+svelte.md +1 -1
- package/docs/es/intlayer_with_vite+vanilla.md +1 -1
- package/docs/es/intlayer_with_vite+vue.md +18 -86
- package/docs/es/packages/express-intlayer/t.md +0 -9
- package/docs/es/packages/intlayer/getLocalizedUrl.md +75 -0
- package/docs/es/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/es/packages/react-intlayer/useDictionary.md +0 -119
- package/docs/es/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/es/releases/v6.md +28 -0
- package/docs/es/releases/v7.md +128 -0
- package/docs/es/releases/v9.md +37 -1
- package/docs/es/roadmap.md +6 -0
- package/docs/fr/CI_CD.md +4 -0
- package/docs/fr/autoFill.md +81 -0
- package/docs/fr/benchmark/solid.md +22 -0
- package/docs/fr/benchmark/svelte.md +22 -0
- package/docs/fr/benchmark/tanstack.md +22 -0
- package/docs/fr/cli/ci.md +22 -0
- package/docs/fr/cli/fill.md +8 -0
- package/docs/fr/cli/login.md +0 -36
- package/docs/fr/compat/i18n-js.md +44 -0
- package/docs/fr/compat/i18next.md +59 -0
- package/docs/fr/compat/index.md +51 -0
- package/docs/fr/compat/lingui.md +44 -0
- package/docs/fr/compat/next-i18next.md +57 -0
- package/docs/fr/compat/next-intl.md +59 -0
- package/docs/fr/compat/next-translate.md +45 -0
- package/docs/fr/compat/ngx-translate.md +45 -0
- package/docs/fr/compat/nuxtjs-i18n.md +46 -0
- package/docs/fr/compat/polyglot.md +45 -0
- package/docs/fr/compat/react-i18next.md +58 -0
- package/docs/fr/compat/react-intl.md +55 -0
- package/docs/fr/compat/svelte-i18n.md +47 -0
- package/docs/fr/compat/transloco.md +45 -0
- package/docs/fr/compat/vue-i18n.md +58 -0
- package/docs/fr/compiler.md +3 -1
- package/docs/fr/configuration.md +20 -17
- package/docs/fr/custom_domains.md +1 -1
- package/docs/fr/custom_url_rewrites.md +14 -14
- package/docs/fr/dictionary/content_file.md +4 -0
- package/docs/fr/dictionary/enumeration.md +0 -187
- package/docs/fr/dictionary/file.md +8 -0
- package/docs/fr/dictionary/nesting.md +39 -0
- package/docs/fr/dictionary/translation.md +0 -61
- package/docs/fr/formatters.md +171 -77
- package/docs/fr/how_works_intlayer.md +4 -0
- package/docs/fr/intlayer_CMS.md +6 -0
- package/docs/fr/intlayer_with_astro.md +129 -2
- package/docs/fr/intlayer_with_astro_lit.md +1 -1
- package/docs/fr/intlayer_with_astro_preact.md +1 -1
- package/docs/fr/intlayer_with_astro_react.md +1 -1
- package/docs/fr/intlayer_with_astro_solid.md +1 -1
- package/docs/fr/intlayer_with_astro_svelte.md +1 -1
- package/docs/fr/intlayer_with_astro_vanilla.md +1 -1
- package/docs/fr/intlayer_with_astro_vue.md +1 -1
- package/docs/fr/intlayer_with_create_react_app.md +0 -14
- package/docs/fr/intlayer_with_express.md +0 -4
- package/docs/fr/intlayer_with_nestjs.md +0 -18
- package/docs/fr/intlayer_with_nextjs_14.md +26 -5
- package/docs/fr/intlayer_with_nextjs_15.md +21 -1
- package/docs/fr/intlayer_with_nextjs_16.md +1 -1
- package/docs/fr/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/fr/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/fr/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/fr/intlayer_with_nuxt.md +0 -27
- package/docs/fr/intlayer_with_react_native+expo.md +36 -0
- package/docs/fr/intlayer_with_react_router_v7.md +1 -95
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +1 -100
- package/docs/fr/intlayer_with_svelte_kit.md +1 -239
- package/docs/fr/intlayer_with_tanstack+solid.md +3 -1
- package/docs/fr/intlayer_with_tanstack.md +1 -1
- package/docs/fr/intlayer_with_vite+lit.md +1 -1
- package/docs/fr/intlayer_with_vite+preact.md +5 -1
- package/docs/fr/intlayer_with_vite+react.md +1 -1
- package/docs/fr/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/fr/intlayer_with_vite+solid.md +1 -1
- package/docs/fr/intlayer_with_vite+svelte.md +1 -1
- package/docs/fr/intlayer_with_vite+vanilla.md +1 -1
- package/docs/fr/intlayer_with_vite+vue.md +13 -83
- package/docs/fr/packages/express-intlayer/t.md +0 -9
- package/docs/fr/packages/intlayer/getLocalizedUrl.md +73 -0
- package/docs/fr/packages/intlayer/getMultilingualUrls.md +99 -0
- package/docs/fr/packages/next-intlayer/t.md +1 -1
- package/docs/fr/packages/next-intlayer/useRewriteURL.md +0 -8
- package/docs/fr/packages/react-intlayer/useDictionary.md +33 -149
- package/docs/fr/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/fr/plugins/sync-json.md +0 -59
- package/docs/fr/releases/v6.md +28 -0
- package/docs/fr/releases/v7.md +128 -0
- package/docs/fr/releases/v9.md +37 -1
- package/docs/fr/roadmap.md +6 -0
- package/docs/hi/CI_CD.md +4 -0
- package/docs/hi/autoFill.md +81 -0
- package/docs/hi/benchmark/solid.md +22 -0
- package/docs/hi/benchmark/svelte.md +22 -0
- package/docs/hi/benchmark/tanstack.md +22 -0
- package/docs/hi/cli/ci.md +22 -0
- package/docs/hi/cli/fill.md +8 -0
- package/docs/hi/cli/login.md +0 -36
- package/docs/hi/compat/i18n-js.md +44 -0
- package/docs/hi/compat/i18next.md +59 -0
- package/docs/hi/compat/index.md +51 -0
- package/docs/hi/compat/lingui.md +44 -0
- package/docs/hi/compat/next-i18next.md +57 -0
- package/docs/hi/compat/next-intl.md +59 -0
- package/docs/hi/compat/next-translate.md +45 -0
- package/docs/hi/compat/ngx-translate.md +45 -0
- package/docs/hi/compat/nuxtjs-i18n.md +46 -0
- package/docs/hi/compat/polyglot.md +45 -0
- package/docs/hi/compat/react-i18next.md +58 -0
- package/docs/hi/compat/react-intl.md +55 -0
- package/docs/hi/compat/svelte-i18n.md +47 -0
- package/docs/hi/compat/transloco.md +45 -0
- package/docs/hi/compat/vue-i18n.md +58 -0
- package/docs/hi/compiler.md +3 -1
- package/docs/hi/configuration.md +19 -17
- package/docs/hi/custom_domains.md +1 -1
- package/docs/hi/custom_url_rewrites.md +1 -1
- package/docs/hi/dictionary/enumeration.md +0 -187
- package/docs/hi/dictionary/file.md +8 -0
- package/docs/hi/dictionary/nesting.md +39 -0
- package/docs/hi/dictionary/translation.md +0 -61
- package/docs/hi/formatters.md +85 -0
- package/docs/hi/how_works_intlayer.md +2 -0
- package/docs/hi/interest_of_intlayer.md +194 -0
- package/docs/hi/intlayer_CMS.md +6 -0
- package/docs/hi/intlayer_with_astro.md +130 -3
- package/docs/hi/intlayer_with_astro_lit.md +1 -1
- package/docs/hi/intlayer_with_astro_preact.md +1 -1
- package/docs/hi/intlayer_with_astro_react.md +1 -1
- package/docs/hi/intlayer_with_astro_solid.md +1 -1
- package/docs/hi/intlayer_with_astro_svelte.md +1 -1
- package/docs/hi/intlayer_with_astro_vanilla.md +1 -1
- package/docs/hi/intlayer_with_astro_vue.md +1 -1
- package/docs/hi/intlayer_with_create_react_app.md +15 -0
- package/docs/hi/intlayer_with_express.md +0 -23
- package/docs/hi/intlayer_with_nestjs.md +0 -8
- package/docs/hi/intlayer_with_nextjs_14.md +31 -8
- package/docs/hi/intlayer_with_nextjs_15.md +21 -1
- package/docs/hi/intlayer_with_nextjs_16.md +176 -54
- package/docs/hi/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/hi/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/hi/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/hi/intlayer_with_nuxt.md +0 -27
- package/docs/hi/intlayer_with_react_native+expo.md +36 -0
- package/docs/hi/intlayer_with_react_router_v7.md +1 -95
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +20 -96
- package/docs/hi/intlayer_with_svelte_kit.md +1 -207
- package/docs/hi/intlayer_with_tanstack+solid.md +3 -1
- package/docs/hi/intlayer_with_tanstack.md +1 -1
- package/docs/hi/intlayer_with_vite+lit.md +1 -1
- package/docs/hi/intlayer_with_vite+preact.md +1 -1
- package/docs/hi/intlayer_with_vite+react.md +1 -1
- package/docs/hi/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/hi/intlayer_with_vite+solid.md +1 -1
- package/docs/hi/intlayer_with_vite+svelte.md +32 -48
- package/docs/hi/intlayer_with_vite+vanilla.md +1 -1
- package/docs/hi/intlayer_with_vite+vue.md +23 -71
- package/docs/hi/mcp_server.md +22 -0
- package/docs/hi/migration_from_i18next_to_intlayer.md +331 -0
- package/docs/hi/migration_from_next-i18next_to_intlayer.md +355 -0
- package/docs/hi/migration_from_next-intl_to_intlayer.md +364 -0
- package/docs/hi/migration_from_nuxtjs_i18n_to_intlayer.md +328 -0
- package/docs/hi/migration_from_react-i18next_to_intlayer.md +384 -0
- package/docs/hi/migration_from_vue-i18n_to_intlayer.md +359 -0
- package/docs/hi/packages/intlayer/getLocalizedUrl.md +68 -0
- package/docs/hi/packages/intlayer/getMultilingualUrls.md +111 -0
- package/docs/hi/packages/next-intlayer/t.md +2 -0
- package/docs/hi/packages/react-intlayer/useDictionary.md +0 -102
- package/docs/hi/packages/react-intlayer/useI18n.md +0 -4
- package/docs/hi/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/hi/releases/v6.md +28 -0
- package/docs/hi/releases/v7.md +128 -0
- package/docs/hi/releases/v9.md +37 -1
- package/docs/hi/roadmap.md +6 -0
- package/docs/id/autoFill.md +20 -0
- package/docs/id/benchmark/solid.md +22 -0
- package/docs/id/benchmark/svelte.md +22 -0
- package/docs/id/benchmark/tanstack.md +22 -0
- package/docs/id/cli/ci.md +22 -0
- package/docs/id/cli/fill.md +8 -0
- package/docs/id/compat/i18n-js.md +44 -0
- package/docs/id/compat/i18next.md +59 -0
- package/docs/id/compat/index.md +51 -0
- package/docs/id/compat/lingui.md +44 -0
- package/docs/id/compat/next-i18next.md +57 -0
- package/docs/id/compat/next-intl.md +59 -0
- package/docs/id/compat/next-translate.md +45 -0
- package/docs/id/compat/ngx-translate.md +45 -0
- package/docs/id/compat/nuxtjs-i18n.md +46 -0
- package/docs/id/compat/polyglot.md +45 -0
- package/docs/id/compat/react-i18next.md +58 -0
- package/docs/id/compat/react-intl.md +55 -0
- package/docs/id/compat/svelte-i18n.md +47 -0
- package/docs/id/compat/transloco.md +45 -0
- package/docs/id/compat/vue-i18n.md +58 -0
- package/docs/id/compiler.md +3 -1
- package/docs/id/configuration.md +19 -17
- package/docs/id/custom_domains.md +1 -1
- package/docs/id/custom_url_rewrites.md +14 -16
- package/docs/id/dictionary/content_file.md +0 -7
- package/docs/id/dictionary/enumeration.md +0 -187
- package/docs/id/dictionary/nesting.md +39 -0
- package/docs/id/dictionary/translation.md +0 -61
- package/docs/id/formatters.md +120 -0
- package/docs/id/interest_of_intlayer.md +193 -0
- package/docs/id/intlayer_with_astro.md +130 -3
- package/docs/id/intlayer_with_astro_lit.md +1 -1
- package/docs/id/intlayer_with_astro_preact.md +1 -1
- package/docs/id/intlayer_with_astro_react.md +1 -1
- package/docs/id/intlayer_with_astro_solid.md +1 -1
- package/docs/id/intlayer_with_astro_svelte.md +1 -1
- package/docs/id/intlayer_with_astro_vanilla.md +1 -1
- package/docs/id/intlayer_with_astro_vue.md +1 -1
- package/docs/id/intlayer_with_nextjs_14.md +1 -1
- package/docs/id/intlayer_with_nextjs_15.md +1 -1
- package/docs/id/intlayer_with_nextjs_16.md +176 -54
- package/docs/id/intlayer_with_nextjs_compiler.md +1 -22
- package/docs/id/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/id/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/id/intlayer_with_react_native+expo.md +8 -61
- package/docs/id/intlayer_with_react_router_v7.md +1 -95
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +1 -103
- package/docs/id/intlayer_with_svelte_kit.md +1 -207
- package/docs/id/intlayer_with_tanstack+solid.md +3 -1
- package/docs/id/intlayer_with_tanstack.md +1 -1
- package/docs/id/intlayer_with_vite+lit.md +1 -1
- package/docs/id/intlayer_with_vite+preact.md +57 -57
- package/docs/id/intlayer_with_vite+react.md +49 -49
- package/docs/id/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/id/intlayer_with_vite+solid.md +33 -42
- package/docs/id/intlayer_with_vite+svelte.md +27 -29
- package/docs/id/intlayer_with_vite+vanilla.md +1 -1
- package/docs/id/intlayer_with_vite+vue.md +49 -101
- package/docs/id/mcp_server.md +22 -0
- package/docs/id/migration_from_i18next_to_intlayer.md +330 -0
- package/docs/id/migration_from_next-i18next_to_intlayer.md +355 -0
- package/docs/id/migration_from_next-intl_to_intlayer.md +364 -0
- package/docs/id/migration_from_nuxtjs_i18n_to_intlayer.md +328 -0
- package/docs/id/migration_from_react-i18next_to_intlayer.md +384 -0
- package/docs/id/migration_from_vue-i18n_to_intlayer.md +359 -0
- package/docs/id/packages/intlayer/getLocalizedUrl.md +25 -0
- package/docs/id/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/id/packages/react-intlayer/useDictionary.md +0 -121
- package/docs/id/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/id/releases/v6.md +4 -0
- package/docs/id/releases/v7.md +128 -0
- package/docs/id/releases/v9.md +37 -1
- package/docs/id/roadmap.md +0 -16
- package/docs/it/CI_CD.md +4 -0
- package/docs/it/autoFill.md +81 -0
- package/docs/it/benchmark/solid.md +22 -0
- package/docs/it/benchmark/svelte.md +22 -0
- package/docs/it/benchmark/tanstack.md +22 -0
- package/docs/it/cli/ci.md +22 -0
- package/docs/it/cli/fill.md +8 -0
- package/docs/it/compat/i18n-js.md +44 -0
- package/docs/it/compat/i18next.md +59 -0
- package/docs/it/compat/index.md +51 -0
- package/docs/it/compat/lingui.md +44 -0
- package/docs/it/compat/next-i18next.md +57 -0
- package/docs/it/compat/next-intl.md +59 -0
- package/docs/it/compat/next-translate.md +45 -0
- package/docs/it/compat/ngx-translate.md +45 -0
- package/docs/it/compat/nuxtjs-i18n.md +46 -0
- package/docs/it/compat/polyglot.md +45 -0
- package/docs/it/compat/react-i18next.md +58 -0
- package/docs/it/compat/react-intl.md +55 -0
- package/docs/it/compat/svelte-i18n.md +47 -0
- package/docs/it/compat/transloco.md +45 -0
- package/docs/it/compat/vue-i18n.md +58 -0
- package/docs/it/compiler.md +3 -1
- package/docs/it/configuration.md +19 -17
- package/docs/it/custom_domains.md +1 -1
- package/docs/it/custom_url_rewrites.md +1 -1
- package/docs/it/dictionary/content_file.md +4 -7
- package/docs/it/dictionary/enumeration.md +0 -197
- package/docs/it/dictionary/file.md +8 -0
- package/docs/it/dictionary/nesting.md +39 -0
- package/docs/it/dictionary/translation.md +0 -61
- package/docs/it/formatters.md +82 -0
- package/docs/it/how_works_intlayer.md +4 -4
- package/docs/it/intlayer_CMS.md +6 -0
- package/docs/it/intlayer_with_astro.md +129 -2
- package/docs/it/intlayer_with_astro_lit.md +1 -1
- package/docs/it/intlayer_with_astro_preact.md +1 -1
- package/docs/it/intlayer_with_astro_react.md +1 -1
- package/docs/it/intlayer_with_astro_solid.md +1 -1
- package/docs/it/intlayer_with_astro_svelte.md +1 -1
- package/docs/it/intlayer_with_astro_vanilla.md +1 -1
- package/docs/it/intlayer_with_astro_vue.md +1 -1
- package/docs/it/intlayer_with_create_react_app.md +0 -14
- package/docs/it/intlayer_with_express.md +0 -4
- package/docs/it/intlayer_with_lynx+react.md +11 -0
- package/docs/it/intlayer_with_nestjs.md +0 -8
- package/docs/it/intlayer_with_nextjs_14.md +30 -9
- package/docs/it/intlayer_with_nextjs_15.md +21 -1
- package/docs/it/intlayer_with_nextjs_16.md +176 -54
- package/docs/it/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/it/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/it/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/it/intlayer_with_react_native+expo.md +36 -0
- package/docs/it/intlayer_with_react_router_v7.md +1 -95
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +1 -96
- package/docs/it/intlayer_with_svelte_kit.md +1 -239
- package/docs/it/intlayer_with_tanstack+solid.md +3 -1
- package/docs/it/intlayer_with_tanstack.md +1 -1
- package/docs/it/intlayer_with_vite+lit.md +1 -1
- package/docs/it/intlayer_with_vite+preact.md +61 -57
- package/docs/it/intlayer_with_vite+react.md +49 -1
- package/docs/it/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/it/intlayer_with_vite+solid.md +33 -42
- package/docs/it/intlayer_with_vite+svelte.md +27 -29
- package/docs/it/intlayer_with_vite+vanilla.md +1 -1
- package/docs/it/intlayer_with_vite+vue.md +53 -123
- package/docs/it/mcp_server.md +22 -0
- package/docs/it/packages/intlayer/getLocalizedUrl.md +75 -0
- package/docs/it/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/it/packages/next-intlayer/t.md +34 -0
- package/docs/it/packages/react-intlayer/useDictionary.md +0 -104
- package/docs/it/packages/react-intlayer/useIntlayer.md +0 -57
- package/docs/it/releases/v6.md +28 -0
- package/docs/it/releases/v7.md +128 -0
- package/docs/it/releases/v9.md +37 -1
- package/docs/it/roadmap.md +6 -0
- package/docs/ja/CI_CD.md +4 -0
- package/docs/ja/autoFill.md +81 -0
- package/docs/ja/benchmark/solid.md +22 -0
- package/docs/ja/benchmark/svelte.md +22 -0
- package/docs/ja/benchmark/tanstack.md +22 -0
- package/docs/ja/cli/ci.md +22 -0
- package/docs/ja/cli/fill.md +8 -0
- package/docs/ja/cli/list_projects.md +0 -18
- package/docs/ja/compat/i18n-js.md +44 -0
- package/docs/ja/compat/i18next.md +59 -0
- package/docs/ja/compat/index.md +51 -0
- package/docs/ja/compat/lingui.md +44 -0
- package/docs/ja/compat/next-i18next.md +57 -0
- package/docs/ja/compat/next-intl.md +59 -0
- package/docs/ja/compat/next-translate.md +45 -0
- package/docs/ja/compat/ngx-translate.md +45 -0
- package/docs/ja/compat/nuxtjs-i18n.md +46 -0
- package/docs/ja/compat/polyglot.md +45 -0
- package/docs/ja/compat/react-i18next.md +58 -0
- package/docs/ja/compat/react-intl.md +55 -0
- package/docs/ja/compat/svelte-i18n.md +47 -0
- package/docs/ja/compat/transloco.md +45 -0
- package/docs/ja/compat/vue-i18n.md +58 -0
- package/docs/ja/compiler.md +3 -1
- package/docs/ja/configuration.md +19 -17
- package/docs/ja/custom_domains.md +1 -1
- package/docs/ja/custom_url_rewrites.md +1 -1
- package/docs/ja/dictionary/content_file.md +4 -0
- package/docs/ja/dictionary/enumeration.md +0 -187
- package/docs/ja/dictionary/function_fetching.md +0 -27
- package/docs/ja/dictionary/markdown.md +1348 -0
- package/docs/ja/dictionary/nesting.md +39 -0
- package/docs/ja/dictionary/translation.md +0 -119
- package/docs/ja/formatters.md +77 -0
- package/docs/ja/how_works_intlayer.md +4 -2
- package/docs/ja/intlayer_CMS.md +6 -0
- package/docs/ja/intlayer_visual_editor.md +0 -4
- package/docs/ja/intlayer_with_analog.md +4 -0
- package/docs/ja/intlayer_with_astro.md +129 -2
- package/docs/ja/intlayer_with_astro_lit.md +1 -1
- package/docs/ja/intlayer_with_astro_preact.md +1 -1
- package/docs/ja/intlayer_with_astro_react.md +1 -1
- package/docs/ja/intlayer_with_astro_solid.md +1 -1
- package/docs/ja/intlayer_with_astro_svelte.md +1 -1
- package/docs/ja/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ja/intlayer_with_astro_vue.md +1 -1
- package/docs/ja/intlayer_with_create_react_app.md +0 -16
- package/docs/ja/intlayer_with_express.md +0 -4
- package/docs/ja/intlayer_with_nestjs.md +0 -8
- package/docs/ja/intlayer_with_nextjs_14.md +26 -20
- package/docs/ja/intlayer_with_nextjs_15.md +21 -1
- package/docs/ja/intlayer_with_nextjs_16.md +176 -54
- package/docs/ja/intlayer_with_nextjs_compiler.md +1 -22
- package/docs/ja/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ja/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/ja/intlayer_with_react_native+expo.md +36 -0
- package/docs/ja/intlayer_with_react_router_v7.md +1 -23
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +1 -96
- package/docs/ja/intlayer_with_svelte_kit.md +12 -1
- package/docs/ja/intlayer_with_tanstack+solid.md +3 -1
- package/docs/ja/intlayer_with_tanstack.md +3 -1
- package/docs/ja/intlayer_with_vite+lit.md +1 -1
- package/docs/ja/intlayer_with_vite+preact.md +704 -1
- package/docs/ja/intlayer_with_vite+react.md +1 -1
- package/docs/ja/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ja/intlayer_with_vite+solid.md +33 -42
- package/docs/ja/intlayer_with_vite+svelte.md +29 -29
- package/docs/ja/intlayer_with_vite+vanilla.md +1 -1
- package/docs/ja/intlayer_with_vite+vue.md +70 -114
- package/docs/ja/mcp_server.md +26 -0
- package/docs/ja/packages/express-intlayer/t.md +0 -9
- package/docs/ja/packages/intlayer/getLocalizedUrl.md +73 -0
- package/docs/ja/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/ja/packages/react-intlayer/useDictionary.md +0 -107
- package/docs/ja/packages/react-intlayer/useIntlayer.md +0 -65
- package/docs/ja/releases/v6.md +28 -0
- package/docs/ja/releases/v7.md +128 -0
- package/docs/ja/releases/v9.md +37 -1
- package/docs/ja/roadmap.md +6 -0
- package/docs/ko/CI_CD.md +4 -0
- package/docs/ko/autoFill.md +81 -0
- package/docs/ko/benchmark/solid.md +22 -0
- package/docs/ko/benchmark/svelte.md +22 -0
- package/docs/ko/benchmark/tanstack.md +22 -0
- package/docs/ko/cli/ci.md +22 -0
- package/docs/ko/cli/fill.md +8 -0
- package/docs/ko/cli/login.md +0 -36
- package/docs/ko/compat/i18n-js.md +44 -0
- package/docs/ko/compat/i18next.md +59 -0
- package/docs/ko/compat/index.md +51 -0
- package/docs/ko/compat/lingui.md +44 -0
- package/docs/ko/compat/next-i18next.md +55 -0
- package/docs/ko/compat/next-intl.md +59 -0
- package/docs/ko/compat/next-translate.md +45 -0
- package/docs/ko/compat/ngx-translate.md +45 -0
- package/docs/ko/compat/nuxtjs-i18n.md +46 -0
- package/docs/ko/compat/polyglot.md +45 -0
- package/docs/ko/compat/react-i18next.md +58 -0
- package/docs/ko/compat/react-intl.md +55 -0
- package/docs/ko/compat/svelte-i18n.md +47 -0
- package/docs/ko/compat/transloco.md +45 -0
- package/docs/ko/compat/vue-i18n.md +58 -0
- package/docs/ko/compiler.md +3 -1
- package/docs/ko/configuration.md +19 -17
- package/docs/ko/custom_domains.md +1 -1
- package/docs/ko/custom_url_rewrites.md +1 -1
- package/docs/ko/dictionary/content_file.md +4 -27
- package/docs/ko/dictionary/enumeration.md +0 -187
- package/docs/ko/dictionary/insertion.md +0 -6
- package/docs/ko/dictionary/nesting.md +39 -0
- package/docs/ko/dictionary/translation.md +0 -84
- package/docs/ko/formatters.md +71 -0
- package/docs/ko/how_works_intlayer.md +4 -0
- package/docs/ko/intlayer_CMS.md +6 -0
- package/docs/ko/intlayer_visual_editor.md +0 -2
- package/docs/ko/intlayer_with_analog.md +4 -0
- package/docs/ko/intlayer_with_astro.md +129 -2
- package/docs/ko/intlayer_with_astro_lit.md +1 -1
- package/docs/ko/intlayer_with_astro_preact.md +1 -1
- package/docs/ko/intlayer_with_astro_react.md +1 -1
- package/docs/ko/intlayer_with_astro_solid.md +1 -1
- package/docs/ko/intlayer_with_astro_svelte.md +1 -1
- package/docs/ko/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ko/intlayer_with_astro_vue.md +1 -1
- package/docs/ko/intlayer_with_create_react_app.md +0 -14
- package/docs/ko/intlayer_with_express.md +0 -23
- package/docs/ko/intlayer_with_lynx+react.md +0 -124
- package/docs/ko/intlayer_with_nestjs.md +0 -18
- package/docs/ko/intlayer_with_nextjs_14.md +19 -13
- package/docs/ko/intlayer_with_nextjs_15.md +21 -1
- package/docs/ko/intlayer_with_nextjs_16.md +175 -56
- package/docs/ko/intlayer_with_nextjs_compiler.md +1 -308
- package/docs/ko/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ko/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/ko/intlayer_with_react_native+expo.md +36 -262
- package/docs/ko/intlayer_with_react_router_v7.md +1 -95
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +20 -96
- package/docs/ko/intlayer_with_svelte_kit.md +1 -207
- package/docs/ko/intlayer_with_tanstack+solid.md +3 -1
- package/docs/ko/intlayer_with_tanstack.md +1 -1
- package/docs/ko/intlayer_with_vite+lit.md +1 -1
- package/docs/ko/intlayer_with_vite+preact.md +57 -91
- package/docs/ko/intlayer_with_vite+react.md +93 -18
- package/docs/ko/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ko/intlayer_with_vite+solid.md +33 -143
- package/docs/ko/intlayer_with_vite+svelte.md +27 -29
- package/docs/ko/intlayer_with_vite+vanilla.md +1 -1
- package/docs/ko/intlayer_with_vite+vue.md +54 -106
- package/docs/ko/mcp_server.md +22 -0
- package/docs/ko/packages/express-intlayer/t.md +0 -9
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +73 -0
- package/docs/ko/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/ko/packages/next-intlayer/t.md +34 -0
- package/docs/ko/packages/next-intlayer/useLocale.md +0 -5
- package/docs/ko/packages/react-intlayer/t.md +0 -20
- package/docs/ko/packages/react-intlayer/useDictionary.md +0 -121
- package/docs/ko/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/ko/releases/v6.md +28 -0
- package/docs/ko/releases/v7.md +128 -0
- package/docs/ko/releases/v9.md +37 -1
- package/docs/ko/roadmap.md +6 -0
- package/docs/pl/autoFill.md +20 -0
- package/docs/pl/benchmark/___NOTE.md +101 -0
- package/docs/pl/benchmark/___nextjs.md +198 -0
- package/docs/pl/benchmark/___solid.md +36 -0
- package/docs/pl/benchmark/___svelte.md +36 -0
- package/docs/pl/benchmark/___tanstack.md +36 -0
- package/docs/pl/benchmark/___vue.md +36 -0
- package/docs/pl/benchmark/solid.md +22 -0
- package/docs/pl/benchmark/svelte.md +22 -0
- package/docs/pl/benchmark/tanstack.md +22 -0
- package/docs/pl/cli/ci.md +22 -0
- package/docs/pl/cli/fill.md +8 -0
- package/docs/pl/cli/login.md +0 -36
- package/docs/pl/compat/i18n-js.md +44 -0
- package/docs/pl/compat/i18next.md +59 -0
- package/docs/pl/compat/index.md +51 -0
- package/docs/pl/compat/lingui.md +44 -0
- package/docs/pl/compat/next-i18next.md +57 -0
- package/docs/pl/compat/next-intl.md +59 -0
- package/docs/pl/compat/next-translate.md +45 -0
- package/docs/pl/compat/ngx-translate.md +45 -0
- package/docs/pl/compat/nuxtjs-i18n.md +46 -0
- package/docs/pl/compat/polyglot.md +45 -0
- package/docs/pl/compat/react-i18next.md +58 -0
- package/docs/pl/compat/react-intl.md +55 -0
- package/docs/pl/compat/svelte-i18n.md +47 -0
- package/docs/pl/compat/transloco.md +45 -0
- package/docs/pl/compat/vue-i18n.md +58 -0
- package/docs/pl/configuration.md +15 -16
- package/docs/pl/dictionary/content_file.md +0 -40
- package/docs/pl/dictionary/enumeration.md +0 -187
- package/docs/pl/dictionary/nesting.md +39 -0
- package/docs/pl/dictionary/translation.md +0 -61
- package/docs/pl/formatters.md +120 -0
- package/docs/pl/intlayer_with_astro.md +179 -0
- package/docs/pl/intlayer_with_react_native+expo.md +8 -61
- package/docs/pl/intlayer_with_react_router_v7.md +0 -94
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +0 -95
- package/docs/pl/intlayer_with_svelte_kit.md +0 -210
- package/docs/pl/intlayer_with_vite+preact.md +56 -56
- package/docs/pl/intlayer_with_vite+react.md +48 -48
- package/docs/pl/intlayer_with_vite+solid.md +32 -41
- package/docs/pl/intlayer_with_vite+svelte.md +28 -28
- package/docs/pl/intlayer_with_vite+vue.md +48 -70
- package/docs/pl/mcp_server.md +22 -0
- package/docs/pl/migration_from_i18next_to_intlayer.md +230 -0
- package/docs/pl/migration_from_next-i18next_to_intlayer.md +351 -0
- package/docs/pl/migration_from_next-intl_to_intlayer.md +360 -0
- package/docs/pl/migration_from_nuxtjs_i18n_to_intlayer.md +324 -0
- package/docs/pl/migration_from_react-i18next_to_intlayer.md +380 -0
- package/docs/pl/migration_from_vue-i18n_to_intlayer.md +232 -0
- package/docs/pl/packages/intlayer/getLocalizedUrl.md +19 -0
- package/docs/pl/packages/intlayer/getMultilingualUrls.md +111 -0
- package/docs/pl/packages/react-intlayer/useDictionary.md +0 -104
- package/docs/pl/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/pl/plugins/sync-json.md +0 -59
- package/docs/pl/releases/v6.md +4 -0
- package/docs/pl/releases/v7.md +128 -0
- package/docs/pl/releases/v9.md +36 -0
- package/docs/pl/roadmap.md +0 -16
- package/docs/pt/CI_CD.md +4 -0
- package/docs/pt/autoFill.md +117 -14
- package/docs/pt/benchmark/index.md +5 -5
- package/docs/pt/benchmark/solid.md +22 -0
- package/docs/pt/benchmark/svelte.md +22 -0
- package/docs/pt/benchmark/tanstack.md +22 -0
- package/docs/pt/cli/ci.md +22 -0
- package/docs/pt/cli/fill.md +8 -0
- package/docs/pt/cli/login.md +0 -36
- package/docs/pt/compat/i18n-js.md +44 -0
- package/docs/pt/compat/i18next.md +59 -0
- package/docs/pt/compat/index.md +51 -0
- package/docs/pt/compat/lingui.md +44 -0
- package/docs/pt/compat/next-i18next.md +57 -0
- package/docs/pt/compat/next-intl.md +59 -0
- package/docs/pt/compat/next-translate.md +45 -0
- package/docs/pt/compat/ngx-translate.md +45 -0
- package/docs/pt/compat/nuxtjs-i18n.md +46 -0
- package/docs/pt/compat/polyglot.md +45 -0
- package/docs/pt/compat/react-i18next.md +58 -0
- package/docs/pt/compat/react-intl.md +55 -0
- package/docs/pt/compat/svelte-i18n.md +47 -0
- package/docs/pt/compat/transloco.md +45 -0
- package/docs/pt/compat/vue-i18n.md +58 -0
- package/docs/pt/compiler.md +2 -2
- package/docs/pt/configuration.md +16 -17
- package/docs/pt/custom_domains.md +1 -6
- package/docs/pt/custom_url_rewrites.md +1 -1
- package/docs/pt/dictionary/content_file.md +4 -7
- package/docs/pt/dictionary/enumeration.md +3 -190
- package/docs/pt/dictionary/file.md +8 -0
- package/docs/pt/dictionary/nesting.md +39 -0
- package/docs/pt/dictionary/translation.md +0 -61
- package/docs/pt/formatters.md +86 -0
- package/docs/pt/how_works_intlayer.md +4 -0
- package/docs/pt/intlayer_CMS.md +21 -0
- package/docs/pt/intlayer_with_analog.md +3 -3
- package/docs/pt/intlayer_with_angular_19.md +7 -7
- package/docs/pt/intlayer_with_angular_21.md +3 -3
- package/docs/pt/intlayer_with_astro.md +182 -3
- package/docs/pt/intlayer_with_astro_lit.md +3 -3
- package/docs/pt/intlayer_with_astro_preact.md +3 -3
- package/docs/pt/intlayer_with_astro_react.md +3 -3
- package/docs/pt/intlayer_with_astro_solid.md +3 -3
- package/docs/pt/intlayer_with_astro_svelte.md +3 -3
- package/docs/pt/intlayer_with_astro_vanilla.md +3 -3
- package/docs/pt/intlayer_with_astro_vue.md +3 -3
- package/docs/pt/intlayer_with_create_react_app.md +0 -14
- package/docs/pt/intlayer_with_express.md +0 -23
- package/docs/pt/intlayer_with_lynx+react.md +14 -3
- package/docs/pt/intlayer_with_nestjs.md +0 -18
- package/docs/pt/intlayer_with_nextjs_14.md +26 -7
- package/docs/pt/intlayer_with_nextjs_15.md +27 -7
- package/docs/pt/intlayer_with_nextjs_16.md +6 -6
- package/docs/pt/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/pt/intlayer_with_nextjs_no_locale_path.md +6 -6
- package/docs/pt/intlayer_with_nextjs_page_router.md +10 -6
- package/docs/pt/intlayer_with_nuxt.md +3 -3
- package/docs/pt/intlayer_with_react_native+expo.md +39 -3
- package/docs/pt/intlayer_with_react_router_v7.md +8 -84
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +3 -98
- package/docs/pt/intlayer_with_storybook.md +3 -3
- package/docs/pt/intlayer_with_svelte_kit.md +3 -245
- package/docs/pt/intlayer_with_tanstack+solid.md +3 -3
- package/docs/pt/intlayer_with_tanstack.md +3 -3
- package/docs/pt/intlayer_with_vanilla.md +3 -3
- package/docs/pt/intlayer_with_vite+lit.md +3 -3
- package/docs/pt/intlayer_with_vite+preact.md +3 -3
- package/docs/pt/intlayer_with_vite+react.md +10 -10
- package/docs/pt/intlayer_with_vite+react_compiler.md +5 -5
- package/docs/pt/intlayer_with_vite+solid.md +3 -3
- package/docs/pt/intlayer_with_vite+svelte.md +31 -31
- package/docs/pt/intlayer_with_vite+vanilla.md +3 -3
- package/docs/pt/intlayer_with_vite+vue.md +7 -3
- package/docs/pt/mcp_server.md +22 -0
- package/docs/pt/packages/hono-intlayer/t.md +1 -1
- package/docs/pt/packages/intlayer/getLocalizedUrl.md +75 -0
- package/docs/pt/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/pt/packages/next-intlayer/t.md +34 -0
- package/docs/pt/packages/react-intlayer/useDictionary.md +0 -121
- package/docs/pt/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/pt/plugins/sync-po.md +1 -1
- package/docs/pt/readme.md +3 -3
- package/docs/pt/releases/v6.md +28 -0
- package/docs/pt/releases/v7.md +128 -0
- package/docs/pt/releases/v9.md +37 -1
- package/docs/pt/roadmap.md +6 -0
- package/docs/ru/CI_CD.md +4 -0
- package/docs/ru/autoFill.md +81 -0
- package/docs/ru/benchmark/solid.md +22 -0
- package/docs/ru/benchmark/svelte.md +22 -0
- package/docs/ru/benchmark/tanstack.md +22 -0
- package/docs/ru/cli/ci.md +22 -0
- package/docs/ru/cli/fill.md +8 -0
- package/docs/ru/cli/login.md +0 -36
- package/docs/ru/compat/i18n-js.md +44 -0
- package/docs/ru/compat/i18next.md +59 -0
- package/docs/ru/compat/index.md +51 -0
- package/docs/ru/compat/lingui.md +44 -0
- package/docs/ru/compat/next-i18next.md +57 -0
- package/docs/ru/compat/next-intl.md +59 -0
- package/docs/ru/compat/next-translate.md +45 -0
- package/docs/ru/compat/ngx-translate.md +45 -0
- package/docs/ru/compat/nuxtjs-i18n.md +46 -0
- package/docs/ru/compat/polyglot.md +45 -0
- package/docs/ru/compat/react-i18next.md +58 -0
- package/docs/ru/compat/react-intl.md +55 -0
- package/docs/ru/compat/svelte-i18n.md +47 -0
- package/docs/ru/compat/transloco.md +45 -0
- package/docs/ru/compat/vue-i18n.md +58 -0
- package/docs/ru/compiler.md +3 -1
- package/docs/ru/configuration.md +19 -17
- package/docs/ru/custom_domains.md +1 -1
- package/docs/ru/custom_url_rewrites.md +1 -1
- package/docs/ru/dictionary/content_file.md +4 -27
- package/docs/ru/dictionary/enumeration.md +0 -199
- package/docs/ru/dictionary/file.md +8 -0
- package/docs/ru/dictionary/markdown.md +510 -0
- package/docs/ru/dictionary/nesting.md +8 -0
- package/docs/ru/dictionary/translation.md +0 -61
- package/docs/ru/formatters.md +136 -0
- package/docs/ru/how_works_intlayer.md +4 -0
- package/docs/ru/intlayer_CMS.md +6 -0
- package/docs/ru/intlayer_with_astro.md +129 -2
- package/docs/ru/intlayer_with_astro_lit.md +1 -1
- package/docs/ru/intlayer_with_astro_preact.md +1 -1
- package/docs/ru/intlayer_with_astro_react.md +1 -1
- package/docs/ru/intlayer_with_astro_solid.md +1 -1
- package/docs/ru/intlayer_with_astro_svelte.md +1 -1
- package/docs/ru/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ru/intlayer_with_astro_vue.md +1 -1
- package/docs/ru/intlayer_with_express.md +0 -23
- package/docs/ru/intlayer_with_nestjs.md +0 -18
- package/docs/ru/intlayer_with_nextjs_14.md +31 -8
- package/docs/ru/intlayer_with_nextjs_15.md +21 -1
- package/docs/ru/intlayer_with_nextjs_16.md +1 -1
- package/docs/ru/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/ru/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ru/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/ru/intlayer_with_react_native+expo.md +36 -49
- package/docs/ru/intlayer_with_react_router_v7.md +1 -95
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +1 -96
- package/docs/ru/intlayer_with_svelte_kit.md +1 -207
- package/docs/ru/intlayer_with_tanstack+solid.md +3 -1
- package/docs/ru/intlayer_with_tanstack.md +1 -1
- package/docs/ru/intlayer_with_vite+lit.md +1 -1
- package/docs/ru/intlayer_with_vite+preact.md +57 -57
- package/docs/ru/intlayer_with_vite+react.md +3 -1
- package/docs/ru/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ru/intlayer_with_vite+solid.md +33 -42
- package/docs/ru/intlayer_with_vite+svelte.md +27 -29
- package/docs/ru/intlayer_with_vite+vanilla.md +1 -1
- package/docs/ru/intlayer_with_vite+vue.md +53 -101
- package/docs/ru/mcp_server.md +22 -0
- package/docs/ru/packages/intlayer/getLocalizedUrl.md +75 -0
- package/docs/ru/packages/intlayer/getMultilingualUrls.md +111 -0
- package/docs/ru/packages/next-intlayer/t.md +34 -0
- package/docs/ru/packages/react-intlayer/useDictionary.md +0 -104
- package/docs/ru/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/ru/packages/react-intlayer/useLocale.md +9 -0
- package/docs/ru/releases/v6.md +28 -0
- package/docs/ru/releases/v7.md +128 -0
- package/docs/ru/releases/v9.md +37 -1
- package/docs/ru/roadmap.md +6 -0
- package/docs/tr/CI_CD.md +4 -0
- package/docs/tr/autoFill.md +81 -0
- package/docs/tr/benchmark/solid.md +22 -0
- package/docs/tr/benchmark/svelte.md +22 -0
- package/docs/tr/benchmark/tanstack.md +22 -0
- package/docs/tr/cli/ci.md +22 -0
- package/docs/tr/cli/fill.md +8 -0
- package/docs/tr/cli/login.md +0 -10
- package/docs/tr/compat/i18n-js.md +44 -0
- package/docs/tr/compat/i18next.md +59 -0
- package/docs/tr/compat/index.md +51 -0
- package/docs/tr/compat/lingui.md +44 -0
- package/docs/tr/compat/next-i18next.md +57 -0
- package/docs/tr/compat/next-intl.md +59 -0
- package/docs/tr/compat/next-translate.md +45 -0
- package/docs/tr/compat/ngx-translate.md +45 -0
- package/docs/tr/compat/nuxtjs-i18n.md +46 -0
- package/docs/tr/compat/polyglot.md +45 -0
- package/docs/tr/compat/react-i18next.md +58 -0
- package/docs/tr/compat/react-intl.md +55 -0
- package/docs/tr/compat/svelte-i18n.md +47 -0
- package/docs/tr/compat/transloco.md +45 -0
- package/docs/tr/compat/vue-i18n.md +58 -0
- package/docs/tr/compiler.md +3 -1
- package/docs/tr/configuration.md +19 -17
- package/docs/tr/custom_domains.md +1 -1
- package/docs/tr/custom_url_rewrites.md +1 -1
- package/docs/tr/dictionary/content_file.md +4 -27
- package/docs/tr/dictionary/enumeration.md +0 -187
- package/docs/tr/dictionary/file.md +8 -0
- package/docs/tr/dictionary/nesting.md +39 -0
- package/docs/tr/dictionary/translation.md +0 -88
- package/docs/tr/formatters.md +59 -0
- package/docs/tr/how_works_intlayer.md +4 -0
- package/docs/tr/intlayer_CMS.md +6 -0
- package/docs/tr/intlayer_with_analog.md +4 -0
- package/docs/tr/intlayer_with_astro.md +134 -77
- package/docs/tr/intlayer_with_astro_lit.md +1 -1
- package/docs/tr/intlayer_with_astro_preact.md +1 -1
- package/docs/tr/intlayer_with_astro_react.md +1 -1
- package/docs/tr/intlayer_with_astro_solid.md +1 -1
- package/docs/tr/intlayer_with_astro_svelte.md +1 -1
- package/docs/tr/intlayer_with_astro_vanilla.md +1 -1
- package/docs/tr/intlayer_with_astro_vue.md +1 -1
- package/docs/tr/intlayer_with_express.md +0 -4
- package/docs/tr/intlayer_with_nestjs.md +0 -8
- package/docs/tr/intlayer_with_nextjs_14.md +95 -8
- package/docs/tr/intlayer_with_nextjs_15.md +21 -1
- package/docs/tr/intlayer_with_nextjs_16.md +1 -1
- package/docs/tr/intlayer_with_nextjs_compiler.md +1 -22
- package/docs/tr/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/tr/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/tr/intlayer_with_react_native+expo.md +36 -46
- package/docs/tr/intlayer_with_react_router_v7.md +1 -95
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +1 -96
- package/docs/tr/intlayer_with_svelte_kit.md +1 -207
- package/docs/tr/intlayer_with_tanstack+solid.md +3 -1
- package/docs/tr/intlayer_with_tanstack.md +1 -1
- package/docs/tr/intlayer_with_vite+lit.md +1 -1
- package/docs/tr/intlayer_with_vite+preact.md +57 -57
- package/docs/tr/intlayer_with_vite+react.md +49 -49
- package/docs/tr/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/tr/intlayer_with_vite+solid.md +33 -42
- package/docs/tr/intlayer_with_vite+svelte.md +27 -29
- package/docs/tr/intlayer_with_vite+vanilla.md +1 -1
- package/docs/tr/intlayer_with_vite+vue.md +54 -102
- package/docs/tr/mcp_server.md +22 -0
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +111 -0
- package/docs/tr/packages/react-intlayer/useDictionary.md +0 -119
- package/docs/tr/packages/react-intlayer/useI18n.md +0 -125
- package/docs/tr/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/tr/releases/v6.md +28 -0
- package/docs/tr/releases/v7.md +128 -0
- package/docs/tr/releases/v9.md +37 -1
- package/docs/tr/roadmap.md +6 -0
- package/docs/uk/benchmark/solid.md +22 -0
- package/docs/uk/benchmark/svelte.md +22 -0
- package/docs/uk/benchmark/tanstack.md +22 -0
- package/docs/uk/cli/ci.md +22 -0
- package/docs/uk/cli/fill.md +8 -0
- package/docs/uk/compat/i18n-js.md +44 -0
- package/docs/uk/compat/i18next.md +59 -0
- package/docs/uk/compat/index.md +51 -0
- package/docs/uk/compat/lingui.md +44 -0
- package/docs/uk/compat/next-i18next.md +57 -0
- package/docs/uk/compat/next-intl.md +59 -0
- package/docs/uk/compat/next-translate.md +45 -0
- package/docs/uk/compat/ngx-translate.md +45 -0
- package/docs/uk/compat/nuxtjs-i18n.md +46 -0
- package/docs/uk/compat/polyglot.md +45 -0
- package/docs/uk/compat/react-i18next.md +58 -0
- package/docs/uk/compat/react-intl.md +55 -0
- package/docs/uk/compat/svelte-i18n.md +47 -0
- package/docs/uk/compat/transloco.md +45 -0
- package/docs/uk/compat/vue-i18n.md +58 -0
- package/docs/uk/compiler.md +3 -1
- package/docs/uk/configuration.md +19 -17
- package/docs/uk/custom_domains.md +1 -1
- package/docs/uk/custom_url_rewrites.md +1 -1
- package/docs/uk/dictionary/content_file.md +0 -7
- package/docs/uk/dictionary/enumeration.md +0 -187
- package/docs/uk/dictionary/nesting.md +39 -0
- package/docs/uk/dictionary/translation.md +0 -72
- package/docs/uk/formatters.md +142 -58
- package/docs/uk/interest_of_intlayer.md +194 -0
- package/docs/uk/intlayer_with_analog.md +4 -0
- package/docs/uk/intlayer_with_astro.md +130 -3
- package/docs/uk/intlayer_with_astro_lit.md +1 -1
- package/docs/uk/intlayer_with_astro_preact.md +1 -1
- package/docs/uk/intlayer_with_astro_react.md +1 -1
- package/docs/uk/intlayer_with_astro_solid.md +1 -1
- package/docs/uk/intlayer_with_astro_svelte.md +1 -1
- package/docs/uk/intlayer_with_astro_vanilla.md +1 -1
- package/docs/uk/intlayer_with_astro_vue.md +1 -1
- package/docs/uk/intlayer_with_nextjs_14.md +1 -1
- package/docs/uk/intlayer_with_nextjs_15.md +1 -1
- package/docs/uk/intlayer_with_nextjs_16.md +1 -1
- package/docs/uk/intlayer_with_nextjs_compiler.md +1 -22
- package/docs/uk/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/uk/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/uk/intlayer_with_nuxt.md +0 -27
- package/docs/uk/intlayer_with_react_native+expo.md +8 -61
- package/docs/uk/intlayer_with_react_router_v7.md +1 -95
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +1 -96
- package/docs/uk/intlayer_with_svelte_kit.md +1 -1
- package/docs/uk/intlayer_with_tanstack+solid.md +3 -1
- package/docs/uk/intlayer_with_tanstack.md +1 -1
- package/docs/uk/intlayer_with_vite+lit.md +1 -1
- package/docs/uk/intlayer_with_vite+preact.md +57 -57
- package/docs/uk/intlayer_with_vite+react.md +49 -49
- package/docs/uk/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/uk/intlayer_with_vite+solid.md +33 -42
- package/docs/uk/intlayer_with_vite+svelte.md +29 -29
- package/docs/uk/intlayer_with_vite+vanilla.md +1 -1
- package/docs/uk/intlayer_with_vite+vue.md +49 -101
- package/docs/uk/mcp_server.md +22 -0
- package/docs/uk/migration_from_i18next_to_intlayer.md +333 -0
- package/docs/uk/migration_from_next-i18next_to_intlayer.md +355 -0
- package/docs/uk/migration_from_next-intl_to_intlayer.md +364 -0
- package/docs/uk/migration_from_nuxtjs_i18n_to_intlayer.md +328 -0
- package/docs/uk/migration_from_react-i18next_to_intlayer.md +384 -0
- package/docs/uk/migration_from_vue-i18n_to_intlayer.md +359 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +0 -107
- package/docs/uk/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/uk/releases/v6.md +4 -0
- package/docs/uk/releases/v7.md +4 -0
- package/docs/uk/releases/v9.md +37 -1
- package/docs/vi/autoFill.md +20 -0
- package/docs/vi/benchmark/solid.md +22 -0
- package/docs/vi/benchmark/svelte.md +22 -0
- package/docs/vi/benchmark/tanstack.md +22 -0
- package/docs/vi/cli/ci.md +22 -0
- package/docs/vi/cli/fill.md +8 -0
- package/docs/vi/cli/login.md +0 -36
- package/docs/vi/compat/i18n-js.md +44 -0
- package/docs/vi/compat/i18next.md +59 -0
- package/docs/vi/compat/index.md +51 -0
- package/docs/vi/compat/lingui.md +44 -0
- package/docs/vi/compat/next-i18next.md +57 -0
- package/docs/vi/compat/next-intl.md +59 -0
- package/docs/vi/compat/next-translate.md +45 -0
- package/docs/vi/compat/ngx-translate.md +45 -0
- package/docs/vi/compat/nuxtjs-i18n.md +46 -0
- package/docs/vi/compat/polyglot.md +45 -0
- package/docs/vi/compat/react-i18next.md +58 -0
- package/docs/vi/compat/react-intl.md +55 -0
- package/docs/vi/compat/svelte-i18n.md +47 -0
- package/docs/vi/compat/transloco.md +45 -0
- package/docs/vi/compat/vue-i18n.md +58 -0
- package/docs/vi/compiler.md +3 -1
- package/docs/vi/configuration.md +19 -17
- package/docs/vi/custom_domains.md +1 -1
- package/docs/vi/custom_url_rewrites.md +1 -1
- package/docs/vi/dictionary/content_file.md +0 -7
- package/docs/vi/dictionary/enumeration.md +0 -199
- package/docs/vi/dictionary/insertion.md +0 -2
- package/docs/vi/dictionary/nesting.md +39 -0
- package/docs/vi/dictionary/translation.md +0 -61
- package/docs/vi/formatters.md +124 -0
- package/docs/vi/interest_of_intlayer.md +193 -0
- package/docs/vi/intlayer_with_analog.md +4 -0
- package/docs/vi/intlayer_with_astro.md +130 -3
- package/docs/vi/intlayer_with_astro_lit.md +1 -1
- package/docs/vi/intlayer_with_astro_preact.md +1 -1
- package/docs/vi/intlayer_with_astro_react.md +1 -1
- package/docs/vi/intlayer_with_astro_solid.md +1 -1
- package/docs/vi/intlayer_with_astro_svelte.md +1 -1
- package/docs/vi/intlayer_with_astro_vanilla.md +1 -1
- package/docs/vi/intlayer_with_astro_vue.md +1 -1
- package/docs/vi/intlayer_with_nextjs_14.md +1 -1
- package/docs/vi/intlayer_with_nextjs_15.md +469 -1
- package/docs/vi/intlayer_with_nextjs_16.md +1 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +1 -22
- package/docs/vi/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/vi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/vi/intlayer_with_nuxt.md +0 -27
- package/docs/vi/intlayer_with_react_native+expo.md +8 -61
- package/docs/vi/intlayer_with_react_router_v7.md +1 -95
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +1 -103
- package/docs/vi/intlayer_with_svelte_kit.md +1 -207
- package/docs/vi/intlayer_with_tanstack+solid.md +3 -1
- package/docs/vi/intlayer_with_tanstack.md +1 -1
- package/docs/vi/intlayer_with_vite+lit.md +1 -1
- package/docs/vi/intlayer_with_vite+preact.md +57 -57
- package/docs/vi/intlayer_with_vite+react.md +49 -49
- package/docs/vi/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/vi/intlayer_with_vite+solid.md +33 -42
- package/docs/vi/intlayer_with_vite+svelte.md +29 -31
- package/docs/vi/intlayer_with_vite+vanilla.md +1 -1
- package/docs/vi/intlayer_with_vite+vue.md +49 -101
- package/docs/vi/mcp_server.md +22 -0
- package/docs/vi/migration_from_i18next_to_intlayer.md +333 -0
- package/docs/vi/migration_from_next-i18next_to_intlayer.md +355 -0
- package/docs/vi/migration_from_next-intl_to_intlayer.md +364 -0
- package/docs/vi/migration_from_nuxtjs_i18n_to_intlayer.md +328 -0
- package/docs/vi/migration_from_react-i18next_to_intlayer.md +384 -0
- package/docs/vi/migration_from_vue-i18n_to_intlayer.md +359 -0
- package/docs/vi/packages/intlayer/getLocalizedUrl.md +25 -0
- package/docs/vi/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/vi/packages/react-intlayer/useDictionary.md +0 -121
- package/docs/vi/packages/react-intlayer/useI18n.md +0 -28
- package/docs/vi/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/vi/releases/v6.md +4 -0
- package/docs/vi/releases/v7.md +128 -0
- package/docs/vi/releases/v9.md +37 -1
- package/docs/zh/CI_CD.md +1 -1
- package/docs/zh/autoFill.md +81 -0
- package/docs/zh/benchmark/solid.md +22 -0
- package/docs/zh/benchmark/svelte.md +22 -0
- package/docs/zh/benchmark/tanstack.md +22 -0
- package/docs/zh/cli/ci.md +22 -0
- package/docs/zh/cli/fill.md +8 -0
- package/docs/zh/cli/login.md +0 -36
- package/docs/zh/compat/i18n-js.md +44 -0
- package/docs/zh/compat/i18next.md +59 -0
- package/docs/zh/compat/index.md +51 -0
- package/docs/zh/compat/lingui.md +44 -0
- package/docs/zh/compat/next-i18next.md +57 -0
- package/docs/zh/compat/next-intl.md +59 -0
- package/docs/zh/compat/next-translate.md +45 -0
- package/docs/zh/compat/ngx-translate.md +45 -0
- package/docs/zh/compat/nuxtjs-i18n.md +46 -0
- package/docs/zh/compat/polyglot.md +45 -0
- package/docs/zh/compat/react-i18next.md +58 -0
- package/docs/zh/compat/react-intl.md +55 -0
- package/docs/zh/compat/svelte-i18n.md +47 -0
- package/docs/zh/compat/transloco.md +45 -0
- package/docs/zh/compat/vue-i18n.md +58 -0
- package/docs/zh/compiler.md +3 -1
- package/docs/zh/configuration.md +19 -17
- package/docs/zh/custom_domains.md +1 -1
- package/docs/zh/custom_url_rewrites.md +14 -16
- package/docs/zh/dictionary/content_file.md +16 -20
- package/docs/zh/dictionary/enumeration.md +0 -187
- package/docs/zh/dictionary/function_fetching.md +0 -27
- package/docs/zh/dictionary/insertion.md +0 -64
- package/docs/zh/dictionary/nesting.md +39 -0
- package/docs/zh/dictionary/translation.md +0 -84
- package/docs/zh/formatters.md +77 -0
- package/docs/zh/how_works_intlayer.md +4 -4
- package/docs/zh/intlayer_CMS.md +21 -0
- package/docs/zh/intlayer_with_analog.md +4 -170
- package/docs/zh/intlayer_with_angular_19.md +0 -248
- package/docs/zh/intlayer_with_astro.md +242 -60
- package/docs/zh/intlayer_with_astro_lit.md +108 -74
- package/docs/zh/intlayer_with_astro_preact.md +102 -68
- package/docs/zh/intlayer_with_astro_react.md +104 -70
- package/docs/zh/intlayer_with_astro_solid.md +104 -70
- package/docs/zh/intlayer_with_astro_svelte.md +104 -70
- package/docs/zh/intlayer_with_astro_vanilla.md +101 -69
- package/docs/zh/intlayer_with_astro_vue.md +96 -62
- package/docs/zh/intlayer_with_create_react_app.md +0 -305
- package/docs/zh/intlayer_with_express.md +0 -23
- package/docs/zh/intlayer_with_lynx+react.md +0 -275
- package/docs/zh/intlayer_with_nestjs.md +0 -18
- package/docs/zh/intlayer_with_nextjs_14.md +63 -25
- package/docs/zh/intlayer_with_nextjs_15.md +64 -14
- package/docs/zh/intlayer_with_nextjs_16.md +129 -87
- package/docs/zh/intlayer_with_nextjs_compiler.md +152 -140
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/zh/intlayer_with_nextjs_page_router.md +51 -15
- package/docs/zh/intlayer_with_nuxt.md +0 -162
- package/docs/zh/intlayer_with_react_native+expo.md +36 -187
- package/docs/zh/intlayer_with_react_router_v7.md +1 -342
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +1 -332
- package/docs/zh/intlayer_with_storybook.md +0 -240
- package/docs/zh/intlayer_with_svelte_kit.md +1 -549
- package/docs/zh/intlayer_with_tanstack+solid.md +1 -646
- package/docs/zh/intlayer_with_tanstack.md +1 -644
- package/docs/zh/intlayer_with_vanilla.md +0 -283
- package/docs/zh/intlayer_with_vite+lit.md +1 -411
- package/docs/zh/intlayer_with_vite+preact.md +1 -241
- package/docs/zh/intlayer_with_vite+react.md +2 -2
- package/docs/zh/intlayer_with_vite+react_compiler.md +1 -192
- package/docs/zh/intlayer_with_vite+solid.md +1 -306
- package/docs/zh/intlayer_with_vite+svelte.md +104 -78
- package/docs/zh/intlayer_with_vite+vanilla.md +1 -442
- package/docs/zh/intlayer_with_vite+vue.md +95 -136
- package/docs/zh/mcp_server.md +26 -0
- package/docs/zh/migration_from_i18next_to_intlayer.md +330 -0
- package/docs/zh/migration_from_next-i18next_to_intlayer.md +355 -0
- package/docs/zh/migration_from_next-intl_to_intlayer.md +365 -0
- package/docs/zh/migration_from_nuxtjs_i18n_to_intlayer.md +328 -0
- package/docs/zh/migration_from_react-i18next_to_intlayer.md +384 -0
- package/docs/zh/migration_from_vue-i18n_to_intlayer.md +359 -0
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +73 -0
- package/docs/zh/packages/intlayer/getMultilingualUrls.md +112 -0
- package/docs/zh/packages/react-intlayer/useDictionary.md +0 -129
- package/docs/zh/packages/react-intlayer/useIntlayer.md +0 -51
- package/docs/zh/releases/v6.md +28 -0
- package/docs/zh/releases/v7.md +128 -0
- package/docs/zh/releases/v8.md +190 -0
- package/docs/zh/releases/v9.md +37 -1
- package/docs/zh/roadmap.md +6 -0
- package/docs/zh/vs_code_extension.md +0 -7
- package/frequent_questions/pt/translated_path_url.md +1 -1
- package/package.json +6 -6
|
@@ -84,6 +84,75 @@ Bu rehber, **Next.js** için yaygın olarak kullanılan üç i18n seçeneğini k
|
|
|
84
84
|
|
|
85
85
|
---
|
|
86
86
|
|
|
87
|
+
## Bundle boyutları & bağımlılıkları
|
|
88
|
+
|
|
89
|
+
Uygulamayı derledikten sonra, bundle tarayıcının sayfayı render etmek için yükleyeceği JavaScripttir. Bu nedenle bundle boyutu, uygulama performansı için önemlidir.
|
|
90
|
+
|
|
91
|
+
Çok dilli bir uygulama bundle'ı bağlamında önemli iki bileşen vardır:
|
|
92
|
+
|
|
93
|
+
- Uygulama kodu
|
|
94
|
+
- Tarayıcı tarafından yüklenen içerik
|
|
95
|
+
|
|
96
|
+
## Uygulama Kodu
|
|
97
|
+
|
|
98
|
+
Uygulama kodunun önemi bu durumda minimumdur. Üç çözümün tamamı tree-shakable'dır, yani kodun kullanılmayan kısımları bundle'a dahil edilmez.
|
|
99
|
+
|
|
100
|
+
Burada üç çözümle çok dilli bir uygulama için tarayıcı tarafından yüklenen JavaScript bundle boyutunun karşılaştırması yer almaktadır.
|
|
101
|
+
|
|
102
|
+
Uygulamada herhangi bir formater'a ihtiyacımız yoksa, tree-shaking sonrasında dışa aktarılan fonksiyonların listesi şu şekildedir:
|
|
103
|
+
|
|
104
|
+
- **next-intlayer**: `useIntlayer`, `useLocale`, `NextIntlClientProvider`, (Bundle boyutu 180.6 kB -> 15.24 kB (gzip))
|
|
105
|
+
- **next-intl**: `useTranslations`, `useLocale`, `NextIntlClientProvider`, (Bundle boyutu 101.3 kB -> 31.4 kB (gzip))
|
|
106
|
+
- **next-i18next**: `useTranslation`, `useI18n`, `I18nextProvider`, (Bundle boyutu 80.7 kB -> 25.5 kB (gzip))
|
|
107
|
+
|
|
108
|
+
Bu fonksiyonlar sadece React context/state etrafında wrapper'lar olduğundan, i18n kütüphanesinin bundle boyutuna toplam etkisi minimumdur.
|
|
109
|
+
|
|
110
|
+
## İçerik ve Çeviriler
|
|
111
|
+
|
|
112
|
+
Bu kısım genellikle geliştiriciler tarafından göz ardı edilir, ancak 10 dilde 10 sayfadan oluşan bir uygulamayı düşünelim. Her sayfanın hesaplamayı basitleştirmek için %100 benzersiz içerik içerdiğini varsayalım (gerçekte, sayfalar arasında çok sayıda içerik redundant'dır, örneğin sayfa başlığı, başlık, alt bilgi vb.).
|
|
113
|
+
|
|
114
|
+
Bir kullanıcı `/fr/about` sayfasını ziyaret etmek istediğinde, belirli bir dildeki bir sayfanın içeriğini yükleyecektir. İçerik optimizasyonunu göz ardı etmek, gereksiz olarak %8.200 `((1 + (((10 pages - 1) × (10 languages - 1)))) × 100)` uygulama içeriğini yüklemek anlamına gelir. Sorunu görüyor musunuz? Bu içerik metin olmaya devam etse de ve muhtemelen sitenizin resimlerini optimize etmeyi düşünmeyi tercih etseniz de, gereksiz içeriği dünya çapında gönderiyor ve kullanıcıların bilgisayarlarının bunu işlemesi için hiçbir şey yapmıyorsunuz.
|
|
115
|
+
|
|
116
|
+
İki önemli sorun:
|
|
117
|
+
|
|
118
|
+
- **Rota ile bölme:**
|
|
119
|
+
|
|
120
|
+
> `/about` sayfasındaysam, `/home` sayfasının içeriğini yüklemek istemiyorum
|
|
121
|
+
|
|
122
|
+
- **Locale ile bölme:**
|
|
123
|
+
|
|
124
|
+
> `/fr/about` sayfasındaysam, `/en/about` sayfasının içeriğini yüklemek istemiyorum
|
|
125
|
+
|
|
126
|
+
Yine de, üç çözümün tümü bu sorunlardan haberdar ve bu optimizasyonları yönetmeye izin verir. Üç çözüm arasındaki fark DX (Developer Experience)'dir.
|
|
127
|
+
|
|
128
|
+
`next-intl` ve `next-i18next` çevirileri yönetmek için merkezi bir yaklaşım kullanır ve JSON'in locale ve alt dosyalara göre bölünmesine izin verir. `next-i18next`'de, JSON dosyalarını 'namespace' olarak adlandırırız; `next-intl` iletileri bildirmeye izin verir. `intlayer`'da, JSON dosyalarını 'dictionaries' olarak adlandırırız.
|
|
129
|
+
|
|
130
|
+
- `next-intl` durumunda, `next-i18next` gibi, içerik sayfa/layout düzeyinde yüklenir, ardından bu içerik bir context provider'a yüklenir. Bu, geliştiricinin her sayfa için yüklenecek JSON dosyalarını manuel olarak yönetmesi gerektiği anlamına gelir.
|
|
131
|
+
|
|
132
|
+
> Pratikte, bu, geliştiricilerin genellikle bu optimizasyonu atlamasını ve basitlik için tüm içeriği sayfanın context provider'ına yüklemeyi tercih etmesini ifade eder.
|
|
133
|
+
|
|
134
|
+
- `intlayer` durumunda, tüm içerik uygulamada yüklenir. Ardından bir plugin (`@intlayer/babel` / `@intlayer/swc`) yalnızca sayfada kullanılan içeriği yükleyerek bundle'ı optimize etmeyi üstlenir. Geliştirici bu nedenle yüklenecek sözlükleri manuel olarak yönetmesi gerekmez. Bu, daha iyi optimizasyon, daha iyi bakım sağlaması ve geliştirme zamanını azaltır.
|
|
135
|
+
|
|
136
|
+
Uygulama büyüdükçe (özellikle birden fazla geliştirici uygulamada çalıştığında), JSON dosyalarından artık kullanılmayan içeriği kaldırmayı unutmak yaygındır.
|
|
137
|
+
|
|
138
|
+
> Tüm JSON'in tüm durumlarda yüklendiğini unutmayın (next-intl, next-i18next, intlayer).
|
|
139
|
+
|
|
140
|
+
Bu nedenle Intlayer'ın yaklaşımı daha performanslıdır: bir component artık kullanılmıyorsa, sözlüğü bundle'a yüklenmez.
|
|
141
|
+
|
|
142
|
+
Kütüphanenin fallback'leri nasıl işlediği de önemlidir. Uygulamanın varsayılan olarak İngilizcede olduğunu ve kullanıcının `/fr/about` sayfasını ziyaret ettiğini düşünelim. Çeviriler Fransızca'da eksikse, İngilizce fallback'i dikkate alacağız.
|
|
143
|
+
|
|
144
|
+
`next-intl` ve `next-i18next` durumunda, kütüphane geçerli locale ile ilgili JSON'in yüklenmesini gerektirir, aynı zamanda fallback locale de. Böylece, tüm içeriğin çevrildiğini göz önünde bulundurarak, her sayfa %100 gereksiz içerik yükleyecektir. **Buna karşılık, `intlayer` fallback'i sözlük derleme zamanında işler. Bu nedenle, her sayfa yalnızca kullanılan içeriği yükleyecektir.**
|
|
145
|
+
|
|
146
|
+
> Not: `intlayer` kullanarak bundle'ı optimize etmek için, `intlayer.config.ts` dosyasında `importMode: 'dynamic'` seçeneğini ayarlamanız gerekir. Ve `@intlayer/babel` / `@intlayer/swc` plugin'inin kurulu olduğundan emin olun (varsayılan olarak `vite-intlayer` kullanılarak kurulur).
|
|
147
|
+
|
|
148
|
+
İşte bir vite + react uygulamasında `intlayer` kullanarak bundle boyutu optimizasyonunun etkisine bir örnek:
|
|
149
|
+
|
|
150
|
+
| Optimize edilmiş bundle | Optimize edilmemiş bundle |
|
|
151
|
+
| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
152
|
+
|  |  |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
87
156
|
### 2) TypeScript ve güvenlik
|
|
88
157
|
|
|
89
158
|
- **next-intl**: Sağlam TypeScript desteği, ancak **anahtarlar varsayılan olarak katı şekilde yazılmaz**; güvenliği manuel olarak sürdüreceksiniz.
|
|
@@ -121,6 +190,113 @@ Bu rehber, **Next.js** için yaygın olarak kullanılan üç i18n seçeneğini k
|
|
|
121
190
|
|
|
122
191
|
---
|
|
123
192
|
|
|
193
|
+
## Lokalizasyon platformları (TMS) ile entegrasyon
|
|
194
|
+
|
|
195
|
+
Büyük kuruluşlar genellikle **Crowdin**, **Phrase**, **Lokalise**, **Localizely** veya **Localazy** gibi Çeviri Yönetim Sistemlerine (TMS) güvenir.
|
|
196
|
+
|
|
197
|
+
- **Şirketlerin neden önem verdiği**
|
|
198
|
+
- **İşbirliği & roller**: Birden fazla aktör söz konusudur: geliştiriciler, ürün müdürleri, çevirmenler, gözden geçirenler, pazarlama ekipleri.
|
|
199
|
+
- **Ölçek & verimlilik**: sürekli lokalizasyon, bağlam içi inceleme.
|
|
200
|
+
|
|
201
|
+
- **next-intl / next-i18next**
|
|
202
|
+
- Tipik olarak **merkezi JSON katalogları** kullanır, bu nedenle TMS ile dışa/içe aktarma işlemi açıktır.
|
|
203
|
+
- Olgun ekosistemler ve yukarıdaki platformlar için örnekler/entegrasyonlar.
|
|
204
|
+
|
|
205
|
+
- **Intlayer**
|
|
206
|
+
- **Merkezi olmayan, bileşen başına sözlükler** teşvik eder ve **TypeScript/TSX/JS/JSON/MD** içeriğini destekler.
|
|
207
|
+
- Bu, koddaki modülarite iyileştirir, ancak bir araç merkezi, düz JSON dosyaları beklediğinde plug‑and‑play TMS entegrasyonunu daha zor hale getirebilir.
|
|
208
|
+
- Intlayer alternatifler sağlar: **AI destekli çeviriler** (kendi sağlayıcı anahtarlarınızı kullanarak), **Görsel Editör/CMS** ve **CLI/CI** iş akışları boşlukları yakalamak ve önceden doldurmak için.
|
|
209
|
+
|
|
210
|
+
> Not: `next-intl` ve `i18next` ayrıca TypeScript kataloglarını kabul eder. Ekibiniz mesajları `.ts` dosyalarında depoluyorsa veya bunları özelliğe göre merkezi olmayan hale getirirse, benzer TMS sürtünme yaşayabilirsiniz. Ancak, birçok `next-intl` kurulumu `locales/` klasöründe merkezi kalır ve bu, TMS için JSON'a yeniden düzenlemek biraz daha kolaydır.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Geliştirici Deneyimi
|
|
215
|
+
|
|
216
|
+
Bu bölüm üç çözüm arasında derinlemesine bir karşılaştırma yapmaktadır. Her çözüm için 'başlangıç' belgelerinde açıklanan basit durumlar yerine, gerçek bir proje benzeri gerçek bir kullanım durumunu göz önünde bulunduracağız.
|
|
217
|
+
|
|
218
|
+
### Uygulama Yapısı
|
|
219
|
+
|
|
220
|
+
Uygulama yapısı, codebase'iniz için iyi bir bakım alabilirliği sağlamak açısından önemlidir.
|
|
221
|
+
|
|
222
|
+
<Tabs defaultTab="next-intl" group='techno'>
|
|
223
|
+
|
|
224
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
.
|
|
228
|
+
├── i18n.config.ts
|
|
229
|
+
└── src
|
|
230
|
+
├── locales
|
|
231
|
+
│ ├── en
|
|
232
|
+
│ │ ├── common.json
|
|
233
|
+
│ │ └── about.json
|
|
234
|
+
│ └── fr
|
|
235
|
+
│ ├── common.json
|
|
236
|
+
│ └── about.json
|
|
237
|
+
├── app
|
|
238
|
+
│ ├── i18n
|
|
239
|
+
│ │ └── server.ts
|
|
240
|
+
│ └── [locale]
|
|
241
|
+
│ ├── layout.tsx
|
|
242
|
+
│ └── about.tsx
|
|
243
|
+
└── components
|
|
244
|
+
├── I18nProvider.tsx
|
|
245
|
+
├── ClientComponent.tsx
|
|
246
|
+
└── ServerComponent.tsx
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
</Tab>
|
|
250
|
+
<Tab label="next-intl" value="next-intl">
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
.
|
|
254
|
+
├── i18n.ts
|
|
255
|
+
├── locales
|
|
256
|
+
│ ├── en
|
|
257
|
+
│ │ ├── home.json
|
|
258
|
+
│ │ └── navbar.json
|
|
259
|
+
│ ├── fr
|
|
260
|
+
│ │ ├── home.json
|
|
261
|
+
│ │ └── navbar.json
|
|
262
|
+
│ └── es
|
|
263
|
+
│ ├── home.json
|
|
264
|
+
│ └── navbar.json
|
|
265
|
+
└── src
|
|
266
|
+
├── middleware.ts
|
|
267
|
+
├── app
|
|
268
|
+
│ ├── i18n
|
|
269
|
+
│ │ └── server.ts
|
|
270
|
+
│ └── [locale]
|
|
271
|
+
│ └── home.tsx
|
|
272
|
+
└── components
|
|
273
|
+
└── Navbar
|
|
274
|
+
└── index.tsx
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
</Tab>
|
|
278
|
+
<Tab label="intlayer" value="intlayer">
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
.
|
|
282
|
+
├── intlayer.config.ts
|
|
283
|
+
└── src
|
|
284
|
+
├── middleware.ts
|
|
285
|
+
├── app
|
|
286
|
+
│ └── [locale]
|
|
287
|
+
│ ├── layout.tsx
|
|
288
|
+
│ └── home
|
|
289
|
+
│ ├── index.tsx
|
|
290
|
+
│ └── index.content.ts
|
|
291
|
+
└── components
|
|
292
|
+
└── Navbar
|
|
293
|
+
├── index.tsx
|
|
294
|
+
└── index.content.ts
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
</Tab>
|
|
298
|
+
</Tabs>
|
|
299
|
+
|
|
124
300
|
### 6) Performans ve yükleme davranışı
|
|
125
301
|
|
|
126
302
|
- **next-intl / next-i18next**: **Ad alanları** ve **rota düzeyinde bölmeler** aracılığıyla kısmi kontrol; disiplin kayarsa kullanılmayan dizeleri paketleme riski.
|
|
@@ -130,6 +306,358 @@ Bu rehber, **Next.js** için yaygın olarak kullanılan üç i18n seçeneğini k
|
|
|
130
306
|
|
|
131
307
|
---
|
|
132
308
|
|
|
309
|
+
#### Kurulum ve İçerik Yükleme
|
|
310
|
+
|
|
311
|
+
Daha önce bahsedildiği gibi, her JSON dosyasının kodunuza nasıl import edildiğini optimize etmelisiniz.
|
|
312
|
+
Kütüphanenin içerik yüklemesini nasıl işlediği önemlidir.
|
|
313
|
+
|
|
314
|
+
<Tabs defaultTab="next-intl" group='techno'>
|
|
315
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
316
|
+
|
|
317
|
+
```ts fileName="i18n.config.ts"
|
|
318
|
+
export const locales = ["en", "fr"] as const;
|
|
319
|
+
export type Locale = (typeof locales)[number];
|
|
320
|
+
|
|
321
|
+
export const defaultLocale: Locale = "en";
|
|
322
|
+
|
|
323
|
+
export const rtlLocales = ["ar", "he", "fa", "ur"] as const;
|
|
324
|
+
export const isRtl = (locale: string) =>
|
|
325
|
+
(rtlLocales as readonly string[]).includes(locale);
|
|
326
|
+
|
|
327
|
+
export function localizedPath(locale: string, path: string) {
|
|
328
|
+
return locale === defaultLocale ? path : "/" + locale + path;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const ORIGIN = "https://example.com";
|
|
332
|
+
export function abs(locale: string, path: string) {
|
|
333
|
+
return ORIGIN + localizedPath(locale, path);
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
```ts fileName="src/app/i18n/server.ts"
|
|
338
|
+
import { createInstance } from "i18next";
|
|
339
|
+
import { initReactI18next } from "react-i18next/initReactI18next";
|
|
340
|
+
import resourcesToBackend from "i18next-resources-to-backend";
|
|
341
|
+
import { defaultLocale } from "@/i18n.config";
|
|
342
|
+
|
|
343
|
+
// JSON kaynaklarını src/locales/<locale>/<namespace>.json dosyasından yükle
|
|
344
|
+
const backend = resourcesToBackend(
|
|
345
|
+
(locale: string, namespace: string) =>
|
|
346
|
+
import(`../../locales/${locale}/${namespace}.json`)
|
|
347
|
+
);
|
|
348
|
+
|
|
349
|
+
export async function initI18next(
|
|
350
|
+
locale: string,
|
|
351
|
+
namespaces: string[] = ["common"]
|
|
352
|
+
) {
|
|
353
|
+
const i18n = createInstance();
|
|
354
|
+
await i18n
|
|
355
|
+
.use(initReactI18next)
|
|
356
|
+
.use(backend)
|
|
357
|
+
.init({
|
|
358
|
+
lng: locale,
|
|
359
|
+
fallbackLng: defaultLocale,
|
|
360
|
+
ns: namespaces,
|
|
361
|
+
defaultNS: "common",
|
|
362
|
+
interpolation: { escapeValue: false },
|
|
363
|
+
react: { useSuspense: false },
|
|
364
|
+
});
|
|
365
|
+
return i18n;
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
```tsx fileName="src/components/I18nProvider.tsx"
|
|
370
|
+
"use client";
|
|
371
|
+
|
|
372
|
+
import * as React from "react";
|
|
373
|
+
import { I18nextProvider } from "react-i18next";
|
|
374
|
+
import { createInstance } from "i18next";
|
|
375
|
+
import { initReactI18next } from "react-i18next/initReactI18next";
|
|
376
|
+
import resourcesToBackend from "i18next-resources-to-backend";
|
|
377
|
+
import { defaultLocale } from "@/i18n.config";
|
|
378
|
+
|
|
379
|
+
const backend = resourcesToBackend(
|
|
380
|
+
(locale: string, namespace: string) =>
|
|
381
|
+
import(`../../locales/${locale}/${namespace}.json`)
|
|
382
|
+
);
|
|
383
|
+
|
|
384
|
+
type Props = {
|
|
385
|
+
locale: string;
|
|
386
|
+
namespaces?: string[];
|
|
387
|
+
resources?: Record<string, any>; // { ns: bundle }
|
|
388
|
+
children: React.ReactNode;
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
export default function I18nProvider({
|
|
392
|
+
locale,
|
|
393
|
+
namespaces = ["common"],
|
|
394
|
+
resources,
|
|
395
|
+
children,
|
|
396
|
+
}: Props) {
|
|
397
|
+
const [i18n] = React.useState(() => {
|
|
398
|
+
const i = createInstance();
|
|
399
|
+
|
|
400
|
+
i.use(initReactI18next)
|
|
401
|
+
.use(backend)
|
|
402
|
+
.init({
|
|
403
|
+
lng: locale,
|
|
404
|
+
fallbackLng: defaultLocale,
|
|
405
|
+
ns: namespaces,
|
|
406
|
+
resources: resources ? { [locale]: resources } : undefined,
|
|
407
|
+
defaultNS: "common",
|
|
408
|
+
interpolation: { escapeValue: false },
|
|
409
|
+
react: { useSuspense: false },
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
return i;
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
```tsx fileName="src/app/[locale]/layout.tsx"
|
|
420
|
+
import type { ReactNode } from "react";
|
|
421
|
+
import { locales, defaultLocale, isRtl, type Locale } from "@/i18n.config";
|
|
422
|
+
|
|
423
|
+
export const dynamicParams = false;
|
|
424
|
+
|
|
425
|
+
export function generateStaticParams() {
|
|
426
|
+
return locales.map((locale) => ({ locale }));
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
export default function LocaleLayout({
|
|
430
|
+
children,
|
|
431
|
+
params,
|
|
432
|
+
}: {
|
|
433
|
+
children: ReactNode;
|
|
434
|
+
params: { locale: string };
|
|
435
|
+
}) {
|
|
436
|
+
const locale: Locale = (locales as readonly string[]).includes(params.locale)
|
|
437
|
+
? params.locale
|
|
438
|
+
: defaultLocale;
|
|
439
|
+
|
|
440
|
+
const dir = isRtl(locale) ? "rtl" : "ltr";
|
|
441
|
+
|
|
442
|
+
return (
|
|
443
|
+
<html lang={locale} dir={dir}>
|
|
444
|
+
<body>{children}</body>
|
|
445
|
+
</html>
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
```tsx fileName="src/app/[locale]/about.tsx"
|
|
451
|
+
import I18nProvider from "@/components/I18nProvider";
|
|
452
|
+
import { initI18next } from "@/app/i18n/server";
|
|
453
|
+
import type { Locale } from "@/i18n.config";
|
|
454
|
+
import ClientComponent from "@/components/ClientComponent";
|
|
455
|
+
import ServerComponent from "@/components/ServerComponent";
|
|
456
|
+
|
|
457
|
+
// Sayfa için statik render'ı zorla
|
|
458
|
+
export const dynamic = "force-static";
|
|
459
|
+
|
|
460
|
+
export default async function AboutPage({
|
|
461
|
+
params: { locale },
|
|
462
|
+
}: {
|
|
463
|
+
params: { locale: Locale };
|
|
464
|
+
}) {
|
|
465
|
+
const namespaces = ["common", "about"] as const;
|
|
466
|
+
|
|
467
|
+
const i18n = await initI18next(locale, [...namespaces]);
|
|
468
|
+
const tAbout = i18n.getFixedT(locale, "about");
|
|
469
|
+
|
|
470
|
+
return (
|
|
471
|
+
<I18nProvider locale={locale} namespaces={[...namespaces]}>
|
|
472
|
+
<main>
|
|
473
|
+
<h1>{tAbout("title")}</h1>
|
|
474
|
+
|
|
475
|
+
<ClientComponent />
|
|
476
|
+
<ServerComponent t={tAbout} locale={locale} count={0} />
|
|
477
|
+
</main>
|
|
478
|
+
</I18nProvider>
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
</Tab>
|
|
484
|
+
<Tab label="next-intl" value="next-intl">
|
|
485
|
+
|
|
486
|
+
```tsx fileName="src/i18n.ts"
|
|
487
|
+
import { getRequestConfig } from "next-intl/server";
|
|
488
|
+
import { notFound } from "next/navigation";
|
|
489
|
+
|
|
490
|
+
export const locales = ["en", "fr", "es"] as const;
|
|
491
|
+
export const defaultLocale = "en" as const;
|
|
492
|
+
|
|
493
|
+
async function loadMessages(locale: string) {
|
|
494
|
+
// Yalnızca layout/pages'in ihtiyaç duyduğu namespace'leri yükle
|
|
495
|
+
const [common, about] = await Promise.all([
|
|
496
|
+
import(`../locales/${locale}/common.json`).then((m) => m.default),
|
|
497
|
+
import(`../locales/${locale}/about.json`).then((m) => m.default),
|
|
498
|
+
]);
|
|
499
|
+
|
|
500
|
+
return { common, about } as const;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
export default getRequestConfig(async ({ locale }) => {
|
|
504
|
+
if (!locales.includes(locale)) notFound();
|
|
505
|
+
|
|
506
|
+
return {
|
|
507
|
+
messages: await loadMessages(locale),
|
|
508
|
+
};
|
|
509
|
+
});
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
```tsx fileName="src/app/[locale]/layout.tsx"
|
|
513
|
+
import type { ReactNode } from "react";
|
|
514
|
+
import { locales } from "@/i18n";
|
|
515
|
+
import {
|
|
516
|
+
getLocaleDirection,
|
|
517
|
+
unstable_setRequestLocale,
|
|
518
|
+
} from "next-intl/server";
|
|
519
|
+
|
|
520
|
+
export const dynamic = "force-static";
|
|
521
|
+
|
|
522
|
+
export function generateStaticParams() {
|
|
523
|
+
return locales.map((locale) => ({ locale }));
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
export default async function LocaleLayout({
|
|
527
|
+
children,
|
|
528
|
+
params,
|
|
529
|
+
}: {
|
|
530
|
+
children: ReactNode;
|
|
531
|
+
params: Promise<{ locale: string }>;
|
|
532
|
+
}) {
|
|
533
|
+
const { locale } = await params;
|
|
534
|
+
|
|
535
|
+
// Bu sunucu render'ı (RSC) için aktif request locale'ini ayarla
|
|
536
|
+
unstable_setRequestLocale(locale);
|
|
537
|
+
|
|
538
|
+
const dir = getLocaleDirection(locale);
|
|
539
|
+
|
|
540
|
+
return (
|
|
541
|
+
<html lang={locale} dir={dir}>
|
|
542
|
+
<body>{children}</body>
|
|
543
|
+
</html>
|
|
544
|
+
);
|
|
545
|
+
}
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
```tsx fileName="src/app/[locale]/about/page.tsx"
|
|
549
|
+
import { getTranslations, getMessages, getFormatter } from "next-intl/server";
|
|
550
|
+
import { NextIntlClientProvider } from "next-intl";
|
|
551
|
+
import pick from "lodash/pick";
|
|
552
|
+
import ServerComponent from "@/components/ServerComponent";
|
|
553
|
+
import ClientComponentExample from "@/components/ClientComponentExample";
|
|
554
|
+
|
|
555
|
+
export const dynamic = "force-static";
|
|
556
|
+
|
|
557
|
+
export default async function AboutPage({
|
|
558
|
+
params,
|
|
559
|
+
}: {
|
|
560
|
+
params: Promise<{ locale: string }>;
|
|
561
|
+
}) {
|
|
562
|
+
const { locale } = await params;
|
|
563
|
+
|
|
564
|
+
// Mesajlar sunucu tarafında yüklenir. Yalnızca gerekli olanı istemciye gönder.
|
|
565
|
+
const messages = await getMessages();
|
|
566
|
+
const clientMessages = pick(messages, ["common", "about"]);
|
|
567
|
+
|
|
568
|
+
// Kesinlikle sunucu tarafında çeviriler/biçimlendirme
|
|
569
|
+
const tAbout = await getTranslations("about");
|
|
570
|
+
const tCounter = await getTranslations("about.counter");
|
|
571
|
+
const format = await getFormatter();
|
|
572
|
+
|
|
573
|
+
const initialFormattedCount = format.number(0);
|
|
574
|
+
|
|
575
|
+
return (
|
|
576
|
+
<NextIntlClientProvider locale={locale} messages={clientMessages}>
|
|
577
|
+
<main>
|
|
578
|
+
<h1>{tAbout("title")}</h1>
|
|
579
|
+
<ClientComponentExample />
|
|
580
|
+
<ServerComponent
|
|
581
|
+
formattedCount={initialFormattedCount}
|
|
582
|
+
label={tCounter("label")}
|
|
583
|
+
increment={tCounter("increment")}
|
|
584
|
+
/>
|
|
585
|
+
</main>
|
|
586
|
+
</NextIntlClientProvider>
|
|
587
|
+
);
|
|
588
|
+
}
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
</Tab>
|
|
592
|
+
<Tab label="intlayer" value="intlayer">
|
|
593
|
+
|
|
594
|
+
```tsx fileName="intlayer.config.ts"
|
|
595
|
+
import { type IntlayerConfig, Locales } from "intlayer";
|
|
596
|
+
|
|
597
|
+
const config: IntlayerConfig = {
|
|
598
|
+
internationalization: {
|
|
599
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
600
|
+
defaultLocale: Locales.ENGLISH,
|
|
601
|
+
},
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
export default config;
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
```tsx fileName="src/app/[locale]/layout.tsx"
|
|
608
|
+
import { getHTMLTextDir } from "intlayer";
|
|
609
|
+
import {
|
|
610
|
+
IntlayerClientProvider,
|
|
611
|
+
generateStaticParams,
|
|
612
|
+
type NextLayoutIntlayer,
|
|
613
|
+
} from "next-intlayer";
|
|
614
|
+
|
|
615
|
+
export const dynamic = "force-static";
|
|
616
|
+
|
|
617
|
+
const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
618
|
+
const { locale } = await params;
|
|
619
|
+
|
|
620
|
+
return (
|
|
621
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
622
|
+
<body>
|
|
623
|
+
<IntlayerClientProvider locale={locale}>
|
|
624
|
+
{children}
|
|
625
|
+
</IntlayerClientProvider>
|
|
626
|
+
</body>
|
|
627
|
+
</html>
|
|
628
|
+
);
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
export default LandingLayout;
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
```tsx fileName="src/app/[locale]/about/page.tsx"
|
|
635
|
+
import { PageContent } from "@components/PageContent";
|
|
636
|
+
import type { NextPageIntlayer } from "next-intlayer";
|
|
637
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
638
|
+
import { ClientComponent, ServerComponent } from "@components";
|
|
639
|
+
|
|
640
|
+
const LandingPage: NextPageIntlayer = async ({ params }) => {
|
|
641
|
+
const { locale } = await params;
|
|
642
|
+
const { title } = useIntlayer("about", locale);
|
|
643
|
+
|
|
644
|
+
return (
|
|
645
|
+
<IntlayerServerProvider locale={locale}>
|
|
646
|
+
<main>
|
|
647
|
+
<h1>{title}</h1>
|
|
648
|
+
<ClientComponent />
|
|
649
|
+
<ServerComponent />
|
|
650
|
+
</main>
|
|
651
|
+
</IntlayerServerProvider>
|
|
652
|
+
);
|
|
653
|
+
};
|
|
654
|
+
|
|
655
|
+
export default LandingPage;
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
</Tab>
|
|
659
|
+
</Tabs>
|
|
660
|
+
|
|
133
661
|
### 7) DX, araçlar ve bakım
|
|
134
662
|
|
|
135
663
|
- **next-intl / next-i18next**: Genellikle çeviriler ve düzenleme iş akışları için harici platformları bağlayacaksınız.
|
|
@@ -139,6 +667,170 @@ Bu rehber, **Next.js** için yaygın olarak kullanılan üç i18n seçeneğini k
|
|
|
139
667
|
|
|
140
668
|
---
|
|
141
669
|
|
|
670
|
+
### İstemci bileşeninde kullanım
|
|
671
|
+
|
|
672
|
+
Bir sayaç renderlayan istemci bileşeninin örneğini alalım.
|
|
673
|
+
|
|
674
|
+
<Tabs defaultTab="next-intl" group='techno'>
|
|
675
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
676
|
+
|
|
677
|
+
**Çeviriler (`src/locales/...` altında namespace başına bir JSON)**
|
|
678
|
+
|
|
679
|
+
```json fileName="src/locales/en/about.json"
|
|
680
|
+
{
|
|
681
|
+
"title": "About",
|
|
682
|
+
"description": "About page description",
|
|
683
|
+
"counter": {
|
|
684
|
+
"label": "Counter",
|
|
685
|
+
"increment": "Increment"
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
```json fileName="src/locales/fr/about.json"
|
|
691
|
+
{
|
|
692
|
+
"title": "À propos",
|
|
693
|
+
"description": "Description de la page À propos",
|
|
694
|
+
"counter": {
|
|
695
|
+
"label": "Compteur",
|
|
696
|
+
"increment": "Incrémenter"
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
**İstemci bileşeni (yalnızca gerekli namespace'i yükler)**
|
|
702
|
+
|
|
703
|
+
```tsx fileName="src/components/ClientComponent.tsx"
|
|
704
|
+
"use client";
|
|
705
|
+
|
|
706
|
+
import React, { useState } from "react";
|
|
707
|
+
import { useTranslation } from "react-i18next";
|
|
708
|
+
|
|
709
|
+
const ClientComponent = () => {
|
|
710
|
+
const { t, i18n } = useTranslation("about");
|
|
711
|
+
const [count, setCount] = useState(0);
|
|
712
|
+
|
|
713
|
+
// Intl.NumberFormat örneğini oluştur
|
|
714
|
+
const numberFormat = new Intl.NumberFormat(i18n.language);
|
|
715
|
+
|
|
716
|
+
return (
|
|
717
|
+
<div>
|
|
718
|
+
<p>{numberFormat.format(count)}</p>
|
|
719
|
+
<button
|
|
720
|
+
aria-label={t("counter.label")}
|
|
721
|
+
onClick={() => setCount((c) => c + 1)}
|
|
722
|
+
>
|
|
723
|
+
{t("counter.increment")}
|
|
724
|
+
</button>
|
|
725
|
+
</div>
|
|
726
|
+
);
|
|
727
|
+
};
|
|
728
|
+
|
|
729
|
+
export default ClientComponent;
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
> Sayfa/provider'ın yalnızca ihtiyaç duyduğunuz namespace'leri içerdiğinden emin olun (örneğin `about`).
|
|
733
|
+
> React < 19 kullanıyorsanız, `Intl.NumberFormat` gibi ağır formatter'ları memoize edin.
|
|
734
|
+
|
|
735
|
+
</Tab>
|
|
736
|
+
<Tab label="next-intl" value="next-intl">
|
|
737
|
+
|
|
738
|
+
**Çeviriler (şekil yeniden kullanılır; bunları next-intl mesajlarına istediğiniz şekilde yükleyin)**
|
|
739
|
+
|
|
740
|
+
```json fileName="locales/en/about.json"
|
|
741
|
+
{
|
|
742
|
+
"counter": {
|
|
743
|
+
"label": "Counter",
|
|
744
|
+
"increment": "Increment"
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
```
|
|
748
|
+
|
|
749
|
+
```json fileName="locales/fr/about.json"
|
|
750
|
+
{
|
|
751
|
+
"counter": {
|
|
752
|
+
"label": "Compteur",
|
|
753
|
+
"increment": "Incrémenter"
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
**İstemci bileşeni**
|
|
759
|
+
|
|
760
|
+
```tsx fileName="src/components/ClientComponentExample.tsx"
|
|
761
|
+
"use client";
|
|
762
|
+
|
|
763
|
+
import React, { useState } from "react";
|
|
764
|
+
import { useTranslations, useFormatter } from "next-intl";
|
|
765
|
+
|
|
766
|
+
const ClientComponentExample = () => {
|
|
767
|
+
// İç içe nesneye doğrudan kapsam ver
|
|
768
|
+
const t = useTranslations("about.counter");
|
|
769
|
+
const format = useFormatter();
|
|
770
|
+
const [count, setCount] = useState(0);
|
|
771
|
+
|
|
772
|
+
return (
|
|
773
|
+
<div>
|
|
774
|
+
<p>{format.number(count)}</p>
|
|
775
|
+
<button
|
|
776
|
+
aria-label={t("label")}
|
|
777
|
+
onClick={() => setCount((count) => count + 1)}
|
|
778
|
+
>
|
|
779
|
+
{t("increment")}
|
|
780
|
+
</button>
|
|
781
|
+
</div>
|
|
782
|
+
);
|
|
783
|
+
};
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
> Sayfa istemci mesajına "about" mesajını eklemeyi unutmayın
|
|
787
|
+
|
|
788
|
+
</Tab>
|
|
789
|
+
<Tab label="intlayer" value="intlayer">
|
|
790
|
+
|
|
791
|
+
**İçerik**
|
|
792
|
+
|
|
793
|
+
```ts fileName="src/components/ClientComponentExample/index.content.ts"
|
|
794
|
+
import { t, type Dictionary } from "intlayer";
|
|
795
|
+
|
|
796
|
+
const counterContent = {
|
|
797
|
+
key: "counter",
|
|
798
|
+
content: {
|
|
799
|
+
label: t({ tr: "Sayaç", en: "Counter", fr: "Compteur" }),
|
|
800
|
+
increment: t({ tr: "Artır", en: "Increment", fr: "Incrémenter" }),
|
|
801
|
+
},
|
|
802
|
+
} satisfies Dictionary;
|
|
803
|
+
|
|
804
|
+
export default counterContent;
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
**İstemci bileşeni**
|
|
808
|
+
|
|
809
|
+
```tsx fileName="src/components/ClientComponentExample/index.tsx"
|
|
810
|
+
"use client";
|
|
811
|
+
|
|
812
|
+
import React, { useState } from "react";
|
|
813
|
+
import { useNumber, useIntlayer } from "next-intlayer";
|
|
814
|
+
|
|
815
|
+
const ClientComponentExample = () => {
|
|
816
|
+
const [count, setCount] = useState(0);
|
|
817
|
+
const { label, increment } = useIntlayer("counter"); // diziler döndürür
|
|
818
|
+
const { number } = useNumber();
|
|
819
|
+
|
|
820
|
+
return (
|
|
821
|
+
<div>
|
|
822
|
+
<p>{number(count)}</p>
|
|
823
|
+
<button aria-label={label} onClick={() => setCount((count) => count + 1)}>
|
|
824
|
+
{increment}
|
|
825
|
+
</button>
|
|
826
|
+
</div>
|
|
827
|
+
);
|
|
828
|
+
};
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
</Tab>
|
|
832
|
+
</Tabs>
|
|
833
|
+
|
|
142
834
|
## Hangisini ne zaman seçmeli?
|
|
143
835
|
|
|
144
836
|
- **next-intl**'i seçin eğer **minimal** bir çözüm istiyorsanız, merkezi kataloglarla rahatınız ve uygulamanız **küçük ila orta boy**.
|
|
@@ -147,6 +839,469 @@ Bu rehber, **Next.js** için yaygın olarak kullanılan üç i18n seçeneğini k
|
|
|
147
839
|
|
|
148
840
|
---
|
|
149
841
|
|
|
842
|
+
### Bir sunucu bileşeninde kullanım
|
|
843
|
+
|
|
844
|
+
Bir UI bileşeninin durumunu ele alacağız. Bu bileşen bir sunucu bileşenidir ve bir istemci bileşeninin alt öğesi olarak eklenebilir olmalıdır. (sayfa (sunucu bileşeni) -> istemci bileşeni -> sunucu bileşeni). Bu bileşen bir istemci bileşeninin alt öğesi olarak eklenebileceğinden, asenkron olamaz.
|
|
845
|
+
|
|
846
|
+
<Tabs defaultTab="next-intl" group='techno'>
|
|
847
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
848
|
+
|
|
849
|
+
```tsx fileName="src/components/ServerComponent.tsx"
|
|
850
|
+
type ServerComponentProps = {
|
|
851
|
+
t: (key: string) => string;
|
|
852
|
+
locale: string;
|
|
853
|
+
count: number;
|
|
854
|
+
};
|
|
855
|
+
|
|
856
|
+
const ServerComponent = ({ t, locale, count }: ServerComponentProps) => {
|
|
857
|
+
const formatted = new Intl.NumberFormat(locale).format(count);
|
|
858
|
+
|
|
859
|
+
return (
|
|
860
|
+
<div>
|
|
861
|
+
<p>{formatted}</p>
|
|
862
|
+
<button aria-label={t("counter.label")}>{t("counter.increment")}</button>
|
|
863
|
+
</div>
|
|
864
|
+
);
|
|
865
|
+
};
|
|
866
|
+
|
|
867
|
+
export default ServerComponent;
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
</Tab>
|
|
871
|
+
<Tab label="next-intl" value="next-intl">
|
|
872
|
+
|
|
873
|
+
```tsx fileName="src/components/ServerComponent.tsx"
|
|
874
|
+
type ServerComponentProps = {
|
|
875
|
+
t: (key: string) => string;
|
|
876
|
+
locale: string;
|
|
877
|
+
count: number;
|
|
878
|
+
formatter: Intl.NumberFormat;
|
|
879
|
+
};
|
|
880
|
+
|
|
881
|
+
const ServerComponent = ({
|
|
882
|
+
t,
|
|
883
|
+
locale,
|
|
884
|
+
count,
|
|
885
|
+
formatter,
|
|
886
|
+
}: ServerComponentProps) => {
|
|
887
|
+
const formatted = formatter.format(count);
|
|
888
|
+
|
|
889
|
+
return (
|
|
890
|
+
<div>
|
|
891
|
+
<p>{formatted}</p>
|
|
892
|
+
<button aria-label={t("counter.label")}>{t("counter.increment")}</button>
|
|
893
|
+
</div>
|
|
894
|
+
);
|
|
895
|
+
};
|
|
896
|
+
|
|
897
|
+
export default ServerComponent;
|
|
898
|
+
```
|
|
899
|
+
|
|
900
|
+
> Sunucu bileşeni asenkron olamayacağından, çeviriler ve biçimlendirici işlevini prop olarak iletmeniz gerekir.
|
|
901
|
+
>
|
|
902
|
+
> Sayfa / yerleşimde:
|
|
903
|
+
>
|
|
904
|
+
> - `import { getTranslations, getFormatter } from "next-intl/server";`
|
|
905
|
+
> - `const t = await getTranslations("about.counter");`
|
|
906
|
+
> - `const formatter = await getFormatter().then((formatter) => formatter.number());`
|
|
907
|
+
|
|
908
|
+
</Tab>
|
|
909
|
+
<Tab label="intlayer" value="intlayer">
|
|
910
|
+
|
|
911
|
+
```tsx fileName="src/components/ServerComponent.tsx"
|
|
912
|
+
import { useIntlayer, useNumber } from "next-intlayer/server";
|
|
913
|
+
|
|
914
|
+
type ServerComponentProps = {
|
|
915
|
+
count: number;
|
|
916
|
+
};
|
|
917
|
+
|
|
918
|
+
const ServerComponent = ({ count }: ServerComponentProps) => {
|
|
919
|
+
const { label, increment } = useIntlayer("counter");
|
|
920
|
+
const { number } = useNumber();
|
|
921
|
+
|
|
922
|
+
return (
|
|
923
|
+
<div>
|
|
924
|
+
<p>{number(count)}</p>
|
|
925
|
+
<button aria-label={label}>{increment}</button>
|
|
926
|
+
</div>
|
|
927
|
+
);
|
|
928
|
+
};
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
</Tab>
|
|
932
|
+
</Tabs>
|
|
933
|
+
|
|
934
|
+
> Intlayer, `next-intlayer/server` aracılığıyla **sunucu açısından güvenli** kancaları ortaya koymaktadır. Çalışması için `useIntlayer` ve `useNumber`, istemci kancaları gibi benzer kanca benzeri söz dizimine sahiptir, ancak altyapıda sunucu bağlamına (`IntlayerServerProvider`) bağlıdır.
|
|
935
|
+
|
|
936
|
+
### Metadata / Sitemap / Robots
|
|
937
|
+
|
|
938
|
+
İçerik çevirisi harika. Ama insanlar genellikle uluslararasılaştırmanın ana hedefinin web sitenizi dünyaya daha görünür hale getirmek olduğunu unuturlar. I18n, web sitenizin görünürlüğünü iyileştirmek için inanılmaz bir kaldıraçtır.
|
|
939
|
+
|
|
940
|
+
İşte çok dilli SEO ile ilgili iyi uygulamaların bir listesi.
|
|
941
|
+
|
|
942
|
+
- `<head>` etiketinde hreflang meta etiketlerini ayarlayın
|
|
943
|
+
> Arama motorlarının sayfada hangi dillerin mevcut olduğunu anlamasına yardımcı olur
|
|
944
|
+
- sitemap.xml içinde `http://www.w3.org/1999/xhtml` XML şemasını kullanarak tüm sayfa çevirilerini listeleyin
|
|
945
|
+
>
|
|
946
|
+
- robots.txt içindeki ön ekli sayfaları hariç tutmayı unutmayın (örneğin `/dashboard`, `/fr/dashboard`, `/es/dashboard`)
|
|
947
|
+
>
|
|
948
|
+
- en yerelleştirilmiş sayfaya yönlendirmek için özel bir Link bileşeni kullanın (örneğin Fransızca `<a href="/fr/about">A propos</a>`)
|
|
949
|
+
>
|
|
950
|
+
|
|
951
|
+
Geliştiriciler genellikle sayfalarını yerel ayarlar arasında düzgün şekilde referans vermeyi unuturlar.
|
|
952
|
+
|
|
953
|
+
<Tabs defaultTab="next-intl" group='techno'>
|
|
954
|
+
|
|
955
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
956
|
+
|
|
957
|
+
```ts fileName="i18n.config.ts"
|
|
958
|
+
export const locales = ["en", "fr"] as const;
|
|
959
|
+
export type Locale = (typeof locales)[number];
|
|
960
|
+
export const defaultLocale: Locale = "en";
|
|
961
|
+
|
|
962
|
+
export function localizedPath(locale: string, path: string) {
|
|
963
|
+
return locale === defaultLocale ? path : "/" + locale + path;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
const ORIGIN = "https://example.com";
|
|
967
|
+
export function abs(locale: string, path: string) {
|
|
968
|
+
return ORIGIN + localizedPath(locale, path);
|
|
969
|
+
}
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
```tsx fileName="src/app/[locale]/about/layout.tsx"
|
|
973
|
+
import type { Metadata } from "next";
|
|
974
|
+
import { locales, defaultLocale, localizedPath } from "@/i18n.config";
|
|
975
|
+
|
|
976
|
+
type GenerateMetadataParams = {
|
|
977
|
+
params: Promise<{
|
|
978
|
+
locale: string;
|
|
979
|
+
}>;
|
|
980
|
+
};
|
|
981
|
+
|
|
982
|
+
export const generateMetadata = async ({
|
|
983
|
+
params,
|
|
984
|
+
}: GenerateMetadataParams): Promise<Metadata> => {
|
|
985
|
+
const { locale } = await params;
|
|
986
|
+
|
|
987
|
+
// src/locales içinden doğru JSON paketini içeri aktar
|
|
988
|
+
const messages = (await import("@/locales/" + locale + "/about.json"))
|
|
989
|
+
.default;
|
|
990
|
+
|
|
991
|
+
const languages = Object.fromEntries(
|
|
992
|
+
locales.map((locale) => [locale, localizedPath(locale, "/about")])
|
|
993
|
+
);
|
|
994
|
+
|
|
995
|
+
return {
|
|
996
|
+
title: messages.title,
|
|
997
|
+
description: messages.description,
|
|
998
|
+
alternates: {
|
|
999
|
+
canonical: localizedPath(locale, "/about"),
|
|
1000
|
+
languages: { ...languages, "x-default": "/about" },
|
|
1001
|
+
},
|
|
1002
|
+
};
|
|
1003
|
+
};
|
|
1004
|
+
|
|
1005
|
+
export default async function AboutPage() {
|
|
1006
|
+
return <h1>About</h1>;
|
|
1007
|
+
}
|
|
1008
|
+
```
|
|
1009
|
+
|
|
1010
|
+
```ts fileName="src/app/sitemap.ts"
|
|
1011
|
+
import type { MetadataRoute } from "next";
|
|
1012
|
+
import { locales, defaultLocale, abs } from "@/i18n.config";
|
|
1013
|
+
|
|
1014
|
+
export const sitemap = (): MetadataRoute.Sitemap => {
|
|
1015
|
+
const languages = Object.fromEntries(
|
|
1016
|
+
locales.map((locale) => [locale, abs(locale, "/about")])
|
|
1017
|
+
);
|
|
1018
|
+
return [
|
|
1019
|
+
{
|
|
1020
|
+
url: abs(defaultLocale, "/about"),
|
|
1021
|
+
lastModified: new Date(),
|
|
1022
|
+
changeFrequency: "monthly",
|
|
1023
|
+
priority: 0.7,
|
|
1024
|
+
alternates: { languages },
|
|
1025
|
+
},
|
|
1026
|
+
];
|
|
1027
|
+
};
|
|
1028
|
+
```
|
|
1029
|
+
|
|
1030
|
+
```ts fileName="src/app/robots.ts"
|
|
1031
|
+
import type { MetadataRoute } from "next";
|
|
1032
|
+
import { locales, defaultLocale, localizedPath } from "@/i18n.config";
|
|
1033
|
+
|
|
1034
|
+
const ORIGIN = "https://example.com";
|
|
1035
|
+
|
|
1036
|
+
const expandAllLocales = (path: string) => [
|
|
1037
|
+
localizedPath(defaultLocale, path),
|
|
1038
|
+
...locales
|
|
1039
|
+
.filter((locale) => locale !== defaultLocale)
|
|
1040
|
+
.map((locale) => localizedPath(locale, path)),
|
|
1041
|
+
];
|
|
1042
|
+
|
|
1043
|
+
export const robots = (): MetadataRoute.Robots => {
|
|
1044
|
+
const disallow = [
|
|
1045
|
+
...expandAllLocales("/dashboard"),
|
|
1046
|
+
...expandAllLocales("/admin"),
|
|
1047
|
+
];
|
|
1048
|
+
|
|
1049
|
+
return {
|
|
1050
|
+
rules: { userAgent: "*", allow: ["/"], disallow },
|
|
1051
|
+
host: ORIGIN,
|
|
1052
|
+
sitemap: ORIGIN + "/sitemap.xml",
|
|
1053
|
+
};
|
|
1054
|
+
};
|
|
1055
|
+
```
|
|
1056
|
+
|
|
1057
|
+
</Tab>
|
|
1058
|
+
<Tab label="next-intl" value="next-intl">
|
|
1059
|
+
|
|
1060
|
+
```tsx fileName="src/app/[locale]/about/layout.tsx"
|
|
1061
|
+
import type { Metadata } from "next";
|
|
1062
|
+
import { locales, defaultLocale } from "@/i18n";
|
|
1063
|
+
import { getTranslations } from "next-intl/server";
|
|
1064
|
+
|
|
1065
|
+
const localizedPath = (locale: string, path: string) => {
|
|
1066
|
+
return locale === defaultLocale ? path : "/" + locale + path;
|
|
1067
|
+
};
|
|
1068
|
+
|
|
1069
|
+
type GenerateMetadataParams = {
|
|
1070
|
+
params: Promise<{
|
|
1071
|
+
locale: string;
|
|
1072
|
+
}>;
|
|
1073
|
+
};
|
|
1074
|
+
|
|
1075
|
+
export const generateMetadata = async ({
|
|
1076
|
+
params,
|
|
1077
|
+
}: GenerateMetadataParams): Promise<Metadata> => {
|
|
1078
|
+
const { locale } = await params;
|
|
1079
|
+
const t = await getTranslations({ locale, namespace: "about" });
|
|
1080
|
+
|
|
1081
|
+
const url = "/about";
|
|
1082
|
+
const languages = Object.fromEntries(
|
|
1083
|
+
locales.map((locale) => [locale, localizedPath(locale, url)])
|
|
1084
|
+
);
|
|
1085
|
+
|
|
1086
|
+
return {
|
|
1087
|
+
title: t("title"),
|
|
1088
|
+
description: t("description"),
|
|
1089
|
+
alternates: {
|
|
1090
|
+
canonical: localizedPath(locale, url),
|
|
1091
|
+
languages: { ...languages, "x-default": url },
|
|
1092
|
+
},
|
|
1093
|
+
};
|
|
1094
|
+
};
|
|
1095
|
+
|
|
1096
|
+
// ... Sayfanın geri kalanının kodu
|
|
1097
|
+
```
|
|
1098
|
+
|
|
1099
|
+
```tsx fileName="src/app/sitemap.ts"
|
|
1100
|
+
import type { MetadataRoute } from "next";
|
|
1101
|
+
import { locales, defaultLocale } from "@/i18n";
|
|
1102
|
+
|
|
1103
|
+
const origin = "https://example.com";
|
|
1104
|
+
|
|
1105
|
+
const formatterLocalizedPath = (locale: string, path: string) =>
|
|
1106
|
+
locale === defaultLocale ? origin + path : origin + "/" + locale + path;
|
|
1107
|
+
|
|
1108
|
+
export const sitemap = (): MetadataRoute.Sitemap => {
|
|
1109
|
+
const aboutLanguages = Object.fromEntries(
|
|
1110
|
+
locales.map((l) => [l, formatterLocalizedPath(l, "/about")])
|
|
1111
|
+
);
|
|
1112
|
+
|
|
1113
|
+
return [
|
|
1114
|
+
{
|
|
1115
|
+
url: formatterLocalizedPath(defaultLocale, "/about"),
|
|
1116
|
+
lastModified: new Date(),
|
|
1117
|
+
changeFrequency: "monthly",
|
|
1118
|
+
priority: 0.7,
|
|
1119
|
+
alternates: { languages: aboutLanguages },
|
|
1120
|
+
},
|
|
1121
|
+
];
|
|
1122
|
+
};
|
|
1123
|
+
```
|
|
1124
|
+
|
|
1125
|
+
```tsx fileName="src/app/robots.ts"
|
|
1126
|
+
import type { MetadataRoute } from "next";
|
|
1127
|
+
import { locales, defaultLocale } from "@/i18n";
|
|
1128
|
+
|
|
1129
|
+
const origin = "https://example.com";
|
|
1130
|
+
const withAllLocales = (path: string) => [
|
|
1131
|
+
path,
|
|
1132
|
+
...locales
|
|
1133
|
+
.filter((locale) => locale !== defaultLocale)
|
|
1134
|
+
.map((locale) => "/" + locale + path),
|
|
1135
|
+
];
|
|
1136
|
+
|
|
1137
|
+
export const robots = (): MetadataRoute.Robots => {
|
|
1138
|
+
const disallow = [
|
|
1139
|
+
...withAllLocales("/dashboard"),
|
|
1140
|
+
...withAllLocales("/admin"),
|
|
1141
|
+
];
|
|
1142
|
+
|
|
1143
|
+
return {
|
|
1144
|
+
rules: { userAgent: "*", allow: ["/"], disallow },
|
|
1145
|
+
host: origin,
|
|
1146
|
+
sitemap: origin + "/sitemap.xml",
|
|
1147
|
+
};
|
|
1148
|
+
};
|
|
1149
|
+
```
|
|
1150
|
+
|
|
1151
|
+
</Tab>
|
|
1152
|
+
<Tab label="intlayer" value="intlayer">
|
|
1153
|
+
|
|
1154
|
+
```typescript fileName="src/app/[locale]/about/layout.tsx"
|
|
1155
|
+
import { getIntlayer, getMultilingualUrls } from "intlayer";
|
|
1156
|
+
import type { Metadata } from "next";
|
|
1157
|
+
import type { LocalPromiseParams } from "next-intlayer";
|
|
1158
|
+
|
|
1159
|
+
export const generateMetadata = async ({
|
|
1160
|
+
params,
|
|
1161
|
+
}: LocalPromiseParams): Promise<Metadata> => {
|
|
1162
|
+
const { locale } = await params;
|
|
1163
|
+
|
|
1164
|
+
const metadata = getIntlayer("page-metadata", locale);
|
|
1165
|
+
|
|
1166
|
+
const multilingualUrls = getMultilingualUrls("/about");
|
|
1167
|
+
|
|
1168
|
+
return {
|
|
1169
|
+
...metadata,
|
|
1170
|
+
alternates: {
|
|
1171
|
+
canonical: multilingualUrls[locale as keyof typeof multilingualUrls],
|
|
1172
|
+
languages: { ...multilingualUrls, "x-default": "/about" },
|
|
1173
|
+
},
|
|
1174
|
+
};
|
|
1175
|
+
};
|
|
1176
|
+
|
|
1177
|
+
// ... Sayfanın geri kalanının kodu
|
|
1178
|
+
```
|
|
1179
|
+
|
|
1180
|
+
```tsx fileName="src/app/sitemap.ts"
|
|
1181
|
+
import { getMultilingualUrls } from "intlayer";
|
|
1182
|
+
import type { MetadataRoute } from "next";
|
|
1183
|
+
|
|
1184
|
+
const sitemap = (): MetadataRoute.Sitemap => [
|
|
1185
|
+
{
|
|
1186
|
+
url: "https://example.com/about",
|
|
1187
|
+
alternates: {
|
|
1188
|
+
languages: { ...getMultilingualUrls("https://example.com/about") },
|
|
1189
|
+
},
|
|
1190
|
+
},
|
|
1191
|
+
];
|
|
1192
|
+
```
|
|
1193
|
+
|
|
1194
|
+
```tsx fileName="src/app/robots.ts"
|
|
1195
|
+
import { getMultilingualUrls } from "intlayer";
|
|
1196
|
+
import type { MetadataRoute } from "next";
|
|
1197
|
+
|
|
1198
|
+
const getAllMultilingualUrls = (urls: string[]) =>
|
|
1199
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);
|
|
1200
|
+
|
|
1201
|
+
const robots = (): MetadataRoute.Robots => ({
|
|
1202
|
+
rules: {
|
|
1203
|
+
userAgent: "*",
|
|
1204
|
+
allow: ["/"],
|
|
1205
|
+
disallow: getAllMultilingualUrls(["/dashboard"]),
|
|
1206
|
+
},
|
|
1207
|
+
host: "https://example.com",
|
|
1208
|
+
sitemap: "https://example.com/sitemap.xml",
|
|
1209
|
+
});
|
|
1210
|
+
|
|
1211
|
+
export default robots;
|
|
1212
|
+
```
|
|
1213
|
+
|
|
1214
|
+
</Tab>
|
|
1215
|
+
</Tabs>
|
|
1216
|
+
|
|
1217
|
+
> Intlayer, sitemap'iniz için çok dilli URL'ler oluşturmak için bir `getMultilingualUrls` işlevi sağlar.
|
|
1218
|
+
|
|
1219
|
+
### Yerel ayar yönlendirmesi için Middleware
|
|
1220
|
+
|
|
1221
|
+
<Tabs defaultTab="next-intl" group='techno'>
|
|
1222
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
1223
|
+
|
|
1224
|
+
Yerel ayar algılaması ve yönlendirmesini işlemek için bir middleware ekleyin:
|
|
1225
|
+
|
|
1226
|
+
```ts fileName="src/middleware.ts"
|
|
1227
|
+
import { NextResponse, type NextRequest } from "next/server";
|
|
1228
|
+
import { defaultLocale, locales } from "@/i18n.config";
|
|
1229
|
+
|
|
1230
|
+
const PUBLIC_FILE = /\.[^/]+$/; // dosya uzantılarını hariç tut
|
|
1231
|
+
|
|
1232
|
+
export function middleware(request: NextRequest) {
|
|
1233
|
+
const { pathname } = request.nextUrl;
|
|
1234
|
+
|
|
1235
|
+
if (
|
|
1236
|
+
pathname.startsWith("/_next") ||
|
|
1237
|
+
pathname.startsWith("/api") ||
|
|
1238
|
+
pathname.startsWith("/static") ||
|
|
1239
|
+
PUBLIC_FILE.test(pathname)
|
|
1240
|
+
) {
|
|
1241
|
+
return;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
const hasLocale = locales.some(
|
|
1245
|
+
(l) => pathname === "/" + l || pathname.startsWith("/" + l + "/")
|
|
1246
|
+
);
|
|
1247
|
+
if (!hasLocale) {
|
|
1248
|
+
const locale = defaultLocale;
|
|
1249
|
+
const url = request.nextUrl.clone();
|
|
1250
|
+
url.pathname = "/" + locale + (pathname === "/" ? "" : pathname);
|
|
1251
|
+
return NextResponse.redirect(url);
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
export const config = {
|
|
1256
|
+
matcher: [
|
|
1257
|
+
// Bu yollarla başlayan ve dosya uzantısı olan yolları hariç tut
|
|
1258
|
+
"/((?!api|_next|static|.*\\..*).*)",
|
|
1259
|
+
],
|
|
1260
|
+
};
|
|
1261
|
+
```
|
|
1262
|
+
|
|
1263
|
+
</Tab>
|
|
1264
|
+
<Tab label="next-intl" value="next-intl">
|
|
1265
|
+
|
|
1266
|
+
Yerel ayar algılaması ve yönlendirmesini işlemek için bir middleware ekleyin:
|
|
1267
|
+
|
|
1268
|
+
```ts fileName="src/middleware.ts"
|
|
1269
|
+
import createMiddleware from "next-intl/middleware";
|
|
1270
|
+
import { locales, defaultLocale } from "@/i18n";
|
|
1271
|
+
|
|
1272
|
+
export default createMiddleware({
|
|
1273
|
+
locales: [...locales],
|
|
1274
|
+
defaultLocale,
|
|
1275
|
+
localeDetection: true,
|
|
1276
|
+
});
|
|
1277
|
+
|
|
1278
|
+
export const config = {
|
|
1279
|
+
// API, Next iç bileşenleri ve statik varlıkları atla
|
|
1280
|
+
matcher: ["/((?!api|_next|.*\\..*).*)"],
|
|
1281
|
+
};
|
|
1282
|
+
```
|
|
1283
|
+
|
|
1284
|
+
</Tab>
|
|
1285
|
+
<Tab label="intlayer" value="intlayer">
|
|
1286
|
+
|
|
1287
|
+
Intlayer, `next-intlayer` paket yapılandırması aracılığıyla yerleşik middleware işleme sağlar.
|
|
1288
|
+
|
|
1289
|
+
```ts fileName="src/middleware.ts"
|
|
1290
|
+
import { intlayerProxy } from "next-intlayer/proxy";
|
|
1291
|
+
|
|
1292
|
+
export const middleware = intlayerProxy();
|
|
1293
|
+
|
|
1294
|
+
// bu middleware'i yalnızca app dizinindeki dosyalara uygula
|
|
1295
|
+
export const config = {
|
|
1296
|
+
matcher: "/((?!api|_next|static|.*\\..*).*)",
|
|
1297
|
+
};
|
|
1298
|
+
```
|
|
1299
|
+
|
|
1300
|
+
Middleware'in kurulumu `intlayer.config.ts` dosyasında merkezileştirilmiştir.
|
|
1301
|
+
|
|
1302
|
+
</Tab>
|
|
1303
|
+
</Tabs>
|
|
1304
|
+
|
|
150
1305
|
## `next-intl` ve `next-i18next` ile birlikte çalışabilirlik
|
|
151
1306
|
|
|
152
1307
|
`intlayer`, `next-intl` ve `next-i18next` ad alanlarınızı yönetmenize de yardımcı olabilir.
|
|
@@ -155,6 +1310,40 @@ Bu rehber, **Next.js** için yaygın olarak kullanılan üç i18n seçeneğini k
|
|
|
155
1310
|
|
|
156
1311
|
---
|
|
157
1312
|
|
|
1313
|
+
## Ve kazanan…
|
|
1314
|
+
|
|
1315
|
+
Basit değil. Her seçeneğin avantaj ve dezavantajları var. İşte benim görüşüm:
|
|
1316
|
+
|
|
1317
|
+
<Columns>
|
|
1318
|
+
<Column>
|
|
1319
|
+
|
|
1320
|
+
**next-i18next**
|
|
1321
|
+
|
|
1322
|
+
- olgun, özellikleri bol, çok sayıda topluluk eklentisi, ancak daha yüksek kurulum maliyeti. **i18next'in eklenti ekosistemini** (örneğin, eklentiler aracılığıyla gelişmiş ICU kuralları) ihtiyacınız varsa ve ekibiniz zaten i18next'i biliyorsa, esneklik için **daha fazla yapılandırmayı** kabul edin.
|
|
1323
|
+
|
|
1324
|
+
</Column>
|
|
1325
|
+
<Column>
|
|
1326
|
+
|
|
1327
|
+
**next-intl**
|
|
1328
|
+
|
|
1329
|
+
- en basit, hafif, size dayatılan daha az karar. **Minimal** bir çözüm istiyorsanız, merkezi kataloglar ile rahat iseniz ve uygulamanız **küçükten orta ölçeğe** ise.
|
|
1330
|
+
|
|
1331
|
+
</Column>
|
|
1332
|
+
<Column>
|
|
1333
|
+
|
|
1334
|
+
**Intlayer**
|
|
1335
|
+
|
|
1336
|
+
- modern Next.js için oluşturulmuş, modüler içerik, tip güvenliği, araçlar ve daha az boilerplate ile. **Bileşen kapsamlı içerik**, **kesin TypeScript**, **derleme zamanı garantileri**, **tree-shaking** ve **pil dahil** yönlendirme/SEO/editör araçlarını değer veriyorsanız - özellikle **Next.js App Router**, tasarım sistemleri ve **büyük, modüler kod tabanları** için.
|
|
1337
|
+
|
|
1338
|
+
</Column>
|
|
1339
|
+
</Columns>
|
|
1340
|
+
|
|
1341
|
+
Minimal kurulumu tercih ederseniz ve bazı manuel bağlantıları kabul ederseniz, next-intl iyi bir seçimdir. Tüm özelliklere ihtiyacınız varsa ve karmaşıklığa aldırmıyorsanız, next-i18next işe yarar. Ancak modern, ölçeklenebilir, modüler bir çözüm istiyorsanız ve dahili araçlarla, Intlayer bunu size kutusundan çıkar halde sağlamayı amaçlar.
|
|
1342
|
+
|
|
1343
|
+
> **Kurumsal ekipler için alternatif**: **Crowdin**, **Phrase** veya diğer profesyonel çeviri yönetim sistemleri gibi yerleşik yerelleştirme platformları ile mükemmel çalışan, kanıtlanmış bir çözüme ihtiyacınız varsa, olgun ekosistem ve kanıtlanmış entegrasyonları için **next-intl** veya **next-i18next** göz önünde bulundurun.
|
|
1344
|
+
|
|
1345
|
+
> **Gelecek yol haritası**: Intlayer ayrıca **i18next** ve **next-intl** çözümleri üzerinde çalışan eklentileri geliştirmeyi planlıyor. Bu, uygulamanızın kodunda bu yerleşik çözümler tarafından sağlanan güvenlik ve kararlılığı korurken, Intlayer'ın otomasyon, sözdizimi ve içerik yönetimi avantajlarını size verecektir.
|
|
1346
|
+
|
|
158
1347
|
## GitHub YILDIZLARI
|
|
159
1348
|
|
|
160
1349
|
GitHub yıldızları, bir projenin popülaritesinin, topluluk güveninin ve uzun vadeli öneminin güçlü bir göstergesidir. Teknik kalitenin doğrudan bir ölçüsü olmasa da, kaç geliştiricinin projeyi yararlı bulduğunu, ilerlemesini takip ettiğini ve muhtemelen benimsediğini yansıtır. Bir projenin değerini tahmin etmek için yıldızlar, alternatifler arasındaki çekişmeyi karşılaştırmaya ve ekosistem büyümesine ilişkin içgörüler sağlamaya yardımcı olur.
|