50

我正在使用一个依赖于 JSF 的库。

当我尝试运行我的项目时,它显示以下异常按摩..

java.util.MissingResourceException: Can't find bundle for base name /Bundle, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1427)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1250)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:705)

有任何想法吗 ?

4

13 回答 13

66

例外是在类路径的根目录中需要一个Bundle_en_US.properties、 或Bundle_en.properties或至少一个Bundle.properties文件,但实际上没有。

确保至少有一个提到的文件存在于类路径的根目录中。或者,确保您提供正确的捆绑包名称。例如,如果捆绑文件实际上被放置在 packagecom.example.i18n中,那么您需要com.example.i18n.Bundle作为捆绑名称而不是Bundle.

如果您使用的是 Eclipse“动态 Web 项目”,则类路径根由src文件夹表示,所有 Java 包都在其中。如果您使用的是 Maven 项目,则资源文件的类路径根由文件src/main/resources夹表示。

也可以看看:

于 2012-10-20T12:41:38.683 回答
12

maven-tomcat-插件

如果您使用maven-tomcat-plugin/启动项目maven-tomcat7-plugin,则必须将Bundle.properties,甚至是Resource.propertiesin src/main/webapp/WEB-INF/classes。不要问为什么,因为插件如何伪造一个tomcat。

于 2014-02-02T15:49:02.587 回答
8

如果您在 Eclipse 中运行 .java 文件,则需要在构建路径中添加资源路径。之后你不会看到这个错误

于 2014-08-20T09:02:08.183 回答
5

在我的情况下,问题是使用语言标签“en_US”Locale.forLanguageTag(..)而不是“en-US” - 使用破折号而不是下划线!

也可以使用Locale.forLanguageTag("en-US")代替new Locale("en_US")new Locale("en_US")定义带有区域(“US”)的语言(“en”) - 但new Locale("en")有效。

于 2018-02-10T23:52:36.517 回答
4

我有同样的问题,balus 解决方案解决了它。

作为记录:

WEB-INF\faces-config 是

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
    <application>
        <locale-config>
            <default-locale>en</default-locale>
        </locale-config>
        <message-bundle>
            Message
        </message-bundle>
    </application>
</faces-config>

并且在 WebContent\Resources 下有 Message.properties(在 mkyong 的教程之后)

即使我将捆绑包重命名为“Message_en_us”和“Message_en”,也会出现令人讨厌的异常。将其移至 src\ 工作。

如果有人发布缺失的部分以使捆绑包在资源下工作,那将是一件美好的事情。

于 2012-12-18T22:26:02.993 回答
1

就我而言,我正在处理SpringBoot项目,并且遇到了同样的异常。

解决方案是通过将 env.properties 文件添加到类路径(即 src/main/resource 文件夹)中。造成问题的原因是在 log4j 配置中有类似的属性

<Property name="basePath">${bundle:env:log.file.path}</Property>

于 2018-09-16T00:17:17.660 回答
1

Bundle.properties文件必须在文件的目录中.class。如果它位于src目录中,那么您需要确保将其复制到bin同一包中的(输出)目录中。

于 2021-07-20T08:01:50.813 回答
0

在maven中,文件夹资源,在配置文件所在的地方创建相同的包结构,并复制到那里

于 2020-03-19T18:09:01.003 回答
0

问题一定是faces-config.xml文件中的 resource-bunde > base-name 属性具有不同的属性路径。这发生在我的 firstcup Java EE 教程中,我在创建项目时给了一个不同的包名称,然后 Glassfish 无法找到“firstcup.web”上的属性文件夹。

我希望它有所帮助。

于 2017-03-31T22:59:26.543 回答
0

我能够解决问题,资源在我的项目目录中,但是当 junit 实用程序尝试加载它时,它返回 MissingResourceException 错误。原因是资源不在测试类包的类路径中,所以当我在 eclipse 中将 cfg/ 文件夹添加到我的类路径路径条目并将构建 conf 中的输出目录设置为同一个类包时,问题是解决。

当您尝试这种方法时,只需确保类路径 conf 文件显示资源目录的类路径条目(例如 cfg/)

于 2019-07-14T19:51:40.590 回答
0

我在使用 Netbeans 时遇到了同样的问题。我去了项目文件夹并复制了属性文件。我认为单击“构建”,然后单击“类”。我在该文件夹中添加了属性文件。这解决了我的问题。

于 2017-01-27T20:24:41.453 回答
0

我使用 Eclipse(没有 Maven),所以我将.properties文件放在src还包含 java 源代码的文件夹中,以便在构建项目后将.properties文件放在文件夹中。classes它工作正常。看看这篇文章:https ://www.mkyong.com/jsf2/cant-find-bundle-for-base-name-xxx-locale-en_us/

希望这对您有所帮助。

于 2017-02-08T06:03:02.020 回答
0

确保您没有在错误的资源文件夹中添加属性文件,因为在“网页”下有一个,在“其他来源/...”下有一个。他们需要在“其他来源/...”下。

于 2018-11-04T20:37:54.650 回答