springmvc html资源路径,springmvc web国际化i18n解决资源文件路径问题

为了实现国际化,我根据一篇文章写了测试代码。

参考: 深入分析JavaWeb – 国际化(i18n)

首先,我先说一下我一开始错误的示范。

整个项目的架构是这样的:

877c7ac78288ae9dfff4ba0787061e37.png

1. 控制器

BundleTest.java

@Controller

public class BundleTest {

@RequestMapping(value="/globalTest",method=RequestMethod.GET)

public String globalTest(){

return "global/bundle_global";

}

}

2. 资源文件

myproperties.properties是默认的资源文件,当找不到其他资源文件的时候,就会选择这个。

代码如下:

username=\u67F4\u82F1\u4FCA

password=123456

submit=\u63d0\u4ea4

myproperties_en_US.properties

username=Personal

password=123456

submit=submit

另外两个也类似,我就不贴出来了。

这个资源文件的命名之所以不是 myproperties_en.properties,而是 myproperties_en_US.properties,

public static void main(String[] args) {

//资源包基名(包名+myproperties)

String basename = "com.mocha.global.resource.myproperties";

//设置语言环境

Locale cn = Locale.CHINA;//中文zh_CN

Locale us = Locale.US;//英文en_US

Locale hk = Locale.TRADITIONAL_CHINESE;//繁体zh_TW

System.out.println("cn:"+cn.toString()+"|us:"+us+"|hk:"+hk);

//根据基名和语言环境加载对应的语言资源文件

ResourceBundle myResourcesCN = ResourceBundle.getBundle(basename,cn);//加载myproperties_zh_CN.properties

ResourceBundle myResourcesUS = ResourceBundle.getBundle(basename,us);//加载myproperties_en_US.properties

ResourceBundle myResourcesHK = ResourceBundle.getBundle(basename,hk);//加载myproperties_zh_TW.properties

//加载资源文件后, 程序就可以调用ResourceBundle实例对象的 getString方法获取指定的资源信息名称所对应的值。

//String value = myResources.getString(“key");

String usernameCN = myResourcesCN.getString("username");

String passwordCN = myResourcesCN.getString("password");

String usernameUS = myResourcesUS.getString("username");

String passwordUS = myResourcesUS.getString("password");

String usernameHK = myResourcesHK.getString("username");

String passwordHK = myResourcesHK.getString("password");

System.out.println(usernameCN+"--"+passwordCN);

System.out.println(usernameUS+"--"+passwordUS);

System.out.println(usernameHK+"--"+passwordHK);

}

我用main方法测试的时候: Locale cn = Locale.CHINA;//中文,这里打印cn值为zh_CN。

当 ResourceBundle myResourcesCN = ResourceBundle.getBundle(basename,cn);

这里会自动加载myproperties_zh_CN.properties。

本地测试是能成功拿到配置文件的。资源文件路径com.mocha.global.resource.myproperties,这里只写到文件名,不用加后缀就可以了。

运行main出来的结果:

cd77e32c482fc50e45f0ce532ed0cf86.png

3. 请求的页面

重头戏来了,到jsp页面上的时候,死活拿不到资源文件,我查了网上各种对应的问题,尝试了很多次都没有解决的这个问题。

bundle_global.jsp的代码:

国际化测试

//加载i18n资源文件,request.getLocale()获取访问用户所在的国家地区

//ResourceBundle myResourcesBundle = ResourceBundle.getBundle("myproperties",request.getLocale());

ResourceBundle myResourcesBundle = ResourceBundle.getBundle("com.mocha.global.resource.myproperties",request.getLocale());

%>

:

:

">

从浏览器访问控制器跳转到页面,页面报了错:

f8575fb0c14af80331ea299a82d4ec6c.png

控制台报了无法找到资源的错误。

49088e908ca40f8131f1185e3e85c839.png

4、解决问题

我将配置文件全部挪到了resources目录,目录结构如下:

99e092c4f87db81c82aadf82a00b8a57.png

jsp上文件路径改成了

//加载i18n资源文件,request.getLocale()获取访问用户所在的国家地区

ResourceBundle myResourcesBundle = ResourceBundle.getBundle("myproperties",request.getLocale());

%>

在这个maven项目install安装之后,它的配置文件就放到了classes文件夹下,这个我们可以从target文件夹下看到这个结构,

3f23ea84ab7e38eb570a2559f5fe42e2.png

项目再安装重新启动,就能访问到资源文件里的内容了。

26a86e3cdd9506d93d0498f4bf7c491e.png

修改浏览器的语言

b1180db62acc719dea2a325ad1f2aded.png

7c544244189b794f69fe31423b39aeb9.png

5c54394c1217997cac507b81a9e65321.png

将想要测试的语言拖到第一位,再请求页面就能进行测试。这里我把每个测试语言的request.getLocale()的值都标红了。

这里我需要改一下我的资源文件的名字,因为刚才是本地测试之后定下来的名字,但是应该以浏览器拿到的值为准。

修改之后的资源文件名字:

6eefbe10547486cd797b0857899da103.png

再进行测试。

e6c6317d5d45b497e8444882c3c651d8.png

d8bebfad77e5f77009588de40885eba6.png

顺利请求到了资源文件。这次记录就到这里,希望能帮到同样为这个问题纠结的童鞋。

如果有什么问题,请及时指正,感谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值