17、使用Java国际化
先把前面Prosperties练习一下。这里会用到。ok了
用maven构建,把类分开,模块化的写。
国际化+打包jar包+界面(只需要一个frame和一个label就好了),双击运行查看结果,然后修改控制面板中的语言环境(需要升级电脑版本,改用输入参数的方式),再双击查看结果。
或者通过args输入参数构建Localel
maven传入命令行参数(这篇博客里:Maven:如何从命令行传递参数运行.java文件)
要尝试使用Logger了,不然设置日志太麻烦了,要一个个注释掉。。。
结合下面的MessageFormat,练习,就是添加一个可以输入用户名的框框,和一个按钮,就显示你好,用户名。今天是星期几。然后做一个图标,根据使用的地区不同而更换旗帜。
在练习中使用Logger来设置日志,
使用日期国际化完善程序。
效果:
有Logger的简单运用
package internation;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.text.*;
import java.util.logging.*;
import java.io.*;
import static java.text.DateFormat.*;
public class Main
{
public static void main(String[] args) throws IOException
{
JFrame frame = new JFrame("国际化测试");
JPanel panel1 = new JPanel();
JLabel name = new JLabel("请输入你的姓名:");
JTextField edit = new JTextField(30);
panel1.add(name);
panel1.add(edit);
frame.add(panel1,BorderLayout.NORTH);
JPanel panel2 = new JPanel();
JLabel show = new JLabel("这里是展示部分");
panel2.add(show);
//使用java9新增的日志api
System.Logger logger = System.getLogger("fkjava");
Logger.getLogger("fkjava").setLevel(Level.FINE);
Logger.getLogger("fkjava").addHandler(new FileHandler("a.xml"));
//这里是业务逻辑
//首先,根据命令行参数获取的国家/语言环境
Locale myLocale = null;
String nation = "";
if(args.length!=0)
{
nation = args[0];
//System.out.println("国家:"+nation);
logger.log(System.Logger.Level.DEBUG,"国家:"+nation);
}
if(nation.equals("china"))
{
myLocale = Locale.CHINA;
Icon icon = new ImageIcon("E:\\maven\\MVN\\project\\internation\\src\\main\\resources\\China.png");
JLabel picture = new JLabel(icon,JLabel.CENTER);
panel2.add(picture);
}
else if( nation.equals("english"))
{
myLocale = Locale.US;
//System.out.println("选择了正确的国家");
logger.log(System.Logger.Level.DEBUG,"选择了正确的国家");
Icon icon = new ImageIcon("E:\\maven\\MVN\\project\\internation\\src\\main\\resources\\us.png");
JLabel picture = new JLabel(icon,JLabel.CENTER);
panel2.add(picture);
}
else
{
myLocale = Locale.getDefault(Locale.Category.FORMAT);
}
final ResourceBundle bundle =ResourceBundle.getBundle("internation",myLocale);
name.setText(bundle.getString("name"));
show.setText(bundle.getString("show"));
frame.setTitle(bundle.getString("frame"));
frame.add(panel2);
//到这里为止
JButton btn = new JButton(bundle.getString("btn"));
frame.add(btn,BorderLayout.SOUTH);
//国际化日期
DateFormat df = DateFormat.getDateInstance(FULL,myLocale);
Action yes = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
String msg = bundle.getString("hello");
show.setText(MessageFormat.format(msg,edit.getText(),df.format(new Date())));
}
};
btn.addActionListener(yes);
frame.setSize(800,600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}