当前位置: 首页 > 面试题库 >

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

钱志
2023-03-14
问题内容

我从Google得知,国际化是使我的Web应用程序使用所有语言的过程。我想了解Unicode的国际化过程,所以我从这里到那里了解了Unicode 。

我能够了解Unicode,即如何将一个字符集设置为编码为字节,然后再将字节解码为字符集。但是我不知道如何进一步前进。我想学习如何比较字符串,还需要知道如何在Web应用程序中实现国际化。有什么建议吗?请指导我。

我的目标:

我的主要目标是开发一个Web翻译应用程序(英语到阿拉伯语,反之亦然)。我想关注国际化。我希望在FF,Chrome和IE这三种浏览器中都可以运行我的网络应用程序进行翻译。我该如何实现?


问题答案:

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

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

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

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

ogin.label.username = Username
login.label.password = Password
login.button.submit = Sign in

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

login.label.username = Gebruikersnaam
login.label.password = Wachtwoord
login.button.submit = Inloggen

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

login.label.username = Nombre de usuario
login.label.password = Contraseña
login.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字符编码读取属性文件。你将需要通过Unicode转义符对它们进行转义。这可以使用JDK提供的native2ascii.exe工具来完成。另请参阅本文部分以获取更多详细信息。

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



 类似资料:
  • 我目前正在开发一个PHP Web应用程序,需要有法语和英语版本。我环顾四周,发现Gettext()功能提供了最好的性能。 我生成了我的。使用命令创建pot文件 并成功地生成了一个。锅铲。我使用PoEdit生成消息。采购订单文件和创建的邮件。瞬间 以下是我的服务器文件: 我在php文件中设置了这样的语言环境: 但我只看到标签,没有看到翻译。。。我试着用'fr_fr'代替'fr_fr.UTF-8'和各

  • 问题内容: 在我当前的项目中,我们正在考虑逐步淘汰旧的表示层,并用更现代,更知名的东西代替它。由于各种原因,选择了JSP作为技术。可能与Apache Tiles结合使用。我也许应该提到,如果这很重要的话,我们将在后面使用Spring。 国际化是一项要求,特别是在以用户语言显示文本消息方面。令我感到惊讶的是,关于这方面的信息并不像我预期的那么多。 我发现的是JSTL 名称空间。特别是与一起使用。但是

  • 目录 4.1 编写适应国际化的应用程序 4.2 使用 POSIX.1 本地语言支持 (NLS) 的本地化消息 4.1 编写适应国际化的应用程序 为了使你的程序对于使用其他语言的用户更加有用, 我们希望你的程序应该国际化。 GNU的gcc编译器和GUI库比如QT或者GTK等通过对字符串的特殊处理来支持国际化。 生成一个支持国际化的程序非常容易。 它使得发布者很快的把你的程序移植成其他语言。 请参看详

  • 我想把我的项目换成基于spring的产品。 我的第一步是将我的java web应用程序从一个生成的WAR文件转换成一个独立的可执行jar,它由Spring引导驱动。 让我们从GITHUB获取一个开源Web应用示例。vaadinspringweb应用程序 网络。xml文件可以在这里找到。 根上下文文件可以在这里找到。 我希望有一些指导我执行转换。 我还提交了Spring启动项目中的一个问题。

  • 问题内容: Hibernate验证程序是否支持国际化。我看到了罐子,可以看到各种ValidationMessages.properties文件。 我们是否可以创建自己的将国际化的自定义错误消息?我不想使用Hibernate验证程序默认提供的错误消息。 我们需要使用我们自己的自定义消息,它们应该被国际化。 Hibernate验证程序支持哪些语言。在jar中,我看到了英语,法语,德语,土耳其语和蒙古语

  • 我正在开发一个使用Hibernate的简单JSF应用程序。我将所有必需的库导入WEB-INF/lib文件夹,并将它们指向类路径。但是当我尝试编译它时,我遇到了错误: 这是我创建SessionFactory并使用它的代码: 我在这里使用它: 那我做错了什么?我该怎么解决这个问题?