坑:
1、basename写错了,没有具体到配置文件共同的前缀;
2、在jsp中进行国际化操作时,一直报错找不到login,虽然jsp中写的basename和在测试类中写的basenam是一样的,但就是一个可以正常运行,另一个就会抛异常。之后发现,要写一个login.properties。这个文件是用于在没有匹配的配置文件时,就会使用该配置文件。
实现国际化
以前的实现方法
java中如何把中文转化为ascii码:
-
写资源文件
-
编程写实现固定文本的国际化
public class International { public static void main(String[] args) { String basename = "com.onezero.resource.login"; Locale locale = Locale.getDefault(); ResourceBundle resource=ResourceBundle.getBundle(basename,locale); System.out.println(resource.getString("username")); Locale en=Locale.US; ResourceBundle resource2 = ResourceBundle.getBundle(basename, en); System.out.println(resource2.getString("username")); } }
注意:basename要一直写到login,否则会抛异常。
在jsp使用国际化时一定要注意配置文件中应该用login.properties,否则会抛异常,说是找不到配置文件。
<% ResourceBundle resourceBundle = ResourceBundle.getBundle("com.onezero.resource.login", request.getLocale()); %> <%= resourceBundle.getString("username") %>:<input type="text"> <%= resourceBundle.getString("password") %>:<input type="text"> <input type="submit" value="<%=resourceBundle.getString("submit")%>">
总结:
- 定义一个Localed对象
- 通过ResourceBoundle.getBundle(base,locale):获取ResourceBundle对象
- 通过resourceBundle.getString(“key”):获取对应地区应展现的值
SpringMVC实现国际化
步骤:
-
配置文件
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> </bean> <bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource"> <property name="basename" value="login"/> </bean>
ResourceBundleMessageSource的id必须是messageSource
-
fmt:message 取值
<fmt:message key="username"/> <fmt:message key="password"/>
注意:如果在目标方法中使用forward/redirect,那么就不经过视图解析器,之后页面上就会出现?????的样子