国际化程序实现

所谓的国家化应用指的就是根据当前的语言环境读取指定的语言资源文件。

如果要想实现国际化的操作,那么首先要解决的问题就是如何读取资源文件的问题;所谓的资源文件 就是指文件后缀名称为:“*.properties”,里面保存的内容按照“key = value”的形式保存。

  • 定义一个 Message.properties
info = 中华人民共和国

但是在properties文件中保存也并不是这样,而是会将中文转成UNICODE编码

info = \u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD

这里的 info 是这个信息的 key ;以后可以根据这个 key 取得对象的 value

资源读取

  • java.util.ResourceBundle

在对properties文件进行资源读取的时候就需要使用 ResourceBundle 类

  • ResourceBundle是一个抽象类,类中有一个方法用于取得本类对象:

    • 根据当前语言环境取出:
    public static final ResourceBundle getBundle(String baseName);
    • 根据指定语言环境取出:
    public static final ResourceBundle getBundle(String baseName , Locale locale);

读取内容

  • 简单读取:

    public final String getString(String key);
  • 格式化文本:(java.text.MessageFormat)

    public static String format(String pattern , Object … argume)
  • 实例分析:(简单读取)

package helloworld;

import java.util.ResourceBundle;

public class TestDemo {
public static void main(String [] args) {
ResourceBundle rb = ResourceBundle.getBundle("Message");
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
System.out.println(rb.getString("info"));
}
}
  • 实例分析:(格式化文本)
修改 properties 文件内容
info=\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD
msg =\u59D3\u540D{0}\u5F53\u524D\u65F6\u95F4{1}

现在的 properties 文件中出现了{*}占位符,因为format()方法传可变长参数。

package helloworld;

import java.text.MessageFormat;
import java.util.Date;
import java.util.ResourceBundle; public class TestDemo {
public static void main(String [] args) {
ResourceBundle rb = ResourceBundle.getBundle("Message");
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
String str = rb.getString("msg");
System.out.println( MessageFormat.format(str,"王宇阳",new Date()));
}
}

如果需要根据国家语言不同输出不同的资源内容,则需要 Locale

Locale类保存的是一个国家的区域和语言编码,例如:中国 zh_CN

在定义资源文件的时候加上指定的语言编码

  • 范例:定义中文的资源文件

    Messages_zh_CN.properties

    msg = 欢迎 {0} 光临
  • 范例:定义英文的资源文件

    Messages_en_US.properties

    msg = Hello {0}
  • 设置的baseName(区域和语言编码)一定是Messages,所有的语言代码由 Locale类 设置

    • 构造方法:
    public Locale (String language , String country);
    • 取得当前语言环境
    public static Locale getDefault();
  • 实例:读取中文的资源文件

public class TestDemo {
public static void main(String [] args) {
Locale loc = new Locale("zh","CN"); //明确定义国家的语言
ResourceBundle rb = ResourceBundle.getBundle("Messages",loc);
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
String str = rb.getString("msg");
System.out.println(MessageFormat.format(str, "王宇阳"));
}
}
  • 实例:读取英文的资源文档
public class TestDemo {
public static void main(String [] args) {
Locale loc = new Locale("en","US"); //明确定义国家的语言
ResourceBundle rb = ResourceBundle.getBundle("Messages",loc);
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
String str = rb.getString("msg");
System.out.println(MessageFormat.format(str, "yuyang_Wang"));
}
}

在上两则实例中,我们通过对 Locale类对象 loc设置了指定的国家和区域,properties资源会根据 Locale 设置的baseName来进行调用指定的baseName的资源文档。

总结

  • 资源文件:文件名称的每个单词首字母大写,后缀为:*.properties

  • 通过ResourceBundle类可以读取在指定的CLASSPATH下的资源文件

  • Locale 类用于指定读取的资源文件的语言环境

