From c8edf4be626afaa622cefb920ec5a6e57d8ad9f5 Mon Sep 17 00:00:00 2001 From: Glavo Date: Thu, 9 Oct 2025 16:34:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A8=A1=E7=BB=84=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E8=AF=91=E5=90=8D=E5=B1=95=E7=A4=BA=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=20(#4636)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 隐藏不包含中文字符的译名 2. 过滤译名中的 Emoji --- .../hmcl/ui/versions/ModListPageSkin.java | 26 ++++++++++++++++--- .../org/jackhuang/hmcl/util/StringUtils.java | 15 ++++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java index c43e1a8e5..23aaacc72 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java @@ -632,10 +632,28 @@ final class ModListPageSkin extends SkinBase { }).start(); } - if (modTranslations != null && I18n.isUseChinese() && !modInfo.getName().equals(modTranslations.getName())) - content.setTitle(modInfo.getName() + " (" + modTranslations.getName() + ")"); - else - content.setTitle(modInfo.getName()); + + String displayName = modInfo.getName(); + if (modTranslations != null && I18n.isUseChinese()) { + String chineseName = modTranslations.getName(); + if (StringUtils.containsChinese(chineseName)) { + if (StringUtils.containsEmoji(chineseName)) { + StringBuilder builder = new StringBuilder(); + + chineseName.codePoints().forEach(ch -> { + if (ch < 0x1F300 || ch > 0x1FAFF) + builder.appendCodePoint(ch); + }); + + chineseName = builder.toString().trim(); + } + + if (StringUtils.isNotBlank(chineseName) && !displayName.equalsIgnoreCase(chineseName)) { + displayName = displayName + " (" + chineseName + ")"; + } + } + } + content.setTitle(displayName); StringJoiner joiner = new StringJoiner(" | "); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java index ccb9a3014..1be58c604 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java @@ -87,7 +87,7 @@ public final class StringUtils { builder.append(str, start, i); } builder.append(' '); - i = whitespaceEnd ; + i = whitespaceEnd; continue; } } @@ -261,6 +261,19 @@ public final class StringUtils { return false; } + public static boolean containsEmoji(String str) { + for (int i = 0; i < str.length(); ) { + int ch = str.codePointAt(i); + + if (ch >= 0x1F300 && ch <= 0x1FAFF) + return true; + + i += Character.charCount(ch); + } + + return false; + } + private static boolean isVarNameStart(char ch) { return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '_'; }