5

Chciałbym użyć adnotacji @Messages w NetBeans, aby uprościć lokalizację w mojej aplikacji. Jednak nie mogę znaleźć żadnych informacji o tym, jak dodawać tłumaczenia (pakiety) dla innych języków za pomocą tego mechanizmu.Jak zlokalizować adnotacje @Messages w NetBeans?

Przykład działania z wykorzystaniem @Messages jest następujący

@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") 

Jak mogę uzyskać Add Action się różnić w zależności od języka?

Odpowiedz

6

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

W @Messages adnotacja wygeneruje klasę Bundle.java i plik Bundle.properties. Klasa Bundle.java będzie zawierała funkcje lokalizowania, a plik Bundle.properties zawiera pary klucz-wartość, które określają dokładne ciągi dla ustawień narodowych root.

Aby poprawnie zlokalizować, należy przejrzeć plik Bundle.properties, a następnie utworzyć plik Bundle_fr.properties (dla języka francuskiego) lub plik Bundle_whatever.properties, gdzie "cokolwiek" to ustawienia narodowe, które chcesz dodać.

Następnie, gdy ustawienia regionalne są ustawione dla aplikacji, klasa Bundle.java powinna użyć poprawnego pliku Bundle_xx.properties, aby zlokalizować wywołania funkcji klasy 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()); 
    } 
} 

Moi Wiązki wyglądać następująco:

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

Bundle.properties istnieje. Zawiera również inne teksty i18n. Dodałem lokalny plik właściwości, jednak wybrany tekst jest językiem domyślnym, mimo że inne teksty, które używają NbBundle, pobierają poprawny tekst locale. Czy mógłbyś mieć działający przykład, z którym mógłbym porównać? – Nasir

+0

Tylko upewniając się ... Czy używasz akcesorów Bundle.java do uzyskania zlokalizowanego ciągu znaków? Powinien wyglądać jak Bundle.CTL_AddAction() Będę pracował na przykładzie ... – naugler

+0

Kod, który chcę zastąpić, to @Messages ({ "CTL_AddAction = Dodaj działanie" }). Spodziewam się, że "Add Action" zostanie automatycznie zastąpiony przez wersję locale, ale tak nie jest. Więc albo nie rozumiem magii, albo nie robię tego właściwie. Mam zlokalizowany tekst w pliku Bundle_fr.properties, ale nie jest on pobierany. Nie wiem, jak inaczej określić wiadomość za pomocą adnotacji. Być może jest coś oczywistego, czego mi brakuje ... – Nasir