@intlayer/docs 7.5.9 → 7.5.10

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.
Files changed (128) hide show
  1. package/README.md +9 -2
  2. package/dist/cjs/generated/docs.entry.cjs +19 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +19 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/cli/push.md +1 -1
  9. package/docs/ar/configuration.md +3 -3
  10. package/docs/ar/interest_of_intlayer.md +1 -1
  11. package/docs/ar/intlayer_CMS.md +5 -5
  12. package/docs/ar/intlayer_with_express.md +1 -0
  13. package/docs/ar/intlayer_with_fastify.md +516 -0
  14. package/docs/ar/readme.md +1 -1
  15. package/docs/de/cli/push.md +1 -1
  16. package/docs/de/configuration.md +3 -3
  17. package/docs/de/interest_of_intlayer.md +1 -1
  18. package/docs/de/intlayer_CMS.md +5 -5
  19. package/docs/de/intlayer_with_express.md +1 -0
  20. package/docs/de/intlayer_with_fastify.md +449 -0
  21. package/docs/de/readme.md +1 -1
  22. package/docs/en/cli/push.md +1 -1
  23. package/docs/en/configuration.md +3 -3
  24. package/docs/en/interest_of_intlayer.md +1 -1
  25. package/docs/en/intlayer_CMS.md +5 -5
  26. package/docs/en/intlayer_with_express.md +1 -0
  27. package/docs/en/intlayer_with_fastify.md +439 -0
  28. package/docs/en/readme.md +3 -1
  29. package/docs/en-GB/cli/push.md +1 -1
  30. package/docs/en-GB/configuration.md +3 -3
  31. package/docs/en-GB/interest_of_intlayer.md +1 -1
  32. package/docs/en-GB/intlayer_CMS.md +5 -5
  33. package/docs/en-GB/intlayer_with_express.md +1 -0
  34. package/docs/en-GB/intlayer_with_fastify.md +445 -0
  35. package/docs/en-GB/readme.md +3 -1
  36. package/docs/es/cli/push.md +1 -1
  37. package/docs/es/configuration.md +3 -3
  38. package/docs/es/interest_of_intlayer.md +1 -1
  39. package/docs/es/intlayer_CMS.md +5 -5
  40. package/docs/es/intlayer_with_express.md +1 -0
  41. package/docs/es/intlayer_with_fastify.md +480 -0
  42. package/docs/es/readme.md +1 -1
  43. package/docs/fr/cli/push.md +1 -1
  44. package/docs/fr/configuration.md +3 -3
  45. package/docs/fr/interest_of_intlayer.md +1 -1
  46. package/docs/fr/intlayer_CMS.md +5 -5
  47. package/docs/fr/intlayer_with_express.md +1 -0
  48. package/docs/fr/intlayer_with_fastify.md +439 -0
  49. package/docs/fr/readme.md +1 -1
  50. package/docs/hi/cli/push.md +1 -1
  51. package/docs/hi/configuration.md +3 -3
  52. package/docs/hi/interest_of_intlayer.md +1 -1
  53. package/docs/hi/intlayer_CMS.md +5 -5
  54. package/docs/hi/intlayer_with_express.md +1 -0
  55. package/docs/hi/intlayer_with_fastify.md +540 -0
  56. package/docs/hi/readme.md +1 -1
  57. package/docs/id/cli/push.md +1 -1
  58. package/docs/id/configuration.md +3 -3
  59. package/docs/id/interest_of_intlayer.md +1 -1
  60. package/docs/id/intlayer_CMS.md +5 -5
  61. package/docs/id/intlayer_with_express.md +1 -0
  62. package/docs/id/intlayer_with_fastify.md +470 -0
  63. package/docs/id/readme.md +1 -1
  64. package/docs/it/cli/push.md +1 -1
  65. package/docs/it/configuration.md +3 -3
  66. package/docs/it/interest_of_intlayer.md +1 -1
  67. package/docs/it/intlayer_CMS.md +5 -5
  68. package/docs/it/intlayer_with_express.md +1 -0
  69. package/docs/it/intlayer_with_fastify.md +445 -0
  70. package/docs/it/readme.md +1 -1
  71. package/docs/ja/cli/push.md +1 -1
  72. package/docs/ja/configuration.md +3 -3
  73. package/docs/ja/interest_of_intlayer.md +1 -1
  74. package/docs/ja/intlayer_CMS.md +5 -5
  75. package/docs/ja/intlayer_with_express.md +1 -0
  76. package/docs/ja/intlayer_with_fastify.md +516 -0
  77. package/docs/ja/readme.md +1 -1
  78. package/docs/ko/cli/push.md +1 -1
  79. package/docs/ko/configuration.md +3 -3
  80. package/docs/ko/interest_of_intlayer.md +1 -1
  81. package/docs/ko/intlayer_CMS.md +5 -5
  82. package/docs/ko/intlayer_with_express.md +1 -0
  83. package/docs/ko/intlayer_with_fastify.md +463 -0
  84. package/docs/ko/readme.md +1 -1
  85. package/docs/pl/cli/push.md +1 -1
  86. package/docs/pl/configuration.md +3 -3
  87. package/docs/pl/interest_of_intlayer.md +1 -1
  88. package/docs/pl/intlayer_CMS.md +5 -5
  89. package/docs/pl/intlayer_with_express.md +1 -0
  90. package/docs/pl/intlayer_with_fastify.md +457 -0
  91. package/docs/pl/readme.md +1 -1
  92. package/docs/pt/cli/push.md +1 -1
  93. package/docs/pt/configuration.md +3 -3
  94. package/docs/pt/interest_of_intlayer.md +1 -1
  95. package/docs/pt/intlayer_CMS.md +5 -5
  96. package/docs/pt/intlayer_with_express.md +1 -0
  97. package/docs/pt/intlayer_with_fastify.md +502 -0
  98. package/docs/pt/readme.md +1 -1
  99. package/docs/ru/cli/push.md +1 -1
  100. package/docs/ru/configuration.md +3 -3
  101. package/docs/ru/interest_of_intlayer.md +1 -1
  102. package/docs/ru/intlayer_CMS.md +5 -5
  103. package/docs/ru/intlayer_with_express.md +1 -0
  104. package/docs/ru/intlayer_with_fastify.md +468 -0
  105. package/docs/ru/readme.md +1 -1
  106. package/docs/tr/cli/push.md +1 -1
  107. package/docs/tr/configuration.md +3 -3
  108. package/docs/tr/interest_of_intlayer.md +1 -1
  109. package/docs/tr/intlayer_CMS.md +5 -5
  110. package/docs/tr/intlayer_with_express.md +1 -0
  111. package/docs/tr/intlayer_with_fastify.md +471 -0
  112. package/docs/tr/readme.md +1 -1
  113. package/docs/vi/cli/push.md +1 -1
  114. package/docs/vi/configuration.md +3 -3
  115. package/docs/vi/interest_of_intlayer.md +1 -1
  116. package/docs/vi/intlayer_CMS.md +5 -5
  117. package/docs/vi/intlayer_with_express.md +1 -0
  118. package/docs/vi/intlayer_with_fastify.md +490 -0
  119. package/docs/vi/readme.md +1 -1
  120. package/docs/zh/cli/push.md +1 -1
  121. package/docs/zh/configuration.md +3 -3
  122. package/docs/zh/interest_of_intlayer.md +1 -1
  123. package/docs/zh/intlayer_CMS.md +5 -5
  124. package/docs/zh/intlayer_with_express.md +1 -0
  125. package/docs/zh/intlayer_with_fastify.md +451 -0
  126. package/docs/zh/readme.md +1 -1
  127. package/package.json +6 -6
  128. package/src/generated/docs.entry.ts +19 -0
