为HAP应用启用新语言支持

HAP 简介

汉得应用开发平台(HAND Application Platform)是汉得公司为了应对移动互联网化、应用云端化、海量数据化和数字化服务转型的应用开发平台,是中台化产品和应用开发的基础平台。HAP采用开源的Java EE技术体系,平台设计灵活可扩展、可移植、可应对高并发需求。

更多信息请访问:http://eco.hand-china.com/platform/hap.html

启用新语言

HAP 应用开发平台默认支持简体中文和英语两种语言,如果要启用新的语言支持,比如西班牙语,则需要找到所有国际化相关的前后端对象进行翻译。

幸运的是,HAP 应用开发平台对国际化提供了良好的框架支持和开发规范,所以涉及到和多语言或者国际化相关的数据表和其他资源对象的分布相对集中且有规律可循,具体分三部分:

  1. 多语言描述总表 SYS_PROMPTS
  2. 所有平台和功能页面的实体对象所关联的多语言表 *_TL
  3. KendoUI 国际化支持文件 kendo.culture.<locale>.jskendo.messages.<locale>.js

下面以西班牙语为例,详细说明整个过程。

1. 定义语言代码

进入 系统管理 > 语言维护 新增西班牙语言代码 es_ES

image-20181009103555564

2. 适配 KendoUI 国际化资源文件

按照下表将指定的资源文件拷贝到对应目录下:

源文件路径 拷贝后的路径
target/core/lib/kendoui/js/messages/kendo.messages.en-GB.js src/webapp/lib/kendoui/js/messages/kendo.messages.es-ES.js
target/core/lib/kendoui/js/cultures/kendo.culture.en-GB.js src/webapp/lib/kendoui/js/cultures/kendo.culture.es-ES.js

3. 更新数据库记录

使用 en_GB 下的语言记录来更新所有的国际化表,脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
-- ========================================================
-- Insert all Spanish records based on original en_GB
--
-- Creation Date : 2018-10-08
-- Created By : memories.liu@hand-china.com
-- Script Version: 1.0.0
-- HAP Version : 3.5.0-RELEASE
--
-- ========================================================
-- System Prompt table:
-- SYS_PROMPTS
-- Multi-lingual tables listed below:
-- FND_COMPANY_TL
-- HR_ORG_POSITION_TL
-- HR_ORG_UNIT_TL
-- SYS_ATTACH_CATEGORY_TL
-- SYS_CODE_TL
-- SYS_CODE_VALUE_TL
-- SYS_DASHBOARD_TL
-- SYS_FUNCTION_TL
-- SYS_HOTKEY_TL
-- SYS_IF_CONFIG_HEADER_TL
-- SYS_IF_CONFIG_LINE_TL
-- SYS_RESOURCE_ITEM_TL
-- SYS_RESOURCE_TL
-- SYS_ROLE_TL
-- ========================================================

-- sys_prompts
insert into sys_prompts (
prompt_id,
prompt_code,
lang,
description,
object_version_number
)
select
SYS_PROMPTS_S.NEXTVAL,
prompt_code,
'es_ES',
description,
object_version_number
from sys_prompts where lang = 'en_GB';

-- FND_COMPANY_TL
INSERT INTO FND_COMPANY_TL(
COMPANY_ID,
LANG,
COMPANY_SHORT_NAME,
COMPANY_FULL_NAME
) SELECT
COMPANY_ID,
'es_ES',
COMPANY_SHORT_NAME,
COMPANY_FULL_NAME
FROM FND_COMPANY_TL WHERE LANG = 'en_GB';

-- HR_ORG_POSITION_TL
INSERT INTO HR_ORG_POSITION_TL(
POSITION_ID,
LANG,
NAME,
DESCRIPTION
) SELECT
POSITION_ID,
'es_ES',
NAME,
DESCRIPTION
FROM HR_ORG_POSITION_TL WHERE LANG = 'en_GB';

-- HR_ORG_UNIT_TL
INSERT INTO HR_ORG_UNIT_TL(
UNIT_ID,
LANG,
NAME,
DESCRIPTION
) SELECT
UNIT_ID,
'es_ES',
NAME,
DESCRIPTION
FROM HR_ORG_UNIT_TL WHERE LANG = 'en_GB';

