@@ -18,6 +18,8 @@ public class Internationalization
18
18
{
19
19
public Settings Settings { get ; set ; }
20
20
private const string Folder = "Languages" ;
21
+ private const string SystemLanguageCode = "System" ;
22
+ private const string DefaultLanguageCode = "en" ;
21
23
private const string DefaultFile = "en.xaml" ;
22
24
private const string Extension = ".xaml" ;
23
25
private readonly List < string > _languageDirectories = new List < string > ( ) ;
@@ -68,8 +70,18 @@ private void LoadDefaultLanguage()
68
70
public void ChangeLanguage ( string languageCode )
69
71
{
70
72
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 ) ;
73
85
}
74
86
75
87
private Language GetLanguageByLanguageCode ( string languageCode )
@@ -87,11 +99,10 @@ private Language GetLanguageByLanguageCode(string languageCode)
87
99
}
88
100
}
89
101
90
- public void ChangeLanguage ( Language language )
102
+ private void ChangeLanguage ( Language language , bool isSystem )
91
103
{
92
104
language = language . NonNull ( ) ;
93
105
94
-
95
106
RemoveOldLanguageFiles ( ) ;
96
107
if ( language != AvailableLanguages . English )
97
108
{
@@ -103,7 +114,7 @@ public void ChangeLanguage(Language language)
103
114
CultureInfo . CurrentUICulture = CultureInfo . CurrentCulture ;
104
115
105
116
// Raise event after culture is set
106
- Settings . Language = language . LanguageCode ;
117
+ Settings . Language = isSystem ? SystemLanguageCode : language . LanguageCode ;
107
118
_ = Task . Run ( ( ) =>
108
119
{
109
120
UpdatePluginMetadataTranslations ( ) ;
@@ -167,7 +178,35 @@ private void LoadLanguage(Language language)
167
178
168
179
public List < Language > LoadAvailableLanguages ( )
169
180
{
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 ;
171
210
}
172
211
173
212
public string GetTranslation ( string key )
0 commit comments