【问题标题】:java.util.MissingResourceException: Can't find bundle for base namejava.util.MissingResourceException:找不到基本名称的包
【发布时间】:2010-08-01 18:18:26
【问题描述】:

我正在测试 Java 的 i18n 功能,但遇到一个问题,当语言文件不在类根目录中时,我无法加载它。现在我的文件在/lang 目录中。

在 SO 中查看了几个答案,将其放在 classes 子目录中并像 lang.Messages 一样加载它,使用完整的位置路由 /Test/lang/Message(测试是项目名称),仅使用 /lang/Message,但我仍然'我得到了:

java.util.MissingResourceException: Can't find bundle for base name

错误。

还有什么要尝试的吗?

我的文件结构是:

Test/lang/Messages_es.properties

Test/src/test/Main.java

import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JFrame;

public class Main {

     public static void main(String[] args) {

    Locale currentLocale;
    ResourceBundle messages;

    currentLocale = new Locale("es");

    messages = ResourceBundle.getBundle("Messages", currentLocale);
    System.out.println(messages.getString("Messagesgreetings"));
    System.out.println(messages.getString("Messagesinquiry"));
    System.out.println(messages.getString("Messagesfarewell"));
    }
}

【问题讨论】:

    标签: java internationalization resourcebundle


    【解决方案1】:

    您需要在属性文件名中包含您的语言环境名称。

    将您的属性文件重命名为Messages_es.properties

    由于你没有声明任何包,你编译的类文件和属性文件可以在同一个根目录下。

    编辑以响应 cmets:

    假设你有这个项目结构:

    test\src\foo\Main.javafoo是包名)

    test\bin\foo\Main.class
    

    test\bin\resources\Messages_es.properties(属性文件位于类路径中的文件夹resources

    你可以运行这个:

    c:\test>java -classpath .\bin foo.Main
    

    更新源代码:

    package foo;
    import java.util.Locale; 
    import java.util.ResourceBundle;
    import javax.swing.JFrame;
    
    public class Main {
    
      public static void main(String[] args) {
    
        Locale currentLocale;
        ResourceBundle messages;
    
        currentLocale = new Locale("es");
    
        messages = ResourceBundle.getBundle("resources.Messages", currentLocale);
        System.out.println(messages.getString("Messagesgreetings"));
        System.out.println(messages.getString("Messagesinquiry"));
        System.out.println(messages.getString("Messagesfarewell"));
      }
    }
    

    如您所见,我们正在加载名为“resources.Messages”的属性文件

    希望这会有所帮助。

    【讨论】:

    • 我确实在文件名中有本地名称。我不想将两个文件都放在同一个根目录中,这就是这里的全部问题:(
    • 我的路径是这样的:Test/lang/Messages_es.properties Test/src/test/Main.java 而不是运行 java -classpath .\bin foo.Main 我将它设置到项目设置中,没有运气。
    • 要么将您的 lang 文件夹复制到项目的输出文件夹中,或者如果您使用 Eclipse 将您的 lang 文件夹复制到 src 下,那么它将自动编译到您的输出文件夹中并加载名称为 lang.Messages 的包
    猜你喜欢
    • 2019-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多