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
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
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
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