2015-04-13 10 views
5

Gibt es eine Möglichkeit, die Sprache der ColorPicker Texte wie "Benutzerdefinierte Farbe ...", "Aktuelle Farbe", "Neue Farbe", "Farbton", "Sättigung", "Helligkeit" zu ändern "," Deckkraft "," Speichern "," Verwenden "," Abbrechen "?Sprache des JavaFX - Farbwählers

enter image description here

+0

Für Übersetzung von Standard-Systemfenster auf den anderen Sprachen sind einige Informationen hier: https://stackoverflow.com/a/45980313/3937190 –

Antwort

4

EDIT: Unten Antwort für diejenigen, die etwas mehr exotische Sprache benötigen. Wenn Sie eines davon verwenden: de, es, fr, it, ja, ko, pt, sv, zh @ sergey-grinev zur Verfügung gestellt ausreichende Antwort.


Ich kam mit zwei Lösungen. Beide verlassen sich auf properties Datei. Sie können Ihre eigenen anhand von Beispielen erstellen, die in com/sun/javafx/scene/control/skin/resources/ in jxfrt.jar mit JRE gefunden werden.

In allen Beispielen wird das polnische Gebietsschema (new Locale("pl", "PL")) verwendet, das nicht integriert ist.


Lösung 1

mit folgenden Struktur (ändern Suffix entsprechend) erstellen JAR-Datei

com/sun/javafx/scene/control/skin/resources/controls_pl_PL.properties 

und legen Sie sich in

<path_to_JVM>/lib/ext 

Das ist es.

Ich bin mir nicht sicher, was die Lizenz über die Platzierung von benutzerdefinierten Dateien in com.sun.* Pakete sagt, also hier ist eine andere Lösung.

Lösung 2

erstellen properties Datei wie oben, aber man kann es, was Namen und kann überall Sie wollen. Sagen wir, es

wird
path/to/my/resources/polish.properties 

zwei Klassen erstellen - ResourceBundle.Control und ResourceBundleControlProvider (read more) wie folgt aus.

public class CustomLocaleFxResourceBundleControl extends ResourceBundle.Control { 
    static final String FX_BASE_NAME = "com/sun/javafx/scene/control/skin/resources/controls"; 
    private static final Locale MY_LOCALE = new Locale("pl", "PL"); 

    @Override 
    public String toBundleName(String baseName, Locale locale) { 
     if (FX_BASE_NAME.equals(baseName) && MY_LOCALE.equals(locale)) 
      return "path/to/my/resources/polish"; // without extension 

     return super.toBundleName(baseName, locale); 
    } 
} 
public class CustomLocaleFxResourceBundleControlProvider implements ResourceBundleControlProvider { 
    private static final ResourceBundle.Control MY_RESOURCE_BUNDLE_CONTROL = new CustomLocaleFxResourceBundleControl(); 

    public ResourceBundle.Control getControl(String baseName) { 
     if (CustomLocaleFxResourceBundleControl.FX_BASE_NAME.equals(baseName)) 
      return MY_RESOURCE_BUNDLE_CONTROL; 

     return null; 
    } 
} 

diese Klassen zusammenstellen und sie in JAR-Datei setzen zusammen mit Ihrer Ressource und META-INF Ordner. META-INF Ordner sollte

META-INF/services/java.util.spi.ResourceBundleControlProvider 

java.util.spi.ResourceBundleControlProvider ist eine Textdatei folgende Struktur haben, die nur Leitungsweg zu ResourceBundleControlProvider Klasse.In unserem Fall ist es nur

CustomLocaleFxResourceBundleControlProvider 

komplette JAR setzen in

<path_to_JVM>/lib/ext 
+0

Dies ist das erste Mal, dass ich solche Änderungen mache und ich habe einige Probleme. Ich benutze Eclipse (jdk 1.8.40) und kann die oben erwähnte Eigenschaftendatei nicht finden. – Alyona

+0

In '/jre/lib/ext' gibt es 'jfxrt.jar'. Kopieren Sie es, ändern Sie die Erweiterung in' zip', entpacken Sie und suchen Sie in dem Verzeichnis, das in meiner Antwort erwähnt wird. – 3ph3r

+0

Vielen Dank, ich habe die benötigte Eigenschaftendatei abgerufen und Änderungen daran vorgenommen Sowohl CustomLocaleFxResourceBundleControlProvider als auch CustomLocaleFxResourceBundleControl im Ordner bin \ com \ my (wo sich mainApp befindet), setze dort auch die Datei controls_pl.properties, aber ich bin verwirrt über "Kompiliere diese Klassen und lege sie zusammen mit deinem Ressourcen- und META-INF-Ordner in die JAR-Datei. META-INF-Ordner sollte folgende Struktur haben: "Ich kann einfach nicht verstehen, was genau zu tun ist. Ich bin auf Begginer Ebene mit Java und kann noch nicht alles verstehen. – Alyona

3

Der einfachste Weg ist ein vordefinierter Gegenden zu verwenden, z.B. nächste Zeile hinzufügen, vor dem Erstellen von Colorpicker:

Locale.setDefault(Locale.FRENCH); 

Sie nächsten UI sehen werden:

french color picker

+2

Es funktioniert für Französisch. Aber was ist zu tun, wenn ich ColorPicker für andere Sprachen wie Russisch oder Estnisch erstellen muss? Versucht, 'Locale dLocale = new Locale (" ru ") zu verwenden; Locale.setDefault (dLocale); ', aber es funktioniert nicht. – Alyona

+0

@ user3629015 lol, Russisch und Estnisch sind zwei Sprachen, die ich neben Englisch spreche :) Sehen Sie sich 3ph3r Antwort in diesem Fall an. –

+0

почему все всегда забывают про русских? ( – sinedsem

Verwandte Themen