簡體   English   中英

如何在JSP Servlet中創建多語言Web應用程序?

[英]How to create mult language web application in jsp servlet?

我已經創建了Web應用程序,但不確定如何實現印地語等多語言支持。I18N可以解決此問題還是Google翻譯可以做到這一點?

這只是一個大致的想法:

為每種語言制作1個單獨的鍵值對文件

  • 每個單詞或句子都有一個唯一的鍵(hi = Hello,hi = Hola ect ect)
  • 不要將硬編碼的文本放在jsp中
  • 創建一個單例,將在啟動時將所有語言加載到哈希圖中
  • 創建1個標簽,該標簽將根據給定的語言環境和唯一鍵從哈希圖中獲取文本
  • 在jsp <sp:message code="hi" />使用標記
  • 從瀏覽器請求(或用戶的首選項)中獲取語言環境

..或者只是使用Spring為您做所有這些事情。

在這里查看BalusC的答案: 如何使Java Web應用程序國際化?

BalusC:

對於基本的JSP / Servlet Web應用程序,基本方法是將JSTL fmt taglib資源包結合使用。 資源束包含鍵/值對,其中鍵是一個常量,所有語言都相同,並且每種語言的值不同。 資源束通常是由ResourceBundle API加載的屬性文件 但是,可以對此進行自定義,以便您可以從例如數據庫中加載鍵值對。

這是一個示例,該示例如何使用基於屬性文件的資源包使Web應用程序的登錄表單國際化。


  1. 創建以下文件並將它們放在某個包中,例如com.example.i18n (對於Maven,將它們放在src/main/resources內部的包結構中)。

    text.properties (包含默認語言(通常為英語)的鍵/值對

    \n login.label.username =用戶名\n login.label.password =密碼\n login.button.submit =登錄\n

    text_nl.properties (包含荷蘭語( nl )鍵值對)

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

    text_es.properties (包含西班牙語( es )鍵值對)

    \n login.label.username =使用權限\n login.label.password =對比\n login.button.submit = Acceder\n

    資源束文件名應遵循以下模式name_ll_CC.properties _ll部分應為小寫的ISO 693-1語言代碼。 它是可選的,並且僅在存在_CC部分時才需要。 _CC部分應為大寫的ISO 3166-1 Alpha-2國家/地區代碼。 它是可選的,通常僅用於區分特定國家/地區的語言方言,例如美式英語_en_US )和英式英語_en_GB )。


  2. 如果尚未完成,請安裝JSTL。 如果您在Servlet 2.5或更高版本的容器(Tomcat 6.0等)上運行,並且聲明了web.xml符合Servlet 2.5規范,則只需將jstl-1.2.jar放在webapp的/WEB-INF/lib文件夾中。


  3. 創建以下示例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演示英語NederlandsEspañol:

    <c:set var="language">管理當前語言。 如果語言是作為請求參數提供的(通過語言下拉列表),則將對其進行設置。 否則,如果會話中已經預先設置了語言,則請堅持使用。 否則,請在請求標頭中使用用戶提供的語言環境。

    <fmt:setLocale>設置資源束的語言環境。 重要的是,此行 <fmt:setBundle>

    <fmt:setBundle>通過其基本名稱(即完全合格的程序包名稱,直到使用不帶_ll_CC指定符的唯一名稱)初始化資源束。

    <fmt:message>通過指定的包密鑰檢索消息值。

    <html lang="${language}">通知搜索引擎該頁面所使用的語言,以便該頁面不會被標記為重復內容(因此對SEO很有用)。

    選擇另一種語言后,JavaScript會立即提交語言下拉列表,並使用新選擇的語言刷新頁面。


但是,您需要記住,默認情況下使用ISO-8859-1字符編碼讀取屬性文件。 您需要通過Unicode轉義符對它們進行轉義。 可以使用JDK提供的native2ascii.exe工具來完成。 另請參閱本文部分以獲取更多詳細信息。

一個理論替代方法是使用自定義提供捆綁Control加載這些文件為UTF-8,但是這不幸的是沒有通過基本JSTL支持fmt標簽庫。 您需要借助Filter自己全部管理。 有(MVC)框架可以像JSF一樣以更透明的方式處理此問題,另請參見本文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM