# 国际化部件 ## 简介 **国际化部件**为应用提供了一系列国际化接口,包括:时间日期格式化、数字格式化、月份星期格式化、单复数、度量衡等相关接口。基于这些国际化接口,开发者可以设计并实现具有良好国际化能力的应用,从而可以高效、低成本的实现应用的本地化。国际化部件支持如下设备:Multi-modal V200Z-R BES2600。 ![](figures/i18n_lite.png) **国际化部件架构图说明:** - **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) ## 附录 支持语言列表

缩写

语言

缩写

语言

缩写

语言

am_ET

阿姆哈拉语

hr_HR

克罗地亚语

or-IN

欧里亚语

ar_EG

阿拉伯语

hu_HU

匈牙利语

pa_IN

旁遮普语

as_IN

阿萨姆语

in_ID

印尼语

pl_PL

波兰语

az_AZ

阿塞拜疆语

it_IT

意大利语

pt_BR

巴西葡语

be_BY

白俄罗斯语

iw_IL

希伯来语

pt_PT

欧洲葡语

bg_BG

保加利亚语

ja_JP

日语

ro_RO

罗马尼亚语

bn_BD

孟加拉语

jv_ID

爪哇语

ru_RU

俄语

bo_CN

藏语

ka_GE

格鲁吉亚语

si_LK

僧伽罗语

bs_BA

波斯尼亚语

kk_KZ

哈萨克语(西里尔文)

sk_SK

斯洛伐克语

ca_ES

加泰罗尼亚语

km_KH

高棉语

sl_SI

斯洛文尼亚语

cs_CZ

捷克语

kn_IN

卡纳达语

sr_Latn_RS sr_RS

塞尔维亚语(拉丁文)

da_DK

丹麦语

ko_KR

韩语

sv_SE

瑞典语

de_DE

德语

lo_LA

老挝语

sw_TZ

斯瓦希里语

el_GR

希腊语

lt_LT

立陶宛语

ta_IN

泰米尔语

en_GB

英式英语

lv_LV

拉脱维亚语

te_IN

泰卢固语

en_US

美式英语

mai-Deva-IN

迈蒂利语

th_TH

泰语

es_ES

欧洲西语

mi-NZ

毛利语

tl_PH

菲律宾语

es_US

拉美西语

mk_MK

马其顿语

tr_TR

土耳其语

et_EE

爱沙尼亚语

ml_IN

马拉雅拉姆语

uk_UA

乌克兰语

eu_ES

巴斯克语

mn_MN

蒙古

ur_PK

乌尔都语

fa_IR

波斯语

mr_IN

马拉地语

uz_UZ

乌兹别克语

fi_FI

芬兰语

ms_MY

马来西亚语

vi_VN

越南语

fr_FR

法语

my_MM my_ZG

缅甸语

zh_CN

简体中文

gl_ES

加利西亚语

nb_NO

挪威语

zh_HK

香港繁体中文

gu_IN

古吉拉特语

ne_NP

尼泊尔语

zh_TW

台湾繁体中文

hi_IN

印地语

nl_NL

荷兰语