JAVA实现国际化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29956725/article/details/86536796

1 Java国际化的思路

Java程序的国际化的思路是将程序中的标签、提示等信息放在资源文件中,程序需要支持哪些国家、语言环境,就对应提供相应的资源文件。资源文件是key-value对,每个资源文件中的key是不变的,但value则随不同国家、语言改变

2Java程序的国际化主要通过如下三个类完成

Ø java.util.ResourceBundle:用于加载一个国家、语言资源包。

Ø java.util.Locale:用于封装一个特定的国家/区域、语言环境。

Ø java.text.MessageFormat:用于格式化带占位符的字符串。

为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是很多key-value对。其中key是程序使用的部分,而value则是程序界面的显示字符串。

资源文件的命名可以有如下三种形式:

Ø baseName _ language _country.properties 

Ø baseName _language.properties 

Ø baseName.properties

其中baseName是资源文件的基本名,用户可以自由定义。而language和country都不可随意变化,必须是Java所支持的语言和国家。

3 Java支持的语言和国家

事实上,Java不可能支持所有国家和语言,如需要获取Java所支持的语言和国家,可调用Locale类的getAvailableLocale方法获取,该方法返回一个Locale数组,该数组里包含了Java所支持的语言和国家

package com.homecredit.smt.tipper;

import java.util.Locale;
import java.util.ResourceBundle;

public class LocaleList {
    public static void main(String[] args) {
        // 返回Java所支持的全部国家和语言的数组
        Locale[] localeList = Locale.getAvailableLocales();
        // 遍历数组的每个元素,依次获取所支持的国家和语言
        for (int i = 0; i < localeList.length; i++) {
            // 打印出所支持的国家和语言
            System.out.println(localeList[i].getDisplayCountry() + "=" + localeList[i].getCountry() + " "
                    + localeList[i].getDisplayLanguage()
                    + "=" + localeList[i].getLanguage());
        }
        
        // 取得系统默认的国家/语言环境
        Locale myLocale = Locale.getDefault();
        // 根据指定国家/语言环境加载资源文件
        ResourceBundle bundle = ResourceBundle.getBundle("messages", myLocale);
        // 打印从资源文件中取得的消息
        System.out.println(bundle.getString("customer.name.label.default"));
    }
}

------------------------------------------------------------------------------------------------------------------

