今天写了jfinal的国际化问题,实现了三种语言,中文,英文,繁体字
先介绍下实现步骤
1.应该创建配置文件,所需要语言的配置文件,
配置文件的创建位置应该在resource目录下,命名是有规定的,
如果不按规定则系统无法找到配置文件
配置文件里先写个简单的测试用例
msg="你好"
msg="hello"
msg= "再見"
暂时先按这个命名,以后会详细解释
2.配置拦截器,拦截器是詹波大神已经写好的直接用就可以了
编写url,
可以设置默认语言,第一次进入使用的就是默认语言,
要想更改其他语言需要加参数__locale=zh_CN/en_US/zh_TW 格式是 url?__locale=zh_CN/en_US/zh_TW
然后就是页面的取值
${_res.msg}会取出配置文件中的值
可以通过
public void configConstant(Constants me) {
me.setI18nDefaultBaseName("i18n");//设置i18n的默认名字,该名字关系到是否正确取到配置文件
me.setI18nDefaultLocale("zh_CN");设置默认的语言,默认语言只针对第一次登录使用,
当语言发生改变时,会把语言存进cookie,下次取默认语言时会从cookie中取,
}
原理:
Res res = I18n.use(getBaseName(), locale);
protected String getBaseName() {
return I18n.defaultBaseName;
}
public class I18n {
static String defaultBaseName = "i18n";
配置文件的命名改变与 me.setI18nDefaultBaseName("i18n")有关
${_res.msg},url?__locale=zh_CN/en_US/zh_TW
_res,_locale也可以改变,I18nInterceptor()有3种构造方法
I18nInterceptor(String localeParaName, String resName)
I18nInterceptor(String localeParaName, String resName, boolean isSwitchView)
当isSwitchView==true时
if (isSwitchView) {
switchView(locale, c);
}
/**
* 在有些 web 系统中,页面需要国际化的文本过多,并且 css 以及 html 也因为际化而大不相同,
* 对于这种应用场景先直接制做多套同名称的国际化视图,并将这些视图以 locale 为子目录分类存放,
* 最后使用本拦截器根据 locale 动态切换视图,而不必对视图中的文本逐个进行国际化切换,省时省力。
*/
public void switchView(String locale, Controller c) {
Render render = c.getRender();
if (render != null) {
String view = render.getView();
if (view != null) {
if (view.startsWith("/")) {
view = "/" + locale + view;
} else {
view = locale + "/" + view;
}
render.setView(view);
}
}
}