JavaWeb基礎(chǔ)之Internationalization

即國(guó)際化,又簡(jiǎn)稱為 i18n质蕉。國(guó)際化的目的是讓程序能靈活應(yīng)對(duì)世界不同地區(qū)和國(guó)家的訪問。

1.Locale

本地化對(duì)象,封裝語(yǔ)言翩肌、國(guó)家信息的對(duì)象模暗,由java.util提供

        // 模擬中國(guó)語(yǔ)言等環(huán)境
        // Locale locale = Locale.CHINA;
        Locale locale = Locale.getDefault(); // 當(dāng)前系統(tǒng)默認(rèn)的語(yǔ)言環(huán)境
        System.out.println(locale.getCountry()); // CN 國(guó)家的簡(jiǎn)稱
        System.out.println(locale.getDisplayCountry()); //中國(guó)  國(guó)家名稱
        System.out.println(locale.getLanguage()); // zh 語(yǔ)言簡(jiǎn)稱

        // 模擬美國(guó)國(guó)家
        Locale l_us = Locale.US;
        System.out.println(l_us.getCountry()); //US
        System.out.println(l_us.getDisplayCountry());//美國(guó)
        System.out.println(l_us.getLanguage());//en

2.ResourceBundle

用于描述一個(gè)資源包,并且 ResourceBundle類提供了相應(yīng)的方法getBundle念祭,這個(gè)方法可以根據(jù)來(lái)訪者的國(guó)家地區(qū)自動(dòng)獲取與之對(duì)應(yīng)的資源文件予以顯示

一個(gè)資源包中的每個(gè)資源文件都必須擁有共同的基名兑宇。除了基名,每個(gè)資源文件的名稱中還必須有標(biāo)識(shí)其本地信息的附加部分粱坤。例如:一個(gè)資源包的基名是“myproperties”隶糕,則與中文、英文環(huán)境相對(duì)應(yīng)的資源文件名則為: “myproperites_zh.properties” “myproperites_en.properties”

每個(gè)資源包都應(yīng)有一個(gè)默認(rèn)資源文件站玄,這個(gè)文件不帶有標(biāo)識(shí)本地信息的附加部分枚驻。若ResourceBundle對(duì)象在資源包中找不到與用戶匹配的資源文件,它將選擇該資源包中與用戶最相近的資源文件株旷,如果再找不到再登,則使用默認(rèn)資源文件。例如:myproperites.properties

資源文件的內(nèi)容通常采用“關(guān)鍵字=值”的形式晾剖,軟件根據(jù)關(guān)鍵字檢索值顯示在頁(yè)面上锉矢。一個(gè)資源包中的所有資源文件的關(guān)鍵字必須相同,值則為相應(yīng)國(guó)家的文字齿尽。
并且資源文件中采用的是properties格式文件沽损,所以文件中的所有字符都必須是ASCII字碼,對(duì)于像中文這樣的非ACSII字符循头,須先進(jìn)行編碼绵估。(java提供了一個(gè)native2ascII命令用于編碼)。例:屬性文件是不能保存中文的

實(shí)例:

        // 設(shè)置語(yǔ)言環(huán)境
        Locale locale = Locale.US;
        // Locale locale = Locale.getDefault();

        // 創(chuàng)建工具類對(duì)象ResourceBundle
        ResourceBundle bundle = ResourceBundle.getBundle(
                "cn.itcast.f_i18n.msg", locale);
        // 根據(jù)key獲取配置文件中的值
        System.out.println(bundle.getString("hello"));
        System.out.println(bundle.getString("username"));
        System.out.println(bundle.getString("pwd"));

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 \!

3.國(guó)際化動(dòng)態(tài)文本

