• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 系统语言与区域
2
3<!--Kit: Localization Kit-->
4<!--Subsystem: Global-->
5<!--Owner: @yliupy-->
6<!--Designer: @sunyaozu-->
7<!--Tester: @lpw_work-->
8<!--Adviser: @Brilliantry_Rui-->
9
10## 实现原理
11
12在设置的“语言和地区”中可以添加多种语言,多种语言形成的列表称为语言列表,列表中的第一个语言称为系统语言。系统区域是依据区域ID划分的特定地区。
13
14设置/切换系统语言时,系统会检查[扩展参数](i18n-locale-culture.md)与系统语言是否匹配,若不匹配,则删除扩展参数。例如,当前系统语言设置为阿拉伯语“ar”时,使用本地数字为“arab”。当系统语言切换为马来西亚语“my”时,本地数字参数更改为马来西亚的本地数字“mymr”。当切换为中文时,因中文不支持设置本地数字,采用阿拉伯数字,因此本地数字的扩展参数会被移除。
15
16
17## 开发步骤
18
19接口具体使用方法和说明请参考[System](../reference/apis-localization-kit/js-apis-i18n.md#system9)的API接口文档。
20
211. 导入模块。
22   ```ts
23   import { i18n } from '@kit.LocalizationKit';
24   import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
25   ```
26
272. 获取系统语言、系统地区、系统区域。
28   ```ts
29   // 获取系统语言
30   let systemLanguage: string = i18n.System.getSystemLanguage();  // systemLanguage为当前系统语言
31
32   // 获取系统地区
33   let systemRegion: string = i18n.System.getSystemRegion();  // systemRegion为当前系统地区
34
35   // 获取系统区域
36   let systemLocale: Intl.Locale = i18n.System.getSystemLocaleInstance();  // systemLocale为当前系统区域
37
38   // 通过监听公共事件COMMON_EVENT_LOCALE_CHANGED可以感知系统语言、系统地区或系统区域变化
39   let subscriber: commonEventManager.CommonEventSubscriber; // 用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作
40   let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
41     events: [commonEventManager.Support.COMMON_EVENT_LOCALE_CHANGED]
42   };
43   // 创建订阅者
44   commonEventManager.createSubscriber(subscribeInfo)
45     .then((commonEventSubscriber: commonEventManager.CommonEventSubscriber) => {
46       console.info("CreateSubscriber");
47       subscriber = commonEventSubscriber;
48       commonEventManager.subscribe(subscriber, (err, data) => {
49         if (err) {
50           console.error(`Failed to subscribe common event. error code: ${err.code}, message: ${err.message}.`);
51           return;
52         }
53         console.info("The subscribed event has occurred."); // 系统语言、系统地区或系统区域变化时执行
54       })
55     })
56     .catch((err: BusinessError) => {
57       console.error(`CreateSubscriber failed, code is ${err.code}, message is ${err.message}`);
58     });
59   ```
60
61<!--Del-->
623. 设置系统语言、系统地区。
63   ```ts
64   // 设置系统当前语言为'zh-Hans'
65   try {
66     i18n.System.setSystemLanguage('zh-Hans');
67   } catch (error) {
68     let err: BusinessError = error as BusinessError;
69     console.error(`call System.setSystemLanguage failed, error code: ${err.code}, message: ${err.message}.`);
70   }
71
72   // 设置系统当前地区为'CN'
73   try {
74     i18n.System.setSystemRegion('CN');
75   } catch (error) {
76     let err: BusinessError = error as BusinessError;
77     console.error(`call System.setSystemRegion failed, error code: ${err.code}, message: ${err.message}.`);
78   }
79   ```
80<!--DelEnd-->