如何国际化/本地化 JSP/Servlet Web 应用程序? [英] How to internationalize/localize a JSP/Servlet web application?
问题描述
我从 Google 了解到,国际化是我可以使我的Web 应用程序以使用所有语言.在国际化的过程中想了解Unicode,所以从此处 和此处.
我能够理解 Unicode,即如何将字符集编码为字节,然后再将字节解码为字符集.但我不知道如何进一步推进.我想学习如何比较字符串,我需要知道如何在我的 Web 应用程序中实现国际化.请问有什么建议吗?请指导我.
我的目标:
我的主要目标是开发一个用于翻译的网络应用程序(英语到阿拉伯语,反之亦然).我想关注国际化.我希望在所有三种浏览器(即 FF、Chrome、IE)中运行我的网络应用程序进行翻译.我如何实现这一目标?
对于基本的 JSP/Servlet web 应用程序,基本方法是使用 JSTL fmt
taglib 结合 资源包.资源包包含键值对,其中键是一个常量,对于所有语言都相同,而值因语言而异.资源包通常是属性文件,由ResourceBundle代码> API.但是,这可以自定义,以便您可以从例如数据库加载键值对.
这是一个如何使用基于属性文件的资源包来国际化 Web 应用程序登录表单的示例.
创建以下文件并将它们放入某个包中,例如
com.example.i18n
(在Maven的情况下,将它们放在src/main/resources
内的包结构中).
<前>login.label.username = 用户名login.label.password = 密码login.button.submit = 登录text.properties
(包含默认语言的键值对,通常是英文)
<前>login.label.username = Gebruikersnaamlogin.label.password = Wachwoodlogin.button.submit = 登录text_nl.properties
(包含荷兰语 (nl
) 键值对)
<前>login.label.username = 用户名login.label.password = Contraseñalogin.button.submit = 加入者text_es.properties
(包含西班牙语(es
)键值对)资源包文件名应遵循以下模式
name_ll_CC.properties
._ll
部分应该是小写的 ISO 693-1语言代码.它是可选的,仅当_CC
部分存在时才需要._CC
部分应该是大写的 ISO 3166-1 Alpha-2 国家代码.它是可选的,通常仅用于区分特定国家/地区的语言方言,例如 美国英语(_en_US
) 和 英国英语(_en_GB
).如果还没有完成,请按照此答案中的说明安装 JSTL:如何安装JSTL?绝对uri:http://java.sun.com/jstl/core 无法解析.
创建以下示例 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 : 不是空语言?语言:pageContext.request.locale}"范围=会话"/><fmt:setLocale value="${language}";/><fmt:setBundle basename="com.example.i18n.text";/><!DOCTYPE html><html lang="${language}"><头><title>JSP/JSTL i18n 演示</title>头部><身体><表格><select id="language"名称=语言"onchange="提交()"><选项值=en"${language == 'en' ?'selected' : ''}>英文</option><选项值=nl"${language == 'nl' ?'selected' : ''}>荷兰</option><选项值=es"${language == 'es' ?'选择' : ''}>Español</option></选择></表单><表单方法=发布"><label for="username"><fmt:message key="login.label.username"/>:</label><输入类型=文本"id=用户名"名称=用户名"><br><label for=password"><fmt:message key=login.label.password"/>:</label><输入类型=密码"id=密码"名称=密码"><br><fmt:message key="login.button.submit";var=buttonValue"/><输入类型=提交"名称=提交"值=${buttonValue}"></表单>