桌面应用中的数字本地化

PHP*_*Pst 8 unicode localization numbers desktop-application character

在Unicode的十进制数字类别中,定义了460个十进制字符(有关示例,请参阅此页面).不幸的是,无论外观如何,我找不到任何代表数字的字符.结果,目前只有西方阿拉伯数字字符被大多数软件理解为数字.因此,您无法在MS Excel中输入其他数字字符.

各种书写系统中的数字表

如果Unicode(至少)10个数字0到9的代码作为纯数字而不是字形,我们几乎可以在所有正常使用中使用它们,并且主机环境可以根据用户的语言环境显示本地化的数字字形.当我们想要将数字字形作为字符串使用时,我们也可以使用460个十进制Unicode数字中的任何一个.

另一方面,如果我们接受当前字符U + 0030到u + 0039作为纯数字,那么我们需要十个新字符用于西方阿拉伯数字.这种实现似乎也更向后兼容.字符U + 0030到U + 0039的名称也不是指任何特定数字的外观.

显然,我们可以在应用程序中对所有460个十进制数字字符进行硬编码,并在内部将它们视为数字,但我正在寻找更合适的解决方案.如果我们还考虑包含罗马和旧波斯数字的224 + 464个其他Unicode数字字符(Nl类别+无类别),则问题会变得更加复杂.

我们如何通过OS范围的解决方案解决这个问题?

另请参阅Web应用程序中的Numbers本地化

Jim*_*unt 6

我不确定你在问什么,但最接近特定问题的似乎是,"在目前的情况下,我们应该如何处理数学应用中的数字,用户可以看到他们的本地数字字形?"

很简单:编写自己的数学应用程序.它将具有其数据的模型,例如,整数或实数.它还将具有该数据的视图,例如,表示用户知道如何阅读的符号中的数字的字符串.(这些术语指的是模型 - 视图 - 控制器体系结构.)在您自己的应用程序中,为您的View编写代码,使用阿拉伯数字字符或孟加拉语数字字符或中文数字字符或您想要的任何表示形式显示数字.

正如Esailija所写,Common Locale Data Repository(CLDR)International Class for Unicode(ICU)库可以帮助您编写此应用程序.

你写,

无论外观如何,我找不到任何代表数字的字符.结果,目前只有西方阿拉伯数字字符被大多数(或许可能是全部)软件理解为数字.因此,您无法在MS Excel中输入其他数字字符.

我认为这三个句子没有逻辑联系.

您无法在Microsoft Excel中输入其他数字字符的原因是,Microsoft做出了一个商业决策,如果Excel仅使用西方数字表示数字,那么Excel就足够有用了,并且他们没有必要构建您寻求的多语言电子表格.

目前只有西方阿拉伯数字字符被大多数(或许是全部)软件理解为数字的原因是因为许多其他软件开发者已经做出了与微软相同的商业决策.这不是因为Unicode中的数字编码方式.

你是正确的,Unicode标准没有代表数字的字符,无论其外观如何.这是因为Unicode标准使用非常详细的模型来处理字符,这些模型是什么是字符.Unicode标准(通常)不与其他抽象数据模型实体一起使用.

所以:去编写具有你想要的行为的数学应用程序.平台和API对您开放.Unicode标准和CLDR和ICU为您提供工具.做好事!

你添加:

显然,我们可以在应用程序中对所有460个十进制数字字符进行硬编码,并在内部将它们视为数字,但我正在寻找更合适的解决方案....我们如何使用OS范围的解决方案来解决这个问题?

宣布解决方案"合适"的标准是什么?对十进制数字字符进行硬编码,或者更具体地说,编写一组特定于语言的例程,以便在抽象数字数据类型之间转换为各种语言的文本表示,这是我认为可行的唯一方法.通过"OS范围的解决方案",您是指可以安装到操作系统中的解决方案,它将改变现有应用程序的行为吗?好吧,你可以希望如此,但我认为它不会成为现有的操作系​​统.

请注意,语言特定的例程也许可以用RuleBasedNumberFormatICU类来实现.这个类可以将抽象数字格式化为一串文本,例如'(例如,25,3476为"二万五千三百七十六"或"vingt-cinq mille trois cents soixante-seize"或"fünfundzwanzigtausenddreihundertsechsundsiebzig")' .人们可以使用此类编写代码,使用您识别的46种语言数字中的任何一种来设置数字格式.但是,应用软件仍然需要包含ICU和数字格式代码.

更新:修改我的答案,以跟踪原始海报问题中的措辞变化.添加了对"OS范围解决方案"的调用的响应.在"模型 - 视图 - 控制器"修复了维基百科的链接.

更新:删除虚假词"the".


Esa*_*ija 4

您可以在CLDR中找到编号系统。可以在数字的 bcp 文件id中找到 - 属性描述。编号系统是或,在 - 属性中指定。如果是,则该属性包含该系统中从 0 开始的数字。如果是,则- 属性将引用所使用的规则。读取编号系统文件numericalgorithimictype"numeric"digits"algorithmic"rules

有关编号系统的算法规则,请参阅rbnf(基于规则的数字格式)文件夹中的 root.xml 文件有关读取 rbnf 文件的更多信息

ICU已经实现了这一点,但您也可以根据上述链接中的数据推出自己的库,以从任何编号系统字符转换为整数,反之亦然。