Java Servlet 實戰入門教程-16-servlet i18n 國際化
阿新 • • 發佈:2018-12-13
國際化
常見術語
在我們開始之前,先來看看三個術語:
- 國際化(i18n)
這意味著一個網站提供了不同版本的翻譯成訪問者的語言或國籍的內容。
- 本地化(l10n)
這意味著向網站新增資源,以使其適應特定的地理或文化區域,例如網站翻譯成印地文(Hindi)。
- 區域設定(locale)
這是一個特殊的文化或地理區域。它通常指語言符號後跟一個下劃線和一個國家符號。
區域設定
例如 “en_US” 表示針對 US 的英語區域設定。
當建立一個全球性的網站時有一些注意事項。本教程不會講解這些注意事項的完整細節,但它會通過一個很好的例項向您演示如何通過差異化定位(即區域設定)來讓網頁以不同語言呈現。
servlet 獲取 Local 資訊
Servlet 可以根據請求者的區域設定拾取相應版本的網站,並根據當地的語言、文化和需求提供相應的網站版本。
以下是 request 物件中返回 Locale 物件的方法。
java.util.Locale request.getLocale()
檢測區域設定
下面列出了重要的區域設定方法,您可以使用它們來檢測請求者的地理位置、語言和區域設定。
下面所有的方法都顯示了請求者瀏覽器中設定的國家名稱和語言名稱。
序號 | 方法 | 描述 |
---|---|---|
1 | getCountry() | 該方法以 2 個大寫字母形式的 ISO 3166 格式返回該區域設定的國家/地區程式碼 |
2 | getDisplayCountry() | 該方法返回適合向用戶顯示的區域設定的國家的名稱 |
1 | getLanguage() | 該方法以小寫字母形式的 ISO 639 格式返回該區域設定的語言程式碼 |
1 | getDisplayLanguage() | 該方法返回適合向用戶顯示的區域設定的語言的名稱 |
1 | getISO3Country() | 該方法返回該區域設定的國家的三個字母縮寫 |
1 | getISO3Language() | 該方法返回該區域設定的語言的三個字母的縮寫 |
實戰程式碼
方法測試
- I18nMethodServlet.java
測試 Local 常見的方法。
@WebServlet ("/i18n/method")
public class I18nMethodServlet extends HttpServlet {
private static final long serialVersionUID = -3141800062532020317L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 設定編碼
resp.setContentType("text/plain;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
// 獲取客戶端的區域設定
Locale locale = req.getLocale();
PrintWriter printWriter = resp.getWriter();
printWriter.println("getCountry: " + locale.getCountry());
printWriter.println("getDisplayCountry: " + locale.getDisplayCountry());
printWriter.println("getLanguage: " + locale.getLanguage());
printWriter.println("getDisplayLanguage: " + locale.getDisplayLanguage());
printWriter.println("getISO3Country: " + locale.getISO3Country());
printWriter.println("getISO3Language: " + locale.getISO3Language());
}
}
- 測試
getCountry: CN
getDisplayCountry: 中國
getLanguage: zh
getDisplayLanguage: 中文
getISO3Country: CHN
getISO3Language: zho
指定國際化國家
- 程式碼
@WebServlet("/i18n/spanish")
public class I18nSpanishServlet extends HttpServlet {
private static final long serialVersionUID = 5306996735449856747L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 設定響應內容型別
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
// 設定西班牙語言程式碼
resp.setHeader("Content-Language", "es");
out.println("En Español:");
out.println("¡Hola Mundo!");
}
}
- 測試
En Español: ¡Hola Mundo!
小結
當然了 web 中的 i18n 大都和 spring 結合,只需要在配置檔案中寫一下就好了。
但是原理還是這些東西。