Skip to content

Commit 664cbb5

Browse files
committed
Apply Noto Sans fonts based on system language with dynamic mapping
1 parent fd0f137 commit 664cbb5

File tree

1 file changed

+40
-17
lines changed

1 file changed

+40
-17
lines changed

Flow.Launcher.Infrastructure/UserSettings/Settings.cs

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,31 +39,48 @@ public void Save()
3939
}
4040

4141
private string language = Constant.SystemLanguageCode;
42+
private static readonly Dictionary<string, string> LanguageToNotoSans = new()
43+
{
44+
{ "ko", "Noto Sans KR" },
45+
{ "ja", "Noto Sans JP" },
46+
{ "zh-CN", "Noto Sans SC" },
47+
{ "zh-SG", "Noto Sans SC" },
48+
{ "zh-Hans", "Noto Sans SC" },
49+
{ "zh-TW", "Noto Sans TC" },
50+
{ "zh-HK", "Noto Sans TC" },
51+
{ "zh-MO", "Noto Sans TC" },
52+
{ "zh-Hant", "Noto Sans TC" },
53+
{ "th", "Noto Sans Thai" },
54+
{ "ar", "Noto Sans Arabic" },
55+
{ "he", "Noto Sans Hebrew" },
56+
{ "hi", "Noto Sans Devanagari" },
57+
{ "bn", "Noto Sans Bengali" },
58+
{ "ta", "Noto Sans Tamil" },
59+
{ "el", "Noto Sans Greek" },
60+
{ "ru", "Noto Sans" },
61+
{ "en", "Noto Sans" },
62+
{ "fr", "Noto Sans" },
63+
{ "de", "Noto Sans" },
64+
{ "es", "Noto Sans" },
65+
{ "pt", "Noto Sans" }
66+
};
67+
4268
public static string GetSystemDefaultFont()
4369
{
4470
try
4571
{
46-
var systemLanguage = CultureInfo.CurrentCulture.Name;
47-
var font = SystemFonts.MessageFontFamily;
72+
var culture = CultureInfo.CurrentCulture;
73+
var language = culture.Name; // e.g., "zh-TW"
74+
var langPrefix = language.Split('-')[0]; // e.g., "zh"
4875

49-
// Set Noto Sans as default font for specific languages
50-
switch (systemLanguage)
76+
// First, try to find by full name, and if not found, fallback to prefix
77+
if (TryGetNotoFont(language, out var notoFont) || TryGetNotoFont(langPrefix, out notoFont))
5178
{
52-
case "ko-KR":
53-
if (Fonts.SystemFontFamilies.Any(f => f.Source.Equals("Noto Sans KR")))
54-
return "Noto Sans KR";
55-
break;
56-
case "ja-JP":
57-
if (Fonts.SystemFontFamilies.Any(f => f.Source.Equals("Noto Sans JP")))
58-
return "Noto Sans JP";
59-
break;
60-
case "zh-CN":
61-
case "zh-Hans":
62-
if (Fonts.SystemFontFamilies.Any(f => f.Source.Equals("Noto Sans SC")))
63-
return "Noto Sans SC";
64-
break;
79+
if (Fonts.SystemFontFamilies.Any(f => f.Source.Equals(notoFont)))
80+
return notoFont;
6581
}
6682

83+
var font = SystemFonts.MessageFontFamily;
6784
if (font.FamilyNames.TryGetValue(System.Windows.Markup.XmlLanguage.GetLanguage("en-US"), out var englishName))
6885
{
6986
return englishName;
@@ -76,6 +93,11 @@ public static string GetSystemDefaultFont()
7693
return "Segoe UI";
7794
}
7895
}
96+
97+
private static bool TryGetNotoFont(string langKey, out string notoFont)
98+
{
99+
return LanguageToNotoSans.TryGetValue(langKey, out notoFont);
100+
}
79101

80102
private string _theme = Constant.DefaultTheme;
81103
public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}";
@@ -527,4 +549,5 @@ public enum BackdropTypes
527549
Mica,
528550
MicaAlt
529551
}
552+
530553
}

0 commit comments

Comments
 (0)