1. 程式人生 > >國際化和本地化

國際化和本地化

如何做到國際化的軟體,要求:

  1. 軟體中儲存特定的字串
  2. 知道瀏覽器當前使用哪種語言(Locale  )
package com.loaderman.demo.f_i18n;

import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

import org.junit.Test;

public class App {

    
// 國際化 - 靜態資料 @Test public void testI18N() throws Exception { // 中文語言環境 Locale locale = Locale.US; // 建立工具類物件ResourceBundle ResourceBundle bundle = ResourceBundle.getBundle("com.loaderman.demo.f_i18n.msg", locale); // 根據key獲取配置檔案中的值 System.out.println(bundle.getString("hello")); System.out.println(bundle.getString(
"username")); System.out.println(bundle.getString("pwd")); } // 國際化 - 動態文字 - 0. 概述 @Test public void testI18N2() throws Exception { // 國際化貨幣 NumberFormat.getCurrencyInstance(); // 國際化數字 NumberFormat.getNumberInstance(); // 國際化百分比 NumberFormat.getPercentInstance();
// 國際化日期 //DateFormat.getDateTimeInstance(dateStyle, timeStyle, aLocale) } // 國際化 - 動態文字 - 1. 國際化貨幣 @Test public void testI18N3() throws Exception { // 模擬語言環境 Locale locale = Locale.CHINA; // 資料準備 double number = 100; // 工具類 NumberFormat nf = NumberFormat.getCurrencyInstance(locale); // 國際化貨幣 String m = nf.format(number); // 測試 System.out.println(m); } //面試題: 程式碼計算: $100 * 10 @Test public void eg() throws Exception { String str = "$100"; int num = 10; // 1. 分析str值是哪一國家的貨幣 Locale us = Locale.US; // 2. 國際化工具類 NumberFormat nf = NumberFormat.getCurrencyInstance(us); // 3. 解析str國幣 Number n = nf.parse(str); System.out.println(n.intValue() * num); } // 國際化 - 動態文字 - 2. 國際化數值 @Test public void testI18N4() throws Exception { // 模擬語言環境 Locale locale = Locale.CHINA; NumberFormat nf = NumberFormat.getNumberInstance(Locale.US); String str = nf.format(1000000000); System.out.println(str); } // 國際化 - 動態文字 - 3. 國際化日期 /* * 日期 * FULL 2015年3月4日 星期三 * LONG 2015年3月4日 * FULL 2015年3月4日 星期三 * MEDIUM 2015-3-4 * SHORT 15-3-4 * * 時間 * FULL 下午04時31分59秒 CST * LONG 下午04時32分37秒 * MEDIUM 16:33:00 * SHORT 下午4:33 * * */ @Test public void testI18N5() throws Exception { // 日期格式 int dateStyle = DateFormat.SHORT; // 時間格式 int timeStyle = DateFormat.SHORT; // 工具類 DateFormat df = DateFormat.getDateTimeInstance(dateStyle, timeStyle, Locale.CHINA); String date = df.format(new Date()); System.out.println(date); } // 面試2: 請將時間值:09-11-28 上午10時25分39秒 CST,反向解析成一個date物件。 @Test public void eg2() throws Exception { String str = "09-11-28 上午10時25分39秒 CST"; // 建立DateFormat工具類,國際化日期 DateFormat df = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.FULL, Locale.getDefault()); Date d = df.parse(str); System.out.println(d); } }

msg.properties

hello=\u4F60\u597D
username=\u7528\u6237\u540D
pwd=\u5BC6\u7801
title=\u767B\u9646\u9875\u9762
submit=\ \u767B\u9646 

msg_en_US.properties

hello=Hello
username=User Name
pwd=Password
title=Login Page
submit=Submit \!

 


Java提供了一個本地化的物件!封裝當前語言、國家、環境等特徵!

package com.loaderman.demo.e_locale;

import java.util.Locale;

import org.junit.Test;

public class App {

    @Test
    //1. 本地化物件:Locale
    // 封裝語言、國家資訊的物件,有java.util提供
    public void testLocale() throws Exception {
        // 模擬中國語言等環境
        //Locale locale = Locale.CHINA;
        Locale locale = Locale.getDefault();            // 當前系統預設的語言環境
        System.out.println(locale.getCountry());           // CN  國家的簡稱
        System.out.println(locale.getDisplayCountry()); // 國家名稱
        System.out.println(locale.getLanguage());        // zh 語言簡稱

        // 模擬美國國家
        Locale l_us = Locale.US;
        System.out.println(l_us.getCountry());
        System.out.println(l_us.getDisplayCountry());
    }
}

 

Jsp頁面國際化

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      <%
      ResourceBundle bundle = ResourceBundle.getBundle("com.loaderman.demo.f_i18n.msg",request.getLocale());
      %>
    <title><%=bundle.getString("title") %></title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
  </head>
  
  <body>
  <form name="frmLogin" action="${pageContext.request.contextPath }/admin?method=login" method="post">
      <table align="center" border="1">
          <tr>
              <td><%=bundle.getString("username") %></td>
              <td>
                  <input type="text" name="userName">
              </td>
          </tr>
          <tr>
              <td><%=bundle.getString("pwd") %></td>
              <td>
                  <input type="password" name="pwd">
              </td>
          </tr>
          <tr>
              <td>
                  <input type="submit" value="<%=bundle.getString("submit") %>">
              </td>
          </tr>
      </table>
  </form>
  </body>
</html>

Jsp頁面國際化 – 使用jstl標籤

JSTL標籤:

         核心標籤庫

         國際化與格式化標籤庫

         資料庫標籤庫(沒用)

         函式庫

       <fmt:setLocale value=""/>        設定本地化物件

       <fmt:setBundle basename=""/>     設定工具類

       <fmt:message></fmt:message>     顯示國際化文字

格式化數值<fmt:formatNumber pattern="#.##" value="100.99"></fmt:formatNumber>

格式化日期:<fmt:formatDate pattern="yyyy-MM-dd" value="${date}"/>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入jstl國際化與格式化標籤庫 --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      <!-- 一、設定本地化物件 -->
      <fmt:setLocale value="${pageContext.request.locale}"/>
      <!-- 二、設定工具類 -->
      <fmt:setBundle basename="com.loaderman.demo.f_i18n.msg" var="bundle"/>

    <title><fmt:message key="title" bundle="${bundle}"></fmt:message></title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
  </head>
  
  <body>
  <form name="frmLogin" action="${pageContext.request.contextPath }/admin?method=login" method="post">
      <table align="center" border="1">
          <tr>
              <td><fmt:message key="username" bundle="${bundle}"></fmt:message></td>
              <td>
                  <input type="text" name="userName">
              </td>
          </tr>
          <tr>
              <td><fmt:message key="pwd" bundle="${bundle}"></fmt:message></td>
              <td>
                  <input type="password" name="pwd">
              </td>
          </tr>
          <tr>
              <td>
                  <input type="submit" value="<fmt:message key="submit" bundle="${bundle}"/>">
              </td>
          </tr>
      </table>
  </form>
  </body>
</html>