Astroを使用したサイトで多言語対応をしたので、やったことをまとめておく。
1. i18nルーティングの設定
今まで多言語対応するとなると、現在のパスからLocaleを判定し言語を出し分けするという風に自前で実装したりあとはコミュニティのライブラリを利用するかの2択だったが、Astro v4.0からi18nのルーティング機能が追加されたおかげでこの辺りの実装が非常に楽になった。
設定ファイルに対応させるlocalesを追記する。
筆者の場合は日本語(デフォルト言語)ページの場合でも/ja/xxx
というパスにしたいので、prefixDefaultLocale
をtrue
にしておく。
2. ヘルパーメソッドの実装
- 多言語の文字列を扱うための
Multilingual
型を定義
- 現在のlocaleに応じた言語の文字列を返すために、ヘルパー
useTranslations
を実装
useTranslations
にlocaleを渡すだけで翻訳用の関数を利用できる。
3. Astroファイル内で言語を出し分ける
Astroファイル内であればAstro.currentLocale
で現在のlocaleを取得できるので、これでコンポーネント内で出し分けできる。
4. 現在のlocaleに応じたパス・URLの生成
筆者の場合、現在のlocaleに応じた相対パスを上記のように自前で生成しているが、
astro:i18n
モジュールが提供するメソッドを使えば簡単に取得できる。
5. 現在のパス・URLを別Localeのものに変換
後続の実装のために、現在のパス(URL)を別言語のものに変換できるようにしておく。
6. 言語切り替え機能の実装
セレクトボックスから言語を切り替えられるようにする。
もしSPAモードにしている場合はastro:transitions/client
モジュールのnavigate()
で遷移させる。
7. alternateタグの追加
サイトを国際化するにあたり各言語のページをindexさせたいので、alternateタグを追加する。