Mozilla L10N フォーラム一覧 Mozilla 製品 とその関連ソフトの日本語化に関するフォーラムでした。
このサイトは 2022 年 1 月に終了しました。
フィードバック方法や変更履歴などは Github をご覧ください。
 よくある質問  •  検索  •  登録ユーザ一覧  •  グループ   •  登録  •  ユーザ設定  •  ログインして PM を確認  •  ログイン
 言語リソース使用箇所の探し方(中級編) 次のトピックを表示
前のトピックを表示
このフォーラムはロックされているため、新規投稿、返信、編集を行うことはできませんこのトピックはロックされているため、返信、編集を行うことはできません
投稿者 メッセージ
dynamis



登録日: 2003年10月 05日
記事: 1744

ユーザ情報を表示メッセージを送信ウェブサイトに移動
記事 件名: 言語リソース使用箇所の探し方(中級編)     投稿時間: 2005年8月18日(木) 18:15 引用トップに移動

言語リソースのローカライズに際して、英語リソースファイルだけを見てもその意味が理解できないことがあります。そのような場合、使用箇所のコードを特定することで解決し、文脈に応じた適切な訳にできることが多くあります。具体例を挙げて、そのための手順を簡単に紹介します。
# 単純なものはすぐにできると思うので中級編です。
# DTD の実体参照を使用する XUL を探すのが初級編ですが、書くかどうかは未定です。(^^;

css.properties
Code:
PESkipAtRuleEOF=end of unknown at-rule
PECharsetRuleEOF=charset string in @charset rule
PEGatherMediaEOF=end of media list in @import or @media rule

全体的に css.properties はエラーメッセージが定義されているファイルのようですので、これらをエラーメッセージ風に直訳してみるとこのような感じになるかも知れません。
Code:
PESkipAtRuleEOF=未知の@ルールの終わりです。
PECharsetRuleEOF=@charsetルールに文字エンコーディング名が含まれています。
PEGatherMediaEOF=@importルールまたは@mediaルールのメディアリストの終わりです。

悪い例ですので若干意図的にデフォルメしていますが、これではエラーメッセージとしてよくわからないものになってしまっていますね。
特に PECharsetRuleEOF は意味的に間違っています。@charsetルールはそもそも文字エンコーディング(文字コード)を指定するためのものであり、それが入っていることをエラーとするなんてあり得ません。

そこで、これらのリソースがどのように使われているか調べて、適切な訳を考えてみましょう。
Mozilla 1.8 Branch 用の LXRPECharsetRuleEOF の使用箇所をテキスト検索すると、このリソースの定義ファイルである css.properties の他に nsCSSParser.cpp の 1224 行目で使用されていることが分かります(2005/08/18現在)。

REPORT_UNEXPECTED_EOF という関数の引数に使用されているようですので、その関数を調べてみましょう。勿論、今度はLXR で識別子 REPORT_UNEXPECTED_EOF を検索するのです。結果、これは実際には関数ではなくマクロであり、次の 4 箇所で定義されていることが分かります。

