このページとあなたの好きなAIアシスタントを使ってドキュメントを要約します
バージョン履歴
- "Solid の useIntlayer API の使用法を直接プロパティアクセスに更新"v8.9.02026/5/4
- "initコマンドを追加"v7.5.92025/12/30
- "履歴の初期化"v5.5.102025/6/29
このページのコンテンツはAIを使用して翻訳されました。
英語の元のコンテンツの最新バージョンを見るこのドキュメントを改善するアイデアがある場合は、GitHubでプルリクエストを送信することで自由に貢献してください。
ドキュメントへのGitHubリンクドキュメントのMarkdownをクリップボードにコピー
IntlayerでVite and Vueを翻訳する | 国際化(i18n)
GitHub の アプリケーションテンプレート を参照してください。
代替手段ではなく Interlayer を使用する理由
「vue-i18n」や「i18next」などの主要なソリューションと比較して、Intlayer は次のような統合された最適化を備えたソリューションです。
Vue を完全にカバー
Intlayer は、コンポーネント レベルのコンテンツ スコープ、リアクティブな翻訳、および国際化のスケーリング (i18n) に必要なすべての機能を提供することにより、Vue と完全に連携するように最適化されています。
バンドルサイズ
大量の JSON ファイルをページにロードするのではなく、必要なコンテンツのみをロードします。 Intlayer は、バンドルとページのサイズを最大 50% 削減するのに役立ちます。
保守性
アプリケーションのコンテンツのスコープを設定すると、大規模なアプリケーションの メンテナンスが容易になります。コンテンツ コードベース全体を確認するという精神的な負担を負うことなく、単一の機能フォルダーを複製または削除できます。さらに、Intlayer は完全に型指定されており、コンテンツの正確性を保証します。
AI エージェント
コンテンツを同じ場所に配置すると、大規模言語モデル (LLM) によって 必要なコンテキストが削減されます。 Intlayer には、翻訳の欠落をテストする CLI、LSP、MCP などのツール スイートも付属しています。および エージェント スキル により、AI エージェントの開発者エクスペリエンス (DX) がさらにスムーズになります。
オートメーション
AI プロバイダーの費用で、選択した LLM を使用して CI/CD パイプラインで自動化を変換します。 Intlayer は、コンテンツ抽出を自動化する コンパイラー と、バックグラウンドでの翻訳を支援する Web プラットフォーム も提供します。
パフォーマンス
大量の JSON ファイルをコンポーネントに接続すると、パフォーマンスと反応性の問題が発生する可能性があります。 Intlayer は、ビルド時のコンテンツの読み込みを最適化します。
非開発によるスケーリング
Intlayer は単なる i18n ソリューションではなく、自己ホスト型 ビジュアル エディター と 完全な CMS を提供します。 リアルタイムで多言語コンテンツを管理できるようになり、翻訳者、コピーライター、その他のチーム メンバーとのコラボレーションがシームレスになります。コンテンツはローカルおよび/またはリモートに保存できます。
Vite と Vue アプリケーションに Intlayer をセットアップするステップバイステップガイド
GitHub の アプリケーションテンプレート を参照してください。
依存パッケージのインストール
npm を使って必要なパッケージをインストールします:
bashコードをコピーコードをクリップボードにコピー
intlayer
vue-intlayer IntlayerをVueアプリケーションに統合するパッケージです。Vueの国際化のためのコンテキストプロバイダーとコンポーザブルを提供します。
vite-intlayer
Viteバンドラー(Vite bundler)とIntlayerを統合するためのViteプラグイン、およびユーザーの優先ロケールの検出、クッキー管理、URLリダイレクト処理のためのミドルウェアを含みます。
プロジェクトの設定
アプリケーションの言語を設定するための設定ファイルを作成します:
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;この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所と拡張子、コンソールでのIntlayerログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、設定ドキュメントを参照してください。
Vite設定にIntlayerを統合する
intlayerプラグインを設定に追加します。
vite.config.tsコードをコピーコードをクリップボードにコピー
import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import { intlayer } from "vite-intlayer"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue(), intlayer()], });intlayer()Viteプラグインは、IntlayerをViteと統合するために使用されます。これにより、コンテンツ宣言ファイルのビルドが保証され、開発モードでそれらを監視します。また、Viteアプリケーション内でIntlayerの環境変数を定義します。さらに、パフォーマンスを最適化するためのエイリアスも提供します。コンテンツを宣言する
翻訳を格納するためのコンテンツ宣言を作成および管理します:
src/helloWorld.content.tsコードをコピーコードをクリップボードにコピー
import { t, type Dictionary } from "intlayer"; const helloWorldContent = { key: "helloworld", content: { count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }), edit: t({ en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR", fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR", es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR", }), checkOut: t({ en: "Check out ", ja: "チェックしてください ", fr: "Vérifiez ", es: "Compruebe ", }), officialStarter: t({ en: ", the official Vue + Vite starter", ja: ", 公式の Vue + Vite スターターです", fr: ", le starter officiel Vue + Vite", es: ", el starter oficial Vue + Vite", }), learnMore: t({ en: "Learn more about IDE Support for Vue in the ", ja: "Vue の IDE サポートについて詳しくは ", fr: "En savoir plus sur le support IDE pour Vue dans le ", es: "Aprenda más sobre el soporte IDE para Vue en el ", }), vueDocs: t({ en: "Vue Docs Scaling up Guide", ja: "Vue ドキュメント スケーリングアップガイド", fr: "Vue Docs Scaling up Guide", es: "Vue Docs Scaling up Guide", }), readTheDocs: t({ en: "Click on the Vite and Vue logos to learn more", fr: "Cliquez sur les logos Vite et Vue pour en savoir plus", es: "Haga clic en los logotipos de Vite y Vue para obtener más información", ja: "詳細を知るには、Vite と Vue のロゴをクリックしてください", }), }, } satisfies Dictionary; export default helloWorldContent;コンテンツ宣言は、
contentDirディレクトリ(デフォルトは./src)に含まれている限り、アプリケーションのどこにでも定義できます。また、コンテンツ宣言のファイル拡張子(デフォルトは.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml})に一致している必要があります。詳細については、コンテンツ宣言のドキュメントを参照してください。
コード内でIntlayerを利用する
Vueアプリケーション全体でIntlayerの国際化機能を利用するには、まずメインファイルでIntlayerのシングルトンインスタンスを登録する必要があります。このステップは非常に重要で、アプリケーション内のすべてのコンポーネントに国際化コンテキストを提供し、コンポーネントツリーのどこからでも翻訳にアクセスできるようにします。
コードをコピーコードをクリップボードにコピー
メインのVueコンポーネントを作成し、
useIntlayerのコンポーザブルを使用することで、アプリケーション全体でコンテンツ辞書にアクセスできます。src/HelloWord.vueコードをコピーコードをクリップボードにコピー
Intlayerでのコンテンツへのアクセス
Intlayerは、コンテンツにアクセスするためのさまざまなAPIを提供しています:
コンポーネントベースの構文(推奨):
<myContent />または<Component :is="myContent" />の構文を使用して、Intlayerノードとしてコンテンツをレンダリングします。これはビジュアルエディターやCMSとシームレスに統合されます。文字列ベースの構文:
{{ myContent }}を使用して、ビジュアルエディターのサポートなしにプレーンテキストとしてコンテンツをレンダリングします。生のHTML構文:
<div v-html="myContent" />を使用して、Visual Editor のサポートなしでコンテンツを生の HTML としてレンダリングします。分割代入構文:
useIntlayerコンポーザブルはコンテンツを持つ Proxy を返します。この Proxy はリアクティビティを保ったままコンテンツにアクセスするために分割代入できます。const content = useIntlayer("myContent");と{{ content.myContent }}/<content.myContent />を使用します。- または
const { myContent } = useIntlayer("myContent");と{{ myContent }}/<myContent/>を使用してコンテンツを分割代入します。
アプリケーションが既に存在する場合は、Intlayer コンパイラ と 抽出コマンド を組み合わせて、1 秒で何千ものコンポーネントを変換できます。
コンテンツの言語を変更する
コンテンツの言語を変更するには、
useLocaleコンポーザブルが提供するsetLocale関数を使用します。この関数により、アプリケーションのロケールを設定し、それに応じてコンテンツを更新できます。言語を切り替えるコンポーネントを作成します:
src/components/LocaleSwitcher.vueコードをコピーコードをクリップボードにコピー
次に、このコンポーネントをApp.vueで使用します:
src/App.vueコードをコピーコードをクリップボードにコピー
アプリケーションにローカライズされたルーティングを追加する
Vueアプリケーションにローカライズされたルーティングを追加するには、通常、ロケールプレフィックス付きのVue Routerを使用します。これにより、各言語ごとにユニークなルートが作成され、SEOやSEOに適したURLに役立ちます。
例:
plaintextコードをコピーコードをクリップボードにコピー
まず、Vue Routerをインストールします:
bashコードをコピーコードをクリップボードにコピー
次に、ロケールベースのルーティングを処理するルーター設定を作成します:
src/router/index.tsコードをコピーコードをクリップボードにコピー
ルート名はルーター内でルートを識別するために使用されます。すべてのルートで一意である必要があり、競合を避け、適切なナビゲーションとリンクを保証します。
次に、main.jsファイルでルーターを登録します:
src/main.tsコードをコピーコードをクリップボードにコピー
次に、
App.vueファイルを更新してRouterViewコンポーネントをレンダリングします。このコンポーネントは現在のルートにマッチしたコンポーネントを表示します。src/App.vueコードをコピーコードをクリップボードにコピー
同時に、
intlayerProxyを使用してアプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインはURLに基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最適なロケールを判定します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトします。vite.config.tsコードをコピーコードをクリップボードにコピー
import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import { intlayer, intlayerProxy } from "vite-intlayer"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ intlayerProxy(), // should be placed first vue(), intlayer(), ], });ロケール変更時にURLを変更する
ユーザーが言語を変更したときにURLを自動的に更新するには、
LocaleSwitcherコンポーネントを Vue Router を使うように変更できます。src/components/LocaleSwitcher.vueコードをコピーコードをクリップボードにコピー
ヒント: SEOとアクセシビリティを向上させるために、ステップ10で示したように、ローカライズされたページへのリンクには
<a href="/fr/home" hreflang="fr">のようなタグを使用してください。これにより、検索エンジンは言語別のURLを正しく検出しインデックス化できます。SPAの動作を維持するためには、@click.preventでデフォルトのナビゲーションを防止し、useLocaleでロケールを変更し、Vue Routerを使ってプログラム的にナビゲートすることが可能です。htmlコードをコピーコードをクリップボードにコピー
HTMLの言語属性と方向属性を切り替える
アプリケーションが複数の言語をサポートしている場合、
<html>タグのlang属性とdir属性を現在のロケールに合わせて更新することが非常に重要です。これにより以下が保証されます:- アクセシビリティ: スクリーンリーダーや支援技術は、正しい
lang属性に依存してコンテンツを正確に発音し解釈します。 - テキストレンダリング:
dir(方向)属性は、テキストが適切な順序(例:英語は左から右、アラビア語やヘブライ語は右から左)で表示されることを保証し、読みやすさに不可欠です。 - SEO: 検索エンジンは
lang属性を使用してページの言語を判別し、適切なローカライズされたコンテンツを検索結果に表示します。
ロケールが変更された際にこれらの属性を動的に更新することで、すべての対応言語において一貫性がありアクセシブルなユーザー体験を保証します。
src/composables/useI18nHTMLAttributes.tsコードをコピーコードをクリップボードにコピー
このコンポーザブルは、
App.vueまたはグローバルコンポーネントで使用します。src/App.vueコードをコピーコードをクリップボードにコピー
- アクセシビリティ: スクリーンリーダーや支援技術は、正しい
ローカライズされたリンクコンポーネントの作成
アプリケーションのナビゲーションが現在のロケールを尊重するようにするために、カスタムの
Linkコンポーネントを作成できます。このコンポーネントは内部のURLに自動的に現在の言語をプレフィックスとして付加します。例えば、フランス語を話すユーザーが「About」ページへのリンクをクリックすると、/aboutではなく/fr/aboutにリダイレクトされます。この動作は以下の理由で有用です:
- SEOとユーザーエクスペリエンス:ローカライズされたURLは、検索エンジンが言語別のページを正しくインデックスし、ユーザーに好みの言語でコンテンツを提供するのに役立ちます。
- 一貫性:アプリケーション全体でローカライズされたリンクを使用することで、ナビゲーションが現在のロケール内に留まり、予期しない言語の切り替えを防ぎます。
- 保守性: ローカリゼーションのロジックを単一のコンポーネントに集約することで、URLの管理が簡素化され、アプリケーションの成長に伴いコードベースの保守や拡張が容易になります。
src/components/Link.vueコードをコピーコードをクリップボードにコピー
Vue Routerで使用する場合は、ルーター専用のバージョンを作成します:
src/components/RouterLink.vueコードをコピーコードをクリップボードにコピー
これらのコンポーネントをアプリケーションで使用します:
src/App.vueコードをコピーコードをクリップボードにコピー
Markdownのレンダリング
Intlayerは、Vueアプリケーション内でMarkdownコンテンツを直接レンダリングすることをサポートしています。デフォルトでは、Markdownはプレーンテキストとして扱われます。MarkdownをリッチなHTMLに変換するには、Markdownパーサーであるmarkdown-itを統合できます。
これは、翻訳にリスト、リンク、強調などのフォーマットされたコンテンツが含まれる場合に特に便利です。
デフォルトではIntlayerはMarkdownを文字列としてレンダリングしますが、
installIntlayerMarkdown関数を使ってMarkdownをHTMLにレンダリングする方法も提供しています。intlayerパッケージを使ってMarkdownコンテンツを宣言する方法については、markdownドキュメントを参照してください。main.tsコードをコピーコードをクリップボードにコピー
登録が完了すると、コンポーネントベースの構文を使ってMarkdownコンテンツを直接表示できます:
vueコードをコピーコードをクリップボードにコピー
コンポーネントのコンテンツを抽出する
オプション既存のコードベースがある場合、数千のファイルを変換するのは時間がかかることがあります。
このプロセスを容易にするために、Intlayerは、コンポーネントを変換しコンテンツを抽出するための コンパイラ / エクストラクタ を提案しています。
セットアップするには、
intlayer.config.tsファイルにcompilerセクションを追加します。intlayer.config.tsコードをコピーコードをクリップボードにコピー
import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... 他の構成 compiler: { /** * コンパイラを有効にするかどうかを指定します。 */ enabled: true, /** * 出力ファイルのパスを定義します。 */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。 */ saveComponents: false, /** * 辞書キーの接頭辞 */ dictionaryKeyPrefix: "", }, }; export default config;コンポーネントを変換してコンテンツを抽出するためにエクストラクタを実行します
bashコードをコピーコードをクリップボードにコピー
TypeScriptの設定
Intlayerはモジュール拡張を利用して、TypeScriptの利点を活かし、コードベースをより強固にします。


