@intlayer/docs 7.0.6 → 7.0.8-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/i18n_using_next-i18next.md +1068 -0
- package/blog/ar/i18n_using_next-intl.md +768 -0
- package/blog/ar/intlayer_with_react-intl.md +0 -4
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +5 -4
- package/blog/de/i18n_using_next-i18next.md +1107 -0
- package/blog/de/i18n_using_next-intl.md +760 -0
- package/blog/de/intlayer_with_react-intl.md +0 -4
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/en/i18n_using_next-i18next.md +1073 -0
- package/blog/en/i18n_using_next-intl.md +757 -0
- package/blog/en/intlayer_with_i18next.md +71 -8
- package/blog/en/intlayer_with_next-i18next.md +71 -8
- package/blog/en/intlayer_with_next-intl.md +71 -8
- package/blog/en/intlayer_with_react-i18next.md +69 -8
- package/blog/en/intlayer_with_react-intl.md +68 -9
- package/blog/en/intlayer_with_vue-i18n.md +68 -7
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/blog/en/vue-i18n_vs_intlayer.md +2 -0
- package/blog/en-GB/i18n_using_next-i18next.md +1074 -0
- package/blog/en-GB/i18n_using_next-intl.md +757 -0
- package/blog/en-GB/intlayer_with_i18next.md +15 -6
- package/blog/en-GB/intlayer_with_next-i18next.md +16 -6
- package/blog/en-GB/intlayer_with_next-intl.md +16 -6
- package/blog/en-GB/intlayer_with_react-i18next.md +16 -7
- package/blog/en-GB/intlayer_with_react-intl.md +14 -9
- package/blog/en-GB/intlayer_with_vue-i18n.md +16 -7
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/blog/en-GB/vue-i18n_vs_intlayer.md +2 -0
- package/blog/es/i18n_using_next-i18next.md +1066 -0
- package/blog/es/i18n_using_next-intl.md +757 -0
- package/blog/es/intlayer_with_react-intl.md +0 -4
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/fr/i18n_using_next-i18next.md +1078 -0
- package/blog/fr/i18n_using_next-intl.md +759 -0
- package/blog/fr/intlayer_with_react-intl.md +0 -4
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/hi/i18n_using_next-i18next.md +1068 -0
- package/blog/hi/i18n_using_next-intl.md +758 -0
- package/blog/hi/intlayer_with_react-intl.md +0 -4
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/id/i18n_using_next-i18next.md +1078 -0
- package/blog/id/i18n_using_next-intl.md +757 -0
- package/blog/id/index.md +69 -0
- package/blog/id/internationalization_and_SEO.md +364 -0
- package/blog/id/intlayer_with_react-intl.md +0 -4
- package/blog/id/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/id/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/id/list_i18n_technologies/CMS/wordpress.md +188 -0
- package/blog/id/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/id/list_i18n_technologies/frameworks/flutter.md +150 -0
- package/blog/id/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/id/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/id/list_i18n_technologies/frameworks/svelte.md +131 -0
- package/blog/id/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1500 -0
- package/blog/id/nextjs-multilingual-seo-comparison.md +361 -0
- package/blog/id/rag_powered_documentation_assistant.md +288 -0
- package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/id/vue-i18n_vs_intlayer.md +278 -0
- package/blog/id/what_is_internationalization.md +166 -0
- package/blog/it/i18n_using_next-i18next.md +1078 -0
- package/blog/it/i18n_using_next-intl.md +758 -0
- package/blog/it/intlayer_with_react-intl.md +0 -4
- package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +4 -0
- package/blog/it/vue-i18n_vs_intlayer.md +2 -0
- package/blog/ja/i18n_using_next-i18next.md +1078 -0
- package/blog/ja/i18n_using_next-intl.md +758 -0
- package/blog/ja/intlayer_with_react-intl.md +0 -4
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/ko/i18n_using_next-i18next.md +1075 -0
- package/blog/ko/i18n_using_next-intl.md +759 -0
- package/blog/ko/intlayer_with_react-intl.md +0 -4
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/pl/i18n_using_next-i18next.md +1078 -0
- package/blog/pl/i18n_using_next-intl.md +758 -0
- package/blog/pl/index.md +69 -0
- package/blog/pl/internationalization_and_SEO.md +363 -0
- package/blog/pl/intlayer_with_react-intl.md +0 -4
- package/blog/pl/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/pl/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/pl/list_i18n_technologies/CMS/wordpress.md +196 -0
- package/blog/pl/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/pl/list_i18n_technologies/frameworks/flutter.md +151 -0
- package/blog/pl/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/pl/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/pl/list_i18n_technologies/frameworks/svelte.md +131 -0
- package/blog/pl/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1501 -0
- package/blog/pl/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/pl/rag_powered_documentation_assistant.md +288 -0
- package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/pl/vue-i18n_vs_intlayer.md +278 -0
- package/blog/pl/what_is_internationalization.md +167 -0
- package/blog/pt/i18n_using_next-i18next.md +1067 -0
- package/blog/pt/i18n_using_next-intl.md +760 -0
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/ru/i18n_using_next-i18next.md +1106 -0
- package/blog/ru/i18n_using_next-intl.md +759 -0
- package/blog/ru/intlayer_with_react-intl.md +0 -4
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/tr/i18n_using_next-i18next.md +1078 -0
- package/blog/tr/i18n_using_next-intl.md +760 -0
- package/blog/tr/intlayer_with_react-intl.md +0 -4
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/blog/tr/vue-i18n_vs_intlayer.md +2 -0
- package/blog/vi/i18n_using_next-i18next.md +1080 -0
- package/blog/vi/i18n_using_next-intl.md +758 -0
- package/blog/vi/index.md +69 -0
- package/blog/vi/internationalization_and_SEO.md +363 -0
- package/blog/vi/intlayer_with_react-intl.md +0 -4
- package/blog/vi/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/vi/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/vi/list_i18n_technologies/CMS/wordpress.md +188 -0
- package/blog/vi/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/vi/list_i18n_technologies/frameworks/flutter.md +150 -0
- package/blog/vi/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/vi/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/vi/list_i18n_technologies/frameworks/svelte.md +131 -0
- package/blog/vi/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1520 -0
- package/blog/vi/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/vi/rag_powered_documentation_assistant.md +288 -0
- package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/vi/vue-i18n_vs_intlayer.md +278 -0
- package/blog/vi/what_is_internationalization.md +168 -0
- package/blog/zh/i18n_using_next-i18next.md +1105 -0
- package/blog/zh/i18n_using_next-intl.md +758 -0
- package/blog/zh/intlayer_with_react-intl.md +0 -4
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
- package/dist/cjs/common.cjs +0 -4
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +38 -6
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +0 -6
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +0 -6
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +0 -6
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +38 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +2 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/docs/ar/component_i18n.md +1 -1
- package/docs/ar/configuration.md +6 -0
- package/docs/ar/intlayer_cli.md +8 -3
- package/docs/ar/intlayer_with_next-i18next.md +619 -0
- package/docs/ar/intlayer_with_next-intl.md +446 -0
- package/docs/ar/intlayer_with_nextjs_16.md +21 -0
- package/docs/ar/intlayer_with_tanstack.md +4 -0
- package/docs/ar/intlayer_with_vite+react.md +4 -0
- package/docs/de/component_i18n.md +1 -1
- package/docs/de/configuration.md +6 -0
- package/docs/de/intlayer_cli.md +8 -3
- package/docs/de/intlayer_with_next-i18next.md +627 -0
- package/docs/de/intlayer_with_next-intl.md +451 -0
- package/docs/de/intlayer_with_nextjs_16.md +21 -0
- package/docs/de/intlayer_with_tanstack.md +4 -0
- package/docs/de/intlayer_with_vite+react.md +4 -0
- package/docs/en/component_i18n.md +1 -1
- package/docs/en/intlayer_cli.md +8 -1
- package/docs/en/intlayer_with_astro.md +10 -2
- package/docs/en/intlayer_with_create_react_app.md +8 -0
- package/docs/en/intlayer_with_lynx+react.md +8 -0
- package/docs/en/intlayer_with_nestjs.md +10 -0
- package/docs/en/intlayer_with_nextjs_14.md +10 -2
- package/docs/en/intlayer_with_nextjs_15.md +21 -4
- package/docs/en/intlayer_with_nextjs_16.md +17 -0
- package/docs/en/intlayer_with_nuxt.md +8 -0
- package/docs/en/intlayer_with_react_native+expo.md +10 -2
- package/docs/en/intlayer_with_react_router_v7.md +8 -0
- package/docs/en/intlayer_with_tanstack.md +10 -0
- package/docs/en/intlayer_with_vite+preact.md +10 -2
- package/docs/en/intlayer_with_vite+react.md +21 -4
- package/docs/en/intlayer_with_vite+vue.md +10 -2
- package/docs/en-GB/component_i18n.md +1 -1
- package/docs/en-GB/configuration.md +6 -0
- package/docs/en-GB/intlayer_cli.md +8 -3
- package/docs/en-GB/intlayer_with_angular.md +4 -4
- package/docs/en-GB/intlayer_with_express.md +4 -4
- package/docs/en-GB/intlayer_with_lynx+react.md +12 -12
- package/{blog/en/_intlayer_with_next-i18next.md → docs/en-GB/intlayer_with_next-i18next.md} +241 -42
- package/{blog/en/_intlayer_with_next-intl.md → docs/en-GB/intlayer_with_next-intl.md} +144 -29
- package/docs/en-GB/intlayer_with_nextjs_16.md +21 -0
- package/docs/en-GB/intlayer_with_tanstack.md +5 -1
- package/docs/en-GB/intlayer_with_vite+react.md +4 -0
- package/docs/en-GB/packages/next-intlayer/t.md +2 -2
- package/docs/es/component_i18n.md +1 -1
- package/docs/es/configuration.md +6 -0
- package/docs/es/intlayer_cli.md +8 -3
- package/docs/es/intlayer_with_next-i18next.md +628 -0
- package/docs/es/intlayer_with_next-intl.md +446 -0
- package/docs/es/intlayer_with_nextjs_16.md +21 -0
- package/docs/es/intlayer_with_tanstack.md +4 -0
- package/docs/es/intlayer_with_vite+react.md +4 -0
- package/docs/fr/configuration.md +6 -0
- package/docs/fr/intlayer_cli.md +8 -3
- package/docs/fr/intlayer_with_next-i18next.md +628 -0
- package/docs/fr/intlayer_with_next-intl.md +446 -0
- package/docs/fr/intlayer_with_nextjs_16.md +23 -2
- package/docs/fr/intlayer_with_tanstack.md +4 -0
- package/docs/fr/intlayer_with_vite+react.md +4 -0
- package/docs/hi/component_i18n.md +1 -1
- package/docs/hi/configuration.md +6 -0
- package/docs/hi/intlayer_cli.md +8 -0
- package/docs/hi/intlayer_with_next-i18next.md +628 -0
- package/docs/hi/intlayer_with_next-intl.md +446 -0
- package/docs/hi/intlayer_with_nextjs_16.md +21 -0
- package/docs/hi/intlayer_with_tanstack.md +4 -0
- package/docs/hi/intlayer_with_vite+react.md +4 -0
- package/docs/id/CI_CD.md +198 -0
- package/docs/id/autoFill.md +284 -0
- package/docs/id/component_i18n.md +186 -0
- package/docs/id/configuration.md +710 -0
- package/docs/id/dictionary/condition.md +231 -0
- package/docs/id/dictionary/content_file.md +1092 -0
- package/docs/id/dictionary/enumeration.md +245 -0
- package/docs/id/dictionary/file.md +237 -0
- package/docs/id/dictionary/function_fetching.md +214 -0
- package/docs/id/dictionary/gender.md +273 -0
- package/docs/id/dictionary/insertion.md +192 -0
- package/docs/id/dictionary/markdown.md +381 -0
- package/docs/id/dictionary/nesting.md +273 -0
- package/docs/id/dictionary/translation.md +310 -0
- package/docs/id/formatters.md +596 -0
- package/docs/id/how_works_intlayer.md +256 -0
- package/docs/id/index.md +176 -0
- package/docs/id/interest_of_intlayer.md +293 -0
- package/docs/id/intlayer_CMS.md +549 -0
- package/docs/id/intlayer_cli.md +850 -0
- package/docs/id/intlayer_visual_editor.md +288 -0
- package/docs/id/intlayer_with_angular.md +694 -0
- package/docs/id/intlayer_with_astro.md +252 -0
- package/docs/id/intlayer_with_create_react_app.md +1233 -0
- package/docs/id/intlayer_with_express.md +411 -0
- package/docs/id/intlayer_with_lynx+react.md +518 -0
- package/docs/id/intlayer_with_nestjs.md +272 -0
- package/docs/id/intlayer_with_next-i18next.md +628 -0
- package/docs/id/intlayer_with_next-intl.md +446 -0
- package/docs/id/intlayer_with_nextjs_14.md +1617 -0
- package/docs/id/intlayer_with_nextjs_15.md +1698 -0
- package/docs/id/intlayer_with_nextjs_16.md +21 -0
- package/docs/id/intlayer_with_nextjs_page_router.md +1478 -0
- package/docs/id/intlayer_with_nuxt.md +808 -0
- package/docs/id/intlayer_with_react_native+expo.md +699 -0
- package/docs/id/intlayer_with_react_router_v7.md +496 -0
- package/docs/id/intlayer_with_tanstack.md +564 -0
- package/docs/id/intlayer_with_vite+preact.md +1737 -0
- package/docs/id/intlayer_with_vite+react.md +1413 -0
- package/docs/id/intlayer_with_vite+solid.md +289 -0
- package/docs/id/intlayer_with_vite+svelte.md +289 -0
- package/docs/id/intlayer_with_vite+vue.md +1088 -0
- package/docs/id/introduction.md +218 -0
- package/docs/id/locale_mapper.md +242 -0
- package/docs/id/mcp_server.md +211 -0
- package/docs/id/packages/express-intlayer/t.md +458 -0
- package/docs/id/packages/intlayer/getConfiguration.md +145 -0
- package/docs/id/packages/intlayer/getEnumeration.md +159 -0
- package/docs/id/packages/intlayer/getHTMLTextDir.md +122 -0
- package/docs/id/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/id/packages/intlayer/getLocaleName.md +119 -0
- package/docs/id/packages/intlayer/getLocalizedUrl.md +309 -0
- package/docs/id/packages/intlayer/getMultilingualUrls.md +223 -0
- package/docs/id/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/id/packages/intlayer/getTranslation.md +190 -0
- package/docs/id/packages/intlayer/getTranslationContent.md +188 -0
- package/docs/id/packages/next-intlayer/t.md +352 -0
- package/docs/id/packages/next-intlayer/useDictionary.md +271 -0
- package/docs/id/packages/next-intlayer/useIntlayer.md +264 -0
- package/docs/id/packages/next-intlayer/useLocale.md +166 -0
- package/docs/id/packages/react-intlayer/t.md +303 -0
- package/docs/id/packages/react-intlayer/useDictionary.md +287 -0
- package/docs/id/packages/react-intlayer/useI18n.md +267 -0
- package/docs/id/packages/react-intlayer/useIntlayer.md +254 -0
- package/docs/id/packages/react-intlayer/useLocale.md +210 -0
- package/docs/id/per_locale_file.md +323 -0
- package/docs/id/readme.md +261 -0
- package/docs/id/releases/v6.md +305 -0
- package/docs/id/roadmap.md +362 -0
- package/docs/id/testing.md +202 -0
- package/docs/id/vs_code_extension.md +126 -0
- package/docs/it/component_i18n.md +1 -1
- package/docs/it/configuration.md +6 -0
- package/docs/it/intlayer_cli.md +8 -3
- package/docs/it/intlayer_with_next-i18next.md +628 -0
- package/docs/it/intlayer_with_next-intl.md +446 -0
- package/docs/it/intlayer_with_nextjs_16.md +21 -0
- package/docs/it/intlayer_with_tanstack.md +4 -0
- package/docs/it/intlayer_with_vite+react.md +4 -0
- package/docs/ja/component_i18n.md +1 -1
- package/docs/ja/configuration.md +6 -0
- package/docs/ja/intlayer_cli.md +8 -3
- package/docs/ja/intlayer_with_next-i18next.md +627 -0
- package/docs/ja/intlayer_with_next-intl.md +446 -0
- package/docs/ja/intlayer_with_nextjs_16.md +21 -0
- package/docs/ja/intlayer_with_tanstack.md +4 -0
- package/docs/ja/intlayer_with_vite+react.md +4 -0
- package/docs/ko/configuration.md +6 -0
- package/docs/ko/intlayer_cli.md +8 -3
- package/docs/ko/intlayer_with_next-i18next.md +627 -0
- package/docs/ko/intlayer_with_next-intl.md +446 -0
- package/docs/ko/intlayer_with_nextjs_16.md +21 -0
- package/docs/ko/intlayer_with_tanstack.md +4 -0
- package/docs/ko/intlayer_with_vite+react.md +4 -0
- package/docs/pl/CI_CD.md +198 -0
- package/docs/pl/autoFill.md +284 -0
- package/docs/pl/component_i18n.md +186 -0
- package/docs/pl/configuration.md +710 -0
- package/docs/pl/dictionary/condition.md +232 -0
- package/docs/pl/dictionary/content_file.md +1130 -0
- package/docs/pl/dictionary/enumeration.md +245 -0
- package/docs/pl/dictionary/file.md +234 -0
- package/docs/pl/dictionary/function_fetching.md +214 -0
- package/docs/pl/dictionary/gender.md +276 -0
- package/docs/pl/dictionary/insertion.md +188 -0
- package/docs/pl/dictionary/markdown.md +408 -0
- package/docs/pl/dictionary/nesting.md +273 -0
- package/docs/pl/dictionary/translation.md +310 -0
- package/docs/pl/formatters.md +596 -0
- package/docs/pl/how_works_intlayer.md +256 -0
- package/docs/pl/index.md +176 -0
- package/docs/pl/interest_of_intlayer.md +291 -0
- package/docs/pl/intlayer_CMS.md +549 -0
- package/docs/pl/intlayer_cli.md +857 -0
- package/docs/pl/intlayer_visual_editor.md +288 -0
- package/docs/pl/intlayer_with_angular.md +690 -0
- package/docs/pl/intlayer_with_astro.md +280 -0
- package/docs/pl/intlayer_with_create_react_app.md +1235 -0
- package/docs/pl/intlayer_with_express.md +411 -0
- package/docs/pl/intlayer_with_lynx+react.md +518 -0
- package/docs/pl/intlayer_with_nestjs.md +272 -0
- package/docs/pl/intlayer_with_next-i18next.md +628 -0
- package/docs/pl/intlayer_with_next-intl.md +446 -0
- package/docs/pl/intlayer_with_nextjs_14.md +1594 -0
- package/docs/pl/intlayer_with_nextjs_15.md +1701 -0
- package/docs/pl/intlayer_with_nextjs_16.md +21 -0
- package/docs/pl/intlayer_with_nextjs_page_router.md +1513 -0
- package/docs/pl/intlayer_with_nuxt.md +885 -0
- package/docs/pl/intlayer_with_react_native+expo.md +698 -0
- package/docs/pl/intlayer_with_react_router_v7.md +503 -0
- package/docs/pl/intlayer_with_tanstack.md +562 -0
- package/docs/pl/intlayer_with_vite+preact.md +1736 -0
- package/docs/pl/intlayer_with_vite+react.md +1438 -0
- package/docs/pl/intlayer_with_vite+solid.md +290 -0
- package/docs/pl/intlayer_with_vite+svelte.md +289 -0
- package/docs/pl/intlayer_with_vite+vue.md +1116 -0
- package/docs/pl/introduction.md +209 -0
- package/docs/pl/locale_mapper.md +242 -0
- package/docs/pl/mcp_server.md +211 -0
- package/docs/pl/packages/express-intlayer/t.md +458 -0
- package/docs/pl/packages/intlayer/getConfiguration.md +146 -0
- package/docs/pl/packages/intlayer/getEnumeration.md +160 -0
- package/docs/pl/packages/intlayer/getHTMLTextDir.md +121 -0
- package/docs/pl/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/pl/packages/intlayer/getLocaleName.md +118 -0
- package/docs/pl/packages/intlayer/getLocalizedUrl.md +300 -0
- package/docs/pl/packages/intlayer/getMultilingualUrls.md +221 -0
- package/docs/pl/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/pl/packages/intlayer/getTranslation.md +190 -0
- package/docs/pl/packages/intlayer/getTranslationContent.md +189 -0
- package/docs/pl/packages/next-intlayer/t.md +353 -0
- package/docs/pl/packages/next-intlayer/useDictionary.md +270 -0
- package/docs/pl/packages/next-intlayer/useIntlayer.md +263 -0
- package/docs/pl/packages/next-intlayer/useLocale.md +166 -0
- package/docs/pl/packages/react-intlayer/t.md +303 -0
- package/docs/pl/packages/react-intlayer/useDictionary.md +289 -0
- package/docs/pl/packages/react-intlayer/useI18n.md +249 -0
- package/docs/pl/packages/react-intlayer/useIntlayer.md +256 -0
- package/docs/pl/packages/react-intlayer/useLocale.md +210 -0
- package/docs/pl/per_locale_file.md +321 -0
- package/docs/pl/readme.md +261 -0
- package/docs/pl/releases/v6.md +305 -0
- package/docs/pl/roadmap.md +362 -0
- package/docs/pl/testing.md +202 -0
- package/docs/pl/vs_code_extension.md +126 -0
- package/docs/pt/component_i18n.md +1 -1
- package/docs/pt/configuration.md +6 -0
- package/docs/pt/intlayer_cli.md +8 -3
- package/docs/pt/intlayer_with_next-i18next.md +627 -0
- package/docs/pt/intlayer_with_next-intl.md +446 -0
- package/docs/pt/intlayer_with_nextjs_16.md +21 -0
- package/docs/pt/intlayer_with_tanstack.md +4 -0
- package/docs/pt/intlayer_with_vite+react.md +4 -0
- package/docs/ru/component_i18n.md +1 -1
- package/docs/ru/configuration.md +6 -0
- package/docs/ru/intlayer_cli.md +301 -22
- package/docs/ru/intlayer_with_next-i18next.md +629 -0
- package/docs/ru/intlayer_with_next-intl.md +448 -0
- package/docs/ru/intlayer_with_nextjs_16.md +21 -0
- package/docs/ru/intlayer_with_tanstack.md +4 -0
- package/docs/ru/intlayer_with_vite+react.md +4 -0
- package/docs/tr/component_i18n.md +1 -1
- package/docs/tr/configuration.md +6 -0
- package/docs/tr/intlayer_cli.md +8 -0
- package/docs/tr/intlayer_with_next-i18next.md +627 -0
- package/docs/tr/intlayer_with_next-intl.md +446 -0
- package/docs/tr/intlayer_with_nextjs_16.md +21 -0
- package/docs/tr/intlayer_with_tanstack.md +4 -0
- package/docs/tr/intlayer_with_vite+react.md +4 -0
- package/docs/vi/CI_CD.md +198 -0
- package/docs/vi/autoFill.md +284 -0
- package/docs/vi/component_i18n.md +186 -0
- package/docs/vi/configuration.md +710 -0
- package/docs/vi/dictionary/condition.md +237 -0
- package/docs/vi/dictionary/content_file.md +1115 -0
- package/docs/vi/dictionary/enumeration.md +255 -0
- package/docs/vi/dictionary/file.md +234 -0
- package/docs/vi/dictionary/function_fetching.md +212 -0
- package/docs/vi/dictionary/gender.md +275 -0
- package/docs/vi/dictionary/insertion.md +191 -0
- package/docs/vi/dictionary/markdown.md +381 -0
- package/docs/vi/dictionary/nesting.md +273 -0
- package/docs/vi/dictionary/translation.md +309 -0
- package/docs/vi/formatters.md +595 -0
- package/docs/vi/how_works_intlayer.md +256 -0
- package/docs/vi/index.md +174 -0
- package/docs/vi/interest_of_intlayer.md +292 -0
- package/docs/vi/intlayer_CMS.md +549 -0
- package/docs/vi/intlayer_cli.md +850 -0
- package/docs/vi/intlayer_visual_editor.md +288 -0
- package/docs/vi/intlayer_with_angular.md +692 -0
- package/docs/vi/intlayer_with_astro.md +252 -0
- package/docs/vi/intlayer_with_create_react_app.md +1230 -0
- package/docs/vi/intlayer_with_express.md +409 -0
- package/docs/vi/intlayer_with_lynx+react.md +520 -0
- package/docs/vi/intlayer_with_nestjs.md +272 -0
- package/docs/vi/intlayer_with_next-i18next.md +628 -0
- package/docs/vi/intlayer_with_next-intl.md +446 -0
- package/docs/vi/intlayer_with_nextjs_14.md +1584 -0
- package/docs/vi/intlayer_with_nextjs_15.md +1738 -0
- package/docs/vi/intlayer_with_nextjs_16.md +21 -0
- package/docs/vi/intlayer_with_nextjs_page_router.md +1504 -0
- package/docs/vi/intlayer_with_nuxt.md +821 -0
- package/docs/vi/intlayer_with_react_native+expo.md +700 -0
- package/docs/vi/intlayer_with_react_router_v7.md +498 -0
- package/docs/vi/intlayer_with_tanstack.md +562 -0
- package/docs/vi/intlayer_with_vite+preact.md +1722 -0
- package/docs/vi/intlayer_with_vite+react.md +1407 -0
- package/docs/vi/intlayer_with_vite+solid.md +287 -0
- package/docs/vi/intlayer_with_vite+svelte.md +289 -0
- package/docs/vi/intlayer_with_vite+vue.md +1071 -0
- package/docs/vi/introduction.md +215 -0
- package/docs/vi/locale_mapper.md +242 -0
- package/docs/vi/mcp_server.md +211 -0
- package/docs/vi/packages/express-intlayer/t.md +457 -0
- package/docs/vi/packages/intlayer/getConfiguration.md +145 -0
- package/docs/vi/packages/intlayer/getEnumeration.md +162 -0
- package/docs/vi/packages/intlayer/getHTMLTextDir.md +121 -0
- package/docs/vi/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/vi/packages/intlayer/getLocaleName.md +129 -0
- package/docs/vi/packages/intlayer/getLocalizedUrl.md +309 -0
- package/docs/vi/packages/intlayer/getMultilingualUrls.md +221 -0
- package/docs/vi/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/vi/packages/intlayer/getTranslation.md +201 -0
- package/docs/vi/packages/intlayer/getTranslationContent.md +188 -0
- package/docs/vi/packages/next-intlayer/t.md +352 -0
- package/docs/vi/packages/next-intlayer/useDictionary.md +273 -0
- package/docs/vi/packages/next-intlayer/useIntlayer.md +264 -0
- package/docs/vi/packages/next-intlayer/useLocale.md +166 -0
- package/docs/vi/packages/react-intlayer/t.md +304 -0
- package/docs/vi/packages/react-intlayer/useDictionary.md +288 -0
- package/docs/vi/packages/react-intlayer/useI18n.md +295 -0
- package/docs/vi/packages/react-intlayer/useIntlayer.md +256 -0
- package/docs/vi/packages/react-intlayer/useLocale.md +210 -0
- package/docs/vi/per_locale_file.md +326 -0
- package/docs/vi/readme.md +261 -0
- package/docs/vi/releases/v6.md +305 -0
- package/docs/vi/roadmap.md +346 -0
- package/docs/vi/testing.md +202 -0
- package/docs/vi/vs_code_extension.md +126 -0
- package/docs/zh/configuration.md +6 -0
- package/docs/zh/intlayer_cli.md +8 -3
- package/docs/zh/intlayer_with_next-i18next.md +628 -0
- package/docs/zh/intlayer_with_next-intl.md +448 -0
- package/docs/zh/intlayer_with_nextjs_16.md +21 -0
- package/docs/zh/intlayer_with_tanstack.md +4 -0
- package/docs/zh/intlayer_with_vite+react.md +4 -0
- package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ar/array_as_content_declaration.md +1 -2
- package/frequent_questions/ar/build_dictionaries.md +1 -2
- package/frequent_questions/ar/build_error_CI_CD.md +1 -2
- package/frequent_questions/ar/bun_set_up.md +1 -2
- package/frequent_questions/ar/customized_locale_list.md +1 -2
- package/frequent_questions/ar/domain_routing.md +1 -2
- package/frequent_questions/ar/esbuild_error.md +1 -2
- package/frequent_questions/ar/get_locale_cookie.md +1 -2
- package/frequent_questions/ar/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ar/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ar/static_rendering.md +1 -3
- package/frequent_questions/ar/translated_path_url.md +1 -2
- package/frequent_questions/ar/unknown_command.md +1 -2
- package/frequent_questions/de/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/de/array_as_content_declaration.md +1 -2
- package/frequent_questions/de/build_dictionaries.md +1 -2
- package/frequent_questions/de/build_error_CI_CD.md +1 -2
- package/frequent_questions/de/bun_set_up.md +1 -2
- package/frequent_questions/de/customized_locale_list.md +1 -2
- package/frequent_questions/de/domain_routing.md +1 -2
- package/frequent_questions/de/esbuild_error.md +1 -2
- package/frequent_questions/de/get_locale_cookie.md +1 -2
- package/frequent_questions/de/intlayer_command_undefined.md +1 -2
- package/frequent_questions/de/locale_incorect_in_url.md +1 -2
- package/frequent_questions/de/static_rendering.md +1 -3
- package/frequent_questions/de/translated_path_url.md +1 -2
- package/frequent_questions/de/unknown_command.md +1 -2
- package/frequent_questions/en/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/en/array_as_content_declaration.md +1 -2
- package/frequent_questions/en/build_dictionaries.md +1 -2
- package/frequent_questions/en/build_error_CI_CD.md +1 -2
- package/frequent_questions/en/bun_set_up.md +1 -2
- package/frequent_questions/en/customized_locale_list.md +1 -2
- package/frequent_questions/en/domain_routing.md +1 -2
- package/frequent_questions/en/esbuild_error.md +1 -2
- package/frequent_questions/en/get_locale_cookie.md +1 -2
- package/frequent_questions/en/intlayer_command_undefined.md +1 -2
- package/frequent_questions/en/locale_incorect_in_url.md +1 -2
- package/frequent_questions/en/static_rendering.md +1 -3
- package/frequent_questions/en/translated_path_url.md +1 -2
- package/frequent_questions/en/unknown_command.md +1 -2
- package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/en-GB/array_as_content_declaration.md +1 -2
- package/frequent_questions/en-GB/build_dictionaries.md +1 -2
- package/frequent_questions/en-GB/build_error_CI_CD.md +1 -2
- package/frequent_questions/en-GB/bun_set_up.md +1 -2
- package/frequent_questions/en-GB/customized_locale_list.md +1 -2
- package/frequent_questions/en-GB/domain_routing.md +1 -2
- package/frequent_questions/en-GB/esbuild_error.md +1 -2
- package/frequent_questions/en-GB/get_locale_cookie.md +1 -2
- package/frequent_questions/en-GB/intlayer_command_undefined.md +1 -2
- package/frequent_questions/en-GB/locale_incorect_in_url.md +1 -2
- package/frequent_questions/en-GB/static_rendering.md +1 -3
- package/frequent_questions/en-GB/translated_path_url.md +1 -2
- package/frequent_questions/en-GB/unknown_command.md +1 -2
- package/frequent_questions/es/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/es/array_as_content_declaration.md +1 -2
- package/frequent_questions/es/build_dictionaries.md +1 -2
- package/frequent_questions/es/build_error_CI_CD.md +1 -2
- package/frequent_questions/es/bun_set_up.md +1 -2
- package/frequent_questions/es/customized_locale_list.md +1 -2
- package/frequent_questions/es/domain_routing.md +1 -2
- package/frequent_questions/es/esbuild_error.md +1 -2
- package/frequent_questions/es/get_locale_cookie.md +1 -2
- package/frequent_questions/es/intlayer_command_undefined.md +1 -2
- package/frequent_questions/es/locale_incorect_in_url.md +1 -2
- package/frequent_questions/es/static_rendering.md +1 -3
- package/frequent_questions/es/translated_path_url.md +1 -2
- package/frequent_questions/es/unknown_command.md +1 -2
- package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/fr/array_as_content_declaration.md +1 -2
- package/frequent_questions/fr/build_dictionaries.md +1 -2
- package/frequent_questions/fr/build_error_CI_CD.md +1 -2
- package/frequent_questions/fr/bun_set_up.md +1 -2
- package/frequent_questions/fr/customized_locale_list.md +1 -2
- package/frequent_questions/fr/domain_routing.md +1 -2
- package/frequent_questions/fr/esbuild_error.md +1 -2
- package/frequent_questions/fr/get_locale_cookie.md +1 -2
- package/frequent_questions/fr/intlayer_command_undefined.md +1 -2
- package/frequent_questions/fr/locale_incorect_in_url.md +1 -2
- package/frequent_questions/fr/static_rendering.md +1 -3
- package/frequent_questions/fr/translated_path_url.md +1 -2
- package/frequent_questions/fr/unknown_command.md +1 -2
- package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/hi/array_as_content_declaration.md +1 -2
- package/frequent_questions/hi/build_dictionaries.md +1 -2
- package/frequent_questions/hi/build_error_CI_CD.md +1 -2
- package/frequent_questions/hi/bun_set_up.md +1 -2
- package/frequent_questions/hi/customized_locale_list.md +1 -2
- package/frequent_questions/hi/domain_routing.md +1 -2
- package/frequent_questions/hi/esbuild_error.md +1 -2
- package/frequent_questions/hi/get_locale_cookie.md +1 -2
- package/frequent_questions/hi/intlayer_command_undefined.md +1 -2
- package/frequent_questions/hi/locale_incorect_in_url.md +1 -2
- package/frequent_questions/hi/static_rendering.md +1 -3
- package/frequent_questions/hi/translated_path_url.md +1 -2
- package/frequent_questions/hi/unknown_command.md +1 -2
- package/frequent_questions/id/SSR_Next_no_[locale].md +104 -0
- package/frequent_questions/id/array_as_content_declaration.md +71 -0
- package/frequent_questions/id/build_dictionaries.md +58 -0
- package/frequent_questions/id/build_error_CI_CD.md +74 -0
- package/frequent_questions/id/bun_set_up.md +53 -0
- package/frequent_questions/id/customized_locale_list.md +64 -0
- package/frequent_questions/id/domain_routing.md +113 -0
- package/frequent_questions/id/esbuild_error.md +29 -0
- package/frequent_questions/id/get_locale_cookie.md +142 -0
- package/frequent_questions/id/intlayer_command_undefined.md +155 -0
- package/frequent_questions/id/locale_incorect_in_url.md +73 -0
- package/frequent_questions/id/static_rendering.md +44 -0
- package/frequent_questions/id/translated_path_url.md +55 -0
- package/frequent_questions/id/unknown_command.md +97 -0
- package/frequent_questions/it/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/it/array_as_content_declaration.md +1 -2
- package/frequent_questions/it/build_dictionaries.md +1 -2
- package/frequent_questions/it/build_error_CI_CD.md +1 -2
- package/frequent_questions/it/bun_set_up.md +1 -2
- package/frequent_questions/it/customized_locale_list.md +1 -2
- package/frequent_questions/it/domain_routing.md +1 -2
- package/frequent_questions/it/esbuild_error.md +1 -2
- package/frequent_questions/it/get_locale_cookie.md +1 -2
- package/frequent_questions/it/intlayer_command_undefined.md +1 -2
- package/frequent_questions/it/locale_incorect_in_url.md +1 -2
- package/frequent_questions/it/static_rendering.md +1 -3
- package/frequent_questions/it/translated_path_url.md +1 -2
- package/frequent_questions/it/unknown_command.md +1 -2
- package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ja/array_as_content_declaration.md +1 -2
- package/frequent_questions/ja/build_dictionaries.md +1 -2
- package/frequent_questions/ja/build_error_CI_CD.md +1 -2
- package/frequent_questions/ja/bun_set_up.md +1 -2
- package/frequent_questions/ja/customized_locale_list.md +1 -2
- package/frequent_questions/ja/domain_routing.md +1 -2
- package/frequent_questions/ja/esbuild_error.md +1 -2
- package/frequent_questions/ja/get_locale_cookie.md +1 -2
- package/frequent_questions/ja/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ja/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ja/static_rendering.md +1 -3
- package/frequent_questions/ja/translated_path_url.md +1 -2
- package/frequent_questions/ja/unknown_command.md +1 -2
- package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ko/array_as_content_declaration.md +1 -2
- package/frequent_questions/ko/build_dictionaries.md +1 -2
- package/frequent_questions/ko/build_error_CI_CD.md +1 -2
- package/frequent_questions/ko/bun_set_up.md +1 -2
- package/frequent_questions/ko/customized_locale_list.md +1 -2
- package/frequent_questions/ko/domain_routing.md +1 -2
- package/frequent_questions/ko/esbuild_error.md +1 -2
- package/frequent_questions/ko/get_locale_cookie.md +1 -2
- package/frequent_questions/ko/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ko/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ko/static_rendering.md +1 -3
- package/frequent_questions/ko/translated_path_url.md +1 -2
- package/frequent_questions/ko/unknown_command.md +1 -2
- package/frequent_questions/pl/SSR_Next_no_[locale].md +104 -0
- package/frequent_questions/pl/array_as_content_declaration.md +71 -0
- package/frequent_questions/pl/build_dictionaries.md +58 -0
- package/frequent_questions/pl/build_error_CI_CD.md +74 -0
- package/frequent_questions/pl/bun_set_up.md +54 -0
- package/frequent_questions/pl/customized_locale_list.md +64 -0
- package/frequent_questions/pl/domain_routing.md +113 -0
- package/frequent_questions/pl/esbuild_error.md +29 -0
- package/frequent_questions/pl/get_locale_cookie.md +142 -0
- package/frequent_questions/pl/intlayer_command_undefined.md +155 -0
- package/frequent_questions/pl/locale_incorect_in_url.md +73 -0
- package/frequent_questions/pl/static_rendering.md +44 -0
- package/frequent_questions/pl/translated_path_url.md +55 -0
- package/frequent_questions/pl/unknown_command.md +97 -0
- package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/pt/array_as_content_declaration.md +1 -2
- package/frequent_questions/pt/build_dictionaries.md +1 -2
- package/frequent_questions/pt/build_error_CI_CD.md +1 -2
- package/frequent_questions/pt/bun_set_up.md +1 -2
- package/frequent_questions/pt/customized_locale_list.md +1 -2
- package/frequent_questions/pt/domain_routing.md +1 -2
- package/frequent_questions/pt/esbuild_error.md +1 -2
- package/frequent_questions/pt/get_locale_cookie.md +1 -2
- package/frequent_questions/pt/intlayer_command_undefined.md +1 -2
- package/frequent_questions/pt/locale_incorect_in_url.md +1 -2
- package/frequent_questions/pt/static_rendering.md +1 -3
- package/frequent_questions/pt/translated_path_url.md +1 -2
- package/frequent_questions/pt/unknown_command.md +1 -2
- package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/ru/array_as_content_declaration.md +1 -2
- package/frequent_questions/ru/build_dictionaries.md +1 -2
- package/frequent_questions/ru/build_error_CI_CD.md +1 -2
- package/frequent_questions/ru/bun_set_up.md +1 -2
- package/frequent_questions/ru/customized_locale_list.md +1 -2
- package/frequent_questions/ru/domain_routing.md +1 -2
- package/frequent_questions/ru/esbuild_error.md +1 -2
- package/frequent_questions/ru/get_locale_cookie.md +1 -2
- package/frequent_questions/ru/intlayer_command_undefined.md +1 -2
- package/frequent_questions/ru/locale_incorect_in_url.md +1 -2
- package/frequent_questions/ru/static_rendering.md +1 -2
- package/frequent_questions/ru/translated_path_url.md +1 -2
- package/frequent_questions/ru/unknown_command.md +1 -2
- package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/tr/array_as_content_declaration.md +1 -2
- package/frequent_questions/tr/build_dictionaries.md +1 -2
- package/frequent_questions/tr/build_error_CI_CD.md +1 -2
- package/frequent_questions/tr/bun_set_up.md +1 -2
- package/frequent_questions/tr/customized_locale_list.md +1 -2
- package/frequent_questions/tr/domain_routing.md +1 -2
- package/frequent_questions/tr/esbuild_error.md +1 -2
- package/frequent_questions/tr/get_locale_cookie.md +1 -2
- package/frequent_questions/tr/intlayer_command_undefined.md +1 -2
- package/frequent_questions/tr/locale_incorect_in_url.md +1 -2
- package/frequent_questions/tr/static_rendering.md +1 -2
- package/frequent_questions/tr/translated_path_url.md +1 -2
- package/frequent_questions/tr/unknown_command.md +1 -2
- package/frequent_questions/vi/SSR_Next_no_[locale].md +106 -0
- package/frequent_questions/vi/array_as_content_declaration.md +71 -0
- package/frequent_questions/vi/build_dictionaries.md +58 -0
- package/frequent_questions/vi/build_error_CI_CD.md +74 -0
- package/frequent_questions/vi/bun_set_up.md +53 -0
- package/frequent_questions/vi/customized_locale_list.md +64 -0
- package/frequent_questions/vi/domain_routing.md +113 -0
- package/frequent_questions/vi/esbuild_error.md +29 -0
- package/frequent_questions/vi/get_locale_cookie.md +142 -0
- package/frequent_questions/vi/intlayer_command_undefined.md +155 -0
- package/frequent_questions/vi/locale_incorect_in_url.md +73 -0
- package/frequent_questions/vi/static_rendering.md +44 -0
- package/frequent_questions/vi/translated_path_url.md +55 -0
- package/frequent_questions/vi/unknown_command.md +97 -0
- package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -2
- package/frequent_questions/zh/array_as_content_declaration.md +1 -2
- package/frequent_questions/zh/build_dictionaries.md +1 -2
- package/frequent_questions/zh/build_error_CI_CD.md +1 -2
- package/frequent_questions/zh/bun_set_up.md +1 -2
- package/frequent_questions/zh/customized_locale_list.md +1 -2
- package/frequent_questions/zh/domain_routing.md +1 -2
- package/frequent_questions/zh/esbuild_error.md +1 -2
- package/frequent_questions/zh/get_locale_cookie.md +1 -2
- package/frequent_questions/zh/intlayer_command_undefined.md +1 -2
- package/frequent_questions/zh/locale_incorect_in_url.md +1 -2
- package/frequent_questions/zh/static_rendering.md +1 -3
- package/frequent_questions/zh/translated_path_url.md +1 -2
- package/frequent_questions/zh/unknown_command.md +1 -2
- package/legal/id/privacy_notice.md +83 -0
- package/legal/id/terms_of_service.md +55 -0
- package/legal/pl/privacy_notice.md +83 -0
- package/legal/pl/terms_of_service.md +55 -0
- package/legal/vi/privacy_notice.md +83 -0
- package/legal/vi/terms_of_service.md +55 -0
- package/package.json +19 -18
- package/src/generated/blog.entry.ts +38 -0
|
@@ -0,0 +1,699 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-06-18
|
|
3
|
+
updatedAt: 2025-10-02
|
|
4
|
+
title: Cara menerjemahkan aplikasi React Native dan Expo Anda – panduan i18n 2025
|
|
5
|
+
description: Temukan cara membuat situs web React Native dan Expo Anda menjadi multibahasa. Ikuti dokumentasi untuk melakukan internasionalisasi (i18n) dan menerjemahkannya.
|
|
6
|
+
keywords:
|
|
7
|
+
- Internasionalisasi
|
|
8
|
+
- Dokumentasi
|
|
9
|
+
- Intlayer
|
|
10
|
+
- React Native
|
|
11
|
+
- Expo
|
|
12
|
+
- JavaScript
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- react-native-and-expo
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-react-native-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 6.1.6
|
|
20
|
+
date: 2025-10-02
|
|
21
|
+
changes: Menambahkan bagian debug
|
|
22
|
+
- version: 5.5.10
|
|
23
|
+
date: 2025-06-29
|
|
24
|
+
changes: Inisialisasi riwayat
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Terjemahkan situs web React Native dan Expo Anda menggunakan Intlayer | Internasionalisasi (i18n)
|
|
28
|
+
|
|
29
|
+
## Daftar Isi
|
|
30
|
+
|
|
31
|
+
<TOC/>
|
|
32
|
+
|
|
33
|
+
## Apa itu Intlayer?
|
|
34
|
+
|
|
35
|
+
**Intlayer** adalah **perpustakaan internasionalisasi (i18n) open-source yang inovatif** yang mempermudah dukungan multibahasa dalam aplikasi modern. Ini bekerja di banyak lingkungan JavaScript/TypeScript, **termasuk React Native** (melalui paket `react-intlayer`).
|
|
36
|
+
|
|
37
|
+
Dengan Intlayer, Anda dapat:
|
|
38
|
+
|
|
39
|
+
- **Mengelola terjemahan dengan mudah** menggunakan kamus deklaratif di tingkat komponen.
|
|
40
|
+
- **Memastikan dukungan TypeScript** dengan tipe yang dihasilkan secara otomatis.
|
|
41
|
+
- **Melokalkan konten secara dinamis**, termasuk **string UI** (dan di React untuk web, juga dapat melokalkan metadata HTML, dll.).
|
|
42
|
+
- **Memanfaatkan fitur canggih**, seperti deteksi dan pengalihan locale secara dinamis.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Langkah 1: Instalasi Dependensi
|
|
47
|
+
|
|
48
|
+
<iframe
|
|
49
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-react-native-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
50
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
51
|
+
title="Demo CodeSandbox - Cara Menginternasionalisasi aplikasi Anda menggunakan Intlayer"
|
|
52
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
53
|
+
loading="lazy"
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
Lihat [Template Aplikasi](https://github.com/aymericzip/intlayer-react-native-template) di GitHub.
|
|
57
|
+
|
|
58
|
+
Dari proyek React Native Anda, instal paket-paket berikut:
|
|
59
|
+
|
|
60
|
+
```bash packageManager="npm"
|
|
61
|
+
npm install intlayer react-intlayer
|
|
62
|
+
npm install --save-dev react-native-intlayer
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```bash packageManager="pnpm"
|
|
66
|
+
pnpm add intlayer react-intlayer
|
|
67
|
+
pnpm add --save-dev react-native-intlayer
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```bash packageManager="yarn"
|
|
71
|
+
yarn add intlayer react-intlayer
|
|
72
|
+
yarn add --save-dev react-native-intlayer
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Paket
|
|
76
|
+
|
|
77
|
+
- **intlayer**
|
|
78
|
+
Toolkit inti i18n untuk konfigurasi, konten kamus, generasi tipe, dan perintah CLI.
|
|
79
|
+
|
|
80
|
+
- **react-intlayer**
|
|
81
|
+
Integrasi React yang menyediakan context providers dan React hooks yang akan Anda gunakan di React Native untuk mendapatkan dan mengganti locale.
|
|
82
|
+
|
|
83
|
+
- **react-native-intlayer**
|
|
84
|
+
Integrasi React Native yang menyediakan plugin Metro untuk mengintegrasikan Intlayer dengan bundler React Native.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Langkah 2: Buat Konfigurasi Intlayer
|
|
89
|
+
|
|
90
|
+
Di root proyek Anda (atau di mana saja yang nyaman), buat file **konfigurasi Intlayer**. File tersebut mungkin terlihat seperti ini:
|
|
91
|
+
|
|
92
|
+
```ts fileName="intlayer.config.ts" codeFormat="typescript"
|
|
93
|
+
/**
|
|
94
|
+
* Jika tipe Locales tidak tersedia, coba atur moduleResolution ke "bundler" di tsconfig.json Anda
|
|
95
|
+
*/
|
|
96
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
97
|
+
|
|
98
|
+
const config: IntlayerConfig = {
|
|
99
|
+
internationalization: {
|
|
100
|
+
locales: [
|
|
101
|
+
Locales.ENGLISH,
|
|
102
|
+
Locales.FRENCH,
|
|
103
|
+
Locales.SPANISH,
|
|
104
|
+
// ... Tambahkan locale lain yang Anda butuhkan
|
|
105
|
+
],
|
|
106
|
+
defaultLocale: Locales.ENGLISH,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default config;
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
```js fileName="intlayer.config.mjs" codeFormat="esm"
|
|
114
|
+
import { Locales } from "intlayer";
|
|
115
|
+
|
|
116
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
117
|
+
const config = {
|
|
118
|
+
internationalization: {
|
|
119
|
+
locales: [
|
|
120
|
+
Locales.ENGLISH,
|
|
121
|
+
Locales.FRENCH,
|
|
122
|
+
Locales.SPANISH,
|
|
123
|
+
// ... Tambahkan locale lain yang Anda butuhkan
|
|
124
|
+
],
|
|
125
|
+
defaultLocale: Locales.ENGLISH,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export default config;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```js fileName="intlayer.config.js" codeFormat="commonjs"
|
|
133
|
+
const { Locales } = require("intlayer");
|
|
134
|
+
|
|
135
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
136
|
+
const config = {
|
|
137
|
+
internationalization: {
|
|
138
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
139
|
+
defaultLocale: Locales.ENGLISH,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
module.exports = config;
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Dalam konfigurasi ini, Anda dapat:
|
|
147
|
+
|
|
148
|
+
- Mengonfigurasi **daftar locale yang didukung**.
|
|
149
|
+
- Menetapkan locale **default**.
|
|
150
|
+
- Nanti, Anda dapat menambahkan opsi yang lebih canggih (misalnya, log, direktori konten khusus, dll.).
|
|
151
|
+
- Lihat [dokumentasi konfigurasi Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md) untuk informasi lebih lanjut.
|
|
152
|
+
|
|
153
|
+
## Langkah 3: Tambahkan plugin Metro
|
|
154
|
+
|
|
155
|
+
Metro adalah bundler untuk React Native. Ini adalah bundler default untuk proyek React Native yang dibuat dengan perintah `react-native init`. Untuk menggunakan Intlayer dengan Metro, Anda perlu menambahkan plugin ke file `metro.config.js` Anda:
|
|
156
|
+
|
|
157
|
+
```js fileName="metro.config.js"
|
|
158
|
+
const { getDefaultConfig } = require("expo/metro-config");
|
|
159
|
+
const { configMetroIntlayer } = require("react-native-intlayer/metro");
|
|
160
|
+
|
|
161
|
+
module.exports = (async () => {
|
|
162
|
+
const defaultConfig = getDefaultConfig(__dirname);
|
|
163
|
+
|
|
164
|
+
return await configMetroIntlayer(defaultConfig);
|
|
165
|
+
})();
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
> Catatan: `configMetroIntlayer` adalah fungsi promise. Gunakan `configMetroIntlayerSync` jika Anda ingin menggunakannya secara sinkron, atau hindari IFFE (Immediately Invoked Function Expression).
|
|
169
|
+
> Catatan: `configMetroIntlayerSync` tidak memungkinkan untuk membangun kamus intlayer saat server mulai
|
|
170
|
+
|
|
171
|
+
## Langkah 4: Tambahkan provider Intlayer
|
|
172
|
+
|
|
173
|
+
Untuk menjaga sinkronisasi bahasa pengguna di seluruh aplikasi Anda, Anda perlu membungkus komponen root Anda dengan komponen `IntlayerProvider` dari `react-native-intlayer`.
|
|
174
|
+
|
|
175
|
+
> Pastikan untuk menggunakan provider dari `react-native-intlayer` bukan dari `react-intlayer`. Ekspor dari `react-native-intlayer` mencakup polyfill untuk API web.
|
|
176
|
+
|
|
177
|
+
Selain itu, Anda perlu menambahkan fungsi `intlayerPolyfill` ke file `index.js` Anda untuk memastikan Intlayer dapat bekerja dengan baik.
|
|
178
|
+
|
|
179
|
+
```tsx fileName="app/_layout.tsx" codeFormat="typescript"
|
|
180
|
+
import { Stack } from "expo-router";
|
|
181
|
+
import { getLocales } from "expo-localization";
|
|
182
|
+
import { IntlayerProvider } from "react-native-intlayer";
|
|
183
|
+
import { type FC } from "react";
|
|
184
|
+
|
|
185
|
+
const getDeviceLocale = () => getLocales()[0]?.languageTag;
|
|
186
|
+
|
|
187
|
+
const RootLayout: FC = () => {
|
|
188
|
+
return (
|
|
189
|
+
<IntlayerProvider defaultLocale={getDeviceLocale()}>
|
|
190
|
+
<Stack>
|
|
191
|
+
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
|
|
192
|
+
</Stack>
|
|
193
|
+
</IntlayerProvider>
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export default RootLayout;
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
```jsx fileName="app/_layout.mjx" codeFormat="esm"
|
|
201
|
+
import { Stack } from "expo-router";
|
|
202
|
+
import { getLocales } from "expo-localization";
|
|
203
|
+
import { IntlayerProvider } from "react-native-intlayer";
|
|
204
|
+
|
|
205
|
+
const getDeviceLocale = () => getLocales()[0]?.languageTag;
|
|
206
|
+
|
|
207
|
+
const RootLayout = () => {
|
|
208
|
+
return (
|
|
209
|
+
<IntlayerProvider defaultLocale={getDeviceLocale()}>
|
|
210
|
+
<Stack>
|
|
211
|
+
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
|
|
212
|
+
</Stack>
|
|
213
|
+
</IntlayerProvider>
|
|
214
|
+
);
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
export default RootLayout;
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
```jsx fileName="app/_layout.cjx" codeFormat="commonjs"
|
|
221
|
+
const { Stack } = require("expo-router");
|
|
222
|
+
const { getLocales } = require("expo-localization");
|
|
223
|
+
const { IntlayerProvider } = require("react-native-intlayer");
|
|
224
|
+
|
|
225
|
+
const getDeviceLocale = () => getLocales()[0]?.languageTag;
|
|
226
|
+
|
|
227
|
+
const RootLayout = () => {
|
|
228
|
+
return (
|
|
229
|
+
<IntlayerProvider defaultLocale={getDeviceLocale()}>
|
|
230
|
+
<Stack>
|
|
231
|
+
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
|
|
232
|
+
</Stack>
|
|
233
|
+
</IntlayerProvider>
|
|
234
|
+
);
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
module.exports = RootLayout;
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Langkah 5: Deklarasikan Konten Anda
|
|
241
|
+
|
|
242
|
+
Buat file **deklarasi konten** di mana saja dalam proyek Anda (biasanya di dalam `src/`), menggunakan salah satu format ekstensi yang didukung Intlayer:
|
|
243
|
+
|
|
244
|
+
- `.content.json`
|
|
245
|
+
- `.content.ts`
|
|
246
|
+
- `.content.tsx`
|
|
247
|
+
- `.content.js`
|
|
248
|
+
- `.content.jsx`
|
|
249
|
+
- `.content.mjs`
|
|
250
|
+
- `.content.mjx`
|
|
251
|
+
- `.content.cjs`
|
|
252
|
+
- `.content.cjx`
|
|
253
|
+
- dll.
|
|
254
|
+
|
|
255
|
+
Contoh (TypeScript dengan node TSX untuk React Native):
|
|
256
|
+
|
|
257
|
+
```tsx fileName="src/app.content.tsx" contentDeclarationFormat="typescript"
|
|
258
|
+
import { t, type Dictionary } from "intlayer";
|
|
259
|
+
import type { ReactNode } from "react";
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Kamus konten untuk domain "app" kami
|
|
263
|
+
*/
|
|
264
|
+
import { t, type Dictionary } from "intlayer";
|
|
265
|
+
|
|
266
|
+
const homeScreenContent = {
|
|
267
|
+
key: "home-screen",
|
|
268
|
+
content: {
|
|
269
|
+
title: t({
|
|
270
|
+
en: "Welcome!",
|
|
271
|
+
fr: "Bienvenue!",
|
|
272
|
+
es: "¡Bienvenido!",
|
|
273
|
+
}),
|
|
274
|
+
},
|
|
275
|
+
} satisfies Dictionary;
|
|
276
|
+
|
|
277
|
+
export default homeScreenContent;
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
```jsx fileName="src/app.content.mjx" contentDeclarationFormat="esm"
|
|
281
|
+
import { t } from "intlayer";
|
|
282
|
+
import { ReactNode } from "react";
|
|
283
|
+
|
|
284
|
+
/** @type {import('intlayer').Dictionary} */
|
|
285
|
+
const appContent = {
|
|
286
|
+
key: "home-screen",
|
|
287
|
+
content: {
|
|
288
|
+
title: t({
|
|
289
|
+
en: "Welcome!",
|
|
290
|
+
fr: "Bienvenue!",
|
|
291
|
+
es: "¡Bienvenido!",
|
|
292
|
+
}),
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
export default appContent;
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
```jsx fileName="src/app.content.csx" contentDeclarationFormat="commonjs"
|
|
300
|
+
const { t } = require("intlayer");
|
|
301
|
+
|
|
302
|
+
/** @type {import('intlayer').Dictionary} */
|
|
303
|
+
const appContent = {
|
|
304
|
+
key: "home-screen",
|
|
305
|
+
content: {
|
|
306
|
+
title: t({
|
|
307
|
+
en: "Welcome!",
|
|
308
|
+
fr: "Bienvenue!",
|
|
309
|
+
es: "¡Bienvenido!",
|
|
310
|
+
}),
|
|
311
|
+
},
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
module.exports = appContent;
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
```json fileName="src/app.content.json" contentDeclarationFormat="json"
|
|
318
|
+
{
|
|
319
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
320
|
+
"key": "app",
|
|
321
|
+
"content": {
|
|
322
|
+
"title": {
|
|
323
|
+
"nodeType": "translation",
|
|
324
|
+
"translation": {
|
|
325
|
+
"en": "Welcome!",
|
|
326
|
+
"fr": "Bienvenue!",
|
|
327
|
+
"es": "¡Bienvenido!"
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
> Untuk detail tentang deklarasi konten, lihat [dokumentasi konten Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md).
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Langkah 4: Gunakan Intlayer di Komponen Anda
|
|
339
|
+
|
|
340
|
+
Gunakan hook `useIntlayer` di komponen anak untuk mendapatkan konten yang sudah dilokalisasi.
|
|
341
|
+
|
|
342
|
+
### Contoh
|
|
343
|
+
|
|
344
|
+
```tsx fileName="app/(tabs)/index.tsx" codeFormat="typescript"
|
|
345
|
+
import { Image, StyleSheet, Platform } from "react-native";
|
|
346
|
+
import { useIntlayer } from "react-intlayer";
|
|
347
|
+
import { HelloWave } from "@/components/HelloWave";
|
|
348
|
+
import ParallaxScrollView from "@/components/ParallaxScrollView";
|
|
349
|
+
import { ThemedText } from "@/components/ThemedText";
|
|
350
|
+
import { ThemedView } from "@/components/ThemedView";
|
|
351
|
+
import { type FC } from "react";
|
|
352
|
+
|
|
353
|
+
const HomeScreen = (): FC => {
|
|
354
|
+
const { title, steps } = useIntlayer("home-screen");
|
|
355
|
+
|
|
356
|
+
return (
|
|
357
|
+
<ParallaxScrollView
|
|
358
|
+
headerBackgroundColor={{ light: "#A1CEDC", dark: "#1D3D47" }}
|
|
359
|
+
headerImage={
|
|
360
|
+
<Image
|
|
361
|
+
source={require("@/assets/images/partial-react-logo.png")}
|
|
362
|
+
style={styles.reactLogo}
|
|
363
|
+
/>
|
|
364
|
+
}
|
|
365
|
+
>
|
|
366
|
+
<ThemedView style={styles.titleContainer}>
|
|
367
|
+
<ThemedText type="title">{title}</ThemedText>
|
|
368
|
+
<HelloWave />
|
|
369
|
+
</ThemedView>
|
|
370
|
+
</ParallaxScrollView>
|
|
371
|
+
);
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
const styles = StyleSheet.create({
|
|
375
|
+
titleContainer: {
|
|
376
|
+
flexDirection: "row",
|
|
377
|
+
alignItems: "center",
|
|
378
|
+
gap: 8,
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
export default HomeScreen;
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
```jsx fileName="app/(tabs)/index.content.msx" codeFormat="esm"
|
|
386
|
+
import { Image, StyleSheet, Platform } from "react-native";
|
|
387
|
+
import { useIntlayer } from "react-intlayer";
|
|
388
|
+
import { HelloWave } from "@/components/HelloWave";
|
|
389
|
+
import ParallaxScrollView from "@/components/ParallaxScrollView";
|
|
390
|
+
import { ThemedText } from "@/components/ThemedText";
|
|
391
|
+
import { ThemedView } from "@/components/ThemedView";
|
|
392
|
+
|
|
393
|
+
const HomeScreen = () => {
|
|
394
|
+
const { title, steps } = useIntlayer("home-screen");
|
|
395
|
+
|
|
396
|
+
return (
|
|
397
|
+
<ParallaxScrollView
|
|
398
|
+
headerBackgroundColor={{ light: "#A1CEDC", dark: "#1D3D47" }}
|
|
399
|
+
headerImage={
|
|
400
|
+
<Image
|
|
401
|
+
source={require("@/assets/images/partial-react-logo.png")}
|
|
402
|
+
style={styles.reactLogo}
|
|
403
|
+
/>
|
|
404
|
+
}
|
|
405
|
+
>
|
|
406
|
+
<ThemedView style={styles.titleContainer}>
|
|
407
|
+
<ThemedText type="title">{title}</ThemedText>
|
|
408
|
+
<HelloWave />
|
|
409
|
+
</ThemedView>
|
|
410
|
+
</ParallaxScrollView>
|
|
411
|
+
);
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
const styles = StyleSheet.create({
|
|
415
|
+
titleContainer: {
|
|
416
|
+
flexDirection: "row",
|
|
417
|
+
alignItems: "center",
|
|
418
|
+
gap: 8,
|
|
419
|
+
},
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
export default HomeScreen;
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
```jsx fileName="app/(tabs)/index.content.csx" codeFormat="commonjs"
|
|
426
|
+
const { Image, StyleSheet, Platform } = require("react-native");
|
|
427
|
+
const { useIntlayer } = require("react-intlayer");
|
|
428
|
+
const { HelloWave } = require("@/components/HelloWave");
|
|
429
|
+
const ParallaxScrollView = require("@/components/ParallaxScrollView");
|
|
430
|
+
const { ThemedText } = require("@/components/ThemedText");
|
|
431
|
+
const { ThemedView } = require("@/components/ThemedView");
|
|
432
|
+
|
|
433
|
+
const HomeScreen = () => {
|
|
434
|
+
const { title, steps } = useIntlayer("home-screen");
|
|
435
|
+
|
|
436
|
+
return (
|
|
437
|
+
<ParallaxScrollView
|
|
438
|
+
headerBackgroundColor={{ light: "#A1CEDC", dark: "#1D3D47" }}
|
|
439
|
+
headerImage={
|
|
440
|
+
<Image
|
|
441
|
+
source={require("@/assets/images/partial-react-logo.png")}
|
|
442
|
+
style={styles.reactLogo}
|
|
443
|
+
/>
|
|
444
|
+
}
|
|
445
|
+
>
|
|
446
|
+
<ThemedView style={styles.titleContainer}>
|
|
447
|
+
<ThemedText type="title">{title}</ThemedText>
|
|
448
|
+
<HelloWave />
|
|
449
|
+
</ThemedView>
|
|
450
|
+
</ParallaxScrollView>
|
|
451
|
+
);
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
const styles = StyleSheet.create({
|
|
455
|
+
titleContainer: {
|
|
456
|
+
flexDirection: "row",
|
|
457
|
+
alignItems: "center",
|
|
458
|
+
gap: 8,
|
|
459
|
+
},
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
module.exports = HomeScreen;
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
> Saat menggunakan `content.someKey` dalam properti berbasis string (misalnya, `title` pada tombol atau `children` pada komponen `Text`), **panggil `content.someKey.value`** untuk mendapatkan string yang sebenarnya.
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## (Opsional) Langkah 5: Ubah Locale Aplikasi
|
|
470
|
+
|
|
471
|
+
Untuk mengganti locale dari dalam komponen Anda, Anda dapat menggunakan metode `setLocale` dari hook `useLocale`:
|
|
472
|
+
|
|
473
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
474
|
+
import { type FC } from "react";
|
|
475
|
+
import { View, Text, TouchableOpacity, StyleSheet } from "react-native";
|
|
476
|
+
import { getLocaleName } from "intlayer";
|
|
477
|
+
import { useLocale } from "react-intlayer";
|
|
478
|
+
|
|
479
|
+
export const LocaleSwitcher: FC = () => {
|
|
480
|
+
const { setLocale, availableLocales } = useLocale();
|
|
481
|
+
|
|
482
|
+
return (
|
|
483
|
+
<View style={styles.container}>
|
|
484
|
+
{availableLocales.map((locale) => (
|
|
485
|
+
<TouchableOpacity
|
|
486
|
+
key={locale}
|
|
487
|
+
style={styles.button}
|
|
488
|
+
onPress={() => setLocale(locale)}
|
|
489
|
+
>
|
|
490
|
+
<Text style={styles.text}>{getLocaleName(locale)}</Text>
|
|
491
|
+
</TouchableOpacity>
|
|
492
|
+
))}
|
|
493
|
+
</View>
|
|
494
|
+
);
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
const styles = StyleSheet.create({
|
|
498
|
+
container: {
|
|
499
|
+
flexDirection: "row",
|
|
500
|
+
justifyContent: "center",
|
|
501
|
+
alignItems: "center",
|
|
502
|
+
gap: 8,
|
|
503
|
+
},
|
|
504
|
+
button: {
|
|
505
|
+
paddingVertical: 6,
|
|
506
|
+
paddingHorizontal: 12,
|
|
507
|
+
borderRadius: 6,
|
|
508
|
+
backgroundColor: "#ddd",
|
|
509
|
+
},
|
|
510
|
+
text: {
|
|
511
|
+
fontSize: 14,
|
|
512
|
+
fontWeight: "500",
|
|
513
|
+
color: "#333",
|
|
514
|
+
},
|
|
515
|
+
});
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
|
|
519
|
+
import { View, Text, TouchableOpacity, StyleSheet } from "react-native";
|
|
520
|
+
import { getLocaleName } from "intlayer";
|
|
521
|
+
import { useLocale } from "react-intlayer";
|
|
522
|
+
|
|
523
|
+
export const LocaleSwitcher = () => {
|
|
524
|
+
const { setLocale, availableLocales } = useLocale();
|
|
525
|
+
|
|
526
|
+
return (
|
|
527
|
+
<View style={styles.container}>
|
|
528
|
+
{availableLocales.map((locale) => (
|
|
529
|
+
<TouchableOpacity
|
|
530
|
+
key={locale}
|
|
531
|
+
style={styles.button}
|
|
532
|
+
onPress={() => setLocale(locale)}
|
|
533
|
+
>
|
|
534
|
+
<Text style={styles.text}>{getLocaleName(locale)}</Text>
|
|
535
|
+
</TouchableOpacity>
|
|
536
|
+
))}
|
|
537
|
+
</View>
|
|
538
|
+
);
|
|
539
|
+
};
|
|
540
|
+
|
|
541
|
+
const styles = StyleSheet.create({
|
|
542
|
+
container: {
|
|
543
|
+
flexDirection: "row",
|
|
544
|
+
justifyContent: "center",
|
|
545
|
+
alignItems: "center",
|
|
546
|
+
gap: 8,
|
|
547
|
+
},
|
|
548
|
+
button: {
|
|
549
|
+
paddingVertical: 6,
|
|
550
|
+
paddingHorizontal: 12,
|
|
551
|
+
borderRadius: 6,
|
|
552
|
+
backgroundColor: "#ddd",
|
|
553
|
+
},
|
|
554
|
+
text: {
|
|
555
|
+
fontSize: 14,
|
|
556
|
+
fontWeight: "500",
|
|
557
|
+
color: "#333",
|
|
558
|
+
},
|
|
559
|
+
});
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
|
|
563
|
+
const { View, Text, TouchableOpacity, StyleSheet } = require("react-native");
|
|
564
|
+
const { getLocaleName } = require("intlayer");
|
|
565
|
+
const { useLocale } = require("react-intlayer");
|
|
566
|
+
|
|
567
|
+
const LocaleSwitcher = () => {
|
|
568
|
+
const { setLocale, availableLocales } = useLocale();
|
|
569
|
+
|
|
570
|
+
return (
|
|
571
|
+
<View style={styles.container}>
|
|
572
|
+
{availableLocales.map((locale) => (
|
|
573
|
+
<TouchableOpacity
|
|
574
|
+
key={locale}
|
|
575
|
+
style={styles.button}
|
|
576
|
+
onPress={() => setLocale(locale)}
|
|
577
|
+
>
|
|
578
|
+
<Text style={styles.text}>{getLocaleName(locale)}</Text>
|
|
579
|
+
</TouchableOpacity>
|
|
580
|
+
))}
|
|
581
|
+
</View>
|
|
582
|
+
);
|
|
583
|
+
};
|
|
584
|
+
|
|
585
|
+
const styles = StyleSheet.create({
|
|
586
|
+
container: {
|
|
587
|
+
flexDirection: "row",
|
|
588
|
+
justifyContent: "center",
|
|
589
|
+
alignItems: "center",
|
|
590
|
+
gap: 8,
|
|
591
|
+
},
|
|
592
|
+
button: {
|
|
593
|
+
paddingVertical: 6,
|
|
594
|
+
paddingHorizontal: 12,
|
|
595
|
+
borderRadius: 6,
|
|
596
|
+
backgroundColor: "#ddd",
|
|
597
|
+
},
|
|
598
|
+
text: {
|
|
599
|
+
fontSize: 14,
|
|
600
|
+
fontWeight: "500",
|
|
601
|
+
color: "#333",
|
|
602
|
+
},
|
|
603
|
+
});
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
Ini memicu re-render semua komponen yang menggunakan konten Intlayer, yang sekarang menampilkan terjemahan untuk locale baru.
|
|
607
|
+
|
|
608
|
+
> Lihat [`useLocale` docs](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/react-intlayer/useLocale.md) untuk detail lebih lanjut.
|
|
609
|
+
|
|
610
|
+
## Konfigurasi TypeScript (jika Anda menggunakan TypeScript)
|
|
611
|
+
|
|
612
|
+
Intlayer menghasilkan definisi tipe dalam folder tersembunyi (secara default `.intlayer`) untuk meningkatkan autocompletion dan menangkap kesalahan terjemahan:
|
|
613
|
+
|
|
614
|
+
```json5
|
|
615
|
+
// tsconfig.json
|
|
616
|
+
{
|
|
617
|
+
// ... konfigurasi TS Anda yang sudah ada
|
|
618
|
+
"include": [
|
|
619
|
+
"src", // kode sumber Anda
|
|
620
|
+
".intlayer/types/**/*.ts", // <-- pastikan tipe yang dihasilkan otomatis disertakan
|
|
621
|
+
// ... apapun yang sudah Anda sertakan
|
|
622
|
+
],
|
|
623
|
+
}
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
Ini yang mengaktifkan fitur seperti:
|
|
627
|
+
|
|
628
|
+
- **Autocompletion** untuk kunci kamus Anda.
|
|
629
|
+
- **Pemeriksaan tipe** yang memberi peringatan jika Anda mengakses kunci yang tidak ada atau tipe yang tidak cocok.
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
## Konfigurasi Git
|
|
634
|
+
|
|
635
|
+
Untuk menghindari commit file yang dihasilkan otomatis oleh Intlayer, tambahkan berikut ini ke `.gitignore` Anda:
|
|
636
|
+
|
|
637
|
+
```plaintext
|
|
638
|
+
# Abaikan file yang dihasilkan oleh Intlayer
|
|
639
|
+
.intlayer
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
### Ekstensi VS Code
|
|
645
|
+
|
|
646
|
+
Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal **Ekstensi VS Code Intlayer** resmi.
|
|
647
|
+
|
|
648
|
+
[Pasang dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
649
|
+
|
|
650
|
+
Ekstensi ini menyediakan:
|
|
651
|
+
|
|
652
|
+
- **Autocompletion** untuk kunci terjemahan.
|
|
653
|
+
- **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.
|
|
654
|
+
- **Pratinjau inline** dari konten terjemahan.
|
|
655
|
+
- **Tindakan cepat** untuk dengan mudah membuat dan memperbarui terjemahan.
|
|
656
|
+
|
|
657
|
+
Untuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat [dokumentasi Ekstensi VS Code Intlayer](https://intlayer.org/doc/vs-code-extension).
|
|
658
|
+
|
|
659
|
+
---
|
|
660
|
+
|
|
661
|
+
## Melangkah Lebih Jauh
|
|
662
|
+
|
|
663
|
+
- **Visual Editor**: Gunakan [Intlayer Visual Editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md) untuk mengelola terjemahan secara visual.
|
|
664
|
+
- **Integrasi CMS**: Anda juga dapat mengeksternalisasi dan mengambil konten kamus Anda dari sebuah [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md).
|
|
665
|
+
- **Perintah CLI**: Jelajahi [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_cli.md) untuk tugas seperti **mengekstrak terjemahan** atau **memeriksa kunci yang hilang**.
|
|
666
|
+
|
|
667
|
+
Nikmati membangun aplikasi **React Native** Anda dengan i18n yang sepenuhnya didukung melalui **Intlayer**!
|
|
668
|
+
|
|
669
|
+
---
|
|
670
|
+
|
|
671
|
+
### Debug
|
|
672
|
+
|
|
673
|
+
React Native bisa kurang stabil dibandingkan React Web, jadi perhatikan keselarasan versi dengan ekstra.
|
|
674
|
+
|
|
675
|
+
Intlayer terutama menargetkan Web Intl API; pada React Native Anda harus menyertakan polyfill yang sesuai.
|
|
676
|
+
|
|
677
|
+
Daftar periksa:
|
|
678
|
+
|
|
679
|
+
- Gunakan versi terbaru dari `intlayer`, `react-intlayer`, dan `react-native-intlayer`.
|
|
680
|
+
- Aktifkan polyfill Intlayer.
|
|
681
|
+
- Jika Anda menggunakan `getLocaleName` atau utilitas lain berbasis Intl-API, impor polyfill ini lebih awal (misalnya di `index.js` atau `App.tsx`):
|
|
682
|
+
|
|
683
|
+
```ts
|
|
684
|
+
import "intl";
|
|
685
|
+
import "@formatjs/intl-getcanonicallocales/polyfill";
|
|
686
|
+
import "@formatjs/intl-locale/polyfill";
|
|
687
|
+
import "@formatjs/intl-pluralrules/polyfill";
|
|
688
|
+
import "@formatjs/intl-displaynames/polyfill";
|
|
689
|
+
import "@formatjs/intl-listformat/polyfill";
|
|
690
|
+
import "@formatjs/intl-numberformat/polyfill";
|
|
691
|
+
import "@formatjs/intl-relativetimeformat/polyfill";
|
|
692
|
+
import "@formatjs/intl-datetimeformat/polyfill";
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
- Periksa konfigurasi Metro Anda (alias resolver, plugin aset, jalur `tsconfig`) jika modul gagal di-resolve.
|
|
696
|
+
|
|
697
|
+
---
|
|
698
|
+
|
|
699
|
+
---
|