.NET格式字符串-注释的良好实践?

.NET格式字符串-注释的良好实践?,.net,string-formatting,.net,String Formatting,在.NET之前,我们有自己的短语本地化系统,我们构建了一种将注释嵌套在格式化字符串中的方式,如:“{0:price}”。随着岁月的流逝,我发现我越来越怀念这一点 在.NET中,似乎没有一种方法可以像这样就地记录格式化字符串: string.Format("{0//numerator} / {1//denominator} = {2//ratio}" ,somevar ,anothervar ,yetanother

在.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}"

如果在默认短语中为翻译人员提供了注释,那么翻译人员(从未看到源代码)获得错误索引的可能性要小得多。对于非本地化的演讲者来说,更容易解决翻译资源中的问题。

在您的示例中,命名有意义的变量将与注释具有相同的影响。

您可以查看,这允许您使用以下格式

NamedFormat("{{{foo}}}", new {foo = 123})

事实证明,在非平凡的例子中并非如此。我对位置用法很满意,但这很有趣。我认为命名用法可能会出现更糟糕的运行时问题。不是.net,但消息格式在本地化方面非常有趣