struts2与freemarker国际化操作

Struts2性能的笔记 阅读详情

struts2 自带一个拦截器

<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>

源码简单分析下:

I18nInterceptor.CookieLocaleFinder localeFinder = new I18nInterceptor.CookieLocaleFinder(invocation);

通过这句话,跟踪到下图


通过跟踪源码,找到CookieLocalFinder 继承自  localfinder.

这里是struts2设置语言key值的地方,查找key值request_local在传入的parameters 中是否存在。

如果存在request_local,就设置枚举类型storage值为session,也就是存储方式。

如果request_local不存在,查找request_only_local是否存在。

如果存在,就是none,就只设置这一次的访问语言为xxx。

在I18nInterceptor中:

I18nInterceptor.CookieLocaleFinder localeFinder = new I18nInterceptor.CookieLocaleFinder(invocation);
Locale locale = this.getLocaleFromParam(localeFinder.getRequestedLocale());//设置key值
locale = this.storeLocale(invocation, locale, localeFinder.getStorage());//设置存储方式,传入上下文
this.saveLocale(invocation, locale);//保存设置好的local local是一个bean类型,是存储所有语言的。
invocation.getInvocationContext().setLocale(locale); //往下跟代码就是把local存入放入上下文。
这个是存储的地方。有时间可以看下,struts2加载时,读取的方式。
存储的key值:
public static final String LOCALE = "com.opensymphony.xwork2.ActionContext.locale";

好了,源码到这,怎么用才是最重要的~

首先编写语言配置文件:

我的idea导入的maven项目,直接在resource目录下,添加两个文件

globalMessage_en_US.properties    

struts2.cn.language=chinese
struts2.us.language=English
struts2.module=Module{0}

globalMessage_zh_CN.properties

struts2.cn.language=中文
struts2.us.language=英文
struts2.module=第{0}章

struts2需要一下配置,可以配置在struts2.properties或者struts2.xml

struts.i18n.reload=true //是否每次重新加载配置文件
#struts.locale=zh_CN
struts.locale=en_US
struts.i18n.encoding=UTF-8
struts.custom.i18n.resources=globalMessage //资源的前缀
或者struts2.xml:

 <constantname="struts.custom.i18n.resources"value="globalMessage"></constant>

    <constantname="struts.i18n.encoding"value="utf-8"/>

<constant name="struts.locale" value="en_US" />


启动项目,就可以直接取到资源里面配置的属性了。

普通的jsp页面引入struts2标签以后,直接

<%@taglib uri="/struts-tags" prefix="s"%>
<@s.property value="%{getText('struts2.title')}" /> 可以取到值

freemarker结合的,需要这么引入

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]> 取值一样

然后就是更改中英文。老夫传你个ajax,少年拿去用吧~

function changeLanguage(language){
 $.ajax({
    url: window.location.pathname,
    type:"POST",
    dataType: "json",
    async:false,
    data: {request_locale:language},
    success: function( data ) {
       window.location.reload();
    },
    error : function(){
       window.location.reload();
    }
 });
}
     globalMessage_en_US.properties    传入红色部分就够了

js取值一样:

var ChooseFiles='<@s.property value="%{getText('struts2.ChooseFiles')}"/>';
注意,如果freemarker标签改成[]  相应的 所有的地方都改成[]  而不是<>  

带参数的

<@s.property value="%{getText('struts2.title',{'sad'})}" /> 可以取到值

   <@s.textname="login.title"/> 用name属性来加载资源文件的key值,

       <@s.textname="login.title">

              <@s.param>hello</@s.param>

              <@s.param>index</@s.param>

       </@s.text>

       或者:<@s.propertyvalue="%{getText('login.title',{'hello','index'})}"/>


愉快的学习到这里就结束了~有问题留言吧~


Struts2框架API深度解析与实战应用 Struts2框架,作为Java领域中举足轻重的MVC框架,一直被认为是企业级应用开发的重要工具。本章旨在对Struts2框架的起源、设计理念、核心组件以及在现代Web开发中的地位进行深入探讨。让我们先从其起源开始。起源:Struts2框架起源于Apache Struts项目,该项目最早始于2000年,其设计目标是为了简化Web应用的开发。 阅读详情

相关推荐

构建Struts2框架实战指南

Struts2是Apache软件基金会所赞助的一个开源项目,它是Struts的下一代产品,采用基于拦截器的控制模式,为Web应用程序提供一个动态的表单处理和数据处理机制。Struts2以WebWork2为核心,通过拦截器模式来处理用户的请求,是MVC(Model-View-Controller)设计模式的一个应用,旨在分离业务逻辑和用户界面,提高代码的重用性并简化开发。

weixin_32389853的博客 945

在Freemarker中使用struts2标签

1.将系统所需的标签库定义文件放到WEB-INF目录下,如果是用struts2框架,需要将struts2-core- 2.0.6.jar中的struts-tag.tld放到WEB-INF目录下 ­注意可能会报错:需要在struts-tag.tld中的 ­整个标记的最外层,加个­­........­ ­­2.在web.xml中配置JSPSupportServlet ­

