java - 阿拉伯语和东方语言的字体映射和 Swing UI 消息问题
问题描述
我正在测试对某些东方语言和阿拉伯语的 Java Swing 支持,并且得到了一些令人困惑的结果。
- 印地语:根本不支持梵文脚本吗?
- 日语:“OK”是这样用的吗?
- 为什么某些语言的 Swing 消息没有被翻译?
- Thai:为什么消息对话框文本和菜单项无法呈现,而 JLabel 和 JButton 中的文本却没有?
测试代码:
import java.awt.FlowLayout;
import java.util.Locale;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
public class Test {
public static void main(String[] args) throws Exception {
// Latin, Cyrillic & Greek writing systems not part of this test
// AWT/Swing statically initializes some messages (e.g. 'OK', 'Cancel') -> can only test one locale at a time
testSwing("zh", "CN", /* Simplified Chinese */ "简体中文");
// testSwing("zh", "TW", /* Traditional Chinese */ "繁體中文");
// testSwing("ja", "JP", /* Japanese */ "日本人");
// testSwing("ko", "KR", /* Korean */ "한국어");
// testSwing("hi", "IN", /* Hindi */ "हिन्दी");
// testSwing("th", "TH", /* Thai */ "ไทย");
// testSwing("ar", "EG", /* Arabic */ "اَلْعَرَبِيَّةُ");
// testSwing("iw", "IL", /* Hebrew */ "עִבְרִית");
}
private static void testSwing(String language, String countryCode, String text) throws Exception {
Locale locale = new Locale(language, countryCode);
Locale.setDefault(locale);
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JOptionPane.showMessageDialog(null, text);
JOptionPane.showConfirmDialog(null, text);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenu menu = new JMenu(text);
menu.add(new JMenuItem(text));
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu);
frame.setJMenuBar(menuBar);
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JLabel(locale.toString()));
frame.getContentPane().add(new JLabel(text));
frame.getContentPane().add(new JButton(text));
frame.setSize(300, 125);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
结果(在 Windows 10 上采用 OpenJDK 1.8.0_265,但在 Java 11 和 15 上似乎相似):
我的 Windows 10 系统上安装的语言:
解决方案
大多数答案都可以在这里找到:https ://www.oracle.com/java/technologies/javase/jdk8-jre8-suported-locales.html
用户界面翻译
仅:zh_CN、zh_TW、en、fr、de、it、ja、ko、pt_BR、es、sv
请参阅https://www.oracle.com/java/technologies/javase/jdk8-jre8-suported-locales.html#translation
支持的书写系统
规范说:在 Windows Vista、7 和 8 上,当在 Windows 系统上运行且 UI 语言设置为使用该书写系统的语言时。
推荐阅读
- python - 在 Python 中的特定子文件夹中创建多个子文件夹
- entity-framework-6 - 我应该如何首先在实体框架代码中声明 smallmoney?
- sorting - 使用 AWK 显示格式化记录
- laravel - laravel 中无法翻译的数据
- r - 计算 r 中两个数据帧(逐行)之间的更改次数
- powershell - 递归复制与模式匹配的文件
- php - 在 gitlab CI 中构建我的 laravel 应用程序时出现“找不到驱动程序”异常
- c++ - Segmentation fault in array storing in IPC linux
- reactjs - 如何在反应中集中输入日期字段?
- android - how to get Dagger2 Compiler Options working?