メッセージの翻訳することについての短いガイド 0. ライセンスと著者 ====================== この文書はクリエイティブコモンズ公開ライセンス 2.5 (http://creativecommons.org/licenses/by/2.5/)の元で提供されています。 これは以下の著者の貢献を元にしたものです。 Christian Biere (cbiere at users.sourceforge.net) Thomas Schurger (trancetip at users.sourceforge.net) Murphy (eqom14 at users.sourceforge.net) Daichi Kawahata (daichik at users.sourceforge.net) 1. 紹介 ======== これはgettext文書の短い概要です。この情報が十分でない場合は付録を見てください。 2. ソースファイルから翻訳できる文字列を抽出する: ========================================================== SVNを使い手元のソースファイルを最新版にアップデートします、 svn checkout http://svn.foo-projects.org/svn/xfce/modules/trunk-po または現在の安定版4.2であるなら、 svn checkout http://svn.foo-projects.org/svn/xfce/modules/4.2-po そして、文字列を抽出する: $ cd po $ make update-po $ cp package.pot messages.po または $ msginit (and enter your e-mail address) ソースファイルをながめてみると、翻訳できる(translatable)とマークされていない文字列がたくさん見つけられるでしょう。 これはそれら文字列が内部的に利用されているだけか、開発者しか興味を持たない物、いわゆるデバッグ用、であるからです。 注意: 最初に4.2向けに翻訳するにあたって勧告することは、 SVNのトランクのバージョンは、開発者によって凍結されていない場合は、よく変更されると言うことです。 3. POファイルを準備する: ======================= あなたのお気に入りのエディターをつかい、``messages.po''の最初の行を編集してください: "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2005-06-15 23:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" PACKAGE, VERSION, YEAR, MO その他を適当な値にして置き換えてください。 ``charset=UTF-8'を上のように使うことが重要です。 もし、あなたのエディターがUTF-8を利用できない場合は、後で変換することができます。 注意: デフォルトの数値のままにしないでください。 4. メッセージを翻訳する: ========================== テキストエディタEmacsの`po-mode'や `poEdit'、`Gedit' (GNOME ユーザー用)、`KBabel' (KDE ユーザー用)の様な グラフィカルなPO ファイルエディター(これらのエディターはPOファイル用に特化している機能があります。)を 利用することができます。viやvim、その他のような普通のエディターを使うこともできますが、 もちろん、上の四つのエディターの一つを使うことを強く推奨します。 POファイル中で、このような物を見つけるでしょう: #: main.c:42 msgid "Hello world" msgstr "" もし、ドイツ語に翻訳したいなら、三行目を以下のように変更することになります: msgstr "Hallo Welt" ``msgid''より前を弄らないでください!もし、タイポやそういった物を見つけたら、 この文字列はソースファイル中で修正されなければなりません。もし、その中で一つの``%'' と一つの文字列を見つけたら、``%''があるそこの場所をそのままにして、それらの``words'' の順番を変更しないでください。文字の後にあるバックスラッシュ``\''もそのままにしてください。例: msgid "%-8s are %d time faster than %s.\n" msgstr "%-8s sind %d mal schneller als %s.\n" ``\n'' は``newline''(改行)を意味します。それは行を出力上では改行になります。次に Xfmediaからもう一つ例を挙げます: msgid "" "This is a printf-like format string controlling the display of the " "playlist. Xfmedia will replace the following symbols:\n" "\t%p: Artist/Performer\n" "\t%t: Track Title\n" "\t%a: Album Name\n" "\t%T: Track Number\n" "\t%g: Genre\n" "\t%y: Year\n" "\t%f: Filename\n" "\t%%: a percent sign" この場合では、``\t''は`'tab''スペースを出力上で挿入します。Emacsの`po-mode' を使っている場合は、実際の``tab''スペースは``\t''や``\n''を置く代わりに ``C-q Tab''か``enter''を使って置かなければならないことに注意してください。 問題がある場合は文法についての詳細はman print(3)を参照してください。 全てのメッセージを翻訳する必要はありません。翻訳できない、または、したくないメッセージは ``msgstr ""''そのままにしておいてください。msgidの文字列はコピーしないでください! いくつかの文字列にはシングルアンダースコア(いわゆる_下線)(例: "_Edit list..." Xfdesktopより)。 この場合は下線(アンダースコア、以下、翻訳の都合上「下線」を使う)は次の文字をアクセレーターキーとして宣言する。 例としては、キーコンビネーション+Eまたは時々+Eは文字列に関連づけられたGUIの要素を始動させるでしょう。 適切な文字をアクセレーターとして翻訳でも同じように使うべきです、方法は選択された文字に下線を付けるだけです。: msgid "_Edit list..." msgstr "_Liste bearbeiten..." アクセレーターキーを変更したい場合は、同じ範囲内に別の一つと衝突しないかを確認してください。 稀ですが、GUI要素へのアクセレーターを利用できないようにするために、下線を取り除きたくなるかもしれません。 4.1 翻訳状況: ======================== GUIはよく一語、または短い言葉の組み合わせを使います。フレームタイトルとして使われた場合は その意味を明確化するためにコロンは英語に付け加えられます。特に短い文字列を明確化するもう一つの可能性は '|'をセパレーターとして使っているときです。もし、英語のテキストにこの文字があるときは、 '|'までのその部分は翻訳者用のコメントを含んでいる可能性があるか、 例え、同じ単語が他の場所で違う意味で使われているとしても、その単語が確かな方法で翻訳されるために、 単純に名前空間(ネームスペース)を宣言しているだけです。例(Xfce4-panelより): msgid "tip|Info" msgstr "Informacion" 翻訳された文字列の中では、最初の'|'までの全てのものを切り捨て、残りのみを翻訳してください。 5. 出力を UTF-8 に変換する(まだUTF-8エンコードになっていない場合): =================================================================== iconv -f CHARSET -t UTF-8 messages.po > utf8.po CHARSETをあなたの使っている物、たとえば、あなたが西ヨーロッパ出身であれば、 たぶんそれはISO-8859-1、で置き換えてください。そうでなければ、echo $LC_CTYPEが出力することを見て . (dot)までの部分を消してください。例: $ echo $LC_CTYPE ja_JP.eucJP $ iconv -f eucJP -t UTF-8 messages.po > utf8.po Vimを使っている場合は、このように急いでコンバートすることもできます。 :,!iconv -f ISO-8859-1 -t UTF-8 たとえ、ターミナルがUTF-8でエンコードされた文字セットをサポートしていない場合でも この方法で普通はうまくいきます。 6. PO fileの点検と提出: ======================================= 最初に、PO ファイルが正しいか照合します: $ msgfmt --check --check-accelerators=_ -o /dev/null utf8.po 警告なしでなければなりませんが、それらが出た場合は出力された警告メッセージを受けて修正してください。 チェックの後、あなたの翻訳を以下に送ってください: Xfce translations mailing list (Xfce 翻訳メーリングリスト) 一度に多数のファイルを送ろうとする場合は、'tar + bzip2/gzip' フォーマットを使ってください。 注意: この部分でとても重要なのは、警告があった場合はメーリングリストにあなたの翻訳をポストしないでください、と言うことです。 7. 調整しましょう ============== メッセージはリリースごとに変化する可能性があり、機能が増えるに従って更に翻訳すべきメッセージが現れることでしょう。 結果として、翻訳は静的な物ではありません。数ヶ月ごとに更なるいくつかの翻訳すべき文章が現れることでしょう。 ソースファイル内の翻訳できる文字列への変更を反映するためにPO ファイルをアップデートするには、 単純にSVNをを使って手元のファイルをアップデートするだけです。このように実行してください。 $ cd po $ make update-po これは翻訳できる文字列用のソースファイルをスキャンし、`package.pot'ファイルを(再)ビルドし、そして、msgmergeを使ってPOTファイルよりPO ファイルをアップデートします。 あなたの言語のPO ファイル中で欠けていたり曖昧である翻訳をチェックしたあと、それらをお好きなエディターで追加や修正してください。 終わったら、`make update-po'をもう一度実行しなければなりません。これは、最大の線幅、80文字を適切に含むように、.poファイルの行を完成させます。 8. ローカル化されたキーをデスクトップファイルに追加する: ======================================= 名前、一般的な名前、そして、コメントキーは翻訳されるべきです。 フォーマットは: Key[locale]=localestring 例 (Xfcalendarより): Name=Xfce Calendar [...] Name[he]=??? ??? Xfce ファイルがUTF-8エンコードされているかどうか確認します。 注意: これはSVN トランクバージョンへの翻訳をしている場合は必要ありません。 代わりに適切なintltoolをインストールしなければなりません。 Emacsを使っている場合は、`desktop-entry-mode'がファイル妥当性確認の確認に有用でしょう。 9. フィードバック =========== コメントや要望、修正等がある場合は、以下を使ってください: Xfce translations mailing list(Xfce 翻訳メーリングリスト) フィードバックはすごく歓迎されることでしょう。 10. 付録 ============ The complete GNU gettext manual: http://www.gnu.org/manual/gettext/index.html Country codes as standardized by the UNO (United Nations Organizations): http://ftp.ics.uci.edu/pub/websoft/wwwstat/country-codes.txt Freedesktop.org desktop entry spec: http://www.freedesktop.org/standards/desktop-entry-spec/ Xfce translations statistics: http://xfce.org/~kelnos/xfce4/i18n/