[size=medium][b][color=darkblue]Struts2的实现方式:[/color][/b][/size]
对所有的Action添加前置拦截器,其中使用ActionContext实例的setLocale()。
[color=red][i][b]动态指定国际化语言,只要设置session中的lang的值即可。[/b][/i][/color]
[size=medium]调用方式:[/size]
I.应用范围
jsp页面和action层面,至于service和dao或者其他工具类中的信息内容的国际化,可以采取如下方式:例如userDAOImpl中的方法在报错的情况下可能向上抛出错误信息(没有找到用户)。可以把这个错误信息转换成一个key(String),key对应的值写在国际化的资源文件中。这样把这个key抛到action层然后就可以获取到国际化的内容了。
II.使用方法
①. 在jsp中使用国际化内容,通过使用标签<s:text/>如果有国际化信息是动态的可以添加参数使用标签<s:param/>。
Demo:国际化资源文件中有此内容
hello = 你好!
helloParam = {0}你好!{1}
在jsp中可以使用
②. 在Action中使用国际化。ActionSupport类中提供了getText()方法
Demo:国际化资源文件中有此内容
hello = 你好!
helloParam = {0}你好!{1}
在Action中可以使用
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
[size=medium][b][color=darkblue]Rails的实现方式:[/color][/b][/size]
Rails2.0以上的版本已经自带国际化的功能。
只要对所有的Action添加前置过滤器即可
项目中的语言通过I18n.locale指定。
动态指定国际化语言,只要设置session中的lang的值即可。
[size=medium]调用方式:[/size]
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' %>
[color=indigo][b][size=small]以上是我总结的国际化文档中的摘要,详细内容可以参考附件中的《Struts2项目的国际化实现方式.docx》和《Rails国际化实现方式.docx》[/size][/b][/color]
对所有的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"));
}
}
[color=red][i][b]动态指定国际化语言,只要设置session中的lang的值即可。[/b][/i][/color]
[size=medium]调用方式:[/size]
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
[size=medium][b][color=darkblue]Rails的实现方式:[/color][/b][/size]
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的值即可。
[size=medium]调用方式:[/size]
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' %>
[color=indigo][b][size=small]以上是我总结的国际化文档中的摘要,详细内容可以参考附件中的《Struts2项目的国际化实现方式.docx》和《Rails国际化实现方式.docx》[/size][/b][/color]