fix: language display

This commit is contained in:
Zhe Fang
2025-10-30 17:33:13 -04:00
parent 780cd302f0
commit e15699bb11
12 changed files with 98 additions and 82 deletions

View File

@@ -9,6 +9,7 @@
xmlns:helper="using:BetterLyrics.WinUI3.Helper"
xmlns:local="using:BetterLyrics.WinUI3.Controls"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="using:BetterLyrics.WinUI3.Models"
xmlns:ui="using:CommunityToolkit.WinUI"
mc:Ignorable="d">
@@ -28,14 +29,9 @@
IsExpanded="True">
<ComboBox ItemsSource="{x:Bind helper:LanguageHelper.SupportedDisplayLanguages}" SelectedIndex="{x:Bind ViewModel.AppSettings.GeneralSettings.LanguageCode, Mode=TwoWay, Converter={StaticResource DisplayLanguageCodeToIndexConverter}}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="globalization:Language">
<DataTemplate x:DataType="models:ExtendedLanguage">
<StackPanel Orientation="Horizontal" Spacing="6">
<TextBlock Text="{x:Bind DisplayName}" />
<TextBlock
VerticalAlignment="Bottom"
FontSize="12"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Text="{x:Bind NativeName}" />
<TextBlock Text="{x:Bind Name}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>

View File

@@ -230,14 +230,9 @@
<controls:SettingsCard x:Uid="SettingsPageTargetLanguage" IsEnabled="{x:Bind ViewModel.AppSettings.TranslationSettings.IsTranslationEnabled, Mode=OneWay}">
<ComboBox ItemsSource="{x:Bind helper:LanguageHelper.SupportedTranslationTargetLanguages}" SelectedIndex="{x:Bind ViewModel.SelectedTargetLanguageIndex, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="globalization:Language">
<DataTemplate x:DataType="models:ExtendedLanguage">
<StackPanel Orientation="Horizontal" Spacing="6">
<TextBlock Text="{x:Bind DisplayName}" />
<TextBlock
VerticalAlignment="Bottom"
FontSize="12"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Text="{x:Bind NativeName}" />
<TextBlock Text="{x:Bind Name}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>

View File

@@ -15,7 +15,7 @@ namespace BetterLyrics.WinUI3.Converter
{
if (value is string langCode)
{
return LanguageHelper.SupportedDisplayLanguages.FindIndex(x => x.LanguageTag == langCode);
return LanguageHelper.SupportedDisplayLanguages.FindIndex(x => x.LanguageCode == langCode);
}
return 0;
}
@@ -24,7 +24,7 @@ namespace BetterLyrics.WinUI3.Converter
{
if (value is int index)
{
return LanguageHelper.SupportedDisplayLanguages.ElementAt(index).LanguageTag;
return LanguageHelper.SupportedDisplayLanguages.ElementAt(index).LanguageCode;
}
return "";
}

View File

