6

.NET以前は、独自のフレーズローカリゼーションシステムがあり、コメントを「{0:price}」のようなフォーマット文字列にネストする方法を構築していました。年が経つにつれて、私はこれをますます見逃していることに気づいています。

.NETで次のようにその場でフォーマット文字列を文書化する方法はないようです。

string.Format("{0//numerator} / {1//denominator} = {2//ratio}"
              ,somevar
              ,anothervar
              ,yetanothervar);

特に、これは、コードを変更せずに挿入ポイントが並べ替えられるローカリゼーション/フレーズで役立ちます。

string.Format("Dividing {1//denominator} into {0//numerator} gives {2//ratio}"
              ,somevar
              ,anothervar
              ,yetanothervar);

メンテナンス/ローカリゼーションなどで用語が再配置されたときに間違いを避けるために、これらを文書化するために使用するトリックはありますか?

コメントが重要である理由は、ローカリゼーションと構成の場合、通常、文字列が変数を含むコードに含まれていないためです。これらはリソースファイル、app.config、およびデータベースにあります。

実際の例では、サブクラス化されたコントロールはPhraseIDプロパティを公開します(コントロールはフォームから生成されたXMLファイルのIDにマップされ、フォームコントロールはオンザフライで変換されます)。したがって、サブクラス化されたフォームは次のようになります。

// Handle the phrases without insertion points - this is in the base class
foreach (Control in this.Controls) {
    IXLatable ixl = (IXLatable) Control;
    ixl.Text = GetPhrase(ixl.PhraseID);
}

// in the individual form classes, they override the behavior for complex displays:
lnkPublish.Text = string.Format(GetPhrase(lnkPublish.PhraseID), filename, foldername, userid);

辞書に次のようなデフォルトのローカライズされた文字列が含まれている場合:

phraseid, language code, phrase
1,en,"{0//filename} published to {1//foldername} by {2//userid}"
1,pl,"{2//userid} ublishedpay ethay ilefay {0//filename} otay {1//foldername}"

デフォルトのフレーズでコメントが提供されている場合、翻訳者(ソースコードを見たことがない)がインデックスを誤って取得する可能性ははるかに低くなります。また、ローカライズされていない話者にとって、翻訳されたリソースの問題のトラブルシューティングが容易になります。

4

2 に答える 2

4

Phil HaackのNamedFormat拡張機能を見ることができます。これにより、次のような形式を使用できます。

NamedFormat("{{{foo}}}", new {foo = 123})
于 2009-09-22T18:27:44.297 に答える
2

あなたの例では、変数に意味のある名前を付けると、コメントと同じ効果があります。

于 2009-09-22T18:23:44.047 に答える