欢迎进入Wiki » FAQ » JavaScript的国际化支持?

JavaScript的国际化支持?

在2014-07-29 14:44上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

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")

在2014-06-11 18:32上被李小翔创建

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号