JavaScript的国际化支持?
李小翔
2014-07-29 14:44

内容列表

Grails中，通过判断浏览器中的语言设置，可以自动实现后台消息的国际化；此外，通过扩展配置 bropen.toolkit.i18n.supported，还可以锁定语言。
但是对于前台 JavaScript 的国际化，Grails并未提供原生的支持，但是通过 resource 插件，在 BroFramework 中实现了 js 的国际化。
js 国际化的开发过程如下。
在应用或插件的 grails-app/assets/javascripts 文件夹下创建一个 i18n 的文件夹，此文件夹中可以创建相应的语言定义文件，文件名格式同 grails-app/i18n 下的 properties 文件，只是扩展名为 .js，如 “BroFramework_zh_CN.js”；
系统启动时，根据 BroFramework 下的 i18n_xx_XX.js，以插件依赖关系顺序搜索所有 js/i18n 文件夹下的语言定义文件，并将他们按照语言（即文件名后缀）组合成不同的 js 资源包，如 “i18n_zh_CN.js”；
视图模板（或者未引用视图模板的视图，如index.gsp）中，在 head 加上标签 <bro:scriptI18n />，将自动解析浏览器语言设置，并加载对应的 js 资源包；
在javascript中，通过调用 m(code) 即可获得 code 对应的国际化文本。
上面的步骤中，语言定义文件的格式如下例所示：
m.merge({ 
   
   ”jqui.dalog.button” : { 
       ”SUBMIT”: ”提交”,
       ”OK”: ”确定”,
       ”CLOSE”: ”关闭”,
       ”CANCEl”: ”取消”
    } ,
   
   ”default.not.unique.message”: ”【{ 1} 】 的属性 【{ 0} 】 的值 【{ 2} 】 必须是唯一的”
} );
可以直接定义一个code，并定义其文本，如 “default.not.unique.message”
或者定义一个父集合，然后定义子集，如在 “jqui.dialog.button” 下定义了 “SUBMIT” 四个子集，等同于定义了 “jqui.dialog.button.SUBMIT” 等四个code
文本中可以包含参数 { N} ，其中 N 为数字，表示第 N 个参数（从0开始）
此外，获得国际化文本 m 方法，支持下面的几种调用方式：
m(code)：只有参数 code
m(code, default)：其中 default 必须为字符串，即默认的文本
m(code, args)：其中 args 为数组，表示参数
m(code, args, default)：上面两种调用方式的组合
如：m(”jqui.dalog.button.CLOSE”, ”Close”)