# 国际化部件 ## 简介 **国际化部件**为应用提供了一系列国际化接口,包括:时间日期格式化、数字格式化、月份星期格式化、单复数、度量衡等相关接口。基于这些国际化接口,开发者可以设计并实现具有良好国际化能力的应用,从而可以高效、低成本的实现应用的本地化。国际化部件支持如下设备: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目录下。 ## 目录 国际化组件源代码目录结构如下所示: ``` /base/global/ ├── i18n_lite # 国际化框架代码仓 │ ├── frameworks # 国际化框架核心代码 │ │ ├── i18n # 国际化模块 │ │ │ ├── include # 接口文件 │ │ │ ├── src # 实现代码 │ │ │ └── test # 测试用例 │ ├── interfaces # 国际化框架接口 │ │ ├── kits # 应用接口 │ │ │ ├── i18n # C/C++国际化能力接口 │ │ │ └── js # javascript接口的C/C++支持 ``` ## 约束 **语言限制**:C/C++语言 **支持范围限制**:支持的区域和语言见附录 ## 说明 1. 提供时间日期格式化接口,使时间日期格式(如年月日顺序、月份和星期词汇、使用12或24小时制等)跟随系统设置满足不同区域用户的文化习惯。更详细的内容见API文档。示例如下: ```cpp #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文档。示例如下: ```cpp #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. 提供获取指定区域月份、星期不同格式名称的能力。示例如下: ```cpp #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种类型。提供单复数接口来计算不同语言下不同数字时应该使用的名词复数类型,使“数字+名词”这种表达形式跟随应用语言满足不同语言用户的文化习惯。示例如下: ```cpp #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. 提供获取指定区域不同单复数、不同格式对应的度量衡名称的能力。示例如下: ```cpp #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 ``` ## 相关仓 [全球化子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E5%85%A8%E7%90%83%E5%8C%96%E5%AD%90%E7%B3%BB%E7%BB%9F.md) [global\_resource\_management\_lite](https://gitee.com/openharmony/global_resource_management_lite/blob/master/README_zh.md) ## 附录 支持语言列表