URL の方針
既定の言語を日本語にして、日本語は接頭辞なし(/)、英語は /en/ の下に置いた。Astro のネイティブ i18n ルーティングで prefixDefaultLocale: false を指定すると、この形になる。
対訳のリンク
同じ記事の各言語版は、フロントマターの translationKey を一致させて束ねている。言語切替リンクは、この束(クラスタ)から相手の言語版 URL を引いて作る。対訳が無い記事では、その言語のトップへ移動するようにした。
hreflang は壊れやすい
調査の段階で「hreflang は有向グラフのようなもので、一本でもリンクが欠けると群全体が無効になりやすい」と分かっていた。そこで hreflang は translationKey のクラスタから対称的に生成し、ぶら下がったリンクが出ない作りにした。さらにビルド時に簡単な検証を走らせ、対訳が欠けているクラスタには警告を出す。
三言語目への備え
言語の一覧は一箇所の設定にまとめてある。三言語目を足すときは、その配列に一要素を加え、翻訳ファイルを置くだけで全体に波及する。最初から多言語前提で土台を組んでおくと、あとが軽い。