@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,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-01-02
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: react-i18next vs react-intl vs Intlayer
|
|
5
|
+
description: Tích hợp react-i18next với next-intl và Intlayer cho việc quốc tế hóa (i18n) của ứng dụng React
|
|
6
|
+
keywords:
|
|
7
|
+
- next-intl
|
|
8
|
+
- react-i18next
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Quốc tế hóa
|
|
11
|
+
- Blog
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- react-i18next-vs-react-intl-vs-intlayer
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# react-Intl VS react-i18next VS intlayer | Quốc tế hóa React (i18n)
|
|
21
|
+
|
|
22
|
+
Hướng dẫn này so sánh ba lựa chọn i18n đã được thiết lập cho **React**: **react-intl** (FormatJS), **react-i18next** (i18next), và **Intlayer**.
|
|
23
|
+
Chúng tôi tập trung vào các ứng dụng **React thuần** (ví dụ: Vite, CRA, SPA). Nếu bạn đang sử dụng Next.js, hãy xem so sánh dành riêng cho Next.js của chúng tôi.
|
|
24
|
+
|
|
25
|
+
Chúng tôi đánh giá:
|
|
26
|
+
|
|
27
|
+
- Kiến trúc & tổ chức nội dung
|
|
28
|
+
- TypeScript & an toàn
|
|
29
|
+
- Xử lý bản dịch thiếu
|
|
30
|
+
- Nội dung phong phú & khả năng định dạng
|
|
31
|
+
- Hiệu suất & hành vi tải
|
|
32
|
+
- Trải nghiệm nhà phát triển (DX), công cụ & bảo trì
|
|
33
|
+
- SEO/định tuyến (phụ thuộc vào framework)
|
|
34
|
+
|
|
35
|
+
<TOC/>
|
|
36
|
+
|
|
37
|
+
> **tóm tắt**: Cả ba đều có thể bản địa hóa ứng dụng React. Nếu bạn muốn **nội dung theo phạm vi component**, **kiểu TypeScript nghiêm ngặt**, **kiểm tra khóa thiếu tại thời điểm build**, **từ điển được tree-shaking**, và công cụ biên tập tích hợp sẵn (Visual Editor/CMS + dịch thuật AI tùy chọn), thì **Intlayer** là lựa chọn toàn diện nhất cho các codebase React mô-đun.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Vị trí tổng quan cấp cao
|
|
42
|
+
|
|
43
|
+
- **react-intl** - Định dạng ưu tiên ICU, tuân thủ tiêu chuẩn (ngày/tháng/số/dạng số nhiều) với API trưởng thành. Các catalog thường được tập trung; an toàn khóa và kiểm tra tại thời điểm build phần lớn phụ thuộc vào bạn.
|
|
44
|
+
- **react-i18next** - Rất phổ biến và linh hoạt; hỗ trợ namespace, bộ phát hiện, và nhiều plugin (ICU, backend). Mạnh mẽ, nhưng cấu hình có thể phức tạp khi dự án mở rộng.
|
|
45
|
+
- **Intlayer** - Mô hình nội dung tập trung vào component cho React, **kiểu TypeScript nghiêm ngặt**, **kiểm tra tại thời điểm build**, **tree-shaking**, cộng với **Visual Editor/CMS** và **dịch thuật hỗ trợ AI**. Hoạt động với React Router, Vite, CRA, v.v.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Ma trận tính năng (tập trung React)
|
|
50
|
+
|
|
51
|
+
| Tính năng | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
|
|
52
|
+
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
|
53
|
+
| **Bản dịch Gần Thành phần** | ✅ Có, nội dung đặt gần với từng thành phần | ❌ Không | ❌ Không |
|
|
54
|
+
| **Tích hợp TypeScript** | ✅ Nâng cao, tự động tạo kiểu nghiêm ngặt | ⚠️ Cơ bản; cấu hình thêm để đảm bảo an toàn | ✅ Tốt, nhưng ít nghiêm ngặt hơn |
|
|
55
|
+
| **Phát hiện Bản dịch Thiếu** | ✅ Làm nổi bật lỗi TypeScript và lỗi/cảnh báo trong thời gian biên dịch | ⚠️ Chủ yếu là chuỗi dự phòng khi chạy | ⚠️ Chuỗi dự phòng |
|
|
56
|
+
| **Nội dung Phong phú (JSX/Markdown/thành phần)** | ✅ Hỗ trợ trực tiếp | ⚠️ Giới hạn / chỉ nội suy | ⚠️ Cú pháp ICU, không phải JSX thực sự |
|
|
57
|
+
| **Dịch thuật sử dụng AI** | ✅ Có, hỗ trợ nhiều nhà cung cấp AI. Có thể sử dụng bằng các khóa API riêng của bạn. Xem xét ngữ cảnh ứng dụng và phạm vi nội dung của bạn | ❌ Không | ❌ Không |
|
|
58
|
+
| **Trình chỉnh sửa trực quan** | ✅ Có, Trình chỉnh sửa trực quan cục bộ + CMS tùy chọn; có thể tách nội dung codebase ra ngoài; có thể nhúng | ❌ Không / có sẵn qua các nền tảng bản địa hóa bên ngoài | ❌ Không / có sẵn qua các nền tảng bản địa hóa bên ngoài |
|
|
59
|
+
| **Định tuyến địa phương hóa** | ✅ Có, hỗ trợ các đường dẫn địa phương hóa sẵn có (hoạt động với Next.js & Vite) | ⚠️ Không tích hợp sẵn, yêu cầu plugin (ví dụ `next-i18next`) hoặc cấu hình router tùy chỉnh | ❌ Không, chỉ định dạng thông điệp, định tuyến phải làm thủ công |
|
|
60
|
+
| **Tạo tuyến động** | ✅ Có | ⚠️ Plugin/hệ sinh thái hoặc thiết lập thủ công | ❌ Không được cung cấp |
|
|
61
|
+
| **Phân số nhiều** | ✅ Mẫu dựa trên liệt kê | ✅ Có thể cấu hình (plugin như i18next-icu) | ✅ (ICU) |
|
|
62
|
+
| **Định dạng (ngày tháng, số, tiền tệ)** | ✅ Bộ định dạng tối ưu (Intl bên trong) | ⚠️ Qua plugin hoặc sử dụng Intl tùy chỉnh | ✅ Bộ định dạng ICU |
|
|
63
|
+
| **Định dạng nội dung** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml đang phát triển) | ⚠️ .json | ✅ .json, .js |
|
|
64
|
+
| **Hỗ trợ ICU** | ⚠️ Đang phát triển | ⚠️ Qua plugin (i18next-icu) | ✅ Có |
|
|
65
|
+
| **Trợ giúp SEO (hreflang, sitemap)** | ✅ Công cụ tích hợp sẵn: trợ giúp cho sitemap, robots.txt, metadata | ⚠️ Plugin cộng đồng / thủ công | ❌ Không phải lõi |
|
|
66
|
+
| **Hệ sinh thái / Cộng đồng** | ⚠️ Nhỏ hơn nhưng phát triển nhanh và phản ứng tốt | ✅ Lớn nhất và trưởng thành | ✅ Lớn |
|
|
67
|
+
| **Kết xuất phía máy chủ & Thành phần máy chủ** | ✅ Có, tối ưu cho SSR / React Server Components | ⚠️ Hỗ trợ ở cấp trang nhưng cần truyền các hàm t-functions trên cây thành phần cho các thành phần máy chủ con | ❌ Không hỗ trợ, cần truyền các hàm t-functions trên cây thành phần cho các thành phần máy chủ con |
|
|
68
|
+
| **Tree-shaking (chỉ tải nội dung được sử dụng)** | ✅ Có, theo từng thành phần tại thời điểm build thông qua các plugin Babel/SWC | ⚠️ Thường tải tất cả (có thể cải thiện bằng cách sử dụng namespace/phân tách mã) | ⚠️ Thường tải tất cả |
|
|
69
|
+
| **Tải lười (Lazy loading)** | ✅ Có, theo từng locale / từng từ điển | ✅ Có (ví dụ, backend/namespace theo yêu cầu) | ✅ Có (chia nhỏ gói locale) |
|
|
70
|
+
| **Loại bỏ nội dung không sử dụng (Purge unused content)** | ✅ Có, theo từng từ điển tại thời điểm build | ❌ Không, chỉ qua phân đoạn namespace thủ công | ❌ Không, tất cả các thông điệp khai báo đều được đóng gói |
|
|
71
|
+
| **Quản lý Dự án Lớn** | ✅ Khuyến khích mô-đun, phù hợp với hệ thống thiết kế | ⚠️ Cần kỷ luật tệp tốt | ⚠️ Các danh mục trung tâm có thể trở nên lớn |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## So sánh chuyên sâu
|
|
76
|
+
|
|
77
|
+
### 1) Kiến trúc & khả năng mở rộng
|
|
78
|
+
|
|
79
|
+
- **react-intl / react-i18next**: Hầu hết các thiết lập duy trì **thư mục locale tập trung** theo từng ngôn ngữ, đôi khi chia nhỏ theo **namespace** (i18next). Hoạt động tốt ban đầu nhưng trở thành một bề mặt chia sẻ khi ứng dụng phát triển.
|
|
80
|
+
- **Intlayer**: Khuyến khích sử dụng **từ điển theo từng component (hoặc theo từng tính năng)** **đặt cùng vị trí** với giao diện người dùng mà chúng phục vụ. Điều này giúp giữ quyền sở hữu rõ ràng, dễ dàng sao chép/di chuyển các component, và giảm thiểu sự thay đổi key giữa các nhóm. Nội dung không sử dụng cũng dễ dàng được xác định và loại bỏ.
|
|
81
|
+
|
|
82
|
+
**Tại sao điều này quan trọng:** Nội dung mô-đun phản ánh giao diện người dùng mô-đun. Các codebase React lớn sẽ sạch hơn khi bản dịch được đặt cùng với các component mà chúng thuộc về.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 2) TypeScript & an toàn
|
|
87
|
+
|
|
88
|
+
- **react-intl**: Kiểu dữ liệu vững chắc, nhưng **không tự động tạo kiểu key**; bạn phải tự thực thi các mẫu an toàn.
|
|
89
|
+
- **react-i18next**: Kiểu dữ liệu mạnh cho hooks; **kiểu key nghiêm ngặt** thường yêu cầu cấu hình thêm hoặc các trình tạo mã.
|
|
90
|
+
- **Intlayer**: **Tự động tạo kiểu nghiêm ngặt** từ nội dung của bạn. Tự động hoàn thành trong IDE và **lỗi biên dịch** giúp phát hiện lỗi chính tả và thiếu key trước khi chạy.
|
|
91
|
+
|
|
92
|
+
**Tại sao điều này quan trọng:** Đưa lỗi về phía **trước** (trong quá trình build/CI) giúp giảm sự cố trong môi trường sản xuất và tăng tốc vòng phản hồi của nhà phát triển.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 3) Xử lý thiếu bản dịch
|
|
97
|
+
|
|
98
|
+
- **react-intl / react-i18next**: Mặc định sử dụng **giải pháp thay thế khi chạy** (hiển thị key hoặc locale mặc định). Bạn có thể thêm linting/plugin, nhưng không đảm bảo trong quá trình build.
|
|
99
|
+
- **Intlayer**: **Phát hiện trong thời gian build** với cảnh báo hoặc lỗi khi thiếu locale/key bắt buộc.
|
|
100
|
+
|
|
101
|
+
**Tại sao điều này quan trọng:** CI thất bại khi thiếu chuỗi giúp ngăn chặn việc “tiếng Anh bí ẩn” lọt vào giao diện không phải tiếng Anh.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### 4) Nội dung phong phú & định dạng
|
|
106
|
+
|
|
107
|
+
- **react-intl**: Hỗ trợ **ICU** xuất sắc cho số nhiều, lựa chọn, ngày/tháng/số, và cấu thành thông điệp. Có thể sử dụng JSX, nhưng mô hình tư duy vẫn tập trung vào thông điệp.
|
|
108
|
+
- **react-i18next**: Nội suy linh hoạt và **`<Trans>`** để nhúng các phần tử/thành phần; ICU có sẵn qua plugin.
|
|
109
|
+
- **Intlayer**: Các tệp nội dung có thể bao gồm **các nút phong phú** (JSX/Markdown/thành phần) và **metadata**. Định dạng sử dụng Intl bên trong; các mẫu số nhiều rất tiện dụng.
|
|
110
|
+
|
|
111
|
+
**Tại sao điều này quan trọng:** Văn bản UI phức tạp (liên kết, đoạn in đậm, thành phần nội tuyến) trở nên dễ dàng hơn khi thư viện hỗ trợ các nút React một cách rõ ràng.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 5) Hiệu năng & hành vi tải dữ liệu
|
|
116
|
+
|
|
117
|
+
- **react-intl / react-i18next**: Bạn thường tự quản lý **chia nhỏ catalog** và **tải chậm** thủ công (namespace/import động). Hiệu quả nhưng đòi hỏi kỷ luật.
|
|
118
|
+
- **Intlayer**: **Loại bỏ cây** các từ điển không sử dụng và hỗ trợ **tải chậm theo từng từ điển/từng locale** ngay khi cài đặt.
|
|
119
|
+
|
|
120
|
+
**Tại sao điều này quan trọng:** Gói nhỏ hơn và ít chuỗi không sử dụng giúp cải thiện hiệu suất khởi động và điều hướng.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### 6) DX, công cụ & bảo trì
|
|
125
|
+
|
|
126
|
+
- **react-intl / react-i18next**: Hệ sinh thái cộng đồng rộng lớn; đối với quy trình biên tập, bạn thường sử dụng các nền tảng nội địa hóa bên ngoài.
|
|
127
|
+
- **Intlayer**: Cung cấp **Trình chỉnh sửa trực quan miễn phí** và **CMS tùy chọn** (giữ nội dung trong Git hoặc tách ra bên ngoài). Cũng cung cấp **tiện ích mở rộng VSCode** để soạn thảo nội dung và **dịch hỗ trợ AI** sử dụng các khóa nhà cung cấp của bạn.
|
|
128
|
+
|
|
129
|
+
**Tại sao điều này quan trọng:** Công cụ tích hợp rút ngắn vòng lặp giữa các nhà phát triển và tác giả nội dung - ít mã kết dính hơn, ít phụ thuộc nhà cung cấp hơn.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Khi nào nên chọn cái nào?
|
|
134
|
+
|
|
135
|
+
- **Chọn react-intl** nếu bạn muốn định dạng thông điệp **ưu tiên ICU** với API đơn giản, tuân thủ tiêu chuẩn và đội ngũ của bạn thoải mái trong việc duy trì các catalog và kiểm tra an toàn thủ công.
|
|
136
|
+
- **Chọn react-i18next** nếu bạn cần **hệ sinh thái rộng lớn của i18next** (bộ phát hiện, backend, plugin ICU, tích hợp) và chấp nhận cấu hình nhiều hơn để có được sự linh hoạt.
|
|
137
|
+
- **Chọn Intlayer** nếu bạn đánh giá cao **nội dung theo phạm vi component**, **TypeScript nghiêm ngặt**, **đảm bảo tại thời điểm build**, **tree-shaking**, và công cụ biên tập **đầy đủ tính năng** - đặc biệt dành cho các ứng dụng React **lớn, mô-đun hóa**, hệ thống thiết kế, v.v.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Tương tác với `react-intl` và `react-i18next`
|
|
142
|
+
|
|
143
|
+
`intlayer` cũng có thể giúp quản lý các namespace của bạn trong `react-intl` và `react-i18next`.
|
|
144
|
+
|
|
145
|
+
Sử dụng `intlayer`, bạn có thể khai báo nội dung theo định dạng của thư viện i18n yêu thích của bạn, và intlayer sẽ tạo ra các namespace tại vị trí bạn chọn (ví dụ: `/messages/{{locale}}/{{namespace}}.json`).
|
|
146
|
+
|
|
147
|
+
Tham khảo các tùy chọn [`dictionaryOutput` và `i18nextResourcesDir`](https://intlayer.org/doc/concept/configuration#content-configuration) để biết thêm chi tiết.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Sao trên GitHub
|
|
152
|
+
|
|
153
|
+
Các ngôi sao trên GitHub là một chỉ số mạnh mẽ về độ phổ biến của dự án, sự tin tưởng của cộng đồng và tính liên quan lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, các ngôi sao giúp so sánh mức độ thu hút giữa các lựa chọn thay thế và cung cấp cái nhìn sâu sắc về sự phát triển của hệ sinh thái.
|
|
154
|
+
|
|
155
|
+
## [](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&aymericzip/intlayer)
|
|
156
|
+
|
|
157
|
+
## Kết luận
|
|
158
|
+
|
|
159
|
+
Cả ba thư viện đều thực hiện việc bản địa hóa React một cách hiệu quả. Điểm khác biệt là bạn phải xây dựng bao nhiêu **cơ sở hạ tầng** để đạt được một thiết lập **an toàn, có thể mở rộng**:
|
|
160
|
+
|
|
161
|
+
- Với **Intlayer**, **nội dung mô-đun**, **kiểu TS nghiêm ngặt**, **an toàn thời gian xây dựng**, **gói tree-shaken**, và **công cụ biên tập** là mặc định - không phải là công việc vặt.
|
|
162
|
+
- Nếu nhóm của bạn coi trọng **khả năng bảo trì và tốc độ** trong các ứng dụng React đa ngôn ngữ, dựa trên thành phần, Intlayer cung cấp quy trình làm việc cho nhà phát triển và nội dung **đầy đủ nhất** hiện nay.
|
|
163
|
+
|
|
164
|
+
Tham khảo tài liệu ['Tại sao chọn Intlayer?'](https://intlayer.org/doc/why) để biết thêm chi tiết.
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-08-11
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
|
+
title: vue-i18n vs Intlayer
|
|
5
|
+
description: So sánh vue-i18n với Intlayer cho quốc tế hóa (i18n) trong ứng dụng Vue/Nuxt
|
|
6
|
+
keywords:
|
|
7
|
+
- vue-i18n
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Quốc tế hóa
|
|
10
|
+
- i18n
|
|
11
|
+
- Blog
|
|
12
|
+
- Vue
|
|
13
|
+
- Nuxt
|
|
14
|
+
- JavaScript
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- vue-i18n-vs-intlayer
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# vue-i18n VS Intlayer | Quốc tế hóa Vue (i18n)
|
|
21
|
+
|
|
22
|
+
Hướng dẫn này so sánh hai lựa chọn i18n phổ biến cho **Vue 3** (và **Nuxt**): **vue-i18n** và **Intlayer**.
|
|
23
|
+
Chúng tôi tập trung vào công cụ Vue hiện đại (Vite, Composition API) và đánh giá:
|
|
24
|
+
|
|
25
|
+
1. **Kiến trúc & tổ chức nội dung**
|
|
26
|
+
2. **TypeScript & tính an toàn**
|
|
27
|
+
3. **Xử lý dịch thiếu**
|
|
28
|
+
4. **Chiến lược định tuyến & URL**
|
|
29
|
+
5. **Hiệu năng & hành vi tải**
|
|
30
|
+
6. **Trải nghiệm nhà phát triển (DX), công cụ & bảo trì**
|
|
31
|
+
7. **SEO & khả năng mở rộng dự án lớn**
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
> **tóm tắt**: Cả hai đều có thể địa phương hóa ứng dụng Vue. Nếu bạn muốn **nội dung giới hạn trong component**, **kiểu TypeScript nghiêm ngặt**, **kiểm tra khóa thiếu trong thời gian build**, **từ điển được tree-shaking**, và **bộ trợ giúp router/SEO tích hợp sẵn** cùng với **Trình chỉnh sửa trực quan & dịch thuật AI**, thì **Intlayer** là lựa chọn hiện đại và đầy đủ hơn.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Vị trí tổng quan
|
|
40
|
+
|
|
41
|
+
- **vue-i18n** - Thư viện i18n tiêu chuẩn cho Vue. Định dạng thông điệp linh hoạt (theo kiểu ICU), các khối SFC `<i18n>` cho thông điệp cục bộ, và hệ sinh thái rộng lớn. Việc đảm bảo an toàn và bảo trì quy mô lớn chủ yếu phụ thuộc vào bạn.
|
|
42
|
+
- **Intlayer** - Mô hình nội dung tập trung vào component cho Vue/Vite/Nuxt với **kiểu TS nghiêm ngặt**, **kiểm tra trong thời gian build**, **tree-shaking**, **bộ trợ giúp router & SEO**, tùy chọn **Trình chỉnh sửa trực quan/CMS**, và **dịch thuật hỗ trợ AI**.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## So sánh tính năng song song (tập trung vào Vue)
|
|
47
|
+
|
|
48
|
+
| Tính năng | **Intlayer** | **vue-i18n** |
|
|
49
|
+
| ----------------------------------------------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
|
|
50
|
+
| **Dịch gần component** | ✅ Có, nội dung được đặt cùng component (ví dụ: `MyComp.content.ts`) | ✅ Có, qua các block `<i18n>` trong SFC (tùy chọn) |
|
|
51
|
+
| **Tích hợp TypeScript** | ✅ Nâng cao, tự động tạo kiểu **nghiêm ngặt** và tự động hoàn thành key | ✅ Kiểu tốt; **an toàn key nghiêm ngặt yêu cầu thiết lập/kỷ luật bổ sung** |
|
|
52
|
+
| **Phát hiện dịch thiếu** | ✅ Cảnh báo/lỗi **trong thời gian build** và hiển thị trong TS | ⚠️ Thay thế/cảnh báo khi chạy |
|
|
53
|
+
| **Nội dung phong phú (components/Markdown)** | ✅ Hỗ trợ trực tiếp các node phong phú và các file nội dung Markdown | ⚠️ Hạn chế (components qua `<i18n-t>`, Markdown qua plugin bên ngoài) |
|
|
54
|
+
| **Dịch thuật hỗ trợ AI** | ✅ Quy trình tích hợp sẵn sử dụng key nhà cung cấp AI của bạn | ❌ Không tích hợp sẵn |
|
|
55
|
+
| **Trình chỉnh sửa trực quan / CMS** | ✅ Trình chỉnh sửa trực quan miễn phí & CMS tùy chọn | ❌ Không tích hợp sẵn (sử dụng nền tảng bên ngoài) |
|
|
56
|
+
| **Định tuyến địa phương hóa** | ✅ Các helper cho Vue Router/Nuxt để tạo đường dẫn, URL và `hreflang` địa phương hóa | ⚠️ Không phải lõi (sử dụng Nuxt i18n hoặc cấu hình Vue Router tùy chỉnh) |
|
|
57
|
+
| **Tạo tuyến động** | ✅ Có | ❌ Không cung cấp (Nuxt i18n cung cấp) |
|
|
58
|
+
| **Phân số nhiều & định dạng** | ✅ Mẫu liệt kê; bộ định dạng dựa trên Intl | ✅ Tin nhắn kiểu ICU; bộ định dạng Intl |
|
|
59
|
+
| **Định dạng nội dung** | ✅ `.ts`, `.js`, `.json`, `.md`, `.txt` (YAML đang phát triển) | ✅ `.json`, `.js` (cộng với các khối SFC `<i18n>`) |
|
|
60
|
+
| **Hỗ trợ ICU** | ⚠️ Đang phát triển | ✅ Có |
|
|
61
|
+
| **Các helper SEO (sơ đồ trang, robots, metadata)** | ✅ Các helper tích hợp sẵn (không phụ thuộc framework) | ❌ Không phải lõi (Nuxt i18n/cộng đồng) |
|
|
62
|
+
| **SSR/SSG** | ✅ Hoạt động với Vue SSR và Nuxt; không chặn việc render tĩnh | ✅ Hoạt động với Vue SSR/Nuxt |
|
|
63
|
+
| **Tree-shaking (chỉ đóng gói nội dung được sử dụng)** | ✅ Theo từng component tại thời điểm build | ⚠️ Một phần; yêu cầu tách code thủ công / thông điệp async |
|
|
64
|
+
| **Tải lười (Lazy loading)** | ✅ Theo từng locale / từng từ điển | ✅ Hỗ trợ thông điệp locale bất đồng bộ (async) |
|
|
65
|
+
| **Xóa nội dung không sử dụng** | ✅ Có (thời điểm build) | ❌ Không tích hợp sẵn |
|
|
66
|
+
| **Khả năng duy trì dự án lớn** | ✅ Khuyến khích cấu trúc mô-đun, thân thiện với hệ thống thiết kế | ✅ Có thể, nhưng cần kỷ luật nghiêm ngặt về file/namespace |
|
|
67
|
+
| **Hệ sinh thái / cộng đồng** | ⚠️ Nhỏ hơn nhưng đang phát triển nhanh | ✅ Lớn và trưởng thành trong hệ sinh thái Vue |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## So sánh chi tiết
|
|
72
|
+
|
|
73
|
+
### 1) Kiến trúc & khả năng mở rộng
|
|
74
|
+
|
|
75
|
+
- **vue-i18n**: Các thiết lập phổ biến sử dụng **danh mục tập trung** theo từng locale (có thể chia nhỏ thành các file/namespace). Các block SFC `<i18n>` cho phép thông điệp cục bộ nhưng các nhóm thường quay lại dùng danh mục chia sẻ khi dự án phát triển.
|
|
76
|
+
- **Intlayer**: Khuyến khích **từ điển theo từng component** được lưu trữ bên cạnh component mà nó phục vụ. Điều này giảm xung đột giữa các nhóm, giữ cho nội dung dễ tìm kiếm và tự nhiên giới hạn sự lệch pha/các khóa không sử dụng.
|
|
77
|
+
|
|
78
|
+
**Tại sao điều này quan trọng:** Trong các ứng dụng Vue lớn hoặc hệ thống thiết kế, **nội dung mô-đun** mở rộng tốt hơn so với các danh mục đơn khối.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### 2) TypeScript & an toàn
|
|
83
|
+
|
|
84
|
+
- **vue-i18n**: Hỗ trợ TS tốt; **kiểu khóa nghiêm ngặt** thường cần các schema/generic tùy chỉnh và quy ước cẩn thận.
|
|
85
|
+
- **Intlayer**: **Tạo kiểu nghiêm ngặt** từ nội dung của bạn, cung cấp **tự động hoàn thành trong IDE** và **lỗi biên dịch** cho lỗi chính tả hoặc thiếu key.
|
|
86
|
+
|
|
87
|
+
**Tại sao điều này quan trọng:** Kiểu dữ liệu mạnh giúp phát hiện lỗi **trước** khi chạy.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### 3) Xử lý dịch thiếu
|
|
92
|
+
|
|
93
|
+
- **vue-i18n**: Cảnh báo/fallback **thời gian chạy** (ví dụ, fallback locale hoặc key).
|
|
94
|
+
- **Intlayer**: Phát hiện **thời gian xây dựng** với cảnh báo/lỗi trên các locale và key.
|
|
95
|
+
|
|
96
|
+
**Tại sao điều này quan trọng:** Việc kiểm soát thời gian xây dựng giữ cho giao diện sản phẩm sạch và nhất quán.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### 4) Chiến lược định tuyến & URL (Vue Router/Nuxt)
|
|
101
|
+
|
|
102
|
+
- **Cả hai** đều có thể làm việc với các route được địa phương hóa.
|
|
103
|
+
- **Intlayer** cung cấp các trợ giúp để **tạo đường dẫn có địa phương hóa**, **quản lý tiền tố ngôn ngữ**, và phát ra **`<link rel="alternate" hreflang>`** cho SEO. Với Nuxt, nó bổ sung cho hệ thống định tuyến của framework.
|
|
104
|
+
|
|
105
|
+
**Tại sao điều này quan trọng:** Ít lớp kết dính tùy chỉnh hơn và **SEO sạch hơn** trên các ngôn ngữ.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### 5) Hiệu năng & hành vi tải
|
|
110
|
+
|
|
111
|
+
- **vue-i18n**: Hỗ trợ thông điệp ngôn ngữ bất đồng bộ; việc tránh đóng gói quá mức là do bạn (chia catalog cẩn thận).
|
|
112
|
+
- **Intlayer**: **Tree-shake** khi build và **tải lười theo từ điển/ngôn ngữ**. Nội dung không dùng sẽ không được đóng gói.
|
|
113
|
+
|
|
114
|
+
**Tại sao điều này quan trọng:** Gói nhỏ hơn và khởi động nhanh hơn cho các ứng dụng Vue đa ngôn ngữ.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### 6) Trải nghiệm nhà phát triển & công cụ hỗ trợ
|
|
119
|
+
|
|
120
|
+
- **vue-i18n**: Tài liệu và cộng đồng trưởng thành; bạn thường sẽ dựa vào **các nền tảng địa phương hóa bên ngoài** cho quy trình biên tập.
|
|
121
|
+
- **Intlayer**: Cung cấp **Trình chỉnh sửa trực quan miễn phí**, **CMS** tùy chọn (thân thiện với Git hoặc tách rời), một **tiện ích mở rộng VSCode**, các tiện ích **CLI/CI**, và **dịch hỗ trợ AI** sử dụng khóa nhà cung cấp của riêng bạn.
|
|
122
|
+
|
|
123
|
+
**Tại sao điều này quan trọng:** Giảm chi phí vận hành và rút ngắn vòng lặp phát triển – nội dung.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 7) SEO, SSR & SSG
|
|
128
|
+
|
|
129
|
+
- **Cả hai** đều hoạt động với Vue SSR và Nuxt.
|
|
130
|
+
- **Intlayer**: Thêm các **trợ giúp SEO** (sơ đồ trang web/metadata/`hreflang`) không phụ thuộc vào framework và hoạt động tốt với các bản build Vue/Nuxt.
|
|
131
|
+
|
|
132
|
+
**Tại sao điều này quan trọng:** SEO quốc tế mà không cần cấu hình phức tạp.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Tại sao chọn Intlayer? (Vấn đề & cách tiếp cận)
|
|
137
|
+
|
|
138
|
+
Hầu hết các bộ công cụ i18n (bao gồm **vue-i18n**) bắt đầu từ các **danh mục tập trung**:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
.
|
|
142
|
+
├── locales
|
|
143
|
+
│ ├── en.json
|
|
144
|
+
│ ├── es.json
|
|
145
|
+
│ └── fr.json
|
|
146
|
+
└── src
|
|
147
|
+
└── components
|
|
148
|
+
└── MyComponent.vue
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Hoặc với các thư mục theo từng locale:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
.
|
|
155
|
+
├── locales
|
|
156
|
+
│ ├── en
|
|
157
|
+
│ │ ├── footer.json
|
|
158
|
+
│ │ └── navbar.json
|
|
159
|
+
│ ├── fr
|
|
160
|
+
│ │ ├── footer.json
|
|
161
|
+
│ │ └── navbar.json
|
|
162
|
+
│ └── es
|
|
163
|
+
│ ├── footer.json
|
|
164
|
+
│ └── navbar.json
|
|
165
|
+
└── src
|
|
166
|
+
└── components
|
|
167
|
+
└── MyComponent.vue
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Điều này thường làm chậm phát triển khi ứng dụng ngày càng lớn:
|
|
171
|
+
|
|
172
|
+
1. **Đối với một component mới** bạn tạo/sửa các catalog từ xa, kết nối namespace, và dịch (thường bằng cách sao chép/dán thủ công từ các công cụ AI).
|
|
173
|
+
2. **Khi thay đổi component** bạn phải tìm các khóa dùng chung, dịch, giữ các locale đồng bộ, loại bỏ các khóa không còn dùng, và căn chỉnh cấu trúc JSON.
|
|
174
|
+
|
|
175
|
+
**Intlayer** phân vùng nội dung **theo từng component** và giữ nó **gần với mã nguồn**, giống như cách chúng ta đã làm với CSS, stories, tests và docs:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
.
|
|
179
|
+
└── components
|
|
180
|
+
└── MyComponent
|
|
181
|
+
├── MyComponent.content.ts
|
|
182
|
+
└── MyComponent.vue
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Khai báo nội dung** (theo từng component):
|
|
186
|
+
|
|
187
|
+
```ts fileName="./components/MyComponent/MyComponent.content.ts"
|
|
188
|
+
import { t, type Dictionary } from "intlayer";
|
|
189
|
+
|
|
190
|
+
const componentExampleContent = {
|
|
191
|
+
key: "component-example",
|
|
192
|
+
content: {
|
|
193
|
+
greeting: t({
|
|
194
|
+
en: "Hello World",
|
|
195
|
+
es: "Hola Mundo",
|
|
196
|
+
fr: "Bonjour le monde",
|
|
197
|
+
}),
|
|
198
|
+
},
|
|
199
|
+
} satisfies Dictionary;
|
|
200
|
+
|
|
201
|
+
export default componentExampleContent;
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Sử dụng trong Vue** (Composition API):
|
|
205
|
+
|
|
206
|
+
```vue fileName="./components/MyComponent/MyComponent.vue"
|
|
207
|
+
<script setup lang="ts">
|
|
208
|
+
import { useIntlayer } from "vue-intlayer"; // Tích hợp Vue
|
|
209
|
+
const { greeting } = useIntlayer("component-example");
|
|
210
|
+
</script>
|
|
211
|
+
|
|
212
|
+
<template>
|
|
213
|
+
<span>{{ greeting }}</span>
|
|
214
|
+
</template>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Cách tiếp cận này:
|
|
218
|
+
|
|
219
|
+
- **Tăng tốc phát triển** (khai báo một lần; IDE/AI tự động hoàn thành).
|
|
220
|
+
- **Làm sạch codebase** (1 component = 1 dictionary).
|
|
221
|
+
- **Dễ dàng sao chép/di chuyển** (sao chép một component cùng với nội dung của nó).
|
|
222
|
+
- **Tránh các khóa chết** (component không sử dụng sẽ không import nội dung).
|
|
223
|
+
- **Tối ưu hóa tải** (component tải chậm sẽ mang theo nội dung của nó).
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Các tính năng bổ sung của Intlayer (liên quan đến Vue)
|
|
228
|
+
|
|
229
|
+
- **Hỗ trợ đa framework**: Hoạt động với Vue, Nuxt, Vite, React, Express, và nhiều hơn nữa.
|
|
230
|
+
- **Quản lý nội dung bằng JavaScript**: Khai báo trong code với sự linh hoạt hoàn toàn.
|
|
231
|
+
- **Tệp khai báo theo từng locale**: Khởi tạo tất cả các locale và để công cụ tự động tạo phần còn lại.
|
|
232
|
+
- **Môi trường an toàn kiểu**: Cấu hình TS mạnh mẽ với tính năng tự động hoàn thành.
|
|
233
|
+
- **Truy xuất nội dung đơn giản**: Một hook/composable duy nhất để lấy toàn bộ nội dung cho một từ điển.
|
|
234
|
+
- **Codebase có tổ chức**: 1 component = 1 từ điển trong cùng một thư mục.
|
|
235
|
+
- **Tăng cường định tuyến**: Các trợ giúp cho **Vue Router/Nuxt** với đường dẫn và metadata theo locale.
|
|
236
|
+
- **Hỗ trợ Markdown**: Nhập Markdown từ xa/địa phương theo từng locale; hiển thị frontmatter cho code.
|
|
237
|
+
- **Trình soạn thảo trực quan miễn phí & CMS tùy chọn**: Soạn thảo mà không cần nền tảng localization trả phí; đồng bộ thân thiện với Git.
|
|
238
|
+
- **Nội dung có thể tree-shake**: Chỉ đóng gói những gì được sử dụng; hỗ trợ tải lười.
|
|
239
|
+
- **Thân thiện với render tĩnh**: Không chặn SSG.
|
|
240
|
+
- **Dịch thuật hỗ trợ AI**: Dịch sang 231 ngôn ngữ sử dụng nhà cung cấp AI/API key của riêng bạn.
|
|
241
|
+
- **Máy chủ MCP & tiện ích mở rộng VSCode**: Tự động hóa quy trình làm việc i18n và soạn thảo ngay trong IDE của bạn.
|
|
242
|
+
- **Tương tác đa nền tảng**: Kết nối với **vue-i18n**, **react-i18next**, và **react-intl** khi cần thiết.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Khi nào nên chọn cái nào?
|
|
247
|
+
|
|
248
|
+
- **Chọn vue-i18n** nếu bạn muốn **phương pháp Vue tiêu chuẩn**, bạn thoải mái quản lý catalog/namespace tự mình, và ứng dụng của bạn có kích thước **nhỏ đến trung bình** (hoặc bạn đã sử dụng Nuxt i18n).
|
|
249
|
+
- **Chọn Intlayer** nếu bạn đánh giá cao **nội dung theo phạm vi component**, **TypeScript nghiêm ngặt**, **đảm bảo thời gian build**, **tree-shaking**, và **công cụ routing/SEO/editor tích hợp sẵn** - đặc biệt dành cho **codebase Vue/Nuxt lớn, mô-đun**, hệ thống thiết kế, v.v.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Tương tác với vue-i18n
|
|
254
|
+
|
|
255
|
+
`intlayer` cũng có thể giúp quản lý các namespace của `vue-i18n` của bạn.
|
|
256
|
+
|
|
257
|
+
Sử dụng `intlayer`, bạn có thể khai báo nội dung theo định dạng của thư viện i18n yêu thích của bạn, và intlayer sẽ tạo ra các namespace tại vị trí bạn chọn (ví dụ: `/messages/{{locale}}/{{namespace}}.json`).
|
|
258
|
+
|
|
259
|
+
Tham khảo các tùy chọn [`dictionaryOutput` và `i18nextResourcesDir`](https://intlayer.org/doc/concept/configuration#content-configuration) để biết thêm chi tiết.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Sao GitHub
|
|
264
|
+
|
|
265
|
+
Sao trên GitHub là một chỉ số mạnh mẽ về độ phổ biến của dự án, sự tin tưởng của cộng đồng và tính liên quan lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, sao giúp so sánh mức độ thu hút giữa các lựa chọn thay thế và cung cấp cái nhìn sâu sắc về sự phát triển của hệ sinh thái.
|
|
266
|
+
|
|
267
|
+
[](https://www.star-history.com/#intlify/vue-i18n&aymericzip/intlayer)
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Kết luận
|
|
272
|
+
|
|
273
|
+
Cả **vue-i18n** và **Intlayer** đều hỗ trợ nội địa hóa ứng dụng Vue rất tốt. Sự khác biệt là **bạn phải tự xây dựng bao nhiêu** để đạt được một thiết lập mạnh mẽ và có thể mở rộng:
|
|
274
|
+
|
|
275
|
+
- Với **Intlayer**, **nội dung mô-đun**, **TypeScript nghiêm ngặt**, **an toàn thời gian biên dịch**, **gói được tree-shaken**, và **công cụ cho router/SEO/trình soạn thảo** đều có sẵn **ngay khi sử dụng**.
|
|
276
|
+
- Nếu nhóm của bạn ưu tiên **khả năng bảo trì và tốc độ** trong một ứng dụng Vue/Nuxt đa ngôn ngữ, dựa trên component, Intlayer cung cấp trải nghiệm **toàn diện nhất** hiện nay.
|
|
277
|
+
|
|
278
|
+
Tham khảo tài liệu ['Tại sao chọn Intlayer?'](https://intlayer.org/doc/why) để biết thêm chi tiết.
|