☰
【JavaWeb】i18n(320-325)
2026/10/30 1:17:12 网站建设 项目流程

320.i18n-什么是i18n国际化

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

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

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

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

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

321.i18n-i18n国际化三要素介绍

322.i18n-i18n国际化基础示例

配置两个语言的配置文件:
i18n_en_US.properties 英文

username=usernamepassword=passwordsex=sexage=ageregist=registboy=boyemail=emailgirl=girlreset=resetsubmit=submit

i18n_zh_CN.properties 中文

username=用户名password=密码sex=性别age=年龄regist=注册boy=男girl=女email=邮箱reset=重置submit=提交

国际化测试代码:

packagecom.atguigu.i18n;importorg.junit.Test;importjava.util.Locale;importjava.util.ResourceBundle;publicclassI18nTest{@TestpublicvoidtestLocale(){// 获取你系统默认的语言。国家信息// Locale locale = Locale.getDefault();// System.out.println(locale);// for (Locale availableLocale : Locale.getAvailableLocales()) {// System.out.println(availableLocale);// }// 获取中文,中文的常量的Locale对象System.out.println(Locale.CHINA);// 获取英文,美国的常量的Locale对象System.out.println(Locale.US);}@TestpublicvoidtestI18n(){// 得到我们需要的Locale对象Localelocale=Locale.CHINA;// 通过指定的basename和Locale对象,读取 相应的配置文件ResourceBundlebundle=ResourceBundle.getBundle("i18n",locale);System.out.println("username:"+bundle.getString("username"));System.out.println("password:"+bundle.getString("password"));System.out.println("Sex:"+bundle.getString("sex"));System.out.println("age:"+bundle.getString("age"));}}

323.i18n-通过请求头实现国际化

<%@ page import="java.util.Locale" %> <%@ page import="java.util.ResourceBundle" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="pragma"content="no-cache"/><metahttp-equiv="cache-control"content="no-cache"/><metahttp-equiv="Expires"content="0"/><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><% // 从请求头中获取Locale信息(语言) Locale locale = null; String country = request.getParameter("country"); if ("cn".equals(country)) { locale = Locale.CHINA; } else if ("usa".equals(country)) { locale = Locale.US; } else { locale = request.getLocale(); } System.out.println(locale); // 获取读取包(根据 指定的baseName和Locale读取 语言信息) ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale); %><ahref="i18n.jsp?country=cn">中文</a>|<ahref="i18n.jsp?country=usa">english</a><center><h1><%=i18n.getString("regist")%></h1><table><form><tr><td><%=i18n.getString("username")%></td><td><inputname="username"type="text"/></td></tr><tr><td><%=i18n.getString("password")%></td><td><inputtype="password"/></td></tr><tr><td><%=i18n.getString("sex")%></td><td><inputtype="radio"/><%=i18n.getString("boy")%><inputtype="radio"/><%=i18n.getString("girl")%></td></tr><tr><td><%=i18n.getString("email")%></td><td><inputtype="text"/></td></tr><tr><tdcolspan="2"align="center"><inputtype="reset"value="<%=i18n.getString("reset")%>" />&nbsp;&nbsp;<inputtype="submit"value="<%=i18n.getString("submit")%>" /></td></tr></form></table><br/><br/><br/><br/></center>国际化测试:<br/>1、访问页面,通过浏览器设置,请求头信息确定国际化语言。<br/>2、通过左上角,手动切换语言</body></html>

324.i18n-通过显示语言类型选择实现国际化

325.i18n-使用JSTL标签库fmt实现国际化

<%--1 使用标签设置Locale 信息--%><fmt:setLocalevalue=""/><%--2 使用标签设置baseName--%><fmt:setBundlebasename=""/><%--3 输出指定key的国际化信息--%><fmt:messagekey=""/>

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询