Java国际化——ResourceBundle基本使用

article/2025/9/22 21:08:26

背景:企业项目中,往往面对国际的。针对不同地区语言,ResourceBundle主要用来处理本地化资源和国际化资源的问题,向用户展示合理的界面显示。

ResourceBundle

官方解释:一堆有着相同前缀名称但有着不同语言后缀名称的属性文件的集合,且至少包含2个有着相似前缀名称的属性文件。
用途:从适合当前用户语言环境的资源包,一适应不同语言环境,后期提示语均在配置文件中,修改便捷。

配合Locale使用:查询Java所支持的国家和语言,方便查询强制化Local属性。

package study;import java.util.Locale;
import java.util.ResourceBundle;public class Test {public static void main(String[] args) {Locale[] localeList = Locale.getAvailableLocales();//遍历数组的每个元素,依次获取所支持的国家和语言for (int i = 0; i < localeList.length ; i++ ){System.out.println(localeList[i].getCountry()+ "( "+localeList[i].getDisplayCountry() +")   "+localeList[i].getLanguage()+"("+localeList[i].getDisplayLanguage()+")");}
}

加载顺序

优先级:本地化资源(默认)>加载系统默认>加载默认的资源文件。
不存在:java.util.MissingResourceException。

本地资源构建:新建myconfig.properties相关文件
myconfig.properties:local=default
myconfig_zh_CN.properties:local=zh_CN
myconfig_en_US.properties:local=en_US

package study;
import java.util.Locale;
import java.util.ResourceBundle;
public class Test {public static void main(String[] args) {//取得系统默认的国家/语言环境System.out.println("=================");//获取本地语言地区属性System.out.println("default:"+Locale.getDefault());//加载默认src下,但是不能读取其他文件加载,本class在src.study下,所以需要加前缀。ResourceBundle resourceBundle0 = ResourceBundle.getBundle("study.myconfig");System.out.println(resourceBundle0.getString("local"));System.out.println("=================");//中文测试Locale locale1 = new Locale("zh", "CN");ResourceBundle resourceBundle1 = ResourceBundle.getBundle("study.myconfig",locale1);System.out.println(resourceBundle1.getString("local"));System.out.println("=================");//英文测试Locale locale2 = new Locale("en", "US");ResourceBundle resourceBundle2 = ResourceBundle.getBundle("study.myconfig",locale2);System.out.println(resourceBundle2.getString("local"));System.out.println("=================");//德文测试,但不存在该语言的PropertiesLocale locale3 = new Locale("de", "GR");ResourceBundle resourceBundle3 = ResourceBundle.getBundle("study.myconfig",locale3);System.out.println(resourceBundle3.getString("local"));
}

测试结果:配置文件都存在.png
顺序:对于中国用户:中国>默认。英国用户:英国>默认。 德国:中国>默认(德国不存在,但是不是直接走默认,而是先走中国,中国是本地化资源!!!)
特别:
1.属性key-value,若上级资源中没有key,则去下级资源中寻找。
2.优先走本地化资源文件。若不存在,则走不带后缀文件,本地化资源文件不等于默认不带后缀的配置文件。

删除myconfig_zh_CN.properties:

本地资源不存在.png
顺序:对于中国用户:默认。英国用户:英国>默认。 德国:默认(德国不存在,但是不是直接走默认,而是先走中国,中国是本地化资源!!!)

其他注意:
报错:Can’t find bundle for base name myconfig, locale xx_XX。查找文件路径是否正确。

  • 直接配置,src下读取,但是内部文件夹,需要前缀读取。
  • src路径下的文件在编译后会放到WEB-INF/clases路径下(默认的classpath)
  • 直接放到WEB-INF下的话,是不在classpath下的

编码:

底层读取Properties文件是根据字节流的形式,防止中文乱码,建议配置文件存在中文等,使用Unicode字符集进行配置。
源码片段:

 else if (format.equals("java.properties")) {final String resourceName = toResourceName0(bundleName, "properties");if (resourceName == null) {return bundle;}final ClassLoader classLoader = loader;final boolean reloadFlag = reload;InputStream stream = null;try {stream = AccessController.doPrivileged(new PrivilegedExceptionAction<InputStream>() {public InputStream run() throws IOException {InputStream is = null;if (reloadFlag) {URL url = classLoader.getResource(resourceName);if (url != null) {URLConnection connection = url.openConnection();if (connection != null) {// Disable caches to get fresh data for// reloading.connection.setUseCaches(false);is = connection.getInputStream();}}} else {is = classLoader.getResourceAsStream(resourceName);}return is;}});} catch (PrivilegedActionException e) {throw (IOException) e.getException();}

经验

1.可以通过只配置myconfig.properties来全局变量,不配置其他语言文件。
2.企业项目中,配合PropertyUtils,设置map.properties,不打包,当国际化各个配置文件找不到相应提示,提供一个类别管理的报错。
3.编码问题请使用Unicode字符集输入,可以使用在线转码工具也可以配合java自带的native2ascii.exe
4.配合NumberFormat ,DateFormat进行String处理

补充

Properties补充:
https://www.cnblogs.com/alfredinchange/p/5384760.html
ResourceBundle运行会自行将配置文件打包,也可以根据情况自己配合idea打包:https://segmentfault.com/a/1190000016496715
Spring相关:https://blog.csdn.net/u010882791/article/details/83756717


http://chatgpt.dhexx.cn/article/vcf7MunE.shtml

相关文章

JAVA中ResourceBundle使用详解(一)

最近在看HttpServlet源码时候&#xff0c;碰到ResourceBundle的使用&#xff0c;就此记录一下。 一、ResourceBundle是啥 在package java.util;下 这个类主要用来解决国际化和本地化问题。国际化和本地化是啥&#xff0c;另一篇文章有写&#xff0c;这里直接上用法。 这个类…

JAVA中ResourceBundle使用详解

JAVA中ResourceBundle使用详解 这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念&#xff0c;两者都是一起出现的。可以说&#xff0c;国际化的目的就是为了实现本地化。比如对于“取消”&#xff0c;中文中我们使用“取消”来表示&#xff0c;而英文中我…

突发!PHP服务器被攻击,恶意代码合入git仓库

本文转载自 新智元 PHP的git服务器被攻击了&#xff0c;合入了两个恶意commit&#xff0c;nikic发信称将迁移仓库到GitHub上。代码中竟然包括「Zerodium」&#xff0c;莫非背后有什么交易&#xff1f; PHP的一名贡献者Nikita Popov (网名nikic)公开发信称&#xff0c;php的gi…

搭建自己个人服务器

很高兴能够跟大家分享我写的这篇文章&#xff01; 搭建自己的个人服务器主要分为三步&#xff0c;分别为1、通过腾讯云或者阿里云、华为云等购买云服务器&#xff0c;2、申请域名并解析&#xff0c;3、开发自己程序或者前后端之类的部署在服务器 1、通过腾讯云或者阿里云、华…

PHP - 如何下载服务器上的文件

1.应用场景 需要将服务器上的文件&#xff0c;下载到客户端&#xff08;浏览器&#xff09; 补充场景&#xff1a; PHP如何下载远程服务器上的文件到本地服务器 2.学习/实践 1. 文档 请教PHP如何下载远程服务器上的文件到本地服务器上-php教程-PHP中文网 2. 整理输出 方式有…

PHP获取当前服务器版本,Ip等详细信息

新做的一个项目后台几乎完了&#xff0c;简单加了一个获取服务器详情的页面,记录一下&#xff0c;留着备用&#xff01; 服务器IP地址 $_SERVER[SERVER_ADDR]服务器域名 $_SERVER[SERVER_NAME] 服务器端口 $_SERVER[SERVER_PORT]服务器版本 php_uname(s).php_unam…

微信小程序之PHP服务器搭建

在去年的时候&#xff0c;参加过学校的一个创业活动&#xff0c;在团队决定做一个关于图书的微信小程序以后&#xff0c;我负责做微信小程序的后台程序&#xff0c;因为初次接触&#xff0c;决定选用较为简单的PHP作为后台语言&#xff0c;实现了微信小程序的一些基本功能&…

【树莓派】搭建LAMP(Linux Apache Mysql PHP)服务器

基于树莓派搭建LAMP&#xff08;Linux Apache Mysql PHP&#xff09;服务器 配置树莓派 树莓派 连接WIFI 配置SSH 连接SSH 修改密码并解锁root用户 固定IP 调整服务器性能 Apache Mysql PHP 内网穿透 本文主要介绍了树莓派购买后的配置方法&#xff0c;并在树莓派上搭建LAMP&am…

PHP分布式部署代码同步Git实现

PHP 分布式部署后 代码自动同步实现 项目架构如下: 需要更新代码时我们只需要把代码传到主服务器后通过定时任务主服务器自动push 代码到Git服务端,之后其他从服务器则自动从Git云端拉取最新的代码即可 需要用到 expect 软件 安装expect yum install expect定时push shell…

大部分PHP程序员,都搞不懂如何安全代码部署

总结 1.创建一个普通用户账户 2.先设置所有文件夹为只读不可写 sudo chmod -R a-w /path/to/directory3.再把php执行的用户组加上 sudo chown -R username:groupname /path/to/php/files4.再把可执行的文件加入 sudo chmod -R 755 /path/to/php/files关于权限 理清PHP在Lin…

PHP项目部署到云服务器(CentOS+HTTP+PHP+MYSQL)

如何将写好的项目部署到云服务器&#xff0c;让外界可以通过互联网访问项目网站。以下使用的是腾讯云服务器操作&#xff0c;系统环境为CentOS7.9。 一、购买云服务器 打开腾讯云官网&#xff0c;注册好自己的平台账号。如果是新人的话去新人专区购买服务器&#xff0c;性价比…

phpstudy搭建nginx+php服务器显示php网页

下载了phpstudy-all.bin一键安装包&#xff0c;管理员执行./phpstudy-all.bin安装完成后&#xff0c;在火狐浏览器上输入:localhost 测试服务器是否从成功。 遇到的问题&#xff1a; 默认打开的web页面是/usr/share/nginx/www/index.html页面&#xff0c;如下 初次尝试解决&a…

php如何启动内置web服务器

前言&#xff1a; PHP从5.4开始&#xff0c;就提供了一个内置的web服务器。 当然这个主要是用来做本地的开发用的。 不能用于线上环境。 现在我就介绍一下这个工具如何使用。 前提&#xff1a; php已经加入到本地电脑的环境变量中 命令中输入&#xff1a; cd 项目目录 php -S…

公司官网建站笔记(二):在云服务器部署PHP服务(公网访问首页)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/124659175 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子(红模仿)的博…

阿里云ECS服务器Linux环境下配置php服务器(三)--项目部署篇

在前两篇里&#xff0c;我们分别介绍了如何购买阿里云服务器&#xff0c;安装基本软件和配置&#xff08;请看阿里云ECS服务器Linux环境下配置php服务器(一)&#xff0d;&#xff0d;基础配置篇&#xff09; 以及如何安装使用phpMyAdmin&#xff08;请看阿里云ECS服务器Linux环…

阿里云ECS服务器Linux环境下配置php服务器(二)--phpMyAdmin篇

上一篇讲了php服务器的基本配置&#xff0c;我们安装了apache&#xff0c;php&#xff0c;还有mysql&#xff0c;最后还跑通了一个非常简单的php页面&#xff0c;有兴趣的朋友可以看我的这篇博客&#xff1a; 阿里云ECS服务器Linux环境下配置php服务器(一) 这一次我们来继续说…

微信小程序wx.uploadFile(上传文件)PHP服务器获取formData的数据

例如下面的代码是微信小程序上传图片的伪代码 wx.chooseImage({success: function(res) {var tempFilePaths res.tempFilePathswx.uploadFile({url: https://example.weixin.qq.com/upload, //仅为示例&#xff0c;非真实的接口地址filePath: tempFilePaths[0],name: file,fo…

树莓派4B搭建轻量级Web服务器 (Nginx,sqlite,php)

树莓派硬件的配置&#xff0c;包括外置硬盘的挂载和设置&#xff0c;系统的烧录和设置就略了&#xff0c;详情见第一篇文章。 一&#xff1a;更新源安装Nginx服务器 sudo apt-get updatesudo apt-get install nginx二&#xff1a; 启动Nginx服务器 //启动服务器的两种方式sudo…

一、用XAMPP搭建本地PHP服务器,运行php文件

一、XAMPP下载安装 点击下载&#xff0c;下载完成之后执行安装文件安装&#xff0c;一路next&#xff0c;完成。运行界面如下&#xff1a; 二、启动 这里&#xff0c;我是把XAMPP安装在了D:\XAMPP文件夹下。 点击第一行Apache后面的Start是启动XAMPP本地虚拟机(默认端口8080)…

Android手机利用KSWEB+端口转发搭建PHP服务器

Android手机利用KSWEB端口转发搭建PHP服务器 转载来自&#xff1a;https://golthr.gitee.io/articles/202002281619/ KSWEB是一款基于Android的开源服务器&#xff0c;可通过Lighttpd/Nginx/ApachePHPMySql在Android手机上搭建起自己的私人PHP WEB服务器。软件提供了上述功能…