このページとあなたの好きなAIアシスタントを使ってドキュメントを要約します
バージョン履歴
- "ガイドを Elysia テンプレートに合わせて更新(コンテキストの型付け、Bun のセットアップ、スクリプト)"v9.4.02026/8/24
- "Elysia プラグインの初期化"v9.4.02026/8/23
このページのコンテンツはAIを使用して翻訳されました。
英語の元のコンテンツの最新バージョンを見るこのドキュメントを改善するアイデアがある場合は、GitHubでプルリクエストを送信することで自由に貢献してください。
ドキュメントへのGitHubリンクドキュメントのMarkdownをクリップボードにコピー
Intlayerを使用してElysiaバックエンドWebサイトを多言語化する | 国際化 (i18n)
elysia-intlayerは、Elysiaアプリケーション向けの強力な国際化(i18n)プラグインで、クライアントの設定に基づいてローカライズされたレスポンスを提供することで、バックエンドサービスをグローバルにアクセス可能にするように設計されています。
GitHubでパッケージの実装を確認してください: https://github.com/aymericzip/intlayer/tree/main/packages/elysia-intlayer
実践的なユースケース
- ユーザーの言語でバックエンドエラーを表示: エラーが発生した場合、ユーザーの母語でメッセージを表示することで、理解が向上し、フラストレーションが軽減されます。これは、トーストやモーダルのようなフロントエンドコンポーネントに表示される可能性がある動的なエラーメッセージに特に有用です。
- 多言語コンテンツの取得: データベースからコンテンツを取得するアプリケーションの場合、internationalizationにより、複数の言語でこのコンテンツを提供できることが保証されます。これは、ユーザーが好む言語で商品説明、記事、その他のコンテンツを表示する必要があるeコマースサイトやコンテンツ管理システムのようなプラットフォームにとって非常に重要です。
- 多言語メールの送信: トランザクションメール、マーケティングキャンペーン、または通知のいずれであっても、受信者の言語でメールを送信することで、エンゲージメントと効果を大幅に向上させることができます。
- 多言語プッシュ通知: モバイルアプリケーションの場合、ユーザーが好む言語でプッシュ通知を送信することで、インタラクションと保持を向上させることができます。このパーソナルなタッチにより、通知がより関連性が高く、実行可能なものに感じられます。
- その他のコミュニケーション: SMS メッセージ、システムアラート、ユーザーインターフェイスの更新など、バックエンドからのあらゆる形式のコミュニケーションは、ユーザーの言語で行われることで、明確性を確保し、全体的なユーザーエクスペリエンスを向上させることができます。
バックエンドをinternationalizationすることで、アプリケーションは文化的な違いを尊重するだけでなく、グローバルな市場ニーズにより適切に対応でき、サービスを世界規模で拡張するための重要なステップとなります。
はじめに
Application Template を GitHub で参照してください。
インストール
elysia-intlayer の使用を開始するには、npm を使用してパッケージをインストールします:
コードをクリップボードにコピー
--interactiveフラグはオプションです。AI エージェントの場合はintlayer-cli initを使用してください。
このコマンドはあなたの環境を検出し、必要なパッケージをインストールします。例えば:
コードをクリップボードにコピー
Elysia は Bun ランタイムを対象としています。elysia-intlayerが(Node ベースの Intlayer プラグインが使うcls-hookedライブラリではなく)AsyncLocalStorageに依存しているのは、まさに Bun がasync_hooks.createHookを実装していないためです。
セットアップ
プロジェクトルートに intlayer.config.ts を作成して、国際化設定を構成します:
コードをクリップボードにコピー
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
/**
* 要求されたロケールが見つからない場合にフォールバックとして使用されるデフォルトロケール。
*/
defaultLocale: Locales.ENGLISH,
},
};
export default config;
コンテンツの宣言
翻訳を保存するためのコンテンツ宣言を作成および管理します:
コードをクリップボードにコピー
import { t, type Dictionary } from "intlayer";
const indexContent = {
key: "index",
content: {
exampleOfContent: t({
ja: "英語で返されたコンテンツの例",
en: "Example of returned content in English",
fr: "Exemple de contenu renvoyé en français",
es: "Ejemplo de contenido devuelto en español",
}),
},
} satisfies Dictionary;
export default indexContent;
コンテンツ宣言は、contentDirディレクトリ(デフォルトでは./src)に含まれている限り、アプリケーション内のどこでも定義できます。そして、コンテンツ宣言ファイルの拡張子(デフォルトでは.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml})に一致している必要があります。
詳細については、コンテンツ宣言のドキュメントを参照してください。
Elysia アプリケーションのセットアップ
elysia-intlayer を使用するように Elysia アプリケーションをセットアップします:
コードをクリップボードにコピー
import { Elysia } from "elysia";
import { intlayer } from "elysia-intlayer";
const app = new Elysia()
// 国際化プラグインを読み込む
.use(intlayer())
// ルート
.get("/", ({ intlayer }) => ({
// このリクエストに使用されるロケール。`Accept-Language` がネゴシエーションされるか、ストレージから読み取られます
locale: intlayer!.locale,
greeting: intlayer!.t({
ja: "こんにちは",
en: "Hello",
fr: "Bonjour",
es: "Hola",
}),
content: intlayer!.getIntlayer("index").exampleOfContent,
}))
.listen(3000);
console.log(
`🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`
);
プラグインは グローバル なderiveを通じてコンテキストを登録し、Elysia はそれをPartial<{ intlayer: IntlayerContext }>として型付けします。.use(intlayer())の後に登録されたルートでは実行時に値が必ず存在するため、strictモードの TypeScript を満たすには非 null アサーション(intlayer!.locale)またはオプショナルチェーンを使用してください。
ルートコンテキストは以下を公開します:
テーブルをモーダルで開き、すべてのデータを明確に表示
| プロパティ | 説明 |
|---|---|
locale | このリクエストで使用するロケール。locale_storage が locale_detected より優先されます。 |
locale_storage | クッキーまたはヘッダーを通じてクライアントが明示的に要求したロケール。 |
locale_detected | リクエストヘッダーからネゴシエートされたロケール。 |
defaultLocale | intlayer.config.ts でフォールバックとして設定されたロケール。 |
t | 翻訳関数。 |
getIntlayer | キーで辞書を取得する関数。 |
getDictionary | 辞書オブジェクトを処理する関数。 |
同じヘルパーはスタンドアロンとしてもエクスポートされています。AsyncLocalStorage を通じて現在のリクエストを解決するため、コンテキストを分割代入せずに呼び出せます:
コードをクリップボードにコピー
import { Elysia } from "elysia";
import { intlayer, t, getDictionary, getIntlayer } from "elysia-intlayer";
import dictionaryExample from "./index.content";
const app = new Elysia()
.use(intlayer())
.get("/t_example", () =>
t({
ja: "英語で返されたコンテンツの例",
en: "Example of returned content in English",
fr: "Exemple de contenu renvoyé en français",
es: "Ejemplo de contenido devuelto en español",
})
)
.get("/getIntlayer_example", () => getIntlayer("index").exampleOfContent)
.get(
"/getDictionary_example",
() => getDictionary(dictionaryExample).exampleOfContent
)
.listen(3000);
リクエストコンテキストはレスポンスがマップされた時点で解放されるため、スタンドアロンのヘルパーが既に終了したリクエストに対して解決されることはありません。プラグインが処理するリクエストの外部で呼び出された場合は、設定されたデフォルトロケールにフォールバックします。
アプリケーションを実行する
Intlayer のスクリプトを package.json に追加します。intlayer build はコンテンツ宣言を .intlayer ディレクトリにコンパイルし、TypeScript の型を生成します:
コードをクリップボードにコピー
次にサーバーを起動します:
コードをクリップボードにコピー
Accept-Language でロケールネゴシエーションをテストします:
コードをクリップボードにコピー
bun run src/index.tsの前にintlayer buildは必須ではありません。プラグインは Elysia アプリの起動時にも辞書を準備します。事前に実行しておくと、エディタ用の生成型が同期された状態に保たれ、最初のリクエストでのビルドコストを避けられます。
互換性
elysia-intlayer は以下と完全に互換性があります:
react-intlayer- React アプリケーション向けnext-intlayer- Next.js アプリケーション向けvite-intlayer- Vite アプリケーション向け
また、ブラウザや API リクエストを含むさまざまな環境で、あらゆる国際化ソリューションとシームレスに連携します。
デフォルトでは、プラグインは次の順序でロケールを解決します:
INTLAYER_LOCALEクッキー。x-intlayer-localeヘッダー。Accept-Languageヘッダーのネゴシエーション。
ロケール検出に使用するクッキーとヘッダーはカスタマイズできます:
コードをクリップボードにコピー
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
// ... その他の設定オプション
routing: {
storage: [
{ type: "header", name: "my-locale-header" },
{ type: "cookie", name: "my-locale-cookie" },
],
},
};
export default config;
設定と高度なトピックについて詳しく知るには、当社のドキュメントをご覧ください。
TypeScript を設定する
elysia-intlayer は、国際化プロセスを強化するための TypeScript の堅牢な機能を活用しています。TypeScript の静的型付けにより、すべての翻訳キーが考慮され、欠落した翻訳のリスクが軽減され、保守性が向上します。
自動生成されたタイプ(デフォルトでは ./types/intlayer.d.ts)が tsconfig.json ファイルに含まれていることを確認してください。
コードをクリップボードにコピー
VS Code Extension
Intlayer の開発体験を向上させるために、公式の Intlayer VS Code Extension をインストールできます。
この拡張機能は以下を提供します:
- 翻訳キーの自動補完。
- 欠落している翻訳のリアルタイム エラー検出。
- 翻訳されたコンテンツのインライン プレビュー。
- 翻訳を簡単に作成および更新するためのクイック アクション。
拡張機能の使用方法の詳細については、Intlayer VS Code Extension ドキュメントを参照してください。
Git Configuration
Intlayerが生成するファイルを無視することをお勧めします。これにより、それらをGitリポジトリにコミットすることを回避できます。
これを行うには、.gitignoreファイルに以下の指示を追加できます:
コードをクリップボードにコピー
