【JEECG技术博文】JEECG国际化介绍


1、为什么要做国际化  

  没有国际化的框架是一个不完整的框架,特别在全球信息化的今天,国际化不再是鸡肋,而是在选择开发平台时必须首要的考试因素,特别在有些公司平台是否国际化具有一票否决要素,所以我们要搞国际化,而不是仅仅是简单的高大尚。

2、国际化的实现原理 

  国际化听起来简单,但要框架中要做到与框架的无缝衔接,松耦合还是有一定难度的。有些系统有时不需要做国际化,在做国际化如果快速发现哪些没有被国际化的字段等,这些问题都开发者在开发过程中实际需要解决的问题,而这一切我们都已经帮你想到了。

  用户在登录页面选择语言后点击登录后在LoginControler.java中checkuser方法中可以看到下面代码,当前语言会被放到session中。

if (req.getParameter("langCode")!=null) {
	req.getSession().setAttribute("lang", req.getParameter("langCode"));
}
        MutiLangServiceImpl.java 中有三个方法,分别介绍下作用:

   1)initAllMutiLang()——TOMCAT启动时会被自动加载,把国际化的表内容加载到内存中,方便以后快速调用,即加载表t_s_muti_lang中所有记录并放在Cache中。

   2)getLang(String lang_key)——传入需要国际化的Lang Key自动根据用户当前语言来得到国际化后的值,如在某处调用如: String value = getLang(“common.status”),如果当前语言为中文则value为状态,英文为Status     

    3)refleshMutiLangCach()——刷新Cache,在对语言进行维护的时候,比如添加一个语言可以自动把新加的自动加入到Cache里,保证实时生效。 

3、国际化应用的各种场合举例  

  我们以国际化维护页面国际化为例  

  List及Tag国际化 

   

  langKey 可以接受输入多个参数,举例如:    

  lang. congratulation.edit.success 对应中文是:恭喜你,{0}修改{1}。    

  则在页面上我们可以传入的langArg的参数样式为:    

  langArg=” lang.function.name, common.success”    

  lang.function.name会替代{0}, common.success会替代{1} 

  

  客户端label的国际化 

 

  Java后台国际化

   

 后台树的国际化     

 如果你需要对树做国际化,只要在表里把树的名称换成lang_key的值并且在树返回的最后一步加代码:MutiLangUtil.setMutiTree(treeGrids, mutiLangService);就可以实现,具体可以参考菜单管理:



 Js国际化    

 由于Js文件中无法用国际化标签,所以只能在src\main\webapp\plug-in\mutiLang目录中添加us.js及zh-cn.js这个文件已经在BaseTag中第一个默认引入了。

4、语言的维护 

 系统管理菜单中语言管理就可以对语言进行维护管理,注意不要添加已经存在的语言内容。若是有重复的内容,系统在添加的时候会自动提示。

5、lang_key的命名规范   

 1)系统已经有的国际化的就不用重复添加了,如: common.status对应 状态,如果有状态直接使用即要,不要再添加相同名称不同lang_key的进去。    

 2)如果碰到国际化表中没有的,则需要自己添加。          

   lang_keyt_s_mutilang表中命名的格式一定是 xxx.xxx(或者有更多的点)    

 3)如果是不常用的,如某个模块中有个标签叫“学生”,则命名时可以叫:lang.student    

 4)如果是一些公共的,则命名时用common开头,如“操作”可能在系统各处都有可能用到,则命名可以叫:common.operation    

 5)不用要一个单词来命名作为lang_key如student.    

 6)如果是一个句子lang_key就写下这个句子,单词间用点来分开,如:common.please.select.one.record.to.edit 对应Please select one record to edit    

 7)如果是一个句子lang_context首字母需要大写,其他小写,按正常英文句子的来拼写,如:          

   Please select one record to edit, 而不是 Please Select One Record To Edit.    

 8)如果不是句子,如表头上显示,则lang_context可以全部首字母大写,如: User Name, Role Name    

 9)前后命名要一致,比如部门有的人喜欢用简写如:depart哪后面注意就全部用简写,不要一会出现depart一会出现department很不协调。也不要一会出现desc一会出现description.    

 10)单词不要出现拼写错误。    

 11) 翻译要准确,不要出现无关内容。比如有某个网页上的标题上中文是:学生添加,你可以用lang.student.add有的人发现这是个标题就可能会写成     lang.title.student.addtitle这是这个出现的位置,请不要加这样的位置信息。    

 12)所有List页面(特例除外)的添加,修改都是用以下风格,对应模块修改langArg的值 

   <t:dgToolBar title="common.add.param" langArg="common.language"        

   <t:dgToolBar title="common.edit.param" langArg="common.language"            

   翻译过来就是 模块名+录入(编辑),比如:语言录入,用户录入等,不要只放“录入”以保证所有页面的页格一致。

6、我只是在国内做项目,不想看到lang_key可以么?  

 当然可以,你还是可以按原来一样写代码,比如:     

   <t:datagrid name="departList" title="common.department.list" 改成    

   <t:datagrid name="departList" title="部门列表"    

 再把common.notfind.langkey 对应的 lang_context 会值由 ?改成空就可以了。 

7、为什么我用了国际化后前面多了个问号?    

 那是在提醒你该lang_key没有做国际化,你只要在语言维护中添加即可,问号的目的就是个提醒,可以让你一眼就看出哪些没有做国际化。如果你讨厌看到问号同样把common.notfind.langkey 对应的 lang_context 会值由 ?改成空


你可能感兴趣的:(java,国际化,jeecg,开源社区)