Java程序国际化(汉化)

  • 程序国际化
  • 1.Locale
  • 2.Properties文件:属性文件(配置文件),内容以建值对的形式存放
  • 3.ResourceBundle工具,来绑定属性文件,并指定Locale对象,来自动选择使用那个属性文件,
  • 默认使用与操作系统相匹配的语言环境
  • getString()方法从属性文件中使用key来获取value
  • 注意:ResourceBundle工具类是只读
  • 4.处理动态文本 java.text.MessageFormat
    首先需要配置info
    在这里插入图片描述
    中文:
    在这里插入图片描述
    英文
    在这里插入图片描述
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
/**
 * 程序国际化
 * 1.Locale
 * 2.Properties文件:属性文件(配置文件),内容以建值对的形式存放<key-value>
 * 3.ResourceBundle工具,来绑定属性文件,并指定Locale对象,来自动选择使用那个属性文件,
 * 默认使用与操作系统相匹配的语言环境
 * 	getString()方法从属性文件中使用key来获取value
 * 
 * 注意:ResourceBundle工具类是只读
 * 
 * 4.处理动态文本 java.text.Messeage
 *
 *
 */
public class I18NDemo {

	public static void main(String[] args) {
		/**
		 * 创建一个本地语言环境对象,该对象会根据参数设置来自动选择与之相关的语言环境
		 * 参数:语言,地区
		 */
		Locale locale_CN=new Locale("zh","CN");
		Locale locale_Us=new Locale("en","US");
		Locale locale_default=Locale.getDefault();//根据机器来选择
		
		Scanner input=new Scanner(System.in);
		//用于绑定属性文件的工具类(参数:属性文件的基本名(就是前缀:info))
		ResourceBundle r =ResourceBundle.getBundle("info");
		//读取值
		
		System.out.println(r.getString("system.name"));
		System.out.println(r.getString("input.username"));
		String username=input.nextLine();
		System.out.println(r.getString("input.password"));
		String password=input.nextLine();
		if("admin".equals(username)&&"123".equals(password)){
			System.out.println(r.getString("login.success"));			
			//动态文本格式化
			String welcome=r.getString("welcome");
			welcome=MessageFormat.format(welcome, username);
			System.out.println(welcome);
		}else{
			System.out.println(r.getString("login.error"));
		}
	}
}

运行结果:
在这里插入图片描述
在这里插入图片描述

大多源码来自互联网,本人只做部分正和 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import com.vince.*; /** * 将本地文件以哪种编码输出 * @param inputfile 输入文件的路径 * @param outfile 输出文件的路径 * @param code 输出文件的编码 * @throws IOException */ public class Charchange{ public static void main(String[] args) throws IOException { String inputfile,outputfile,code; inputfile = "D:\\迅雷\\work\\fen\\2-temp-test.txt";//要转码的文件 outputfile = "D:\\迅雷\\work\\1.txt";//输出的文件 code = "utf-8"; System.out.println("转码开始"); convert(inputfile,outputfile,code); System.out.println("转码完成"); } public static void convert(String inputfile,String outfile,String code) throws IOException { StringBuffer sb = new StringBuffer(); StringBuffer sb2 = new StringBuffer(); //得到当前文件的编码 String ch=getCharset(inputfile); InputStreamReader isr=null; OutputStreamWriter osw =null; //根据当前文件编码进行解码 if(ch.equals("UTF8")){ isr= new InputStreamReader(new FileInputStream(inputfile), "UTF-8"); }else if(ch.equals("Unicode")){ isr= new InputStreamReader(new FileInputStream(inputfile), "Unicode"); }else { isr= new InputStreamReader(new FileInputStream(inputfile), "GB2312"); } //将字符串存入StringBuffer中 BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { sb.append(line + "\n"); } br.close(); isr.close(); //以哪种方式写入文件 if("UTF-8".equals(code)){ osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8"); }else if("GB2312".equals(code)){ osw = new OutputStreamWriter(new FileOutputStream(outfile), "GB2312"); }else if("Unicode".equals(code)){ osw = new OutputStreamWriter(new FileOutputStream(outfile), "Unicode"); }else{ osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8"); } BufferedWriter bw = new BufferedWriter(osw); String sb1 = sb.toString(); String a1 = deal(sb1); bw.write(a1); bw.close(); osw.close(); } /** * 根据文件路径判断编码 * @param str * @return * @throws IOException */ private static String getCharset(String str) throws IOException{ BytesEncodingDetect s = new BytesEncodingDetect(); String code = BytesEncodingDetect.javaname[s.detectEncoding(new File(str))]; return code; } //本方法完成单个无字符的转换 public static String Change(String temp){ String myString = temp.replace("&#", ""); String[] split = myString.split(";"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < split.length; i++) { sb.append((char)Integer.parseInt(split[i])); } return sb.toString(); } //接收String sb1并对字符串的联合处理 public static String deal(String sb1) { //模块化开始 String car="";//小车运输单个字符 while(sb1.length()!=0){ int markStar = sb1.indexOf("&"); //判断方法是以&开头的数据默认为要处理的无字符 if(markStar==0){ String temp = sb1.substring(markStar,8); car = car+Change(temp); sb1=sb1.substring(8); }else if(markStar==-1&sb1;.length()>0){ String temp = sb1.substring(0,sb1.length()); car = car+temp; sb1=sb1.substring(sb1.length()); }else{ String temp = sb1.substring(0,markStar); car = car+temp; sb1=sb1.substring(markStar); } } return car.toString() ; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值