@intlayer/docs 8.0.0 → 8.0.1-canary.1
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/dist/cjs/generated/docs.entry.cjs +160 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +160 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +8 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_adonisjs.md +394 -0
- package/docs/ar/intlayer_with_hono.md +223 -0
- package/docs/ar/intlayer_with_vite+preact.md +317 -675
- package/docs/ar/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ar/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ar/packages/adonis-intlayer/t.md +149 -0
- package/docs/ar/packages/hono-intlayer/exports.md +59 -0
- package/docs/ar/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ar/packages/hono-intlayer/t.md +268 -0
- package/docs/de/intlayer_with_adonisjs.md +392 -0
- package/docs/de/intlayer_with_hono.md +418 -0
- package/docs/de/intlayer_with_vite+preact.md +272 -632
- package/docs/de/packages/adonis-intlayer/exports.md +50 -0
- package/docs/de/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/de/packages/adonis-intlayer/t.md +149 -0
- package/docs/de/packages/hono-intlayer/exports.md +59 -0
- package/docs/de/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/de/packages/hono-intlayer/t.md +316 -0
- package/docs/en/index.md +8 -0
- package/docs/en/intlayer_with_adonisjs.md +388 -0
- package/docs/en/intlayer_with_hono.md +418 -0
- package/docs/en/intlayer_with_vite+preact.md +171 -556
- package/docs/en/introduction.md +1 -0
- package/docs/en/packages/adonis-intlayer/exports.md +50 -0
- package/docs/en/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/en/packages/adonis-intlayer/t.md +149 -0
- package/docs/en/packages/hono-intlayer/exports.md +59 -0
- package/docs/en/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/en/packages/hono-intlayer/t.md +316 -0
- package/docs/en-GB/intlayer_with_adonisjs.md +394 -0
- package/docs/en-GB/intlayer_with_hono.md +418 -0
- package/docs/en-GB/intlayer_with_vite+preact.md +236 -583
- package/docs/en-GB/packages/adonis-intlayer/exports.md +50 -0
- package/docs/en-GB/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/en-GB/packages/adonis-intlayer/t.md +149 -0
- package/docs/en-GB/packages/hono-intlayer/exports.md +59 -0
- package/docs/en-GB/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/en-GB/packages/hono-intlayer/t.md +316 -0
- package/docs/es/intlayer_with_adonisjs.md +388 -0
- package/docs/es/intlayer_with_hono.md +418 -0
- package/docs/es/intlayer_with_vite+preact.md +286 -650
- package/docs/es/packages/adonis-intlayer/exports.md +50 -0
- package/docs/es/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/es/packages/adonis-intlayer/t.md +149 -0
- package/docs/es/packages/hono-intlayer/exports.md +59 -0
- package/docs/es/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/es/packages/hono-intlayer/t.md +316 -0
- package/docs/fr/intlayer_with_adonisjs.md +388 -0
- package/docs/fr/intlayer_with_hono.md +418 -0
- package/docs/fr/intlayer_with_vite+preact.md +274 -614
- package/docs/fr/packages/adonis-intlayer/exports.md +50 -0
- package/docs/fr/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/fr/packages/adonis-intlayer/t.md +149 -0
- package/docs/fr/packages/hono-intlayer/exports.md +59 -0
- package/docs/fr/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/fr/packages/hono-intlayer/t.md +316 -0
- package/docs/hi/intlayer_with_adonisjs.md +394 -0
- package/docs/hi/intlayer_with_hono.md +227 -0
- package/docs/hi/intlayer_with_vite+preact.md +304 -680
- package/docs/hi/packages/adonis-intlayer/exports.md +50 -0
- package/docs/hi/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/hi/packages/adonis-intlayer/t.md +149 -0
- package/docs/hi/packages/hono-intlayer/exports.md +59 -0
- package/docs/hi/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/hi/packages/hono-intlayer/t.md +268 -0
- package/docs/id/intlayer_with_adonisjs.md +394 -0
- package/docs/id/intlayer_with_hono.md +227 -0
- package/docs/id/intlayer_with_vite+preact.md +297 -697
- package/docs/id/packages/adonis-intlayer/exports.md +50 -0
- package/docs/id/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/id/packages/adonis-intlayer/t.md +149 -0
- package/docs/id/packages/hono-intlayer/exports.md +59 -0
- package/docs/id/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/id/packages/hono-intlayer/t.md +268 -0
- package/docs/it/intlayer_with_adonisjs.md +394 -0
- package/docs/it/intlayer_with_hono.md +227 -0
- package/docs/it/intlayer_with_vite+preact.md +290 -659
- package/docs/it/packages/adonis-intlayer/exports.md +50 -0
- package/docs/it/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/it/packages/adonis-intlayer/t.md +149 -0
- package/docs/it/packages/hono-intlayer/exports.md +59 -0
- package/docs/it/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/it/packages/hono-intlayer/t.md +268 -0
- package/docs/ja/intlayer_with_adonisjs.md +394 -0
- package/docs/ja/intlayer_with_hono.md +227 -0
- package/docs/ja/intlayer_with_vite+preact.md +307 -662
- package/docs/ja/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ja/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ja/packages/adonis-intlayer/t.md +149 -0
- package/docs/ja/packages/hono-intlayer/exports.md +59 -0
- package/docs/ja/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ja/packages/hono-intlayer/t.md +268 -0
- package/docs/ko/intlayer_with_adonisjs.md +394 -0
- package/docs/ko/intlayer_with_hono.md +227 -0
- package/docs/ko/intlayer_with_vite+preact.md +303 -703
- package/docs/ko/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ko/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ko/packages/adonis-intlayer/t.md +149 -0
- package/docs/ko/packages/hono-intlayer/exports.md +59 -0
- package/docs/ko/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ko/packages/hono-intlayer/t.md +268 -0
- package/docs/pl/intlayer_with_adonisjs.md +394 -0
- package/docs/pl/intlayer_with_hono.md +227 -0
- package/docs/pl/intlayer_with_vite+preact.md +289 -690
- package/docs/pl/packages/adonis-intlayer/exports.md +50 -0
- package/docs/pl/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/pl/packages/adonis-intlayer/t.md +149 -0
- package/docs/pl/packages/hono-intlayer/exports.md +59 -0
- package/docs/pl/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/pl/packages/hono-intlayer/t.md +268 -0
- package/docs/pt/intlayer_with_adonisjs.md +394 -0
- package/docs/pt/intlayer_with_hono.md +227 -0
- package/docs/pt/intlayer_with_vite+preact.md +275 -637
- package/docs/pt/packages/adonis-intlayer/exports.md +50 -0
- package/docs/pt/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/pt/packages/adonis-intlayer/t.md +149 -0
- package/docs/pt/packages/hono-intlayer/exports.md +59 -0
- package/docs/pt/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/pt/packages/hono-intlayer/t.md +268 -0
- package/docs/ru/intlayer_with_adonisjs.md +393 -0
- package/docs/ru/intlayer_with_hono.md +223 -0
- package/docs/ru/intlayer_with_vite+preact.md +319 -683
- package/docs/ru/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ru/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ru/packages/adonis-intlayer/t.md +149 -0
- package/docs/ru/packages/hono-intlayer/exports.md +59 -0
- package/docs/ru/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ru/packages/hono-intlayer/t.md +268 -0
- package/docs/tr/intlayer_with_adonisjs.md +394 -0
- package/docs/tr/intlayer_with_hono.md +227 -0
- package/docs/tr/intlayer_with_vite+preact.md +332 -665
- package/docs/tr/packages/adonis-intlayer/exports.md +50 -0
- package/docs/tr/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/tr/packages/adonis-intlayer/t.md +149 -0
- package/docs/tr/packages/hono-intlayer/exports.md +59 -0
- package/docs/tr/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/tr/packages/hono-intlayer/t.md +268 -0
- package/docs/uk/intlayer_with_adonisjs.md +394 -0
- package/docs/uk/intlayer_with_hono.md +227 -0
- package/docs/uk/intlayer_with_vite+preact.md +228 -626
- package/docs/uk/packages/adonis-intlayer/exports.md +50 -0
- package/docs/uk/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/uk/packages/adonis-intlayer/t.md +149 -0
- package/docs/uk/packages/hono-intlayer/exports.md +59 -0
- package/docs/uk/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/uk/packages/hono-intlayer/t.md +268 -0
- package/docs/vi/intlayer_with_adonisjs.md +394 -0
- package/docs/vi/intlayer_with_hono.md +227 -0
- package/docs/vi/intlayer_with_vite+preact.md +294 -679
- package/docs/vi/packages/adonis-intlayer/exports.md +50 -0
- package/docs/vi/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/vi/packages/adonis-intlayer/t.md +149 -0
- package/docs/vi/packages/hono-intlayer/exports.md +59 -0
- package/docs/vi/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/vi/packages/hono-intlayer/t.md +268 -0
- package/docs/zh/intlayer_with_adonisjs.md +393 -0
- package/docs/zh/intlayer_with_hono.md +418 -0
- package/docs/zh/intlayer_with_vite+preact.md +338 -743
- package/docs/zh/packages/adonis-intlayer/exports.md +50 -0
- package/docs/zh/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/zh/packages/adonis-intlayer/t.md +149 -0
- package/docs/zh/packages/hono-intlayer/exports.md +59 -0
- package/docs/zh/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/zh/packages/hono-intlayer/t.md +294 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +160 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: AdonisJS i18n - AdonisJS アプリを翻訳する方法 – ガイド 2026
|
|
5
|
+
description: AdonisJS バックエンドを多言語化する方法をご紹介します。ドキュメントに従って国際化 (i18n) と翻訳を行いましょう。
|
|
6
|
+
keywords:
|
|
7
|
+
- 国際化
|
|
8
|
+
- ドキュメント
|
|
9
|
+
- Intlayer
|
|
10
|
+
- AdonisJS
|
|
11
|
+
- JavaScript
|
|
12
|
+
- バックエンド
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- adonisjs
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-adonisjs-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 8.0.0
|
|
20
|
+
date: 2025-12-30
|
|
21
|
+
changes: 履歴の初期化
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Intlayer を使用して AdonisJS バックエンドウェブサイトを翻訳する | 国際化 (i18n)
|
|
25
|
+
|
|
26
|
+
`adonis-intlayer` は、AdonisJS アプリケーション向けの強力な国際化 (i18n) パッケージであり、クライアントの好みに基づいてローカライズされたレスポンスを提供することで、バックエンドサービスをグローバルにアクセス可能にするように設計されています。
|
|
27
|
+
|
|
28
|
+
### 実用的なユースケース
|
|
29
|
+
|
|
30
|
+
- **ユーザーの言語でのバックエンドエラーの表示**: エラーが発生した際、ユーザーの母国語でメッセージを表示することで、理解が深まり、フラストレーションを軽減できます。これは、トーストやモーダルなどのフロントエンドコンポーネントに表示される可能性のある動的なエラーメッセージに特に役立ちます。
|
|
31
|
+
|
|
32
|
+
- **多言語コンテンツの取得**: データベースからコンテンツを取得するアプリケーションの場合、国際化によって、このコンテンツを複数の言語で提供できるようになります。これは、製品説明や記事、その他のコンテンツをユーザーが好む言語で表示する必要がある e コマースサイトやコンテンツ管理システムなどのプラットフォームにとって非常に重要です。
|
|
33
|
+
|
|
34
|
+
- **多言語メールの送信**: トランザクションメール、マーケティングキャンペーン、通知など、受信者の言語でメールを送信することで、エンゲージメントと効果を大幅に高めることができます。
|
|
35
|
+
|
|
36
|
+
- **多言語プッシュ通知**: モバイルアプリケーションの場合、ユーザーの好みの言語でプッシュ通知を送信することで、インタラクションと継続率を高めることができます。このパーソナライズされたアプローチにより、通知がより関連性が高く、実行しやすいものに感じられます。
|
|
37
|
+
|
|
38
|
+
- **その他のコミュニケーション**: SMS メッセージ、システムアラート、ユーザーインターフェースの更新など、バックエンドからのあらゆる形式のコミュニケーションは、ユーザーの言語であることでメリットを得られ、明快さを確保し、全体的なユーザーエクスペリエンスを向上させます。
|
|
39
|
+
|
|
40
|
+
バックエンドを国際化することで、アプリケーションは文化的な違いを尊重するだけでなく、グローバル市場のニーズにより適合し、サービスを世界規模で拡大するための重要なステップとなります。
|
|
41
|
+
|
|
42
|
+
## はじめる
|
|
43
|
+
|
|
44
|
+
### インストール
|
|
45
|
+
|
|
46
|
+
`adonis-intlayer` の使用を開始するには、npm を使用してパッケージをインストールします。
|
|
47
|
+
|
|
48
|
+
```bash packageManager="npm"
|
|
49
|
+
npm install intlayer adonis-intlayer
|
|
50
|
+
npx intlayer init
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```bash packageManager="pnpm"
|
|
54
|
+
pnpm add intlayer adonis-intlayer
|
|
55
|
+
pnpm intlayer init
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```bash packageManager="yarn"
|
|
59
|
+
yarn add intlayer adonis-intlayer
|
|
60
|
+
yarn intlayer init
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```bash packageManager="bun"
|
|
64
|
+
bun add intlayer adonis-intlayer
|
|
65
|
+
bunx intlayer init
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 設定
|
|
69
|
+
|
|
70
|
+
プロジェクトのルートに `intlayer.config.ts` を作成して、国際化設定を構成します。
|
|
71
|
+
|
|
72
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
73
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
74
|
+
|
|
75
|
+
const config: IntlayerConfig = {
|
|
76
|
+
internationalization: {
|
|
77
|
+
locales: [
|
|
78
|
+
Locales.ENGLISH,
|
|
79
|
+
Locales.RUSSIAN,
|
|
80
|
+
Locales.JAPANESE,
|
|
81
|
+
Locales.FRENCH,
|
|
82
|
+
Locales.KOREAN,
|
|
83
|
+
Locales.CHINESE,
|
|
84
|
+
Locales.SPANISH,
|
|
85
|
+
Locales.GERMAN,
|
|
86
|
+
Locales.ARABIC,
|
|
87
|
+
Locales.ITALIAN,
|
|
88
|
+
Locales.ENGLISH_UNITED_KINGDOM,
|
|
89
|
+
Locales.PORTUGUESE,
|
|
90
|
+
Locales.HINDI,
|
|
91
|
+
Locales.TURKISH,
|
|
92
|
+
Locales.POLISH,
|
|
93
|
+
Locales.INDONESIAN,
|
|
94
|
+
Locales.VIETNAMESE,
|
|
95
|
+
Locales.UKRAINIAN,
|
|
96
|
+
],
|
|
97
|
+
defaultLocale: Locales.ENGLISH,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export default config;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
105
|
+
import { Locales } from "intlayer";
|
|
106
|
+
|
|
107
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
108
|
+
const config = {
|
|
109
|
+
internationalization: {
|
|
110
|
+
locales: [
|
|
111
|
+
Locales.ENGLISH,
|
|
112
|
+
Locales.RUSSIAN,
|
|
113
|
+
Locales.JAPANESE,
|
|
114
|
+
Locales.FRENCH,
|
|
115
|
+
Locales.KOREAN,
|
|
116
|
+
Locales.CHINESE,
|
|
117
|
+
Locales.SPANISH,
|
|
118
|
+
Locales.GERMAN,
|
|
119
|
+
Locales.ARABIC,
|
|
120
|
+
Locales.ITALIAN,
|
|
121
|
+
Locales.ENGLISH_UNITED_KINGDOM,
|
|
122
|
+
Locales.PORTUGUESE,
|
|
123
|
+
Locales.HINDI,
|
|
124
|
+
Locales.TURKISH,
|
|
125
|
+
Locales.POLISH,
|
|
126
|
+
Locales.INDONESIAN,
|
|
127
|
+
Locales.VIETNAMESE,
|
|
128
|
+
Locales.UKRAINIAN,
|
|
129
|
+
],
|
|
130
|
+
defaultLocale: Locales.ENGLISH,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export default config;
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
138
|
+
const { Locales } = require("intlayer");
|
|
139
|
+
|
|
140
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
141
|
+
const config = {
|
|
142
|
+
internationalization: {
|
|
143
|
+
locales: [
|
|
144
|
+
Locales.ENGLISH,
|
|
145
|
+
Locales.RUSSIAN,
|
|
146
|
+
Locales.JAPANESE,
|
|
147
|
+
Locales.FRENCH,
|
|
148
|
+
Locales.KOREAN,
|
|
149
|
+
Locales.CHINESE,
|
|
150
|
+
Locales.SPANISH,
|
|
151
|
+
Locales.GERMAN,
|
|
152
|
+
Locales.ARABIC,
|
|
153
|
+
Locales.ITALIAN,
|
|
154
|
+
Locales.ENGLISH_UNITED_KINGDOM,
|
|
155
|
+
Locales.PORTUGUESE,
|
|
156
|
+
Locales.HINDI,
|
|
157
|
+
Locales.TURKISH,
|
|
158
|
+
Locales.POLISH,
|
|
159
|
+
Locales.INDONESIAN,
|
|
160
|
+
Locales.VIETNAMESE,
|
|
161
|
+
Locales.UKRAINIAN,
|
|
162
|
+
],
|
|
163
|
+
defaultLocale: Locales.ENGLISH,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
module.exports = config;
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### コンテンツの宣言
|
|
171
|
+
|
|
172
|
+
翻訳を保存するためのコンテンツ宣言を作成および管理します。
|
|
173
|
+
|
|
174
|
+
```typescript fileName="app/index.content.ts" contentDeclarationFormat="typescript"
|
|
175
|
+
import { t, type Dictionary } from "intlayer";
|
|
176
|
+
|
|
177
|
+
const indexContent = {
|
|
178
|
+
key: "index",
|
|
179
|
+
content: {
|
|
180
|
+
exampleOfContent: t({
|
|
181
|
+
en: "Example of returned content in English",
|
|
182
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
183
|
+
ja: "日本語で返されるコンテンツの例",
|
|
184
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
185
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
186
|
+
}),
|
|
187
|
+
},
|
|
188
|
+
} satisfies Dictionary;
|
|
189
|
+
|
|
190
|
+
export default indexContent;
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```javascript fileName="app/index.content.mjs" contentDeclarationFormat="esm"
|
|
194
|
+
import { t } from "intlayer";
|
|
195
|
+
|
|
196
|
+
/** @type {import('intlayer').Dictionary} */
|
|
197
|
+
const indexContent = {
|
|
198
|
+
key: "index",
|
|
199
|
+
content: {
|
|
200
|
+
exampleOfContent: t({
|
|
201
|
+
en: "Example of returned content in English",
|
|
202
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
203
|
+
ja: "日本語で返されるコンテンツの例",
|
|
204
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
205
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
206
|
+
}),
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export default indexContent;
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
```javascript fileName="app/index.content.cjs" contentDeclarationFormat="commonjs"
|
|
214
|
+
const { t } = require("intlayer");
|
|
215
|
+
|
|
216
|
+
/** @type {import('intlayer').Dictionary} */
|
|
217
|
+
const indexContent = {
|
|
218
|
+
key: "index",
|
|
219
|
+
content: {
|
|
220
|
+
exampleOfContent: t({
|
|
221
|
+
en: "Example of returned content in English",
|
|
222
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
223
|
+
ja: "日本語で返されるコンテンツの例",
|
|
224
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
225
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
226
|
+
}),
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
module.exports = indexContent;
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```json fileName="app/index.content.json" contentDeclarationFormat="json"
|
|
234
|
+
{
|
|
235
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
236
|
+
"key": "index",
|
|
237
|
+
"content": {
|
|
238
|
+
"exampleOfContent": {
|
|
239
|
+
"nodeType": "translation",
|
|
240
|
+
"translation": {
|
|
241
|
+
"en": "Example of returned content in English",
|
|
242
|
+
"fr": "Exemple de contenu renvoyé en français",
|
|
243
|
+
"ja": "日本語で返されるコンテンツの例",
|
|
244
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
245
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
> コンテンツ宣言は、`contentDir` ディレクトリ(デフォルトでは `./src` または `./app`)に含まれており、コンテンツ宣言のファイル拡張子(デフォルトでは `.content.{json,ts,tsx,js,jsx,mjs,cjs}`)に一致する限り、アプリケーションのどこにでも定義できます。
|
|
253
|
+
|
|
254
|
+
> 詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)を参照してください。
|
|
255
|
+
|
|
256
|
+
### AdonisJS アプリケーションの設定
|
|
257
|
+
|
|
258
|
+
`adonis-intlayer` を使用するように AdonisJS アプリケーションをセットアップします。
|
|
259
|
+
|
|
260
|
+
#### ミドルウェアの登録
|
|
261
|
+
|
|
262
|
+
まず、アプリケーションに `intlayer` ミドルウェアを登録する必要があります。
|
|
263
|
+
|
|
264
|
+
```typescript fileName="start/kernel.ts"
|
|
265
|
+
router.use([() => import("adonis-intlayer/middleware")]);
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
#### ルートの定義
|
|
269
|
+
|
|
270
|
+
```typescript fileName="start/routes.ts"
|
|
271
|
+
import router from "@adonisjs/core/services/router";
|
|
272
|
+
import { t, getIntlayer, getDictionary } from "adonis-intlayer";
|
|
273
|
+
import indexContent from "../app/index.content";
|
|
274
|
+
|
|
275
|
+
router.get("/t_example", async () => {
|
|
276
|
+
return t({
|
|
277
|
+
en: "Example of returned content in English",
|
|
278
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
279
|
+
ja: "日本語で返されるコンテンツの例",
|
|
280
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
281
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
router.get("/getIntlayer_example", async () => {
|
|
286
|
+
return getIntlayer("index").exampleOfContent;
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
router.get("/getDictionary_example", async () => {
|
|
290
|
+
return getDictionary(indexContent).exampleOfContent;
|
|
291
|
+
});
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
#### 関数
|
|
295
|
+
|
|
296
|
+
`adonis-intlayer` は、アプリケーションでの国際化を処理するためにいくつかの関数をエクスポートします。
|
|
297
|
+
|
|
298
|
+
- `t(content, locale?)`: 基本的な翻訳関数。
|
|
299
|
+
- `getIntlayer(key, locale?)`: 辞書からキーによってコンテンツを取得します。
|
|
300
|
+
- `getDictionary(dictionary, locale?)`: 特定の辞書オブジェクトからコンテンツを取得します。
|
|
301
|
+
- `getLocale()`: リクエストコンテキストから現在のロケールを取得します。
|
|
302
|
+
|
|
303
|
+
#### コントローラーでの使用
|
|
304
|
+
|
|
305
|
+
```typescript fileName="app/controllers/example_controller.ts"
|
|
306
|
+
import type { HttpContext } from "@adonisjs/core/http";
|
|
307
|
+
import { t } from "adonis-intlayer";
|
|
308
|
+
|
|
309
|
+
export default class ExampleController {
|
|
310
|
+
async index({ response }: HttpContext) {
|
|
311
|
+
return response.send(
|
|
312
|
+
t({
|
|
313
|
+
en: "Hello from controller",
|
|
314
|
+
fr: "Bonjour depuis le contrôleur",
|
|
315
|
+
ja: "コントローラーからのこんにちは",
|
|
316
|
+
})
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### 互換性
|
|
323
|
+
|
|
324
|
+
`adonis-intlayer` は、以下と完全に互換性があります。
|
|
325
|
+
|
|
326
|
+
- React アプリケーション向けの [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/index.md)
|
|
327
|
+
- Next.js アプリケーション向けの [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/next-intlayer/index.md)
|
|
328
|
+
- Vite アプリケーション向けの [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/vite-intlayer/index.md)
|
|
329
|
+
|
|
330
|
+
また、ブラウザや API リクエストを含む、さまざまな環境にわたるあらゆる国際化ソリューションとシームレスに連携します。ヘッダーやクッキーを介してロケールを検出するようにミドルウェアをカスタマイズできます。
|
|
331
|
+
|
|
332
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
333
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
334
|
+
|
|
335
|
+
const config: IntlayerConfig = {
|
|
336
|
+
// ... その他の設定オプション
|
|
337
|
+
middleware: {
|
|
338
|
+
headerName: "my-locale-header",
|
|
339
|
+
cookieName: "my-locale-cookie",
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
export default config;
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
デフォルトでは、`adonis-intlayer` は `Accept-Language` ヘッダーを解釈して、クライアントの優先言語を決定します。
|
|
347
|
+
|
|
348
|
+
> 設定や高度なトピックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)をご覧ください。
|
|
349
|
+
|
|
350
|
+
### TypeScript の設定
|
|
351
|
+
|
|
352
|
+
`adonis-intlayer` は、TypeScript の強力な機能を活用して国際化プロセスを強化します。TypeScript の静的型付けにより、すべての翻訳キーが考慮され、翻訳の漏れのリスクが軽減され、保守性が向上します。
|
|
353
|
+
|
|
354
|
+

|
|
355
|
+
|
|
356
|
+

|
|
357
|
+
|
|
358
|
+
自動生成された型(デフォルトでは ./types/intlayer.d.ts)が tsconfig.json ファイルに含まれていることを確認してください。
|
|
359
|
+
|
|
360
|
+
```json5 fileName="tsconfig.json"
|
|
361
|
+
{
|
|
362
|
+
// ... 既存の TypeScript 設定
|
|
363
|
+
"include": [
|
|
364
|
+
// ... 既存の TypeScript 設定
|
|
365
|
+
".intlayer/**/*.ts", // 自動生成された型を含める
|
|
366
|
+
],
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### VS Code 拡張機能
|
|
371
|
+
|
|
372
|
+
Intlayer での開発体験を向上させるために、公式の **Intlayer VS Code 拡張機能**をインストールできます。
|
|
373
|
+
|
|
374
|
+
[VS Code Marketplace からインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
375
|
+
|
|
376
|
+
この拡張機能は以下を提供します。
|
|
377
|
+
|
|
378
|
+
- 翻訳キーの**自動補完**。
|
|
379
|
+
- 翻訳漏れの**リアルタイムエラー検出**。
|
|
380
|
+
- 翻訳されたコンテンツの**インラインプレビュー**。
|
|
381
|
+
- 翻訳を簡単に作成・更新するための**クイックアクション**。
|
|
382
|
+
|
|
383
|
+
拡張機能の使用方法の詳細については、[Intlayer VS Code 拡張機能のドキュメント](https://intlayer.org/ja/doc/vs-code-extension)を参照してください。
|
|
384
|
+
|
|
385
|
+
### Git の設定
|
|
386
|
+
|
|
387
|
+
Intlayer によって生成されたファイルを無視することをお勧めします。これにより、それらを Git リポジトリにコミットすることを避けることができます。
|
|
388
|
+
|
|
389
|
+
これを行うには、`.gitignore` ファイルに以下の指示を追加します。
|
|
390
|
+
|
|
391
|
+
```plaintext fileName=".gitignore"
|
|
392
|
+
# Intlayer によって生成されたファイルを無視する
|
|
393
|
+
.intlayer
|
|
394
|
+
```
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: Hono i18n - Hono アプリの翻訳方法 – 2026 ガイド
|
|
5
|
+
description: Hono バックエンドを多言語化する方法をご紹介します。ドキュメントに従って国際化 (i18n) と翻訳を行ってください。
|
|
6
|
+
keywords:
|
|
7
|
+
- 国際化
|
|
8
|
+
- ドキュメント
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Hono
|
|
11
|
+
- JavaScript
|
|
12
|
+
- バックエンド
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- hono
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-hono-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.5.9
|
|
20
|
+
date: 2025-12-30
|
|
21
|
+
changes: init コマンドの追加
|
|
22
|
+
- version: 5.5.10
|
|
23
|
+
date: 2025-06-29
|
|
24
|
+
changes: 履歴の初期化
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Intlayer を使用して Hono バックエンド Web サイトを翻訳する | 国際化 (i18n)
|
|
28
|
+
|
|
29
|
+
`hono-intlayer` は、Hono アプリケーション向けの強力な国際化 (i18n) ミドルウェアです。クライアントの好みに基づいてローカライズされたレスポンスを提供することで、バックエンド サービスをグローバルにアクセス可能にするように設計されています。
|
|
30
|
+
|
|
31
|
+
### 実用的なユースケース
|
|
32
|
+
|
|
33
|
+
- **バックエンド エラーをユーザーの言語で表示する**: エラーが発生した際、ユーザーの母国語でメッセージを表示することで、理解が深まり、ストレスが軽減されます。これは、トーストやモーダルなどのフロントエンド コンポーネントに表示される可能性のある動的なエラー メッセージに特に役立ちます。
|
|
34
|
+
|
|
35
|
+
- **多言語コンテンツの取得**: データベースからコンテンツを取得するアプリケーションの場合、国際化によってこのコンテンツを複数の言語で提供できます。これは、製品の説明、記事、その他のコンテンツをユーザーが好む言語で表示する必要がある e コマース サイトやコンテンツ管理システムなどのプラットフォームにとって不可欠です。
|
|
36
|
+
|
|
37
|
+
- **多言語メールの送信**: トランザクション メール、マーケティング キャンペーン、通知のいずれであっても、受信者の言語でメールを送信することで、エンゲージメントと効果を大幅に高めることができます。
|
|
38
|
+
|
|
39
|
+
- **多言語プッシュ通知**: モバイル アプリケーションの場合、ユーザーの優先言語でプッシュ通知を送信することで、インタラクションと継続率を向上させることができます。この個人的なタッチにより、通知がより関連性が高く、行動を促すものに感じられます。
|
|
40
|
+
|
|
41
|
+
- **その他のコミュニケーション**: SMS メッセージ、システム アラート、ユーザー インターフェースの更新など、バックエンドからのあらゆる形式のコミュニケーションは、ユーザーの言語であることでメリットが得られ、明確さが確保され、全体的なユーザー エクスペリエンスが向上します。
|
|
42
|
+
|
|
43
|
+
バックエンドを国際化することで、アプリケーションは文化的な違いを尊重するだけでなく、グローバルな市場のニーズにもより適合するようになり、サービスを世界規模で拡大するための重要なステップとなります。
|
|
44
|
+
|
|
45
|
+
## はじめに
|
|
46
|
+
|
|
47
|
+
### インストール
|
|
48
|
+
|
|
49
|
+
`hono-intlayer` の使用を開始するには、npm を使用してパッケージをインストールします。
|
|
50
|
+
|
|
51
|
+
```bash packageManager="npm"
|
|
52
|
+
npm install intlayer hono-intlayer
|
|
53
|
+
npx intlayer init
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```bash packageManager="pnpm"
|
|
57
|
+
pnpm add intlayer hono-intlayer
|
|
58
|
+
pnpm intlayer init
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```bash packageManager="yarn"
|
|
62
|
+
yarn add intlayer hono-intlayer
|
|
63
|
+
yarn intlayer init
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash packageManager="bun"
|
|
67
|
+
bun add intlayer hono-intlayer
|
|
68
|
+
bunx intlayer init
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 設定
|
|
72
|
+
|
|
73
|
+
プロジェクトのルートに `intlayer.config.ts` を作成して、国際化設定を構成します。
|
|
74
|
+
|
|
75
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
76
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
77
|
+
|
|
78
|
+
const config: IntlayerConfig = {
|
|
79
|
+
internationalization: {
|
|
80
|
+
locales: [
|
|
81
|
+
Locales.ENGLISH,
|
|
82
|
+
Locales.FRENCH,
|
|
83
|
+
Locales.SPANISH_MEXICO,
|
|
84
|
+
Locales.SPANISH_SPAIN,
|
|
85
|
+
Locales.JAPANESE,
|
|
86
|
+
],
|
|
87
|
+
defaultLocale: Locales.ENGLISH,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export default config;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### コンテンツの宣言
|
|
95
|
+
|
|
96
|
+
翻訳を保存するためのコンテンツ宣言を作成および管理します。
|
|
97
|
+
|
|
98
|
+
```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
|
|
99
|
+
import { t, type Dictionary } from "intlayer";
|
|
100
|
+
|
|
101
|
+
const indexContent = {
|
|
102
|
+
key: "index",
|
|
103
|
+
content: {
|
|
104
|
+
exampleOfContent: t({
|
|
105
|
+
en: "Example of returned content in English",
|
|
106
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
107
|
+
ja: "日本語で返されるコンテンツの例",
|
|
108
|
+
}),
|
|
109
|
+
},
|
|
110
|
+
} satisfies Dictionary;
|
|
111
|
+
|
|
112
|
+
export default indexContent;
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
> コンテンツ宣言は、`contentDir` ディレクトリ (デフォルトは `./src`) に含まれている限り、アプリケーションのどこでも定義できます。また、コンテンツ宣言ファイルの拡張子 (デフォルトは `.content.{json,ts,tsx,js,jsx,mjs,cjs}`) に一致させる必要があります。
|
|
116
|
+
|
|
117
|
+
> 詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)を参照してください。
|
|
118
|
+
|
|
119
|
+
### Hono アプリケーションの設定
|
|
120
|
+
|
|
121
|
+
`hono-intlayer` を使用するように Hono アプリケーションを設定します。
|
|
122
|
+
|
|
123
|
+
```typescript fileName="src/index.ts" codeFormat="typescript"
|
|
124
|
+
import { Hono } from "hono";
|
|
125
|
+
import { intlayer, t, getDictionary, getIntlayer } from "hono-intlayer";
|
|
126
|
+
import dictionaryExample from "./index.content";
|
|
127
|
+
|
|
128
|
+
const app = new Hono();
|
|
129
|
+
|
|
130
|
+
// 国際化リクエスト ハンドラをロード
|
|
131
|
+
app.use("*", intlayer());
|
|
132
|
+
|
|
133
|
+
// ルート
|
|
134
|
+
app.get("/t_example", (c) => {
|
|
135
|
+
return c.text(
|
|
136
|
+
t({
|
|
137
|
+
en: "Example of returned content in English",
|
|
138
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
139
|
+
ja: "日本語で返されるコンテンツの例",
|
|
140
|
+
})
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
app.get("/getIntlayer_example", (c) => {
|
|
145
|
+
return c.json(getIntlayer("index").exampleOfContent);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
app.get("/getDictionary_example", (c) => {
|
|
149
|
+
return c.json(getDictionary(dictionaryExample).exampleOfContent);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
export default app;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 互換性
|
|
156
|
+
|
|
157
|
+
`hono-intlayer` は以下と完全に互換性があります。
|
|
158
|
+
|
|
159
|
+
- React アプリケーション向けの [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/index.md)
|
|
160
|
+
- Next.js アプリケーション向けの [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/next-intlayer/index.md)
|
|
161
|
+
- Vite アプリケーション向けの [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/vite-intlayer/index.md)
|
|
162
|
+
|
|
163
|
+
また、ブラウザや API リクエストを含むさまざまな環境のあらゆる国際化ソリューションとシームレスに連携します。ヘッダーやクッキーを介してロケールを検出するようにミドルウェアをカスタマイズできます。
|
|
164
|
+
|
|
165
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
166
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
167
|
+
|
|
168
|
+
const config: IntlayerConfig = {
|
|
169
|
+
// ... その他の構成オプション
|
|
170
|
+
middleware: {
|
|
171
|
+
headerName: "my-locale-header",
|
|
172
|
+
cookieName: "my-locale-cookie",
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
export default config;
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
デフォルトでは、`hono-intlayer` は `Accept-Language` ヘッダーを解釈して、クライアントの優先言語を決定します。
|
|
180
|
+
|
|
181
|
+
> 構成や高度なトピックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)をご覧ください。
|
|
182
|
+
|
|
183
|
+
### TypeScript の設定
|
|
184
|
+
|
|
185
|
+
`hono-intlayer` は TypeScript の堅牢な機能を活用して、国際化プロセスを強化します。TypeScript の静的型付けにより、すべての翻訳キーが考慮され、翻訳漏れのリスクが軽減され、保守性が向上します。
|
|
186
|
+
|
|
187
|
+

|
|
188
|
+
|
|
189
|
+

|
|
190
|
+
|
|
191
|
+
自動生成された型 (デフォルトは `./types/intlayer.d.ts`) が `tsconfig.json` ファイルに含まれていることを確認してください。
|
|
192
|
+
|
|
193
|
+
```json5 fileName="tsconfig.json"
|
|
194
|
+
{
|
|
195
|
+
// ... 既存の TypeScript 構成
|
|
196
|
+
"include": [
|
|
197
|
+
// ... 既存の TypeScript 構成
|
|
198
|
+
".intlayer/**/*.ts", // 自動生成された型を含める
|
|
199
|
+
],
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### VS Code 拡張機能
|
|
204
|
+
|
|
205
|
+
Intlayer の開発体験を向上させるために、公式の **Intlayer VS Code 拡張機能** をインストールできます。
|
|
206
|
+
|
|
207
|
+
[VS Code Marketplace からインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
208
|
+
|
|
209
|
+
この拡張機能は以下を提供します。
|
|
210
|
+
|
|
211
|
+
- 翻訳キーの**オートコンプリート**。
|
|
212
|
+
- 翻訳漏れの**リアルタイム エラー検出**。
|
|
213
|
+
- 翻訳されたコンテンツの**インライン プレビュー**。
|
|
214
|
+
- 翻訳を簡単に作成および更新するための**クイック アクション**。
|
|
215
|
+
|
|
216
|
+
拡張機能の使用方法の詳細については、[Intlayer VS Code 拡張機能のドキュメント](https://intlayer.org/doc/vs-code-extension)を参照してください。
|
|
217
|
+
|
|
218
|
+
### Git の設定
|
|
219
|
+
|
|
220
|
+
Intlayer によって生成されたファイルを無視することをお勧めします。これにより、それらを Git リポジトリにコミットすることを避けることができます。
|
|
221
|
+
|
|
222
|
+
これを行うには、`.gitignore` ファイルに次の手順を追加します。
|
|
223
|
+
|
|
224
|
+
```plaintext fileName=".gitignore"
|
|
225
|
+
# Intlayer によって生成されたファイルを無視する
|
|
226
|
+
.intlayer
|
|
227
|
+
```
|