Skip to content

Commit af16021

Browse files
committed
refactor locale initialization
1 parent 51a72e0 commit af16021

File tree

3 files changed

+43
-24
lines changed

3 files changed

+43
-24
lines changed

.gitattributes

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# Auto detect text files and perform LF normalization
22
* text=auto
33

4-
*.cs text diff=csharp
4+
*.cs text diff=csharp eol=crlf
55
*.cshtml text diff=html
66
*.csx text diff=csharp
77
*.sln text eol=crlf
88
*.csproj text eol=crlf
9+
*.xaml text eol=crlf
10+
*.axaml text eol=crlf

OpenUtau/App.axaml.cs

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Globalization;
34
using System.Linq;
45
using System.Text.RegularExpressions;
@@ -35,38 +36,54 @@ public override void OnFrameworkInitializationCompleted() {
3536

3637
public void InitializeCulture() {
3738
Log.Information("Initializing culture.");
38-
var language = CultureInfo.InstalledUICulture.Name;
39-
if (!string.IsNullOrEmpty(Core.Util.Preferences.Default.Language)) {
40-
language = Core.Util.Preferences.Default.Language;
39+
string sysLang = CultureInfo.InstalledUICulture.Name;
40+
string prefLang = Core.Util.Preferences.Default.Language;
41+
var languages = GetLanguages();
42+
if (languages.TryGetValue(prefLang, out var res)) {
43+
SetLanguage(res);
44+
} else if (languages.TryGetValue(sysLang, out res)) {
45+
SetLanguage(res);
46+
Core.Util.Preferences.Default.Language = sysLang;
47+
Core.Util.Preferences.Save();
48+
} else {
49+
SetLanguage(languages["en-US"]);
4150
}
42-
SetLanguage(language);
4351

4452
// Force using InvariantCulture to prevent issues caused by culture dependent string conversion, especially for floating point numbers.
4553
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
4654
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
4755
Log.Information("Initialized culture.");
4856
}
4957

50-
public static void SetLanguage(string language) {
51-
var dictionaryList = Current.Resources.MergedDictionaries
58+
public static Dictionary<string, ResourceInclude> GetLanguages() {
59+
if (Current == null) {
60+
return new();
61+
}
62+
var re = new Regex(@"Strings\.?([\w-]+)\.axaml");
63+
return Current.Resources.MergedDictionaries
5264
.Select(res => (ResourceInclude)res)
53-
.ToList();
54-
var resDictName = string.Format(@"Strings.{0}.axaml", language);
55-
var resDict = dictionaryList
56-
.FirstOrDefault(d => d.Source!.OriginalString.Contains(resDictName));
57-
if (resDict == null) {
58-
resDict = dictionaryList.FirstOrDefault(d => d.Source!.OriginalString.Contains("Strings.axaml"));
65+
.Where(res => res.Source!.OriginalString.Contains("Strings."))
66+
.ToDictionary(res => {
67+
var m = re.Match(res.Source!.OriginalString);
68+
return string.IsNullOrEmpty(m.Groups[1].Value) ? "en-US" : m.Groups[1].Value;
69+
});
70+
}
71+
72+
public static void SetLanguage(ResourceInclude res) {
73+
if (Current == null) {
74+
return;
5975
}
60-
if (resDict != null) {
61-
Current.Resources.MergedDictionaries.Remove(resDict);
62-
Current.Resources.MergedDictionaries.Add(resDict);
63-
var langName = resDict.Source.OriginalString.Replace("/Strings/Strings", "").Replace(".", "").Replace("axaml", "");
64-
if (langName == "")
65-
langName = language;
66-
if (Core.Util.Preferences.Default.Language != langName) {
67-
Core.Util.Preferences.Default.Language = langName;
68-
Core.Util.Preferences.Save();
69-
}
76+
Current.Resources.MergedDictionaries.Remove(res);
77+
Current.Resources.MergedDictionaries.Add(res);
78+
}
79+
80+
public static void SetLanguage(string language) {
81+
if (Current == null) {
82+
return;
83+
}
84+
var languages = GetLanguages();
85+
if (languages.TryGetValue(language, out var res)) {
86+
SetLanguage(res);
7087
}
7188
}
7289

OpenUtau/Controls/TrackHeader.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
ContextRequested="PanFaderContextRequested"/>
119119
<TextBlock FontSize="11" FontFamily="monospace" HorizontalAlignment="Right" Margin="0,0,5,0">
120120
<TextBlock.Text>
121-
<MultiBinding StringFormat="{}{0:00R;00L;mid}">
121+
<MultiBinding StringFormat="{}{0:00R;00L;C}">
122122
<Binding Path="Pan"/>
123123
</MultiBinding>
124124
</TextBlock.Text>

0 commit comments

Comments
 (0)