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