繁体   English   中英

java.util.MissingResourceException:找不到基本名称的包

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

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

在SO中查看了几个答案,将它放在一个classes lang.Messages并像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"));
    }
}

您需要在属性文件名中包含区域设置名称。

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

由于您尚未声明任何包,因此编译的类文件和属性文件都可以位于同一根目录中。

编辑回应评论:

让我们说你有这个项目结构:

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”的属性文件

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM