5

Tôi muốn sử dụng chú thích @Messages trong NetBeans để đơn giản hóa bản địa hóa trong ứng dụng của mình. Tuy nhiên, tôi không thể tìm thấy bất kỳ thông tin nào về cách thêm bản dịch (gói) cho các ngôn ngữ khác bằng cách sử dụng cơ chế này.Cách địa phương hóa chú thích @Messages trong NetBeans

Ví dụ về một hành động bằng cách sử dụng @Messages như sau

@ActionID(category = "category", 
id = "AddAction") 
@ActionRegistration(iconBase = "actions/action-icon.png", 
displayName = "#CTL_AddAction") 
@ActionReferences({ 
    @ActionReference(path = "Menu/Shapes", position = 160), 
    @ActionReference(path = "Toolbars/Shapes", position = 5133) 
}) 
@Messages("CTL_AddAction=Add Action") 

Làm thế nào tôi có thể nhận được Add Hành động để thay đổi tùy theo ngôn ngữ?

Trả lời

6

http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/NbBundle.Messages.html

Các @Messages chú thích sẽ tạo ra một lớp Bundle.java và một tập tin Bundle.properties. Lớp Bundle.java sẽ bao gồm các hàm để bản địa hóa và tệp Bundle.properties chứa các cặp khóa-giá trị xác định các chuỗi chính xác cho ngôn ngữ gốc.

Để bản địa hóa chính xác, bạn nên kiểm tra tệp Bundle.properties và sau đó tạo tệp Bundle_fr.properties (cho tiếng Pháp) hoặc tệp Bundle_whatever.properties trong đó 'bất kỳ' là ngôn ngữ bạn muốn thêm.

Sau đó, khi ngôn ngữ được đặt cho ứng dụng của bạn, lớp Bundle.java nên sử dụng tệp Bundle_xx.properties chính xác để bản địa hóa cuộc gọi của bạn thành các hàm lớp Bundle.java.

package com.testmodule; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import org.openide.awt.ActionID; 
import org.openide.awt.ActionReference; 
import org.openide.awt.ActionReferences; 
import org.openide.awt.ActionRegistration; 
import org.openide.util.NbBundle.Messages; 

@ActionID(category = "category", 
id = "com.testmodule.AddAction") 
@ActionRegistration(iconBase = "com/testmodule/action-icon.png", 
displayName = "#CTL_AddAction") 
@ActionReferences({ 
    @ActionReference(path = "Menu/Shapes", position = 160), 
    @ActionReference(path = "Toolbars/Shapes", position = 5133) 
}) 
@Messages({ 
    "CTL_AddAction=Add Action" 
}) 
public final class AddAction implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     Locale.setDefault(Locale.FRENCH); 
     System.out.println("I am action "+Bundle.CTL_AddAction()); 
    } 
} 

Gói tôi trông giống như:

Bundle.properties 
    OpenIDE-Module-Name=testmodule 
Bundle_fr.properties 
    OpenIDE-Module-Name=french testmodule 
    CTL_AddAction=Ajouter une action 
+0

các Bundle.properties tồn tại. Nó chứa các văn bản i18n khác. Tôi đã thêm một tệp thuộc tính được bản địa hóa, tuy nhiên văn bản được chọn là ngôn ngữ mặc định, mặc dù các văn bản khác sử dụng NbBundle nhận văn bản miền địa phương chính xác. Bạn có thể có một ví dụ làm việc mà tôi có thể so sánh không? – Nasir

+0

Chỉ cần đảm bảo ... Bạn có đang sử dụng các trình truy cập Bundle.java để lấy chuỗi được bản địa hóa của mình không? Nó trông giống như Bundle.CTL_AddAction() Tôi sẽ làm việc trên một ví dụ ... – naugler

+0

Mã tôi đang tìm để thay thế là @Messages ({ "CTL_AddAction = Thêm hành động" }). Tôi hy vọng rằng "Thêm hành động" sẽ tự động sẽ được thay thế bằng một phiên bản miền địa phương, nhưng nó không phải là. Vì vậy, hoặc là tôi không hiểu phép thuật, hoặc tôi không làm đúng. Tôi có văn bản được bản địa hóa trong Bundle_fr.properties nhưng không được chọn. Tôi không biết cách khác để chỉ định thư bằng chú thích. Có lẽ, có điều gì đó hiển nhiên tôi bị thiếu ... – Nasir

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