gMIS吉密斯 部署和使用范围日益扩大,跨国多语言版本成为迫切需要的功能,早在2018年年中就考虑要增加这一功能——在gMIS吉密斯中实现多语言版本的支持。
以期实现gMIS吉密斯的跨行业、跨地区和国际化多语言的广谱应用目标。

经过一段时间的密集开发、测试,目前gMIS吉密斯i18n多语言国际化更新已经完成。其中过程比预料的长,修改完善难度比预想的大,涉及到的修改模块也较多,兹记录备忘于此。

1. 基于GWA2的多国语言包设计

gMIS的开发框架是 GWA2吉娃兔,GWA2本身有跨语言的版本实现,如GWA2 Java, GWA2PHP,GWA2Perl等编程语言版本。gMIS所依赖的GWA2的编程语言版本为GWA2PHP,所以gMIS的多语言实现也是继承和扩展了 GWA2PHP(吉娃兔的PHP版本)的多语言开发模式。

在GWA2PHP的多国语言版本多实现中,主要依靠如下设施。

语言模块对象:
mod/language.class.php
其主要方法是实例化 Language.class 并加载语言包文件;同时提供按 lang_key 进行相应翻译的操作方法;

语言包文件:
lang/language.pkg.zh_CN.json,
lang/language.pkg.en_US.json,
lang/language.pkg.ja_JP.json,

全局变量:
全局实例化 $lang 语言包对象,并在全局范围内可以访问。
同时对当前语言环境进行探测,对语言版本环境对探测又进一步地区分为有显式的语言版本参数如 “&lang=zh” 等,或者使用隐式的语言环境参数来判断当前应该加载哪种语言包。

输出 $lang 到模板引擎:
$data[‘$lang’][‘lang_key’] = $lang->get(‘lang_key’);
如此以来,便可在 模版文件中以 {$lang[‘lang_key’]} 多方式进行访问。
后面会进一步地详细描述。

2. Module类或Controler类PHP程序中调用语言包对象

在gMIS中,普通PHP文件中对多语言对象多访问形式如下:

print $lang->get(‘lang_key’);

该语句将输出按当前语言配置所加载语言包对应多 lang_key 所指向的语言版本相应的内容,其中语言对象 $lang 是全局变量,可以在任意 controller文件中进行调用。类似地,在Module模块类中,需要更多的修改,在Module模块类的声明创建和实例化时,引入全局变量语言包对象。

如在 mod/abc.class.php 的文件中,传递 $lang 对象:

public function __construct($args, $lang=null);

为后向兼容,也可以不安全或不推荐地直接使用全局变量 $ lang :

`public function _myFunc(){

return if($lang){ $lang->get(‘lang_key’); }

}`

3. HTML模板文件中调用

gMIS 在设计和实现 GWA2 PHP 时,完整地继承了 GWA2 的 MVC,因此,作为兼容和后续扩展,gMIS的大部分视图文件,都以模版文件都方式呈现。默认的模板引擎 Smarty 将替换为 Hanjst汉吉斯特.

在国际化多语言的扩展中,我们需要在模版引擎中增加对语言对象的输出,形如:
$data‘lang’ = ‘lang_value’;

然后在模版文件中使用如下方式增加对 lang_key 的调用:
{$lang[‘lang_key’]}

4. JavaScript脚本中调用

由于 gMIS 在设计上采用了高效的 Ajax 技术: GTAjax ,页面进行了局部或部分的更新。这在多语言环境中,可能涉及到需要将相应的标签字符进行多语言翻译。
基于这种考虑,我们在 ido.php 进行加载时,输出 userinfo.$lang 全局变量,在其中以 JSON 方式将待翻译的语言标签输出到 JavaScript中,从而使得当我们需要在 JavaScript 调用相应的语言标签时,能够进行顺利的调用,进而显示合适的语言版本给终端用户。

userinfo.$lang = {“lang_key”:”lang_value”, “”:””};

在 JavaScript 实际调用中:

let buttonValue = userinfo.$lang[‘lang_key’];

5. XML/JSON数据表配置文件中调用

