【发布时间】:2018-06-12 11:55:35
【问题描述】:
我已经创建了网络应用程序但不确定,如何实现多语言支持,如印地语等。I18N 可以解决这个问题还是谷歌翻译可以解决这个问题?
【问题讨论】:
标签: java jsp internationalization
我已经创建了网络应用程序但不确定,如何实现多语言支持,如印地语等。I18N 可以解决这个问题还是谷歌翻译可以解决这个问题?
【问题讨论】:
标签: java jsp internationalization
这只是一个大概的想法:
为每种语言制作 1 个单独的键值对文件
<sp:message code="hi" />
..或者只使用 Spring 为您完成所有这些事情。
【讨论】:
在此处查看 BalusC 的答案:How to internationalize a Java web application?
BalusC:
对于基本的 JSP/Servlet Web 应用程序,基本方法 将使用 JSTL
fmttaglib 与 resource bundles。资源包包含键值对,其中 键是一个常数,对于所有语言都是相同的,并且 值因语言而异。资源包通常是properties files,由ResourceBundleAPI 加载。这个可以 但是可以自定义,以便您可以从 例如数据库。这是一个如何国际化您的登录表单的示例 具有基于属性文件的资源包的 web 应用程序。
创建以下文件并将它们放入某个包中,例如
com.example.i18n(如果是 Maven,则将它们放入包中src/main/resources) 中的结构。login.label.username = 用户名 login.label.password = 密码 login.button.submit = 登录
text.properties(包含默认语言的键值对,通常为英语)
login.label.username = Gebruikersnaam login.label.password = Wachtwoord login.button.submit = 登录
text_nl.properties(包含荷兰语 (nl) 键值对)
login.label.username = 别名 login.label.password = Contraseña login.button.submit = 加速器
text_es.properties(包含西班牙语 (es) 键值对)资源包文件名应遵循以下模式
name_ll_CC.properties。_ll部分应该是小写的ISO 693-1 语言代码。它是可选的,仅在_CC部分存在。_CC部分应该是大写的ISO 3166-1 Alpha-2 国家代码。它是可选的,通常只用于 区分特定国家/地区的语言方言,例如 American English (_en_US) 和 British English (_en_GB)。
如果尚未完成,请安装 JSTL。如果您在 Servlet 2.5 容器或更新版本(Tomcat 6.0 等)上运行并且您的
web.xml是 声明符合 Servlet 2.5 规范,然后放 jstl-1.2.jar 在 webapp 的/WEB-INF/lib文件夹中。
创建以下示例 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" /> JSP/JSTL i18n 演示 英语 荷兰 西班牙文 :
:
<c:set var="language">管理当前语言。如果语言作为请求参数提供(通过语言下拉菜单), 然后它将被设置。否则,如果之前已经设置了语言 在会话中,然后坚持下去。否则使用用户提供的 请求标头中的语言环境。
<fmt:setLocale>设置资源包的区域设置。重要的是,这一行位于<fmt:setBundle>之前。
<fmt:setBundle>通过其基本名称初始化资源包(即完整的限定包名称,直到唯一 没有_ll_CC说明符的名称)。
<fmt:message>通过指定的捆绑键检索消息值。
<html lang="${language}">通知搜索机器人该页面使用什么语言,这样它就不会被标记为重复 内容(因此,有利于 SEO)。The language dropdown will immediately submit by JavaScript when another language is chosen and the page will be refreshed with the 新选择的语言。
但是您需要记住,属性文件是默认的 使用 ISO-8859-1 字符编码读取。你需要逃跑 它们通过 unicode 转义。这可以使用 JDK 提供的
native2ascii.exe工具。另请参阅this article section 了解更多信息 细节。理论上的替代方案是为捆绑包提供自定义
Control将这些文件加载为 UTF-8,但不幸的是 基本 JSTLfmttaglib 不支持。你需要管理 在Filter的帮助下,一切都由您自己完成。有(MVC)框架 它可以以更透明的方式处理这个问题,如 JSF,另见 this article.
【讨论】: