首页 > 其他分享 >ResourceBundle使用详解

ResourceBundle使用详解

时间:2023-12-08 14:13:41浏览次数:33  
标签:zh bundle ResourceBundle 详解 使用 cancel my properties

ResourceBundle使用详解

这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现本地化。比如对于“取消”,中文中我们使用“取消”来表示,而英文中我们使用“cancel”。若我们的程序是面向国际的(这也是软件发展的一个趋势),那么使用的人群必然是多语言环境的,实现国际化就非常有必要。而ResourceBundle可以帮助我们轻松完成这个任务:当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包(大多数情况下也就是.properties文件)中加载它。这样可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(即便不是全部)特定于语言环境的信息隔离开来。

这使编写的程序可以:

轻松地本地化或翻译成不同的语言

一次处理多个语言环境

以后可以轻松进行修改,以便支持更多的语言环境

说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

使用这个类,properties需要遵循一定的命名规范,一般的命名规范是: 自定义名语言代码国别代码.properties,如果是默认的,直接写为:自定义名.properties。

比如:

myres_en_US.properties

myres_zh_CN.properties

myres.properties

当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。

没有提供语言和地区的资源文件是系统默认的资源文件。

资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

ResourceBundle的类层次结构

PropertyResourceBundle将本地化的文本存储于Java property文件中。

从ResourceBundle中获取值

获取ResourceBundle实例后可以通过下面的方法获得本地化值。

getObject(String key);

getString(String key);

getStringArray(String key);

还可以通过keySet()方法获取所有的key。Set keys = bundle.keySet();

其它ResourceBundle 方法可以通过查看文档获得。

测试及验证

新建4个属性文件

my_en_US.properties:cancelKey=cancel

my_zh_CN.properties:cancelKey=\u53D6\u6D88(取消)

my_zh.properties:cancelKey=\u53D6\u6D88zh(取消zh)

my.properties:cancelKey=\u53D6\u6D88default(取消default)

获取bundle

ResourceBundle bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN"));

1

其中new Locale(“zh”, “CN”)提供本地化信息,上面这行代码,程序会首先在classpath下寻找my_zh_CN.properties文件,若my_zh_CN.properties文件不存在,则取找my_zh.properties,如还是不存在,继续寻找my.properties,若都找不到就抛出异常。

代码

import javax.annotation.Resource;

import java.util.Locale;

import java.util.ResourceBundle;

public class Main {

public static void main(String args[]) {

ResourceBundle bundle = ResourceBundle.getBundle("my", new Locale("zh", "CN"));

String cancel = bundle.getString("cancelKey");

System.out.println(cancel);

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

cancel = bundle.getString("cancelKey");

System.out.println(cancel);

bundle = ResourceBundle.getBundle("my", Locale.getDefault());

cancel = bundle.getString("cancelKey");

System.out.println(cancel);

bundle = ResourceBundle.getBundle("my", Locale.GERMAN);

cancel = bundle.getString("cancelKey");

System.out.println(cancel);

bundle = ResourceBundle.getBundle("my");

for (String key : bundle.keySet()) {

System.out.println(bundle.getString(key));

}

}

}

输出结果

取消

cancel

取消

取消

取消

说明:前面三个分别按照zh_CN,US,默认的结果输出,第四个由于我们未定义GERMAN属性文件,这时ResourceBundle为我们提供了一个fallback(也就是一个备用方案),这个备用方案就是根据当前系统的语言环境来得到的本地化信息。所以若是找不到GERMAN的,之后就会去找CHINA了,所以找到了res_zh_CH.properties这个资源包。最后一个是若有多个属性文件,可以按照Map的形式遍历,获得属性文件内的各个值。

标签:zh,bundle,ResourceBundle,详解,使用,cancel,my,properties
From: https://www.cnblogs.com/w1366/p/17887036.html

