java本地化

一、国际化:缩写i18N(来源于国际化的单词缩写以i开始N结束的18位英文),让开发的程序适应世界上不同国家或地区的过程

二、本地化:使程序能适应某个地区或语言的使用习惯的过程

1、本地化的目标: 数字,货币,日期,事件,文本

2、本地化的实现:

1)实现本地化数字和货币的步骤:

a.使用Locale类定义需要本地化的语言:

Locale aLocale=new Locale("zh","CN");

b.格式化数字:

NumberFormat numberFormat=NumberFormat.getNumberInstance(aLocale);//参数表示确定的国家

c.使用本地的数字的格式,格式化目标数字:

String result=numberFormat.format(number);

用法参考代码:

public class NumberAnCurrentcy {
	public static void main(String[] args) {
		//第一个参数语言编码,第二个参数国家编码,都是国际标准
		Locale aLocale=new Locale("zh","CN");
		Locale bLocale=new Locale("ru","RU");//俄语
		Locale cLocale=Locale.FRANCE;//欧洲

		//整型 int的包装类
		Integer number=new Integer(123456);//相当于int i=123456
		
		NumberAnCurrentcy n=new NumberAnCurrentcy();
		n.formatNumber(aLocale, number);
		n.formatNumber(bLocale, number);
		n.formatNumber(cLocale, number);
		
		n.formatCurrentcy(aLocale, number);
		n.formatCurrentcy(bLocale, number);
		n.formatCurrentcy(cLocale, number);
	}
	//本地化数字
	private  void formatNumber(Locale aLocale, Integer number) {
		//NumberFormat用来格式化数字,创建的时候使用静态方法,传的参数是国家和地区或者语言
		NumberFormat numberFormat=NumberFormat.getNumberInstance(aLocale);//参数表示确定的国家
		//使用本地的数字的格式 格式化目标数字
		String result=numberFormat.format(number);
		System.out.println(result);
	}
	//本地化货币
	private  void formatCurrentcy(Locale aLocale, Integer number) {
		NumberFormat numberFormat=NumberFormat.getCurrencyInstance(aLocale);//参数表示确定的国家
		String result=numberFormat.format(number);
		
		Currency c=Currency.getInstance(aLocale);//返回本地货币的对象
		System.out.println(c.getDisplayName()+":"+result);//getDisplayName方法显示货币的名字
	}
}

2)实现本地化日期和时间,步骤与实现本地化数字和货币一样,用法参考代码:

public class DataAndTime {
	public static void main(String[] args) {
		// 第一个参数语言代码,第二个参数国家代码,国际标准,
		Locale aLocale = new Locale("zh", "CN");
		Locale bLocale = new Locale("ru", "RU");// 俄语
		Locale cLocale = Locale.FRANCE;// 欧洲
		DataAndTime d=new DataAndTime();
                d.formatData(aLocale);
                d.formatData(bLocale);
                d.formatData(cLocale);
        
                d.formatTime(aLocale);
                d.formatTime(bLocale);
                d.formatTime(cLocale);
	}
	public void formatData(Locale aLocale) {
		//获取某个国家或地区或者语言的日期格式
		//第一个参数:日期的显示方式 DEFAULT LONG SHORT MEDIUM
		//第二个参数是国家或者语言的代码
		DateFormat dateFormat=DateFormat.getDateInstance(
				DateFormat.LONG,aLocale);
		//使用已经确定的日期格式去格式化目标日期
		System.out.println(dateFormat.format(new Date()));//new Date()当前系统日期
	}
    //格式化时间:时分秒
	public void formatTime(Locale aLocale) {
		//获取某个国家或地区或者语言的时间格式
		//第一个参数:时间的显示方式 DEFAULT LONG SHORT MEDIUM
		//第二个参数是国家或者语言的代码
		DateFormat Date=DateFormat.getTimeInstance(
				DateFormat.LONG,aLocale);
		//使用已经确定的时间格式去格式化目标时间
		System.out.println(Date.format(new Date()));
	}
}

3)实现本地化文本步骤:

a.将不同国家和地区的文字保存资源文件里面(**.properties),方法:在对应项目的src上new--file--写文件名(文件名规则:MessageBundle_语言代码_国家代码.properties,如中文:MessageBundle_zh_CN.properties)

b.根据Locale读取对应的文件,显示在界面上

用法参考代码:

public class FormatTextDemo extends JFrame implements ActionListener{
	JLabel name,password,language;
	JComboBox selectLanguage;
	String strName,strPassWord,strLanguage;
	public FormatTextDemo(){
		setVisible(true);
		setSize(300,300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		getContentPane().setLayout(null);
		String[] languages={"中文","English"};
		selectLanguage =new JComboBox(languages);
		selectLanguage.setBounds(230, 50, 100, 40);
		getContentPane().add(selectLanguage);
		
		selectLanguage.addActionListener(this);
		
		language=new JLabel("请选择语言:");
		language.setBounds(100, 50, 100, 40);
		name=new JLabel("用户名");
		name.setBounds(100, 100, 100, 40);
        password=new JLabel("密码");
        password.setBounds(100, 150, 100, 40);
        getContentPane().add(language);
        getContentPane().add(name);
        getContentPane().add(password);		
	}
	public static void main(String[] args) {
		new FormatTextDemo();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		//判断是否操作下拉列表
		if(e.getSource().equals(selectLanguage)){
			//判断选中哪一个
			JComboBox jcb= (JComboBox)e.getSource();
			int index=jcb.getSelectedIndex();//获取选择选项的索引
			switch(index){
			case 0://英文
				setText(Locale.US);
				break;
			case 1://中文
				setText(Locale.CHINA);
				break;
			default://中文
				setText(Locale.CHINA);
				break;
			}			
		}		
	}
    //根据Locale读取对应的文件
	public void setText(Locale loacle) {
		//根据locale读取资源文件
		//1资源束//第一个参数里面写文件名下划线前面的字符//第二个字符国家或地区
		<span style="color:#FF0000;">ResourceBundle message=ResourceBundle.getBundle("MessageBundle",loacle);</span>
		//2读取资源文件
		strName = message.getString("name");
		strPassWord = message.getString("password");
		strLanguage = message.getString("language");
		// 设置界面的文本
		name.setText(strName);
		password.setText(strPassWord);
		language.setText(strLanguage);        
	}
}
其中:MessageBundle_zh_CN.properties文件内容

#key=value
name=user name:
password=password
language=please select language

MessageBundle_en_US.properties文件内容

#key=value
name=\u7528\u6237\u540D
password=\u5BC6\u7801
language=\u8BF7\u9009\u62E9\u8BED\u8A00



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值