Java 国际化标准程序实现的更多相关文章

  1. Java国际化(i18n)

    Java国际化(i18n) 最近在做一个网站国际化的功能.用Java做开发,使用spring+velocity. Java提供了对i18n的支持,spring对其做了集成,可以很方便的配置.主要思想就 ...

  2. Java 国际化 语言切换

      Java国际化 我们使用java.lang.Locale来构造Java国际化的情境. java.lang.Locale代表特定的地理.政治和文化.需要Locale来执行其任务的操作叫语言环境敏感的 ...

  3. java——国际化详解

    深入理解Java国际化 假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面--这便是典型 ...

  4. Java国际化号码验证方法,国内手机号正则表达式

    Java国际化号码验证方法,国内手机号正则表达式 中国电信号段 133.149.153.173.177.180.181.189.199 中国联通号段 130.131.132.145.155.156.1 ...

  5. Java 国际化

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

  6. (转)JAVA国际化

    转:http://www.cnblogs.com/jjtech/archive/2011/02/14/1954291.html 国际化英文单词为:Internationalization,又称I18N ...

  7. java国际化

    import java.util.Locale; import org.junit.Test; /** * 使用指定的国际化文件 */ public class Demo { @Test public ...

  8. 42、Java国际化

    简介 国际化的英文单词是Internationalization,有时检测I18N,类似于I18N还有L10N,是Location本地化的简写. Java或计划主要通过如下三个类实现 1.java.u ...

  9. java国际化之时区问题处理

    原文:https://moon-walker.iteye.com/blog/2396035 在国际化的项目中需要处理的日期时间问题主要有两点: 1.日期时间的国际化格式问题处理: 2.日期时间的时区问 ...

随机推荐

  1. c++-zoo动物园

    面向对象抽象类写动物园 animal animal.h #pragma once #define _CRT_SECURE_NO_WARNINGS #include <iostream> u ...

  2. jQuery实现简单购物车页面

    功能描述: 当全选按钮被按下时,所有商品的小复选框(以及另外一个全选按钮)的选中状态跟按下的全选按钮保持一致: 当用户选中商品时,如果所有商品都被选中,就让全选按钮为选中状态: 用户可以点击 + - ...

  3. CSS 选择器、字体/文本、背景

    CSS的基本使用 直接写在标签内 <p style="color: red; font-size: 40px;">段落</p> 写在 style 标签内 & ...

  4. Hacker Fest: 2019 Vulnhub Walkthrough

    靶机地址: https://www.vulnhub.com/entry/hacker-fest-2019,378/ 主机扫描: FTP尝试匿名登录 应该是WordPress的站点 进行目录扫描: py ...

  5. 使用SQL生成指定数据库的数据字典(MSSQL)

    USE DBNAME --指定要生成数据字典的数据库 GO SELECT 表名= CASE WHEN a.colorder= 1 THEN d.name ELSE '' END, 表说明= CASE ...

  6. git提交时忽略指定文件

    git提交时忽略指定文件 我们在项目开发过程中经常用到git来管理自己的项目,使用git版本控制进行多人协作开发具有许多优势,这里就不一一阐述了,有兴趣的同学可以自己去查找资料进行系统的学习.而本篇文 ...

  7. java 获取当前年份 月份,当月第一天和最后一天

    获取当前年份 月份,当月第一天和最后一天,工作中会经常用到,下面是代码: package basic.day01; import java.text.SimpleDateFormat; import ...

  8. AndroidStudio使用的kotlin简介

       Kotlin是一种在Java虚拟机上执行的静态型别程式语言,它也可以被编译成为JavaScript原始码.它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的程式语言,其名称来自于圣 ...

  9. C# 使用 csc.exe 实现命令行生成

    概述 CSC是什么呢?CSC就是 C-Sharp Compiler (中文就是C#编译器),作用是把我们的 cs 源文件变异成dll 或者是exe ,    一般安装完VS 后,就会有这个文件: 这里 ...

  10. 简约清新立体商务年终工作总结汇报动态PPT模板

    模版来源:http://ppt.dede58.com/gongzuohuibao/26682.html