首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Struts2跟Rails的国际化实现

2012-08-25 
Struts2和Rails的国际化实现Struts2的实现方式:对所有的Action添加前置拦截器,其中使用ActionContext实例

Struts2和Rails的国际化实现
Struts2的实现方式:
对所有的Action添加前置拦截器,其中使用ActionContext实例的setLocale()。

private void setLang(ActionContext actionContext,Map session){    if(null != session.get("lang") && !"".equals(session.get("lang"))){String[] localeStr = session.get("lang").toString().split("_");Locale lang = new Locale(localeStr[0], localeStr[1]);actionContext.setLocale(lang);System.out.println("---------change language to " + session.get("lang"));}}

动态指定国际化语言,只要设置session中的lang的值即可。

调用方式:
I.应用范围
jsp页面和action层面,至于service和dao或者其他工具类中的信息内容的国际化,可以采取如下方式:例如userDAOImpl中的方法在报错的情况下可能向上抛出错误信息(没有找到用户)。可以把这个错误信息转换成一个key(String),key对应的值写在国际化的资源文件中。这样把这个key抛到action层然后就可以获取到国际化的内容了。
II.使用方法
①. 在jsp中使用国际化内容,通过使用标签<s:text/>如果有国际化信息是动态的可以添加参数使用标签<s:param/>。
Demo:国际化资源文件中有此内容
hello = 你好!
helloParam = {0}你好!{1}
   在jsp中可以使用
<s:text name="hello"/><s:text name="helloParam"><s:param>china</s:param><s:param>time</s:param></s:text>

②. 在Action中使用国际化。ActionSupport类中提供了getText()方法
Demo:国际化资源文件中有此内容
hello = 你好!
helloParam = {0}你好!{1}
   在Action中可以使用
getText(“hello”);getText(“helloParam”,new String[] {“china”,”time”})

III.项目中的资源文件
①通过在struts.properties文件中struts.custom.i18n.resources=baseMessages
指定全局的资源文件,文件放在项目中的src包根目录下
②通过在action对应的包中定义AAction_zh_CN.properties定义对应AAction的国际化资源文件。
③Jsp的资源文件可以使用全局的文件,也可以通过<s:i18n/>指定。
④在资源文件后面添加不同的语言后缀即可定义不同语言的资源文件
例如baseMessages_en_US.properties
baseMessages_zh_CN.properties

Rails的实现方式:

Rails2.0以上的版本已经自带国际化的功能。
只要对所有的Action添加前置过滤器即可
 
  # 设置本地语言  before_filter :set_language  def set_language    if session[:lang]      I18n.locale = session[:lang]    else      request_language = request.env['HTTP_ACCEPT_LANGUAGE']      request_language = request_language.nil? ? nil : request_language.split(/[\-\,]/)[0]      I18n.locale = request_language if request_language && File.exist?("#{RAILS_ROOT}/config/locales/#{request_language}.yml")    end  end

项目中的语言通过I18n.locale指定。
动态指定国际化语言,只要设置session中的lang的值即可。
调用方式:

I.erb页面可以使用<%= t('keyn') %>或<%= t 'keyn' %>,
带参数:<%= t('keyn',:params1=>'value1') %>或<%= t 'keyn',:params1=>'value1' %>
II.Action中则可以直接使用t('keyn')或t 'keyn',keyn就是对应的国际化键值。
带参数:t('keyn',:params1=>'value1')或<%= t 'keyn',:params1=>'value1' %>

以上是我总结的国际化文档中的摘要,详细内容可以参考附件中的《Struts2项目的国际化实现方式.docx》和《Rails国际化实现方式.docx》

热点排行