C#: 获取斯堪的纳维亚语言字母?

5

有没有一种方法可以获得某种语言中的字母表?

我想要实现分页,并显示例如字母表的最后7个字母。 对于荷兰字母表,t-z是最后7个字母,但对于瑞典来说,它是w-ö(即w x y z å ä ö)。

当我将其作为输入时,对于“正常”的a-z字母表,我可以使用ASCII表生成中间的字母,但对于瑞典字母表,这样做行不通。


有些编程语言甚至没有字母表... - Gart
哈哈哈,我不想知道 :) - Michel
其实,现在我想想,我确实很好奇:怎么可能有一种没有字母的语言呢? - Michel
1
并非每种语言都有书写系统? ;) 嗯,这也取决于您对字母表的定义。一些/许多人认为象形文字和音节文字书写系统(如日语汉字和假名)不是字母表。 - Maximilian Mayerl
1
它们确实不是字母。字母表是书写系统的一个方面;它是一组书写符号(字母),其中每个符号/字母代表音节的一部分。字母表这个名称来自于希腊字母表中的前两个字母αβ,即阿尔法和贝塔。 - MSalters
1
CLDR数据(包括索引示例字符)现在可通过NCLDR(http://www.ncldr.com)提供给.NET开发人员使用。 - Guy Smith-Ferrier
4个回答

5
据我所知,.NET和Windows都没有提供这些信息。但是,您可以在Unicode联盟的CLDR数据库中找到它。该数据库实际上是一组XML文件(每种语言一个,以语言缩写命名),包含各种本地化信息。真是一个宝藏!
元素/ldml/characters/examplarCharacters包含语言中使用的字符列表。例如,对于瑞典语(sv.xml):
[a-v x-z å ä ö]

请注意,当您说“ASCII字母”时,您意识到自己正在限制拉丁文字母,对吗?就CLDR而言,像a-z这样的列表是Unicode字符序列,不仅仅是ASCII字母。例如,在俄语中(来自ru.xml):
[а-е ё ж-я]

2
小心!CLDR 实际上并不包含所需信息。例如,对于荷兰语,元素 /ldml/characters/exemplarCharacters 是 [a á ä b-e é ë f-i í ï {ij} j-o ó ö p-u ú ü v-z](哎呀!)但请相信我,对于这个问题,你只需要[a-z]。 - Ruben
不,我不信任你;-) 即使重音字母在语言本身中并不常用,但像é这样的字母在荷兰名字中并不罕见(对于荷兰人来说不确定。但对于荷兰语为母语的比利时人来说是肯定的。nl-BE)。根据www.voornamen.com的数据,Björn目前是荷兰最受欢迎的婴儿名字。 - Serge Wautier
1
真的,但这与问题无关。虽然使用了带重音符号的字母,但它们不像瑞典语中的 å ä 和 ö 那样被视为单独的字母进行字母排序。在荷兰语中,过滤器中的 [a] 必须包括 á à ä 等(只需查字典即可)。 - Ruben
2
CLDR中的示例字符,type="index"是您要查找的内容。http://unicode.org/reports/tr35/#Character_Elements - Steven R. Loomis

1

无论如何,您都将向翻译人员发送字符串列表。 对于您网站的每种语言,您都会有一个翻译人员,并且他们都知道其语言的答案。 因此,只需向他们提交字符串"a b c d e f g h i j k l m n o p q r s t u v w x y z",并将其记录为用于分页的字母表。 他们应该能够为您翻译它。 请注意,您可能会收到像“x ij z”这样的条目,其中“ij”是荷兰语单个字母IJ的常见拼写方式。


1

我认为默认情况下它无法通过编程方式访问,但是在Evertype网站上有一套很好的参考文档。


虽然我建议在适用的情况下使用CLDR,而且CLDR涵盖了更多的语言,但Michael的设置很好,因为它有关于字母表中半包含字母的规则(例如,在英语中,我们通常不包括æ在字母表中,至少就现代英语而言,但它被正确地排序,就好像它是“ae”,而ȝ也不再包括在字母表中,但在y和z之间排序)。同样,对于一些语言中常用的外来词和已经改变字母表的字母,也是如此。虽然不常需要知道,但在需要时是一个很好的资源。 - Jon Hanna

0

所以为了整理这个问题,我认为答案是即使我限制自己只使用西方语言,我也不能向 .Net 框架请求字母表中的字母。 所以我自己列了一个字母表,幸运的是只需要处理四种语言。


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