From 08f7afc3f11841770f89ad3e5e7a8556c870b8f1 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Tue, 3 Mar 2026 14:33:41 +0800 Subject: [PATCH] add:i18n --- Ink Canvas/MainWindow.xaml | 14 ++++ Ink Canvas/MainWindow.xaml.cs | 84 ++++++++++++++++++++++++ Ink Canvas/Properties/Strings.en-US.resx | 5 ++ Ink Canvas/Properties/Strings.resx | 5 ++ Ink Canvas/Resources/Settings.cs | 2 + 5 files changed, 110 insertions(+) diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 523f4a4d..7c410712 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -1143,6 +1143,20 @@ + + + + + + + + + diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index cd903c5c..1f5b0980 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -94,6 +94,19 @@ namespace Ink_Canvas 处于画板模式内:Topmost == false / currentMode != 0 处于 PPT 放映内:BtnPPTSlideShowEnd.Visibility */ + try + { + var preferredLanguage = Settings?.Appearance?.Language; + if (!string.IsNullOrWhiteSpace(preferredLanguage)) + { + LocalizationHelper.TrySetCulture(preferredLanguage); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"应用首选界面语言失败: {ex.Message}", LogHelper.LogType.Error); + } + InitializeComponent(); BlackboardLeftSide.Visibility = Visibility.Collapsed; @@ -1473,6 +1486,40 @@ namespace Ink_Canvas AddTouchSupportToSliders(); } + private void ApplyLanguageFromSettings() + { + try + { + if (ComboBoxLanguage == null || Settings?.Appearance == null) return; + + var preferredLanguage = Settings.Appearance.Language ?? string.Empty; + int index; + + if (string.IsNullOrWhiteSpace(preferredLanguage)) + { + index = 0; + } + else if (string.Equals(preferredLanguage, "zh-CN", StringComparison.OrdinalIgnoreCase)) + { + index = 1; + } + else if (string.Equals(preferredLanguage, "en-US", StringComparison.OrdinalIgnoreCase)) + { + index = 2; + } + else + { + index = 0; + } + + ComboBoxLanguage.SelectedIndex = index; + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"初始化语言选项失败: {ex.Message}", LogHelper.LogType.Error); + } + } + /// /// 响应显示器/分辨率配置变化:在检测启用时显示分辨率变更通知,并在后台检查悬浮工具栏是否位于屏幕之外,若是则在延迟后尝试将其通过动画恢复到可见区域(在演示模式下使用不同的动画偏移)。 @@ -4500,6 +4547,43 @@ namespace Ink_Canvas } } + + private void ComboBoxLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + try + { + if (!isLoaded) return; + if (Settings?.Appearance == null) return; + if (ComboBoxLanguage == null) return; + + var index = ComboBoxLanguage.SelectedIndex; + string language; + + switch (index) + { + case 1: + language = "zh-CN"; + break; + case 2: + language = "en-US"; + break; + case 0: + default: + language = string.Empty; + break; + } + + Settings.Appearance.Language = language; + SaveSettingsToFile(); + ShowNotification("已更新界面语言设置,重启应用后生效。"); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"切换界面语言时出错: {ex.Message}", LogHelper.LogType.Error); + ShowNotification("切换界面语言失败。"); + } + } + /// /// 应用指定主题 /// diff --git a/Ink Canvas/Properties/Strings.en-US.resx b/Ink Canvas/Properties/Strings.en-US.resx index bf2878e8..868576a7 100644 --- a/Ink Canvas/Properties/Strings.en-US.resx +++ b/Ink Canvas/Properties/Strings.en-US.resx @@ -720,4 +720,9 @@ Correct Capture Rotate + UI language + Follow system + Chinese (Simplified) + English + You need to restart the app for language changes to fully take effect. diff --git a/Ink Canvas/Properties/Strings.resx b/Ink Canvas/Properties/Strings.resx index 72dd1698..90877f93 100644 --- a/Ink Canvas/Properties/Strings.resx +++ b/Ink Canvas/Properties/Strings.resx @@ -735,4 +735,9 @@ 矫正 拍照 旋转 + 界面语言 + 跟随系统 + 简体中文 + English + 更改界面语言后需要重启应用程序才能完全生效。 \ No newline at end of file diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index ecd930e5..23a93ca9 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -310,6 +310,8 @@ namespace Ink_Canvas public int QuickColorPaletteDisplayMode { get; set; } = 1; [JsonProperty("enableHotkeysInMouseMode")] public bool EnableHotkeysInMouseMode { get; set; } = false; + [JsonProperty("language")] + public string Language { get; set; } = ""; }