-
请问各位高手,jsp中如何实现网页的中文和英文相互转化.30
jsp中如何实现网页的中文和英文相互转化.粗糙地找了些资料,都是说要是框架才能做到,但是我对框架了解的不是很多.想问问能不能用jsp+servlet+javabean来实现.谢谢.2009年10月12日 12:45
11个答案 按时间排序 按投票排序
-
采纳的答案
你的意思是指网页的国际化吗,就是可以选择中文或英文访问页面是吧?
web框架像struts就是支持这种功能的
如果你不用框架的话,那就得自己去实现,
其实也就是用到了java.util.ResourceBundle,自己去看看吧2009年10月12日 12:57
-
国际化参考下框架,或者直接用框架来实现。
这里比如struts, struts2, webwork, jsf, springMVC等等。
无非是判断语言从属,来从文件(可以从键值对里查到)或数据库(根据条件查询)取到对应的值放入页面,通常做法为封装成标签来使用。2009年10月14日 13:14
-
这么多兄弟说的国际化好像大多只是在资源文件上哦,如果是对用户输入的文字或管理员发布的信息呢?此时资源文件好像就起不到作用。
仅仅是资源文件(resource)国际化是不够的,还有数据库的国际化, UI的国际化(javascript国际化,css的国际化[如对齐]).
Ihavegotyou (初级程序员)
同意Ihavegotyou的观点。2009年10月14日 10:24
-
仅仅是资源文件(resource)国际化是不够的,还有数据库的国际化, UI的国际化(javascript国际化,css的国际化[如对齐]).
2009年10月13日 15:55
-
我做过这方面的例子
struts2.0中文教程.chm中 有关这方面的知识
在Struts 2.0中国际化(i18n)您的应用程序
http://www.blogjava.net/max/category/16130.html
国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。
其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。
不过,所谓“没有最好,只有更好”。Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。
国际化Hello World
下面让我们看一个例子——HelloWorld。这个例子演示如何根据用户浏览器的设置输出相应的HelloWorld。
在Eclipse创建工程配置开发和运行环境(如果对这个步骤有问题,可以参考我早前的文章《为Struts 2.0做好准备》)。
在src文件夹中加入struts.properties文件,内容如下:
struts.custom.i18n.resources=globalMessages
Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
struts.xml用于应用程序相关的配置
struts.properties用于Struts 2.0的运行时(Runtime)的配置
在src文件夹中加入globalMessages_en_US.properties文件,内容如下:
HelloWorld=Hello World!
在src文件夹中加入globalMessages_zh_CN.properties文件,内容如下:
HelloWorld=你好,世界! 在此想和大家分享一个不错的编写properties文件的Eclipse插件(plugin),有了它我们在编辑一些简体中文、繁体中文等Unicode文本时,就不必再使用native2ascii编码了。您可以通过Eclipse中的软件升级(Software Update)安装此插件,步骤如下:
1、展开Eclipse的Help菜单,将鼠标移到Software Update子项,在出现的子菜单中点击Find and Install;
2、在Install/Update对话框中选择Search for new features to install,点击Next;
3、在Install对话框中点击New Remote Site;
4、在New Update Site对话框的Name填入“PropEdit”或其它任意非空字符串,在URL中填入http://propedit.sourceforge.jp/eclipse/updates/;
5、在Site to include to search列表中,除上一步加入的site外的其它选项去掉,点击Finsih;
6、在弹出的Updates对话框中的Select the features to install列表中将所有结尾为“3.1.x”的选项去掉(适用于Eclipse 3.2版本的朋友);
7、点击Finish关闭对话框;
8、在下载后,同意安装,再按提示重启Eclipse,在工具条看到形似vi的按钮表示安装成功,插件可用。此时,Eclpise中所有properties文件的文件名前有绿色的P的图标作为标识。
在WebContent文件夹下加入HelloWorl.jsp文件,内容如下:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2><s:text name="HelloWorld"/></h2>
<h2><s:property value="%{getText('HelloWorld')}"/></h2>
</body>
</html>
发布运行应用程序,在浏览器地址栏中输入http://localhost:8080/Struts2_i18n/HelloWorld.jsp ,出现图1所示页面。
图1 中文输出
将浏览器的默认语言改为“英语(美国)”,刷新页面,出现图2所示页面。
图2 英文输出
上面的例子的做法,与Struts 1.x的做法相似,似乎并不能体现Struts 2.0的优势。不过,我在上面的例子用了两种方法来显示国际化字符串,其输出是相同的。其实,这就是Struts 2.0的一个优势,因为它默认支持EL,所示我们可以用getText方法来简洁地取得国际化字符串。另外更普遍的情况——在使用UI表单标志时,getText可以用来设置label属性,例如:
<s:textfield name="name" label="%{getText('UserName')}"/>
资源文件查找顺序
之所以说Struts 2.0的国际化更灵活是因为它可以能根据不同需要配置和获取资源(properties)文件。在Struts 2.0中有下面几种方法:
使用全局的资源文件,方法如上例所示。这适用于遍布于整个应用程序的国际化字符串,它们在不同的包(package)中被引用,如一些比较共用的出错提示;
使用包范围内的资源文件。做法是在包的根目录下新建名的package.properties和package_xx_XX.properties文件。这就适用于在包中不同类访问的资源;
使用Action范围的资源文件。做法为Action的包下新建文件名(除文件扩展名外)与Action类名同样的资源文件。它只能在该Action中访问。如此一来,我们就可以在不同的Action里使用相同的properties名表示不同的值。例如,在ActonOne中title为“动作一”,而同样用title在ActionTwo表示“动作二”,节省一些命名工夫;
使用<s:i18n>标志访问特定路径的properties文件。使用方法请参考我早前的文章《常用的Struts 2.0的标志(Tag)介绍》。在您使用这一方法时,请注意<s:i18n>标志的范围。在<s:i18n name="xxxxx">到</s:i18n>之间,所有的国际化字符串都会在名为xxxxx资源文件查找,如果找不到,Struts 2.0就会输出默认值(国际化字符串的名字)。
上面我列举了四种配置和访问资源的方法,它们的范围分别是从大到小,而Struts 2.0在查找国际化字符串所遵循的是特定的顺序,如图3所示:
图3 资源文件查找顺序图
假设我们在某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:
查找ChildAction_xx_XX.properties文件或ChildAction.properties;
查找ChildAction实现的接口,查找与接口同名的资源文件MyInterface.properties;
查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;
判断当前ChildAction是否实现接口ModelDriven。如果是,调用getModel()获得对象,查找与其同名的资源文件;
查找当前包下的package.properties文件;
查找当前包的父包,直到最顶层包;
在值栈(Value Stack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;
查找在struts.properties配置的默认的资源文件,参考例1;
输出user.title。
参数化国际化字符串
许多情况下,我们都需要在动行时(runtime)为国际化字符插入一些参数,例如在输入验证提示信息的时候。在Struts 2.0中,我们通过以下两种方法做到这点:
在资源文件的国际化字符串中使用OGNL,格式为${表达式},例如:
validation.require=${getText(fileName)} is required
使用java.text.MessageFormat中的字符串格式,格式为{ 参数序号(从0开始), 格式类形(number | date | time | choice), 格式样式},例如:
validation.between=Date must between {0, date, short} and {1, date, short}
在显示这些国际化字符时,同样有两种方法设置参数的值:
使用标志的value0、value1...valueN的属性,如:
<s:text name="validation.required" value0="User Name"/>
使用param子元素,这些param将按先后顺序,代入到国际化字符串的参数中,例如:
<s:text name="validation.required">
<s:param value="User Name"/>
</s:text>
让用户方便地选择语言
开发国际化的应用程序时,有一个功能是必不可少的——让用户快捷地选择或切换语言。在Struts 2.0中,通过ActionContext.getContext().setLocale(Locale arg)可以设置用户的默认语言。不过,由于这是一个比较普遍的应用场景(Scenario),所以Struts 2.0为您提供了一个名i18n的拦截器(Interceptor),并在默认情况下将其注册到拦截器链(Interceptor chain)中。它的原理为在执行Action方法前,i18n拦截器查找请求中的一个名为"request_locale"的参数。如果其存在,拦截器就将其作为参数实例化Locale对象,并将其设为用户默认的区域(Locale),最后,将此Locale对象保存在session的名为“WW_TRANS_I18N_LOCALE”的属性中。
下面,我将提供一完整示例演示它的使用方法。
package tutorial;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Map;
publicclass Locales {
public Map<String, Locale> getLocales() {
Map<String, Locale> locales =new Hashtable<String, Locale>(2);
locales.put("American English", Locale.US);
locales.put("Simplified Chinese", Locale.CHINA);
return locales;
}
}tutorial/Locales.java
<%@taglib prefix="s" uri="/struts-tags"%>
<script type="text/javascript">
<!--
function langSelecter_onChanged() {
document.langForm.submit();
}
//-->
</script>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<s:bean id="locales" name="tutorial.Locales"/>
<form action="<s:url includeParams="get" encode="true"/>" name="langForm"
style="background-color: powderblue; padding-top: 4px; padding-bottom: 4px;">
Language: <s:select label="Language"
list="#locales.locales" listKey="value" listValue="key"
value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
name="request_locale" id="langSelecter"
onchange="langSelecter_onChanged()" theme="simple"/>
</form>LangSelector.jsp
上述代码的原理为,LangSelector.jsp先实例化一个Locales对象,并把对象的Map类型的属性locales赋予下拉列表(select) 。如此一来,下拉列表就获得可用语言的列表。大家看到LangSelector有<s:form>标志和一段Javascript脚本,它们的作用就是在用户在下拉列表中选择了后,提交包含“reqeust_locale”变量的表单到Action。在打开页面时,为了下拉列表的选中的当前区域,我们需要到session取得当前区域(键为“WW_TRANS_I18N_LOCALE”的属性),而该属性在没有设置语言前是为空的,所以通过值栈中locale属性来取得当前区域(用户浏览器所设置的语言)。
你可以把LangSelector.jsp作为一个控件使用,方法是在JSP页面中把它包含进来,代码如下所示: <s:include value="/LangSelector.jsp"/>
在例1中的HellloWorld.jsp中<body>后加入上述代码,并在struts.xml中新建Action,代码如下:
<action name="HelloWorld">
<result>/HelloWorld.jsp</result>
</action>
或者,如果你多个JSP需要实现上述功能,你可以使用下面的通用配置,而不是为每一个JSP页面都新建一个Action。
<action name="*">
<result>/{1}.jsp</result>
</action>
分布运行程序,在浏览器的地址栏中输入http://localhost:8080/Struts2_i18n/HelloWorld.action,出现图4所示页面:
图3 HelloWorld.action
在下拉列表中,选择“American English”,出现图5所示页面:
图4 HelloWorld.action
可能大家会问为什么一定要通过Action来访问页面呢?
你可以试一下不用Action而直接用JSP的地址来访问页面,结果会是无论你在下拉列表中选择什么,语言都不会改变。这表示不能正常运行的。其原因为如果直接使用JSP访问页面,Struts 2.0在web.xml的配置的过滤器(Filter)就不会工作,所以拦截器链也不会工作。
posted on 2006-11-01 19:06 Max 阅读(2326) 评论(23) 编辑 收藏 引用 所属分类: Struts 2.0系列2009年10月12日 16:30
-
有两种方式。一个是国际化,世界上这种网站不多的,往往是一些大站,或者是针对全球的网站,一般都有个几十种语言支持。
还有一种就是“伪国际化”【注:相别于正宗国际化取的名字,不必在意】,什么意思呢?比如你只需要支持中文和英文,那么整个国际化其实也有一定工作量的,那不如索性做两个网站,一个中文的,一个英文的。客户端需要什么语言的就转发到对应的URL下,当然一个域名下市可以同时跑两个网站的,就像你TOMCAT可以同时跑两个工程是不是,那么一个是www.xxx.com另个可以使www.xxx.com/en/。
至少我看到有相当一部分网站也是采用的后者。仅供参考。国际化的东西网上找找资料,毕竟这年头不用struts的很少了。2009年10月12日 14:10
-
如果仅仅是做个中文或英文的页面,感觉没那那么麻烦,关键是给项目选定个统一的项目编码,如UTF-8,那么对中英文的切换就跟页面的跳转一样简单了,如果还要求跟据浏览器的环境发送中文或者英文的页面的话,也就是对request请求进行判断。
2009年10月12日 13:28
相关推荐
UnityUGUIui上显示3D模型游戏物体_ugui显示3d模型.zip
功能简介 这个 Streamlit 应用将包含以下模块: 位置编码可视化 输入最大序列长度和维度,展示 Positional Encoding 的正弦余弦曲线。 自注意力计算演示 输入一组 token,展示其 self-attention 权重矩阵。 Masked Attention 动画 动画展示 Decoder 中 Masked Attention 的计算过程与屏蔽区域。 因果性建模可视化 输入一个句子,查看其每一步生成时关注的上下文。 残差连接 + LayerNorm 流程图 可视化每一层的残差路径和归一化流程。
毕业设计-响应式轻拟物主题niRvana V2.6.0-整站商业源码.zip
易优文档关键词管理插件.zip
内容概要:本文介绍了基于Matlab和CVX的电动汽车充电站能量调度策略,旨在提高光伏出力利用率并减少发电量波动。文中提出了一种充放电灵活度评估模型,根据不同运行模式(饥饿模式或饱和模式)动态调整电价,以最大化光伏利用率和充电任务完成率。同时,充分运用V2G服务,增强电动汽车与充电站的合作。仿真结果显示,该策略不仅提高了光伏利用率,还增强了电力系统的稳定性和经济效益。 适合人群:从事新能源研究的技术人员、电力系统工程师、科研工作者。 使用场景及目标:适用于研究和开发电动汽车充电站能量管理系统的机构和个人,目标是提高光伏利用率、减少电力波动、优化充电站运营。 其他说明:文中提供了详细的程序注释、CVX求解器安装包和安装方法,便于读者理解和复现实验结果。
实训商业源码-牧场养牛-论文模板.zip
ZH1105柴油机气缸体三面粗镗组合机床设计(夹具设计).rar
干法水泥回转窑工艺布置图.rar
内容概要:WPS灵犀免费版正式接入DeepSeek R1大模型,推出冬季2024灵犀免费版,成为首款国产AI原生办公套件。该版本具有三大颠覆性突破:深度集成DeepSeek R1,无需第三方插件;全免费且覆盖多种办公场景;效率实测提升300%。文章详细介绍了六大应用场景,包括智能写作、表格处理、PPT设计、代码办公、多模态创作和跨文档知识管理,并提供了详细的启用步骤和避坑指南。此外,还针对企业用户和高级用户提供了商用授权和API接入等进阶玩法。 适合人群:学生、职场人士、开发者以及需要高效办公的所有用户。 使用场景及目标:①智能写作,快速生成高质量文档;②表格处理,实现复杂公式的自动推导和异常检测;③PPT设计,自动生成专业美观的演示文稿;④代码办公,生成和优化编程代码;⑤多模态创作,生成流程图和数据可视化图表;⑥跨文档知识管理,快速总结文献和识别合同风险。 其他说明:提供全网独家下载地址和避坑指南,确保用户顺利安装和使用。企业用户需申请商用授权,费用为0.1元/千tokens。用户反馈显示,WPS灵犀版大幅提升了工作效率,解决了多个痛点问题。立即下载体验,开启AI办公新纪元。
盖冒垫片模具设计.rar
Φ273钢管矫直机主传动系统设计.rar
对农业玉米脱粒机的总体结构设计.rar
浮头式换热器设计.rar
ssm055基于spring框架的中小企业人力资源管理系统的设计及实现(文档+源码)_kaic
内容概要:本文系统梳理了中国零售分销体系中零供合作的现状与挑战,汇集了行业实践案例与创新思路,同时借鉴国际经验,探索适合中国市场的流通模式。文章指出,中国零售分销体系正经历重大变化,零供关系从“博弈”转向“协同”。文中分析了日本、欧美市场的零供合作模式及其特点,对比了中国市场的现状与挑战。此外,文章强调了政策法规对零供关系健康发展的重要性,并提出了未来零供协同的具体举措,如强化政策引导、深化行业能力建设、搭建高效合作平台、加速零售技术革新等。 适用人群:零售行业从业者、供应链管理人员、政策制定者、研究者。 使用场景及目标:①帮助企业理解零供关系的演变趋势及面临的挑战;②为政策制定者提供参考,完善相关法律法规;③为研究者提供详实的行业数据和案例分析;④为企业提供具体的零供协同实施路径和成功案例借鉴。 其他说明:本文通过大量的行业调研和案例分析,揭示了零供关系从“博弈”到“协同”的必然趋势,强调了数字化转型和政策法规对零售分销体系健康发展的重要性。文中提到的优秀案例展示了零供协同在提升效率、降低成本、增强市场竞争力等方面的显著效果,为行业提供了宝贵的实践经验。
考虑居民响应行为的生活垃圾分类回收政策模拟仿真研究.zip
催化裂化图纸cad+pdf.rar
实训商业源码-新品团购4.7.8原版-论文模板.zip
内容概要:本文详细介绍了基于TTC(Time-to-Collision)触发的车辆换道轨迹规划与控制技术。通过五次多项式实时规划方法,结合MATLAB与CarSim联合仿真实验,实现了对车辆换道过程中节气门开度、制动压力和方向盘转角的精准控制。研究表明,这种方法能够有效提升车辆换道的安全性和效率,为智能交通系统的优化提供技术支持。 适合人群:从事智能交通系统研究的技术人员、自动驾驶领域的研究人员以及相关专业的高校师生。 使用场景及目标:适用于需要深入理解车辆换道轨迹规划与控制机制的研究项目,旨在提高交通流量优化和道路安全性。 其他说明:文中提供的模型和实验数据可以作为进一步研究的基础,帮助研究人员更好地理解和改进现有的车辆换道控制技术。
内容概要:本文详细介绍了基于MATLAB/Simulink平台构建的光伏并网逆变器低电压穿越(LVRT)仿真模型。该模型采用了Boost升压电路与NPC三电平逆变器相结合的拓扑结构,支持SVPWM调制和正负序分离控制。文中深入探讨了各个关键组件的工作原理及其在Simulink中的具体实现方法,如电压跌落检测逻辑、中点平衡控制、正负序分离控制以及锁相环(PLL)优化。此外,还提供了针对不同MATLAB版本的注意事项和技术细节。 适用人群:从事电力电子、新能源发电领域的研究人员和工程师,特别是对光伏并网逆变器低电压穿越技术感兴趣的读者。 使用场景及目标:本模型主要用于研究和验证光伏并网逆变器在电网电压骤降情况下的性能表现,帮助工程师理解和优化LVRT功能的设计。通过该模型可以模拟不同的电网故障条件,评估逆变器的响应特性,从而提高系统的稳定性和可靠性。 其他说明:该模型适用于MATLAB 2018及以上版本,在2020b版本中仿真速度更快。实际应用中需要注意中点电压波动等问题,并预留足够的硬件裕度。