Действительно ли возможно записать GUI в Java, который отобразил бы японские шрифты правильно независимо от настроек языка ОС, на этом работают?
Я хотел бы записать программу, которая может сделать это, но я не уверен, как начать идти об этом. Любой совет был бы огромной справкой!
Вы можете упаковать шрифт TrueType в свою программу, загрузить и использовать его в компонентах Swing следующим образом:
// Create a label in Japanese.
String message = "かつ、尊厳と権利とについて平等である。";
JLabel label = new JLabel(message);
// Load the TrueType font with Japanese characters and apply it.
File file = new File("msmincho.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, file);
font = font.deriveFont(Font.PLAIN, 14f);
label.setFont(font);
Будьте осторожны, используйте правильную кодировку. Если вы компилируете японские символы в коде, вы должны скомпилировать его с javac -encoding utf-8 Foo.java
. Также обязательно используйте кодировку явно при использовании Readers.
Языковые настройки здесь не проблема. Шрифты есть.
Java определенно может обрабатывать японский текст, независимо от настроек системы, если разработчик не попадется в ловушку зависимости от кодировки платформы по умолчанию, используя такие вещи, как FileReader
или ] новая строка (байт [])
.
Но для отображения японского текста нужен шрифт с японскими символами, а шрифты не являются частью Java. В зависимости от ОС шрифты с поддержкой японского языка могут быть частью установки по умолчанию, или пользователю может быть предложено установить их по мере необходимости, или их, возможно, придется установить вручную.
Добавьте -Dfile.encoding = utf-8
в сценарий командной строки, запускающий приложение.
Java может легко отображать японский язык независимо от того, установлены ли в ОС шрифты или нет, но это только для приложений Swing. Все, что использует окно консоли, требует установленных в ОС шрифтов.
Шаги:
1) Загрузите один из шрифтов TrueType отсюда: http://www.wazu.jp/gallery/Fonts_Japanese2.html
2) Используйте следующий код, чтобы разрешить свинг клиенты для использования ваших шрифтов:
InputStream fontStream = getClass().getResourceAsStream("/locationoffontonclasspath/myfontname.ttf");
Font japaneseEnabledFont = null;
boolean japaneseDisplayEnabled = false;
try {
japaneseEnabledFont = Font.createFont(Font.TRUETYPE_FONT, fontStream);
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(japaneseEnabledFont);
japaneseDisplayEnabled = true;
} catch (Exception e) {
// handle exceptions here
} finally {
if (fontStream != null) {
try {fontStream.close();} catch (Exception e1) {}
}
}
if (japaneseDisplayEnabled) {
.....
}
Кроме того, если вы хотите использовать японские литералы в исходном коде, вы должны скомпилировать с -Dfile.encoding = utf-8. Если для компиляции используется IDE, вы можете изменить настройки на следующем экране (щелкните правой кнопкой мыши проект и выберите свойства, чтобы открыть это окно): скриншот