Интернационализация JavaFX без FXML - PullRequest
3 голосов
/ 24 февраля 2020

Я написал это приложение для проверки интернационализации:

Main. java:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        FXMLLoader loader = new FXMLLoader();
        loader.setResources(ResourceBundle.getBundle("content", Locale.ENGLISH));
        Parent root = loader.load(getClass().getResource("sample.fxml").openStream());
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

sample.f xml:

<AnchorPane prefHeight="400.0" prefWidth="600.0" >
   <children>
      <Label layoutX="10.0" layoutY="10.0" text="%label" />
   </children>
</AnchorPane>

content_ru. Свойства:

label=Hello World

Но я не могу использовать F XML для моего приложения. Как я могу сделать это без F XML?

Если я просто добавлю метку и установлю ее текст %label, она не будет работать.

1 Ответ

4 голосов
/ 24 февраля 2020

FXMLLoader заботится о текстах, начинающихся с %. Если вы не собираетесь использовать FXML, вы можете получить интернационализированные тексты, такие как:

ResourceBundle rb = ResourceBundle.getBundle("content");
Label label = new Label(rb.getString("label"));

Если вы хотите использовать один и тот же ResourceBundle везде, вы можете создать класс со stati c методы для возврата интернационализированных текстовых значений:

public class I18N {
    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("content");

    public static String getString(String key) {
        return RESOURCE_BUNDLE.getString(key);
    }
}

Затем вы можете использовать это так:

Label label = new Label(I18N.getString("label"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...