`

Java国际化原理

    博客分类:
  • JAVA
 
阅读更多
 

 国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母。国际化又称本地化(Localization,L10N)。

 国际化相关的Java类

 Java国际化主要通过如下3个类完成

 

  • java.util.ResourceBundle:用于加载一个资源包
  • java.util.Locale:对应一个特定的国家/区域、语言环境。
  • java.text.MessageFormat:用于将消息格式化

 

国际化资源文件

 为实现程序的国际化,必须提供程序所需要的资源文件。资源文件的内容由key-value对组成。

 

资源文件的命名可以有3种格式:

 

  • basename_language_country.properties
  • basename_language.properties
  • basename.properties

 若资源文件包含非西方字符,则需要用JDK自带的工具来处理:native2ascii,这个工具的语法格式如下:

 

native2ascii 资源文件名 目标资源文件名

Locale类可获取各国区域环境(如:Locale.ENGLISH、Locale.CHINESE,这些常量返回一个Locale实例),也可以获取当前系统所使用的区域语言环境。

 

ResourceBundle类可根据指定参数获取相应的资源,常用方法如下

 

ResourceBundle.getBundle(basename)//获取当前系统所使用的区域环境获得指定资源文件
 
ResourceBundle.getBundle(basename,locale)//根据指定的区域获取对应的资源文件

 

 

 

语言环境

 在 Java 语言中,语言环境(locale)仅仅是一个标识符,而不是一组本地化的属性。java.util.Locale 类的一个实例表示一个特定的地理政治区域,使用表示语言、区域以及国家或地区的参数创建。每个与语言环境相关的类都维护着它自己的一组本地化属性,并且确定如何对含有 Locale 参数的方法请求做出响应。

Java支持的语言和国家

 若要获取Java所支持的语言和国家,可调用Locale类的getAvailableLocale方法获取,该方法返回一个Locale数组,该数组里包含了java所支持的语言和国家。

 通过Locale得到所有国家名和语言名:

java代码如下:

package com.sunflower.internationalization;
 
 import java.util.Locale;
 
 public class WholeLanguage {
 
     public static void main(String[] args) {
 
         Locale[] locals = Locale.getAvailableLocales();
 
         System.out.println("得到所有国家信息:");
         System.out.println("----------------------------------------------");
         for (Locale local : locals) {
             System.out.println(local.getDisplayCountry() + ":" + local.getCountry());
         }
 
         System.out.println("得到所有国家语言信息:");
         System.out.println("----------------------------------------------");
         for (Locale local : locals) {
             System.out.println(local.getDisplayLanguage() + ":" + local.getLanguage());
         }
     }
 }

  

JAVA程序的国际化

原始程序:

system.out.println("Hello");

 

其中Hello字符串需国际化,定义资源文件,文件名分别为base_zh_CN.properties和base_en_US.properties

base_zh_CN.properties文件内容如下:

hello=你好

 

base_en_US.properties文件内容如下:

hello=Hello

 

将这两个文件放入某个包中,如“com.jj.test”,用native2ascii重新生成资源文件

修改程序:

Locale myLocale = Locale.getDefault();//获得系统默认的国家/语言环境

ResourceBundle bundle = ResourceBundle.getBundle("base",myLocale);//根据指定的国家/语言环境加载对应的资源文件

System.out.println(bundle.getString(hello"));//获得本地化字符串

 

 

JAVA国际化流程

ResourceBundle根据Locale加载资源文件->返回一个ResourceBundle实例->ResourceBundle调用getString方法返回指定key对应的字符串

带占位符的消息

上面的输出消息是一个固定消息,若要输出的消息中必须包含动态的内容,这些内容必须是从程序中获取的,可利用带占位符的国际化资源文件来实现。

例如下面的字符串:

你好,Eason!今天是07-5-30 下午 13:00

Eason是浏览者的姓名,必须动态改变,后面的时间也必须动态改变,则此处需要2个占位符。

资源文件示例:

msg=你好,{0}!今天是{1}

程序中需要使用MessageFormat类

该类有个静态方法:

format(String pattern,Object … values)

上例对应的JAVA中的字符串输出代码如下:

ResourceBundle bundle = ResourceBundle.getBundle("MyResource", currentLocale);

String msg = bundle.getString("msg");

System.out.println(MessageFormat.format(msg,"Eason", new Date()));

 

 使用类文件代替资源文件

Java允许使用类文件来代替资源文件,即手动书写代码来实现国际化,

  • 该类要求继承于ListResourceBundle,并重写getContents方法该方法返回Object数组,该数组的每一个项都是key-value对。
  • 类的名字必须为basename_language_contry,这与属性文件的命名相似。

如:

public class MyResource_zh_CN extends ListResourceBundle {

private final Object myData[][]= {

{"msg","{0},Hello"}

};

public Object[][] getContents() {return myData;}

}

 

上面这个是简体中文语言环境下的资源文件,该类可以替换MyResource_zh_CN.properties属性文件。

如果系统同时存在资源文件、类文件,系统将以类文件为主,而不会调用资源文件。例如对于basename为MyResourse的这一系列中文资源文件,系统搜索顺序如下:

  1. MyResourse_zh_CN.class
  2. MyResourse_zh_CN.properties
  3. MyResourse_zh.class
  4. MyResourse_zh.properties
  5. MyResourse.class
  6. MyResourse.properties
分享到:
评论

相关推荐

    Java国际化编程及其实现.rar

    通过分析和学习这些实例,开发者能更深入地理解Java国际化的工作原理,并能在自己的项目中有效地应用。 总的来说,Java的国际化特性使得开发者能够创建全球化的产品,满足不同地区用户的需求。熟练掌握这一技术对于...

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

    下面我们将深入探讨Java国际化实现的原理,并结合`SearchZhUtil.java`源码进行分析。 1. **java.util.Locale** Locale对象代表了一个特定的语言环境,包括语言、国家和变体。例如,"zh_CN"表示简体中文,"en_US...

    Struts2 国际化 I18N 和Java 国际化

    在Struts2中,国际化处理也遵循类似的原理。但Struts2提供了一些额外的功能和便利。首先,你需要在Struts配置文件(struts.xml或struts.properties)中启用国际化支持。接着,创建对应的资源库文件并将其放在正确的...

    关于JAVA国际化的问题资料

    ### 关于JAVA国际化的问题资料 #### 一、JAVA国际化的概念与重要性 JAVA国际化(Internationalization,简称I18N)是指...通过本篇文档的学习,希望能帮助读者更好地理解和掌握JAVA国际化的基本原理和技术实现方法。

    java技术教你如何实现国际化

    下面将详细阐述Java中实现国际化的原理、方法以及关键组件。 首先,我们要理解什么是`locale`(本地化)。locale是表示特定文化区域的语言环境,包括语言、国家/地区以及某些特定的文化习惯。例如,“en_US”代表...

    国际化工具 Translater.java

    本文将详细探讨一个名为 `Translater.java` 的国际化工具,通过分析其源码,揭示其工作原理,并提供实际应用的建议。 `Translater.java` 是一个用于处理和翻译文本资源的工具类,它的核心功能在于帮助开发者将程序...

    用一段代码来描述JAVA语言对国际化的支持原理

    NULL 博文链接:https://hanz188.iteye.com/blog/768691

    中软国际java基础

    《中软国际java基础》是2009年中软国际为java方向的培训提供的一套基础教材,主要涵盖了Java编程语言的核心概念和技术。作为一套入门级别的教程,它旨在帮助初学者建立坚实的Java编程基础,为未来深入学习和开发Java...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_6_国际化 共34页.pptx

    - 国际化原理:介绍国际化的基本概念及其在Struts2中的实现原理。 - 国际化资源文件:说明如何创建和管理国际化资源文件。 - I18NInterceptor:解释Struts2中用于处理国际化的拦截器的作用。 - 实现过程讲解:...

    编码转换(制作国际化网站时用)

    【编码转换】是程序员在构建国际化网站时常常面临的一个重要环节。编码转换涉及到不同字符集间的转换,确保信息在全球范围内能正确显示和处理。这里提到的工具,由于其图形界面和便捷性,使得这一过程变得更加简单。...

    Java字符编码原理.pdf

    8. **国际化支持**:为了支持多种语言,Java提供了`java.text`包下的`ResourceBundle`类来管理和加载不同语言的资源文件,配合`java.util.Locale`类,可以实现程序的国际化。 总之,理解Java字符编码原理并正确配置...

    javaee国际化

    Struts2的国际化原理主要依赖于`java.util.Locale`和`java.util.ResourceBundle`这两个类。`Locale`对象代表一个特定的地区和语言环境,而`ResourceBundle`则用来加载与特定`Locale`对应的资源文件。资源文件通常是...

    java实现国际化I18N简单实例,没用任何框架.zip

    Java 实现国际化(I18N)是为应用程序提供多语言支持的过程,使得软件能够适应不同国家和地区的用户。I18N 是 "Internationalization" 的缩写,因为 "i" 和 "n" 之间有18个字母,这个术语在编程领域广泛使用。在这个...

    javaI18N[国际化]-源码.rar

    Java I18N(国际化)是Java编程语言中用于开发多语言支持的应用程序的重要特性。它允许软件在不同地区和语言环境下运行,提供本地化的用户体验。这个“javaI18N[国际化]-源码.rar”压缩包很可能包含了实现Java I18N...

    java课程设计 国际象棋 内含源代码 打包发布

    Java课程设计:国际象棋游戏开发详解 在本次Java课程设计中,我们聚焦于一个经典且富有挑战性的项目——开发一款国际象棋游戏。通过这个项目,学生将深入理解Java编程语言,掌握面向对象设计原则,并能实际运用到...

    编程语言+JAVAspring+国际化+多语言支持

    它介绍了JAVAspring的国际化的概念、原理和作用,以及如何使用JAVAspring的国际化来实现多语言支持,包括资源文件、区域设置、消息解析、日期格式、货币格式等内容,以及一些配置文件和注解的用法。

    Java软件开发实战 Java基础与案例开发详解 9-5 java程序国际化的实现 共9页.pdf

    9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和...

    java-Strurs原理

    8. **国际化与本地化**:Struts 支持多语言环境,通过资源文件可以轻松实现内容的国际化。 在 Struts 运行过程中,当用户发送一个 HTTP 请求时,ActionServlet 会解析请求参数,查找与之匹配的 ActionMapping,然后...

    安卓国际化demo

    下面将详细讲解Android国际化的基本原理和实现步骤。 1. **Android国际化基础** Android国际化是通过资源文件来实现的,这些文件存储在`res`目录下的`values`文件夹内,通常以`strings.xml`命名。为了支持多种语言...

Global site tag (gtag.js) - Google Analytics