@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,690 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-04-18
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Jak przetłumaczyć swoją aplikację Angular – przewodnik i18n 2025
|
|
5
|
+
description: Dowiedz się, jak uczynić swoją stronę Angular wielojęzyczną. Postępuj zgodnie z dokumentacją, aby internacjonalizować (i18n) i tłumaczyć ją.
|
|
6
|
+
keywords:
|
|
7
|
+
- Internacjonalizacja
|
|
8
|
+
- Dokumentacja
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Angular
|
|
11
|
+
- JavaScript
|
|
12
|
+
slugs:
|
|
13
|
+
- doc
|
|
14
|
+
- environment
|
|
15
|
+
- angular
|
|
16
|
+
# applicationTemplate: https://github.com/aymericzip/intlayer-angular-template
|
|
17
|
+
history:
|
|
18
|
+
- version: 5.5.10
|
|
19
|
+
date: 2025-06-29
|
|
20
|
+
changes: Inicjalizacja historii
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Tłumacz swoją stronę Angular za pomocą Intlayer | Internacjonalizacja (i18n)
|
|
24
|
+
|
|
25
|
+
> Ten pakiet jest w trakcie rozwoju. Zobacz [zgłoszenie](https://github.com/aymericzip/intlayer/issues/116) po więcej informacji. Pokaż swoje zainteresowanie Intlayer dla Angular, lajkując to zgłoszenie
|
|
26
|
+
|
|
27
|
+
<!-- Zobacz [Szablon aplikacji](https://github.com/aymericzip/intlayer-angular-template) na GitHub. -->
|
|
28
|
+
|
|
29
|
+
## Czym jest Intlayer?
|
|
30
|
+
|
|
31
|
+
**Intlayer** to innowacyjna, open-source'owa biblioteka do internacjonalizacji (i18n), zaprojektowana, aby uprościć wsparcie wielojęzyczne w nowoczesnych aplikacjach webowych.
|
|
32
|
+
|
|
33
|
+
Dzięki Intlayer możesz:
|
|
34
|
+
|
|
35
|
+
- **Łatwo zarządzać tłumaczeniami** za pomocą deklaratywnych słowników na poziomie komponentu.
|
|
36
|
+
- **Dynamicznie lokalizować metadane**, trasy i zawartość.
|
|
37
|
+
- **Zapewnić wsparcie dla TypeScript** dzięki automatycznie generowanym typom, co poprawia autouzupełnianie i wykrywanie błędów.
|
|
38
|
+
- **Skorzystaj z zaawansowanych funkcji**, takich jak dynamiczne wykrywanie i przełączanie lokalizacji.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Przewodnik krok po kroku, jak skonfigurować Intlayer w aplikacji Angular
|
|
43
|
+
|
|
44
|
+
### Krok 1: Instalacja zależności
|
|
45
|
+
|
|
46
|
+
Zainstaluj niezbędne pakiety za pomocą npm:
|
|
47
|
+
|
|
48
|
+
```bash packageManager="npm"
|
|
49
|
+
npm install intlayer angular-intlayer @intlayer/webpack
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```bash packageManager="pnpm"
|
|
53
|
+
pnpm add intlayer angular-intlayer @intlayer/webpack
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```bash packageManager="yarn"
|
|
57
|
+
yarn add intlayer angular-intlayer @intlayer/webpack
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- **intlayer**
|
|
61
|
+
|
|
62
|
+
Główny pakiet, który dostarcza narzędzia do internacjonalizacji do zarządzania konfiguracją, tłumaczeń, [deklaracji treści](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md), transpilecji oraz [poleceń CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_cli.md).
|
|
63
|
+
|
|
64
|
+
- **angular-intlayer**
|
|
65
|
+
Pakiet integrujący Intlayer z aplikacją Angular. Zapewnia dostawców kontekstu oraz hooki do internacjonalizacji w Angularze.
|
|
66
|
+
|
|
67
|
+
- **@intlayer/webpack**
|
|
68
|
+
|
|
69
|
+
Pakiet integrujący Intlayer z Webpackiem. Jest używany przez Angular CLI do budowania plików deklaracji treści oraz monitorowania ich w trybie deweloperskim.
|
|
70
|
+
|
|
71
|
+
### Krok 2: Konfiguracja projektu
|
|
72
|
+
|
|
73
|
+
Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:
|
|
74
|
+
|
|
75
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
76
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
77
|
+
|
|
78
|
+
const config: IntlayerConfig = {
|
|
79
|
+
internationalization: {
|
|
80
|
+
locales: [
|
|
81
|
+
Locales.ENGLISH,
|
|
82
|
+
Locales.FRENCH,
|
|
83
|
+
Locales.SPANISH,
|
|
84
|
+
// Twoje inne lokalizacje
|
|
85
|
+
],
|
|
86
|
+
defaultLocale: Locales.ENGLISH,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export default config;
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
94
|
+
import { Locales } from "intlayer";
|
|
95
|
+
|
|
96
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
97
|
+
const config = {
|
|
98
|
+
internationalization: {
|
|
99
|
+
locales: [
|
|
100
|
+
Locales.ENGLISH,
|
|
101
|
+
Locales.FRENCH,
|
|
102
|
+
Locales.SPANISH,
|
|
103
|
+
// Twoje inne lokalizacje
|
|
104
|
+
],
|
|
105
|
+
defaultLocale: Locales.ENGLISH,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export default config;
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
113
|
+
const { Locales } = require("intlayer");
|
|
114
|
+
|
|
115
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
116
|
+
const config = {
|
|
117
|
+
internationalization: {
|
|
118
|
+
locales: [
|
|
119
|
+
Locales.ENGLISH,
|
|
120
|
+
Locales.FRENCH,
|
|
121
|
+
Locales.SPANISH,
|
|
122
|
+
// Twoje inne lokalizacje
|
|
123
|
+
],
|
|
124
|
+
defaultLocale: Locales.ENGLISH,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
module.exports = config;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
> Dzięki temu plikowi konfiguracyjnemu możesz ustawić lokalizowane adresy URL, przekierowania w middleware, nazwy ciasteczek, lokalizację i rozszerzenie deklaracji zawartości, wyłączyć logi Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w [dokumentacji konfiguracji](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md).
|
|
132
|
+
|
|
133
|
+
### Krok 3: Integracja Intlayer z konfiguracją Angular
|
|
134
|
+
|
|
135
|
+
Aby zintegrować Intlayer z Angular CLI, masz dwie opcje w zależności od używanego buildera: `esbuild` lub `webpack`.
|
|
136
|
+
|
|
137
|
+
#### Opcja 1: Użycie esbuild (zalecane)
|
|
138
|
+
|
|
139
|
+
Najpierw zmodyfikuj swój plik `angular.json`, aby użyć niestandardowego buildera esbuild. Zaktualizuj konfigurację `build`:
|
|
140
|
+
|
|
141
|
+
```json fileName="angular.json"
|
|
142
|
+
{
|
|
143
|
+
"projects": {
|
|
144
|
+
"your-app-name": {
|
|
145
|
+
"architect": {
|
|
146
|
+
"build": {
|
|
147
|
+
"builder": "@angular-builders/custom-esbuild:application",
|
|
148
|
+
"options": {
|
|
149
|
+
"plugins": ["./esbuild/intlayer-plugin.ts"]
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
> Upewnij się, że zastąpiłeś `your-app-name` rzeczywistą nazwą swojego projektu w pliku `angular.json`.
|
|
159
|
+
|
|
160
|
+
Następnie utwórz plik `esbuild/intlayer-plugin.ts` w katalogu głównym swojego projektu:
|
|
161
|
+
|
|
162
|
+
```typescript fileName="esbuild/intlayer-plugin.ts"
|
|
163
|
+
import { prepareIntlayer, watch } from "@intlayer/chokidar";
|
|
164
|
+
import { getConfiguration, logger } from "@intlayer/config";
|
|
165
|
+
import type { Plugin } from "esbuild";
|
|
166
|
+
|
|
167
|
+
const intlayer: Plugin = {
|
|
168
|
+
name: "intlayer-esbuild-plugin",
|
|
169
|
+
setup(build) {
|
|
170
|
+
const configuration = getConfiguration();
|
|
171
|
+
let isWatching = false;
|
|
172
|
+
|
|
173
|
+
build.onStart(async () => {
|
|
174
|
+
logger("Wtyczka Intlayer esbuild uruchomiona", {
|
|
175
|
+
level: "info",
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
if (build.initialOptions.watch && !isWatching) {
|
|
179
|
+
logger("Tryb obserwacji włączony. Uruchamianie obserwatora...", {
|
|
180
|
+
level: "info",
|
|
181
|
+
});
|
|
182
|
+
watch(configuration);
|
|
183
|
+
isWatching = true;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
try {
|
|
187
|
+
await prepareIntlayer(configuration);
|
|
188
|
+
} catch (error) {
|
|
189
|
+
logger(`Błąd we wtyczce Intlayer esbuild: ${error}`, {
|
|
190
|
+
level: "error",
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export default intlayer;
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
> `intlayer` dla esbuild zapewnia przygotowanie Intlayer przed rozpoczęciem budowania oraz monitoruje zmiany w trybie deweloperskim.
|
|
201
|
+
|
|
202
|
+
#### Opcja 2: Użycie Webpack
|
|
203
|
+
|
|
204
|
+
Najpierw zmodyfikuj swój plik `angular.json`, aby użyć niestandardowego buildera Webpack. Zaktualizuj konfiguracje `build` i `serve`:
|
|
205
|
+
|
|
206
|
+
```json fileName="angular.json"
|
|
207
|
+
{
|
|
208
|
+
"projects": {
|
|
209
|
+
"your-app-name": {
|
|
210
|
+
"architect": {
|
|
211
|
+
"build": {
|
|
212
|
+
"builder": "@angular-builders/custom-webpack:browser",
|
|
213
|
+
"options": {
|
|
214
|
+
"customWebpackConfig": {
|
|
215
|
+
"path": "./webpack.config.js"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"serve": {
|
|
220
|
+
"builder": "@angular-builders/custom-webpack:dev-server"
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
> Upewnij się, że zastąpiłeś `your-app-name` rzeczywistą nazwą swojego projektu w pliku `angular.json`.
|
|
229
|
+
|
|
230
|
+
Następnie utwórz plik `webpack.config.js` w katalogu głównym swojego projektu:
|
|
231
|
+
|
|
232
|
+
```javascript fileName="webpack.config.js"
|
|
233
|
+
const { IntlayerWebpackPlugin } = require("@intlayer/webpack");
|
|
234
|
+
|
|
235
|
+
module.exports = {
|
|
236
|
+
plugins: [new IntlayerWebpackPlugin()],
|
|
237
|
+
};
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
> `IntlayerWebpackPlugin` służy do integracji Intlayer z Webpack. Zapewnia budowanie plików deklaracji treści oraz monitoruje je w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer w aplikacji. Dodatkowo dostarcza aliasy w celu optymalizacji wydajności.
|
|
241
|
+
|
|
242
|
+
### Krok 4: Zadeklaruj swoją zawartość
|
|
243
|
+
|
|
244
|
+
Utwórz i zarządzaj swoimi deklaracjami zawartości, aby przechowywać tłumaczenia:
|
|
245
|
+
|
|
246
|
+
```tsx fileName="src/app/app.content.ts" contentDeclarationFormat="typescript"
|
|
247
|
+
import { t, type Dictionary } from "intlayer";
|
|
248
|
+
|
|
249
|
+
const appContent = {
|
|
250
|
+
key: "app",
|
|
251
|
+
content: {
|
|
252
|
+
title: t({
|
|
253
|
+
en: "Hello",
|
|
254
|
+
fr: "Bonjour",
|
|
255
|
+
es: "Hola",
|
|
256
|
+
}),
|
|
257
|
+
congratulations: t({
|
|
258
|
+
en: "Congratulations! Your app is running. 🎉",
|
|
259
|
+
fr: "Félicitations! Votre application est en cours d'exécution. 🎉",
|
|
260
|
+
es: "¡Felicidades! Tu aplicación está en ejecución. 🎉",
|
|
261
|
+
}),
|
|
262
|
+
exploreDocs: t({
|
|
263
|
+
en: "Explore the Docs",
|
|
264
|
+
fr: "Explorer les Docs",
|
|
265
|
+
es: "Explorar los Docs",
|
|
266
|
+
}),
|
|
267
|
+
learnWithTutorials: t({
|
|
268
|
+
en: "Learn with Tutorials",
|
|
269
|
+
fr: "Apprendre avec les Tutoriels",
|
|
270
|
+
es: "Aprender con los Tutorios",
|
|
271
|
+
}),
|
|
272
|
+
cliDocs: "Dokumentacja CLI",
|
|
273
|
+
angularLanguageService: t({
|
|
274
|
+
en: "Angular Language Service",
|
|
275
|
+
fr: "Service de Langage Angular",
|
|
276
|
+
es: "Servicio de Lenguaje Angular",
|
|
277
|
+
}),
|
|
278
|
+
angularDevTools: "Narzędzia deweloperskie Angular",
|
|
279
|
+
github: "Github",
|
|
280
|
+
twitter: "Twitter",
|
|
281
|
+
youtube: "Youtube",
|
|
282
|
+
},
|
|
283
|
+
} satisfies Dictionary;
|
|
284
|
+
|
|
285
|
+
export default appContent;
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
> Twoje deklaracje zawartości mogą być definiowane w dowolnym miejscu w aplikacji, pod warunkiem, że zostaną umieszczone w katalogu `contentDir` (domyślnie `./src`). I będą miały rozszerzenie pliku deklaracji zawartości (domyślnie `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
289
|
+
|
|
290
|
+
> Aby uzyskać więcej szczegółów, zapoznaj się z [dokumentacją deklaracji zawartości](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md).
|
|
291
|
+
|
|
292
|
+
### Krok 5: Wykorzystaj Intlayer w swoim kodzie
|
|
293
|
+
|
|
294
|
+
Aby wykorzystać funkcje internacjonalizacji Intlayer w całej aplikacji Angular, musisz użyć funkcji `useIntlayer` w komponencie. Funkcja ta, dostępna z pakietu `angular-intlayer`, zapewnia dostęp do tłumaczeń jako reaktywnych sygnałów.
|
|
295
|
+
|
|
296
|
+
`IntlayerProvider` jest zarejestrowany w głównym module aplikacji, więc nie musisz dodawać go do providerów modułu.
|
|
297
|
+
|
|
298
|
+
Uzyskaj dostęp do słowników zawartości w klasie komponentu:
|
|
299
|
+
|
|
300
|
+
```typescript fileName="src/app/hello-world.component.ts"
|
|
301
|
+
import { Component, signal } from "@angular/core";
|
|
302
|
+
import { useIntlayer } from "angular-intlayer";
|
|
303
|
+
|
|
304
|
+
@Component({
|
|
305
|
+
selector: "app-hello-world",
|
|
306
|
+
standalone: true,
|
|
307
|
+
template: `
|
|
308
|
+
<h1>{{ content().title }}</h1>
|
|
309
|
+
|
|
310
|
+
<div class="card">
|
|
311
|
+
<button type="button" (click)="increment()">
|
|
312
|
+
{{ content().count }} {{ count() }}
|
|
313
|
+
</button>
|
|
314
|
+
<p [innerHTML]="content().edit"></p>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<p class="read-the-docs">{{ content().readTheDocs }}</p>
|
|
318
|
+
`,
|
|
319
|
+
})
|
|
320
|
+
export class HelloWorldComponent {
|
|
321
|
+
content = useIntlayer("helloworld");
|
|
322
|
+
count = signal(0);
|
|
323
|
+
|
|
324
|
+
increment() {
|
|
325
|
+
this.count.update((value) => value + 1);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
Zawartość Intlayer jest zwracana jako `Signal`, więc dostęp do wartości uzyskujesz wywołując sygnał w szablonie: `content().title`.
|
|
331
|
+
|
|
332
|
+
### (Opcjonalnie) Krok 6: Zmień język swojej zawartości
|
|
333
|
+
|
|
334
|
+
Aby zmienić język zawartości, możesz użyć funkcji `setLocale` dostarczonej przez funkcję `useLocale`. Pozwala to ustawić lokalizację aplikacji i odpowiednio zaktualizować zawartość.
|
|
335
|
+
|
|
336
|
+
Utwórz komponent do przełączania między językami:
|
|
337
|
+
|
|
338
|
+
```typescript fileName="src/app/components/locale-switcher.component.ts"
|
|
339
|
+
import { Component } from "@angular/core";
|
|
340
|
+
import { CommonModule } from "@angular/common";
|
|
341
|
+
import { getLocaleName } from "intlayer";
|
|
342
|
+
import { useLocale } from "angular-intlayer";
|
|
343
|
+
import { FormsModule } from "@angular/forms";
|
|
344
|
+
|
|
345
|
+
@Component({
|
|
346
|
+
selector: "app-locale-switcher",
|
|
347
|
+
standalone: true,
|
|
348
|
+
imports: [CommonModule, FormsModule],
|
|
349
|
+
template: `
|
|
350
|
+
<div class="locale-switcher">
|
|
351
|
+
<select [ngModel]="locale()" (ngModelChange)="changeLocale($event)">
|
|
352
|
+
<option *ngFor="let loc of availableLocales" [value]="loc">
|
|
353
|
+
{{ getLocaleName(loc) }}
|
|
354
|
+
</option>
|
|
355
|
+
</select>
|
|
356
|
+
</div>
|
|
357
|
+
`,
|
|
358
|
+
})
|
|
359
|
+
export class LocaleSwitcherComponent {
|
|
360
|
+
localeInfo = useLocale();
|
|
361
|
+
locale = this.localeInfo.locale;
|
|
362
|
+
availableLocales = this.localeInfo.availableLocales;
|
|
363
|
+
|
|
364
|
+
// Udostępnij getLocaleName w szablonie
|
|
365
|
+
getLocaleName = getLocaleName;
|
|
366
|
+
|
|
367
|
+
changeLocale(newLocale: string) {
|
|
368
|
+
this.localeInfo.setLocale(newLocale);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Następnie użyj tego komponentu w swoim `app.component.ts`:
|
|
374
|
+
|
|
375
|
+
```typescript fileName="src/app/app.component.ts"
|
|
376
|
+
import { Component } from "@angular/core";
|
|
377
|
+
import { HelloWorldComponent } from "./hello-world.component";
|
|
378
|
+
import { LocaleSwitcherComponent } from "./components/locale-switcher.component";
|
|
379
|
+
|
|
380
|
+
@Component({
|
|
381
|
+
selector: "app-root",
|
|
382
|
+
standalone: true,
|
|
383
|
+
imports: [HelloWorldComponent, LocaleSwitcherComponent],
|
|
384
|
+
template: `
|
|
385
|
+
<div>
|
|
386
|
+
<app-locale-switcher />
|
|
387
|
+
<a href="https://vite.dev" target="_blank">
|
|
388
|
+
<img src="/vite.svg" class="logo" alt="Logo Vite" />
|
|
389
|
+
</a>
|
|
390
|
+
<a href="https://angular.dev/" target="_blank">
|
|
391
|
+
<img
|
|
392
|
+
src="/assets/angular.svg"
|
|
393
|
+
class="logo angular"
|
|
394
|
+
alt="Logo Angular"
|
|
395
|
+
/>
|
|
396
|
+
</a>
|
|
397
|
+
</div>
|
|
398
|
+
<app-hello-world />
|
|
399
|
+
`,
|
|
400
|
+
})
|
|
401
|
+
export class AppComponent {}
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### (Opcjonalny) Krok 7: Dodaj lokalizowane routowanie do swojej aplikacji
|
|
405
|
+
|
|
406
|
+
Dodanie lokalizowanego routingu w aplikacji Angular polega na użyciu Angular Router z prefiksami lokalizacji. Tworzy to unikalne ścieżki dla każdego języka, co jest przydatne dla SEO.
|
|
407
|
+
|
|
408
|
+
Przykład:
|
|
409
|
+
|
|
410
|
+
```plaintext
|
|
411
|
+
- https://example.com/about
|
|
412
|
+
- https://example.com/es/about
|
|
413
|
+
- https://example.com/fr/about
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
Najpierw upewnij się, że masz zainstalowany pakiet `@angular/router`.
|
|
417
|
+
|
|
418
|
+
Następnie utwórz konfigurację routera, która obsługuje routing oparty na lokalizacji w pliku `app.routes.ts`.
|
|
419
|
+
|
|
420
|
+
```typescript fileName="src/app/app.routes.ts"
|
|
421
|
+
import { Routes } from "@angular/router";
|
|
422
|
+
import { configuration, localeFlatMap } from "intlayer";
|
|
423
|
+
import { HomeComponent } from "./home/home.component";
|
|
424
|
+
import { RootComponent } from "./root/root.component";
|
|
425
|
+
|
|
426
|
+
const { defaultLocale } = configuration.internationalization;
|
|
427
|
+
|
|
428
|
+
export const routes: Routes = [
|
|
429
|
+
localeFlatMap((localizedData) => [
|
|
430
|
+
{
|
|
431
|
+
path: `${localizedData.urlPrefix}`,
|
|
432
|
+
component: RootComponent,
|
|
433
|
+
data: { locale: localizedData.locale },
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
path: `${localizedData.urlPrefix}/home`,
|
|
437
|
+
component: HomeComponent,
|
|
438
|
+
data: { locale: localizedData.locale },
|
|
439
|
+
},
|
|
440
|
+
]),
|
|
441
|
+
{ path: "**", redirectTo: `/${defaultLocale}/home` },
|
|
442
|
+
];
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
Następnie musisz udostępnić router w swoim pliku `app.config.ts`.
|
|
446
|
+
|
|
447
|
+
```typescript fileName="src/app/app.config.ts"
|
|
448
|
+
import { ApplicationConfig } from "@angular/core";
|
|
449
|
+
import { provideRouter } from "@angular/router";
|
|
450
|
+
import { routes } from "./app.routes";
|
|
451
|
+
|
|
452
|
+
export const appConfig: ApplicationConfig = {
|
|
453
|
+
providers: [provideRouter(routes)],
|
|
454
|
+
};
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### (Opcjonalnie) Krok 8: Zmiana URL po zmianie lokalizacji
|
|
458
|
+
|
|
459
|
+
Aby automatycznie aktualizować URL, gdy użytkownik zmieni język, możesz zmodyfikować komponent `LocaleSwitcher`, aby korzystał z routera Angular:
|
|
460
|
+
|
|
461
|
+
```typescript fileName="src/app/components/locale-switcher.component.ts"
|
|
462
|
+
import { Component, inject } from "@angular/core";
|
|
463
|
+
import { CommonModule } from "@angular/common";
|
|
464
|
+
import { Router } from "@angular/router";
|
|
465
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
466
|
+
import { useLocale } from "angular-intlayer";
|
|
467
|
+
import { FormsModule } from "@angular/forms";
|
|
468
|
+
|
|
469
|
+
@Component({
|
|
470
|
+
selector: "app-locale-switcher",
|
|
471
|
+
standalone: true,
|
|
472
|
+
imports: [CommonModule, FormsModule],
|
|
473
|
+
template: `
|
|
474
|
+
<div class="locale-switcher">
|
|
475
|
+
<select [ngModel]="locale()" (ngModelChange)="changeLocale($event)">
|
|
476
|
+
<option *ngFor="let loc of availableLocales" [value]="loc">
|
|
477
|
+
{{ getLocaleName(loc) }}
|
|
478
|
+
</option>
|
|
479
|
+
</select>
|
|
480
|
+
</div>
|
|
481
|
+
`,
|
|
482
|
+
})
|
|
483
|
+
export class LocaleSwitcherComponent {
|
|
484
|
+
private router = inject(Router);
|
|
485
|
+
|
|
486
|
+
localeInfo = useLocale({
|
|
487
|
+
onLocaleChange: (newLocale) => {
|
|
488
|
+
const currentPath = this.router.url;
|
|
489
|
+
const localizedPath = getLocalizedUrl(currentPath, newLocale);
|
|
490
|
+
this.router.navigateByUrl(localizedPath);
|
|
491
|
+
},
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
locale = this.localeInfo.locale;
|
|
495
|
+
availableLocales = this.localeInfo.availableLocales;
|
|
496
|
+
|
|
497
|
+
getLocaleName = getLocaleName;
|
|
498
|
+
|
|
499
|
+
changeLocale(newLocale: string) {
|
|
500
|
+
this.localeInfo.setLocale(newLocale);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
### (Opcjonalny) Krok 9: Zmiana atrybutów języka i kierunku w tagu HTML
|
|
506
|
+
|
|
507
|
+
Gdy Twoja aplikacja obsługuje wiele języków, kluczowe jest zaktualizowanie atrybutów `lang` i `dir` w tagu `<html>`, aby odpowiadały aktualnej lokalizacji.
|
|
508
|
+
|
|
509
|
+
Możesz utworzyć serwis, który zajmie się tym automatycznie.
|
|
510
|
+
|
|
511
|
+
```typescript fileName="src/app/services/i18n-html-attributes.service.ts"
|
|
512
|
+
import { Injectable, effect } from "@angular/core";
|
|
513
|
+
import { useLocale } from "angular-intlayer";
|
|
514
|
+
import { getHTMLTextDir } from "intlayer";
|
|
515
|
+
|
|
516
|
+
@Injectable({
|
|
517
|
+
providedIn: "root",
|
|
518
|
+
})
|
|
519
|
+
export class I18nHtmlAttributesService {
|
|
520
|
+
private localeInfo = useLocale();
|
|
521
|
+
|
|
522
|
+
constructor() {
|
|
523
|
+
effect(() => {
|
|
524
|
+
const newLocale = this.localeInfo.locale();
|
|
525
|
+
if (newLocale) {
|
|
526
|
+
document.documentElement.lang = newLocale;
|
|
527
|
+
document.documentElement.dir = getHTMLTextDir(newLocale);
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// Ta metoda może być wywołana w głównym komponencie aplikacji, aby zapewnić inicjalizację serwisu.
|
|
533
|
+
init() {}
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
Następnie wstrzyknij i zainicjalizuj ten serwis w swoim głównym komponencie `AppComponent`:
|
|
538
|
+
|
|
539
|
+
```typescript fileName="src/app/app.component.ts"
|
|
540
|
+
import { Component, inject } from "@angular/core";
|
|
541
|
+
// ... inne importy
|
|
542
|
+
import { I18nHtmlAttributesService } from "./services/i18n-html-attributes.service";
|
|
543
|
+
|
|
544
|
+
@Component({
|
|
545
|
+
// ...
|
|
546
|
+
})
|
|
547
|
+
export class AppComponent {
|
|
548
|
+
constructor() {
|
|
549
|
+
inject(I18nHtmlAttributesService).init();
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### (Opcjonalny) Krok 10: Tworzenie dyrektywy zlokalizowanego linku
|
|
555
|
+
|
|
556
|
+
Aby zapewnić, że nawigacja w Twojej aplikacji respektuje aktualną lokalizację, możesz stworzyć niestandardową dyrektywę. Dyrektywa ta automatycznie dodaje prefiks języka do wewnętrznych adresów URL.
|
|
557
|
+
|
|
558
|
+
```typescript fileName="src/app/directives/localized-link.directive.ts"
|
|
559
|
+
import { Directive, Input, HostBinding, inject } from "@angular/core";
|
|
560
|
+
import { getLocalizedUrl } from "intlayer";
|
|
561
|
+
import { useLocale } from "angular-intlayer";
|
|
562
|
+
|
|
563
|
+
@Directive({
|
|
564
|
+
selector: "a[appLocalizedLink]",
|
|
565
|
+
standalone: true,
|
|
566
|
+
})
|
|
567
|
+
export class LocalizedLinkDirective {
|
|
568
|
+
@Input("href") originalHref: string = "";
|
|
569
|
+
|
|
570
|
+
private localeInfo = useLocale();
|
|
571
|
+
|
|
572
|
+
@HostBinding("href")
|
|
573
|
+
get localizedHref(): string {
|
|
574
|
+
const locale = this.localeInfo.locale();
|
|
575
|
+
const isExternalLink = /^https?:\/\//.test(this.originalHref);
|
|
576
|
+
|
|
577
|
+
if (isExternalLink || !this.originalHref) {
|
|
578
|
+
return this.originalHref;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
return getLocalizedUrl(this.originalHref, locale);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
Aby z niego skorzystać, dodaj dyrektywę `appLocalizedLink` do swoich tagów anchor i upewnij się, że zaimportowałeś ją w swoim komponencie.
|
|
587
|
+
|
|
588
|
+
```typescript fileName="src/app/app.component.ts"
|
|
589
|
+
// ...
|
|
590
|
+
import { LocalizedLinkDirective } from "./directives/localized-link.directive";
|
|
591
|
+
|
|
592
|
+
@Component({
|
|
593
|
+
selector: "app-root",
|
|
594
|
+
standalone: true,
|
|
595
|
+
imports: [/*...,*/ LocalizedLinkDirective],
|
|
596
|
+
template: ` <a href="/home" appLocalizedLink>Strona główna</a> `,
|
|
597
|
+
})
|
|
598
|
+
export class AppComponent {}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### (Opcjonalny) Krok 11: Renderowanie Markdown
|
|
602
|
+
|
|
603
|
+
Intlayer obsługuje renderowanie zawartości Markdown. Aby przekształcić Markdown w bogaty HTML, możesz zintegrować [markdown-it](https://github.com/markdown-it/markdown-it).
|
|
604
|
+
|
|
605
|
+
Najpierw zainstaluj `markdown-it`:
|
|
606
|
+
|
|
607
|
+
```bash
|
|
608
|
+
npm install markdown-it
|
|
609
|
+
# oraz jego typy
|
|
610
|
+
npm install -D @types/markdown-it
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Następnie skonfiguruj `INTLAYER_MARKDOWN_TOKEN` w swoim pliku `app.config.ts`.
|
|
614
|
+
|
|
615
|
+
```typescript fileName="src/app/app.config.ts"
|
|
616
|
+
import { ApplicationConfig } from "@angular/core";
|
|
617
|
+
import { provideRouter } from "@angular/router";
|
|
618
|
+
import { routes } from "./app.routes";
|
|
619
|
+
import { createIntlayerMarkdownProvider } from "angular-intlayer/markdown";
|
|
620
|
+
import MarkdownIt from "markdown-it";
|
|
621
|
+
|
|
622
|
+
const md = new MarkdownIt({
|
|
623
|
+
html: true,
|
|
624
|
+
linkify: true,
|
|
625
|
+
typographer: true,
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
export const appConfig: ApplicationConfig = {
|
|
629
|
+
providers: [
|
|
630
|
+
provideRouter(routes),
|
|
631
|
+
createIntlayerMarkdownProvider((markdown) => md.render(markdown)),
|
|
632
|
+
],
|
|
633
|
+
};
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
Domyślnie Intlayer zwraca renderowany HTML jako ciąg znaków. Jeśli używasz `[innerHTML]` do powiązania, pamiętaj o zagrożeniach bezpieczeństwa (XSS). Zawsze upewnij się, że Twoje treści pochodzą z zaufanego źródła.
|
|
637
|
+
|
|
638
|
+
W bardziej złożonych scenariuszach możesz utworzyć pipe do bezpiecznego renderowania HTML.
|
|
639
|
+
|
|
640
|
+
### Konfiguracja TypeScript
|
|
641
|
+
|
|
642
|
+
Intlayer używa rozszerzenia modułów, aby korzystać z zalet TypeScript i uczynić Twoją bazę kodu bardziej solidną.
|
|
643
|
+
|
|
644
|
+

|
|
645
|
+
|
|
646
|
+

|
|
647
|
+
|
|
648
|
+
Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.
|
|
649
|
+
|
|
650
|
+
```json5 fileName="tsconfig.json"
|
|
651
|
+
{
|
|
652
|
+
// ... Twoje istniejące konfiguracje TypeScript
|
|
653
|
+
"include": [
|
|
654
|
+
// ... Twoje istniejące konfiguracje TypeScript
|
|
655
|
+
".intlayer/**/*.ts", // Dołącz automatycznie generowane typy
|
|
656
|
+
],
|
|
657
|
+
}
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
### Konfiguracja Git
|
|
661
|
+
|
|
662
|
+
Zaleca się ignorowanie plików generowanych przez Intlayer. Pozwala to uniknąć ich zatwierdzania do repozytorium Git.
|
|
663
|
+
|
|
664
|
+
Aby to zrobić, możesz dodać następujące instrukcje do swojego pliku `.gitignore`:
|
|
665
|
+
|
|
666
|
+
```plaintext
|
|
667
|
+
# Ignoruj pliki generowane przez Intlayer
|
|
668
|
+
.intlayer
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
### Rozszerzenie VS Code
|
|
672
|
+
|
|
673
|
+
Aby poprawić swoje doświadczenie programistyczne z Intlayer, możesz zainstalować oficjalne **rozszerzenie Intlayer dla VS Code**.
|
|
674
|
+
|
|
675
|
+
[Zainstaluj z Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
676
|
+
|
|
677
|
+
To rozszerzenie oferuje:
|
|
678
|
+
|
|
679
|
+
- **Autouzupełnianie** kluczy tłumaczeń.
|
|
680
|
+
- **Wykrywanie błędów w czasie rzeczywistym** dla brakujących tłumaczeń.
|
|
681
|
+
- **Podglądy w linii** przetłumaczonej zawartości.
|
|
682
|
+
- **Szybkie akcje** do łatwego tworzenia i aktualizowania tłumaczeń.
|
|
683
|
+
|
|
684
|
+
Aby uzyskać więcej informacji o korzystaniu z rozszerzenia, zapoznaj się z [dokumentacją rozszerzenia Intlayer dla VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
685
|
+
|
|
686
|
+
---
|
|
687
|
+
|
|
688
|
+
### Idź dalej
|
|
689
|
+
|
|
690
|
+
Aby pójść dalej, możesz zaimplementować [edytor wizualny](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_visual_editor.md) lub wyeksportować swoją zawartość, korzystając z [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_CMS.md).
|