数字格式骨架支持

状态

该功能在ICU 62中实现。有关文档,请参阅:

https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skletons.md

介绍

人们通常希望能够使用数字模式来处理他们可以使用的日期-指定他们想要一种货币,最小分数=x,最大分数=y,等等。但他们想要适合当地环境的模式。

http://bugs.icu-project.org/trac/tickt/8610

背景

ICU数字格式化程序支持不同的样式,如百分比、货币、科学或十进制。这些方法可以产生与语言环境相适应的结果,但并不灵活。

您可以使用用户指定的模式创建格式化程序,完全控制有效数字、最小/最大小数位数。。。这种方法的问题是,结果通常不适合语言环境。

解决方案

将骨架特征引入数字格式,类似于今天的日期格式化程序。框架允许用户指定:

  • 小数位数的最小值和最大值,使用.0#表示法

  • 最小整数位数,使用0。符号

  • 有效位数,使用@字符

  • 格式化程序的类型-如果使用了相应的符号,则为货币或百分比,否则为十进制

  • 如果分组分隔符处于打开或关闭状态,则用户无法指定分隔符的实际位置。

  • 货币符号、ISO 4217代码或名称(如“美元”)是否应用于货币格式-符号/ISO/复数的实际位置取决于地区。

框架语法与当前模式语法类似,但在含义上有一些限制/变化:

  • 骨架将指定为前导!!作记号

  • 不支持使用;字符。负格式是从语言环境信息中派生出来的。

  • 如果存在<逗号>,则表示使用分组分隔符;如果不存在,则表示分组分隔符关闭。实际分组(字符和位置)取决于语言环境。

问题

  • cira:我们是否应该允许0-9表示四舍五入,@表示有效数字,\u2030表示每英里,E表示科学数字?

    • 马克:@是最有用的。

  • markus:是否应该有一个单独的构建器类,比如DateTimePatternGenerator和DateFormat?

  • markus:我们是否应该在MessageFormat中支持日期和数字骨架?

示例

!!0,0.000#%

  • 因为有一个%,所以选择区域设置的百分比模式

  • 由于存在分组分隔符,请将分组分隔符设置为true

  • 设置最小/最大分数和最小整数以匹配骨架-最小2个整数位数,最小3个分数位数,最大4个分数位数。

!!¤¤¤0,0.00

  • 由于出现了?,请选择区域设置的货币模式。

  • 将?替换为?以匹配请求。

  • 由于存在分组分隔符,请将分组分隔符设置为true

  • 设置最小整数以匹配骨架。(格式化时,最小/最大分数由货币设置)