2010-08-01 6 views
8

Tôi đang thử nghiệm các tính năng i18n của Java và gặp sự cố, tôi không thể tải tệp ngôn ngữ khi không có trong lớp gốc. Hiện tại, các tệp của tôi nằm trong thư mục /lang.java.util.MissingResourceException: Không thể tìm thấy gói cho tên cơ sở

Nhìn vài câu trả lời ở đây trong SO, đặt nó trong một subdir classes và tải nó như lang.Messages, được sử dụng hoàn toàn vị trí tuyến /Test/lang/Message (thử nghiệm là tên dự án), chỉ sử dụng /lang/Message và vẫn Tôi nhận được:

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

lỗi.

Bất kỳ điều gì khác để thử?

cấu trúc tập tin của tôi là:

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

Trả lời

8

Bạn cần có tên miền địa phương của bạn trong tài sản của bạn tên tập tin.

Đổi tên tài sản của bạn nộp để Messages_es.properties

Vì bạn đã không công bố bất kỳ gói, cả hai tập tin lớp biên soạn của bạn và các tập tin thuộc tính có thể có trong thư mục gốc tương tự.

EDIT để đáp ứng với nhận xét:

phép nói rằng bạn có cấu trúc dự án này:

test\src\foo\Main.java (foo là tên gói)

test\bin\foo\Main.class 

test\bin\resources\Messages_es.properties (thuộc tính tập tin trong thư mục resources trong classpath của bạn)

Bạn có thể chạy điều này với:

c:\test>java -classpath .\bin foo.Main 

mã nguồn Cập nhật:

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

đây như bạn thấy, chúng tôi đang tải tập tin thuộc tính với tên "resources.Messages"

Hope this helps.

+0

Tôi có tên địa phương trong tên tệp. Tôi KHÔNG muốn có cả hai tệp trong cùng một thư mục gốc, đó là toàn bộ vấn đề ở đây: ( –

+0

Đường dẫn của tôi là: Kiểm tra/lang/Messages_es.properties Kiểm tra/src/test/Main.java Thay vì chạy java-classpath. \ bin foo.Main tôi đặt nó vào cài đặt dự án, không may mắn. –

+0

Hoặc sao chép thư mục lang của bạn vào thư mục đầu ra của dự án của bạn hoặc nếu bạn sử dụng Eclipse sao chép thư mục lang của bạn dưới src thì nó sẽ tự động được biên dịch vào thư mục đầu ra của bạn và tải gói với tên lang.Messages –