Показать ярлыки меню на немецком языке - PullRequest
0 голосов
/ 03 июля 2018

Я немец. Когда я создаю ярлык меню, как это:

neu.setAccelerator(new KeyCodeCombination(KeyCode.N, KeyCombination.CONTROL_DOWN));

ярлык на английском языке.

Что мне нужно сделать, чтобы ярлыки меню отображались на немецком языке?

1 Ответ

0 голосов
/ 05 июля 2018

Не отображать модификаторы в их локализованной версии - это ошибка, о которой недавно сообщалось (и не похоже нигде в верхней части списка приоритетов для исправления). Таким образом, мы должны взломать это.

Основная идея состоит в том, чтобы заменить текст ускорителя после того, как обычная обработка установит его на жестко запрограммированную английскую версию. Пример ниже делает это в пользовательском классе Menu в обработчике onShown. Здесь это снова просто жестко запрограммировано, в производственном коде, очевидно, потребуется реализовать поиск правильной локализованной версии.

public class BugHackMenu extends Menu {

    public BugHackMenu(String text) {
        super(text);
        setOnShown(e -> hackAcceleratorText());
    }

    private void hackAcceleratorText() {
        getItems().stream().forEach(item -> {
            if (!needsHack(item)) return;
            Node menuRow = item.getStyleableNode();
            if (menuRow != null) {
                Node accText = menuRow.lookup(".accelerator-text");
                if (accText instanceof Label) {
                    Label acc = (Label) accText;
                    acc.setText(getHackedText(item.getAccelerator()));
                }
            }

        });
    }

    private String getHackedText(KeyCombination accelerator) {
        return accelerator.getDisplayText().replace("Ctrl", "Strg");
    }

    private boolean needsHack(MenuItem item) {
        KeyCombination acc = item.getAccelerator();
        return acc != null && acc.getControl() == ModifierValue.DOWN;
    }

}
...