guanyonggui的专栏 854

struts2+freemarker

struts2+freemarker

struts2整合freemarker(一)

当今的页面展示技术主要分为两种:基于JSP和EL表达式、采用模板引擎(FreeMarker、Velocity等)。 FreeMarker是一个用java语言编写的模板引擎,它基于模板生成文本输出。它强制将展示层和业务逻辑层分开,使开发人员不能像JSP页面那样在页面中添加业务逻辑。freemarker目前虽然使用的公司不多,但是在某些时候就必须使用,当需要遍历json数据的时候,目前市面上的好多显示

hpugym的专栏 1373

Struts2整合Freemarker生成静态页面

NULL 博文链接:https://depravedangel.iteye.com/blog/443575

智能座舱架构与芯片- (9) 音频篇 上

从A2B收发器衍生出来的简化产品具备各种级别的功能,例如端点从节点(不支持TDM)、简化型主节点(支持较短的电缆和更少的从节点数量),以及简化型端点从节点(支持较短电缆和更少的PDM输入)。例如,AVB中的talker和listener是不同的设备,它们的参考时钟源可能并不相同。传统的车载收音机通过天线接收无线电信号,然后由调谐模块(Tuner)进行信号调谐,信道过滤,信道均衡,多路改善,信号解调等,转为数字信号后再交给DSP进行立体声解码,噪声抑制,弱信号处理,最后从车载音响系统进行播放。

joanna_xiao的博客 4908

Struts2 结合 Freemarker 实例

Freemarker 是一个不依赖 web 容器的模板引擎,一个基于模板生成文本输出的工具。其工作的原理如下图:   freemarker 不是一个 web 应用的框架,而适合作为 web 应用的一个组件。使用 freemarker ,可以用已经定义好的模板,生成各种想要的文件,在某些方面使用起来还是挺快捷的,例如使用 freemarker 编写一个代码生成器。本文就是一个结合 St

WO的专栏 750

物理机centos7系统重启后直接进入dracut

Warning: /dev/centos/root does not exist Warning: /dev/mapper/centos-root does not exist 在shell命令行执行以下: dracut:/# lvm vgscan dracut:/# lvm vgchange -ay dracut:/# exit 之后可以正常进入系统(测试正常)。 但是重启之后依然会进入dracut模式,永久解决如下: 查看kernel文件 [root@ecs ~]# ls -ltrh /boot

魏志标的博客 1万+

改用Freemarker作为项目视图,代替jsp

以前用Struts2作为项目的控制层,在视图方面自然而然得用jsp,外加使用Struts2的标签,很方便也很简单,也强大。 但自从使用SpringMVC后,基本放弃使用Struts2(个人选择,并不代表Struts2不好)。Struts2不用了,那它的标签我也不想用了,那用什么来代替呢?答案就是Freemarker。它是不同于jsp的另外一种视图,而且自带的标签也很强大。在这里简单介绍Freem...

yanhuhui的专栏 280

杰理蓝牙AC696X开发实战:自定义蓝牙名称与提示音配置指南

本文详细介绍了杰理AC696X蓝牙芯片开发中自定义蓝牙名称与提示音配置的完整实战指南。文章从SDK工具定位入手,逐步讲解如何通过配置工具修改蓝牙名称,并重点阐述了替换提示音的正确步骤与音频文件(如WAV格式、16kHz采样率)的详细参数要求,最后指导如何生成并验证最终固件,帮助开发者快速实现个性化设备定制。

weixin_29161719的博客 561

华为ENSP虚拟网络与本地物理网卡高效桥接实战指南

本文提供了一份详细的华为ENSP虚拟网络与本地物理网卡桥接实战指南。通过清晰的四步操作,帮助用户打破虚拟实验环境的“孤岛”限制,实现ENSP设备与真实局域网及互联网的互通,从而进行更真实的协议测试、软件升级和混合网络环境搭建。

qsc90123456的博客 537

Struts2在FreeMarker中国际化的配置

在Struts2中使用FreeMarker作为表现层已经基本作为普遍配置了。但是熟悉JSP的开发者习惯了JSP标签的使用,而FreeMarker中确实宏的使用,二者虽然有些差别,但是使用上能够很快过渡。 国际化是Java EE项目中一个不可缺少的部分,当然不是每个项目所必需的,但关键时刻却是不能避免的。当然也有项目做两个路径来进行,把语言区分开来,这也是可以的,当然这需要大量的劳...

nanlei1987的专栏 174

基于 STM32 与压电薄膜的婴儿睡眠呼吸暂停监测床垫设计

