在 .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}"
如果在默认短语中提供了注释,那么翻译者(从未看过源代码)将索引错误的可能性要小得多。非本地化的演讲者更容易解决翻译资源中的问题。