我们使用fmt:setBundle从数据库加载资源包(我们扩展了ResourceBundle类来做到这一点).当我们修改数据库中的值时,我们必须重新加载Web服务器以在Web应用程序上显示新值.
有没有简单的方法来使用新值而无需重新启动Web服务器?
(我们不希望总是仰望从数据库的价值,但我们希望通过调用一个特殊的"管理员"的URL缓存失效,例如)
编辑:我们正在使用JDK 1.4,所以我更喜欢该版本的解决方案.:)
我们java.util.ResourceBundle
用来加载属性信息.我们的属性文件变得如此庞大,我们正在考虑将主属性文件拆分为多个子模块.是否有可能实现这一目标?
master.properties
==>
master.properties
include moduleA.properties
include moduleB.properties
Run Code Online (Sandbox Code Playgroud)
让我知道?
我已经看到了一些关于如何通过getResourceAsStream在jar中加载特定文件的答案,我可以管理它.但是我面对的是一些非常具体的内容,我在论坛上找不到相关的答案.
这是配置:
我有一个jar文件,其conf目录包含2个属性文件messages_en_US.properties和messages_fr_FR.properties.加载这些资源的经典方法是使用
ResourceBundle.getBundle("messages", java.util.Locale.getDefault());
Run Code Online (Sandbox Code Playgroud)
如果文件在磁盘上,则在programm类路径引用的目录中,这可以正常工作.但我不知道如何管理ResourceBundle.getBundle的使用和jar中的资源的使用.实际上,因为我看不到通过getResourceAsStream的任何桥接(或者这意味着我自己管理语言环境以指定整个资源文件名,这不是很聪明).
有人可以帮忙吗?
谢谢.
我在类路径中有三个资源文件:
labels.properties:
language = Default
Run Code Online (Sandbox Code Playgroud)
labels_en.properties:
language = English
Run Code Online (Sandbox Code Playgroud)
labels_fr.properties:
language = French
Run Code Online (Sandbox Code Playgroud)
有没有办法让一个ResourceBundle
总是加载labels.properties
NO MATTER 的对象我的默认值Locale
是什么?
ResourceBundle.getBundle("labels")
返回与当前默认语言环境对应的一个(如预期的那样).
我能找到的唯一方法是将默认语言环境设置为不存在的语言环境,但这可能会破坏其他模块.
谢谢!
Locale.setDefault( Locale.ENGLISH);
Assert.assertEquals( "English", ResourceBundle.getBundle( "labels").getString( "language"));
Locale.setDefault( Locale.FRENCH);
Assert.assertEquals( "French", ResourceBundle.getBundle( "labels").getString( "language"));
Assert.assertEquals( "French", ResourceBundle.getBundle( "labels", new Locale( "do-not-exist")).getString( "language"));
Locale.setDefault( new Locale( "do-not-exist"));
Assert.assertEquals( "Default", ResourceBundle.getBundle( "labels").getString( "language"));
Run Code Online (Sandbox Code Playgroud) 我正在使用ResourceBundle,我想给用户一个选择GUI语言的选项.
我想获得特定包下的所有资源文件的列表.
我不知道我将拥有哪些资源,因为此应用程序基于插件.
是否可以选择从java中搜索包下的所有可用资源?
(如果不,我猜插件应该为它提供所有可用的本地)
谢谢你们
我想允许国际化到我的Java Swing应用程序.我使用捆绑文件来保留其中的所有标签.
作为测试,我试图将瑞典标题设置为a JButton
.所以在我写的包文件中:
nextStepButton=nästa
Run Code Online (Sandbox Code Playgroud)
在我写的Java代码中:
nextStepButton.setText(bundle.getString("nextStepButton"));
Run Code Online (Sandbox Code Playgroud)
但是按钮的标题字符在运行时出现错误:
我正在使用支持Unicode的Tahoma字体.当我通过代码手动设置按钮标题时,它看起来很好:
nextStepButton.setText("nästa");
Run Code Online (Sandbox Code Playgroud)
知道为什么它在捆绑文件中失败了吗?
--------------------------------------------> 编辑:编码标题:
我尝试使用代码编码来自bundle文件的文本:
nextStepButton.setText(new String(bundle.getString("nextStepButton").getBytes("UTF-8")));
Run Code Online (Sandbox Code Playgroud)
结果仍然是:
year.of.birth={0} was born on {1}
If I pass 2000 or 2008 to {1} the value gets parsed as 2,000 or 2,008.
Run Code Online (Sandbox Code Playgroud)
我不希望逗号作为我翻译的字符串的一部分.我该怎样避免这个?
我想在消息资源包(属性)文件中写"阿拉伯语",但当我尝试保存它时,我收到此错误:
"无法完成保存某些字符无法使用"ISO-85591-1"字符编码进行映射.更改编码或删除字符......"
有人可以指导吗?
我想写:
global.username =اسمالمستخدم
我该如何在属性文件中编写"username"的阿拉伯语?那么,国际化是有效的..
BR SC
Eclipse有一个很好的资源包编辑插件吗?
我正在寻找的主要功能是可以查看不同语言的捆绑包中是否存在相同的密钥.
即如果我有两个文件bundle_en_US.properties
并且bundle_sv_SE.properties
它们会在键中出现错配,则eclipse会显示错误.
我似乎记得这是Eclipse中的一个默认功能,但我似乎无法让它工作.
我有这些代码行:
Locale[] cosas = Locale.getAvailableLocales();
for (int i = 0; i < cosas.length; i++) {
log.info(cosas[i]);
}
Run Code Online (Sandbox Code Playgroud)
我得到这个清单:
ms_MY
ar_QA
is_IS
fi_FI
pl
en_MT
it_CH
nl_BE
ar_SA
ar_IQ
es_PR
es_CL
fi
de_AT
da
en_GB
es_PA
sr
ar_YE
mk_MK
mk
en_CA
vi_VN
nl_NL
es_US
zh_CN
es_HN
en_US
fr
th
ar
ar_MA
lv
de
in_ID
hr
en_ZA
ko_KR
ar_TN
in
ja
sr_RS
be_BY
zh_TW
ar_SD
pt
is
ja_JP_JP_#u-ca-japanese
es_BO
ar_DZ
ms
es_AR
ar_AE
fr_CA
sl
es
lt_LT
sr_ME_#Latn
ar_SY
ru_RU
fr_BE
es_ES …
Run Code Online (Sandbox Code Playgroud) java locale localization resourcebundle internationalization
java ×10
resourcebundle ×10
locale ×2
eclipse ×1
jar ×1
localization ×1
mojibake ×1
plugins ×1
properties ×1
resources ×1
struts2 ×1
swing ×1