HMCL icon indicating copy to clipboard operation
HMCL copied to clipboard

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

Open wifi-left opened this issue 1 year ago • 4 comments

平台 | 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 avatar May 25 '24 16:05 wifi-left

IMG_0491(20240526-002445)

wifi-left avatar May 25 '24 16:05 wifi-left

日版机器设置为简体中文通过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。

Aya-Net avatar May 25 '24 17:05 Aya-Net

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

burningtnt avatar May 26 '24 02:05 burningtnt

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

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

Aya-Net avatar May 26 '24 04:05 Aya-Net

试了一下,其实不是非国行 Mac 的问题 Locale.getDefault().toLanguageTag() 的值可能与初次设置的地区或者设置里设置的地区之类的有关(这个我不太确定,我暂时不知道怎么修改) 我这里用的国行 Mac,初次开机和设置里的地区的是美国,结果是 zh-Hans-US

Image

lightsummer233 avatar Aug 08 '25 06:08 lightsummer233