From 921d6a3beb6a3c05ca00e6ce70a41fbf9e98b21b Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 2 Jan 2025 18:47:25 +0800 Subject: [PATCH 1/7] Add support for system language item --- .../Resource/Internationalization.cs | 51 ++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index 1505e84f819..aac6ecc1e04 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -18,6 +18,8 @@ public class Internationalization { public Settings Settings { get; set; } private const string Folder = "Languages"; + private const string SystemLanguageCode = "System"; + private const string DefaultLanguageCode = "en"; private const string DefaultFile = "en.xaml"; private const string Extension = ".xaml"; private readonly List _languageDirectories = new List(); @@ -68,8 +70,18 @@ private void LoadDefaultLanguage() public void ChangeLanguage(string languageCode) { languageCode = languageCode.NonNull(); - Language language = GetLanguageByLanguageCode(languageCode); - ChangeLanguage(language); + + // Get actual language if language code is system + var isSystem = false; + if (languageCode == SystemLanguageCode) + { + languageCode = GetSystemLanguageCode(); + isSystem = true; + } + + // Get language by language code and change language + var language = GetLanguageByLanguageCode(languageCode); + ChangeLanguage(language, isSystem); } private Language GetLanguageByLanguageCode(string languageCode) @@ -87,11 +99,10 @@ private Language GetLanguageByLanguageCode(string languageCode) } } - public void ChangeLanguage(Language language) + private void ChangeLanguage(Language language, bool isSystem) { language = language.NonNull(); - RemoveOldLanguageFiles(); if (language != AvailableLanguages.English) { @@ -103,7 +114,7 @@ public void ChangeLanguage(Language language) CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture; // Raise event after culture is set - Settings.Language = language.LanguageCode; + Settings.Language = isSystem ? SystemLanguageCode : language.LanguageCode; _ = Task.Run(() => { UpdatePluginMetadataTranslations(); @@ -167,7 +178,35 @@ private void LoadLanguage(Language language) public List LoadAvailableLanguages() { - return AvailableLanguages.GetAvailableLanguages(); + var list = AvailableLanguages.GetAvailableLanguages(); + list.Insert(0, new Language(SystemLanguageCode, "System")); + return list; + } + + private string GetSystemLanguageCode() + { + var availableLanguages = AvailableLanguages.GetAvailableLanguages(); + + // Retrieve the language identifiers for the current culture + var currentCulture = CultureInfo.CurrentCulture; + var twoLetterCode = currentCulture.TwoLetterISOLanguageName; + var threeLetterCode = currentCulture.ThreeLetterISOLanguageName; + var fullName = currentCulture.Name; + + // Try to find a match in the available languages list + foreach (var language in availableLanguages) + { + var languageCode = language.LanguageCode; + + if (string.Equals(languageCode, twoLetterCode, StringComparison.OrdinalIgnoreCase) || + string.Equals(languageCode, threeLetterCode, StringComparison.OrdinalIgnoreCase) || + string.Equals(languageCode, fullName, StringComparison.OrdinalIgnoreCase)) + { + return languageCode; + } + } + + return DefaultLanguageCode; } public string GetTranslation(string key) From 0ae3cfcdd6f735b6f8e16ffa0e782c394fbd2e68 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 2 Jan 2025 18:50:02 +0800 Subject: [PATCH 2/7] Add display translation for system language item --- .../Resource/AvailableLanguages.cs | 34 ++++++++++++++++++- .../Resource/Internationalization.cs | 2 +- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Core/Resource/AvailableLanguages.cs b/Flow.Launcher.Core/Resource/AvailableLanguages.cs index c385cd8e871..ecaecf64689 100644 --- a/Flow.Launcher.Core/Resource/AvailableLanguages.cs +++ b/Flow.Launcher.Core/Resource/AvailableLanguages.cs @@ -30,7 +30,6 @@ internal static class AvailableLanguages public static Language Vietnamese = new Language("vi-vn", "Tiếng Việt"); public static Language Hebrew = new Language("he", "עברית"); - public static List GetAvailableLanguages() { List languages = new List @@ -63,5 +62,38 @@ public static List GetAvailableLanguages() }; return languages; } + + public static string GetSystemTranslation(string languageCode) + { + return languageCode switch + { + "en" => "System", + "zh-cn" => "系统", + "zh-tw" => "系統", + "uk-UA" => "Система", + "ru" => "Система", + "fr" => "Système", + "ja" => "システム", + "nl" => "Systeem", + "pl" => "System", + "da" => "System", + "de" => "System", + "ko" => "시스템", + "sr" => "Систем", + "pt-pt" => "Sistema", + "pt-br" => "Sistema", + "es" => "Sistema", + "es-419" => "Sistema", + "it" => "Sistema", + "nb-NO" => "System", + "sk" => "Systém", + "tr" => "Sistem", + "cs" => "Systém", + "ar" => "النظام", + "vi-vn" => "Hệ thống", + "he" => "מערכת", + _ => "System", + }; + } } } diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index aac6ecc1e04..4db3e863306 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -179,7 +179,7 @@ private void LoadLanguage(Language language) public List LoadAvailableLanguages() { var list = AvailableLanguages.GetAvailableLanguages(); - list.Insert(0, new Language(SystemLanguageCode, "System")); + list.Insert(0, new Language(SystemLanguageCode, AvailableLanguages.GetSystemTranslation(GetSystemLanguageCode()))); return list; } From 3ccd8b42ae53ccd33f66492f6134078a2656c96b Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Mon, 6 Jan 2025 16:58:08 +0800 Subject: [PATCH 3/7] Move SystemLanguageCode to constant --- Flow.Launcher.Core/Resource/Internationalization.cs | 7 +++---- Flow.Launcher.Infrastructure/Constant.cs | 2 ++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index 4db3e863306..70f23c89721 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -18,7 +18,6 @@ public class Internationalization { public Settings Settings { get; set; } private const string Folder = "Languages"; - private const string SystemLanguageCode = "System"; private const string DefaultLanguageCode = "en"; private const string DefaultFile = "en.xaml"; private const string Extension = ".xaml"; @@ -73,7 +72,7 @@ public void ChangeLanguage(string languageCode) // Get actual language if language code is system var isSystem = false; - if (languageCode == SystemLanguageCode) + if (languageCode == Constant.SystemLanguageCode) { languageCode = GetSystemLanguageCode(); isSystem = true; @@ -114,7 +113,7 @@ private void ChangeLanguage(Language language, bool isSystem) CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture; // Raise event after culture is set - Settings.Language = isSystem ? SystemLanguageCode : language.LanguageCode; + Settings.Language = isSystem ? Constant.SystemLanguageCode : language.LanguageCode; _ = Task.Run(() => { UpdatePluginMetadataTranslations(); @@ -179,7 +178,7 @@ private void LoadLanguage(Language language) public List LoadAvailableLanguages() { var list = AvailableLanguages.GetAvailableLanguages(); - list.Insert(0, new Language(SystemLanguageCode, AvailableLanguages.GetSystemTranslation(GetSystemLanguageCode()))); + list.Insert(0, new Language(Constant.SystemLanguageCode, AvailableLanguages.GetSystemTranslation(GetSystemLanguageCode()))); return list; } diff --git a/Flow.Launcher.Infrastructure/Constant.cs b/Flow.Launcher.Infrastructure/Constant.cs index 2889e5ec7ed..f03d327f2e3 100644 --- a/Flow.Launcher.Infrastructure/Constant.cs +++ b/Flow.Launcher.Infrastructure/Constant.cs @@ -52,5 +52,7 @@ public static class Constant public const string SponsorPage = "https://github.com/sponsors/Flow-Launcher"; public const string GitHub = "https://github.com/Flow-Launcher/Flow.Launcher"; public const string Docs = "https://flowlauncher.com/docs"; + + public const string SystemLanguageCode = "System"; } } From 6febbe719a956d1e9928e9d690c70ffa55105467 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Mon, 6 Jan 2025 16:58:19 +0800 Subject: [PATCH 4/7] Use system language as default in settings --- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 83f06279c3b..5b5d10e6e0f 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -13,7 +13,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel, IHotkeySettings { - private string language = "en"; + private string language = Constant.SystemLanguageCode; private string _theme = Constant.DefaultTheme; public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}"; public string OpenResultModifiers { get; set; } = KeyConstant.Alt; From 46c2c1f6683e50652afbfa541f187d15fb6275b6 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Mon, 6 Jan 2025 19:20:47 +0800 Subject: [PATCH 5/7] Change system language code to lowercase --- Flow.Launcher.Infrastructure/Constant.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Constant.cs b/Flow.Launcher.Infrastructure/Constant.cs index f03d327f2e3..c86ed432467 100644 --- a/Flow.Launcher.Infrastructure/Constant.cs +++ b/Flow.Launcher.Infrastructure/Constant.cs @@ -53,6 +53,6 @@ public static class Constant public const string GitHub = "https://github.com/Flow-Launcher/Flow.Launcher"; public const string Docs = "https://flowlauncher.com/docs"; - public const string SystemLanguageCode = "System"; + public const string SystemLanguageCode = "system"; } } From abe943b69339963dff909ecf5c8d9aaa6dc391ce Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sat, 18 Jan 2025 18:39:44 +0800 Subject: [PATCH 6/7] Fix system language code fetch issue --- .../Resource/Internationalization.cs | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index 70f23c89721..13efdda56ec 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -23,19 +23,45 @@ public class Internationalization private const string Extension = ".xaml"; private readonly List _languageDirectories = new List(); private readonly List _oldResources = new List(); + private readonly string SystemLanguageCode; public Internationalization() { AddFlowLauncherLanguageDirectory(); + SystemLanguageCode = GetSystemLanguageCode(); } - private void AddFlowLauncherLanguageDirectory() { var directory = Path.Combine(Constant.ProgramDirectory, Folder); _languageDirectories.Add(directory); } + private static string GetSystemLanguageCode() + { + var availableLanguages = AvailableLanguages.GetAvailableLanguages(); + + // Retrieve the language identifiers for the current culture + var currentCulture = CultureInfo.CurrentCulture; + var twoLetterCode = currentCulture.TwoLetterISOLanguageName; + var threeLetterCode = currentCulture.ThreeLetterISOLanguageName; + var fullName = currentCulture.Name; + + // Try to find a match in the available languages list + foreach (var language in availableLanguages) + { + var languageCode = language.LanguageCode; + + if (string.Equals(languageCode, twoLetterCode, StringComparison.OrdinalIgnoreCase) || + string.Equals(languageCode, threeLetterCode, StringComparison.OrdinalIgnoreCase) || + string.Equals(languageCode, fullName, StringComparison.OrdinalIgnoreCase)) + { + return languageCode; + } + } + + return DefaultLanguageCode; + } internal void AddPluginLanguageDirectories(IEnumerable plugins) { @@ -74,7 +100,7 @@ public void ChangeLanguage(string languageCode) var isSystem = false; if (languageCode == Constant.SystemLanguageCode) { - languageCode = GetSystemLanguageCode(); + languageCode = SystemLanguageCode; isSystem = true; } @@ -178,36 +204,10 @@ private void LoadLanguage(Language language) public List LoadAvailableLanguages() { var list = AvailableLanguages.GetAvailableLanguages(); - list.Insert(0, new Language(Constant.SystemLanguageCode, AvailableLanguages.GetSystemTranslation(GetSystemLanguageCode()))); + list.Insert(0, new Language(Constant.SystemLanguageCode, AvailableLanguages.GetSystemTranslation(SystemLanguageCode))); return list; } - private string GetSystemLanguageCode() - { - var availableLanguages = AvailableLanguages.GetAvailableLanguages(); - - // Retrieve the language identifiers for the current culture - var currentCulture = CultureInfo.CurrentCulture; - var twoLetterCode = currentCulture.TwoLetterISOLanguageName; - var threeLetterCode = currentCulture.ThreeLetterISOLanguageName; - var fullName = currentCulture.Name; - - // Try to find a match in the available languages list - foreach (var language in availableLanguages) - { - var languageCode = language.LanguageCode; - - if (string.Equals(languageCode, twoLetterCode, StringComparison.OrdinalIgnoreCase) || - string.Equals(languageCode, threeLetterCode, StringComparison.OrdinalIgnoreCase) || - string.Equals(languageCode, fullName, StringComparison.OrdinalIgnoreCase)) - { - return languageCode; - } - } - - return DefaultLanguageCode; - } - public string GetTranslation(string key) { var translation = Application.Current.TryFindResource(key); From 0e700cdfcc5aced08e75e19c38f33836d7276628 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 26 Jan 2025 10:42:32 +1100 Subject: [PATCH 7/7] rename GetSystemLanguageCode method + add comment --- Flow.Launcher.Core/Resource/Internationalization.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index 13efdda56ec..ef38e8be097 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -28,7 +28,7 @@ public class Internationalization public Internationalization() { AddFlowLauncherLanguageDirectory(); - SystemLanguageCode = GetSystemLanguageCode(); + SystemLanguageCode = GetSystemLanguageCodeAtStartup(); } private void AddFlowLauncherLanguageDirectory() @@ -37,11 +37,13 @@ private void AddFlowLauncherLanguageDirectory() _languageDirectories.Add(directory); } - private static string GetSystemLanguageCode() + private static string GetSystemLanguageCodeAtStartup() { var availableLanguages = AvailableLanguages.GetAvailableLanguages(); - // Retrieve the language identifiers for the current culture + // Retrieve the language identifiers for the current culture. + // ChangeLanguage method overrides the CultureInfo.CurrentCulture, so this needs to + // be called at startup in order to get the correct lang code of system. var currentCulture = CultureInfo.CurrentCulture; var twoLetterCode = currentCulture.TwoLetterISOLanguageName; var threeLetterCode = currentCulture.ThreeLetterISOLanguageName;