Guidedog マニュアル 0.2.0
言語
このページの内容
Guidedog / ドキュメント 0.2.0

国際化

構造を保って説明を翻訳します。Guidedog はメッセージを抽出し、翻訳をマージして指定言語でビルドします。原文を基準とし、訳がない場合は文章を作らず原文に戻します。

作業の流れ

  1. gettext ビルダーでメッセージテンプレートを作ります。

    guidedog build gettext
    

    _build/gettext に、テキストドメインごとのテンプレート(.pot)を書き出す。段落、見出し、リスト項目、表のセル、キャプション、注意書き、用語、フィールドがメッセージになる。出典のファイルと行番号も記録される。

  2. sphinx-intl update と同様に、各言語のカタログを作成・更新します。

    guidedog intl update -l de -l fr
    

    カタログは locales/de/LC_MESSAGES/*.po に作られる。次回以降は msgmerge と同様に新しいテンプレートをマージする。訳文は保持され、原文が変わったものは fuzzy として確認対象になる。文書から消えたメッセージは末尾に廃止項目(#~)として残り、再登場したときに訳を復元できる。

  3. 各 msgstr を訳文で埋めます。確認が済んだらそのメッセージの #, fuzzy を削除します。fuzzy な訳文は使いません。

    msgid "Hello *world*, see the site_."
    msgstr "Hallo *Welt*, siehe site_."
    
  4. sphinx-intl stat と同様に翻訳の進捗を確認します。

    guidedog intl stat -l de
    
  5. 指定言語でビルドします。

    guidedog build html -D language=de
    guidedog build pdf -D language=de
    

    または conf.toml に language = "de" を設定します。

    書籍名には言語の接尾辞が付く。manual.pdf は manual-de.pdf になる。ビルドは出力全体を一世代として公開するため、複数の言語版には別々の出力先を使う。例えばドイツ語は guidedog build -b pdf docs build/books/de -D language=de、英語は guidedog build -b pdf docs build/books/en -D language=en で作る。

他の入力と同じく、カタログが変わった文書だけを読み直します。カタログの追加・削除時はすべて読み直します。

guidedog intl は sphinx-intl のオプションを受け付ける。-p DIR はテンプレート(既定 _build/gettext)、繰り返し指定できる -l LANG は言語(既定はプロジェクトの言語)、-d DIR はカタログ(既定は locale_dirs の先頭)、-w N は行幅(既定 76)で、--no-obsolete も使える。

翻訳を書く

メッセージは段落や見出しなどの原文で、マークアップを含みます。.rst は reStructuredText、.md は Markdown です。訳文も同じ形式で読むため、原文と同様に強調、リンク、参照を使えます。

参照は同じままにしてください。すべての参照を同じ形で残し、周囲の文章と表示タイトルだけを変えます。

msgid "See :ref:`install` and the site_."
msgstr "Siehe :ref:`Installation <install>` und die site_."

訳文から参照が抜けると、Sphinx と同じ警告(inconsistent references in translated message)を出し、訳文を使う。原文にない参照を訳文が加えると解決できないため、警告して原文を使う。リーダーが訳文のマークアップを受け付けない場合も原文を使い、警告にその訳文を示す。

節のアンカーは言語によって変わりません。訳した見出しも原文のアンカーを持つため、サイト内外のリンクが維持されます。

設定項目

標準設定は Sphinx の名前と既定値に従います。Guidedog は訳さない参照付録向けに、抽出だけに適用する除外設定も提供します。

設定 意味
language ビルドする言語。例は "de" と "pt_BR"。
locale_dirs ソースフォルダーからの相対位置でカタログを指定する。各フォルダーには LANGUAGE/LC_MESSAGES/DOMAIN.po(またはコンパイル済みの .mo)が入る。既定は ["locales"]。複数ある場合は、訳が見つかった最初のものを使う。
gettext_compact 文書のメッセージを入れるカタログを決める。true(既定)では、最上位の文書はそれぞれ独立し、同じフォルダー内の文書は共有する(guide/usage.rst は guide.po)。false では文書ごとに作る。名前を指定すると、全ての文書がその名前のカタログを使う。
gettext_location 各メッセージの位置(#: ../../index.rst:12)を書きます。既定は true。
gettext_uuid 各出現に識別子を付けます。文書、メッセージ、出現位置から作るため、ビルドごとに変わりません。
gettext_auto_build 各 .po を隣の .mo にコンパイルし、他のツールで使えます。既定は true。Guidedog 自身は .po を読みます。
gettext_additional_targets 追加の翻訳対象:index(索引項目)、literal-block、doctest-block、raw、image(代替テキスト)。
gettext_allow_fuzzy_translations fuzzy な翻訳も使います。既定は false。
gettext_exclude_patterns POT の抽出だけから除く文書パスのパターンです。例は ["api/**"]、既定は []。文書は HTML と PDF に残ります。
gettext_last_translator, gettext_language_team テンプレートヘッダーの Last-Translator と Language-Team。
figure_language_filename ビルド言語に対応する画像ファイル。既定は "{root}.{language}{ext}"。language = "de" なら、存在する場合に img/logo.png の代わりに img/logo.de.png を使う。フィールドは {root}、{path}、{basename}、{ext}、{docpath}、{language}。
translation_progress_classes 翻訳済みの要素に translated、それ以外に untranslated クラスを付ける(true)。片方だけ("translated" または "untranslated")も選べる。スタイルシートで未翻訳箇所を示せる。

Guidedog の表示文言

Guidedog 自身も、注意書きの見出し、「Added in version 2.1」「Fig. 1」「Contents」、ページの「Previous」「Next」「Navigation」「Search」、検索と索引ページ、書籍の「Version」などを出力する。これらはテキストドメイン guidedog から、次の順に検索する。

  1. プロジェクトの locales/LANGUAGE/LC_MESSAGES/guidedog.po。
  2. Sphinx と同じく、プロジェクトの locales/LANGUAGE/LC_MESSAGES/sphinx.po。
  3. 組み込みカタログはドイツ語、スペイン語、フランス語、日本語、ブラジルポルトガル語、ロシア語、簡体字中国語に対応します。

メッセージIDは英語で、Sphinx に同じ語があればそれと共通なので、プロジェクトの sphinx.po を引き続き使える。独自の guidedog.po で任意の語を置き換えたり、言語を追加したりできる。

テンプレートは Sphinx と同じく _()、gettext()、ngettext() で翻訳します。

<small>{{ _('Previous') }}</small>
{{ _('Last updated on %s.')|format(last_updated) }}

conf.toml で指定しなければ、numfig_format、html_title、html_short_title は言語に合わせます。

日付

|today|、書籍の日付、ページの last_updated は Sphinx と同じ規則で整形する。today_fmt と html_last_updated_fmt は strftime 形式で、月と曜日の名前は language に従う。%b %d, %Y は英語で「Sep 29, 2026」、ドイツ語で「Sept. 29, 2026」。空の形式は _('%b %d, %Y') となり、カタログで訳せる。上記の言語の名前は Unicode CLDR に基づく。その他は、Babel が知らない言語に対する Sphinx と同じく英語を使う。

日付はローカルタイムゾーンの日付を使う。SOURCE_DATE_EPOCH(1970年からの秒数、UTC)を設定すると、どのマシンでも同じ日付で再現可能なビルドになる。