关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、3102411850 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 10876|回复: 0

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

[复制链接]
发表于 2015-12-15 17:31:33 | 显示全部楼层 |阅读模式

1、为什么要做国际化  


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


2、国际化的实现原理

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

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

  1. if (req.getParameter("langCode")!=null) {
  2.         req.getSession().setAttribute("lang", req.getParameter("langCode"));
  3. }
复制代码
        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_key在t_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.add,title这是这个出现的位置,请不要加这样的位置信息。   

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

  1. <t:dgToolBar title="common.add.param" langArg="common.language"
  2. <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 会值由 ?改成空


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表