@intlayer/docs 5.5.8
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/LICENSE +202 -0
- package/ar/CI_CD.md +149 -0
- package/ar/autoFill.md +157 -0
- package/ar/concept/content/file.md +1 -0
- package/ar/configuration.md +492 -0
- package/ar/dictionary/condition.md +213 -0
- package/ar/dictionary/content_extention_customization.md +81 -0
- package/ar/dictionary/enumeration.md +221 -0
- package/ar/dictionary/file.md +209 -0
- package/ar/dictionary/function_fetching.md +190 -0
- package/ar/dictionary/get_started.md +490 -0
- package/ar/dictionary/insertion.md +161 -0
- package/ar/dictionary/markdown.md +343 -0
- package/ar/dictionary/nesting.md +249 -0
- package/ar/dictionary/translation.md +307 -0
- package/ar/header.md +7 -0
- package/ar/how_works_intlayer.md +219 -0
- package/ar/index.md +125 -0
- package/ar/interest_of_intlayer.md +132 -0
- package/ar/intlayer_CMS.md +328 -0
- package/ar/intlayer_cli.md +258 -0
- package/ar/intlayer_visual_editor.md +210 -0
- package/ar/intlayer_with_angular.md +3 -0
- package/ar/intlayer_with_create_react_app.md +1196 -0
- package/ar/intlayer_with_express.md +270 -0
- package/ar/intlayer_with_lynx+react.md +482 -0
- package/ar/intlayer_with_nextjs_14.md +1260 -0
- package/ar/intlayer_with_nextjs_15.md +1311 -0
- package/ar/intlayer_with_nextjs_page_router.md +1099 -0
- package/ar/intlayer_with_react_native+expo.md +539 -0
- package/ar/intlayer_with_vite+preact.md +1679 -0
- package/ar/intlayer_with_vite+react.md +1582 -0
- package/ar/intlayer_with_vite+solid.md +3 -0
- package/ar/intlayer_with_vite+svelte.md +3 -0
- package/ar/intlayer_with_vite+vue.md +989 -0
- package/ar/introduction.md +190 -0
- package/ar/mcp_server.md +150 -0
- package/ar/packages/@intlayer/api/index.md +31 -0
- package/ar/packages/@intlayer/chokidar/index.md +31 -0
- package/ar/packages/@intlayer/cli/index.md +1 -0
- package/ar/packages/@intlayer/config/index.md +116 -0
- package/ar/packages/@intlayer/core/index.md +25 -0
- package/ar/packages/@intlayer/design-system/index.md +21 -0
- package/ar/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ar/packages/@intlayer/editor/index.md +21 -0
- package/ar/packages/@intlayer/editor-react/index.md +21 -0
- package/ar/packages/@intlayer/webpack/index.md +35 -0
- package/ar/packages/angular-intlayer/index.md +3 -0
- package/ar/packages/express-intlayer/index.md +232 -0
- package/ar/packages/express-intlayer/t.md +448 -0
- package/ar/packages/intlayer/getConfiguration.md +120 -0
- package/ar/packages/intlayer/getEnumeration.md +138 -0
- package/ar/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ar/packages/intlayer/getLocaleLang.md +61 -0
- package/ar/packages/intlayer/getLocaleName.md +93 -0
- package/ar/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ar/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ar/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ar/packages/intlayer/getTranslation.md +175 -0
- package/ar/packages/intlayer/getTranslationContent.md +175 -0
- package/ar/packages/intlayer/index.md +254 -0
- package/ar/packages/intlayer-cli/index.md +41 -0
- package/ar/packages/intlayer-editor/index.md +113 -0
- package/ar/packages/lynx-intlayer/index.md +58 -0
- package/ar/packages/next-intlayer/index.md +267 -0
- package/ar/packages/next-intlayer/t.md +341 -0
- package/ar/packages/next-intlayer/useDictionary.md +248 -0
- package/ar/packages/next-intlayer/useIntlayer.md +237 -0
- package/ar/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ar/packages/next-intlayer/useLocale.md +105 -0
- package/ar/packages/preact-intlayer/index.md +3 -0
- package/ar/packages/react-intlayer/index.md +261 -0
- package/ar/packages/react-intlayer/t.md +283 -0
- package/ar/packages/react-intlayer/useDictionary.md +268 -0
- package/ar/packages/react-intlayer/useIntlayer.md +225 -0
- package/ar/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ar/packages/react-intlayer/useLocale.md +184 -0
- package/ar/packages/react-native-intlayer/index.md +57 -0
- package/ar/packages/react-scripts-intlayer/index.md +57 -0
- package/ar/packages/solid-intlayer/index.md +3 -0
- package/ar/packages/svelte-intlayer/index.md +3 -0
- package/ar/packages/vite-intlayer/index.md +53 -0
- package/ar/packages/vue-intlayer/index.md +3 -0
- package/ar/per_locale_file.md +298 -0
- package/ar/privacy_notice.md +61 -0
- package/ar/roadmap.md +208 -0
- package/ar/terms_of_service.md +33 -0
- package/ar/vs_code_extension.md +139 -0
- package/de/CI_CD.md +149 -0
- package/de/angular-intlayer/index.md +3 -0
- package/de/autoFill.md +157 -0
- package/de/configuration.md +501 -0
- package/de/dictionary/condition.md +213 -0
- package/de/dictionary/content_extention_customization.md +81 -0
- package/de/dictionary/enumeration.md +221 -0
- package/de/dictionary/file.md +207 -0
- package/de/dictionary/function_fetching.md +190 -0
- package/de/dictionary/get_started.md +466 -0
- package/de/dictionary/insertion.md +167 -0
- package/de/dictionary/markdown.md +345 -0
- package/de/dictionary/nesting.md +252 -0
- package/de/dictionary/translation.md +287 -0
- package/de/header.md +5 -0
- package/de/how_works_intlayer.md +216 -0
- package/de/index.md +125 -0
- package/de/insertion.md +0 -0
- package/de/interest_of_intlayer.md +132 -0
- package/de/intlayer_CMS.md +334 -0
- package/de/intlayer_cli.md +274 -0
- package/de/intlayer_visual_editor.md +210 -0
- package/de/intlayer_with_angular.md +3 -0
- package/de/intlayer_with_create_react_app.md +1200 -0
- package/de/intlayer_with_express.md +268 -0
- package/de/intlayer_with_lynx+react.md +482 -0
- package/de/intlayer_with_nextjs_14.md +1258 -0
- package/de/intlayer_with_nextjs_15.md +1306 -0
- package/de/intlayer_with_nextjs_page_router.md +1087 -0
- package/de/intlayer_with_react_native+expo.md +539 -0
- package/de/intlayer_with_vite+preact.md +1701 -0
- package/de/intlayer_with_vite+react.md +1584 -0
- package/de/intlayer_with_vite+solid.md +3 -0
- package/de/intlayer_with_vite+svelte.md +3 -0
- package/de/intlayer_with_vite+vue.md +989 -0
- package/de/introduction.md +186 -0
- package/de/mcp_server.md +150 -0
- package/de/packages/@intlayer/api/index.md +31 -0
- package/de/packages/@intlayer/chokidar/index.md +31 -0
- package/de/packages/@intlayer/cli/index.md +21 -0
- package/de/packages/@intlayer/config/index.md +116 -0
- package/de/packages/@intlayer/core/index.md +25 -0
- package/de/packages/@intlayer/design-system/index.md +21 -0
- package/de/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/de/packages/@intlayer/editor/index.md +21 -0
- package/de/packages/@intlayer/editor-react/index.md +21 -0
- package/de/packages/@intlayer/webpack/index.md +35 -0
- package/de/packages/angular-intlayer/index.md +31 -0
- package/de/packages/express-intlayer/index.md +229 -0
- package/de/packages/express-intlayer/t.md +432 -0
- package/de/packages/intlayer/getConfiguration.md +120 -0
- package/de/packages/intlayer/getEnumeration.md +140 -0
- package/de/packages/intlayer/getHTMLTextDir.md +97 -0
- package/de/packages/intlayer/getLocaleLang.md +57 -0
- package/de/packages/intlayer/getLocaleName.md +93 -0
- package/de/packages/intlayer/getLocalizedUrl.md +221 -0
- package/de/packages/intlayer/getMultilingualUrls.md +198 -0
- package/de/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/de/packages/intlayer/getTranslation.md +166 -0
- package/de/packages/intlayer/getTranslationContent.md +166 -0
- package/de/packages/intlayer/index.md +478 -0
- package/de/packages/intlayer-cli/index.md +41 -0
- package/de/packages/intlayer-editor/index.md +113 -0
- package/de/packages/lynx-intlayer/index.md +58 -0
- package/de/packages/next-intlayer/index.md +263 -0
- package/de/packages/next-intlayer/t.md +325 -0
- package/de/packages/next-intlayer/useDictionary.md +242 -0
- package/de/packages/next-intlayer/useIntlayer.md +237 -0
- package/de/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/de/packages/next-intlayer/useLocale.md +105 -0
- package/de/packages/preact-intlayer/index.md +3 -0
- package/de/packages/react-intlayer/index.md +260 -0
- package/de/packages/react-intlayer/t.md +277 -0
- package/de/packages/react-intlayer/useDictionary.md +260 -0
- package/de/packages/react-intlayer/useIntlayer.md +225 -0
- package/de/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/de/packages/react-intlayer/useLocale.md +184 -0
- package/de/packages/react-native-intlayer/index.md +57 -0
- package/de/packages/react-scripts-intlayer/index.md +57 -0
- package/de/packages/solid-intlayer/index.md +3 -0
- package/de/packages/svelte-intlayer/index.md +3 -0
- package/de/packages/vite-intlayer/index.md +53 -0
- package/de/packages/vue-intlayer/index.md +3 -0
- package/de/per_locale_file.md +298 -0
- package/de/privacy_notice.md +61 -0
- package/de/roadmap.md +206 -0
- package/de/terms_of_service.md +33 -0
- package/de/vs_code_extension.md +139 -0
- package/en/CI_CD.md +149 -0
- package/en/autoFill.md +157 -0
- package/en/configuration.md +506 -0
- package/en/dictionary/condition.md +213 -0
- package/en/dictionary/content_extention_customization.md +81 -0
- package/en/dictionary/enumeration.md +221 -0
- package/en/dictionary/file.md +198 -0
- package/en/dictionary/function_fetching.md +190 -0
- package/en/dictionary/get_started.md +504 -0
- package/en/dictionary/insertion.md +167 -0
- package/en/dictionary/markdown.md +355 -0
- package/en/dictionary/nesting.md +249 -0
- package/en/dictionary/translation.md +285 -0
- package/en/frequent_questions/build_dictionaries.md +37 -0
- package/en/frequent_questions/domain_routing.md +92 -0
- package/en/frequent_questions/esbuild_error.md +9 -0
- package/en/frequent_questions/get_locale_cookie.md +121 -0
- package/en/frequent_questions/intlayer_command_undefined.md +135 -0
- package/en/frequent_questions/locale_incorect_in_url.md +52 -0
- package/en/frequent_questions/static_rendering.md +24 -0
- package/en/frequent_questions/unknown_command.md +76 -0
- package/en/header.md +5 -0
- package/en/how_works_intlayer.md +219 -0
- package/en/index.md +139 -0
- package/en/interest_of_intlayer.md +133 -0
- package/en/intlayer_CMS.md +334 -0
- package/en/intlayer_cli.md +309 -0
- package/en/intlayer_visual_editor.md +244 -0
- package/en/intlayer_with_angular.md +139 -0
- package/en/intlayer_with_create_react_app.md +1209 -0
- package/en/intlayer_with_express.md +391 -0
- package/en/intlayer_with_lynx+react.md +483 -0
- package/en/intlayer_with_nextjs_14.md +1298 -0
- package/en/intlayer_with_nextjs_15.md +1347 -0
- package/en/intlayer_with_nextjs_page_router.md +1126 -0
- package/en/intlayer_with_react_native+expo.md +630 -0
- package/en/intlayer_with_vite+preact.md +1659 -0
- package/en/intlayer_with_vite+react.md +1605 -0
- package/en/intlayer_with_vite+solid.md +254 -0
- package/en/intlayer_with_vite+svelte.md +254 -0
- package/en/intlayer_with_vite+vue.md +1000 -0
- package/en/introduction.md +185 -0
- package/en/mcp_server.md +150 -0
- package/en/packages/@intlayer/api/index.md +31 -0
- package/en/packages/@intlayer/chokidar/index.md +31 -0
- package/en/packages/@intlayer/cli/index.md +21 -0
- package/en/packages/@intlayer/config/index.md +116 -0
- package/en/packages/@intlayer/core/index.md +25 -0
- package/en/packages/@intlayer/design-system/index.md +21 -0
- package/en/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/en/packages/@intlayer/editor/index.md +21 -0
- package/en/packages/@intlayer/editor-react/index.md +21 -0
- package/en/packages/@intlayer/webpack/index.md +35 -0
- package/en/packages/angular-intlayer/index.md +31 -0
- package/en/packages/express-intlayer/index.md +229 -0
- package/en/packages/express-intlayer/t.md +432 -0
- package/en/packages/intlayer/getConfiguration.md +120 -0
- package/en/packages/intlayer/getEnumeration.md +138 -0
- package/en/packages/intlayer/getHTMLTextDir.md +97 -0
- package/en/packages/intlayer/getLocaleLang.md +57 -0
- package/en/packages/intlayer/getLocaleName.md +93 -0
- package/en/packages/intlayer/getLocalizedUrl.md +221 -0
- package/en/packages/intlayer/getMultilingualUrls.md +198 -0
- package/en/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/en/packages/intlayer/getTranslation.md +166 -0
- package/en/packages/intlayer/getTranslationContent.md +166 -0
- package/en/packages/intlayer/index.md +476 -0
- package/en/packages/intlayer-cli/index.md +41 -0
- package/en/packages/intlayer-editor/index.md +113 -0
- package/en/packages/lynx-intlayer/index.md +60 -0
- package/en/packages/next-intlayer/index.md +263 -0
- package/en/packages/next-intlayer/t.md +326 -0
- package/en/packages/next-intlayer/useDictionary.md +242 -0
- package/en/packages/next-intlayer/useIntlayer.md +237 -0
- package/en/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/en/packages/next-intlayer/useLocale.md +105 -0
- package/en/packages/preact-intlayer/index.md +31 -0
- package/en/packages/react-intlayer/index.md +257 -0
- package/en/packages/react-intlayer/t.md +277 -0
- package/en/packages/react-intlayer/useDictionary.md +260 -0
- package/en/packages/react-intlayer/useIntlayer.md +225 -0
- package/en/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/en/packages/react-intlayer/useLocale.md +184 -0
- package/en/packages/react-native-intlayer/index.md +59 -0
- package/en/packages/react-scripts-intlayer/index.md +57 -0
- package/en/packages/solid-intlayer/index.md +31 -0
- package/en/packages/svelte-intlayer/index.md +31 -0
- package/en/packages/vite-intlayer/index.md +53 -0
- package/en/packages/vue-intlayer/index.md +31 -0
- package/en/per_locale_file.md +297 -0
- package/en/privacy_notice.md +61 -0
- package/en/roadmap.md +270 -0
- package/en/t.md +163 -0
- package/en/terms_of_service.md +33 -0
- package/en/vs_code_extension.md +129 -0
- package/en-GB/CI_CD.md +149 -0
- package/en-GB/autoFill.md +0 -0
- package/en-GB/configuration.md +490 -0
- package/en-GB/dictionary/condition.md +213 -0
- package/en-GB/dictionary/content_extention_customization.md +83 -0
- package/en-GB/dictionary/enumeration.md +221 -0
- package/en-GB/dictionary/file.md +201 -0
- package/en-GB/dictionary/function_fetching.md +190 -0
- package/en-GB/dictionary/get_started.md +466 -0
- package/en-GB/dictionary/insertion.md +167 -0
- package/en-GB/dictionary/markdown.md +343 -0
- package/en-GB/dictionary/nesting.md +249 -0
- package/en-GB/dictionary/translation.md +285 -0
- package/en-GB/header.md +1 -0
- package/en-GB/how_works_intlayer.md +217 -0
- package/en-GB/index.md +142 -0
- package/en-GB/interest_of_intlayer.md +123 -0
- package/en-GB/intlayer_CMS.md +334 -0
- package/en-GB/intlayer_cli.md +239 -0
- package/en-GB/intlayer_visual_editor.md +210 -0
- package/en-GB/intlayer_with_angular.md +3 -0
- package/en-GB/intlayer_with_create_react_app.md +1192 -0
- package/en-GB/intlayer_with_express.md +267 -0
- package/en-GB/intlayer_with_lynx+react.md +484 -0
- package/en-GB/intlayer_with_nextjs_14.md +1267 -0
- package/en-GB/intlayer_with_nextjs_15.md +1308 -0
- package/en-GB/intlayer_with_nextjs_page_router.md +1087 -0
- package/en-GB/intlayer_with_react_native+expo.md +539 -0
- package/en-GB/intlayer_with_vite+preact.md +1648 -0
- package/en-GB/intlayer_with_vite+react.md +1430 -0
- package/en-GB/intlayer_with_vite+solid.md +3 -0
- package/en-GB/intlayer_with_vite+svelte.md +3 -0
- package/en-GB/intlayer_with_vite+vue.md +993 -0
- package/en-GB/introduction.md +201 -0
- package/en-GB/mcp_server.md +150 -0
- package/en-GB/packages/@intlayer/api/index.md +31 -0
- package/en-GB/packages/@intlayer/chokidar/index.md +31 -0
- package/en-GB/packages/@intlayer/cli/index.md +21 -0
- package/en-GB/packages/@intlayer/config/index.md +116 -0
- package/en-GB/packages/@intlayer/core/index.md +25 -0
- package/en-GB/packages/@intlayer/design-system/index.md +21 -0
- package/en-GB/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/en-GB/packages/@intlayer/editor/index.md +21 -0
- package/en-GB/packages/@intlayer/editor-react/index.md +21 -0
- package/en-GB/packages/@intlayer/webpack/index.md +35 -0
- package/en-GB/packages/angular-intlayer/index.md +3 -0
- package/en-GB/packages/express-intlayer/index.md +229 -0
- package/en-GB/packages/express-intlayer/t.md +432 -0
- package/en-GB/packages/intlayer/getConfiguration.md +120 -0
- package/en-GB/packages/intlayer/getEnumeration.md +140 -0
- package/en-GB/packages/intlayer/getHTMLTextDir.md +97 -0
- package/en-GB/packages/intlayer/getLocaleLang.md +57 -0
- package/en-GB/packages/intlayer/getLocaleName.md +93 -0
- package/en-GB/packages/intlayer/getLocalizedUrl.md +221 -0
- package/en-GB/packages/intlayer/getMultilingualUrls.md +198 -0
- package/en-GB/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/en-GB/packages/intlayer/getTranslation.md +166 -0
- package/en-GB/packages/intlayer/getTranslationContent.md +166 -0
- package/en-GB/packages/intlayer/index.md +476 -0
- package/en-GB/packages/intlayer-cli/index.md +41 -0
- package/en-GB/packages/intlayer-editor/index.md +113 -0
- package/en-GB/packages/lynx-intlayer/index.md +58 -0
- package/en-GB/packages/next-intlayer/index.md +263 -0
- package/en-GB/packages/next-intlayer/t.md +326 -0
- package/en-GB/packages/next-intlayer/useDictionary.md +242 -0
- package/en-GB/packages/next-intlayer/useIntlayer.md +237 -0
- package/en-GB/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/en-GB/packages/next-intlayer/useLocale.md +105 -0
- package/en-GB/packages/preact-intlayer/index.md +3 -0
- package/en-GB/packages/react-intlayer/index.md +257 -0
- package/en-GB/packages/react-intlayer/t.md +277 -0
- package/en-GB/packages/react-intlayer/useDictionary.md +260 -0
- package/en-GB/packages/react-intlayer/useIntlayer.md +225 -0
- package/en-GB/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/en-GB/packages/react-intlayer/useLocale.md +184 -0
- package/en-GB/packages/react-native-intlayer/index.md +57 -0
- package/en-GB/packages/react-scripts-intlayer/index.md +57 -0
- package/en-GB/packages/solid-intlayer/index.md +3 -0
- package/en-GB/packages/svelte-intlayer/index.md +3 -0
- package/en-GB/packages/vite-intlayer/index.md +53 -0
- package/en-GB/packages/vue-intlayer/index.md +3 -0
- package/en-GB/per_locale_file.md +298 -0
- package/en-GB/privacy_notice.md +57 -0
- package/en-GB/roadmap.md +206 -0
- package/en-GB/terms_of_service.md +33 -0
- package/en-GB/vs_code_extension.md +139 -0
- package/es/CI_CD.md +149 -0
- package/es/autoFill.md +157 -0
- package/es/configuration.md +503 -0
- package/es/dictionary/condition.md +213 -0
- package/es/dictionary/content_extention_customization.md +81 -0
- package/es/dictionary/enumeration.md +221 -0
- package/es/dictionary/file.md +206 -0
- package/es/dictionary/function_fetching.md +190 -0
- package/es/dictionary/get_started.md +466 -0
- package/es/dictionary/insertion.md +161 -0
- package/es/dictionary/markdown.md +338 -0
- package/es/dictionary/nesting.md +249 -0
- package/es/dictionary/translation.md +287 -0
- package/es/header.md +5 -0
- package/es/how_works_intlayer.md +217 -0
- package/es/index.md +122 -0
- package/es/interest_of_intlayer.md +132 -0
- package/es/intlayer_CMS.md +334 -0
- package/es/intlayer_cli.md +274 -0
- package/es/intlayer_visual_editor.md +210 -0
- package/es/intlayer_with_angular.md +3 -0
- package/es/intlayer_with_create_react_app.md +1192 -0
- package/es/intlayer_with_express.md +276 -0
- package/es/intlayer_with_lynx+react.md +475 -0
- package/es/intlayer_with_nextjs_14.md +1258 -0
- package/es/intlayer_with_nextjs_15.md +1308 -0
- package/es/intlayer_with_nextjs_page_router.md +1088 -0
- package/es/intlayer_with_react_native+expo.md +180 -0
- package/es/intlayer_with_vite+preact.md +1637 -0
- package/es/intlayer_with_vite+react.md +1592 -0
- package/es/intlayer_with_vite+solid.md +3 -0
- package/es/intlayer_with_vite+svelte.md +3 -0
- package/es/intlayer_with_vite+vue.md +947 -0
- package/es/introduction.md +184 -0
- package/es/mcp_server.md +150 -0
- package/es/packages/@intlayer/api/index.md +31 -0
- package/es/packages/@intlayer/chokidar/index.md +31 -0
- package/es/packages/@intlayer/cli/index.md +21 -0
- package/es/packages/@intlayer/config/index.md +116 -0
- package/es/packages/@intlayer/core/index.md +25 -0
- package/es/packages/@intlayer/design-system/index.md +21 -0
- package/es/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/es/packages/@intlayer/editor/index.md +21 -0
- package/es/packages/@intlayer/editor-react/index.md +21 -0
- package/es/packages/@intlayer/webpack/index.md +35 -0
- package/es/packages/angular-intlayer/index.md +3 -0
- package/es/packages/express-intlayer/index.md +229 -0
- package/es/packages/express-intlayer/t.md +432 -0
- package/es/packages/intlayer/getConfiguration.md +120 -0
- package/es/packages/intlayer/getEnumeration.md +138 -0
- package/es/packages/intlayer/getHTMLTextDir.md +97 -0
- package/es/packages/intlayer/getLocaleLang.md +57 -0
- package/es/packages/intlayer/getLocaleName.md +93 -0
- package/es/packages/intlayer/getLocalizedUrl.md +221 -0
- package/es/packages/intlayer/getMultilingualUrls.md +198 -0
- package/es/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/es/packages/intlayer/getTranslation.md +166 -0
- package/es/packages/intlayer/getTranslationContent.md +166 -0
- package/es/packages/intlayer/index.md +478 -0
- package/es/packages/intlayer-cli/index.md +41 -0
- package/es/packages/intlayer-editor/index.md +115 -0
- package/es/packages/lynx-intlayer/index.md +58 -0
- package/es/packages/next-intlayer/index.md +263 -0
- package/es/packages/next-intlayer/t.md +325 -0
- package/es/packages/next-intlayer/useDictionary.md +242 -0
- package/es/packages/next-intlayer/useIntlayer.md +237 -0
- package/es/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/es/packages/next-intlayer/useLocale.md +105 -0
- package/es/packages/preact-intlayer/index.md +3 -0
- package/es/packages/react-intlayer/index.md +263 -0
- package/es/packages/react-intlayer/t.md +277 -0
- package/es/packages/react-intlayer/useDictionary.md +270 -0
- package/es/packages/react-intlayer/useIntlayer.md +225 -0
- package/es/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/es/packages/react-intlayer/useLocale.md +184 -0
- package/es/packages/react-native-intlayer/index.md +57 -0
- package/es/packages/react-scripts-intlayer/index.md +57 -0
- package/es/packages/solid-intlayer/index.md +3 -0
- package/es/packages/svelte-intlayer/index.md +5 -0
- package/es/packages/vite-intlayer/index.md +53 -0
- package/es/packages/vue-intlayer/index.md +3 -0
- package/es/per_locale_file.md +293 -0
- package/es/privacy_notice.md +61 -0
- package/es/roadmap.md +157 -0
- package/es/terms_of_service.md +33 -0
- package/es/vs_code_extension.md +139 -0
- package/fr/CI_CD.md +149 -0
- package/fr/autoFill.md +157 -0
- package/fr/configuration.md +481 -0
- package/fr/dictionary/condition.md +213 -0
- package/fr/dictionary/content_extention_customization.md +81 -0
- package/fr/dictionary/enumeration.md +221 -0
- package/fr/dictionary/file.md +206 -0
- package/fr/dictionary/function_fetching.md +190 -0
- package/fr/dictionary/get_started.md +466 -0
- package/fr/dictionary/insertion.md +161 -0
- package/fr/dictionary/markdown.md +335 -0
- package/fr/dictionary/nesting.md +249 -0
- package/fr/dictionary/translation.md +287 -0
- package/fr/header.md +5 -0
- package/fr/how_works_intlayer.md +217 -0
- package/fr/index.md +122 -0
- package/fr/interest_of_intlayer.md +132 -0
- package/fr/intlayer_CMS.md +334 -0
- package/fr/intlayer_cli.md +274 -0
- package/fr/intlayer_visual_editor.md +210 -0
- package/fr/intlayer_with_angular.md +3 -0
- package/fr/intlayer_with_create_react_app.md +1192 -0
- package/fr/intlayer_with_express.md +270 -0
- package/fr/intlayer_with_lynx+react.md +466 -0
- package/fr/intlayer_with_nextjs_14.md +1258 -0
- package/fr/intlayer_with_nextjs_15.md +1308 -0
- package/fr/intlayer_with_nextjs_page_router.md +1085 -0
- package/fr/intlayer_with_react_native+expo.md +535 -0
- package/fr/intlayer_with_vite+preact.md +1621 -0
- package/fr/intlayer_with_vite+react.md +1589 -0
- package/fr/intlayer_with_vite+solid.md +3 -0
- package/fr/intlayer_with_vite+svelte.md +3 -0
- package/fr/intlayer_with_vite+vue.md +947 -0
- package/fr/introduction.md +190 -0
- package/fr/mcp_server.md +152 -0
- package/fr/packages/@intlayer/api/index.md +31 -0
- package/fr/packages/@intlayer/chokidar/index.md +31 -0
- package/fr/packages/@intlayer/cli/index.md +21 -0
- package/fr/packages/@intlayer/config/index.md +116 -0
- package/fr/packages/@intlayer/core/index.md +25 -0
- package/fr/packages/@intlayer/design-system/index.md +21 -0
- package/fr/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/fr/packages/@intlayer/editor/index.md +21 -0
- package/fr/packages/@intlayer/editor-react/index.md +21 -0
- package/fr/packages/@intlayer/webpack/index.md +35 -0
- package/fr/packages/angular-intlayer/index.md +3 -0
- package/fr/packages/express-intlayer/index.md +238 -0
- package/fr/packages/express-intlayer/t.md +432 -0
- package/fr/packages/intlayer/getConfiguration.md +120 -0
- package/fr/packages/intlayer/getEnumeration.md +138 -0
- package/fr/packages/intlayer/getHTMLTextDir.md +97 -0
- package/fr/packages/intlayer/getLocaleLang.md +57 -0
- package/fr/packages/intlayer/getLocaleName.md +93 -0
- package/fr/packages/intlayer/getLocalizedUrl.md +221 -0
- package/fr/packages/intlayer/getMultilingualUrls.md +198 -0
- package/fr/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/fr/packages/intlayer/getTranslation.md +166 -0
- package/fr/packages/intlayer/getTranslationContent.md +166 -0
- package/fr/packages/intlayer/index.md +476 -0
- package/fr/packages/intlayer-cli/index.md +41 -0
- package/fr/packages/intlayer-editor/index.md +115 -0
- package/fr/packages/lynx-intlayer/index.md +58 -0
- package/fr/packages/next-intlayer/index.md +266 -0
- package/fr/packages/next-intlayer/t.md +325 -0
- package/fr/packages/next-intlayer/useDictionary.md +242 -0
- package/fr/packages/next-intlayer/useIntlayer.md +237 -0
- package/fr/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/fr/packages/next-intlayer/useLocale.md +105 -0
- package/fr/packages/preact-intlayer/index.md +3 -0
- package/fr/packages/react-intlayer/index.md +257 -0
- package/fr/packages/react-intlayer/t.md +277 -0
- package/fr/packages/react-intlayer/useDictionary.md +269 -0
- package/fr/packages/react-intlayer/useIntlayer.md +234 -0
- package/fr/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/fr/packages/react-intlayer/useLocale.md +184 -0
- package/fr/packages/react-native-intlayer/index.md +57 -0
- package/fr/packages/react-scripts-intlayer/index.md +57 -0
- package/fr/packages/solid-intlayer/index.md +3 -0
- package/fr/packages/svelte-intlayer/index.md +3 -0
- package/fr/packages/vite-intlayer/index.md +53 -0
- package/fr/packages/vue-intlayer/index.md +3 -0
- package/fr/per_locale_file.md +297 -0
- package/fr/privacy_notice.md +57 -0
- package/fr/roadmap.md +206 -0
- package/fr/terms_of_service.md +33 -0
- package/fr/vs_code_extension.md +139 -0
- package/hi/CI_CD.md +149 -0
- package/hi/autoFill.md +157 -0
- package/hi/configuration.md +509 -0
- package/hi/dictionary/condition.md +213 -0
- package/hi/dictionary/content_extention_customization.md +81 -0
- package/hi/dictionary/enumeration.md +221 -0
- package/hi/dictionary/file.md +209 -0
- package/hi/dictionary/function_fetching.md +188 -0
- package/hi/dictionary/get_started.md +490 -0
- package/hi/dictionary/insertion.md +167 -0
- package/hi/dictionary/markdown.md +344 -0
- package/hi/dictionary/nesting.md +249 -0
- package/hi/dictionary/translation.md +307 -0
- package/hi/header.md +7 -0
- package/hi/how_works_intlayer.md +217 -0
- package/hi/index.md +125 -0
- package/hi/interest_of_intlayer.md +132 -0
- package/hi/intlayer_CMS.md +334 -0
- package/hi/intlayer_cli.md +274 -0
- package/hi/intlayer_visual_editor.md +210 -0
- package/hi/intlayer_with_angular.md +3 -0
- package/hi/intlayer_with_create_react_app.md +1395 -0
- package/hi/intlayer_with_express.md +273 -0
- package/hi/intlayer_with_lynx+react.md +456 -0
- package/hi/intlayer_with_nextjs_14.md +1283 -0
- package/hi/intlayer_with_nextjs_15.md +1319 -0
- package/hi/intlayer_with_nextjs_page_router.md +1097 -0
- package/hi/intlayer_with_react_native+expo.md +554 -0
- package/hi/intlayer_with_vite+preact.md +1538 -0
- package/hi/intlayer_with_vite+react.md +1540 -0
- package/hi/intlayer_with_vite+solid.md +3 -0
- package/hi/intlayer_with_vite+svelte.md +3 -0
- package/hi/intlayer_with_vite+vue.md +840 -0
- package/hi/introduction.md +190 -0
- package/hi/mcp_server.md +150 -0
- package/hi/packages/@intlayer/api/index.md +31 -0
- package/hi/packages/@intlayer/chokidar/index.md +31 -0
- package/hi/packages/@intlayer/cli/index.md +21 -0
- package/hi/packages/@intlayer/config/index.md +116 -0
- package/hi/packages/@intlayer/core/index.md +25 -0
- package/hi/packages/@intlayer/design-system/index.md +21 -0
- package/hi/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/hi/packages/@intlayer/editor/index.md +21 -0
- package/hi/packages/@intlayer/editor-react/index.md +21 -0
- package/hi/packages/@intlayer/webpack/index.md +35 -0
- package/hi/packages/angular-intlayer/index.md +3 -0
- package/hi/packages/express-intlayer/index.md +232 -0
- package/hi/packages/express-intlayer/t.md +445 -0
- package/hi/packages/intlayer/getConfiguration.md +120 -0
- package/hi/packages/intlayer/getEnumeration.md +138 -0
- package/hi/packages/intlayer/getHTMLTextDir.md +97 -0
- package/hi/packages/intlayer/getLocaleLang.md +57 -0
- package/hi/packages/intlayer/getLocaleName.md +93 -0
- package/hi/packages/intlayer/getLocalizedUrl.md +221 -0
- package/hi/packages/intlayer/getMultilingualUrls.md +198 -0
- package/hi/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/hi/packages/intlayer/getTranslation.md +175 -0
- package/hi/packages/intlayer/getTranslationContent.md +175 -0
- package/hi/packages/intlayer/index.md +314 -0
- package/hi/packages/intlayer-cli/index.md +41 -0
- package/hi/packages/intlayer-editor/index.md +113 -0
- package/hi/packages/lynx-intlayer/index.md +58 -0
- package/hi/packages/next-intlayer/index.md +270 -0
- package/hi/packages/next-intlayer/t.md +337 -0
- package/hi/packages/next-intlayer/useDictionary.md +248 -0
- package/hi/packages/next-intlayer/useIntlayer.md +237 -0
- package/hi/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/hi/packages/next-intlayer/useLocale.md +105 -0
- package/hi/packages/preact-intlayer/index.md +3 -0
- package/hi/packages/react-intlayer/index.md +261 -0
- package/hi/packages/react-intlayer/t.md +283 -0
- package/hi/packages/react-intlayer/useDictionary.md +268 -0
- package/hi/packages/react-intlayer/useIntlayer.md +225 -0
- package/hi/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/hi/packages/react-intlayer/useLocale.md +184 -0
- package/hi/packages/react-native-intlayer/index.md +57 -0
- package/hi/packages/react-scripts-intlayer/index.md +57 -0
- package/hi/packages/solid-intlayer/index.md +3 -0
- package/hi/packages/svelte-intlayer/index.md +3 -0
- package/hi/packages/vite-intlayer/index.md +53 -0
- package/hi/packages/vue-intlayer/index.md +3 -0
- package/hi/per_locale_file.md +298 -0
- package/hi/privacy_notice.md +61 -0
- package/hi/roadmap.md +206 -0
- package/hi/terms_of_service.md +33 -0
- package/hi/vs_code_extension.md +139 -0
- package/index.cjs +1265 -0
- package/index.d.ts +100 -0
- package/it/CI_CD.md +149 -0
- package/it/autoFill.md +157 -0
- package/it/configuration.md +503 -0
- package/it/dictionary/condition.md +213 -0
- package/it/dictionary/content_extention_customization.md +81 -0
- package/it/dictionary/enumeration.md +221 -0
- package/it/dictionary/file.md +207 -0
- package/it/dictionary/function_fetching.md +190 -0
- package/it/dictionary/get_started.md +466 -0
- package/it/dictionary/insertion.md +161 -0
- package/it/dictionary/markdown.md +343 -0
- package/it/dictionary/nesting.md +249 -0
- package/it/dictionary/translation.md +287 -0
- package/it/header.md +7 -0
- package/it/how_works_intlayer.md +217 -0
- package/it/index.md +125 -0
- package/it/interest_of_intlayer.md +132 -0
- package/it/intlayer_CMS.md +334 -0
- package/it/intlayer_cli.md +274 -0
- package/it/intlayer_visual_editor.md +210 -0
- package/it/intlayer_with_angular.md +3 -0
- package/it/intlayer_with_create_react_app.md +413 -0
- package/it/intlayer_with_express.md +267 -0
- package/it/intlayer_with_lynx+react.md +482 -0
- package/it/intlayer_with_nextjs_14.md +1269 -0
- package/it/intlayer_with_nextjs_15.md +1319 -0
- package/it/intlayer_with_nextjs_page_router.md +1095 -0
- package/it/intlayer_with_react_native+expo.md +261 -0
- package/it/intlayer_with_vite+preact.md +1681 -0
- package/it/intlayer_with_vite+react.md +1580 -0
- package/it/intlayer_with_vite+solid.md +3 -0
- package/it/intlayer_with_vite+svelte.md +3 -0
- package/it/intlayer_with_vite+vue.md +989 -0
- package/it/introduction.md +192 -0
- package/it/mcp_server.md +152 -0
- package/it/packages/@intlayer/api/index.md +31 -0
- package/it/packages/@intlayer/chokidar/index.md +31 -0
- package/it/packages/@intlayer/cli/index.md +21 -0
- package/it/packages/@intlayer/config/index.md +116 -0
- package/it/packages/@intlayer/core/index.md +25 -0
- package/it/packages/@intlayer/design-system/index.md +21 -0
- package/it/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/it/packages/@intlayer/editor/index.md +21 -0
- package/it/packages/@intlayer/editor-react/index.md +21 -0
- package/it/packages/@intlayer/webpack/index.md +35 -0
- package/it/packages/angular-intlayer/index.md +3 -0
- package/it/packages/express-intlayer/index.md +229 -0
- package/it/packages/express-intlayer/t.md +432 -0
- package/it/packages/intlayer/getConfiguration.md +120 -0
- package/it/packages/intlayer/getEnumeration.md +138 -0
- package/it/packages/intlayer/getHTMLTextDir.md +97 -0
- package/it/packages/intlayer/getLocaleLang.md +57 -0
- package/it/packages/intlayer/getLocaleName.md +93 -0
- package/it/packages/intlayer/getLocalizedUrl.md +221 -0
- package/it/packages/intlayer/getMultilingualUrls.md +200 -0
- package/it/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/it/packages/intlayer/getTranslation.md +166 -0
- package/it/packages/intlayer/getTranslationContent.md +166 -0
- package/it/packages/intlayer/index.md +479 -0
- package/it/packages/intlayer-cli/index.md +41 -0
- package/it/packages/intlayer-editor/index.md +113 -0
- package/it/packages/lynx-intlayer/index.md +58 -0
- package/it/packages/next-intlayer/index.md +267 -0
- package/it/packages/next-intlayer/t.md +326 -0
- package/it/packages/next-intlayer/useDictionary.md +242 -0
- package/it/packages/next-intlayer/useIntlayer.md +237 -0
- package/it/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/it/packages/next-intlayer/useLocale.md +105 -0
- package/it/packages/preact-intlayer/index.md +3 -0
- package/it/packages/react-intlayer/index.md +260 -0
- package/it/packages/react-intlayer/t.md +277 -0
- package/it/packages/react-intlayer/useDictionary.md +260 -0
- package/it/packages/react-intlayer/useIntlayer.md +225 -0
- package/it/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/it/packages/react-intlayer/useLocale.md +184 -0
- package/it/packages/react-native-intlayer/index.md +57 -0
- package/it/packages/react-scripts-intlayer/index.md +57 -0
- package/it/packages/solid-intlayer/index.md +5 -0
- package/it/packages/svelte-intlayer/index.md +3 -0
- package/it/packages/vite-intlayer/index.md +53 -0
- package/it/packages/vue-intlayer/index.md +5 -0
- package/it/per_locale_file.md +298 -0
- package/it/privacy_notice.md +61 -0
- package/it/roadmap.md +206 -0
- package/it/terms_of_service.md +33 -0
- package/it/vs_code_extension.md +139 -0
- package/ja/CI_CD.md +149 -0
- package/ja/autoFill.md +157 -0
- package/ja/configuration.md +507 -0
- package/ja/dictionary/condition.md +213 -0
- package/ja/dictionary/content_extention_customization.md +81 -0
- package/ja/dictionary/enumeration.md +221 -0
- package/ja/dictionary/file.md +209 -0
- package/ja/dictionary/function_fetching.md +190 -0
- package/ja/dictionary/get_started.md +466 -0
- package/ja/dictionary/insertion.md +161 -0
- package/ja/dictionary/markdown.md +343 -0
- package/ja/dictionary/nesting.md +249 -0
- package/ja/dictionary/translation.md +287 -0
- package/ja/header.md +7 -0
- package/ja/how_works_intlayer.md +217 -0
- package/ja/index.md +125 -0
- package/ja/interest_of_intlayer.md +132 -0
- package/ja/intlayer_CMS.md +334 -0
- package/ja/intlayer_cli.md +274 -0
- package/ja/intlayer_visual_editor.md +213 -0
- package/ja/intlayer_with_angular.md +3 -0
- package/ja/intlayer_with_create_react_app.md +1186 -0
- package/ja/intlayer_with_express.md +267 -0
- package/ja/intlayer_with_lynx+react.md +482 -0
- package/ja/intlayer_with_nextjs_14.md +1256 -0
- package/ja/intlayer_with_nextjs_15.md +1308 -0
- package/ja/intlayer_with_nextjs_page_router.md +1085 -0
- package/ja/intlayer_with_react_native+expo.md +537 -0
- package/ja/intlayer_with_vite+preact.md +1601 -0
- package/ja/intlayer_with_vite+react.md +1555 -0
- package/ja/intlayer_with_vite+solid.md +3 -0
- package/ja/intlayer_with_vite+svelte.md +3 -0
- package/ja/intlayer_with_vite+vue.md +990 -0
- package/ja/introduction.md +186 -0
- package/ja/mcp_server.md +150 -0
- package/ja/packages/@intlayer/api/index.md +31 -0
- package/ja/packages/@intlayer/chokidar/index.md +31 -0
- package/ja/packages/@intlayer/cli/index.md +21 -0
- package/ja/packages/@intlayer/config/index.md +116 -0
- package/ja/packages/@intlayer/core/index.md +25 -0
- package/ja/packages/@intlayer/design-system/index.md +21 -0
- package/ja/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ja/packages/@intlayer/editor/index.md +21 -0
- package/ja/packages/@intlayer/editor-react/index.md +21 -0
- package/ja/packages/@intlayer/webpack/index.md +35 -0
- package/ja/packages/angular-intlayer/index.md +3 -0
- package/ja/packages/express-intlayer/index.md +229 -0
- package/ja/packages/express-intlayer/t.md +432 -0
- package/ja/packages/intlayer/getConfiguration.md +120 -0
- package/ja/packages/intlayer/getEnumeration.md +140 -0
- package/ja/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ja/packages/intlayer/getLocaleLang.md +59 -0
- package/ja/packages/intlayer/getLocaleName.md +93 -0
- package/ja/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ja/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ja/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ja/packages/intlayer/getTranslation.md +166 -0
- package/ja/packages/intlayer/getTranslationContent.md +166 -0
- package/ja/packages/intlayer/index.md +479 -0
- package/ja/packages/intlayer-cli/index.md +41 -0
- package/ja/packages/intlayer-editor/index.md +115 -0
- package/ja/packages/lynx-intlayer/index.md +58 -0
- package/ja/packages/next-intlayer/index.md +263 -0
- package/ja/packages/next-intlayer/t.md +326 -0
- package/ja/packages/next-intlayer/useDictionary.md +242 -0
- package/ja/packages/next-intlayer/useIntlayer.md +237 -0
- package/ja/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ja/packages/next-intlayer/useLocale.md +105 -0
- package/ja/packages/preact-intlayer/index.md +3 -0
- package/ja/packages/react-intlayer/index.md +257 -0
- package/ja/packages/react-intlayer/t.md +277 -0
- package/ja/packages/react-intlayer/useDictionary.md +260 -0
- package/ja/packages/react-intlayer/useIntlayer.md +225 -0
- package/ja/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ja/packages/react-intlayer/useLocale.md +184 -0
- package/ja/packages/react-native-intlayer/index.md +57 -0
- package/ja/packages/react-scripts-intlayer/index.md +57 -0
- package/ja/packages/solid-intlayer/index.md +3 -0
- package/ja/packages/svelte-intlayer/index.md +3 -0
- package/ja/packages/vite-intlayer/index.md +53 -0
- package/ja/packages/vue-intlayer/index.md +3 -0
- package/ja/per_locale_file.md +298 -0
- package/ja/privacy_notice.md +57 -0
- package/ja/roadmap.md +206 -0
- package/ja/terms_of_service.md +33 -0
- package/ja/vs_code_extension.md +139 -0
- package/ko/CI_CD.md +149 -0
- package/ko/autoFill.md +157 -0
- package/ko/configuration.md +507 -0
- package/ko/dictionary/condition.md +213 -0
- package/ko/dictionary/content_extention_customization.md +81 -0
- package/ko/dictionary/enumeration.md +221 -0
- package/ko/dictionary/file.md +207 -0
- package/ko/dictionary/function_fetching.md +190 -0
- package/ko/dictionary/get_started.md +466 -0
- package/ko/dictionary/insertion.md +167 -0
- package/ko/dictionary/markdown.md +343 -0
- package/ko/dictionary/nesting.md +249 -0
- package/ko/dictionary/translation.md +287 -0
- package/ko/header.md +7 -0
- package/ko/how_works_intlayer.md +216 -0
- package/ko/index.md +125 -0
- package/ko/interest_of_intlayer.md +132 -0
- package/ko/intlayer_CMS.md +334 -0
- package/ko/intlayer_cli.md +274 -0
- package/ko/intlayer_visual_editor.md +210 -0
- package/ko/intlayer_with_angular.md +3 -0
- package/ko/intlayer_with_create_react_app.md +1186 -0
- package/ko/intlayer_with_express.md +267 -0
- package/ko/intlayer_with_lynx+react.md +482 -0
- package/ko/intlayer_with_nextjs_14.md +1267 -0
- package/ko/intlayer_with_nextjs_15.md +1319 -0
- package/ko/intlayer_with_nextjs_page_router.md +1097 -0
- package/ko/intlayer_with_react_native+expo.md +537 -0
- package/ko/intlayer_with_vite+preact.md +1682 -0
- package/ko/intlayer_with_vite+react.md +1582 -0
- package/ko/intlayer_with_vite+solid.md +3 -0
- package/ko/intlayer_with_vite+svelte.md +3 -0
- package/ko/intlayer_with_vite+vue.md +988 -0
- package/ko/introduction.md +186 -0
- package/ko/mcp_server.md +150 -0
- package/ko/packages/@intlayer/api/index.md +31 -0
- package/ko/packages/@intlayer/chokidar/index.md +31 -0
- package/ko/packages/@intlayer/cli/index.md +21 -0
- package/ko/packages/@intlayer/config/index.md +116 -0
- package/ko/packages/@intlayer/core/index.md +25 -0
- package/ko/packages/@intlayer/design-system/index.md +21 -0
- package/ko/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ko/packages/@intlayer/editor/index.md +21 -0
- package/ko/packages/@intlayer/editor-react/index.md +21 -0
- package/ko/packages/@intlayer/webpack/index.md +35 -0
- package/ko/packages/angular-intlayer/index.md +5 -0
- package/ko/packages/express-intlayer/index.md +229 -0
- package/ko/packages/express-intlayer/t.md +432 -0
- package/ko/packages/intlayer/getConfiguration.md +120 -0
- package/ko/packages/intlayer/getEnumeration.md +138 -0
- package/ko/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ko/packages/intlayer/getLocaleLang.md +57 -0
- package/ko/packages/intlayer/getLocaleName.md +93 -0
- package/ko/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ko/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ko/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ko/packages/intlayer/getTranslation.md +166 -0
- package/ko/packages/intlayer/getTranslationContent.md +166 -0
- package/ko/packages/intlayer/index.md +480 -0
- package/ko/packages/intlayer-cli/index.md +41 -0
- package/ko/packages/intlayer-editor/index.md +113 -0
- package/ko/packages/lynx-intlayer/index.md +58 -0
- package/ko/packages/next-intlayer/index.md +267 -0
- package/ko/packages/next-intlayer/t.md +337 -0
- package/ko/packages/next-intlayer/useDictionary.md +242 -0
- package/ko/packages/next-intlayer/useIntlayer.md +237 -0
- package/ko/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ko/packages/next-intlayer/useLocale.md +105 -0
- package/ko/packages/preact-intlayer/index.md +3 -0
- package/ko/packages/react-intlayer/index.md +260 -0
- package/ko/packages/react-intlayer/t.md +277 -0
- package/ko/packages/react-intlayer/useDictionary.md +268 -0
- package/ko/packages/react-intlayer/useIntlayer.md +225 -0
- package/ko/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ko/packages/react-intlayer/useLocale.md +184 -0
- package/ko/packages/react-native-intlayer/index.md +57 -0
- package/ko/packages/react-scripts-intlayer/index.md +57 -0
- package/ko/packages/solid-intlayer/index.md +3 -0
- package/ko/packages/svelte-intlayer/index.md +3 -0
- package/ko/packages/vite-intlayer/index.md +53 -0
- package/ko/packages/vue-intlayer/index.md +3 -0
- package/ko/per_locale_file.md +300 -0
- package/ko/privacy_notice.md +61 -0
- package/ko/roadmap.md +206 -0
- package/ko/terms_of_service.md +33 -0
- package/ko/vs_code_extension.md +139 -0
- package/package.json +96 -0
- package/pt/CI_CD.md +149 -0
- package/pt/autoFill.md +157 -0
- package/pt/configuration.md +503 -0
- package/pt/dictionary/condition.md +213 -0
- package/pt/dictionary/content_extention_customization.md +81 -0
- package/pt/dictionary/enumeration.md +221 -0
- package/pt/dictionary/file.md +210 -0
- package/pt/dictionary/function_fetching.md +190 -0
- package/pt/dictionary/get_started.md +490 -0
- package/pt/dictionary/insertion.md +161 -0
- package/pt/dictionary/markdown.md +339 -0
- package/pt/dictionary/nesting.md +249 -0
- package/pt/dictionary/translation.md +322 -0
- package/pt/header.md +7 -0
- package/pt/how_works_intlayer.md +216 -0
- package/pt/index.md +125 -0
- package/pt/interest_of_intlayer.md +132 -0
- package/pt/intlayer_CMS.md +334 -0
- package/pt/intlayer_cli.md +274 -0
- package/pt/intlayer_visual_editor.md +210 -0
- package/pt/intlayer_with_angular.md +3 -0
- package/pt/intlayer_with_create_react_app.md +1204 -0
- package/pt/intlayer_with_express.md +270 -0
- package/pt/intlayer_with_lynx+react.md +467 -0
- package/pt/intlayer_with_nextjs_14.md +1269 -0
- package/pt/intlayer_with_nextjs_15.md +1319 -0
- package/pt/intlayer_with_nextjs_page_router.md +1109 -0
- package/pt/intlayer_with_react_native+expo.md +259 -0
- package/pt/intlayer_with_vite+preact.md +1663 -0
- package/pt/intlayer_with_vite+react.md +1621 -0
- package/pt/intlayer_with_vite+solid.md +3 -0
- package/pt/intlayer_with_vite+svelte.md +3 -0
- package/pt/intlayer_with_vite+vue.md +989 -0
- package/pt/introduction.md +193 -0
- package/pt/mcp_server.md +150 -0
- package/pt/packages/@intlayer/api/index.md +31 -0
- package/pt/packages/@intlayer/chokidar/index.md +31 -0
- package/pt/packages/@intlayer/cli/index.md +21 -0
- package/pt/packages/@intlayer/config/index.md +116 -0
- package/pt/packages/@intlayer/core/index.md +25 -0
- package/pt/packages/@intlayer/design-system/index.md +21 -0
- package/pt/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/pt/packages/@intlayer/editor/index.md +21 -0
- package/pt/packages/@intlayer/editor-react/index.md +21 -0
- package/pt/packages/@intlayer/webpack/index.md +35 -0
- package/pt/packages/angular-intlayer/index.md +3 -0
- package/pt/packages/express-intlayer/index.md +232 -0
- package/pt/packages/express-intlayer/t.md +267 -0
- package/pt/packages/intlayer/getConfiguration.md +120 -0
- package/pt/packages/intlayer/getEnumeration.md +138 -0
- package/pt/packages/intlayer/getHTMLTextDir.md +97 -0
- package/pt/packages/intlayer/getLocaleLang.md +57 -0
- package/pt/packages/intlayer/getLocaleName.md +93 -0
- package/pt/packages/intlayer/getLocalizedUrl.md +221 -0
- package/pt/packages/intlayer/getMultilingualUrls.md +198 -0
- package/pt/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/pt/packages/intlayer/getTranslation.md +175 -0
- package/pt/packages/intlayer/getTranslationContent.md +177 -0
- package/pt/packages/intlayer/index.md +484 -0
- package/pt/packages/intlayer-cli/index.md +41 -0
- package/pt/packages/intlayer-editor/index.md +113 -0
- package/pt/packages/lynx-intlayer/index.md +58 -0
- package/pt/packages/next-intlayer/index.md +270 -0
- package/pt/packages/next-intlayer/t.md +341 -0
- package/pt/packages/next-intlayer/useDictionary.md +248 -0
- package/pt/packages/next-intlayer/useIntlayer.md +237 -0
- package/pt/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/pt/packages/next-intlayer/useLocale.md +105 -0
- package/pt/packages/preact-intlayer/index.md +3 -0
- package/pt/packages/react-intlayer/index.md +261 -0
- package/pt/packages/react-intlayer/t.md +289 -0
- package/pt/packages/react-intlayer/useDictionary.md +268 -0
- package/pt/packages/react-intlayer/useIntlayer.md +225 -0
- package/pt/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/pt/packages/react-intlayer/useLocale.md +184 -0
- package/pt/packages/react-native-intlayer/index.md +57 -0
- package/pt/packages/react-scripts-intlayer/index.md +57 -0
- package/pt/packages/solid-intlayer/index.md +3 -0
- package/pt/packages/svelte-intlayer/index.md +3 -0
- package/pt/packages/vite-intlayer/index.md +53 -0
- package/pt/packages/vue-intlayer/index.md +3 -0
- package/pt/per_locale_file.md +298 -0
- package/pt/privacy_notice.md +61 -0
- package/pt/roadmap.md +206 -0
- package/pt/terms_of_service.md +33 -0
- package/pt/vs_code_extension.md +139 -0
- package/ru/CI_CD.md +149 -0
- package/ru/autoFill.md +157 -0
- package/ru/configuration.md +507 -0
- package/ru/dictionary/condition.md +213 -0
- package/ru/dictionary/content_extention_customization.md +81 -0
- package/ru/dictionary/enumeration.md +221 -0
- package/ru/dictionary/file.md +209 -0
- package/ru/dictionary/function_fetching.md +188 -0
- package/ru/dictionary/get_started.md +311 -0
- package/ru/dictionary/insertion.md +161 -0
- package/ru/dictionary/markdown.md +339 -0
- package/ru/dictionary/nesting.md +249 -0
- package/ru/dictionary/translation.md +322 -0
- package/ru/environment/angular.md +3 -0
- package/ru/header.md +7 -0
- package/ru/how_works_intlayer.md +217 -0
- package/ru/index.md +125 -0
- package/ru/interest_of_intlayer.md +132 -0
- package/ru/intlayer_CMS.md +334 -0
- package/ru/intlayer_cli.md +274 -0
- package/ru/intlayer_visual_editor.md +210 -0
- package/ru/intlayer_with_angular.md +3 -0
- package/ru/intlayer_with_create_react_app.md +1196 -0
- package/ru/intlayer_with_express.md +273 -0
- package/ru/intlayer_with_lynx+react.md +482 -0
- package/ru/intlayer_with_nextjs_14.md +1274 -0
- package/ru/intlayer_with_nextjs_15.md +1318 -0
- package/ru/intlayer_with_nextjs_page_router.md +1100 -0
- package/ru/intlayer_with_react_native+expo.md +537 -0
- package/ru/intlayer_with_vite+preact.md +1663 -0
- package/ru/intlayer_with_vite+react.md +1546 -0
- package/ru/intlayer_with_vite+solid.md +3 -0
- package/ru/intlayer_with_vite+svelte.md +3 -0
- package/ru/intlayer_with_vite+vue.md +987 -0
- package/ru/introduction.md +190 -0
- package/ru/mcp_server.md +152 -0
- package/ru/packages/@intlayer/api/index.md +31 -0
- package/ru/packages/@intlayer/chokidar/index.md +31 -0
- package/ru/packages/@intlayer/cli/index.md +23 -0
- package/ru/packages/@intlayer/config/index.md +116 -0
- package/ru/packages/@intlayer/core/index.md +25 -0
- package/ru/packages/@intlayer/design-system/index.md +21 -0
- package/ru/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ru/packages/@intlayer/editor/index.md +21 -0
- package/ru/packages/@intlayer/editor-react/index.md +21 -0
- package/ru/packages/@intlayer/webpack/index.md +35 -0
- package/ru/packages/angular-intlayer/index.md +3 -0
- package/ru/packages/express-intlayer/index.md +235 -0
- package/ru/packages/express-intlayer/t.md +445 -0
- package/ru/packages/intlayer/getConfiguration.md +120 -0
- package/ru/packages/intlayer/getEnumeration.md +140 -0
- package/ru/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ru/packages/intlayer/getLocaleLang.md +59 -0
- package/ru/packages/intlayer/getLocaleName.md +93 -0
- package/ru/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ru/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ru/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ru/packages/intlayer/getTranslation.md +177 -0
- package/ru/packages/intlayer/getTranslationContent.md +175 -0
- package/ru/packages/intlayer/index.md +275 -0
- package/ru/packages/intlayer-cli/index.md +41 -0
- package/ru/packages/intlayer-editor/index.md +115 -0
- package/ru/packages/lynx-intlayer/index.md +58 -0
- package/ru/packages/next-intlayer/index.md +267 -0
- package/ru/packages/next-intlayer/t.md +340 -0
- package/ru/packages/next-intlayer/useDictionary.md +248 -0
- package/ru/packages/next-intlayer/useIntlayer.md +237 -0
- package/ru/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ru/packages/next-intlayer/useLocale.md +105 -0
- package/ru/packages/preact-intlayer/index.md +3 -0
- package/ru/packages/react-intlayer/index.md +261 -0
- package/ru/packages/react-intlayer/t.md +289 -0
- package/ru/packages/react-intlayer/useDictionary.md +268 -0
- package/ru/packages/react-intlayer/useIntlayer.md +225 -0
- package/ru/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ru/packages/react-intlayer/useLocale.md +184 -0
- package/ru/packages/react-native-intlayer/index.md +57 -0
- package/ru/packages/react-scripts-intlayer/index.md +57 -0
- package/ru/packages/solid-intlayer/index.md +3 -0
- package/ru/packages/svelte-intlayer/index.md +3 -0
- package/ru/packages/vite-intlayer/index.md +53 -0
- package/ru/packages/vue-intlayer/index.md +3 -0
- package/ru/per_locale_file.md +298 -0
- package/ru/privacy_notice.md +61 -0
- package/ru/roadmap.md +206 -0
- package/ru/terms_of_service.md +33 -0
- package/ru/vs_code_extension.md +139 -0
- package/zh/CI_CD.md +149 -0
- package/zh/autoFill.md +157 -0
- package/zh/configuration.md +484 -0
- package/zh/dictionary/condition.md +213 -0
- package/zh/dictionary/content_extention_customization.md +81 -0
- package/zh/dictionary/enumeration.md +221 -0
- package/zh/dictionary/file.md +209 -0
- package/zh/dictionary/function_fetching.md +188 -0
- package/zh/dictionary/get_started.md +490 -0
- package/zh/dictionary/insertion.md +161 -0
- package/zh/dictionary/markdown.md +342 -0
- package/zh/dictionary/nesting.md +249 -0
- package/zh/dictionary/translation.md +287 -0
- package/zh/header.md +7 -0
- package/zh/how_works_intlayer.md +217 -0
- package/zh/index.md +125 -0
- package/zh/interest_of_intlayer.md +132 -0
- package/zh/intlayer_CMS.md +334 -0
- package/zh/intlayer_cli.md +274 -0
- package/zh/intlayer_visual_editor.md +210 -0
- package/zh/intlayer_with_angular.md +3 -0
- package/zh/intlayer_with_create_react_app.md +1196 -0
- package/zh/intlayer_with_express.md +267 -0
- package/zh/intlayer_with_lynx+react.md +484 -0
- package/zh/intlayer_with_nextjs_14.md +1286 -0
- package/zh/intlayer_with_nextjs_15.md +1322 -0
- package/zh/intlayer_with_nextjs_page_router.md +1097 -0
- package/zh/intlayer_with_react_native+expo.md +539 -0
- package/zh/intlayer_with_vite+preact.md +1681 -0
- package/zh/intlayer_with_vite+react.md +1577 -0
- package/zh/intlayer_with_vite+solid.md +3 -0
- package/zh/intlayer_with_vite+svelte.md +3 -0
- package/zh/intlayer_with_vite+vue.md +988 -0
- package/zh/introduction.md +186 -0
- package/zh/mcp_server.md +152 -0
- package/zh/packages/@intlayer/api/index.md +31 -0
- package/zh/packages/@intlayer/chokidar/index.md +31 -0
- package/zh/packages/@intlayer/cli/index.md +21 -0
- package/zh/packages/@intlayer/config/index.md +116 -0
- package/zh/packages/@intlayer/core/index.md +25 -0
- package/zh/packages/@intlayer/design-system/index.md +21 -0
- package/zh/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/zh/packages/@intlayer/editor/index.md +21 -0
- package/zh/packages/@intlayer/editor-react/index.md +21 -0
- package/zh/packages/@intlayer/webpack/index.md +35 -0
- package/zh/packages/angular-intlayer/index.md +3 -0
- package/zh/packages/express-intlayer/index.md +229 -0
- package/zh/packages/express-intlayer/t.md +432 -0
- package/zh/packages/intlayer/getConfiguration.md +120 -0
- package/zh/packages/intlayer/getEnumeration.md +140 -0
- package/zh/packages/intlayer/getHTMLTextDir.md +97 -0
- package/zh/packages/intlayer/getLocaleLang.md +57 -0
- package/zh/packages/intlayer/getLocaleName.md +93 -0
- package/zh/packages/intlayer/getLocalizedUrl.md +221 -0
- package/zh/packages/intlayer/getMultilingualUrls.md +198 -0
- package/zh/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/zh/packages/intlayer/getTranslation.md +166 -0
- package/zh/packages/intlayer/getTranslationContent.md +166 -0
- package/zh/packages/intlayer/index.md +360 -0
- package/zh/packages/intlayer-cli/index.md +41 -0
- package/zh/packages/intlayer-editor/index.md +113 -0
- package/zh/packages/lynx-intlayer/index.md +60 -0
- package/zh/packages/next-intlayer/index.md +267 -0
- package/zh/packages/next-intlayer/t.md +338 -0
- package/zh/packages/next-intlayer/useDictionary.md +242 -0
- package/zh/packages/next-intlayer/useIntlayer.md +237 -0
- package/zh/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/zh/packages/next-intlayer/useLocale.md +105 -0
- package/zh/packages/preact-intlayer/index.md +3 -0
- package/zh/packages/react-intlayer/index.md +257 -0
- package/zh/packages/react-intlayer/t.md +271 -0
- package/zh/packages/react-intlayer/useDictionary.md +260 -0
- package/zh/packages/react-intlayer/useIntlayer.md +225 -0
- package/zh/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/zh/packages/react-intlayer/useLocale.md +184 -0
- package/zh/packages/react-native-intlayer/index.md +57 -0
- package/zh/packages/react-scripts-intlayer/index.md +57 -0
- package/zh/packages/solid-intlayer/index.md +3 -0
- package/zh/packages/svelte-intlayer/index.md +3 -0
- package/zh/packages/vite-intlayer/index.md +53 -0
- package/zh/packages/vue-intlayer/index.md +3 -0
- package/zh/per_locale_file.md +298 -0
- package/zh/privacy_notice.md +61 -0
- package/zh/roadmap.md +206 -0
- package/zh/terms_of_service.md +33 -0
- package/zh/vs_code_extension.md +139 -0
|
@@ -0,0 +1,1204 @@
|
|
|
1
|
+
# Introdução à Internacionalização (i18n) com Intlayer e React Create App
|
|
2
|
+
|
|
3
|
+
Consulte [Application Template](https://github.com/aymericzip/intlayer-react-cra-template) no GitHub.
|
|
4
|
+
|
|
5
|
+
## O que é Intlayer?
|
|
6
|
+
|
|
7
|
+
**Intlayer** é uma biblioteca de internacionalização (i18n) inovadora e de código aberto, projetada para simplificar o suporte multilíngue em aplicações web modernas.
|
|
8
|
+
|
|
9
|
+
Com o Intlayer, você pode:
|
|
10
|
+
|
|
11
|
+
- **Gerenciar traduções facilmente** usando dicionários declarativos no nível do componente.
|
|
12
|
+
- **Localizar dinamicamente metadados**, rotas e conteúdo.
|
|
13
|
+
- **Garantir suporte ao TypeScript** com tipos autogerados, melhorando a autocompletação e a detecção de erros.
|
|
14
|
+
- **Aproveitar recursos avançados**, como detecção dinâmica de localidade e troca de idiomas.
|
|
15
|
+
|
|
16
|
+
## Guia Passo a Passo para Configurar o Intlayer em uma Aplicação React
|
|
17
|
+
|
|
18
|
+
### Passo 1: Instalar Dependências
|
|
19
|
+
|
|
20
|
+
Instale os pacotes necessários usando npm:
|
|
21
|
+
|
|
22
|
+
```bash packageManager="npm"
|
|
23
|
+
npm install intlayer react-intlayer react-scripts-intlayer
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```bash packageManager="pnpm"
|
|
27
|
+
pnpm add intlayer react-intlayer react-scripts-intlayer
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```bash packageManager="yarn"
|
|
31
|
+
yarn add intlayer react-intlayer react-scripts-intlayer
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **intlayer**
|
|
35
|
+
|
|
36
|
+
O pacote principal que fornece ferramentas de internacionalização para gerenciamento de configuração, tradução, [declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/pt/dictionary/get_started.md), transpilação e [comandos CLI](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_cli.md).
|
|
37
|
+
|
|
38
|
+
- **react-intlayer**
|
|
39
|
+
|
|
40
|
+
O pacote que integra o Intlayer com a aplicação React. Ele fornece provedores de contexto e hooks para internacionalização no React.
|
|
41
|
+
|
|
42
|
+
- **react-scripts-intlayer**
|
|
43
|
+
|
|
44
|
+
Inclui os comandos e plugins `react-scripts-intlayer` para integrar o Intlayer com a aplicação baseada no Create React App. Esses plugins são baseados no [craco](https://craco.js.org/) e incluem configuração adicional para o empacotador [Webpack](https://webpack.js.org/).
|
|
45
|
+
|
|
46
|
+
### Passo 2: Configuração do seu projeto
|
|
47
|
+
|
|
48
|
+
Crie um arquivo de configuração para configurar os idiomas da sua aplicação:
|
|
49
|
+
|
|
50
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
51
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
52
|
+
|
|
53
|
+
const config: IntlayerConfig = {
|
|
54
|
+
internationalization: {
|
|
55
|
+
locales: [
|
|
56
|
+
Locales.ENGLISH,
|
|
57
|
+
Locales.FRENCH,
|
|
58
|
+
Locales.SPANISH,
|
|
59
|
+
// Seus outros idiomas
|
|
60
|
+
],
|
|
61
|
+
defaultLocale: Locales.ENGLISH,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default config;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
69
|
+
import { Locales } from "intlayer";
|
|
70
|
+
|
|
71
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
72
|
+
const config = {
|
|
73
|
+
internationalization: {
|
|
74
|
+
locales: [
|
|
75
|
+
Locales.ENGLISH,
|
|
76
|
+
Locales.FRENCH,
|
|
77
|
+
Locales.SPANISH,
|
|
78
|
+
// Seus outros idiomas
|
|
79
|
+
],
|
|
80
|
+
defaultLocale: Locales.ENGLISH,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default config;
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
88
|
+
const { Locales } = require("intlayer");
|
|
89
|
+
|
|
90
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
91
|
+
const config = {
|
|
92
|
+
internationalization: {
|
|
93
|
+
locales: [
|
|
94
|
+
Locales.ENGLISH,
|
|
95
|
+
Locales.FRENCH,
|
|
96
|
+
Locales.SPANISH,
|
|
97
|
+
// Seus outros idiomas
|
|
98
|
+
],
|
|
99
|
+
defaultLocale: Locales.ENGLISH,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
module.exports = config;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> Por meio deste arquivo de configuração, você pode configurar URLs localizados, redirecionamento de middleware, nomes de cookies, a localização e extensão de suas declarações de conteúdo, desativar logs do Intlayer no console e muito mais. Para uma lista completa de parâmetros disponíveis, consulte a [documentação de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/pt/configuration.md).
|
|
107
|
+
|
|
108
|
+
### Passo 3: Integrar o Intlayer na Configuração do CRA
|
|
109
|
+
|
|
110
|
+
Altere seus scripts para usar o react-intlayer
|
|
111
|
+
|
|
112
|
+
```json fileName="package.json"
|
|
113
|
+
"scripts": {
|
|
114
|
+
"build": "react-scripts-intlayer build",
|
|
115
|
+
"start": "react-scripts-intlayer start",
|
|
116
|
+
"transpile": "intlayer build"
|
|
117
|
+
},
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> Os scripts `react-scripts-intlayer` são baseados no [CRACO](https://craco.js.org/). Você também pode implementar sua própria configuração baseada no plugin craco do intlayer. [Veja o exemplo aqui](https://github.com/aymericzip/intlayer/blob/main/examples/react-app/craco.config.js).
|
|
121
|
+
|
|
122
|
+
### Passo 4: Declarar Seu Conteúdo
|
|
123
|
+
|
|
124
|
+
Crie e gerencie suas declarações de conteúdo para armazenar traduções:
|
|
125
|
+
|
|
126
|
+
```tsx fileName="src/app.content.tsx" codeFormat="typescript"
|
|
127
|
+
import { t, type Dictionary } from "intlayer";
|
|
128
|
+
import React, { type ReactNode } from "react";
|
|
129
|
+
|
|
130
|
+
const appContent = {
|
|
131
|
+
key: "app",
|
|
132
|
+
content: {
|
|
133
|
+
getStarted: t<ReactNode>({
|
|
134
|
+
en: (
|
|
135
|
+
<>
|
|
136
|
+
Edit <code>src/App.tsx</code> and save to reload
|
|
137
|
+
</>
|
|
138
|
+
),
|
|
139
|
+
fr: (
|
|
140
|
+
<>
|
|
141
|
+
Éditez <code>src/App.tsx</code> et enregistrez pour recharger
|
|
142
|
+
</>
|
|
143
|
+
),
|
|
144
|
+
es: (
|
|
145
|
+
<>
|
|
146
|
+
Edita <code>src/App.tsx</code> y guarda para recargar
|
|
147
|
+
</>
|
|
148
|
+
),
|
|
149
|
+
pt: (
|
|
150
|
+
<>
|
|
151
|
+
Edite <code>src/App.tsx</code> e salve para recarregar
|
|
152
|
+
</>
|
|
153
|
+
),
|
|
154
|
+
}),
|
|
155
|
+
reactLink: {
|
|
156
|
+
href: "https://reactjs.org",
|
|
157
|
+
content: t({
|
|
158
|
+
en: "Learn React",
|
|
159
|
+
fr: "Apprendre React",
|
|
160
|
+
es: "Aprender React",
|
|
161
|
+
pt: "Aprenda React",
|
|
162
|
+
}),
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
} satisfies Dictionary;
|
|
166
|
+
|
|
167
|
+
export default appContent;
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```jsx fileName="src/app.content.mjx" codeFormat="esm"
|
|
171
|
+
import { t } from "intlayer";
|
|
172
|
+
|
|
173
|
+
/** @type {import('intlayer').Dictionary} */
|
|
174
|
+
const appContent = {
|
|
175
|
+
key: "app",
|
|
176
|
+
content: {
|
|
177
|
+
getStarted: t({
|
|
178
|
+
en: "Get started by editing",
|
|
179
|
+
fr: "Commencez par éditer",
|
|
180
|
+
es: "Comience por editar",
|
|
181
|
+
pt: "Comece editando",
|
|
182
|
+
}),
|
|
183
|
+
reactLink: {
|
|
184
|
+
href: "https://reactjs.org",
|
|
185
|
+
content: t({
|
|
186
|
+
en: "Learn React",
|
|
187
|
+
fr: "Apprendre React",
|
|
188
|
+
es: "Aprender React",
|
|
189
|
+
pt: "Aprenda React",
|
|
190
|
+
}),
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
export default appContent;
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
```jsx fileName="src/app.content.csx" codeFormat="commonjs"
|
|
199
|
+
const { t } = require("intlayer");
|
|
200
|
+
|
|
201
|
+
/** @type {import('intlayer').Dictionary} */
|
|
202
|
+
const appContent = {
|
|
203
|
+
key: "app",
|
|
204
|
+
content: {
|
|
205
|
+
getStarted: t({
|
|
206
|
+
en: "Get started by editing",
|
|
207
|
+
fr: "Commencez par éditer",
|
|
208
|
+
es: "Comience por editar",
|
|
209
|
+
pt: "Comece editando",
|
|
210
|
+
}),
|
|
211
|
+
reactLink: {
|
|
212
|
+
href: "https://reactjs.org",
|
|
213
|
+
content: t({
|
|
214
|
+
en: "Learn React",
|
|
215
|
+
fr: "Apprendre React",
|
|
216
|
+
es: "Aprender React",
|
|
217
|
+
pt: "Aprenda React",
|
|
218
|
+
}),
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
module.exports = appContent;
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
> Suas declarações de conteúdo podem ser definidas em qualquer lugar da sua aplicação, desde que estejam incluídas no diretório `contentDir` (por padrão, `./src`). E correspondam à extensão do arquivo de declaração de conteúdo (por padrão, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
227
|
+
|
|
228
|
+
> Para mais detalhes, consulte a [documentação de declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/pt/dictionary/get_started.md).
|
|
229
|
+
|
|
230
|
+
> Se o seu arquivo de conteúdo incluir código TSX, você deve considerar importar `import React from "react";` no seu arquivo de conteúdo.
|
|
231
|
+
|
|
232
|
+
### Passo 5: Utilizar o Intlayer no Seu Código
|
|
233
|
+
|
|
234
|
+
Acesse seus dicionários de conteúdo em toda a sua aplicação:
|
|
235
|
+
|
|
236
|
+
```tsx {4,7} fileName="src/App.tsx" codeFormat="typescript"
|
|
237
|
+
import logo from "./logo.svg";
|
|
238
|
+
import "./App.css";
|
|
239
|
+
import type { FC } from "react";
|
|
240
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
241
|
+
|
|
242
|
+
const AppContent: FC = () => {
|
|
243
|
+
const content = useIntlayer("app");
|
|
244
|
+
|
|
245
|
+
return (
|
|
246
|
+
<div className="App">
|
|
247
|
+
<img src={logo} className="App-logo" alt="logo" />
|
|
248
|
+
|
|
249
|
+
{content.getStarted}
|
|
250
|
+
<a
|
|
251
|
+
className="App-link"
|
|
252
|
+
href={content.reactLink.href.value}
|
|
253
|
+
target="_blank"
|
|
254
|
+
rel="noopener noreferrer"
|
|
255
|
+
>
|
|
256
|
+
{content.reactLink.content}
|
|
257
|
+
</a>
|
|
258
|
+
</div>
|
|
259
|
+
);
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
const App: FC = () => (
|
|
263
|
+
<IntlayerProvider>
|
|
264
|
+
<AppContent />
|
|
265
|
+
</IntlayerProvider>
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
export default App;
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```jsx {3,6} fileName="src/App.mjx" codeFormat="esm"
|
|
272
|
+
import "./App.css";
|
|
273
|
+
import logo from "./logo.svg";
|
|
274
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
275
|
+
|
|
276
|
+
const AppContent = () => {
|
|
277
|
+
const content = useIntlayer("app");
|
|
278
|
+
|
|
279
|
+
return (
|
|
280
|
+
<div className="App">
|
|
281
|
+
<img src={logo} className="App-logo" alt="logo" />
|
|
282
|
+
|
|
283
|
+
{content.getStarted}
|
|
284
|
+
<a
|
|
285
|
+
className="App-link"
|
|
286
|
+
href={content.reactLink.href.value}
|
|
287
|
+
target="_blank"
|
|
288
|
+
rel="noopener noreferrer"
|
|
289
|
+
>
|
|
290
|
+
{content.reactLink.content}
|
|
291
|
+
</a>
|
|
292
|
+
</div>
|
|
293
|
+
);
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
const App = () => (
|
|
297
|
+
<IntlayerProvider>
|
|
298
|
+
<AppContent />
|
|
299
|
+
</IntlayerProvider>
|
|
300
|
+
);
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
```jsx {3,6} fileName="src/App.csx" codeFormat="commonjs"
|
|
304
|
+
require("./App.css");
|
|
305
|
+
const logo = require("./logo.svg");
|
|
306
|
+
const { IntlayerProvider, useIntlayer } = require("react-intlayer");
|
|
307
|
+
|
|
308
|
+
const AppContent = () => {
|
|
309
|
+
const content = useIntlayer("app");
|
|
310
|
+
|
|
311
|
+
return (
|
|
312
|
+
<div className="App">
|
|
313
|
+
<img src={logo} className="App-logo" alt="logo" />
|
|
314
|
+
|
|
315
|
+
{content.getStarted}
|
|
316
|
+
<a
|
|
317
|
+
className="App-link"
|
|
318
|
+
href={content.reactLink.href.value}
|
|
319
|
+
target="_blank"
|
|
320
|
+
rel="noopener noreferrer"
|
|
321
|
+
>
|
|
322
|
+
{content.reactLink.content}
|
|
323
|
+
</a>
|
|
324
|
+
</div>
|
|
325
|
+
);
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
const App = () => (
|
|
329
|
+
<IntlayerProvider>
|
|
330
|
+
<AppContent />
|
|
331
|
+
</IntlayerProvider>
|
|
332
|
+
);
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
> Nota: Se você quiser usar seu conteúdo em um atributo `string`, como `alt`, `title`, `href`, `aria-label`, etc., você deve chamar o valor da função, como:
|
|
336
|
+
|
|
337
|
+
> ```jsx
|
|
338
|
+
>
|
|
339
|
+
> ```
|
|
340
|
+
|
|
341
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
342
|
+
|
|
343
|
+
> ```
|
|
344
|
+
>
|
|
345
|
+
> ```
|
|
346
|
+
|
|
347
|
+
> Para saber mais sobre o hook `useIntlayer`, consulte a [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/react-intlayer/useIntlayer.md).
|
|
348
|
+
|
|
349
|
+
### (Opcional) Passo 6: Alterar o idioma do seu conteúdo
|
|
350
|
+
|
|
351
|
+
Para alterar o idioma do seu conteúdo, você pode usar a função `setLocale` fornecida pelo hook `useLocale`. Essa função permite definir o idioma da aplicação e atualizar o conteúdo de acordo.
|
|
352
|
+
|
|
353
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
354
|
+
import { Locales } from "intlayer";
|
|
355
|
+
import { useLocale } from "react-intlayer";
|
|
356
|
+
|
|
357
|
+
const LocaleSwitcher = () => {
|
|
358
|
+
const { setLocale } = useLocale();
|
|
359
|
+
|
|
360
|
+
return (
|
|
361
|
+
<button onClick={() => setLocale(Locales.Portuguese)}>
|
|
362
|
+
Alterar idioma para Português
|
|
363
|
+
</button>
|
|
364
|
+
);
|
|
365
|
+
};
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
```jsx fileName="src/components/LocaleSwitcher.mjx" codeFormat="esm"
|
|
369
|
+
import { Locales } from "intlayer";
|
|
370
|
+
import { useLocale } from "react-intlayer";
|
|
371
|
+
|
|
372
|
+
const LocaleSwitcher = () => {
|
|
373
|
+
const { setLocale } = useLocale();
|
|
374
|
+
|
|
375
|
+
return (
|
|
376
|
+
<button onClick={() => setLocale(Locales.Portuguese)}>
|
|
377
|
+
Alterar idioma para Português
|
|
378
|
+
</button>
|
|
379
|
+
);
|
|
380
|
+
};
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
|
|
384
|
+
const { Locales } = require("intlayer");
|
|
385
|
+
const { useLocale } = require("react-intlayer");
|
|
386
|
+
|
|
387
|
+
const LocaleSwitcher = () => {
|
|
388
|
+
const { setLocale } = useLocale();
|
|
389
|
+
|
|
390
|
+
return (
|
|
391
|
+
<button onClick={() => setLocale(Locales.Portuguese)}>
|
|
392
|
+
Alterar idioma para Português
|
|
393
|
+
</button>
|
|
394
|
+
);
|
|
395
|
+
};
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
> Para saber mais sobre o hook `useLocale`, consulte a [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/react-intlayer/useLocale.md).
|
|
399
|
+
|
|
400
|
+
### (Opcional) Passo 7: Adicionar Rotas Localizadas à sua aplicação
|
|
401
|
+
|
|
402
|
+
O objetivo deste passo é criar rotas únicas para cada idioma. Isso é útil para SEO e URLs amigáveis para SEO.
|
|
403
|
+
Exemplo:
|
|
404
|
+
|
|
405
|
+
```plaintext
|
|
406
|
+
- https://example.com/about
|
|
407
|
+
- https://example.com/es/about
|
|
408
|
+
- https://example.com/fr/about
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
> Por padrão, as rotas não são prefixadas para o idioma padrão. Se você quiser prefixar o idioma padrão, pode definir a opção `middleware.prefixDefault` como `true` na sua configuração. Consulte a [documentação de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/pt/configuration.md) para mais informações.
|
|
412
|
+
|
|
413
|
+
Para adicionar rotas localizadas à sua aplicação, você pode criar um componente `LocaleRouter` que encapsula as rotas da sua aplicação e gerencia o roteamento baseado no idioma. Aqui está um exemplo usando o [React Router](https://reactrouter.com/home):
|
|
414
|
+
|
|
415
|
+
```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
|
|
416
|
+
// Importação de dependências e funções necessárias
|
|
417
|
+
// Funções utilitárias e tipos do 'intlayer'
|
|
418
|
+
import { type Locales, configuration, getPathWithoutLocale } from "intlayer";
|
|
419
|
+
import type { FC, PropsWithChildren } from "react"; // Tipos React para componentes funcionais e props
|
|
420
|
+
import { IntlayerProvider } from "react-intlayer"; // Provedor para contexto de internacionalização
|
|
421
|
+
import {
|
|
422
|
+
BrowserRouter,
|
|
423
|
+
Routes,
|
|
424
|
+
Route,
|
|
425
|
+
Navigate,
|
|
426
|
+
useLocation,
|
|
427
|
+
} from "react-router-dom"; // Componentes de roteamento para gerenciar navegação
|
|
428
|
+
|
|
429
|
+
// Desestruturação da configuração do Intlayer
|
|
430
|
+
const { internationalization, middleware } = configuration;
|
|
431
|
+
const { locales, defaultLocale } = internationalization;
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Um componente que gerencia a localização e encapsula os filhos com o contexto de idioma apropriado.
|
|
435
|
+
* Ele gerencia a detecção e validação de idioma baseada em URL.
|
|
436
|
+
*/
|
|
437
|
+
const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
438
|
+
children,
|
|
439
|
+
locale,
|
|
440
|
+
}) => {
|
|
441
|
+
const { pathname, search } = useLocation(); // Obtém o caminho atual da URL
|
|
442
|
+
|
|
443
|
+
// Determina o idioma atual, retornando ao padrão se não for fornecido
|
|
444
|
+
const currentLocale = locale ?? defaultLocale;
|
|
445
|
+
|
|
446
|
+
// Remove o prefixo de idioma do caminho para construir um caminho base
|
|
447
|
+
const pathWithoutLocale = getPathWithoutLocale(
|
|
448
|
+
pathname // Caminho atual da URL
|
|
449
|
+
);
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Se middleware.prefixDefault for verdadeiro, o idioma padrão deve sempre ser prefixado.
|
|
453
|
+
*/
|
|
454
|
+
if (middleware.prefixDefault) {
|
|
455
|
+
// Valida o idioma
|
|
456
|
+
if (!locale || !locales.includes(locale)) {
|
|
457
|
+
// Redireciona para o idioma padrão com o caminho atualizado
|
|
458
|
+
return (
|
|
459
|
+
<Navigate
|
|
460
|
+
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
461
|
+
replace // Substitui a entrada atual do histórico pela nova
|
|
462
|
+
/>
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// Encapsula os filhos com o IntlayerProvider e define o idioma atual
|
|
467
|
+
return (
|
|
468
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
469
|
+
);
|
|
470
|
+
} else {
|
|
471
|
+
/**
|
|
472
|
+
* Quando middleware.prefixDefault é falso, o idioma padrão não é prefixado.
|
|
473
|
+
* Garante que o idioma atual seja válido e não o idioma padrão.
|
|
474
|
+
*/
|
|
475
|
+
if (
|
|
476
|
+
currentLocale.toString() !== defaultLocale.toString() &&
|
|
477
|
+
!locales
|
|
478
|
+
.filter(
|
|
479
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Exclui o idioma padrão
|
|
480
|
+
)
|
|
481
|
+
.includes(currentLocale) // Verifica se o idioma atual está na lista de idiomas válidos
|
|
482
|
+
) {
|
|
483
|
+
// Redireciona para o caminho sem prefixo de idioma
|
|
484
|
+
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Encapsula os filhos com o IntlayerProvider e define o idioma atual
|
|
488
|
+
return (
|
|
489
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Um componente de roteador que configura rotas específicas para idiomas.
|
|
496
|
+
* Ele usa o React Router para gerenciar a navegação e renderizar componentes localizados.
|
|
497
|
+
*/
|
|
498
|
+
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
499
|
+
<BrowserRouter>
|
|
500
|
+
<Routes>
|
|
501
|
+
{locales
|
|
502
|
+
.filter(
|
|
503
|
+
(locale) => middleware.prefixDefault || locale !== defaultLocale
|
|
504
|
+
)
|
|
505
|
+
.map((locale) => (
|
|
506
|
+
<Route
|
|
507
|
+
// Padrão de rota para capturar o idioma (por exemplo, /en/, /fr/) e corresponder a todos os caminhos subsequentes
|
|
508
|
+
path={`/${locale}/*`}
|
|
509
|
+
key={locale}
|
|
510
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Encapsula os filhos com gerenciamento de idioma
|
|
511
|
+
/>
|
|
512
|
+
))}
|
|
513
|
+
|
|
514
|
+
{
|
|
515
|
+
// Se o prefixo do idioma padrão estiver desativado, renderiza os filhos diretamente no caminho raiz
|
|
516
|
+
!middleware.prefixDefault && (
|
|
517
|
+
<Route
|
|
518
|
+
path="*"
|
|
519
|
+
element={
|
|
520
|
+
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
521
|
+
} // Encapsula os filhos com gerenciamento de idioma
|
|
522
|
+
/>
|
|
523
|
+
)
|
|
524
|
+
}
|
|
525
|
+
</Routes>
|
|
526
|
+
</BrowserRouter>
|
|
527
|
+
);
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
|
|
531
|
+
// Importação de dependências e funções necessárias
|
|
532
|
+
// Funções utilitárias e tipos do 'intlayer'
|
|
533
|
+
import { configuration, getPathWithoutLocale } from "intlayer";
|
|
534
|
+
import { IntlayerProvider } from "react-intlayer"; // Provedor para contexto de internacionalização
|
|
535
|
+
import {
|
|
536
|
+
BrowserRouter,
|
|
537
|
+
Routes,
|
|
538
|
+
Route,
|
|
539
|
+
Navigate,
|
|
540
|
+
useLocation,
|
|
541
|
+
} from "react-router-dom"; // Componentes de roteamento para gerenciar navegação
|
|
542
|
+
|
|
543
|
+
// Desestruturação da configuração do Intlayer
|
|
544
|
+
const { internationalization, middleware } = configuration;
|
|
545
|
+
const { locales, defaultLocale } = internationalization;
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Um componente que gerencia a localização e encapsula os filhos com o contexto de idioma apropriado.
|
|
549
|
+
* Ele gerencia a detecção e validação de idioma baseada em URL.
|
|
550
|
+
*/
|
|
551
|
+
const AppLocalized = ({ children, locale }) => {
|
|
552
|
+
const { pathname, search } = useLocation(); // Obtém o caminho atual da URL
|
|
553
|
+
|
|
554
|
+
// Determina o idioma atual, retornando ao padrão se não for fornecido
|
|
555
|
+
const currentLocale = locale ?? defaultLocale;
|
|
556
|
+
|
|
557
|
+
// Remove o prefixo de idioma do caminho para construir um caminho base
|
|
558
|
+
const pathWithoutLocale = getPathWithoutLocale(
|
|
559
|
+
pathname // Caminho atual da URL
|
|
560
|
+
);
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Se middleware.prefixDefault for verdadeiro, o idioma padrão deve sempre ser prefixado.
|
|
564
|
+
*/
|
|
565
|
+
if (middleware.prefixDefault) {
|
|
566
|
+
// Valida o idioma
|
|
567
|
+
if (!locale || !locales.includes(locale)) {
|
|
568
|
+
// Redireciona para o idioma padrão com o caminho atualizado
|
|
569
|
+
return (
|
|
570
|
+
<Navigate
|
|
571
|
+
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
572
|
+
replace // Substitui a entrada atual do histórico pela nova
|
|
573
|
+
/>
|
|
574
|
+
);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// Encapsula os filhos com o IntlayerProvider e define o idioma atual
|
|
578
|
+
return (
|
|
579
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
580
|
+
);
|
|
581
|
+
} else {
|
|
582
|
+
/**
|
|
583
|
+
* Quando middleware.prefixDefault é falso, o idioma padrão não é prefixado.
|
|
584
|
+
* Garante que o idioma atual seja válido e não o idioma padrão.
|
|
585
|
+
*/
|
|
586
|
+
if (
|
|
587
|
+
currentLocale.toString() !== defaultLocale.toString() &&
|
|
588
|
+
!locales
|
|
589
|
+
.filter(
|
|
590
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Exclui o idioma padrão
|
|
591
|
+
)
|
|
592
|
+
.includes(currentLocale) // Verifica se o idioma atual está na lista de idiomas válidos
|
|
593
|
+
) {
|
|
594
|
+
// Redireciona para o caminho sem prefixo de idioma
|
|
595
|
+
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// Encapsula os filhos com o IntlayerProvider e define o idioma atual
|
|
599
|
+
return (
|
|
600
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
601
|
+
);
|
|
602
|
+
}
|
|
603
|
+
};
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
* Um componente de roteador que configura rotas específicas para idiomas.
|
|
607
|
+
* Ele usa o React Router para gerenciar a navegação e renderizar componentes localizados.
|
|
608
|
+
*/
|
|
609
|
+
export const LocaleRouter = ({ children }) => (
|
|
610
|
+
<BrowserRouter>
|
|
611
|
+
<Routes>
|
|
612
|
+
{locales
|
|
613
|
+
.filter(
|
|
614
|
+
(locale) => middleware.prefixDefault || locale !== defaultLocale
|
|
615
|
+
)
|
|
616
|
+
.map((locale) => (
|
|
617
|
+
<Route
|
|
618
|
+
// Padrão de rota para capturar o idioma (por exemplo, /en/, /fr/) e corresponder a todos os caminhos subsequentes
|
|
619
|
+
path={`/${locale}/*`}
|
|
620
|
+
key={locale}
|
|
621
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Encapsula os filhos com gerenciamento de idioma
|
|
622
|
+
/>
|
|
623
|
+
))}
|
|
624
|
+
|
|
625
|
+
{
|
|
626
|
+
// Se o prefixo do idioma padrão estiver desativado, renderiza os filhos diretamente no caminho raiz
|
|
627
|
+
!middleware.prefixDefault && (
|
|
628
|
+
<Route
|
|
629
|
+
path="*"
|
|
630
|
+
element={
|
|
631
|
+
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
632
|
+
} // Encapsula os filhos com gerenciamento de idioma
|
|
633
|
+
/>
|
|
634
|
+
)
|
|
635
|
+
}
|
|
636
|
+
</Routes>
|
|
637
|
+
</BrowserRouter>
|
|
638
|
+
);
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
|
|
642
|
+
// Importação de dependências e funções necessárias
|
|
643
|
+
const { configuration, getPathWithoutLocale } = require("intlayer"); // Funções utilitárias e tipos do 'intlayer'
|
|
644
|
+
const { IntlayerProvider, useLocale } = require("react-intlayer"); // Provedor para contexto de internacionalização
|
|
645
|
+
const {
|
|
646
|
+
BrowserRouter,
|
|
647
|
+
Routes,
|
|
648
|
+
Route,
|
|
649
|
+
Navigate,
|
|
650
|
+
useLocation,
|
|
651
|
+
} = require("react-router-dom"); // Componentes de roteamento para gerenciar navegação
|
|
652
|
+
|
|
653
|
+
// Desestruturação da configuração do Intlayer
|
|
654
|
+
const { internationalization, middleware } = configuration;
|
|
655
|
+
const { locales, defaultLocale } = internationalization;
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Um componente que gerencia a localização e encapsula os filhos com o contexto de idioma apropriado.
|
|
659
|
+
* Ele gerencia a detecção e validação de idioma baseada em URL.
|
|
660
|
+
*/
|
|
661
|
+
const AppLocalized = ({ children, locale }) => {
|
|
662
|
+
const { pathname, search } = useLocation(); // Obtém o caminho atual da URL
|
|
663
|
+
|
|
664
|
+
// Determina o idioma atual, retornando ao padrão se não for fornecido
|
|
665
|
+
const currentLocale = locale ?? defaultLocale;
|
|
666
|
+
|
|
667
|
+
// Remove o prefixo de idioma do caminho para construir um caminho base
|
|
668
|
+
const pathWithoutLocale = getPathWithoutLocale(
|
|
669
|
+
pathname // Caminho atual da URL
|
|
670
|
+
);
|
|
671
|
+
|
|
672
|
+
/**
|
|
673
|
+
* Se middleware.prefixDefault for verdadeiro, o idioma padrão deve sempre ser prefixado.
|
|
674
|
+
*/
|
|
675
|
+
if (middleware.prefixDefault) {
|
|
676
|
+
// Valida o idioma
|
|
677
|
+
if (!locale || !locales.includes(locale)) {
|
|
678
|
+
// Redireciona para o idioma padrão com o caminho atualizado
|
|
679
|
+
return (
|
|
680
|
+
<Navigate
|
|
681
|
+
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
682
|
+
replace // Substitui a entrada atual do histórico pela nova
|
|
683
|
+
/>
|
|
684
|
+
);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// Encapsula os filhos com o IntlayerProvider e define o idioma atual
|
|
688
|
+
return (
|
|
689
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
690
|
+
);
|
|
691
|
+
} else {
|
|
692
|
+
/**
|
|
693
|
+
* Quando middleware.prefixDefault é falso, o idioma padrão não é prefixado.
|
|
694
|
+
* Garante que o idioma atual seja válido e não o idioma padrão.
|
|
695
|
+
*/
|
|
696
|
+
if (
|
|
697
|
+
currentLocale.toString() !== defaultLocale.toString() &&
|
|
698
|
+
!locales
|
|
699
|
+
.filter(
|
|
700
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Exclui o idioma padrão
|
|
701
|
+
)
|
|
702
|
+
.includes(currentLocale) // Verifica se o idioma atual está na lista de idiomas válidos
|
|
703
|
+
) {
|
|
704
|
+
// Redireciona para o caminho sem prefixo de idioma
|
|
705
|
+
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
// Encapsula os filhos com o IntlayerProvider e define o idioma atual
|
|
709
|
+
return (
|
|
710
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
711
|
+
);
|
|
712
|
+
}
|
|
713
|
+
};
|
|
714
|
+
|
|
715
|
+
/**
|
|
716
|
+
* Um componente de roteador que configura rotas específicas para idiomas.
|
|
717
|
+
* Ele usa o React Router para gerenciar a navegação e renderizar componentes localizados.
|
|
718
|
+
*/
|
|
719
|
+
const LocaleRouter = ({ children }) => (
|
|
720
|
+
<BrowserRouter>
|
|
721
|
+
<Routes>
|
|
722
|
+
{locales
|
|
723
|
+
.filter(
|
|
724
|
+
(locale) => middleware.prefixDefault || locale !== defaultLocale
|
|
725
|
+
)
|
|
726
|
+
.map((locale) => (
|
|
727
|
+
<Route
|
|
728
|
+
// Padrão de rota para capturar o idioma (por exemplo, /en/, /fr/) e corresponder a todos os caminhos subsequentes
|
|
729
|
+
path={`/${locale}/*`}
|
|
730
|
+
key={locale}
|
|
731
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Encapsula os filhos com gerenciamento de idioma
|
|
732
|
+
/>
|
|
733
|
+
))}
|
|
734
|
+
|
|
735
|
+
{
|
|
736
|
+
// Se o prefixo do idioma padrão estiver desativado, renderiza os filhos diretamente no caminho raiz
|
|
737
|
+
!middleware.prefixDefault && (
|
|
738
|
+
<Route
|
|
739
|
+
path="*"
|
|
740
|
+
element={
|
|
741
|
+
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
742
|
+
} // Encapsula os filhos com gerenciamento de idioma
|
|
743
|
+
/>
|
|
744
|
+
)
|
|
745
|
+
}
|
|
746
|
+
</Routes>
|
|
747
|
+
</BrowserRouter>
|
|
748
|
+
);
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
Em seguida, você pode usar o componente `LocaleRouter` na sua aplicação:
|
|
752
|
+
|
|
753
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
754
|
+
import { LocaleRouter } from "./components/LocaleRouter";
|
|
755
|
+
import type { FC } from "react";
|
|
756
|
+
|
|
757
|
+
// ... Seu componente AppContent
|
|
758
|
+
|
|
759
|
+
const App: FC = () => (
|
|
760
|
+
<LocaleRouter>
|
|
761
|
+
<AppContent />
|
|
762
|
+
</LocaleRouter>
|
|
763
|
+
);
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
```jsx fileName="src/App.mjx" codeFormat="esm"
|
|
767
|
+
import { LocaleRouter } from "./components/LocaleRouter";
|
|
768
|
+
|
|
769
|
+
// ... Seu componente AppContent
|
|
770
|
+
|
|
771
|
+
const App = () => (
|
|
772
|
+
<LocaleRouter>
|
|
773
|
+
<AppContent />
|
|
774
|
+
</LocaleRouter>
|
|
775
|
+
);
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
```jsx fileName="src/App.cjx" codeFormat="commonjs"
|
|
779
|
+
const { LocaleRouter } = require("./components/LocaleRouter");
|
|
780
|
+
|
|
781
|
+
// ... Seu componente AppContent
|
|
782
|
+
|
|
783
|
+
const App = () => (
|
|
784
|
+
<LocaleRouter>
|
|
785
|
+
<AppContent />
|
|
786
|
+
</LocaleRouter>
|
|
787
|
+
);
|
|
788
|
+
```
|
|
789
|
+
|
|
790
|
+
### (Opcional) Passo 8: Alterar a URL quando o idioma muda
|
|
791
|
+
|
|
792
|
+
Para alterar a URL quando o idioma muda, você pode usar a prop `onLocaleChange` fornecida pelo hook `useLocale`. Paralelamente, você pode usar os hooks `useLocation` e `useNavigate` do `react-router-dom` para atualizar o caminho da URL.
|
|
793
|
+
|
|
794
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
795
|
+
import { useLocation, useNavigate } from "react-router-dom";
|
|
796
|
+
import {
|
|
797
|
+
Locales,
|
|
798
|
+
getHTMLTextDir,
|
|
799
|
+
getLocaleName,
|
|
800
|
+
getLocalizedUrl,
|
|
801
|
+
} from "intlayer";
|
|
802
|
+
import { useLocale } from "react-intlayer";
|
|
803
|
+
import { type FC } from "react";
|
|
804
|
+
|
|
805
|
+
const LocaleSwitcher: FC = () => {
|
|
806
|
+
const { pathname, search } = useLocation(); // Obtém o caminho atual da URL. Exemplo: /fr/about?foo=bar
|
|
807
|
+
const navigate = useNavigate();
|
|
808
|
+
|
|
809
|
+
const { locale, availableLocales, setLocale } = useLocale({
|
|
810
|
+
onLocaleChange: (locale) => {
|
|
811
|
+
// Constrói a URL com o idioma atualizado
|
|
812
|
+
// Exemplo: /es/about?foo=bar
|
|
813
|
+
const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
|
|
814
|
+
|
|
815
|
+
// Atualiza o caminho da URL
|
|
816
|
+
navigate(pathWithLocale);
|
|
817
|
+
},
|
|
818
|
+
});
|
|
819
|
+
|
|
820
|
+
return (
|
|
821
|
+
<div>
|
|
822
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
823
|
+
<div id="localePopover" popover="auto">
|
|
824
|
+
{availableLocales.map((localeItem) => (
|
|
825
|
+
<a
|
|
826
|
+
href={getLocalizedUrl(location.pathname, localeItem)}
|
|
827
|
+
hrefLang={localeItem}
|
|
828
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
829
|
+
onClick={(e) => {
|
|
830
|
+
e.preventDefault();
|
|
831
|
+
setLocale(localeItem);
|
|
832
|
+
}}
|
|
833
|
+
key={localeItem}
|
|
834
|
+
>
|
|
835
|
+
<span>
|
|
836
|
+
{/* Idioma - ex: FR */}
|
|
837
|
+
{localeItem}
|
|
838
|
+
</span>
|
|
839
|
+
<span>
|
|
840
|
+
{/* Idioma no próprio idioma - ex: Français */}
|
|
841
|
+
{getLocaleName(localeItem, locale)}
|
|
842
|
+
</span>
|
|
843
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
844
|
+
{/* Idioma no idioma atual - ex: Francés com idioma atual definido como Locales.SPANISH */}
|
|
845
|
+
{getLocaleName(localeItem)}
|
|
846
|
+
</span>
|
|
847
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
848
|
+
{/* Idioma em inglês - ex: French */}
|
|
849
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
850
|
+
</span>
|
|
851
|
+
</a>
|
|
852
|
+
))}
|
|
853
|
+
</div>
|
|
854
|
+
</div>
|
|
855
|
+
);
|
|
856
|
+
};
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
|
|
860
|
+
import { useLocation, useNavigate } from "react-router-dom";
|
|
861
|
+
import {
|
|
862
|
+
Locales,
|
|
863
|
+
getHTMLTextDir,
|
|
864
|
+
getLocaleName,
|
|
865
|
+
getLocalizedUrl,
|
|
866
|
+
} from "intlayer";
|
|
867
|
+
import { useLocale } from "react-intlayer";
|
|
868
|
+
|
|
869
|
+
const LocaleSwitcher = () => {
|
|
870
|
+
const { pathname, search } = useLocation(); // Obtém o caminho atual da URL. Exemplo: /fr/about?foo=bar
|
|
871
|
+
const navigate = useNavigate();
|
|
872
|
+
|
|
873
|
+
const { locale, availableLocales, setLocale } = useLocale({
|
|
874
|
+
onLocaleChange: (locale) => {
|
|
875
|
+
// Constrói a URL com o idioma atualizado
|
|
876
|
+
// Exemplo: /es/about?foo=bar
|
|
877
|
+
const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
|
|
878
|
+
|
|
879
|
+
// Atualiza o caminho da URL
|
|
880
|
+
navigate(pathWithLocale);
|
|
881
|
+
},
|
|
882
|
+
});
|
|
883
|
+
|
|
884
|
+
return (
|
|
885
|
+
<div>
|
|
886
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
887
|
+
<div id="localePopover" popover="auto">
|
|
888
|
+
{availableLocales.map((localeItem) => (
|
|
889
|
+
<a
|
|
890
|
+
href={getLocalizedUrl(location.pathname, localeItem)}
|
|
891
|
+
hrefLang={localeItem}
|
|
892
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
893
|
+
onClick={(e) => {
|
|
894
|
+
e.preventDefault();
|
|
895
|
+
setLocale(localeItem);
|
|
896
|
+
}}
|
|
897
|
+
key={localeItem}
|
|
898
|
+
>
|
|
899
|
+
<span>
|
|
900
|
+
{/* Idioma - ex: FR */}
|
|
901
|
+
{localeItem}
|
|
902
|
+
</span>
|
|
903
|
+
<span>
|
|
904
|
+
{/* Idioma no próprio idioma - ex: Français */}
|
|
905
|
+
{getLocaleName(localeItem, locale)}
|
|
906
|
+
</span>
|
|
907
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
908
|
+
{/* Idioma no idioma atual - ex: Francés com idioma atual definido como Locales.SPANISH */}
|
|
909
|
+
{getLocaleName(localeItem)}
|
|
910
|
+
</span>
|
|
911
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
912
|
+
{/* Idioma em inglês - ex: French */}
|
|
913
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
914
|
+
</span>
|
|
915
|
+
</a>
|
|
916
|
+
))}
|
|
917
|
+
</div>
|
|
918
|
+
</div>
|
|
919
|
+
);
|
|
920
|
+
};
|
|
921
|
+
```
|
|
922
|
+
|
|
923
|
+
```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
|
|
924
|
+
const { useLocation, useNavigate } = require("react-router-dom");
|
|
925
|
+
const {
|
|
926
|
+
Locales,
|
|
927
|
+
getHTMLTextDir,
|
|
928
|
+
getLocaleName,
|
|
929
|
+
getLocalizedUrl,
|
|
930
|
+
} = require("intlayer");
|
|
931
|
+
const { useLocale } = require("react-intlayer");
|
|
932
|
+
|
|
933
|
+
const LocaleSwitcher = () => {
|
|
934
|
+
const { pathname, search } = useLocation(); // Obtém o caminho atual da URL. Exemplo: /fr/about?foo=bar
|
|
935
|
+
const navigate = useNavigate();
|
|
936
|
+
|
|
937
|
+
const { locale, availableLocales, setLocale } = useLocale({
|
|
938
|
+
onLocaleChange: (locale) => {
|
|
939
|
+
// Constrói a URL com o idioma atualizado
|
|
940
|
+
// Exemplo: /es/about?foo=bar
|
|
941
|
+
const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
|
|
942
|
+
|
|
943
|
+
// Atualiza o caminho da URL
|
|
944
|
+
navigate(pathWithLocale);
|
|
945
|
+
},
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
return (
|
|
949
|
+
<div>
|
|
950
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
951
|
+
<div id="localePopover" popover="auto">
|
|
952
|
+
{availableLocales.map((localeItem) => (
|
|
953
|
+
<a
|
|
954
|
+
href={getLocalizedUrl(location.pathname, localeItem)}
|
|
955
|
+
hrefLang={localeItem}
|
|
956
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
957
|
+
onClick={(e) => {
|
|
958
|
+
e.preventDefault();
|
|
959
|
+
setLocale(localeItem);
|
|
960
|
+
}}
|
|
961
|
+
key={localeItem}
|
|
962
|
+
>
|
|
963
|
+
<span>
|
|
964
|
+
{/* Idioma - ex: FR */}
|
|
965
|
+
{localeItem}
|
|
966
|
+
</span>
|
|
967
|
+
<span>
|
|
968
|
+
{/* Idioma no próprio idioma - ex: Français */}
|
|
969
|
+
{getLocaleName(localeItem, locale)}
|
|
970
|
+
</span>
|
|
971
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
972
|
+
{/* Idioma no idioma atual - ex: Francés com idioma atual definido como Locales.SPANISH */}
|
|
973
|
+
{getLocaleName(localeItem)}
|
|
974
|
+
</span>
|
|
975
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
976
|
+
{/* Idioma em inglês - ex: French */}
|
|
977
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
978
|
+
</span>
|
|
979
|
+
</a>
|
|
980
|
+
))}
|
|
981
|
+
</div>
|
|
982
|
+
</div>
|
|
983
|
+
);
|
|
984
|
+
};
|
|
985
|
+
```
|
|
986
|
+
|
|
987
|
+
> Referências da documentação:
|
|
988
|
+
|
|
989
|
+
> - [Hook `useLocale`](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/react-intlayer/useLocale.md)
|
|
990
|
+
|
|
991
|
+
> - [Hook `getLocaleName`](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/intlayer/getLocaleName.md)
|
|
992
|
+
|
|
993
|
+
> - [Hook `getLocalizedUrl`](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/intlayer/getLocalizedUrl.md)
|
|
994
|
+
|
|
995
|
+
> - [Hook `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/intlayer/getHTMLTextDir.md)
|
|
996
|
+
|
|
997
|
+
> - [Atributo `hrefLang`](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
|
|
998
|
+
|
|
999
|
+
> - [Atributo `lang`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
|
|
1000
|
+
|
|
1001
|
+
> - [Atributo `dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
|
|
1002
|
+
|
|
1003
|
+
> - [Atributo `aria-current`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
1004
|
+
|
|
1005
|
+
### (Opcional) Passo 9: Alterar os Atributos de Idioma e Direção do HTML
|
|
1006
|
+
|
|
1007
|
+
Quando sua aplicação suporta vários idiomas, é crucial atualizar os atributos `lang` e `dir` da tag `<html>` para corresponder ao idioma atual. Isso garante:
|
|
1008
|
+
|
|
1009
|
+
- **Acessibilidade**: Leitores de tela e tecnologias assistivas dependem do atributo `lang` correto para pronunciar e interpretar o conteúdo com precisão.
|
|
1010
|
+
- **Renderização de Texto**: O atributo `dir` (direção) garante que o texto seja renderizado na ordem correta (por exemplo, da esquerda para a direita para inglês, da direita para a esquerda para árabe ou hebraico), o que é essencial para a legibilidade.
|
|
1011
|
+
- **SEO**: Os motores de busca usam o atributo `lang` para determinar o idioma da sua página, ajudando a servir o conteúdo localizado correto nos resultados de busca.
|
|
1012
|
+
|
|
1013
|
+
Ao atualizar esses atributos dinamicamente quando o idioma muda, você garante uma experiência consistente e acessível para os usuários em todos os idiomas suportados.
|
|
1014
|
+
|
|
1015
|
+
#### Implementando o Hook
|
|
1016
|
+
|
|
1017
|
+
Crie um hook personalizado para gerenciar os atributos HTML. O hook escuta as mudanças de idioma e atualiza os atributos de acordo:
|
|
1018
|
+
|
|
1019
|
+
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
|
|
1020
|
+
import { useEffect } from "react";
|
|
1021
|
+
import { useLocale } from "react-intlayer";
|
|
1022
|
+
import { getHTMLTextDir } from "intlayer";
|
|
1023
|
+
|
|
1024
|
+
/**
|
|
1025
|
+
* Atualiza os atributos `lang` e `dir` do elemento HTML <html> com base no idioma atual.
|
|
1026
|
+
* - `lang`: Informa navegadores e motores de busca sobre o idioma da página.
|
|
1027
|
+
* - `dir`: Garante a ordem de leitura correta (por exemplo, 'ltr' para inglês, 'rtl' para árabe).
|
|
1028
|
+
*
|
|
1029
|
+
* Essa atualização dinâmica é essencial para renderização de texto adequada, acessibilidade e SEO.
|
|
1030
|
+
*/
|
|
1031
|
+
export const useI18nHTMLAttributes = () => {
|
|
1032
|
+
const { locale } = useLocale();
|
|
1033
|
+
|
|
1034
|
+
useEffect(() => {
|
|
1035
|
+
// Atualiza o atributo de idioma para o idioma atual.
|
|
1036
|
+
document.documentElement.lang = locale;
|
|
1037
|
+
|
|
1038
|
+
// Define a direção do texto com base no idioma atual.
|
|
1039
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1040
|
+
}, [locale]);
|
|
1041
|
+
};
|
|
1042
|
+
```
|
|
1043
|
+
|
|
1044
|
+
```jsx fileName="src/hooks/useI18nHTMLAttributes.msx" codeFormat="esm"
|
|
1045
|
+
import { useEffect } from "react";
|
|
1046
|
+
import { useLocale } from "react-intlayer";
|
|
1047
|
+
import { getHTMLTextDir } from "intlayer";
|
|
1048
|
+
|
|
1049
|
+
/**
|
|
1050
|
+
* Atualiza os atributos `lang` e `dir` do elemento HTML <html> com base no idioma atual.
|
|
1051
|
+
* - `lang`: Informa navegadores e motores de busca sobre o idioma da página.
|
|
1052
|
+
* - `dir`: Garante a ordem de leitura correta (por exemplo, 'ltr' para inglês, 'rtl' para árabe).
|
|
1053
|
+
*
|
|
1054
|
+
* Essa atualização dinâmica é essencial para renderização de texto adequada, acessibilidade e SEO.
|
|
1055
|
+
*/
|
|
1056
|
+
export const useI18nHTMLAttributes = () => {
|
|
1057
|
+
const { locale } = useLocale();
|
|
1058
|
+
|
|
1059
|
+
useEffect(() => {
|
|
1060
|
+
// Atualiza o atributo de idioma para o idioma atual.
|
|
1061
|
+
document.documentElement.lang = locale;
|
|
1062
|
+
|
|
1063
|
+
// Define a direção do texto com base no idioma atual.
|
|
1064
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1065
|
+
}, [locale]);
|
|
1066
|
+
};
|
|
1067
|
+
```
|
|
1068
|
+
|
|
1069
|
+
```jsx fileName="src/hooks/useI18nHTMLAttributes.csx" codeFormat="commonjs"
|
|
1070
|
+
const { useEffect } = require("react");
|
|
1071
|
+
const { useLocale } = require("react-intlayer");
|
|
1072
|
+
const { getHTMLTextDir } = require("intlayer");
|
|
1073
|
+
|
|
1074
|
+
/**
|
|
1075
|
+
* Atualiza os atributos `lang` e `dir` do elemento HTML <html> com base no idioma atual.
|
|
1076
|
+
* - `lang`: Informa navegadores e motores de busca sobre o idioma da página.
|
|
1077
|
+
* - `dir`: Garante a ordem de leitura correta (por exemplo, 'ltr' para inglês, 'rtl' para árabe).
|
|
1078
|
+
*
|
|
1079
|
+
* Essa atualização dinâmica é essencial para renderização de texto adequada, acessibilidade e SEO.
|
|
1080
|
+
*/
|
|
1081
|
+
const useI18nHTMLAttributes = () => {
|
|
1082
|
+
const { locale } = useLocale();
|
|
1083
|
+
|
|
1084
|
+
useEffect(() => {
|
|
1085
|
+
// Atualiza o atributo de idioma para o idioma atual.
|
|
1086
|
+
document.documentElement.lang = locale;
|
|
1087
|
+
|
|
1088
|
+
// Define a direção do texto com base no idioma atual.
|
|
1089
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1090
|
+
}, [locale]);
|
|
1091
|
+
};
|
|
1092
|
+
|
|
1093
|
+
module.exports = { useI18nHTMLAttributes };
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
#### Usando o Hook na Sua Aplicação
|
|
1097
|
+
|
|
1098
|
+
Integre o hook no seu componente principal para que os atributos HTML sejam atualizados sempre que o idioma mudar:
|
|
1099
|
+
|
|
1100
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
1101
|
+
import type { FC } from "react";
|
|
1102
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
1103
|
+
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
1104
|
+
import "./App.css";
|
|
1105
|
+
|
|
1106
|
+
const AppContent: FC = () => {
|
|
1107
|
+
// Aplica o hook para atualizar os atributos lang e dir da tag <html> com base no idioma.
|
|
1108
|
+
useI18nHTMLAttributes();
|
|
1109
|
+
|
|
1110
|
+
// ... Resto do seu componente
|
|
1111
|
+
};
|
|
1112
|
+
|
|
1113
|
+
const App: FC = () => (
|
|
1114
|
+
<IntlayerProvider>
|
|
1115
|
+
<AppContent />
|
|
1116
|
+
</IntlayerProvider>
|
|
1117
|
+
);
|
|
1118
|
+
|
|
1119
|
+
export default App;
|
|
1120
|
+
```
|
|
1121
|
+
|
|
1122
|
+
```jsx fileName="src/App.msx" codeFormat="esm"
|
|
1123
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
1124
|
+
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
1125
|
+
import "./App.css";
|
|
1126
|
+
|
|
1127
|
+
const AppContent = () => {
|
|
1128
|
+
// Aplica o hook para atualizar os atributos lang e dir da tag <html> com base no idioma.
|
|
1129
|
+
useI18nHTMLAttributes();
|
|
1130
|
+
|
|
1131
|
+
// ... Resto do seu componente
|
|
1132
|
+
};
|
|
1133
|
+
|
|
1134
|
+
const App = () => (
|
|
1135
|
+
<IntlayerProvider>
|
|
1136
|
+
<AppContent />
|
|
1137
|
+
</IntlayerProvider>
|
|
1138
|
+
);
|
|
1139
|
+
|
|
1140
|
+
export default App;
|
|
1141
|
+
```
|
|
1142
|
+
|
|
1143
|
+
```jsx fileName="src/App.csx" codeFormat="commonjs"
|
|
1144
|
+
const { FC } = require("react");
|
|
1145
|
+
const { IntlayerProvider, useIntlayer } = require("react-intlayer");
|
|
1146
|
+
const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
|
|
1147
|
+
require("./App.css");
|
|
1148
|
+
|
|
1149
|
+
const AppContent = () => {
|
|
1150
|
+
// Aplica o hook para atualizar os atributos lang e dir da tag <html> com base no idioma.
|
|
1151
|
+
useI18nHTMLAttributes();
|
|
1152
|
+
|
|
1153
|
+
// ... Resto do seu componente
|
|
1154
|
+
};
|
|
1155
|
+
|
|
1156
|
+
const App = () => (
|
|
1157
|
+
<IntlayerProvider>
|
|
1158
|
+
<AppContent />
|
|
1159
|
+
</IntlayerProvider>
|
|
1160
|
+
);
|
|
1161
|
+
|
|
1162
|
+
module.exports = App;
|
|
1163
|
+
```
|
|
1164
|
+
|
|
1165
|
+
Ao aplicar essas alterações, sua aplicação irá:
|
|
1166
|
+
|
|
1167
|
+
- Garantir que o **idioma** (`lang`) reflete corretamente o idioma atual, o que é importante para SEO e comportamento do navegador.
|
|
1168
|
+
- Ajustar a **direção do texto** (`dir`) de acordo com o idioma, melhorando a legibilidade e usabilidade para idiomas com diferentes ordens de leitura.
|
|
1169
|
+
- Fornecer uma experiência mais **acessível**, já que tecnologias assistivas dependem desses atributos para funcionar de forma otimizada.
|
|
1170
|
+
|
|
1171
|
+
### Configurar TypeScript
|
|
1172
|
+
|
|
1173
|
+
O Intlayer usa a ampliação de módulos para obter os benefícios do TypeScript e tornar sua base de código mais robusta.
|
|
1174
|
+
|
|
1175
|
+

|
|
1176
|
+
|
|
1177
|
+

|
|
1178
|
+
|
|
1179
|
+
Certifique-se de que sua configuração do TypeScript inclua os tipos autogerados.
|
|
1180
|
+
|
|
1181
|
+
```json5 fileName="tsconfig.json"
|
|
1182
|
+
{
|
|
1183
|
+
// ... Suas configurações existentes do TypeScript
|
|
1184
|
+
"include": [
|
|
1185
|
+
// ... Suas configurações existentes do TypeScript
|
|
1186
|
+
".intlayer/**/*.ts", // Inclua os tipos autogerados
|
|
1187
|
+
],
|
|
1188
|
+
}
|
|
1189
|
+
```
|
|
1190
|
+
|
|
1191
|
+
### Configuração do Git
|
|
1192
|
+
|
|
1193
|
+
Recomenda-se ignorar os arquivos gerados pelo Intlayer. Isso permite evitar que eles sejam enviados para o seu repositório Git.
|
|
1194
|
+
|
|
1195
|
+
Para fazer isso, você pode adicionar as seguintes instruções ao seu arquivo `.gitignore`:
|
|
1196
|
+
|
|
1197
|
+
```plaintext fileName=".gitignore"
|
|
1198
|
+
# Ignore os arquivos gerados pelo Intlayer
|
|
1199
|
+
.intlayer
|
|
1200
|
+
```
|
|
1201
|
+
|
|
1202
|
+
### Avançar
|
|
1203
|
+
|
|
1204
|
+
Para avançar, você pode implementar o [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_visual_editor.md) ou externalizar seu conteúdo usando o [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_CMS.md).
|