= =
阿拉伯联合酋长国=AE 阿拉伯文=ar
约旦=JO 阿拉伯文=ar
叙利亚=SY 阿拉伯文=ar
克罗地亚=HR 克罗地亚文=hr
比利时=BE 法文=fr
巴拿马=PA 西班牙文=es
马耳他=MT 马耳他文=mt
委内瑞拉=VE 西班牙文=es
= 保加利亚文=bg
台湾地区=TW 中文=zh
= 意大利文=it
= 朝鲜文=ko
= 乌克兰文=uk
= 拉托维亚文(列托)=lv
丹麦=DK 丹麦文=da
波多黎哥=PR 西班牙文=es
越南=VN 越南文=vi
美国=US 英文=en
黑山=ME 塞尔维亚文=sr
瑞典=SE 瑞典文=sv
玻利维亚=BO 西班牙文=es
新加坡=SG 英文=en
巴林=BH 阿拉伯文=ar
= 葡萄牙文=pt
沙特阿拉伯=SA 阿拉伯文=ar
= 斯洛伐克文=sk
也门=YE 阿拉伯文=ar
印度=IN 印地文=hi
= 爱尔兰文=ga
马耳他=MT 英文=en
芬兰=FI 芬兰文=fi
= 爱沙尼亚文=et
= 瑞典文=sv
= 捷克文=cs
波斯尼亚和黑山共和国=BA 塞尔维亚文=sr
= 希腊文=el
乌克兰=UA 乌克兰文=uk
= 匈牙利文=hu
瑞士=CH 法文=fr
= 印度尼西亚文=in
阿根廷=AR 西班牙文=es
埃及=EG 阿拉伯文=ar
日本=JP 日文=ja
萨尔瓦多=SV 西班牙文=es
巴西=BR 葡萄牙文=pt
= 白俄罗斯文=be
冰岛=IS 冰岛文=is
捷克共和国=CZ 捷克文=cs
= 西班牙文=es
波兰=PL 波兰文=pl
= 土耳其文=tr
西班牙=ES 加泰罗尼亚文=ca
塞尔维亚及黑山=CS 塞尔维亚文=sr
马来西亚=MY 马来文=ms
= 克罗地亚文=hr
= 立陶宛文=lt
西班牙=ES 西班牙文=es
哥伦比亚=CO 西班牙文=es
保加利亚=BG 保加利亚文=bg
= 阿尔巴尼亚文=sq
= 法文=fr
= 日文=ja
波斯尼亚和黑山共和国=BA 塞尔维亚文=sr
= 冰岛文=is
巴拉圭=PY 西班牙文=es
= 德文=de
厄瓜多尔=EC 西班牙文=es
美国=US 西班牙文=es
苏丹=SD 阿拉伯文=ar
= 英文=en
罗马尼亚=RO 罗马尼亚文=ro
菲律宾=PH 英文=en
= 加泰罗尼亚文=ca
突尼斯=TN 阿拉伯文=ar
黑山=ME 塞尔维亚文=sr
危地马拉=GT 西班牙文=es
= 斯洛文尼亚文=sl
韩国=KR 朝鲜文=ko
塞浦路斯=CY 希腊文=el
墨西哥=MX 西班牙文=es
俄罗斯=RU 俄文=ru
洪都拉斯=HN 西班牙文=es
香港=HK 中文=zh
挪威=NO 挪威文=no
匈牙利=HU 匈牙利文=hu
泰国=TH 泰文=th
伊拉克=IQ 阿拉伯文=ar
智利=CL 西班牙文=es
= 芬兰文=fi
摩洛哥=MA 阿拉伯文=ar
爱尔兰=IE 爱尔兰文=ga
= 马其顿文=mk
土耳其=TR 土耳其文=tr
爱沙尼亚=EE 爱沙尼亚文=et
卡塔尔=QA 阿拉伯文=ar
= 塞尔维亚文=sr
葡萄牙=PT 葡萄牙文=pt
卢森堡=LU 法文=fr
阿曼=OM 阿拉伯文=ar
= 泰文=th
阿尔巴尼亚=AL 阿尔巴尼亚文=sq
多米尼加共和国=DO 西班牙文=es
古巴=CU 西班牙文=es
= 阿拉伯文=ar
= 俄文=ru
新西兰=NZ 英文=en
塞尔维亚=RS 塞尔维亚文=sr
瑞士=CH 德文=de
乌拉圭=UY 西班牙文=es
= 马来文=ms
希腊=GR 希腊文=el
以色列=IL 希伯来文=iw
南非=ZA 英文=en
泰国=TH 泰文=th
= 印地文=hi
法国=FR 法文=fr
奥地利=AT 德文=de
= 荷兰文=nl
挪威=NO 挪威文=no
澳大利亚=AU 英文=en
= 越南文=vi
荷兰=NL 荷兰文=nl
加拿大=CA 法文=fr
拉脱维亚=LV 拉托维亚文(列托)=lv
卢森堡=LU 德文=de
哥斯达黎加=CR 西班牙文=es
科威特=KW 阿拉伯文=ar
= 塞尔维亚文=sr
利比亚=LY 阿拉伯文=ar
= 马耳他文=mt
瑞士=CH 意大利文=it
= 丹麦文=da
德国=DE 德文=de
阿尔及利亚=DZ 阿拉伯文=ar
斯洛伐克=SK 斯洛伐克文=sk
立陶宛=LT 立陶宛文=lt
意大利=IT 意大利文=it
爱尔兰=IE 英文=en
新加坡=SG 中文=zh
= 罗马尼亚文=ro
加拿大=CA 英文=en
比利时=BE 荷兰文=nl
= 挪威文=no
= 波兰文=pl
中国=CN 中文=zh
日本=JP 日文=ja
希腊=GR 德文=de
塞尔维亚=RS 塞尔维亚文=sr
= 希伯来文=iw
印度=IN 英文=en
黎巴嫩=LB 阿拉伯文=ar
尼加拉瓜=NI 西班牙文=es
= 中文=zh
马其顿王国=MK 马其顿文=mk
白俄罗斯=BY 白俄罗斯文=be
斯洛文尼亚=SI 斯洛文尼亚文=sl
秘鲁=PE 西班牙文=es
印度尼西亚=ID 印度尼西亚文=in
英国=GB 英文=en
hello

4. 利用URLClassLoader 来读取指定文件路径下的配置  

 public static void main(String[] args) throws MalformedURLException {
        String messageFolder = "D:/MyWorkSpacePractice/TipService/tipper-service-conf/src/main/resources/conf/dev/tipper-service-conf/i18n";
        URI urI = new File(messageFolder).toURI();
        URL messageFileUrl = urI.toURL();

        ClassLoader classLoader = new URLClassLoader(new URL[] { messageFileUrl });
 
        ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.getDefault(), classLoader);

        // 打印从资源文件中取得的消息
        System.out.println(bundle.getString("customer.name.label.default"));
    }

猜你喜欢

转载自blog.csdn.net/qq_29956725/article/details/86536796