gMIS强大对可扩展性和伸缩性依赖于我们所涉及对元数据与用户数据对隔离,而实现元数据与用户数据对融合操作对就是我们对gMIS表数据处理引擎。

在gMIS,我们针对每一张被管理的数据表创建了一个表格属性描述文件,该属性描述文件以配置文件xml格式存储在 xml子目录下。当目标数据表被加载时,数据处理引擎将读取配置文件,以属性描述文件定义的各种格式将用户数据呈现出来。

在这一过程中,显然,如果我们在属性描述文件中有关于国际化多语言的内容标签,就需要一并也要创建对应的语言版本的属性描述文件。基于这些考虑,我们将xml文件的国际化多语言修改形如下:

xml/abctbl.xml –> xml/abctbl.en_US.xml
xml/abctbl.xml –> xml/abctbl.zh_CN.xml
xml/abctbl.xml –> xml/abctbl.ja_JP.xml
….

默认情况下,如果某个数据表efgtbl没有 xml/efgtbl.xml 属性描述文件,则使用系统默认的形式将用户数据显示出来;也是默认的,如果某个数据表 efgtbl 的某个国际化语言版本 xml/efgtbl.zh_CN.xml 没有被创建出来,系统依然鲁棒地使用默认配置将用户数据用默认语言版本呈现出来。

6. lang_key /value 的设计与规划

gMIS 国际化多语言的语言包文件的设计采用通用数据交换文件格式 JSON。在多语言标签设计时,将标签按如下分类进行设置:每个标签键名称以下划线分割的多段英文字符隔空。每段表示不同的层级。
样例如下:
navi_xxxx,
func_xxxx,
form_xxxx,
user_xxxx,
func_importxlsx,
func_importxlsx_hint,
navi_help_company,
navi_help_company_faq,
….

7. 国际化多语言使用者/开发者社区

gMIS吉密斯源码早几年前已开源在 -github 上,然而由于没有进行国际化多语言操作,开发和使用仅限于中文环境,随着这次国际化多语言的完善,gMIS的开发将迎来更多非中文开发者和使用者。

这将为gMIS吉密斯的发展壮大注入更加强大而持续的动力,为gMIS吉密斯由管理后台进化为管控操作系统做进一步地准备。

对非中文母语的开发者而言,源代码中没有了写死的常量“中文”字符, 修改代码不再有障碍;gMIS吉密斯的代码将得到全球范围内的开发者的审阅、修订和完善。

对于非中文母语的使用者而言,可以通过在首页的使用语言切换功能,快速切换为自己熟悉的语言界面. 从而为gMIS带来全世界的用户。使用范围将进一步地扩大到全球范围。

从而实现了gMIS的跨行业、跨地区和跨语言的全新时代。

2019-11-04,山东威海国际机场。

-gMIS (general Management Information System,吉密斯) 是一种基于 -GWA2 (General Web Application Architecture,吉娃兔) 的通用管理信息系统应用软件,具有可配置的输入和输出接口、开箱即用等特征。
可以在其上构建各种信息管理应用软件系统,例如:
内容管理系统(CMS), 客户资源管理(CRM), 企业资源计划管理(ERP),
办公自动化系统(OA)等, 以及各种行业应用管理系统软件,例如:
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统(BOSS)等等。
实现零代码开发、快速搭建各种管理信息系统(MIS, Management Information System).

-gMIS is a -GWA2 based Management Information System (MIS) software with characteristics like configurable input and output interfaces, open-box-to-use.
Various management application software systems can be built on it, such as
Content Management System (CMS), Customer Resource Management (CRM), Enterprise Resource Planning Management (ERP),
Office automation systems (OA), as well as different industry application management system softwares, such as
Human Resource Management System (HR), Student Management, Archive Management, Tourism Management, Book Management,
Commodity management and business operations support systems (BOSS), etc.
With zero code development, -gMIS can build a set of management information systems (MIS) software in a few minutes.

**Lower Costs,
Better Productivity.
降低成本,
提高效率.**

-R/o2SP


wadelau
32 声望4 粉丝

计算技术专家.