このページは TranslatingMercurial の日本語訳です。

Mercurial の国際化

このページでは、 Mercurial のメッセージを得意な言語に翻訳することで Mercurial の国際化を手伝う方法を説明しています。 Mercurial では標準的な国際化 Gettext ライブラリを利用しており、ここでその詳細は説明しません。 ソフトウェアの翻訳に不慣れな方は、Gettext のマニュアルをご覧ください。

1. 翻訳を始める

Mercurial が使い慣れた言葉に訳されていないと分かれば、翻訳を始めるチャンスです。 まず、その言語への翻訳が進行していないことを、このページの最後を見るか、開発用 MailingList に問い合わせるかして確認しましょう。 Transifex リストもあります。

翻訳メッセージは i18n/ ディレクトリの xx.poxx_yy.po というファイルに保存されます。 xx は言語コードに、 yy は国コード(省略可)に対応しています。言語コードは ISO 639-1 一覧 から、また、国コードは必要であれば ISO 3166 list から取得できます。

翻訳を新規に始めるには、まず i18n/hg.pot ファイルを作成します。 Makefile で作成しましょう:

% make update-pot

次に、 hg.pot から翻訳メッセージファイルを作成します。 msginit コマンドを使うか、 hg.pot ファイルを適当な xx.po にコピーするかして翻訳を始めます。

それでは、 xx.po ファイルを好みの PO エディタ(Poedit や Emacs など)で編集しましょう。 xx.po ファイルは普通のテキストエディタ(WordPad など)でも編集できますが、その場合はフォーマットを崩さないように注意しなければなりません。

翻訳メッセージを適用するには、 xx.po ファイルを xx.mo へコンパイルする必要があります。 msgfmt コマンドがインストールされていれば、次のようにしてコンパイルできます:

% python setup.py build_mo

別の方法として、 Poedit などの PO エディタでコンパイルすることも可能です。その場合、hg.mo というファイルが生成されるはずですので、それを次の場所に保存してください。

locale/xx/LC_MESSAGES/hg.mo

setup.py は自動的にこの作業を行います。 xx.po を手動でコンパイルした場合は、ディレクトリ構造を自分で準備しなければなりません。

では、 LANGUAGE 環境変数を確実に 'xx' へセットしましょう。 Bash系のシェルであれば、次のようにしてください:

% export LANGUAGE=xx

それから、 hg コマンドを実行し、翻訳メッセージが選択されているか確かめます。

2. 翻訳を更新する

Mercurial のソースコードに変更が加わると、翻訳すべきメッセージが出てきます。 これらは現状の翻訳メッセージへ簡単に反映できます: 前述の方法で hg.pot を再生成し、 msgmerge コマンドで新しく加わったメッセージを翻訳メッセージへマージするだけです:

msgmerge --no-location --update i18n/xx.po i18n/hg.pot

po ファイルを make しても同じです。

make i18n/xx.po

hg.pot の再生成と msgmerge を一続きに実行しています。

それでは、新規のメッセージを訳して、 xx.mo ファイルを作りますか。

翻訳中にファイル名と行番号を残しておきたい場合は、上記コマンドを --no-location フラグなしで実行してください。 ファイル名と行番号が hg.pot から xx.po` へマージされ、ソースコードの特定箇所にジャンプし易くなります。

ただし、ムダな差分ができてしまうため、翻訳のコミット前にはファイル名と行番号を取り除かなければなりません。

msgcat --no-location -o xx.po xx.po

パッチに不要な変更が含まれていないか、 hg diff でチェックする習慣をつけてください。

3. 提出

翻訳が上手くいったら、 MartinGeisler へ知らせてください。 irc.freenode.net#mercurial (contact mg) へ参加し、翻訳を pull 可能な URL を提供するのが簡単です。 そうすると、変更点は彼の手で mercurial-i18n queue へ push され、ゆくゆくはメインリポジトリへ pull されます。

翻訳メッセージを提出する前には、チェンジセットを mercurial-i18n の tip へ rebase してください。これによりマージ回数を最小化し、ヒストリーグラフを単純化できます。

4. フォーマット

コマンドヘルプを翻訳する時は、半角78文字で折り返す必要があります。次のパターンに従ってください:

簡単な説明、小文字始まり

    コマンドの詳しい説明。各段落は4文字分インデントし、半角70文字で折り返す
    必要があります。

    段落は空行1つで区切ります。 文の区切りには半角空白を1文字を入れます。

5. Tips

tips and tricks をここに載せてください。

5.1. TortoiseHg から文字列を取り込む

TortoiseHg プロジェクトでは多数の翻訳がなされており、その文字列のうち50個ほどが Mercurial と重複しています。 メッセージを流用するには、まず、最新の翻訳をダウンロードします。 URL は次の形式です:

http://bitbucket.org/tortoisehg/crew/raw/tip/i18n/tortoisehg-xx.po

wget かブラウザでダウンロードし、 ファイルを i18n フォルダーに保存します。その後、共通な翻訳メッセージを抽出します。

msgcomm tortoisehg-xx.po hg.pot -o common-xx.po

tortoisehg-xx.po を間違いなく前側に指定してください。翻訳メッセージは前側に指定したファイルから取り出されます。最後に、msgcat でファイルを一つにまとめます。

msgcat --no-location hg.pot common-xx.po xx.po -o xx.po

hg.pot を指定することで、メッセージの順番が変わらないようにしています。

翻訳の一部がプロジェクト同士で衝突することがあります。衝突は xx.po ファイルへ次のように記録されます。 (ドイツ語訳の例)

msgid "unrecognized response\n"
msgstr ""
"#-#-#-#-#  de.po (Mercurial)  #-#-#-#-#\n"
"Unbekannte Antwort\n"
"#-#-#-#-#  tortoisehg-de.po (tortoisehg)  #-#-#-#-#\n"
"nicht erkannte antwort\n"

xx.po を読んで衝突を解消する必要があります。上記の例では、Mercurial 側で "Unbekannte Antword" と訳したメッセージを、 TortoiseHg では "nicht erkannte antwort" と訳しています。 "#-#-#-#-#" とマークされた行を削除し、どちらか好きな方の翻訳のみを残してください。 TortoiseHg の訳者と連絡を取り、訳語を揃える努力をしましょう。今後の流用がお互い楽になります。

5.2. 頻度の高いメッセージから訳す

重要なメッセージから翻訳したい場合は、 i18nstat エクステンションを使ってみるといいかもしれません。 このエクステンションでは翻訳メッセージのログを取り、未翻訳のメッセージが使われた回数を数えています。

必要なことは、このエクステンションを有効にし、普通に Mercurial を使うだけです。累積データをダンプするには hg i18nstat コマンドを使います。 未翻訳のメッセージを翻訳すると、次にそのメッセージが使われた時に累積データから取り除かれます。(メッセージが使われるまで、このエクステンションは翻訳されたことを検知しません。)

6. 既存の翻訳

Mercurial と一緒に配布されている翻訳メッセージ (Transifex リストもご覧ください):

まだ Mercurial と一緒に配布されていない翻訳:

特定の言語の翻訳に参加したい時は、上記の方に連絡してください。別の翻訳を始めたい場合は、その言語とあなたの名前をリストに追加してから進めてください。


CategoryJapanese