国际化程序

1. 国际化程序

国际化程序

在包下添加配置文件 后缀为.properties

info_en_US.properties

sys.name=welcome login XXX system
sys.add=1.add
sys.delete=2.delete
sys.update=3.update
sys.query=4.query

info_zh_CN.properties

sys.name=\u6B22\u8FCE\u767B\u5F55XXX\u7CFB\u7EDF
sys.add=1.\u6DFB\u52A0
sys.delete=2.\u5220\u9664
sys.update=3.\u66F4\u65B0
sys.query=4.\u67E5\u8BE2

使用

package com.gkd.i18n;
​
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
​
public class I18NDemo {
​
    public static void main(String[] args) {
        
        //指定语言环境
        Locale l = Locale.CHINA;
        
        ResourceBundle rb = ResourceBundle.getBundle("com.gkd.i18n.info", l);
        
        
        System.out.println(rb.getString("sys.name"));
        System.out.println(rb.getString("sys.add"));
        System.out.println(rb.getString("sys.delete"));
        System.out.println(rb.getString("sys.update"));
        System.out.println(rb.getString("sys.query"));
        
    }
​
}
​

执行效果:

国际化程序

指定语言环境为英文

package com.gkd.i18n;
​
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
​
public class I18NDemo {
​
    public static void main(String[] args) {
        
        //指定语言环境
        Locale l = Locale.US;
        
        ResourceBundle rb = ResourceBundle.getBundle("com.gkd.i18n.info", l);
        
        
        System.out.println(rb.getString("sys.name"));
        System.out.println(rb.getString("sys.add"));
        System.out.println(rb.getString("sys.delete"));
        System.out.println(rb.getString("sys.update"));
        System.out.println(rb.getString("sys.query"));
        
    }
​
}
​

 

国际化程序

处理动态文本

在配置文件中使用占位符

sys.wel=\u6B22\u8FCE{0}\u767B\u5F55\u7528{1}\u6237\u7BA1\u7406\u7CFB\u7EDF

占位符从0开始

在Java代码中使用 text包下面的 MessageFormat类处理动态文本

String str = MessageFormat.format(rb.getString("sys.wel"), userName,password);

完整代码

package com.gkd.i18n;
​
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
​
public class I18NDemo {
​
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入账号:");
        String userName = input.next();
        System.out.println("请输入密码:");
        String password = input.next();
        
        //指定语言环境
        Locale l = Locale.US;
        
        ResourceBundle rb = ResourceBundle.getBundle("com.gkd.i18n.info", l);
        
        String str = MessageFormat.format(rb.getString("sys.wel"), userName,password);
        
        System.out.println(rb.getString("sys.name"));
        System.out.println(rb.getString("sys.add"));
        System.out.println(rb.getString("sys.delete"));
        System.out.println(rb.getString("sys.update"));
        System.out.println(rb.getString("sys.query"));
        System.out.println(str);    
    }
}

运行效果:

 

国际化程序

 

比较器

Arrays.sort()方法可以实现数组的排序功能.

接下来我们自己定义一个学生类:

package com.gkd.compar;
​
public class Student{
    private String name;
    private int age;
    private String sex;
    public Student() {
        super();
    }
    public Student(String name, int age, String sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    public void say(){
        this.age = 1000;
        
    }
    
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
}
​

然后准备一个Student数组,传给Arrays.sort()方法进行排序

public static void comparableDemo(){
        Student s1 = new Student("张三", 18, "男"); 
        Student s2 = new Student("李四", 78, "女"); 
        Student s3 = new Student("王五", 32, "男"); 
        Student s4 = new Student("赵丽", 45, "女"); 
        Student s5 = new Student("田七", 23, "女"); 
        Student s6 = new Student("宋八", 66, "男"); 
        
        Student[] students = new Student[6];
        students[0] = s1;
        students[1] = s2;
        students[2] = s3;
        students[3] = s4;
        students[4] = s5;
        students[5] = s6;
​
        for(Student s : students){
            System.out.println(s);
        }
        
        System.out.println("--------------");
        Arrays.sort(students);
        
        for(Student s : students){
            System.out.println(s);
        }
    }

运行结果:

国际化程序

Comparable接口可以指定自定义对象的比较规则.

国际化程序

如果我们自定义的对象要想通过Arrays.sort()方法进行排序.则必须实现Comparable接口,实现comparTo方法

 

接下来修改Student类,完整代码如下:

package com.gkd.compar;
​
public class Student implements Comparable<Student>{
    private String name;
    private int age;
    private String sex;
    public Student() {
        super();
    }
    public Student(String name, int age, String sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    public void say(){
        this.age = 1000;
        
    }
    
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
    @Override
    public int compareTo(Student o) {
        if(o == null)
            return -1;
        if(this.age < o.age)
            return 1;
        else if(this.age > o.age)
            return -1;
        return 0;
    }
}
​