@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
|
@@ -1046,38 +1046,38 @@ const App = () => (
|
|
|
1046
1046
|
module.exports = App;
|
|
1047
1047
|
```
|
|
1048
1048
|
|
|
1049
|
-
並行して、`
|
|
1049
|
+
並行して、`intlayerMiddleware` を使用してアプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインはURLに基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最適なロケールを判別します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトします。
|
|
1050
1050
|
|
|
1051
1051
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1052
1052
|
import { defineConfig } from "vite";
|
|
1053
1053
|
import preact from "@preact/preset-vite";
|
|
1054
|
-
import { intlayer,
|
|
1054
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1055
1055
|
|
|
1056
1056
|
// https://vitejs.dev/config/
|
|
1057
1057
|
export default defineConfig({
|
|
1058
|
-
plugins: [preact(), intlayer(),
|
|
1058
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1059
1059
|
});
|
|
1060
1060
|
```
|
|
1061
1061
|
|
|
1062
1062
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1063
1063
|
import { defineConfig } from "vite";
|
|
1064
1064
|
import preact from "@preact/preset-vite";
|
|
1065
|
-
import { intlayer,
|
|
1065
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
1066
1066
|
|
|
1067
1067
|
// https://vitejs.dev/config/
|
|
1068
1068
|
export default defineConfig({
|
|
1069
|
-
plugins: [preact(), intlayer(),
|
|
1069
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1070
1070
|
});
|
|
1071
1071
|
```
|
|
1072
1072
|
|
|
1073
1073
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1074
1074
|
const { defineConfig } = require("vite");
|
|
1075
1075
|
const preact = require("@preact/preset-vite");
|
|
1076
|
-
const { intlayer,
|
|
1076
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
1077
1077
|
|
|
1078
1078
|
// https://vitejs.dev/config/
|
|
1079
1079
|
module.exports = defineConfig({
|
|
1080
|
-
plugins: [preact(), intlayer(),
|
|
1080
|
+
plugins: [preact(), intlayer(), intlayerMiddleware()],
|
|
1081
1081
|
});
|
|
1082
1082
|
```
|
|
1083
1083
|
|
|
@@ -1622,9 +1622,9 @@ module.exports = { LocalizedLink, checkIsExternalLink };
|
|
|
1622
1622
|
|
|
1623
1623
|
Intlayerはモジュール拡張を利用してTypeScriptの利点を活かし、コードベースをより強固にします。
|
|
1624
1624
|
|
|
1625
|
-

|
|
1626
1626
|
|
|
1627
|
-

|
|
1628
1628
|
|
|
1629
1629
|
TypeScriptの設定に自動生成された型が含まれていることを確認してください。
|
|
1630
1630
|
|
|
@@ -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
|
|
|
@@ -1605,9 +1605,9 @@ Link.displayName = "Link";
|
|
|
1605
1605
|
|
|
1606
1606
|
Intlayer はモジュール拡張を利用して TypeScript の利点を活かし、コードベースをより強固にします。
|
|
1607
1607
|
|
|
1608
|
-

|
|
1609
1609
|
|
|
1610
|
-

|
|
1611
1611
|
|
|
1612
1612
|
TypeScript の設定に自動生成された型が含まれていることを確認してください。
|
|
1613
1613
|
|
|
@@ -1619,9 +1619,9 @@ TypeScript の設定に自動生成された型が含まれていることを確
|
|
|
1619
1619
|
|
|
1620
1620
|
Intlayerはモジュール拡張を利用してTypeScriptの利点を活かし、コードベースをより堅牢にします。
|
|
1621
1621
|
|
|
1622
|
-

|
|
1623
1623
|
|
|
1624
|
-

|
|
1625
1625
|
|
|
1626
1626
|
TypeScriptの設定に自動生成された型を含めることを確認してください。
|
|
1627
1627
|
|
|
@@ -681,46 +681,46 @@ import LocaleSwitcher from "@components/LocaleSwitcher.vue";
|
|
|
681
681
|
</template>
|
|
682
682
|
```
|
|
683
683
|
|
|
684
|
-
同時に、`
|
|
684
|
+
同時に、`intlayerMiddleware` を使用してアプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインはURLに基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最適なロケールを判定します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトします。
|
|
685
685
|
|
|
686
686
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
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.mjs" codeFormat="esm"
|
|
698
698
|
import { defineConfig } from "vite";
|
|
699
699
|
import vue from "@vitejs/plugin-vue";
|
|
700
|
-
import { intlayer,
|
|
700
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
701
701
|
|
|
702
702
|
// https://vitejs.dev/config/
|
|
703
703
|
export default defineConfig({
|
|
704
|
-
plugins: [vue(), intlayer(),
|
|
704
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
705
705
|
});
|
|
706
706
|
```
|
|
707
707
|
|
|
708
708
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
709
709
|
const { defineConfig } = require("vite");
|
|
710
710
|
const vue = require("@vitejs/plugin-vue");
|
|
711
|
-
const { intlayer,
|
|
711
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
712
712
|
|
|
713
713
|
// https://vitejs.dev/config/
|
|
714
714
|
module.exports = defineConfig({
|
|
715
|
-
plugins: [vue(), intlayer(),
|
|
715
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
716
716
|
});
|
|
717
717
|
const { defineConfig } = require("vite");
|
|
718
718
|
const vue = require("@vitejs/plugin-vue");
|
|
719
|
-
const { intlayer,
|
|
719
|
+
const { intlayer, intlayerMiddleware } = require("vite-intlayer");
|
|
720
720
|
|
|
721
721
|
// https://vitejs.dev/config/
|
|
722
722
|
module.exports = defineConfig({
|
|
723
|
-
plugins: [vue(), intlayer(),
|
|
723
|
+
plugins: [vue(), intlayer(), intlayerMiddleware()],
|
|
724
724
|
});
|
|
725
725
|
```
|
|
726
726
|
|
|
@@ -1024,9 +1024,9 @@ const { myMarkdownContent } = useIntlayer("my-component");
|
|
|
1024
1024
|
|
|
1025
1025
|
Intlayerはモジュール拡張を利用して、TypeScriptの利点を活かし、コードベースをより強固にします。
|
|
1026
1026
|
|
|
1027
|
-

|
|
1028
1028
|
|
|
1029
|
-

|
|
1030
1030
|
|
|
1031
1031
|
TypeScriptの設定に自動生成された型定義が含まれていることを確認してください。
|
|
1032
1032
|
|
|
@@ -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 Code 拡張機能
|
|
5
|
-
description: VS Code で Intlayer
|
|
5
|
+
description: VS Code で Intlayer 拡張機能を使用して開発ワークフローを強化する方法を学びます。ローカライズされたコンテンツ間を素早く移動し、辞書を効率的に管理できます。
|
|
6
6
|
keywords:
|
|
7
7
|
- VS Code 拡張機能
|
|
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 Code 統合** – VS Code のナビゲーションおよびコマンドパレットとスムーズに統合されます。
|
|
38
|
-
|
|
39
|
-
### 辞書管理コマンド
|
|
40
|
-
|
|
41
|
-
VS Code から直接コンテンツ辞書を管理します:
|
|
42
|
-
|
|
43
|
-
- **辞書のビルド** – プロジェクト構造に基づいてコンテンツファイルを生成します。
|
|
44
|
-
- **辞書のプッシュ** – 最新の辞書コンテンツをリポジトリにアップロードします。
|
|
45
|
-
- **辞書のプル** – リポジトリから最新の辞書コンテンツをローカル環境に同期します。
|
|
34
|
+
- **インスタントナビゲーション** – `useIntlayer` キーをクリックすると、正しいコンテンツファイルに素早くジャンプします。
|
|
46
35
|
- **辞書の埋め込み** – プロジェクトのコンテンツで辞書を埋めます。
|
|
47
|
-
- **辞書のテスト** – 欠落または不完全な翻訳を特定します。
|
|
48
|
-
|
|
49
|
-
### コンテンツ宣言ジェネレーター
|
|
50
|
-
|
|
51
|
-
異なるフォーマットで構造化された辞書ファイルを簡単に生成します:
|
|
52
|
-
|
|
53
|
-
現在コンポーネントを作業している場合、そのコンポーネント用の `.content.{ts,tsx,js,jsx,mjs,cjs,json}` ファイルを生成します。
|
|
54
|
-
|
|
55
|
-
コンポーネントの例:
|
|
56
|
-
|
|
57
|
-
```tsx fileName="src/components/MyComponent/index.tsx"
|
|
58
|
-
const MyComponent = () => {
|
|
59
|
-
const { myTranslatedContent } = useIntlayer("my-component");
|
|
60
|
-
|
|
61
|
-
return <span>{myTranslatedContent}</span>;
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
TypeScript形式で生成されたファイル:
|
|
66
36
|
|
|
67
|
-
|
|
68
|
-
import { t, type Dictionary } from "intlayer";
|
|
37
|
+

|
|
69
38
|
|
|
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
|
-
};
|
|
39
|
+
- **Intlayerコマンドへの簡単アクセス** – コンテンツ辞書のビルド、プッシュ、プル、埋め込み、テストを簡単に行えます。
|
|
80
40
|
|
|
81
|
-
|
|
82
|
-
```
|
|
41
|
+

|
|
83
42
|
|
|
84
|
-
|
|
43
|
+
- **コンテンツ宣言ジェネレーター** – さまざまな形式(`.ts`、`.esm`、`.cjs`、`.json`)で辞書コンテンツファイルを作成します。
|
|
85
44
|
|
|
86
|
-
-
|
|
87
|
-
- **ESモジュール (`.esm`)**
|
|
88
|
-
- **CommonJS (`.cjs`)**
|
|
89
|
-
- **JSON (`.json`)**
|
|
45
|
+

|
|
90
46
|
|
|
91
|
-
|
|
47
|
+
- **辞書のテスト** – 翻訳漏れがないか辞書をテストします。
|
|
92
48
|
|
|
93
|
-
|
|
49
|
+

|
|
94
50
|
|
|
95
|
-
-
|
|
96
|
-
- **辞書**:環境やプロジェクト、辞書キー、エントリを含むファイルのツリービュー。以下の操作が可能です:
|
|
97
|
-
- ファイルをクリックしてエディタで開く。
|
|
98
|
-
- ツールバーを使って以下のアクションを実行:ビルド、プル、プッシュ、フィル、リフレッシュ、テスト、辞書ファイルの作成。
|
|
99
|
-
- コンテキストメニューでアイテム固有のアクションを実行:
|
|
100
|
-
- 辞書上で:プルまたはプッシュ
|
|
101
|
-
- ファイル上で:辞書のフィル
|
|
102
|
-
- エディタを切り替えると、そのファイルが辞書に属している場合はツリーが該当ファイルを表示します。
|
|
51
|
+
- **辞書を最新の状態に保つ** – プロジェクトの最新コンテンツで辞書を常に最新の状態に保ちます。
|
|
103
52
|
|
|
104
|
-
|
|
53
|
+

|
|
105
54
|
|
|
106
|
-
**Intlayer
|
|
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
|
-
1. **react-intlayer
|
|
118
|
-
2. `useIntlayer()
|
|
61
|
+
1. **react-intlayer** を使用しているプロジェクトを開きます。
|
|
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"`)を **Command-click**(macOSでは `⌘+Click`)、または **Ctrl+Click**(Windows/Linuxの場合)します。
|
|
69
|
+
4. VS Code は対応する辞書ファイル(例: `src/app.content.ts`)を自動的に開きます。
|
|
128
70
|
|
|
129
|
-
### Intlayerタブ(アクティビティバー)
|
|
71
|
+
### Intlayer タブ(アクティビティバー)
|
|
130
72
|
|
|
131
73
|
サイドタブを使って辞書を閲覧・管理します:
|
|
132
74
|
|
|
133
|
-
- アクティビティバーのIntlayerアイコンを開きます。
|
|
134
|
-
- **検索**
|
|
135
|
-
- **辞書**
|
|
75
|
+
- アクティビティバーの Intlayer アイコンを開きます。
|
|
76
|
+
- **検索** でリアルタイムに辞書やエントリをフィルタリングします。
|
|
77
|
+
- **辞書** では環境、辞書、ファイルを閲覧します。ツールバーからはビルド、プル、プッシュ、フィル、リフレッシュ、テスト、辞書ファイルの作成が可能です。右クリックでコンテキストアクション(辞書のプル/プッシュ、ファイルのフィル)を利用できます。現在のエディタファイルは該当する場合、ツリー内で自動的に表示されます。
|
|
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. **コマンドパレット** を開きます。
|
|
152
|
-
2. **Push Dictionaries** を検索します。
|
|
153
|
-
3. プッシュする辞書を選択して確認します。
|
|
154
|
-
|
|
155
|
-
#### 辞書のプル
|
|
87
|
+
- **辞書をビルド**
|
|
88
|
+
- **辞書をプッシュ**
|
|
89
|
+
- **辞書をプル**
|
|
90
|
+
- **辞書を埋める**
|
|
91
|
+
- **辞書をテスト**
|
|
92
|
+
- **辞書ファイルを作成**
|
|
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 File**: 明示的な `.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タブ / Fill & Testコマンド追加 |
|
|
122
|
+
| 5.5.10 | 2025-06-29 | 履歴を初期化 |
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: React 및 Next.js에서 컴포넌트를 다국어(i18n)로 만들기
|
|
5
|
+
description: Intlayer를 사용하여 다국어 React 또는 Next.js 컴포넌트를 만들기 위해 현지화된 콘텐츠를 선언하고 가져오는 방법을 배우세요.
|
|
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
|
+
# Intlayer로 컴포넌트를 다국어(i18n)로 만드는 방법
|
|
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": "다국어 React 컴포넌트",
|
|
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
|
+
서버 사이드 렌더링 또는 프로바이더 외부에서: 필요할 때 명시적인 `locale`을 전달하며 `react-intlayer/server`를 사용하세요.
|
|
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 (앱 라우터)
|
|
133
|
+
|
|
134
|
+
데이터 안전성과 성능을 위해 서버 컴포넌트를 선호하세요. 서버 파일에서는 `next-intlayer/server`에서 `useIntlayer`를 사용하고, 클라이언트 컴포넌트에서는 `next-intlayer`에서 `useIntlayer`를 사용하세요.
|
|
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`를 사용하여 콘텐츠를 가져오고 `getMultilingualUrls`를 통해 다국어 URL을 생성할 수도 있습니다.
|
|
167
|
+
|
|
168
|
+
## 왜 Intlayer의 컴포넌트 접근법이 최선인가
|
|
169
|
+
|
|
170
|
+
- **콜로케이션(Collocation)**: 콘텐츠 선언이 컴포넌트 근처에 위치하여 분산을 줄이고 디자인 시스템 전반에서 재사용성을 향상시킵니다.
|
|
171
|
+
- **타입 안전성(Type safety)**: 키와 구조가 강력하게 타입 지정되어 있으며, 누락된 번역은 런타임이 아닌 빌드 타임에 감지됩니다.
|
|
172
|
+
- **서버 우선(Server-first)**: 보안성과 성능 향상을 위해 서버 컴포넌트에서 네이티브로 작동하며, 클라이언트 훅은 여전히 사용하기 편리합니다.
|
|
173
|
+
- **트리 쉐이킹(Tree-shaking)**: 컴포넌트에서 사용하는 콘텐츠만 번들에 포함되어 대규모 앱에서도 페이로드를 작게 유지합니다.
|
|
174
|
+
- **개발자 경험(DX) 및 도구**: 내장 미들웨어, 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 시작: https://intlayer.org/doc/environment/vite-and-react/tanstack-start
|
|
183
|
+
- Next.js 설정: https://intlayer.org/doc/environment/nextjs
|
|
184
|
+
- Intlayer vs. next-intl vs. next-i18next 비교: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
185
|
+
|
|
186
|
+
이 페이지들은 엔드 투 엔드 설정, 프로바이더, 라우팅, SEO 도우미를 포함합니다.
|
|
@@ -634,9 +634,9 @@ npm install -D @types/markdown-it
|
|
|
634
634
|
|
|
635
635
|
Intlayer는 모듈 증강(module augmentation)을 사용하여 TypeScript의 이점을 활용하고 코드베이스를 더욱 견고하게 만듭니다.
|
|
636
636
|
|
|
637
|
-

|
|
638
638
|
|
|
639
|
-

|
|
640
640
|
|
|
641
641
|
TypeScript 구성에 자동 생성된 타입이 포함되어 있는지 확인하세요.
|
|
642
642
|
|