@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,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-01-02
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: react-i18next vs react-intl vs Intlayer
|
|
5
|
+
description: Integracja react-i18next z next-intl i Intlayer dla internacjonalizacji (i18n) aplikacji React
|
|
6
|
+
keywords:
|
|
7
|
+
- next-intl
|
|
8
|
+
- react-i18next
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Internacjonalizacja
|
|
11
|
+
- Blog
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- react-i18next-vs-react-intl-vs-intlayer
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# react-Intl VS react-i18next VS intlayer | Internacjonalizacja React (i18n)
|
|
21
|
+
|
|
22
|
+
Ten przewodnik porównuje trzy uznane opcje i18n dla **React**: **react-intl** (FormatJS), **react-i18next** (i18next) oraz **Intlayer**.
|
|
23
|
+
Skupiamy się na **czystych aplikacjach React** (np. Vite, CRA, SPA). Jeśli używasz Next.js, zobacz nasze dedykowane porównanie Next.js.
|
|
24
|
+
|
|
25
|
+
Oceniamy:
|
|
26
|
+
|
|
27
|
+
- Architektura i organizacja treści
|
|
28
|
+
- TypeScript i bezpieczeństwo
|
|
29
|
+
- Obsługa brakujących tłumaczeń
|
|
30
|
+
- Zaawansowane możliwości formatowania i bogate treści
|
|
31
|
+
- Wydajność i zachowanie podczas ładowania
|
|
32
|
+
- Doświadczenie dewelopera (DX), narzędzia i utrzymanie
|
|
33
|
+
- SEO/routing (zależne od frameworka)
|
|
34
|
+
|
|
35
|
+
<TOC/>
|
|
36
|
+
|
|
37
|
+
> **tl;dr**: Wszystkie trzy rozwiązania mogą lokalizować aplikację React. Jeśli chcesz mieć **treści ograniczone do komponentów**, **ścisłe typy TypeScript**, **sprawdzanie brakujących kluczy w czasie kompilacji**, **słowniki podlegające tree-shakingowi** oraz wbudowane narzędzia edytorskie (Visual Editor/CMS + opcjonalne tłumaczenia AI), **Intlayer** jest najbardziej kompletnym wyborem dla modularnych baz kodu React.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Pozycjonowanie na wysokim poziomie
|
|
42
|
+
|
|
43
|
+
- **react-intl** - Formatowanie zgodne ze standardami ICU (daty/liczby/liczby mnogie) z dojrzałym API. Katalogi są zazwyczaj scentralizowane; bezpieczeństwo kluczy i walidacja w czasie kompilacji leżą głównie po Twojej stronie.
|
|
44
|
+
- **react-i18next** - Niezwykle popularny i elastyczny; przestrzenie nazw, detektory i wiele wtyczek (ICU, backendy). Potężny, ale konfiguracja może się rozrosnąć wraz ze skalowaniem projektów.
|
|
45
|
+
- **Intlayer** - Model treści skoncentrowany na komponentach dla React, **ścisłe typowanie TS**, **sprawdzanie w czasie kompilacji**, **tree-shaking**, a także **Visual Editor/CMS** i **tłumaczenia wspomagane AI**. Działa z React Router, Vite, CRA itd.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Macierz funkcji (skupienie na React)
|
|
50
|
+
|
|
51
|
+
| Funkcja | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
|
|
52
|
+
| ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
53
|
+
| **Tłumaczenia Blisko Komponentów** | ✅ Tak, zawartość umieszczona razem z każdym komponentem | ❌ Nie | ❌ Nie |
|
|
54
|
+
| **Integracja z TypeScript** | ✅ Zaawansowana, automatycznie generowane ścisłe typy | ⚠️ Podstawowa; dodatkowa konfiguracja dla bezpieczeństwa | ✅ Dobra, ale mniej ścisła |
|
|
55
|
+
| **Wykrywanie Brakujących Tłumaczeń** | ✅ Podświetlanie błędów w TypeScript oraz błędy/ostrzeżenia podczas kompilacji | ⚠️ Głównie ciągi zapasowe podczas działania | ⚠️ Ciągi zapasowe |
|
|
56
|
+
| **Bogata Zawartość (JSX/Markdown/komponenty)** | ✅ Bezpośrednie wsparcie | ⚠️ Ograniczone / tylko interpolacja | ⚠️ Składnia ICU, nie prawdziwy JSX |
|
|
57
|
+
| **Tłumaczenie wspomagane przez AI** | ✅ Tak, obsługuje wielu dostawców AI. Można używać własnych kluczy API. Uwzględnia kontekst Twojej aplikacji i zakres treści | ❌ Nie | ❌ Nie |
|
|
58
|
+
| **Edytor Wizualny** | ✅ Tak, lokalny Edytor Wizualny + opcjonalny CMS; może zewnętrznie przechowywać zawartość codebase; możliwy do osadzenia | ❌ Nie / dostępny przez zewnętrzne platformy lokalizacyjne | ❌ Nie / dostępny przez zewnętrzne platformy lokalizacyjne |
|
|
59
|
+
| **Lokalizowane trasowanie** | ✅ Tak, obsługuje lokalizowane ścieżki od razu po wyjęciu z pudełka (działa z Next.js i Vite) | ⚠️ Brak wbudowanego wsparcia, wymaga wtyczek (np. `next-i18next`) lub niestandardowej konfiguracji routera | ❌ Nie, tylko formatowanie wiadomości, trasowanie musi być ręczne |
|
|
60
|
+
| **Dynamiczne generowanie tras** | ✅ Tak | ⚠️ Wtyczka/ekosystem lub ręczna konfiguracja | ❌ Nie zapewnione |
|
|
61
|
+
| **Odmiana liczby mnogiej** | ✅ Wzorce oparte na enumeracji | ✅ Konfigurowalne (wtyczki takie jak i18next-icu) | ✅ (ICU) |
|
|
62
|
+
| **Formatowanie (daty, liczby, waluty)** | ✅ Optymalizowane formatery (Intl pod spodem) | ⚠️ Za pomocą wtyczek lub niestandardowego użycia Intl | ✅ Formatery ICU |
|
|
63
|
+
| **Format treści** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) | ⚠️ .json | ✅ .json, .js |
|
|
64
|
+
| **Wsparcie ICU** | ⚠️ W trakcie realizacji | ⚠️ Poprzez wtyczkę (i18next-icu) | ✅ Tak |
|
|
65
|
+
| **SEO Helpers (hreflang, sitemap)** | ✅ Wbudowane narzędzia: pomocniki do sitemap, robots.txt, metadanych | ⚠️ Wtyczki społeczności/manualne | ❌ Nie jest częścią rdzenia |
|
|
66
|
+
| **Ekosystem / Społeczność** | ⚠️ Mniejsza, ale szybko rosnąca i reaktywna | ✅ Największa i dojrzała | ✅ Duża |
|
|
67
|
+
| **Server-side Rendering & Server Components** | ✅ Tak, zoptymalizowane pod SSR / React Server Components | ⚠️ Obsługiwane na poziomie strony, ale konieczne jest przekazywanie funkcji t w drzewie komponentów dla dzieci serwerowych komponentów | ❌ Nieobsługiwane, konieczne jest przekazywanie funkcji t w drzewie komponentów dla dzieci serwerowych komponentów |
|
|
68
|
+
| **Tree-shaking (ładowanie tylko używanej zawartości)** | ✅ Tak, per-komponent podczas budowania za pomocą wtyczek Babel/SWC | ⚠️ Zazwyczaj ładuje wszystko (można poprawić za pomocą przestrzeni nazw/podziału kodu) | ⚠️ Zazwyczaj ładuje wszystko |
|
|
69
|
+
| **Lazy loading** | ✅ Tak, per-locale / per-słownik | ✅ Tak (np. backendy/przestrzenie nazw na żądanie) | ✅ Tak (podzielone pakiety lokalizacji) |
|
|
70
|
+
| **Purge unused content** | ✅ Tak, per-słownik podczas kompilacji | ❌ Nie, tylko poprzez ręczną segmentację przestrzeni nazw | ❌ Nie, wszystkie zadeklarowane komunikaty są dołączone |
|
|
71
|
+
| **Zarządzanie dużymi projektami** | ✅ Zachęca do modularności, odpowiednie dla systemów projektowych | ⚠️ Wymaga dobrej dyscypliny w zarządzaniu plikami | ⚠️ Centralne katalogi mogą stać się duże |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Szczegółowe porównanie
|
|
76
|
+
|
|
77
|
+
### 1) Architektura i skalowalność
|
|
78
|
+
|
|
79
|
+
- **react-intl / react-i18next**: Większość konfiguracji utrzymuje **centralne foldery lokalizacji** dla każdego języka, czasem podzielone na **przestrzenie nazw** (i18next). Działa dobrze na początku, ale staje się wspólną powierzchnią w miarę rozwoju aplikacji.
|
|
80
|
+
- **Intlayer**: Promuje **słowniki per-komponent (lub per-funkcję)** **współlokowane** z UI, które obsługują. Utrzymuje to jasność własności, ułatwia duplikację/migrację komponentów oraz zmniejsza rotację kluczy między zespołami. Niepotrzebne treści są łatwiejsze do zidentyfikowania i usunięcia.
|
|
81
|
+
|
|
82
|
+
**Dlaczego to ważne:** Modularna zawartość odzwierciedla modularny UI. Duże bazy kodu React pozostają czyściejsze, gdy tłumaczenia są powiązane z komponentami, do których należą.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 2) TypeScript i bezpieczeństwo
|
|
87
|
+
|
|
88
|
+
- **react-intl**: Solidne typowanie, ale **brak automatycznego typowania kluczy**; samodzielnie wymuszasz wzorce bezpieczeństwa.
|
|
89
|
+
- **react-i18next**: Silne typowanie dla hooków; **ścisłe typowanie kluczy** zazwyczaj wymaga dodatkowej konfiguracji lub generatorów.
|
|
90
|
+
- **Intlayer**: **Automatycznie generuje ścisłe typy** na podstawie Twoich treści. Autouzupełnianie w IDE oraz **błędy podczas kompilacji** wykrywają literówki i brakujące klucze przed uruchomieniem aplikacji.
|
|
91
|
+
|
|
92
|
+
**Dlaczego to ważne:** Przesunięcie błędów **w lewo** (do etapu build/CI) zmniejsza problemy w produkcji i przyspiesza pętle informacji zwrotnej dla deweloperów.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 3) Obsługa brakujących tłumaczeń
|
|
97
|
+
|
|
98
|
+
- **react-intl / react-i18next**: Domyślnie stosują **fallbacki w czasie wykonywania** (echo klucza lub domyślny język). Można dodać linting/wtyczki, ale nie jest to gwarantowane na etapie build.
|
|
99
|
+
- **Intlayer**: **Wykrywanie podczas kompilacji** z ostrzeżeniami lub błędami, gdy wymagane locale/klucze są brakujące.
|
|
100
|
+
|
|
101
|
+
**Dlaczego to ważne:** Niepowodzenie CI z powodu brakujących stringów zapobiega „tajemniczemu angielskiemu” przedostającemu się do interfejsów w innych językach.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### 4) Bogate treści i formatowanie
|
|
106
|
+
|
|
107
|
+
- **react-intl**: Doskonałe wsparcie dla **ICU** w zakresie liczby mnogiej, wyborów, dat/liczb oraz komponowania komunikatów. Można używać JSX, ale model mentalny pozostaje skoncentrowany na komunikacie.
|
|
108
|
+
- **react-i18next**: Elastyczna interpolacja oraz **`<Trans>`** do osadzania elementów/komponentów; ICU dostępne przez wtyczkę.
|
|
109
|
+
- **Intlayer**: Pliki z treścią mogą zawierać **bogate węzły** (JSX/Markdown/komponenty) oraz **metadane**. Formatowanie korzysta z Intl w tle; wzorce liczby mnogiej są ergonomiczne.
|
|
110
|
+
|
|
111
|
+
**Dlaczego to ważne:** Złożone teksty UI (linki, pogrubione fragmenty, komponenty w linii) są łatwiejsze do obsługi, gdy biblioteka w pełni wspiera węzły React.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 5) Wydajność i zachowanie ładowania
|
|
116
|
+
|
|
117
|
+
- **react-intl / react-i18next**: Zazwyczaj zarządzasz **dzieleniem katalogów** i **leniwe ładowanie** ręcznie (przestrzenie nazw/importy dynamiczne). Skuteczne, ale wymaga dyscypliny.
|
|
118
|
+
- **Intlayer**: **Tree-shaking** nieużywanych słowników i obsługuje **leniwe ładowanie na poziomie słownika/locale** od razu po wyjęciu z pudełka.
|
|
119
|
+
|
|
120
|
+
**Dlaczego to ważne:** Mniejsze paczki i mniej nieużywanych ciągów poprawiają wydajność uruchamiania i nawigacji.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### 6) DX, narzędzia i utrzymanie
|
|
125
|
+
|
|
126
|
+
- **react-intl / react-i18next**: Szeroki ekosystem społeczności; do przepływów redakcyjnych zazwyczaj korzystasz z zewnętrznych platform lokalizacyjnych.
|
|
127
|
+
- **Intlayer**: Dostarcza **bezpłatny Edytor Wizualny** oraz **opcjonalny CMS** (przechowuj treści w Git lub zewnętrznie). Oferuje także **rozszerzenie VSCode** do tworzenia treści oraz **tłumaczenia wspomagane przez AI** z wykorzystaniem własnych kluczy dostawcy.
|
|
128
|
+
|
|
129
|
+
**Dlaczego to ważne:** Wbudowane narzędzia skracają cykl współpracy między programistami a autorami treści – mniej kodu łączącego, mniej zależności od dostawców.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Kiedy wybrać które?
|
|
134
|
+
|
|
135
|
+
- **Wybierz react-intl**, jeśli chcesz formatowania wiadomości **z priorytetem ICU** z prostym, zgodnym ze standardami API, a Twój zespół jest gotowy ręcznie utrzymywać katalogi i kontrole bezpieczeństwa.
|
|
136
|
+
- **Wybierz react-i18next**, jeśli potrzebujesz **szerokiego ekosystemu i18next** (detektory, backendy, wtyczka ICU, integracje) i akceptujesz większą konfigurację dla uzyskania elastyczności.
|
|
137
|
+
- **Wybierz Intlayer**, jeśli cenisz sobie **zawartość ograniczoną do komponentu**, **ścisły TypeScript**, **gwarancje w czasie kompilacji**, **tree-shaking** oraz **wbudowane narzędzia edycyjne** – szczególnie dla **dużych, modułowych** aplikacji React, systemów projektowych itp.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Współpraca z `react-intl` i `react-i18next`
|
|
142
|
+
|
|
143
|
+
`intlayer` może również pomóc w zarządzaniu przestrzeniami nazw `react-intl` i `react-i18next`.
|
|
144
|
+
|
|
145
|
+
Korzystając z `intlayer`, możesz deklarować swoją zawartość w formacie ulubionej biblioteki i18n, a intlayer wygeneruje Twoje przestrzenie nazw w wybranej lokalizacji (np. `/messages/{{locale}}/{{namespace}}.json`).
|
|
146
|
+
|
|
147
|
+
Zapoznaj się z opcjami [`dictionaryOutput` i `i18nextResourcesDir`](https://intlayer.org/doc/concept/configuration#content-configuration) po więcej szczegółów.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Gwiazdki GitHub
|
|
152
|
+
|
|
153
|
+
Gwiazdy na GitHubie są silnym wskaźnikiem popularności projektu, zaufania społeczności oraz jego długoterminowej istotności. Choć nie są bezpośrednią miarą jakości technicznej, odzwierciedlają, ilu programistów uważa projekt za użyteczny, śledzi jego rozwój i prawdopodobnie go zaadaptuje. Przy szacowaniu wartości projektu, gwiazdy pomagają porównać zainteresowanie różnymi alternatywami oraz dostarczają wglądu w rozwój ekosystemu.
|
|
154
|
+
|
|
155
|
+
## [](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&aymericzip/intlayer)
|
|
156
|
+
|
|
157
|
+
## Podsumowanie
|
|
158
|
+
|
|
159
|
+
Wszystkie trzy biblioteki skutecznie lokalizują React. Różnicą jest to, ile **infrastruktury** musisz zbudować, aby osiągnąć **bezpieczną, skalowalną** konfigurację:
|
|
160
|
+
|
|
161
|
+
- W przypadku **Intlayer**, **modularna zawartość**, **ścisłe typowanie TS**, **bezpieczeństwo w czasie kompilacji**, **tree-shaken bundles** oraz **narzędzia edytorskie** są domyślne - a nie obowiązkowe.
|
|
162
|
+
- Jeśli Twój zespół ceni **utrzymywalność i szybkość** w wielojęzycznych aplikacjach React opartych na komponentach, Intlayer oferuje dziś **najbardziej kompletny** workflow dla deweloperów i zarządzania treścią.
|
|
163
|
+
|
|
164
|
+
Zapoznaj się z dokumentem ['Dlaczego Intlayer?'](https://intlayer.org/doc/why) po więcej szczegółów.
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-08-11
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
|
+
title: vue-i18n vs Intlayer
|
|
5
|
+
description: Porównanie vue-i18n z Intlayer pod kątem internacjonalizacji (i18n) w aplikacjach Vue/Nuxt
|
|
6
|
+
keywords:
|
|
7
|
+
- vue-i18n
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Internacjonalizacja
|
|
10
|
+
- i18n
|
|
11
|
+
- Blog
|
|
12
|
+
- Vue
|
|
13
|
+
- Nuxt
|
|
14
|
+
- JavaScript
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- vue-i18n-vs-intlayer
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# vue-i18n VS Intlayer | Internacjonalizacja Vue (i18n)
|
|
21
|
+
|
|
22
|
+
Ten przewodnik porównuje dwie popularne opcje i18n dla **Vue 3** (oraz **Nuxt**): **vue-i18n** i **Intlayer**.
|
|
23
|
+
Skupiamy się na nowoczesnych narzędziach Vue (Vite, Composition API) i oceniamy:
|
|
24
|
+
|
|
25
|
+
1. **Architekturę i organizację treści**
|
|
26
|
+
2. **TypeScript i bezpieczeństwo**
|
|
27
|
+
3. **Obsługę brakujących tłumaczeń**
|
|
28
|
+
4. **Routing i strategię URL**
|
|
29
|
+
5. **Wydajność i zachowanie ładowania**
|
|
30
|
+
6. **Doświadczenie dewelopera (DX), narzędzia i utrzymanie**
|
|
31
|
+
7. **SEO i skalowalność dużych projektów**
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
> **w skrócie**: Oba rozwiązania mogą lokalizować aplikacje Vue. Jeśli chcesz **treści ograniczonej do komponentu**, **ścisłych typów TypeScript**, **sprawdzania brakujących kluczy w czasie kompilacji**, **słowników poddanych tree-shakingowi**, oraz **wbudowanych helperów do routera/SEO** wraz z **Edytorem Wizualnym i tłumaczeniami AI**, **Intlayer** jest bardziej kompletnym, nowoczesnym wyborem.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Pozycjonowanie na wysokim poziomie
|
|
40
|
+
|
|
41
|
+
- **vue-i18n** - De facto biblioteka i18n dla Vue. Elastyczne formatowanie wiadomości (w stylu ICU), bloki SFC `<i18n>` dla lokalnych wiadomości oraz duży ekosystem. Bezpieczeństwo i utrzymanie na dużą skalę leżą głównie po twojej stronie.
|
|
42
|
+
- **Intlayer** - Model treści skoncentrowany na komponentach dla Vue/Vite/Nuxt z **ścisłym typowaniem TS**, **sprawdzaniem w czasie kompilacji**, **tree-shakingiem**, **helperami do routera i SEO**, opcjonalnym **Edytorem Wizualnym/CMS** oraz **tłumaczeniami wspomaganymi przez AI**.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Porównanie funkcji obok siebie (skupione na Vue)
|
|
47
|
+
|
|
48
|
+
| Funkcja | **Intlayer** | **vue-i18n** |
|
|
49
|
+
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
50
|
+
| **Tłumaczenia blisko komponentów** | ✅ Tak, treść współlokowana per komponent (np. `MyComp.content.ts`) | ✅ Tak, przez bloki SFC `<i18n>` (opcjonalnie) |
|
|
51
|
+
| **Integracja z TypeScript** | ✅ Zaawansowana, automatycznie generowane **ścisłe** typy i autouzupełnianie kluczy | ✅ Dobre typowanie; **ścisłe bezpieczeństwo kluczy wymaga dodatkowej konfiguracji/dyscypliny** |
|
|
52
|
+
| **Wykrywanie brakujących tłumaczeń** | ✅ Ostrzeżenia/błędy w czasie kompilacji i widoczność w TS | ⚠️ Fallbacki/ostrzeżenia w czasie działania |
|
|
53
|
+
| **Bogata zawartość (komponenty/Markdown)** | ✅ Bezpośrednie wsparcie dla bogatych węzłów i plików zawartości Markdown | ⚠️ Ograniczone (komponenty przez `<i18n-t>`, Markdown przez zewnętrzne wtyczki) |
|
|
54
|
+
| **Tłumaczenie wspomagane AI** | ✅ Wbudowane workflowy wykorzystujące własne klucze dostawcy AI | ❌ Brak wbudowanego wsparcia |
|
|
55
|
+
| **Edytor wizualny / CMS** | ✅ Darmowy Edytor Wizualny i opcjonalny CMS | ❌ Brak wbudowanego wsparcia (używaj zewnętrznych platform) |
|
|
56
|
+
| **Lokalizowane routowanie** | ✅ Pomocniki dla Vue Router/Nuxt do generowania lokalizowanych ścieżek, URL-i oraz `hreflang` | ⚠️ Nie jest rdzeniem (użyj Nuxt i18n lub własnej konfiguracji Vue Router) |
|
|
57
|
+
| **Dynamiczne generowanie tras** | ✅ Tak | ❌ Nie dostarczone (dostarcza Nuxt i18n) |
|
|
58
|
+
| **Pluralizacja i formatowanie** | ✅ Wzorce enumeracji; formatery oparte na Intl | ✅ Komunikaty w stylu ICU; formatery Intl |
|
|
59
|
+
| **Formaty treści** | ✅ `.ts`, `.js`, `.json`, `.md`, `.txt` (YAML W trakcie realizacji) | ✅ `.json`, `.js` (plus bloki SFC `<i18n>`) |
|
|
60
|
+
| **Wsparcie ICU** | ⚠️ W trakcie realizacji | ✅ Tak |
|
|
61
|
+
| **Pomocniki SEO (mapa strony, robots, metadane)** | ✅ Wbudowane pomocniki (niezależne od frameworka) | ❌ Nie jest rdzeniem (Nuxt i18n/społeczność) |
|
|
62
|
+
| **SSR/SSG** | ✅ Działa z Vue SSR i Nuxt; nie blokuje renderowania statycznego | ✅ Działa z Vue SSR/Nuxt |
|
|
63
|
+
| **Tree-shaking (wysyłanie tylko używanej zawartości)** | ✅ Na poziomie komponentu podczas budowania | ⚠️ Częściowo; wymaga ręcznego dzielenia kodu/asynchronicznych wiadomości |
|
|
64
|
+
| **Lazy loading** | ✅ Na poziomie lokalizacji / słownika | ✅ Obsługa asynchronicznych wiadomości lokalizacyjnych |
|
|
65
|
+
| **Usuwanie nieużywanej zawartości** | ✅ Tak (podczas budowania) | ❌ Brak wbudowanego wsparcia |
|
|
66
|
+
| **Utrzymanie dużych projektów** | ✅ Zachęca do modularnej, przyjaznej dla systemów designu struktury | ✅ Możliwe, ale wymaga silnej dyscypliny w zakresie plików/przestrzeni nazw |
|
|
67
|
+
| **Ekosystem / społeczność** | ⚠️ Mniejszy, ale szybko rosnący | ✅ Duży i dojrzały w ekosystemie Vue |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Szczegółowe porównanie
|
|
72
|
+
|
|
73
|
+
### 1) Architektura i skalowalność
|
|
74
|
+
|
|
75
|
+
- **vue-i18n**: Popularne konfiguracje używają **centralizowanych katalogów** dla każdego locale (opcjonalnie podzielonych na pliki/przestrzenie nazw). Bloki SFC `<i18n>` pozwalają na lokalne wiadomości, ale zespoły często wracają do wspólnych katalogów w miarę rozwoju projektów.
|
|
76
|
+
- **Intlayer**: Promuje **słowniki per-komponent**, przechowywane obok komponentu, któremu służą. To zmniejsza konflikty między zespołami, utrzymuje zawartość łatwą do odnalezienia i naturalnie ogranicza dryf/nieużywane klucze.
|
|
77
|
+
|
|
78
|
+
**Dlaczego to ważne:** W dużych aplikacjach Vue lub systemach designu, **modularna zawartość** lepiej się skaluje niż monolityczne katalogi.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### 2) TypeScript i bezpieczeństwo
|
|
83
|
+
|
|
84
|
+
- **vue-i18n**: Dobre wsparcie dla TS; **ścisłe typowanie kluczy** zazwyczaj wymaga niestandardowych schematów/generics i starannych konwencji.
|
|
85
|
+
- **Intlayer**: **Generuje ścisłe typy** na podstawie Twoich treści, zapewniając **autouzupełnianie w IDE** oraz **błędy podczas kompilacji** w przypadku literówek lub brakujących kluczy.
|
|
86
|
+
|
|
87
|
+
**Dlaczego to ważne:** Silne typowanie wykrywa problemy **przed** uruchomieniem aplikacji.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### 3) Obsługa brakujących tłumaczeń
|
|
92
|
+
|
|
93
|
+
- **vue-i18n**: Ostrzeżenia i mechanizmy zapasowe **w czasie wykonywania** (np. powrót do domyślnego locale lub klucza).
|
|
94
|
+
- **Intlayer**: Wykrywanie **w czasie budowania** z ostrzeżeniami/błędami dla wszystkich locale i kluczy.
|
|
95
|
+
|
|
96
|
+
**Dlaczego to ważne:** Wymuszanie kontroli podczas budowania utrzymuje produkcyjny interfejs czysty i spójny.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### 4) Routing i strategia URL (Vue Router/Nuxt)
|
|
101
|
+
|
|
102
|
+
- **Oba** mogą działać z lokalizowanymi trasami.
|
|
103
|
+
- **Intlayer** dostarcza narzędzia do **generowania zlokalizowanych ścieżek**, **zarządzania prefiksami lokalizacji** oraz emitowania **`<link rel="alternate" hreflang>`** dla SEO. W przypadku Nuxt uzupełnia routing frameworka.
|
|
104
|
+
|
|
105
|
+
**Dlaczego to ważne:** Mniej niestandardowych warstw łączących i **czystsze SEO** w różnych lokalizacjach.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### 5) Wydajność i zachowanie ładowania
|
|
110
|
+
|
|
111
|
+
- **vue-i18n**: Obsługuje asynchroniczne wiadomości lokalizacyjne; unikanie nadmiernego pakowania zależy od Ciebie (ostrożnie dziel katalogi).
|
|
112
|
+
- **Intlayer**: **Tree-shaking** podczas budowania oraz **leniwe ładowanie per słownik/lokalizacja**. Nieużywane treści nie są dołączane.
|
|
113
|
+
|
|
114
|
+
**Dlaczego to ważne:** Mniejsze pakiety i szybsze uruchamianie aplikacji Vue z wieloma lokalizacjami.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### 6) Doświadczenie deweloperskie i narzędzia
|
|
119
|
+
|
|
120
|
+
- **vue-i18n**: Dojrzała dokumentacja i społeczność; zazwyczaj będziesz polegać na **zewnętrznych platformach lokalizacyjnych** do procesów redakcyjnych.
|
|
121
|
+
- **Intlayer**: Dostarcza **bezpłatny Edytor Wizualny**, opcjonalny **CMS** (przyjazny Git lub zewnętrzny), rozszerzenie **VSCode**, narzędzia **CLI/CI** oraz **tłumaczenia wspomagane AI** z wykorzystaniem własnych kluczy dostawcy.
|
|
122
|
+
|
|
123
|
+
**Dlaczego to ważne:** Niższe koszty operacyjne i krótsza pętla między deweloperem a treścią.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 7) SEO, SSR i SSG
|
|
128
|
+
|
|
129
|
+
- **Oba** działają z Vue SSR i Nuxt.
|
|
130
|
+
- **Intlayer**: Dodaje **narzędzia SEO** (mapy witryn/metadane/`hreflang`), które są niezależne od frameworka i dobrze współpracują z buildami Vue/Nuxt.
|
|
131
|
+
|
|
132
|
+
**Dlaczego to ważne:** Międzynarodowe SEO bez konieczności specjalistycznego okablowania.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Dlaczego Intlayer? (Problem i podejście)
|
|
137
|
+
|
|
138
|
+
Większość stosów i18n (w tym **vue-i18n**) zaczyna od **scentralizowanych katalogów**:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
.
|
|
142
|
+
├── locales
|
|
143
|
+
│ ├── en.json
|
|
144
|
+
│ ├── es.json
|
|
145
|
+
│ └── fr.json
|
|
146
|
+
└── src
|
|
147
|
+
└── components
|
|
148
|
+
└── MyComponent.vue
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Lub z folderami per-locale:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
.
|
|
155
|
+
├── locales
|
|
156
|
+
│ ├── en
|
|
157
|
+
│ │ ├── footer.json
|
|
158
|
+
│ │ └── navbar.json
|
|
159
|
+
│ ├── fr
|
|
160
|
+
│ │ ├── footer.json
|
|
161
|
+
│ │ └── navbar.json
|
|
162
|
+
│ └── es
|
|
163
|
+
│ ├── footer.json
|
|
164
|
+
│ └── navbar.json
|
|
165
|
+
└── src
|
|
166
|
+
└── components
|
|
167
|
+
└── MyComponent.vue
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
To często spowalnia rozwój w miarę rozrastania się aplikacji:
|
|
171
|
+
|
|
172
|
+
1. **Dla nowego komponentu** tworzysz/edytujesz zdalne katalogi, łączysz przestrzenie nazw i tłumaczysz (często przez ręczne kopiuj/wklej z narzędzi AI).
|
|
173
|
+
2. **Podczas zmiany komponentów** wyszukujesz wspólne klucze, tłumaczysz, synchronizujesz lokalizacje, usuwasz nieużywane klucze i dopasowujesz struktury JSON.
|
|
174
|
+
|
|
175
|
+
**Intlayer** organizuje zawartość **per-komponent** i przechowuje ją **obok kodu**, tak jak robimy to już z CSS, stories, testami i dokumentacją:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
.
|
|
179
|
+
└── components
|
|
180
|
+
└── MyComponent
|
|
181
|
+
├── MyComponent.content.ts
|
|
182
|
+
└── MyComponent.vue
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Deklaracja zawartości** (per komponent):
|
|
186
|
+
|
|
187
|
+
```ts fileName="./components/MyComponent/MyComponent.content.ts"
|
|
188
|
+
import { t, type Dictionary } from "intlayer";
|
|
189
|
+
|
|
190
|
+
const componentExampleContent = {
|
|
191
|
+
key: "component-example",
|
|
192
|
+
content: {
|
|
193
|
+
greeting: t({
|
|
194
|
+
en: "Hello World",
|
|
195
|
+
es: "Hola Mundo",
|
|
196
|
+
fr: "Bonjour le monde",
|
|
197
|
+
}),
|
|
198
|
+
},
|
|
199
|
+
} satisfies Dictionary;
|
|
200
|
+
|
|
201
|
+
export default componentExampleContent;
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Użycie w Vue** (Composition API):
|
|
205
|
+
|
|
206
|
+
```vue fileName="./components/MyComponent/MyComponent.vue"
|
|
207
|
+
<script setup lang="ts">
|
|
208
|
+
import { useIntlayer } from "vue-intlayer"; // integracja z Vue
|
|
209
|
+
const { greeting } = useIntlayer("component-example");
|
|
210
|
+
</script>
|
|
211
|
+
|
|
212
|
+
<template>
|
|
213
|
+
<span>{{ greeting }}</span>
|
|
214
|
+
</template>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
To podejście:
|
|
218
|
+
|
|
219
|
+
- **Przyspiesza rozwój** (deklarujesz raz; IDE/AI podpowiada).
|
|
220
|
+
- **Porządkuje bazę kodu** (1 komponent = 1 słownik).
|
|
221
|
+
- **Ułatwia duplikację/migrację** (kopiuj komponent wraz z jego zawartością).
|
|
222
|
+
- **Unika martwych kluczy** (nieużywane komponenty nie importują zawartości).
|
|
223
|
+
- **Optymalizuje ładowanie** (komponenty ładowane leniwie przynoszą ze sobą swoją zawartość).
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Dodatkowe funkcje Intlayer (istotne dla Vue)
|
|
228
|
+
|
|
229
|
+
- **Wsparcie wieloplatformowe**: Działa z Vue, Nuxt, Vite, React, Express i innymi.
|
|
230
|
+
- **Zarządzanie zawartością oparte na JavaScript**: Deklaruj w kodzie z pełną elastycznością.
|
|
231
|
+
- **Plik deklaracji na lokalizację**: Zainicjuj wszystkie lokalizacje i pozwól narzędziom wygenerować resztę.
|
|
232
|
+
- **Środowisko z typami**: Silna konfiguracja TS z autouzupełnianiem.
|
|
233
|
+
- **Uproszczone pobieranie treści**: Jeden hook/composable do pobrania całej zawartości słownika.
|
|
234
|
+
- **Zorganizowana baza kodu**: 1 komponent = 1 słownik w tym samym folderze.
|
|
235
|
+
- **Ulepszone routowanie**: Pomocniki dla **Vue Router/Nuxt** do lokalizowanych ścieżek i metadanych.
|
|
236
|
+
- **Wsparcie Markdown**: Importuj zdalny/lokalny Markdown na lokalizację; udostępniaj frontmatter w kodzie.
|
|
237
|
+
- **Darmowy Edytor Wizualny i opcjonalny CMS**: Tworzenie bez płatnej platformy lokalizacyjnej; synchronizacja przyjazna Git.
|
|
238
|
+
- **Treść możliwa do tree-shakingu**: Dostarcza tylko to, co jest używane; wspiera lazy loading.
|
|
239
|
+
- **Przyjazny dla statycznego renderowania**: Nie blokuje SSG.
|
|
240
|
+
- **Tłumaczenia wspomagane AI**: Tłumacz na 231 języków, korzystając z własnego dostawcy AI/klucza API.
|
|
241
|
+
- **Serwer MCP i rozszerzenie VSCode**: Automatyzuj workflow i18n oraz tworzenie treści bezpośrednio w IDE.
|
|
242
|
+
- **Interoperacyjność**: Mosty z **vue-i18n**, **react-i18next** i **react-intl** w razie potrzeby.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Kiedy wybrać które?
|
|
247
|
+
|
|
248
|
+
- **Wybierz vue-i18n**, jeśli chcesz **standardowe podejście Vue**, czujesz się komfortowo zarządzając katalogami/przestrzeniami nazw samodzielnie, a Twoja aplikacja jest **mała lub średnia** (lub już korzystasz z Nuxt i18n).
|
|
249
|
+
- **Wybierz Intlayer**, jeśli cenisz **zawartość ograniczoną do komponentu**, **ścisły TypeScript**, **gwarancje na etapie budowania**, **tree-shaking** oraz **wbudowane narzędzia do routingu/SEO/edytora** — szczególnie dla **dużych, modułowych baz kodu Vue/Nuxt**, systemów projektowych itp.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Współpraca z vue-i18n
|
|
254
|
+
|
|
255
|
+
`intlayer` może również pomóc w zarządzaniu przestrzeniami nazw `vue-i18n`.
|
|
256
|
+
|
|
257
|
+
Korzystając z `intlayer`, możesz zadeklarować swoją zawartość w formacie ulubionej biblioteki i18n, a intlayer wygeneruje Twoje przestrzenie nazw w wybranej lokalizacji (np. `/messages/{{locale}}/{{namespace}}.json`).
|
|
258
|
+
|
|
259
|
+
Zapoznaj się z opcjami [`dictionaryOutput` i `i18nextResourcesDir`](https://intlayer.org/doc/concept/configuration#content-configuration), aby uzyskać więcej szczegółów.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Gwiazdki na GitHubie (GitHub STARs)
|
|
264
|
+
|
|
265
|
+
Gwiazdy na GitHubie są silnym wskaźnikiem popularności projektu, zaufania społeczności oraz jego długoterminowej istotności. Choć nie są bezpośrednim miernikiem jakości technicznej, odzwierciedlają, ilu deweloperów uważa projekt za użyteczny, śledzi jego rozwój i jest skłonnych go przyjąć. Przy szacowaniu wartości projektu, gwiazdy pomagają porównać zainteresowanie różnymi alternatywami oraz dostarczają wglądu w rozwój ekosystemu.
|
|
266
|
+
|
|
267
|
+
[](https://www.star-history.com/#intlify/vue-i18n&aymericzip/intlayer)
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Podsumowanie
|
|
272
|
+
|
|
273
|
+
Zarówno **vue-i18n**, jak i **Intlayer** dobrze lokalizują aplikacje Vue. Różnica polega na tym, **ile musisz sam zbudować**, aby osiągnąć solidną, skalowalną konfigurację:
|
|
274
|
+
|
|
275
|
+
- W przypadku **Intlayer** **modularna zawartość**, **ścisły TS**, **bezpieczeństwo w czasie kompilacji**, **tree-shaken bundles** oraz **narzędzia do routera/SEO/edytora** są dostępne **od razu po wyjęciu z pudełka**.
|
|
276
|
+
- Jeśli Twój zespół stawia na **łatwość utrzymania i szybkość** w wielojęzycznej aplikacji Vue/Nuxt opartej na komponentach, Intlayer oferuje dziś **najbardziej kompletną** funkcjonalność.
|
|
277
|
+
|
|
278
|
+
Zapoznaj się z dokumentem ['Dlaczego Intlayer?'](https://intlayer.org/doc/why) po więcej szczegółów.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-01-16
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Czym jest internacjonalizacja (i18n)? Definicja i wyzwania
|
|
5
|
+
description: Dowiedz się, dlaczego internacjonalizacja Twojej strony internetowej jest niezbędna. Poznaj kluczowe zasady, które poprawią SEO, zwiększą komfort użytkownika i rozszerzą zasięg globalny.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- wielojęzyczność
|
|
9
|
+
- SEO
|
|
10
|
+
- Internacjonalizacja
|
|
11
|
+
- Blog
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- what-is-internationalization
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Czym jest internacjonalizacja (i18n)? Definicja i wyzwania
|
|
21
|
+
|
|
22
|
+

|
|
23
|
+
|
|
24
|
+
## Zrozumienie internacjonalizacji (i18n)
|
|
25
|
+
|
|
26
|
+
**Internacjonalizacja**, często skracana do **i18n**, to proces projektowania i przygotowywania aplikacji do obsługi wielu języków, kultur oraz regionalnych konwencji **bez** konieczności wprowadzania istotnych zmian w kodzie źródłowym. Nazwa i18n pochodzi od faktu, że pomiędzy literą **i** a literą **n** w słowie „internationalization” znajduje się 18 liter.
|
|
27
|
+
|
|
28
|
+
## Dlaczego i18n jest ważne
|
|
29
|
+
|
|
30
|
+
### SEO
|
|
31
|
+
|
|
32
|
+
Internacjonalizacja odgrywa kluczową rolę w poprawie optymalizacji strony pod kątem wyszukiwarek internetowych (SEO). Wyszukiwarki takie jak Google i Bing analizują język oraz kulturową adekwatność Twoich treści, aby określić ich pozycję w wynikach wyszukiwania. Dostosowując swoją stronę do obsługi wielu języków i regionalnych formatów, możesz znacząco zwiększyć jej widoczność w wynikach wyszukiwania. To nie tylko przyciąga szerszą publiczność, ale także pomaga Twojej stronie osiągać wyższe pozycje, ponieważ wyszukiwarki doceniają wysiłek włożony w dostosowanie się do różnorodnej grupy użytkowników.
|
|
33
|
+
|
|
34
|
+
### Globalny zasięg
|
|
35
|
+
|
|
36
|
+
Równie ważny jest globalny zasięg, jaki oferuje internacjonalizacja. Usuwając bariery językowe i projektując aplikację tak, aby wspierała różne normy kulturowe, otwierasz drzwi dla milionów potencjalnych użytkowników na całym świecie. Dostarczanie zlokalizowanych treści i interfejsów użytkownika wyróżnia Twój produkt na tle konkurencji, która może oferować wsparcie tylko dla ograniczonej liczby języków. Takie inkluzywne podejście sprawia, że użytkownicy czują się zauważeni i docenieni, niezależnie od miejsca zamieszkania, co ostatecznie poszerza rynek Twojego produktu i zwiększa jego konkurencyjność na globalnym rynku.
|
|
37
|
+
|
|
38
|
+
### Doświadczenie użytkownika
|
|
39
|
+
|
|
40
|
+
Kolejną istotną korzyścią internacjonalizacji (i18n) jest poprawa doświadczenia użytkownika. Użytkownicy zazwyczaj czują się bardziej komfortowo i są bardziej związani z oprogramowaniem, które komunikuje się w ich ojczystym języku oraz respektuje lokalne konwencje, takie jak formaty dat, waluty czy jednostki miar. To spersonalizowane doświadczenie jest kluczowe dla budowania zaufania i satysfakcji, sprzyjając długoterminowemu utrzymaniu użytkowników. Gdy użytkownicy mogą płynnie nawigować i rozumieć aplikację, są bardziej skłonni do głębokiego zaangażowania, co toruje drogę do pozytywnych opinii, poleceń i trwałego wzrostu.
|
|
41
|
+
|
|
42
|
+
## Internacjonalizacja (i18n) a lokalizacja (l10n)
|
|
43
|
+
|
|
44
|
+
**Internacjonalizacja (i18n)** to proces projektowania produktu w taki sposób, aby mógł łatwo obsługiwać wiele języków i różnice regionalne. Na przykład, jeśli tworzysz stronę internetową z myślą o internacjonalizacji, zapewniasz, że pola tekstowe obsługują różne zestawy znaków, daty są wyświetlane zgodnie z lokalnymi formatami, a układy dostosowują się do rozszerzenia tekstu podczas tłumaczenia na inne języki.
|
|
45
|
+
|
|
46
|
+
**Lokalizacja (l10n)** to prace wykonywane po internacjonalizacji. Polegają one na tłumaczeniu treści oraz dostosowywaniu szczegółów kulturowych do potrzeb konkretnej grupy odbiorców. Na przykład, gdy strona internetowa została już zinternacjonalizowana, możesz ją zlokalizować dla użytkowników francuskich, tłumacząc cały tekst, zmieniając format daty na dzień/miesiąc/rok, a nawet dostosowując obrazy lub ikony, aby lepiej odpowiadały normom kulturowym Francji.
|
|
47
|
+
|
|
48
|
+
Podsumowując, internacjonalizacja przygotowuje Twój produkt do użytku globalnego, podczas gdy lokalizacja dostosowuje go do konkretnego rynku.
|
|
49
|
+
|
|
50
|
+
## Co powinno być zinternacjonalizowane na stronie internetowej?
|
|
51
|
+
|
|
52
|
+
1. **Treść tekstowa:** Wszystkie elementy pisane, takie jak nagłówki, tekst główny i przyciski, muszą być przetłumaczone. Na przykład tytuł „Welcome to our website” powinien stać się „Bienvenido a nuestro sitio web” dla hiszpańskojęzycznych odbiorców.
|
|
53
|
+
|
|
54
|
+
2. **Komunikaty o błędach:** Jasne i zwięzłe powiadomienia o błędach są niezbędne. Jeśli błąd formularza mówi „Invalid email address”, powinien być przetłumaczony na francuski jako „Adresse e-mail non valide”, aby pomóc użytkownikom zrozumieć problem.
|
|
55
|
+
|
|
56
|
+
3. **E-maile i powiadomienia:** Automatyczne komunikaty, w tym resetowanie hasła czy potwierdzenia zamówień, muszą być zlokalizowane. E-mail potwierdzający zamówienie może zwracać się do użytkownika „Dear Customer” po angielsku i „Cher(e) client(e)” po francusku, odpowiednio do odbiorcy.
|
|
57
|
+
|
|
58
|
+
4. **Etykiety dostępności:** Etykiety i tekst alternatywny dla obrazów muszą być przetłumaczone, aby technologie wspomagające działały poprawnie. Obraz z tekstem alternatywnym „Smiling child playing” powinien zostać dostosowany do „Enfant souriant qui joue” po francusku.
|
|
59
|
+
|
|
60
|
+
5. **Numeracja:** Różne regiony stosują różne formaty liczb. Podczas gdy **„1,000.50”** działa w lokalizacjach anglojęzycznych, wiele formatów europejskich wymaga **„1.000,50,”** co sprawia, że lokalna adaptacja jest ważna.
|
|
61
|
+
|
|
62
|
+
6. **Waluta:** Wyświetlaj ceny, używając odpowiednich symboli i formatów dla danej lokalizacji. Na przykład przedmiot wyceniony na **„$99.99”** w Stanach Zjednoczonych powinien zostać przeliczony na **„€97.10”** przy kierowaniu do klientów europejskich.
|
|
63
|
+
|
|
64
|
+
7. **Jednostki miary:** Jednostki takie jak temperatura, odległość i objętość powinny być wyświetlane zgodnie z lokalnymi preferencjami. Na przykład aplikacja pogodowa może pokazywać **„68°F”** dla użytkowników amerykańskich, ale **„20°C”** dla innych.
|
|
65
|
+
|
|
66
|
+
8. **Kierunek tekstu:** Kolejność czytania i układ powinny być dostosowane do języków o różnych kierunkach pisma. Strona internetowa w języku angielskim (od lewej do prawej) musi zmienić wyrównanie podczas lokalizacji na arabski, który czyta się od prawej do lewej.
|
|
67
|
+
|
|
68
|
+
9. **Data i czas:** Formatowanie różni się w zależności od regionu. Wydarzenie wyświetlane jako **„12/25/2025 o 15:00”** w USA może wymagać pokazania jako **„25/12/2025 o 15:00”** w innych miejscach, aby uniknąć nieporozumień.
|
|
69
|
+
|
|
70
|
+
10. **Strefa czasowa**: Dostosowanie do lokalnych stref czasowych zapewnia, że treści wrażliwe na czas, takie jak **harmonogramy wydarzeń, czasy dostaw czy godziny obsługi klienta**, są prezentowane dokładnie. Na przykład, webinar online zaplanowany na **"15:00 EST"** powinien być przeliczony na odpowiadający lokalny czas, taki jak **"20:00 GMT"** dla użytkowników w Wielkiej Brytanii.
|
|
71
|
+
|
|
72
|
+
Ten zwięzły przegląd obejmuje główne elementy, które powinny być internacjonalizowane, zapewniając, że treści są dostępne, kulturowo odpowiednie i łatwe do zrozumienia dla globalnej publiczności.
|
|
73
|
+
|
|
74
|
+
## Typowe wyzwania i18n
|
|
75
|
+
|
|
76
|
+

|
|
77
|
+
|
|
78
|
+
- **utrzymanie**
|
|
79
|
+
- **utrzymanie**
|
|
80
|
+
Każda aktualizacja strony musi być odzwierciedlona we wszystkich językach, co wymaga efektywnych procesów pracy i starannej koordynacji, aby zapewnić spójność we wszystkich wersjach.
|
|
81
|
+
|
|
82
|
+
- **Łączenie łańcuchów znaków**
|
|
83
|
+
Unikaj konstruowania komunikatów takich jak `"Hello, " + username + "!"`, ponieważ kolejność słów może się różnić w zależności od języka; zamiast tego używaj symboli zastępczych, takich jak `Hello, {username}!`, aby uwzględnić różnice językowe.
|
|
84
|
+
|
|
85
|
+
- **Pluralizacja**
|
|
86
|
+
Różne języki mają różne zasady liczby mnogiej, czasem z wieloma formami. Wykorzystanie bibliotek takich jak ICU MessageFormat może uprościć obsługę tych złożoności pluralizacji.
|
|
87
|
+
|
|
88
|
+
- **UI i długość tekstu**
|
|
89
|
+
Niektóre języki, na przykład niemiecki, mają tendencję do dłuższych tekstów niż angielski. Może to zaburzać układ, jeśli projekt nie jest elastyczny, dlatego kluczowe jest stosowanie responsywnego designu.
|
|
90
|
+
|
|
91
|
+
- **Kodowanie znaków**
|
|
92
|
+
Używanie odpowiedniego kodowania znaków (takiego jak UTF-8) jest kluczowe dla poprawnego wyświetlania różnych alfabetów i symboli, zapobiegając błędnej interpretacji lub zniekształceniu tekstu.
|
|
93
|
+
|
|
94
|
+
- **Sztywne układy**
|
|
95
|
+
Komponenty UI o stałym rozmiarze mogą nie dostosowywać się dobrze do dłuższych tłumaczeń, co prowadzi do przepełnienia tekstu. Elastyczny, responsywny układ pomaga złagodzić ten problem.
|
|
96
|
+
|
|
97
|
+
- **Dynamiczna zmiana języka**
|
|
98
|
+
Użytkownicy oczekują możliwości zmiany języka bez konieczności ponownego uruchamiania aplikacji lub ponownej autoryzacji. Ta funkcja wymaga płynnej, dobrze zaplanowanej implementacji w architekturze.
|
|
99
|
+
|
|
100
|
+
- **Wsparcie kierunku języka**
|
|
101
|
+
Pomijanie wsparcia dla języków pisanych od prawej do lewej (RTL) może później powodować poważne wyzwania związane z przebudową interfejsu. Najlepiej planować kompatybilność RTL od samego początku.
|
|
102
|
+
|
|
103
|
+
- **Wrażliwość kulturowa**
|
|
104
|
+
- Ikony, kolory i symbole mogą mieć różne znaczenia w różnych kulturach. Ważne jest, aby dostosować treści wizualne i tekstowe, aby szanować lokalne niuanse kulturowe.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Najlepsze praktyki wdrażania i18n
|
|
109
|
+
|
|
110
|
+
- **Planuj wcześnie**
|
|
111
|
+
Zintegruj internacjonalizację na samym początku swojego projektu. Zajmowanie się i18n na wczesnym etapie jest mniej kosztowne i prostsze niż dokonywanie poprawek później, co zapewnia płynniejszy proces rozwoju od samego startu.
|
|
112
|
+
|
|
113
|
+
- **Automatyzuj zarządzanie tłumaczeniami**
|
|
114
|
+
Wykorzystaj usługi tłumaczeń wspierane przez AI, takie jak te oferowane przez Intlayer, aby efektywnie zarządzać swoimi tłumaczeniami. Dzięki automatyzacji, gdy publikujesz nowy artykuł, wszystkie tłumaczenia są tworzone automatycznie, oszczędzając czas i redukując błędy ręczne.
|
|
115
|
+
|
|
116
|
+
- **Korzystanie z edytora wizualnego**
|
|
117
|
+
Wdrożenie edytora wizualnego, który pomaga tłumaczom zobaczyć treść w jej rzeczywistym kontekście interfejsu użytkownika. Narzędzia takie jak edytor wizualny Intlayer minimalizują błędy i nieporozumienia, zapewniając, że tłumaczenia są dokładne i odzwierciedlają ostateczny projekt.
|
|
118
|
+
|
|
119
|
+
- **Ponowne wykorzystanie tłumaczeń**
|
|
120
|
+
Organizuj pliki tłumaczeń tak, aby mogły być ponownie wykorzystywane na wielu stronach internetowych lub aplikacjach. Na przykład, jeśli masz wielojęzyczny stopkę lub nagłówek, utwórz dedykowane pliki tłumaczeń, aby wspólne elementy mogły być łatwo stosowane we wszystkich projektach.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Słownik lokalizacyjny a eksternalizacja treści CMS
|
|
125
|
+
|
|
126
|
+
Podczas tworzenia strony internetowej, **System Zarządzania Treścią (CMS) taki jak WordPress, Wix czy Drupal zazwyczaj oferuje lepszą utrzymanie**. Szczególnie dla blogów lub stron docelowych, ze względu na ich zintegrowane funkcje i18n.
|
|
127
|
+
|
|
128
|
+
Jednak w przypadku aplikacji złożonych funkcjonalnie lub z rozbudowaną logiką biznesową, **CMS może okazać się zbyt mało elastyczny i może być konieczne rozważenie użycia biblioteki i18n**.
|
|
129
|
+
|
|
130
|
+
**Problemem wielu bibliotek i18n jest to, że często wymagają one zakodowania tłumaczeń bezpośrednio w bazie kodu**. Oznacza to, że jeśli menedżer treści chce zaktualizować tłumaczenie, musi zmodyfikować kod i przebudować aplikację. Aby złagodzić ten problem, pojawiły się narzędzia określane jako "Git-based CMS" lub "i18n CMS", które wspierają menedżerów treści. Mimo to, **nawet te rozwiązania zazwyczaj wymagają aktualizacji bazy kodu i przebudowy aplikacji po wprowadzeniu zmian w treści**.
|
|
131
|
+
|
|
132
|
+
Biorąc pod uwagę te wyzwania, często wybiera się headless CMS do eksternalizacji treści i usprawnienia zarządzania tłumaczeniami. Jednakże istnieją zauważalne wady korzystania z CMS do internacjonalizacji:
|
|
133
|
+
|
|
134
|
+
- **Nie wszystkie CMS oferują funkcje i18n:** Niektóre popularne platformy CMS nie posiadają zaawansowanych możliwości internacjonalizacji, co zmusza do poszukiwania dodatkowych wtyczek lub obejść.
|
|
135
|
+
- **Podwójna konfiguracja:** Zarządzanie tłumaczeniami często wymaga konfiguracji zarówno w CMS, jak i w kodzie aplikacji, co prowadzi do powielania pracy i potencjalnych niespójności.
|
|
136
|
+
- **Trudne w utrzymaniu:** Gdy tłumaczenia są rozproszone między CMS a kodem, utrzymanie spójnego i wolnego od błędów systemu może z czasem stać się wyzwaniem.
|
|
137
|
+
- **Koszt licencji:** Platformy CMS premium lub dodatkowe narzędzia i18n mogą generować dodatkowe koszty licencyjne, które nie zawsze są możliwe do udźwignięcia w każdym projekcie.
|
|
138
|
+
|
|
139
|
+
Ważne jest, aby wybrać odpowiednie narzędzie do swoich potrzeb i zaplanować strategię internacjonalizacji od samego początku. **Intlayer oferuje przekonujące rozwiązanie, łącząc deklarację treści lokalnych z headless CMS ściśle zintegrowanym, zapewniając to, co najlepsze z obu światów.**
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
### Zobacz listę bibliotek i narzędzi i18n według technologii
|
|
144
|
+
|
|
145
|
+
Jeśli szukasz listy bibliotek i narzędzi i18n według technologii, sprawdź następujące zasoby:
|
|
146
|
+
|
|
147
|
+
### Dla systemów zarządzania treścią (CMS)
|
|
148
|
+
|
|
149
|
+
- WordPress: [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/CMS/wordpress.md)
|
|
150
|
+
- Wix: [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/CMS/wix.md)
|
|
151
|
+
- Drupal: [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/CMS/drupal.md)
|
|
152
|
+
|
|
153
|
+
### Dla aplikacji JavaScript (Frontend)
|
|
154
|
+
|
|
155
|
+
- React: [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/react.md)
|
|
156
|
+
- Angular: [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/angular.md)
|
|
157
|
+
- Vue: [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/vue.md)
|
|
158
|
+
- Svelte: [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/svelte.md)
|
|
159
|
+
- React Native : [Zobacz listę bibliotek i narzędzi i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/react-native.md)
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Podsumowanie
|
|
164
|
+
|
|
165
|
+
Internacjonalizacja (i18n) to coś więcej niż tylko techniczne zadanie; to **strategiczna inwestycja**, która pozwala Twojemu oprogramowaniu dosłownie mówić językiem Twoich użytkowników. Poprzez abstrakcję elementów specyficznych dla lokalizacji, uwzględnianie różnic językowych i kulturowych oraz planowanie przyszłej ekspansji, dajesz swojemu produktowi możliwość rozwoju na globalnym rynku.
|
|
166
|
+
|
|
167
|
+
Niezależnie od tego, czy tworzysz aplikację mobilną, platformę SaaS, czy narzędzie korporacyjne, **i18n zapewnia, że Twój produkt może się dostosować i przemówić do użytkowników z całego świata**, bez konieczności ciągłego przepisywania kodu. Wykorzystując najlepsze praktyki, solidne frameworki i ciągłe strategie lokalizacyjne, deweloperzy i zespoły produktowe mogą dostarczać **naprawdę globalne** doświadczenia oprogramowania.
|