我正在编写一个C#应用程序。我将其定位到.NET 4.5.1。
我的应用程序中有一个翻译服务,其中翻译的字符串存储在数据库中。字符串可以包含任意类型的任意数量的参数。
string formatString = GetFormatStringFromDB();
Dictionary<string,object> parameters = GetNamedParametersFromSomewhere();
var result = Format(formatString, parameters);
Composite Formatting语法看起来像是一个理想的候选者。
像:
string formatString = "{0} is married to {1}, and they have a child of age {2}"; // note that this should still come from the DB
Dictionary<string,object> parameters = GetNamedParametersFromSomewhere();
var result = string.Format(formatString, parameters.Select(o => o.Value)); // I might need to convert this to an array.
我想要命名参数。我不想用数字索引识别参数:它不具有描述性,我很可能会在翻译中混淆/混淆它们。
我可以用以下名称表示参数的语法:
string formatString = "{wife} is married to {husband}, and they have a child of age {childAge}";
嘿,这看起来类似于C#vNext中的新String Interpolation语法!我可以使用它吗?
没有
FormattedString
类似乎让我感到困惑,但它可能是一个解决方案,虽然我需要将它移植回当前的.NET,我需要一些帮助(并且还需要正确使用它) )。使用复合格式也可以格式化日期时间或类似:"birthday: {0:d}"
的int。它对翻译非常有用,因为不同的语言和文化倾向于以完全不同的格式表示这些。我不想失去这种功能。
我可以使用的语法。一些函数将参数提供给字符串并获得结果。
像:
string formatString = GetFormatStringFromDB();
// "Age: {age}, Birthday: {birthday:d}"
Dictionary<string,object> parameters = GetNamedParametersFromSomewhere();
// { "age": (int)10, "birthday": (DateTime)1988-01-01 }
var result = myOwnFormat(formatString, parameters);
//result should be "Age: 10, Birthday: 12/30/2011"
我应该使用自己的语法和解析器吗?有类似的东西已经实施了吗?
修改
我更好地(有希望地)重写了描述问题的整个问题,指出了我的要求。