翻訳者向け¶
このページは、コードを書く人ではなく、カタログを編集する人のためのものです。 意図して短くしてあり、プロジェクト独自の翻訳者向け手引きへリンクしたり、 そのまま貼り付けたりできるように書かれています。
ここにPythonを読む必要のある話はありません。扱うのは1つのことだけ、 波括弧に囲まれたメッセージの部品です。
プレースホルダーとは¶
カタログのメッセージには、波括弧に囲まれた名前が含まれることがあります。
{name}がプレースホルダーです。プログラムはこのメッセージを表示するとき、
{name}を自分が用意した値 — 人の名前、ファイル名、数値 — に置き換えます。
プレースホルダーは翻訳すべき単語ではなく、値の入る枠です。
あなたの訳文はmsgstrに入り、その枠を保たなければなりません。
変えてよいもの、いけないもの¶
変えてよいもの:
- プレースホルダーの位置を動かす。 対象言語の文法が求める場所へ、文頭へでも 移動できます。
- プレースホルダーを繰り返す。 言語が値を2度必要とするなら繰り返せます。
- それ以外の語をすべて書き換える。 句読点、空白の入れ方、文の順序も含めて 自由です。
してはいけないこと:
- 波括弧の中の名前を翻訳する。 ラテン文字を他に一切使わない言語であっても、
{name}は{name}のままです。 - 波括弧を外す、あるいは名前を波括弧なしで書く。
- ASCIIの波括弧
{}を全角の{}に置き換える。 多くの入力メソッドが 全角の形を出します。見た目はほとんど同じですが、動きません。 - 書式を追加する。
{name!r}や{amount:.2f}のようなものです。値をどう 表示するかはカタログではなくプログラムが決めます。 msgidにないプレースホルダーをでっち上げる。
原文が用意していない値がメッセージに必要な場合、それは開発者が変えるべき メッセージです。回避策でしのがず、そう伝えてください。
複数形¶
個数を伴うメッセージは、あなたの言語の複数形の数だけmsgstrの枠を持って
届きます。いくつになるかを決めるのはあなたの言語です。日本語は1つ、ドイツ語は
2つ、ロシア語は3つ、アラビア語は6つです。カタログが渡してくる枠は、すべて
埋めてください。
つまずきやすい規則が2つあります。
- 枠は「単数形・複数形・もっと複数形」ではありません。 各番号が何を意味するか は、あなたの言語の複数形規則が決めます。ラトビア語の3つ目はゼロ専用、 スロベニア語の2つ目はちょうど2の場合、ウェールズ語は番号0に一般形、番号1に 単数形を置きます。
- 2つの枠が同じ文になることは正当にあり得ます。 トルコ語、ハンガリー語、 ペルシア語、ベンガル語では数詞の後で名詞が単数のままなので、個数付きメッセージ の両方の形が同じ文字列になります。これはコピー&ペーストのミスではなく、 正しい状態です。
上のプレースホルダーの規則は、それぞれの形に個別に適用されます。
fuzzyエントリ¶
fuzzyが付いたエントリは機械の推測です。開発者が元のメッセージを変更し、
あなたが出発点にできるように、ツールが新しい文とあなたの古い訳文を組にした
ものです。
fuzzyエントリは、誰かが文を直してfuzzyの印を外すまで、プログラムからは
使われません — 未翻訳の原文がそのまま表示されます。ほとんどのPOエディタには、
まさにそのためのボタンがあります。
エラーメッセージを読む¶
ツールはカタログのコンパイル時にプレースホルダーを検査し、そのメッセージは
プログラマーではなくあなたのために書かれています。画面上では文字が見えている
のに{name}がないとだけ報告しても手掛かりになりません。そのため、
プレースホルダーが存在するように見えて実際には存在しない場合、理由まで示します。
原文Hello {name}に対して、次の各翻訳は
translation does not match the source placeholders:に続けて報告されます。
| 訳文の内容 | 報告される理由 |
|---|---|
こんにちは {name} |
{name} is missing (the braces around it are not the ASCII { and }) |
こんにちは {{name}} |
{name} is missing (it is written {{name}}, which is how a literal brace is escaped) |
こんにちは name |
{name} is missing (the name appears, but not inside braces) |
こんにちは {名前} |
{name} is missing; {名前} is not in the source message |
目に見えない文字は別に扱います。波括弧内のno-break spaceは入力メソッドが生成する ことがあり、editorでは見えません。そのため、あなたには決して見つけられない文字の 名前ではなく、code pointで表示します。
文字体系が混在した名前、たとえばLatin文字と見分けがつかないCyrillicのаを含む
homoglyphの場合、読みやすい形とescapeした形の両方を示します。両者を区別できるのは
後者だけです。
translation does not match the source placeholders: {name} is missing;
{nаme} (n\u0430me) is not in the source message
同じ区別は、GreekまたはCyrillicだけで書かれた名前がASCIIのソース名と衝突する
場合にも適用されます。LatinのaとCyrillicのаという1文字の場合も同様です。
これらのどれかに出会って直し方がすぐ分からないときは、自分が入力した
プレースホルダーを消してmsgidのものをコピーするのが安全な手です。
検査にできないこと¶
ツールが確かめるのは、プレースホルダーが無傷かどうかだけです。訳文が正確か、 自然か、その文脈に合っているかは判定できません。それは完全にあなたに委ねられて います。
どんな検査よりも役に立つことが2つあります。
- 翻訳者向けコメントを読む。 メッセージの上にある
#.で始まる行は、それが どこに現れ、何を意味するかを開発者が伝えているものです。 msgctxtについて尋ねる。 同じ語が異なるコンテキストで2度現れるのは、 その2つを訳し分ける必要があるからです。たとえばボタンの「Open」と状態の 「Open」です。