`
szlxh002
  • 浏览: 34464 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java国际化和Spring国际化比较

 
阅读更多

1.Java本身框架国际化

(1)本地化相关的类

Locale

NumberFormat

DateFormat

MessageFormat

(2)使用ResourceBoundle

国际化资源命名规范:

<资源名>_<语言代码>_<国家/地区代码>.properties

如:

resource.properties

resource_zh_CN.properties

resource_en_US.properties

 

 使用例子



 

package com.baobaotao.i18n;

import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.ResourceBundle;

public class LocaleSample {
	public static void numberFormat() {
		Locale locale = new Locale("zh", "CN");
		NumberFormat currFmt = NumberFormat.getCurrencyInstance(locale);
		double amt = 123456.78;
		System.out.println(currFmt.format(amt));
	}
	public static void dateFormat() {
		Locale locale = new Locale("en", "US");
		Date date = new Date();
		DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
		System.out.println(df.format(date));
	}

	public static void messageFormat1() {
		Object[] params = {"John", new GregorianCalendar().getTime(),1.0E3};
		String pattern1 = "{0},你好!你于{1}在工商银行存入{2} 元。";
		String pattern2 = "At {1,time,short} On{1,date,long},{0} paid {2,number,currency}.";
		
		String msg1 = MessageFormat.format(pattern1,params);
		MessageFormat mf = new MessageFormat(pattern2,Locale.US);
		String msg2 = mf.format(params);
		System.out.println(msg1);
		System.out.println(msg2);
	}
	
	public static void resourceBoundle(){
		ResourceBundle rb1 = ResourceBundle.getBundle("com/baobaotao/i18n/resource",Locale.US);
		ResourceBundle rb2 = ResourceBundle.getBundle("com/baobaotao/i18n/resource",Locale.CANADA);
		System.out.println("us:"+rb1.getString("greeting.common"));
		System.out.println("cn:"+rb2.getString("greeting.common"));
	}
	
	public static void resourceBoundleFmt(){
		ResourceBundle rb1 = ResourceBundle.getBundle("com/baobaotao/i18n/fmt_resource",Locale.US);
		ResourceBundle rb2 = ResourceBundle.getBundle("com/baobaotao/i18n/fmt_resource",Locale.CHINA);
		Object[] params = {"John", new GregorianCalendar().getTime()};
		
		String str1 = new MessageFormat(rb1.getString("greeting.common"),Locale.US).format(params);
		String str2 =new MessageFormat(rb2.getString("greeting.morning"),Locale.CHINA).format(params);
		String str3 =new MessageFormat(rb2.getString("greeting.afternoon"),Locale.CHINA).format(params);
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
	}	
	public static void main(String[] args) {
		numberFormat();
		dateFormat();
		messageFormat1();
		resourceBoundle();
		resourceBoundleFmt();
	}
}

 resource.properties

 

greeting.common=How are you!
greeting.morning = Good morning!
greeting.afternoon =Good Afternoon\!

 fmt_resource.properties

 

 

greeting.common=How are you!{0},today is {1}
greeting.morning = Good morning!{0},now is {1,time,short}
greeting.afternoon =Good Afternoon\!{0} now is {1,date,long}

 

 2.Spring国际化

相关的接口及类:

(1)接口:MessageSource

(2)类:ResourceBundleMessageSource

通过beanName指定一个资源名

(3)类:ReloadableResourceBundleMessageSource

可以定时刷新资源文件

(4)容器级的国际化

Application实现了MessageSource接口,要配置文件中的Bean的名称必须为"messageSource".

 

Spring xml配置 bean.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  <bean id="myResource1" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
       <list>
         <value>com/baobaotao/i18n/fmt_resource</value>
       </list>
    </property>
  </bean> 
  
  <bean id="myResource2" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
       <list>
         <value>com/baobaotao/i18n/fmt_resource</value>
       </list>
    </property>
    <property name="cacheSeconds" value="2"/>
  </bean>  
  
   <bean id="messageSource12" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
       <list>
         <value>com/baobaotao/i18n/fmt_resource</value>
       </list>
    </property>
  </bean>  
  
  <!-- 容器级国际化,名称只能为messageSource -->
  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
       <list>
         <value>com/baobaotao/i18n/fmt_resource</value>
       </list>
    </property>
  </bean>  
  
</beans>

 

 

Java code:

 

package com.baobaotao.i18n;

import java.text.MessageFormat;
import java.util.GregorianCalendar;
import java.util.Locale;

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

public class I18nGreeting {
   
	private static void rsrBdlMessageResource(){
		String[] configs = {"com/baobaotao/i18n/beans.xml"};
		ApplicationContext ctx = new ClassPathXmlApplicationContext(configs);
		
		MessageSource ms = (MessageSource)ctx.getBean("myResource1");
		Object[] params = {"John", new GregorianCalendar().getTime()};
		
		String str1 = ms.getMessage("greeting.common",params,Locale.US);
		String str2 = ms.getMessage("greeting.morning",params,Locale.CHINA);
		String str3 = ms.getMessage("greeting.afternoon",params,Locale.CHINA);
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
		
	}
	private static void rrsrBdlMessageResource() throws Exception{
		String[] configs = {"com/baobaotao/i18n/beans.xml"};
		ApplicationContext ctx = new ClassPathXmlApplicationContext(configs);
		
		MessageSource ms = (MessageSource)ctx.getBean("myResource2");
		Object[] params = {"John", new GregorianCalendar().getTime()};
		
		for (int i = 0; i < 2; i++) {
			String str1 = ms.getMessage("greeting.common",params,Locale.US);		
			System.out.println(str1);
			Thread.currentThread().sleep(20000);
		}	
	}
	
	private static void ctxMessageResource() throws Exception{
		String[] configs = {"com/baobaotao/i18n/beans.xml"};
		ApplicationContext ctx = new ClassPathXmlApplicationContext(configs);
		Object[] params = {"John", new GregorianCalendar().getTime()};
		
		String str1 = ctx.getMessage("greeting.common",params,Locale.US);
		String str2 = ctx.getMessage("greeting.morning",params,Locale.CHINA);	
		System.out.println(str1);
		System.out.println(str2);	
	}	
	
	public static void main(String[] args) throws Exception{
//		rsrBdlMessageResource();
//		rrsrBdlMessageResource();
		ctxMessageResource();
	}
}

 

 

 

 

 

  • 大小: 13.2 KB
分享到:
评论

相关推荐

    spring国际化实例

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

    Spring2.5的国际化配置

    为了在 JSP 页面中使用国际化,需要确保 JSP 渲染器支持 JSTL(JavaServer Pages Standard Tag Library)。然后可以使用 `&lt;fmt:message&gt;` 标签来获取资源文件中的相应文本。例如,`...

    java国际化组件

    Java国际化组件是Java开发中一个重要的功能模块,它允许开发者为不同地区的用户创建多语言支持的应用程序。在Java中,国际化通常通过使用Resource Bundle和Java的Locale类来实现。资源库(Resource Bundle)包含了...

    spring国际化项目

    Spring框架是Java开发中广泛...这个"spring国际化项目"实例提供了一个完整的实践场景,帮助开发者更好地理解和掌握Spring中的i18n支持。在实际开发中,国际化不仅可以提高用户体验,也是满足全球用户需求的重要手段。

    java国际化实现框架底层源码

    Java国际化(i18n,Internationalization)是为了支持不同地区的语言和文化差异,提供了一种灵活的方式来管理和显示应用程序的文本、日期、数字和其他文化敏感的信息。Java提供了完整的API来处理国际化问题,主要...

    Spring国际化案例

    总之,Spring的国际化功能强大且易于使用,通过合理的资源配置和代码设计,可以轻松实现多语言支持,提升应用的用户体验。在实际项目中,可以根据需求进一步定制和扩展,比如添加更多语言支持,或者实现动态切换语言...

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

    Spring提供了`NumberFormat`和`DateFormat`的国际化支持,可以通过`SimpleDateFormat`和`DecimalFormat`进行定制。 通过以上步骤,你就可以在Spring应用中实现一个基本的国际化功能。记得在实际项目中,需要考虑更...

    java实现国际化

    总之,Java的国际化和本地化功能使得开发者能够轻松地构建全球化应用程序,满足不同用户群体的需求。通过合理利用`ResourceBundle`、`Locale`、`DateFormat`等类,以及相应的开发工具,我们可以实现高效且灵活的国际...

    spring显示国际化信息

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

    Java 国际化操作

    2. **Resource Bundle**:资源包是Java国际化的关键组成部分,它是一个包含特定语言环境下的文本和数据的文件集合。通常以.properties格式存储,例如`messages_en.properties`和`messages_fr.properties`分别代表...

    spring boot国际化 i18n

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

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

    本示例将指导你如何在Spring Boot中自定义国际化实现,包括从文件夹中动态加载多个国际化文件、根据用户请求动态设置前端显示的语言,并通过拦截器和注解自动化处理。 首先,让我们回顾一下项目的初始化步骤。在...

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

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

    spring boot mybatis 国际化 拦截器

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

    基于i18n国际化微服务统一处理错误码

    通过结合SpringBoot框架和i18n(国际化)技术,我们可以实现错误信息的多语言支持,让错误信息能够适应不同的用户群体。 首先,让我们来深入理解SpringBoot。SpringBoot是Spring框架的一个子项目,它简化了创建独立...

    spring国际化

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

    基于struts2-hibernate-spring的Java Web系统国际化设计与实现.pdf

    基于struts2-hibernate-spring的Java Web系统国际化设计与实现.pdf

    spring mvc 国际化 demo

    在Spring MVC框架中,国际化(i18n)是一个重要的特性,它允许应用程序根据用户的语言和地区提供本地化的信息。这个“spring mvc 国际化 demo”是一个展示如何利用注解实现这一功能的实例。接下来,我们将深入探讨...

    spring2国际化demo

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

Global site tag (gtag.js) - Google Analytics