@@ -0,0 +1,516 @@
1
+ ---
2
+ createdAt: 2025-12-30
3
+ updatedAt: 2025-12-30
4
+ title: Fastifyバックエンドを翻訳する方法 – i18nガイド 2026
5
+ description: Fastifyバックエンドを多言語対応にする方法を解説します。国際化(i18n)と翻訳の手順に従ってください。
6
+ keywords:
7
+ - 国際化 (Internationalization)
8
+ - ドキュメント (Documentation)
9
+ - Intlayer
10
+ - Fastify
11
+ - JavaScript
12
+ - バックエンド (Backend)
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - fastify
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-fastify-template
18
+ history:
19
+ - version: 7.6.0
20
+ date: 2025-12-31
21
+ changes: initコマンドを追加
22
+ - version: 7.6.0
23
+ date: 2025-12-31
24
+ changes: 履歴を初期化
25
+ ---
26
+
27
+ # Intlayerを使ってFastifyバックエンドサイトを翻訳する | 国際化 (i18n)
28
+
29
+ `fastify-intlayer` は、Fastifyアプリケーション向けの強力な国際化(i18n)プラグインで、クライアントの設定に基づいてローカライズされたレスポンスを提供し、バックエンドサービスをグローバルに利用可能にすることを目的としています。
30
+
31
+ ### 実用的なユースケース
32
+
33
+ - **ユーザーの言語でバックエンドエラーを表示する**: エラー発生時にユーザーの母国語でメッセージを表示することで理解が深まり、フラストレーションを軽減します。これは、トーストやモーダルなどフロントエンドコンポーネントで表示される動的なエラーメッセージに特に有用です。
34
+
35
+ `fastify-intlayer` は Fastify アプリケーション向けの強力な国際化 (i18n) プラグインで、クライアントの設定に基づいてローカライズされたレスポンスを返すことでバックエンドサービスをグローバルに利用可能にすることを目的としています。
36
+
37
+ ### 実用的なユースケース
38
+
39
+ - **ユーザーの言語でバックエンドエラーを表示する**: エラー発生時にユーザーの母語でメッセージを表示することで理解が深まり、混乱や不満を軽減できます。これは、トーストやモーダルのようなフロントエンドコンポーネントで表示される動的なエラーメッセージに特に有用です。
40
+ - **多言語コンテンツの取得**: データベースからコンテンツを取得するアプリケーションでは、国際化によりそのコンテンツを複数言語で配信できます。これは、商品説明や記事、その他のコンテンツをユーザーの希望する言語で表示する必要があるECサイトやコンテンツ管理システムのようなプラットフォームにとって重要です。
41
+ - **多言語コンテンツの取得**: データベースからコンテンツを取得するアプリケーションでは、国際化によりそのコンテンツを複数の言語で配信できます。これは、商品説明、記事、その他のコンテンツをユーザーが好む言語で表示する必要があるeコマースサイトやコンテンツ管理システム(CMS)などのプラットフォームにとって重要です。
42
+ - **多言語メールの送信**: 取引メール、マーケティングキャンペーン、通知など、受信者の言語でメールを送ることで、エンゲージメントや効果が大幅に向上します。
43
+ - **多言語プッシュ通知**: モバイルアプリケーションでは、ユーザーの好む言語でプッシュ通知を送信することで、エンゲージメントとリテンションを向上させることができます。このパーソナルな配慮により、通知がより関連性が高く行動を促しやすく感じられます。
44
+ - **その他のコミュニケーション**: SMS メッセージ、システムアラート、ユーザーインターフェイスの更新など、バックエンドから送られるあらゆる形式のコミュニケーションは、ユーザーの言語で提供されることで明確さが増し、全体的なユーザー体験が向上します。
45
+
46
+ バックエンドを国際化することで、アプリケーションは文化的差異を尊重するだけでなく、グローバル市場のニーズにもより適合し、サービスを世界規模でスケールさせるための重要なステップとなります。
47
+
48
+ ## はじめに
49
+
50
+ ### インストール
51
+
52
+ `fastify-intlayer` の使用を開始するには、npm を使ってパッケージをインストールします:
53
+
54
+ ```bash packageManager="npm"
55
+ npm install intlayer fastify-intlayer
56
+ npx intlayer init
57
+
58
+ ```
59
+
60
+ ```bash packageManager="pnpm"
61
+ pnpm add intlayer fastify-intlayer
62
+ pnpm intlayer init
63
+
64
+ ```
65
+
66
+ ```bash packageManager="yarn"
67
+ yarn add intlayer fastify-intlayer
68
+ yarn intlayer init
69
+
70
+ ```
71
+
72
+ ```bash packageManager="bun"
73
+ bun add intlayer fastify-intlayer
74
+ bunx intlayer init
75
+
76
+ ```
77
+
78
+ ### セットアップ
79
+
80
+ プロジェクトルートに `intlayer.config.ts` を作成し、国際化の設定を構成します:
81
+
82
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
83
+ import { Locales, type IntlayerConfig } from "intlayer";
84
+
85
+ // 国際化設定
86
+ const config: IntlayerConfig = {
87
+ internationalization: {
88
+ // サポートするロケールを指定
89
+ locales: [
90
+ Locales.ENGLISH,
91
+ Locales.FRENCH,
92
+ Locales.SPANISH_MEXICO,
93
+ Locales.SPANISH_SPAIN,
94
+ ],
95
+ // デフォルトのロケールを指定
96
+ defaultLocale: Locales.ENGLISH,
97
+ },
98
+ };
99
+
100
+ export default config;
101
+ ```
102
+
103
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
104
+ import { Locales } from "intlayer";
105
+
106
+ // 国際化設定(ESM)
107
+ /** @type {import('intlayer').IntlayerConfig} */
108
+ const config = {
109
+ internationalization: {
110
+ // サポートするロケールを指定
111
+ locales: [
112
+ Locales.ENGLISH,
113
+ Locales.FRENCH,
114
+ Locales.SPANISH_MEXICO,
115
+ Locales.SPANISH_SPAIN,
116
+ ],
117
+ // デフォルトのロケールを指定
118
+ defaultLocale: Locales.ENGLISH,
119
+ },
120
+ };
121
+
122
+ export default config;
123
+ ```
124
+
125
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
126
+ const { Locales } = require("intlayer");
127
+
128
+ // 国際化設定(CommonJS)
129
+ /** @type {import('intlayer').IntlayerConfig} */
130
+ const config = {
131
+ internationalization: {
132
+ // サポートするロケールを指定
133
+ locales: [
134
+ Locales.ENGLISH,
135
+ Locales.FRENCH,
136
+ Locales.SPANISH_MEXICO,
137
+ Locales.SPANISH_SPAIN,
138
+ ],
139
+ defaultLocale: Locales.ENGLISH,
140
+ },
141
+ };
142
+
143
+ export default config;
144
+ ```
145
+
146
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
147
+ import { Locales } from "intlayer";
148
+
149
+ /** @type {import('intlayer').IntlayerConfig} */ // IntlayerConfig 型注釈
150
+ const config = {
151
+ internationalization: {
152
+ locales: [
153
+ Locales.ENGLISH,
154
+ Locales.FRENCH,
155
+ Locales.SPANISH_MEXICO,
156
+ Locales.SPANISH_SPAIN,
157
+ ],
158
+ defaultLocale: Locales.ENGLISH,
159
+ },
160
+ };
161
+
162
+ export default config;
163
+ ```
164
+
165
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
166
+ const { Locales } = require("intlayer");
167
+
168
+ /** @type {import('intlayer').IntlayerConfig} */ // IntlayerConfig 型注釈
169
+ const config = {
170
+ internationalization: {
171
+ locales: [
172
+ Locales.ENGLISH,
173
+ Locales.FRENCH,
174
+ Locales.SPANISH_MEXICO,
175
+ Locales.SPANISH_SPAIN,
176
+ ],
177
+ defaultLocale: Locales.ENGLISH,
178
+ },
179
+ };
180
+
181
+ module.exports = config;
182
+ ```
183
+
184
+ ### コンテンツを宣言する
185
+
186
+ 翻訳を保存するためのコンテンツ宣言を作成および管理します:
187
+
188
+ ```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
189
+ import { t, type Dictionary } from "intlayer";
190
+
191
+ const indexContent = {
192
+ key: "index",
193
+ content: {
194
+ exampleOfContent: t({
195
+ ja: "英語で返されるコンテンツの例",
196
+ en: "Example of returned content in English",
197
+ fr: "Exemple de contenu renvoyé en français",
198
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
199
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
200
+ }),
201
+ },
202
+ } satisfies Dictionary;
203
+
204
+ export default indexContent;
205
+ ```
206
+
207
+ ```javascript fileName="src/index.content.mjs" contentDeclarationFormat="esm"
208
+ import { t } from "intlayer";
209
+
210
+ /** @type {import('intlayer').Dictionary} */
211
+ const indexContent = {
212
+ key: "index",
213
+ content: {
214
+ exampleOfContent: t({
215
+ ja: "英語で返されるコンテンツの例",
216
+ en: "Example of returned content in English",
217
+ fr: "Exemple de contenu renvoyé en français",
218
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
219
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
220
+ }),
221
+ },
222
+ };
223
+
224
+ export default indexContent;
225
+
226
+ /** @type {import('intlayer').Dictionary} */
227
+ const indexContent = {
228
+ key: "index",
229
+ content: {
230
+ exampleOfContent: t({
231
+ ja: "英語で返されるコンテンツの例",
232
+ en: "Example of returned content in English",
233
+ fr: "Exemple de contenu renvoyé en français",
234
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
235
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
236
+ }),
237
+ },
238
+ };
239
+
240
+ export default indexContent;
241
+ ```
242
+
243
+ ```javascript fileName="src/index.content.cjs" contentDeclarationFormat="commonjs"
244
+ const { t } = require("intlayer");
245
+
246
+ /** @type {import('intlayer').Dictionary} */
247
+ const indexContent = {
248
+ key: "index",
249
+ content: {
250
+ exampleOfContent: t({
251
+ ja: "英語で返されるコンテンツの例",
252
+ en: "Example of returned content in English",
253
+ fr: "Exemple de contenu renvoyé en français",
254
+ ja: "返されるコンテンツの例(英語)",
255
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
256
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
257
+ }),
258
+ },
259
+ };
260
+
261
+ module.exports = indexContent;
262
+ ```
263
+
264
+ ```json fileName="src/index.content.json" contentDeclarationFormat="json"
265
+ {
266
+ "$schema": "https://intlayer.org/schema.json",
267
+ "key": "index",
268
+ "content": {
269
+ "exampleOfContent": {
270
+ "nodeType": "translation",
271
+ "translation": {
272
+ "ja": "返されるコンテンツの例(英語)",
273
+ "en": "Example of returned content in English",
274
+ "fr": "Exemple de contenu renvoyé en français",
275
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
276
+ "es-MX": "Ejemplo de contenido devuelto en español (México)"
277
+ }
278
+ }
279
+ }
280
+ }
281
+ ```
282
+
283
+ > コンテンツ宣言は、アプリケーション内の任意の場所に定義できます。ただし `contentDir` ディレクトリ(デフォルトは `./src`)に含まれている必要があります。また、コンテンツ宣言ファイルの拡張子は(デフォルトで)`.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}` に一致する必要があります。
284
+
285
+ > 詳細は[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)を参照してください。
286
+
287
+ ### Fastify アプリケーションのセットアップ
288
+
289
+ Fastify アプリケーションを `fastify-intlayer` を使用するように設定します:
290
+
291
+ ```typescript fileName="src/index.ts" codeFormat="typescript"
292
+ import Fastify from "fastify";
293
+ import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
294
+ import dictionaryExample from "./index.content";
295
+
296
+ const fastify = Fastify({ logger: true });
297
+
298
+ javascript fileName="src/index.mjs" codeFormat="esm"
299
+ // 国際化プラグインを読み込む
300
+ await fastify.register(intlayer);
301
+
302
+ // ルート
303
+ fastify.get("/t_example", async (_req, reply) => {
304
+ return t({
305
+ ja: "日本語で返されるコンテンツの例",
306
+ en: "Example of returned content in English",
307
+ fr: "Exemple de contenu renvoyé en français",
308
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
309
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
310
+ });
311
+ });
312
+
313
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
314
+ return getIntlayer("index").exampleOfContent;
315
+ });
316
+
317
+ fastify.get("/getDictionary_example", async (_req, reply) => {
318
+ return getDictionary(dictionaryExample).exampleOfContent;
319
+ });
320
+
321
+ // サーバーを起動
322
+ const start = async () => {
323
+ try {
324
+ await fastify.listen({ port: 3000 });
325
+ } catch (err) {
326
+ fastify.log.error(err);
327
+ process.exit(1);
328
+ }
329
+ };
330
+
331
+ start();
332
+ ```
333
+
334
+ ```javascript fileName="src/index.mjs" codeFormat="esm"
335
+ import Fastify from "fastify";
336
+ import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
337
+ import dictionaryExample from "./index.content";
338
+
339
+ const fastify = Fastify({ logger: true });
340
+
341
+ // 国際化プラグインを登録
342
+ await fastify.register(intlayer);
343
+
344
+ // ルート
345
+ fastify.get("/t_example", async (_req, reply) => {
346
+ return t({
347
+ ja: "英語で返されるコンテンツの例",
348
+ en: "Example of returned content in English",
349
+ fr: "Exemple de contenu renvoyé en français",
350
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
351
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
352
+ });
353
+ });
354
+
355
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
356
+ return getIntlayer("index").exampleOfContent;
357
+ });
358
+
359
+ fastify.get("/getDictionary_example", async (_req, reply) => {
360
+ return getDictionary(dictionaryExample).exampleOfContent;
361
+ });
362
+
363
+ // サーバーを起動
364
+ const start = async () => {
365
+ try {
366
+ await fastify.listen({ port: 3000 });
367
+ } catch (err) {
368
+ fastify.log.error(err);
369
+ process.exit(1);
370
+ }
371
+ };
372
+
373
+ start();
374
+ ```
375
+
376
+ ```javascript fileName="src/index.cjs" codeFormat="commonjs"
377
+ const Fastify = require("fastify");
378
+ const { intlayer, t, getDictionary, getIntlayer } = require("fastify-intlayer");
379
+ const dictionaryExample = require("./index.content");
380
+
381
+ const fastify = Fastify({ logger: true });
382
+
383
+ // async/await 用のサーバー起動ラッパー
384
+ const start = async () => {
385
+ try {
386
+ // 国際化プラグインを登録
387
+ await fastify.register(intlayer);
388
+
389
+ // ルート
390
+ fastify.get("/t_example", async (_req, reply) => {
391
+ return t({
392
+ ja: "返却されるコンテンツの例(英語)",
393
+ en: "Example of returned content in English",
394
+ fr: "Exemple de contenu renvoyé en français",
395
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
396
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
397
+ });
398
+ });
399
+
400
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
401
+ return getIntlayer("index").exampleOfContent;
402
+ });
403
+
404
+ fastify.get("/getDictionary_example", async (_req, reply) => {
405
+ return getDictionary(dictionaryExample).exampleOfContent;
406
+ });
407
+
408
+ await fastify.listen({ port: 3000 });
409
+ } catch (err) {
410
+ fastify.log.error(err);
411
+ process.exit(1);
412
+ }
413
+ };
414
+
415
+ start();
416
+ ```
417
+
418
+ ### 互換性
419
+
420
+ `fastify-intlayer` は以下と完全に互換性があります:
421
+
422
+ - [`react-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/index.md)>) Reactアプリケーション用
423
+ - [`next-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/next-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/next-intlayer/index.md)>) Next.jsアプリケーション用
424
+ - [`vite-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/vite-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/vite-intlayer/index.md)>) Vite アプリケーション向け
425
+
426
+ また、ブラウザや API リクエストを含むさまざまな環境で、任意の国際化ソリューションとシームレスに動作します。ミドルウェアをカスタマイズして、ヘッダーやクッキーからロケールを検出するようにできます:
427
+
428
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
429
+ import { Locales, type IntlayerConfig } from "intlayer";
430
+
431
+ const config: IntlayerConfig = {
432
+ // ... その他の設定オプション
433
+ middleware: {
434
+ headerName: "my-locale-header",
435
+ cookieName: "my-locale-cookie",
436
+ },
437
+ };
438
+
439
+ export default config;
440
+ ```
441
+
442
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
443
+ import { Locales } from "intlayer";
444
+
445
+ /** @type {import('intlayer').IntlayerConfig} */
446
+ const config = {
447
+ // ... 他の設定オプション
448
+ middleware: {
449
+ headerName: "my-locale-header",
450
+ cookieName: "my-locale-cookie",
451
+ },
452
+ };
453
+
454
+ export default config;
455
+ ```
456
+
457
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
458
+ const { Locales } = require("intlayer");
459
+
460
+ /** @type {import('intlayer').IntlayerConfig} */
461
+ const config = {
462
+ // ... 他の設定オプション
463
+ middleware: {
464
+ headerName: "my-locale-header",
465
+ cookieName: "my-locale-cookie",
466
+ },
467
+ };
468
+
469
+ module.exports = config;
470
+ ```
471
+
472
+ デフォルトでは、`fastify-intlayer` はクライアントの優先言語を判定するために `Accept-Language` ヘッダーを解釈します。
473
+
474
+ > 設定や高度なトピックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
475
+
476
+ ### TypeScript の設定
477
+
478
+ `fastify-intlayer` は TypeScript の強力な機能を活用して国際化プロセスを強化します。TypeScript の静的型付けにより、すべての翻訳キーが網羅されていることが保証され、翻訳漏れのリスクが低減され、保守性が向上します。
479
+
480
+ 自動生成される型(デフォルトでは ./types/intlayer.d.ts)を tsconfig.json ファイルに含めていることを確認してください。
481
+
482
+ ```json5 fileName="tsconfig.json"
483
+ {
484
+ // ... 既存の TypeScript 設定
485
+ "include": [
486
+ // ... 既存の TypeScript 設定
487
+ ".intlayer/**/*.ts", // 自動生成された型を含める
488
+ ],
489
+ }
490
+ ```
491
+
492
+ ### VS Code 拡張機能
493
+
494
+ Intlayerでの開発体験を向上させるために、公式の **Intlayer VS Code Extension** をインストールできます。
495
+
496
+ [VS Code Marketplace からインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
497
+
498
+ この拡張機能は以下を提供します:
499
+
500
+ - **翻訳キーのオートコンプリート**。
501
+ - **翻訳の欠落に対するリアルタイムエラー検出**。
502
+ - **翻訳コンテンツのインラインプレビュー**。
503
+ - **翻訳を簡単に作成・更新するためのクイックアクション**。
504
+
505
+ 拡張機能の使い方の詳細については、[Intlayer VS Code Extension のドキュメント](https://intlayer.org/doc/vs-code-extension)を参照してください。
506
+
507
+ ### Git 設定
508
+
509
+ Intlayerによって生成されるファイルは無視することを推奨します。これにより、それらをGitリポジトリにコミットするのを回避できます。
510
+
511
+ これを行うには、次の指示を `.gitignore` ファイルに追加できます:
512
+
513
+ ```plaintext fileName=".gitignore"
514
+ # Intlayer によって生成されたファイルを無視する
515
+ .intlayer
516
+ ```
package/docs/ja/readme.md CHANGED
@@ -50,7 +50,7 @@ Intlayerは、ウェブおよびモバイルアプリ向けの**最新のi18nソ
50
50
  | 機能 | 説明 |
51
51
  | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
52
52
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true" alt="Feature" width="700"> | **クロスフレームワーク対応**<br><br>Intlayerは、Next.js、React、Vite、Vue.js、Nuxt、Preact、Expressなど、主要なフレームワークやライブラリすべてに対応しています。 |
53
- | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.png?raw=true" alt="Feature" width="700"> | **JavaScript駆動のコンテンツ管理**<br><br>JavaScriptの柔軟性を活用して、コンテンツを効率的に定義および管理します。<br><br> - [コンテンツ宣言](https://intlayer.org/doc/concept/content) |
53
+ | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true" alt="Feature" width="700"> | **JavaScript駆動のコンテンツ管理**<br><br>JavaScriptの柔軟性を活用して、コンテンツを効率的に定義および管理します。<br><br> - [コンテンツ宣言](https://intlayer.org/doc/concept/content) |
54
54
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true" alt="Feature" width="700"> | **ロケール別コンテンツ宣言ファイル**<br><br>自動生成の前にコンテンツを一度宣言することで、開発をスピードアップします。<br><br> - [ロケール別コンテンツ宣言ファイル](https://intlayer.org/doc/concept/per-locale-file) |
55
55
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true" alt="Feature" width="700"> | **型安全な環境**<br><br>TypeScriptを活用して、コンテンツ定義やコードのエラーを防ぎつつ、IDEの自動補完機能も利用できます。<br><br> - [TypeScriptの設定](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
56
56
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true" alt="Feature" width="700"> | **簡素化されたセットアップ**<br><br>最小限の設定で迅速に開始できます。国際化、ルーティング、AI、ビルド、コンテンツ処理の設定を簡単に調整可能です。<br><br> - [Next.js統合を探る](https://intlayer.org/doc/environment/nextjs) |
@@ -23,7 +23,7 @@ slugs:
23
23
  npx intlayer dictionary push
24
24
  ```
