@intlayer/docs 7.0.7 → 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,346 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-03-01
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Lộ trình phát triển
|
|
5
|
+
description: Khám phá lộ trình phát triển của Intlayer. Xem tất cả các tính năng mà Intlayer đã triển khai và dự định sẽ triển khai.
|
|
6
|
+
keywords:
|
|
7
|
+
- Lộ trình phát triển
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Quốc tế hóa
|
|
10
|
+
- CMS
|
|
11
|
+
- Hệ thống quản lý nội dung
|
|
12
|
+
- Trình chỉnh sửa trực quan
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- roadmap
|
|
16
|
+
history:
|
|
17
|
+
- version: 5.5.10
|
|
18
|
+
date: 2025-06-30
|
|
19
|
+
changes: Thêm hỗ trợ Preact và Nuxt, MCP Server, cập nhật CLI
|
|
20
|
+
- version: 5.5.11
|
|
21
|
+
date: 2025-06-29
|
|
22
|
+
changes: Thêm các lệnh `docs`
|
|
23
|
+
- version: 5.5.10
|
|
24
|
+
date: 2025-06-29
|
|
25
|
+
changes: Khởi tạo lịch sử
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Intlayer: Tổng quan tính năng & Lộ trình phát triển
|
|
29
|
+
|
|
30
|
+
Intlayer là một giải pháp quản lý nội dung và quốc tế hóa được thiết kế để tối ưu hóa cách bạn khai báo, quản lý và cập nhật nội dung trên các ứng dụng của mình. Nó cung cấp các tính năng mạnh mẽ như khai báo nội dung tập trung hoặc phân tán, các tùy chọn quốc tế hóa đa dạng, hỗ trợ Markdown, kết xuất có điều kiện, tích hợp TypeScript/JavaScript/JSON, và nhiều hơn nữa. Dưới đây là tổng quan toàn diện về những gì Intlayer hiện đang cung cấp, cùng với các tính năng dự kiến trong lộ trình phát triển sắp tới.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Mục lục
|
|
35
|
+
|
|
36
|
+
<TOC/>
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Các tính năng hiện tại
|
|
41
|
+
|
|
42
|
+
### 1. Khai báo nội dung
|
|
43
|
+
|
|
44
|
+
#### Tập trung hoặc phân tán
|
|
45
|
+
|
|
46
|
+
- **Tập trung**: Khai báo toàn bộ nội dung của bạn trong một tệp lớn duy nhất ở gốc ứng dụng, tương tự như i18next, để bạn có thể quản lý mọi thứ ở một nơi.
|
|
47
|
+
- **Phân tán**: Ngoài ra, bạn có thể chia nội dung thành các tệp riêng biệt ở cấp độ component hoặc tính năng để dễ dàng bảo trì hơn. Điều này giữ nội dung của bạn gần với mã liên quan (component, test, Storybook, v.v.). Việc loại bỏ một component cũng đảm bảo rằng bất kỳ nội dung liên quan nào cũng được xóa, tránh dữ liệu thừa làm lộn xộn codebase của bạn.
|
|
48
|
+
|
|
49
|
+
> Tài nguyên:
|
|
50
|
+
>
|
|
51
|
+
> - [Khai báo nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md)
|
|
52
|
+
|
|
53
|
+
### 2. Quốc tế hóa
|
|
54
|
+
|
|
55
|
+
- Hỗ trợ **230 ngôn ngữ và vùng miền** (bao gồm các biến thể khu vực như tiếng Pháp (Pháp), tiếng Anh (Canada), tiếng Anh (Anh), tiếng Bồ Đào Nha (Bồ Đào Nha), v.v.).
|
|
56
|
+
- Dễ dàng quản lý bản dịch cho tất cả các vùng miền này từ một nơi.
|
|
57
|
+
|
|
58
|
+
> Tài nguyên:
|
|
59
|
+
>
|
|
60
|
+
> - [Quốc tế hóa](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/translation.md)
|
|
61
|
+
|
|
62
|
+
### 3. Hỗ trợ Markdown
|
|
63
|
+
|
|
64
|
+
- Khai báo nội dung bằng **Markdown**, cho phép bạn tự động định dạng văn bản với các đoạn văn, tiêu đề, liên kết và nhiều hơn nữa.
|
|
65
|
+
- Lý tưởng cho các bài đăng blog, bài viết, trang tài liệu hoặc bất kỳ trường hợp nào cần định dạng văn bản phong phú.
|
|
66
|
+
|
|
67
|
+
> Tài nguyên:
|
|
68
|
+
>
|
|
69
|
+
> - [Markdown](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/markdown.md)
|
|
70
|
+
|
|
71
|
+
### 4. Hỗ trợ tệp bên ngoài
|
|
72
|
+
|
|
73
|
+
- Nhập nội dung từ các tệp bên ngoài dưới dạng văn bản, như TXT, HTML, JSON, YAML hoặc CSV.
|
|
74
|
+
- Sử dụng hàm `file` trong Intlayer để nhúng nội dung tệp bên ngoài vào từ điển, đảm bảo tích hợp liền mạch với Trình chỉnh sửa trực quan Intlayer và CMS.
|
|
75
|
+
- Hỗ trợ cập nhật nội dung động, nghĩa là khi tệp nguồn được chỉnh sửa, nội dung sẽ tự động cập nhật trong Intlayer.
|
|
76
|
+
- Cho phép quản lý nội dung đa ngôn ngữ bằng cách liên kết các tệp Markdown theo ngôn ngữ một cách động.
|
|
77
|
+
|
|
78
|
+
> Tài nguyên:
|
|
79
|
+
>
|
|
80
|
+
> - [Nhúng nội dung tệp](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/file.md)
|
|
81
|
+
|
|
82
|
+
### 5. Nội dung động & Lấy hàm
|
|
83
|
+
|
|
84
|
+
Intlayer cung cấp nhiều phương pháp để chèn và quản lý nội dung động, đảm bảo tính linh hoạt và thích ứng trong việc phân phối nội dung. Điều này bao gồm các hàm để chèn nội dung động, kết xuất có điều kiện, liệt kê, lồng nhau và lấy hàm.
|
|
85
|
+
|
|
86
|
+
1. Chèn nội dung động
|
|
87
|
+
|
|
88
|
+
Sử dụng hàm insert để định nghĩa nội dung với các chỗ giữ chỗ ({{name}}, {{age}}, v.v.).
|
|
89
|
+
|
|
90
|
+
Cho phép nội dung dạng mẫu thích ứng dựa trên đầu vào của người dùng, phản hồi API hoặc các nguồn dữ liệu động khác.
|
|
91
|
+
|
|
92
|
+
Hoạt động mượt mà với các cấu hình TypeScript, ESM, CommonJS và JSON.
|
|
93
|
+
|
|
94
|
+
Dễ dàng tích hợp với React Intlayer và Next Intlayer bằng cách sử dụng useIntlayer.
|
|
95
|
+
|
|
96
|
+
2. Kết xuất có điều kiện
|
|
97
|
+
|
|
98
|
+
Định nghĩa nội dung thích ứng dựa trên các điều kiện cụ thể của người dùng, chẳng hạn như ngôn ngữ hoặc trạng thái xác thực.
|
|
99
|
+
|
|
100
|
+
Tùy chỉnh trải nghiệm cá nhân hóa mà không cần sao chép nội dung qua nhiều tệp.
|
|
101
|
+
|
|
102
|
+
3. Liệt kê & Số nhiều
|
|
103
|
+
|
|
104
|
+
Sử dụng hàm enu để định nghĩa các biến thể nội dung dựa trên giá trị số, phạm vi hoặc khóa tùy chỉnh.
|
|
105
|
+
|
|
106
|
+
Đảm bảo tự động chọn cụm từ chính xác dựa trên giá trị đã cho.
|
|
107
|
+
|
|
108
|
+
Hỗ trợ các quy tắc sắp xếp, đảm bảo hành vi dự đoán được.
|
|
109
|
+
|
|
110
|
+
4. Lồng nội dung & Tham chiếu phụ nội dung
|
|
111
|
+
|
|
112
|
+
Sử dụng hàm nest để tham chiếu và tái sử dụng nội dung từ từ điển khác, giảm thiểu sự trùng lặp.
|
|
113
|
+
|
|
114
|
+
Hỗ trợ quản lý nội dung có cấu trúc và phân cấp để dễ bảo trì hơn.
|
|
115
|
+
|
|
116
|
+
5. Lấy nội dung qua hàm
|
|
117
|
+
|
|
118
|
+
Intlayer cho phép khai báo nội dung dưới dạng hàm, hỗ trợ cả việc lấy nội dung đồng bộ và bất đồng bộ.
|
|
119
|
+
|
|
120
|
+
Hàm đồng bộ: Nội dung được tạo động tại thời điểm build.
|
|
121
|
+
|
|
122
|
+
Hàm bất đồng bộ: Lấy dữ liệu từ các nguồn bên ngoài (ví dụ: API, cơ sở dữ liệu) một cách động.
|
|
123
|
+
|
|
124
|
+
Tích hợp: Hoạt động với TypeScript, ESM và CommonJS nhưng không được hỗ trợ trong các tệp JSON hoặc nội dung từ xa.
|
|
125
|
+
|
|
126
|
+
### 6. Định dạng khai báo nội dung
|
|
127
|
+
|
|
128
|
+
Intlayer hỗ trợ **TypeScript** (cũng như JavaScript) và **JSON** để khai báo nội dung.
|
|
129
|
+
|
|
130
|
+
- **TypeScript**:
|
|
131
|
+
- Đảm bảo cấu trúc nội dung của bạn chính xác và không thiếu bản dịch nào.
|
|
132
|
+
- Cung cấp các chế độ xác thực nghiêm ngặt hoặc linh hoạt hơn.
|
|
133
|
+
- Cho phép lấy dữ liệu động từ biến, hàm hoặc API bên ngoài.
|
|
134
|
+
|
|
135
|
+
- **JSON**:
|
|
136
|
+
- Giúp dễ dàng tích hợp với các công cụ bên ngoài (như trình chỉnh sửa trực quan) nhờ định dạng chuẩn hóa.
|
|
137
|
+
|
|
138
|
+
> Tài nguyên:
|
|
139
|
+
>
|
|
140
|
+
> - [Định dạng khai báo nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md)
|
|
141
|
+
|
|
142
|
+
### 7. Loại bỏ, tối ưu gói và nhập khẩu động
|
|
143
|
+
|
|
144
|
+
- Intlayer tích hợp các plugin `Babel` và `SWC` để tối ưu gói của bạn và cải thiện hiệu suất. Nó thay thế các import, cho phép chỉ nhập các từ điển được sử dụng vào gói.
|
|
145
|
+
- Bằng cách kích hoạt tùy chọn này, Intlayer cũng cho phép nhập khẩu động nội dung từ điển chỉ dành cho locale hiện tại.
|
|
146
|
+
|
|
147
|
+
> Tài nguyên:
|
|
148
|
+
>
|
|
149
|
+
> - [Cấu hình Build](https://intlayer.org/doc/concept/configuration#build-configuration)
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Tích hợp với Frameworks & Môi trường
|
|
154
|
+
|
|
155
|
+
### 1. Next.js
|
|
156
|
+
|
|
157
|
+
#### a. Thành phần Server và Client
|
|
158
|
+
|
|
159
|
+
- Cung cấp **phương pháp quản lý nội dung thống nhất** cho cả thành phần server và client.
|
|
160
|
+
- Cung cấp một context tích hợp sẵn cho các thành phần server, giúp đơn giản hóa việc triển khai so với các giải pháp khác.
|
|
161
|
+
|
|
162
|
+
#### b. Metadata, Sitemaps và robots.txt
|
|
163
|
+
|
|
164
|
+
- Lấy và chèn nội dung động để tạo metadata, sitemap hoặc các file `robots.txt`.
|
|
165
|
+
|
|
166
|
+
#### c. Middleware
|
|
167
|
+
|
|
168
|
+
- Thêm middleware để **chuyển hướng người dùng** đến nội dung dựa trên ngôn ngữ ưu tiên của họ.
|
|
169
|
+
|
|
170
|
+
#### d. Tương thích Turbopack và Webpack
|
|
171
|
+
|
|
172
|
+
- Hoàn toàn tương thích với Turbopack mới của Next.js cũng như Webpack truyền thống.
|
|
173
|
+
|
|
174
|
+
> Tài nguyên:
|
|
175
|
+
>
|
|
176
|
+
> - [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_nextjs_15.md)
|
|
177
|
+
|
|
178
|
+
### 2. Vite
|
|
179
|
+
|
|
180
|
+
- Tương tự như Next.js, bạn có thể tích hợp Intlayer với Vite và sử dụng **middleware** để chuyển hướng người dùng đến nội dung dựa trên ngôn ngữ ưu tiên của họ.
|
|
181
|
+
|
|
182
|
+
> Tài nguyên:
|
|
183
|
+
>
|
|
184
|
+
> - [Vite](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_vite+react.md)
|
|
185
|
+
|
|
186
|
+
### 3. Express
|
|
187
|
+
|
|
188
|
+
- Quản lý nội dung và quốc tế hóa các dịch vụ backend xây dựng trên Express.
|
|
189
|
+
- Cá nhân hóa email, thông báo lỗi, thông báo đẩy và nhiều hơn nữa với văn bản được địa phương hóa.
|
|
190
|
+
|
|
191
|
+
> Tài nguyên:
|
|
192
|
+
>
|
|
193
|
+
> - [Express](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_express.md)
|
|
194
|
+
|
|
195
|
+
### 4. React Native
|
|
196
|
+
|
|
197
|
+
- Tích hợp Intlayer với React Native để quản lý nội dung và quốc tế hóa các ứng dụng di động của bạn.
|
|
198
|
+
- Hỗ trợ cả hai nền tảng iOS và Android.
|
|
199
|
+
|
|
200
|
+
> Tài nguyên:
|
|
201
|
+
>
|
|
202
|
+
> - [React Native](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_react_native.md)
|
|
203
|
+
|
|
204
|
+
### 5. Lynx
|
|
205
|
+
|
|
206
|
+
- Tích hợp Intlayer với Lynx để quản lý nội dung và quốc tế hóa các ứng dụng di động của bạn.
|
|
207
|
+
- Hỗ trợ cả hai nền tảng iOS và Android.
|
|
208
|
+
|
|
209
|
+
> Tài nguyên:
|
|
210
|
+
>
|
|
211
|
+
> - [Lynx](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_lynx.md)
|
|
212
|
+
|
|
213
|
+
### 6. Vue
|
|
214
|
+
|
|
215
|
+
- Tích hợp Intlayer với Vue để quản lý nội dung và quốc tế hóa các ứng dụng Vite / Vue.js của bạn.
|
|
216
|
+
|
|
217
|
+
> Tài nguyên:
|
|
218
|
+
>
|
|
219
|
+
> - [Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_vue.md)
|
|
220
|
+
|
|
221
|
+
### 7. Nuxt
|
|
222
|
+
|
|
223
|
+
- Tích hợp Intlayer với Nuxt để quản lý nội dung và quốc tế hóa các ứng dụng Nuxt / Vue.js của bạn.
|
|
224
|
+
- Hỗ trợ cả thành phần server và client.
|
|
225
|
+
- Tích hợp routing và middleware để chuyển hướng người dùng đến nội dung dựa trên ngôn ngữ ưu tiên của họ.
|
|
226
|
+
|
|
227
|
+
> Tài nguyên:
|
|
228
|
+
>
|
|
229
|
+
> - [Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_nuxt.md)
|
|
230
|
+
|
|
231
|
+
### 8. Preact
|
|
232
|
+
|
|
233
|
+
- Tích hợp Intlayer với Preact để quản lý nội dung và quốc tế hóa các ứng dụng Preact của bạn.
|
|
234
|
+
|
|
235
|
+
> Tài nguyên:
|
|
236
|
+
>
|
|
237
|
+
> - [Preact](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_preact.md)
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Trình chỉnh sửa trực quan và CMS
|
|
242
|
+
|
|
243
|
+
### 1. Trình chỉnh sửa trực quan cục bộ
|
|
244
|
+
|
|
245
|
+
- Một **trình chỉnh sửa trực quan miễn phí, cục bộ** cho phép bạn chỉnh sửa nội dung ứng dụng bằng cách chọn trực tiếp các phần tử trên trang.
|
|
246
|
+
- Tích hợp các tính năng AI để hỗ trợ:
|
|
247
|
+
- Tạo hoặc sửa bản dịch
|
|
248
|
+
- Kiểm tra cú pháp và chính tả
|
|
249
|
+
- Gợi ý cải tiến
|
|
250
|
+
- Có thể được lưu trữ cục bộ hoặc triển khai trên máy chủ từ xa.
|
|
251
|
+
|
|
252
|
+
> Tài nguyên:
|
|
253
|
+
>
|
|
254
|
+
> - [Trình chỉnh sửa trực quan](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_visual_editor.md)
|
|
255
|
+
|
|
256
|
+
### 2. Intlayer CMS (Từ xa)
|
|
257
|
+
|
|
258
|
+
- Một giải pháp **CMS được lưu trữ** cho phép bạn quản lý nội dung ứng dụng trực tuyến mà không cần can thiệp vào codebase của bạn.
|
|
259
|
+
- Cung cấp các tính năng hỗ trợ AI để khai báo nội dung, quản lý bản dịch và sửa lỗi cú pháp hoặc chính tả.
|
|
260
|
+
- Tương tác với nội dung của bạn thông qua giao diện ứng dụng trực tiếp.
|
|
261
|
+
|
|
262
|
+
> Tài nguyên:
|
|
263
|
+
>
|
|
264
|
+
> - [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md)
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Tiện ích mở rộng IDE
|
|
269
|
+
|
|
270
|
+
- Các tiện ích mở rộng cho các IDE chính để cung cấp một **giao diện đồ họa** cho việc quản lý bản dịch cục bộ và từ xa.
|
|
271
|
+
- Các tính năng có thể bao gồm tự động tạo các tệp khai báo nội dung cho các thành phần, tích hợp trực tiếp với Intlayer CMS và xác thực theo thời gian thực.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## MCP Server
|
|
276
|
+
|
|
277
|
+
- Một **máy chủ MCP** cho phép bạn quản lý nội dung và bản dịch của mình bằng công cụ tích hợp trong IDE của bạn.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Intlayer CLI
|
|
282
|
+
|
|
283
|
+
- **Dịch và tạo tệp**: Thực hiện kiểm tra trên các tệp nội dung của bạn để tạo các bản dịch còn thiếu và xem xét các điểm không nhất quán.
|
|
284
|
+
- **Tương tác từ xa**: Đẩy nội dung cục bộ của bạn lên CMS từ xa hoặc kéo nội dung từ xa để tích hợp vào ứng dụng cục bộ của bạn.
|
|
285
|
+
- **Dịch và xem xét tài liệu**: Dịch và xem xét tài liệu / tệp của bạn, v.v.
|
|
286
|
+
|
|
287
|
+
> Tài nguyên:
|
|
288
|
+
>
|
|
289
|
+
> - [CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_cli.md)
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Môi trường
|
|
294
|
+
|
|
295
|
+
- Sử dụng **biến môi trường** để cấu hình Intlayer khác nhau giữa môi trường sản xuất, thử nghiệm và cục bộ.
|
|
296
|
+
- Định nghĩa trình chỉnh sửa trực quan hoặc dự án CMS từ xa nào sẽ được nhắm tới tùy thuộc vào môi trường của bạn.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Cập nhật nội dung nóng
|
|
301
|
+
|
|
302
|
+
- Khi sử dụng từ điển từ xa và Intlayer CMS, bạn có thể **cập nhật nội dung ứng dụng của mình ngay lập tức**, mà không cần phải triển khai lại.
|
|
303
|
+
|
|
304
|
+
> Tài nguyên:
|
|
305
|
+
>
|
|
306
|
+
> - [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md)
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Tính năng sắp ra mắt
|
|
311
|
+
|
|
312
|
+
### 1. Kiểm thử A/B & Cá nhân hóa
|
|
313
|
+
|
|
314
|
+
- **Kiểm thử đa biến**: Kiểm thử các phiên bản khác nhau của một nội dung nhất định để xem phiên bản nào hoạt động tốt nhất (ví dụ: tỷ lệ nhấp cao hơn).
|
|
315
|
+
- **Cá nhân hóa dựa trên dữ liệu**: Hiển thị nội dung khác nhau dựa trên đặc điểm người dùng (giới tính, tuổi, vị trí, v.v.), hoặc các mẫu hành vi khác.
|
|
316
|
+
- **Lặp tự động**: Cho phép AI tự động kiểm thử nhiều phiên bản và chọn ra phiên bản hiệu quả nhất hoặc đề xuất các lựa chọn để quản trị viên phê duyệt.
|
|
317
|
+
|
|
318
|
+
### 2. Phiên bản hóa
|
|
319
|
+
|
|
320
|
+
- Khôi phục các phiên bản trước của nội dung với **phiên bản hóa nội dung**.
|
|
321
|
+
- Theo dõi các thay đổi theo thời gian và hoàn nguyên về trạng thái trước đó nếu cần.
|
|
322
|
+
|
|
323
|
+
### 3. Dịch tự động
|
|
324
|
+
|
|
325
|
+
- Đối với người dùng CMS từ xa, **tạo bản dịch chỉ với một cú nhấp chuột** cho bất kỳ ngôn ngữ được hỗ trợ nào.
|
|
326
|
+
- Hệ thống sẽ tạo bản dịch trong nền và sau đó yêu cầu bạn xác nhận hoặc chỉnh sửa.
|
|
327
|
+
|
|
328
|
+
### 4. Cải tiến SEO
|
|
329
|
+
|
|
330
|
+
- Công cụ để **phân tích từ khóa**, ý định tìm kiếm của người dùng và các xu hướng mới nổi.
|
|
331
|
+
- Gợi ý nội dung cải tiến để xếp hạng tốt hơn, và theo dõi hiệu suất lâu dài.
|
|
332
|
+
|
|
333
|
+
### 5. Tương thích với nhiều Framework hơn
|
|
334
|
+
|
|
335
|
+
- Đang nỗ lực hỗ trợ **Solid, Svelte, Angular**, và nhiều hơn nữa.
|
|
336
|
+
- Mục tiêu làm cho Intlayer tương thích với **bất kỳ ứng dụng nào chạy trên JavaScript**.
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## Kết luận
|
|
341
|
+
|
|
342
|
+
Intlayer hướng tới trở thành giải pháp tổng thể cho quản lý nội dung và quốc tế hóa. Nó tập trung vào sự linh hoạt (tập trung hoặc phân phối các tệp), hỗ trợ đa ngôn ngữ rộng rãi, tích hợp dễ dàng với các framework và bundler hiện đại, cùng các tính năng mạnh mẽ dựa trên AI. Khi các khả năng mới như thử nghiệm A/B, quản lý phiên bản và dịch tự động trở nên khả dụng, Intlayer sẽ tiếp tục đơn giản hóa quy trình làm việc với nội dung và nâng cao trải nghiệm người dùng trên nhiều nền tảng khác nhau.
|
|
343
|
+
|
|
344
|
+
Hãy theo dõi các phiên bản sắp tới, và đừng ngần ngại khám phá các tính năng hiện có để xem Intlayer có thể giúp bạn tập trung và tối ưu hóa quy trình quản lý nội dung như thế nào ngay hôm nay!
|
|
345
|
+
|
|
346
|
+
---
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-03-01
|
|
3
|
+
updatedAt: 2025-10-05
|
|
4
|
+
title: Kiểm thử nội dung của bạn
|
|
5
|
+
description: Khám phá cách kiểm thử nội dung của bạn với Intlayer.
|
|
6
|
+
keywords:
|
|
7
|
+
- Kiểm thử
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Quốc tế hóa
|
|
10
|
+
- CMS
|
|
11
|
+
- Hệ thống quản lý nội dung
|
|
12
|
+
- Trình chỉnh sửa trực quan
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- testing
|
|
16
|
+
history:
|
|
17
|
+
- version: 6.0.1
|
|
18
|
+
date: 2025-10-05
|
|
19
|
+
changes: Thực hiện kiểm thử bất đồng bộ và thêm tùy chọn build
|
|
20
|
+
- version: 6.0.0
|
|
21
|
+
date: 2025-09-20
|
|
22
|
+
changes: Giới thiệu về kiểm thử
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Kiểm thử nội dung của bạn
|
|
26
|
+
|
|
27
|
+
Hướng dẫn này trình bày cách tự động xác minh từ điển của bạn đã đầy đủ, phát hiện các bản dịch còn thiếu trước khi phát hành, và kiểm thử giao diện người dùng đã được địa phương hóa trong ứng dụng của bạn.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Những gì bạn có thể kiểm thử
|
|
32
|
+
|
|
33
|
+
- **Bản dịch còn thiếu**: làm cho CI thất bại nếu bất kỳ ngôn ngữ bắt buộc nào bị thiếu trong bất kỳ từ điển nào.
|
|
34
|
+
- **Kết xuất giao diện người dùng địa phương hóa**: kết xuất các component với một provider locale cụ thể và xác nhận trên văn bản/thuộc tính hiển thị.
|
|
35
|
+
- **Kiểm tra thời gian build**: chạy kiểm tra nhanh cục bộ qua CLI.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Bắt đầu nhanh: kiểm tra qua CLI
|
|
40
|
+
|
|
41
|
+
Chạy kiểm tra từ thư mục gốc dự án của bạn:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx intlayer content test
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Các cờ hữu ích:
|
|
48
|
+
|
|
49
|
+
- `--env-file [path]`: tải biến môi trường từ một file.
|
|
50
|
+
- `-e, --env [name]`: chọn một profile môi trường.
|
|
51
|
+
- `--base-dir [path]`: đặt thư mục gốc của ứng dụng để giải quyết.
|
|
52
|
+
- `--verbose`: hiển thị log chi tiết.
|
|
53
|
+
- `--prefix [label]`: thêm tiền tố cho dòng log.
|
|
54
|
+
- `--build [build]`: build các từ điển trước khi kiểm thử để đảm bảo nội dung được cập nhật. True sẽ ép buộc build, false sẽ bỏ qua build, undefined sẽ cho phép sử dụng cache của build.
|
|
55
|
+
|
|
56
|
+
Lưu ý: CLI in ra báo cáo chi tiết nhưng không thoát với mã lỗi khác 0 khi có lỗi. Để kiểm soát CI, hãy thêm một unit test (dưới đây) để xác nhận không có locale bắt buộc nào bị thiếu.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Kiểm tra lập trình (Vitest/Jest)
|
|
61
|
+
|
|
62
|
+
Sử dụng API Intlayer CLI để xác nhận không có bản dịch nào bị thiếu cho các locale bắt buộc của bạn.
|
|
63
|
+
|
|
64
|
+
```ts fileName=i18n.test.ts
|
|
65
|
+
/* @vitest-environment node */
|
|
66
|
+
import { listMissingTranslations } from "intlayer/cli";
|
|
67
|
+
import { describe, expect, it } from "vitest";
|
|
68
|
+
|
|
69
|
+
describe("translations", () => {
|
|
70
|
+
it("has no missing required locales", async () => {
|
|
71
|
+
const result = await listMissingTranslations();
|
|
72
|
+
|
|
73
|
+
if (result.missingRequiredLocales.length > 0) {
|
|
74
|
+
// Hữu ích khi test thất bại cục bộ hoặc trong CI
|
|
75
|
+
console.log(result.missingTranslations);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
expect(result.missingRequiredLocales).toHaveLength(0);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Tương đương với Jest:
|
|
84
|
+
|
|
85
|
+
```ts fileName=i18n.test.ts
|
|
86
|
+
import { listMissingTranslations } from "intlayer/cli";
|
|
87
|
+
|
|
88
|
+
test("không có locale bắt buộc nào bị thiếu", async () => {
|
|
89
|
+
const result = await listMissingTranslations();
|
|
90
|
+
|
|
91
|
+
if (result.missingRequiredLocales.length > 0) {
|
|
92
|
+
// Hữu ích khi test thất bại ở local hoặc trong CI
|
|
93
|
+
console.log(result.missingTranslations);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
expect(result.missingRequiredLocales).toHaveLength(0);
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Cách hoạt động:
|
|
101
|
+
|
|
102
|
+
- Intlayer đọc cấu hình của bạn (locales, requiredLocales) và các từ điển đã khai báo, sau đó báo cáo:
|
|
103
|
+
- `missingTranslations`: theo từng key, locale nào bị thiếu và từ file nào.
|
|
104
|
+
- `missingLocales`: tập hợp tất cả các locale bị thiếu.
|
|
105
|
+
- `missingRequiredLocales`: tập con giới hạn trong `requiredLocales` (hoặc tất cả các locales nếu `requiredLocales` không được thiết lập).
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Kiểm thử giao diện người dùng bản địa hóa (React / Next.js)
|
|
110
|
+
|
|
111
|
+
Render các component dưới một Intlayer provider và kiểm tra nội dung hiển thị.
|
|
112
|
+
|
|
113
|
+
Ví dụ React (Testing Library):
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
import { IntlayerProvider } from "react-intlayer/client";
|
|
117
|
+
import { render, screen } from "@testing-library/react";
|
|
118
|
+
import { MyComponent } from "./MyComponent";
|
|
119
|
+
|
|
120
|
+
test("hiển thị tiêu đề bản địa hóa bằng tiếng Anh", () => {
|
|
121
|
+
render(
|
|
122
|
+
<IntlayerProvider locale="en-US">
|
|
123
|
+
<MyComponent />
|
|
124
|
+
</IntlayerProvider>
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
expect(screen.getByText("Expected English title")).toBeInTheDocument();
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Ví dụ Next.js (App Router): sử dụng wrapper của framework:
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
import { IntlayerClientProvider } from "next-intlayer/client";
|
|
135
|
+
import { render, screen } from "@testing-library/react";
|
|
136
|
+
import { MyPage } from "./MyPage";
|
|
137
|
+
|
|
138
|
+
test("hiển thị tiêu đề bản địa hóa bằng tiếng Pháp", () => {
|
|
139
|
+
render(
|
|
140
|
+
<IntlayerClientProvider locale="fr-FR">
|
|
141
|
+
<MyPage />
|
|
142
|
+
</IntlayerClientProvider>
|
|
143
|
+
);
|
|
144
|
+
expect(
|
|
145
|
+
screen.getByRole("heading", { name: "Titre attendu" })
|
|
146
|
+
).toBeInTheDocument();
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Mẹo:
|
|
151
|
+
|
|
152
|
+
- Khi bạn cần giá trị chuỗi thô cho các thuộc tính (ví dụ: `aria-label`), truy cập trường `.value` được trả về bởi `useIntlayer` trong React.
|
|
153
|
+
- Giữ các từ điển cùng vị trí với các component để dễ dàng kiểm thử đơn vị và dọn dẹp.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Tích hợp liên tục
|
|
158
|
+
|
|
159
|
+
Thêm một bài kiểm thử mà sẽ làm build thất bại khi thiếu bản dịch bắt buộc.
|
|
160
|
+
|
|
161
|
+
`package.json`:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"scripts": {
|
|
166
|
+
"test:i18n": "vitest run -c"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Ví dụ GitHub Actions:
|
|
172
|
+
|
|
173
|
+
```yaml
|
|
174
|
+
name: CI
|
|
175
|
+
on: [push, pull_request]
|
|
176
|
+
jobs:
|
|
177
|
+
test:
|
|
178
|
+
runs-on: ubuntu-latest
|
|
179
|
+
steps:
|
|
180
|
+
- uses: actions/checkout@v4
|
|
181
|
+
- uses: actions/setup-node@v4
|
|
182
|
+
with:
|
|
183
|
+
node-version: 20
|
|
184
|
+
- run: npm ci
|
|
185
|
+
- run: npm run test:i18n
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Tùy chọn: chạy kiểm tra CLI để có bản tóm tắt dễ đọc bên cạnh các bài kiểm tra:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
npx intlayer content test --verbose
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Khắc phục sự cố
|
|
197
|
+
|
|
198
|
+
- Đảm bảo cấu hình Intlayer của bạn định nghĩa `locales` và (tùy chọn) `requiredLocales`.
|
|
199
|
+
- Nếu ứng dụng của bạn sử dụng từ điển động hoặc từ điển từ xa, hãy chạy các bài kiểm tra trong môi trường mà các từ điển đó có sẵn.
|
|
200
|
+
- Đối với các monorepo hỗn hợp, sử dụng `--base-dir` để chỉ CLI đến đúng thư mục gốc của ứng dụng.
|
|
201
|
+
|
|
202
|
+
---
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-03-17
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: Tiện ích mở rộng chính thức cho VS Code
|
|
5
|
+
description: Tìm hiểu cách sử dụng tiện ích mở rộng Intlayer trong VS Code để nâng cao quy trình phát triển của bạn. Dễ dàng điều hướng giữa các nội dung được bản địa hóa và quản lý từ điển của bạn một cách hiệu quả.
|
|
6
|
+
keywords:
|
|
7
|
+
- Tiện ích mở rộng VS Code
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Bản địa hóa
|
|
10
|
+
- Công cụ phát triển
|
|
11
|
+
- React
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- TypeScript
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- vs-code-extension
|
|
18
|
+
history:
|
|
19
|
+
- version: 6.1.5
|
|
20
|
+
date: 2025-09-30
|
|
21
|
+
changes: Thêm ảnh gif demo
|
|
22
|
+
- version: 6.1.0
|
|
23
|
+
date: 2025-09-24
|
|
24
|
+
changes: Thêm phần lựa chọn môi trường
|
|
25
|
+
- version: 6.0.0
|
|
26
|
+
date: 2025-09-22
|
|
27
|
+
changes: Tab Intlayer / Lệnh Điền & Kiểm tra
|
|
28
|
+
- version: 5.5.10
|
|
29
|
+
date: 2025-06-29
|
|
30
|
+
changes: Khởi tạo lịch sử
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
# Tiện ích mở rộng chính thức cho VS Code
|
|
34
|
+
|
|
35
|
+
## Tổng quan
|
|
36
|
+
|
|
37
|
+
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) là tiện ích mở rộng chính thức của Visual Studio Code dành cho **Intlayer**, được thiết kế để cải thiện trải nghiệm của nhà phát triển khi làm việc với nội dung được bản địa hóa trong các dự án của bạn.
|
|
38
|
+
|
|
39
|
+

|
|
40
|
+
|
|
41
|
+
Liên kết tiện ích mở rộng: [https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension)
|
|
42
|
+
|
|
43
|
+
## Tính năng
|
|
44
|
+
|
|
45
|
+

|
|
46
|
+
|
|
47
|
+
- **Điều hướng tức thì** – Nhảy nhanh đến tệp nội dung chính xác khi nhấp vào khóa `useIntlayer`.
|
|
48
|
+
- **Điền từ điển** – Điền từ điển với nội dung từ dự án của bạn.
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+
|
|
52
|
+
- **Truy cập dễ dàng các lệnh Intlayer** – Xây dựng, đẩy, kéo, điền, kiểm tra từ điển nội dung một cách dễ dàng.
|
|
53
|
+
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
- **Trình tạo khai báo nội dung** – Tạo các tệp nội dung từ điển ở nhiều định dạng khác nhau (`.ts`, `.esm`, `.cjs`, `.json`).
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
- **Kiểm tra từ điển** – Kiểm tra từ điển để phát hiện các bản dịch còn thiếu.
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
64
|
+
- **Giữ cho từ điển của bạn luôn cập nhật** – Giữ cho từ điển của bạn luôn cập nhật với nội dung mới nhất từ dự án của bạn.
|
|
65
|
+
|
|
66
|
+

|
|
67
|
+
|
|
68
|
+
- **Tab Intlayer (Thanh hoạt động)** – Duyệt và tìm kiếm từ điển từ một tab bên chuyên dụng với thanh công cụ và các hành động ngữ cảnh (Xây dựng, Kéo, Đẩy, Điền, Làm mới, Kiểm tra, Tạo tệp).
|
|
69
|
+
|
|
70
|
+
## Sử dụng
|
|
71
|
+
|
|
72
|
+
### Điều hướng nhanh
|
|
73
|
+
|
|
74
|
+
1. Mở một dự án sử dụng **react-intlayer**.
|
|
75
|
+
2. Tìm một lời gọi đến `useIntlayer()`, ví dụ:
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
const content = useIntlayer("app");
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
3. **Nhấn Command và click** (`⌘+Click` trên macOS) hoặc **Ctrl+Click** (trên Windows/Linux) vào khóa (ví dụ, `"app"`).
|
|
82
|
+
4. VS Code sẽ tự động mở tệp từ điển tương ứng, ví dụ, `src/app.content.ts`.
|
|
83
|
+
|
|
84
|
+
### Tab Intlayer (Thanh hoạt động)
|
|
85
|
+
|
|
86
|
+
Sử dụng tab bên để duyệt và quản lý từ điển:
|
|
87
|
+
|
|
88
|
+
- Mở biểu tượng Intlayer trên Thanh hoạt động.
|
|
89
|
+
- Trong **Tìm kiếm**, nhập để lọc từ điển và các mục nhập theo thời gian thực.
|
|
90
|
+
- Trong **Dictionaries**, duyệt qua các môi trường, từ điển và tệp. Sử dụng thanh công cụ để Xây dựng, Kéo, Đẩy, Điền, Làm mới, Kiểm tra và Tạo tệp từ điển. Nhấp chuột phải để thực hiện các hành động ngữ cảnh (Kéo/Đẩy trên từ điển, Điền trên tệp). Tệp đang mở trong trình soạn thảo sẽ tự động được hiển thị trong cây khi có thể.
|
|
91
|
+
|
|
92
|
+
### Truy cập các lệnh
|
|
93
|
+
|
|
94
|
+
Bạn có thể truy cập các lệnh từ **Command Palette**.
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
Cmd + Shift + P (macOS) / Ctrl + Shift + P (Windows/Linux)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
- **Xây dựng từ điển**
|
|
101
|
+
- **Đẩy từ điển**
|
|
102
|
+
- **Kéo từ điển**
|
|
103
|
+
- **Điền từ điển**
|
|
104
|
+
- **Kiểm tra từ điển**
|
|
105
|
+
- **Tạo tệp từ điển**
|
|
106
|
+
|
|
107
|
+
### Tải biến môi trường
|
|
108
|
+
|
|
109
|
+
Intlayer khuyến nghị lưu các khóa API AI của bạn, cũng như ID và bí mật client Intlayer trong các biến môi trường.
|
|
110
|
+
|
|
111
|
+
Phần mở rộng có thể tải các biến môi trường từ workspace của bạn để chạy các lệnh Intlayer với ngữ cảnh chính xác.
|
|
112
|
+
|
|
113
|
+
- **Thứ tự tải (theo ưu tiên)**: `.env.<env>.local` → `.env.<env>` → `.env.local` → `.env`
|
|
114
|
+
- **Không phá hủy**: các giá trị `process.env` hiện có sẽ không bị ghi đè.
|
|
115
|
+
- **Phạm vi**: các tệp được giải quyết từ thư mục cơ sở đã cấu hình (mặc định là thư mục gốc của workspace).
|
|
116
|
+
|
|
117
|
+
#### Chọn môi trường đang hoạt động
|
|
118
|
+
|
|
119
|
+
- **Command Palette**: mở palette và chạy `Intlayer: Select Environment`, sau đó chọn môi trường (ví dụ: `development`, `staging`, `production`). Phần mở rộng sẽ cố gắng tải tệp đầu tiên có sẵn trong danh sách ưu tiên ở trên và hiển thị thông báo như “Loaded env from .env.<env>.local”.
|
|
120
|
+
- **Cài đặt**: vào `Settings → Extensions → Intlayer`, và thiết lập:
|
|
121
|
+
- **Environment**: tên môi trường được sử dụng để giải quyết các tệp `.env.<env>*`.
|
|
122
|
+
- (Tùy chọn) **Env File**: đường dẫn rõ ràng đến một tệp `.env`. Khi được cung cấp, nó sẽ ưu tiên hơn danh sách suy luận.
|
|
123
|
+
|
|
124
|
+
#### Monorepos và thư mục tùy chỉnh
|
|
125
|
+
|
|
126
|
+
Nếu các tệp `.env` của bạn nằm ngoài thư mục gốc của workspace, hãy đặt **Base Directory** trong `Settings → Extensions → Intlayer`. Bộ tải sẽ tìm các tệp `.env` tương đối với thư mục đó.
|