Skip to content

Commit f85c33f

Browse files
committed
fix: update timezone handling for language detection
1 parent e321fa8 commit f85c33f

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

SubRenamer/Helper/I18NHelper.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)