翻訳
Luna Flow は Blender マニュアルと同じ方法でドキュメントを翻訳します。英語のページが唯一のソースであり、ほかの言語はすべて翻訳済みメッセージからなる gettext 翻訳カタログです。中国語や日本語のページは、サイトのビルド時に英語のページとカタログから生成されます。
これには 3 つの利点があります。
- どの言語も、英語と構造がずれることはありません。ページ、見出し、コード、リンクは 1 つのソースから生まれます。
- 未翻訳または古くなった部分は、消えたり誤ったりせず、英語で表示されます。ページには、どれだけ翻訳されているかが表示されます。
- サイトはすべてのページとリポジトリの翻訳率を把握し、ライブラリに表示します。
メッセージ
lunadoc はすべてのページをメッセージに分割します。見出し、段落、リスト項目、表のセル、そしてフロントマターの title キーと description キーです。コードブロック、ディスプレイ数式、生の HTML はメッセージにならず、どの言語でも英語で書かれたとおりに表示されます。
複数行にわたる段落は 1 つのメッセージです。英語の文章を折り返し直してもメッセージは変わらないため、翻訳が無効になることはありません。
ワークフロー
doc/manualの英語ページを編集します。lunadoc updateを実行します。doc/locale/manual.potが再生成され、各manual.poにマージされます。- ページとカタログを一緒にコミットします。
update は GNU msgmerge と同じように動作します。
- 英語の文章が変わっていないメッセージは、翻訳がそのまま保たれます。
- 英語の文章が変わったメッセージには、最も似ている旧メッセージの翻訳が割り当てられ、
fuzzyの印が付きます。以前の英語の文章は#| msgidコメントに残されるので、翻訳者は何が変わったかを確認できます。 - メッセージがなくなった翻訳は、廃止エントリ(
#~)としてカタログの末尾に残され、後でupdateが復元できます。
fuzzy の翻訳はサイトに表示されません。翻訳者が確認して fuzzy フラグを外すまで、未翻訳として扱われます。
翻訳の手順
doc/locale/<locale>/LC_MESSAGES/manual.po をテキストエディタや Poedit などの gettext エディタで開き、各 msgid に対応する msgstr を記入します。
#: manual/core/api.md:12
msgid "The `Ring` trait models rings with $0$ and $1$."
msgstr "`Ring` trait 刻画带有 $0$ 与 $1$ 的环。"
翻訳するときは、次の点を守ってください。
- インラインコード、数式、リンク先は英語とまったく同じにします。リンクテキストは翻訳します。
- Markdown の記法を保ちます。強調、インラインコード、リンクは対応が取れている必要があります。
[!NOTE]のような GitHub アラートのマーカーは、メッセージの先頭に残します。- 識別子は、本文中であっても翻訳しません。
- 推測で埋めるくらいなら、
msgstrは空のままにします。空のメッセージは英語にフォールバックします。
lunadoc status --pages で結果を確認し、サイトでプレビューします。
ロケール
ロケール名は gettext に従います。簡体字中国語は zh_CN、日本語は ja_JP です。ロケール名は conf.json、カタログのパス、そしてサイトの config/locales.json に現れます。サイトの設定ファイルでは、各ロケールの URL セグメントと表示名も定めます。サイトに言語を追加するにはそこに追加し、リポジトリに言語を追加するには conf.json に列挙して update を実行します。