これはマクロですし使用箇所と同じ nsCSSParser.cpp ファイル中のものを確認すると、490行目のマクロでは何もせず破棄しているので、ここでは 469行目で定義しているマクロに注目しましょう。
Code:
469 #define REPORT_UNEXPECTED_EOF(lf_) \
470   mScanner.ReportUnexpectedEOF(#lf_)

どうやら mScanner クラスの ReportUnexpectedEOF メソッドに引数として渡されているようです(469行目の末尾は改行がエスケープされています)。そこで、続けて ReportUnexpectedEOF メソッドの定義箇所を検索すると、次のメソッド定義が見つかります。
Code:
378 void nsCSSScanner::ReportUnexpectedEOF(const char* aLookingFor)
379 {
380   ENSURE_STRINGBUNDLE;
381
382   nsXPIDLString innerStr;
383   gStringBundle->GetStringFromName(NS_ConvertASCIItoUTF16(aLookingFor).get(),
384                                    getter_Copies(innerStr));
385
386   const PRUnichar *params[] = {
387     innerStr.get()
388   };
389   nsXPIDLString str;
390   gStringBundle->FormatStringFromName(NS_LITERAL_STRING("PEUnexpEOF").get(),
391                                       params, NS_ARRAY_LENGTH(params),
392                                       getter_Copies(str));
393   AddToError(str);
394 }

ざっと見たところ 389行目で引数で指定した名前から文字列の定義を innerStr に収め、それを param 配列の要素として収めています。更に、390行目では PEUnexpEOF 中の変数の置き換え文字列として渡しています。
C 言語の書けない人でも、言われてみればそんな気がするって感じのコードになっていますよね。因みに私も C は本格的なコードを書けません。(笑)

され、これであと一歩です。代入先である PEUnexpEOF を LXR で検索しましょう。 css.properties で定義されていることが分かります。そう、もとのファイルに戻ってきたのです。
Code:
PEUnexpEOF=Unexpected end of file while searching for %1$S.

これを訳すとこんな感じでしょうか。
Code:
PEUnexpEOF=%1$Sを検索中にファイル終端に達してしまいました。

テンプレートとなる文字列と代入する文字列を同じファイルで定義していて、PECharsetRuleEOF はその中で使われる代入文字列だったのです。文脈としては検索対象のものということですから、名詞形で訳せば良かったのです。
これを踏まえて他の2つと一緒に直訳してみたらこんな感じでしょうか。
Code:
PESkipAtRuleEOF=未知の @ルール部の終わり
PECharsetRuleEOF=@charset ルールの文字エンコーディング名
PEGatherMediaEOF=@import ルールまたは @media ルールのメディアリストの終わり

最初の訳では実際にユーザが見るエラーメッセージは
Quote:
@charsetルールに文字エンコーディング名が含まれています。 を検索中にファイル終端に達してしまいました。

などという意味不明なものになってしまうところでしたが、修正後のものであれば次のようになメッセージになります。
Quote:
@charset ルールの文字エンコーディング名を検索中にファイル終端に達してしまいました。

これで意味が通じるエラーメッセージが生成されるようになりました。;-)

なお、PESkipAtRuleEOF については "Unknows~" を "未知の~" とか "不明な~" というのは直訳丸出しであまり気持ちよくないことから、更にエラーが生成される条件などをコードを調べて、
Code:
PESkipAtRuleEOF=無視される @ルール部の終わり

のようにしているのが現在の JLP です(Unicode エスケープでエンコードされているので LXR で見ても意味分かりませんが)。

今回は言語リソースの定義からその使用箇所を探しましたが、画面上の UI 文字列からその定義としよう箇所を探すには、まず UI 文字列を言語リソースから検索してから上記と同じような手順で XUL 等の箇所を探すことになります。
因みに、これについては Firefox Hacks の「77. Firefoxのインターフェイスをカスタマイズする」(の訳者注記)で簡単に説明しています。
Firefox Hack では、こういった雰囲気で(もう少し丁寧に)、102 のネタについて解説しています。来週末には出版される予定ですので、書店で見つけたら取り敢えず立ち読みでもしてみてくださいませ。
# Firefox Hacks の読者には C 言語の知識は要求されません。
# と、ついでに少し宣伝してみるテスト。(笑)

____________________
http://www.mozilla-japan.org/jp/l10n/
http://firehacks.org/blog/
指定期間中に書かれた記事を表示:      
このフォーラムはロックされているため、新規投稿、返信、編集を行うことはできませんこのトピックはロックされているため、返信、編集を行うことはできません


 別のフォーラムに移る:   



次のトピックを表示
前のトピックを表示
新規トピックを投稿できます
既存トピックに返信できます
自分の記事を編集できません
自分の記事を削除できません
投票に参加できません


Powered by phpBB © 2001, 2002 phpBB Group (customized by dynamis) :: FI Theme :: All times are GMT +9:00

Page generation time: 0.0155s (PHP: 80% - SQL: 20%) - SQL queries: 15