国际化中遇到的坑及如何实现国际化

坑:
1、basename写错了,没有具体到配置文件共同的前缀;
2、在jsp中进行国际化操作时,一直报错找不到login,虽然jsp中写的basename和在测试类中写的basenam是一样的,但就是一个可以正常运行,另一个就会抛异常。之后发现,要写一个login.properties。这个文件是用于在没有匹配的配置文件时,就会使用该配置文件。

实现国际化

以前的实现方法

java中如何把中文转化为ascii码:image-20200610212348076

  1. 写资源文件image-20200610213638684

  2. 编程写实现固定文本的国际化

    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,否则会抛异常,说是找不到配置文件。

    image-20200610223207117

      <%
        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")%>">
    

    总结:

    1. 定义一个Localed对象
    2. 通过ResourceBoundle.getBundle(base,locale):获取ResourceBundle对象
    3. 通过resourceBundle.getString(“key”):获取对应地区应展现的值

SpringMVC实现国际化

步骤:

  1. 配置文件

        <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

  2. fmt:message 取值

    <fmt:message key="username"/>
    <fmt:message key="password"/>
    

注意:如果在目标方法中使用forward/redirect,那么就不经过视图解析器,之后页面上就会出现?????的样子

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值