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. }