@@ -16,17 +16,28 @@ public static class I18NHelper
1616
1717 public static string GetLanguageNameFromOs ( )
1818 {
19- string timeZoneId = TimeZoneInfo . Local . Id . ToUpper ( ) ;
19+ string tz = TimeZoneInfo . Local . Id . ToLower ( ) ;
2020
21+ // FIXME: `CultureInfo.CurrentCulture.Name` always return `null` in AvaloniaUI
2122 var name = CultureInfo . CurrentCulture . Name ;
2223 if ( string . IsNullOrWhiteSpace ( name ) ) name = Environment . GetEnvironmentVariable ( "LANG" ) ;
2324
2425 name = name ? . Trim ( ) . ToLower ( ) . Replace ( "_" , "-" ) ?? "" ;
25- if ( name . Contains ( "en" ) || timeZoneId == "EST" || timeZoneId == "EDT" ) return "en-US" ;
26- if ( name . Contains ( "zh-hans" ) || name . Contains ( "zh-cn" ) || timeZoneId == "PRC" ) return "zh-Hans" ;
27- if ( name . Contains ( "zh-hant" ) || name . Contains ( "zh-tw" ) || name . Contains ( "zh-hk" ) || timeZoneId == "ROC" ) return "zh-Hant" ;
26+ if ( name . Contains ( "en" ) ) return "en-US" ;
27+
28+ if ( tz == "est" || tz == "edt" || tz . Contains ( "america" ) ) return "en-US" ; // on macos and linux
29+ if ( tz == "pacific standard time" || tz == "mountain standard time"
30+ || tz == "central standard time" || tz == "eastern standard time" ) return "en-US" ; // on windows
31+
32+ if ( name . Contains ( "zh-hans" ) || name . Contains ( "zh-cn" ) ) return "zh-Hans" ;
33+ if ( tz == "prc" || tz == "cst" || tz == "asia/shanghai" || tz . Contains ( "china" ) ) return "zh-Hans" ;
34+
35+ if ( name . Contains ( "zh-hant" ) || name . Contains ( "zh-tw" ) || name . Contains ( "zh-hk" ) ) return "zh-Hant" ;
36+ if ( tz == "roc" || tz == "hkt" || tz == "asia/hong_kong" || tz == "asia/taipei" || tz . Contains ( "taiwan" ) || tz . Contains ( "hong kong" ) )
37+ return "zh-Hant" ;
38+
2839 if ( name . Contains ( "zh" ) ) return "zh-Hans" ;
29- if ( name . Contains ( "ja" ) || name . Contains ( "jp" ) || timeZoneId == "JST" ) return "ja-JP" ;
40+ if ( name . Contains ( "ja" ) || name . Contains ( "jp" ) || tz == "JST" || tz == "asia/tokyo" || tz . Contains ( "japan" ) ) return "ja-JP" ;
3041
3142 return DefaultLanguage ;
3243 }
0 commit comments