@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
|
@@ -1050,38 +1050,38 @@ const App = () => (
|
|
|
1050
1050
|
module.exports = App;
|
|
1051
1051
|
```
|
|
1052
1052
|
|
|
1053
|
-
Parallel dazu können Sie auch das `
|
|
1053
|
+
Parallel dazu können Sie auch das `intlayerMiddleware` verwenden, um serverseitiges Routing zu Ihrer Anwendung hinzuzufügen. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die am besten geeignete Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wenn keine Locale erkannt wird, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
1054
1054
|
|
|
1055
1055
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1056
1056
|
import { defineConfig } from "vite";
|
|
1057
1057
|
import preact from "@preact/preset-vite";
|
|
1058
|
-
import { intlayer,
|
|
1058
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1059
1059
|
|
|
1060
1060
|
// https://vitejs.dev/config/
|
|
1061
1061
|
export default defineConfig({
|
|
1062
|
-
plugins: [preact(), intlayer(),
|
|
1062
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1063
1063
|
});
|
|
1064
1064
|
```
|
|
1065
1065
|
|
|
1066
1066
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1067
1067
|
import { defineConfig } from "vite";
|
|
1068
1068
|
import preact from "@preact/preset-vite";
|
|
1069
|
-
import { intlayer,
|
|
1069
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1070
1070
|
|
|
1071
1071
|
// https://vitejs.dev/config/
|
|
1072
1072
|
export default defineConfig({
|
|
1073
|
-
plugins: [preact(), intlayer(),
|
|
1073
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1074
1074
|
});
|
|
1075
1075
|
```
|
|
1076
1076
|
|
|
1077
1077
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1078
1078
|
const { defineConfig } = require("vite");
|
|
1079
1079
|
const preact = require("@preact/preset-vite");
|
|
1080
|
-
const { intlayer,
|
|
1080
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
1081
1081
|
|
|
1082
1082
|
// https://vitejs.dev/config/
|
|
1083
1083
|
module.exports = defineConfig({
|
|
1084
|
-
plugins: [preact(), intlayer(),
|
|
1084
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1085
1085
|
});
|
|
1086
1086
|
```
|
|
1087
1087
|
|
|
@@ -1627,9 +1627,9 @@ module.exports = { LocalizedLink, checkIsExternalLink };
|
|
|
1627
1627
|
|
|
1628
1628
|
Intlayer verwendet Module Augmentation, um die Vorteile von TypeScript zu nutzen und Ihren Code robuster zu machen.
|
|
1629
1629
|
|
|
1630
|
-

|
|
1631
1631
|
|
|
1632
|
-

|
|
1633
1633
|
|
|
1634
1634
|
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen enthält.
|
|
1635
1635
|
|
|
@@ -1016,38 +1016,38 @@ const App = () => (
|
|
|
1016
1016
|
);
|
|
1017
1017
|
```
|
|
1018
1018
|
|
|
1019
|
-
Parallel dazu können Sie auch das `
|
|
1019
|
+
Parallel dazu können Sie auch das `intlayerMiddleware` verwenden, um serverseitiges Routing in Ihre Anwendung zu integrieren. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die passendste Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wird keine Locale erkannt, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
1020
1020
|
|
|
1021
1021
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1022
1022
|
import { defineConfig } from "vite";
|
|
1023
1023
|
import react from "@vitejs/plugin-react-swc";
|
|
1024
|
-
import { intlayer,
|
|
1024
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1025
1025
|
|
|
1026
1026
|
// https://vitejs.dev/config/
|
|
1027
1027
|
export default defineConfig({
|
|
1028
|
-
plugins: [react(), intlayer(),
|
|
1028
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1029
1029
|
});
|
|
1030
1030
|
```
|
|
1031
1031
|
|
|
1032
1032
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1033
1033
|
import { defineConfig } from "vite";
|
|
1034
1034
|
import react from "@vitejs/plugin-react-swc";
|
|
1035
|
-
import { intlayer,
|
|
1035
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1036
1036
|
|
|
1037
1037
|
// https://vitejs.dev/config/
|
|
1038
1038
|
export default defineConfig({
|
|
1039
|
-
plugins: [react(), intlayer(),
|
|
1039
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1040
1040
|
});
|
|
1041
1041
|
```
|
|
1042
1042
|
|
|
1043
1043
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1044
1044
|
const { defineConfig } = require("vite");
|
|
1045
1045
|
const react = require("@vitejs/plugin-react-swc");
|
|
1046
|
-
const { intlayer,
|
|
1046
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
1047
1047
|
|
|
1048
1048
|
// https://vitejs.dev/config/
|
|
1049
1049
|
module.exports = defineConfig({
|
|
1050
|
-
plugins: [react(), intlayer(),
|
|
1050
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1051
1051
|
});
|
|
1052
1052
|
```
|
|
1053
1053
|
|
|
@@ -1615,9 +1615,9 @@ Indem Sie diese `Link`-Komponente in Ihrer gesamten Anwendung integrieren, gewä
|
|
|
1615
1615
|
|
|
1616
1616
|
Intlayer verwendet Module Augmentation, um die Vorteile von TypeScript zu nutzen und Ihren Codebasis robuster zu machen.
|
|
1617
1617
|
|
|
1618
|
-

|
|
1619
1619
|
|
|
1620
|
-

|
|
1621
1621
|
|
|
1622
1622
|
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen einschließt.
|
|
1623
1623
|
|
|
@@ -698,46 +698,46 @@ import LocaleSwitcher from "@components/LocaleSwitcher.vue";
|
|
|
698
698
|
</template>
|
|
699
699
|
```
|
|
700
700
|
|
|
701
|
-
Parallel dazu können Sie auch das `
|
|
701
|
+
Parallel dazu können Sie auch das `intlayerMiddleware` verwenden, um serverseitiges Routing zu Ihrer Anwendung hinzuzufügen. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die am besten geeignete Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wenn keine Locale erkannt wird, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
702
702
|
|
|
703
703
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
704
704
|
import { defineConfig } from "vite";
|
|
705
705
|
import vue from "@vitejs/plugin-vue";
|
|
706
|
-
import { intlayer,
|
|
706
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
707
707
|
|
|
708
708
|
// https://vitejs.dev/config/
|
|
709
709
|
export default defineConfig({
|
|
710
|
-
plugins: [vue(), intlayer(),
|
|
710
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
711
711
|
});
|
|
712
712
|
```
|
|
713
713
|
|
|
714
714
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
715
715
|
import { defineConfig } from "vite";
|
|
716
716
|
import vue from "@vitejs/plugin-vue";
|
|
717
|
-
import { intlayer,
|
|
717
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
718
718
|
|
|
719
719
|
// https://vitejs.dev/config/
|
|
720
720
|
export default defineConfig({
|
|
721
|
-
plugins: [vue(), intlayer(),
|
|
721
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
722
722
|
});
|
|
723
723
|
```
|
|
724
724
|
|
|
725
725
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
726
726
|
const { defineConfig } = require("vite");
|
|
727
727
|
const vue = require("@vitejs/plugin-vue");
|
|
728
|
-
const { intlayer,
|
|
728
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
729
729
|
|
|
730
730
|
// https://vitejs.dev/config/
|
|
731
731
|
module.exports = defineConfig({
|
|
732
|
-
plugins: [vue(), intlayer(),
|
|
732
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
733
733
|
});
|
|
734
734
|
const { defineConfig } = require("vite");
|
|
735
735
|
const vue = require("@vitejs/plugin-vue");
|
|
736
|
-
const { intlayer,
|
|
736
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
737
737
|
|
|
738
738
|
// https://vitejs.dev/config/
|
|
739
739
|
module.exports = defineConfig({
|
|
740
|
-
plugins: [vue(), intlayer(),
|
|
740
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
741
741
|
});
|
|
742
742
|
```
|
|
743
743
|
|
|
@@ -1042,9 +1042,9 @@ const { myMarkdownContent } = useIntlayer("my-component");
|
|
|
1042
1042
|
|
|
1043
1043
|
Intlayer verwendet Module Augmentation, um die Vorteile von TypeScript zu nutzen und Ihren Code robuster zu machen.
|
|
1044
1044
|
|
|
1045
|
-

|
|
1046
1046
|
|
|
1047
|
-

|
|
1048
1048
|
|
|
1049
1049
|
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen einschließt.
|
|
1050
1050
|
|
|
@@ -53,17 +53,17 @@ Sehen Sie ein Beispiel, wie Sie die Plugins in Ihre Vite-Konfiguration einbinden
|
|
|
53
53
|
|
|
54
54
|
```typescript fileName="vite.config.ts"
|
|
55
55
|
import { defineConfig } from "vite";
|
|
56
|
-
import { intlayer,
|
|
56
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
57
57
|
|
|
58
58
|
// https://vitejs.dev/config/
|
|
59
59
|
export default defineConfig({
|
|
60
|
-
plugins: [intlayer(),
|
|
60
|
+
plugins: [intlayer(), intlayerMiddleware()],
|
|
61
61
|
});
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
> Das `intlayer()` Vite-Plugin wird verwendet, um Intlayer in Vite zu integrieren. Es sorgt für den Aufbau von Inhaltsdeklarationsdateien und überwacht diese im Entwicklungsmodus. Es definiert Intlayer-Umgebungsvariablen innerhalb der Vite-Anwendung. Zusätzlich stellt es Aliase bereit, um die Leistung zu optimieren.
|
|
65
65
|
|
|
66
|
-
> Das `
|
|
66
|
+
> Das `intlayerMiddleware()` fügt Ihrer Anwendung serverseitiges Routing hinzu. Dieses Plugin erkennt automatisch die aktuelle Sprache basierend auf der URL und setzt das entsprechende Sprach-Cookie. Wenn keine Sprache angegeben ist, bestimmt das Plugin die am besten geeignete Sprache basierend auf den Spracheinstellungen des Browsers des Benutzers. Wenn keine Sprache erkannt wird, erfolgt eine Weiterleitung zur Standardsprache.
|
|
67
67
|
|
|
68
68
|
## Beherrschen der Internationalisierung Ihrer Vite-Anwendung
|
|
69
69
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-17
|
|
3
|
-
updatedAt: 2025-09-
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
4
|
title: Offizielle VS Code Erweiterung
|
|
5
5
|
description: Erfahren Sie, wie Sie die Intlayer-Erweiterung in VS Code verwenden, um Ihren Entwicklungsworkflow zu verbessern. Navigieren Sie schnell zwischen lokalisierten Inhalten und verwalten Sie Ihre Wörterbücher effizient.
|
|
6
6
|
keywords:
|
|
@@ -21,94 +21,38 @@ slugs:
|
|
|
21
21
|
|
|
22
22
|
## Übersicht
|
|
23
23
|
|
|
24
|
-
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) ist die offizielle Visual Studio Code Erweiterung für **Intlayer**, die
|
|
24
|
+
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) ist die offizielle Visual Studio Code Erweiterung für **Intlayer**, die entwickelt wurde, um die Entwicklererfahrung beim Arbeiten mit lokalisierten Inhalten in Ihren Projekten zu verbessern.
|
|
25
25
|
|
|
26
|
-

|
|
26
|
+

|
|
27
27
|
|
|
28
28
|
Erweiterungslink: [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
|
## Funktionen
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+

|
|
33
33
|
|
|
34
|
-
**
|
|
35
|
-
**Nahtlose Integration** – Funktioniert mühelos mit **react-intlayer** und **next-intlayer** Projekten.
|
|
36
|
-
**Mehrsprachige Unterstützung** – Unterstützt lokalisierte Inhalte in verschiedenen Sprachen.
|
|
37
|
-
**VS Code Integration** – Integriert sich reibungslos in die Navigation und die Befehlspalette von VS Code.
|
|
38
|
-
|
|
39
|
-
### Befehle zur Verwaltung von Wörterbüchern
|
|
40
|
-
|
|
41
|
-
Verwalten Sie Ihre Inhaltswörterbücher direkt aus VS Code:
|
|
42
|
-
|
|
43
|
-
- **Wörterbücher erstellen** – Generieren Sie Inhaltsdateien basierend auf Ihrer Projektstruktur.
|
|
44
|
-
- **Wörterbücher hochladen** – Laden Sie die neuesten Wörterbuchinhalte in Ihr Repository hoch.
|
|
45
|
-
- **Wörterbücher herunterladen** – Synchronisieren Sie die neuesten Wörterbuchinhalte aus Ihrem Repository mit Ihrer lokalen Umgebung.
|
|
34
|
+
- **Sofortige Navigation** – Schneller Sprung zur richtigen Inhaltsdatei beim Klicken auf einen `useIntlayer`-Schlüssel.
|
|
46
35
|
- **Wörterbücher füllen** – Füllen Sie Wörterbücher mit Inhalten aus Ihrem Projekt.
|
|
47
|
-
- **Wörterbücher testen** – Erkennen Sie fehlende oder unvollständige Übersetzungen.
|
|
48
|
-
|
|
49
|
-
### Generator für Inhaltsdeklarationen
|
|
50
|
-
|
|
51
|
-
Erstellen Sie einfach strukturierte Wörterbuchdateien in verschiedenen Formaten:
|
|
52
36
|
|
|
53
|
-
|
|
37
|
+

|
|
54
38
|
|
|
55
|
-
|
|
39
|
+
- **Einfacher Zugriff auf Intlayer-Befehle** – Erstellen, pushen, pullen, füllen und testen Sie Inhaltswörterbücher mühelos.
|
|
56
40
|
|
|
57
|
-
|
|
58
|
-
const MyComponent = () => {
|
|
59
|
-
const { myTranslatedContent } = useIntlayer("my-component");
|
|
41
|
+

|
|
60
42
|
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Generierte Datei im TypeScript-Format:
|
|
43
|
+
- **Generator für Inhaltsdeklarationen** – Erstellen Sie Wörterbuch-Inhaltsdateien in verschiedenen Formaten (`.ts`, `.esm`, `.cjs`, `.json`).
|
|
66
44
|
|
|
67
|
-
|
|
68
|
-
import { t, type Dictionary } from "intlayer";
|
|
45
|
+

|
|
69
46
|
|
|
70
|
-
|
|
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
|
-
};
|
|
47
|
+
- **Wörterbücher testen** – Testen Sie Wörterbücher auf fehlende Übersetzungen.
|
|
80
48
|
|
|
81
|
-
|
|
82
|
-
```
|
|
49
|
+

|
|
83
50
|
|
|
84
|
-
|
|
51
|
+
- **Halten Sie Ihre Wörterbücher aktuell** – Halten Sie Ihre Wörterbücher mit den neuesten Inhalten aus Ihrem Projekt auf dem neuesten Stand.
|
|
85
52
|
|
|
86
|
-
-
|
|
87
|
-
- **ES Modul (`.esm`)**
|
|
88
|
-
- **CommonJS (`.cjs`)**
|
|
89
|
-
- **JSON (`.json`)**
|
|
90
|
-
|
|
91
|
-
### Intlayer-Tab (Aktivitätsleiste)
|
|
53
|
+

|
|
92
54
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **Suche**: Eine Live-Suchleiste, um Wörterbücher und deren Inhalte schnell zu filtern. Das Tippen aktualisiert die Ergebnisse sofort.
|
|
96
|
-
- **Wörterbücher**: Eine Baumansicht Ihrer Umgebungen/Projekte, Wörterbuchschlüssel und der Dateien, die Einträge beitragen. Sie können:
|
|
97
|
-
- Auf eine Datei klicken, um sie im Editor zu öffnen.
|
|
98
|
-
- Die Symbolleiste verwenden, um Aktionen auszuführen: Build, Pull, Push, Fill, Refresh, Test und Create Dictionary File.
|
|
99
|
-
- Das Kontextmenü für spezifische Aktionen verwenden:
|
|
100
|
-
- Auf einem Wörterbuch: Pull oder Push
|
|
101
|
-
- Auf einer Datei: Wörterbuch füllen
|
|
102
|
-
- Beim Wechseln der Editoren zeigt der Baum die passende Datei an, wenn sie zu einem Wörterbuch gehört.
|
|
103
|
-
|
|
104
|
-
## Installation
|
|
105
|
-
|
|
106
|
-
Sie können **Intlayer** direkt aus dem VS Code Marketplace installieren:
|
|
107
|
-
|
|
108
|
-
1. Öffnen Sie **VS Code**.
|
|
109
|
-
2. Gehen Sie zum **Extensions Marketplace**.
|
|
110
|
-
3. Suchen Sie nach **"Intlayer"**.
|
|
111
|
-
4. Klicken Sie auf **Installieren**.
|
|
55
|
+
- **Intlayer-Tab (Aktivitätsleiste)** – Durchsuchen und durchsuchen Sie Wörterbücher über einen dedizierten Seiten-Tab mit Symbolleiste und Kontextaktionen (Build, Pull, Push, Fill, Refresh, Test, Create File).
|
|
112
56
|
|
|
113
57
|
## Verwendung
|
|
114
58
|
|
|
@@ -121,63 +65,58 @@ Sie können **Intlayer** direkt aus dem VS Code Marketplace installieren:
|
|
|
121
65
|
const content = useIntlayer("app");
|
|
122
66
|
```
|
|
123
67
|
|
|
124
|
-
3. **
|
|
68
|
+
3. **Befehl-Klick** (`⌘+Klick` auf macOS) oder **Strg-Klick** (auf Windows/Linux) auf den Schlüssel (z. B. `"app"`).
|
|
125
69
|
4. VS Code öffnet automatisch die entsprechende Wörterbuchdatei, z. B. `src/app.content.ts`.
|
|
126
70
|
|
|
127
|
-
### Verwaltung von Inhaltswörterbüchern
|
|
128
|
-
|
|
129
71
|
### Intlayer-Tab (Aktivitätsleiste)
|
|
130
72
|
|
|
131
|
-
Verwenden Sie den
|
|
73
|
+
Verwenden Sie den Seiten-Tab, um Wörterbücher zu durchsuchen und zu verwalten:
|
|
132
74
|
|
|
133
75
|
- Öffnen Sie das Intlayer-Symbol in der Aktivitätsleiste.
|
|
134
76
|
- Geben Sie in **Suche** ein, um Wörterbücher und Einträge in Echtzeit zu filtern.
|
|
135
|
-
- Durchsuchen Sie in **Wörterbücher** Umgebungen, Wörterbücher und Dateien. Verwenden Sie die Symbolleiste für Erstellen, Abrufen,
|
|
77
|
+
- Durchsuchen Sie in **Wörterbücher** Umgebungen, Wörterbücher und Dateien. Verwenden Sie die Symbolleiste für Erstellen, Abrufen, Senden, Füllen, Aktualisieren, Testen und Wörterbuchdatei erstellen. Rechtsklick für Kontextaktionen (Abrufen/Senden bei Wörterbüchern, Füllen bei Dateien). Die aktuelle Editor-Datei wird bei Bedarf automatisch im Baum angezeigt.
|
|
136
78
|
|
|
137
|
-
|
|
79
|
+
### Zugriff auf die Befehle
|
|
138
80
|
|
|
139
|
-
|
|
81
|
+
Sie können auf die Befehle über die **Befehlspalette** zugreifen.
|
|
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. Öffnen Sie die **Befehls-Palette**.
|
|
152
|
-
2. Suchen Sie nach **Wörterbücher hochladen**.
|
|
153
|
-
3. Wählen Sie die hochzuladenden Wörterbücher aus und bestätigen Sie.
|
|
154
|
-
|
|
155
|
-
#### Wörterbücher abrufen
|
|
87
|
+
- **Wörterbücher erstellen**
|
|
88
|
+
- **Wörterbücher hochladen**
|
|
89
|
+
- **Wörterbücher herunterladen**
|
|
90
|
+
- **Wörterbücher füllen**
|
|
91
|
+
- **Wörterbücher testen**
|
|
92
|
+
- **Wörterbuchdatei erstellen**
|
|
156
93
|
|
|
157
|
-
|
|
94
|
+
### Laden von Umgebungsvariablen
|
|
158
95
|
|
|
159
|
-
|
|
160
|
-
2. Suchen Sie nach **Wörterbücher abrufen**.
|
|
161
|
-
3. Wählen Sie die Wörterbücher aus, die abgerufen werden sollen.
|
|
96
|
+
Intlayer empfiehlt, Ihre AI-API-Schlüssel sowie die Intlayer-Client-ID und das Secret in Umgebungsvariablen zu speichern.
|
|
162
97
|
|
|
163
|
-
|
|
98
|
+
Die Erweiterung kann Umgebungsvariablen aus Ihrem Arbeitsbereich laden, um Intlayer-Befehle im richtigen Kontext auszuführen.
|
|
164
99
|
|
|
165
|
-
|
|
100
|
+
- **Ladereihenfolge (nach Priorität)**: `.env.<env>.local` → `.env.<env>` → `.env.local` → `.env`
|
|
101
|
+
- **Nicht destruktiv**: vorhandene `process.env`-Werte werden nicht überschrieben.
|
|
102
|
+
- **Geltungsbereich**: Dateien werden vom konfigurierten Basisverzeichnis aus aufgelöst (standardmäßig das Stammverzeichnis des Arbeitsbereichs).
|
|
166
103
|
|
|
167
|
-
|
|
168
|
-
2. Suchen Sie nach **Wörterbücher füllen**.
|
|
169
|
-
3. Führen Sie den Befehl aus, um die Wörterbücher zu befüllen.
|
|
104
|
+
#### Auswahl der aktiven Umgebung
|
|
170
105
|
|
|
171
|
-
|
|
106
|
+
- **Befehls-Palette**: Öffnen Sie die Palette und führen Sie `Intlayer: Select Environment` aus, wählen Sie dann die Umgebung aus (z. B. `development`, `staging`, `production`). Die Erweiterung versucht, die erste verfügbare Datei in der oben genannten Prioritätsliste zu laden und zeigt eine Benachrichtigung wie „Env geladen von .env.<env>.local“ an.
|
|
107
|
+
- **Einstellungen**: Gehen Sie zu `Einstellungen → Erweiterungen → Intlayer` und setzen Sie:
|
|
108
|
+
- **Umgebung**: der Umgebungsname, der zur Auflösung von `.env.<env>*` Dateien verwendet wird.
|
|
109
|
+
- (Optional) **Env-Datei**: ein expliziter Pfad zu einer `.env`-Datei. Wenn angegeben, hat dieser Vorrang vor der ermittelten Liste.
|
|
172
110
|
|
|
173
|
-
|
|
111
|
+
#### Monorepos und benutzerdefinierte Verzeichnisse
|
|
174
112
|
|
|
175
|
-
|
|
176
|
-
2. Suchen Sie nach **Wörterbücher testen**.
|
|
177
|
-
3. Überprüfen Sie die gemeldeten Probleme und beheben Sie diese bei Bedarf.
|
|
113
|
+
Wenn sich Ihre `.env`-Dateien außerhalb des Arbeitsbereichs-Stammverzeichnisses befinden, legen Sie das **Basisverzeichnis** unter `Einstellungen → Erweiterungen → Intlayer` fest. Der Loader sucht dann nach `.env`-Dateien relativ zu diesem Verzeichnis.
|
|
178
114
|
|
|
179
|
-
##
|
|
115
|
+
## Dokumentationshistorie
|
|
180
116
|
|
|
181
|
-
| Version | Datum | Änderungen
|
|
182
|
-
| ------- | ---------- |
|
|
183
|
-
|
|
|
117
|
+
| Version | Datum | Änderungen |
|
|
118
|
+
| ------- | ---------- | --------------------------------------------- |
|
|
119
|
+
| 6.1.5 | 2025-09-30 | Demo-GIF hinzugefügt |
|
|
120
|
+
| 6.1.0 | 2025-09-24 | Abschnitt zur Umgebungs-Auswahl hinzugefügt |
|
|
121
|
+
| 6.0.0 | 2025-09-22 | Intlayer-Tab / Befehle zum Ausfüllen & Testen |
|
|
122
|
+
| 5.5.10 | 2025-06-29 | Historie initialisiert |
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: Make a component multilingual (i18n library) in React and Next.js
|
|
5
|
+
description: Learn how to declare and retrieve localized content to build a multilingual React or Next.js component with Intlayer.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- component
|
|
9
|
+
- react
|
|
10
|
+
- multilingual
|
|
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
|
+
# How to make a component multilingual (i18n) with Intlayer
|
|
22
|
+
|
|
23
|
+
This guide shows the minimal steps to make a UI component multilingual in two common setups:
|
|
24
|
+
|
|
25
|
+
- React (Vite/SPA)
|
|
26
|
+
- Next.js (App Router)
|
|
27
|
+
|
|
28
|
+
You will first declare your content, then retrieve it in your component.
|
|
29
|
+
|
|
30
|
+
## 1) Declare your content (shared for React and Next.js)
|
|
31
|
+
|
|
32
|
+
Create a content declaration file near your component. This keeps translations close to where they are used and enables type safety.
|
|
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 is also supported if you prefer configuration files.
|
|
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) Retrieve your content
|
|
80
|
+
|
|
81
|
+
### Case A — React app (Vite/SPA)
|
|
82
|
+
|
|
83
|
+
Default approach: use `useIntlayer` to retrieve by key. This keeps components lean and typed.
|
|
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
|
+
Server-side rendering or outside provider: use `react-intlayer/server` and pass an explicit `locale` when needed.
|
|
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
|
+
Alternative: `useDictionary` can read a whole declared object if you prefer collocating structure at call site.
|
|
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
|
+
### Case B — Next.js (App Router)
|
|
133
|
+
|
|
134
|
+
Prefer server components for data safety and performance. Use `useIntlayer` from `next-intlayer/server` in server files, and `useIntlayer` from `next-intlayer` in client components.
|
|
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
|
+
Tip: For page metadata and SEO, you can also fetch content using `getIntlayer` and generate multilingual URLs via `getMultilingualUrls`.
|
|
167
|
+
|
|
168
|
+
## Why Intlayer’s component approach is best
|
|
169
|
+
|
|
170
|
+
- **Collocation**: Content declarations live near components, reducing drift and improving reuse across design systems.
|
|
171
|
+
- **Type safety**: Keys and structures are strongly typed; missing translations surface at build-time rather than at runtime.
|
|
172
|
+
- **Server-first**: Works natively in server components for better security and performance; client hooks remain ergonomic.
|
|
173
|
+
- **Tree-shaking**: Only content used by the component is bundled, keeping payloads small in large apps.
|
|
174
|
+
- **DX & tooling**: Built-in middleware, SEO helpers, and optional Visual Editor/AI translations streamline everyday work.
|
|
175
|
+
|
|
176
|
+
See the comparisons and patterns in the Next.js-focused roundup: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
177
|
+
|
|
178
|
+
## Related guides and references
|
|
179
|
+
|
|
180
|
+
- React setup (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 setup: https://intlayer.org/doc/environment/nextjs
|
|
184
|
+
- Why Intlayer vs. next-intl vs. next-i18next: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
185
|
+
|
|
186
|
+
These pages include end-to-end setup, providers, routing, and SEO helpers.
|
|
@@ -74,7 +74,7 @@ const MyComponent = () => {
|
|
|
74
74
|
|
|
75
75
|
This hook will manage the locale detection for you and will return the content for the current locale. Using this hook, you will also be able to interpret markdown, manage pluralization, and more.
|
|
76
76
|
|
|
77
|
-
> To see all the features of Intlayer, you can read the [dictionary documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/
|
|
77
|
+
> To see all the features of Intlayer, you can read the [dictionary documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md).
|
|
78
78
|
|
|
79
79
|
## Distant content
|
|
80
80
|
|
package/docs/en/index.md
CHANGED
|
@@ -51,7 +51,7 @@ Intlayer offers a flexible, modern approach to translating your application. Our
|
|
|
51
51
|
|
|
52
52
|
Organize your multilingual content close to your code to keep everything consistent and maintainable.
|
|
53
53
|
|
|
54
|
-
- **[Get Started](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/
|
|
54
|
+
- **[Get Started](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)**
|
|
55
55
|
Learn the basics of declaring your content in Intlayer.
|
|
56
56
|
|
|
57
57
|
- **[Translation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/translation.md)**
|
package/docs/en/intlayer_cli.md
CHANGED
|
@@ -40,7 +40,7 @@ pnpm add intlayer-cli -g
|
|
|
40
40
|
|
|
41
41
|
## intlayer-cli package
|
|
42
42
|
|
|
43
|
-
`intlayer-cli` package intend to transpile your [intlayer declarations](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/
|
|
43
|
+
`intlayer-cli` package intend to transpile your [intlayer declarations](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md) into dictionaries.
|
|
44
44
|
|
|
45
45
|
This package will transpile all intlayer files, such as `src/**/*.content.{ts|js|mjs|cjs|json}`. [See how to declare your Intlayer declaration files](https://github.com/aymericzip/intlayer/blob/main/packages/intlayer/README.md).
|
|
46
46
|
|