(このドキュメントの単一ページ版もご覧いただけます。)
翻訳は2つのドメインに分割されています。1つ目は、接続しているクライアントに送信されるサーバーメッセージの翻訳です。この問題は現在保留されています。2つ目は、クライアントとそのライブラリの翻訳です。
gettextパッケージは、メッセージを翻訳するためのサービスを提供します。xgettextツールを使用して、ソースから翻訳対象の文字列を抽出します。これは、_()、N_()、およびQ_()マクロの引数を抽出することによって機能します。_()は、関数呼び出しが許可されているコンテキスト(通常は静的初期化子以外のすべて)で使用されます。N_()は、_()を使用できない場合に使用されます。N_()でマークされた文字列は、コード内で参照されるたびにgettext翻訳ルーチンに渡す必要があります。例として、subversion/svn/help-cmd.cでヘッダーとフッターがどのように処理されているかをご覧ください。Q_()は、単数形と複数形のバージョンを持つメッセージに使用されます。
_(), N_(), Q_() マクロに加えて、U_() マクロも使用されます。これは、内部エラーメッセージを翻訳することは一般的に有用ではないため、翻訳されない文字列をマークするために使用されます。これは、ほとんどのユーザーが決して目にすることのない、(Subversionのバグまたは非常に特殊なリポジトリの破損によって引き起こされる)あいまいなエラーメッセージのみに影響するはずです。U_()を使用する理由は、gettext呼び出しが単に忘れられていたわけではないことを明示的に示すためです。
gettextルーチン(*gettextまたは*dgettext)を直接呼び出す場合は、Subversionコードのほとんどがライブラリコードであることに注意してください。したがって、デフォルトのドメインは必ずしもSubversion独自のドメインではありません。ライブラリコードでは、gettext関数のdgettextバージョンを使用する必要があります。ドメイン名はPACKAGE_NAME defineで定義されています。
ローカライゼーションに必要なすべての設定は、svn_private_config.h(*nixの場合)とsvn_private_config.hw(Windowsの場合)のENABLE_NLS条件によって制御されます。必ず
#include "svn_private_config.h"
をローカライゼーションを必要とするファイルの最後のインクルードとして配置してください。
また、_()、Q_()、および*gettext()呼び出しの戻り値はUTF-8でエンコードされていることに注意してください。これは、プログラム出力の任意の形式として記述される現在のロケールに翻訳する必要があることを意味します。
GNU gettextマニュアル(https://www.gnu.org/software/gettext/manual/html_node/gettext_toc.html)の「プログラムソースの準備」セクションには、翻訳可能なプログラムの作成に関する追加情報が記載されています。そのヒントは、主に文字列の構成に適用されます。
現在利用可能な翻訳は、リポジトリのpoセクションにあります。まだ利用できない翻訳を開始する場合は、dev@subversion.apache.orgにご連絡ください。翻訳に関する議論はそのリストで行われます。
Makefileビルドターゲットlocale-gnu-*(poファイルの保守に使用)には、GNU gettext 0.13以降が必要です。これは、*.poファイルを*.moにコンパイルしたい人にとっての要件ではないことに注意してください。
新しい翻訳を開始する前に、subversion開発メーリングリストに連絡して、作業が重複していないことを確認してください。また、プロジェクトでは複数の人によって維持されている翻訳が強く推奨されています。メーリングリストにあなたの意図を伝えることで、支援者を見つけるのに役立つ場合があります。
その後、以下の手順を実行する必要があります
./autogen.sh
を実行する./configure
を実行するmake locale-gnu-pot
を実行するsubversion/po
ディレクトリで msginit --locale LOCALE -o LOCALE.po
を実行します。LOCALEは、ロケールを識別するために使用されるll[_LL]言語と国コードです。手順(2)と(3)はMakefileを生成します。手順(4)は subversion/po/subversion.pot
を生成します
Subversionプロジェクトには、ファイルに名前を入れないというポリシーがあるため、以下に説明する2つの変更を適用してください。
新しく生成された.poファイルのヘッダーは次のようになります
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
そのブロックを次のテキストに置き換えてください
# <Your language> translation for subversion package # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # https://apache.dokyumento.jp/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License.
最初の翻訳ブロックには、次のような2行が含まれています
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
これらを次の2行に置き換えてください
"Last-Translator: Subversion Developers <dev@subversion.apache.org>\n" "Language-Team: YOUR LANGUAGE <dev@subversion.apache.org>\n"
ドキュメント化予定
メーリングリストに送信したり、リポジトリにコミットしたりする前に、poファイルが「コンパイル」されることを確認してください。これは、次の手順で実行できます(Makefileベースのシステムの場合)
./autogen.sh
を実行する./configure
を実行する(適切な引数を使用して)make locale
を実行するautogen.shステップは重要です。これは、「locale」ビルドターゲットの依存関係として新しいpoファイルを追加するためです。ただし、手順1と2は、新しい翻訳を追加した後に1回だけ必要になることに注意してください。
大きなpoファイルをメーリングリストにメールで送信しないでください。dev@subversion.apache.orgには、低速回線を使用していて、メールで大きなファイルを受信したくない購読者が多数います。代わりに、poファイルをインターネット上のどこかにダウンロードできるように配置し、URLを投稿してください。利用可能なサイトがない場合は、dev@に問い合わせてください。誰かが場所を見つけるお手伝いをします。
もちろん、Subversionリポジトリへのコミットアクセス権がある場合は、他のすべての要件が満たされていると仮定して、poファイルをそこにコミットするだけです。
ビルドシステムのMakefileベースの部分には、既存のpoファイルのメンテナンスを容易にするためのmakeターゲットが含まれています。GNU gettextを搭載したシステムでpoファイルを更新するには、次を実行します
make locale-gnu-po-update
特定の言語のみを更新するには、次を使用します
make locale-gnu-po-update PO=ll
ここで、llは拡張子なしのpoファイルの名前です(PO=svなど)。
2つのコミットを使用して.poの更新を行うことをお勧めします。1つは「make locale-gnu-po-update」の後、もう1つは翻訳が完了した後です。これには2つの利点があります
gettext(1)
は、多くの行番号の変更を生成するため、結果の差分を他の翻訳者がレビューするのが困難になります。2回コミットすることにより、すべての行番号の変更が最初のコミットに保存され、2番目のコミットには余分なゴミのない実際の翻訳がすべて含まれます。トランク内のpoファイルを編集するのは非常に簡単ですが、これらの変更をリリースブランチに転送する場合、少し複雑になります。プロジェクトポリシーでは、リリースブランチを直接変更することはありません。ブランチにコミットされるすべては、トランクからマージする必要があります。これはpoファイルにも適用されます。svn merge
を使用してジョブを実行すると、gettextによって行番号と文字列の書式設定が変更されるため、競合やあいまいなメッセージが発生する可能性があります。
svn merge
を使用してブランチの更新を行う際の複雑さを解消します。次のルールが適用されますmake locale-gnu-po-update
上記のリストは、ブランチのpoファイルで許可されるすべての操作の完全な列挙です。
YY.poのトランクのリビジョンXからブランチの作業コピーにメッセージをマージするには、次のコマンドを使用します
svn cat -r X ^/subversion/trunk/subversion/po/YY.po | \ po-merge.py YY.po
一部のgettext実装では、プロジェクトから取得したか、ローカルで作成したかに関係なく、moファイルがUTF-8を使用してエンコードされていることを確認する必要があります。この要件は、Subversionが内部でUTF-8を使用していること、一部の実装がアクティブなロケールに変換されること、およびbind_textdomain_codeset()
が実装間で移植性がないことに起因します。
一部のgettext実装では、msgid ""(空文字列)のセクションを使用して、管理データを保持します。推奨されるヘッダーの1つは「Last-Translator:」フィールドです。Subversionプロジェクトには、特定のファイルに貢献者名を記載するのではなく、リポジトリログメッセージでクレジットを与えるというポリシーがあるため、このフィールドに自分の名前を入力しないでください。
一部のツールでは、poファイルを有効と見なすためにこのフィールドが必要なため(Emacs POモードなど)、このフィールドに「dev@subversion.apache.org」を入力できます。
プロジェクトでは、引用符の使用を標準化しています。一部の翻訳チームも同様のことを行っています。お使いのロケールに翻訳チームがない場合、または引用符を標準化していない場合は、このガイドの他の場所にあるプロジェクトガイドラインに従ってください。標準化している場合は、それに従ってください :-)