@intlayer/docs 5.8.1 → 6.0.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/rag_powered_documentation_assistant.md +282 -0
- package/blog/de/rag_powered_documentation_assistant.md +282 -0
- package/blog/en/rag_powered_documentation_assistant.md +289 -0
- package/blog/en-GB/rag_powered_documentation_assistant.md +284 -0
- package/blog/es/rag_powered_documentation_assistant.md +308 -0
- package/blog/fr/rag_powered_documentation_assistant.md +308 -0
- package/blog/hi/rag_powered_documentation_assistant.md +284 -0
- package/blog/it/rag_powered_documentation_assistant.md +284 -0
- package/blog/ja/rag_powered_documentation_assistant.md +284 -0
- package/blog/ko/rag_powered_documentation_assistant.md +283 -0
- package/blog/pt/rag_powered_documentation_assistant.md +284 -0
- package/blog/ru/rag_powered_documentation_assistant.md +284 -0
- package/blog/tr/index.md +69 -0
- package/blog/tr/internationalization_and_SEO.md +273 -0
- package/blog/tr/intlayer_with_i18next.md +162 -0
- package/blog/tr/intlayer_with_next-i18next.md +367 -0
- package/blog/tr/intlayer_with_next-intl.md +392 -0
- package/blog/tr/intlayer_with_react-i18next.md +346 -0
- package/blog/tr/intlayer_with_react-intl.md +345 -0
- package/blog/tr/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/tr/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/tr/list_i18n_technologies/CMS/wordpress.md +188 -0
- package/blog/tr/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/tr/list_i18n_technologies/frameworks/flutter.md +150 -0
- package/blog/tr/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/tr/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/tr/list_i18n_technologies/frameworks/svelte.md +129 -0
- package/blog/tr/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +170 -0
- package/blog/tr/rag_powered_documentation_assistant.md +284 -0
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +162 -0
- package/blog/tr/vue-i18n_vs_intlayer.md +276 -0
- package/blog/tr/what_is_internationalization.md +166 -0
- package/blog/zh/rag_powered_documentation_assistant.md +284 -0
- package/dist/cjs/generated/blog.entry.cjs +212 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +660 -132
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +84 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +6 -0
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +212 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +660 -132
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +84 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +6 -0
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +5 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/autoFill.md +41 -40
- package/docs/ar/configuration.md +202 -199
- package/docs/ar/dictionary/content_file.md +1059 -0
- package/docs/ar/intlayer_CMS.md +4 -4
- package/docs/ar/intlayer_with_nestjs.md +271 -0
- package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ar/intlayer_with_react_router_v7.md +533 -0
- package/docs/ar/intlayer_with_tanstack.md +465 -299
- package/docs/ar/intlayer_with_vite+preact.md +7 -7
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/ar/packages/vite-intlayer/index.md +3 -3
- package/docs/ar/readme.md +261 -0
- package/docs/ar/testing.md +199 -0
- package/docs/de/autoFill.md +42 -19
- package/docs/de/configuration.md +155 -147
- package/docs/de/dictionary/content_file.md +1059 -0
- package/docs/de/intlayer_CMS.md +4 -5
- package/docs/de/intlayer_with_nestjs.md +270 -0
- package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/de/intlayer_with_react_router_v7.md +537 -0
- package/docs/de/intlayer_with_tanstack.md +469 -302
- package/docs/de/intlayer_with_vite+preact.md +7 -7
- package/docs/de/intlayer_with_vite+react.md +7 -7
- package/docs/de/intlayer_with_vite+vue.md +9 -9
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/de/readme.md +261 -0
- package/docs/de/testing.md +200 -0
- package/docs/en/CI_CD.md +4 -6
- package/docs/en/autoFill.md +25 -5
- package/docs/en/configuration.md +45 -54
- package/docs/en/dictionary/content_file.md +1054 -0
- package/docs/en/intlayer_CMS.md +8 -7
- package/docs/en/intlayer_cli.md +112 -5
- package/docs/en/intlayer_with_nestjs.md +268 -0
- package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en/intlayer_with_react_router_v7.md +531 -0
- package/docs/en/intlayer_with_tanstack.md +463 -294
- package/docs/en/intlayer_with_vite+preact.md +8 -8
- package/docs/en/intlayer_with_vite+react.md +8 -8
- package/docs/en/intlayer_with_vite+vue.md +8 -8
- package/docs/en/packages/intlayer/getLocalizedUrl.md +102 -25
- package/docs/en/packages/vite-intlayer/index.md +3 -3
- package/docs/en/readme.md +261 -0
- package/docs/en/testing.md +200 -0
- package/docs/en-GB/autoFill.md +29 -6
- package/docs/en-GB/configuration.md +79 -71
- package/docs/en-GB/dictionary/content_file.md +1084 -0
- package/docs/en-GB/intlayer_CMS.md +4 -5
- package/docs/en-GB/intlayer_with_nestjs.md +268 -0
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en-GB/intlayer_with_react_router_v7.md +533 -0
- package/docs/en-GB/intlayer_with_tanstack.md +466 -299
- package/docs/en-GB/intlayer_with_vite+preact.md +7 -7
- package/docs/en-GB/intlayer_with_vite+react.md +7 -7
- package/docs/en-GB/intlayer_with_vite+vue.md +9 -9
- package/docs/en-GB/packages/vite-intlayer/index.md +3 -3
- package/docs/en-GB/readme.md +261 -0
- package/docs/en-GB/testing.md +200 -0
- package/docs/es/autoFill.md +45 -23
- package/docs/es/configuration.md +171 -167
- package/docs/es/dictionary/content_file.md +1088 -0
- package/docs/es/intlayer_CMS.md +4 -5
- package/docs/es/intlayer_with_nestjs.md +268 -0
- package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +533 -0
- package/docs/es/intlayer_with_tanstack.md +469 -280
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/es/packages/vite-intlayer/index.md +3 -3
- package/docs/es/readme.md +261 -0
- package/docs/es/testing.md +200 -0
- package/docs/fr/autoFill.md +47 -24
- package/docs/fr/configuration.md +213 -198
- package/docs/fr/dictionary/content_file.md +1054 -0
- package/docs/fr/intlayer_CMS.md +4 -5
- package/docs/fr/intlayer_with_nestjs.md +268 -0
- package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/fr/intlayer_with_react_router_v7.md +549 -0
- package/docs/fr/intlayer_with_tanstack.md +465 -279
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/packages/vite-intlayer/index.md +3 -3
- package/docs/fr/readme.md +261 -0
- package/docs/fr/testing.md +200 -0
- package/docs/hi/autoFill.md +47 -25
- package/docs/hi/configuration.md +194 -189
- package/docs/hi/dictionary/content_file.md +1056 -0
- package/docs/hi/intlayer_CMS.md +4 -5
- package/docs/hi/intlayer_with_nestjs.md +269 -0
- package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7.md +533 -0
- package/docs/hi/intlayer_with_tanstack.md +467 -282
- package/docs/hi/intlayer_with_vite+preact.md +7 -7
- package/docs/hi/intlayer_with_vite+react.md +7 -7
- package/docs/hi/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/packages/vite-intlayer/index.md +3 -3
- package/docs/hi/readme.md +261 -0
- package/docs/hi/testing.md +200 -0
- package/docs/it/autoFill.md +46 -24
- package/docs/it/configuration.md +169 -161
- package/docs/it/dictionary/content_file.md +1061 -0
- package/docs/it/intlayer_CMS.md +4 -5
- package/docs/it/intlayer_with_nestjs.md +268 -0
- package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/it/intlayer_with_react_router_v7.md +535 -0
- package/docs/it/intlayer_with_tanstack.md +467 -301
- package/docs/it/intlayer_with_vite+preact.md +7 -7
- package/docs/it/intlayer_with_vite+react.md +7 -7
- package/docs/it/intlayer_with_vite+vue.md +9 -9
- package/docs/it/packages/vite-intlayer/index.md +3 -3
- package/docs/it/readme.md +261 -0
- package/docs/it/testing.md +200 -0
- package/docs/ja/autoFill.md +45 -23
- package/docs/ja/configuration.md +243 -204
- package/docs/ja/dictionary/content_file.md +1064 -0
- package/docs/ja/intlayer_CMS.md +4 -5
- package/docs/ja/intlayer_with_nestjs.md +268 -0
- package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ja/intlayer_with_react_router_v7.md +534 -0
- package/docs/ja/intlayer_with_tanstack.md +467 -303
- package/docs/ja/intlayer_with_vite+preact.md +7 -7
- package/docs/ja/intlayer_with_vite+react.md +7 -7
- package/docs/ja/intlayer_with_vite+vue.md +9 -9
- package/docs/ja/packages/vite-intlayer/index.md +3 -3
- package/docs/ja/readme.md +263 -0
- package/docs/ja/testing.md +200 -0
- package/docs/ko/autoFill.md +39 -16
- package/docs/ko/configuration.md +217 -197
- package/docs/ko/dictionary/content_file.md +1060 -0
- package/docs/ko/intlayer_CMS.md +4 -5
- package/docs/ko/intlayer_with_nestjs.md +268 -0
- package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ko/intlayer_with_react_router_v7.md +540 -0
- package/docs/ko/intlayer_with_tanstack.md +466 -302
- package/docs/ko/intlayer_with_vite+preact.md +7 -7
- package/docs/ko/intlayer_with_vite+react.md +7 -7
- package/docs/ko/intlayer_with_vite+vue.md +9 -9
- package/docs/ko/packages/vite-intlayer/index.md +3 -3
- package/docs/ko/readme.md +261 -0
- package/docs/ko/testing.md +200 -0
- package/docs/pt/autoFill.md +39 -15
- package/docs/pt/configuration.md +165 -147
- package/docs/pt/dictionary/content_file.md +1062 -0
- package/docs/pt/intlayer_CMS.md +4 -5
- package/docs/pt/intlayer_with_nestjs.md +271 -0
- package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pt/intlayer_with_react_router_v7.md +535 -0
- package/docs/pt/intlayer_with_tanstack.md +469 -300
- package/docs/pt/intlayer_with_vite+preact.md +7 -7
- package/docs/pt/intlayer_with_vite+react.md +7 -7
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/pt/packages/vite-intlayer/index.md +3 -3
- package/docs/pt/readme.md +261 -0
- package/docs/pt/testing.md +200 -0
- package/docs/ru/autoFill.md +52 -30
- package/docs/ru/configuration.md +164 -117
- package/docs/ru/dictionary/content_file.md +1064 -0
- package/docs/ru/intlayer_CMS.md +4 -4
- package/docs/ru/intlayer_with_nestjs.md +270 -0
- package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ru/intlayer_with_react_router_v7.md +534 -0
- package/docs/ru/intlayer_with_tanstack.md +470 -305
- package/docs/ru/intlayer_with_vite+preact.md +7 -7
- package/docs/ru/intlayer_with_vite+react.md +7 -7
- package/docs/ru/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/packages/vite-intlayer/index.md +3 -3
- package/docs/ru/readme.md +261 -0
- package/docs/ru/testing.md +202 -0
- package/docs/tr/CI_CD.md +198 -0
- package/docs/tr/autoFill.md +201 -0
- package/docs/tr/configuration.md +585 -0
- package/docs/tr/dictionary/condition.md +243 -0
- package/docs/tr/dictionary/content_file.md +1055 -0
- package/docs/tr/dictionary/enumeration.md +251 -0
- package/docs/tr/dictionary/file.md +228 -0
- package/docs/tr/dictionary/function_fetching.md +218 -0
- package/docs/tr/dictionary/gender.md +279 -0
- package/docs/tr/dictionary/insertion.md +191 -0
- package/docs/tr/dictionary/markdown.md +385 -0
- package/docs/tr/dictionary/nesting.md +279 -0
- package/docs/tr/dictionary/translation.md +315 -0
- package/docs/tr/formatters.md +618 -0
- package/docs/tr/how_works_intlayer.md +254 -0
- package/docs/tr/index.md +168 -0
- package/docs/tr/interest_of_intlayer.md +288 -0
- package/docs/tr/intlayer_CMS.md +347 -0
- package/docs/tr/intlayer_cli.md +570 -0
- package/docs/tr/intlayer_visual_editor.md +269 -0
- package/docs/tr/intlayer_with_angular.md +694 -0
- package/docs/tr/intlayer_with_create_react_app.md +1218 -0
- package/docs/tr/intlayer_with_express.md +415 -0
- package/docs/tr/intlayer_with_lynx+react.md +511 -0
- package/docs/tr/intlayer_with_nestjs.md +268 -0
- package/docs/tr/intlayer_with_nextjs_14.md +1029 -0
- package/docs/tr/intlayer_with_nextjs_15.md +1506 -0
- package/docs/tr/intlayer_with_nextjs_page_router.md +1484 -0
- package/docs/tr/intlayer_with_nuxt.md +773 -0
- package/docs/tr/intlayer_with_react_native+expo.md +660 -0
- package/docs/tr/intlayer_with_react_router_v7.md +531 -0
- package/docs/tr/intlayer_with_tanstack.md +452 -0
- package/docs/tr/intlayer_with_vite+preact.md +1673 -0
- package/docs/tr/intlayer_with_vite+react.md +1632 -0
- package/docs/tr/intlayer_with_vite+solid.md +288 -0
- package/docs/tr/intlayer_with_vite+svelte.md +288 -0
- package/docs/tr/intlayer_with_vite+vue.md +1042 -0
- package/docs/tr/introduction.md +209 -0
- package/docs/tr/locale_mapper.md +244 -0
- package/docs/tr/mcp_server.md +207 -0
- package/docs/tr/packages/@intlayer/api/index.md +58 -0
- package/docs/tr/packages/@intlayer/chokidar/index.md +57 -0
- package/docs/tr/packages/@intlayer/cli/index.md +47 -0
- package/docs/tr/packages/@intlayer/config/index.md +142 -0
- package/docs/tr/packages/@intlayer/core/index.md +51 -0
- package/docs/tr/packages/@intlayer/design-system/index.md +47 -0
- package/docs/tr/packages/@intlayer/dictionary-entry/index.md +53 -0
- package/docs/tr/packages/@intlayer/editor/index.md +47 -0
- package/docs/tr/packages/@intlayer/editor-react/index.md +47 -0
- package/docs/tr/packages/@intlayer/webpack/index.md +61 -0
- package/docs/tr/packages/angular-intlayer/index.md +59 -0
- package/docs/tr/packages/express-intlayer/index.md +258 -0
- package/docs/tr/packages/express-intlayer/t.md +459 -0
- package/docs/tr/packages/intlayer/getConfiguration.md +151 -0
- package/docs/tr/packages/intlayer/getEnumeration.md +165 -0
- package/docs/tr/packages/intlayer/getHTMLTextDir.md +127 -0
- package/docs/tr/packages/intlayer/getLocaleLang.md +87 -0
- package/docs/tr/packages/intlayer/getLocaleName.md +124 -0
- package/docs/tr/packages/intlayer/getLocalizedUrl.md +324 -0
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +225 -0
- package/docs/tr/packages/intlayer/getPathWithoutLocale.md +81 -0
- package/docs/tr/packages/intlayer/getTranslation.md +196 -0
- package/docs/tr/packages/intlayer/getTranslationContent.md +195 -0
- package/docs/tr/packages/intlayer/index.md +505 -0
- package/docs/tr/packages/intlayer-cli/index.md +71 -0
- package/docs/tr/packages/intlayer-editor/index.md +139 -0
- package/docs/tr/packages/lynx-intlayer/index.md +85 -0
- package/docs/tr/packages/next-intlayer/index.md +154 -0
- package/docs/tr/packages/next-intlayer/t.md +354 -0
- package/docs/tr/packages/next-intlayer/useDictionary.md +270 -0
- package/docs/tr/packages/next-intlayer/useIntlayer.md +265 -0
- package/docs/tr/packages/next-intlayer/useLocale.md +133 -0
- package/docs/tr/packages/nuxt-intlayer/index.md +59 -0
- package/docs/tr/packages/preact-intlayer/index.md +55 -0
- package/docs/tr/packages/react-intlayer/index.md +148 -0
- package/docs/tr/packages/react-intlayer/t.md +304 -0
- package/docs/tr/packages/react-intlayer/useDictionary.md +554 -0
- package/docs/tr/packages/react-intlayer/useI18n.md +478 -0
- package/docs/tr/packages/react-intlayer/useIntlayer.md +253 -0
- package/docs/tr/packages/react-intlayer/useLocale.md +212 -0
- package/docs/tr/packages/react-native-intlayer/index.md +85 -0
- package/docs/tr/packages/react-scripts-intlayer/index.md +82 -0
- package/docs/tr/packages/solid-intlayer/index.md +56 -0
- package/docs/tr/packages/svelte-intlayer/index.md +55 -0
- package/docs/tr/packages/vite-intlayer/index.md +82 -0
- package/docs/tr/packages/vue-intlayer/index.md +59 -0
- package/docs/tr/per_locale_file.md +321 -0
- package/docs/tr/readme.md +261 -0
- package/docs/tr/roadmap.md +338 -0
- package/docs/tr/testing.md +200 -0
- package/docs/tr/vs_code_extension.md +154 -0
- package/docs/zh/autoFill.md +40 -18
- package/docs/zh/configuration.md +245 -226
- package/docs/zh/dictionary/content_file.md +1064 -0
- package/docs/zh/intlayer_CMS.md +4 -5
- package/docs/zh/intlayer_with_nestjs.md +268 -0
- package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +535 -0
- package/docs/zh/intlayer_with_tanstack.md +468 -278
- package/docs/zh/intlayer_with_vite+preact.md +7 -7
- package/docs/zh/intlayer_with_vite+react.md +7 -7
- package/docs/zh/intlayer_with_vite+vue.md +7 -7
- package/docs/zh/packages/vite-intlayer/index.md +3 -3
- package/docs/zh/readme.md +261 -0
- package/docs/zh/testing.md +198 -0
- package/frequent_questions/tr/SSR_Next_no_[locale].md +105 -0
- package/frequent_questions/tr/array_as_content_declaration.md +72 -0
- package/frequent_questions/tr/build_dictionaries.md +59 -0
- package/frequent_questions/tr/build_error_CI_CD.md +75 -0
- package/frequent_questions/tr/customized_locale_list.md +65 -0
- package/frequent_questions/tr/domain_routing.md +114 -0
- package/frequent_questions/tr/esbuild_error.md +30 -0
- package/frequent_questions/tr/get_locale_cookie.md +142 -0
- package/frequent_questions/tr/intlayer_command_undefined.md +156 -0
- package/frequent_questions/tr/locale_incorect_in_url.md +74 -0
- package/frequent_questions/tr/static_rendering.md +45 -0
- package/frequent_questions/tr/translated_path_url.md +56 -0
- package/frequent_questions/tr/unknown_command.md +98 -0
- package/legal/tr/privacy_notice.md +83 -0
- package/legal/tr/terms_of_service.md +55 -0
- package/package.json +12 -12
- package/src/generated/blog.entry.ts +212 -0
- package/src/generated/docs.entry.ts +663 -135
- package/src/generated/frequentQuestions.entry.ts +85 -1
- package/src/generated/legal.entry.ts +7 -1
- package/docs/ar/dictionary/content_extention_customization.md +0 -100
- package/docs/ar/dictionary/get_started.md +0 -527
- package/docs/de/dictionary/content_extention_customization.md +0 -100
- package/docs/de/dictionary/get_started.md +0 -531
- package/docs/en/dictionary/content_extention_customization.md +0 -102
- package/docs/en/dictionary/get_started.md +0 -529
- package/docs/en-GB/dictionary/content_extention_customization.md +0 -100
- package/docs/en-GB/dictionary/get_started.md +0 -591
- package/docs/es/dictionary/content_extention_customization.md +0 -100
- package/docs/es/dictionary/get_started.md +0 -527
- package/docs/fr/dictionary/content_extention_customization.md +0 -100
- package/docs/fr/dictionary/get_started.md +0 -527
- package/docs/hi/dictionary/content_extention_customization.md +0 -100
- package/docs/hi/dictionary/get_started.md +0 -527
- package/docs/it/dictionary/content_extention_customization.md +0 -113
- package/docs/it/dictionary/get_started.md +0 -573
- package/docs/ja/dictionary/content_extention_customization.md +0 -113
- package/docs/ja/dictionary/get_started.md +0 -576
- package/docs/ko/dictionary/content_extention_customization.md +0 -100
- package/docs/ko/dictionary/get_started.md +0 -530
- package/docs/pt/dictionary/content_extention_customization.md +0 -100
- package/docs/pt/dictionary/get_started.md +0 -532
- package/docs/ru/dictionary/content_extention_customization.md +0 -100
- package/docs/ru/dictionary/get_started.md +0 -575
- package/docs/zh/dictionary/content_extention_customization.md +0 -117
- package/docs/zh/dictionary/get_started.md +0 -533
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-09-04
|
|
3
|
+
updatedAt: 2025-09-04
|
|
4
|
+
title: 在 React Router v7 中使用 Intlayer 入门
|
|
5
|
+
description: 学习如何使用 Intlayer 为您的 React Router v7 应用添加国际化 (i18n)。按照本综合指南,使您的应用支持多语言和基于区域设置的路由。
|
|
6
|
+
keywords:
|
|
7
|
+
- 国际化
|
|
8
|
+
- 文档
|
|
9
|
+
- Intlayer
|
|
10
|
+
- React Router v7
|
|
11
|
+
- React
|
|
12
|
+
- i18n
|
|
13
|
+
- TypeScript
|
|
14
|
+
- 区域路由
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- environment
|
|
18
|
+
- vite-and-react
|
|
19
|
+
- react-router-v7
|
|
20
|
+
applicationTemplate: https://github.com/AydinTheFirst/react-router-intlayer
|
|
21
|
+
author: AydinTheFirst
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# 使用 Intlayer 和 React Router v7 开始国际化 (i18n)
|
|
25
|
+
|
|
26
|
+
本指南演示了如何在 React Router v7 项目中集成 **Intlayer**,实现无缝国际化,支持基于区域设置的路由、TypeScript 支持以及现代开发实践。
|
|
27
|
+
|
|
28
|
+
## 什么是 Intlayer?
|
|
29
|
+
|
|
30
|
+
**Intlayer** 是一个创新的开源国际化 (i18n) 库,旨在简化现代 Web 应用中的多语言支持。
|
|
31
|
+
|
|
32
|
+
使用 Intlayer,您可以:
|
|
33
|
+
|
|
34
|
+
- **通过组件级声明式字典轻松管理翻译**。
|
|
35
|
+
- **动态本地化元数据、路由和内容**。
|
|
36
|
+
- **通过自动生成的类型确保 TypeScript 支持,提升自动补全和错误检测能力**。
|
|
37
|
+
- **享受高级功能**,如动态区域设置检测和切换。
|
|
38
|
+
- **通过 React Router v7 的基于配置的路由系统启用区域设置感知路由**。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 在 React Router v7 应用中设置 Intlayer 的分步指南
|
|
43
|
+
|
|
44
|
+
### 第一步:安装依赖
|
|
45
|
+
|
|
46
|
+
使用你喜欢的包管理器安装必要的包:
|
|
47
|
+
|
|
48
|
+
```bash packageManager="npm"
|
|
49
|
+
npm install intlayer react-intlayer
|
|
50
|
+
npm install vite-intlayer --save-dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```bash packageManager="pnpm"
|
|
54
|
+
pnpm add intlayer react-intlayer
|
|
55
|
+
pnpm add vite-intlayer --save-dev
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- **intlayer**
|
|
59
|
+
|
|
60
|
+
- **intlayer**
|
|
61
|
+
|
|
62
|
+
提供国际化工具的核心包,用于配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/get_started.md)、转译以及[命令行工具](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_cli.md)。
|
|
63
|
+
|
|
64
|
+
- **react-intlayer**
|
|
65
|
+
将 Intlayer 集成到 React 应用中的包。它提供了用于 React 国际化的上下文提供者和钩子。
|
|
66
|
+
|
|
67
|
+
- **vite-intlayer**
|
|
68
|
+
包含用于将 Intlayer 集成到[Vite 打包工具](https://vite.dev/guide/why.html#why-bundle-for-production)的 Vite 插件,以及用于检测用户首选语言、管理 Cookie 和处理 URL 重定向的中间件。
|
|
69
|
+
|
|
70
|
+
### 第 2 步:项目配置
|
|
71
|
+
|
|
72
|
+
创建一个配置文件来配置您的应用程序语言:
|
|
73
|
+
|
|
74
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
75
|
+
import { type IntlayerConfig, Locales } from "intlayer";
|
|
76
|
+
|
|
77
|
+
const config: IntlayerConfig = {
|
|
78
|
+
internationalization: {
|
|
79
|
+
defaultLocale: Locales.ENGLISH,
|
|
80
|
+
locales: [Locales.ENGLISH, Locales.TURKISH],
|
|
81
|
+
},
|
|
82
|
+
middleware: {
|
|
83
|
+
prefixDefault: true, // 始终在 URL 中添加默认语言前缀
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export default config;
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
91
|
+
import { Locales } from "intlayer";
|
|
92
|
+
|
|
93
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
+
const config = {
|
|
95
|
+
internationalization: {
|
|
96
|
+
defaultLocale: Locales.ENGLISH,
|
|
97
|
+
locales: [Locales.ENGLISH, Locales.TURKISH],
|
|
98
|
+
},
|
|
99
|
+
middleware: {
|
|
100
|
+
prefixDefault: true,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export default config;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
108
|
+
const { Locales } = require("intlayer");
|
|
109
|
+
|
|
110
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
111
|
+
// 配置对象,定义国际化相关设置
|
|
112
|
+
const config = {
|
|
113
|
+
internationalization: {
|
|
114
|
+
defaultLocale: Locales.ENGLISH, // 默认语言为英语
|
|
115
|
+
locales: [Locales.ENGLISH, Locales.TURKISH], // 支持的语言列表:英语和土耳其语
|
|
116
|
+
},
|
|
117
|
+
middleware: {
|
|
118
|
+
prefixDefault: true, // 默认语言的 URL 也加前缀
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
module.exports = config;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
> 通过此配置文件,您可以设置本地化的 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
|
|
126
|
+
|
|
127
|
+
### 第3步:配置 React Router v7 路由
|
|
128
|
+
|
|
129
|
+
设置支持多语言的路由配置:
|
|
130
|
+
|
|
131
|
+
```typescript fileName="app/routes.ts" codeFormat="typescript"
|
|
132
|
+
import { layout, route, type RouteConfig } from "@react-router/dev/routes";
|
|
133
|
+
|
|
134
|
+
export default [
|
|
135
|
+
layout("routes/layout.tsx", [
|
|
136
|
+
route("/", "routes/page.tsx"), // 根页面 - 重定向到语言版本
|
|
137
|
+
route("/:lang", "routes/[lang]/page.tsx"), // 本地化首页
|
|
138
|
+
route("/:lang/about", "routes/[lang]/about/page.tsx"), // 本地化关于页面
|
|
139
|
+
]),
|
|
140
|
+
] satisfies RouteConfig;
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 第4步:在 Vite 配置中集成 Intlayer
|
|
144
|
+
|
|
145
|
+
将 intlayer 插件添加到你的配置中:
|
|
146
|
+
|
|
147
|
+
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
148
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
149
|
+
import { defineConfig } from "vite";
|
|
150
|
+
import { intlayerMiddlewarePlugin, intlayerPlugin } from "vite-intlayer";
|
|
151
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
152
|
+
|
|
153
|
+
export default defineConfig({
|
|
154
|
+
plugins: [
|
|
155
|
+
reactRouter(),
|
|
156
|
+
tsconfigPaths(),
|
|
157
|
+
intlayerPlugin(),
|
|
158
|
+
intlayerMiddlewarePlugin(),
|
|
159
|
+
],
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
> `intlayerPlugin()` 是用于将 Intlayer 集成到 Vite 中的插件。它确保内容声明文件的构建,并在开发模式下监视这些文件。它在 Vite 应用中定义了 Intlayer 的环境变量。此外,它还提供别名以优化性能。
|
|
164
|
+
|
|
165
|
+
### 第五步:创建布局组件
|
|
166
|
+
|
|
167
|
+
设置你的根布局和特定语言环境的布局:
|
|
168
|
+
|
|
169
|
+
#### 根布局
|
|
170
|
+
|
|
171
|
+
```tsx fileName="app/routes/layout.tsx" codeFormat="typescript"
|
|
172
|
+
tsx;
|
|
173
|
+
// app/routes/layout.tsx
|
|
174
|
+
import { Outlet } from "react-router";
|
|
175
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
176
|
+
|
|
177
|
+
export default function RootLayout() {
|
|
178
|
+
return (
|
|
179
|
+
<IntlayerProvider>
|
|
180
|
+
<Outlet />
|
|
181
|
+
</IntlayerProvider>
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 第6步:声明您的内容
|
|
187
|
+
|
|
188
|
+
创建并管理您的内容声明以存储翻译:
|
|
189
|
+
|
|
190
|
+
```tsx fileName="app/routes/[lang]/page.content.ts" contentDeclarationFormat="typescript"
|
|
191
|
+
import { t, type Dictionary } from "intlayer";
|
|
192
|
+
|
|
193
|
+
const pageContent = {
|
|
194
|
+
key: "page",
|
|
195
|
+
content: {
|
|
196
|
+
title: t({
|
|
197
|
+
en: "Welcome to React Router v7 + Intlayer",
|
|
198
|
+
tr: "React Router v7 + Intlayer'a Hoş Geldiniz",
|
|
199
|
+
}),
|
|
200
|
+
description: t({
|
|
201
|
+
en: "Build multilingual applications with ease using React Router v7 and Intlayer.",
|
|
202
|
+
tr: "使用 React Router v7 和 Intlayer 轻松构建多语言应用程序。",
|
|
203
|
+
}),
|
|
204
|
+
aboutLink: t({
|
|
205
|
+
en: "了解我们",
|
|
206
|
+
tr: "关于我们",
|
|
207
|
+
}),
|
|
208
|
+
homeLink: t({
|
|
209
|
+
en: "首页",
|
|
210
|
+
tr: "主页",
|
|
211
|
+
}),
|
|
212
|
+
},
|
|
213
|
+
} satisfies Dictionary;
|
|
214
|
+
|
|
215
|
+
export default pageContent;
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
> 您的内容声明可以在应用程序中的任何位置定义,只要它们被包含在 `contentDir` 目录中(默认是 `./app`)。并且文件扩展名需匹配内容声明文件扩展名(默认是 `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)。
|
|
219
|
+
|
|
220
|
+
> 更多详情,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/get_started.md)。
|
|
221
|
+
|
|
222
|
+
### 第7步:创建支持多语言的组件
|
|
223
|
+
|
|
224
|
+
创建一个 `LocalizedLink` 组件以实现基于语言环境的导航:
|
|
225
|
+
|
|
226
|
+
```tsx fileName="app/components/localized-link.tsx" codeFormat="typescript"
|
|
227
|
+
// app/components/localized-link.tsx
|
|
228
|
+
import { getLocalizedUrl } from "intlayer";
|
|
229
|
+
import { useLocale } from "react-intlayer";
|
|
230
|
+
import React from "react";
|
|
231
|
+
import { Link, useLocation } from "react-router";
|
|
232
|
+
|
|
233
|
+
type RouterLinkProps = React.ComponentProps<typeof Link>;
|
|
234
|
+
|
|
235
|
+
export default function LocalizedLink({ to, ...props }: RouterLinkProps) {
|
|
236
|
+
const { locale } = useLocale();
|
|
237
|
+
const location = useLocation();
|
|
238
|
+
|
|
239
|
+
const isExternal = (path: string) =>
|
|
240
|
+
/^([a-z][a-z0-9+.-]*:)?\/\//i.test(path) || path.startsWith("mailto:");
|
|
241
|
+
|
|
242
|
+
if (typeof to === "string") {
|
|
243
|
+
if (to.startsWith("/") && !isExternal(to)) {
|
|
244
|
+
return <Link to={getLocalizedUrl(to, locale)} {...props} />;
|
|
245
|
+
}
|
|
246
|
+
return <Link to={to} {...props} />;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (to && typeof to === "object") {
|
|
250
|
+
const pathname = (to as { pathname?: string }).pathname;
|
|
251
|
+
if (pathname && pathname.startsWith("/") && !isExternal(pathname)) {
|
|
252
|
+
return (
|
|
253
|
+
<Link
|
|
254
|
+
to={{ ...to, pathname: getLocalizedUrl(pathname, locale) }}
|
|
255
|
+
{...props}
|
|
256
|
+
/>
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
return <Link to={to} {...props} />;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return (
|
|
263
|
+
<Link
|
|
264
|
+
to={getLocalizedUrl(location.pathname + location.search, locale)}
|
|
265
|
+
{...props}
|
|
266
|
+
/>
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### 第8步:在您的页面中使用 Intlayer
|
|
272
|
+
|
|
273
|
+
在您的整个应用程序中访问内容字典:
|
|
274
|
+
|
|
275
|
+
#### 根重定向页面
|
|
276
|
+
|
|
277
|
+
```tsx fileName="app/routes/page.tsx" codeFormat="typescript"
|
|
278
|
+
// app/routes/page.tsx
|
|
279
|
+
import { useLocale } from "react-intlayer";
|
|
280
|
+
import { Navigate } from "react-router";
|
|
281
|
+
|
|
282
|
+
export default function Page() {
|
|
283
|
+
const { locale } = useLocale();
|
|
284
|
+
|
|
285
|
+
return <Navigate replace to={locale} />;
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
#### 本地化主页
|
|
290
|
+
|
|
291
|
+
```tsx fileName="app/routes/[lang]/page.tsx" codeFormat="typescript"
|
|
292
|
+
import { useIntlayer } from "react-intlayer";
|
|
293
|
+
import LocalizedLink from "~/components/localized-link";
|
|
294
|
+
|
|
295
|
+
export default function Page() {
|
|
296
|
+
const content = useIntlayer("page");
|
|
297
|
+
|
|
298
|
+
return (
|
|
299
|
+
<div style={{ padding: "2rem", textAlign: "center" }}>
|
|
300
|
+
<h1>{content.title}</h1>
|
|
301
|
+
<p>{content.description}</p>
|
|
302
|
+
<nav style={{ marginTop: "2rem" }}>
|
|
303
|
+
<LocalizedLink
|
|
304
|
+
to="/about"
|
|
305
|
+
style={{
|
|
306
|
+
display: "inline-block",
|
|
307
|
+
padding: "0.5rem 1rem",
|
|
308
|
+
backgroundColor: "#007bff",
|
|
309
|
+
color: "white",
|
|
310
|
+
textDecoration: "none",
|
|
311
|
+
borderRadius: "4px",
|
|
312
|
+
}}
|
|
313
|
+
>
|
|
314
|
+
{content.aboutLink}
|
|
315
|
+
</LocalizedLink>
|
|
316
|
+
</nav>
|
|
317
|
+
</div>
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
> 想了解更多关于 `useIntlayer` 钩子的内容,请参考[文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/react-intlayer/useIntlayer.md)。
|
|
323
|
+
|
|
324
|
+
### 第9步:创建语言切换组件
|
|
325
|
+
|
|
326
|
+
创建一个组件,允许用户切换语言:
|
|
327
|
+
|
|
328
|
+
```tsx fileName="app/components/locale-switcher.tsx" codeFormat="typescript"
|
|
329
|
+
import { getLocalizedUrl, getLocaleName } from "intlayer";
|
|
330
|
+
import { useLocale } from "react-intlayer";
|
|
331
|
+
import { useLocation, useNavigate } from "react-router";
|
|
332
|
+
|
|
333
|
+
export default function LocaleSwitcher() {
|
|
334
|
+
const { locale, availableLocales, setLocale } = useLocale();
|
|
335
|
+
const location = useLocation();
|
|
336
|
+
const navigate = useNavigate();
|
|
337
|
+
|
|
338
|
+
const handleLocaleChange = (newLocale: string) => {
|
|
339
|
+
const localizedUrl = getLocalizedUrl(
|
|
340
|
+
location.pathname + location.search,
|
|
341
|
+
newLocale
|
|
342
|
+
);
|
|
343
|
+
setLocale(newLocale);
|
|
344
|
+
navigate(localizedUrl);
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
return (
|
|
348
|
+
<div style={{ margin: "1rem 0" }}>
|
|
349
|
+
<label htmlFor="locale-select">选择语言: </label>
|
|
350
|
+
<select
|
|
351
|
+
id="locale-select"
|
|
352
|
+
value={locale}
|
|
353
|
+
onChange={(e) => handleLocaleChange(e.target.value)}
|
|
354
|
+
style={{ padding: "0.25rem", marginLeft: "0.5rem" }}
|
|
355
|
+
>
|
|
356
|
+
{availableLocales.map((availableLocale) => (
|
|
357
|
+
<option key={availableLocale} value={availableLocale}>
|
|
358
|
+
{getLocaleName(availableLocale)}
|
|
359
|
+
</option>
|
|
360
|
+
))}
|
|
361
|
+
</select>
|
|
362
|
+
</div>
|
|
363
|
+
);
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
> 想了解更多关于 `useLocale` 钩子的内容,请参考[文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/react-intlayer/useLocale.md)。
|
|
368
|
+
|
|
369
|
+
### 第10步:添加 HTML 属性管理(可选)
|
|
370
|
+
|
|
371
|
+
创建一个钩子来管理 HTML 的 lang 和 dir 属性:
|
|
372
|
+
|
|
373
|
+
```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
|
|
374
|
+
// app/hooks/useI18nHTMLAttributes.tsx
|
|
375
|
+
import { getHTMLTextDir } from "intlayer";
|
|
376
|
+
import { useEffect } from "react";
|
|
377
|
+
import { useLocale } from "react-intlayer";
|
|
378
|
+
|
|
379
|
+
export const useI18nHTMLAttributes = () => {
|
|
380
|
+
const { locale } = useLocale();
|
|
381
|
+
|
|
382
|
+
useEffect(() => {
|
|
383
|
+
document.documentElement.lang = locale;
|
|
384
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
385
|
+
}, [locale]);
|
|
386
|
+
};
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
然后在你的根组件中使用它:
|
|
390
|
+
|
|
391
|
+
```tsx fileName="app/root.tsx" codeFormat="typescript"
|
|
392
|
+
// app/routes/layout.tsx
|
|
393
|
+
import { Outlet } from "react-router";
|
|
394
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
395
|
+
|
|
396
|
+
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // 导入钩子
|
|
397
|
+
|
|
398
|
+
export default function RootLayout() {
|
|
399
|
+
useI18nHTMLAttributes(); // 调用钩子
|
|
400
|
+
|
|
401
|
+
return (
|
|
402
|
+
<IntlayerProvider>
|
|
403
|
+
<Outlet />
|
|
404
|
+
</IntlayerProvider>
|
|
405
|
+
);
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### 第11步:构建并运行你的应用程序
|
|
410
|
+
|
|
411
|
+
构建内容字典并运行您的应用程序:
|
|
412
|
+
|
|
413
|
+
```bash packageManager="npm"
|
|
414
|
+
# 构建 Intlayer 字典
|
|
415
|
+
npm run intlayer:build
|
|
416
|
+
|
|
417
|
+
# 启动开发服务器
|
|
418
|
+
npm run dev
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
```bash packageManager="pnpm"
|
|
422
|
+
# 构建 Intlayer 字典
|
|
423
|
+
pnpm intlayer:build
|
|
424
|
+
|
|
425
|
+
# 启动开发服务器
|
|
426
|
+
pnpm dev
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
```bash packageManager="yarn"
|
|
430
|
+
# 构建 Intlayer 字典
|
|
431
|
+
yarn intlayer:build
|
|
432
|
+
|
|
433
|
+
# 启动开发服务器
|
|
434
|
+
yarn dev
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### 第12步:配置 TypeScript(可选)
|
|
438
|
+
|
|
439
|
+
Intlayer 使用模块增强来利用 TypeScript 的优势,使您的代码库更健壮。
|
|
440
|
+
|
|
441
|
+
确保您的 TypeScript 配置包含自动生成的类型:
|
|
442
|
+
|
|
443
|
+
```json5 fileName="tsconfig.json"
|
|
444
|
+
{
|
|
445
|
+
compilerOptions: {
|
|
446
|
+
// ... 您现有的 TypeScript 配置
|
|
447
|
+
},
|
|
448
|
+
include: [
|
|
449
|
+
// ... 你现有的包含项
|
|
450
|
+
".intlayer/**/*.ts", // 包含自动生成的类型
|
|
451
|
+
],
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Git 配置
|
|
456
|
+
|
|
457
|
+
建议忽略 Intlayer 生成的文件。这样可以避免将它们提交到你的 Git 仓库。
|
|
458
|
+
|
|
459
|
+
为此,你可以在 `.gitignore` 文件中添加以下内容:
|
|
460
|
+
|
|
461
|
+
```plaintext fileName=".gitignore"
|
|
462
|
+
# 忽略 Intlayer 生成的文件
|
|
463
|
+
.intlayer
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
## 生产环境部署
|
|
469
|
+
|
|
470
|
+
部署你的应用时:
|
|
471
|
+
|
|
472
|
+
1. **构建你的应用:**
|
|
473
|
+
|
|
474
|
+
```bash
|
|
475
|
+
npm run build
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
2. **构建 Intlayer 字典:**
|
|
479
|
+
|
|
480
|
+
```bash
|
|
481
|
+
npm run intlayer:build
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
3. **如果在生产环境使用中间件,需将 `vite-intlayer` 移动到依赖中:**
|
|
485
|
+
```bash
|
|
486
|
+
npm install vite-intlayer --save
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
您的应用程序现在将支持:
|
|
490
|
+
|
|
491
|
+
- **URL 结构**:`/en`,`/en/about`,`/tr`,`/tr/about`
|
|
492
|
+
- 基于浏览器偏好的**自动语言环境检测**
|
|
493
|
+
- 使用 React Router v7 的**语言环境感知路由**
|
|
494
|
+
- 具有自动生成类型的**TypeScript 支持**
|
|
495
|
+
- 具有正确语言环境处理的**服务器端渲染**
|
|
496
|
+
|
|
497
|
+
## VS Code 扩展
|
|
498
|
+
|
|
499
|
+
为了提升您使用 Intlayer 的开发体验,您可以安装官方的 **Intlayer VS Code 扩展**。
|
|
500
|
+
|
|
501
|
+
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
502
|
+
|
|
503
|
+
该扩展提供:
|
|
504
|
+
|
|
505
|
+
- 翻译键的**自动补全**
|
|
506
|
+
- 缺失翻译的**实时错误检测**
|
|
507
|
+
- 翻译内容的**内联预览**
|
|
508
|
+
- **快速操作**,轻松创建和更新翻译。
|
|
509
|
+
|
|
510
|
+
有关如何使用该扩展的更多详细信息,请参阅[Intlayer VS Code 扩展文档](https://intlayer.org/doc/vs-code-extension)。
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## 深入了解
|
|
515
|
+
|
|
516
|
+
要进一步使用,您可以实现[可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)或使用[内容管理系统(CMS)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)将内容外部化。
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## 文档参考
|
|
521
|
+
|
|
522
|
+
- [Intlayer 文档](https://intlayer.org)
|
|
523
|
+
- [React Router v7 文档](https://reactrouter.com/)
|
|
524
|
+
- [useIntlayer 钩子](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/react-intlayer/useIntlayer.md)
|
|
525
|
+
- [useLocale 钩子](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/react-intlayer/useLocale.md)
|
|
526
|
+
- [内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/get_started.md)
|
|
527
|
+
- [配置](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)
|
|
528
|
+
|
|
529
|
+
本综合指南提供了将 Intlayer 与 React Router v7 集成所需的一切,支持完全国际化的应用程序,具备基于语言环境的路由和 TypeScript 支持。
|
|
530
|
+
|
|
531
|
+
## 文档历史
|
|
532
|
+
|
|
533
|
+
| 版本 | 日期 | 变更内容 |
|
|
534
|
+
| ----- | --------- | ------------------------- |
|
|
535
|
+
| 5.8.2 | 2025-09-4 | 新增 React Router v7 支持 |
|