2010-08-01 42 views
8

我正在測試Java的i18n功能並出現問題,當它不在類根目錄下時,我無法加載該語言文件。現在我的文件位於/lang目錄中。java.util.MissingResourceException:無法找到基本名稱的包

這裏看着幾個答案在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」

希望這有助於文件。

+0

我有文件名中的本地名稱。 我不想在同一個根目錄下兩個文件,這裏是整個問題:( – 2010-08-01 18:46:04

+0

我的路徑是這樣的: 測試/郎/ Messages_es.properties 測試/ src目錄/測試/ Main.java 代替運行java -classpath。\ bin foo.Main我將其設置爲項目設置,沒有運氣。 – 2010-08-01 20:02:41

+0

將lang文件夾複製到項目的輸出文件夾中,或者如果您使用Eclipse在src下複製lang文件夾,那麼它將自動編譯到您的輸出文件夾中並使用名稱lang.Messages加載該包 – 2010-08-02 10:52:18

相關問題