@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: Integrasikan react-i18next dengan next-intl dan Intlayer untuk internasionalisasi (i18n) aplikasi React
|
|
6
|
+
keywords:
|
|
7
|
+
- next-intl
|
|
8
|
+
- react-i18next
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Internasionalisasi
|
|
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 | Internasionalisasi React (i18n)
|
|
21
|
+
|
|
22
|
+
Panduan ini membandingkan tiga opsi i18n yang sudah mapan untuk **React**: **react-intl** (FormatJS), **react-i18next** (i18next), dan **Intlayer**.
|
|
23
|
+
Kami fokus pada aplikasi **React biasa** (misalnya, Vite, CRA, SPA). Jika Anda menggunakan Next.js, lihat perbandingan khusus Next.js kami.
|
|
24
|
+
|
|
25
|
+
Kami mengevaluasi:
|
|
26
|
+
|
|
27
|
+
- Arsitektur & organisasi konten
|
|
28
|
+
- TypeScript & keamanan
|
|
29
|
+
- Penanganan terjemahan yang hilang
|
|
30
|
+
- Konten kaya & kemampuan pemformatan
|
|
31
|
+
- Performa & perilaku pemuatan
|
|
32
|
+
- Pengalaman pengembang (DX), alat & pemeliharaan
|
|
33
|
+
- SEO/routing (tergantung framework)
|
|
34
|
+
|
|
35
|
+
<TOC/>
|
|
36
|
+
|
|
37
|
+
> **ringkasan**: Ketiganya dapat melokalkan aplikasi React. Jika Anda menginginkan **konten yang terfokus pada komponen**, **tipe TypeScript yang ketat**, **pemeriksaan kunci yang hilang saat build-time**, **kamus yang di-tree-shake**, dan alat editorial bawaan (Visual Editor/CMS + terjemahan AI opsional), **Intlayer** adalah pilihan paling lengkap untuk codebase React modular.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Posisi tingkat tinggi
|
|
42
|
+
|
|
43
|
+
- **react-intl** - Format berbasis ICU yang sesuai standar (tanggal/angka/jamak) dengan API yang matang. Katalog biasanya terpusat; keamanan kunci dan validasi saat build-time sebagian besar menjadi tanggung jawab Anda.
|
|
44
|
+
- **react-i18next** - Sangat populer dan fleksibel; mendukung namespace, detektor, dan banyak plugin (ICU, backend). Kuat, tetapi konfigurasi bisa menjadi kompleks seiring skala proyek.
|
|
45
|
+
- **Intlayer** - Model konten yang berfokus pada komponen untuk React, **pengetikan TS yang ketat**, **pemeriksaan saat build-time**, **tree-shaking**, plus **Visual Editor/CMS** dan **terjemahan berbantuan AI**. Bekerja dengan React Router, Vite, CRA, dll.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Matriks fitur (fokus React)
|
|
50
|
+
|
|
51
|
+
| Fitur | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
|
|
52
|
+
| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
53
|
+
| **Terjemahan Dekat Komponen** | ✅ Ya, konten ditempatkan bersama dengan setiap komponen | ❌ Tidak | ❌ Tidak |
|
|
54
|
+
| **Integrasi TypeScript** | ✅ Lanjutan, tipe ketat yang dihasilkan secara otomatis | ⚠️ Dasar; konfigurasi tambahan untuk keamanan | ✅ Baik, tetapi kurang ketat |
|
|
55
|
+
| **Deteksi Terjemahan yang Hilang** | ✅ Sorotan error TypeScript dan error/peringatan saat build | ⚠️ Sebagian besar string fallback saat runtime | ⚠️ String fallback |
|
|
56
|
+
| **Konten Kaya (JSX/Markdown/komponen)** | ✅ Dukungan langsung | ⚠️ Terbatas / hanya interpolasi | ⚠️ Sintaks ICU, bukan JSX asli |
|
|
57
|
+
| **Terjemahan Berbasis AI** | ✅ Ya, mendukung beberapa penyedia AI. Dapat digunakan dengan kunci API Anda sendiri. Mempertimbangkan konteks aplikasi dan ruang lingkup konten Anda | ❌ Tidak | ❌ Tidak |
|
|
58
|
+
| **Editor Visual** | ✅ Ya, Editor Visual lokal + CMS opsional; dapat mengeksternalisasi konten codebase; dapat disematkan | ❌ Tidak / tersedia melalui platform lokalisasi eksternal | ❌ Tidak / tersedia melalui platform lokalisasi eksternal |
|
|
59
|
+
| **Routing Lokal** | ✅ Ya, mendukung jalur lokal secara langsung (berfungsi dengan Next.js & Vite) | ⚠️ Tidak bawaan, memerlukan plugin (misalnya `next-i18next`) atau konfigurasi router kustom | ❌ Tidak, hanya pemformatan pesan, routing harus manual |
|
|
60
|
+
| **Generasi Rute Dinamis** | ✅ Ya | ⚠️ Plugin/ekosistem atau pengaturan manual | ❌ Tidak disediakan |
|
|
61
|
+
| **Pluralisasi** | ✅ Pola berbasis enumerasi | ✅ Dapat dikonfigurasi (plugin seperti i18next-icu) | ✅ (ICU) |
|
|
62
|
+
| **Pemformatan (tanggal, angka, mata uang)** | ✅ Formatter yang dioptimalkan (Intl di belakang layar) | ⚠️ Melalui plugin atau penggunaan Intl kustom | ✅ Formatter ICU |
|
|
63
|
+
| **Format Konten** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) | ⚠️ .json | ✅ .json, .js |
|
|
64
|
+
| **Dukungan ICU** | ⚠️ Sedang dalam pengerjaan | ⚠️ Melalui plugin (i18next-icu) | ✅ Ya |
|
|
65
|
+
| **Bantuan SEO (hreflang, sitemap)** | ✅ Alat bawaan: bantuan untuk sitemap, robots.txt, metadata | ⚠️ Plugin komunitas/manual | ❌ Bukan inti |
|
|
66
|
+
| **Ekosistem / Komunitas** | ⚠️ Lebih kecil tetapi tumbuh cepat dan responsif | ✅ Terbesar dan matang | ✅ Besar |
|
|
67
|
+
| **Rendering Sisi Server & Komponen Server** | ✅ Ya, dioptimalkan untuk SSR / Komponen Server React | ⚠️ Didukung pada tingkat halaman tetapi perlu melewatkan fungsi t pada pohon komponen untuk komponen server anak | ❌ Tidak didukung, perlu melewatkan fungsi t pada pohon komponen untuk komponen server anak |
|
|
68
|
+
| **Tree-shaking (memuat hanya konten yang digunakan)** | ✅ Ya, per-komponen saat build melalui plugin Babel/SWC | ⚠️ Biasanya memuat semuanya (dapat ditingkatkan dengan namespace/pemisahan kode) | ⚠️ Biasanya memuat semuanya |
|
|
69
|
+
| **Lazy loading** | ✅ Ya, per-locale / per-dictionary | ✅ Ya (misalnya, backends/namespaces sesuai permintaan) | ✅ Ya (memisahkan bundle locale) |
|
|
70
|
+
| **Purge unused content** | ✅ Ya, per-dictionary saat build | ❌ Tidak, hanya melalui segmentasi namespace manual | ❌ Tidak, semua pesan yang dideklarasikan dibundel |
|
|
71
|
+
| **Manajemen Proyek Besar** | ✅ Mendorong modular, cocok untuk design-system | ⚠️ Membutuhkan disiplin file yang baik | ⚠️ Katalog pusat bisa menjadi besar |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Perbandingan Mendalam
|
|
76
|
+
|
|
77
|
+
### 1) Arsitektur & skalabilitas
|
|
78
|
+
|
|
79
|
+
- **react-intl / react-i18next**: Sebagian besar pengaturan mempertahankan **folder locale terpusat** per bahasa, kadang dibagi berdasarkan **namespace** (i18next). Bekerja dengan baik pada awalnya tetapi menjadi area bersama saat aplikasi berkembang.
|
|
80
|
+
- **Intlayer**: Mendorong **kamus per-komponen (atau per-fitur)** yang **berada di lokasi yang sama** dengan UI yang mereka layani. Ini menjaga kepemilikan tetap jelas, memudahkan duplikasi/migrasi komponen, dan mengurangi perubahan kunci antar-tim. Konten yang tidak digunakan lebih mudah diidentifikasi dan dihapus.
|
|
81
|
+
|
|
82
|
+
**Mengapa ini penting:** Konten modular mencerminkan UI modular. Codebase React yang besar tetap lebih bersih ketika terjemahan berada bersama komponen yang mereka miliki.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 2) TypeScript & keamanan
|
|
87
|
+
|
|
88
|
+
- **react-intl**: Typing yang solid, tetapi **tidak ada pengetikan kunci otomatis**; Anda harus menerapkan pola keamanan sendiri.
|
|
89
|
+
- **react-i18next**: Typing yang kuat untuk hooks; **pengetikan kunci yang ketat** biasanya memerlukan konfigurasi tambahan atau generator.
|
|
90
|
+
- **Intlayer**: **Secara otomatis menghasilkan tipe ketat** dari konten Anda. Autocomplete IDE dan **kesalahan saat kompilasi** menangkap kesalahan ketik dan kunci yang hilang sebelum runtime.
|
|
91
|
+
|
|
92
|
+
**Mengapa ini penting:** Memindahkan kegagalan ke **kiri** (ke build/CI) mengurangi masalah produksi dan mempercepat siklus umpan balik pengembang.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 3) Penanganan terjemahan yang hilang
|
|
97
|
+
|
|
98
|
+
- **react-intl / react-i18next**: Default ke **fallback saat runtime** (mengulang kunci atau locale default). Anda dapat menambahkan linting/plugin, tetapi tidak dijamin saat build.
|
|
99
|
+
- **Intlayer**: **Deteksi saat build** dengan peringatan atau kesalahan ketika locale/kunci yang diperlukan hilang.
|
|
100
|
+
|
|
101
|
+
**Mengapa ini penting:** CI yang gagal karena string yang hilang mencegah “bahasa Inggris misterius” bocor ke UI non-Inggris.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### 4) Konten kaya & pemformatan
|
|
106
|
+
|
|
107
|
+
- **react-intl**: Dukungan **ICU** yang sangat baik untuk plural, select, tanggal/angka, dan komposisi pesan. JSX dapat digunakan, tetapi model mental tetap berfokus pada pesan.
|
|
108
|
+
- **react-i18next**: Interpolasi yang fleksibel dan **`<Trans>`** untuk menyisipkan elemen/komponen; ICU tersedia melalui plugin.
|
|
109
|
+
- **Intlayer**: File konten dapat menyertakan **node kaya** (JSX/Markdown/komponen) dan **metadata**. Pemformatan menggunakan Intl di belakang layar; pola plural sangat ergonomis.
|
|
110
|
+
|
|
111
|
+
**Mengapa ini penting:** Teks UI yang kompleks (tautan, bagian tebal, komponen inline) menjadi lebih mudah ketika pustaka menerima node React dengan bersih.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 5) Performa & perilaku pemuatan
|
|
116
|
+
|
|
117
|
+
- **react-intl / react-i18next**: Anda biasanya mengelola **pemisahan katalog** dan **lazy loading** secara manual (namespace/impor dinamis). Efektif tetapi memerlukan disiplin.
|
|
118
|
+
- **Intlayer**: **Menghilangkan** kamus yang tidak digunakan dan mendukung **lazy loading per-kamus/per-locale** secara langsung.
|
|
119
|
+
|
|
120
|
+
**Mengapa ini penting:** Bundel yang lebih kecil dan string yang tidak terpakai lebih sedikit meningkatkan performa saat startup dan navigasi.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### 6) DX, tooling & maintenance
|
|
125
|
+
|
|
126
|
+
- **react-intl / react-i18next**: Ekosistem komunitas yang luas; untuk alur kerja editorial Anda biasanya mengadopsi platform lokalisasi eksternal.
|
|
127
|
+
- **Intlayer**: Menyediakan **Visual Editor gratis** dan **CMS opsional** (simpan konten di Git atau eksternalkan). Juga menawarkan **ekstensi VSCode** untuk pembuatan konten dan **terjemahan berbantuan AI** menggunakan kunci penyedia Anda sendiri.
|
|
128
|
+
|
|
129
|
+
**Mengapa ini penting:** Alat bawaan memperpendek siklus antara pengembang dan penulis konten - lebih sedikit kode penghubung, lebih sedikit ketergantungan vendor.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Kapan memilih yang mana?
|
|
134
|
+
|
|
135
|
+
- **Pilih react-intl** jika Anda menginginkan format pesan **ICU-first** dengan API yang sederhana dan sesuai standar serta tim Anda nyaman mengelola katalog dan pemeriksaan keamanan secara manual.
|
|
136
|
+
- **Pilih react-i18next** jika Anda membutuhkan **ekosistem luas i18next** (detektor, backend, plugin ICU, integrasi) dan menerima konfigurasi lebih untuk mendapatkan fleksibilitas.
|
|
137
|
+
- **Pilih Intlayer** jika Anda menghargai **konten yang dibatasi pada komponen**, **TypeScript yang ketat**, **jaminan saat build**, **tree-shaking**, dan alat editorial **batterai-termasuk** - terutama untuk aplikasi React **besar dan modular**, sistem desain, dll.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Interoperabilitas dengan `react-intl` dan `react-i18next`
|
|
142
|
+
|
|
143
|
+
`intlayer` juga dapat membantu mengelola namespace `react-intl` dan `react-i18next` Anda.
|
|
144
|
+
|
|
145
|
+
Dengan menggunakan `intlayer`, Anda dapat mendeklarasikan konten Anda dalam format perpustakaan i18n favorit Anda, dan intlayer akan menghasilkan namespace Anda di lokasi pilihan Anda (contoh: `/messages/{{locale}}/{{namespace}}.json`).
|
|
146
|
+
|
|
147
|
+
Lihat opsi [`dictionaryOutput` dan `i18nextResourcesDir`](https://intlayer.org/doc/concept/configuration#content-configuration) untuk detail lebih lanjut.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## BINTANG GitHub
|
|
152
|
+
|
|
153
|
+
Bintang GitHub adalah indikator kuat dari popularitas proyek, kepercayaan komunitas, dan relevansi jangka panjang. Meskipun bukan ukuran langsung dari kualitas teknis, bintang mencerminkan berapa banyak pengembang yang menganggap proyek tersebut berguna, mengikuti perkembangannya, dan kemungkinan akan mengadopsinya. Untuk memperkirakan nilai sebuah proyek, bintang membantu membandingkan daya tarik di antara alternatif dan memberikan wawasan tentang pertumbuhan ekosistem.
|
|
154
|
+
|
|
155
|
+
## [](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&aymericzip/intlayer)
|
|
156
|
+
|
|
157
|
+
## Kesimpulan
|
|
158
|
+
|
|
159
|
+
Ketiga pustaka tersebut secara efektif melakukan lokalisasi React. Pembeda utamanya adalah seberapa banyak **infrastruktur** yang harus Anda bangun untuk mencapai pengaturan yang **aman dan dapat diskalakan**:
|
|
160
|
+
|
|
161
|
+
- Dengan **Intlayer**, **konten modular**, **pengetikan TS yang ketat**, **keamanan saat build**, **bundle yang di-tree-shake**, dan **alat editorial** adalah default - bukan tugas yang merepotkan.
|
|
162
|
+
- Jika tim Anda mengutamakan **pemeliharaan dan kecepatan** dalam aplikasi React multi-locale yang berbasis komponen, Intlayer menawarkan **alur kerja** pengembang dan konten yang **paling lengkap** saat ini.
|
|
163
|
+
|
|
164
|
+
Lihat dokumen ['Mengapa Intlayer?'](https://intlayer.org/doc/why) untuk detail lebih lanjut.
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-08-11
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
|
+
title: vue-i18n vs Intlayer
|
|
5
|
+
description: Membandingkan vue-i18n dengan Intlayer untuk internasionalisasi (i18n) dalam aplikasi Vue/Nuxt
|
|
6
|
+
keywords:
|
|
7
|
+
- vue-i18n
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Internasionalisasi
|
|
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 | Internasionalisasi Vue (i18n)
|
|
21
|
+
|
|
22
|
+
Panduan ini membandingkan dua opsi i18n populer untuk **Vue 3** (dan **Nuxt**): **vue-i18n** dan **Intlayer**.
|
|
23
|
+
Kami fokus pada tooling Vue modern (Vite, Composition API) dan mengevaluasi:
|
|
24
|
+
|
|
25
|
+
1. **Arsitektur & organisasi konten**
|
|
26
|
+
2. **TypeScript & keamanan**
|
|
27
|
+
3. **Penanganan terjemahan yang hilang**
|
|
28
|
+
4. **Strategi routing & URL**
|
|
29
|
+
5. **Performa & perilaku pemuatan**
|
|
30
|
+
6. **Pengalaman pengembang (DX), tooling & pemeliharaan**
|
|
31
|
+
7. **SEO & skalabilitas proyek besar**
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
> **ringkasan**: Keduanya dapat melokalkan aplikasi Vue. Jika Anda menginginkan **konten yang dibatasi pada komponen**, **tipe TypeScript yang ketat**, **pemeriksaan kunci hilang saat build-time**, **kamus yang di-tree-shake**, dan **bantuan router/SEO yang sudah termasuk** serta **Editor Visual & terjemahan AI**, **Intlayer** adalah pilihan yang lebih lengkap dan modern.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Posisi tingkat tinggi
|
|
40
|
+
|
|
41
|
+
- **vue-i18n** - Perpustakaan i18n de-facto untuk Vue. Format pesan yang fleksibel (gaya ICU), blok SFC `<i18n>` untuk pesan lokal, dan ekosistem besar. Keamanan dan pemeliharaan skala besar sebagian besar menjadi tanggung jawab Anda.
|
|
42
|
+
- **Intlayer** - Model konten yang berfokus pada komponen untuk Vue/Vite/Nuxt dengan **pengetikan TS yang ketat**, **pemeriksaan saat build-time**, **tree-shaking**, **bantuan router & SEO**, **Editor Visual/CMS** opsional, dan **terjemahan dibantu AI**.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Perbandingan Fitur Berdampingan (Fokus pada Vue)
|
|
47
|
+
|
|
48
|
+
| Fitur | **Intlayer** | **vue-i18n** |
|
|
49
|
+
| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
50
|
+
| **Terjemahan dekat komponen** | ✅ Ya, konten ditempatkan bersama per komponen (misal, `MyComp.content.ts`) | ✅ Ya, melalui blok SFC `<i18n>` (opsional) |
|
|
51
|
+
| **Integrasi TypeScript** | ✅ Lanjutan, tipe **strict** yang dihasilkan otomatis & autocompletion kunci | ✅ Typing yang baik; **keamanan kunci strict memerlukan pengaturan/disiplin tambahan** |
|
|
52
|
+
| **Deteksi terjemahan yang hilang** | ✅ Peringatan/eror **saat build-time** dan tampilan TS | ⚠️ Fallback/peringatan saat runtime |
|
|
53
|
+
| **Konten kaya (komponen/Markdown)** | ✅ Dukungan langsung untuk node kaya dan file konten Markdown | ⚠️ Terbatas (komponen melalui `<i18n-t>`, Markdown melalui plugin eksternal) |
|
|
54
|
+
| **Terjemahan berbasis AI** | ✅ Alur kerja bawaan menggunakan kunci penyedia AI Anda sendiri | ❌ Tidak bawaan |
|
|
55
|
+
| **Editor Visual / CMS** | ✅ Editor Visual Gratis & CMS opsional | ❌ Tidak bawaan (gunakan platform eksternal) |
|
|
56
|
+
| **Routing lokal** | ✅ Bantuan untuk Vue Router/Nuxt untuk menghasilkan jalur, URL, dan `hreflang` yang dilokalkan | ⚠️ Bukan inti (gunakan Nuxt i18n atau pengaturan Vue Router kustom) |
|
|
57
|
+
| **Generasi rute dinamis** | ✅ Ya | ❌ Tidak disediakan (Nuxt i18n menyediakan) |
|
|
58
|
+
| **Pluralisasi & pemformatan** | ✅ Pola enumerasi; pemformat berbasis Intl | ✅ Pesan gaya ICU; pemformat Intl |
|
|
59
|
+
| **Format konten** | ✅ `.ts`, `.js`, `.json`, `.md`, `.txt` (YAML dalam pengerjaan) | ✅ `.json`, `.js` (plus blok SFC `<i18n>`) |
|
|
60
|
+
| **Dukungan ICU** | ⚠️ Dalam pengerjaan | ✅ Ya |
|
|
61
|
+
| **Bantuan SEO (sitemap, robots, metadata)** | ✅ Bantuan bawaan (framework-agnostik) | ❌ Bukan inti (Nuxt i18n/komunitas) |
|
|
62
|
+
| **SSR/SSG** | ✅ Bekerja dengan Vue SSR dan Nuxt; tidak menghalangi rendering statis | ✅ Bekerja dengan Vue SSR/Nuxt |
|
|
63
|
+
| **Tree-shaking (mengirim hanya konten yang digunakan)** | ✅ Per-komponen saat build time | ⚠️ Sebagian; membutuhkan pemisahan kode/manual dan pesan async |
|
|
64
|
+
| **Lazy loading** | ✅ Per-locale / per-kamus | ✅ Mendukung pesan locale async |
|
|
65
|
+
| **Purge unused content** | ✅ Ya (saat build) | ❌ Tidak bawaan |
|
|
66
|
+
| **Maintainabilitas proyek besar** | ✅ Mendorong struktur modular yang ramah sistem desain | ✅ Mungkin, tapi membutuhkan disiplin file/namespace yang kuat |
|
|
67
|
+
| **Ekosistem / komunitas** | ⚠️ Lebih kecil tapi tumbuh cepat | ✅ Besar dan matang dalam ekosistem Vue |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Perbandingan mendalam
|
|
72
|
+
|
|
73
|
+
### 1) Arsitektur & skalabilitas
|
|
74
|
+
|
|
75
|
+
- **vue-i18n**: Pengaturan umum menggunakan **katalog terpusat** per locale (opsional dibagi menjadi file/namespace). Blok SFC `<i18n>` memungkinkan pesan lokal tetapi tim sering kembali ke katalog bersama saat proyek berkembang.
|
|
76
|
+
- **Intlayer**: Mendorong **kamus per-komponen** yang disimpan di samping komponen yang mereka layani. Ini mengurangi konflik antar tim, menjaga konten tetap dapat ditemukan, dan secara alami membatasi penyimpangan/kunci yang tidak terpakai.
|
|
77
|
+
|
|
78
|
+
**Mengapa ini penting:** Dalam aplikasi Vue besar atau sistem desain, **konten modular** lebih mudah diskalakan dibandingkan katalog monolitik.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### 2) TypeScript & keamanan
|
|
83
|
+
|
|
84
|
+
- **vue-i18n**: Dukungan TS yang baik; **pengetikan kunci ketat** biasanya membutuhkan skema/generik khusus dan konvensi yang hati-hati.
|
|
85
|
+
- **Intlayer**: **Menghasilkan tipe yang ketat** dari konten Anda, memberikan **autocompletion IDE** dan **error saat kompilasi** untuk kesalahan ketik/kunci yang hilang.
|
|
86
|
+
|
|
87
|
+
**Mengapa ini penting:** Pengetikan yang kuat menangkap masalah **sebelum** runtime.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### 3) Penanganan terjemahan yang hilang
|
|
92
|
+
|
|
93
|
+
- **vue-i18n**: Peringatan/fallback **saat runtime** (misalnya, fallback locale atau kunci).
|
|
94
|
+
- **Intlayer**: Deteksi **saat build** dengan peringatan/error di seluruh locale dan kunci.
|
|
95
|
+
|
|
96
|
+
**Mengapa ini penting:** Penegakan saat build menjaga UI produksi tetap bersih dan konsisten.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### 4) Strategi Routing & URL (Vue Router/Nuxt)
|
|
101
|
+
|
|
102
|
+
- **Keduanya** dapat bekerja dengan rute yang dilokalkan.
|
|
103
|
+
- **Intlayer** menyediakan helper untuk **menghasilkan path yang dilokalkan**, **mengelola prefix locale**, dan mengeluarkan **`<link rel="alternate" hreflang>`** untuk SEO. Dengan Nuxt, ini melengkapi routing framework.
|
|
104
|
+
|
|
105
|
+
**Mengapa ini penting:** Lebih sedikit lapisan penghubung kustom dan **SEO yang lebih bersih** di berbagai locale.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### 5) Performa & perilaku pemuatan
|
|
110
|
+
|
|
111
|
+
- **vue-i18n**: Mendukung pesan locale secara async; menghindari over-bundling adalah tanggung jawab Anda (pisahkan katalog dengan hati-hati).
|
|
112
|
+
- **Intlayer**: **Melakukan tree-shaking** saat build dan **lazy-load per kamus/locale**. Konten yang tidak digunakan tidak dikirim.
|
|
113
|
+
|
|
114
|
+
**Mengapa ini penting:** Bundle yang lebih kecil dan startup lebih cepat untuk aplikasi Vue multi-locale.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### 6) Pengalaman pengembang & tooling
|
|
119
|
+
|
|
120
|
+
- **vue-i18n**: Dokumentasi dan komunitas yang matang; Anda biasanya akan mengandalkan **platform lokalisasi eksternal** untuk alur kerja editorial.
|
|
121
|
+
- **Intlayer**: Menyediakan **Visual Editor gratis**, **CMS opsional** (ramah Git atau eksternal), **ekstensi VSCode**, utilitas **CLI/CI**, dan **terjemahan berbantuan AI** menggunakan kunci penyedia Anda sendiri.
|
|
122
|
+
|
|
123
|
+
**Mengapa ini penting:** Biaya operasional lebih rendah dan siklus dev–konten yang lebih singkat.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 7) SEO, SSR & SSG
|
|
128
|
+
|
|
129
|
+
- **Keduanya** bekerja dengan Vue SSR dan Nuxt.
|
|
130
|
+
- **Intlayer**: Menambahkan **helper SEO** (sitemap/metadata/`hreflang`) yang tidak tergantung pada framework dan bekerja dengan baik pada build Vue/Nuxt.
|
|
131
|
+
|
|
132
|
+
**Mengapa ini penting:** SEO internasional tanpa pengaturan khusus.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Mengapa Intlayer? (Masalah & pendekatan)
|
|
137
|
+
|
|
138
|
+
Sebagian besar stack i18n (termasuk **vue-i18n**) dimulai dari **katalog terpusat**:
|
|
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
|
+
Atau dengan folder 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
|
+
Ini sering memperlambat pengembangan seiring pertumbuhan aplikasi:
|
|
171
|
+
|
|
172
|
+
1. **Untuk komponen baru** Anda membuat/mengedit katalog jarak jauh, menghubungkan namespace, dan menerjemahkan (seringkali melalui salin/tempel manual dari alat AI).
|
|
173
|
+
2. **Saat mengubah komponen** Anda mencari kunci bersama, menerjemahkan, menjaga sinkronisasi locale, menghapus kunci mati, dan menyelaraskan struktur JSON.
|
|
174
|
+
|
|
175
|
+
**Intlayer** mengatur konten **per-komponen** dan menyimpannya **di sebelah kode**, seperti yang sudah kita lakukan dengan CSS, stories, tests, dan docs:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
.
|
|
179
|
+
└── components
|
|
180
|
+
└── MyComponent
|
|
181
|
+
├── MyComponent.content.ts
|
|
182
|
+
└── MyComponent.vue
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Deklarasi konten** (per komponen):
|
|
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
|
+
**Penggunaan di Vue** (Composition API):
|
|
205
|
+
|
|
206
|
+
```vue fileName="./components/MyComponent/MyComponent.vue"
|
|
207
|
+
<script setup lang="ts">
|
|
208
|
+
import { useIntlayer } from "vue-intlayer"; // Integrasi Vue
|
|
209
|
+
const { greeting } = useIntlayer("component-example");
|
|
210
|
+
</script>
|
|
211
|
+
|
|
212
|
+
<template>
|
|
213
|
+
<span>{{ greeting }}</span>
|
|
214
|
+
</template>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Pendekatan ini:
|
|
218
|
+
|
|
219
|
+
- **Mempercepat pengembangan** (deklarasi sekali; IDE/AI melengkapi otomatis).
|
|
220
|
+
- **Membersihkan codebase** (1 komponen = 1 kamus).
|
|
221
|
+
- **Mempermudah duplikasi/migrasi** (salin komponen dan kontennya bersama-sama).
|
|
222
|
+
- **Menghindari dead keys** (komponen yang tidak digunakan tidak mengimpor konten).
|
|
223
|
+
- **Mengoptimalkan pemuatan** (komponen yang dimuat secara malas membawa kontennya sendiri).
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Fitur tambahan Intlayer (relevan untuk Vue)
|
|
228
|
+
|
|
229
|
+
- **Dukungan lintas-framework**: Bekerja dengan Vue, Nuxt, Vite, React, Express, dan lainnya.
|
|
230
|
+
- **Manajemen konten berbasis JavaScript**: Deklarasikan dalam kode dengan fleksibilitas penuh.
|
|
231
|
+
- **File deklarasi per-locale**: Menyediakan semua locale dan membiarkan tooling menghasilkan sisanya.
|
|
232
|
+
- **Lingkungan yang aman tipe**: Konfigurasi TS yang kuat dengan autocompletion.
|
|
233
|
+
- **Pengambilan konten yang disederhanakan**: Satu hook/composable untuk mengambil semua konten untuk sebuah kamus.
|
|
234
|
+
- **Codebase yang terorganisir**: 1 komponen = 1 kamus dalam folder yang sama.
|
|
235
|
+
- **Routing yang ditingkatkan**: Bantuan untuk **Vue Router/Nuxt** jalur dan metadata yang dilokalkan.
|
|
236
|
+
- **Dukungan Markdown**: Impor Markdown jarak jauh/lokal per locale; mengekspose frontmatter ke kode.
|
|
237
|
+
- **Editor Visual Gratis & CMS opsional**: Penulisan tanpa platform lokalisasi berbayar; sinkronisasi ramah Git.
|
|
238
|
+
- **Konten yang dapat di-tree-shake**: Mengirim hanya apa yang digunakan; mendukung lazy loading.
|
|
239
|
+
- **Ramah rendering statis**: Tidak menghalangi SSG.
|
|
240
|
+
- **Terjemahan bertenaga AI**: Terjemahkan ke 231 bahasa menggunakan penyedia AI/API key Anda sendiri.
|
|
241
|
+
- **Server MCP & ekstensi VSCode**: Otomatiskan alur kerja i18n dan penulisan konten di dalam IDE Anda.
|
|
242
|
+
- **Interoperabilitas**: Menghubungkan dengan **vue-i18n**, **react-i18next**, dan **react-intl** saat diperlukan.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Kapan memilih yang mana?
|
|
247
|
+
|
|
248
|
+
- **Pilih vue-i18n** jika Anda menginginkan **pendekatan Vue standar**, nyaman mengelola katalog/namespace sendiri, dan aplikasi Anda berukuran **kecil hingga menengah** (atau Anda sudah menggunakan Nuxt i18n).
|
|
249
|
+
- **Pilih Intlayer** jika Anda menghargai **konten yang dibatasi pada komponen**, **TypeScript yang ketat**, **jaminan waktu build**, **tree-shaking**, dan alat routing/SEO/editor yang **lengkap** — terutama untuk **codebase Vue/Nuxt yang besar dan modular**, sistem desain, dll.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Interoperabilitas dengan vue-i18n
|
|
254
|
+
|
|
255
|
+
`intlayer` juga dapat membantu mengelola namespace `vue-i18n` Anda.
|
|
256
|
+
|
|
257
|
+
Dengan menggunakan `intlayer`, Anda dapat mendeklarasikan konten Anda dalam format perpustakaan i18n favorit Anda, dan intlayer akan menghasilkan namespace Anda di lokasi pilihan Anda (contoh: `/messages/{{locale}}/{{namespace}}.json`).
|
|
258
|
+
|
|
259
|
+
Lihat opsi [`dictionaryOutput` dan `i18nextResourcesDir`](https://intlayer.org/doc/concept/configuration#content-configuration) untuk detail lebih lanjut.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## GitHub STARs
|
|
264
|
+
|
|
265
|
+
Bintang GitHub adalah indikator kuat dari popularitas proyek, kepercayaan komunitas, dan relevansi jangka panjang. Meskipun bukan ukuran langsung dari kualitas teknis, bintang mencerminkan berapa banyak pengembang yang menganggap proyek tersebut berguna, mengikuti perkembangannya, dan kemungkinan akan mengadopsinya. Untuk memperkirakan nilai sebuah proyek, bintang membantu membandingkan daya tarik di antara alternatif dan memberikan wawasan tentang pertumbuhan ekosistem.
|
|
266
|
+
|
|
267
|
+
[](https://www.star-history.com/#intlify/vue-i18n&aymericzip/intlayer)
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Kesimpulan
|
|
272
|
+
|
|
273
|
+
Baik **vue-i18n** maupun **Intlayer** sama-sama melakukan lokalisasi aplikasi Vue dengan baik. Perbedaannya adalah **seberapa banyak yang harus Anda bangun sendiri** untuk mencapai pengaturan yang kuat dan dapat diskalakan:
|
|
274
|
+
|
|
275
|
+
- Dengan **Intlayer**, **konten modular**, **TS ketat**, **keamanan saat build**, **bundle tree-shaken**, dan **tooling router/SEO/editor** tersedia **langsung**.
|
|
276
|
+
- Jika tim Anda memprioritaskan **pemeliharaan dan kecepatan** dalam aplikasi Vue/Nuxt multi-locale yang berbasis komponen, Intlayer menawarkan pengalaman yang **paling lengkap** saat ini.
|
|
277
|
+
|
|
278
|
+
Lihat dokumen ['Mengapa Intlayer?'](https://intlayer.org/doc/why) untuk detail lebih lanjut.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-01-16
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Apa itu Internasionalisasi (i18n)? Definisi dan tantangan
|
|
5
|
+
description: Temukan mengapa internasionalisasi situs web Anda sangat penting. Pelajari prinsip-prinsip kunci untuk meningkatkan SEO, memperbaiki pengalaman pengguna, dan memperluas jangkauan global Anda.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- multibahasa
|
|
9
|
+
- SEO
|
|
10
|
+
- Internasionalisasi
|
|
11
|
+
- Blog
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- what-is-internationalization
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Apa itu Internasionalisasi (i18n)? Definisi dan tantangan
|
|
21
|
+
|
|
22
|
+

|
|
23
|
+
|
|
24
|
+
## Memahami Internasionalisasi (i18n)
|
|
25
|
+
|
|
26
|
+
**Internasionalisasi**, yang sering disingkat sebagai **i18n**, adalah proses merancang dan mempersiapkan sebuah aplikasi untuk mendukung berbagai bahasa, budaya, dan konvensi regional **tanpa** perubahan besar pada basis kode. Nama i18n berasal dari fakta bahwa terdapat 18 huruf antara **i** dan **n** dalam kata “internationalization.”
|
|
27
|
+
|
|
28
|
+
## Mengapa i18n Penting
|
|
29
|
+
|
|
30
|
+
### SEO
|
|
31
|
+
|
|
32
|
+
Internasionalisasi memainkan peran penting dalam meningkatkan Search Engine Optimization (SEO) sebuah situs web. Mesin pencari seperti Google dan Bing menganalisis bahasa dan relevansi budaya dari konten Anda untuk menentukan peringkatnya. Dengan menyesuaikan situs Anda agar mendukung berbagai bahasa dan format regional, Anda dapat secara signifikan meningkatkan visibilitasnya dalam hasil pencarian. Ini tidak hanya menarik audiens yang lebih luas tetapi juga membantu situs web Anda untuk mendapatkan peringkat lebih tinggi, karena mesin pencari mengakui upaya yang dilakukan untuk melayani basis pengguna yang beragam.
|
|
33
|
+
|
|
34
|
+
### Jangkauan Global
|
|
35
|
+
|
|
36
|
+
Sama pentingnya adalah jangkauan global yang ditawarkan oleh internasionalisasi. Ketika Anda menghilangkan hambatan bahasa dan merancang aplikasi Anda untuk mendukung berbagai norma budaya, Anda membuka pintu bagi jutaan pengguna potensial dari seluruh dunia. Menyediakan konten dan antarmuka pengguna yang dilokalkan membedakan produk Anda dari pesaing yang mungkin hanya menawarkan dukungan untuk sejumlah bahasa terbatas. Pendekatan inklusif ini memastikan bahwa pengguna merasa diakui dan dihargai, tidak peduli di mana mereka berada, yang pada akhirnya memperluas pasar produk Anda dan meningkatkan daya saingnya di kancah global.
|
|
37
|
+
|
|
38
|
+
### Pengalaman Pengguna
|
|
39
|
+
|
|
40
|
+
Manfaat signifikan lain dari i18n adalah peningkatan pengalaman pengguna. Pengguna cenderung merasa lebih nyaman dan terhubung dengan perangkat lunak yang berkomunikasi dalam bahasa asli mereka dan menghormati konvensi lokal seperti format tanggal, mata uang, dan satuan pengukuran. Pengalaman yang dipersonalisasi ini adalah kunci untuk membangun kepercayaan dan kepuasan, serta mendorong retensi pengguna jangka panjang. Ketika pengguna dapat menavigasi dan memahami aplikasi dengan lancar, mereka lebih mungkin untuk terlibat secara mendalam, membuka jalan bagi ulasan positif, referensi, dan pertumbuhan yang berkelanjutan.
|
|
41
|
+
|
|
42
|
+
## Internasionalisasi (i18n) vs. Lokalisasi (l10n)
|
|
43
|
+
|
|
44
|
+
**Internasionalisasi (i18n)** adalah proses merancang produk Anda sehingga dapat dengan mudah mendukung berbagai bahasa dan perbedaan regional. Misalnya, jika Anda membangun sebuah situs web dengan mempertimbangkan internasionalisasi, Anda memastikan bahwa bidang teks mendukung berbagai set karakter, tanggal mengikuti format lokal yang berbeda, dan tata letak menyesuaikan untuk perluasan teks saat diterjemahkan ke bahasa lain.
|
|
45
|
+
|
|
46
|
+
**Lokalisasi (l10n)** adalah pekerjaan yang dilakukan setelah internasionalisasi. Ini melibatkan penerjemahan konten dan penyesuaian detail budaya untuk memenuhi kebutuhan audiens tertentu. Misalnya, setelah sebuah situs web diinternasionalisasi, Anda mungkin melokalisasinya untuk pengguna Prancis dengan menerjemahkan semua teks, mengubah format tanggal menjadi hari/bulan/tahun, dan bahkan menyesuaikan gambar atau ikon agar lebih sesuai dengan norma budaya Prancis.
|
|
47
|
+
|
|
48
|
+
Singkatnya, internasionalisasi mempersiapkan produk Anda untuk penggunaan global, sementara lokalisasi menyesuaikannya untuk pasar tertentu.
|
|
49
|
+
|
|
50
|
+
## Apa yang harus diinternasionalisasi dalam sebuah situs web?
|
|
51
|
+
|
|
52
|
+
1. **Konten Teks:** Semua elemen tertulis seperti judul, teks utama, dan tombol perlu diterjemahkan. Misalnya, sebuah judul seperti "Welcome to our website" harus menjadi "Bienvenido a nuestro sitio web" untuk audiens berbahasa Spanyol.
|
|
53
|
+
|
|
54
|
+
2. **Pesan Kesalahan:** Notifikasi kesalahan yang jelas dan singkat sangat penting. Jika sebuah kesalahan formulir mengatakan, "Invalid email address," itu harus diterjemahkan ke dalam bahasa Prancis sebagai "Adresse e-mail non valide" untuk membantu pengguna memahami masalah tersebut.
|
|
55
|
+
|
|
56
|
+
3. **Email dan Notifikasi:** Komunikasi otomatis, termasuk pengaturan ulang kata sandi atau konfirmasi pesanan, harus dilokalisasi. Email konfirmasi pesanan mungkin menyapa pengguna dengan "Dear Customer" dalam bahasa Inggris dan "Cher(e) client(e)" dalam bahasa Prancis untuk audiens yang sesuai.
|
|
57
|
+
|
|
58
|
+
4. **Label Aksesibilitas:** Label dan teks alt untuk gambar perlu diterjemahkan agar teknologi bantu dapat berfungsi dengan benar. Sebuah gambar dengan teks alt "Smiling child playing" harus disesuaikan menjadi "Enfant souriant qui joue" dalam bahasa Prancis.
|
|
59
|
+
|
|
60
|
+
5. **Penomoran:** Setiap wilayah memiliki format angka yang berbeda. Sementara **“1,000.50”** berlaku untuk wilayah berbahasa Inggris, banyak format Eropa menggunakan **“1.000,50,”** sehingga adaptasi lokal sangat penting.
|
|
61
|
+
|
|
62
|
+
6. **Mata Uang:** Tampilkan harga menggunakan simbol dan format yang benar sesuai dengan lokal. Misalnya, sebuah barang dengan harga **“$99.99”** di Amerika Serikat harus dikonversi menjadi **“€97.10”** saat menargetkan pelanggan di Eropa.
|
|
63
|
+
|
|
64
|
+
7. **Satuan Pengukuran:** Satuan seperti suhu, jarak, dan volume harus ditampilkan sesuai dengan preferensi lokal. Misalnya, aplikasi cuaca mungkin menampilkan **“68°F”** untuk pengguna Amerika tetapi **“20°C”** untuk pengguna lainnya.
|
|
65
|
+
|
|
66
|
+
8. **Arah Teks:** Urutan membaca dan tata letak harus disesuaikan untuk bahasa dengan arah yang berbeda. Situs web dalam bahasa Inggris (kiri ke kanan) harus mengubah penjajarannya saat dilokalkan untuk bahasa Arab, yang dibaca dari kanan ke kiri.
|
|
67
|
+
|
|
68
|
+
9. **Tanggal dan Waktu:** Format bervariasi di berbagai wilayah. Sebuah acara yang ditampilkan sebagai **“12/25/2025 pukul 3:00 PM”** di AS mungkin perlu ditampilkan sebagai **“25/12/2025 pukul 15:00”** di tempat lain untuk menghindari kebingungan.
|
|
69
|
+
|
|
70
|
+
10. **Zona Waktu**: Penyesuaian zona waktu lokal memastikan bahwa konten yang sensitif terhadap waktu seperti **jadwal acara, waktu pengiriman, atau jam layanan pelanggan** disajikan dengan akurat. Misalnya, webinar online yang dijadwalkan pada **"3:00 PM EST"** harus dikonversi ke waktu lokal yang sesuai seperti **"8:00 PM GMT"** untuk pengguna di Inggris.
|
|
71
|
+
|
|
72
|
+
Ikhtisar singkat ini mencakup elemen utama yang harus diinternasionalkan, memastikan bahwa konten dapat diakses, sesuai budaya, dan mudah dipahami oleh audiens global.
|
|
73
|
+
|
|
74
|
+
## Tantangan Umum i18n
|
|
75
|
+
|
|
76
|
+

|
|
77
|
+
|
|
78
|
+
- **pemeliharaan**
|
|
79
|
+
Setiap pembaruan situs web harus dicerminkan dalam setiap bahasa, yang menuntut alur kerja yang efisien dan koordinasi yang cermat untuk memastikan konsistensi di semua versi.
|
|
80
|
+
|
|
81
|
+
- **Penggabungan String**
|
|
82
|
+
Hindari membuat pesan seperti `"Hello, " + username + "!"` karena urutan kata dapat berbeda menurut bahasa; sebaliknya, gunakan placeholder seperti `Hello, {username}!` untuk mengakomodasi variasi bahasa.
|
|
83
|
+
|
|
84
|
+
- **Pluralisasi**
|
|
85
|
+
Bahasa yang berbeda memiliki aturan jamak yang bervariasi, terkadang dengan beberapa bentuk. Menggunakan pustaka seperti ICU MessageFormat dapat menyederhanakan penanganan kompleksitas pluralisasi ini.
|
|
86
|
+
|
|
87
|
+
- **UI dan panjang teks**
|
|
88
|
+
Beberapa bahasa, seperti Jerman, cenderung memiliki teks yang lebih panjang daripada bahasa Inggris. Ini dapat mengganggu tata letak jika desain tidak fleksibel, sehingga desain responsif sangat penting.
|
|
89
|
+
|
|
90
|
+
- **Pengkodean Karakter**
|
|
91
|
+
Menggunakan pengkodean karakter yang tepat (seperti UTF-8) sangat penting untuk menampilkan berbagai alfabet dan simbol dengan benar, mencegah teks yang salah tafsir atau rusak.
|
|
92
|
+
|
|
93
|
+
- **Tata Letak yang Dikodekan Secara Keras**
|
|
94
|
+
Komponen UI dengan ukuran tetap mungkin tidak menyesuaikan dengan baik untuk terjemahan yang lebih panjang, menyebabkan teks meluap. Tata letak yang fleksibel dan responsif membantu mengatasi masalah ini.
|
|
95
|
+
|
|
96
|
+
- **Pengalihan Bahasa Dinamis**
|
|
97
|
+
Pengguna mengharapkan untuk dapat mengganti bahasa tanpa harus memulai ulang aplikasi atau melakukan autentikasi ulang. Fitur ini memerlukan implementasi yang mulus dan direncanakan dengan baik dalam arsitektur.
|
|
98
|
+
|
|
99
|
+
- **Dukungan Arah Bahasa**
|
|
100
|
+
Mengabaikan dukungan bahasa dari kanan ke kiri (RTL) dapat menimbulkan tantangan desain ulang yang signifikan di kemudian hari. Sebaiknya rencanakan kompatibilitas RTL sejak awal.
|
|
101
|
+
|
|
102
|
+
- **Sensitivitas Budaya**
|
|
103
|
+
- Ikon, warna, dan simbol mungkin memiliki makna yang berbeda di berbagai budaya. Penting untuk menyesuaikan konten visual dan tekstual agar menghormati nuansa budaya lokal.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Praktik Terbaik untuk Menerapkan i18n
|
|
108
|
+
|
|
109
|
+
- **Rencanakan Sejak Awal**
|
|
110
|
+
Integrasikan internasionalisasi sejak awal proyek Anda. Menangani i18n sejak awal lebih murah dan lebih sederhana dibandingkan menambahkannya kemudian, memastikan proses pengembangan yang lebih lancar dari awal.
|
|
111
|
+
|
|
112
|
+
- **Otomatisasi Manajemen Terjemahan**
|
|
113
|
+
Gunakan layanan terjemahan berbasis AI, seperti yang disediakan oleh Intlayer, untuk mengelola terjemahan Anda secara efisien. Dengan otomatisasi, saat Anda menerbitkan artikel baru, semua terjemahan dibuat secara otomatis, menghemat waktu dan mengurangi kesalahan manual.
|
|
114
|
+
|
|
115
|
+
- **Menggunakan Editor Visual**
|
|
116
|
+
Implementasikan editor visual untuk membantu penerjemah melihat konten dalam konteks UI aslinya. Alat seperti editor visual Intlayer meminimalkan kesalahan dan kebingungan, memastikan bahwa terjemahan akurat dan mencerminkan desain akhir.
|
|
117
|
+
|
|
118
|
+
- **Dapat Digunakan Kembali Terjemahan**
|
|
119
|
+
Atur file terjemahan Anda agar dapat digunakan kembali di berbagai situs web atau aplikasi. Misalnya, jika Anda memiliki footer atau header multibahasa, buat file terjemahan khusus sehingga elemen umum dapat dengan mudah diterapkan ke semua proyek.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Kamus Locale vs. Eksternalisasi Konten CMS
|
|
124
|
+
|
|
125
|
+
Saat membuat situs web, **Sistem Manajemen Konten (CMS) seperti WordPress, Wix, atau Drupal umumnya menawarkan pemeliharaan yang lebih baik**. Terutama untuk blog atau halaman landing, karena fitur i18n terintegrasi mereka.
|
|
126
|
+
|
|
127
|
+
Namun, untuk aplikasi dengan fitur kompleks atau logika bisnis, **CMS mungkin terbukti terlalu kaku, dan Anda mungkin perlu mempertimbangkan penggunaan pustaka i18n**.
|
|
128
|
+
|
|
129
|
+
**Tantangan dengan banyak pustaka i18n adalah bahwa mereka sering mengharuskan terjemahan dikodekan secara langsung ke dalam codebase**. Ini berarti jika seorang manajer konten ingin memperbarui terjemahan, mereka harus memodifikasi kode dan membangun ulang aplikasi. Untuk mengatasi masalah ini, beberapa alat muncul sebagai "CMS berbasis Git" atau "CMS i18n" untuk membantu manajer konten. Namun, bahkan **solusi ini biasanya memerlukan pembaruan codebase dan pembangunan ulang ketika konten diubah**.
|
|
130
|
+
|
|
131
|
+
Mengingat tantangan ini, umum untuk memilih CMS headless guna mengeksternalisasi konten dan mempermudah manajemen terjemahan. Namun, ada beberapa kekurangan yang signifikan ketika menggunakan CMS untuk internasionalisasi:
|
|
132
|
+
|
|
133
|
+
- **Tidak semua CMS menawarkan fitur i18n:** Beberapa platform CMS populer tidak memiliki kemampuan internasionalisasi yang kuat, sehingga Anda harus mencari plugin tambahan atau solusi alternatif.
|
|
134
|
+
- **Konfigurasi ganda:** Mengelola terjemahan sering kali melibatkan konfigurasi baik di CMS maupun kode aplikasi, yang menyebabkan duplikasi usaha dan potensi ketidakkonsistenan.
|
|
135
|
+
- **Sulit untuk dipelihara:** Dengan terjemahan yang tersebar antara CMS dan kode, menjaga sistem yang konsisten dan bebas kesalahan bisa menjadi tantangan seiring waktu.
|
|
136
|
+
- **Biaya lisensi:** Platform CMS premium atau alat i18n tambahan dapat menimbulkan biaya lisensi ekstra yang mungkin tidak memungkinkan untuk setiap proyek.
|
|
137
|
+
|
|
138
|
+
Penting untuk memilih alat yang tepat sesuai kebutuhan Anda dan merencanakan strategi internasionalisasi sejak awal. **Intlayer menawarkan solusi menarik dengan menggabungkan deklarasi konten lokal dengan CMS headless yang terintegrasi erat, memberikan yang terbaik dari kedua dunia.**
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
### Lihat daftar Perpustakaan dan alat i18n per teknologi
|
|
143
|
+
|
|
144
|
+
Jika Anda mencari daftar perpustakaan dan alat i18n per teknologi, lihat sumber daya berikut:
|
|
145
|
+
|
|
146
|
+
### Untuk Sistem Manajemen Konten (CMS)
|
|
147
|
+
|
|
148
|
+
- WordPress: [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/CMS/wordpress.md)
|
|
149
|
+
- Wix: [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/CMS/wix.md)
|
|
150
|
+
- Drupal: [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/CMS/drupal.md)
|
|
151
|
+
|
|
152
|
+
### Untuk Aplikasi JavaScript (Frontend)
|
|
153
|
+
|
|
154
|
+
- React: [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/frameworks/react.md)
|
|
155
|
+
- Angular: [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/frameworks/angular.md)
|
|
156
|
+
- Vue: [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/frameworks/vue.md)
|
|
157
|
+
- Svelte: [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/frameworks/svelte.md)
|
|
158
|
+
- React Native : [Lihat daftar Perpustakaan dan alat i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/list_i18n_technologies/frameworks/react-native.md)
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Kesimpulan
|
|
163
|
+
|
|
164
|
+
Internasionalisasi (i18n) lebih dari sekadar tugas teknis; ini adalah **investasi strategis** yang memungkinkan perangkat lunak Anda berbicara dalam bahasa pengguna Anda secara harfiah. Dengan mengabstraksi elemen-elemen spesifik lokal, mengakomodasi variasi linguistik dan budaya, serta merencanakan ekspansi di masa depan, Anda memberdayakan produk Anda untuk berkembang di pasar global.
|
|
165
|
+
|
|
166
|
+
Apakah Anda sedang membangun aplikasi mobile, platform SaaS, atau alat enterprise, **i18n memastikan bahwa produk Anda dapat beradaptasi dan menarik pengguna dari seluruh dunia**, tanpa perlu penulisan ulang kode yang konstan. Dengan memanfaatkan praktik terbaik, kerangka kerja yang kuat, dan strategi lokalisasi berkelanjutan, pengembang dan tim produk dapat menghadirkan pengalaman perangkat lunak yang **benar-benar global**.
|