Skip to content

Commit 921d6a3

Browse files
committed
Add support for system language item
1 parent fd3576d commit 921d6a3

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

Flow.Launcher.Core/Resource/Internationalization.cs

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ public class Internationalization
1818
{
1919
public Settings Settings { get; set; }
2020
private const string Folder = "Languages";
21+
private const string SystemLanguageCode = "System";
22+
private const string DefaultLanguageCode = "en";
2123
private const string DefaultFile = "en.xaml";
2224
private const string Extension = ".xaml";
2325
private readonly List<string> _languageDirectories = new List<string>();
@@ -68,8 +70,18 @@ private void LoadDefaultLanguage()
6870
public void ChangeLanguage(string languageCode)
6971
{
7072
languageCode = languageCode.NonNull();
71-
Language language = GetLanguageByLanguageCode(languageCode);
72-
ChangeLanguage(language);
73+
74+
// Get actual language if language code is system
75+
var isSystem = false;
76+
if (languageCode == SystemLanguageCode)
77+
{
78+
languageCode = GetSystemLanguageCode();
79+
isSystem = true;
80+
}
81+
82+
// Get language by language code and change language
83+
var language = GetLanguageByLanguageCode(languageCode);
84+
ChangeLanguage(language, isSystem);
7385
}
7486

7587
private Language GetLanguageByLanguageCode(string languageCode)
@@ -87,11 +99,10 @@ private Language GetLanguageByLanguageCode(string languageCode)
8799
}
88100
}
89101

90-
public void ChangeLanguage(Language language)
102+
private void ChangeLanguage(Language language, bool isSystem)
91103
{
92104
language = language.NonNull();
93105

94-
95106
RemoveOldLanguageFiles();
96107
if (language != AvailableLanguages.English)
97108
{
@@ -103,7 +114,7 @@ public void ChangeLanguage(Language language)
103114
CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture;
104115

105116
// Raise event after culture is set
106-
Settings.Language = language.LanguageCode;
117+
Settings.Language = isSystem ? SystemLanguageCode : language.LanguageCode;
107118
_ = Task.Run(() =>
108119
{
109120
UpdatePluginMetadataTranslations();
@@ -167,7 +178,35 @@ private void LoadLanguage(Language language)
167178

168179
public List<Language> LoadAvailableLanguages()
169180
{
170-
return AvailableLanguages.GetAvailableLanguages();
181+
var list = AvailableLanguages.GetAvailableLanguages();
182+
list.Insert(0, new Language(SystemLanguageCode, "System"));
183+
return list;
184+
}
185+
186+
private string GetSystemLanguageCode()
187+
{
188+
var availableLanguages = AvailableLanguages.GetAvailableLanguages();
189+
190+
// Retrieve the language identifiers for the current culture
191+
var currentCulture = CultureInfo.CurrentCulture;
192+
var twoLetterCode = currentCulture.TwoLetterISOLanguageName;
193+
var threeLetterCode = currentCulture.ThreeLetterISOLanguageName;
194+
var fullName = currentCulture.Name;
195+
196+
// Try to find a match in the available languages list
197+
foreach (var language in availableLanguages)
198+
{
199+
var languageCode = language.LanguageCode;
200+
201+
if (string.Equals(languageCode, twoLetterCode, StringComparison.OrdinalIgnoreCase) ||
202+
string.Equals(languageCode, threeLetterCode, StringComparison.OrdinalIgnoreCase) ||
203+
string.Equals(languageCode, fullName, StringComparison.OrdinalIgnoreCase))
204+
{
205+
return languageCode;
206+
}
207+
}
208+
209+
return DefaultLanguageCode;
171210
}
172211

173212
public string GetTranslation(string key)

0 commit comments

Comments
 (0)