Java Web i18n 国际化

  • 国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问

代码

  • 目录
    Java Web i18n 国际化
  • 首先,写配置文件。命名格式为基础名字+地区语言.properties,如基础名字为i18n,语言国家为zh_CN,拼起来的文件名就叫i18n_zh_CN.properties。在文件中写key-value 键值对。
    #中文
    username=用户名
    password=密码
    
    #英文
    username=username
    password=password
    
  • 国际化测试代码
      @Test
      public void localeTest() {
        Locale locale = Locale.getDefault();  // 获取默认信息
        System.out.println(locale); // zh_CN
        System.out.println(locale.getCountry());  // CN
        System.out.println(locale.getLanguage());  // zh
    
        System.out.println(Locale.CHINA);  // zh_CN
        System.out.println(Locale.US);  // en_US
      }
    
      @Test
      public void i18nTest() {
      	// 地区
        Locale locale = Locale.CHINA;
        // 指定响应的目录及基础名字、地区,得到ResourceBundle
        ResourceBundle bundle = ResourceBundle.getBundle("i18n", locale);
        // 向map一样取值
        String username = bundle.getString("username");
        String password = bundle.getString("password");
        System.out.println(username);
        System.out.println(password);
      }
    
  • 在jsp中使用国际化
    <%@ page import="java.util.Locale" %>
    <%@ page import="java.util.ResourceBundle" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>i18n</title>
    </head>
    <body>
    
    <%
        Locale locale = request.getLocale();
        //Locale locale = Locale.US;
        //Locale locale = Locale.CHINA;
        System.out.println(locale);
        ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);
    %>
    	<h1><%=i18n.getString("username")%></h1>
    	<h1><%=i18n.getString("password")%></h1>
    </body>
    </html>
    

利用JSTL标签库实现国际化

  • 导包
    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
  • jsp头部导入
    <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    
  • 初始化
    <%--1 使用标签设置 Locale 信息--%>
    <fmt:setLocale value="<%=request.getLocale()%>"/>
    <%--2 使用标签设置 baseName--%>
    <fmt:setBundle basename="i18n"/>
    
  • 取值
    <h1><fmt:message key="username"/></h1>
    <h1><fmt:message key="password"/></h1>
    
  • 完整代码
    <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>JQuery i18n</title>
    </head>
    <body>
    <%--1 使用标签设置 Locale 信息--%>
    <fmt:setLocale value="<%=request.getLocale()%>"/>
    <%--2 使用标签设置 baseName--%>
    <fmt:setBundle basename="i18n"/>
    
    <h1><fmt:message key="username"/></h1>
    <h1><fmt:message key="password"/></h1>
    
    </body>
    </html>
    
上一篇:Qt国际化


下一篇:vue设置国际化