From 74ebda2b6d6a3510795ab0c17ace3a0dfec35461 Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Mon, 11 Aug 2025 21:05:19 -0400 Subject: [PATCH] fix translation --- .../AlbumArtLayoutSettingsControl.xaml | 11 ++++- .../Helper/LanguageHelper.cs | 8 +--- .../Helper/LyricsParser.cs | 48 +++++++++++++++++++ .../BetterLyrics.WinUI3/Models/LyricsData.cs | 18 +------ .../BetterLyrics.WinUI3/Models/LyricsLine.cs | 3 -- .../Models/Settings/AlbumArtLayoutSettings.cs | 1 + .../Renderer/LyricsRenderer.xaml | 1 - .../TranslateService/TranslateService.cs | 14 +----- .../Strings/en-US/Resources.resw | 3 ++ .../Strings/ja-JP/Resources.resw | 3 ++ .../Strings/ko-KR/Resources.resw | 3 ++ .../Strings/zh-CN/Resources.resw | 3 ++ .../Strings/zh-TW/Resources.resw | 3 ++ .../LyricsRendererViewModel.Draw.cs | 4 +- .../LyricsRendererViewModel.cs | 4 +- 15 files changed, 82 insertions(+), 45 deletions(-) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/AlbumArtLayoutSettingsControl.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/AlbumArtLayoutSettingsControl.xaml index 1f3502a..ba8b6b8 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/AlbumArtLayoutSettingsControl.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/AlbumArtLayoutSettingsControl.xaml @@ -17,7 +17,7 @@ - + + + + + diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs index 078e6d5..7cabcd2 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs @@ -16,7 +16,6 @@ namespace BetterLyrics.WinUI3.Services { private static readonly RankedLanguageIdentifierFactory _factory = new(); private static readonly RankedLanguageIdentifier _identifier; - private static readonly ISettingsService _settingsService = Ioc.Default.GetRequiredService(); public static List SupportedTargetLanguages => [ @@ -69,7 +68,7 @@ namespace BetterLyrics.WinUI3.Services "simple" => "en", "zh_classical" => "zh-Hant", "zh_yue" => "zh-Hant", - "zh" => "zh-Hans", + "zh" => text == ChineseConverter.ConvertToSimplifiedChinese(text) ? "zh-Hans" : "zh-Hant", _ => code }; return code; @@ -99,11 +98,6 @@ namespace BetterLyrics.WinUI3.Services }; } - public static string GetUserTargetLanguageCode() - { - return SupportedTargetLanguages[_settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageIndex].Code; - } - public static int GetDefaultTargetLanguageIndex() { int found = SupportedTargetLanguages.FindIndex(x => ApplicationLanguages.Languages.FirstOrDefault()?.Contains(x.Code) == true); diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs index 5333694..9cb94e2 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs @@ -3,6 +3,7 @@ using BetterLyrics.WinUI3.Enums; using BetterLyrics.WinUI3.Models; using BetterLyrics.WinUI3.Services; +using Lyricify.Lyrics.Helpers.General; using Lyricify.Lyrics.Models; using System; using System.Collections.Generic; @@ -47,10 +48,57 @@ namespace BetterLyrics.WinUI3.Helper break; } } + FillChineseLyricsData(); _lyricsDataArr.Add(new LyricsData()); // 为机翻预留 return _lyricsDataArr; } + private void FillChineseLyricsData() + { + var simplifiedChinese = _lyricsDataArr.Where(x => x.LanguageCode == "zh-Hans").FirstOrDefault(); + var traditionalChinese = _lyricsDataArr.Where(x => x.LanguageCode == "zh-Hant").FirstOrDefault(); + if (simplifiedChinese != null && traditionalChinese == null) + { + // 如果没有繁体中文歌词,则将简体中文歌词转换为繁体中文 + _lyricsDataArr.Add(new LyricsData + { + LyricsLines = simplifiedChinese.LyricsLines.Select(line => new LyricsLine + { + StartMs = line.StartMs, + EndMs = line.EndMs, + OriginalText = ChineseConverter.ConvertToTraditionalChinese(line.OriginalText), + LyricsChars = line.LyricsChars.Select(c => new LyricsChar + { + StartMs = c.StartMs, + EndMs = c.EndMs, + Text = ChineseConverter.ConvertToTraditionalChinese(c.Text), + StartIndex = c.StartIndex + }).ToList() + }).ToList() + }); + } + else if (traditionalChinese != null && simplifiedChinese == null) + { + // 如果没有简体中文歌词,则将繁体中文歌词转换为简体中文 + _lyricsDataArr.Add(new LyricsData + { + LyricsLines = traditionalChinese.LyricsLines.Select(line => new LyricsLine + { + StartMs = line.StartMs, + EndMs = line.EndMs, + OriginalText = ChineseConverter.ConvertToSimplifiedChinese(line.OriginalText), + LyricsChars = line.LyricsChars.Select(c => new LyricsChar + { + StartMs = c.StartMs, + EndMs = c.EndMs, + Text = ChineseConverter.ConvertToSimplifiedChinese(c.Text), + StartIndex = c.StartIndex + }).ToList() + }).ToList() + }); + } + } + private void ParseLrc(string raw) { var lines = raw.Split(["\r\n", "\n"], StringSplitOptions.RemoveEmptyEntries); diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs index 1d8d2cb..ba15df9 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs @@ -36,23 +36,7 @@ namespace BetterLyrics.WinUI3.Models if (transLine != null) { - if (translationData.LanguageCode?.StartsWith("zh") == true) - { - string tmp = ""; - if (LanguageHelper.GetUserTargetLanguageCode() == "zh-Hant") - { - tmp = ChineseConverter.ConvertToTraditionalChinese(transLine.OriginalText); - } - else if (LanguageHelper.GetUserTargetLanguageCode() == "zh-Hans") - { - tmp = ChineseConverter.ConvertToSimplifiedChinese(transLine.OriginalText); - } - line.DisplayedText = $"{line.OriginalText}{separator}{tmp}"; - } - else - { - line.DisplayedText = $"{line.OriginalText}{separator}{transLine.OriginalText}"; - } + line.DisplayedText = $"{line.OriginalText}{separator}{transLine.OriginalText}"; } else { diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs index fbf73ab..2408a3e 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs @@ -214,9 +214,6 @@ namespace BetterLyrics.WinUI3.Models { LineRenderingType.CurrentChar => CurrentCharMask, LineRenderingType.LineStartToCurrentChar => LineStartToCurrentCharMask, - // Here, cuz AlphaMask only takes care of alpha channel - // so ForegroundFontEffect can be a mask for CurrentLine - // And we don't need to create a new mask for CurrentLine LineRenderingType.CurrentLine => CurrentLineMask, _ => PlaceholderEffect }; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/AlbumArtLayoutSettings.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/AlbumArtLayoutSettings.cs index 8ba774b..286d4c9 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/AlbumArtLayoutSettings.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/AlbumArtLayoutSettings.cs @@ -12,6 +12,7 @@ namespace BetterLyrics.WinUI3.Models.Settings { [ObservableProperty][NotifyPropertyChangedRecipients] public partial TextAlignmentType SongInfoAlignmentType { get; set; } = TextAlignmentType.Left; [ObservableProperty][NotifyPropertyChangedRecipients] public partial int CoverImageRadius { get; set; } = 12; // 12 % of the cover image size + [ObservableProperty][NotifyPropertyChangedRecipients] public partial int CoverImageShadowAmount { get; set; } = 12; public AlbumArtLayoutSettings() { } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml index c96f488..4395da0 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml @@ -14,7 +14,6 @@ lyricsDataArr) { - string targetLangCode = LanguageHelper.GetUserTargetLanguageCode().Substring(0, 2); + string targetLangCode = LanguageHelper.SupportedTargetLanguages[_settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageIndex].Code; if (lyricsDataArr.Count > 1) { for (int i = 1; i < lyricsDataArr.Count; i++) { - if (lyricsDataArr[i].LanguageCode?.Substring(0, 2) == targetLangCode) + if (lyricsDataArr[i].LanguageCode == targetLangCode) { return i; // Translation lyrics data found } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw index 6bd7919..d0b51e7 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw @@ -433,6 +433,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi Corner radius + + How much the shadows are spreading + Album art area style diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw index f24351b..57fe65f 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw @@ -433,6 +433,9 @@ コーナー半径 + + 影がどれだけ広がっているか + アルバムエリアスタイル diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw index 81a52f5..36c97e8 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw @@ -433,6 +433,9 @@ 코너 반경 + + 그림자가 얼마나 퍼져나가는지 + 앨범 영역 스타일 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw index db742b6..7868155 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw @@ -433,6 +433,9 @@ 圆角半径 + + 阴影扩散程度 + 专辑区域样式 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw index e7bd6b4..9f5f628 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw @@ -433,6 +433,9 @@ 圓角半徑 + + 陰影擴散程度 + 專輯區域樣式 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Draw.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Draw.cs index fc67afb..6bfc999 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Draw.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Draw.cs @@ -147,10 +147,10 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel using var opacity = new CanvasCommandList(control.Device); using var opacityDs = opacity.CreateDrawingSession(); - opacityDs.DrawImage(new GaussianBlurEffect + opacityDs.DrawImage(new ShadowEffect { Source = albumArt, - BlurAmount = 12f, + BlurAmount = _settingsService.AppSettings.AlbumArtLayoutSettings.CoverImageShadowAmount, Optimization = EffectOptimization.Speed, }); opacityDs.DrawImage(albumArt); diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs index a2701d4..096925c 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs @@ -431,7 +431,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel IsTranslating = true; if (_settingsService.AppSettings.TranslationSettings.IsTranslationEnabled) { - _ = _refreshLyricsRunner.RunAsync(async token => + _refreshLyricsRunner.RunAsync(async token => { await SetDisplayedAlongWithTranslationsAsync(token); IsTranslating = false; @@ -450,7 +450,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel private async Task SetDisplayedAlongWithTranslationsAsync(CancellationToken token) { _logger.LogInformation("Showing translation for lyrics..."); - string targetLangCode = LanguageHelper.GetUserTargetLanguageCode(); + string targetLangCode = LanguageHelper.SupportedTargetLanguages[_settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageIndex].Code; string? originalText = _lyricsDataArr.FirstOrDefault()?.WrappedOriginalText; if (originalText == null) return;