25
25
 
26
- [intlayer 에디터](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_visual_editor.md)가 설치되어 있다면, 사전을 에디터로도 푸시할 수 있습니다. 이 명령어는 사전을 [에디터](https://intlayer.org/dashboard)에서 사용할 수 있도록 합니다. 이를 통해 팀과 사전을 공유하고 애플리케이션 코드를 수정하지 않고도 콘텐츠를 편집할 수 있습니다.
26
+ [intlayer 에디터](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_visual_editor.md)가 설치되어 있다면, 사전을 에디터로도 푸시할 수 있습니다. 이 명령어는 사전을 [에디터](https://app.intlayer.org/)에서 사용할 수 있도록 합니다. 이를 통해 팀과 사전을 공유하고 애플리케이션 코드를 수정하지 않고도 콘텐츠를 편집할 수 있습니다.
27
27
 
28
28
  ## 별칭:
29
29
 
@@ -245,14 +245,14 @@ module.exports = config;
245
245
  - **clientId**:
246
246
  - _유형_: `string` | `undefined`
247
247
  - _기본값_: `undefined`
248
- - _설명_: clientId와 clientSecret은 intlayer 패키지가 oAuth2 인증을 사용하여 백엔드와 인증할 수 있도록 합니다. 액세스 토큰은 프로젝트와 관련된 사용자를 인증하는 데 사용됩니다. 액세스 토큰을 얻으려면 https://intlayer.org/dashboard/project 에서 계정을 생성하세요.
248
+ - _설명_: clientId와 clientSecret은 intlayer 패키지가 oAuth2 인증을 사용하여 백엔드와 인증할 수 있도록 합니다. 액세스 토큰은 프로젝트와 관련된 사용자를 인증하는 데 사용됩니다. 액세스 토큰을 얻으려면 https://app.intlayer.org/project 에서 계정을 생성하세요.
249
249
  - _예시_: `true`
250
250
  - _참고_: 중요: clientId와 clientSecret은 비밀로 유지되어야 하며 공개적으로 공유되어서는 안 됩니다. 환경 변수와 같은 안전한 위치에 보관하시기 바랍니다.
251
251
 
252
252
  - **clientSecret**:
253
253
  - _유형_: `string` | `undefined`
254
254
  - _기본값_: `undefined`
255
- - _설명_: clientId와 clientSecret은 intlayer 패키지가 oAuth2 인증을 사용하여 백엔드와 인증할 수 있도록 합니다. 액세스 토큰은 프로젝트와 관련된 사용자를 인증하는 데 사용됩니다. 액세스 토큰을 얻으려면 https://intlayer.org/dashboard/project 에서 계정을 생성하세요.
255
+ - _설명_: clientId와 clientSecret은 intlayer 패키지가 oAuth2 인증을 사용하여 백엔드와 인증할 수 있도록 합니다. 액세스 토큰은 프로젝트와 관련된 사용자를 인증하는 데 사용됩니다. 액세스 토큰을 얻으려면 https://app.intlayer.org/project 에서 계정을 생성하세요.
256
256
  - _예시_: `true`
257
257
  - _참고_: 중요: clientId와 clientSecret은 비밀로 유지되어야 하며 공개적으로 공유해서는 안 됩니다. 환경 변수와 같은 안전한 위치에 보관하시기 바랍니다.
258
258
 
@@ -468,7 +468,7 @@ module.exports = config;
468
468
 
469
469
  Intlayer의 AI 기능을 제어하는 설정으로, 제공자(provider), 모델(model), API 키를 포함합니다.
470
470
 
471
- 이 구성은 [Intlayer 대시보드](https://intlayer.org/dashboard/project)에 액세스 키로 등록된 경우 선택 사항입니다. Intlayer는 귀하의 요구에 가장 효율적이고 비용 효과적인 AI 솔루션을 자동으로 관리합니다. 기본 옵션을 사용하면 Intlayer가 가장 적합한 모델을 지속적으로 업데이트하므로 장기적인 유지 관리가 더 용이합니다.
471
+ 이 구성은 [Intlayer 대시보드](https://app.intlayer.org/project)에 액세스 키로 등록된 경우 선택 사항입니다. Intlayer는 귀하의 요구에 가장 효율적이고 비용 효과적인 AI 솔루션을 자동으로 관리합니다. 기본 옵션을 사용하면 Intlayer가 가장 적합한 모델을 지속적으로 업데이트하므로 장기적인 유지 관리가 더 용이합니다.
472
472
 
473
473
  자신의 API 키나 특정 모델을 사용하려는 경우, 사용자 정의 AI 구성을 정의할 수 있습니다.
474
474
  이 AI 구성은 Intlayer 환경 전반에 걸쳐 전역적으로 사용됩니다. CLI 명령어는 이 설정을 기본값으로 사용하며(예: `fill`), SDK, 비주얼 에디터, CMS에서도 동일하게 적용됩니다. 특정 사용 사례에 대해서는 명령어 매개변수를 사용하여 이러한 기본값을 재정의할 수 있습니다.
@@ -227,7 +227,7 @@ const ComponentExample = () => {
227
227
  | 기능 | 설명 |
228
228
  | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
229
229
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true) | **크로스 프레임워크 지원**<br><br>Intlayer는 Next.js, React, Vite, Vue.js, Nuxt, Preact, Express 등 주요 프레임워크와 라이브러리를 모두 지원합니다. |
230
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.png?raw=true) | **자바스크립트 기반 콘텐츠 관리**<br><br>자바스크립트의 유연성을 활용하여 콘텐츠를 효율적으로 정의하고 관리하세요. <br><br> - [콘텐츠 선언](https://intlayer.org/doc/concept/content) |
230
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true) | **자바스크립트 기반 콘텐츠 관리**<br><br>자바스크립트의 유연성을 활용하여 콘텐츠를 효율적으로 정의하고 관리하세요. <br><br> - [콘텐츠 선언](https://intlayer.org/doc/concept/content) |
231
231
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true) | **로케일별 콘텐츠 선언 파일**<br><br>자동 생성 전에 콘텐츠를 한 번 선언하여 개발 속도를 높이세요.<br><br> - [로케일별 콘텐츠 선언 파일](https://intlayer.org/doc/concept/per-locale-file) |
232
232
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true) | **타입 안전 환경**<br><br>TypeScript를 활용하여 콘텐츠 정의와 코드에 오류가 없도록 보장하고, IDE 자동 완성 기능도 함께 누리세요.<br><br> - [TypeScript 설정](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
233
233
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true) | **간소화된 설정**<br><br>최소한의 구성으로 빠르게 시작하세요. 국제화, 라우팅, AI, 빌드 및 콘텐츠 처리 설정을 손쉽게 조정할 수 있습니다.<br><br> - [Next.js 통합 탐색](https://intlayer.org/doc/environment/nextjs) |
@@ -92,7 +92,7 @@ const config: IntlayerConfig = {
92
92
  *
93
93
  * 편집기를 활성화하려면 클라이언트 ID와 클라이언트 시크릿이 필요합니다.
94
94
  * 이를 통해 콘텐츠를 편집하는 사용자를 식별할 수 있습니다.
95
- * Intlayer 대시보드 - 프로젝트(https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
95
+ * Intlayer 대시보드 - 프로젝트(https://app.intlayer.org/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
96
96
  * clientId: process.env.INTLAYER_CLIENT_ID,
97
97
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
98
98
  */
@@ -142,7 +142,7 @@ const config = {
142
142
  *
143
143
  * 편집기를 활성화하려면 클라이언트 ID와 클라이언트 시크릿이 필요합니다.
144
144
  * 이를 통해 콘텐츠를 편집하는 사용자를 식별할 수 있습니다.
145
- * Intlayer 대시보드 - 프로젝트(https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
145
+ * Intlayer 대시보드 - 프로젝트(https://app.intlayer.org/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
146
146
  * clientId: process.env.INTLAYER_CLIENT_ID,
147
147
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
148
148
  */
@@ -192,7 +192,7 @@ const config = {
192
192
  *
193
193
  * 에디터를 활성화하려면 클라이언트 ID와 클라이언트 시크릿이 필요합니다.
194
194
  * 이를 통해 콘텐츠를 편집하는 사용자를 식별할 수 있습니다.
195
- * Intlayer 대시보드 - 프로젝트(https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
195
+ * Intlayer 대시보드 - 프로젝트(https://app.intlayer.org/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
196
196
  * clientId: process.env.INTLAYER_CLIENT_ID,
197
197
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
198
198
  */
@@ -224,7 +224,7 @@ const config = {
224
224
  module.exports = config;
225
225
  ```
226
226
 
227
- > 클라이언트 ID와 클라이언트 시크릿이 없는 경우, [Intlayer 대시보드 - 프로젝트](https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
227
+ > 클라이언트 ID와 클라이언트 시크릿이 없는 경우, [Intlayer 대시보드 - 프로젝트](https://app.intlayer.org/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
228
228
 
229
229
  > 사용 가능한 모든 매개변수를 확인하려면 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
230
230
 
@@ -264,7 +264,7 @@ npx intlayer dictionary push -d my-first-dictionary-key --env production
264
264
 
265
265
  ### 사전 편집
266
266
 
267
- 그런 다음 [Intlayer CMS](https://intlayer.org/dashboard/content)에서 사전을 보고 관리할 수 있습니다.
267
+ 그런 다음 [Intlayer CMS](https://app.intlayer.org/content)에서 사전을 보고 관리할 수 있습니다.
268
268
 
269
269
  ## 라이브 동기화
270
270
 
@@ -14,6 +14,7 @@ slugs:
14
14
  - doc
15
15
  - environment
16
16
  - express
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-express-template
17
18
  history:
18
19
  - version: 7.5.9
19
20
  date: 2025-12-30