• JavaWeb i18n 国际化


    1. 什么是 i18n 国际化?

             国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问。
            关于国际化我们想到的最简单的方案就是为不同的国家创建不同的网站,比如苹果公司,他的英文官网是: http://www.apple.com 而中国官网是 http://www.apple.com/cn
            苹果公司这种方案并不适合全部公司,而我们希望相同的一个网站,而不同人访问的时候可以根据用户所在的区域显示不同的语言文字,而网站的布局样式等不发生改变。
            于是就有了我们说的国际化,国际化总的来说就是同一个网站不同国家的人来访问可以显示出不同的语言。但实际上这种需求并不强烈,一般真的有国际化需求的公司,主流采用的依然是苹果公司的那种方案,为不同的国家创建不同的页面。所以国际化的内容我们了解一下即可。
            国际化的英文 Internationalization ,但是由于拼写过长,老外想了一个简单的写法叫做 I18N ,代表的是 Internationalization这个单词,以 I 开头,以 N 结尾,而中间是 18 个字母,所以简写为 I18N 。以后我们说 I18N 和国际化是一个意思。

    2. 国际化相关要素介绍

     

    3. 国际化资源 properties 测试

    test1:

    1. public void test1() {
    2. // 获取 中国,中文 常量的Locale对象
    3. System.out.println(Locale.CHINA); //zh_CN
    4. // 获取 英文,美国 常量的Local对象
    5. System.out.println(Locale.US); //en_US
    6. // 获取你系统默认的 语言,国家信息
    7. Locale aDefault = Locale.getDefault();
    8. System.out.println(aDefault); //zh_CN
    9. //获取所有可用的 语言,国家信息
    10. for (Locale availableLocale : Locale.getAvailableLocales()) {
    11. System.out.println(availableLocale);
    12. }
    13. }
    配置两个语言的配置文件:
    i18n_en_US.properties 英文
    1. username=username
    2. password=password
    3. age=age
    4. sex=sex
    5. boy=boy
    6. girl=girl
    7. email=email
    8. regist=regist
    9. reset=reset
    10. submit=submit
    i18n_zh_CN.properties 中文
    1. username=用户名
    2. password=密码
    3. age=年龄
    4. sex=性别
    5. boy=男
    6. girl=女
    7. email=邮箱
    8. regist=注册
    9. reset=重置
    10. submit=提交

    test2 国际化测试代码:

    1. public void test2() {
    2. // 得到我们需要的 Locale 对象
    3. Locale china = Locale.CHINA;
    4. // 通过指定的 basename 和 Locale 对象,读取 相应的配置文件
    5. ResourceBundle bundle = ResourceBundle.getBundle("i18n", china);
    6. System.out.println("username="+bundle.getString("username"));
    7. System.out.println("password="+bundle.getString("password"));
    8. System.out.println("age="+bundle.getString("age"));
    9. System.out.println("sex="+bundle.getString("sex"));
    10. System.out.println("boy="+bundle.getString("boy"));
    11. System.out.println("girl="+bundle.getString("girl"));
    12. System.out.println("email="+bundle.getString("email"));
    13. System.out.println("submit="+bundle.getString("submit"));
    14. System.out.println("reset="+bundle.getString("reset"));
    15. System.out.println("regist="+bundle.getString("regist"));
    16. }

    结果:

     

    4. 通过请求头国际化页面

    1. <%@ page import="java.util.Locale" %>
    2. <%@ page import="java.util.ResourceBundle" %>
    3. <%@ page language="java" contentType="text/html; charset=UTF-8"
    4. pageEncoding="UTF-8"%>
    5. html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    6. <html>
    7. <head>
    8. <meta http-equiv="pragma" content="no-cache" />
    9. <meta http-equiv="cache-control" content="no-cache" />
    10. <meta http-equiv="Expires" content="0" />
    11. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    12. <title>Insert title heretitle>
    13. head>
    14. <body>
    15. <%
    16. // 从请求头中获取 Locale 信息(语言)
    17. Locale locale = null;
    18. String country = request.getParameter("country");
    19. if ("cn".equals(country)) {
    20. locale = Locale.CHINA;
    21. } else if ("us".equals(country)) {
    22. locale = Locale.US;
    23. } else {
    24. locale = request.getLocale();
    25. }
    26. // 获取读取包(根据 指定的 baseName 和 Locale 读取 语言信息)
    27. ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);
    28. %>
    29. <a href="i18n.jsp?country=cn">中文a>|
    30. <a href="i18n.jsp?country=us">englisha>
    31. <center>
    32. <h1><%= i18n.getString("regist") %>h1>
    33. <table>
    34. <form>
    35. <tr>
    36. <td><%= i18n.getString("username") %>td>
    37. <td><input name="username" type="text" />td>
    38. tr>
    39. <tr>
    40. <td><%= i18n.getString("password") %>td>
    41. <td><input type="password" />td>
    42. tr>
    43. <tr>
    44. <td><%= i18n.getString("sex") %>td>
    45. <td><input type="radio" /><%= i18n.getString("boy") %>
    46. <input type="radio" /><%= i18n.getString("girl") %>td>
    47. tr>
    48. <tr>
    49. <td><%= i18n.getString("email") %>td>
    50. <td><input type="text" />td>
    51. tr>
    52. <tr>
    53. <td colspan="2" align="center">
    54. <input type="reset" value="<%= i18n.getString("reset") %>" />  
    55. <input type="submit" value="<%= i18n.getString("submit") %>" />td>
    56. tr>
    57. form>
    58. table>
    59. <br /> <br /> <br /> <br />
    60. center>
    61. 国际化测试:
    62. <br /> 1、访问页面,通过浏览器设置,请求头信息确定国际化语言。
    63. <br /> 2、通过左上角,手动切换语言
    64. body>
    65. html>

    结果:

     

     也可以在浏览器中设置默认语言进行切换。

    5. JSTL 标签库实现国际化

    <%--1 使用标签设置 Locale 信息--%>
            <fmt:setLocale value="" />
    <%--2 使用标签设置 baseName--%>
            <fmt:setBundle basename=""/>
    <%--3 输出指定 key 的国际化信息--%>
            <fmt:message key="" />
    1.导包

     

    2. 代码示例:

    1. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    2. <%@ page language="java" contentType="text/html; charset=UTF-8"
    3. pageEncoding="UTF-8" %>
    4. html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    5. <html>
    6. <head>
    7. <meta http-equiv="pragma" content="no-cache"/>
    8. <meta http-equiv="cache-control" content="no-cache"/>
    9. <meta http-equiv="Expires" content="0"/>
    10. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    11. <title>Insert title heretitle>
    12. head>
    13. <body>
    14. <%--1 使用标签设置 Locale 信息 <fmt:setLocale value="" />--%>
    15. <fmt:setLocale value="${param.locale}"/>
    16. <a href="i18n_fmt.jsp?locale=zh_CN">中文a>|
    17. <a href="i18n_fmt.jsp?locale=en_US">englisha>
    18. <%--2 使用标签设置 baseName <fmt:setBundle basename=""/>--%>
    19. <fmt:setBundle basename="i18n"/>
    20. <%--3 输出指定 key 的国际化信息 <fmt:message key="" /> --%>
    21. <center>
    22. <h1><fmt:message key="regist"/>h1>
    23. <table>
    24. <form>
    25. <tr>
    26. <td><fmt:message key="username"/>td>
    27. <td><input name="username" type="text"/>td>
    28. tr>
    29. <tr>
    30. <td><fmt:message key="password"/>td>
    31. <td><input type="password"/>td>
    32. tr>
    33. <tr>
    34. <td><fmt:message key="sex"/>td>
    35. <td><input type="radio"/><fmt:message key="boy"/>
    36. <input type="radio"/><fmt:message key="girl"/>td>
    37. tr>
    38. <tr>
    39. <td><fmt:message key="email"/>td>
    40. <td><input type="text"/>td>
    41. tr>
    42. <tr>
    43. <td colspan="2" align="center">
    44. <input type="reset" value="reset"/>"/>  
    45. <input type="submit" value="submit"/>"/>td>
    46. tr>
    47. form>
    48. table>
    49. <br/> <br/> <br/> <br/>
    50. center>
    51. body>
    52. html>

    结果同上结果

  • 相关阅读:
    SourceTree使用技巧
    PCIe系列专题之二:2.4 Flow Control机制概述
    Linux:ip:rx_dropped; 丢包
    学习计划
    使用逆滤波算法deconvwnr恢复图像回复图像时,产生了很多横竖条纹。解决办法
    质量管理计划创建的负责人以及4大步骤
    我的十年程序员生涯--开篇
    浏览器工作原理分析与首屏加载
    mysql 存储过程 带游标
    LeetCode刷题之数组篇(三)
  • 原文地址:https://blog.csdn.net/weixin_65637841/article/details/126129355