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; } = "";
}