黑马程序员技术交流社区

标题: 软件国际化 [打印本页]

作者: liudh1    时间: 2016-4-24 07:32
标题: 软件国际化
package liu.dh.international;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
/**
* @alt+shift+j:快速生成注释
* @author
*软件的国际化:主要是匹配世界各个地区的语言和风俗环境
*主要使用两个类:public final class Locale;public abstract class ResourceBundle
*Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,
*它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、
*地区或文化的风俗/传统来格式化该数值。
*构造方法:Locale(String language)根据语言代码构造一个语言环境。
          Locale(String language, String country) 根据语言和国家/地区构造一个语言环境。
          Locale locale = Locale.CHINA;CHINA是字段field,通过字段获取,
      getDefault()   获得此 Java 虚拟机实例的当前默认语言环境值。
  ResourceBundle:资源包包含特定于语言环境的对象,资源包包含键/值对.   
*主要方法:static ResourceBundle getBundle(String baseName, Locale locale)
*   使用指定的基本名称、语言环境和调用者的类加载器获取资源包
           String getString(String key)   从此资源包或它的某个父包中获取给定键的字符串。
        
*/
public class Demo_International {
  static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
  // 示例如下
  //键盘录入
  System.out.println("请输入用户名");
  String username = scanner.nextLine();
  System.out.println("请输入密码");
  String password = scanner.nextLine();
  if ("admin".equals(username)&&"admin".equals(password)) {
   System.out.println(username+"登录成功");
  }
  //真对以上情况如何实现国际化呢,在不输入汉子的情况下
  //创建Locale对象
  // Locale(String language, String country) 根据语言和国家/地区构造一个语言环境。
  Locale locale = Locale.CHINA;
  //可以通过查看源码获取:例如美国
  Locale locale2 = new Locale("en", "US");
  //创建资源文件:格式:info_语言标示符_国家标示符:info_ch_CN.properties;info_en_US.properties;
  //在包下创建两个资源文件夹
  //创建资源包对象:如果使用locale,将输出中文
   ResourceBundle bundle = ResourceBundle.getBundle("liu.dh.international.info", locale2);
   
   //通过文件夹中的建获取值
   String user = bundle.getString("username");
   String passwords = bundle.getString("password");
   String info = bundle.getString("info");
   
  System.out.println(user);
  String username1 = scanner.nextLine();
  System.out.println(passwords);
  String password1 = scanner.nextLine();
  //如何动态获取文本:@@@@登陆了:通过占位符{0}完成
  //public class MessageFormat
  //static String format(String pattern, Object... arguments)
       // 创建具有给定模式的 MessageFormat,并用它来格式化给定的参数。
  String info1 = MessageFormat.format(bundle.getString("info"), username1);
  
  if ("admin".equals(username1)&&"admin".equals(password1)) {
   System.out.println(info1);
  }
}
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2