@intlayer/docs 7.0.5 → 7.0.7
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/intlayer_with_i18next.md +72 -19
- package/blog/ar/intlayer_with_next-i18next.md +61 -36
- package/blog/ar/intlayer_with_next-intl.md +61 -13
- package/blog/ar/intlayer_with_react-i18next.md +67 -18
- package/blog/ar/intlayer_with_react-intl.md +66 -13
- package/blog/ar/intlayer_with_vue-i18n.md +180 -0
- package/blog/de/intlayer_with_i18next.md +61 -26
- package/blog/de/intlayer_with_next-i18next.md +66 -17
- package/blog/de/intlayer_with_next-intl.md +62 -13
- package/blog/de/intlayer_with_react-i18next.md +66 -17
- package/blog/de/intlayer_with_react-intl.md +66 -14
- package/blog/de/intlayer_with_vue-i18n.md +178 -0
- package/blog/en/intlayer_with_i18next.md +53 -2
- package/blog/en/intlayer_with_next-i18next.md +52 -16
- package/blog/en/intlayer_with_next-intl.md +49 -0
- package/blog/en/intlayer_with_react-i18next.md +50 -1
- package/blog/en/intlayer_with_react-intl.md +53 -0
- package/blog/en/intlayer_with_vue-i18n.md +178 -0
- package/blog/en-GB/intlayer_with_i18next.md +58 -7
- package/blog/en-GB/intlayer_with_next-i18next.md +55 -9
- package/blog/en-GB/intlayer_with_next-intl.md +55 -6
- package/blog/en-GB/intlayer_with_react-i18next.md +55 -6
- package/blog/en-GB/intlayer_with_react-intl.md +56 -3
- package/blog/en-GB/intlayer_with_vue-i18n.md +180 -0
- package/blog/es/intlayer_with_i18next.md +69 -18
- package/blog/es/intlayer_with_next-i18next.md +70 -24
- package/blog/es/intlayer_with_next-intl.md +64 -13
- package/blog/es/intlayer_with_react-i18next.md +61 -12
- package/blog/es/intlayer_with_react-intl.md +65 -12
- package/blog/es/intlayer_with_vue-i18n.md +178 -0
- package/blog/fr/intlayer_with_i18next.md +77 -16
- package/blog/fr/intlayer_with_next-i18next.md +55 -31
- package/blog/fr/intlayer_with_next-intl.md +57 -7
- package/blog/fr/intlayer_with_react-i18next.md +64 -7
- package/blog/fr/intlayer_with_react-intl.md +63 -10
- package/blog/fr/intlayer_with_vue-i18n.md +178 -0
- package/blog/hi/intlayer_with_i18next.md +67 -16
- package/blog/hi/intlayer_with_next-i18next.md +69 -23
- package/blog/hi/intlayer_with_next-intl.md +61 -8
- package/blog/hi/intlayer_with_react-i18next.md +63 -14
- package/blog/hi/intlayer_with_react-intl.md +66 -13
- package/blog/hi/intlayer_with_vue-i18n.md +180 -0
- package/blog/id/intlayer_with_i18next.md +65 -14
- package/blog/id/intlayer_with_next-i18next.md +58 -12
- package/blog/id/intlayer_with_next-intl.md +60 -11
- package/blog/id/intlayer_with_react-i18next.md +59 -10
- package/blog/id/intlayer_with_react-intl.md +66 -13
- package/blog/id/intlayer_with_vue-i18n.md +178 -0
- package/blog/it/intlayer_with_i18next.md +70 -19
- package/blog/it/intlayer_with_next-i18next.md +68 -22
- package/blog/it/intlayer_with_next-intl.md +62 -12
- package/blog/it/intlayer_with_react-i18next.md +65 -16
- package/blog/it/intlayer_with_react-intl.md +67 -14
- package/blog/it/intlayer_with_vue-i18n.md +178 -0
- package/blog/ja/intlayer_with_i18next.md +74 -24
- package/blog/ja/intlayer_with_next-i18next.md +60 -37
- package/blog/ja/intlayer_with_next-intl.md +63 -15
- package/blog/ja/intlayer_with_react-i18next.md +70 -21
- package/blog/ja/intlayer_with_react-intl.md +73 -21
- package/blog/ja/intlayer_with_vue-i18n.md +180 -0
- package/blog/ko/intlayer_with_i18next.md +60 -29
- package/blog/ko/intlayer_with_next-i18next.md +59 -32
- package/blog/ko/intlayer_with_next-intl.md +52 -23
- package/blog/ko/intlayer_with_react-i18next.md +65 -16
- package/blog/ko/intlayer_with_react-intl.md +74 -22
- package/blog/ko/intlayer_with_vue-i18n.md +180 -0
- package/blog/pl/intlayer_with_i18next.md +63 -12
- package/blog/pl/intlayer_with_next-i18next.md +74 -17
- package/blog/pl/intlayer_with_next-intl.md +59 -8
- package/blog/pl/intlayer_with_react-i18next.md +59 -10
- package/blog/pl/intlayer_with_react-intl.md +65 -12
- package/blog/pl/intlayer_with_vue-i18n.md +180 -0
- package/blog/pt/intlayer_with_i18next.md +67 -16
- package/blog/pt/intlayer_with_next-i18next.md +65 -19
- package/blog/pt/intlayer_with_next-intl.md +62 -12
- package/blog/pt/intlayer_with_react-i18next.md +67 -18
- package/blog/pt/intlayer_with_react-intl.md +62 -10
- package/blog/pt/intlayer_with_vue-i18n.md +178 -0
- package/blog/ru/intlayer_with_i18next.md +68 -15
- package/blog/ru/intlayer_with_next-i18next.md +71 -25
- package/blog/ru/intlayer_with_next-intl.md +56 -7
- package/blog/ru/intlayer_with_react-i18next.md +65 -16
- package/blog/ru/intlayer_with_react-intl.md +69 -16
- package/blog/ru/intlayer_with_vue-i18n.md +180 -0
- package/blog/tr/intlayer_with_i18next.md +67 -16
- package/blog/tr/intlayer_with_next-i18next.md +78 -21
- package/blog/tr/intlayer_with_next-intl.md +69 -18
- package/blog/tr/intlayer_with_react-i18next.md +65 -16
- package/blog/tr/intlayer_with_react-intl.md +71 -19
- package/blog/tr/intlayer_with_vue-i18n.md +180 -0
- package/blog/vi/intlayer_with_i18next.md +64 -13
- package/blog/vi/intlayer_with_next-i18next.md +72 -26
- package/blog/vi/intlayer_with_next-intl.md +62 -11
- package/blog/vi/intlayer_with_react-i18next.md +66 -17
- package/blog/vi/intlayer_with_react-intl.md +70 -17
- package/blog/vi/intlayer_with_vue-i18n.md +180 -0
- package/blog/zh/intlayer_with_i18next.md +67 -17
- package/blog/zh/intlayer_with_next-i18next.md +67 -22
- package/blog/zh/intlayer_with_next-intl.md +61 -13
- package/blog/zh/intlayer_with_react-i18next.md +67 -18
- package/blog/zh/intlayer_with_react-intl.md +69 -17
- package/blog/zh/intlayer_with_vue-i18n.md +180 -0
- package/dist/cjs/generated/blog.entry.cjs +19 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +19 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_nextjs_15.md +36 -9
- package/docs/ar/intlayer_with_nextjs_16.md +36 -9
- package/docs/de/intlayer_with_nextjs_15.md +36 -9
- package/docs/de/intlayer_with_nextjs_16.md +24 -6
- package/docs/en/intlayer_with_nextjs_14.md +37 -9
- package/docs/en/intlayer_with_nextjs_15.md +40 -10
- package/docs/en/intlayer_with_nextjs_16.md +40 -10
- package/docs/en/plugins/sync-json.md +152 -55
- package/docs/en/releases/v7.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_15.md +36 -9
- package/docs/en-GB/intlayer_with_nextjs_16.md +36 -9
- package/docs/en-GB/releases/v7.md +1 -1
- package/docs/es/intlayer_with_nextjs_15.md +36 -9
- package/docs/es/intlayer_with_nextjs_16.md +36 -9
- package/docs/fr/intlayer_with_nextjs_15.md +36 -9
- package/docs/fr/intlayer_with_nextjs_16.md +37 -24
- package/docs/hi/intlayer_with_nextjs_15.md +36 -9
- package/docs/hi/intlayer_with_nextjs_16.md +36 -9
- package/docs/id/intlayer_with_nextjs_16.md +36 -9
- package/docs/it/intlayer_with_nextjs_15.md +36 -9
- package/docs/it/intlayer_with_nextjs_16.md +36 -9
- package/docs/ja/intlayer_with_nextjs_15.md +36 -9
- package/docs/ja/intlayer_with_nextjs_16.md +36 -9
- package/docs/ko/intlayer_with_nextjs_15.md +36 -9
- package/docs/ko/intlayer_with_nextjs_16.md +36 -9
- package/docs/pl/intlayer_with_nextjs_16.md +36 -9
- package/docs/pt/intlayer_with_nextjs_15.md +36 -9
- package/docs/pt/intlayer_with_nextjs_16.md +36 -9
- package/docs/ru/intlayer_with_nextjs_15.md +36 -9
- package/docs/ru/intlayer_with_nextjs_16.md +36 -9
- package/docs/tr/intlayer_with_nextjs_15.md +36 -9
- package/docs/tr/intlayer_with_nextjs_16.md +39 -21
- package/docs/vi/intlayer_with_nextjs_16.md +36 -9
- package/docs/zh/intlayer_with_nextjs_15.md +36 -9
- package/docs/zh/intlayer_with_nextjs_16.md +36 -9
- package/package.json +14 -14
- package/src/generated/blog.entry.ts +19 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-10-29
|
|
4
|
+
title: Intlayer と vue-i18n
|
|
5
|
+
description: 包括的な Vue.js 国際化ソリューションのために Intlayer を vue-i18n と統合する
|
|
6
|
+
keywords:
|
|
7
|
+
- vue-i18n
|
|
8
|
+
- Intlayer
|
|
9
|
+
- 国際化
|
|
10
|
+
- ブログ
|
|
11
|
+
- Vue.js
|
|
12
|
+
- Nuxt
|
|
13
|
+
- JavaScript
|
|
14
|
+
- Vue
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- intlayer-with-vue-i18n
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.0.6
|
|
20
|
+
date: 2025-11-01
|
|
21
|
+
changes: loadJSON プラグインを追加
|
|
22
|
+
- version: 7.0.0
|
|
23
|
+
date: 2025-10-29
|
|
24
|
+
changes: syncJSON プラグインへの変更と包括的な書き直し
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# vue-i18n と Intlayer を使った Vue.js の国際化 (i18n)
|
|
28
|
+
|
|
29
|
+
## 目次
|
|
30
|
+
|
|
31
|
+
<TOC/>
|
|
32
|
+
|
|
33
|
+
## Intlayer とは?
|
|
34
|
+
|
|
35
|
+
**Intlayer** は、従来の i18n ソリューションの欠点を解決するために設計された革新的なオープンソースの国際化ライブラリです。Vue.js および Nuxt アプリケーションにおけるコンテンツ管理に対して、モダンなアプローチを提供します。
|
|
36
|
+
|
|
37
|
+
具体的な比較は、当社のブログ記事 [vue-i18n vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/vue-i18n_vs_intlayer.md) をご覧ください。
|
|
38
|
+
|
|
39
|
+
## なぜ Intlayer を vue-i18n と組み合わせるのか?
|
|
40
|
+
|
|
41
|
+
Intlayer は優れた単独の i18n ソリューションを提供します([Vue.js 統合ガイド](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_with_vite+vue.md) を参照)が、いくつかの理由で vue-i18n と組み合わせたい場合があります:
|
|
42
|
+
|
|
43
|
+
1. **既存のコードベース**: 既に確立された vue-i18n の実装があり、Intlayer の改善された開発者体験へ段階的に移行したい場合。
|
|
44
|
+
2. **レガシー要件**: プロジェクトが既存の vue-i18n プラグインやワークフローとの互換性を必要とする場合。
|
|
45
|
+
3. **チームの慣れ**: チームが vue-i18n に慣れているが、より良いコンテンツ管理を望んでいる場合。
|
|
46
|
+
4. **Intlayer の機能利用**: コンテンツ宣言、翻訳の自動化、翻訳のテストなど、Intlayer の機能を利用したい場合。
|
|
47
|
+
|
|
48
|
+
**そのために、Intlayer は vue-i18n のアダプターとして実装でき、CLI や CI/CD パイプラインでの JSON 翻訳の自動化、翻訳のテストなどを支援します。**
|
|
49
|
+
|
|
50
|
+
このガイドでは、vue-i18nとの互換性を維持しながら、Intlayerの優れたコンテンツ宣言システムを活用する方法を示します。
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## vue-i18nとIntlayerをセットアップするステップバイステップガイド
|
|
55
|
+
|
|
56
|
+
### ステップ1: 依存関係のインストール
|
|
57
|
+
|
|
58
|
+
お好みのパッケージマネージャーを使用して必要なパッケージをインストールします:
|
|
59
|
+
|
|
60
|
+
```bash packageManager="npm"
|
|
61
|
+
npm install intlayer @intlayer/sync-json-plugin
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```bash packageManager="pnpm"
|
|
65
|
+
pnpm add intlayer @intlayer/sync-json-plugin
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```bash packageManager="yarn"
|
|
69
|
+
yarn add intlayer @intlayer/sync-json-plugin
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```bash packageManager="bun"
|
|
73
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**パッケージの説明:**
|
|
77
|
+
|
|
78
|
+
- **intlayer**: コンテンツ宣言と管理のためのコアライブラリ
|
|
79
|
+
- **@intlayer/sync-json-plugin**: Intlayerのコンテンツ宣言をvue-i18nのJSON形式に同期するプラグイン
|
|
80
|
+
|
|
81
|
+
### ステップ2: JSONをラップするためのIntlayerプラグインの実装
|
|
82
|
+
|
|
83
|
+
サポートするロケールを定義するためにIntlayerの設定ファイルを作成します。
|
|
84
|
+
|
|
85
|
+
**vue-i18n用のJSON辞書もエクスポートしたい場合は、`syncJSON`プラグインを追加してください:**
|
|
86
|
+
|
|
87
|
+
```typescript fileName="intlayer.config.ts"
|
|
88
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
89
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
90
|
+
|
|
91
|
+
const config: IntlayerConfig = {
|
|
92
|
+
internationalization: {
|
|
93
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
94
|
+
defaultLocale: Locales.ENGLISH,
|
|
95
|
+
},
|
|
96
|
+
plugins: [
|
|
97
|
+
syncJSON({
|
|
98
|
+
source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
|
|
99
|
+
}),
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export default config;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`syncJSON`プラグインはJSONを自動的にラップします。コンテンツの構造を変更することなく、JSONファイルの読み書きを行います。
|
|
107
|
+
|
|
108
|
+
もしそのJSONとintlayerのコンテンツ宣言ファイル(`.content`ファイル)を共存させたい場合、Intlayerは以下の手順で処理します:
|
|
109
|
+
|
|
110
|
+
1. JSONファイルとコンテンツ宣言ファイルの両方を読み込み、intlayerの辞書に変換します。
|
|
111
|
+
2. JSONとコンテンツ宣言ファイルの間に競合がある場合、Intlayerはそれらすべての辞書をマージします。プラグインの優先度やコンテンツ宣言ファイルの優先度に応じて処理されます(すべて設定可能です)。
|
|
112
|
+
|
|
113
|
+
CLIを使ってJSONの翻訳を変更した場合やCMSを使用した場合、Intlayerは新しい翻訳でJSONファイルを更新します。
|
|
114
|
+
|
|
115
|
+
`syncJSON`プラグインの詳細については、[syncJSONプラグインのドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/plugins/sync-json.md)を参照してください。
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
### (オプション)ステップ3:コンポーネントごとのJSON翻訳の実装
|
|
120
|
+
|
|
121
|
+
デフォルトでは、IntlayerはJSONファイルとコンテンツ宣言ファイルの両方を読み込み、マージし、同期します。詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)を参照してください。しかし、必要に応じてIntlayerプラグインを使用して、コードベースのどこにでもあるJSONのローカライズをコンポーネントごとに管理することも可能です。
|
|
122
|
+
|
|
123
|
+
そのためには、`loadJSON`プラグインを使用できます。
|
|
124
|
+
|
|
125
|
+
```ts fileName="intlayer.config.ts"
|
|
126
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
127
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
128
|
+
|
|
129
|
+
const config: IntlayerConfig = {
|
|
130
|
+
internationalization: {
|
|
131
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
132
|
+
defaultLocale: Locales.ENGLISH,
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
// 現在のJSONファイルをIntlayerの辞書と同期させる
|
|
136
|
+
plugins: [
|
|
137
|
+
/**
|
|
138
|
+
* src内の{key}.i18n.jsonパターンに一致するすべてのJSONファイルを読み込みます
|
|
139
|
+
*/
|
|
140
|
+
loadJSON({
|
|
141
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
142
|
+
locale: Locales.ENGLISH,
|
|
143
|
+
priority: 1, // これらのJSONファイルが`./locales/en/${key}.json`のファイルより優先されることを保証します
|
|
144
|
+
}),
|
|
145
|
+
/**
|
|
146
|
+
* ローカルディレクトリ内のJSONファイルに出力と翻訳を書き戻しながら読み込みます
|
|
147
|
+
*/
|
|
148
|
+
syncJSON({
|
|
149
|
+
source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
|
|
150
|
+
priority: 0,
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export default config;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
これは、`src` ディレクトリ内の `{key}.i18n.json` パターンに一致するすべての JSON ファイルを読み込み、Intlayer の辞書としてロードします。
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Git 設定
|
|
163
|
+
|
|
164
|
+
生成されたファイルをバージョン管理から除外します:
|
|
165
|
+
|
|
166
|
+
```plaintext fileName=".gitignore"
|
|
167
|
+
# Intlayer によって生成されたファイルを無視する
|
|
168
|
+
.intlayer
|
|
169
|
+
intl
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
これらのファイルはビルドプロセス中に自動的に再生成されるため、リポジトリにコミットする必要はありません。
|
|
173
|
+
|
|
174
|
+
### VS Code 拡張機能
|
|
175
|
+
|
|
176
|
+
開発者体験を向上させるために、公式の **Intlayer VS Code 拡張機能** をインストールしてください:
|
|
177
|
+
|
|
178
|
+
[VS Code マーケットプレイスからインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
179
|
+
|
|
180
|
+
[VS Codeマーケットプレイスからインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-12-24
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-11-01
|
|
4
4
|
title: Intlayer를 사용하여 i18next JSON 번역 자동화하는 방법
|
|
5
5
|
description: JavaScript 애플리케이션에서 향상된 국제화를 위해 Intlayer와 i18next를 사용하여 JSON 번역을 자동화하세요.
|
|
6
6
|
keywords:
|
|
@@ -20,6 +20,9 @@ slugs:
|
|
|
20
20
|
- blog
|
|
21
21
|
- intlayer-with-i18next
|
|
22
22
|
history:
|
|
23
|
+
- version: 7.0.6
|
|
24
|
+
date: 2025-11-01
|
|
25
|
+
changes: loadJSON 플러그인 추가
|
|
23
26
|
- version: 7.0.0
|
|
24
27
|
date: 2025-10-29
|
|
25
28
|
changes: syncJSON 플러그인으로 변경
|
|
@@ -29,17 +32,18 @@ history:
|
|
|
29
32
|
|
|
30
33
|
## Intlayer란 무엇인가요?
|
|
31
34
|
|
|
32
|
-
**Intlayer**는 전통적인 i18n 솔루션의 한계를 극복하기 위해 설계된 혁신적이고 오픈 소스인 국제화 라이브러리입니다. JavaScript 애플리케이션에서
|
|
35
|
+
**Intlayer**는 전통적인 i18n 솔루션의 한계를 극복하기 위해 설계된 혁신적이고 오픈 소스인 국제화 라이브러리입니다. JavaScript 애플리케이션에서 콘텐츠 관리를 위한 현대적인 접근 방식을 제공합니다.
|
|
33
36
|
|
|
34
37
|
i18next와의 구체적인 비교는 저희 블로그 게시물 [next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md)에서 확인할 수 있습니다.
|
|
35
38
|
|
|
36
|
-
## 왜 Intlayer와 i18next를
|
|
39
|
+
## 왜 Intlayer와 i18next를 결합해야 할까요?
|
|
37
40
|
|
|
38
|
-
Intlayer는 훌륭한 독립형 i18n 솔루션을 제공하지만(자세한 내용은 [Next.js 통합 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_nextjs_16.md)를 참조), 다음과 같은 여러 이유로 i18next와
|
|
41
|
+
Intlayer는 훌륭한 독립형 i18n 솔루션을 제공하지만(자세한 내용은 [Next.js 통합 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_nextjs_16.md)를 참조), 다음과 같은 여러 이유로 i18next와 결합하여 사용할 수 있습니다:
|
|
39
42
|
|
|
40
|
-
1. **기존 코드베이스**: 이미 구축된 i18next 구현이 있으며 Intlayer의 향상된 개발자 경험으로 점진적으로
|
|
41
|
-
2. **레거시 요구사항**: 프로젝트가 기존 i18next 플러그인 또는 워크플로우와의 호환성을 필요로
|
|
42
|
-
3. **팀 친숙도**: 팀이 i18next에 익숙하지만 더 나은 콘텐츠 관리를
|
|
43
|
+
1. **기존 코드베이스**: 이미 구축된 i18next 구현이 있으며 Intlayer의 향상된 개발자 경험으로 점진적으로 마이그레이션하고자 합니다.
|
|
44
|
+
2. **레거시 요구사항**: 프로젝트가 기존 i18next 플러그인 또는 워크플로우와의 호환성을 필요로 합니다.
|
|
45
|
+
3. **팀 친숙도**: 팀이 i18next에 익숙하지만 더 나은 콘텐츠 관리를 원합니다.
|
|
46
|
+
4. **Intlayer 기능 사용**: 콘텐츠 선언, 번역 키 관리, 번역 상태 등 Intlayer의 기능을 사용하고자 합니다.
|
|
43
47
|
|
|
44
48
|
**이를 위해 Intlayer는 i18next의 어댑터로 구현되어 CLI 또는 CI/CD 파이프라인에서 JSON 번역 자동화, 번역 테스트 등 다양한 작업을 지원할 수 있습니다.**
|
|
45
49
|
|
|
@@ -49,7 +53,7 @@ Intlayer는 훌륭한 독립형 i18n 솔루션을 제공하지만(자세한 내
|
|
|
49
53
|
|
|
50
54
|
<TOC/>
|
|
51
55
|
|
|
52
|
-
## i18next와 함께
|
|
56
|
+
## Intlayer를 i18next와 함께 설정하는 단계별 가이드
|
|
53
57
|
|
|
54
58
|
### 1단계: 의존성 설치
|
|
55
59
|
|
|
@@ -67,6 +71,10 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
67
71
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
68
72
|
```
|
|
69
73
|
|
|
74
|
+
```bash packageManager="bun"
|
|
75
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
76
|
+
```
|
|
77
|
+
|
|
70
78
|
**패키지 설명:**
|
|
71
79
|
|
|
72
80
|
- **intlayer**: 국제화 관리, 콘텐츠 선언 및 빌드를 위한 핵심 라이브러리
|
|
@@ -74,7 +82,7 @@ yarn add intlayer @intlayer/sync-json-plugin
|
|
|
74
82
|
|
|
75
83
|
### 2단계: JSON을 래핑하기 위한 Intlayer 플러그인 구현
|
|
76
84
|
|
|
77
|
-
지원하는 로케일을 정의하기 위해 Intlayer 구성 파일을
|
|
85
|
+
지원하는 로케일을 정의하기 위해 Intlayer 구성 파일을 만듭니다:
|
|
78
86
|
|
|
79
87
|
**i18next용 JSON 사전도 내보내고 싶다면**, `syncJSON` 플러그인을 추가하세요:
|
|
80
88
|
|
|
@@ -89,7 +97,7 @@ const config: IntlayerConfig = {
|
|
|
89
97
|
},
|
|
90
98
|
plugins: [
|
|
91
99
|
syncJSON({
|
|
92
|
-
source: ({ key, locale }) => `./
|
|
100
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
93
101
|
}),
|
|
94
102
|
],
|
|
95
103
|
};
|
|
@@ -97,47 +105,70 @@ const config: IntlayerConfig = {
|
|
|
97
105
|
export default config;
|
|
98
106
|
```
|
|
99
107
|
|
|
100
|
-
`syncJSON` 플러그인은 JSON을 자동으로 래핑합니다. 콘텐츠 구조를 변경하지 않고 JSON 파일을 읽고
|
|
108
|
+
`syncJSON` 플러그인은 JSON을 자동으로 래핑합니다. 콘텐츠 구조를 변경하지 않고 JSON 파일을 읽고 쓸 수 있습니다.
|
|
101
109
|
|
|
102
110
|
만약 JSON과 intlayer 콘텐츠 선언 파일(`.content` 파일)을 공존시키고 싶다면, Intlayer는 다음과 같이 처리합니다:
|
|
103
111
|
|
|
104
|
-
|
|
112
|
+
1. JSON 파일과 콘텐츠 선언 파일을 모두 로드하여 intlayer 사전(dictionary)으로 변환합니다.
|
|
113
|
+
2. JSON과 콘텐츠 선언 파일 간에 충돌이 있을 경우, Intlayer는 모든 사전을 병합합니다. 이때 플러그인의 우선순위와 콘텐츠 선언 파일의 우선순위에 따라 처리되며, 모두 설정 가능합니다.
|
|
105
114
|
|
|
106
|
-
|
|
115
|
+
CLI를 사용하여 JSON 번역을 변경하거나 CMS를 통해 변경하면, Intlayer는 새로운 번역으로 JSON 파일을 업데이트합니다.
|
|
107
116
|
|
|
108
|
-
|
|
117
|
+
`syncJSON` 플러그인에 대한 자세한 내용을 보려면 [syncJSON 플러그인 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/plugins/sync-json.md)를 참조하세요.
|
|
109
118
|
|
|
110
|
-
|
|
119
|
+
### (선택 사항) 3단계: 컴포넌트별 JSON 번역 구현
|
|
111
120
|
|
|
112
|
-
|
|
121
|
+
기본적으로 Intlayer는 JSON 파일과 콘텐츠 선언 파일을 모두 로드, 병합 및 동기화합니다. 자세한 내용은 [콘텐츠 선언 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md)를 참조하세요. 하지만 원한다면 Intlayer 플러그인을 사용하여 코드베이스 어디에서나 로컬라이즈된 JSON을 컴포넌트별로 관리할 수도 있습니다.
|
|
113
122
|
|
|
114
|
-
|
|
115
|
-
# Intlayer에서 생성된 파일 무시
|
|
116
|
-
.intlayer
|
|
117
|
-
```
|
|
123
|
+
이를 위해 `loadJSON` 플러그인을 사용할 수 있습니다.
|
|
118
124
|
|
|
119
|
-
|
|
125
|
+
```ts fileName="intlayer.config.ts"
|
|
126
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
127
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
120
128
|
|
|
121
|
-
|
|
129
|
+
const config: IntlayerConfig = {
|
|
130
|
+
internationalization: {
|
|
131
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
132
|
+
defaultLocale: Locales.ENGLISH,
|
|
133
|
+
},
|
|
122
134
|
|
|
123
|
-
|
|
135
|
+
// 현재 JSON 파일을 Intlayer 사전과 동기화 상태로 유지합니다
|
|
136
|
+
plugins: [
|
|
137
|
+
/**
|
|
138
|
+
* src 내에서 {key}.i18n.json 패턴에 맞는 모든 JSON 파일을 로드합니다
|
|
139
|
+
*/
|
|
140
|
+
loadJSON({
|
|
141
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
142
|
+
locale: Locales.ENGLISH,
|
|
143
|
+
priority: 1, // 이 JSON 파일들이 `./locales/en/${key}.json` 파일보다 우선권을 갖도록 보장합니다
|
|
144
|
+
}),
|
|
145
|
+
/**
|
|
146
|
+
* locales 디렉토리 내 JSON 파일에 출력 및 번역을 로드하고 다시 씁니다
|
|
147
|
+
*/
|
|
148
|
+
syncJSON({
|
|
149
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
150
|
+
priority: 0,
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
};
|
|
124
154
|
|
|
125
|
-
|
|
155
|
+
export default config;
|
|
156
|
+
```
|
|
126
157
|
|
|
127
|
-
|
|
158
|
+
이 설정은 `src` 디렉토리 내에서 `{key}.i18n.json` 패턴과 일치하는 모든 JSON 파일을 불러와 Intlayer 사전으로 로드합니다.
|
|
128
159
|
|
|
129
|
-
|
|
160
|
+
---
|
|
130
161
|
|
|
131
|
-
## Git
|
|
162
|
+
## Git 설정
|
|
132
163
|
|
|
133
|
-
자동 생성된 Intlayer
|
|
164
|
+
자동 생성된 Intlayer 파일은 무시하는 것이 권장됩니다:
|
|
134
165
|
|
|
135
166
|
```plaintext fileName=".gitignore"
|
|
136
167
|
# Intlayer에서 생성된 파일 무시
|
|
137
168
|
.intlayer
|
|
138
169
|
```
|
|
139
170
|
|
|
140
|
-
이 파일들은 빌드
|
|
171
|
+
이 파일들은 빌드 과정에서 다시 생성될 수 있으므로 버전 관리에 커밋할 필요가 없습니다.
|
|
141
172
|
|
|
142
173
|
### VS Code 확장 프로그램
|
|
143
174
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
createdAt: 2025-08-23
|
|
3
3
|
updatedAt: 2025-10-29
|
|
4
4
|
title: Intlayer와 next-i18next
|
|
5
|
-
description: 포괄적인 Next.js 국제화 솔루션을
|
|
5
|
+
description: 포괄적인 Next.js 국제화 솔루션을 위한 Intlayer와 next-i18next 통합
|
|
6
6
|
keywords:
|
|
7
7
|
- i18next
|
|
8
8
|
- next-i18next
|
|
@@ -16,6 +16,9 @@ slugs:
|
|
|
16
16
|
- blog
|
|
17
17
|
- intlayer-with-next-i18next
|
|
18
18
|
history:
|
|
19
|
+
- version: 7.0.6
|
|
20
|
+
date: 2025-11-01
|
|
21
|
+
changes: loadJSON 플러그인 추가
|
|
19
22
|
- version: 7.0.0
|
|
20
23
|
date: 2025-10-29
|
|
21
24
|
changes: syncJSON 플러그인으로 변경 및 전면 개편
|
|
@@ -34,7 +37,7 @@ history:
|
|
|
34
37
|
하지만 next-i18next에는 몇 가지 어려움이 있습니다:
|
|
35
38
|
|
|
36
39
|
- **복잡한 설정**: next-i18next를 설정하려면 여러 구성 파일과 서버 측 및 클라이언트 측 i18n 인스턴스의 신중한 설정이 필요합니다.
|
|
37
|
-
- **분산된 번역 파일**: 번역 파일이 일반적으로 컴포넌트와 별도의 디렉토리에 저장되어
|
|
40
|
+
- **분산된 번역 파일**: 번역 파일이 일반적으로 컴포넌트와 별도의 디렉토리에 저장되어 일관성을 유지하기 어렵습니다.
|
|
38
41
|
- **수동 네임스페이스 관리**: 개발자가 네임스페이스를 수동으로 관리하고 번역 리소스가 제대로 로드되도록 해야 합니다.
|
|
39
42
|
- **제한된 타입 안전성**: TypeScript 지원은 추가 구성이 필요하며 번역에 대한 자동 타입 생성을 제공하지 않습니다.
|
|
40
43
|
|
|
@@ -46,13 +49,13 @@ history:
|
|
|
46
49
|
|
|
47
50
|
## 왜 Intlayer를 next-i18next와 결합해야 하나요?
|
|
48
51
|
|
|
49
|
-
Intlayer
|
|
52
|
+
Intlayer가 훌륭한 독립형 i18n 솔루션을 제공하지만(자세한 내용은 [Next.js 통합 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_nextjs_16.md) 참조), 다음과 같은 여러 이유로 next-i18next와 결합하여 사용할 수 있습니다:
|
|
50
53
|
|
|
51
|
-
1. **기존 코드베이스**: 이미 구축된 next-i18next 구현이 있으며 Intlayer의 향상된 개발자 경험으로 점진적으로
|
|
52
|
-
2. **레거시 요구사항**: 프로젝트가 기존 i18next 플러그인 또는 워크플로우와의 호환성을 필요로
|
|
53
|
-
3. **팀 친숙도**: 팀이 next-i18next에 익숙하지만 더 나은 콘텐츠 관리를 원할
|
|
54
|
+
1. **기존 코드베이스**: 이미 구축된 next-i18next 구현이 있으며 Intlayer의 향상된 개발자 경험으로 점진적으로 마이그레이션하려는 경우.
|
|
55
|
+
2. **레거시 요구사항**: 프로젝트가 기존 i18next 플러그인 또는 워크플로우와의 호환성을 필요로 하는 경우.
|
|
56
|
+
3. **팀 친숙도**: 팀이 next-i18next에 익숙하지만 더 나은 콘텐츠 관리를 원할 경우.
|
|
54
57
|
|
|
55
|
-
**이를
|
|
58
|
+
**이를 위해, Intlayer는 next-i18next의 어댑터로 구현되어 CLI 또는 CI/CD 파이프라인에서 JSON 번역 자동화, 번역 테스트 등 다양한 작업을 지원할 수 있습니다.**
|
|
56
59
|
|
|
57
60
|
이 가이드는 next-i18next와의 호환성을 유지하면서 Intlayer의 우수한 콘텐츠 선언 시스템을 활용하는 방법을 보여줍니다.
|
|
58
61
|
|
|
@@ -76,16 +79,16 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
76
79
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
77
80
|
```
|
|
78
81
|
|
|
82
|
+
```bash packageManager="bun"
|
|
83
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
84
|
+
```
|
|
85
|
+
|
|
79
86
|
**패키지 설명:**
|
|
80
87
|
|
|
81
88
|
- **intlayer**: 콘텐츠 선언 및 관리를 위한 핵심 라이브러리
|
|
82
|
-
-
|
|
83
|
-
- **i18next**: 핵심 i18n 프레임워크
|
|
84
|
-
- **next-i18next**: i18next를 위한 Next.js 래퍼
|
|
85
|
-
- **i18next-resources-to-backend**: i18next를 위한 동적 리소스 로딩
|
|
86
|
-
- **@intlayer/sync-json-plugin**: Intlayer 콘텐츠 선언을 i18next JSON 형식으로 동기화하는 플러그인
|
|
89
|
+
- **@intlayer/sync-json-plugin**: Intlayer 콘텐츠 선언을 i18next JSON 형식과 동기화하는 플러그인
|
|
87
90
|
|
|
88
|
-
### 2단계: JSON을
|
|
91
|
+
### 2단계: JSON을 래핑하기 위한 Intlayer 플러그인 구현
|
|
89
92
|
|
|
90
93
|
지원하는 로케일을 정의하기 위해 Intlayer 구성 파일을 만듭니다:
|
|
91
94
|
|
|
@@ -102,7 +105,7 @@ const config: IntlayerConfig = {
|
|
|
102
105
|
},
|
|
103
106
|
plugins: [
|
|
104
107
|
syncJSON({
|
|
105
|
-
source: ({ key, locale }) => `./
|
|
108
|
+
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
106
109
|
}),
|
|
107
110
|
],
|
|
108
111
|
};
|
|
@@ -112,43 +115,63 @@ export default config;
|
|
|
112
115
|
|
|
113
116
|
`syncJSON` 플러그인은 JSON을 자동으로 래핑합니다. 콘텐츠 구조를 변경하지 않고 JSON 파일을 읽고 씁니다.
|
|
114
117
|
|
|
115
|
-
JSON과 intlayer 콘텐츠 선언 파일(`.content` 파일)을 공존시키고 싶다면, Intlayer는 다음과 같이 처리합니다:
|
|
118
|
+
만약 JSON과 intlayer 콘텐츠 선언 파일(`.content` 파일)을 공존시키고 싶다면, Intlayer는 다음과 같이 처리합니다:
|
|
116
119
|
|
|
117
120
|
1. JSON과 콘텐츠 선언 파일을 모두 로드하여 intlayer 사전으로 변환합니다.
|
|
121
|
+
2. JSON과 콘텐츠 선언 파일 간에 충돌이 있을 경우, Intlayer는 모든 사전을 병합합니다. 이 과정은 플러그인의 우선순위와 콘텐츠 선언 파일의 우선순위에 따라 달라집니다(모두 구성 가능합니다).
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
CLI를 사용하여 JSON을 번역하거나 CMS를 사용하여 변경 사항이 발생하면, Intlayer는 새로운 번역으로 JSON 파일을 업데이트합니다.
|
|
120
124
|
|
|
121
|
-
|
|
125
|
+
`syncJSON` 플러그인에 대한 자세한 내용은 [syncJSON 플러그인 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/plugins/sync-json.md)를 참조하세요.
|
|
122
126
|
|
|
123
127
|
---
|
|
124
128
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
생성된 파일을 버전 관리에서 제외하세요:
|
|
129
|
+
### (선택 사항) 3단계: 컴포넌트별 JSON 번역 구현
|
|
128
130
|
|
|
129
|
-
|
|
130
|
-
# Intlayer에서 생성된 파일 무시
|
|
131
|
-
.intlayer
|
|
132
|
-
intl
|
|
133
|
-
```
|
|
131
|
+
기본적으로 Intlayer는 JSON 파일과 콘텐츠 선언 파일을 모두 로드, 병합 및 동기화합니다. 자세한 내용은 [콘텐츠 선언 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md)를 참조하세요. 하지만 원한다면 Intlayer 플러그인을 사용하여 코드베이스 어디에서나 지역화된 JSON을 컴포넌트별로 관리할 수도 있습니다.
|
|
134
132
|
|
|
135
|
-
|
|
133
|
+
이를 위해 `loadJSON` 플러그인을 사용할 수 있습니다.
|
|
136
134
|
|
|
137
|
-
|
|
135
|
+
```ts fileName="intlayer.config.ts"
|
|
136
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
137
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
const config: IntlayerConfig = {
|
|
140
|
+
internationalization: {
|
|
141
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
142
|
+
defaultLocale: Locales.ENGLISH,
|
|
143
|
+
},
|
|
140
144
|
|
|
141
|
-
|
|
145
|
+
// 현재 JSON 파일을 Intlayer 사전과 동기화 상태로 유지합니다
|
|
146
|
+
plugins: [
|
|
147
|
+
/**
|
|
148
|
+
* src 내에서 {key}.i18n.json 패턴과 일치하는 모든 JSON 파일을 로드합니다
|
|
149
|
+
*/
|
|
150
|
+
loadJSON({
|
|
151
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
152
|
+
locale: Locales.ENGLISH,
|
|
153
|
+
priority: 1, // 이 JSON 파일들이 `./public/locales/en/${key}.json` 파일보다 우선권을 갖도록 보장합니다
|
|
154
|
+
}),
|
|
155
|
+
/**
|
|
156
|
+
* 로케일 디렉토리 내 JSON 파일에 출력 및 번역을 다시 작성하고 로드합니다.
|
|
157
|
+
*/
|
|
158
|
+
syncJSON({
|
|
159
|
+
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
160
|
+
priority: 0,
|
|
161
|
+
}),
|
|
162
|
+
],
|
|
163
|
+
};
|
|
142
164
|
|
|
143
|
-
|
|
165
|
+
export default config;
|
|
166
|
+
```
|
|
144
167
|
|
|
145
|
-
|
|
168
|
+
이 설정은 `src` 디렉토리 내에서 `{key}.i18n.json` 패턴과 일치하는 모든 JSON 파일을 로드하여 Intlayer 사전으로 불러옵니다.
|
|
146
169
|
|
|
147
170
|
---
|
|
148
171
|
|
|
149
172
|
## Git 구성
|
|
150
173
|
|
|
151
|
-
버전 관리에서
|
|
174
|
+
생성된 파일을 버전 관리에서 제외하세요:
|
|
152
175
|
|
|
153
176
|
```plaintext fileName=".gitignore"
|
|
154
177
|
# Intlayer에서 생성된 파일 무시
|
|
@@ -163,3 +186,7 @@ intl
|
|
|
163
186
|
개발자 경험 향상을 위해 공식 **Intlayer VS Code 확장 프로그램**을 설치하세요:
|
|
164
187
|
|
|
165
188
|
[VS Code 마켓플레이스에서 설치하기](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
189
|
+
|
|
190
|
+
개발자 경험을 향상시키기 위해 공식 **Intlayer VS Code 확장 프로그램**을 설치하세요:
|
|
191
|
+
|
|
192
|
+
[VS Code 마켓플레이스에서 설치하기](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
createdAt: 2025-01-02
|
|
3
3
|
updatedAt: 2025-10-29
|
|
4
4
|
title: Intlayer를 사용하여 next-intl JSON 번역 자동화하는 방법
|
|
5
|
-
description: Next.js 애플리케이션에서 향상된 국제화를 위해 Intlayer와 next-intl
|
|
5
|
+
description: Next.js 애플리케이션에서 향상된 국제화를 위해 Intlayer와 next-intl로 JSON 번역을 자동화하세요.
|
|
6
6
|
slugs:
|
|
7
7
|
- blog
|
|
8
8
|
- intlayer-with-next-intl
|
|
9
9
|
history:
|
|
10
|
+
- version: 7.0.6
|
|
11
|
+
date: 2025-11-01
|
|
12
|
+
changes: loadJSON 플러그인 추가
|
|
10
13
|
- version: 7.0.0
|
|
11
14
|
date: 2025-10-29
|
|
12
15
|
changes: syncJSON 플러그인으로 변경
|
|
@@ -16,16 +19,16 @@ history:
|
|
|
16
19
|
|
|
17
20
|
## Intlayer란 무엇인가요?
|
|
18
21
|
|
|
19
|
-
**Intlayer**는
|
|
22
|
+
**Intlayer**는 전통적인 i18n 솔루션의 한계를 극복하기 위해 설계된 혁신적이고 오픈 소스인 국제화 라이브러리입니다. Next.js 애플리케이션에서 콘텐츠 관리를 위한 현대적인 접근 방식을 제공합니다.
|
|
20
23
|
|
|
21
|
-
next-intl과의 구체적인 비교는 저희 [next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md) 블로그 게시물을
|
|
24
|
+
next-intl과의 구체적인 비교는 저희 [next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md) 블로그 게시물을 참조하세요.
|
|
22
25
|
|
|
23
|
-
## 왜 Intlayer
|
|
26
|
+
## 왜 Intlayer를 next-intl와 결합해야 할까요?
|
|
24
27
|
|
|
25
|
-
Intlayer는 훌륭한 독립형 i18n 솔루션을 제공하지만(자세한 내용은 저희 [Next.js 통합 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_nextjs_16.md)를 참조), 다음과 같은 여러 이유로 next-intl과
|
|
28
|
+
Intlayer는 훌륭한 독립형 i18n 솔루션을 제공하지만(자세한 내용은 저희 [Next.js 통합 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_nextjs_16.md)를 참조), 다음과 같은 여러 이유로 next-intl과 결합하여 사용할 수 있습니다:
|
|
26
29
|
|
|
27
30
|
1. **기존 코드베이스**: 이미 구축된 next-intl 구현이 있으며 Intlayer의 향상된 개발자 경험으로 점진적으로 이전하고자 할 때.
|
|
28
|
-
2. **레거시 요구사항**: 프로젝트가 기존 next-intl
|
|
31
|
+
2. **레거시 요구사항**: 프로젝트가 기존 next-intl 플러그인 또는 워크플로우와의 호환성을 필요로 할 때.
|
|
29
32
|
3. **팀 친숙도**: 팀이 next-intl에 익숙하지만 더 나은 콘텐츠 관리를 원할 때.
|
|
30
33
|
|
|
31
34
|
**이를 위해 Intlayer는 next-intl의 어댑터로 구현되어 CLI 또는 CI/CD 파이프라인에서 JSON 번역 자동화, 번역 테스트 등 다양한 작업을 지원할 수 있습니다.**
|
|
@@ -54,6 +57,10 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
54
57
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
55
58
|
```
|
|
56
59
|
|
|
60
|
+
```bash packageManager="bun"
|
|
61
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
62
|
+
```
|
|
63
|
+
|
|
57
64
|
**패키지 설명:**
|
|
58
65
|
|
|
59
66
|
- **intlayer**: 국제화 관리, 콘텐츠 선언 및 빌드를 위한 핵심 라이브러리
|
|
@@ -88,36 +95,58 @@ export default config;
|
|
|
88
95
|
|
|
89
96
|
만약 JSON과 intlayer 콘텐츠 선언 파일(`.content` 파일)을 공존시키고 싶다면, Intlayer는 다음과 같이 처리합니다:
|
|
90
97
|
|
|
91
|
-
1. JSON과 콘텐츠 선언 파일을 모두
|
|
98
|
+
1. JSON과 콘텐츠 선언 파일을 모두 로드하여 intlayer 사전(dictionary)으로 변환합니다.
|
|
92
99
|
|
|
93
|
-
2. JSON과 콘텐츠 선언 파일 간에 충돌이 있는 경우, Intlayer는 모든 사전을 병합하는
|
|
100
|
+
2. JSON과 콘텐츠 선언 파일 간에 충돌이 있는 경우, Intlayer는 모든 사전을 병합하는 작업을 수행합니다. 이는 플러그인의 우선순위와 콘텐츠 선언 파일의 우선순위에 따라 달라집니다(모두 구성 가능합니다).
|
|
94
101
|
|
|
95
|
-
CLI를 사용하여 JSON을 번역하거나 CMS를 통해 변경 사항이
|
|
102
|
+
CLI를 사용하여 JSON을 번역하거나 CMS를 통해 변경 사항이 이루어지면, Intlayer는 새로운 번역으로 JSON 파일을 업데이트합니다.
|
|
96
103
|
|
|
97
|
-
|
|
104
|
+
`syncJSON` 플러그인에 대한 자세한 내용은 [syncJSON 플러그인 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/plugins/sync-json.md)를 참조하세요.
|
|
98
105
|
|
|
99
|
-
|
|
106
|
+
### (선택 사항) 3단계: 컴포넌트별 JSON 번역 구현
|
|
100
107
|
|
|
101
|
-
|
|
102
|
-
# Intlayer에서 생성된 파일 무시
|
|
103
|
-
.intlayer
|
|
104
|
-
```
|
|
108
|
+
기본적으로 Intlayer는 JSON 파일과 콘텐츠 선언 파일을 모두 로드, 병합 및 동기화합니다. 자세한 내용은 [콘텐츠 선언 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md)를 참조하세요. 하지만 원한다면 Intlayer 플러그인을 사용하여 코드베이스 어디에서나 JSON을 컴포넌트별로 관리하는 기능을 구현할 수도 있습니다.
|
|
105
109
|
|
|
106
|
-
|
|
110
|
+
이를 위해 `loadJSON` 플러그인을 사용할 수 있습니다.
|
|
107
111
|
|
|
108
|
-
|
|
112
|
+
```ts fileName="intlayer.config.ts"
|
|
113
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
114
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
109
115
|
|
|
110
|
-
|
|
116
|
+
const config: IntlayerConfig = {
|
|
117
|
+
internationalization: {
|
|
118
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
119
|
+
defaultLocale: Locales.ENGLISH,
|
|
120
|
+
},
|
|
111
121
|
|
|
112
|
-
|
|
122
|
+
// 현재 JSON 파일을 Intlayer 사전과 동기화 상태로 유지합니다
|
|
123
|
+
plugins: [
|
|
124
|
+
/**
|
|
125
|
+
* src 디렉토리 내에서 {key}.i18n.json 패턴에 맞는 모든 JSON 파일을 로드합니다
|
|
126
|
+
*/
|
|
127
|
+
loadJSON({
|
|
128
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
129
|
+
locale: Locales.ENGLISH,
|
|
130
|
+
priority: 1, // 이 JSON 파일들이 `./locales/en/${key}.json` 파일보다 우선시되도록 합니다
|
|
131
|
+
}),
|
|
132
|
+
/**
|
|
133
|
+
* locales 디렉토리 내 JSON 파일에 출력 및 번역 내용을 다시 기록하며 로드합니다
|
|
134
|
+
*/
|
|
135
|
+
syncJSON({
|
|
136
|
+
source: ({ key, locale }) => `./messages/${locale}/${key}.json`,
|
|
137
|
+
priority: 0,
|
|
138
|
+
}),
|
|
139
|
+
],
|
|
140
|
+
};
|
|
113
141
|
|
|
114
|
-
|
|
142
|
+
export default config;
|
|
143
|
+
```
|
|
115
144
|
|
|
116
|
-
|
|
145
|
+
이 설정은 `src` 디렉토리 내에서 `{key}.i18n.json` 패턴과 일치하는 모든 JSON 파일을 로드하여 Intlayer 사전으로 불러옵니다.
|
|
117
146
|
|
|
118
147
|
## Git 구성
|
|
119
148
|
|
|
120
|
-
자동 생성된 Intlayer
|
|
149
|
+
자동 생성된 Intlayer 파일은 무시하는 것이 권장됩니다:
|
|
121
150
|
|
|
122
151
|
```plaintext fileName=".gitignore"
|
|
123
152
|
# Intlayer에서 생성된 파일 무시
|
|
@@ -128,6 +157,6 @@ CLI를 사용하여 JSON 번역을 변경하거나 CMS를 사용하여 변경하
|
|
|
128
157
|
|
|
129
158
|
### VS Code 확장 프로그램
|
|
130
159
|
|
|
131
|
-
개발자
|
|
160
|
+
개발자 경험을 향상시키기 위해 공식 **Intlayer VS Code 확장 프로그램**을 설치하세요:
|
|
132
161
|
|
|
133
162
|
[VS Code 마켓플레이스에서 설치하기](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|