JFinal 国际化 简单实现 beetl

JFinal自身带有国际化类com.jfinal.i18n.I18N

文档里没有实现的方法,自己实现了一下,在这里分享给大家,哪里有改进的地方请@eyelee

1、编写properties资源文件

yourfilename_zh_CN.properties     test=您好
yourfilename_en_US.properties     test=hello
2、在JFinal配置类,配置常量中
public void configConstant(Constants me) {

	...
	
		//后面两个参数根据自己情况添加默认语言国家
		I18N.init("youfilename", null, null);
	
	...

	}
如果资源文件不在classpath下面那么需要加上包名称,例如 I18N.init("i18n.youfilename", null, null);


3、在页面或者类中调用


页面中调用I18N.getText("key");
在controller建议使用Controller.getText("key");


4、做到这里并不能实现根据用户所用的语言对应显示,这是因为还没有实现自动切换,我们可以通过配置一个拦截器实现
定义一个全局过滤器GlobalInterceptor,并在JFinal配置

/***
 * 
 * @author yinjun622 2013-05-25
 */
public class GlobalInterceptor implements Interceptor {

	@Override
	public void intercept(ActionInvocation ai) {
		Controller c = ai.getController();
		String tmp = c.getCookie(Const.I18N_LOCALE);
		String i18n = c.getRequest().getLocale().toString();
		if (!i18n.equals(tmp)) {
			ai.getController().setCookie(Const.I18N_LOCALE, i18n,
					Const.DEFAULT_I18N_MAX_AGE_OF_COOKIE);
		}
		ai.invoke();

	}

}
这样我们会在用户的cookie中记录所用语言信息当Controller.getText("key");自动去cookie中查找语言并显示。

我们还可以直接使用I18N.getText("key",locale);

5、让beetl实现国际化

    beetl配置到JFinal在这里就不多说了,beetl自定义一个函数I18n,

    并配置 gt.registerFunction("i18n", new I18n());

public class I18n implements Function {

	@Override
	public Object call(Object[] obj, Context context) {
		
		HttpServletRequest req = (HttpServletRequest )context.getVar("request");
		return I18N.getText((String) obj[0],req.getLocale());
	}

}

在页面调用

${i18n("test")}

JFinal国际化的实现,简单的介绍到这里,大家可以提出自己想法与实现,谢谢!

转载于:https://my.oschina.net/smile622/blog/135644

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值