2014-10-12 25 views

Trả lời

18

Sử dụng ResourceBundles để lưu trữ văn bản phụ thuộc vào ngôn ngữ và truy cập dữ liệu trong gói bằng cách sử dụng "%resourceKey".

Cụ thể, tạo tệp văn bản cho từng ngôn ngữ bạn muốn hỗ trợ và đặt chúng trong đường dẫn lớp. Các Javadocs for ResourceBundle có các chi tiết về lược đồ đặt tên, nhưng bạn nên có một gói mặc định được xác định bởi BaseName.properties và các gói cho các ngôn ngữ khác và các biến thể được xác định bởi BaseName_xx.properties. Ví dụ (với resources thư mục trong thư mục gốc của classpath):

nguồn/UIResources.properties:

greeting = Hello 

nguồn/UIResources_fr.properties:

greeting = Bonjour 

Sau đó, trong tập tin FXML của bạn bạn có thể làm

<Label text = "%greeting" /> 

Để chuyển số ResourceBundle đến FXMLLoader làm:

ResourceBundle bundle = ResourceBundle.getBundle("resources.UIResources"); 
FXMLLoader loader = new FXMLLoader(getClass().getResource("/path/to/FXML.fxml"), bundle); 
Parent root = loader.load(); 

Mã này sẽ được tải bó tài nguyên tương ứng với ngôn ngữ mặc định (thường là địa mà bạn đã đặt ở cấp hệ điều hành), rơi trở lại trên mặc định nếu nó có thể không tìm thấy một gói tương ứng. Nếu bạn muốn buộc nó phải sử dụng một gói Đặc biệt, bạn có thể làm

ResourceBundle bundle = ResourceBundle.getBundle("/resources/UIResources", new Locale("fr")); 

Cuối cùng, nếu bạn cần truy cập vào bó tài nguyên trong bộ điều khiển FXML, bạn có thể tiêm nó vào một lĩnh vực loại ResourceBundle và tên resources :

public class MyController { 

    @FXML 
    private ResourceBundle resources ; 

    // ... 
} 
+0

Tôi không thể đặt ResourceBundle trên ContextMenu. Bạn có thể giúp tôi – Krismorte

+0

Trong thực tế đối với những người vẫn còn thắc mắc, tham số bó sẽ được đặt trong cuộc gọi của phương thức tải hoặc hàm tạo làm tham số thứ hai! –

+0

@AlexandrePieroux Câu trả lời không rõ ràng không? "Để chuyển' ResourceBundle' vào 'FXMLLoader' làm ..." –

Các vấn đề liên quan