This commit is contained in:
2026-02-23 14:31:48 +08:00
parent 1704ad37d2
commit 4c874fa50b
6 changed files with 277 additions and 60 deletions
+7 -6
View File
@@ -18,6 +18,7 @@ using System.Windows.Input;
using System.Windows.Threading;
using Application = System.Windows.Application;
using MessageBox = System.Windows.MessageBox;
using Ink_Canvas.Properties;
using SplashScreen = Ink_Canvas.Windows.SplashScreen;
using Timer = System.Threading.Timer;
using Sentry;
@@ -645,7 +646,7 @@ namespace Ink_Canvas
}
}
Ink_Canvas.MainWindow.ShowNewMessage("抱歉,出现未预期的异常,可能导致 InkCanvasForClass 运行不稳定。\n建议保存墨迹后重启应用。");
Ink_Canvas.MainWindow.ShowNewMessage(Strings.GetString("Msg_UnexpectedError"));
LogHelper.NewLog(e.Exception.ToString());
// 记录到崩溃日志
@@ -661,7 +662,7 @@ namespace Ink_Canvas
StartupCount.Increment();
if (StartupCount.GetCount() >= 5)
{
MessageBox.Show("检测到程序已连续重启5次,已停止自动重启。请联系开发者或检查系统环境。", "重启次数过多", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(Strings.GetString("Msg_RestartLimit"), Strings.GetString("Msg_RestartLimitTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
StartupCount.Reset();
Environment.Exit(1);
}
@@ -699,7 +700,7 @@ namespace Ink_Canvas
if (ShouldShowSplashScreen() && !IsLaunchByFileOrUri(e.Args))
{
ShowSplashScreen();
SetSplashMessage("正在启动 Ink Canvas...");
SetSplashMessage(Strings.GetString("Splash_Starting"));
SetSplashProgress(20);
await Task.Delay(500);
@@ -1236,7 +1237,7 @@ namespace Ink_Canvas
StartupCount.Increment();
if (StartupCount.GetCount() >= 5)
{
MessageBox.Show("检测到程序已连续重启5次,已停止自动重启。请联系开发者或检查系统环境。", "重启次数过多", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(Strings.GetString("Msg_RestartLimit"), Strings.GetString("Msg_RestartLimitTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
StartupCount.Reset();
Environment.Exit(1);
}
@@ -1261,7 +1262,7 @@ namespace Ink_Canvas
StartupCount.Increment();
if (StartupCount.GetCount() >= 5)
{
MessageBox.Show("检测到程序已连续重启5次,已停止自动重启。请联系开发者或检查系统环境。", "重启次数过多", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(Strings.GetString("Msg_RestartLimit"), Strings.GetString("Msg_RestartLimitTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
StartupCount.Reset();
Environment.Exit(1);
}
@@ -1338,7 +1339,7 @@ namespace Ink_Canvas
StartupCount.Increment();
if (StartupCount.GetCount() >= 5)
{
MessageBox.Show("检测到程序已连续重启5次,已停止自动重启。请联系开发者或检查系统环境。", "重启次数过多", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(Strings.GetString("Msg_RestartLimit"), Strings.GetString("Msg_RestartLimitTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
StartupCount.Reset();
Environment.Exit(1);
}
+38 -49
View File
@@ -9,6 +9,7 @@
xmlns:controls="clr-namespace:Ink_Canvas.Controls"
xmlns:Windows="clr-namespace:Ink_Canvas.Windows"
xmlns:props="clr-namespace:Ink_Canvas.Properties"
xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions"
mc:Ignorable="d"
AllowsTransparency="True"
WindowStyle="None"
@@ -161,7 +162,7 @@
<!-- Startup -->
<Button Width="40" Height="40" Margin="0,10,0,0" Style="{StaticResource NavButton}"
Click="NavStartup_Click" Tag="startup" ToolTip="启动设置">
Click="NavStartup_Click" Tag="startup" ToolTip="{x:Static props:Strings.Nav_Startup}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -176,7 +177,7 @@
<!-- Canvas -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavCanvas_Click" Tag="canvas" ToolTip="画布设置">
Click="NavCanvas_Click" Tag="canvas" ToolTip="{x:Static props:Strings.Nav_Canvas}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -191,7 +192,7 @@
<!-- Crash Action -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavCrashAction_Click" Tag="crashaction" ToolTip="崩溃处理">
Click="NavCrashAction_Click" Tag="crashaction" ToolTip="{x:Static props:Strings.Nav_CrashAction}">
<Image Width="22" Height="22">
<Image.Source>
<DrawingImage>
@@ -212,7 +213,7 @@
<!-- Gesture -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavGesture_Click" Tag="gesture" ToolTip="手势设置">
Click="NavGesture_Click" Tag="gesture" ToolTip="{i18n:I18n Key=Nav_Gesture_Settings}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -227,7 +228,7 @@
<!-- Ink Recognition -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavInkRecognition_Click" Tag="inkrecognition" ToolTip="墨迹识别">
Click="NavInkRecognition_Click" Tag="inkrecognition" ToolTip="{x:Static props:Strings.Nav_InkRecognition}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -242,7 +243,7 @@
<!-- Theme -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavTheme_Click" Tag="theme" ToolTip="个性化设置">
Click="NavTheme_Click" Tag="theme" ToolTip="{i18n:I18n Key=Nav_Theme_Settings}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -257,7 +258,7 @@
<!-- PPT -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavPPT_Click" Tag="ppt" ToolTip="PPT设置">
Click="NavPPT_Click" Tag="ppt" ToolTip="{i18n:I18n Key=Nav_PPT_Settings}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -272,7 +273,7 @@
<!-- Advanced -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavAdvanced_Click" Tag="advanced" ToolTip="高级设置">
Click="NavAdvanced_Click" Tag="advanced" ToolTip="{i18n:I18n Key=Nav_Advanced_Settings}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -287,7 +288,7 @@
<!-- Automation -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavAutomation_Click" Tag="automation" ToolTip="自动化设置">
Click="NavAutomation_Click" Tag="automation" ToolTip="{i18n:I18n Key=Nav_Automation_Settings}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -302,7 +303,7 @@
<!-- Random Window -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavRandomWindow_Click" Tag="randomwindow" ToolTip="随机窗口设置">
Click="NavRandomWindow_Click" Tag="randomwindow" ToolTip="{i18n:I18n Key=Nav_RandomWindow_Settings}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -317,7 +318,7 @@
<!-- About -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavAbout_Click" Tag="about" ToolTip="关于">
Click="NavAbout_Click" Tag="about" ToolTip="{x:Static props:Strings.Nav_About}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -332,7 +333,7 @@
<!-- 快捷键设置 -->
<Button Width="40" Height="40" Margin="0,5,0,0" Style="{StaticResource NavButton}"
Click="NavShortcuts_Click" Tag="shortcuts" ToolTip="快捷键设置">
Click="NavShortcuts_Click" Tag="shortcuts" ToolTip="{i18n:I18n Key=Nav_Shortcuts_Settings}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -354,7 +355,7 @@
<!-- 折叠侧边栏按钮 -->
<Button Width="40" Height="40" Style="{StaticResource NavButton}"
Click="CollapseNavSidebar_Click" ToolTip="折叠侧边栏">
Click="CollapseNavSidebar_Click" ToolTip="{i18n:I18n Key=CollapseNavSidebar}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -384,7 +385,7 @@
<ui:SimpleStackPanel Orientation="Horizontal" VerticalAlignment="Center">
<!-- 显示侧边栏按钮 -->
<Button Width="40" Height="40" Margin="10,0,0,0" Style="{StaticResource NavButton}"
Click="ShowNavSidebar_Click" ToolTip="显示侧边栏">
Click="ShowNavSidebar_Click" ToolTip="{i18n:I18n Key=ShowNavSidebar}">
<Image Width="24" Height="24">
<Image.Source>
<DrawingImage>
@@ -396,7 +397,7 @@
</Image.Source>
</Image>
</Button>
<TextBlock Foreground="White" Margin="15,-2,0,0" Text="设置" FontWeight="Bold"
<TextBlock Foreground="White" Margin="15,-2,0,0" Text="{i18n:I18n Key=Settings_Title}" FontWeight="Bold"
FontSize="32" />
</ui:SimpleStackPanel>
</Border>
@@ -443,7 +444,7 @@
<ui:SimpleStackPanel VerticalAlignment="Center">
<TextBlock Foreground="#fafafa" HorizontalAlignment="Center"
VerticalAlignment="Center" FontSize="15" Margin="0,0,0,10"
Text="设置更改将自动保存,部分设置需要重启软件后生效" />
Text="{i18n:I18n Key=Settings_AutoSaveHint}" />
<ui:SimpleStackPanel Spacing="5">
<ui:SimpleStackPanel Spacing="5" Orientation="Horizontal"
HorizontalAlignment="Center">
@@ -471,9 +472,7 @@
</Image>
<Label FontSize="16" Foreground="#fafafa"
VerticalAlignment="Center" FontFamily="Microsoft YaHei UI"
FontWeight="Bold">
重启
</Label>
FontWeight="Bold" Content="{i18n:I18n Key=Btn_Restart}"/>
</ui:SimpleStackPanel>
</Button>
<Button Width="116" Height="45" FontFamily="Microsoft YaHei UI"
@@ -503,9 +502,7 @@
</Image.Source>
</Image>
<Label Margin="2,0,0,0" FontSize="16" VerticalAlignment="Center"
FontFamily="Microsoft YaHei UI">
重置
</Label>
FontFamily="Microsoft YaHei UI" Content="{i18n:I18n Key=Btn_Reset}"/>
</ui:SimpleStackPanel>
</Button>
<Button Width="116" Height="45" FontFamily="Microsoft YaHei UI"
@@ -532,9 +529,7 @@
</Image>
<Label Foreground="#fafafa" FontSize="16"
VerticalAlignment="Center" FontFamily="Microsoft YaHei UI"
FontWeight="Bold">
退出
</Label>
FontWeight="Bold" Content="{i18n:I18n Key=Btn_Exit}"/>
</ui:SimpleStackPanel>
</Button>
</ui:SimpleStackPanel>
@@ -543,18 +538,16 @@
</Border>
<GroupBox Name="GroupBoxModeSettings">
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="模式设置" FontWeight="Bold" Foreground="#fafafa"
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Settings_Mode}" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ui:SimpleStackPanel Spacing="6" Margin="0,10,0,0">
<TextBlock TextWrapping="Wrap" Margin="0,0,0,10" Foreground="#fafafa">
选择软件运行模式。仅PPT模式下,软件将完全隐藏,仅在PPT放映时出现。(实验性功能,可能不稳定。)
</TextBlock>
<TextBlock TextWrapping="Wrap" Margin="0,0,0,10" Foreground="#fafafa" Text="{i18n:I18n Key=Settings_ModeDesc}"/>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,10,0,0">
<TextBlock Text="正常模式" VerticalAlignment="Center" Foreground="#fafafa"
<TextBlock Text="{i18n:I18n Key=Mode_Normal}" VerticalAlignment="Center" Foreground="#fafafa"
FontSize="14" Margin="0,0,8,0"/>
<ui:ToggleSwitch x:Name="ToggleSwitchMode"
OnContent="仅PPT模式" OffContent="仅PPT模式"
OnContent="{i18n:I18n Key=Mode_PPTOnly}" OffContent="{i18n:I18n Key=Mode_PPTOnly}"
IsOn="False"
FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchMode_Toggled"/>
@@ -564,14 +557,12 @@
<GroupBox Name="GroupBoxNewSettings">
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="新设置窗口" FontWeight="Bold" Foreground="#fafafa"
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Settings_NewWindow}" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ui:SimpleStackPanel Spacing="6" Margin="0,10,0,0">
<TextBlock TextWrapping="Wrap" Margin="0,0,0,10" Foreground="#fafafa">
打开新的设置窗口,提供更丰富的设置选项和更好的用户体验。(开发中)
</TextBlock>
<Button x:Name="BtnOpenNewSettings" Content="打开新设置窗口"
<TextBlock TextWrapping="Wrap" Margin="0,0,0,10" Foreground="#fafafa" Text="{i18n:I18n Key=Settings_NewWindowDesc}"/>
<Button x:Name="BtnOpenNewSettings" Content="{i18n:I18n Key=Btn_OpenNewSettings}"
HorizontalAlignment="Left" Click="BtnOpenNewSettings_Click"
Padding="15,5" Margin="0,10,0,0"/>
</ui:SimpleStackPanel>
@@ -579,14 +570,12 @@
<GroupBox Name="GroupBoxPlugins">
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="插件管理" FontWeight="Bold" Foreground="#fafafa"
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Settings_Plugins}" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ui:SimpleStackPanel Spacing="6" Margin="0,10,0,0">
<TextBlock TextWrapping="Wrap" Margin="0,0,0,10" Foreground="#fafafa">
通过插件扩展InkCanvas的功能。您可以启用或禁用插件,或加载自定义插件。
</TextBlock>
<Button x:Name="BtnOpenPluginManager" Content="打开插件管理器"
<TextBlock TextWrapping="Wrap" Margin="0,0,0,10" Foreground="#fafafa" Text="{i18n:I18n Key=Settings_PluginsDesc}"/>
<Button x:Name="BtnOpenPluginManager" Content="{i18n:I18n Key=Btn_OpenPluginManager}"
HorizontalAlignment="Left" Click="BtnOpenPluginManager_Click"
Padding="15,5" Margin="0,10,0,0"/>
</ui:SimpleStackPanel>
@@ -594,33 +583,33 @@
<GroupBox>
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="启动" FontWeight="Bold" Foreground="#fafafa"
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Startup_Start}" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ui:SimpleStackPanel Spacing="6">
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="窗口无焦点模式" VerticalAlignment="Center"
<TextBlock Foreground="#fafafa" Text="{i18n:I18n Key=Startup_NoFocusMode}" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchNoFocusMode"
IsOn="False" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchNoFocusMode_Toggled" />
</ui:SimpleStackPanel>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="窗口无边框模式" VerticalAlignment="Center"
<TextBlock Foreground="#fafafa" Text="{i18n:I18n Key=Startup_NoBorderMode}" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchWindowMode"
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchWindowMode_Toggled" />
</ui:SimpleStackPanel>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="窗口置顶" VerticalAlignment="Center"
<TextBlock Foreground="#fafafa" Text="{i18n:I18n Key=Startup_TopMost}" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchAlwaysOnTop"
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchAlwaysOnTop_Toggled" />
</ui:SimpleStackPanel>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left" Name="UIAccessTopMostPanel" Visibility="Collapsed">
<TextBlock Foreground="#fafafa" Text="UIA置顶" VerticalAlignment="Center"
<TextBlock Foreground="#fafafa" Text="{i18n:I18n Key=Startup_UIATopMost}" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchUIAccessTopMost"
IsOn="False" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
@@ -628,7 +617,7 @@
</ui:SimpleStackPanel>
<TextBlock Name="UIAccessTopMostDescription" Text="# 开启UIA置顶后,软件需要管理员启动才能置顶,关闭此功能需要完全关闭软件后再手动启动,无法使用重启来关闭此功能" TextWrapping="Wrap" Foreground="#a1a1aa" Visibility="Collapsed" />
<ui:ToggleSwitch OnContent="" OffContent=""
Name="ToggleSwitchIsAutoUpdate" Header="自动检查更新"
Name="ToggleSwitchIsAutoUpdate" Header="{i18n:I18n Key=Header_AutoUpdate}"
FontFamily="Microsoft YaHei UI"
Toggled="ToggleSwitchIsAutoUpdate_Toggled" />
<ui:ToggleSwitch OnContent="" OffContent=""
@@ -2526,7 +2515,7 @@
<ui:ToggleSwitch OnContent="开" OffContent="关" Name="ToggleSwitchIsEnableUriScheme"
Visibility="Collapsed" IsOn="False"
AutomationProperties.Name="外部协议调用 (icc://)"
ToolTip="通过 icc:// 协议从外部控制软件"
ToolTip="{i18n:I18n Key=Tooltip_IccProtocol}"
Toggled="ToggleSwitchIsEnableUriScheme_Toggled" />
</ui:SimpleStackPanel>
<StackPanel Orientation="Vertical">
@@ -10684,7 +10673,7 @@
<Grid Grid.Row="1" HorizontalAlignment="Center" Margin="10,6,10,4">
<Border Background="{DynamicResource FloatBarBackground}"
CornerRadius="8" BorderThickness="1" BorderBrush="#616161"
Width="282" Height="40" ToolTip="展台/截图分辨率">
Width="282" Height="40" ToolTip="{x:Static props:Strings.Booth_Resolution_Tooltip}">
<Grid>
<Border x:Name="BoothResolutionTabIndicator"
Background="#66CCFF"
+6 -5
View File
@@ -1,5 +1,6 @@
using Ink_Canvas.Helpers;
using Ink_Canvas.Helpers.Plugins;
using Ink_Canvas.Properties;
using Ink_Canvas.Windows;
using iNKORE.UI.WPF.Modern;
using iNKORE.UI.WPF.Modern.Controls;
@@ -1994,7 +1995,7 @@ namespace Ink_Canvas
else
{
// 下载失败
MessageBox.Show("更新下载失败,请检查网络连接后重试。", "下载失败", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(Strings.GetString("Msg_UpdateDownloadFailed"), Strings.GetString("Msg_DownloadFailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
}
break;
@@ -2017,12 +2018,12 @@ namespace Ink_Canvas
timerCheckAutoUpdateWithSilence.Start();
// 通知用户
MessageBox.Show("更新已下载完成,将在软件关闭时自动安装。", "更新已准备就绪", MessageBoxButton.OK, MessageBoxImage.Information);
MessageBox.Show(Strings.GetString("Msg_UpdateReady"), Strings.GetString("Msg_UpdateReadyTitle"), MessageBoxButton.OK, MessageBoxImage.Information);
}
else
{
LogHelper.WriteLogToFile("AutoUpdate | Update download failed", LogHelper.LogType.Error);
MessageBox.Show("更新下载失败,请检查网络连接后重试。", "下载失败", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(Strings.GetString("Msg_UpdateDownloadFailed"), Strings.GetString("Msg_DownloadFailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
}
break;
@@ -2037,8 +2038,8 @@ namespace Ink_Canvas
SaveSettingsToFile();
// 通知用户
MessageBox.Show($"已设置跳过版本 {AvailableLatestVersion},在下次发布新版本之前不会再提示更新。",
"已跳过此版本",
MessageBox.Show(string.Format(Strings.GetString("Msg_SkipVersion"), AvailableLatestVersion),
Strings.GetString("Msg_SkipVersionTitle"),
MessageBoxButton.OK,
MessageBoxImage.Information);
break;
@@ -0,0 +1,20 @@
using System;
using System.Windows.Markup;
using Ink_Canvas.Properties;
namespace Ink_Canvas.MarkupExtensions
{
/// <summary>
/// XAML 中用键名取本地化字符串,无需在 Strings.Designer.cs 中为每个键添加属性。
/// 用法:xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions" 然后 Text="{i18n:I18n Key=Settings_Title}"
/// </summary>
public class I18nExtension : MarkupExtension
{
public string Key { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return string.IsNullOrEmpty(Key) ? string.Empty : (Strings.GetString(Key) ?? $"#{Key}");
}
}
}
+103
View File
@@ -103,4 +103,107 @@
<data name="Booth_Resolution_Tooltip" xml:space="preserve">
<value>Booth / Screenshot resolution</value>
</data>
<data name="Nav_Gesture_Settings" xml:space="preserve"><value>Gesture</value></data>
<data name="Nav_Theme_Settings" xml:space="preserve"><value>Appearance</value></data>
<data name="Nav_PPT_Settings" xml:space="preserve"><value>PPT</value></data>
<data name="Nav_Advanced_Settings" xml:space="preserve"><value>Advanced</value></data>
<data name="Nav_Automation_Settings" xml:space="preserve"><value>Automation</value></data>
<data name="Nav_RandomWindow_Settings" xml:space="preserve"><value>Random Picker</value></data>
<data name="Nav_Shortcuts_Settings" xml:space="preserve"><value>Shortcuts</value></data>
<data name="CollapseNavSidebar" xml:space="preserve"><value>Collapse sidebar</value></data>
<data name="ShowNavSidebar" xml:space="preserve"><value>Show sidebar</value></data>
<data name="Tooltip_IccProtocol" xml:space="preserve"><value>Control via icc:// protocol</value></data>
<data name="Settings_Title" xml:space="preserve"><value>Settings</value></data>
<data name="Settings_AutoSaveHint" xml:space="preserve"><value>Changes are saved automatically; some require restart.</value></data>
<data name="Btn_Restart" xml:space="preserve"><value>Restart</value></data>
<data name="Btn_Reset" xml:space="preserve"><value>Reset</value></data>
<data name="Btn_Exit" xml:space="preserve"><value>Exit</value></data>
<data name="Settings_Mode" xml:space="preserve"><value>Mode</value></data>
<data name="Settings_ModeDesc" xml:space="preserve"><value>Choose run mode. In PPT-only mode the app is hidden until slide show. (Experimental)</value></data>
<data name="Mode_Normal" xml:space="preserve"><value>Normal</value></data>
<data name="Mode_PPTOnly" xml:space="preserve"><value>PPT only</value></data>
<data name="Settings_NewWindow" xml:space="preserve"><value>New settings window</value></data>
<data name="Settings_NewWindowDesc" xml:space="preserve"><value>Open a new settings window. (In development)</value></data>
<data name="Btn_OpenNewSettings" xml:space="preserve"><value>Open new settings</value></data>
<data name="Settings_Plugins" xml:space="preserve"><value>Plugins</value></data>
<data name="Settings_PluginsDesc" xml:space="preserve"><value>Extend Ink Canvas with plugins. Enable, disable, or load custom plugins.</value></data>
<data name="Btn_OpenPluginManager" xml:space="preserve"><value>Open plugin manager</value></data>
<data name="Startup_Start" xml:space="preserve"><value>Startup</value></data>
<data name="Startup_NoFocusMode" xml:space="preserve"><value>No-focus mode</value></data>
<data name="Startup_NoBorderMode" xml:space="preserve"><value>Borderless</value></data>
<data name="Startup_TopMost" xml:space="preserve"><value>Topmost</value></data>
<data name="Startup_UIATopMost" xml:space="preserve"><value>UIA topmost</value></data>
<data name="Startup_UIATopMostHint" xml:space="preserve"><value># UIA topmost requires admin to take effect.</value></data>
<data name="Header_AutoUpdate" xml:space="preserve"><value>Auto-update</value></data>
<data name="Header_SilentUpdate" xml:space="preserve"><value>Silent update</value></data>
<data name="SilentUpdate_Hint" xml:space="preserve"><value># Silent update installs when app is idle.</value></data>
<data name="Update_Channel" xml:space="preserve"><value>Update channel</value></data>
<data name="Channel_Release" xml:space="preserve"><value>Stable (Release)</value></data>
<data name="Channel_Preview" xml:space="preserve"><value>Preview</value></data>
<data name="Channel_Beta" xml:space="preserve"><value>Beta</value></data>
<data name="Channel_Hint" xml:space="preserve"><value># Stable for reliability; Preview for new features.</value></data>
<data name="Btn_ManualUpdate" xml:space="preserve"><value>Check for updates</value></data>
<data name="ManualUpdate_Hint" xml:space="preserve"><value># Check and download now.</value></data>
<data name="Btn_VersionFix" xml:space="preserve"><value>Version fix</value></data>
<data name="VersionFix_Hint" xml:space="preserve"><value># Download and install latest for current channel.</value></data>
<data name="Btn_Rollback" xml:space="preserve"><value>Rollback</value></data>
<data name="Rollback_Hint" xml:space="preserve"><value># Open rollback page.</value></data>
<data name="SilentUpdate_AfterDownloadHint" xml:space="preserve"><value># When silent update is off, you will be prompted after download.</value></data>
<data name="SilentUpdate_TimeRange" xml:space="preserve"><value>Silent update time range</value></data>
<data name="Time_Start" xml:space="preserve"><value>Start time</value></data>
<data name="Time_End" xml:space="preserve"><value>End time</value></data>
<data name="TimeRange_Hint" xml:space="preserve"><value># If end &lt; start…</value></data>
<data name="Startup_RunAtLogin" xml:space="preserve"><value>Run at login</value></data>
<data name="Startup_MinimizeToSidebar" xml:space="preserve"><value>Minimize to sidebar at startup</value></data>
<data name="Canvas_AndInk" xml:space="preserve"><value>Canvas &amp; ink</value></data>
<data name="Canvas_ShowPenCursor" xml:space="preserve"><value>Show pen cursor</value></data>
<data name="Canvas_PressureTouch" xml:space="preserve"><value>Pressure-sensitive touch</value></data>
<data name="Canvas_PressureTouchHint" xml:space="preserve"><value># Touch devices will support pressure.</value></data>
<data name="Canvas_IgnorePressure" xml:space="preserve"><value>Ignore pressure</value></data>
<data name="Canvas_IgnorePressureHint" xml:space="preserve"><value># Ignore all device pressure.</value></data>
<data name="Canvas_EraserSize" xml:space="preserve"><value>Eraser size</value></data>
<data name="Size_VerySmall" xml:space="preserve"><value>Very small</value></data>
<data name="Size_Small" xml:space="preserve"><value>Small</value></data>
<data name="Size_Medium" xml:space="preserve"><value>Medium</value></data>
<data name="Size_Large" xml:space="preserve"><value>Large</value></data>
<data name="Size_VeryLarge" xml:space="preserve"><value>Very large</value></data>
<data name="EraserSize_SwitchHint" xml:space="preserve"><value># Takes effect on next area eraser use.</value></data>
<data name="Canvas_HideInkOnExit" xml:space="preserve"><value>Hide ink when leaving canvas</value></data>
<data name="Canvas_HideInkOnExitHint" xml:space="preserve"><value># When enabled…</value></data>
<data name="Canvas_ClearInkHistory" xml:space="preserve"><value>Clear ink history when clearing</value></data>
<data name="Canvas_ClearImageOnClear" xml:space="preserve"><value>Clear images with canvas</value></data>
<data name="Canvas_CompressImage" xml:space="preserve"><value>Compress images &gt;1920×1080</value></data>
<data name="Canvas_KeepAsymptote" xml:space="preserve"><value>Keep hyperbola asymptotes</value></data>
<data name="Yes" xml:space="preserve"><value>Yes</value></data>
<data name="No" xml:space="preserve"><value>No</value></data>
<data name="AskEachTime" xml:space="preserve"><value>Ask each time</value></data>
<data name="Canvas_AsymptoteHint" xml:space="preserve"><value># Disabling may cause undo bugs.</value></data>
<data name="Canvas_ShowCircleCenter" xml:space="preserve"><value>Show circle center</value></data>
<data name="Canvas_WPFBezier" xml:space="preserve"><value>WPF default Bezier smoothing</value></data>
<data name="Canvas_AdvancedSmoothing" xml:space="preserve"><value>Advanced curve smoothing (recommended)</value></data>
<data name="Canvas_InkFade" xml:space="preserve"><value>Ink fade</value></data>
<data name="Canvas_InkFadeHint" xml:space="preserve"><value># Ink will not be drawn on canvas when enabled.</value></data>
<data name="Canvas_InkFadeTime" xml:space="preserve"><value>Ink fade time</value></data>
<data name="Canvas_HideFadeInPenMenu" xml:space="preserve"><value>Hide fade in pen menu</value></data>
<data name="Canvas_HideFadeInPenMenuHint" xml:space="preserve"><value># Fade control will be hidden in pen context menu.</value></data>
<data name="Color" xml:space="preserve"><value>Color</value></data>
<data name="Color_Default" xml:space="preserve"><value>Default</value></data>
<data name="Color_Black" xml:space="preserve"><value>Black</value></data>
<data name="Color_White" xml:space="preserve"><value>White</value></data>
<data name="Color_Red" xml:space="preserve"><value>Red</value></data>
<data name="Color_Yellow" xml:space="preserve"><value>Yellow</value></data>
<data name="Color_Blue" xml:space="preserve"><value>Blue</value></data>
<data name="Color_Green" xml:space="preserve"><value>Green</value></data>
<data name="Color_Orange" xml:space="preserve"><value>Orange</value></data>
<data name="Color_Purple" xml:space="preserve"><value>Purple</value></data>
<data name="Msg_UpdateReady" xml:space="preserve"><value>Update downloaded. It will install when you close the app.</value></data>
<data name="Msg_UpdateReadyTitle" xml:space="preserve"><value>Update ready</value></data>
<data name="Msg_UpdateDownloadFailed" xml:space="preserve"><value>Update download failed. Please check your network and try again.</value></data>
<data name="Msg_DownloadFailedTitle" xml:space="preserve"><value>Download failed</value></data>
<data name="Msg_SkipVersion" xml:space="preserve"><value>Version {0} skipped; you will not be prompted until a newer version is released.</value></data>
<data name="Msg_SkipVersionTitle" xml:space="preserve"><value>Version skipped</value></data>
<data name="Msg_UnexpectedError" xml:space="preserve"><value>An unexpected error occurred. Save your ink and restart the app.</value></data>
<data name="Msg_RestartLimitTitle" xml:space="preserve"><value>Too many restarts</value></data>
<data name="Msg_RestartLimit" xml:space="preserve"><value>App has restarted 5 times. Auto-restart stopped. Contact the developer or check the system.</value></data>
<data name="Splash_Starting" xml:space="preserve"><value>Starting Ink Canvas...</value></data>
</root>
+103
View File
@@ -118,4 +118,107 @@
<value>展台/截图分辨率</value>
<comment>展台分辨率选项卡提示</comment>
</data>
<data name="Nav_Gesture_Settings" xml:space="preserve"><value>手势设置</value></data>
<data name="Nav_Theme_Settings" xml:space="preserve"><value>个性化设置</value></data>
<data name="Nav_PPT_Settings" xml:space="preserve"><value>PPT设置</value></data>
<data name="Nav_Advanced_Settings" xml:space="preserve"><value>高级设置</value></data>
<data name="Nav_Automation_Settings" xml:space="preserve"><value>自动化设置</value></data>
<data name="Nav_RandomWindow_Settings" xml:space="preserve"><value>随机窗口设置</value></data>
<data name="Nav_Shortcuts_Settings" xml:space="preserve"><value>快捷键设置</value></data>
<data name="CollapseNavSidebar" xml:space="preserve"><value>折叠侧边栏</value></data>
<data name="ShowNavSidebar" xml:space="preserve"><value>显示侧边栏</value></data>
<data name="Tooltip_IccProtocol" xml:space="preserve"><value>通过 icc:// 协议从外部控制软件</value></data>
<data name="Settings_Title" xml:space="preserve"><value>设置</value></data>
<data name="Settings_AutoSaveHint" xml:space="preserve"><value>设置更改将自动保存,部分设置需要重启软件后生效</value></data>
<data name="Btn_Restart" xml:space="preserve"><value>重启</value></data>
<data name="Btn_Reset" xml:space="preserve"><value>重置</value></data>
<data name="Btn_Exit" xml:space="preserve"><value>退出</value></data>
<data name="Settings_Mode" xml:space="preserve"><value>模式设置</value></data>
<data name="Settings_ModeDesc" xml:space="preserve"><value>选择软件运行模式。仅PPT模式下,软件将完全隐藏,仅在PPT放映时出现。(实验性功能,可能不稳定。)</value></data>
<data name="Mode_Normal" xml:space="preserve"><value>正常模式</value></data>
<data name="Mode_PPTOnly" xml:space="preserve"><value>仅PPT模式</value></data>
<data name="Settings_NewWindow" xml:space="preserve"><value>新设置窗口</value></data>
<data name="Settings_NewWindowDesc" xml:space="preserve"><value>打开新的设置窗口,提供更丰富的设置选项和更好的用户体验。(开发中)</value></data>
<data name="Btn_OpenNewSettings" xml:space="preserve"><value>打开新设置窗口</value></data>
<data name="Settings_Plugins" xml:space="preserve"><value>插件管理</value></data>
<data name="Settings_PluginsDesc" xml:space="preserve"><value>通过插件扩展InkCanvas的功能。您可以启用或禁用插件,或加载自定义插件。</value></data>
<data name="Btn_OpenPluginManager" xml:space="preserve"><value>打开插件管理器</value></data>
<data name="Startup_Start" xml:space="preserve"><value>启动</value></data>
<data name="Startup_NoFocusMode" xml:space="preserve"><value>窗口无焦点模式</value></data>
<data name="Startup_NoBorderMode" xml:space="preserve"><value>窗口无边框模式</value></data>
<data name="Startup_TopMost" xml:space="preserve"><value>窗口置顶</value></data>
<data name="Startup_UIATopMost" xml:space="preserve"><value>UIA置顶</value></data>
<data name="Startup_UIATopMostHint" xml:space="preserve"><value># 开启UIA置顶后,软件需要管理员启动才能置顶…</value></data>
<data name="Header_AutoUpdate" xml:space="preserve"><value>自动检查更新</value></data>
<data name="Header_SilentUpdate" xml:space="preserve"><value>静默更新</value></data>
<data name="SilentUpdate_Hint" xml:space="preserve"><value># 静默更新将在软件不使用时自动安装,无需手动操作</value></data>
<data name="Update_Channel" xml:space="preserve"><value>更新通道</value></data>
<data name="Channel_Release" xml:space="preserve"><value>稳定版 (Release)</value></data>
<data name="Channel_Preview" xml:space="preserve"><value>预览版 (Preview)</value></data>
<data name="Channel_Beta" xml:space="preserve"><value>测试版 (Beta)</value></data>
<data name="Channel_Hint" xml:space="preserve"><value># 稳定版提供可靠更新,预览版提供新功能体验…</value></data>
<data name="Btn_ManualUpdate" xml:space="preserve"><value>手动更新</value></data>
<data name="ManualUpdate_Hint" xml:space="preserve"><value># 点击后立即检查并下载最新版本</value></data>
<data name="Btn_VersionFix" xml:space="preserve"><value>版本修复</value></data>
<data name="VersionFix_Hint" xml:space="preserve"><value># 版本修复会根据当前选择的通道下载最新版本并执行安装…</value></data>
<data name="Btn_Rollback" xml:space="preserve"><value>历史版本回滚</value></data>
<data name="Rollback_Hint" xml:space="preserve"><value># 历史版本回滚,点击后会弹出相应页面…</value></data>
<data name="SilentUpdate_AfterDownloadHint" xml:space="preserve"><value># 关闭静默更新后,已完成安装包的下载后将会弹窗询问…</value></data>
<data name="SilentUpdate_TimeRange" xml:space="preserve"><value>静默更新时间段</value></data>
<data name="Time_Start" xml:space="preserve"><value>起始时间</value></data>
<data name="Time_End" xml:space="preserve"><value>终止时间</value></data>
<data name="TimeRange_Hint" xml:space="preserve"><value># 若终止时间小于起始时间…</value></data>
<data name="Startup_RunAtLogin" xml:space="preserve"><value>开机时运行</value></data>
<data name="Startup_MinimizeToSidebar" xml:space="preserve"><value>开机运行后收纳到侧边栏</value></data>
<data name="Canvas_AndInk" xml:space="preserve"><value>画板和墨迹</value></data>
<data name="Canvas_ShowPenCursor" xml:space="preserve"><value>显示画笔光标</value></data>
<data name="Canvas_PressureTouch" xml:space="preserve"><value>启用压感触屏模式</value></data>
<data name="Canvas_PressureTouchHint" xml:space="preserve"><value># 开启后,触屏设备也将支持压感效果…</value></data>
<data name="Canvas_IgnorePressure" xml:space="preserve"><value>屏蔽压感</value></data>
<data name="Canvas_IgnorePressureHint" xml:space="preserve"><value># 开启后,将忽略所有设备的压感信息…</value></data>
<data name="Canvas_EraserSize" xml:space="preserve"><value>橡皮大小</value></data>
<data name="Size_VerySmall" xml:space="preserve"><value>很小</value></data>
<data name="Size_Small" xml:space="preserve"><value>较小</value></data>
<data name="Size_Medium" xml:space="preserve"><value>中等</value></data>
<data name="Size_Large" xml:space="preserve"><value>较大</value></data>
<data name="Size_VeryLarge" xml:space="preserve"><value>很大</value></data>
<data name="EraserSize_SwitchHint" xml:space="preserve"><value># 非实时切换,下一次使用面积擦时生效。</value></data>
<data name="Canvas_HideInkOnExit" xml:space="preserve"><value>退出画板模式后隐藏墨迹</value></data>
<data name="Canvas_HideInkOnExitHint" xml:space="preserve"><value># 开启 退出画板模式后隐藏墨迹 选项后…</value></data>
<data name="Canvas_ClearInkHistory" xml:space="preserve"><value>清空墨迹时删除墨迹历史记录</value></data>
<data name="Canvas_ClearImageOnClear" xml:space="preserve"><value>清空画布时同时清空图片</value></data>
<data name="Canvas_CompressImage" xml:space="preserve"><value>插入图片时自动压缩(大于1920x1080</value></data>
<data name="Canvas_KeepAsymptote" xml:space="preserve"><value>保留双曲线渐近线</value></data>
<data name="Yes" xml:space="preserve"><value>是</value></data>
<data name="No" xml:space="preserve"><value>否</value></data>
<data name="AskEachTime" xml:space="preserve"><value>每次询问</value></data>
<data name="Canvas_AsymptoteHint" xml:space="preserve"><value># 请注意,若不保留双曲线渐近线可能会有遇到撤回相关的 BUG…</value></data>
<data name="Canvas_ShowCircleCenter" xml:space="preserve"><value>绘制圆时显示圆心位置</value></data>
<data name="Canvas_WPFBezier" xml:space="preserve"><value>使用WPF默认贝塞尔曲线平滑</value></data>
<data name="Canvas_AdvancedSmoothing" xml:space="preserve"><value>使用高级曲线平滑(推荐)</value></data>
<data name="Canvas_InkFade" xml:space="preserve"><value>启用墨迹渐隐功能</value></data>
<data name="Canvas_InkFadeHint" xml:space="preserve"><value># 开启后墨迹不会绘制到画布上…</value></data>
<data name="Canvas_InkFadeTime" xml:space="preserve"><value>墨迹渐隐时间</value></data>
<data name="Canvas_HideFadeInPenMenu" xml:space="preserve"><value>在笔工具菜单中隐藏墨迹渐隐控制</value></data>
<data name="Canvas_HideFadeInPenMenuHint" xml:space="preserve"><value># 开启后,主工具栏上点击笔工具后弹出的上下文菜单中将不显示…</value></data>
<data name="Color" xml:space="preserve"><value>颜色</value></data>
<data name="Color_Default" xml:space="preserve"><value>默认</value></data>
<data name="Color_Black" xml:space="preserve"><value>黑色</value></data>
<data name="Color_White" xml:space="preserve"><value>白色</value></data>
<data name="Color_Red" xml:space="preserve"><value>红色</value></data>
<data name="Color_Yellow" xml:space="preserve"><value>黄色</value></data>
<data name="Color_Blue" xml:space="preserve"><value>蓝色</value></data>
<data name="Color_Green" xml:space="preserve"><value>绿色</value></data>
<data name="Color_Orange" xml:space="preserve"><value>橙色</value></data>
<data name="Color_Purple" xml:space="preserve"><value>紫色</value></data>
<data name="Msg_UpdateReady" xml:space="preserve"><value>更新已下载完成,将在软件关闭时自动安装。</value></data>
<data name="Msg_UpdateReadyTitle" xml:space="preserve"><value>更新已准备就绪</value></data>
<data name="Msg_UpdateDownloadFailed" xml:space="preserve"><value>更新下载失败,请检查网络连接后重试。</value></data>
<data name="Msg_DownloadFailedTitle" xml:space="preserve"><value>下载失败</value></data>
<data name="Msg_SkipVersion" xml:space="preserve"><value>已设置跳过版本 {0},在下次发布新版本之前不会再提示更新。</value></data>
<data name="Msg_SkipVersionTitle" xml:space="preserve"><value>已跳过此版本</value></data>
<data name="Msg_UnexpectedError" xml:space="preserve"><value>抱歉,出现未预期的异常,可能导致 InkCanvasForClass 运行不稳定。\n建议保存墨迹后重启应用。</value></data>
<data name="Msg_RestartLimitTitle" xml:space="preserve"><value>重启次数过多</value></data>
<data name="Msg_RestartLimit" xml:space="preserve"><value>检测到程序已连续重启5次,已停止自动重启。请联系开发者或检查系统环境。</value></data>
<data name="Splash_Starting" xml:space="preserve"><value>正在启动 Ink Canvas...</value></data>
</root>