3.1 國(guó)際化貨幣

    public void testI18N3() throws Exception {
        // 模擬語(yǔ)言環(huán)境
        Locale locale = Locale.CHINA;
        // 數(shù)據(jù)準(zhǔn)備
        double number = 100;
        // 工具類
        NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
        // 國(guó)際化貨幣
        String m = nf.format(number);
        // 測(cè)試
        System.out.println(m);// ¥100.00
    }

    // 面試題: 代碼計(jì)算: $100 * 10
    @Test
    public void eg() throws Exception {
        String str = "$100";
        int num = 10;

        // 1. 分析str值是哪一國(guó)家的貨幣
        Locale us = Locale.US;
        // 2. 國(guó)際化工具類
        NumberFormat nf = NumberFormat.getCurrencyInstance(us);
        // 3. 解析str國(guó)幣
        Number n = nf.parse(str);

        System.out.println(n.intValue() * num);//1000
    }

3.2.國(guó)際化數(shù)值

    public void testI18N4() throws Exception {
        // 模擬語(yǔ)言環(huán)境
        Locale locale = Locale.CHINA;
        NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
        String str = nf.format(1000000000);
        System.out.println(str);//1,000,000,000
    }

3.3.國(guó)際化日期

    /*
     * 日期 FULL 2015年3月4日 星期三 LONG 2015年3月4日 FULL 2015年3月4日 星期三 MEDIUM 2015-3-4
     * SHORT 15-3-4
     * 
     * 時(shí)間 FULL 下午04時(shí)31分59秒 CST LONG 下午04時(shí)32分37秒 MEDIUM 16:33:00 SHORT 下午4:33
     */
    @Test
    public void testI18N5() throws Exception {

        // 日期格式
        int dateStyle = DateFormat.SHORT;
        // 時(shí)間格式
        int timeStyle = DateFormat.SHORT;

        // 工具類
        DateFormat df = DateFormat.getDateTimeInstance(dateStyle, timeStyle,
                Locale.CHINA);
        String date = df.format(new Date());

        System.out.println(date);// 17-6-9 上午11:29
    }

    // 面試2: 請(qǐng)將時(shí)間值:09-11-28 上午10時(shí)25分39秒 CST贷岸,反向解析成一個(gè)date對(duì)象壹士。
    @Test
    public void eg2() throws Exception {
        String str = "09-11-28 上午10時(shí)25分39秒 CST";
        // 創(chuàng)建DateFormat工具類,國(guó)際化日期
        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
                DateFormat.FULL, Locale.getDefault());
        Date d = df.parse(str);

        System.out.println(d);//Sat Nov 28 10:25:39 CST 2009
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偿警,一起剝皮案震驚了整個(gè)濱河市躏救,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖盒使,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崩掘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡少办,警方通過(guò)查閱死者的電腦和手機(jī)苞慢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)英妓,“玉大人挽放,你說(shuō)我怎么就攤上這事÷溃” “怎么了辑畦?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腿倚。 經(jīng)常有香客問我纯出,道長(zhǎng),這世上最難降的妖魔是什么敷燎? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任暂筝,我火速辦了婚禮,結(jié)果婚禮上硬贯,老公的妹妹穿的比我還像新娘焕襟。我一直安慰自己,他們只是感情好澄成,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布胧洒。 她就那樣靜靜地躺著畏吓,像睡著了一般墨状。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上菲饼,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天肾砂,我揣著相機(jī)與錄音,去河邊找鬼宏悦。 笑死镐确,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饼煞。 我是一名探鬼主播源葫,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼砖瞧!你這毒婦竟也來(lái)了息堂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荣堰,沒想到半個(gè)月后床未,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡振坚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年薇搁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渡八。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啃洋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屎鳍,到底是詐尸還是另有隱情裂允,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布哥艇,位于F島的核電站绝编,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏貌踏。R本人自食惡果不足惜十饥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祖乳。 院中可真熱鬧逗堵,春花似錦、人聲如沸眷昆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亚斋。三九已至作媚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帅刊,已是汗流浹背纸泡。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赖瞒,地道東北人女揭。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栏饮,于是被迫代替她去往敵國(guó)和親吧兔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容