5

Ich möchte die @Messages Annotation in NetBeans verwenden, um die Lokalisierung in meiner Anwendung zu vereinfachen. Ich kann jedoch keine Informationen darüber finden, wie Übersetzungen (Bündel) für andere Sprachen mithilfe dieses Mechanismus hinzugefügt werden.So lokalisieren Sie @Messages Annotationen in NetBeans

Beispiel einer Aktion des @Messages verwendet, ist wie folgt

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

Wie kann ich die Aktion hinzufügen bekommen auf die Sprache zu variieren?

Antwort

6

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

Die @Messages Anmerkung wird eine Bundle.java Klasse und eine Bundle.properties Datei erzeugen. Die Bundle.java-Klasse enthält Funktionen zum Lokalisieren und die Datei Bundle.properties enthält die Schlüssel/Wert-Paare, die die genauen Zeichenfolgen für das Root-Gebietsschema bestimmen.

Um richtig zu lokalisieren, sollten Sie die Datei Bundle.properties untersuchen und dann eine Datei Bundle_fr.properties (für Französisch) oder eine Bundle_whatever.properties-Datei erstellen, wobei "was auch immer" das Gebietsschema ist, das Sie hinzufügen möchten.

Wenn die Ländereinstellung für Ihre Anwendung festgelegt ist, sollte die Bundle.java-Klasse die richtige Bundle_xx.properties-Datei verwenden, um Ihre Aufrufe der Bundle.java-Klassenfunktionen zu lokalisieren.

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

Meine Bundles wie folgt aussehen:

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

die Bundle.properties existiert. Es enthält auch andere i18n-Texte. Ich habe eine Datei mit lokalisierten Eigenschaften hinzugefügt, der abgerufene Text ist jedoch die Standardsprache, obwohl andere Texte, die NbBundle verwenden, den richtigen Gebietsschematext übernehmen. Hätten Sie ein Arbeitsbeispiel, mit dem ich vergleichen könnte? – Nasir

+0

Stellen Sie einfach sicher ... Verwenden Sie die Accessoren Bundle.java, um Ihre lokalisierte Zeichenfolge zu erhalten? Es sollte wie Bundle.CTL_AddAction aussehen() ich an einem Beispiel arbeiten werde ... – naugler

+0

Der Code, den ich zu ersetzen bin auf der Suche nach ist @Messages ({ "CTL_AddAction = Action" }). Ich erwarte, dass die "Aktion hinzufügen" automatisch durch eine Gebietsschema-Version ersetzt wird, aber es ist nicht. Also entweder verstehe ich die Magie nicht, oder ich mache es nicht richtig. Ich habe einen lokalisierten Text in Bundle_fr.properties, aber es wird nicht abgeholt. Ich weiß nicht, wie ich die Nachricht sonst mit Annotationen spezifizieren könnte. Vielleicht gibt es etwas Offensichtliches, das mir fehlt ... – Nasir