`
xieyan30
  • 浏览: 49096 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

spring 国际化(1)

 
阅读更多

spring中提供了两个主要的国际化支持类

1,org.springframework.context.support.ResourceBundleMessageSource

2,org.springframework.context.support.ReloadableResourceBundleMessageSource

他们都是基于java的java.util.ResourceBundle基础类实现,

都实现了org.springframework.context.MessageSource接口。

(ResourceBundle加载资源时,按照这个顺序查找资源:

①指定locale对应的资源文件,存在则结束,不存在往下继续查找

②本机对应的locale对应的资源文件,存在则结束,不存在往下继续查找

③默认指定的资源文件,存在则结束,不存在往下继续查找

④上记都不存在时,抛出异常。

他们允许仅通过资源名加载国际化资源。

ReloadableResourceBundleMessageSource允许在不重启系统的情况下,更新资源信息。

 

看下下面的例子。

1,为了示例,我建了4个资源文件,分别是

application_en_US.properties

greeting.morning=good morning!

application_zh_CN.properties

greeting.morning=\u65e9\u4e0a\u597d

application_ja_JP.properties(我电脑是日文系统--本地系统默认的本地化对象对应的资源)

greeting.morning=\u304a\u65e9\u3046\u3054\u3056\u3044\u307e\u3059

application.properties(默认的资源)

greeting.morning=good morning!

 

2,配置资源文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">

    <bean id="resource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>spring3/local/application</value>
            </list>
        </property>
    </bean>

    <bean id="reloadableResource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>spring3/local/application</value>
            </list>
        </property>
        <property name="cacheSeconds" value="5"/><!-- 资源刷新间隔时间 -->
    </bean>

</beans>

 3,测试

package spring3.local;

import java.util.Locale;

import org.springframework.context.ApplicationContext;
import org.springframework.context.MessageSource;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	public static void main(String[] args) throws InterruptedException {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"spring3/local/resource.xml");

		// 运行时不需要刷新资源文件可以用下面方式
		MessageSource resource = (MessageSource) context.getBean("resource");
		System.out.println("CHINA:"
				+ resource.getMessage("greeting.morning", null, Locale.CHINA));
		System.out.println("JAPAN:"
				+ resource.getMessage("greeting.morning", null, Locale.JAPAN));
		System.out.println("US:"
				+ resource.getMessage("greeting.morning", null, Locale.US));
		System.out.println("CANADA:"
				+ resource.getMessage("greeting.morning", null, Locale.CANADA));
		System.out.println();

		// 运行时想不停止服务刷新资源文件可以用下面方式
		resource = (MessageSource) context.getBean("reloadableResource");
		System.out.println("修改前US:"
				+ resource.getMessage("greeting.morning", null, Locale.US));

		// 修改文件application_en_US.properties
		// greeting.morning=good morning!
		// -->greeting.morning=good night!
		Thread.sleep(20000);
		System.out.println("修改后US:"
				+ resource.getMessage("greeting.morning", null, Locale.US));

	}
}

 测试结果:

CHINA:早上好
JAPAN:お早うございます
US:good morning!
CANADA:お早うございます

修改前US:good morning!
修改后US:good night!

 此处可以说明:

(1),canada对应的资源文件不存在,他按照前面红字所示顺序首先查找我本机的locale对应的资源文件,如果找到,则输出这个资源文件中的信息。

(2),用ReloadableResourceBundleMessageSource这个类时,确实没有重新启动服务而刷新了资源文件的信息。

 

4,我们继续实验,将日文的资源文件删除掉后。

测试结果

CHINA:早上好
JAPAN:good morning!
US:good morning!
CANADA:good morning!

修改前US:good morning!
修改后US:good night!

 可以看到,日文和加拿大的输出都变成了默认资源文件中的值。

 

5,我们再次实验,把默认资源文件删除掉。

CHINA:早上好
3 19, 2013 4:00:54 午後 org.springframework.context.support.ResourceBundleMessageSource getResourceBundle
警告: ResourceBundle [spring3/local/application] not found for MessageSource: Can't find bundle for base name spring3/local/application, locale ja_JP
Exception in thread "main" org.springframework.context.NoSuchMessageException: No message found under code 'greeting.morning' for locale 'ja_JP'.

 报出异常了。

 

从而可以验证资源文件的查找顺序。

①指定locale对应的资源文件,存在则结束,不存在往下继续查找

②本机对应的locale对应的资源文件,存在则结束,不存在往下继续查找

③默认指定的资源文件,存在则结束,不存在往下继续查找

④上记都不存在时,抛出异常。

分享到:
评论

相关推荐

    spring 国际化 spring mvc

    Spring MVC 国际化实现详解 在 Spring MVC 框架中,实现国际化是一项非常重要的任务。国际化可以让我们的应用程序适应不同语言和地区,提高应用程序的可读性和可用性。本文将详细介绍如何使用 Spring MVC 实现国际...

    Spring国际化案例

    在Spring框架中,国际化(Internationalization,简称i18n)是为支持多语言环境而设计的功能,使得应用程序能够根据用户的地区或语言设置提供相应的显示内容。本案例将深入探讨如何在Spring应用中实现国际化。 首先...

    spring国际化实例

    Spring框架是Java开发中的一个核心库,它提供了一个广泛的功能集,包括依赖注入、面向切面编程、数据访问、Web应用程序开发以及我们今天关注的主题——国际化(i18n)。国际化是一个过程,使得软件能够适应不同语言...

    Spring mvc 国际化

    1. 创建国际化资源文件:在Spring MVC项目中,创建一个或多个属性文件(通常以messages开头),这些文件包含了键值对,键是应用中需要翻译的文本的引用,而值是具体的文本内容。例如,在messages.properties中可以...

    spring显示国际化信息

    在Spring框架中,国际化(Internationalization,简称i18n)是为支持多语言环境而设计的功能,使得应用程序能够根据用户所在的地域和语言提供相应的显示内容。本示例将详细介绍如何在Spring应用中实现国际化。 首先...

    spring国际化项目

    在本项目"spring国际化项目"中,我们将深入探讨如何在Spring环境中实现国际化。 首先,我们需要理解国际化的基本概念。国际化不仅仅是翻译文本,它涉及将应用程序中的所有文化特定元素,如日期格式、货币符号、数字...

    Spring实现国际化的一个小例子

    在Spring框架中,实现国际化(Internationalization,简称i18n)是常见的需求,它使得应用程序可以根据用户所在的地区提供不同的语言版本。以下是一个详细的步骤,解释如何在Spring应用中实现国际化。 1. **理解...

    spring2国际化demo

    spring2国际化的demo 用的是eclipse+myeclipse6.0GA 很简单 但是感觉不错 学习之后留着备用 里面加入用到了spring的泛型工厂 可以不用强制转换了

    spring国际化

    而Spring的国际化(i18n,Internationalization)功能则允许我们为不同地区和语言的用户提供定制的显示内容。 在Spring MVC中实现国际化,主要涉及以下几个关键步骤和概念: 1. **资源文件**:首先,我们需要创建...

    Spring国际化Demo

    Spring国际化Demo

    Spring Boot 国际化(i18n)配置demo.zip

    Spring Boot的国际化(i18n)配置是其强大功能的一部分,它允许开发人员为不同地区的用户提供本地化的应用体验。这个“Spring Boot 国际化(i18n)配置demo.zip”包含了一个演示如何在Spring Boot项目中实现i18n的示例...

    spring mvc 3 国际化(下)——简单自定义操作

    在Spring MVC 3中,国际化是一项重要的功能,它允许我们为不同的地区和语言提供定制的显示内容。在“spring mvc 3 国际化(下)——简单自定义操作”这一主题中,我们将深入探讨如何自定义国际化过程,以满足特定的...

    自己动手在Spring-Boot上加强国际化功能的示例

    在Spring Boot应用中加强国际化功能是一项重要的任务,特别是在服务全球用户的情况下。本示例将指导你如何在Spring Boot中自定义国际化实现,包括从文件夹中动态加载多个国际化文件、根据用户请求动态设置前端显示的...

    spring mvc 国际化 demo

    1. **国际化基础** 国际化通常涉及到资源文件,这些文件存储了应用中的文本字符串,以不同的语言版本存在。在Spring MVC中,这些文件通常是.properties格式,位于项目的`src/main/resources`目录下的`messages`...

    spring boot mybatis 国际化 拦截器

    在本文中,我们将深入探讨如何在Spring Boot应用中整合MyBatis,实现MySQL数据库连接,以及如何利用Spring MVC和拦截器来实现国际化(i18n)功能。此外,我们还将提及IIS 12作为可能的Web服务器选项。 首先,Spring...

    spring boot国际化 i18n

    Spring Boot的国际化(i18n)功能使得开发者可以轻松地为应用程序提供多语言支持,以便用户可以根据他们的偏好选择不同的语言界面。以下是对这个主题的详细讲解。 首先,我们需要了解i18n这个术语,它是...

    Spring2.5的国际化配置

    Spring 2.5 的国际化配置是一项关键功能,它允许应用程序根据用户浏览器的语言设置显示相应的文本。国际化使得软件能够适应全球范围内的用户,提供多语言支持。以下是对标题和描述中涉及知识点的详细解释: 1. **...

    spring国际化jsp

    标题 "spring国际化jsp" 暗示我们讨论的是在Spring框架中实现Web应用程序的国际化(i18n)过程,特别是在使用JSP(JavaServer Pages)时。这通常涉及到资源包(properties文件)的使用,以存储不同语言的文本字符串...

    五 Spring 国际化问题

    Spring 国际化(i18n)是Spring框架中用于支持多语言环境的功能,它使得应用程序能够根据用户的地域设置显示相应的语言内容。在本文中,我们将深入探讨Spring的国际化实现,包括其工作原理、配置步骤以及实际应用。 ...

Global site tag (gtag.js) - Google Analytics