如何在.NET中使用非英语引号进行格式化?

时间:2011-10-07 14:24:48

标签: .net internationalization

最近在奥地利度假时,我注意到引号看起来与我以前在英国看到的引号不同。检查维基百科显示全世界things are quite different

鉴于我已经在C#代码中使用了与文化相关的十进制和列表分隔符,我还想使用正确的引号。有谁知道在哪里,如果有的话,我会在.NET框架类中找到相关的字符?

感谢。

3 个答案:

答案 0 :(得分:2)

不幸的是,.Net不会自己提供此类信息。你需要另一个来源 我想到的是ICU,即ICU4C,实际上是从CLDR读取这些内容。

无论如何,您需要通过ulocdata_getDelimiter通过适当的ulocdata.h来实际呼叫ULocaleDataDelimiterType constant,这是您感兴趣的实际引号。
当然首先你需要实际导入(至少)一个DLL和instantiate ULocaleData,但这是可能的。
我知道它远不如使用TextInfo(我们知道不提供此类信息)那么容易,但是......

答案 1 :(得分:1)

这将是Unicode字符,它在.NET和大多数字符字体中都是开箱即用的。

维基百科上有一个非常详细的讨论:http://en.wikipedia.org/wiki/Quotation_mark_glyphs

在C#中,您可以使用例如“\ u00AB”定义左侧guillemet:« - 依此类推,基于该文章中的表格。

答案 2 :(得分:0)

这似乎是NLS数据中的遗漏。但是,很难想象一个以编程方式单独构造引用文本的示例。在实践中,您将依赖本地化来提供包含引号的任何文本,例如'a "string"'将被翻译为法语'une «chaîne»'。引号通常是本地化问题,而不是文化格式问题。因此,如果您真的需要构造带引号的文本,您可以通过在字符串表中添加引号来解决问题,假设您的应用程序已经过本地化(如果您没有本地化,那么引号保留为用英语)。

例如,您的en-US字符串(为清楚起见,省略了字符串的引号)将是:

  

“{0}”

fr-FR版本将是:

  

«{0}»