-- SYS_ATTACH_CATEGORY_TL
INSERT INTO SYS_ATTACH_CATEGORY_TL(
CATEGORY_ID,
LANG,
CATEGORY_NAME,
DESCRIPTION
) SELECT
CATEGORY_ID,
'es_ES',
CATEGORY_NAME,
DESCRIPTION
FROM SYS_ATTACH_CATEGORY_TL WHERE LANG = 'en_GB';

-- SYS_CODE_TL
INSERT INTO SYS_CODE_TL(
CODE_ID,
LANG,
DESCRIPTION
) SELECT
CODE_ID,
'es_ES',
DESCRIPTION
FROM SYS_CODE_TL WHERE LANG = 'en_GB';

-- SYS_CODE_VALUE_TL
INSERT INTO SYS_CODE_VALUE_TL(
CODE_VALUE_ID,
LANG,
MEANING,
DESCRIPTION
) SELECT
CODE_VALUE_ID,
'es_ES',
MEANING,
DESCRIPTION
FROM SYS_CODE_VALUE_TL WHERE LANG = 'en_GB';

-- SYS_DASHBOARD_TL
INSERT INTO SYS_DASHBOARD_TL(
DASHBOARD_ID,
LANG,
TITLE,
DESCRIPTION
) SELECT
DASHBOARD_ID,
'es_ES',
TITLE,
DESCRIPTION
FROM SYS_DASHBOARD_TL WHERE LANG = 'en_GB';


-- SYS_FUNCTION_TL
INSERT INTO SYS_FUNCTION_TL(
FUNCTION_ID,
LANG,
FUNCTION_NAME,
FUNCTION_DESCRIPTION
) SELECT
FUNCTION_ID,
'es_ES',
FUNCTION_NAME,
FUNCTION_DESCRIPTION
FROM SYS_FUNCTION_TL WHERE LANG = 'en_GB';

-- SYS_HOTKEY_TL
INSERT INTO SYS_HOTKEY_TL(
HOTKEY_ID,
LANG,
DESCRIPTION
) SELECT
HOTKEY_ID,
'es_ES',
DESCRIPTION
FROM SYS_HOTKEY_TL WHERE LANG = 'en_GB';

-- SYS_IF_CONFIG_HEADER_TL
INSERT INTO SYS_IF_CONFIG_HEADER_TL(
HEADER_ID,
LANG,
NAME,
DESCRIPTION
) SELECT
HEADER_ID,
'es_ES',
NAME,
DESCRIPTION
FROM SYS_IF_CONFIG_HEADER_TL WHERE LANG = 'en_GB';

-- SYS_IF_CONFIG_LINE_TL
INSERT INTO SYS_IF_CONFIG_LINE_TL(
LINE_ID,
LANG,
LINE_NAME,
LINE_DESCRIPTION
) SELECT
LINE_ID,
'es_ES',
LINE_NAME,
LINE_DESCRIPTION
FROM SYS_IF_CONFIG_LINE_TL WHERE LANG = 'en_GB';

-- SYS_RESOURCE_ITEM_TL
INSERT INTO SYS_RESOURCE_ITEM_TL(
RESOURCE_ITEM_ID,
LANG,
ITEM_NAME,
DESCRIPTION
) SELECT
RESOURCE_ITEM_ID,
'es_ES',
ITEM_NAME,
DESCRIPTION
FROM SYS_RESOURCE_ITEM_TL WHERE LANG = 'en_GB';

-- SYS_RESOURCE_TL
INSERT INTO SYS_RESOURCE_TL(
RESOURCE_ID,
LANG,
NAME,
DESCRIPTION
) SELECT
RESOURCE_ID,
'es_ES',
NAME,
DESCRIPTION
FROM SYS_RESOURCE_TL WHERE LANG = 'en_GB';

-- SYS_ROLE_TL
INSERT INTO SYS_ROLE_TL(
ROLE_ID,
LANG,
ROLE_NAME,
ROLE_DESCRIPTION
) SELECT
ROLE_ID,
'es_ES',
ROLE_NAME,
ROLE_DESCRIPTION
FROM SYS_ROLE_TL WHERE LANG = 'en_GB';

4. 人工翻译

将所有西班牙语言下的字符串进行人工翻译,这包括 kendoui 的国际化资源文件和所有的国际化表的记录。

5. 清缓存并重启服务器

启动命令行工具 redis-cli 并连接至 Redis,执行以下命令清除 Redis 缓存:

1
flushall

重启 Tomcat 服务器。