如何在jsp servlet中创建多语言Web应用程序?

时间:2018-06-12 11:55:35

标签: java jsp internationalization

我已经创建了Web应用程序,但不确定,如何实现像印地语等多种语言支持.I18N可以解决这个问题,还是谷歌翻译可以做到这一点?

2 个答案:

答案 0 :(得分:0)

这只是一个大致的想法:

为每种语言制作1个单独的键值对文件

  • 每个单词或句子都有一个唯一的密钥(hi = Hello,hi = Hola ect ect)
  • 不要将硬编码文本放入jsp
  • 创建一个单例,在启动时将所有语言加载到一个hashmap中
  • 创建1个标签,该标签将根据给定的区域设置从hashmap获取文本 和唯一的密钥
  • 使用jsp <sp:message code="hi" />
  • 中的标记
  • 从浏览器请求(或用户的偏好)中获取区域设置

..或者只是使用Spring为你做所有这些事情。

答案 1 :(得分:0)

在这里查看BalusC的答案:How to internationalize a Java web application?

BalusC:

  

对于基本的JSP / Servlet webapplication,基本方法   将JSTL fmt taglibresource bundles结合使用   properties files。资源包中包含键值对   键是一个常量,对所有语言都是相同的   每种语言的价值不同。资源包通常是ResourceBundle,由ISO 693-1 API加载。这个可以   但是要进行自定义,以便您可以从中加载键值对   例如数据库。

     

以下是如何国际化您的登录表单的示例   基于属性文件的资源包的webapplication。

           
      
  1. 创建以下文件并将其放入某个包中,例如com.example.i18n(如果是Maven,请将它们放入包装中   src/main/resources)内的结构。

         

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

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

    text_nl.properties(包含荷兰语(nl)键值对)

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

    text_es.properties(包含西班牙语(es)键值对)

    login.label.username = Nombre de usuario
    login.label.password = Contraseña
    login.button.submit = Acceder
    
         

    资源包文件名应遵循以下模式name_ll_CC.properties_ll部分应为小写ISO 3166-1 Alpha-2语言代码。它是可选的,只有在需要时才需要   _CC部分存在。 _CC部分应为大写American English国家/地区代码。它是可选的,通常只用于   区分特定国家/地区的语言,例如British English_en_US)和jstl-1.2.jar_en_GB)。

         
  2.   
  3. 如果尚未完成,请安装JSTL。如果您正在运行Servlet 2.5容器或更新版本(Tomcat 6.0等)并且您的web.xml是   声明符合Servlet 2.5规范,然后就放了   webapp的/WEB-INF/lib文件夹中的this article section

         
  4.   
  5. 创建以下示例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“/&gt;                                                      JSP / JSTL i18n演示                                                                               英语                       荷兰                       西班牙语                                                                    :                                      
                      :                                      
                                                                          

         

    <c:set var="language">管理当前语言。如果语言是作为请求参数提供的(通过语言下拉列表),   然后它将被设置。否则,如果语言之前已经设置过   在会话中,然后坚持它。否则使用提供的用户   请求标头中的区域设置。

         

    <fmt:setLocale>设置资源包的区域设置。重要的是此行之前 <fmt:setBundle>

         

    <fmt:setBundle>按其基本名称(即完整限定的包名称)初始化资源包   没有_ll_CC说明符的名称。)

         

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

         

    <html lang="${language}">通知搜索机构页面所使用的语言,以便它不会被标记为重复   内容(因此,有利于SEO)。

         

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

  6.               

    但是,您需要记住默认情况下属性文件   使用ISO-8859-1字符编码读取。你需要逃脱   他们通过unicode逃脱。这可以使用JDK提供的方法完成   native2ascii.exe工具。有关更多信息,另请参阅Control   详情。

         

    理论上的替代方案是提供一个包含自定义的包   this article将这些文件加载​​为UTF-8,但不幸的是   基本JSTL fmt taglib不支持。你需要管理   这一切都是在Filter的帮助下完成的。有(MVC)框架   它可以以更透明的方式处理这个问题,比如JSF,另见   {{3}}