国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java學習筆記—國際化(41)

2019-11-14 23:51:13
字體:
來源:轉載
供稿:網友
java學習筆記—國際化(41)

國際化:internationalization即I18N。

舉例:

本科高校的網站,一般的都有中文和英文兩種頁面風格。因此將這種根據不同用戶群體顯示不同的頁面風格的方式稱之為頁面的國際化。

翻譯 VS 國際化

翻譯:Chrome

國際化:主要做的是頁面的顯示信息的國際化,至于文件等其他的資源是無法進行國際化。

1 國際化的原理

  1. 獲取用戶的本地信息

Locale通過靜態屬性獲取區域對象。

  1. 準備不同區域國家的需要顯示的資源

全部使用PRoperties配置文件進行實現。但是文件名需要按照指定的規則進行書寫。

規范: 基本名_語言名.properties

基本名是隨意的,語言名是固定可以參考瀏覽器的語言。

  1. 根據區域語言信息查找指定的資源進行顯示

ResourceBundle 的靜態方法static ResourceBundle getBundle(String baseName,

Locale locale)

綁定資源的原理:獲取資源基本名和區域語言名鎖定資源名。

String getString(String key)

一 體驗

1. 編寫兩個如下的資源文件

greet_zh.properties

hello=/u4F60/u597D

greet_en.properties

hello=Hello

2. 實現一個如下的java類

public static void main(String[] args) {    // 獲取本地區域信息    Locale locale = Locale.US;    // 綁定資源    ResourceBundle bundler = ResourceBundle.getBundle("cn.itcast.ps.greet", locale);    System.out.println(bundler.getString("hello"));  }

總結:

如果沒有可視化編輯器那么直接使用native2ascii.exe進行中文的轉碼。

國際化變量

1 日期國際化

DateFormat該類主要提供的是以不同的區域顯示不同的日期格式。

根據區域信息格式化和解析日期數據。

static DateFormat getDateInstance(int style, Locale aLocale) à 獲取日期實例

static DateFormat getTimeInstance(int style, Locale aLocale) à 獲取時間實例

static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)à 獲取日期和時間

Date parse(String source) à 解析日期

String format(Object obj) à 格式化日期

舉例:

獲取日期和時間

Long2013年1月21日 下午04時16分41秒January 21, 2013 4:17:27 PM CSTFULL2013年1月21日 星期一 下午04時18分19秒 CSTMonday, January 21, 2013 4:18:37 PM CSTMEDIUM2013-1-21 16:19:33Jan 21, 2013 4:19:45 PMSHORT13-1-21 下午4:201/21/13 4:20 PM

練習:將以下的字符號串解析為日期對象。

String date = “2013年1月21日 下午4:20”;解析為日期對象。

Long Short

 public static void main(String[] args) throws Exception{        //I18NDate();        String date = "2013年1月21日 下午4:20";        Locale locale = Locale.CHINA;        DateFormat format = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, locale);        Date new_date = format.parse(date);        System.out.println(new_date);    }

數字國際化

NumberFormat

static NumberFormat getInstance(Locale inLocale)              ? 國際化普通數字static NumberFormat getCurrencyInstance(Locale inLocale)     ? 國際化貨幣static NumberFormat getPercentInstance(Locale inLocale)        ? 國際化百分比

國際化

String format(Object obj)Number parse(String source)

舉例:

 public static void main(String[] args) throws Exception{        // 獲取國際化普通數字的對象        Locale locale = Locale.CHINA;         NumberFormat format = NumberFormat.getInstance(locale);        String str = format.format(123456.789);        System.out.println(str);        locale = Locale.CHINA;          format = NumberFormat.getCurrencyInstance(locale);         str = format.format(123456.789);         System.out.println(str);                  locale = Locale.CHINA;          format = NumberFormat.getPercentInstance(locale);         str = format.format(0.789);         System.out.println(str);    }

練習:將String str = "¥123.7";解析為數字。

public static void main(String[] args) throws Exception{        //I18NNumber();        String str = "¥123.7";        Locale locale = Locale.CHINA;         NumberFormat format = NumberFormat.getCurrencyInstance(locale);        Number num = format.parse(str);        System.out.println(num.doubleValue()*3);    }

動態文本國際化

public static void main(String[] args) throws Exception{      String str =     "On {0}, a hurricance destroyed {1} houses and caused {2} of damage.";      String date = "Jul 3, 1998 12:30 PM";         DateFormat format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.US);      Date new_date = format.parse(date);            Double money = new Double(1E7);      NumberFormat numfor = NumberFormat.getCurrencyInstance(Locale.CHINA);      String new_str = numfor.format(money);            Object[] os = new Object[]{new_date,new Integer(77),new_str}      MessageFormat msg_for = new MessageFormat(str,Locale.CHINA);      String for_str = msg_for.format(os);      System.out.println(for_str);    }

以上的動態文本國際化每次需要將所有需要國際化的數據單獨的進行國際化好之后逐一的進行填充。因此比較繁瑣,可以使用以下的模式字符串。

public static void main(String[] args) throws Exception{        String pattern = "At {0, time, short} on {0, date}, a hurricance destroyed "            + "{1} houses and caused {2, number, currency} of damage.";        String datetimeString = "Jul 3, 1998 12:30 PM";        DateFormat format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.US);        Date new_date = format.parse(datetimeString);                Object[] os = new Object[]{new_date,new Integer(77),new Double(1E7)};                MessageFormat msg_for = new MessageFormat(pattern,Locale.US);        String for_str = msg_for.format(os);        System.out.println(for_str);    }

案例一:實現登陸的國際化
<body>     <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="in" %>     <in:setLocale value="${pageContext.request.locale}"/>     <in:setBundle basename="cn.itcast.login.greet" var="bund" scope="page"/>     <form action="">        <table align="center" border="1">           <tr>             <td><in:message bundle="${pageScope.bund}" key="name"/></td>             <td><input type="text" name="uname"></td>           </tr>           <tr>             <td><in:message bundle="${pageScope.bund}" key="psw"/></td>             <td><input type="text" name="uname"></td>           </tr>           <tr>             <td colspan="2">                 <input type="submit" value='<in:message bundle="${pageScope.bund}" key="submit"/>'>                 <input type="reset" value='<in:message bundle="${pageScope.bund}" key="reset"/>'>             </td>           </tr>        </table>     </form>  </body>

后期在Struts2.x中需要使用struts的國際化標簽。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临安市| 凤城市| 临沂市| 汝南县| 遂川县| 开江县| 绥化市| 贵德县| 新民市| 洪洞县| 化德县| 扶余县| 平昌县| 平原县| 绥棱县| 韩城市| 哈尔滨市| 府谷县| 宝山区| 巴南区| 浮山县| 舟山市| 邵武市| 恩施市| 曲靖市| 图木舒克市| 江安县| 大名县| 昭苏县| 子洲县| 天峨县| 上思县| 罗定市| 铅山县| 科技| 吉水县| 明水县| 荃湾区| 介休市| 阜平县| 北京市|