TypeScriptの設定に自動生成された型定義が含まれていることを確認してください。
コードをクリップボードにコピー
Gitの設定
Intlayerによって生成されたファイルは無視することを推奨します。これにより、それらのファイルをGitリポジトリにコミットするのを避けることができます。
これを行うには、以下の指示を.gitignoreファイルに追加してください。
コードをクリップボードにコピー
VS Code拡張機能
Intlayerでの開発体験を向上させるために、公式のIntlayer VS Code拡張機能をインストールできます。
この拡張機能は以下を提供します:
- 翻訳キーのオートコンプリート。
- 欠落している翻訳のリアルタイムエラー検出。
- 翻訳されたコンテンツのインラインプレビュー。
- 翻訳を簡単に作成・更新できるクイックアクション。
拡張機能の使用方法の詳細については、Intlayer VS Code Extension ドキュメントを参照してください。
(任意)サイトマップと robots.txt(ビルド時生成)
Intlayer は generateSitemap と getMultilingualUrls により、クローラ向けに整形した多言語の sitemap.xml と robots.txt を public/ に自動で書き出せます。通常は Vite より前に小さな Node スクリプトを走らせます(例: npm の predev / prebuild)。
サイトマップ
Intlayer のサイトマップ生成はロケール設定を踏まえ、クローラ向けのメタデータを含めます。
生成されるサイトマップはxhtml:link(hreflang)をサポートします。単純な URL 列挙ではなく、各ページの言語版同士を双方向で結びます(例:/about、/fr/about、/about?lang=frなどルーティングに依存)。
Robots.txt
getMultilingualUrls で Disallow を、機微パスのすべての言語 URLに効かせます。
1. プロジェクトルートに generate-seo.mjs を置く
コードをクリップボードにコピー
intlayer がインストールされている必要があります。本番では環境変数 SITE_URL を設定してください(CI など)。
Node の ESM ではgenerate-seo.mjsを推奨します。generate-seo.jsにする場合はpackage.jsonの"type": "module"などで ESM を有効にしてください。
2. Vite より前にスクリプトを実行する
コードをクリップボードにコピー
pnpm や yarn を使う場合はコマンドを読み替えてください。CI から呼び出しても構いません。
さらに進むために
さらに進むには、ビジュアルエディターを実装するか、CMSを使用してコンテンツを外部化することができます。