Java学习路线-21:国际化Locale、ResourceBundle、MessageFormat

举报
彭世瑜 发表于 2021/08/14 00:47:36 2021/08/14
1.5k+ 0 0
【摘要】 第11 章 : 国际化程序实现 42 国际化程序实现原理 统一程序代码,根据不同国家实现不同语言描述 需要解决问题: 1、定义保存文字信息 2、根据不同区域语言编码读取文件信息 43 Locale类 Locale类:专门描述区域和语言编码的类 构造方法 public Locale(String language) public Locale(String l...

第11 章 : 国际化程序实现

42 国际化程序实现原理

统一程序代码,根据不同国家实现不同语言描述
需要解决问题:
1、定义保存文字信息
2、根据不同区域语言编码读取文件信息

43 Locale类

Locale类:专门描述区域和语言编码的类

构造方法

public Locale(String language)
public Locale(String language, String country)

  
 

国家语言代码
中文:zh_CN
美国:en_US

使用示例

import java.util.Locale;

class Demo { public static void main(String[] args){ Locale loc = new Locale("zh", "CN"); System.out.println(loc); // zh_CN }
}

  
 

读取本地默认环境

Locale loc = Locale.getDefault();
System.out.println(loc);
// zh_CN

  
 

使用常量

Locale loc = Locale.CHINA;
System.out.println(loc);
// zh_CN

  
 

44 ResourceBundle读取资源文件

public static final ResourceBundle getBundle(String baseName)
// baseName 没有后缀的文件名

  
 

资源文件 message.properties

info="这是消息"

  
 

读取实例

import java.io.UnsupportedEncodingException;
import java.util.ResourceBundle;

class Demo { public static void main(String[] args) throws UnsupportedEncodingException { ResourceBundle bundle = ResourceBundle.getBundle("message"); // 解决中文乱码问题 String message = new String(bundle.getString("info").getBytes("ISO-8859-1"), "utf-8"); System.out.println(message); // "这是消息" }
}

  
 

45 实现国际化程序开发

CLASSPATH 下建立文件

cat Message.properties
info=默认资源 

cat Message_zh_CN.properties
info=中文资源 

cat Message_en_US.properties
info=英文资源

  
 

执行程序会读取中文资源

import java.io.UnsupportedEncodingException;
import java.util.ResourceBundle;

class Demo { public static void main(String[] args) throws UnsupportedEncodingException { ResourceBundle bundle = ResourceBundle.getBundle("message"); // 解决中文乱码问题 String message = new String(bundle.getString("info").getBytes("ISO-8859-1"), "utf-8"); System.out.println(message); // 中文资源 }
}

  
 

getBundle方法默认加载Locale.getDefault()

public static final ResourceBundle getBundle(String baseName) { return getBundleImpl(baseName, Locale.getDefault(), getLoader(Reflection.getCallerClass()), getDefaultControl(baseName)); }
  
 

使用重载函数,读取英文资源

Locale locale = Locale.US;
ResourceBundle bundle = ResourceBundle.getBundle("message", locale);

// 解决中文乱码问题
String message = new String(bundle.getString("info").getBytes("ISO-8859-1"), "utf-8");

System.out.println(message);
// 英文资源

  
 

如果没有对应区域编码的资源文件,读取默认资源
读取流程:

指定区域的资源文件 > 默认的本地资源文件 > 公共的资源文件

  
 

46 格式化文本显示

格式化方法

public class MessageFormat extends Format { public static String format(String pattern, Object ... arguments)
}

  
 

代码示例


import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

class Demo { public static void main(String[] args) { // 占位符{} String message = "hello {0} date: {1}"; System.out.println(MessageFormat.format(message, "admin", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))); // hello admin date: 2019-11-18 }
}

  
 

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/103134301

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。