web-dev-qa-db-ja.com

java.util.MissingResourceException:ベース名のバンドルが見つかりません

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"));
    }
}
8

プロパティファイル名にロケール名を含める必要があります。

プロパティファイルの名前を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」という名前のプロパティファイルを読み込んでいます。

お役に立てれば。

8