某些语言在java swing中无法正确显示[重复]

问题描述 投票:0回答:1

我正在编写一个多语言应用程序。创建了一个演示:

public class SwingLang {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(230,500);

        JPanel panel = new JPanel();
        String[] x = new String[7];
        //текст "Checking your configuration and account"
        x[0] = "ব্যবস্থা এবং একাউন্ট দেখা"; //Bengal
        x[1] = "తయారీ మరియు ఖాతా తనిఖీ"; //Telugu
        x[2] = "तयारी र खाता जाँच"; //Nepali
        x[3] = "සූදානම් වීම සහ ගිණුම පරීක්\u200Dෂාව"; //Sinhalese
        x[4] = "तैयारी और खाता जांच"; //Hindi
        x[5] = "தயாரிப்பு மற்றும் கணக்கு சரிபார்ப்பு"; //Tamil
        x[6] = "การเตรียมและตรวจสอบบัญชี"; //Thai

        for (int i = 0; i < x.length; i++) {
            JLabel label = new JLabel(x[i]);

            System.out.println(x[i]);
            panel.add(label);
        }

        frame.add(panel);
        frame.setVisible(true);
    }
}

Windows 10 上的 swing 应用程序中的这些语言显示为正方形,这是主要问题。

所有这些语言在 Linux Ubuntu 上都能正确显示。 在 Windows 上,控制台输出也是正确的。

尝试以 unicode 传递字符串 - 结果是相同的。它按预期输出到控制台,swing 输出方块。

最重要的是,我对作为开发人员可以使用代码或其启动参数做什么感兴趣,以免编写用户应使用其操作系统执行哪些操作的说明

我尝试通过 Font 类替换字体,但这也没有帮助。虽然使用字体的想法不太好,但考虑到 Linux 没有字体也能读取。

我还尝试将 Java Open JDK 17 的版本更改为 21。对我来说,高于 21 的版本与 Lombok 不兼容,所以我也删除了此选项

java windows swing
1个回答
0
投票

(基于此答案以及 user85421 和 Ivar 提到的评论https://stackoverflow.com/a/31515771/16037941

尝试使用逻辑字体,例如 SANS_SERIF,它应该从一个或多个物理字体源中提取以最初生成正确的输出。

接下来检查哪些文本可以使用基于 user85421 评论中提供的代码在启动时运行的函数显示在用户计算机上。如果有些语言由于没有可用的字体而无法使用,那么我还会在某种类型的旁白/设置中向用户提及:“我们无法显示语言 X,因为您的电脑没有安装字体”,或者在操作系统是 Windows 的情况下尝试子字体,或者尝试在第一次启动时自己安装一个或多个字体,你知道这会起作用,但这对我来说有点冒险,可能会很烦人(我必须为运行的程序执行此操作酒,这是一个令人讨厌的地方)

添加一些额外的上下文:据我所知,您无能为力,一些非拉丁字符需要在操作系统端进行一些配置。祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.