国際化(i18n)
Starlightは、ルーティング、フォールバックコンテンツ、右横書き(right-to-left、RTL)言語へのフルサポートなど、複数言語サイトを構築するための機能を組み込みで提供します。
i18nの設定
-
locales
とdefaultLocale
をStarlightインテグレーションに渡すことで、サポートする言語についてStarlightに伝えます。defaultLocale
はフォールバックコンテンツとUIラベルに使用されるため、コンテンツを最初に書く可能性が最も高い言語、またはすでにコンテンツがある言語を選択してください。 -
src/content/docs/
に各言語のディレクトリを作成します。たとえば上で示した構成に対しては、以下のフォルダを作成します。ディレクトリsrc/
ディレクトリcontent/
ディレクトリdocs/
ディレクトリar/
- …
ディレクトリen/
- …
ディレクトリzh-cn/
- …
-
これで各言語のディレクトリにコンテンツ用のファイルを追加できるようになりました。言語間でページを関連付けるために、同じページには同じファイル名を使用してください。フォールバックコンテンツや翻訳に関する通知など、Starlightのi18n機能をフル活用しましょう。
たとえば、
ar/index.md
とen/index.md
は、アラビア語版と英語版のホームページをそれぞれ表わします。
ルートロケールを使用する
「ルート」ロケールを使用すると、パスにi18nプレフィックスを付けずにある言語を提供できます。たとえば英語をルートロケールとすると、英語のページパスは/en/about
ではなく/about
のようになります。
ルートロケールを設定するには、locales
のroot
キーを使用します。ルートロケールがコンテンツのデフォルトロケールでもある場合は、defaultLocale
を削除するか、'root'
に設定します。
root
ロケールを使用する場合は、言語専用のフォルダではなく、src/content/docs/
にその言語のページを直接保存します。たとえば上記の設定を使用した場合、英語と中国語のホームページ用ファイルは次のようになります。
ディレクトリsrc/
ディレクトリcontent/
ディレクトリdocs/
- index.md
ディレクトリzh-cn/
- index.md
単一言語のサイト
デフォルトでは、Starlightは単一言語(英語)のサイトです。他の言語で単一言語のサイトを作成するには、その言語をlocales
においてroot
に設定します。
これにより、言語選択機能などの他の国際化機能は有効化せずに、Starlightのデフォルト言語を上書きできます。
フォールバックコンテンツ
Starlightは、すべての言語で同等のページが作成されることを想定しています。たとえばen/about.md
ファイルがある場合、サポートする他の言語でもそれぞれabout.md
を作成してください。これにより、まだ翻訳されていないページに対して、Starlightが自動的にフォールバックコンテンツを提供できるようになります。
ある言語の翻訳がまだである場合、Starlightはそのページのコンテンツを(defaultLocale
で設定する)デフォルト言語で表示します。たとえば、概要(about)ページのフランス語版をまだ作成していない場合、デフォルト言語が英語であれば、/fr/about
を訪れた人には未翻訳であるという通知とともに英語のコンテンツが表示されます。これにより、まずデフォルト言語にコンテンツを追加し、そして翻訳者が時間を掛けて徐々に翻訳していくことが可能となります。
StarlightのUIを翻訳する
Starlightでは、読者が選択した言語でサイト全体を体験できるように、翻訳されたコンテンツファイルをホストするだけでなく、デフォルトUIの文字列(たとえば目次に表示されている「目次」という見出し)も翻訳できるようになっています。
アラビア語、イタリア語、インドネシア語、ウクライナ語、オランダ語、カタロニア語、ガリシア語、スウェーデン語、スペイン語、スロバキア語、チェコ語、デンマーク語、ドイツ語、トルコ語、ノルウェー語(ブークモール)、ヒンディー語、フランス語、ベトナム語、ヘブライ語、ペルシア語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、英語、韓国語、中国語、中国語 (台湾)、日本語の翻訳済みUI文字列がすでに用意されていますが、デフォルト言語をさらに追加するための貢献も歓迎します。
18n
データコレクションを使用すると、サポートしたい言語の翻訳を追加したり、デフォルトのラベルを上書きしたりできます。
-
設定がまだであれば、
src/content/config.ts
でi18n
データコレクションを設定します。 -
UI文字列を追加で翻訳したいロケールごとに、
src/content/i18n/
にJSONファイルを作成します。たとえば、以下ではアラビア語と簡体字中国語の翻訳ファイルを追加しています。ディレクトリsrc/
ディレクトリcontent/
ディレクトリi18n/
- ar.json
- zh-CN.json
-
翻訳したいキーに対応する翻訳を、JSONファイルに追加します。キーは英語のままとし、値のみを翻訳します(例:
"search.label": "Buscar"
)。以下は、Starlightが英語版のデフォルトとして使用している文字列です。
Starlightのコードブロックは、Expressive Codeライブラリによって動作しています。
expressiveCode
キーを使用して、同じJSONファイルでUI文字列の翻訳について設定できます。Starlightの検索モーダルは、Pagefindライブラリによって動作しています。PagefindのUIの翻訳は、
pagefind
キーを使用して同じJSONファイルに設定できます。
翻訳スキーマを拡張する
i18nSchema()
オプションのextend
を設定することで、サイトの翻訳辞書にカスタムキーを追加できます。以下の例では、オプションのcustom.label
キーが新たにデフォルトのキーに追加されています。
コンテンツコレクションのスキーマについて詳しくは、Astroドキュメントの「コレクションスキーマの定義」を参照してください。