LanguageService.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. namespace YZWater.Core.Services;
  3. /// <summary>
  4. /// 语言切换服务
  5. /// </summary>
  6. public partial class LanguageService : ObservableObject
  7. {
  8. private static LanguageService? _instance;
  9. public static LanguageService Instance => _instance ??= new LanguageService();
  10. [ObservableProperty]
  11. private bool _isChinese = true;
  12. /// <summary>
  13. /// 语言变更事件
  14. /// </summary>
  15. public event Action? LanguageChanged;
  16. private LanguageService() { }
  17. /// <summary>
  18. /// 从配置加载语言偏好
  19. /// </summary>
  20. public void LoadFromConfig()
  21. {
  22. var config = ConfigService.GetConfig();
  23. if (config != null)
  24. {
  25. IsChinese = config.IsChinese;
  26. }
  27. }
  28. /// <summary>
  29. /// 切换语言并保存
  30. /// </summary>
  31. public void ToggleLanguage()
  32. {
  33. IsChinese = !IsChinese;
  34. SaveToConfig();
  35. LanguageChanged?.Invoke();
  36. }
  37. private void SaveToConfig()
  38. {
  39. var config = ConfigService.GetConfig();
  40. if (config != null)
  41. {
  42. config.IsChinese = IsChinese;
  43. ConfigService.SaveConfig();
  44. }
  45. }
  46. /// <summary>
  47. /// 获取翻译
  48. /// </summary>
  49. public string Get(string key)
  50. {
  51. return IsChinese ? _zh.GetValueOrDefault(key, key) : _en.GetValueOrDefault(key, key);
  52. }
  53. // ─── 翻译字典 ───
  54. private static readonly Dictionary<string, string> _zh = new()
  55. {
  56. // 通用
  57. ["AppName"] = "污水处理监控系统",
  58. ["Version"] = "版本",
  59. // 导航
  60. ["NavProcess"] = "工艺流程",
  61. ["NavParams"] = "参数设置",
  62. ["NavFlow"] = "流量记录",
  63. ["NavAlarm"] = "报警记录",
  64. ["NavAbout"] = "关于",
  65. // ViewA 标题栏
  66. ["ProcessFlow"] = "工艺流程",
  67. ["PlcConnected"] = "PLC 已连接",
  68. ["PlcDisconnected"] = "PLC 未连接",
  69. ["Connect"] = "连接",
  70. ["Disconnect"] = "断开",
  71. ["Refresh"] = "刷新",
  72. // ViewA 水箱
  73. ["TankInlet"] = "入口池",
  74. ["TankBio"] = "生化池",
  75. ["TankSediment"] = "沉淀池",
  76. ["TankOutlet"] = "出口池",
  77. ["Level"] = "液位",
  78. // ViewA 泵/风机
  79. ["Pump1"] = "进水泵1",
  80. ["Pump2"] = "进水泵2",
  81. ["Pump3"] = "回流泵",
  82. ["Pump4"] = "排泥泵",
  83. ["Pump5"] = "加药泵",
  84. ["Fan1"] = "风机1",
  85. ["Fan2"] = "风机2",
  86. // ViewA 阀门
  87. ["ValveInlet"] = "进水",
  88. ["ValveAeration"] = "曝气",
  89. ["ValveReflux"] = "回流",
  90. ["ValveOutlet"] = "出水",
  91. // ViewA 数据面板
  92. ["Mode"] = "运行模式",
  93. ["Realtime"] = "实时数据",
  94. ["Inflow"] = "进水流量",
  95. ["Outflow"] = "出水流量",
  96. ["Delta"] = "差值",
  97. ["Statistics"] = "运行统计",
  98. ["Runtime"] = "运行时间",
  99. ["Devices"] = "设备",
  100. ["Alarm"] = "报警",
  101. ["Efficiency"] = "效率",
  102. ["Active"] = "运行中",
  103. ["Stopped"] = "已停止",
  104. // ViewA 快捷操作
  105. ["QuickOps"] = "快捷操作",
  106. ["StartAll"] = "全部启动",
  107. ["StopAll"] = "全部停止",
  108. ["AckAlarm"] = "报警确认",
  109. ["Export"] = "导出",
  110. // ViewA 底部状态栏
  111. ["FlowMeters"] = "流量监测",
  112. ["DeviceStatus"] = "设备状态",
  113. // ViewB
  114. ["Parameters"] = "参数设置",
  115. ["SysConfig"] = "系统参数配置",
  116. ["PlcConnection"] = "PLC 连接设置",
  117. ["IpAddress"] = "IP 地址",
  118. ["Port"] = "端口",
  119. ["AutoConnect"] = "自动连接",
  120. ["Status"] = "状态",
  121. ["Test"] = "测试",
  122. ["AlarmThresholds"] = "报警阈值设置",
  123. ["LevelHigh"] = "液位高限",
  124. ["LevelLow"] = "液位低限",
  125. ["FlowHigh"] = "流量高限",
  126. ["PumpSettings"] = "泵设置",
  127. ["Frequency"] = "频率",
  128. ["SaveConfig"] = "保存配置",
  129. ["ResetDefault"] = "恢复默认",
  130. ["Connected"] = "已连接",
  131. ["Disconnected"] = "未连接",
  132. ["Connecting"] = "连接中...",
  133. // ViewC
  134. ["FlowRecords"] = "流量记录",
  135. ["FlowHistory"] = "流量历史数据",
  136. ["From"] = "从",
  137. ["To"] = "到",
  138. ["Query"] = "查询",
  139. ["ExportCsv"] = "导出CSV",
  140. ["PurgeOld"] = "清除旧数据",
  141. ["InflowTrend"] = "进水流量趋势",
  142. ["OutflowTrend"] = "出水流量趋势",
  143. // ViewD
  144. ["AlarmLog"] = "报警记录",
  145. ["AlarmHistory"] = "报警历史记录",
  146. ["Unconfirmed"] = "未确认",
  147. ["AckAll"] = "全部确认",
  148. ["Purge"] = "清除",
  149. ["Time"] = "时间",
  150. ["Type"] = "类型",
  151. ["Message"] = "消息",
  152. ["Value"] = "数值",
  153. ["Level2"] = "级别",
  154. ["AckTime"] = "确认时间",
  155. ["AckBy"] = "确认人",
  156. ["AlarmDetail"] = "报警详情",
  157. // ViewE
  158. ["About"] = "关于",
  159. ["SystemInfo"] = "系统信息",
  160. ["Description"] = "基于 Avalonia UI 的跨平台污水处理厂监控系统",
  161. ["TechStack"] = "技术栈",
  162. ["Company"] = "公司信息",
  163. ["CompanyName"] = "公司名称",
  164. ["Contact"] = "联系人",
  165. ["Phone"] = "联系电话",
  166. ["VisitWebsite"] = "访问官网",
  167. ["CheckUpdate"] = "检查更新",
  168. ["Copyright"] = "© 扬州旭轩科技有限公司",
  169. // 控件默认值
  170. ["DefaultTank"] = "水箱",
  171. ["DefaultPump"] = "泵",
  172. ["DefaultFan"] = "风扇",
  173. ["DefaultValve"] = "阀门",
  174. ["DefaultGauge"] = "仪表",
  175. ["DefaultDevice"] = "设备",
  176. };
  177. private static readonly Dictionary<string, string> _en = new()
  178. {
  179. ["AppName"] = "Wastewater Treatment System",
  180. ["Version"] = "Version",
  181. ["NavProcess"] = "Process",
  182. ["NavParams"] = "Params",
  183. ["NavFlow"] = "Flow",
  184. ["NavAlarm"] = "Alarm",
  185. ["NavAbout"] = "About",
  186. ["ProcessFlow"] = "PROCESS FLOW",
  187. ["PlcConnected"] = "PLC CONNECTED",
  188. ["PlcDisconnected"] = "PLC DISCONNECTED",
  189. ["Connect"] = "CONNECT",
  190. ["Disconnect"] = "DISCONNECT",
  191. ["Refresh"] = "REFRESH",
  192. ["TankInlet"] = "Inlet",
  193. ["TankBio"] = "Bio Tank",
  194. ["TankSediment"] = "Sediment",
  195. ["TankOutlet"] = "Outlet",
  196. ["Level"] = "Level",
  197. ["Pump1"] = "Inlet Pump 1",
  198. ["Pump2"] = "Inlet Pump 2",
  199. ["Pump3"] = "Reflux Pump",
  200. ["Pump4"] = "Sludge Pump",
  201. ["Pump5"] = "Dosing Pump",
  202. ["Fan1"] = "Fan 1",
  203. ["Fan2"] = "Fan 2",
  204. ["ValveInlet"] = "Inlet",
  205. ["ValveAeration"] = "Aeration",
  206. ["ValveReflux"] = "Reflux",
  207. ["ValveOutlet"] = "Outlet",
  208. ["Mode"] = "MODE",
  209. ["Realtime"] = "REALTIME",
  210. ["Inflow"] = "INFLOW",
  211. ["Outflow"] = "OUTFLOW",
  212. ["Delta"] = "DELTA",
  213. ["Statistics"] = "STATISTICS",
  214. ["Runtime"] = "RUNTIME",
  215. ["Devices"] = "DEVICES",
  216. ["Alarm"] = "ALARM",
  217. ["Efficiency"] = "EFFICIENCY",
  218. ["Active"] = "ACTIVE",
  219. ["Stopped"] = "STOPPED",
  220. ["QuickOps"] = "QUICK OPS",
  221. ["StartAll"] = "START ALL",
  222. ["StopAll"] = "STOP ALL",
  223. ["AckAlarm"] = "ACK ALARM",
  224. ["Export"] = "EXPORT",
  225. ["FlowMeters"] = "FLOW METERS",
  226. ["DeviceStatus"] = "DEVICE STATUS",
  227. ["Parameters"] = "PARAMETERS",
  228. ["SysConfig"] = "System Configuration",
  229. ["PlcConnection"] = "PLC CONNECTION",
  230. ["IpAddress"] = "IP ADDRESS",
  231. ["Port"] = "PORT",
  232. ["AutoConnect"] = "AUTO CONNECT",
  233. ["Status"] = "STATUS",
  234. ["Test"] = "TEST",
  235. ["AlarmThresholds"] = "ALARM THRESHOLDS",
  236. ["LevelHigh"] = "LEVEL HIGH",
  237. ["LevelLow"] = "LEVEL LOW",
  238. ["FlowHigh"] = "FLOW HIGH",
  239. ["PumpSettings"] = "PUMP SETTINGS",
  240. ["Frequency"] = "FREQUENCY",
  241. ["SaveConfig"] = "SAVE CONFIG",
  242. ["ResetDefault"] = "RESET DEFAULT",
  243. ["Connected"] = "Connected",
  244. ["Disconnected"] = "Disconnected",
  245. ["Connecting"] = "Connecting...",
  246. ["FlowRecords"] = "FLOW RECORDS",
  247. ["FlowHistory"] = "Flow History Data",
  248. ["From"] = "FROM",
  249. ["To"] = "TO",
  250. ["Query"] = "QUERY",
  251. ["ExportCsv"] = "EXPORT CSV",
  252. ["PurgeOld"] = "PURGE OLD",
  253. ["InflowTrend"] = "INFLOW TREND",
  254. ["OutflowTrend"] = "OUTFLOW TREND",
  255. ["AlarmLog"] = "ALARM LOG",
  256. ["AlarmHistory"] = "Alarm History",
  257. ["Unconfirmed"] = "Unconfirmed",
  258. ["AckAll"] = "ACK ALL",
  259. ["Purge"] = "PURGE",
  260. ["Time"] = "TIME",
  261. ["Type"] = "TYPE",
  262. ["Message"] = "MESSAGE",
  263. ["Value"] = "VALUE",
  264. ["Level2"] = "LEVEL",
  265. ["AckTime"] = "ACK TIME",
  266. ["AckBy"] = "ACK BY",
  267. ["AlarmDetail"] = "ALARM DETAIL",
  268. ["About"] = "ABOUT",
  269. ["SystemInfo"] = "SYSTEM INFO",
  270. ["Description"] = "Cross-platform wastewater treatment plant monitoring system based on Avalonia UI",
  271. ["TechStack"] = "TECH STACK",
  272. ["Company"] = "COMPANY",
  273. ["CompanyName"] = "COMPANY NAME",
  274. ["Contact"] = "CONTACT",
  275. ["Phone"] = "PHONE",
  276. ["VisitWebsite"] = "VISIT WEBSITE",
  277. ["CheckUpdate"] = "CHECK UPDATE",
  278. ["Copyright"] = "© Yangzhou Xuxuan Technology Co., Ltd.",
  279. ["DefaultTank"] = "Tank",
  280. ["DefaultPump"] = "Pump",
  281. ["DefaultFan"] = "Fan",
  282. ["DefaultValve"] = "Valve",
  283. ["DefaultGauge"] = "Gauge",
  284. ["DefaultDevice"] = "Device",
  285. };
  286. }