@@ -624,6 +624,74 @@ public static void OpenImeSettings()
624624
625625 #endregion
626626
627+ #region System Font
628+
629+ private static readonly Dictionary < string , string > _languageToNotoSans = new ( )
630+ {
631+ { "ko" , "Noto Sans KR" } ,
632+ { "ja" , "Noto Sans JP" } ,
633+ { "zh-CN" , "Noto Sans SC" } ,
634+ { "zh-SG" , "Noto Sans SC" } ,
635+ { "zh-Hans" , "Noto Sans SC" } ,
636+ { "zh-TW" , "Noto Sans TC" } ,
637+ { "zh-HK" , "Noto Sans TC" } ,
638+ { "zh-MO" , "Noto Sans TC" } ,
639+ { "zh-Hant" , "Noto Sans TC" } ,
640+ { "th" , "Noto Sans Thai" } ,
641+ { "ar" , "Noto Sans Arabic" } ,
642+ { "he" , "Noto Sans Hebrew" } ,
643+ { "hi" , "Noto Sans Devanagari" } ,
644+ { "bn" , "Noto Sans Bengali" } ,
645+ { "ta" , "Noto Sans Tamil" } ,
646+ { "el" , "Noto Sans Greek" } ,
647+ { "ru" , "Noto Sans" } ,
648+ { "en" , "Noto Sans" } ,
649+ { "fr" , "Noto Sans" } ,
650+ { "de" , "Noto Sans" } ,
651+ { "es" , "Noto Sans" } ,
652+ { "pt" , "Noto Sans" }
653+ } ;
654+
655+ public static string GetSystemDefaultFont ( )
656+ {
657+ try
658+ {
659+ var culture = CultureInfo . CurrentCulture ;
660+ var language = culture . Name ; // e.g., "zh-TW"
661+ var langPrefix = language . Split ( '-' ) [ 0 ] ; // e.g., "zh"
662+
663+ // First, try to find by full name, and if not found, fallback to prefix
664+ if ( TryGetNotoFont ( language , out var notoFont ) || TryGetNotoFont ( langPrefix , out notoFont ) )
665+ {
666+ // If the font is installed, return it
667+ if ( Fonts . SystemFontFamilies . Any ( f => f . Source . Equals ( notoFont ) ) )
668+ {
669+ return notoFont ;
670+ }
671+ }
672+
673+ // If Noto font is not found, fallback to the system default font
674+ var font = SystemFonts . MessageFontFamily ;
675+ if ( font . FamilyNames . TryGetValue ( XmlLanguage . GetLanguage ( "en-US" ) , out var englishName ) )
676+ {
677+ return englishName ;
678+ }
679+
680+ return font . Source ?? "Segoe UI" ;
681+ }
682+ catch
683+ {
684+ return "Segoe UI" ;
685+ }
686+ }
687+
688+ private static bool TryGetNotoFont ( string langKey , out string notoFont )
689+ {
690+ return _languageToNotoSans . TryGetValue ( langKey , out notoFont ) ;
691+ }
692+
693+ #endregion
694+
627695 #region Quick Switch
628696
629697 // Edited from: https://github.com/idkidknow/Flow.Launcher.Plugin.DirQuickJump
@@ -750,73 +818,6 @@ public static unsafe bool GetWindowRect(nint handle, out Rect outRect)
750818 rect . bottom - rect . top
751819 ) ;
752820 return true ;
753-
754- #endregion
755-
756- #region System Font
757-
758- private static readonly Dictionary < string , string > _languageToNotoSans = new ( )
759- {
760- { "ko" , "Noto Sans KR" } ,
761- { "ja" , "Noto Sans JP" } ,
762- { "zh-CN" , "Noto Sans SC" } ,
763- { "zh-SG" , "Noto Sans SC" } ,
764- { "zh-Hans" , "Noto Sans SC" } ,
765- { "zh-TW" , "Noto Sans TC" } ,
766- { "zh-HK" , "Noto Sans TC" } ,
767- { "zh-MO" , "Noto Sans TC" } ,
768- { "zh-Hant" , "Noto Sans TC" } ,
769- { "th" , "Noto Sans Thai" } ,
770- { "ar" , "Noto Sans Arabic" } ,
771- { "he" , "Noto Sans Hebrew" } ,
772- { "hi" , "Noto Sans Devanagari" } ,
773- { "bn" , "Noto Sans Bengali" } ,
774- { "ta" , "Noto Sans Tamil" } ,
775- { "el" , "Noto Sans Greek" } ,
776- { "ru" , "Noto Sans" } ,
777- { "en" , "Noto Sans" } ,
778- { "fr" , "Noto Sans" } ,
779- { "de" , "Noto Sans" } ,
780- { "es" , "Noto Sans" } ,
781- { "pt" , "Noto Sans" }
782- } ;
783-
784- public static string GetSystemDefaultFont ( )
785- {
786- try
787- {
788- var culture = CultureInfo . CurrentCulture ;
789- var language = culture . Name ; // e.g., "zh-TW"
790- var langPrefix = language . Split ( '-' ) [ 0 ] ; // e.g., "zh"
791-
792- // First, try to find by full name, and if not found, fallback to prefix
793- if ( TryGetNotoFont ( language , out var notoFont ) || TryGetNotoFont ( langPrefix , out notoFont ) )
794- {
795- // If the font is installed, return it
796- if ( Fonts . SystemFontFamilies . Any ( f => f . Source . Equals ( notoFont ) ) )
797- {
798- return notoFont ;
799- }
800- }
801-
802- // If Noto font is not found, fallback to the system default font
803- var font = SystemFonts . MessageFontFamily ;
804- if ( font . FamilyNames . TryGetValue ( XmlLanguage . GetLanguage ( "en-US" ) , out var englishName ) )
805- {
806- return englishName ;
807- }
808-
809- return font . Source ?? "Segoe UI" ;
810- }
811- catch
812- {
813- return "Segoe UI" ;
814- }
815- }
816-
817- private static bool TryGetNotoFont ( string langKey , out string notoFont )
818- {
819- return _languageToNotoSans . TryGetValue ( langKey , out notoFont ) ;
820821 }
821822
822823 #endregion
0 commit comments