gMIS的部署和使用日益扩大,跨国多语言版本成为急需的功能。早在2018年中,就考虑加入这个功能——在gMISJiMies中实现了对多语言版本的支持。为实现gMIS吉米跨行业、跨地区、国际多语种广谱应用目标。经过一段时间的密集开发和测试,目前gMISi18n多语言国际化更新已经完成。过程比预想的要长,修改和改进比预想的要难,涉及到的修改模块也很多,所以记录在这里作为备忘。1、基于GWA2的多语言包设计gMIS的开发框架是GWA2ChivaRabbit。GWA2本身有跨语言版本,如GWA2Java、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”等,或者使用隐式locale参数来判断应该使用哪种语言当前加载Bag。输出$lang到模板引擎:$data['$lang']['lang_key']=$lang->get('lang_key');这样就可以通过模板文件中的{$lang['lang_key']}多种方式访问??。稍后将进一步详细描述。2、在Module类或Controler类的PHP程序中调用语言包对象。在gMIS中,普通PHP文件中的多语言对象多访问形式如下:print$lang->get('lang_key');该语句会根据当前语言输出配置多个lang_keys指向的语言版本对应的加载语言包,其中语言对象$lang是一个全局变量,可以在任何控制器文件中调用。同样,在Module模块类中,也需要做更多的修改,在创建和实例化Module模块类的声明时引入全局变量语言包对象。例如,在mod/abc.class.php文件中,传递$lang对象:publicfunction__construct($args,$lang=null);为了向后兼容,也可以不安全或者不推荐直接使用全局变量$lang:`publicfunction_myFunc(){returnif($lang){$lang->get('lang_key');}}`3.在HTML模板文件中调用gMISGWA2PHP在设计和实现时,完全继承了GWA2MVC,因此,作为兼容性和后续扩展,gMIS的大部分视图文件都是以模板文件的形式呈现的。默认模板引擎Smarty将被HanjstHanjst取代。在国际化多语言扩展中,我们需要在模板引擎中增加语言对象的输出,如:$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调用中:letbuttonValue=userinfo.$lang['lang_key'];5.在XML/JSON数据表配置文件中调用gMIS强大的扩展性和扩展性依赖于涉及到的元数据和用户数据对的隔离,而元数据和用户数据对的融合就是我们的gMIS表数据处理引擎。在gMIS中,我们为每个被管理的数据表创建一个表单属性描述文件,属性描述文件以配置文件xml格式存放在xml子目录下。当加载目标数据表时,数据处理引擎会读取配置文件,并以属性描述文件定义的各种格式呈现用户数据。在这个过程中,显然,如果我们在属性描述文件中有国际化的多语言内容标签,我们需要同时创建相应语言版本的属性描述文件。基于这些考虑,我们将国际化的多语言xml文件修改为:xml/abctbl.xml–>xml/abctbl.en_US.xmlxml/abctbl.xml–>xml/abctbl.zh_CN.xmlxml/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源代码GMIS几年前已经开源在-github上,但是由于没有国际多语言运行,开发使用仅限于中文环境。随着这种国际多语言化程度的提高,gMIS的发展将迎来更多的非中文开发者和用户。这将为gMIS的发展壮大注入更强大、持续的动力,为gMIS从管理后台向管控操作系统演进做进一步准备。对于非中文母语的开发者,源代码中没有硬编码常量“中文”字符,修改代码没有障碍;gMISJimmy的代码将由世界各地的开发人员审查、修改和改进。对于母语不是中文的用户,可以通过首页的语言切换功能快速切换到自己熟悉的语言界面。这将带来来自世界各地的gMIS用户。使用范围将进一步扩大到全球范围。从而实现gMIS跨行业、跨地区、跨语言的新时代。2019-11-04,山东威海国际机场。-gMIS(generalManagementInformationSystem,Jimis)是基于-GWA2(GeneralWebApplicationArchitecture,ChivaRabbit)的通用管理信息系统应用软件,具有输入输出接口可配置、开箱即用等特点。可在其上构建各种信息管理应用软件系统,如:内容管理系统(CMS)、客户资源管理(CRM)、企业资源计划管理(ERP)、办公自动化系统(OA)等,以及各种行业应用管理系统软件,如:人力资源管理系统(HR)、学生管理、档案管理、旅游管理、图书馆管理、商品管理和业务运营支持系统(BOSS)等。现实零代码开发、快速搭建各种管理信息系统(MIS,ManagementInformationSystem).-gMIS是一款基于-GWA2的管理信息系统(MIS)软件,具有输入输出接口可配置、开箱即用等特点.可在其上构建各种管理应用软件系统,如内容管理系统(CMS)、客户资源管理系统(CRM)、企业资源计划管理系统(ERP)、办公自动化系统(OA),以及不同行业的应用管理系统软件,如人力资源管理系统(HR)、学生管理、档案管理、旅游管理、图书管理、商品管理和业务运营支持系统(BOSS)等。零代码开发,-gMIS可以构建一套管理信息系统(MIS)软件在几分钟内完成。**降低成本,提高生产力。降低成本,提高效率。**-R/o2SP
