`
icekiller110
  • 浏览: 72355 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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》
0
3
分享到:
评论

相关推荐

    Struts2.0框架技术详解

    Struts2支持国际化,通过定义资源文件来实现多语言支持。 **示例资源文件**: ```properties # messages_zh_CN.properties welcome.message=欢迎使用我们的网站! ``` **示例代码**: ```java public String ...

    国外javaWeb开发技术.doc

    WebWork(后来被整合到Struts 2中)则提供了另一种MVC实现,它在控制层处理动作和视图的交互。 总的来说,JavaWeb开发技术经历了从MVC模式的引入到各种框架的涌现,再到语义Web的探索,始终致力于提高开发效率、...

    jspweb框架

    - **src/main/resources**:存储配置文件和其他资源,如数据库连接字符串、国际化消息文件等。 - **src/main/webapp**:Web应用的根目录,包含JSP页面、静态资源(CSS、JavaScript、图片)和Web应用配置文件(如web....

    各种在线api

    Seam提供了诸如会话管理、事件处理、国际化的高级功能,使开发者能够快速构建功能丰富的应用。 ### Ruby on Rails Ruby on Rails(简称Rails)是一个全栈的Web应用框架,采用Ruby语言编写。它遵循MVC架构,强调...

    SparkWeb:SparkWeb是一个超轻量级的Java Web MVC框架

    Sparkweb MVC 框架介绍 一、什么是 Sparkweb ? Sparkweb 是一个超轻量级的简易高效的 Java WEB 开发框架,其设计思想...Sparkweb框架包括:基础的MVC、国际化、JavaBean验证器、缓存 和 可选的 ORM 实现。 四、Sparkweb

Global site tag (gtag.js) - Google Analytics