• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 多语言支持
2
3
4基于开发框架的应用会覆盖多个国家和地区,开发框架支持多语言能力后,可以让应用开发者无需开发多个不同语言的版本,就可以同时支持多种语言的切换,为项目维护带来便利。
5
6
7开发者仅需要通过[定义资源文件](#定义资源文件)和[引用资源](#引用资源)两个步骤,就可以使用开发框架的多语言能力。
8
9
10## 定义资源文件
11
12资源文件用于存放应用在多种语言场景下的资源内容,开发框架使用JSON文件保存资源定义。
13
14在[文件组织](js-service-widget-file.md)中指定的i18n文件夹内放置每个语言地区下的资源定义文件即可,资源文件命名为“语言-地区.json”格式,例如英文(美国)的资源文件命名为en-US.json。当开发框架无法在应用中找到系统语言的资源文件时,默认使用en-US.json中的资源内容。
15
16由于不同语言针对单复数有不同的匹配规则,在资源文件中的使用“zero”“one”“two”“few”“many”“other”定义不同单复数场景下的词条内容。例如中文不区分单复数仅存在“other”场景;英文存在“one”、“other”场景;阿拉伯语存在上述6种场景。
17
18en-US.jsonar-AE.json为例,资源文件内容格式如下:
19
20```json
21{
22    "strings": {
23        "hello": "Hello world!",
24        "symbol": "@#$%^&*()_+-={}[]\\|:;\"'<>,./?",
25        "plurals": {
26            "one": "one person",
27            "other": "other people"
28        }
29    },
30
31    "files": {
32        "image": "image/en_picture.PNG"
33    }
34}
35```
36
37
38```json
39{
40    "strings": {
41        "plurals": {
42            "zero": "لا أحد",
43            "one": "وحده",
44            "two": "اثنان",
45            "few": "ستة اشخاص",
46            "many": "خمسون شخص",
47            "other": "مائة شخص"
48        }
49    }
50}
51```
52
53
54## 引用资源
55
56在应用开发的页面中使用多语言的语法,包含简单格式化和单复数格式化两种,都可以在hml或js中使用。
57
58- 简单格式化方法
59  在应用中使用$t方法引用资源,$t既可以在hml中使用,也可以在js中使用。系统将根据当前语言环境和指定的资源路径(通过$t的path参数设置),显示对应语言的资源文件中的内容。
60
61    **表1** 简单格式化
62
63  | 属性   | 类型       | 参数       | 必填   | 描述                                     |
64  | ---- | -------- | -------- | ---- | -------------------------------------- |
65  | $t   | Function | 请见$t参数说明 | 是    | 根据系统语言完成简单的替换:this.$t('strings.hello') |
66
67    **表2** $t参数说明
68
69  | 参数   | 类型     | 必填   | 描述   |
70  | ---- | ------ | ---- | ---- |
71  | path | string | 是    | 资源路径 |
72
73- 简单格式化示例代码
74
75  ```html
76  <!-- xxx.hml -->
77   <div>
78     <text>{{ $t('strings.hello') }}</text>
79     <image src="{{ $t('files.image') }}" class="image"></image>
80   </div>
81  ```
82
83- 单复数格式化方法
84
85  **表3** 单复数格式化
86
87  | 属性   | 类型       | 参数        | 必填   | 描述                                       |
88  | ---- | -------- | --------- | ---- | ---------------------------------------- |
89  | $tc  | Function | 请见$tc参数说明 | 是    | 根据系统语言完成单复数替换:this.$tc('strings.plurals')<br/>定义资源的内容通过json格式的key为“zero”、“one”、“two”、“few”、“many”和“other”区分。 |
90
91  **表4** $tc参数说明
92
93  | 参数    | 类型     | 必填   | 描述    |
94  | ----- | ------ | ---- | ----- |
95  | path  | string | 是    | 资源路径  |
96  | count | number | 是    | 要表达的值 |
97
98- 单复数格式化示例代码
99
100  ```html
101  <!--xxx.hml-->
102  <div>
103    <!-- 传递数值为0时: "0 people" 阿拉伯语中此处匹配key为zero的词条-->
104    <text>{{ $tc('strings.plurals', 0) }}</text>
105    <!-- 传递数值为1时: "one person" 阿拉伯语中此处匹配key为one的词条-->
106    <text>{{ $tc('strings.plurals', 1) }}</text>
107    <!-- 传递数值为2时: "2 people" 阿拉伯语中此处匹配key为two的词条-->
108    <text>{{ $tc('strings.plurals', 2) }}</text>
109    <!-- 传递数值为6时: "6 people" 阿拉伯语中此处匹配key为few的词条-->
110    <text>{{ $tc('strings.plurals', 6) }}</text>
111    <!-- 传递数值为50时: "50 people" 阿拉伯语中此处匹配key为many的词条-->
112    <text>{{ $tc('strings.plurals', 50) }}</text>
113    <!-- 传递数值为100时: "100 people" 阿拉伯语中此处匹配key为other的词条-->
114    <text>{{ $tc('strings.plurals', 100) }}</text>
115  </div>
116  ```
117