しました
Hugoが基本的な機能の提供に終始してくれているため、その上では自由に実装できて特に問題もなく要件の実装ができた。

要件

  • 基本的に日本語で記述する
  • 英語版もつくる
  • 機械翻訳で英訳する[^1]
  • 機械翻訳を手作業で修正することもある[^2]

^1より、英語版コンテンツ生成に介入できる口が必要
^1と^2より、手動で翻訳したコンテンツと機械生成されたコンテンツの判別が必要

Hugoの多言語対応設定

コンテンツ(記事)の多言語対応は言語ごとの同名のファイルを用意することで行われ、翻訳がない場合にデフォルト言語のコンテンツを表示する、などのフォールバックはないためそのままでは要件を満たせない
https://gohugo.io/content-management/multilingual/#translate-your-content

仕様

  • 想定
    • 日本語には必ず全てのコンテンツファイルがある
    • 全てのコンテンツに英語版ファイルがあるとは限らない
  • Hugoの多言語対応機能に載せると「コンテンツがない場合はデフォルトの言語の記事を表示する」をやりにくいためビルドの前処理で他言語ファイルを生成する
    • 機械翻訳は挟める余地のみ残して実装は後回し。ひとまず日本語コンテンツのコピーを生成することでよしとする

実装

スクリプト(create_multilingual_contents.py)で以下を行う★

  • content/ 以下の .ja-jp.md ファイルを再帰的にリストアップする
  • 対応言語(現在は英語のみ)のファイルがなければ内容をコピーした .en.md ファイルを生成する

★をGitHub Action上でHugoのビルド処理を行う直前に実行することで、ホスティングしている環境のみで他言語対応コンテンツを生成する

運用

  • 日本語コンテンツ生成時は .ja-jp.md で生成する
  • 自分で英訳する場合は <対応するファイル名>.en.md で生成する
  • あとはCIがやる

課題

  • ローカル環境で他言語コンテンツ生成を行った場合は、そのファイルを削除しておかないとその後更新されなくなってしまう

Reference