鸿蒙实战开发:【国际化部件】

电子说

1.2w人已加入

描述

简介

国际化部件为应用提供了一系列国际化接口,包括:时间日期格式化、数字格式化、月份星期格式化、单复数、度量衡等相关接口。基于这些国际化接口,开发者可以设计并实现具有良好国际化能力的应用,从而可以高效、低成本的实现应用的本地化。国际化部件支持如下设备:Multi-modal V200Z-R BES2600。

鸿蒙

国际化部件架构图说明:

  • Kits为提供的c++国际化接口。
  • frameworks为c++接口的底层c++实现。
  • binary data generate tool为数据打包工具。数据打包工具的输入为文本数据文件,输出为二进制数据文件i18n.dat,i18n.dat中包含了国际化接口所依赖的国际化数据。数据打包工具位于tools/i18n-dat-tool目录下,i18n.dat位于frameworks目录下。 数据打包工具的使用方法:执行tools/i18n-dat-tool/src/main/java/ohos/global/i18n/Fetcher.java中的main方法。
  • source data文本格式的国际化数据,位于tools/i18n-dat-tool/resource目录下。

鸿蒙知识已更新完整gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md可以前往参考。

或者添+mau123789是卫心

鸿蒙

说明

  1. 提供时间日期格式化接口,使时间日期格式(如年月日顺序、月份和星期词汇、使用12或24小时制等)跟随系统设置满足不同区域用户的文化习惯。更详细的内容见API文档。示例如下:
    #include "date_time_format.h"
    using namespace OHOS::I18N
    
    LocaleInfo locale("zh", "Hans", "CN");  // 获得区域
    DateTimeFormat formatter(AvailableDateTimeFormatPattern::HOUR_MINUTE, locale); // 初始化时间日期示例,并获取该区域时间格式化所需数据,第一个参数为时间日期格式化模板类型,所支持的模板类型见API文档types.h
    time_t time = 3600 * 3; // 所需要格式化的时间
    std::string zoneInfo = "+1:00"; // 设置时区,相对于UTC 0时区加一小时
    std::string out; // 时间日期格式化结果保存在out中
    Ii8nStatus status = Ii8nStatus::ISUCCESS;
    formatter.Format(time, zoneInfo, out, status); // 判断status状态
    
    output:  4:00
    
  2. 提供数字格式化接口,使数字格式(如数字体系、数字分组、小数点、百分号等)跟随应用系统设置满足不同区域用户的文化习惯。更详细的内容见API文档。示例如下:
    #include "number_format.h"
    using namespace OHOS::I18N
    
    LocaleInfo locale("en", "US");
    int status = 0;
    NumberFormat formatter(locale, status);  // 初始化数据格式化实例,并获取指定locale数字格式化所需数据;status为初始化的结果,等于1时表示初始化失败
    int num = 1234
    std::string out = formatter.Format(num, status);  // 判断status状态
    
    output: 1,234
    
  3. 提供获取指定区域月份、星期不同格式名称的能力。示例如下:
    #include "date_time_format.h"
    using namespace OHOS::I18N
    
    LocaleInfo locale("en", "US");  // 获得区域
    DateTimeFormat formatter(AvailableDateTimeFormatPattern::HOUR_MINUTE, locale);
    std::string month = formatter.GetMonthName(0, DateTimeDataType::FORMAT_WIDE); // 获取format类型的长格式
    
    output: January
    
  4. 不同语言下名称跟随数字有不同的表达,如英文下会有:“one apple”、“two apples”。单复数规范总结多种语言的语法规范将名词的单数和复数形式划分为zero、one、two、few、many、other六种类型。不同语言支持不同数量的单复数类型,如中文只支持other一种,英文支持one和other两种,阿拉伯语支持全部6种类型。提供单复数接口来计算不同语言下不同数字时应该使用的名词复数类型,使“数字+名词”这种表达形式跟随应用语言满足不同语言用户的文化习惯。示例如下:
    #include "plural_format.h"
    using namespace OHOS::I18N
    
    Locale locale("en", "US"); // 获得区域
    Ii8nStatus status = Ii8nStatus::ISUCCESS;
    PluralFormatter formatter = PluralFormatter(locale, status);  // 判断status状态
    int out = formatter.GetPluralFormatter(1, status);  // 判断status状态
    
    output: 1 // 获取单复数六条规则中的第二条规则
    
  5. 提供获取指定区域不同单复数、不同格式对应的度量衡名称的能力。示例如下:
    #include "measure_format.h"
    using namespace OHOS::I18N
    
    LocaleInfo locale("en", "US");  // 获得区域
    int num = 1;  // 度量衡前的数字,如 1h
    std::string unit = "h";  // 度量衡
    I18nStatus status = I18nStatus::ISUCCESS;
    MeasureFormatType type = MeasureFormatType::MEASURE_FULL;  // 指定度量衡格式,包括SHORT、MEDIUM、LONG、FULL四种格式。
    MeasureFormat formatter(locale, status);  // 判断status状态
    std::string unit = formatter.Format(num, unit, status, type); // 获取前置数字1、FULL格式下,度量衡h(小时)的格式化表示。
    
    output: hour
    

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分