(このドキュメントの単一ページ版もご覧いただけます。)

ローカライゼーション (l10n)

翻訳は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開発メーリングリストに連絡して、作業が重複していないことを確認してください。また、プロジェクトでは複数の人によって維持されている翻訳が強く推奨されています。メーリングリストにあなたの意図を伝えることで、支援者を見つけるのに役立つ場合があります。

その後、以下の手順を実行する必要があります

Unix (GNU gettext)

  1. Subversionをチェックアウトする(詳細はINSTALLを参照)
  2. ./autogen.sh を実行する
  3. ./configure を実行する
  4. make locale-gnu-pot を実行する
    この手順は、現在GNU gettext Makefileベースのシステムでのみサポートされています
  5. 作業コピーの 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"

Unix (GNU gettext以外)

ドキュメント化予定

Windows

問題#1977を参照してください。

poファイルの検証

メーリングリストに送信したり、リポジトリにコミットしたりする前に、poファイルが「コンパイル」されることを確認してください。これは、次の手順で実行できます(Makefileベースのシステムの場合)

  1. ./autogen.sh を実行する
  2. ./configure を実行する(適切な引数を使用して)
  3. make locale を実行する

autogen.shステップは重要です。これは、「locale」ビルドターゲットの依存関係として新しいpoファイルを追加するためです。ただし、手順1と2は、新しい翻訳を追加した後に1回だけ必要になることに注意してください。

poファイルの提出

大きなpoファイルをメーリングリストにメールで送信しないでください。dev@subversion.apache.orgには、低速回線を使用していて、メールで大きなファイルを受信したくない購読者が多数います。代わりに、poファイルをインターネット上のどこかにダウンロードできるように配置し、URLを投稿してください。利用可能なサイトがない場合は、dev@に問い合わせてください。誰かが場所を見つけるお手伝いをします。

もちろん、Subversionリポジトリへのコミットアクセス権がある場合は、他のすべての要件が満たされていると仮定して、poファイルをそこにコミットするだけです。

既存の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番目のコミットには余分なゴミのない実際の翻訳がすべて含まれます。
  • 特定の言語に複数の翻訳者がいる場合(プロジェクトでは非常に推奨されています)、最初のコミットを実行しようとすると、svnからファイルが古くなっていることが通知されるため、他の翻訳者がすでに.poファイルで作業していることにすぐに気付くでしょう。

ブランチのメンテナンス

トランク内のpoファイルを編集するのは非常に簡単ですが、これらの変更をリリースブランチに転送する場合、少し複雑になります。プロジェクトポリシーでは、リリースブランチを直接変更することはありません。ブランチにコミットされるすべては、トランクからマージする必要があります。これはpoファイルにも適用されます。svn merge を使用してジョブを実行すると、gettextによって行番号と文字列の書式設定が変更されるため、競合やあいまいなメッセージが発生する可能性があります。

以下のスキームは、svn merge を使用してブランチの更新を行う際の複雑さを解消します。次のルールが適用されます
  • 翻訳の更新はトランクに送られます
  • トランクに存在していたブランチで必要なメッセージは、トランクからマージされます
  • ブランチのpoファイルで許可される一括操作は2つあります
    • make locale-gnu-po-update
    • トランクからメッセージをマージする(下記参照)
  • トランクのリビジョンに存在しなかった残りの少数のメッセージは、ブランチで翻訳されます
  • メッセージオプション(あいまいなど)を調整できます

上記のリストは、ブランチのpoファイルで許可されるすべての操作の完全な列挙です。

YY.poのトランクのリビジョンXからブランチの作業コピーにメッセージをマージするには、次のコマンドを使用します

  svn cat -r X ^/subversion/trunk/subversion/po/YY.po | \
    po-merge.py YY.po

poファイルとmoファイルの要件

一部のgettext実装では、プロジェクトから取得したか、ローカルで作成したかに関係なく、moファイルがUTF-8を使用してエンコードされていることを確認する必要があります。この要件は、Subversionが内部でUTF-8を使用していること、一部の実装がアクティブなロケールに変換されること、およびbind_textdomain_codeset() が実装間で移植性がないことに起因します。

この要件を満たすには、poファイルはUTF-8エンコードである必要があります。ターゲットシステムのgettext実装がbind_textdomain_codeset()をサポートしていない場合、ビルドシステムはpoファイルヘッダーからContent-Typeヘッダーを削除することで、moファイルがUTF-8になるようにします。一部のmsgfmtユーティリティは、文字セット指定子が存在しないことを嫌がり、「文字セット変換を実行できません」といった警告を生成することに注意してください。これらの警告は無視して構いません。

空文字列msgidセクションの規則

一部のgettext実装では、msgid ""(空文字列)のセクションを使用して、管理データを保持します。推奨されるヘッダーの1つは「Last-Translator:」フィールドです。Subversionプロジェクトには、特定のファイルに貢献者名を記載するのではなく、リポジトリログメッセージでクレジットを与えるというポリシーがあるため、このフィールドに自分の名前を入力しないでください。

一部のツールでは、poファイルを有効と見なすためにこのフィールドが必要なため(Emacs POモードなど)、このフィールドに「dev@subversion.apache.org」を入力できます。

翻訳チーム

翻訳プロジェクトは、翻訳作業を組織化し、さまざまなパッケージの翻訳者を集めようとしています。一部のチームには、パッケージ全体で一貫性を促進するためのガイドラインがあります。

単一引用符と二重引用符

プロジェクトでは、引用符の使用を標準化しています。一部の翻訳チームも同様のことを行っています。お使いのロケールに翻訳チームがない場合、または引用符を標準化していない場合は、このガイドの他の場所にあるプロジェクトガイドラインに従ってください。標準化している場合は、それに従ってください :-)

エラーメッセージの規則

翻訳者は一般的にコード内のすべてのエラーメッセージを見ることになるため、このドキュメントにはこのカテゴリの文字列に関する特別なセクションがあることを知っておくことが重要です。ここでは、引用符の場合と同じことが当てはまります。お使いの言語の翻訳チームによって明示的なポリシーが設定されていないすべての点について、それらに従ってください。