@intlayer/docs 7.0.6 → 7.0.8-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/i18n_using_next-i18next.md +1068 -0
- package/blog/ar/i18n_using_next-intl.md +768 -0
- package/blog/ar/intlayer_with_react-intl.md +0 -4
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +5 -4
- package/blog/de/i18n_using_next-i18next.md +1107 -0
- package/blog/de/i18n_using_next-intl.md +760 -0
- package/blog/de/intlayer_with_react-intl.md +0 -4
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/en/i18n_using_next-i18next.md +1073 -0
- package/blog/en/i18n_using_next-intl.md +757 -0
- package/blog/en/intlayer_with_i18next.md +71 -8
- package/blog/en/intlayer_with_next-i18next.md +71 -8
- package/blog/en/intlayer_with_next-intl.md +71 -8
- package/blog/en/intlayer_with_react-i18next.md +69 -8
- package/blog/en/intlayer_with_react-intl.md +68 -9
- package/blog/en/intlayer_with_vue-i18n.md +68 -7
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/blog/en/vue-i18n_vs_intlayer.md +2 -0
- package/blog/en-GB/i18n_using_next-i18next.md +1074 -0
- package/blog/en-GB/i18n_using_next-intl.md +757 -0
- package/blog/en-GB/intlayer_with_i18next.md +15 -6
- package/blog/en-GB/intlayer_with_next-i18next.md +16 -6
- package/blog/en-GB/intlayer_with_next-intl.md +16 -6
- package/blog/en-GB/intlayer_with_react-i18next.md +16 -7
- package/blog/en-GB/intlayer_with_react-intl.md +14 -9
- package/blog/en-GB/intlayer_with_vue-i18n.md +16 -7
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/blog/en-GB/vue-i18n_vs_intlayer.md +2 -0
- package/blog/es/i18n_using_next-i18next.md +1066 -0
- package/blog/es/i18n_using_next-intl.md +757 -0
- package/blog/es/intlayer_with_react-intl.md +0 -4
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/fr/i18n_using_next-i18next.md +1078 -0
- package/blog/fr/i18n_using_next-intl.md +759 -0
- package/blog/fr/intlayer_with_react-intl.md +0 -4
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/hi/i18n_using_next-i18next.md +1068 -0
- package/blog/hi/i18n_using_next-intl.md +758 -0
- package/blog/hi/intlayer_with_react-intl.md +0 -4
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/id/i18n_using_next-i18next.md +1078 -0
- package/blog/id/i18n_using_next-intl.md +757 -0
- package/blog/id/index.md +69 -0
- package/blog/id/internationalization_and_SEO.md +364 -0
- package/blog/id/intlayer_with_react-intl.md +0 -4
- package/blog/id/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/id/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/id/list_i18n_technologies/CMS/wordpress.md +188 -0
- package/blog/id/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/id/list_i18n_technologies/frameworks/flutter.md +150 -0
- package/blog/id/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/id/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/id/list_i18n_technologies/frameworks/svelte.md +131 -0
- package/blog/id/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1500 -0
- package/blog/id/nextjs-multilingual-seo-comparison.md +361 -0
- package/blog/id/rag_powered_documentation_assistant.md +288 -0
- package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/id/vue-i18n_vs_intlayer.md +278 -0
- package/blog/id/what_is_internationalization.md +166 -0
- package/blog/it/i18n_using_next-i18next.md +1078 -0
- package/blog/it/i18n_using_next-intl.md +758 -0
- package/blog/it/intlayer_with_react-intl.md +0 -4
- package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +4 -0
- package/blog/it/vue-i18n_vs_intlayer.md +2 -0
- package/blog/ja/i18n_using_next-i18next.md +1078 -0
- package/blog/ja/i18n_using_next-intl.md +758 -0
- package/blog/ja/intlayer_with_react-intl.md +0 -4
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/ko/i18n_using_next-i18next.md +1075 -0
- package/blog/ko/i18n_using_next-intl.md +759 -0
- package/blog/ko/intlayer_with_react-intl.md +0 -4
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/pl/i18n_using_next-i18next.md +1078 -0
- package/blog/pl/i18n_using_next-intl.md +758 -0
- package/blog/pl/index.md +69 -0
- package/blog/pl/internationalization_and_SEO.md +363 -0
- package/blog/pl/intlayer_with_react-intl.md +0 -4
- package/blog/pl/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/pl/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/pl/list_i18n_technologies/CMS/wordpress.md +196 -0
- package/blog/pl/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/pl/list_i18n_technologies/frameworks/flutter.md +151 -0
- package/blog/pl/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/pl/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/pl/list_i18n_technologies/frameworks/svelte.md +131 -0
- package/blog/pl/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1501 -0
- package/blog/pl/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/pl/rag_powered_documentation_assistant.md +288 -0
- package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/pl/vue-i18n_vs_intlayer.md +278 -0
- package/blog/pl/what_is_internationalization.md +167 -0
- package/blog/pt/i18n_using_next-i18next.md +1067 -0
- package/blog/pt/i18n_using_next-intl.md +760 -0
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/ru/i18n_using_next-i18next.md +1106 -0
- package/blog/ru/i18n_using_next-intl.md +759 -0
- package/blog/ru/intlayer_with_react-intl.md +0 -4
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/tr/i18n_using_next-i18next.md +1078 -0
- package/blog/tr/i18n_using_next-intl.md +760 -0
- package/blog/tr/intlayer_with_react-intl.md +0 -4
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/blog/tr/vue-i18n_vs_intlayer.md +2 -0
- package/blog/vi/i18n_using_next-i18next.md +1080 -0
- package/blog/vi/i18n_using_next-intl.md +758 -0
- package/blog/vi/index.md +69 -0
- package/blog/vi/internationalization_and_SEO.md +363 -0
- package/blog/vi/intlayer_with_react-intl.md +0 -4
- package/blog/vi/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/vi/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/vi/list_i18n_technologies/CMS/wordpress.md +188 -0
- package/blog/vi/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/vi/list_i18n_technologies/frameworks/flutter.md +150 -0
- package/blog/vi/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/vi/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/vi/list_i18n_technologies/frameworks/svelte.md +131 -0
- package/blog/vi/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1520 -0
- package/blog/vi/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/vi/rag_powered_documentation_assistant.md +288 -0
- package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/vi/vue-i18n_vs_intlayer.md +278 -0
- package/blog/vi/what_is_internationalization.md +168 -0
- package/blog/zh/i18n_using_next-i18next.md +1105 -0
- package/blog/zh/i18n_using_next-intl.md +758 -0
- package/blog/zh/intlayer_with_react-intl.md +0 -4
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/dist/cjs/common.cjs +0 -4
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +38 -6
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +0 -6
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +0 -6
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +0 -6
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +38 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +2 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/docs/ar/component_i18n.md +1 -1
- package/docs/ar/configuration.md +6 -0
- package/docs/ar/intlayer_cli.md +8 -3
- package/docs/ar/intlayer_with_next-i18next.md +619 -0
- package/docs/ar/intlayer_with_next-intl.md +446 -0
- package/docs/ar/intlayer_with_nextjs_16.md +21 -0
- package/docs/ar/intlayer_with_tanstack.md +4 -0
- package/docs/ar/intlayer_with_vite+react.md +4 -0
- package/docs/de/component_i18n.md +1 -1
- package/docs/de/configuration.md +6 -0
- package/docs/de/intlayer_cli.md +8 -3
- package/docs/de/intlayer_with_next-i18next.md +627 -0
- package/docs/de/intlayer_with_next-intl.md +451 -0
- package/docs/de/intlayer_with_nextjs_16.md +21 -0
- package/docs/de/intlayer_with_tanstack.md +4 -0
- package/docs/de/intlayer_with_vite+react.md +4 -0
- package/docs/en/component_i18n.md +1 -1
- package/docs/en/intlayer_cli.md +8 -1
- package/docs/en/intlayer_with_astro.md +10 -2
- package/docs/en/intlayer_with_create_react_app.md +8 -0
- package/docs/en/intlayer_with_lynx+react.md +8 -0
- package/docs/en/intlayer_with_nestjs.md +10 -0
- package/docs/en/intlayer_with_nextjs_14.md +10 -2
- package/docs/en/intlayer_with_nextjs_15.md +21 -4
- package/docs/en/intlayer_with_nextjs_16.md +17 -0
- package/docs/en/intlayer_with_nuxt.md +8 -0
- package/docs/en/intlayer_with_react_native+expo.md +10 -2
- package/docs/en/intlayer_with_react_router_v7.md +8 -0
- package/docs/en/intlayer_with_tanstack.md +10 -0
- package/docs/en/intlayer_with_vite+preact.md +10 -2
- package/docs/en/intlayer_with_vite+react.md +21 -4
- package/docs/en/intlayer_with_vite+vue.md +10 -2
- package/docs/en-GB/component_i18n.md +1 -1
- package/docs/en-GB/configuration.md +6 -0
- package/docs/en-GB/intlayer_cli.md +8 -3
- package/docs/en-GB/intlayer_with_angular.md +4 -4
- package/docs/en-GB/intlayer_with_express.md +4 -4
- package/docs/en-GB/intlayer_with_lynx+react.md +12 -12
- package/{blog/en/_intlayer_with_next-i18next.md → docs/en-GB/intlayer_with_next-i18next.md} +241 -42
- package/{blog/en/_intlayer_with_next-intl.md → docs/en-GB/intlayer_with_next-intl.md} +144 -29
- package/docs/en-GB/intlayer_with_nextjs_16.md +21 -0
- package/docs/en-GB/intlayer_with_tanstack.md +5 -1
- package/docs/en-GB/intlayer_with_vite+react.md +4 -0
- package/docs/en-GB/packages/next-intlayer/t.md +2 -2
- package/docs/es/component_i18n.md +1 -1
- package/docs/es/configuration.md +6 -0
- package/docs/es/intlayer_cli.md +8 -3
- package/docs/es/intlayer_with_next-i18next.md +628 -0
- package/docs/es/intlayer_with_next-intl.md +446 -0
- package/docs/es/intlayer_with_nextjs_16.md +21 -0
- package/docs/es/intlayer_with_tanstack.md +4 -0
- package/docs/es/intlayer_with_vite+react.md +4 -0
- package/docs/fr/configuration.md +6 -0
- package/docs/fr/intlayer_cli.md +8 -3
- package/docs/fr/intlayer_with_next-i18next.md +628 -0
- package/docs/fr/intlayer_with_next-intl.md +446 -0
- package/docs/fr/intlayer_with_nextjs_16.md +23 -2
- package/docs/fr/intlayer_with_tanstack.md +4 -0
- package/docs/fr/intlayer_with_vite+react.md +4 -0
- package/docs/hi/component_i18n.md +1 -1
- package/docs/hi/configuration.md +6 -0
- package/docs/hi/intlayer_cli.md +8 -0
- package/docs/hi/intlayer_with_next-i18next.md +628 -0
- package/docs/hi/intlayer_with_next-intl.md +446 -0
- package/docs/hi/intlayer_with_nextjs_16.md +21 -0
- package/docs/hi/intlayer_with_tanstack.md +4 -0
- package/docs/hi/intlayer_with_vite+react.md +4 -0
- package/docs/id/CI_CD.md +198 -0
- package/docs/id/autoFill.md +284 -0
- package/docs/id/component_i18n.md +186 -0
- package/docs/id/configuration.md +710 -0
- package/docs/id/dictionary/condition.md +231 -0
- package/docs/id/dictionary/content_file.md +1092 -0
- package/docs/id/dictionary/enumeration.md +245 -0
- package/docs/id/dictionary/file.md +237 -0
- package/docs/id/dictionary/function_fetching.md +214 -0
- package/docs/id/dictionary/gender.md +273 -0
- package/docs/id/dictionary/insertion.md +192 -0
- package/docs/id/dictionary/markdown.md +381 -0
- package/docs/id/dictionary/nesting.md +273 -0
- package/docs/id/dictionary/translation.md +310 -0
- package/docs/id/formatters.md +596 -0
- package/docs/id/how_works_intlayer.md +256 -0
- package/docs/id/index.md +176 -0
- package/docs/id/interest_of_intlayer.md +293 -0
- package/docs/id/intlayer_CMS.md +549 -0
- package/docs/id/intlayer_cli.md +850 -0
- package/docs/id/intlayer_visual_editor.md +288 -0
- package/docs/id/intlayer_with_angular.md +694 -0
- package/docs/id/intlayer_with_astro.md +252 -0
- package/docs/id/intlayer_with_create_react_app.md +1233 -0
- package/docs/id/intlayer_with_express.md +411 -0
- package/docs/id/intlayer_with_lynx+react.md +518 -0
- package/docs/id/intlayer_with_nestjs.md +272 -0
- package/docs/id/intlayer_with_next-i18next.md +628 -0
- package/docs/id/intlayer_with_next-intl.md +446 -0
- package/docs/id/intlayer_with_nextjs_14.md +1617 -0
- package/docs/id/intlayer_with_nextjs_15.md +1698 -0
- package/docs/id/intlayer_with_nextjs_16.md +21 -0
- package/docs/id/intlayer_with_nextjs_page_router.md +1478 -0
- package/docs/id/intlayer_with_nuxt.md +808 -0
- package/docs/id/intlayer_with_react_native+expo.md +699 -0
- package/docs/id/intlayer_with_react_router_v7.md +496 -0
- package/docs/id/intlayer_with_tanstack.md +564 -0
- package/docs/id/intlayer_with_vite+preact.md +1737 -0
- package/docs/id/intlayer_with_vite+react.md +1413 -0
- package/docs/id/intlayer_with_vite+solid.md +289 -0
- package/docs/id/intlayer_with_vite+svelte.md +289 -0
- package/docs/id/intlayer_with_vite+vue.md +1088 -0
- package/docs/id/introduction.md +218 -0
- package/docs/id/locale_mapper.md +242 -0
- package/docs/id/mcp_server.md +211 -0
- package/docs/id/packages/express-intlayer/t.md +458 -0
- package/docs/id/packages/intlayer/getConfiguration.md +145 -0
- package/docs/id/packages/intlayer/getEnumeration.md +159 -0
- package/docs/id/packages/intlayer/getHTMLTextDir.md +122 -0
- package/docs/id/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/id/packages/intlayer/getLocaleName.md +119 -0
- package/docs/id/packages/intlayer/getLocalizedUrl.md +309 -0
- package/docs/id/packages/intlayer/getMultilingualUrls.md +223 -0
- package/docs/id/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/id/packages/intlayer/getTranslation.md +190 -0
- package/docs/id/packages/intlayer/getTranslationContent.md +188 -0
- package/docs/id/packages/next-intlayer/t.md +352 -0
- package/docs/id/packages/next-intlayer/useDictionary.md +271 -0
- package/docs/id/packages/next-intlayer/useIntlayer.md +264 -0
- package/docs/id/packages/next-intlayer/useLocale.md +166 -0
- package/docs/id/packages/react-intlayer/t.md +303 -0
- package/docs/id/packages/react-intlayer/useDictionary.md +287 -0
- package/docs/id/packages/react-intlayer/useI18n.md +267 -0
- package/docs/id/packages/react-intlayer/useIntlayer.md +254 -0
- package/docs/id/packages/react-intlayer/useLocale.md +210 -0
- package/docs/id/per_locale_file.md +323 -0
- package/docs/id/readme.md +261 -0
- package/docs/id/releases/v6.md +305 -0
- package/docs/id/roadmap.md +362 -0
- package/docs/id/testing.md +202 -0
- package/docs/id/vs_code_extension.md +126 -0
- package/docs/it/component_i18n.md +1 -1
- package/docs/it/configuration.md +6 -0
- package/docs/it/intlayer_cli.md +8 -3
- package/docs/it/intlayer_with_next-i18next.md +628 -0
- package/docs/it/intlayer_with_next-intl.md +446 -0
- package/docs/it/intlayer_with_nextjs_16.md +21 -0
- package/docs/it/intlayer_with_tanstack.md +4 -0
- package/docs/it/intlayer_with_vite+react.md +4 -0
- package/docs/ja/component_i18n.md +1 -1
- package/docs/ja/configuration.md +6 -0
- package/docs/ja/intlayer_cli.md +8 -3
- package/docs/ja/intlayer_with_next-i18next.md +627 -0
- package/docs/ja/intlayer_with_next-intl.md +446 -0
- package/docs/ja/intlayer_with_nextjs_16.md +21 -0
- package/docs/ja/intlayer_with_tanstack.md +4 -0
- package/docs/ja/intlayer_with_vite+react.md +4 -0
- package/docs/ko/configuration.md +6 -0
- package/docs/ko/intlayer_cli.md +8 -3
- package/docs/ko/intlayer_with_next-i18next.md +627 -0
- package/docs/ko/intlayer_with_next-intl.md +446 -0
- package/docs/ko/intlayer_with_nextjs_16.md +21 -0
- package/docs/ko/intlayer_with_tanstack.md +4 -0
- package/docs/ko/intlayer_with_vite+react.md +4 -0
- package/docs/pl/CI_CD.md +198 -0
- package/docs/pl/autoFill.md +284 -0
- package/docs/pl/component_i18n.md +186 -0
- package/docs/pl/configuration.md +710 -0
- package/docs/pl/dictionary/condition.md +232 -0
- package/docs/pl/dictionary/content_file.md +1130 -0
- package/docs/pl/dictionary/enumeration.md +245 -0
- package/docs/pl/dictionary/file.md +234 -0
- package/docs/pl/dictionary/function_fetching.md +214 -0
- package/docs/pl/dictionary/gender.md +276 -0
- package/docs/pl/dictionary/insertion.md +188 -0
- package/docs/pl/dictionary/markdown.md +408 -0
- package/docs/pl/dictionary/nesting.md +273 -0
- package/docs/pl/dictionary/translation.md +310 -0
- package/docs/pl/formatters.md +596 -0
- package/docs/pl/how_works_intlayer.md +256 -0
- package/docs/pl/index.md +176 -0
- package/docs/pl/interest_of_intlayer.md +291 -0
- package/docs/pl/intlayer_CMS.md +549 -0
- package/docs/pl/intlayer_cli.md +857 -0
- package/docs/pl/intlayer_visual_editor.md +288 -0
- package/docs/pl/intlayer_with_angular.md +690 -0
- package/docs/pl/intlayer_with_astro.md +280 -0
- package/docs/pl/intlayer_with_create_react_app.md +1235 -0
- package/docs/pl/intlayer_with_express.md +411 -0
- package/docs/pl/intlayer_with_lynx+react.md +518 -0
- package/docs/pl/intlayer_with_nestjs.md +272 -0
- package/docs/pl/intlayer_with_next-i18next.md +628 -0
- package/docs/pl/intlayer_with_next-intl.md +446 -0
- package/docs/pl/intlayer_with_nextjs_14.md +1594 -0
- package/docs/pl/intlayer_with_nextjs_15.md +1701 -0
- package/docs/pl/intlayer_with_nextjs_16.md +21 -0
- package/docs/pl/intlayer_with_nextjs_page_router.md +1513 -0
- package/docs/pl/intlayer_with_nuxt.md +885 -0
- package/docs/pl/intlayer_with_react_native+expo.md +698 -0
- package/docs/pl/intlayer_with_react_router_v7.md +503 -0
- package/docs/pl/intlayer_with_tanstack.md +562 -0
- package/docs/pl/intlayer_with_vite+preact.md +1736 -0
- package/docs/pl/intlayer_with_vite+react.md +1438 -0
- package/docs/pl/intlayer_with_vite+solid.md +290 -0
- package/docs/pl/intlayer_with_vite+svelte.md +289 -0
- package/docs/pl/intlayer_with_vite+vue.md +1116 -0
- package/docs/pl/introduction.md +209 -0
- package/docs/pl/locale_mapper.md +242 -0
- package/docs/pl/mcp_server.md +211 -0
- package/docs/pl/packages/express-intlayer/t.md +458 -0
- package/docs/pl/packages/intlayer/getConfiguration.md +146 -0
- package/docs/pl/packages/intlayer/getEnumeration.md +160 -0
- package/docs/pl/packages/intlayer/getHTMLTextDir.md +121 -0
- package/docs/pl/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/pl/packages/intlayer/getLocaleName.md +118 -0
- package/docs/pl/packages/intlayer/getLocalizedUrl.md +300 -0
- package/docs/pl/packages/intlayer/getMultilingualUrls.md +221 -0
- package/docs/pl/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/pl/packages/intlayer/getTranslation.md +190 -0
- package/docs/pl/packages/intlayer/getTranslationContent.md +189 -0
- package/docs/pl/packages/next-intlayer/t.md +353 -0
- package/docs/pl/packages/next-intlayer/useDictionary.md +270 -0
- package/docs/pl/packages/next-intlayer/useIntlayer.md +263 -0
- package/docs/pl/packages/next-intlayer/useLocale.md +166 -0
- package/docs/pl/packages/react-intlayer/t.md +303 -0
- package/docs/pl/packages/react-intlayer/useDictionary.md +289 -0
- package/docs/pl/packages/react-intlayer/useI18n.md +249 -0
- package/docs/pl/packages/react-intlayer/useIntlayer.md +256 -0
- package/docs/pl/packages/react-intlayer/useLocale.md +210 -0
- package/docs/pl/per_locale_file.md +321 -0
- package/docs/pl/readme.md +261 -0
- package/docs/pl/releases/v6.md +305 -0
- package/docs/pl/roadmap.md +362 -0
- package/docs/pl/testing.md +202 -0
- package/docs/pl/vs_code_extension.md +126 -0
- package/docs/pt/component_i18n.md +1 -1
- package/docs/pt/configuration.md +6 -0
- package/docs/pt/intlayer_cli.md +8 -3
- package/docs/pt/intlayer_with_next-i18next.md +627 -0
- package/docs/pt/intlayer_with_next-intl.md +446 -0
- package/docs/pt/intlayer_with_nextjs_16.md +21 -0
- package/docs/pt/intlayer_with_tanstack.md +4 -0
- package/docs/pt/intlayer_with_vite+react.md +4 -0
- package/docs/ru/component_i18n.md +1 -1
- package/docs/ru/configuration.md +6 -0
- package/docs/ru/intlayer_cli.md +301 -22
- package/docs/ru/intlayer_with_next-i18next.md +629 -0
- package/docs/ru/intlayer_with_next-intl.md +448 -0
- package/docs/ru/intlayer_with_nextjs_16.md +21 -0
- package/docs/ru/intlayer_with_tanstack.md +4 -0
- package/docs/ru/intlayer_with_vite+react.md +4 -0
- package/docs/tr/component_i18n.md +1 -1
- package/docs/tr/configuration.md +6 -0
- package/docs/tr/intlayer_cli.md +8 -0
- package/docs/tr/intlayer_with_next-i18next.md +627 -0
- package/docs/tr/intlayer_with_next-intl.md +446 -0
- package/docs/tr/intlayer_with_nextjs_16.md +21 -0
- package/docs/tr/intlayer_with_tanstack.md +4 -0
- package/docs/tr/intlayer_with_vite+react.md +4 -0
- package/docs/vi/CI_CD.md +198 -0
- package/docs/vi/autoFill.md +284 -0
- package/docs/vi/component_i18n.md +186 -0
- package/docs/vi/configuration.md +710 -0
- package/docs/vi/dictionary/condition.md +237 -0
- package/docs/vi/dictionary/content_file.md +1115 -0
- package/docs/vi/dictionary/enumeration.md +255 -0
- package/docs/vi/dictionary/file.md +234 -0
- package/docs/vi/dictionary/function_fetching.md +212 -0
- package/docs/vi/dictionary/gender.md +275 -0
- package/docs/vi/dictionary/insertion.md +191 -0
- package/docs/vi/dictionary/markdown.md +381 -0
- package/docs/vi/dictionary/nesting.md +273 -0
- package/docs/vi/dictionary/translation.md +309 -0
- package/docs/vi/formatters.md +595 -0
- package/docs/vi/how_works_intlayer.md +256 -0
- package/docs/vi/index.md +174 -0
- package/docs/vi/interest_of_intlayer.md +292 -0
- package/docs/vi/intlayer_CMS.md +549 -0
- package/docs/vi/intlayer_cli.md +850 -0
- package/docs/vi/intlayer_visual_editor.md +288 -0
- package/docs/vi/intlayer_with_angular.md +692 -0
- package/docs/vi/intlayer_with_astro.md +252 -0
- package/docs/vi/intlayer_with_create_react_app.md +1230 -0
- package/docs/vi/intlayer_with_express.md +409 -0
- package/docs/vi/intlayer_with_lynx+react.md +520 -0
- package/docs/vi/intlayer_with_nestjs.md +272 -0
- package/docs/vi/intlayer_with_next-i18next.md +628 -0
- package/docs/vi/intlayer_with_next-intl.md +446 -0
- package/docs/vi/intlayer_with_nextjs_14.md +1584 -0
- package/docs/vi/intlayer_with_nextjs_15.md +1738 -0
- package/docs/vi/intlayer_with_nextjs_16.md +21 -0
- package/docs/vi/intlayer_with_nextjs_page_router.md +1504 -0
- package/docs/vi/intlayer_with_nuxt.md +821 -0
- package/docs/vi/intlayer_with_react_native+expo.md +700 -0
- package/docs/vi/intlayer_with_react_router_v7.md +498 -0
- package/docs/vi/intlayer_with_tanstack.md +562 -0
- package/docs/vi/intlayer_with_vite+preact.md +1722 -0
- package/docs/vi/intlayer_with_vite+react.md +1407 -0
- package/docs/vi/intlayer_with_vite+solid.md +287 -0
- package/docs/vi/intlayer_with_vite+svelte.md +289 -0
- package/docs/vi/intlayer_with_vite+vue.md +1071 -0
- package/docs/vi/introduction.md +215 -0
- package/docs/vi/locale_mapper.md +242 -0
- package/docs/vi/mcp_server.md +211 -0
- package/docs/vi/packages/express-intlayer/t.md +457 -0
- package/docs/vi/packages/intlayer/getConfiguration.md +145 -0
- package/docs/vi/packages/intlayer/getEnumeration.md +162 -0
- package/docs/vi/packages/intlayer/getHTMLTextDir.md +121 -0
- package/docs/vi/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/vi/packages/intlayer/getLocaleName.md +129 -0
- package/docs/vi/packages/intlayer/getLocalizedUrl.md +309 -0
- package/docs/vi/packages/intlayer/getMultilingualUrls.md +221 -0
- package/docs/vi/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/vi/packages/intlayer/getTranslation.md +201 -0
- package/docs/vi/packages/intlayer/getTranslationContent.md +188 -0
- package/docs/vi/packages/next-intlayer/t.md +352 -0
- package/docs/vi/packages/next-intlayer/useDictionary.md +273 -0
- package/docs/vi/packages/next-intlayer/useIntlayer.md +264 -0
- package/docs/vi/packages/next-intlayer/useLocale.md +166 -0
- package/docs/vi/packages/react-intlayer/t.md +304 -0
- package/docs/vi/packages/react-intlayer/useDictionary.md +288 -0
- package/docs/vi/packages/react-intlayer/useI18n.md +295 -0
- package/docs/vi/packages/react-intlayer/useIntlayer.md +256 -0
- package/docs/vi/packages/react-intlayer/useLocale.md +210 -0
- package/docs/vi/per_locale_file.md +326 -0
- package/docs/vi/readme.md +261 -0
- package/docs/vi/releases/v6.md +305 -0
- package/docs/vi/roadmap.md +346 -0
- package/docs/vi/testing.md +202 -0
- package/docs/vi/vs_code_extension.md +126 -0
- package/docs/zh/configuration.md +6 -0
- package/docs/zh/intlayer_cli.md +8 -3
- package/docs/zh/intlayer_with_next-i18next.md +628 -0
- package/docs/zh/intlayer_with_next-intl.md +448 -0
- package/docs/zh/intlayer_with_nextjs_16.md +21 -0
- package/docs/zh/intlayer_with_tanstack.md +4 -0
- package/docs/zh/intlayer_with_vite+react.md +4 -0
- package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ar/array_as_content_declaration.md +1 -2
- package/frequent_questions/ar/build_dictionaries.md +1 -2
- package/frequent_questions/ar/build_error_CI_CD.md +1 -2
- package/frequent_questions/ar/bun_set_up.md +1 -2
- package/frequent_questions/ar/customized_locale_list.md +1 -2
- package/frequent_questions/ar/domain_routing.md +1 -2
- package/frequent_questions/ar/esbuild_error.md +1 -2
- package/frequent_questions/ar/get_locale_cookie.md +1 -2
- package/frequent_questions/ar/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ar/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ar/static_rendering.md +1 -3
- package/frequent_questions/ar/translated_path_url.md +1 -2
- package/frequent_questions/ar/unknown_command.md +1 -2
- package/frequent_questions/de/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/de/array_as_content_declaration.md +1 -2
- package/frequent_questions/de/build_dictionaries.md +1 -2
- package/frequent_questions/de/build_error_CI_CD.md +1 -2
- package/frequent_questions/de/bun_set_up.md +1 -2
- package/frequent_questions/de/customized_locale_list.md +1 -2
- package/frequent_questions/de/domain_routing.md +1 -2
- package/frequent_questions/de/esbuild_error.md +1 -2
- package/frequent_questions/de/get_locale_cookie.md +1 -2
- package/frequent_questions/de/intlayer_command_undefined.md +1 -2
- package/frequent_questions/de/locale_incorect_in_url.md +1 -2
- package/frequent_questions/de/static_rendering.md +1 -3
- package/frequent_questions/de/translated_path_url.md +1 -2
- package/frequent_questions/de/unknown_command.md +1 -2
- package/frequent_questions/en/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/en/array_as_content_declaration.md +1 -2
- package/frequent_questions/en/build_dictionaries.md +1 -2
- package/frequent_questions/en/build_error_CI_CD.md +1 -2
- package/frequent_questions/en/bun_set_up.md +1 -2
- package/frequent_questions/en/customized_locale_list.md +1 -2
- package/frequent_questions/en/domain_routing.md +1 -2
- package/frequent_questions/en/esbuild_error.md +1 -2
- package/frequent_questions/en/get_locale_cookie.md +1 -2
- package/frequent_questions/en/intlayer_command_undefined.md +1 -2
- package/frequent_questions/en/locale_incorect_in_url.md +1 -2
- package/frequent_questions/en/static_rendering.md +1 -3
- package/frequent_questions/en/translated_path_url.md +1 -2
- package/frequent_questions/en/unknown_command.md +1 -2
- package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/en-GB/array_as_content_declaration.md +1 -2
- package/frequent_questions/en-GB/build_dictionaries.md +1 -2
- package/frequent_questions/en-GB/build_error_CI_CD.md +1 -2
- package/frequent_questions/en-GB/bun_set_up.md +1 -2
- package/frequent_questions/en-GB/customized_locale_list.md +1 -2
- package/frequent_questions/en-GB/domain_routing.md +1 -2
- package/frequent_questions/en-GB/esbuild_error.md +1 -2
- package/frequent_questions/en-GB/get_locale_cookie.md +1 -2
- package/frequent_questions/en-GB/intlayer_command_undefined.md +1 -2
- package/frequent_questions/en-GB/locale_incorect_in_url.md +1 -2
- package/frequent_questions/en-GB/static_rendering.md +1 -3
- package/frequent_questions/en-GB/translated_path_url.md +1 -2
- package/frequent_questions/en-GB/unknown_command.md +1 -2
- package/frequent_questions/es/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/es/array_as_content_declaration.md +1 -2
- package/frequent_questions/es/build_dictionaries.md +1 -2
- package/frequent_questions/es/build_error_CI_CD.md +1 -2
- package/frequent_questions/es/bun_set_up.md +1 -2
- package/frequent_questions/es/customized_locale_list.md +1 -2
- package/frequent_questions/es/domain_routing.md +1 -2
- package/frequent_questions/es/esbuild_error.md +1 -2
- package/frequent_questions/es/get_locale_cookie.md +1 -2
- package/frequent_questions/es/intlayer_command_undefined.md +1 -2
- package/frequent_questions/es/locale_incorect_in_url.md +1 -2
- package/frequent_questions/es/static_rendering.md +1 -3
- package/frequent_questions/es/translated_path_url.md +1 -2
- package/frequent_questions/es/unknown_command.md +1 -2
- package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/fr/array_as_content_declaration.md +1 -2
- package/frequent_questions/fr/build_dictionaries.md +1 -2
- package/frequent_questions/fr/build_error_CI_CD.md +1 -2
- package/frequent_questions/fr/bun_set_up.md +1 -2
- package/frequent_questions/fr/customized_locale_list.md +1 -2
- package/frequent_questions/fr/domain_routing.md +1 -2
- package/frequent_questions/fr/esbuild_error.md +1 -2
- package/frequent_questions/fr/get_locale_cookie.md +1 -2
- package/frequent_questions/fr/intlayer_command_undefined.md +1 -2
- package/frequent_questions/fr/locale_incorect_in_url.md +1 -2
- package/frequent_questions/fr/static_rendering.md +1 -3
- package/frequent_questions/fr/translated_path_url.md +1 -2
- package/frequent_questions/fr/unknown_command.md +1 -2
- package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/hi/array_as_content_declaration.md +1 -2
- package/frequent_questions/hi/build_dictionaries.md +1 -2
- package/frequent_questions/hi/build_error_CI_CD.md +1 -2
- package/frequent_questions/hi/bun_set_up.md +1 -2
- package/frequent_questions/hi/customized_locale_list.md +1 -2
- package/frequent_questions/hi/domain_routing.md +1 -2
- package/frequent_questions/hi/esbuild_error.md +1 -2
- package/frequent_questions/hi/get_locale_cookie.md +1 -2
- package/frequent_questions/hi/intlayer_command_undefined.md +1 -2
- package/frequent_questions/hi/locale_incorect_in_url.md +1 -2
- package/frequent_questions/hi/static_rendering.md +1 -3
- package/frequent_questions/hi/translated_path_url.md +1 -2
- package/frequent_questions/hi/unknown_command.md +1 -2
- package/frequent_questions/id/SSR_Next_no_[locale].md +104 -0
- package/frequent_questions/id/array_as_content_declaration.md +71 -0
- package/frequent_questions/id/build_dictionaries.md +58 -0
- package/frequent_questions/id/build_error_CI_CD.md +74 -0
- package/frequent_questions/id/bun_set_up.md +53 -0
- package/frequent_questions/id/customized_locale_list.md +64 -0
- package/frequent_questions/id/domain_routing.md +113 -0
- package/frequent_questions/id/esbuild_error.md +29 -0
- package/frequent_questions/id/get_locale_cookie.md +142 -0
- package/frequent_questions/id/intlayer_command_undefined.md +155 -0
- package/frequent_questions/id/locale_incorect_in_url.md +73 -0
- package/frequent_questions/id/static_rendering.md +44 -0
- package/frequent_questions/id/translated_path_url.md +55 -0
- package/frequent_questions/id/unknown_command.md +97 -0
- package/frequent_questions/it/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/it/array_as_content_declaration.md +1 -2
- package/frequent_questions/it/build_dictionaries.md +1 -2
- package/frequent_questions/it/build_error_CI_CD.md +1 -2
- package/frequent_questions/it/bun_set_up.md +1 -2
- package/frequent_questions/it/customized_locale_list.md +1 -2
- package/frequent_questions/it/domain_routing.md +1 -2
- package/frequent_questions/it/esbuild_error.md +1 -2
- package/frequent_questions/it/get_locale_cookie.md +1 -2
- package/frequent_questions/it/intlayer_command_undefined.md +1 -2
- package/frequent_questions/it/locale_incorect_in_url.md +1 -2
- package/frequent_questions/it/static_rendering.md +1 -3
- package/frequent_questions/it/translated_path_url.md +1 -2
- package/frequent_questions/it/unknown_command.md +1 -2
- package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ja/array_as_content_declaration.md +1 -2
- package/frequent_questions/ja/build_dictionaries.md +1 -2
- package/frequent_questions/ja/build_error_CI_CD.md +1 -2
- package/frequent_questions/ja/bun_set_up.md +1 -2
- package/frequent_questions/ja/customized_locale_list.md +1 -2
- package/frequent_questions/ja/domain_routing.md +1 -2
- package/frequent_questions/ja/esbuild_error.md +1 -2
- package/frequent_questions/ja/get_locale_cookie.md +1 -2
- package/frequent_questions/ja/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ja/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ja/static_rendering.md +1 -3
- package/frequent_questions/ja/translated_path_url.md +1 -2
- package/frequent_questions/ja/unknown_command.md +1 -2
- package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ko/array_as_content_declaration.md +1 -2
- package/frequent_questions/ko/build_dictionaries.md +1 -2
- package/frequent_questions/ko/build_error_CI_CD.md +1 -2
- package/frequent_questions/ko/bun_set_up.md +1 -2
- package/frequent_questions/ko/customized_locale_list.md +1 -2
- package/frequent_questions/ko/domain_routing.md +1 -2
- package/frequent_questions/ko/esbuild_error.md +1 -2
- package/frequent_questions/ko/get_locale_cookie.md +1 -2
- package/frequent_questions/ko/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ko/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ko/static_rendering.md +1 -3
- package/frequent_questions/ko/translated_path_url.md +1 -2
- package/frequent_questions/ko/unknown_command.md +1 -2
- package/frequent_questions/pl/SSR_Next_no_[locale].md +104 -0
- package/frequent_questions/pl/array_as_content_declaration.md +71 -0
- package/frequent_questions/pl/build_dictionaries.md +58 -0
- package/frequent_questions/pl/build_error_CI_CD.md +74 -0
- package/frequent_questions/pl/bun_set_up.md +54 -0
- package/frequent_questions/pl/customized_locale_list.md +64 -0
- package/frequent_questions/pl/domain_routing.md +113 -0
- package/frequent_questions/pl/esbuild_error.md +29 -0
- package/frequent_questions/pl/get_locale_cookie.md +142 -0
- package/frequent_questions/pl/intlayer_command_undefined.md +155 -0
- package/frequent_questions/pl/locale_incorect_in_url.md +73 -0
- package/frequent_questions/pl/static_rendering.md +44 -0
- package/frequent_questions/pl/translated_path_url.md +55 -0
- package/frequent_questions/pl/unknown_command.md +97 -0
- package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/pt/array_as_content_declaration.md +1 -2
- package/frequent_questions/pt/build_dictionaries.md +1 -2
- package/frequent_questions/pt/build_error_CI_CD.md +1 -2
- package/frequent_questions/pt/bun_set_up.md +1 -2
- package/frequent_questions/pt/customized_locale_list.md +1 -2
- package/frequent_questions/pt/domain_routing.md +1 -2
- package/frequent_questions/pt/esbuild_error.md +1 -2
- package/frequent_questions/pt/get_locale_cookie.md +1 -2
- package/frequent_questions/pt/intlayer_command_undefined.md +1 -2
- package/frequent_questions/pt/locale_incorect_in_url.md +1 -2
- package/frequent_questions/pt/static_rendering.md +1 -3
- package/frequent_questions/pt/translated_path_url.md +1 -2
- package/frequent_questions/pt/unknown_command.md +1 -2
- package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ru/array_as_content_declaration.md +1 -2
- package/frequent_questions/ru/build_dictionaries.md +1 -2
- package/frequent_questions/ru/build_error_CI_CD.md +1 -2
- package/frequent_questions/ru/bun_set_up.md +1 -2
- package/frequent_questions/ru/customized_locale_list.md +1 -2
- package/frequent_questions/ru/domain_routing.md +1 -2
- package/frequent_questions/ru/esbuild_error.md +1 -2
- package/frequent_questions/ru/get_locale_cookie.md +1 -2
- package/frequent_questions/ru/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ru/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ru/static_rendering.md +1 -2
- package/frequent_questions/ru/translated_path_url.md +1 -2
- package/frequent_questions/ru/unknown_command.md +1 -2
- package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/tr/array_as_content_declaration.md +1 -2
- package/frequent_questions/tr/build_dictionaries.md +1 -2
- package/frequent_questions/tr/build_error_CI_CD.md +1 -2
- package/frequent_questions/tr/bun_set_up.md +1 -2
- package/frequent_questions/tr/customized_locale_list.md +1 -2
- package/frequent_questions/tr/domain_routing.md +1 -2
- package/frequent_questions/tr/esbuild_error.md +1 -2
- package/frequent_questions/tr/get_locale_cookie.md +1 -2
- package/frequent_questions/tr/intlayer_command_undefined.md +1 -2
- package/frequent_questions/tr/locale_incorect_in_url.md +1 -2
- package/frequent_questions/tr/static_rendering.md +1 -2
- package/frequent_questions/tr/translated_path_url.md +1 -2
- package/frequent_questions/tr/unknown_command.md +1 -2
- package/frequent_questions/vi/SSR_Next_no_[locale].md +106 -0
- package/frequent_questions/vi/array_as_content_declaration.md +71 -0
- package/frequent_questions/vi/build_dictionaries.md +58 -0
- package/frequent_questions/vi/build_error_CI_CD.md +74 -0
- package/frequent_questions/vi/bun_set_up.md +53 -0
- package/frequent_questions/vi/customized_locale_list.md +64 -0
- package/frequent_questions/vi/domain_routing.md +113 -0
- package/frequent_questions/vi/esbuild_error.md +29 -0
- package/frequent_questions/vi/get_locale_cookie.md +142 -0
- package/frequent_questions/vi/intlayer_command_undefined.md +155 -0
- package/frequent_questions/vi/locale_incorect_in_url.md +73 -0
- package/frequent_questions/vi/static_rendering.md +44 -0
- package/frequent_questions/vi/translated_path_url.md +55 -0
- package/frequent_questions/vi/unknown_command.md +97 -0
- package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/zh/array_as_content_declaration.md +1 -2
- package/frequent_questions/zh/build_dictionaries.md +1 -2
- package/frequent_questions/zh/build_error_CI_CD.md +1 -2
- package/frequent_questions/zh/bun_set_up.md +1 -2
- package/frequent_questions/zh/customized_locale_list.md +1 -2
- package/frequent_questions/zh/domain_routing.md +1 -2
- package/frequent_questions/zh/esbuild_error.md +1 -2
- package/frequent_questions/zh/get_locale_cookie.md +1 -2
- package/frequent_questions/zh/intlayer_command_undefined.md +1 -2
- package/frequent_questions/zh/locale_incorect_in_url.md +1 -2
- package/frequent_questions/zh/static_rendering.md +1 -3
- package/frequent_questions/zh/translated_path_url.md +1 -2
- package/frequent_questions/zh/unknown_command.md +1 -2
- package/legal/id/privacy_notice.md +83 -0
- package/legal/id/terms_of_service.md +55 -0
- package/legal/pl/privacy_notice.md +83 -0
- package/legal/pl/terms_of_service.md +55 -0
- package/legal/vi/privacy_notice.md +83 -0
- package/legal/vi/terms_of_service.md +55 -0
- package/package.json +19 -18
- package/src/generated/blog.entry.ts +38 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Tôi nhận được lỗi module not found khi sử dụng bun
|
|
5
|
+
description: Sửa lỗi khi sử dụng bun.
|
|
6
|
+
keywords:
|
|
7
|
+
- bun
|
|
8
|
+
- module not found
|
|
9
|
+
- intlayer
|
|
10
|
+
- cấu hình
|
|
11
|
+
- trình quản lý gói
|
|
12
|
+
slugs:
|
|
13
|
+
- frequent-questions
|
|
14
|
+
- bun-set-up
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Tôi nhận được lỗi module not found khi sử dụng bun
|
|
18
|
+
|
|
19
|
+
## Mô tả vấn đề
|
|
20
|
+
|
|
21
|
+
Khi sử dụng bun, bạn có thể gặp lỗi như sau:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
Cannot find package 'intlayer' from '/workspace/packages/@intlayer/config/dist/cjs/utils/ESMxCJSHelpers.cjs' undefined
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Nguyên nhân
|
|
28
|
+
|
|
29
|
+
Intlayer sử dụng `require` bên trong. Và bun giới hạn hàm require chỉ để giải quyết các gói của package `@intlayer/config`, thay vì toàn bộ dự án.
|
|
30
|
+
|
|
31
|
+
## Giải pháp
|
|
32
|
+
|
|
33
|
+
### Cung cấp hàm `require` trong cấu hình
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
const config: IntlayerConfig = {
|
|
37
|
+
build: {
|
|
38
|
+
require, // cung cấp hàm require trong cấu hình build
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export default config;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```ts fileName="next.config.ts" codeFormat="typescript"
|
|
46
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
47
|
+
|
|
48
|
+
const configuration = withIntlayer({
|
|
49
|
+
require, // sử dụng hàm require khi cấu hình với Intlayer trong Next.js
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export default configuration;
|
|
53
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Làm thế nào để tùy chỉnh danh sách ngôn ngữ?
|
|
5
|
+
description: Tìm hiểu cách tùy chỉnh danh sách ngôn ngữ.
|
|
6
|
+
keywords:
|
|
7
|
+
- locales
|
|
8
|
+
- danh sách
|
|
9
|
+
- intlayer
|
|
10
|
+
- cấu hình
|
|
11
|
+
- availableLocales
|
|
12
|
+
- defaultLocale
|
|
13
|
+
- useLocale
|
|
14
|
+
- hook
|
|
15
|
+
- locale
|
|
16
|
+
- danh sách
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- customized-locale-list
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Có thể chặn một loại ngôn ngữ, như tiếng Anh không? Tôi đang thêm tiếng Anh vào từ điển nhưng chưa muốn tiếng Anh xuất hiện trên trang web
|
|
23
|
+
|
|
24
|
+
Có, bạn có thể chặn một loại ngôn ngữ, như tiếng Anh, bằng cách sử dụng tùy chọn `availableLocales` trong cấu hình Intlayer.
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { IntlayerConfig } from "intlayer";
|
|
28
|
+
|
|
29
|
+
const config: IntlayerConfig = {
|
|
30
|
+
locales: [Locales.FRENCH, Locales.SPANISH, Locales.ENGLISH],
|
|
31
|
+
availableLocales: [Locales.FRENCH, Locales.SPANISH],
|
|
32
|
+
defaultLocale: Locales.FRENCH,
|
|
33
|
+
};
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
hoặc
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { IntlayerConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
const locales = [Locales.FRENCH, Locales.SPANISH, Locales.ENGLISH];
|
|
42
|
+
|
|
43
|
+
const config: IntlayerConfig = {
|
|
44
|
+
locales,
|
|
45
|
+
availableLocales: locales.filter((locale) => locale !== Locales.ENGLISH),
|
|
46
|
+
defaultLocale: Locales.FRENCH,
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Cấu hình này sẽ thay đổi kiểu của hàm `t()` của bạn chỉ bao gồm các locale có sẵn.
|
|
51
|
+
|
|
52
|
+
Tùy chọn availableLocales là tùy chọn, nếu bạn không cung cấp, tất cả các locale sẽ được sử dụng.
|
|
53
|
+
|
|
54
|
+
Hãy cẩn thận, tất cả các locale được bao gồm trong tùy chọn `availableLocales` nên được bao gồm trong tùy chọn `locales`.
|
|
55
|
+
|
|
56
|
+
Lưu ý rằng nếu bạn sử dụng hook `useLocale`, tùy chọn `availableLocales` sẽ được sử dụng để thiết lập quyền truy cập vào danh sách locale.
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { useLocale } from "intlayer";
|
|
60
|
+
|
|
61
|
+
const { availableLocales } = useLocale();
|
|
62
|
+
|
|
63
|
+
console.log(availableLocales); // [Locales.FRENCH, Locales.SPANISH]
|
|
64
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Cách cấu hình định tuyến dựa trên tên miền?
|
|
5
|
+
description: Tìm hiểu cách cấu hình định tuyến dựa trên tên miền.
|
|
6
|
+
keywords:
|
|
7
|
+
- domain
|
|
8
|
+
- routing
|
|
9
|
+
- intlayer
|
|
10
|
+
- configuration
|
|
11
|
+
- middleware
|
|
12
|
+
- react-router
|
|
13
|
+
- vue-router
|
|
14
|
+
- next.js
|
|
15
|
+
- vite
|
|
16
|
+
- framework
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- domain-routing
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Làm thế nào để cấu hình **định tuyến dựa trên tên miền** với Intlayer thay vì các đường dẫn `/[locale]/`?
|
|
23
|
+
|
|
24
|
+
## Trả lời ngắn gọn
|
|
25
|
+
|
|
26
|
+
Định tuyến dựa trên tên miền đơn giản hơn định tuyến dựa trên đường dẫn (`example.com/[locale]/`) vì bạn có thể bỏ qua toàn bộ cấu hình middleware và routing. Chỉ cần triển khai ứng dụng của bạn lên từng tên miền ngôn ngữ và đặt một biến môi trường cho mỗi tên miền.
|
|
27
|
+
|
|
28
|
+
## Các bước thực hiện
|
|
29
|
+
|
|
30
|
+
1. **Triển khai một lần cho mỗi tên miền** (`example.com`, `exemple.fr`, `ejemplo.es`, …).
|
|
31
|
+
2. Với mỗi lần triển khai, đặt `LOCALE` (và các biến môi trường Intlayer thông thường) thành ngôn ngữ mà tên miền đó sẽ phục vụ.
|
|
32
|
+
3. Tham chiếu biến đó dưới dạng `defaultLocale` trong file `intlayer.config.[ts|js]` của bạn.
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
36
|
+
|
|
37
|
+
const config: IntlayerConfig = {
|
|
38
|
+
internationalization: {
|
|
39
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
40
|
+
defaultLocale: process.env.LOCALE, // 👈 tên miền quyết định ngôn ngữ
|
|
41
|
+
},
|
|
42
|
+
// ... phần còn lại của cấu hình
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default config;
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Chỉ vậy thôi — cách này hoạt động tương tự cho **Next.js**, **Vite + React**, **Vite + Vue**, v.v.
|
|
49
|
+
|
|
50
|
+
## Nếu mọi tên miền đều trỏ đến cùng một lần triển khai thì sao?
|
|
51
|
+
|
|
52
|
+
Nếu tất cả các tên miền đều trỏ đến cùng một bundle ứng dụng, bạn sẽ cần phát hiện host tại runtime và truyền ngôn ngữ thủ công thông qua provider.
|
|
53
|
+
|
|
54
|
+
### Dành cho Next.js
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
// src/IntlayerProvider.tsx
|
|
58
|
+
import {
|
|
59
|
+
IntlayerClientProvider,
|
|
60
|
+
type IntlayerClientProviderProps,
|
|
61
|
+
} from "next-intlayer";
|
|
62
|
+
import { IntlayerServerProvider } from "next-intlayer/server";
|
|
63
|
+
import type { FC } from "react";
|
|
64
|
+
|
|
65
|
+
export const IntlayerProvider: FC<IntlayerClientProviderProps> = ({
|
|
66
|
+
children,
|
|
67
|
+
locale,
|
|
68
|
+
}) => {
|
|
69
|
+
const resolvedLocale = locale ?? getLocaleFromHostname(); // 👈 lấy ngôn ngữ từ hostname nếu không có locale truyền vào
|
|
70
|
+
return (
|
|
71
|
+
<IntlayerServerProvider locale={resolvedLocale}>
|
|
72
|
+
<IntlayerClientProvider locale={resolvedLocale}>
|
|
73
|
+
{children}
|
|
74
|
+
</IntlayerClientProvider>
|
|
75
|
+
</IntlayerServerProvider>
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Dành cho Vue
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
import { createApp } from "vue";
|
|
84
|
+
import { installIntlayer } from "vue-intlayer";
|
|
85
|
+
import App from "./App.vue";
|
|
86
|
+
import { router } from "./routes";
|
|
87
|
+
|
|
88
|
+
const app = createApp(App);
|
|
89
|
+
app.use(router);
|
|
90
|
+
installIntlayer(app, getLocaleFromHostname()); // 👈 cài đặt Intlayer với ngôn ngữ lấy từ hostname
|
|
91
|
+
app.mount("#app");
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Thay thế `getLocaleFromHostname()` bằng logic tra cứu của riêng bạn.
|
|
95
|
+
|
|
96
|
+
## Cập nhật bộ chuyển đổi ngôn ngữ của bạn
|
|
97
|
+
|
|
98
|
+
Khi sử dụng định tuyến dựa trên tên miền, việc thay đổi ngôn ngữ đồng nghĩa với việc điều hướng sang một tên miền khác:
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
const { locale } = useLocale();
|
|
102
|
+
|
|
103
|
+
function changeLanguage(target: Locale) {
|
|
104
|
+
window.location.href = domainForLocale[target]; // 👈 chuyển hướng đến tên miền tương ứng với ngôn ngữ mục tiêu
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Lợi ích của định tuyến dựa trên tên miền
|
|
109
|
+
|
|
110
|
+
1. **Cấu hình đơn giản hơn**: Không cần cấu hình `intlayerMiddleware`, `generateStaticParams`, `react-router`, hoặc `vue-router`
|
|
111
|
+
2. **SEO tốt hơn**: Mỗi ngôn ngữ có tên miền riêng
|
|
112
|
+
3. **URL sạch hơn**: Không có tiền tố ngôn ngữ trong đường dẫn
|
|
113
|
+
4. **Dễ bảo trì hơn**: Mỗi triển khai ngôn ngữ là độc lập
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Lỗi ESBuild
|
|
5
|
+
description: Tìm hiểu cách sửa lỗi ESBuild.
|
|
6
|
+
keywords:
|
|
7
|
+
- esbuild
|
|
8
|
+
- lỗi
|
|
9
|
+
- intlayer
|
|
10
|
+
- plugin
|
|
11
|
+
- framework
|
|
12
|
+
- next.js
|
|
13
|
+
- vite
|
|
14
|
+
- react-native
|
|
15
|
+
- lynx
|
|
16
|
+
slugs:
|
|
17
|
+
- frequent-questions
|
|
18
|
+
- esbuild-error
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Lỗi ESBuild
|
|
22
|
+
|
|
23
|
+
Nếu bạn gặp lỗi ESBuild trong quá trình build, rất có thể plugin Intlayer chưa được cấu hình đúng cách.
|
|
24
|
+
|
|
25
|
+
ESBuild chịu trách nhiệm đọc các file khai báo nội dung (`.content.{ts,js,mjs,cjs,json}`) và tạo ra các từ điển tương ứng trong thư mục `.intlayer/dictionary`. Cũng như đọc file cấu hình (`intlayer.config.ts`).
|
|
26
|
+
|
|
27
|
+
Intlayer cung cấp các plugin để tích hợp với các bundler của bạn. Nó được thiết kế để alias các component chỉ chạy trên phía server.
|
|
28
|
+
|
|
29
|
+
Nếu bạn đang sử dụng một framework như Next.js (Webpack / Turbopack), Vite, hoặc React Native, Lynx, v.v. Intlayer cung cấp một plugin mà bạn có thể sử dụng để tích hợp Intlayer vào ứng dụng của mình. Vì vậy, hãy tham khảo tài liệu cụ thể của framework bạn đang dùng để tìm hiểu cách tích hợp plugin.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Cách lấy locale từ cookie / headers?
|
|
5
|
+
description: Tìm hiểu cách lấy locale từ cookie / headers.
|
|
6
|
+
keywords:
|
|
7
|
+
- cookie
|
|
8
|
+
- headers
|
|
9
|
+
- intlayer
|
|
10
|
+
- locale
|
|
11
|
+
- hook
|
|
12
|
+
- useLocale
|
|
13
|
+
- useLocaleCookie
|
|
14
|
+
- next.js
|
|
15
|
+
- react-intlayer
|
|
16
|
+
- vue-intlayer
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- get-locale-cookie
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Cách lấy locale từ cookie / headers
|
|
23
|
+
|
|
24
|
+
## Sử dụng Hooks (Khuyến nghị)
|
|
25
|
+
|
|
26
|
+
Đối với hầu hết các trường hợp sử dụng, nên lấy locale hiện tại bằng hook `useLocale` vì nó được tự động giải quyết. Điều này hoạt động tương tự như composable `useLocale` trong Vue.js.
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { useLocale } from "next-intlayer";
|
|
30
|
+
// or import { useLocale } from "react-intlayer";
|
|
31
|
+
// hoặc import { useLocale } từ "vue-intlayer";
|
|
32
|
+
|
|
33
|
+
// Sử dụng phía client
|
|
34
|
+
const { locale } = useLocale();
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Đối với các server component, bạn có thể import từ:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { useLocale } từ "next-intlayer/server";
|
|
41
|
+
|
|
42
|
+
const Test = () => {
|
|
43
|
+
const { locale } = useLocale();
|
|
44
|
+
return <>{locale}</>;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const Page = async ({ params }) => {
|
|
48
|
+
const { locale } = await params;
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<IntlayerServerProvider locale={locale}>
|
|
52
|
+
<Test />
|
|
53
|
+
</IntlayerServerProvider>
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Cũng có một hook `useLocaleCookie` chỉ giải quyết giá trị cookie.
|
|
59
|
+
|
|
60
|
+
## Cấu hình Cookie thủ công
|
|
61
|
+
|
|
62
|
+
Bạn có thể khai báo tên cookie tùy chỉnh như sau
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import { type IntlayerConfig } từ "intlayer";
|
|
66
|
+
|
|
67
|
+
const config: IntlayerConfig = {
|
|
68
|
+
middleware: {
|
|
69
|
+
cookieName: "myCustomLocaleCookie", // mặc định là 'intlayer-locale'
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default config;
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
cách lấy lại giá trị như sau
|
|
77
|
+
|
|
78
|
+
### Phía client
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
// Sử dụng tên cookie mặc định
|
|
82
|
+
const locale = document.cookie
|
|
83
|
+
.split("; ")
|
|
84
|
+
.find((row) => row.startsWith("intlayer-locale="))
|
|
85
|
+
?.split("=")[1];
|
|
86
|
+
|
|
87
|
+
// Sử dụng tên cookie tùy chỉnh
|
|
88
|
+
const locale = document.cookie
|
|
89
|
+
.split("; ")
|
|
90
|
+
.find((row) => row.startsWith("myCustomLocaleCookie="))
|
|
91
|
+
?.split("=")[1];
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Phía server (Next.js)
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
import { cookies } from "next/headers";
|
|
98
|
+
|
|
99
|
+
// Sử dụng tên cookie mặc định
|
|
100
|
+
const locale = cookies().get("intlayer-locale")?.value;
|
|
101
|
+
|
|
102
|
+
// Sử dụng tên cookie tùy chỉnh
|
|
103
|
+
const locale = cookies().get("myCustomLocaleCookie")?.value;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Nếu locale chưa được thiết lập
|
|
107
|
+
|
|
108
|
+
Locale chỉ được thiết lập dưới dạng cookie khi người dùng chọn rõ ràng locale. Mặc định, đối với khách truy cập mới, locale được suy diễn từ các trường header.
|
|
109
|
+
|
|
110
|
+
Bạn có thể phát hiện locale ưu tiên của người dùng từ các header của yêu cầu. Dưới đây là ví dụ về cách xử lý điều này:
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
/**
|
|
114
|
+
* Phát hiện locale từ các header của yêu cầu
|
|
115
|
+
*
|
|
116
|
+
* Header accept-language là header quan trọng nhất để phát hiện locale.
|
|
117
|
+
* Nó chứa danh sách các mã ngôn ngữ kèm theo giá trị chất lượng (q-value) cho biết
|
|
118
|
+
* các ngôn ngữ ưu tiên của người dùng theo thứ tự ưu tiên.
|
|
119
|
+
*
|
|
120
|
+
* Ví dụ: "en-US,en;q=0.9,fr;q=0.8,es;q=0.7"
|
|
121
|
+
* - en-US là ngôn ngữ chính (q=1.0 được ngầm định)
|
|
122
|
+
* - en là lựa chọn thứ hai (q=0.9)
|
|
123
|
+
* - fr là lựa chọn thứ ba (q=0.8)
|
|
124
|
+
* - es là lựa chọn thứ tư (q=0.7)
|
|
125
|
+
*/
|
|
126
|
+
import { localeDetector } from "@intlayer/core";
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Ví dụ về các header negotiator mà trình duyệt thường gửi
|
|
130
|
+
* Những header này giúp xác định ngôn ngữ ưu tiên của người dùng
|
|
131
|
+
*/
|
|
132
|
+
const exampleNegotiatorHeaders: Record<string, string> = {
|
|
133
|
+
"accept-language": "en-US,en;q=0.9,fr;q=0.8,es;q=0.7",
|
|
134
|
+
"accept":
|
|
135
|
+
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
|
|
136
|
+
"user-agent":
|
|
137
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// Ví dụ sử dụng:
|
|
141
|
+
const detectedLocale = localeDetector(exampleNegotiatorHeaders);
|
|
142
|
+
```
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Lệnh Intlayer không xác định
|
|
5
|
+
description: Tìm hiểu cách khắc phục lỗi lệnh intlayer không xác định.
|
|
6
|
+
keywords:
|
|
7
|
+
- intlayer
|
|
8
|
+
- lệnh
|
|
9
|
+
- không xác định
|
|
10
|
+
- lỗi
|
|
11
|
+
- vscode
|
|
12
|
+
- tiện ích mở rộng
|
|
13
|
+
- plugin
|
|
14
|
+
- framework
|
|
15
|
+
- next.js
|
|
16
|
+
- vite
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- intlayer-command-undefined
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Lệnh Intlayer không xác định
|
|
23
|
+
|
|
24
|
+
## Tổng quan
|
|
25
|
+
|
|
26
|
+
CLI Intlayer cung cấp một cách thuận tiện để kiểm soát nội dung intlayer của bạn, bao gồm xây dựng từ điển, đẩy bản dịch và nhiều hơn nữa. Tuy nhiên, nó không bắt buộc để dự án của bạn hoạt động. Nếu bạn đang sử dụng plugin bundler (như `withIntlayer()` cho Next.js hoặc `intlayer()` cho Vite), Intlayer sẽ tự động xây dựng từ điển trong quá trình xây dựng ứng dụng hoặc khi khởi động server phát triển. Ở chế độ phát triển, nó cũng sẽ theo dõi các thay đổi và tự động xây dựng lại các tệp khai báo nội dung.
|
|
27
|
+
|
|
28
|
+
Bạn có thể truy cập các lệnh intlayer theo nhiều cách khác nhau:
|
|
29
|
+
|
|
30
|
+
- Sử dụng lệnh CLI `intlayer` trực tiếp
|
|
31
|
+
- Sử dụng [tiện ích mở rộng VSCode](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/vs_code_extension.md)
|
|
32
|
+
- Sử dụng SDK `@intlayer/cli`
|
|
33
|
+
|
|
34
|
+
## Vấn đề
|
|
35
|
+
|
|
36
|
+
Khi cố gắng sử dụng lệnh `intlayer`, bạn có thể gặp lỗi sau:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
'intlayer' không được nhận dạng là lệnh nội bộ hoặc bên ngoài,
|
|
40
|
+
chương trình có thể thực thi hoặc tệp batch.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Giải pháp
|
|
44
|
+
|
|
45
|
+
Hãy thử các giải pháp sau theo thứ tự:
|
|
46
|
+
|
|
47
|
+
1. **Xác minh lệnh đã được cài đặt**
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx intlayer -h
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Kết quả mong đợi:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
Usage: intlayer [options] [command]
|
|
57
|
+
|
|
58
|
+
Intlayer CLI
|
|
59
|
+
|
|
60
|
+
Options:
|
|
61
|
+
-V, --version xuất phiên bản
|
|
62
|
+
-h, --help hiển thị trợ giúp cho lệnh
|
|
63
|
+
|
|
64
|
+
Commands:
|
|
65
|
+
dictionary|dictionaries Các thao tác với từ điển
|
|
66
|
+
configuration|config Các thao tác cấu hình
|
|
67
|
+
help [command] hiển thị trợ giúp cho lệnh
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
2. **Cài đặt gói intlayer-cli toàn cục**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm install intlayer-cli -g -g
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
> Không cần thiết nếu bạn đã cài đặt gói `intlayer`
|
|
77
|
+
|
|
78
|
+
3. **Cài đặt gói toàn cục**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npm install intlayer -g
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
4. **Khởi động lại terminal của bạn**
|
|
85
|
+
Đôi khi cần khởi động lại terminal để nhận diện các lệnh mới.
|
|
86
|
+
|
|
87
|
+
5. **Dọn dẹp và cài đặt lại**
|
|
88
|
+
Nếu các giải pháp trên không hiệu quả:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
rm -rf node_modules package-lock.json
|
|
92
|
+
npm install
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
6. **Xác minh các tệp cài đặt**
|
|
96
|
+
Nếu vấn đề vẫn tiếp diễn, kiểm tra xem các tệp sau có tồn tại không:
|
|
97
|
+
- `node_modules/intlayer/dist/cjs/cli.cjs`
|
|
98
|
+
- `node_modules/intlayer/package.json` (nên có trường `bin` tham chiếu tới `./dist/cjs/cli.cjs`)
|
|
99
|
+
|
|
100
|
+
7. **Kiểm tra biến môi trường PATH**
|
|
101
|
+
Đảm bảo thư mục bin toàn cục của npm nằm trong PATH của bạn:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Đối với hệ thống Unix (macOS/Linux)
|
|
105
|
+
echo $PATH
|
|
106
|
+
# Nên bao gồm một thư mục như /usr/local/bin hoặc ~/.npm-global/bin
|
|
107
|
+
|
|
108
|
+
# Đối với Windows
|
|
109
|
+
echo %PATH%
|
|
110
|
+
# Nên bao gồm thư mục bin toàn cục của npm
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
8. **Sử dụng npx với đường dẫn đầy đủ**
|
|
114
|
+
Nếu lệnh vẫn không tìm thấy, hãy thử dùng npx với đường dẫn đầy đủ:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npx ./node_modules/intlayer/ dictionaries build
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
9. **Kiểm tra các cài đặt xung đột**
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Liệt kê tất cả các gói được cài đặt toàn cục
|
|
124
|
+
npm list -g --depth=0
|
|
125
|
+
|
|
126
|
+
# Gỡ bỏ các cài đặt toàn cục xung đột
|
|
127
|
+
npm uninstall -g intlayer
|
|
128
|
+
npm uninstall -g intlayer-cli
|
|
129
|
+
# Sau đó cài đặt lại
|
|
130
|
+
npm install -g intlayer
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
10. **Xác minh phiên bản Node.js và npm**
|
|
134
|
+
Đảm bảo bạn đang sử dụng các phiên bản tương thích:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
node --version
|
|
138
|
+
npm --version
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Nếu bạn đang dùng phiên bản cũ, hãy cân nhắc cập nhật Node.js và npm.
|
|
142
|
+
|
|
143
|
+
11. **Kiểm tra các vấn đề về quyền truy cập**
|
|
144
|
+
Nếu bạn gặp lỗi về quyền:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Đối với hệ thống dựa trên Unix
|
|
148
|
+
sudo npm install -g intlayer
|
|
149
|
+
|
|
150
|
+
# Hoặc thay đổi thư mục mặc định của npm
|
|
151
|
+
mkdir ~/.npm-global
|
|
152
|
+
npm config set prefix '~/.npm-global'
|
|
153
|
+
# Thêm vào ~/.profile hoặc ~/.bashrc của bạn:
|
|
154
|
+
export PATH=~/.npm-global/bin:$PATH
|
|
155
|
+
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Lấy Sai Locale Từ URL
|
|
5
|
+
description: Tìm hiểu cách khắc phục lỗi lấy sai locale từ URL.
|
|
6
|
+
keywords:
|
|
7
|
+
- locale
|
|
8
|
+
- url
|
|
9
|
+
- intlayer
|
|
10
|
+
- next.js
|
|
11
|
+
- vite
|
|
12
|
+
- framework
|
|
13
|
+
- middleware
|
|
14
|
+
- configuration
|
|
15
|
+
- prefixDefault
|
|
16
|
+
- noPrefix
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- locale-incorect-in-url
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Lấy Sai Locale Từ URL
|
|
23
|
+
|
|
24
|
+
## Mô Tả Vấn Đề
|
|
25
|
+
|
|
26
|
+
Khi cố gắng truy cập tham số locale từ URL, bạn có thể gặp phải vấn đề giá trị locale bị sai:
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
const { locale } = await params;
|
|
30
|
+
console.log(locale); // trả về "about" thay vì locale mong đợi
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Giải Pháp
|
|
34
|
+
|
|
35
|
+
### 1. Kiểm Tra Cấu Trúc Thư Mục
|
|
36
|
+
|
|
37
|
+
Đảm bảo đường dẫn app router của Next.js của bạn theo cấu trúc sau:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
src/app/[locale]/about/page.tsx
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Kiểm Tra Cấu Hình Middleware
|
|
44
|
+
|
|
45
|
+
Vấn đề thường xảy ra khi middleware không tồn tại hoặc không được kích hoạt. File middleware nên được đặt tại:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
src/middleware.ts
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Middleware này chịu trách nhiệm viết lại các route khi `prefixDefault` được đặt là `false`. Ví dụ, nó sẽ viết lại `/en/about` thành `/about`.
|
|
52
|
+
|
|
53
|
+
### 3. Mẫu URL Dựa Trên Cấu Hình
|
|
54
|
+
|
|
55
|
+
#### Cấu Hình Mặc Định (`prefixDefault: false`, `noPrefix: false`)
|
|
56
|
+
|
|
57
|
+
- Tiếng Anh: `/about`
|
|
58
|
+
- Tiếng Pháp: `/fr/about`
|
|
59
|
+
- Tiếng Tây Ban Nha: `/es/about`
|
|
60
|
+
|
|
61
|
+
#### Với `prefixDefault: true`
|
|
62
|
+
|
|
63
|
+
- Tiếng Anh: `/en/about`
|
|
64
|
+
- Tiếng Pháp: `/fr/about`
|
|
65
|
+
- Tiếng Tây Ban Nha: `/es/about`
|
|
66
|
+
|
|
67
|
+
#### Với `noPrefix: true`
|
|
68
|
+
|
|
69
|
+
- Tiếng Anh: `/about`
|
|
70
|
+
- Tiếng Pháp: `/about`
|
|
71
|
+
- Tiếng Tây Ban Nha: `/about`
|
|
72
|
+
|
|
73
|
+
Để biết thêm chi tiết về các tùy chọn cấu hình này, hãy xem [Tài liệu Cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md).
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Kết xuất Tĩnh và Động với i18n trong Next.js
|
|
5
|
+
description: Tìm hiểu cách sử dụng kết xuất tĩnh và động với i18n trong Next.js.
|
|
6
|
+
keywords:
|
|
7
|
+
- tĩnh
|
|
8
|
+
- động
|
|
9
|
+
- kết xuất
|
|
10
|
+
- i18n
|
|
11
|
+
- next.js
|
|
12
|
+
- next-intl
|
|
13
|
+
- intlayer
|
|
14
|
+
- framework
|
|
15
|
+
- middleware
|
|
16
|
+
- cấu hình
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- static-rendering
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Kết xuất Tĩnh và Động với i18n trong Next.js
|
|
23
|
+
|
|
24
|
+
## Vấn đề với **next-intl**
|
|
25
|
+
|
|
26
|
+
- **Chuyện gì xảy ra?**
|
|
27
|
+
Khi bạn sử dụng `useTranslations`, `getTranslations`, hoặc bất kỳ helper nào của next-intl _bên trong một Server Component_ trên một ứng dụng có định tuyến i18n (`/en/…`, `/fr/…`), Next.js sẽ đánh dấu toàn bộ route đó là **động**. ([Next Intl][1])
|
|
28
|
+
|
|
29
|
+
- **Tại sao?**
|
|
30
|
+
next-intl tra cứu locale hiện tại từ một header chỉ dành cho request (`x-next-intl-locale`) thông qua `headers()`. Vì `headers()` là một **API động**, bất kỳ component nào sử dụng nó sẽ mất đi khả năng tối ưu tĩnh. ([Next Intl][1], [Next.js][2])
|
|
31
|
+
|
|
32
|
+
- **Giải pháp chính thức (boilerplate)**
|
|
33
|
+
1. Xuất `generateStaticParams` với tất cả các locale được hỗ trợ.
|
|
34
|
+
2. Gọi `setRequestLocale(locale)` trong **mọi** layout/trang _trước khi_ bạn gọi `useTranslations`. ([Next Intl][1])
|
|
35
|
+
Điều này loại bỏ sự phụ thuộc vào header, nhưng bạn sẽ có thêm mã để duy trì và một API không ổn định trong môi trường production.
|
|
36
|
+
|
|
37
|
+
## Cách **intlayer** tránh được vấn đề này
|
|
38
|
+
|
|
39
|
+
**Lựa chọn thiết kế**
|
|
40
|
+
|
|
41
|
+
1. **Chỉ dùng tham số route** – Locale lấy từ đoạn URL `[locale]` mà Next.js đã truyền sẵn cho mỗi trang.
|
|
42
|
+
2. **Gói biên dịch thời gian biên dịch** – Các bản dịch được nhập dưới dạng các module ES thông thường, vì vậy chúng được tree-shaken và nhúng vào thời gian biên dịch.
|
|
43
|
+
3. **Không dùng API động** – `useT()` đọc từ React context, không phải từ `headers()` hay `cookies()`.
|
|
44
|
+
4. **Không cần cấu hình thêm** – Khi các trang của bạn nằm dưới `app/[locale]/`, Next.js tự động prerender một file HTML cho mỗi locale.
|