Java国际化与spring框架国际化的处理

本文详细介绍了Spring框架中的IOC国际化的使用方法,包括日期、数字和文本的格式化,以及如何通过ResourceBundle实现多语言支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习springIOC时学习到了其国际化的用法,这里总结下自己学习到的知识点,
这里先上两种简单的格式化
日期格式化

        //日期格式化,得到当前系统时间,转换成想要的格式,一般放在项目中的util包里
        String date = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date());
        System.out.println(date);

数字格式化

        //数字格式化,得到自己想要的格式,例如这个最后Console输出12.5,
        String num = new DecimalFormat("#.#").format(12.5345435);
        System.out.println(num);

文本格式化

        //文本格式化,实际应用中应该也只有语言和国家用的多,这里只说这两个,
        Locale locale = Locale.getDefault();//此方法获取默认语言环境的当前值的Java虚拟机实例。
        System.out.println("国家:" + locale.getCountry());
        System.out.println("语言:" + locale.getLanguage());
        //这是得到当地的国家和语言,关于Locale类的具体用法可以查找API,

        //格式化:既然是国际化,那么当然至少针对两种国家或语言啦,先定义两种str再说
        String ch = "黑猫小长真是太帅啦,但为啥还是找不到女朋友呢?";
        String en = "Mr heimao is so smart,but why don't have a girlfriend?";
        //既然是格式化,当然要格式个东西啦,把上面的黑猫小长和帅换啦,可以替换成你想要的才叫格式化呗,不然强耦合太那啥了
        String ch_1 = "{0}真是太{1}啦,{2}";
        String en_1= "Mr {0} is so {1},{2}";
        //语句已经定义好,现在可以格式化了,日期格式化用到SimDateFormat,数字格式化用到DecimalFormat,文本用的是MessageFormat.开干了
        //定义你想要替换上面{0}和{1}处的东西,肯定是个数组涩
        String[] params = {"阅览者","漂亮了","为啥不给小长我一个鼓励捏?"};//中文的
        //开始格式,注意MessageFormat的用发哈,API一下。默认是Locale.getDefault
        String str_zh = new MessageFormat(ch_1,Locale.CHINA).format(params);
        System.out.println(str_zh);
        //如果国际化了,客户想要用英语的呢?格式化en_1涩
        String str_en = new MessageFormat(en_1,Locale.US).format(params);
        System.out.println(str_en);
        //这就是普通格式化,但是实际应用中是用的properties咯,下面继续总结

jdk资源文本格式化

/*
         * 1.资源的命名,便于java虚拟机解析,是自动解析 的,后面总结
         * 2.加载资源,指定国家,java虚拟机自动匹配进去
         * 3.解析getString方法,找到properties中的key,格式化其value
         * */
        /*首先定义资源名字,格式为:<资源名>_<国家>_<语言> 
         * eg:resources_zh_CN.properties,美国就是en_US,
         * 我定义了两个properties,分别是resources_zh_CN.properties
         * 和resources_en_US.properties,
         * 注意在上面zh_CN中汉字会自动转换成一种unicode码,如果你需要翻译这种码或者转换
         * ,在你下载的jdk目录下的bin目录下有native2ascii.exe就是自动转换的,
         */
        //资源统一管理需要用到ResourceBundle类,因为我的资源文件在具体的包类,要用绝对地址
        ResourceBundle bundle_zh = ResourceBundle.getBundle("java_util/resources",Locale.CHINA);//根据后面的Locale.CHINA,java虚拟机自动补全_zh_CN.properties.
        ResourceBundle bundle_en = ResourceBundle.getBundle("java_util/resources",Locale.US);//根据后面的Locale.US,java虚拟机自动补全_en_US.properties.
        System.out.println(bundle_zh.getString("name") + "======" + bundle_zh.getString("age") + "=====" + bundle_zh.getString("profession"));
        System.out.println(bundle_en.getString("name") + "======" + bundle_en.getString("age") + "=====" + bundle_en.getString("profession"));
        //实现系统传的时候,自己定义要用那种国家,那种语言
        Locale locale = new Locale("en","us");
        ResourceBundle bundle = ResourceBundle.getBundle("java_util/resources",locale);
        System.out.println(bundle.getString("name") + "======" + bundle.getString("age") + "=====" + bundle.getString("profession"));

        //格式化资源文件中的age和年龄,只实例zh文件中的,将age和profession改了,需要用到MessageFormat类
        /*
         * name = {0}\u732B\u5C0F{1}
            age = 22
            profession = \u5B66\u751F   
         * */
        String[] params = {"老","大"};
        ResourceBundle bundle_geshihua = ResourceBundle.getBundle("java_util/resources",Locale.CHINA);
        String str = new MessageFormat(bundle_geshihua.getString("name")).format(params);
        System.out.println(str);
        //这就是不用框架的格式化了,后面再总结下学到的spring中的格式化

spring国际化

    //首先配置bean
        <!-- 配置国际化资源 -->
    <bean id="messageResource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
            <list><value>com/heimao/test/resources</value></list>
        </property>
    </bean>
    // 用applicationcontext取到对象
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");
        ResourceBundleMessageSource resource = (ResourceBundleMessageSource) context.getBean("messageResource");
        //定义参数
        Object[] params = {"晴朗","甩火腿"};
        String str = resource.getMessage("name", params,Locale.CHINA);//很好理解,参数1取到key为name的值,参数2用params的值去格式化,参数3取到zh_CN这个资源文件
        System.out.println(str);
        //当然自己也可以去封装这个方法,利用jdk那个原理就行了。这就是今天总结的国际化,这些都可以用在项目中登录时选择语言,国家相对的就对项目国际化,利用jsp中的自定义标签和函数很好解决,后面有时间在复习一下自定义标签与自定义函数

欧了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值