栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使Java Web应用程序国际化?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使Java Web应用程序国际化?

对于基本的JSP / Servlet Web应用程序,基本方法是将JSTL fmttaglib与资源包结合使用。资源束包含键/值对,其中键是一个常量,所有语言都相同,并且每种语言的值不同。资源束通常是由API 加载的属性文件ResourceBundle。但是,可以对此进行自定义,以便你可以从例如数据库中加载键值对。

这是一个示例,该示例如何使用基于属性文件的资源包使Web应用程序的登录表单国际化。

  1. 创建以下文件,并将其放入某个包中,例如com.example.i18n(对于Maven,将其放入内部的包结构中src/main/resources)。

text.properties
(包含默认语言(通常为英语)的键/值对)

ogin.label.username = Usernamelogin.label.password = Passwordlogin.button.submit = Sign in

text_nl.properties
(contains Dutch (nl) key-value pairs)

login.label.username = Gebruikersnaamlogin.label.password = Wachtwoordlogin.button.submit = Inloggen

text_es.properties
(contains Spanish (es) key-value pairs)

login.label.username = Nombre de usuariologin.label.password = Contraseñalogin.button.submit = Acceder

资源束文件名应遵循以下模式

name_ll_CC.properties
。该_ll部分应为小写的ISO 693-1语言代码。它是可选的,并且仅在
_CC
存在该部件时才需要。该
_CC
部分应为大写的ISO 3166-1 Alpha-2国家/地区代码。它是可选的,通常仅用于区分特定国家/地区的语言方言,例如美式英语(
_en_US
)和英式英语(
_en_GB
)。

  1. 如果尚未完成,请安装JSTL。如果你在Servlet 2.5或更高版本的容器(Tomcat 6.0等)上运行,并且web.xml声明你符合Servlet 2.5规范,则只需将jstl-1.2.jar放在webapp的/WEB-INF/lib文件夹中。

  2. 创建以下示例JSP文件并将其放在Web内容文件夹中。

login.jsp<%@ page pageEncoding="UTF-8" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" /><fmt:setLocale value="${language}" /><fmt:setBundle basename="com.example.i18n.text" /><!DOCTYPE html><html lang="${language}">    <head>        <title>JSP/JSTL i18n demo</title>    </head>    <body>        <form> <select id="language" name="language" onchange="submit()">     <option value="en" ${language == 'en' ? 'selected' : ''}>English</option>     <option value="nl" ${language == 'nl' ? 'selected' : ''}>Nederlands</option>     <option value="es" ${language == 'es' ? 'selected' : ''}>Español</option> </select>        </form>        <form method="post"> <label for="username"><fmt:message key="login.label.username" />:</label> <input type="text" id="username" name="username"> <br> <label for="password"><fmt:message key="login.label.password" />:</label> <input type="password" id="password" name="password"> <br> <fmt:message key="login.button.submit" var="buttonValue" /> <input type="submit" name="submit" value="${buttonValue}">        </form>    </body></html>

<c:set var="language">
管理当前语言。如果语言是作为请求参数提供的(通过语言下拉列表),则将对其进行设置。否则,如果先前已在会话中设置了语言,则请坚持使用它。否则,请在请求标头中使用用户提供的语言环境。

<fmt:setLocale>
设置了资源包的语言环境。重要的是,这条线是之前的
<fmt:setBundle>

<fmt:setBundle>
通过其基本名称初始化资源包(即,完全限定的包名称,直到与没有唯一名称
_ll_CC
指定符)。

所述

<fmt:message>
检索由指定捆密钥的消息值。

<html lang="${language}">
通知searchbots的页面是什么语言,这样就不会被标记为重复的内容(因此,有利于搜索引擎优化)。

当选择其他语言时,Javascript将立即提交语言下拉列表,并且页面将使用新选择的语言刷新。

但是,你需要记住,默认情况下使用ISO-8859-1字符编码读取属性文件。你将需要通过Unipre转义符对它们进行转义。这可以使用JDK提供的

native2ascii.exe
工具来完成。另请参阅本文部分以获取更多详细信息。

一种理论上的选择是提供一个带有自定义的捆绑包,以

Control
将这些文件作为UTF-8加载,但是不幸的是,基本JSTL
fmt
taglib 不支持该捆绑包。你将需要在的帮助下自己进行管理Filter。有(MVC)框架可以像JSF一样以更透明的方式处理此问题,



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号