有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

国际化java。util。MissingResourceException:找不到基名称的捆绑包

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

在这里查找了几个答案,将其放在classes子目录中,像lang.Messages一样加载,使用完整的位置路由/Test/lang/Message(test是项目名称),只使用/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"));
    }
}

共 (1) 个答案

  1. # 1 楼答案

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

    将属性文件重命名为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”的属性文件

    希望这有帮助