学习Java:ResourceBundle

本文介绍如何使用ResourceBundle实现Java程序的国际化,并结合正则表达式进行数据验证。通过将字符串资源外部化,使得应用程序能够根据用户的语言和地区设置显示相应的翻译内容。此外,还介绍了如何设置运行时地区以及使用JFormattedTextField进行文本域格式化。

通过ResourceBundle 将写在程序中字符串放到配置文件中,同时可以方便的实现国际化

[@more@]


正则表达式与 Java ResourceBundle 相结合的一种数据验证技术。Java 语言对正则表达式的支持可以大大简化数据验证。您

可以将数据与正则表达式进行比较,如果它们匹配,则知道数据是有效的。另一方面,Java ResourceBundle 包含翻译好的字

符串,用于匹配用户机器上的当前语言和国家设置。ResourceBundle 中的字符串通常是出现在应用程序中的文本,但是也可

以是特定于某个地区的任何东西.

1。将字符串抽取出来
通过Eclipse的source-》Externalize String 来生成ResourceBundle相关的类和文件
答案取决于 ResourceBundle 是如何创建的

无论何时运行一个 Java 程序,它都有一个特定的地区。地区由两个字母的语言代码和两个字母的国家代码来指定,这些代码

是由 ISO 标准定义的。地区代码还有一个不常用的变种部分,用于更精确地指定特定的地区。下面是一些例子:
en_US 是 U.S. English 地区。
en_CA 是 Canadian English 地区。
fr_CA 是 French Canadian 地区。
en 是 English 地区。
en_US_UNIX 是 U.S. English 地区的 UNIX 变种。至于该变种的意义及其用法,是由应用程序的编写者定义的。


当创建一个新的 ResourceBundle 时,Java 运行时根据当前的地区查找文件。例如,如果当前地区是en_US,那么 Java 运行

时依次查找以下文件:
messages_en_US.properties
messages_en.properties
messages.properties
当 ResourceBundle 收集翻译好的字符串时,在 messages_en_US.properties 中发现的任何字符串都具有比

messages_en.properties 和 messages.properties 中具有相同名称的字符串更高的优先级。如果运行时没有发现任何特定于

地区的文件,那么它将使用 messages.properties 中的字符串。

记住,创建 ResourceBundle 的代码指定了文件名 messages.properties。该文件名不会随着地区的改的代码也不需要做出更

改。您只需指定这个文件名,Java 运行时可以自动得出应该装载哪个特定于地区的文件。

一个特定于地区的 .properties 文件只包含不同于更通用的 .properties 文件的字符串

在运行时设置地区:

第一种方法是在运行应用程序的时候设置 user.language 和 user.country 这两个系统属性
java -Duser.language=XXX -Duser.country=XX

第二种方法是在应用程序中设置地区。通过 Locale.setDefault() 方法可以在代码中设置默认的地区。


Swing 提供了 javax.swing.JFormattedTextField 类。利用这个类可以为文本域定义一个掩码

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/855/viewspace-955930/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/855/viewspace-955930/

AI已准备就绪,请打开课程页 . . . 视频倍速 跳转模式 自动答题 操作说明 · 当前版本仅支持部分学习平台的网页部分内容辅助学习,其他在陆续适配,敬请期待 · 建议在 Edge 浏览器或 Chrome 浏览器中安装使用,其他浏览器可能存在兼容问题 · 打开某章节后,插件将自动开始执行任务(会显示进行中字样) · 不支持多开,新开一个章节后会停止当前任务 · 运行该插件必须关闭其他插件,否则可能运行异常 · 如需设置更改功能,请点击右上角“齿轮”图标,自行调整 · 不建议开倍速进行,可能会导致学习进度清零 如有问题,请进群咨询 聊天历史记录 暂无会话历史记录哦~ 打开大学搜题酱APP在 「我的」页 点击「电脑端扫码」 下载大学搜题酱App 帮助 HTTP状态 500 - 内部服务器错误 类型 异常报告 消息 在 [29] 行处理 [/bar.jsp] 时发生异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 org.apache.jasper.JasperException: 在 [29] 行处理 [/bar.jsp] 时发生异常 26: if ("en-US".equals(lang)) { 27: res = ResourceBundle.getBundle("text/EN/bar"); 28: } else { 29: res = ResourceBundle.getBundle("text/CN/bar"); 30: } 31: %> 32: Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:610) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 根本原因。 java.util.MissingResourceException: Can't find bundle for base name text/CN/bar, locale zh_CN java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1581) java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1396) java.util.ResourceBundle.getBundle(ResourceBundle.java:782) org.apache.jsp.bar_jsp._jspService(bar_jsp.java:139) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ):注意 主要问题的全部 stack 信息可以在 server logs 里查看 Apache Tomcat/9.0.98
最新发布
12-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值