[英]How to create mult language web application in jsp servlet?
我已經創建了Web應用程序,但不確定如何實現印地語等多語言支持。I18N可以解決此問題還是Google翻譯可以做到這一點?
這只是一個大致的想法:
為每種語言制作1個單獨的鍵值對文件
<sp:message code="hi" />
使用標記 ..或者只是使用Spring為您做所有這些事情。
在這里查看BalusC的答案: 如何使Java Web應用程序國際化?
BalusC:
對於基本的JSP / Servlet Web應用程序,基本方法是將JSTL
fmt
taglib與資源包結合使用。 資源束包含鍵/值對,其中鍵是一個常量,所有語言都相同,並且每種語言的值不同。 資源束通常是由ResourceBundle
API加載的屬性文件 。 但是,可以對此進行自定義,以便您可以從例如數據庫中加載鍵值對。這是一個示例,該示例如何使用基於屬性文件的資源包使Web應用程序的登錄表單國際化。
創建以下文件並將它們放在某個包中,例如
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
)。如果尚未完成,請安裝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演示英語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.