文档章节

JFinal 2.2 国际化功能的应用

33号小人物
 33号小人物
发布于 2016/04/07 16:10
字数 387
阅读 552
收藏 3

听说JFinal更新到2.2后,功能更强大了,所以马上拿来试试。之前一直对国际化挺好奇的,但是项目中缺很少机会用到,所以就打算试试。结果遇到了以下问题:关于JFinal2.2中I18nInterceptor的问题

@JFinal 的指导下,自己重新实现了一个I81n的拦截器:

public class MyI18nInterceptor extends I18nInterceptor{

	private static String defaultLocale = Locale.getDefault().getLanguage() + "_" + Locale.getDefault().getCountry();
	
	public void intercept(Invocation inv) {
		Controller c = inv.getController();
		String localeParaName = getLocaleParaName();
		String locale = c.getPara(localeParaName);
		
		if (StrKit.notBlank(locale)) {
			c.setCookie(localeParaName, locale, Const.DEFAULT_I18N_MAX_AGE_OF_COOKIE);
		}
		else {
			locale = c.getCookie(localeParaName);
			if (StrKit.isBlank(locale))
				locale = defaultLocale;
		}
		Res res = I18n.use(getBaseName(), locale);
		c.setAttr(getResName(), res);
		
		inv.invoke();//执行相应的action
		
		SearchService page = c.getAttr("resultPage");
		if(null != page)
		{
			String paginate = res.format("Pageinate",page.getPageNumber(),page.getTotalPage());
			c.setAttr("pageMsg",paginate);
		}
	}
}

这里跟原来提供的区别就是,我的实现还是通过选择properties文件来变更页面的语言,而原来是通过改变资源文件的路径,即变更html文件来实现变更页面的语言,但是原来的实现存在以下问题:

if (isSwitchView) {
	switchView(locale, c);
}
else {
	Res res = I18n.use(getBaseName(), locale);
	c.setAttr(getResName(), res);
}

inv.invoke();

由于没有执行inv.invoke(),Controller中的render的值仍然为空,所以执行switchView时没有效果;

我的实现,有一个好处就是,如果有些值需要在执行完action之后格式化输出,那就在inv.invoke( )后获取相应的值,然后进行格式化后再配置到Controller的Attrs中,这样在Controller中的action中,代码就更加简洁了。

希望对大家有所帮助~

© 著作权归作者所有

33号小人物
粉丝 1
博文 3
码字总数 2040
作品 0
广州
高级程序员
私信 提问
加载中

评论(1)

JFinal
JFinal
感谢分享,赞一个 79
使用Rythm插件轻松实现JFinal应用的国际化

刚看了@eyelee同学的JFinal 国际化的简单实现的文章,我打算分享一下自己为@紫电清霜的JFinal-BBS示例应用添加Rythm模版引擎和国际化功能展示的经验。 在开始之前,大家可以先通过点击这个视...

罗格林
2013/06/05
2.6K
13
JFinal Rythm插件开发完成

大家好, 我开发了一个JFinal的rythm插件,可以让JFinal应用很容已使用Rythm模版引擎。使用方法和代码都在: https://github.com/greenlaw110/jfinal-rythm 因为JFinal的jar不在maven中央苦衷...

罗格林
2013/06/03
453
9
最近在做的一件事件编写JFinal教程《Jfinal极速开发实战》

从8月1号开始,整整一个月,初稿完成,朋友帮我第一次文字校对完成,现在正在根据波总的意见修改一些jfinal的设计原则说明 Jfinal、JfinalUIB学习交流QQ群:309647612 已经完成,前四章免费阅...

littleant
2015/08/20
2.6K
12
JFinal Extensions 2.1 发布,JFinal 扩展

Jfinal-ext是对java极速web框架 jfinal 的一个扩充,主要利用jfinal微内核高扩展的特性扩展常用的实用功能和集成各种第三方框架,简化开发者的学习应用成本,为您节约更多时间,去陪恋人、家...

绝望的八皮
2013/05/16
2.3K
19
JFinal如何使用freemarker插件做国际化?

@JFinal 你好,想跟你请教个问题:JFinal如何使用freemarker插件做国际化?以前是使用Spring,在xml配置一下加载一个资源文件就可以使用了(加载一个spring.ftl)。通过session实现国际化。 ...

bing_chuan
2013/04/07
526
0

没有更多内容

加载失败,请刷新页面

加载更多

用Markdown编程之类型

类型就是约定。而现有的类型是单纬度的。用标注法编程好处就是可以多维度。 类型基础分为: 虚 实 在此之上分为: 根 寄存器级 联 内存级 外 网络级 虚:说白了就是指针或索引之类的概念。之...

dwcz
25分钟前
56
0
WPF中的StaticResource和DynamicResource有什么区别?

在WPF中使用画笔,模板和样式等资源时,可以将它们指定为StaticResources <Rectangle Fill="{StaticResource MyBrush}" /> 或者作为DynamicResource <ItemsControl ItemTemplate="{DynamicR......

javail
51分钟前
49
0
Day07继承中的面试题 答案

1. 每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。 class Zi extends Fu{ public int num = 20; public Zi(){ //super(); System.out.println("zi"); } 2.class Test......

Lao鹰
56分钟前
46
0
每天AC系列(四):四数之和

1 题目 Leetcode第18题,给定一个数组与一个target,找出数组中的四个数之和为target的不重复的所有四个数. 2 暴力 List<List<Integer>> result = new ArrayList<>();if (nums.length == 4 &......

Blueeeeeee
今天
70
0
git clone --mirror和git clone --bare有什么区别

git clone帮助页面上有关于--mirror : 设置远程存储库的镜像。 这意味着--bare 。 但没有详细介绍--mirror克隆与--bare克隆--mirror不同。 #1楼 克隆将从远程服务器复制参考,并将其填充到名...

技术盛宴
今天
86
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部