Java缺少资源

时间:2010-06-28 19:21:26

标签: java internationalization

我正在开发一个大量使用资源包和i18n的J2SE应用程序(想想kiosk风格的应用程序)。这不仅包括翻译,还包括格式化和其他i18n问题。我们有适当的自定义逻辑来均衡资源加载,但它相当简单。我遇到的问题是MissingResourceException。即使我绕过应用程序中的自定义逻辑并直接调用ResourceBundle类来加载此特定包,Java也无法为特定区域设置加载它。以下是堆栈跟踪的根异常:

Caused by: java.util.MissingResourceException: Can't find bundle for base name version1/FormatResource, locale en_GB
 at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836)
 at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:726)
 at java.util.ResourceBundle.getBundle(ResourceBundle.java:576)

资源包位于Eclipse中的类文件夹中的目录“version1”中,该文件夹位于类路径的顶部。此文件夹包含使用相同资源包加载逻辑加载的其他资源包,以及使用系统类加载器加载时也可以加载的大量XML配置。资源包的相关文件是:

FormatResource_cs_CZ.properties
FormatResource_en_GB.properties
FormatResource_fr_BE.properties
FormatResource_fr_FR.properties
FormatResource_hu_HU.properties
FormatResource_nl_BE.properties
FormatResource_nl_NL.properties
FormatResource_pl_PL.properties
FormatResource_sk_SK.properties

当我的应用程序在波兰语语言环境中启动时,一切都很好。如果我以波兰语语言环境的用户身份登录,一切都很好。如果我以英国用户身份登录,则应用程序会尝试加载所有en_GB软件包(翻译,格式化程序等),并在此软件包上失败。它找不到FormatResource_en_GB.properties,它显然在类路径中:上面的文件列表是从命令行复制和粘贴的。

我觉得有趣的最后一个问题是,如果我在version1目录中定义FormatResource_en_US.properties,那么即使FormatResource_pl_PL.properties文件也无法加载,应用程序甚至无法启动。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我会尝试测试文件&操作系统问题如权限。

重命名您的FormatResource_en_GB.properties,使其不受影响,并复制其中一个正在运行的FormatResource个文件。

答案 1 :(得分:0)

我觉得有趣的是,当你把美国放在列表的顶部时,它会加载那个,而不是任何其他的(当波兰语位于顶部时类似)。在查找下一个资源包时是否切换了语言环境?或者它是否在程序首次启动时保持默认设置?

另一个想法是类加载器....每当我遇到属性文件没有正确定位时(即使它们是我期望的那些),我最终还是要看看类加载器是如何加载的。通常它与我怀疑的不同(就像其他地方的重复文件,或者多个类加载器相互冲突)。

只想两个想法。