@intlayer/docs 6.1.5 → 6.1.6
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/next-i18next_vs_next-intl_vs_intlayer.md +404 -173
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +262 -113
- package/blog/en/intlayer_with_next-i18next.mdx +431 -0
- package/blog/en/intlayer_with_next-intl.mdx +335 -0
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +463 -209
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +185 -71
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +36 -28
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/dist/cjs/generated/docs.entry.cjs +32 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +32 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/component_i18n.md +186 -0
- package/docs/ar/intlayer_with_angular.md +2 -2
- package/docs/ar/intlayer_with_astro.md +246 -0
- package/docs/ar/intlayer_with_create_react_app.md +3 -2
- package/docs/ar/intlayer_with_express.md +2 -2
- package/docs/ar/intlayer_with_nestjs.md +2 -2
- package/docs/ar/intlayer_with_nextjs_14.md +2 -2
- package/docs/ar/intlayer_with_nextjs_15.md +2 -2
- package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ar/intlayer_with_nuxt.md +2 -2
- package/docs/ar/intlayer_with_react_native+expo.md +11 -20
- package/docs/ar/intlayer_with_react_router_v7.md +195 -241
- package/docs/ar/intlayer_with_tanstack.md +198 -272
- package/docs/ar/intlayer_with_vite+preact.md +9 -9
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/ar/vs_code_extension.md +48 -109
- package/docs/de/component_i18n.md +186 -0
- package/docs/de/intlayer_with_angular.md +2 -2
- package/docs/de/intlayer_with_astro.md +246 -0
- package/docs/de/intlayer_with_create_react_app.md +2 -2
- package/docs/de/intlayer_with_express.md +2 -2
- package/docs/de/intlayer_with_nestjs.md +2 -2
- package/docs/de/intlayer_with_nextjs_14.md +2 -2
- package/docs/de/intlayer_with_nextjs_15.md +2 -2
- package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/de/intlayer_with_nuxt.md +2 -2
- package/docs/de/intlayer_with_react_native+expo.md +11 -20
- package/docs/de/intlayer_with_react_router_v7.md +193 -242
- package/docs/de/intlayer_with_tanstack.md +194 -266
- package/docs/de/intlayer_with_vite+preact.md +9 -9
- package/docs/de/intlayer_with_vite+react.md +9 -9
- package/docs/de/intlayer_with_vite+vue.md +11 -11
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/de/vs_code_extension.md +46 -107
- package/docs/en/component_i18n.md +186 -0
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/index.md +1 -1
- package/docs/en/intlayer_cli.md +1 -1
- package/docs/en/intlayer_with_angular.md +4 -4
- package/docs/en/intlayer_with_astro.md +246 -0
- package/docs/en/intlayer_with_create_react_app.md +4 -4
- package/docs/en/intlayer_with_express.md +3 -3
- package/docs/en/intlayer_with_lynx+react.md +1 -1
- package/docs/en/intlayer_with_nestjs.md +2 -2
- package/docs/en/intlayer_with_nextjs_14.md +31 -5
- package/docs/en/intlayer_with_nextjs_15.md +31 -5
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/en/intlayer_with_nuxt.md +4 -4
- package/docs/en/intlayer_with_react_native+expo.md +46 -24
- package/docs/en/intlayer_with_react_router_v7.md +164 -211
- package/docs/en/intlayer_with_tanstack.md +166 -241
- package/docs/en/intlayer_with_vite+preact.md +12 -12
- package/docs/en/intlayer_with_vite+react.md +12 -12
- package/docs/en/intlayer_with_vite+solid.md +2 -2
- package/docs/en/intlayer_with_vite+svelte.md +2 -2
- package/docs/en/intlayer_with_vite+vue.md +12 -12
- package/docs/en/introduction.md +1 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/react-intlayer/useI18n.md +1 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/en/releases/v6.md +1 -0
- package/docs/en/roadmap.md +1 -1
- package/docs/en/vs_code_extension.md +24 -114
- package/docs/en-GB/component_i18n.md +186 -0
- package/docs/en-GB/intlayer_with_angular.md +3 -3
- package/docs/en-GB/intlayer_with_astro.md +246 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
- package/docs/en-GB/intlayer_with_express.md +2 -2
- package/docs/en-GB/intlayer_with_nestjs.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
- package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/en-GB/intlayer_with_nuxt.md +2 -2
- package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
- package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
- package/docs/en-GB/intlayer_with_tanstack.md +174 -248
- package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
- package/docs/en-GB/intlayer_with_vite+react.md +9 -9
- package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
- package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/en-GB/vs_code_extension.md +42 -103
- package/docs/es/component_i18n.md +182 -0
- package/docs/es/intlayer_with_angular.md +2 -2
- package/docs/es/intlayer_with_astro.md +246 -0
- package/docs/es/intlayer_with_create_react_app.md +3 -2
- package/docs/es/intlayer_with_express.md +2 -2
- package/docs/es/intlayer_with_nextjs_14.md +2 -2
- package/docs/es/intlayer_with_nextjs_15.md +2 -2
- package/docs/es/intlayer_with_react_native+expo.md +11 -20
- package/docs/es/intlayer_with_react_router_v7.md +188 -232
- package/docs/es/intlayer_with_tanstack.md +203 -273
- 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/vs_code_extension.md +53 -114
- package/docs/fr/component_i18n.md +186 -0
- package/docs/fr/intlayer_with_angular.md +2 -2
- package/docs/fr/intlayer_with_astro.md +246 -0
- package/docs/fr/intlayer_with_create_react_app.md +3 -2
- package/docs/fr/intlayer_with_express.md +2 -2
- package/docs/fr/intlayer_with_nestjs.md +2 -2
- package/docs/fr/intlayer_with_nextjs_14.md +2 -2
- package/docs/fr/intlayer_with_react_native+expo.md +11 -20
- package/docs/fr/intlayer_with_react_router_v7.md +188 -248
- package/docs/fr/intlayer_with_tanstack.md +192 -265
- 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/vs_code_extension.md +50 -111
- package/docs/hi/component_i18n.md +186 -0
- package/docs/hi/intlayer_cli.md +1 -4
- package/docs/hi/intlayer_with_angular.md +2 -2
- package/docs/hi/intlayer_with_astro.md +246 -0
- package/docs/hi/intlayer_with_create_react_app.md +2 -2
- package/docs/hi/intlayer_with_express.md +2 -2
- package/docs/hi/intlayer_with_nestjs.md +2 -2
- package/docs/hi/intlayer_with_nextjs_14.md +2 -2
- package/docs/hi/intlayer_with_nextjs_15.md +2 -2
- package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/hi/intlayer_with_nuxt.md +2 -2
- package/docs/hi/intlayer_with_react_native+expo.md +11 -20
- package/docs/hi/intlayer_with_react_router_v7.md +199 -243
- package/docs/hi/intlayer_with_tanstack.md +210 -285
- package/docs/hi/intlayer_with_vite+preact.md +9 -9
- package/docs/hi/intlayer_with_vite+react.md +9 -9
- package/docs/hi/intlayer_with_vite+solid.md +1 -1
- package/docs/hi/intlayer_with_vite+vue.md +11 -11
- package/docs/hi/vs_code_extension.md +49 -110
- package/docs/it/component_i18n.md +186 -0
- package/docs/it/intlayer_with_angular.md +2 -2
- package/docs/it/intlayer_with_astro.md +246 -0
- package/docs/it/intlayer_with_create_react_app.md +3 -2
- package/docs/it/intlayer_with_express.md +2 -2
- package/docs/it/intlayer_with_nestjs.md +2 -2
- package/docs/it/intlayer_with_nextjs_14.md +2 -2
- package/docs/it/intlayer_with_nextjs_15.md +2 -2
- package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/it/intlayer_with_nuxt.md +2 -2
- package/docs/it/intlayer_with_react_native+expo.md +11 -21
- package/docs/it/intlayer_with_react_router_v7.md +195 -242
- package/docs/it/intlayer_with_tanstack.md +203 -267
- package/docs/it/intlayer_with_vite+preact.md +9 -9
- package/docs/it/intlayer_with_vite+react.md +13 -11
- package/docs/it/intlayer_with_vite+vue.md +11 -11
- package/docs/it/vs_code_extension.md +50 -111
- package/docs/ja/component_i18n.md +186 -0
- package/docs/ja/intlayer_with_angular.md +2 -2
- package/docs/ja/intlayer_with_astro.md +246 -0
- package/docs/ja/intlayer_with_create_react_app.md +3 -2
- package/docs/ja/intlayer_with_express.md +2 -2
- package/docs/ja/intlayer_with_nestjs.md +2 -2
- package/docs/ja/intlayer_with_nextjs_14.md +2 -2
- package/docs/ja/intlayer_with_nextjs_15.md +2 -2
- package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ja/intlayer_with_nuxt.md +2 -2
- package/docs/ja/intlayer_with_react_native+expo.md +18 -29
- package/docs/ja/intlayer_with_react_router_v7.md +204 -250
- package/docs/ja/intlayer_with_tanstack.md +218 -286
- package/docs/ja/intlayer_with_vite+preact.md +9 -9
- package/docs/ja/intlayer_with_vite+react.md +11 -11
- package/docs/ja/intlayer_with_vite+vue.md +11 -11
- package/docs/ja/vs_code_extension.md +50 -111
- package/docs/ko/component_i18n.md +186 -0
- package/docs/ko/intlayer_with_angular.md +2 -2
- package/docs/ko/intlayer_with_astro.md +246 -0
- package/docs/ko/intlayer_with_create_react_app.md +3 -2
- package/docs/ko/intlayer_with_express.md +2 -2
- package/docs/ko/intlayer_with_nestjs.md +2 -2
- package/docs/ko/intlayer_with_nextjs_14.md +2 -2
- package/docs/ko/intlayer_with_nextjs_15.md +2 -2
- package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ko/intlayer_with_nuxt.md +2 -2
- package/docs/ko/intlayer_with_react_native+expo.md +19 -28
- package/docs/ko/intlayer_with_react_router_v7.md +190 -244
- package/docs/ko/intlayer_with_tanstack.md +200 -270
- package/docs/ko/intlayer_with_vite+preact.md +9 -9
- package/docs/ko/intlayer_with_vite+react.md +9 -9
- package/docs/ko/intlayer_with_vite+vue.md +11 -11
- package/docs/ko/vs_code_extension.md +48 -109
- package/docs/pt/component_i18n.md +186 -0
- package/docs/pt/intlayer_with_angular.md +2 -2
- package/docs/pt/intlayer_with_astro.md +246 -0
- package/docs/pt/intlayer_with_create_react_app.md +3 -2
- package/docs/pt/intlayer_with_express.md +2 -2
- package/docs/pt/intlayer_with_nestjs.md +2 -2
- package/docs/pt/intlayer_with_nextjs_14.md +2 -2
- package/docs/pt/intlayer_with_nextjs_15.md +2 -2
- package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/pt/intlayer_with_nuxt.md +2 -2
- package/docs/pt/intlayer_with_react_native+expo.md +11 -20
- package/docs/pt/intlayer_with_react_router_v7.md +7 -13
- package/docs/pt/intlayer_with_tanstack.md +183 -258
- package/docs/pt/intlayer_with_vite+preact.md +9 -9
- package/docs/pt/intlayer_with_vite+react.md +9 -9
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/pt/vs_code_extension.md +46 -107
- package/docs/ru/component_i18n.md +186 -0
- package/docs/ru/intlayer_with_angular.md +2 -2
- package/docs/ru/intlayer_with_astro.md +246 -0
- package/docs/ru/intlayer_with_create_react_app.md +3 -2
- package/docs/ru/intlayer_with_express.md +2 -2
- package/docs/ru/intlayer_with_nestjs.md +2 -2
- package/docs/ru/intlayer_with_nextjs_14.md +2 -2
- package/docs/ru/intlayer_with_nextjs_15.md +2 -2
- package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ru/intlayer_with_nuxt.md +2 -2
- package/docs/ru/intlayer_with_react_native+expo.md +11 -20
- package/docs/ru/intlayer_with_react_router_v7.md +192 -238
- package/docs/ru/intlayer_with_tanstack.md +197 -269
- package/docs/ru/intlayer_with_vite+preact.md +9 -9
- package/docs/ru/intlayer_with_vite+react.md +9 -9
- package/docs/ru/intlayer_with_vite+vue.md +11 -11
- package/docs/ru/vs_code_extension.md +48 -109
- package/docs/tr/component_i18n.md +186 -0
- package/docs/tr/how_works_intlayer.md +1 -1
- package/docs/tr/index.md +1 -1
- package/docs/tr/intlayer_cli.md +1 -1
- package/docs/tr/intlayer_with_angular.md +4 -4
- package/docs/tr/intlayer_with_astro.md +246 -0
- package/docs/tr/intlayer_with_create_react_app.md +4 -4
- package/docs/tr/intlayer_with_express.md +3 -3
- package/docs/tr/intlayer_with_lynx+react.md +1 -1
- package/docs/tr/intlayer_with_nestjs.md +2 -2
- package/docs/tr/intlayer_with_nextjs_14.md +2 -2
- package/docs/tr/intlayer_with_nextjs_15.md +4 -4
- package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/tr/intlayer_with_nuxt.md +4 -4
- package/docs/tr/intlayer_with_react_native+expo.md +12 -21
- package/docs/tr/intlayer_with_react_router_v7.md +222 -267
- package/docs/tr/intlayer_with_tanstack.md +400 -303
- package/docs/tr/intlayer_with_vite+preact.md +12 -12
- package/docs/tr/intlayer_with_vite+react.md +12 -12
- package/docs/tr/intlayer_with_vite+solid.md +2 -2
- package/docs/tr/intlayer_with_vite+svelte.md +2 -2
- package/docs/tr/intlayer_with_vite+vue.md +12 -12
- package/docs/tr/introduction.md +1 -1
- package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
- package/docs/tr/roadmap.md +1 -1
- package/docs/tr/vs_code_extension.md +54 -115
- package/docs/zh/component_i18n.md +186 -0
- package/docs/zh/intlayer_with_angular.md +2 -2
- package/docs/zh/intlayer_with_astro.md +246 -0
- package/docs/zh/intlayer_with_create_react_app.md +3 -2
- package/docs/zh/intlayer_with_express.md +2 -2
- package/docs/zh/intlayer_with_nestjs.md +2 -2
- package/docs/zh/intlayer_with_nextjs_14.md +2 -2
- package/docs/zh/intlayer_with_nextjs_15.md +2 -2
- package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/zh/intlayer_with_nuxt.md +2 -2
- package/docs/zh/intlayer_with_react_native+expo.md +19 -28
- package/docs/zh/intlayer_with_react_router_v7.md +200 -248
- package/docs/zh/intlayer_with_tanstack.md +208 -283
- package/docs/zh/intlayer_with_vite+preact.md +9 -9
- package/docs/zh/intlayer_with_vite+react.md +9 -9
- package/docs/zh/intlayer_with_vite+vue.md +9 -9
- package/docs/zh/vs_code_extension.md +51 -105
- package/package.json +10 -10
- package/src/generated/docs.entry.ts +32 -0
|
@@ -1056,38 +1056,38 @@ const App = () => (
|
|
|
1056
1056
|
module.exports = App;
|
|
1057
1057
|
```
|
|
1058
1058
|
|
|
1059
|
-
Em paralelo, você também pode usar o `
|
|
1059
|
+
Em paralelo, você também pode usar o `intlayerMiddleware` para adicionar roteamento no lado do servidor à sua aplicação. Este plugin detectará automaticamente o locale atual com base na URL e definirá o cookie de locale apropriado. Se nenhum locale for especificado, o plugin determinará o locale mais adequado com base nas preferências de idioma do navegador do usuário. Se nenhum locale for detectado, ele redirecionará para o locale padrão.
|
|
1060
1060
|
|
|
1061
1061
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1062
1062
|
import { defineConfig } from "vite";
|
|
1063
1063
|
import preact from "@preact/preset-vite";
|
|
1064
|
-
import { intlayer,
|
|
1064
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1065
1065
|
|
|
1066
1066
|
// https://vitejs.dev/config/
|
|
1067
1067
|
export default defineConfig({
|
|
1068
|
-
plugins: [preact(), intlayer(),
|
|
1068
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1069
1069
|
});
|
|
1070
1070
|
```
|
|
1071
1071
|
|
|
1072
1072
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1073
1073
|
import { defineConfig } from "vite";
|
|
1074
1074
|
import preact from "@preact/preset-vite";
|
|
1075
|
-
import { intlayer,
|
|
1075
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1076
1076
|
|
|
1077
1077
|
// https://vitejs.dev/config/
|
|
1078
1078
|
export default defineConfig({
|
|
1079
|
-
plugins: [preact(), intlayer(),
|
|
1079
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1080
1080
|
});
|
|
1081
1081
|
```
|
|
1082
1082
|
|
|
1083
1083
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1084
1084
|
const { defineConfig } = require("vite");
|
|
1085
1085
|
const preact = require("@preact/preset-vite");
|
|
1086
|
-
const { intlayer,
|
|
1086
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
1087
1087
|
|
|
1088
1088
|
// https://vitejs.dev/config/
|
|
1089
1089
|
module.exports = defineConfig({
|
|
1090
|
-
plugins: [preact(), intlayer(),
|
|
1090
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1091
1091
|
});
|
|
1092
1092
|
```
|
|
1093
1093
|
|
|
@@ -1631,9 +1631,9 @@ module.exports = { LocalizedLink, checkIsExternalLink };
|
|
|
1631
1631
|
|
|
1632
1632
|
O Intlayer usa a ampliação de módulos para aproveitar os benefícios do TypeScript e tornar sua base de código mais robusta.
|
|
1633
1633
|
|
|
1634
|
-

|
|
1635
1635
|
|
|
1636
|
-

|
|
1637
1637
|
|
|
1638
1638
|
Garanta que sua configuração do TypeScript inclua os tipos gerados automaticamente.
|
|
1639
1639
|
|
|
@@ -1018,38 +1018,38 @@ const App = () => (
|
|
|
1018
1018
|
);
|
|
1019
1019
|
```
|
|
1020
1020
|
|
|
1021
|
-
Paralelamente, você também pode usar o `
|
|
1021
|
+
Paralelamente, você também pode usar o `intlayerMiddleware` para adicionar roteamento no lado do servidor à sua aplicação. Este plugin detectará automaticamente o idioma atual com base na URL e definirá o cookie de idioma apropriado. Se nenhum idioma for especificado, o plugin determinará o idioma mais adequado com base nas preferências de idioma do navegador do usuário. Se nenhum idioma for detectado, ele redirecionará para o idioma padrão.
|
|
1022
1022
|
|
|
1023
1023
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1024
1024
|
import { defineConfig } from "vite";
|
|
1025
1025
|
import react from "@vitejs/plugin-react-swc";
|
|
1026
|
-
import { intlayer,
|
|
1026
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1027
1027
|
|
|
1028
1028
|
// https://vitejs.dev/config/
|
|
1029
1029
|
export default defineConfig({
|
|
1030
|
-
plugins: [react(), intlayer(),
|
|
1030
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1031
1031
|
});
|
|
1032
1032
|
```
|
|
1033
1033
|
|
|
1034
1034
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1035
1035
|
import { defineConfig } from "vite";
|
|
1036
1036
|
import react from "@vitejs/plugin-react-swc";
|
|
1037
|
-
import { intlayer,
|
|
1037
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1038
1038
|
|
|
1039
1039
|
// https://vitejs.dev/config/
|
|
1040
1040
|
export default defineConfig({
|
|
1041
|
-
plugins: [react(), intlayer(),
|
|
1041
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1042
1042
|
});
|
|
1043
1043
|
```
|
|
1044
1044
|
|
|
1045
1045
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1046
1046
|
const { defineConfig } = require("vite");
|
|
1047
1047
|
const react = require("@vitejs/plugin-react-swc");
|
|
1048
|
-
const { intlayer,
|
|
1048
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
1049
1049
|
|
|
1050
1050
|
// https://vitejs.dev/config/
|
|
1051
1051
|
module.exports = defineConfig({
|
|
1052
|
-
plugins: [react(), intlayer(),
|
|
1052
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1053
1053
|
});
|
|
1054
1054
|
```
|
|
1055
1055
|
|
|
@@ -1583,9 +1583,9 @@ Ao integrar este componente `Link` em toda a sua aplicação, você mantém uma
|
|
|
1583
1583
|
|
|
1584
1584
|
O Intlayer utiliza a ampliação de módulos para aproveitar os benefícios do TypeScript e tornar sua base de código mais robusta.
|
|
1585
1585
|
|
|
1586
|
-

|
|
1587
1587
|
|
|
1588
|
-

|
|
1589
1589
|
|
|
1590
1590
|
Certifique-se de que sua configuração do TypeScript inclua os tipos gerados automaticamente.
|
|
1591
1591
|
|
|
@@ -670,46 +670,46 @@ import LocaleSwitcher from "@components/LocaleSwitcher.vue";
|
|
|
670
670
|
</template>
|
|
671
671
|
```
|
|
672
672
|
|
|
673
|
-
Paralelamente, você também pode usar o `
|
|
673
|
+
Paralelamente, você também pode usar o `intlayerMiddleware` para adicionar roteamento no lado do servidor à sua aplicação. Este plugin detectará automaticamente o idioma atual com base na URL e definirá o cookie de idioma apropriado. Se nenhum idioma for especificado, o plugin determinará o idioma mais adequado com base nas preferências de idioma do navegador do usuário. Se nenhum idioma for detectado, ele redirecionará para o idioma padrão.
|
|
674
674
|
|
|
675
675
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
676
676
|
import { defineConfig } from "vite";
|
|
677
677
|
import vue from "@vitejs/plugin-vue";
|
|
678
|
-
import { intlayer,
|
|
678
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
679
679
|
|
|
680
680
|
// https://vitejs.dev/config/
|
|
681
681
|
export default defineConfig({
|
|
682
|
-
plugins: [vue(), intlayer(),
|
|
682
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
683
683
|
});
|
|
684
684
|
```
|
|
685
685
|
|
|
686
686
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
687
687
|
import { defineConfig } from "vite";
|
|
688
688
|
import vue from "@vitejs/plugin-vue";
|
|
689
|
-
import { intlayer,
|
|
689
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
690
690
|
|
|
691
691
|
// https://vitejs.dev/config/
|
|
692
692
|
export default defineConfig({
|
|
693
|
-
plugins: [vue(), intlayer(),
|
|
693
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
694
694
|
});
|
|
695
695
|
```
|
|
696
696
|
|
|
697
697
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
698
698
|
const { defineConfig } = require("vite");
|
|
699
699
|
const vue = require("@vitejs/plugin-vue");
|
|
700
|
-
const { intlayer,
|
|
700
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
701
701
|
|
|
702
702
|
// https://vitejs.dev/config/
|
|
703
703
|
module.exports = defineConfig({
|
|
704
|
-
plugins: [vue(), intlayer(),
|
|
704
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
705
705
|
});
|
|
706
706
|
const { defineConfig } = require("vite");
|
|
707
707
|
const vue = require("@vitejs/plugin-vue");
|
|
708
|
-
const { intlayer,
|
|
708
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
709
709
|
|
|
710
710
|
// https://vitejs.dev/config/
|
|
711
711
|
module.exports = defineConfig({
|
|
712
|
-
plugins: [vue(), intlayer(),
|
|
712
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
713
713
|
});
|
|
714
714
|
```
|
|
715
715
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-17
|
|
3
|
-
updatedAt: 2025-09-
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
4
|
title: Extensão Oficial do VS Code
|
|
5
|
-
description: Aprenda a usar a extensão Intlayer no VS Code para
|
|
5
|
+
description: Aprenda a usar a extensão Intlayer no VS Code para melhorar seu fluxo de trabalho de desenvolvimento. Navegue rapidamente entre conteúdos localizados e gerencie seus dicionários de forma eficiente.
|
|
6
6
|
keywords:
|
|
7
7
|
- Extensão VS Code
|
|
8
8
|
- Intlayer
|
|
@@ -21,94 +21,38 @@ slugs:
|
|
|
21
21
|
|
|
22
22
|
## Visão Geral
|
|
23
23
|
|
|
24
|
-
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) é a extensão oficial do Visual Studio Code para **Intlayer**, projetada para melhorar a experiência do desenvolvedor ao trabalhar com conteúdo localizado em seus projetos.
|
|
24
|
+
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) é a extensão oficial do Visual Studio Code para o **Intlayer**, projetada para melhorar a experiência do desenvolvedor ao trabalhar com conteúdo localizado em seus projetos.
|
|
25
25
|
|
|
26
|
-

|
|
26
|
+

|
|
27
27
|
|
|
28
28
|
Link da extensão: [https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension)
|
|
29
29
|
|
|
30
30
|
## Funcionalidades
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+

|
|
33
33
|
|
|
34
|
-
**
|
|
35
|
-
**
|
|
36
|
-
**Suporte Multilíngue** – Suporta conteúdo localizado em diferentes idiomas.
|
|
37
|
-
**Integração com VS Code** – Integra-se suavemente com a navegação e a paleta de comandos do VS Code.
|
|
34
|
+
- **Navegação Instantânea** – Vá rapidamente para o arquivo de conteúdo correto ao clicar em uma chave `useIntlayer`.
|
|
35
|
+
- **Preencher Dicionários** – Preencha dicionários com conteúdo do seu projeto.
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+

|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
- **Acesso fácil aos comandos do Intlayer** – Construir, enviar, puxar, preencher e testar dicionários de conteúdo com facilidade.
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
- **Enviar Dicionários** – Faça upload do conteúdo mais recente do dicionário para o seu repositório.
|
|
45
|
-
- **Puxar Dicionários** – Sincronize o conteúdo mais recente do dicionário do seu repositório para o seu ambiente local.
|
|
46
|
-
- **Preencher Dicionários** – Popule os dicionários com conteúdo do seu projeto.
|
|
47
|
-
- **Testar Dicionários** – Identifique traduções faltantes ou incompletas.
|
|
41
|
+

|
|
48
42
|
|
|
49
|
-
|
|
43
|
+
- **Gerador de Declaração de Conteúdo** – Criar arquivos de conteúdo de dicionário em vários formatos (`.ts`, `.esm`, `.cjs`, `.json`).
|
|
50
44
|
|
|
51
|
-
|
|
45
|
+

|
|
52
46
|
|
|
53
|
-
|
|
47
|
+
- **Testar Dicionários** – Testar dicionários para traduções ausentes.
|
|
54
48
|
|
|
55
|
-
|
|
49
|
+

|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
const MyComponent = () => {
|
|
59
|
-
const { myTranslatedContent } = useIntlayer("my-component");
|
|
51
|
+
- **Mantenha seus dicionários atualizados** – Mantenha seus dicionários atualizados com o conteúdo mais recente do seu projeto.
|
|
60
52
|
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Arquivo gerado no formato TypeScript:
|
|
66
|
-
|
|
67
|
-
```tsx fileName="src/components/MyComponent/index.content.ts"
|
|
68
|
-
import { t, type Dictionary } from "intlayer";
|
|
69
|
-
|
|
70
|
-
const componentContent = {
|
|
71
|
-
key: "my-component",
|
|
72
|
-
content: {
|
|
73
|
-
myTranslatedContent: t({
|
|
74
|
-
en: "Hello World",
|
|
75
|
-
es: "Hola Mundo",
|
|
76
|
-
fr: "Bonjour le monde",
|
|
77
|
-
}),
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export default componentContent;
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Formatos disponíveis:
|
|
85
|
-
|
|
86
|
-
- **TypeScript (`.ts`)**
|
|
87
|
-
- **ES Module (`.esm`)**
|
|
88
|
-
- **CommonJS (`.cjs`)**
|
|
89
|
-
- **JSON (`.json`)**
|
|
90
|
-
|
|
91
|
-
### Aba Intlayer (Barra de Atividades)
|
|
53
|
+

|
|
92
54
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **Pesquisar**: Uma barra de pesquisa ao vivo para filtrar rapidamente os dicionários e seu conteúdo. Digitar atualiza os resultados instantaneamente.
|
|
96
|
-
- **Dicionários**: Uma visualização em árvore dos seus ambientes/projetos, chaves dos dicionários e os arquivos que contribuem com entradas. Você pode:
|
|
97
|
-
- Clicar em um arquivo para abri-lo no editor.
|
|
98
|
-
- Usar a barra de ferramentas para executar ações: Build, Pull, Push, Fill, Refresh, Test e Create Dictionary File.
|
|
99
|
-
- Usar o menu de contexto para ações específicas do item:
|
|
100
|
-
- Em um dicionário: Pull ou Push
|
|
101
|
-
- Em um arquivo: Fill Dictionary
|
|
102
|
-
- Quando você alternar de editor, a árvore revelará o arquivo correspondente se ele pertencer a um dicionário.
|
|
103
|
-
|
|
104
|
-
## Instalação
|
|
105
|
-
|
|
106
|
-
Você pode instalar o **Intlayer** diretamente no Marketplace do VS Code:
|
|
107
|
-
|
|
108
|
-
1. Abra o **VS Code**.
|
|
109
|
-
2. Vá para o **Marketplace de Extensões**.
|
|
110
|
-
3. Pesquise por **"Intlayer"**.
|
|
111
|
-
4. Clique em **Instalar**.
|
|
55
|
+
- **Aba Intlayer (Barra de Atividades)** – Navegue e pesquise dicionários em uma aba lateral dedicada com barra de ferramentas e ações de contexto (Construir, Puxar, Enviar, Preencher, Atualizar, Testar, Criar Arquivo).
|
|
112
56
|
|
|
113
57
|
## Uso
|
|
114
58
|
|
|
@@ -121,63 +65,58 @@ Você pode instalar o **Intlayer** diretamente no Marketplace do VS Code:
|
|
|
121
65
|
const content = useIntlayer("app");
|
|
122
66
|
```
|
|
123
67
|
|
|
124
|
-
3. **
|
|
68
|
+
3. **Clique com comando** (`⌘+Clique` no macOS) ou **Ctrl+Clique** (no Windows/Linux) na chave (por exemplo, `"app"`).
|
|
125
69
|
4. O VS Code abrirá automaticamente o arquivo de dicionário correspondente, por exemplo, `src/app.content.ts`.
|
|
126
70
|
|
|
127
|
-
### Gerenciando Dicionários de Conteúdo
|
|
128
|
-
|
|
129
71
|
### Aba Intlayer (Barra de Atividades)
|
|
130
72
|
|
|
131
|
-
Use a aba lateral para navegar e gerenciar
|
|
73
|
+
Use a aba lateral para navegar e gerenciar dicionários:
|
|
132
74
|
|
|
133
75
|
- Abra o ícone do Intlayer na Barra de Atividades.
|
|
134
76
|
- Em **Pesquisar**, digite para filtrar dicionários e entradas em tempo real.
|
|
135
77
|
- Em **Dicionários**, navegue por ambientes, dicionários e arquivos. Use a barra de ferramentas para Construir, Puxar, Enviar, Preencher, Atualizar, Testar e Criar Arquivo de Dicionário. Clique com o botão direito para ações de contexto (Puxar/Enviar em dicionários, Preencher em arquivos). O arquivo atual do editor é revelado automaticamente na árvore quando aplicável.
|
|
136
78
|
|
|
137
|
-
|
|
79
|
+
### Acessando os comandos
|
|
138
80
|
|
|
139
|
-
|
|
81
|
+
Você pode acessar os comandos a partir da **Paleta de Comandos**.
|
|
140
82
|
|
|
141
83
|
```sh
|
|
142
84
|
Cmd + Shift + P (macOS) / Ctrl + Shift + P (Windows/Linux)
|
|
143
85
|
```
|
|
144
86
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
1. Abra a **Paleta de Comandos**.
|
|
152
|
-
2. Pesquise por **Enviar Dicionários**.
|
|
153
|
-
3. Selecione os dicionários para enviar e confirme.
|
|
154
|
-
|
|
155
|
-
#### Puxando Dicionários
|
|
87
|
+
- **Construir Dicionários**
|
|
88
|
+
- **Enviar Dicionários**
|
|
89
|
+
- **Puxar Dicionários**
|
|
90
|
+
- **Preencher Dicionários**
|
|
91
|
+
- **Testar Dicionários**
|
|
92
|
+
- **Criar Arquivo de Dicionário**
|
|
156
93
|
|
|
157
|
-
|
|
94
|
+
### Carregando Variáveis de Ambiente
|
|
158
95
|
|
|
159
|
-
|
|
160
|
-
2. Procure por **Puxar Dicionários**.
|
|
161
|
-
3. Escolha os dicionários para puxar.
|
|
96
|
+
O Intlayer recomenda armazenar suas chaves de API de IA, assim como o ID e o segredo do cliente Intlayer, em variáveis de ambiente.
|
|
162
97
|
|
|
163
|
-
|
|
98
|
+
A extensão pode carregar variáveis de ambiente do seu espaço de trabalho para executar comandos do Intlayer com o contexto correto.
|
|
164
99
|
|
|
165
|
-
|
|
100
|
+
- **Ordem de carregamento (por prioridade)**: `.env.<env>.local` → `.env.<env>` → `.env.local` → `.env`
|
|
101
|
+
- **Não destrutivo**: valores existentes em `process.env` não são sobrescritos.
|
|
102
|
+
- **Escopo**: os arquivos são resolvidos a partir do diretório base configurado (padrão é a raiz do espaço de trabalho).
|
|
166
103
|
|
|
167
|
-
|
|
168
|
-
2. Procure por **Preencher Dicionários**.
|
|
169
|
-
3. Execute o comando para popular os dicionários.
|
|
104
|
+
#### Selecionando o ambiente ativo
|
|
170
105
|
|
|
171
|
-
|
|
106
|
+
- **Paleta de Comandos**: abra a paleta e execute `Intlayer: Select Environment`, depois escolha o ambiente (por exemplo, `development`, `staging`, `production`). A extensão tentará carregar o primeiro arquivo disponível na lista de prioridade acima e mostrará uma notificação como “Loaded env from .env.<env>.local”.
|
|
107
|
+
- **Configurações**: vá para `Settings → Extensions → Intlayer` e defina:
|
|
108
|
+
- **Environment**: o nome do ambiente usado para resolver arquivos `.env.<env>*`.
|
|
109
|
+
- (Opcional) **Env File**: um caminho explícito para um arquivo `.env`. Quando fornecido, ele tem precedência sobre a lista inferida.
|
|
172
110
|
|
|
173
|
-
|
|
111
|
+
#### Monorepos e diretórios personalizados
|
|
174
112
|
|
|
175
|
-
|
|
176
|
-
2. Procure por **Testar Dicionários**.
|
|
177
|
-
3. Revise os problemas relatados e corrija conforme necessário.
|
|
113
|
+
Se os seus arquivos `.env` estiverem fora da raiz do espaço de trabalho, defina o **Diretório Base** em `Configurações → Extensões → Intlayer`. O carregador irá procurar arquivos `.env` relativos a esse diretório.
|
|
178
114
|
|
|
179
115
|
## Histórico do Documento
|
|
180
116
|
|
|
181
|
-
| Versão | Data | Alterações
|
|
182
|
-
| ------ | ---------- |
|
|
183
|
-
|
|
|
117
|
+
| Versão | Data | Alterações |
|
|
118
|
+
| ------ | ---------- | ------------------------------------------ |
|
|
119
|
+
| 6.1.5 | 2025-09-30 | Adicionado gif de demonstração |
|
|
120
|
+
| 6.1.0 | 2025-09-24 | Adicionada seção de seleção de ambiente |
|
|
121
|
+
| 6.0.0 | 2025-09-22 | Aba Intlayer / Comandos Preencher & Testar |
|
|
122
|
+
| 5.5.10 | 2025-06-29 | Histórico inicial |
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: Сделать компонент многоязычным (i18n) в React и Next.js
|
|
5
|
+
description: Узнайте, как объявлять и получать локализованный контент для создания многоязычного компонента React или Next.js с помощью Intlayer.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- компонент
|
|
9
|
+
- react
|
|
10
|
+
- многоязычный
|
|
11
|
+
- next.js
|
|
12
|
+
- intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- component
|
|
16
|
+
- i18n
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
|
|
18
|
+
youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Как сделать компонент многоязычным (i18n) с Intlayer
|
|
22
|
+
|
|
23
|
+
В этом руководстве показаны минимальные шаги для создания многоязычного UI-компонента в двух популярных конфигурациях:
|
|
24
|
+
|
|
25
|
+
- React (Vite/SPA)
|
|
26
|
+
- Next.js (App Router)
|
|
27
|
+
|
|
28
|
+
Сначала вы объявите свой контент, затем получите его в своем компоненте.
|
|
29
|
+
|
|
30
|
+
## 1) Объявите ваш контент (общий для React и Next.js)
|
|
31
|
+
|
|
32
|
+
Создайте файл объявления контента рядом с вашим компонентом. Это позволяет держать переводы близко к месту их использования и обеспечивает типобезопасность.
|
|
33
|
+
|
|
34
|
+
```ts fileName="component.content.ts"
|
|
35
|
+
import { t, type Dictionary } from "intlayer";
|
|
36
|
+
|
|
37
|
+
const componentContent = {
|
|
38
|
+
key: "component-example",
|
|
39
|
+
content: {
|
|
40
|
+
title: t({
|
|
41
|
+
en: "Hello",
|
|
42
|
+
fr: "Bonjour",
|
|
43
|
+
es: "Hola",
|
|
44
|
+
}),
|
|
45
|
+
description: t({
|
|
46
|
+
en: "A multilingual React component",
|
|
47
|
+
fr: "Un composant React multilingue",
|
|
48
|
+
es: "Un componente React multilingüe",
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
} satisfies Dictionary;
|
|
52
|
+
|
|
53
|
+
export default componentContent;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Также поддерживается JSON, если вы предпочитаете конфигурационные файлы.
|
|
57
|
+
|
|
58
|
+
```json fileName="component.content.json"
|
|
59
|
+
{
|
|
60
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
61
|
+
"key": "component-example",
|
|
62
|
+
"content": {
|
|
63
|
+
"title": {
|
|
64
|
+
"nodeType": "translation",
|
|
65
|
+
"translation": { "en": "Hello", "fr": "Bonjour", "es": "Hola" }
|
|
66
|
+
},
|
|
67
|
+
"description": {
|
|
68
|
+
"nodeType": "translation",
|
|
69
|
+
"translation": {
|
|
70
|
+
"en": "A multilingual React component",
|
|
71
|
+
"fr": "Un composant React multilingue",
|
|
72
|
+
"es": "Un componente React multilingüe"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 2) Получение вашего контента
|
|
80
|
+
|
|
81
|
+
### Случай A — React приложение (Vite/SPA)
|
|
82
|
+
|
|
83
|
+
Стандартный подход: используйте `useIntlayer` для получения по ключу. Это позволяет компонентам оставаться легкими и типизированными.
|
|
84
|
+
|
|
85
|
+
```tsx fileName="ComponentExample.tsx"
|
|
86
|
+
import { useIntlayer } from "react-intlayer";
|
|
87
|
+
|
|
88
|
+
export function ComponentExample() {
|
|
89
|
+
const content = useIntlayer("component-example");
|
|
90
|
+
return (
|
|
91
|
+
<div>
|
|
92
|
+
<h1>{content.title}</h1>
|
|
93
|
+
<p>{content.description}</p>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Серверный рендеринг или использование вне провайдера: используйте `react-intlayer/server` и передавайте явный `locale` при необходимости.
|
|
100
|
+
|
|
101
|
+
```tsx fileName="ServerRenderedExample.tsx"
|
|
102
|
+
import { useIntlayer } from "react-intlayer/server";
|
|
103
|
+
|
|
104
|
+
export function ServerRenderedExample({ locale }: { locale: string }) {
|
|
105
|
+
const content = useIntlayer("component-example", locale);
|
|
106
|
+
return (
|
|
107
|
+
<>
|
|
108
|
+
<h1>{content.title}</h1>
|
|
109
|
+
<p>{content.description}</p>
|
|
110
|
+
</>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Альтернатива: `useDictionary` может читать весь объявленный объект, если вы предпочитаете размещать структуру непосредственно в месте вызова.
|
|
116
|
+
|
|
117
|
+
```tsx fileName="ComponentWithDictionary.tsx"
|
|
118
|
+
import { useDictionary } from "react-intlayer";
|
|
119
|
+
import componentContent from "./component.content";
|
|
120
|
+
|
|
121
|
+
export function ComponentWithDictionary() {
|
|
122
|
+
const { title, description } = useDictionary(componentContent);
|
|
123
|
+
return (
|
|
124
|
+
<div>
|
|
125
|
+
<h1>{title}</h1>
|
|
126
|
+
<p>{description}</p>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Случай B — Next.js (App Router)
|
|
133
|
+
|
|
134
|
+
Предпочитайте серверные компоненты для безопасности данных и производительности. Используйте `useIntlayer` из `next-intlayer/server` в серверных файлах и `useIntlayer` из `next-intlayer` в клиентских компонентах.
|
|
135
|
+
|
|
136
|
+
```tsx fileName="app/[locale]/example/ServerComponent.tsx"
|
|
137
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
138
|
+
|
|
139
|
+
export default function ServerComponent() {
|
|
140
|
+
const content = useIntlayer("component-example");
|
|
141
|
+
return (
|
|
142
|
+
<>
|
|
143
|
+
<h1>{content.title}</h1>
|
|
144
|
+
<p>{content.description}</p>
|
|
145
|
+
</>
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```tsx fileName="app/[locale]/example/ClientComponent.tsx"
|
|
151
|
+
"use client";
|
|
152
|
+
|
|
153
|
+
import { useIntlayer } from "next-intlayer";
|
|
154
|
+
|
|
155
|
+
export function ClientComponent() {
|
|
156
|
+
const content = useIntlayer("component-example");
|
|
157
|
+
return (
|
|
158
|
+
<div>
|
|
159
|
+
<h1>{content.title}</h1>
|
|
160
|
+
<p>{content.description}</p>
|
|
161
|
+
</div>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Совет: Для метаданных страницы и SEO вы также можете получать контент с помощью `getIntlayer` и генерировать многоязычные URL с помощью `getMultilingualUrls`.
|
|
167
|
+
|
|
168
|
+
## Почему подход Intlayer к компонентам лучший
|
|
169
|
+
|
|
170
|
+
- **Совмещение**: Объявления контента находятся рядом с компонентами, что снижает рассогласование и улучшает повторное использование в дизайн-системах.
|
|
171
|
+
- **Типобезопасность**: Ключи и структуры строго типизированы; отсутствующие переводы выявляются на этапе сборки, а не во время выполнения.
|
|
172
|
+
- **Server-first**: Работает нативно в серверных компонентах для лучшей безопасности и производительности; клиентские хуки остаются эргономичными.
|
|
173
|
+
- **Tree-shaking**: В бандл включается только контент, используемый компонентом, что позволяет сохранять размер payload небольшим в больших приложениях.
|
|
174
|
+
- **DX и инструменты**: Встроенный middleware, помощники SEO и опциональные Визуальный редактор/AI-переводы упрощают повседневную работу.
|
|
175
|
+
|
|
176
|
+
Смотрите сравнения и шаблоны в обзоре, ориентированном на Next.js: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
177
|
+
|
|
178
|
+
## Связанные руководства и ссылки
|
|
179
|
+
|
|
180
|
+
- Настройка React (Vite): https://intlayer.org/doc/environment/vite-and-react
|
|
181
|
+
- React Router v7: https://intlayer.org/doc/environment/vite-and-react/react-router-v7
|
|
182
|
+
- TanStack Start: https://intlayer.org/doc/environment/vite-and-react/tanstack-start
|
|
183
|
+
- Настройка Next.js: https://intlayer.org/doc/environment/nextjs
|
|
184
|
+
- Почему Intlayer вместо next-intl или next-i18next: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
185
|
+
|
|
186
|
+
Эти страницы включают полную настройку, провайдеры, маршрутизацию и помощники SEO.
|
|
@@ -664,9 +664,9 @@ export const appConfig: ApplicationConfig = {
|
|
|
664
664
|
|
|
665
665
|
Intlayer использует расширение модулей (module augmentation), чтобы использовать преимущества TypeScript и сделать ваш код более надежным.
|
|
666
666
|
|
|
667
|
-

|
|
668
668
|
|
|
669
|
-

|
|
670
670
|
|
|
671
671
|
Убедитесь, что ваша конфигурация TypeScript включает автогенерируемые типы.
|
|
672
672
|
|