2015-04-13 9 views
5

C'è un modo per cambiare la lingua dei testi di ColorPicker come "Colore personalizzato ...", "Colore corrente", "Nuovo colore", "Tonalità", "Saturazione", "Luminosità" "," Opacità "," Salva "," Usa "," Annulla "?Selettore colore JavaFX

enter image description here

+0

Per la traduzione di finestra sistema standard per le altre lingue è alcune informazioni qui: https://stackoverflow.com/a/45980313/3937190 –

risposta

4

EDIT: Sotto risposta è per chi ha bisogno ancora un po 'esotico lingua. Se si utilizza uno di questi: de, es, fr, it, ja, ko, pt, sv, zh @ sergey-grinev ha fornito una risposta sufficiente.


Mi sono inventato due soluzioni. Entrambi si basano sul file properties. È possibile creare il proprio basato su esempi trovati in com/sun/javafx/scene/control/skin/resources/ in jxfrt.jar fornito con JRE.

Tutti gli esempi utilizzano Polish locale (new Locale("pl", "PL")) che non è incorporato.


Soluzione 1

Creare file JAR con seguente struttura (Cambia suffisso di conseguenza)

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

e metterlo in

<path_to_JVM>/lib/ext 

Questo è tutto.

Non sono sicuro di ciò che dice la licenza sull'inserimento di file personalizzati nei pacchetti com.sun.*, quindi ecco un'altra soluzione.

Soluzione 2

Creare properties file, come in precedenza, ma si può chiamarlo qualunque cosa e posizionarlo dove si vuole. Diciamo che sarà

path/to/my/resources/polish.properties 

Creare due classi - ResourceBundle.Control e ResourceBundleControlProvider (read more) come questo.

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

Compilare quelle classi e metterli in file JAR con la vostra risorsa e la cartella META-INF. cartella META-INF dovrebbe avere seguente struttura

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

java.util.spi.ResourceBundleControlProvider è un file di testo che solo la linea è percorso a ResourceBundleControlProvider classe.Nel nostro caso è solo

CustomLocaleFxResourceBundleControlProvider 

JAR completo messo in

<path_to_JVM>/lib/ext 
+0

Questa è la prima volta che apporto tali cambiamenti e sto avendo dei problemi Sto usando Eclipse (jdk 1.8.40) e non riesco a trovare il file delle proprietà che hai menzionato sopra. – Alyona

+0

In '/jre/lib/ext' c'è 'jfxrt.jar'. Copialo, cambia estensione in' zip', scompatta e guarda nella directory menzionata nella mia risposta. – 3ph3r

+0

Grazie, ho recuperato il file delle proprietà necessarie e ho apportato delle modifiche ad esso. sia CustomLocaleFxResourceBundleControlProvider che CustomLocaleFxResourceBundleControl nella cartella bin \ com \ my (dove mainApp è), metto anche lì il file controls_pl.properties, ma sono confuso riguardo a "Compilare quelle classi e metterle in un file JAR insieme alla tua risorsa e alla cartella META-INF. La cartella META-INF dovrebbe avere la seguente struttura ". Non riesco proprio a capire cosa esattamente fare. Sono a livello di begginer con Java e non riesco ancora a capire tutto – Alyona

3

Il modo più semplice è quello di utilizzare una delle zone predefinite, ad esempio aggiungi riga successiva prima di creare ColorPicker:

Locale.setDefault(Locale.FRENCH); 

vedrete prossimo UI:

french color picker

+2

Funziona per il francese. Ma cosa fare, se ho bisogno di creare ColorPicker per altre lingue come il russo o l'estone? Ho cercato di usare 'Locale dLocale = new Locale (" ru "); Locale.setDefault (dLocale); ', ma non funziona. – Alyona

+0

@ user3629015 lol, russo ed estone sono due lingue parlo oltre all'inglese :) Dai un'occhiata alla risposta 3ph3r in questo caso. –

+0

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