8

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

1 に答える 1

8

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

プロパティ ファイルの名前を次のように変更します。Messages_es.properties

パッケージを宣言していないため、コンパイル済みのクラス ファイルとプロパティ ファイルの両方を同じルート ディレクトリに置くことができます。

コメントに応じて編集:

このプロジェクト構造があるとしましょう:

test\src\foo\Main.java(fooはパッケージ名)

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」という名前のプロパティ ファイルをロードしています。

お役に立てれば。

于 2010-08-01T18:36:15.167 に答える