Previous: , Up: Translators   [Contents][Index]


12.7 メッセージの優先度: 最初に翻訳すべきメッセージを決める方法

翻訳者が週のうちパッケージに避ける時間が限られているにもかかわらず、パッケージにはとても多くのメッセージ(1000超)があるとしましょう。そのようなときは彼女は一番ユーザーの目に触れるメッセージ、または一番頻繁に発生するメッセージを訳したいと望むでしょう。このセクションでは、このような"もっとも緊急"なメッセージをどのように決定するか説明します。これは、すでに部分的に翻訳されたメッセージカタログの中から、"次に緊急"なメッセージを決定するのにも適用できます。

最初のステップとして、彼女は、ユーザーがプログラムを使うのと同様にしてプログラムを使ってみます。彼女がこれを行っているとき、プログラムがまだ翻訳されていないメッセージの翻訳にたいする要求があると、GNU gettextライブラリーはそれをログファイルに記録します。

次のステップで、彼女はPOモードを使って、それらのメッセージを翻訳するのです。

より詳細に見てみましょう。GNU libintl(GNU libcの対応する関数とは異なる)は、環境変数GETTEXT_LOG_UNTRANSLATEDをサポートします。GNU libintlライブラリーはgettext()、および関連する関数が翻訳を見つけられなかったとき、そのメッセージをログに記録します。ログファイルがない場合には、必要に応じて作成します。GNU libcによるシステムでは、ELFの‘LD_PRELOAD’メカニズムで使用できる、共有ライブラリー‘preloadable_libintl.so’が提供されます。

GNU libcのシステムでは、翻訳者は最初のステップとして以下のコマンドを実行します:

$ LD_PRELOAD=/usr/local/lib/preloadable_libintl.so
$ export LD_PRELOAD
$ GETTEXT_LOG_UNTRANSLATED=$HOME/gettextlogused
$ export GETTEXT_LOG_UNTRANSLATED

他のシステムでは以下のコマンドを使います:

$ GETTEXT_LOG_UNTRANSLATED=$HOME/gettextlogused
$ export GETTEXT_LOG_UNTRANSLATED

それから彼女はプログラムを使ってみます(あなたが翻訳を提供するプログラムを使うのはよいことですし、お勧めの練習方法です。これは必要なコンテキストを与えてくれます)。これが終わったら、彼女は環境変数を削除します:

$ unset LD_PRELOAD
$ unset GETTEXT_LOG_UNTRANSLATED

次のステップは、重複を取り除くことです:

$ msguniq $HOME/gettextlogused > missing.po

この結果はPOファイルですが、POファイルエディターで処理するためには、少し前処理が必要です。最初に、このファイルは多くの翻訳ドメインのメッセージを含んだマルチドメインのPOファイルです。次に、翻訳者のコメントとソースファイルへの参照が含まれていません。以下は、影響を受ける翻訳ドメインの一覧を得る方法です:

$ sed -n -e 's,^domain "\(.*\)"$,\1,p' < missing.po | sort | uniq

それから翻訳者はドメインを1つずつ処理していきます。単純にするために、language、domain、source package を環境変数に設定しましょう。

$ lang=nl             # your language
$ domain=coreutils    # the name of the domain to be handled
$ package=/usr/src/gnu/coreutils-4.5.4   # the package where it comes from

彼女は、$lang.poの最新コピーを、翻訳プロジェクト、またはそのパッケージ(大抵は$package/po/$lang.po)から入手します。もし彼女が、そのパッケージの最初の翻訳者の場合は、新規作成することになります(Creatingを参照してください)。それから彼女は、以下のコマンドを使って、緊急ではないメッセージにたいして "obsolete" のマークを付与します(それらの翻訳済み、および未翻訳のメッセージが本当に "obsolete" としてしまう訳ではありません。これは以下の編集で、POファイルエディターに、それらのメッセージを無視させるためです)。

$ msggrep --domain=$domain missing.po | grep -v '^domain' \
  > $domain-missing.po
$ msgattrib --set-obsolete --ignore-file $domain-missing.po $domain.$lang.po \
  > $domain.$lang-urgent.po

それから彼女はPOファイルエディターを使って$domain.$lang-urgent.poを翻訳します(Editingを参照してください)。(FIXME: KBabelとgtranslatorが期待通りobsolete messageを保持してくれるかどうかについては、わたしにはわかりません) そして彼女は最後に、以下のコマンドで緊急ではないメッセージ(およびすでに翻訳済みのメッセージの初期の"翻訳")を復元します:

$ msgmerge --no-fuzzy-matching $domain.$lang-urgent.po $package/po/$domain.pot \
  > $domain.$lang.po

$domain.$lang.poを投稿したら、彼女は次のドメインを処理できます。