多语支持

This commit is contained in:
2026-03-22 12:33:04 +08:00
parent 5d6053ae2c
commit 1de688b792
20 changed files with 892 additions and 72 deletions

View File

@@ -0,0 +1,63 @@
using System.Resources;
namespace ChromeboxFanControl.Properties;
internal static class Resources
{
private static readonly ResourceManager _rm = new(
"ChromeboxFanControl.Properties.Resources",
typeof(Resources).Assembly);
public static string AppTitle => _rm.GetString("AppTitle") ?? "Chromebox Fan Control";
public static string TabMonitor => _rm.GetString("TabMonitor") ?? "Monitoring";
public static string TabCurve => _rm.GetString("TabCurve") ?? "Curve";
public static string TabAdvanced => _rm.GetString("TabAdvanced") ?? "Advanced";
public static string StatusStarting => _rm.GetString("StatusStarting") ?? "Starting…";
public static string StatusRunning => _rm.GetString("StatusRunning") ?? "Running";
public static string StatusPaused => _rm.GetString("StatusPaused") ?? "Paused";
public static string StatusFailSafe => _rm.GetString("StatusFailSafe") ?? "Fail-safe mode";
public static string GridColTemp => _rm.GetString("GridColTemp") ?? "Temp (°C)";
public static string GridColDuty => _rm.GetString("GridColDuty") ?? "Duty 0100";
public static string BtnSaveApply => _rm.GetString("BtnSaveApply") ?? "Save & Apply";
public static string BtnRestoreDefault => _rm.GetString("BtnRestoreDefault") ?? "Restore Default";
public static string LblEctoolPath => _rm.GetString("LblEctoolPath") ?? "ectool path";
public static string LblPollInterval => _rm.GetString("LblPollInterval") ?? "Poll interval (ms)";
public static string LblRpmEvery => _rm.GetString("LblRpmEvery") ?? "Read RPM every N";
public static string LblFanRpmArgs => _rm.GetString("LblFanRpmArgs") ?? "RPM args";
public static string LblFanDutyArgs => _rm.GetString("LblFanDutyArgs") ?? "Duty args";
public static string LblAutoFanArgs => _rm.GetString("LblAutoFanArgs") ?? "Auto fan args";
public static string LblTempSource => _rm.GetString("LblTempSource") ?? "Temp source";
public static string LblFailCount => _rm.GetString("LblFailCount") ?? "Fail count";
public static string LblFailPct => _rm.GetString("LblFailPct") ?? "Fail-safe %";
public static string ChkFailAuto => _rm.GetString("ChkFailAuto") ?? "Use autofanctrl";
public static string LblFailStrategy => _rm.GetString("LblFailStrategy") ?? "Fail-safe strategy";
public static string LblChartMin => _rm.GetString("LblChartMin") ?? "Chart minutes";
public static string LblChartPoints => _rm.GetString("LblChartPoints") ?? "Chart points";
public static string BtnSaveAdvanced => _rm.GetString("BtnSaveAdvanced") ?? "Save Advanced";
public static string TrayOpen => _rm.GetString("TrayOpen") ?? "Show window";
public static string TrayPause => _rm.GetString("TrayPause") ?? "Pause";
public static string TrayResume => _rm.GetString("TrayResume") ?? "Resume";
public static string TrayAbout => _rm.GetString("TrayAbout") ?? "About";
public static string TrayExit => _rm.GetString("TrayExit") ?? "Exit";
public static string AboutMessage => _rm.GetString("AboutMessage") ?? "";
public static string ErrRpmArgsEmpty => _rm.GetString("ErrRpmArgsEmpty") ?? "RPM args required.";
public static string ErrAutoFanArgsEmpty => _rm.GetString("ErrAutoFanArgsEmpty") ?? "Auto fan args required.";
public static string MsgSaved => _rm.GetString("MsgSaved") ?? "Saved.";
public static string LabelTemp => _rm.GetString("LabelTemp") ?? "Temp:";
public static string LabelTargetDuty => _rm.GetString("LabelTargetDuty") ?? "Target duty:";
public static string LabelRpm => _rm.GetString("LabelRpm") ?? "RPM:";
public static string ChartTemp => _rm.GetString("ChartTemp") ?? "Temperature (°C)";
public static string ChartTime => _rm.GetString("ChartTime") ?? "Time (s)";
public static string ChartDuty => _rm.GetString("ChartDuty") ?? "Duty (%)";
public static string ChartRpm => _rm.GetString("ChartRpm") ?? "RPM";
public static string LegendCelsius => _rm.GetString("LegendCelsius") ?? "°C";
public static string LegendDuty => _rm.GetString("LegendDuty") ?? "Duty %";
public static string CurveChartDuty => _rm.GetString("CurveChartDuty") ?? "Duty (%)";
public static string CurveChartTemp => _rm.GetString("CurveChartTemp") ?? "Temp (°C)";
public static string LblLanguage => _rm.GetString("LblLanguage") ?? "Language";
public static string LangAuto => _rm.GetString("LangAuto") ?? "Auto";
public static string LangEn => _rm.GetString("LangEn") ?? "English";
public static string LangZhHans => _rm.GetString("LangZhHans") ?? "Simplified Chinese";
public static string LangZhHant => _rm.GetString("LangZhHant") ?? "Traditional Chinese";
public static string MsgRestartToApplyLanguage => _rm.GetString("MsgRestartToApplyLanguage") ?? "Restart to apply.";
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AppTitle" xml:space="preserve"><value>Chromebox Fan Control</value></data>
<data name="TabMonitor" xml:space="preserve"><value>Monitoring</value></data>
<data name="TabCurve" xml:space="preserve"><value>Curve</value></data>
<data name="TabAdvanced" xml:space="preserve"><value>Advanced</value></data>
<data name="StatusStarting" xml:space="preserve"><value>Starting…</value></data>
<data name="StatusRunning" xml:space="preserve"><value>Running</value></data>
<data name="StatusPaused" xml:space="preserve"><value>Paused</value></data>
<data name="StatusFailSafe" xml:space="preserve"><value>Fail-safe mode</value></data>
<data name="GridColTemp" xml:space="preserve"><value>Temp (°C)</value></data>
<data name="GridColDuty" xml:space="preserve"><value>Duty 0100</value></data>
<data name="BtnSaveApply" xml:space="preserve"><value>Save &amp; Apply</value></data>
<data name="BtnRestoreDefault" xml:space="preserve"><value>Restore Default Curve</value></data>
<data name="LblEctoolPath" xml:space="preserve"><value>ectool path</value></data>
<data name="LblPollInterval" xml:space="preserve"><value>Poll interval (ms)</value></data>
<data name="LblRpmEvery" xml:space="preserve"><value>Read RPM every N cycles</value></data>
<data name="LblFanRpmArgs" xml:space="preserve"><value>RPM args (space-separated)</value></data>
<data name="LblFanDutyArgs" xml:space="preserve"><value>Duty args (empty=skip)</value></data>
<data name="LblAutoFanArgs" xml:space="preserve"><value>Restore auto fan args</value></data>
<data name="LblTempSource" xml:space="preserve"><value>Temp source</value></data>
<data name="LblFailCount" xml:space="preserve"><value>Consecutive errors before fail-safe</value></data>
<data name="LblFailPct" xml:space="preserve"><value>Fail-safe fixed duty (%)</value></data>
<data name="ChkFailAuto" xml:space="preserve"><value>Use autofanctrl in fail-safe (not fixed duty)</value></data>
<data name="LblFailStrategy" xml:space="preserve"><value>Fail-safe strategy</value></data>
<data name="LblChartMin" xml:space="preserve"><value>Chart history (minutes)</value></data>
<data name="LblChartPoints" xml:space="preserve"><value>Chart max points</value></data>
<data name="BtnSaveAdvanced" xml:space="preserve"><value>Save Advanced Settings</value></data>
<data name="TrayOpen" xml:space="preserve"><value>Show window</value></data>
<data name="TrayPause" xml:space="preserve"><value>Pause control</value></data>
<data name="TrayResume" xml:space="preserve"><value>Resume control</value></data>
<data name="TrayAbout" xml:space="preserve"><value>About</value></data>
<data name="TrayExit" xml:space="preserve"><value>Exit</value></data>
<data name="AboutMessage" xml:space="preserve"><value>Chromebox Fan Control
Uses LibreHardwareMonitor to read CPU temperature, controls fan via crosec ectool.
Run as Administrator.</value></data>
<data name="ErrRpmArgsEmpty" xml:space="preserve"><value>RPM args cannot be empty.</value></data>
<data name="ErrAutoFanArgsEmpty" xml:space="preserve"><value>Restore auto fan args cannot be empty.</value></data>
<data name="MsgSaved" xml:space="preserve"><value>Saved.</value></data>
<data name="LabelTemp" xml:space="preserve"><value>Temp:</value></data>
<data name="LabelTargetDuty" xml:space="preserve"><value>Target duty:</value></data>
<data name="LabelRpm" xml:space="preserve"><value>RPM:</value></data>
<data name="ChartTemp" xml:space="preserve"><value>Temperature (°C)</value></data>
<data name="ChartTime" xml:space="preserve"><value>Time (s)</value></data>
<data name="ChartDuty" xml:space="preserve"><value>Duty (%)</value></data>
<data name="ChartRpm" xml:space="preserve"><value>RPM</value></data>
<data name="LegendCelsius" xml:space="preserve"><value>°C</value></data>
<data name="LegendDuty" xml:space="preserve"><value>Duty %</value></data>
<data name="CurveChartDuty" xml:space="preserve"><value>Duty (%)</value></data>
<data name="CurveChartTemp" xml:space="preserve"><value>Temp (°C)</value></data>
<data name="LblLanguage" xml:space="preserve"><value>Language</value></data>
<data name="LangAuto" xml:space="preserve"><value>Auto (follow system)</value></data>
<data name="LangEn" xml:space="preserve"><value>English</value></data>
<data name="LangZhHans" xml:space="preserve"><value>Simplified Chinese</value></data>
<data name="LangZhHant" xml:space="preserve"><value>Traditional Chinese</value></data>
<data name="MsgRestartToApplyLanguage" xml:space="preserve"><value>Language changed. Restart the application to apply.</value></data>
</root>

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AppTitle" xml:space="preserve"><value>Chromebox 风扇温控</value></data>
<data name="TabMonitor" xml:space="preserve"><value>监控</value></data>
<data name="TabCurve" xml:space="preserve"><value>曲线</value></data>
<data name="TabAdvanced" xml:space="preserve"><value>高级</value></data>
<data name="StatusStarting" xml:space="preserve"><value>启动中…</value></data>
<data name="StatusRunning" xml:space="preserve"><value>运行中</value></data>
<data name="StatusPaused" xml:space="preserve"><value>已暂停</value></data>
<data name="StatusFailSafe" xml:space="preserve"><value>安全模式</value></data>
<data name="GridColTemp" xml:space="preserve"><value>温度 (°C)</value></data>
<data name="GridColDuty" xml:space="preserve"><value>占空比 0100</value></data>
<data name="BtnSaveApply" xml:space="preserve"><value>保存并应用</value></data>
<data name="BtnRestoreDefault" xml:space="preserve"><value>恢复默认曲线</value></data>
<data name="LblEctoolPath" xml:space="preserve"><value>ectool 路径</value></data>
<data name="LblPollInterval" xml:space="preserve"><value>轮询间隔 (ms)</value></data>
<data name="LblRpmEvery" xml:space="preserve"><value>每 N 轮读 RPM</value></data>
<data name="LblFanRpmArgs" xml:space="preserve"><value>读转速参数 (空格分隔)</value></data>
<data name="LblFanDutyArgs" xml:space="preserve"><value>读占空比参数 (空=跳过)</value></data>
<data name="LblAutoFanArgs" xml:space="preserve"><value>恢复自动风扇参数</value></data>
<data name="LblTempSource" xml:space="preserve"><value>温度来源</value></data>
<data name="LblFailCount" xml:space="preserve"><value>连续失败进入安全模式 (次)</value></data>
<data name="LblFailPct" xml:space="preserve"><value>安全模式固定占空比 (%)</value></data>
<data name="ChkFailAuto" xml:space="preserve"><value>安全模式使用 autofanctrl不用固定占空比</value></data>
<data name="LblFailStrategy" xml:space="preserve"><value>安全模式策略</value></data>
<data name="LblChartMin" xml:space="preserve"><value>图表保留时长 (分钟)</value></data>
<data name="LblChartPoints" xml:space="preserve"><value>图表最大点数</value></data>
<data name="BtnSaveAdvanced" xml:space="preserve"><value>保存高级设置</value></data>
<data name="TrayOpen" xml:space="preserve"><value>打开主窗口</value></data>
<data name="TrayPause" xml:space="preserve"><value>暂停控制</value></data>
<data name="TrayResume" xml:space="preserve"><value>恢复控制</value></data>
<data name="TrayAbout" xml:space="preserve"><value>关于</value></data>
<data name="TrayExit" xml:space="preserve"><value>退出</value></data>
<data name="AboutMessage" xml:space="preserve"><value>Chromebox 风扇温控
使用 LibreHardwareMonitor 读取 CPU 温度,通过 crosec ectool 控制风扇。
请以管理员身份运行。</value></data>
<data name="ErrRpmArgsEmpty" xml:space="preserve"><value>读转速参数不能为空。</value></data>
<data name="ErrAutoFanArgsEmpty" xml:space="preserve"><value>恢复自动风扇参数不能为空。</value></data>
<data name="MsgSaved" xml:space="preserve"><value>已保存。</value></data>
<data name="LabelTemp" xml:space="preserve"><value>温度:</value></data>
<data name="LabelTargetDuty" xml:space="preserve"><value>目标占空比:</value></data>
<data name="LabelRpm" xml:space="preserve"><value>转速:</value></data>
<data name="ChartTemp" xml:space="preserve"><value>温度 (°C)</value></data>
<data name="ChartTime" xml:space="preserve"><value>时间 (s)</value></data>
<data name="ChartDuty" xml:space="preserve"><value>占空比 (%)</value></data>
<data name="ChartRpm" xml:space="preserve"><value>转速</value></data>
<data name="LegendCelsius" xml:space="preserve"><value>°C</value></data>
<data name="LegendDuty" xml:space="preserve"><value>占空比 %</value></data>
<data name="CurveChartDuty" xml:space="preserve"><value>占空比 (%)</value></data>
<data name="CurveChartTemp" xml:space="preserve"><value>温度 (°C)</value></data>
<data name="LblLanguage" xml:space="preserve"><value>语言</value></data>
<data name="LangAuto" xml:space="preserve"><value>跟随系统</value></data>
<data name="LangEn" xml:space="preserve"><value>English</value></data>
<data name="LangZhHans" xml:space="preserve"><value>简体中文</value></data>
<data name="LangZhHant" xml:space="preserve"><value>繁体中文</value></data>
<data name="MsgRestartToApplyLanguage" xml:space="preserve"><value>语言已更改,请重启应用以生效。</value></data>
</root>

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AppTitle" xml:space="preserve"><value>Chromebox 風扇溫控</value></data>
<data name="TabMonitor" xml:space="preserve"><value>監控</value></data>
<data name="TabCurve" xml:space="preserve"><value>曲線</value></data>
<data name="TabAdvanced" xml:space="preserve"><value>進階</value></data>
<data name="StatusStarting" xml:space="preserve"><value>啟動中…</value></data>
<data name="StatusRunning" xml:space="preserve"><value>運行中</value></data>
<data name="StatusPaused" xml:space="preserve"><value>已暫停</value></data>
<data name="StatusFailSafe" xml:space="preserve"><value>安全模式</value></data>
<data name="GridColTemp" xml:space="preserve"><value>溫度 (°C)</value></data>
<data name="GridColDuty" xml:space="preserve"><value>占空比 0100</value></data>
<data name="BtnSaveApply" xml:space="preserve"><value>儲存並套用</value></data>
<data name="BtnRestoreDefault" xml:space="preserve"><value>恢復預設曲線</value></data>
<data name="LblEctoolPath" xml:space="preserve"><value>ectool 路徑</value></data>
<data name="LblPollInterval" xml:space="preserve"><value>輪詢間隔 (ms)</value></data>
<data name="LblRpmEvery" xml:space="preserve"><value>每 N 輪讀 RPM</value></data>
<data name="LblFanRpmArgs" xml:space="preserve"><value>讀轉速參數 (空格分隔)</value></data>
<data name="LblFanDutyArgs" xml:space="preserve"><value>讀占空比參數 (空=略過)</value></data>
<data name="LblAutoFanArgs" xml:space="preserve"><value>恢復自動風扇參數</value></data>
<data name="LblTempSource" xml:space="preserve"><value>溫度來源</value></data>
<data name="LblFailCount" xml:space="preserve"><value>連續失敗進入安全模式 (次)</value></data>
<data name="LblFailPct" xml:space="preserve"><value>安全模式固定占空比 (%)</value></data>
<data name="ChkFailAuto" xml:space="preserve"><value>安全模式使用 autofanctrl不用固定占空比</value></data>
<data name="LblFailStrategy" xml:space="preserve"><value>安全模式策略</value></data>
<data name="LblChartMin" xml:space="preserve"><value>圖表保留時長 (分鐘)</value></data>
<data name="LblChartPoints" xml:space="preserve"><value>圖表最大點數</value></data>
<data name="BtnSaveAdvanced" xml:space="preserve"><value>儲存進階設定</value></data>
<data name="TrayOpen" xml:space="preserve"><value>開啟主視窗</value></data>
<data name="TrayPause" xml:space="preserve"><value>暫停控制</value></data>
<data name="TrayResume" xml:space="preserve"><value>恢復控制</value></data>
<data name="TrayAbout" xml:space="preserve"><value>關於</value></data>
<data name="TrayExit" xml:space="preserve"><value>結束</value></data>
<data name="AboutMessage" xml:space="preserve"><value>Chromebox 風扇溫控
使用 LibreHardwareMonitor 讀取 CPU 溫度,透過 crosec ectool 控制風扇。
請以系統管理員身分執行。</value></data>
<data name="ErrRpmArgsEmpty" xml:space="preserve"><value>讀轉速參數不能為空。</value></data>
<data name="ErrAutoFanArgsEmpty" xml:space="preserve"><value>恢復自動風扇參數不能為空。</value></data>
<data name="MsgSaved" xml:space="preserve"><value>已儲存。</value></data>
<data name="LabelTemp" xml:space="preserve"><value>溫度:</value></data>
<data name="LabelTargetDuty" xml:space="preserve"><value>目標占空比:</value></data>
<data name="LabelRpm" xml:space="preserve"><value>轉速:</value></data>
<data name="ChartTemp" xml:space="preserve"><value>溫度 (°C)</value></data>
<data name="ChartTime" xml:space="preserve"><value>時間 (s)</value></data>
<data name="ChartDuty" xml:space="preserve"><value>占空比 (%)</value></data>
<data name="ChartRpm" xml:space="preserve"><value>轉速</value></data>
<data name="LegendCelsius" xml:space="preserve"><value>°C</value></data>
<data name="LegendDuty" xml:space="preserve"><value>占空比 %</value></data>
<data name="CurveChartDuty" xml:space="preserve"><value>占空比 (%)</value></data>
<data name="CurveChartTemp" xml:space="preserve"><value>溫度 (°C)</value></data>
<data name="LblLanguage" xml:space="preserve"><value>語言</value></data>
<data name="LangAuto" xml:space="preserve"><value>跟隨系統</value></data>
<data name="LangEn" xml:space="preserve"><value>English</value></data>
<data name="LangZhHans" xml:space="preserve"><value>簡體中文</value></data>
<data name="LangZhHant" xml:space="preserve"><value>繁體中文</value></data>
<data name="MsgRestartToApplyLanguage" xml:space="preserve"><value>語言已變更,請重新啟動應用程式以生效。</value></data>
</root>