• i18n 国际化


    目录

    一、i18n 国际化介绍

    二、国际化实现

    1、相关要素介绍

     2、国际化资源 properties 测试

    3、通过请求头国际化页面

    4、通过显示的选择语言类型进行国际化 

    5、JSTL 标签库实现国际化 


    一、i18n 国际化介绍

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

    关于国际化我们想到的最简单的方案就是为不同的国家创建不同的网站,比如苹果公司,他的英文官网是: http://www.apple.com 而中国官网是  http://www.apple.com/cn。

     苹果公司这种方案并不适合全部公司,而我们希望相同的一个网站,而不同人访问的时候可以根据用户所在的区域显示不同的语言文字,而网站的布局样式等不发生改变。

    于是就有了我们说的国际化,国际化总的来说就是同一个网站不同国家的人来访问可以显示出不同的语言。但实际上这种需求并不强烈,一般真的有国际化需求的公司,主流采用的依然是苹果公司的那种方案,为不同的国家创建不同的页面。所以国际化的内容我们了解一下即可。

    国际化的英文  Internationalization,但是由于拼写过长,老外想了一个简单的写法叫做  I18N,代表的是  Internationalization 这个单词,以  I 开头,以  N  结尾,而中间是  18  个字母,所以简写为  I18N。以后我们说  I18N  和国际化是一个意思。

    二、国际化实现

    1、相关要素介绍

     2、国际化资源 properties 测试

    在 src 目录下创建Rescource Bundle包,在里面配置两个语言的配置文件: 

    i18n_en_US.properties    英文

    1. username=username
    2. password=password
    3. sex=sex
    4. age=age
    5. boy=boy
    6. register=register
    7. girl=girl
    8. email=email
    9. submit=submit
    10. reset=reset

    i18n_zh_CN.properties     中文

    1. username=用户名
    2. password=密码
    3. sex=性别
    4. age=年龄
    5. boy=男
    6. girl=女
    7. reset=重置
    8. register=注册
    9. email=邮箱
    10. submit=提交

     国际化测试代码:

    1. public class I18nTest {
    2. @Test
    3. public void testLocal(){
    4. Locale locale = Locale.getDefault();
    5. System.out.println(locale);
    6. //获取所有可用的Locale
    7. for (Locale availableLocale : Locale.getAvailableLocales()) {
    8. System.out.println(availableLocale);
    9. }
    10. // 获取中文,中文的常量的 Locale对象
    11. System.out.println(Locale.CHINA);
    12. // 获取英文,美国的常量的 Locale对象
    13. System.out.println(Locale.US);
    14. }
    15. @Test
    16. public void testI18n(){
    17. Locale locale = Locale.CHINA;
    18. // 通过指定的 basename 和 Locale 对象,读取相应的配置文件,i18n为配置文件前的名字
    19. ResourceBundle bundle = ResourceBundle.getBundle("i18n", locale);
    20. System.out.println("username:" + bundle.getString("username"));
    21. System.out.println("password:" + bundle.getString("password"));
    22. System.out.println("Sex:" + bundle.getString("sex"));
    23. System.out.println("age:" + bundle.getString("age"));
    24. }
    25. }

    3、通过请求头国际化页面

    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. DOCTYPE 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 = request.getLocale();
    18. System.out.println(locale);
    19. // 获取读取包(根据指定的 baseName和Locale读取语言信息)
    20. ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);
    21. %>
    22. <center>
    23. <h1><%=i18n.getString("register")%>h1>
    24. <table>
    25. <form>
    26. <tr>
    27. <td><%=i18n.getString("username")%>td>
    28. <td><input name="username" type="text" />td>
    29. tr>
    30. <tr>
    31. <td><%=i18n.getString("password")%>td>
    32. <td><input type="password" />td>
    33. tr>
    34. <tr>
    35. <td><%=i18n.getString("sex")%>td>
    36. <td><input type="radio" /><%=i18n.getString("boy")%><input type="radio" /><%=i18n.getString("girl")%>td>
    37. tr>
    38. <tr>
    39. <td><%=i18n.getString("email")%>td>
    40. <td><input type="text" />td>
    41. tr>
    42. <tr>
    43. <td colspan="2" align="center">
    44. <input type="reset" value=<%=i18n.getString("reset")%> />  
    45. <input type="submit" value=<%=i18n.getString("submit")%> />td>
    46. tr>
    47. form>
    48. table>
    49. <br /> <br /> <br /> <br />
    50. center>
    51. 国际化测试:
    52. <br /> 1、访问页面,通过浏览器设置,请求头信息确定国际化语言。
    53. <br /> 2、通过左上角,手动切换语言
    54. body>
    55. html>

    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. DOCTYPE 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 locale=null;
    17. String country=request.getParameter("country");
    18. if("cn".equals(country)){
    19. locale=Locale.CHINA;
    20. }else if("usa".equals(country)){
    21. locale=Locale.US;
    22. }else{
    23. locale=request.getLocale();
    24. }
    25. ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);
    26. %>
    27. <a href="i18n.jsp?country=cn">中文a>|
    28. <a href="i18n.jsp?country=usa">englisha>
    29. <center>
    30. <h1><%=i18n.getString("register")%>h1>
    31. <table>
    32. <form>
    33. <tr>
    34. <td><%=i18n.getString("username")%>td>
    35. <td><input name="username" type="text" />td>
    36. tr>
    37. <tr>
    38. <td><%=i18n.getString("password")%>td>
    39. <td><input type="password" />td>
    40. tr>
    41. <tr>
    42. <td><%=i18n.getString("sex")%>td>
    43. <td><input type="radio" /><%=i18n.getString("boy")%><input type="radio" /><%=i18n.getString("girl")%>td>
    44. tr>
    45. <tr>
    46. <td><%=i18n.getString("email")%>td>
    47. <td><input type="text" />td>
    48. tr>
    49. <tr>
    50. <td colspan="2" align="center">
    51. <input type="reset" value=<%=i18n.getString("reset")%> />  
    52. <input type="submit" value=<%=i18n.getString("submit")%> />td>
    53. tr>
    54. form>
    55. table>
    56. <br /> <br /> <br /> <br />
    57. center>
    58. 国际化测试:
    59. <br /> 1、访问页面,通过浏览器设置,请求头信息确定国际化语言。
    60. <br /> 2、通过左上角,手动切换语言
    61. body>
    62. html>

    5、JSTL 标签库实现国际化 

    1. <%--1 使用标签设置 Locale信息--%>
    2. <fmt:setLocale value="" />
    3. <%--2 使用标签设置 baseName--%>
    4. <fmt:setBundle basename=""/>
    5. <%--3 输出指定 key 的国际化信息--%>
    6. <fmt:message key="" />
    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. DOCTYPE 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 信息 --%>
    15. <fmt:setLocale value="${param.locale}" />
    16. <%--2 使用标签设置 baseName--%>
    17. <fmt:setBundle basename="i18n"/>
    18. <a href="i18n_fmt.jsp?locale=zh_CN">中文a>|
    19. <a href="i18n_fmt.jsp?locale=en_US">englisha>
    20. <center>
    21. <h1><fmt:message key="register" />h1>
    22. <table>
    23. <form>
    24. <tr>
    25. <td><fmt:message key="username" />td>
    26. <td><input name="username" type="text" />td>
    27. tr>
    28. <tr>
    29. <td><fmt:message key="password" />td>
    30. <td><input type="password" />td>
    31. tr>
    32. <tr>
    33. <td><fmt:message key="sex" />td>
    34. <td>
    35. <input type="radio" /><fmt:message key="boy" />
    36. <input type="radio" /><fmt:message key="girl" />
    37. td>
    38. tr>
    39. <tr>
    40. <td><fmt:message key="email" />td>
    41. <td><input type="text" />td>
    42. tr>
    43. <tr>
    44. <td colspan="2" align="center">
    45. <input type="reset" value="reset" />" />  
    46. <input type="submit" value="submit" />" />td>
    47. tr>
    48. form>
    49. table>
    50. <br /> <br /> <br /> <br />
    51. center>
    52. body>
    53. html>

  • 相关阅读:
    【Redis】Redis 的基础数据结构 以及 各种数据结构常用命令使用示例
    [译] kubernetes:kube-scheduler 调度器代码结构概述
    【计算机网络学习之路】UDP socket编程
    Vue数据绑定
    【已解决】‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope
    Network 之十 BIOS + MBR、UEFI + GPT、GRUB、BOOTMGR、SYSLINUX、Option ROM
    【专栏】RPC系列(实战)-优雅的序列化
    OmniPlan Pro for Mac v4.8.0中文激活版 项目流程管理工具
    关于华为的BFD
    mysql数据库基础
  • 原文地址:https://blog.csdn.net/qq_51409098/article/details/126232826