zoukankan      html  css  js  c++  java
  • JavaWeb之多语言国际化

    这周打算把国际化、JDBC和XML学习一下,从下周就开始学习三大框架,再坚持一个半月吧就能入门JavaWeb了,上周周末两天过的真是生不如死,两天坐在家里,醒来就写博客,原本在公司也自己操作了一遍,其实不用写也可以,不过想着为了加深印象,还是自己写出来这样印象更深,基础更扎实,学习编程就和当兵一样,平时多流汗,战时少流血,平时解决的bug多了,那以后遇到类似的就会学会避免出错。还是接着上面的博客留下的坑来说。上一博客jsp标签库中留了几个标签,其中就有今天要学的多语言国际化的。

    一、资源国际化、资源本地化

    I18N:Internationalization,资源国际化,I10N,Localization,资源本地化,个人的感觉两者没什么区别,可能是主体不一样,国际化是对于开发运营者来说,本地化对于用户来说。

    二、资源文件编码

    资源文件属性名为properties,保存的是key-value形式的属性对,必须为ASCII字符,由于中文、日文等是采用Unicode字符,所以要对其进行转码。转码可以使用JDK自带的native2ascii.exe工具,位于JDK安装目录的bin文件下,可以使用命令行native2ascii -[options] [inputfile] [outputfile],其中options包括-encoding encoding_name 或reverse.-encoding encoding_name是将文件按照encoding_name指定的格式转化,reverse将编码后的文件还原,encoding可省略,如果指定,一定要与原文件编码方式一致,否则会出现乱码。

    先在E:java文件夹下新建了一个messages.txt的文件,然后写入prompt.hello=您好!。打开命令行输入native2ascii命令,如上图可能会报错,如果报错可能是因为JDK没写入环境变量path中,也可以直接打开jdk的bin文件夹,在其文件夹下使用native2ascii命令,然后会自动输出对应的资源文件。这里我输出的是与源文件文件名一样的,也可以直接输出messages_zh_CN.properties.

    prompt.hello=u60a8u597d!

    三、资源文件的使用

    1.不带参数的资源文件

    在WebContent/WEB-INF下创建classes文件夹,然后在文件夹下创建resources文件夹,之后把编码过的资源文件引入,由于我没在转码时直接转成带有locale的,所以改名为messages_zh_CN.properties.最后创建一个messages.properties资源文件用于做为默认的资源文件,如果找不到就显示这里面的。

    在使用中就要用到上一博客的fmt标签库的标签:<fmt:bundle/><fmt:message/><fmt:setBundle/>

    <fmt:bundle basename="resources/messages" prefix="prompt.">
    <fmt:message key="hello">
    </fmt:message>
    </fmt:bundle>

    <fmt:bundle/><使用basename指定资源文件,如果资源文件有相同的前缀,可以使用prefix,这里messages资源文件用的prompt.hello,所以prefix="prompt.".

    <fmt:message/>:显示资源文件,通过key显示找到对应的value。其实<fmt:message/>还有另外3个属性:var、scope、bundle.

    var:声明var属性,message返回的资源就会存储到var变量中而不写到JSP中。

    scope:这个不说了,用的地方好多。

    bundle:声明被绑定的资源,与setbundle一起使用。

    默认的是中文,如果想验证英文,可以在:<fmt:bundle>上增加设置locale.

    <fmt:setLocale value="en"/>

    2.带参数的资源文件

    在上面的是不带参数的资源文件,但在开发过程中往往有一些变量,这样的话就需要带参数的资源文件。

    <fmt:bundle basename="resources/messages" prefix="prompt.">
    <fmt:message key="hello">
    </fmt:message>
    <br>
    <fmt:message key="info">
    <fmt:param value="${pageContext.request.remoteAddr}"></fmt:param>
    <fmt:param value="${pageContext.request.locale}"></fmt:param>
    <fmt:param value="${pageContext.request.locale.displayLanguage}"></fmt:param>
    </fmt:message>
    </fmt:bundle>

    3.<fmt:setBundle/>标签

    <fmt:setBundle/><fmt:bundle/>两者的关系和<fmt:setTimeZone/><fmt:TimeZone/>两个的关系类似。><fmt:bundle/>只作用的标签范围内,<fmt:setBundle/>标签作用在scope范围内。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <fmt:bundle basename="resources/messages" prefix="prompt.">
    <fmt:message key="hello">
    </fmt:message>
    <br>
    <fmt:message key="info">
    <fmt:param value="${pageContext.request.remoteAddr}"></fmt:param>
    <fmt:param value="${pageContext.request.locale}"></fmt:param>
    <fmt:param value="${pageContext.request.locale.displayLanguage}"></fmt:param>
    </fmt:message>
    </fmt:bundle>
    <br>
    <fmt:setBundle basename="resources/messages" var="resource" scope="request"/>
    <fmt:message bundle="${ resource}" key="prompt.hello"></fmt:message>
    <fmt:message bundle="${ resource}" key="prompt.info">
    <fmt:param>${pageContext.request.remoteAddr}</fmt:param>
    <fmt:param value="${pageContext.request.locale}"></fmt:param>
    <fmt:param value="${pageContext.request.locale.displayLanguage}"></fmt:param>
    </fmt:message>
    </body>
    </html>

    setBundle把资源映射到var="resource"变量中,message利用bundle绑定资源显示。

  • 相关阅读:
    win10家庭版转专业版并激活
    关于vcruntime140D.dll丢失问题
    phpMyAdmin使用教程
    在wamp中直接进入项目
    sublime Text3的使用
    wamp的安装配置
    PHP Web开发入门流程
    PHP与MySQL的亲密接触
    flex 布局 实现电商页面商品展示floor
    html css+div+jquery实现图片轮播
  • 原文地址:https://www.cnblogs.com/5ishare/p/6591481.html
Copyright © 2011-2022 走看看