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

3

最近在奥地利度假时,我注意到引号的样式与英国常见的不同。通过查阅维基百科可以发现全世界使用的引号都有所不同。

考虑到我已经在C#代码中使用了依赖于文化的小数和列表分隔符,我也想使用正确的引号。是否有人知道在.NET框架类中可以找到相关字符的位置(如果有)?

3个回答

2

不幸的是,.Net本身不会提供这样的信息。 你需要另一个来源。


我考虑的是ICU,即ICU4C实际上从CLDR中读取这些内容。

无论如何,你需要实际调用ulocdata.h 中的ulocdata_getDelimiter,并传递适当的ULocaleDataDelimiterType常量,即你感兴趣的引号标记。
当然,首先你需要实际导入(至少)其中一个DLL,并实例化ULocaleData,但这是可能的。
我知道这远不及使用TextInfo(我们知道它不提供此类信息)容易,但是...


哇,这真是令人惊讶。这个东西甚至可以告诉你在某个地区可用的标准测量单位和纸张尺寸...我想知道它如何处理英国的度量单位(通常是毫米,直到你坐车时,那时就变成了英里...) - Jeremy McGee

1

这将是Unicode字符,它们在.NET和大多数字符字体中都得到了支持。

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

在C#中,您可以使用"\u00AB"来定义左尖括号:« - 根据该文章中的表格进行操作。


好的,为了明确起见,我需要使用您链接中的Unicode值以及原始问题链接中的详细信息来确定要使用哪个字符?换句话说,在.NET(或Windows自己的设置)中没有任何东西可以为我执行该映射吗? - Mal Ross
据我所知,.NET可以理解数字、货币和日期的文化差异,但不包括文本。这涉及到其他标点符号和空格的放置等非常复杂的问题,使得这种实践变得不切实际。(例如:“‘他要说什么,’我们想”在英式英语中逗号在引号内,但在法语中可能不同。) - Jeremy McGee
不,.NET 没有相关的功能。 - Mihai Nita

0

这似乎是 NLS 数据中的遗漏。但很难想出一个例子,你会在程序中孤立地构建带引号的文本。实际上,您会依赖本地化来提供任何包含引号的文本,例如'a "string"' 将被翻译成法语的'une «chaîne»'。引号通常是本地化问题而不是文化格式问题。因此,如果您真的需要构建带引号的文本,您可以通过将引号添加到字符串表中来解决该问题,假设您的应用正在进行本地化(如果不进行本地化,则最好保留引号为英语)。

例如,您的 en-US 字符串(省略了定界字符串的引号):

"{0}"

而 fr-FR 版本则为:

«{0}»


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接