最近在奥地利度假时,我注意到引号的样式与英国常见的不同。通过查阅维基百科可以发现全世界使用的引号都有所不同。
考虑到我已经在C#代码中使用了依赖于文化的小数和列表分隔符,我也想使用正确的引号。是否有人知道在.NET框架类中可以找到相关字符的位置(如果有)?
最近在奥地利度假时,我注意到引号的样式与英国常见的不同。通过查阅维基百科可以发现全世界使用的引号都有所不同。
考虑到我已经在C#代码中使用了依赖于文化的小数和列表分隔符,我也想使用正确的引号。是否有人知道在.NET框架类中可以找到相关字符的位置(如果有)?
不幸的是,.Net本身不会提供这样的信息。 你需要另一个来源。
我考虑的是ICU,即ICU4C实际上从CLDR中读取这些内容。
无论如何,你需要实际调用ulocdata.h 中的ulocdata_getDelimiter,并传递适当的ULocaleDataDelimiterType常量,即你感兴趣的引号标记。
当然,首先你需要实际导入(至少)其中一个DLL,并实例化ULocaleData,但这是可能的。
我知道这远不及使用TextInfo(我们知道它不提供此类信息)容易,但是...
这将是Unicode字符,它们在.NET和大多数字符字体中都得到了支持。
维基百科上有一个非常详细的讨论,链接在这里:http://en.wikipedia.org/wiki/Quotation_mark_glyphs。
在C#中,您可以使用"\u00AB"来定义左尖括号:« - 根据该文章中的表格进行操作。
这似乎是 NLS 数据中的遗漏。但很难想出一个例子,你会在程序中孤立地构建带引号的文本。实际上,您会依赖本地化来提供任何包含引号的文本,例如'a "string"'
将被翻译成法语的'une «chaîne»'
。引号通常是本地化问题而不是文化格式问题。因此,如果您真的需要构建带引号的文本,您可以通过将引号添加到字符串表中来解决该问题,假设您的应用正在进行本地化(如果不进行本地化,则最好保留引号为英语)。
例如,您的 en-US 字符串(省略了定界字符串的引号):
"{0}"
而 fr-FR 版本则为:
«{0}»