HMCL-dev / HMCL

A Minecraft Launcher which is multi-functional, cross-platform and popular
https://hmcl.huangyuhui.net
GNU General Public License v3.0
6.89k stars 676 forks source link

[Bug] 非国行 mac 的HMCL自动语言选择错误 #3076

Open wifi-left opened 4 months ago

wifi-left commented 4 months ago

平台 | Platform

MacOS

问题描述 | Problem Description

来自QQ群 系统语言:简体中文 日版MAC打开HMCL识别为繁体中文

分析

根据代码

import java.util.Locale;
public class Test {
    public static void main(String argv[]){
        String language = System.getProperty("user.language");
        System.out.println("System.getProperty 操作系统语言:" + language);
        Locale locale = Locale.getDefault();
        language = locale.getLanguage();
        System.out.println("Locale 操作系统语言:" + language);

        String languageTag = locale.toLanguageTag();
        System.out.println("Locale toLanguageTag 操作系统语言:" + languageTag);
    }
}

执行结果: Windows、Linux下执行结果为:

System.getProperty 操作系统语言:zh
Locale 操作系统语言:zh
Locale toLanguageTag 操作系统语言:zh-CN

而此人Mac上执行结果为:

System.getProperty 操作系统语言:zh
Locale 操作系统语言:zh
Locale toLanguageTag 操作系统语言:zh-Hans-JP
wifi-left commented 4 months ago

IMG_0491(20240526-002445)

Aya-Net commented 4 months ago

日版机器设置为简体中文通过Locale.getdefault();获得的Locale是zh_JP_#Hans; 国行机器则是zh_CN_#Hans; 国行机器设置为繁体中文之后获取的Locale则是zh_CN_#Hant,依然是zh_CN作为前缀; 经过测试,国行机器设置系统语言为繁体中文之后,HMCL的默认选择语言也依然是简体; Bug应该是Java.util.ResourcesBundle的匹配原则把zh_CN*匹配到选择zh_CN,而其他的zh_*就匹配到选择zh的Bundle。

burningtnt commented 4 months ago

那,我们应该怎么匹配呢?

Aya-Net commented 4 months ago

那,我们应该怎么匹配呢?

目前来看就是让zh_*_Hans匹配到zh_CN上