本设计以 STM32F103C8T6 为主控,结合 PVDF 压电薄膜传感器,通过模拟信号调理与数字峰值检测算法,实现了对婴儿睡眠呼吸状态的实时监测。系统结构简单、成本低廉、无接触无束缚,当检测到 20 秒以上无呼吸信号时自动触发声光报警,可有效降低婴儿睡眠呼吸暂停带来的安全风险。后续可扩展蓝牙 / WiFi 模块,将报警信息推送至家长手机端,实现远程监护。

weixin_42300449的博客 153

Freemarker+Struts2 国际化应用

Struts2使用FreeMarker作为其默认的模板技术,因此Struts2对FreeMarker的支持非常良好。因此,为了Struts2应用中使用FreeMarker模板技术,只需要在struts.xml文件中进行简单配置即可。 由于FreeMarker自供的FTL指令的能力非常有限,让我们编写一些相对复杂的界面里有点力不从心。不过不用担心,Struts2已经为我们提供了额外的标签库的支持。

sz_bdqn的专栏 1560

关于瑞芯微SDK中buildroot的架构分析、配置细节、以及一些使用步骤

摘要:瑞芯微SDK基于Buildroot框架,针对RK3568等芯片提供定制化开发环境。核心目录包括buildroot(配置与编译框架)、kernel(定制内核)和u-boot(引导程序)。开发流程为:1)加载芯片默认配置;2)通过menuconfig定制系统(架构、内核、软件包等);3)可选修改内核配置。关键硬件适配需修改设备树(dts)和分区表(parameter.txt),系统行为通过启动脚本(S90network)调整。最终执行make编译生成可烧录固件。该框架通过配置文件驱动,实现从工具链构建到固

Hyjks的博客 1199

《我的Classic Platform AUTOSAR之路》 BSWM 模式管理(二)ESH

只有 PostRun 和 wakeup 才能切换到 RUN,其他状态需要先切换到 wakeup 模式。进入 RUN 模式需要打开通信 allow,退出 Run 需要 disable 通信 allow。Prepareshut 与 dem_shutdown 绑定,如果没有 dem 配置,不会生成。除了 Init 模式下,其他模式下都要检查 ECU 的唤醒源和通信 pending 需求。与 ECUM 相关,整个 ECU 状态管理的状态机制。postrun 可以不配置,需要根据自己的需求使能。

libuping2023的博客 965

基于struts2与FreeMarker的动态切换国际化技术方案

基于struts2与FreeMarker的动态切换国际化技术方案

上弦之月的专栏 1923

27、VXLAN BGP EVPN网络的自动化部署与运维管理

本文深入探讨了VXLAN BGP EVPN网络从初始配置到运维管理的全生命周期自动化流程,涵盖Day-0设备自动上线、Day-0.5增量变更与连接验证、Day-1覆盖服务配置与计算集成,以及Day-2监控与故障排查。详细介绍了推送与拉取两种配置模型、主流工具如Cisco VTS、NFM、DCNM的功能特点,以及开源自动化工具的应用。通过流程图和命令示例,系统展示了MAC/IP学习、BGP通告和VXLAN封装的验证方法,为构建高效、可扩展的数据中心网络提供了全面的技术指导。

banana的博客 81

freemarker基础struts2中整合

FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)   FreeMarker不是一

qq_27881473的博客 428

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Struts2、Sitemesh、FreeMarker 最新版本整合配置

 由于新版本的Struts2改进了国际化的性能,所以进行了Jar包的升级,同时再升级了Sitemesh和FreeMarker的版本。但是突然发现,原先的整合方案下,FTL文件无法获得request、response、action等Freemarker内置的对象,经过追踪与查找,终于找到了新的整合方案。web.xml 的配置:  struts-prepare org.

阿影的黄金时代 4081

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

在struts2中使用freemarker

普通的struts2配置文件一般是这么配置的: [code="java"] /page.jsp [/code] 这里的view是一个jsp页面,也可以改成是一个freemarker模板页面: [code="java"] /fm.ftl [/code] 当然我们希望能在fm.ftl上使用struts2的标签,需要在fm.ftl页面最开始添...

dreammark的博客 303

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

网站国际化解决方案

1、  Freemarker静态页面国际化问题 (1)      编写中、英文模板各一个 (2)      结合Struts2.0实现ftl国际化   2、  jsp页面国际化问题 (1)      Struts2.0框架提供的国际化 (2)      使用了 JSTL 国际化辅助标签库   3、  网上关于国际化处理方法 (1)      js字符串替换法 (2)      

幸运的Java小神的博客 1177

Struts2 国际化

作者:刘庆 struts2 在这里有观原理就不做介绍了哈 java.util.ResourceBundle 接口和实现类  ListResourceBundle, PropertyResourceBundle 如果有兴趣可以去研究   1. 实出国际化  配置文件我们可以在struts.xml 中加入   &lt;constant name="struts.custom.i18n...

今天最成功 107
上一篇: struts2的properties文件中,各个属性的解释
下一篇: mui 在ios和微信 click延迟加载
Maugs_Luyao
博客等级 码龄11年 105粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值