相关文章

  • zabbix使用自定义监控项权限不足
    一、背景zabbix在配置好个人监控项后,最开始基本上都会遇到权限不足的问题。二、解决方法两种解决方法:1、配置sudoers,然后再key值执行命令前加sudo(相对来说比较麻烦)2、配置zabbix_agent#zabbix-agent配置echo"AllowRoot=1">>/etc/zabbix/zabbix_agentd.conffind/-na......
  • 如何设置和使用静态HTTP服务器
    随着互联网技术的不断发展,越来越多的企业和个人开始使用静态HTTP服务器来展示自己的网站内容。静态HTTP服务器是指服务器上存储着静态网页文件,当用户请求访问这些网页时,服务器直接将文件发送给用户的浏览器进行展示。本文将介绍如何设置和使用静态HTTP服务器。一、选择合适的服务器......
  • 静态HTTP和动态HTTP的混合使用:最佳实践
    在当今的互联网环境中,静态HTTP和动态HTTP各有其优势和局限。静态HTTP具有速度快、安全性高和易于维护的特点,而动态HTTP则能够实现动态交互和处理大量动态数据。为了充分利用两者的优势,越来越多的网站开始采用静态HTTP和动态HTTP混合使用的模式。本文将探讨这种混合模式的最佳实践。......
  • 使用静态HTTP提供动态内容
    在Web开发中,静态HTTP和动态HTTP常被视作两种截然不同的技术。静态HTTP主要用于传输不变的内容,如HTML、CSS和JavaScript文件,而动态HTTP则能处理用户交互、实时数据等动态需求。但鲜为人知的是,我们其实可以通过一些技巧,用静态HTTP来提供动态内容。本文将深入探讨这一主题。首先,为什么......
  • 使用wireshark常用的过滤命令
    一、按ip过滤过滤源ip、目的ip。在wireshark的过滤规则框Filter中输入过滤条件。如查找源地址或目标地址为192.168.101.8的包,ip.addr==192.168.101.8;如查找目的地址为192.168.101.8的包,ip.dst==192.168.101.8;查找源地址为ip.src==92.168.101.8;二、按端口过滤端口过滤。如过滤80端口......
  • 什么是API数据接口该怎么使用?
    API数据接口是一种用于数据传输和交互的方式,它定义了一组规则和标准,使得不同的软件应用程序可以相互通信并共享数据。通过API数据接口,开发者可以轻松地访问和集成不同应用程序的数据,而不必了解底层数据的具体实现细节。一、什么是API数据接口?API(ApplicationProgrammingInterface,......
  • go中使用闭包
    Go语言中的闭包:封装数据与功能的强大工具原创 TimLiu 爱发白日梦的后端 2023-11-0115:35 发表于广东收录于合集#go112个爱发白日梦的后端专注Go语言领域的发展,学习成为更牛逼的架构师,日常分享Go语言、架构、软件工具的使用。149篇原创内容公众号......
  • 代码漏洞扫描工具sonarqube在本地环境的使用
    sonarqube可以与源码管理工具gitlab集成,实现提交代码后自动扫描检测代码的相关漏洞。该CI/CD过程大致为:1、研发人员提交源码至gitlab服务器—>2、gitlabrunner执行指定脚本(由项目的.gitlab-ci.yml配置文件指定具体内容,如编译项目、开启代码检测) —>3、sonar-scanner对项目进......
  • HTML中title标签的使用
    HTML中的title标签是非常重要的标签之一,它用来描述网页的标题。在搜索引擎优化中,title标签是非常关键的,因为搜索引擎会将title标签中的文字作为页面的主要描述,并根据其相关性来判断网页内容的质量和权重。本文将详细讲解title标签的使用,包括以下内容:@[toc]##1.title标签的基本用......
  • centos安装xrdp服务,可以使用系统用户mstsc连接
    Centos6安装依赖yuminstall-yautoconfautomakelibtoolpkg-configopenssl-develpam-devellibjpeg-develfuse-develTurboJPEGlibX11-devellibXfixes-devellibXrandr-develnasmbinutilsredhat-lsb-coreCentos7安装依赖yuminstall-yfingercmakepatchgccma......