跳到主要内容

数字与度量衡国际化

功能介绍

在不同的国家和文化中,数字、货币和度量衡的表示方法各异,包括小数分隔符、小数位数、货币和度量衡单位等。例如,应用界面需要显示数字“1,000”(一千)表示商品价格。若采用固定格式“1,000”,在欧洲某些国家(如德国)用户会将其理解为“1”,因为这些国家使用逗号作为小数分隔符。为了确保界面符合当地习惯,需要对数字、货币和度量衡进行格式化,使其根据用户的语言和地区设置显示。

开发步骤

数字格式化

数字格式化请参考Intl.NumberFormat

数字范围格式化

数字范围格式化请参考formatRange

货币和单位格式化

货币和单位的格式化基于数字格式化,在创建货币和单位格式化对象时,将数字的显示风格分别设置为“currency(货币)”和“unit(单位)”。同样,对货币和度量衡进行格式化时也支持通过Intl.NumberFormatOptions设置不同的格式。

度量衡转换

度量衡包括长度单位、面积单位、体积单位和容量单位等,通过I18NUtil类的unitConvert接口实现度量衡转换和格式化。

格式化风格

unitConvert接口可以将原始单位转换为目标单位,并根据区域ID格式化。通过style参数可以控制格式化风格。

以原始单位为美制单位cup,目标单位为公制单位liter,数字大小1000为例。

表1 格式化使用的风格(style)

取值显示效果
long236.588 liters
short236.588 L
narrow236.588L

开发实例

  1. 导入模块。

    import { i18n } from '@kit.LocalizationKit';
  2. 单位转换。

    // 设置要转换的单位和目标单位
    let fromUnit: i18n.UnitInfo = {unit: 'cup', measureSystem: 'US'};
    let toUnit: i18n.UnitInfo = {unit: 'liter', measureSystem: 'SI'};

    // 以en-US区域ID转换度量衡
    let simplifyConvertedUnit = i18n.I18NUtil.unitConvert(fromUnit, toUnit, 1000, 'en-US'); // simplifyConvertedUnit = '236.588 L'

    // 显示完整的度量衡
    let convertedUnit = i18n.I18NUtil.unitConvert(fromUnit, toUnit, 1000, 'en-US', 'long'); // convertedUnit = '236.588 liters'