国际化&&加载.properties配置文件的方式 您所在的位置:网站首页 zh是什么名字 国际化&&加载.properties配置文件的方式

国际化&&加载.properties配置文件的方式

2024-06-17 08:59| 来源: 网络整理| 查看: 265

国际化与格式化

即使再小的帆也能远航~

一.内容 概念 java国际化思路 java支持的国家和语言 完成java程序国际化 Properties集合 加载.properties配置文件的方式 二.目录 概念

国际化是指应用程序运行时,可根据客户端请求来自的国家/地区、语言的不同而显示不同的界面。例如,如果请求来自中文操作系统的客户端,则应用程序中的各个提示信息和帮助等都使用中文文字;如果客户端使用英文操作系统,则应用程序能自动识别,并做出英文的响应。

java国际化思路

Java程序的国际化思路是将程序中的标签、提示等信息放在资源文件中,程序需要支持哪些国家、语言环境,就对应提供相应的资源文件。

Java程序的国际化主要通过三个类来完成:1、java.util.ResourceBundle:用于加载国家、语言资源包2、java.util.Locale:用于封装特定的国家/区域、语言环境。3、java.text.MessageFormat:用于格式化带占位符的字符串。

为了实现程序的国际化,必须先提供程序所需的资源文件。资源文件的内容时很多key-value对,其中key是程序使用的部分,而value则是程序界面的显示字符串。

资源文件的命名可以有如下三种形式:1、baseName_language_country.properties2、baseName_language.properties3、baseName.properties其中baseName是资源文件的基本名,可随意指定,而language和country都不可以随意变化而必须是Java所支持的语言和国家。

java支持的国家和语言

Java支持绝大部分的国家和语言,如果需要获取Java所支持的国家和语言,则可调用Locale类的getAvailableLocales()方法,该方法返回个Locale数组,该数组包含了Java所支持的国家和语言。

Local的构造方法 Locale(String language) 根据语言代码构造一个语言环境。 Locale(String language, String country) 根据语言和国家/地区构造一个语言环境。 Locale(String language, String country, String variant) 根据语言、国家/地区和变量构造一个语言环境 Local的常用方法 String getCountry() 返回此语言环境的国家/地区代码,将为空字符串或大写的 ISO 3166 两字母代码。 String getLanguage() 返回此语言环境的语言代码,可以是空字符串或小写的 ISO 639 代码。 String getDisplayLanguage() 返回适合向用户显示的语言环境语言名。 String getDisplayCountry() 返回适合向用户显示的语言环境国家/地区名 static Locale[] getAvailableLocales() 返回所有已安装语言环境的数组。//静态的!! static Locale getDefault() 获取系统默认的国家/语言环境//静态的!!! 示例 public class LocalDemo { public static void main(String[] args) { //Local对象封装了语言和国家信息 Locale[] locales = Locale.getAvailableLocales(); for (Locale locale : locales) { System.out.println(locale.getLanguage()+"语言信息:"+ locale.getDisplayLanguage()); System.out.println(locale.getCountry()+"国家信息:"+ locale.getDisplayCountry()); } } } //结果 语言信息: 国家信息: ar语言信息:阿拉伯文 AE国家信息:阿拉伯联合酋长国 ar语言信息:阿拉伯文 JO国家信息:约旦 ar语言信息:阿拉伯文 SY国家信息:叙利亚 hr语言信息:克罗地亚文 ................. ................. 完成java程序国际化

国际化是指应用程序运行时,可根据客户端请求来自的国家/地区、语言的不同而显示不同的界面。

比如做一个中英双版本的网站~

需要创建两个properties文件,把不同的标签存入properties文件(properties文件是常用的三大配置文件(.properties; .xml; .yaml)之一,是一种保存键值对的文件,每行一个键值对对象.形如: key=value)

创建另外一个类路径的文件夹:配置文件夹,来存放properties文件(不要将properties文件放在src目录下,src也是类路径的一个文件夹,但src下的 java文件会被编译,是用来放类文件的)具体做法(idea为例):

项目名右键–>new–>Directory,取名为config;(此时就是一个普通文件夹)config右键–>Mark Directory as–>Resource Root;(变成类路径文件夹)

在国际化中,.properties文件是用来做国际化资源文件的. 存放不同国家与地区语言下的一些字符串信息. 命名方式:

基础名_语言名_地区.properties

创建一个.properties文件,存放某一个国家的语言,

具体做法: config右键–>new–>properties–>命名

# my_en_US username=Username password=Password index=Index # my_zh_CN.properties username=用户名 password=密码 index=首页