@@ -1,4 +1,5 @@
using BetterLyrics.WinUI3.Helper;
using BetterLyrics.WinUI3.Models;
using NTextCat;
using NTextCat.Commons;
using System.Collections.Generic;
@@ -13,80 +14,88 @@ namespace BetterLyrics.WinUI3.Helper
private static readonly RankedLanguageIdentifierFactory _factory = new();
private static readonly RankedLanguageIdentifier _identifier;
public static List<Language> SupportedTranslationTargetLanguages { get; set; } =
public static List<ExtendedLanguage> SupportedTranslationTargetLanguages { get; set; } =
[
new Language("ar"),
new Language("az"),
new ExtendedLanguage("ar"),
new ExtendedLanguage("az"),
new Language("bg"),
new Language("bn"),
new ExtendedLanguage("bg"),
new ExtendedLanguage("bn"),
new Language("ca"),
new Language("cs"),
new ExtendedLanguage("ca"),
new ExtendedLanguage("cs"),
new Language("da"),
new Language("de"),
new ExtendedLanguage("da"),
new ExtendedLanguage("de"),
new Language("el"),
new Language("en"),
new Language("eo"),
new Language("es"),
new Language("et"),
new Language("eu"),
new ExtendedLanguage("el"),
new ExtendedLanguage("en"),
new ExtendedLanguage("eo"),
new ExtendedLanguage("es"),
new ExtendedLanguage("et"),
new ExtendedLanguage("eu"),
new Language("fa"),
new Language("fi"),
new Language("fr"),
new ExtendedLanguage("fa"),
new ExtendedLanguage("fi"),
new ExtendedLanguage("fr"),
new Language("ga"),
new Language("gl"),
new ExtendedLanguage("ga"),
new ExtendedLanguage("gl"),
new Language("he"),
new Language("hi"),
new Language("hu"),
new ExtendedLanguage("he"),
new ExtendedLanguage("hi"),
new ExtendedLanguage("hu"),
new Language("id"),
new Language("it"),
new ExtendedLanguage("id"),
new ExtendedLanguage("it"),
new Language("ja"),
new ExtendedLanguage("ja"),
new Language("ko"),
new Language("ky"),
new ExtendedLanguage("ko"),
new ExtendedLanguage("ky"),
new Language("lt"),
new Language("lv"),
new ExtendedLanguage("lt"),
new ExtendedLanguage("lv"),
new Language("ms"),
new ExtendedLanguage("ms"),
new Language("nb"),
new Language("nl"),
new ExtendedLanguage("nb"),
new ExtendedLanguage("nl"),
new Language("pt-BR"),
new Language("pl"),
new Language("pt"),
new ExtendedLanguage("pt-BR"),
new ExtendedLanguage("pl"),
new ExtendedLanguage("pt"),
new Language("ro"),
new Language("ru"),
new ExtendedLanguage("ro"),
new ExtendedLanguage("ru"),
new Language("sk"),
new Language("sl"),
new Language("sq"),
new Language("sr"),
new Language("sv"),
new ExtendedLanguage("sk"),
new ExtendedLanguage("sl"),
new ExtendedLanguage("sq"),
new ExtendedLanguage("sr"),
new ExtendedLanguage("sv"),
new Language("th"),
new Language("tl"),
new Language("tr"),
new ExtendedLanguage("th"),
new ExtendedLanguage("tl"),
new ExtendedLanguage("tr"),
new Language("uk"),
new Language("ur"),
new ExtendedLanguage("uk"),
new ExtendedLanguage("ur"),
new Language("vi"),
new ExtendedLanguage("vi"),
new Language("zh"),
new ExtendedLanguage("zh"),
];
public static List<Language> SupportedDisplayLanguages { get; set; } = ApplicationLanguages.ManifestLanguages.Select(x => new Language(x)).ToList();
public static List<ExtendedLanguage> SupportedDisplayLanguages { get; set; } =
[
new ExtendedLanguage("", App.ResourceLoader!.GetString("SettingsPageSystemLanguage")),
new ExtendedLanguage("en-US", "English"),
new ExtendedLanguage("ja-JP"),
new ExtendedLanguage("ko-KR"),
new ExtendedLanguage("zh-CN", "简体中文"),
new ExtendedLanguage("zh-TW", "繁體中文"),
];
static LanguageHelper()
{
@@ -120,22 +129,17 @@ namespace BetterLyrics.WinUI3.Helper
public static string GetDefaultTargetTranslationLanguageCode()
{
var found = SupportedTranslationTargetLanguages.Find(x => ApplicationLanguages.Languages.FirstOrDefault()?.Contains(x.LanguageTag) == true);
var found = SupportedTranslationTargetLanguages.Find(x => ApplicationLanguages.Languages.FirstOrDefault()?.Contains(x.LanguageCode) == true);
if (found == null)
{
return "en";
}
else
{
return found.LanguageTag;
return found.LanguageCode;
}
}
public static string GetDefaultDisplayLanguageCode()
{
return ApplicationLanguages.Languages.FirstOrDefault() ?? "en-US";
}
public static string GetOrderChar(string text)
{
if (string.IsNullOrWhiteSpace(text)) return "#";

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Globalization;
namespace BetterLyrics.WinUI3.Models
{
public class ExtendedLanguage
{
public string Name { get; private set; }
public string LanguageCode { get; private set; }
public ExtendedLanguage(string languageCode, string? name = null)
{
LanguageCode = languageCode;
Name = name ?? new Language(languageCode).NativeName;
}
}
}

View File

@@ -13,7 +13,7 @@ namespace BetterLyrics.WinUI3.Models.Settings
{
public partial class GeneralSettings : ObservableRecipient
{
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LanguageCode { get; set; } = LanguageHelper.GetDefaultDisplayLanguageCode();
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LanguageCode { get; set; } = "";
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LXMusicServer { get; set; } = string.Empty;
[ObservableProperty][NotifyPropertyChangedRecipients] public partial List<string> ShowOrHideLyricsWindowShortcut { get; set; } = new List<string> { "Ctrl", "Alt", "H" };
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool ExitOnLyricsWindowClosed { get; set; } = false;

View File

@@ -1219,7 +1219,7 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
<value>Stroke color</value>
</data>
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
<data name="SettingsPageSystemLanguage" xml:space="preserve">
<value>Default</value>
</data>
<data name="SettingsPageTargetLanguage.Header" xml:space="preserve">

View File

@@ -1219,7 +1219,7 @@
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
<value>ストロークカラー</value>
</data>
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
<data name="SettingsPageSystemLanguage" xml:space="preserve">
<value>デフォルト</value>
</data>
<data name="SettingsPageTargetLanguage.Header" xml:space="preserve">

View File

@@ -1219,7 +1219,7 @@
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
<value>윤곽선 색상</value>
</data>
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
<data name="SettingsPageSystemLanguage" xml:space="preserve">
<value>기본</value>
</data>
<data name="SettingsPageTargetLanguage.Header" xml:space="preserve">

View File

@@ -1219,7 +1219,7 @@
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
<value>描边颜色</value>
</data>
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
<data name="SettingsPageSystemLanguage" xml:space="preserve">
<value>默认</value>
</data>
<data name="SettingsPageTargetLanguage.Header" xml:space="preserve">

View File

@@ -1219,7 +1219,7 @@
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
<value>描邊顏色</value>
</data>
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
<data name="SettingsPageSystemLanguage" xml:space="preserve">
<value>預設</value>
</data>
<data name="SettingsPageTargetLanguage.Header" xml:space="preserve">

View File

@@ -91,7 +91,7 @@ namespace BetterLyrics.WinUI3.ViewModels
AppleMusicMediaUserToken = PasswordVaultHelper.Get(Constants.App.AppName, Constants.AppleMusic.MediaUserTokenKey) ?? "";
SelectedTargetLanguageIndex = LanguageHelper.SupportedTranslationTargetLanguages.ToList().FindIndex(x => x.LanguageTag == AppSettings.TranslationSettings.SelectedTargetLanguageCode);
SelectedTargetLanguageIndex = LanguageHelper.SupportedTranslationTargetLanguages.ToList().FindIndex(x => x.LanguageCode == AppSettings.TranslationSettings.SelectedTargetLanguageCode);
IsLastFMAuthenticated = _lastFMService.IsAuthenticated;
LastFMUser = _lastFMService.User;
@@ -231,7 +231,7 @@ namespace BetterLyrics.WinUI3.ViewModels
partial void OnSelectedTargetLanguageIndexChanged(int value)
{
AppSettings.TranslationSettings.SelectedTargetLanguageCode = LanguageHelper.SupportedTranslationTargetLanguages[value].LanguageTag;
AppSettings.TranslationSettings.SelectedTargetLanguageCode = LanguageHelper.SupportedTranslationTargetLanguages[value].LanguageCode;
}
}
}