@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
|
@@ -1105,38 +1105,38 @@ const App = () => (
|
|
|
1105
1105
|
module.exports = App;
|
|
1106
1106
|
```
|
|
1107
1107
|
|
|
1108
|
-
병행하여, `
|
|
1108
|
+
병행하여, `intlayerMiddleware`을 사용하여 애플리케이션에 서버 사이드 라우팅을 추가할 수도 있습니다. 이 플러그인은 URL을 기반으로 현재 로케일을 자동으로 감지하고 적절한 로케일 쿠키를 설정합니다. 로케일이 지정되지 않은 경우, 플러그인은 사용자의 브라우저 언어 설정을 기준으로 가장 적합한 로케일을 결정합니다. 로케일이 감지되지 않으면 기본 로케일로 리디렉션합니다.
|
|
1109
1109
|
|
|
1110
1110
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1111
1111
|
import { defineConfig } from "vite";
|
|
1112
1112
|
import preact from "@preact/preset-vite";
|
|
1113
|
-
import { intlayer,
|
|
1113
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1114
1114
|
|
|
1115
1115
|
// https://vitejs.dev/config/
|
|
1116
1116
|
export default defineConfig({
|
|
1117
|
-
plugins: [preact(), intlayer(),
|
|
1117
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1118
1118
|
});
|
|
1119
1119
|
```
|
|
1120
1120
|
|
|
1121
1121
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1122
1122
|
import { defineConfig } from "vite";
|
|
1123
1123
|
import preact from "@preact/preset-vite";
|
|
1124
|
-
import { intlayer,
|
|
1124
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1125
1125
|
|
|
1126
1126
|
// https://vitejs.dev/config/
|
|
1127
1127
|
export default defineConfig({
|
|
1128
|
-
plugins: [preact(), intlayer(),
|
|
1128
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1129
1129
|
});
|
|
1130
1130
|
```
|
|
1131
1131
|
|
|
1132
1132
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1133
1133
|
const { defineConfig } = require("vite");
|
|
1134
1134
|
const preact = require("@preact/preset-vite");
|
|
1135
|
-
const { intlayer,
|
|
1135
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
1136
1136
|
|
|
1137
1137
|
// https://vitejs.dev/config/
|
|
1138
1138
|
module.exports = defineConfig({
|
|
1139
|
-
plugins: [preact(), intlayer(),
|
|
1139
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1140
1140
|
});
|
|
1141
1141
|
```
|
|
1142
1142
|
|
|
@@ -1671,9 +1671,9 @@ module.exports = { LocalizedLink, checkIsExternalLink };
|
|
|
1671
1671
|
|
|
1672
1672
|
Intlayer는 모듈 확장을 사용하여 TypeScript의 이점을 활용하고 코드베이스를 더욱 견고하게 만듭니다.
|
|
1673
1673
|
|
|
1674
|
-

|
|
1675
1675
|
|
|
1676
|
-

|
|
1677
1677
|
|
|
1678
1678
|
TypeScript 구성에 자동 생성된 타입이 포함되어 있는지 확인하세요.
|
|
1679
1679
|
|
|
@@ -1006,38 +1006,38 @@ const App = () => (
|
|
|
1006
1006
|
);
|
|
1007
1007
|
```
|
|
1008
1008
|
|
|
1009
|
-
병행하여, `
|
|
1009
|
+
병행하여, `intlayerMiddleware`을 사용하여 애플리케이션에 서버 사이드 라우팅을 추가할 수도 있습니다. 이 플러그인은 URL을 기반으로 현재 로케일을 자동으로 감지하고 적절한 로케일 쿠키를 설정합니다. 로케일이 지정되지 않은 경우, 플러그인은 사용자의 브라우저 언어 설정을 기반으로 가장 적합한 로케일을 결정합니다. 로케일이 감지되지 않으면 기본 로케일로 리디렉션합니다.
|
|
1010
1010
|
|
|
1011
1011
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1012
1012
|
import { defineConfig } from "vite";
|
|
1013
1013
|
import react from "@vitejs/plugin-react-swc";
|
|
1014
|
-
import { intlayer,
|
|
1014
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1015
1015
|
|
|
1016
1016
|
// https://vitejs.dev/config/
|
|
1017
1017
|
export default defineConfig({
|
|
1018
|
-
plugins: [react(), intlayer(),
|
|
1018
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1019
1019
|
});
|
|
1020
1020
|
```
|
|
1021
1021
|
|
|
1022
1022
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1023
1023
|
import { defineConfig } from "vite";
|
|
1024
1024
|
import react from "@vitejs/plugin-react-swc";
|
|
1025
|
-
import { intlayer,
|
|
1025
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1026
1026
|
|
|
1027
1027
|
// https://vitejs.dev/config/
|
|
1028
1028
|
export default defineConfig({
|
|
1029
|
-
plugins: [react(), intlayer(),
|
|
1029
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1030
1030
|
});
|
|
1031
1031
|
```
|
|
1032
1032
|
|
|
1033
1033
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1034
1034
|
const { defineConfig } = require("vite");
|
|
1035
1035
|
const react = require("@vitejs/plugin-react-swc");
|
|
1036
|
-
const { intlayer,
|
|
1036
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
1037
1037
|
|
|
1038
1038
|
// https://vitejs.dev/config/
|
|
1039
1039
|
module.exports = defineConfig({
|
|
1040
|
-
plugins: [react(), intlayer(),
|
|
1040
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
1041
1041
|
});
|
|
1042
1042
|
```
|
|
1043
1043
|
|
|
@@ -1571,9 +1571,9 @@ Link.displayName = "Link";
|
|
|
1571
1571
|
|
|
1572
1572
|
Intlayer는 모듈 확장을 사용하여 TypeScript의 이점을 활용하고 코드베이스를 더욱 견고하게 만듭니다.
|
|
1573
1573
|
|
|
1574
|
-

|
|
1575
1575
|
|
|
1576
|
-

|
|
1577
1577
|
|
|
1578
1578
|
TypeScript 구성에 자동 생성된 타입이 포함되어 있는지 확인하세요.
|
|
1579
1579
|
|
|
@@ -685,46 +685,46 @@ import LocaleSwitcher from "@components/LocaleSwitcher.vue";
|
|
|
685
685
|
</template>
|
|
686
686
|
```
|
|
687
687
|
|
|
688
|
-
동시에, `
|
|
688
|
+
동시에, `intlayerMiddleware`을 사용하여 애플리케이션에 서버 사이드 라우팅을 추가할 수도 있습니다. 이 플러그인은 URL을 기반으로 현재 로케일을 자동으로 감지하고 적절한 로케일 쿠키를 설정합니다. 로케일이 지정되지 않은 경우, 사용자의 브라우저 언어 설정을 기반으로 가장 적합한 로케일을 결정합니다. 로케일이 감지되지 않으면 기본 로케일로 리디렉션합니다.
|
|
689
689
|
|
|
690
690
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
691
691
|
import { defineConfig } from "vite";
|
|
692
692
|
import vue from "@vitejs/plugin-vue";
|
|
693
|
-
import { intlayer,
|
|
693
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
694
694
|
|
|
695
695
|
// https://vitejs.dev/config/
|
|
696
696
|
export default defineConfig({
|
|
697
|
-
plugins: [vue(), intlayer(),
|
|
697
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
698
698
|
});
|
|
699
699
|
```
|
|
700
700
|
|
|
701
701
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
702
702
|
import { defineConfig } from "vite";
|
|
703
703
|
import vue from "@vitejs/plugin-vue";
|
|
704
|
-
import { intlayer,
|
|
704
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
705
705
|
|
|
706
706
|
// https://vitejs.dev/config/
|
|
707
707
|
export default defineConfig({
|
|
708
|
-
plugins: [vue(), intlayer(),
|
|
708
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
709
709
|
});
|
|
710
710
|
```
|
|
711
711
|
|
|
712
712
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
713
713
|
const { defineConfig } = require("vite");
|
|
714
714
|
const vue = require("@vitejs/plugin-vue");
|
|
715
|
-
const { intlayer,
|
|
715
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
716
716
|
|
|
717
717
|
// https://vitejs.dev/config/
|
|
718
718
|
module.exports = defineConfig({
|
|
719
|
-
plugins: [vue(), intlayer(),
|
|
719
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
720
720
|
});
|
|
721
721
|
const { defineConfig } = require("vite");
|
|
722
722
|
const vue = require("@vitejs/plugin-vue");
|
|
723
|
-
const { intlayer,
|
|
723
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
724
724
|
|
|
725
725
|
// https://vitejs.dev/config/
|
|
726
726
|
module.exports = defineConfig({
|
|
727
|
-
plugins: [vue(), intlayer(),
|
|
727
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
728
728
|
});
|
|
729
729
|
```
|
|
730
730
|
|
|
@@ -1028,9 +1028,9 @@ const { myMarkdownContent } = useIntlayer("my-component");
|
|
|
1028
1028
|
|
|
1029
1029
|
Intlayer는 모듈 확장을 사용하여 TypeScript의 이점을 활용하고 코드베이스를 더욱 견고하게 만듭니다.
|
|
1030
1030
|
|
|
1031
|
-

|
|
1032
1032
|
|
|
1033
|
-

|
|
1034
1034
|
|
|
1035
1035
|
TypeScript 구성에 자동 생성된 타입이 포함되어 있는지 확인하세요.
|
|
1036
1036
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-17
|
|
3
|
-
updatedAt: 2025-09-
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
4
|
title: 공식 VS 코드 확장
|
|
5
|
-
description: VS 코드에서 Intlayer 확장을 사용하여 개발
|
|
5
|
+
description: VS 코드에서 Intlayer 확장을 사용하여 개발 워크플로우를 향상시키는 방법을 알아보세요. 현지화된 콘텐츠 간 빠른 탐색과 사전 관리를 효율적으로 수행할 수 있습니다.
|
|
6
6
|
keywords:
|
|
7
7
|
- VS 코드 확장
|
|
8
8
|
- Intlayer
|
|
@@ -23,161 +23,100 @@ slugs:
|
|
|
23
23
|
|
|
24
24
|
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension)는 프로젝트에서 현지화된 콘텐츠 작업 시 개발자 경험을 향상시키기 위해 설계된 **Intlayer**의 공식 Visual Studio Code 확장입니다.
|
|
25
25
|
|
|
26
|
-

|
|
26
|
+

|
|
27
27
|
|
|
28
28
|
확장 링크: [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
|
## 기능
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+

|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
**원활한 통합** – **react-intlayer** 및 **next-intlayer** 프로젝트와 문제없이 작동합니다.
|
|
36
|
-
**다국어 지원** – 다양한 언어의 현지화된 콘텐츠를 지원합니다.
|
|
37
|
-
**VS 코드 통합** – VS 코드의 탐색 및 명령 팔레트와 원활하게 통합됩니다.
|
|
38
|
-
|
|
39
|
-
### 사전 관리 명령어
|
|
40
|
-
|
|
41
|
-
VS 코드에서 직접 콘텐츠 사전을 관리하세요:
|
|
42
|
-
|
|
43
|
-
- **사전 빌드** – 프로젝트 구조를 기반으로 콘텐츠 파일을 생성합니다.
|
|
44
|
-
- **사전 푸시** – 최신 사전 콘텐츠를 저장소에 업로드합니다.
|
|
45
|
-
- **사전 풀** – 저장소에서 최신 사전 콘텐츠를 로컬 환경으로 동기화합니다.
|
|
34
|
+
- **즉시 탐색** – `useIntlayer` 키를 클릭하면 올바른 콘텐츠 파일로 빠르게 이동합니다.
|
|
46
35
|
- **사전 채우기** – 프로젝트의 콘텐츠로 사전을 채웁니다.
|
|
47
|
-
- **사전 테스트** – 누락되었거나 불완전한 번역을 식별합니다.
|
|
48
|
-
|
|
49
|
-
### 콘텐츠 선언 생성기
|
|
50
|
-
|
|
51
|
-
다양한 형식으로 구조화된 사전 파일을 쉽게 생성할 수 있습니다:
|
|
52
36
|
|
|
53
|
-
|
|
37
|
+

|
|
54
38
|
|
|
55
|
-
|
|
39
|
+
- **Intlayer 명령어에 쉽게 접근** – 콘텐츠 사전을 빌드, 푸시, 풀, 채우기, 테스트를 손쉽게 수행합니다.
|
|
56
40
|
|
|
57
|
-
|
|
58
|
-
const MyComponent = () => {
|
|
59
|
-
const { myTranslatedContent } = useIntlayer("my-component");
|
|
41
|
+

|
|
60
42
|
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
TypeScript 형식으로 생성된 파일:
|
|
43
|
+
- **콘텐츠 선언 생성기** – 다양한 형식(`.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
|
+
- **사전 테스트** – 누락된 번역이 있는지 사전을 테스트합니다.
|
|
80
48
|
|
|
81
|
-
|
|
82
|
-
```
|
|
49
|
+

|
|
83
50
|
|
|
84
|
-
|
|
51
|
+
- **사전을 최신 상태로 유지** – 프로젝트의 최신 콘텐츠로 사전을 최신 상태로 유지합니다.
|
|
85
52
|
|
|
86
|
-
|
|
87
|
-
- **ES 모듈 (`.esm`)**
|
|
88
|
-
- **CommonJS (`.cjs`)**
|
|
89
|
-
- **JSON (`.json`)**
|
|
90
|
-
|
|
91
|
-
### Intlayer 탭 (활동 표시줄)
|
|
53
|
+

|
|
92
54
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **검색(Search)**: 사전과 그 내용을 빠르게 필터링할 수 있는 실시간 검색 바입니다. 입력할 때마다 결과가 즉시 업데이트됩니다.
|
|
96
|
-
- **사전(Dictionaries)**: 환경/프로젝트, 사전 키, 그리고 항목을 기여하는 파일들의 트리 뷰입니다. 다음 작업을 할 수 있습니다:
|
|
97
|
-
- 파일을 클릭하여 편집기에서 엽니다.
|
|
98
|
-
- 툴바를 사용하여 다음 작업을 실행합니다: 빌드(Build), 풀(Pull), 푸시(Push), 채우기(Fill), 새로고침(Refresh), 테스트(Test), 사전 파일 생성(Create Dictionary File).
|
|
99
|
-
- 항목별 작업을 위한 컨텍스트 메뉴를 사용합니다:
|
|
100
|
-
- 사전에서는: 풀(Pull) 또는 푸시(Push)
|
|
101
|
-
- 파일에서는: 사전 채우기(Fill Dictionary)
|
|
102
|
-
- 편집기를 전환할 때, 해당 파일이 사전에 속해 있으면 트리가 일치하는 파일을 표시합니다.
|
|
103
|
-
|
|
104
|
-
## 설치
|
|
105
|
-
|
|
106
|
-
**Intlayer**를 VS Code 마켓플레이스에서 직접 설치할 수 있습니다:
|
|
107
|
-
|
|
108
|
-
1. **VS Code**를 엽니다.
|
|
109
|
-
2. **확장 마켓플레이스**로 이동합니다.
|
|
110
|
-
3. **"Intlayer"**를 검색합니다.
|
|
111
|
-
4. **설치**를 클릭합니다.
|
|
55
|
+
- **Intlayer 탭 (활동 표시줄)** – 전용 사이드 탭에서 도구 모음과 컨텍스트 작업(빌드, 풀, 푸시, 채우기, 새로 고침, 테스트, 파일 생성)과 함께 사전을 탐색하고 검색합니다.
|
|
112
56
|
|
|
113
57
|
## 사용법
|
|
114
58
|
|
|
115
59
|
### 빠른 탐색
|
|
116
60
|
|
|
117
61
|
1. **react-intlayer**를 사용하는 프로젝트를 엽니다.
|
|
118
|
-
2. `useIntlayer()` 호출을
|
|
62
|
+
2. 다음과 같이 `useIntlayer()` 호출을 찾습니다:
|
|
119
63
|
|
|
120
64
|
```tsx
|
|
121
65
|
const content = useIntlayer("app");
|
|
122
66
|
```
|
|
123
67
|
|
|
124
|
-
3. 키(예: `"app"`)에서
|
|
125
|
-
4. VS Code가 자동으로 해당 사전
|
|
126
|
-
|
|
127
|
-
### 콘텐츠 사전 관리
|
|
68
|
+
3. 키(예: `"app"`)에서 **명령-클릭**(`⌘+클릭` macOS) 또는 **Ctrl+클릭**(Windows/Linux)을 합니다.
|
|
69
|
+
4. VS Code가 자동으로 해당 사전 파일을 엽니다. 예: `src/app.content.ts`.
|
|
128
70
|
|
|
129
71
|
### Intlayer 탭 (활동 표시줄)
|
|
130
72
|
|
|
131
|
-
|
|
73
|
+
사이드 탭을 사용하여 사전을 탐색하고 관리하세요:
|
|
132
74
|
|
|
133
75
|
- 활동 표시줄에서 Intlayer 아이콘을 엽니다.
|
|
134
|
-
-
|
|
135
|
-
-
|
|
76
|
+
- **검색**에서 입력하여 사전과 항목을 실시간으로 필터링합니다.
|
|
77
|
+
- **사전**에서 환경, 사전, 파일을 탐색합니다. 툴바를 사용하여 빌드(Build), 풀(Pull), 푸시(Push), 채우기(Fill), 새로고침(Refresh), 테스트(Test), 사전 파일 생성(Create Dictionary File)을 수행할 수 있습니다. 마우스 오른쪽 버튼 클릭으로 컨텍스트 작업(사전에서 풀/푸시, 파일에서 채우기)을 사용할 수 있습니다. 현재 편집 중인 파일은 해당되는 경우 트리에서 자동으로 표시됩니다.
|
|
136
78
|
|
|
137
|
-
|
|
79
|
+
### 명령어 접근
|
|
138
80
|
|
|
139
|
-
|
|
81
|
+
명령어는 **명령 팔레트**에서 접근할 수 있습니다.
|
|
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. **명령 팔레트(Command Palette)**를 엽니다.
|
|
152
|
-
2. **Push Dictionaries**를 검색합니다.
|
|
153
|
-
3. 푸시할 사전을 선택하고 확인합니다.
|
|
154
|
-
|
|
155
|
-
#### 사전 풀하기
|
|
87
|
+
- **사전 빌드(Build Dictionaries)**
|
|
88
|
+
- **사전 푸시(Push Dictionaries)**
|
|
89
|
+
- **사전 풀(Pull Dictionaries)**
|
|
90
|
+
- **사전 채우기(Fill Dictionaries)**
|
|
91
|
+
- **사전 테스트(Test Dictionaries)**
|
|
92
|
+
- **사전 파일 생성(Create Dictionary File)**
|
|
156
93
|
|
|
157
|
-
|
|
94
|
+
### 환경 변수 로딩
|
|
158
95
|
|
|
159
|
-
|
|
160
|
-
2. **Pull Dictionaries**를 검색합니다.
|
|
161
|
-
3. 가져올 사전을 선택합니다.
|
|
96
|
+
Intlayer는 AI API 키와 Intlayer 클라이언트 ID 및 시크릿을 환경 변수에 저장할 것을 권장합니다.
|
|
162
97
|
|
|
163
|
-
|
|
98
|
+
이 확장 프로그램은 작업 공간에서 환경 변수를 로드하여 올바른 컨텍스트로 Intlayer 명령을 실행할 수 있습니다.
|
|
164
99
|
|
|
165
|
-
|
|
100
|
+
- **로드 순서(우선순위)**: `.env.<env>.local` → `.env.<env>` → `.env.local` → `.env`
|
|
101
|
+
- **비파괴적**: 기존의 `process.env` 값은 덮어쓰지 않습니다.
|
|
102
|
+
- **범위**: 파일은 구성된 기본 디렉터리(기본값은 작업 공간 루트)에서 해석됩니다.
|
|
166
103
|
|
|
167
|
-
|
|
168
|
-
2. **Fill Dictionaries**를 검색합니다.
|
|
169
|
-
3. 사전을 채우기 위해 명령을 실행합니다.
|
|
104
|
+
#### 활성 환경 선택
|
|
170
105
|
|
|
171
|
-
|
|
106
|
+
- **명령 팔레트**: 팔레트를 열고 `Intlayer: Select Environment` 명령을 실행한 후 환경(예: `development`, `staging`, `production`)을 선택합니다. 확장 기능은 위 우선순위 목록에서 첫 번째로 사용 가능한 파일을 로드하려 시도하며, “Loaded env from .env.<env>.local”과 같은 알림을 표시합니다.
|
|
107
|
+
- **설정**: `설정 → 확장 기능 → Intlayer`로 이동하여 다음을 설정합니다:
|
|
108
|
+
- **환경(Environment)**: `.env.<env>*` 파일을 해석하는 데 사용되는 환경 이름입니다.
|
|
109
|
+
- (선택 사항) **Env 파일**: 명시적인 `.env` 파일 경로입니다. 제공되면 추론된 목록보다 우선합니다.
|
|
172
110
|
|
|
173
|
-
|
|
111
|
+
#### 모노레포 및 사용자 지정 디렉토리
|
|
174
112
|
|
|
175
|
-
|
|
176
|
-
2. **Test Dictionaries**를 검색합니다.
|
|
177
|
-
3. 보고된 문제를 검토하고 필요에 따라 수정합니다.
|
|
113
|
+
워크스페이스 루트 외부에 `.env` 파일이 있는 경우, `설정 → 확장 기능 → Intlayer`에서 **기본 디렉터리**를 설정하세요. 로더는 해당 디렉터리를 기준으로 `.env` 파일을 찾습니다.
|
|
178
114
|
|
|
179
115
|
## 문서 이력
|
|
180
116
|
|
|
181
|
-
| 버전 | 날짜 | 변경 사항
|
|
182
|
-
| ------ | ---------- |
|
|
183
|
-
|
|
|
117
|
+
| 버전 | 날짜 | 변경 사항 |
|
|
118
|
+
| ------ | ---------- | ---------------------------------------- |
|
|
119
|
+
| 6.1.5 | 2025-09-30 | 데모 GIF 추가 |
|
|
120
|
+
| 6.1.0 | 2025-09-24 | 환경 선택 섹션 추가 |
|
|
121
|
+
| 6.0.0 | 2025-09-22 | Intlayer 탭 / 채우기 및 테스트 명령 추가 |
|
|
122
|
+
| 5.5.10 | 2025-06-29 | 초기 이력 |
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: Tornar um componente multilíngue (biblioteca i18n) em React e Next.js
|
|
5
|
+
description: Aprenda como declarar e recuperar conteúdo localizado para construir um componente multilíngue em React ou Next.js com Intlayer.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- componente
|
|
9
|
+
- react
|
|
10
|
+
- multilíngue
|
|
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
|
+
# Como tornar um componente multilíngue (i18n) com Intlayer
|
|
22
|
+
|
|
23
|
+
Este guia mostra os passos mínimos para tornar um componente de interface multilíngue em duas configurações comuns:
|
|
24
|
+
|
|
25
|
+
- React (Vite/SPA)
|
|
26
|
+
- Next.js (App Router)
|
|
27
|
+
|
|
28
|
+
Você primeiro declarará seu conteúdo, depois o recuperará no seu componente.
|
|
29
|
+
|
|
30
|
+
## 1) Declare seu conteúdo (compartilhado para React e Next.js)
|
|
31
|
+
|
|
32
|
+
Crie um arquivo de declaração de conteúdo próximo ao seu componente. Isso mantém as traduções próximas de onde são usadas e permite segurança de tipos.
|
|
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 também é suportado se você preferir arquivos de configuração.
|
|
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) Recupere seu conteúdo
|
|
80
|
+
|
|
81
|
+
### Caso A — Aplicação React (Vite/SPA)
|
|
82
|
+
|
|
83
|
+
Abordagem padrão: use `useIntlayer` para recuperar pelo key. Isso mantém os componentes enxutos e tipados.
|
|
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
|
+
Renderização do lado servidor ou fora do provider: use `react-intlayer/server` e passe um `locale` explícito quando necessário.
|
|
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
|
+
Alternativa: `useDictionary` pode ler um objeto declarado inteiro se você preferir colocar a estrutura no local da chamada.
|
|
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
|
+
### Caso B — Next.js (App Router)
|
|
133
|
+
|
|
134
|
+
Prefira componentes de servidor para segurança dos dados e desempenho. Use `useIntlayer` de `next-intlayer/server` em arquivos de servidor, e `useIntlayer` de `next-intlayer` em componentes cliente.
|
|
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
|
+
Dica: Para metadados de página e SEO, você também pode buscar conteúdo usando `getIntlayer` e gerar URLs multilíngues via `getMultilingualUrls`.
|
|
167
|
+
|
|
168
|
+
## Por que a abordagem de componentes do Intlayer é a melhor
|
|
169
|
+
|
|
170
|
+
- **Colocação**: Declarações de conteúdo ficam próximas aos componentes, reduzindo desvios e melhorando o reuso em sistemas de design.
|
|
171
|
+
- **Segurança de tipos**: Chaves e estruturas são fortemente tipadas; traduções ausentes aparecem em tempo de build, e não em tempo de execução.
|
|
172
|
+
- **Server-first**: Funciona nativamente em componentes de servidor para melhor segurança e desempenho; hooks do cliente permanecem ergonômicos.
|
|
173
|
+
- **Tree-shaking**: Apenas o conteúdo usado pelo componente é incluído no pacote, mantendo os tamanhos pequenos em grandes aplicações.
|
|
174
|
+
- **DX & ferramentas**: Middleware embutido, auxiliares de SEO e traduções opcionais via Editor Visual/IA agilizam o trabalho diário.
|
|
175
|
+
|
|
176
|
+
Veja as comparações e padrões no resumo focado em Next.js: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
177
|
+
|
|
178
|
+
## Guias e referências relacionadas
|
|
179
|
+
|
|
180
|
+
- Configuração 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
|
+
- Início TanStack: https://intlayer.org/doc/environment/vite-and-react/tanstack-start
|
|
183
|
+
- Configuração do Next.js: https://intlayer.org/doc/environment/nextjs
|
|
184
|
+
- Por que Intlayer vs. next-intl vs. next-i18next: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
185
|
+
|
|
186
|
+
Estas páginas incluem configuração completa, provedores, roteamento e auxiliares de SEO.
|
|
@@ -662,9 +662,9 @@ Para cenários mais complexos, você pode criar um pipe para renderizar o HTML c
|
|
|
662
662
|
|
|
663
663
|
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.
|
|
664
664
|
|
|
665
|
-

|
|
666
666
|
|
|
667
|
-

|
|
668
668
|
|
|
669
669
|
Certifique-se de que sua configuração do TypeScript inclua os tipos gerados automaticamente.
|
|
670
670
|
|