注:如果config右键–>new的时候没有找到properties这个模板,先建这个模板: File–>settings–>Editor–>File and Code Templates–>在第一个Files下点"+“号–>Name, Extension都写"properties”–>两个方框勾对号–>Apply,Ok

用java代码演示(并没有实际效果,因为实际效果是由用户在页面点)

public class ResourceBundle { public static void main(String[] args) { Locale localeCn = new Locale("zh", "CN"); Locale localeUs = new Locale("en", "US"); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("my", localeCn); String username = bundle.getString("username"); System.out.println(username); } } //结果 用户名 Process finished with exit code 0 Properties集合

Properties集合是唯一一个和IO流相结合的集合

Properties 类表示了一个持久的属性集。Properties可保存在流中或从流中加载。继承了Hashtable.

属性列表中每个键及其对应值都是一个字符串。properties集合是一个双列集合,key和value默认都是字符串

常用构造方法

Properties() 创建一个无默认值的空属性列表。

常用方法

void load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 //把硬盘中的文件(键值对),读取到集合中使用 void load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 //把硬盘中的文件(键值对),读取到集合中使用 void store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 //将集合中的临时数据,持久化写入硬盘中存储 void store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 //将集合中的临时数据,持久化写入硬盘中存储 //操作字符串的特有方法 Object setProperty(String key, String value) 调用 Hashtable 的方法 put String getProperty(String key) 用指定的键在此属性列表中搜索属性 //通过key找到value Set stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串 //相当于Map集合的Keyset集合

代码示例

public class PropertiesDemo { public static void main(String[] args) { //创建Properties集合对象 Properties prop=new Properties(); //使用setProperty方法往集合中添加数据,key,value只能是字符串 prop.setProperty("山东", "济南"); prop.setProperty("河北","石家庄"); prop.setProperty("西藏","拉萨"); prop.setProperty("中国","北京"); //使用stringPropertyName将Properties集合中的key拿出,存储到set集合中 Set set = prop.stringPropertyNames(); //遍历set集合,取出每一个key for (String key : set) { //使用getProperty方法通过key获取value String value = prop.getProperty(key); System.out.println(key+"-->"+value); } } } //结果 中国-->北京 河北-->石家庄 西藏-->拉萨 山东-->济南 Process finished with exit code 0

properties集合中的store方法

void store(OutputStream out, String comments) void store(Writer writer, String comments) OutputStream out :字节输出流,不能写中文 Writer writer :字符输出流,可以写中文 String comments:注释,用来解释保存的文件是做什么用的 不能使用中文,会产生乱码.默认是Unicode编码 一般使用""全空字符

使用步骤:

创建Properties集合对象创建字节输出流或字符输出流对象,构造方法中绑定要输出的目的地使用Properties集合中的store方法,把集合中的临时数据,持久化写入到硬盘中存储释放资源

代码示例:

public class PropertiesDemo { public static void main(String[] args) throws IOException { //1.创建Properties集合对象,添加数据 Properties prop=new Properties(); prop.setProperty("山东", "济南"); prop.setProperty("河北","石家庄"); prop.setProperty("西藏","拉萨"); prop.setProperty("中国","北京"); //2.创建字节输出流或字符输出流对象,构造方法中绑定要输出的目的地 FileWriter fw = new FileWriter("data1.txt"); //3.使用Properties集合中的store方法,把集合中的临时数据,持久化写入到硬盘中存储 prop.store(fw,"sava data"); //4.释放资源 fw.close(); } } //结果 Process finished with exit code 0 //打开data1.txt看一看 #sava data #Thu Aug 19 23:59:22 CST 2021 中国=北京 西藏=拉萨 河北=石家庄 山东=济南

properties集合中的load方法

void load(InputStream inStream) void load(Reader reader) InputStream inStream:字节输入流,不能读取含有中文的键值对 Reader reader: 字符输入流,能读取含有中文的键值对

使用步骤:

创建Properties集合对象使用properties集合对象中的方法load读取保存键值对的文件遍历properties集合

注意:

存储键值对的文件中,键与值默认的连接符号可以使用=,空格(其他字符)存储键值对的文件中,可以使用#进行注释,该注释的键值对不会再被读取存储键值对的文件中,键与值默认的都是字符串,不用再加引号

代码示例:

public class PropertiesDemo { public static void main(String[] args) throws IOException { //1.创建Properties集合对象,添加数据 Properties prop=new Properties(); //2.使用properties集合对象中的方法load读取保存键值对的文件 prop.load(new FileReader("data1.txt")); //遍历properties集合 Set set = prop.stringPropertyNames(); for (String key : set) { String value = prop.getProperty(key); System.out.println(key+"


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有