2016-05-18 7 views
2

Ich habe ein Problem mit der Anzeige von Zeichen mit diakritischen wie á, í, č, etc. Ich habe .properties Datei auf UTF-8 mit ISO 8599-1 gesetzt, aber wenn ich folgenden Code ausführen Ich wollte kein Ergebnis haben.JavaFX mehrsprachige .properties Datei Codierung

Hauptklasse:

@Override 
    public void start(Stage primaryStage) throws Exception{ 
     FXMLLoader fxmlLoader = new FXMLLoader(); 
     fxmlLoader.setResources(ResourceBundle.getBundle("bundles.language_sk", new Locale("sk", "SK"))); 
      Parent root = fxmlLoader.load(getClass().getResource("/view/loginFrame.fxml")); 
      primaryStage.setTitle("Login"); 
      Scene scene = new Scene(root, 563, 580); 
      primaryStage.setScene(scene); 
      primaryStage.setResizable(false); 
      primaryStage.show(); 
     } 

Login-Frame-Controller-Klasse:

@Override 
    public void initialize(URL location, ResourceBundle resources) { 
     ResourceBundle bundle = ResourceBundle 
       .getBundle("bundles.language_sk", new Locale("sk", "SK")); 
     setLoginBtnText(bundle); 
    } 

    public void setLoginBtnText(ResourceBundle bundle){ 
      loginBtn.setText(bundle.getString("loginButton")); 
    } 

language_sk.properties Datei:

#LOGIN FRAME 
. 
. 
loginButton=Prihlásiť 
. 
. 

Ergebnis:

enter image description here

So wie Sie sehen können, habe ich versucht, Text der Login-Schaltfläche mit .properties-Datei festlegen, aber Zeichen sind durcheinander.

Obwohl, wenn ich diesen Code in setLoginBtnText Methode verwenden:

public void setLoginBtnText(ResourceBundle bundle){ 
     String val = bundle.getString("loginButton"); 
     try { 
      loginBtn.setText(new String(val.getBytes("ISO-8859-1"), "UTF-8")); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

dann Text auf Knopf ist völlig in Ordnung. Wie kann ich einige globale Codierungseinstellungen für mein gesamtes Projekt festlegen, sodass ich nicht für jede einzelne Komponente in jeder Klasse eine Codierung festlegen muss? Vielen Dank.

Antwort

3

Nur wenige Dinge:

  • "gesetzt .properties auf UTF-8-Datei mit ISO 8599-1" hat nichts zu bedeuten. Es ist UTF-8 oder ISO 8859-1, nicht beide
  • Es scheint, dass Ihre Eigenschaft Datei in UTF-8-Codierung auf der Festplatte ist (Sie können es mit Hex-Editor überprüfen - Sie sehen zwei Bytes für jedes Sonderzeichen)
  • Locale, die Sie an ResourceBundle Initializer übergeben, hilft nicht mit Sprache/Zeichensatz Decodierung, es wird nur verwendet, um richtige Bundle auszuwählen; wenn Sie _sk in Namen selbst sind vorbei, dann ist es wahrscheinlich nicht benötigt
  • Resource versteht nur ISO 8859-1 standardmäßig von dem, was ich verstehe, und ich glaube nicht, dass alle SK Zeichen gibt es

Was Sie benötigen ein UTF-8-codiertes Ressourcenbündel (das Sie zufällig haben) und laden es als solches. Bitte schauen Sie hier für eine Beschreibung, wie es geht How to use UTF-8 in resource properties with ResourceBundle