1.参考资料

C# 类库json转换为资源文件
遍历控件
Excel Json在线转换工具

2.最终实现代码

1)InterpretBase类实现:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows.Forms; //控件遍历所需
  7. using System.Text.RegularExpressions; //String处理
  8. using Newtonsoft.Json;
  9. using System.IO;
  10. namespace ClassLibrary_MultiLanguage
  11. {
  12. public class InterpretBase
  13. {
  14. //定义字典用于储存Json配置文件资源
  15. public static Dictionary<string, string> resources = new Dictionary<string, string>();
  16. /// <summary>
  17. /// 当前项目文件夹Debug\Language\参数文件夹
  18. /// </summary>
  19. /// <param name="language">配置文件所在文件夹名</param>
  20. public static void LoadLanguage(string language = "")
  21. {
  22. if (string.IsNullOrEmpty(language))
  23. {
  24. language = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
  25. }
  26. resources = new Dictionary<string, string>();
  27. //string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("Language"));
  28. string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("Language"));
  29. if (Directory.Exists(dir))
  30. {
  31. var jaonFile = Directory.GetFiles(dir, language + ".json", SearchOption.AllDirectories);
  32. foreach (string file in jaonFile)
  33. {
  34. LoadFile(file);
  35. }
  36. }
  37. }
  38. public static string textTran(string str)
  39. {
  40. return str = (resources.ContainsKey(str)) ? resources[str] : str;
  41. }
  42. /// <summary>
  43. /// 配置文件加载
  44. /// </summary>
  45. /// <param name="path">配置文件绝对路径(包括文件本身)</param>
  46. public static void LoadFile(string path)
  47. {
  48. var content = File.ReadAllText(path, Encoding.UTF8);
  49. if (!string.IsNullOrEmpty(content))
  50. {
  51. var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
  52. foreach (string key in dict.Keys)
  53. {
  54. if (!resources.ContainsKey(key))
  55. {
  56. resources.Add(key, dict[key]);
  57. }
  58. else
  59. resources[key] = dict[key];
  60. }
  61. }
  62. }
  63. /// <summary>
  64. /// 遍历翻译 窗体或控件及其子控件
  65. /// </summary>
  66. /// <param name="control">需要翻译的控件或窗体</param>
  67. public static void InitLanguage(Control control)
  68. {
  69. SetControlLanguage(control);
  70. foreach (Control ctrl in control.Controls)
  71. {
  72. InitLanguage(ctrl);
  73. }
  74. //工具栏或者菜单动态构建窗体或者控件的时候,重新对子控件进行处理
  75. control.ControlAdded += (sender, e) =>
  76. {
  77. InitLanguage(e.Control);
  78. };
  79. }
  80. /// <summary>
  81. /// 控件及子控件翻译
  82. /// </summary>
  83. /// <param name="control">需要翻译的控件</param>
  84. public static void SetControlLanguage(Control control)
  85. {
  86. if (control is ComboBox)
  87. {
  88. ComboBox combox = control as ComboBox;
  89. string[] NewItems = new string[combox.Items.Count];
  90. for (int i = 0; i < combox.Items.Count; i++)
  91. {
  92. if (resources.ContainsKey(combox.Items[i].ToString()))
  93. {
  94. combox.Items[i] = resources[combox.Items[i].ToString()];
  95. }
  96. else
  97. NewItems[i] = combox.Items[i].ToString();
  98. }
  99. combox.Text = (resources.ContainsKey(combox.Text)) ? resources[combox.Text] : combox.Text;
  100. //combox.Items.Clear();
  101. //combox.Items.AddRange(NewItems);
  102. }
  103. //control is 其他控件或者特殊控件 如:TreeView
  104. else if (control is TreeView)
  105. {
  106. TreeView treeView = (TreeView)control;
  107. foreach (TreeNode node in treeView.Nodes)
  108. {
  109. try
  110. {
  111. node.Text = (resources.ContainsKey(node.Text)) ? resources[node.Text] : node.Text;
  112. }
  113. catch (Exception)
  114. {
  115. }
  116. finally
  117. {
  118. if (node.Nodes.Count > 0)
  119. {
  120. GetNodeText(node);
  121. }
  122. }
  123. }
  124. }
  125. else if (control is MenuStrip)
  126. {
  127. MenuStrip menuStrip = (MenuStrip)control;
  128. foreach (ToolStripMenuItem toolItem in menuStrip.Items)
  129. {
  130. try
  131. {
  132. toolItem.Text = (resources.ContainsKey(toolItem.Text)) ? resources[toolItem.Text] : toolItem.Text;
  133. }
  134. catch (Exception)
  135. {
  136. }
  137. finally
  138. {
  139. if (toolItem.DropDownItems.Count > 0)
  140. {
  141. GetItemText(toolItem);
  142. }
  143. }
  144. }
  145. }
  146. else if (control is TabControl)
  147. {
  148. TabControl tabCtrl = (TabControl)control;
  149. try
  150. {
  151. foreach (TabPage tabPage in tabCtrl.TabPages)
  152. {
  153. tabPage.Text = (resources.ContainsKey(tabPage.Text)) ? resources[tabPage.Text] : tabPage.Text;
  154. }
  155. }
  156. catch (Exception)
  157. {
  158. }
  159. }
  160. else if (control is ToolStrip)
  161. {
  162. ToolStrip statusStrip = (ToolStrip)control;
  163. foreach (ToolStripItem toolItem in statusStrip.Items)
  164. {
  165. try
  166. {
  167. toolItem.Text = (resources.ContainsKey(toolItem.Text)) ? resources[toolItem.Text] : toolItem.Text;
  168. }
  169. catch (Exception)
  170. {
  171. }
  172. }
  173. }
  174. else if (control is CheckedListBox)
  175. {
  176. CheckedListBox chkListBox = (CheckedListBox)control;
  177. try
  178. {
  179. for (int n = 0; n < chkListBox.Items.Count; n++)
  180. {
  181. chkListBox.Items[n] = (resources.ContainsKey(chkListBox.Items[n].ToString())) ? resources[chkListBox.Items[n].ToString()] : chkListBox.Items[n].ToString();
  182. }
  183. }
  184. catch (Exception)
  185. { }
  186. }
  187. else if (control is Label)
  188. {
  189. Label label = control as Label;
  190. try
  191. {
  192. label.Text = (resources.ContainsKey(label.Text)) ? resources[label.Text] : label.Text;
  193. }
  194. catch (Exception)
  195. {
  196. }
  197. }
  198. else if (control is Button)
  199. {
  200. Button button = control as Button;
  201. try
  202. {
  203. button.Text = (resources.ContainsKey(button.Text)) ? resources[button.Text] : button.Text;
  204. }
  205. catch (Exception)
  206. {
  207. }
  208. }
  209. else if (control is RadioButton)
  210. {
  211. RadioButton radioButton = (RadioButton)control;
  212. try
  213. {
  214. radioButton.Text = (resources.ContainsKey(radioButton.Text)) ? resources[radioButton.Text] : radioButton.Text;
  215. }
  216. catch (Exception)
  217. {
  218. }
  219. }
  220. else if (control is DataGridView)
  221. {
  222. try
  223. {
  224. DataGridView dataGridView = (DataGridView)control;
  225. foreach (DataGridViewColumn dgvc in dataGridView.Columns)
  226. {
  227. try
  228. {
  229. if (dgvc.HeaderText.ToString() != "" && dgvc.Visible)
  230. {
  231. dgvc.HeaderText = (resources.ContainsKey(dgvc.HeaderText)) ? resources[dgvc.HeaderText] : dgvc.HeaderText;
  232. }
  233. }
  234. catch
  235. {
  236. }
  237. }
  238. }
  239. catch (Exception)
  240. { }
  241. }
  242. else
  243. {
  244. control.Text = (resources.ContainsKey(control.Text)) ? resources[control.Text] : control.Text;
  245. }
  246. /* if (control.HasChildren)
  247. {
  248. foreach (System.Windows.Forms.Control c in control.Controls)
  249. {
  250. SetControlLanguage(c);
  251. }
  252. }
  253. else
  254. {
  255. SetControlLanguage(control);
  256. }*/
  257. }
  258. #region 简繁体转换
  259. /// <summary>
  260. /// 内容的语言转化
  261. /// </summary>
  262. /// <param name="parent"></param>
  263. public static void SetControlLanguageText(System.Windows.Forms.Control parent)
  264. {
  265. if (parent.HasChildren)
  266. {
  267. foreach (System.Windows.Forms.Control ctrl in parent.Controls)
  268. {
  269. SetControlLanguage(ctrl);
  270. }
  271. }
  272. else
  273. {
  274. SetControlLanguage(parent);
  275. }
  276. }
  277. #endregion
  278. /// <summary>
  279. /// 局部匹配翻译,不存在则不翻译
  280. /// </summary>
  281. /// <param name="text">需要翻译的正则公式</param>
  282. public static void PartInterpret(ref string text)
  283. {
  284. if (resources.Keys == null && resources.Keys.Count == 0)
  285. {
  286. MessageBox.Show(InterpretBase.textTran("未添加资源文件,请及时确认或与工作人员联系"), InterpretBase.textTran("提示!!"));
  287. return;
  288. }
  289. foreach (var item in resources)
  290. {
  291. if (text.Contains(item.Key))
  292. {
  293. text = text.Replace(item.Key, item.Value);
  294. }
  295. }
  296. }
  297. /// <summary>
  298. /// 递归转化树
  299. /// </summary>
  300. /// <param name="menuItem"></param>
  301. private static void GetNodeText(TreeNode node)
  302. {
  303. foreach (TreeNode treeNode in node.Nodes)
  304. {
  305. try
  306. {
  307. treeNode.Text = (resources.ContainsKey(treeNode.Text)) ? resources[treeNode.Text] : treeNode.Text;
  308. }
  309. catch (Exception)
  310. {
  311. }
  312. finally
  313. {
  314. if (treeNode.Nodes.Count > 0)
  315. {
  316. GetNodeText(treeNode);
  317. }
  318. }
  319. }
  320. }
  321. /// <summary>
  322. /// 递归转化菜单
  323. /// </summary>
  324. /// <param name="menuItem"></param>
  325. private static void GetItemText(ToolStripDropDownItem menuItem)
  326. {
  327. foreach (ToolStripItem toolItem in menuItem.DropDownItems)
  328. {
  329. try
  330. {
  331. toolItem.Text = (resources.ContainsKey(toolItem.Text)) ? resources[toolItem.Text] : toolItem.Text;
  332. }
  333. catch (Exception)
  334. {
  335. }
  336. finally
  337. {
  338. if (toolItem is ToolStripDropDownItem)
  339. {
  340. ToolStripDropDownItem subMenuStrip = (ToolStripDropDownItem)toolItem;
  341. if (subMenuStrip.DropDownItems.Count > 0)
  342. {
  343. GetItemText(subMenuStrip);
  344. }
  345. }
  346. }
  347. }
  348. }
  349. }
  350. }

2)主函数调用类

 private void ToolStripMenuItem_zhCN_Click(object sender, EventArgs e)
        {
            lang = "zh-CN";
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
            IPret.LoadLanguage(lang);
            IPret.InitLanguage(this);//此窗体
        }

3)json文件中英文格式

{
"File":"文件",
"Tool":"工具",
"Operate":"操作",
"User":"用户",
"Help":"帮助",
"New":"新建",
"Open":"打开",
"Local":"本地",
"Database":"数据库",
"User management":"用户管理",
"SysConf":"系统配置",
"WaveMon":"波形监测",
"OperMon":"运行监测",
"DtStor":"数据存储",
"Calibr":"校   准",
"Wait to Trig":"等待触发",
"Rec Data":"接收数据",
"Save Database":"存储数据库",
"Instrument Config":"仪器配置",
"Channel Config":"通道配置",
"Display Config":"显示配置",
"Record Config":"记录配置",
"DataCompar":"数据对比",
"Failed to initialize the interpolation coefficients table!":"初始化插值系数表失败!",
"Warning":"警告",
"The channel configuration page has not been applied. Do you want to apply the configuration?":"通道配置页面未被应用,是否应用?",
"Prompt message":"提示信息",
"The number of devices cannot be 0!":"设备数量不能为0!",
"The file has been saved successfully! The storage path is":"文件已保存完毕,存储路径为",
"Save or not":"保存情况",
"The file is saving...":"文件保存中...",
"No available port":"无可用端口",
"Service off, data written, memory cleared":"服务已关闭,数据已写入,内存已清理",
"You haven't saved the project. Do you want to save it?":"您尚未保存工程,是否保存工程?",
"Add User":"添加用户",
"Account":"账户",
"Password":"密码",
"Authority":"权限",
"OK":"确认",
"Cancel":"取消",
"Modify User Info":"修改用户信息",
"Modify":"修改",
"Administrator":"管理员",
"Guest":"访客",
"You haven't completed the full information, please check again.":"存在没有填写的信息,请确认",
"The user name already exists.":"该账号已存在",
"Device Name":"设备名称",
"SN":"序列号",
"Delay Calibration Time":"设备延时校准时间",
"Delay":"设备延时",
"Channel Calibration Time":"通道校准时间",
"Apply":"应用",
"TrigSource":"触发源:",
"TrigMode":"触发方式:",
"TrigLevel":"触发电平:",
"TrigHoldoff":"触发释抑:",
"HorScale":"水平时基:",
"HorOffset":"水平偏移:",
"MemDepth":"存储深度:",
"Host IP":"主机IP:",
"Acquire":"采集",
"Record":"记录",
"Device":"设备",
"Channel":"通道",
"Channel Tag":"通道标记",
"Remarks":"标记注释",
"Measurement Type":"测量类型",
"Amplitude Range":"幅值范围",
"Offset":"偏移",
"Impedance":"阻抗",
"Coupling":"耦合",
"Probe Ratio":"探头比",
"Channel configuration completed.":"通道配置已完成",
"Configuration":"配置情况",
"Null exists or no device information is available. Please input complete information or register the instrument before clicking Apply.":"存在空值或无设备信息,请输入完成或注册仪器再点击应用",
"Invalid input. Please try to input again.":"此输入不合法,请重新输入",
"Apply to all channels?":"是否应用所有通道",
"OK.":"确定",
"Unconventional value for offset value.":"偏移值输入非常规值",
"Unconventional value for max. value.":"最大值输入非常规值",
"Unconventional value for min. value.":"最小值输入非常规值",
"Lower limit cannot exceed the upper limit.":"下限不能超过上限",
"Lower and upper limits cannot be the same.":"上下限不能相等",
"Load Data from Database":"数据库导入数据",
"Project Time:":"项目名称:",
"Test Time:":"测试时间:",
"Query":"查询",
"Project and Test Time cannot be null.":"项目和测试时间不允许为空",
"No project information that meets the conditions is found.":"未查询到满足条件的项目信息",
"Tip":"提示",
"You haven't created a project. Please create a project first.":"还未创建过项目,请先创建项目",
"Project Name":"项目名称",
"Acquisition Time":"采集时间",
"Load":"导入",
"Please select the acquisition time":"请选择采集时间",
"New Project":"新建工程",
"ProjName:":"工程名:",
"Location:":"位 置:",
"Remarks:":"注 释:",
"Browse":"浏览",
"You haven't filled in all the information.":"您有信息未填写",
"The project information already exists. Please input a new project name.":"该工程信息已存在,请重新输入工程名",
"Please select a path for storing the file.":"请选择文件存储位置",
"Data Operation in the Database":"数据库数据操作",
"Query Condition":"查询条件",
"Configur Time:":"配置时间:",
"Channel Start No.":"通道起始编号:",
"Channel Stop No.":"通道终止编号:",
"Query Structure":"查询结构",
"Check":"检查",
"Device Aliases":"设备别名",
"Points":"点数",
"Sample Rate:":"采样率:",
"Select All.":"全选",
"Select All":"全 选",
"Deselect All":"取消全选",
"Save to Local":"保存至本地",
"No waveform data that meet the conditions are found.":"未查询到满足条件的波形数据",
"The table for the channel does not exist. Please check whether this table exists in the database.":"该通道对应的表不存在,请检查数据库中存在该表",
"The file has been saved":"文件已经保存在",
"Alarm message":"警告信息",
"Cancel the instrument?":"是否删除仪器(设备)",
"Channel delay calibration":"通道延时校准",
"Start calibrating":"开始校准",
"Load Info":"加载设备信息",
"Calibration process information":"校准过程信息",
"External trigger delay calibration":"外触发延时校准",
"Please ensure that the sync module output is enabled!":"请确保同步机输出打开!",
"All the input channels of the device under calibration should be properly connected to the sync module via the 50 Ω terminal!":"被校准设备的所有输入通道和外触发通道均需通过50Ω端子与同步机连接完好!",
"Click OK to start calibration.":"点击确认开始校准",
"No calibration device is selected!":"未选择校准设备!",
"The device is starting to perform the channel delay calibration.":"设备开始通道延时校准",
"Writing into the database completed!":"写入数据库完成!",
"Please ensure that CH1 of each device under calibration has been properly connected to the sync module via the 50 Ω terminal!":"请确保每台被校准设备的CH1通道和外触发通过均已通过50Ω端子与外触发连接!",
"The clock signals among the devices should be in cascaded connection via 10 M In/Out!":"机器间的时钟信号需要通过10M IN/OUT进行级联!",
"Instrument list":"仪器列表",
"Registered Instrument":"注册仪器",
"Delete":"删除",
"Registered Instru List":"注册仪器列表",
"Online Instru List":"在线仪器列表",
"Search":"检索",
"SN.":"仪器序列号",
"Model":"仪器型号",
"Firmware Version":"固件版本",
"Device No.":"机器编号",
"IP Address":"IP地址",
"Failed to add the instrument.":"添加失败",
"The instrument already exists in the current instrument configuration list.":"当前仪器配置列表已存在该设备",
"Add Instrument":"添加情况",
"Memory error":"内存错误",
"Communication I/O error. Please check the parameters of the instrument.":"通信I/O错误,请检查设备参数",
"Query timeout. Please confirm whether the IP address matches the selected instrument model.":"查询超时,请确保是否为支持的设备型号列表",
"The instrument already exists in the current location.":"当前位置已存在设备",
"UserName":"账号",
"Master Login":"管理员登录",
"Slave Login":"访客登录",
"User Login":"用户登录",
"Incorrect password":"该账号不存在",
"Login":"登录情况",
"You are guest, please click on the Slave Login button to log in as a guest.":"权限为访客,请点击访客按钮",
"You are administrator, please click on the Master Login button to log in as an administrator.":"权限为管理员,请点击管理员按钮",
"Channel configurin...":"通道配置中",
"Error!":"出错啦!",
"Acquisition Condition":"采集条件:",
"Record Location":"记录位置:",
"Local File Record Type":"本地文件记录类型:",
"Bin":"二进制",
"Local File Storage Location":"本地文件保存位置:",
"File Naming Rule":"文件命名规则:",
"Device Name.":"设备名",
"No. of Channels":"通道数",
"Additional Time":"附加时间",
"Device Information":"设备信息",
"Model":"型号",
"Device IP":"设备IP",
"Device SN.":"设备SN",
"Communication Interface":"通讯接口",
"Information incomplete.Unable to register.":"您的信息未填写完全,无法注册",
"Small Icon":"小图标显示模式",
"Normal Icon":"正常图标显示模式",
"Large Icon":"大图标显示模式",
"Display Range":"显示范围设置",
"Please input a valid range!":"请输入有效的范围!",
"No. of displayed should be greater than 0.":"最小显示个数需大于0",
"System Operating Status":"系统运行状态",
"Project Status":"工程状态:",
"Last Calibration Record":"上次校准记录:",
"Time to Start Test ":"开始测试时间:",
"Recorded":"已记录条目数:",
"Data Loss":"数据丢失:",
"Written Error":"写入错误:",
"Instrument Operating Status":"仪器运行状态",
"Refresh":"刷新",
"Refresh.":"刷 新",
"View Details":"查看详情",
"User Name":"用户名",
"Creation Time":"创建时间",
"Not query data":"未查询到数据",
"Group Name":"组名",
"Channel Selection":"通道选择",
"Waveform Color":"波形颜色",
"Trend Graph":"趋势图",
"The uppper and lower limits cannot be the same.":"上下限不能相同",
"Channel Information":"通道信息",
"Measurement Results":"测量结果",
"Interpolation Factor":"内插倍数:",
"1st Peak":"第一个峰值",
"Half Peak Width":"半峰宽",
"Vertical Scale":"垂直档位",
"Vertical Offset":"垂直偏移",
"Inverse":"反向",
"The min. value cannot exceed the max. value!":"最小值不能超过最大值!",
"The min. value of the amplitude range must be smaller than the max. value!":"幅度范围的最小值必须<最大值!",
"Error occurred for the min. value input format!":"最小值输入格式有误!",
"The max. value of the amplitude range must be greater than the min. value!":"幅度范围的最大值必须>最小值!",
"Error occurred for the max. value input format!":"最大值输入格式有误!",
"Scale":"时基",
"Position":"位移",
"LangTran":"语言转换",
"Chinese":"中文",
"English":"英文",
"The general parameters of the instrument have not been set successfully:":"仪器的通用参数未设置成功:",
"The project is queried, but the test information is not queried":"查询到项目,但是未查询到测试信息",
"Queryed project":"查询到项目",
"No relevant collected data was queried":"未查询到相关采集数据",
"Please select data to add to the drawing table":"请先选择数据添加绘制表中",
"under the directory of":"目录下",
"The device starts external trigger delay calibration.":"设备开始外触发延时校准",
"Calibration failed":"校准失败",
"Calibration failed!":"校准失败!",
"The end of calibration, whether to store the database.":"校准结束,是否存储数据库",
"Click OK to start storing the database":"点击确认开始存储数据库",
"Failed to add the instrument,the instrument already exists in the current instrument configuration list.":"添加失败,当前仪器配置列表已存在该设备",
"Failed to add the instrument,the instrument already exists in the current location.":"添加失败,当前位置已存在设备",
"Search complete":"检索完成",
"The max. value cannot be lower than the min. value!":"最大值不能低于最小值!",
"Normalization is complete!":"归一化完成!",
"Message":"消息",
"Half peak height alignment is complete!":"半峰高对齐完成!",
"Half peak height alignment is wrong!":"半峰高对齐错误!",
"The password you entered is not correct!":"您输入的密码不正确!",
"Your information is incomplete and cannot be added":"您的信息未填写完全,无法添加",
"The device SN corresponding to the IP you entered does not match the original location, please re-enter":"您输入的IP对应的设备SN和原位置的不匹配,请重新输入",
"Successfully modified":"修改成功",
"Your IP is invalid, please confirm.":"您的IP无效,请确认",
"Your IP has not been filled in completely and cannot be added.":"您的IP未填写完全,无法添加",
"No resource file has been added, please confirm or contact staff in time.":"未添加资源文件,请及时确认或与工作人员联系",
"Device Alias:":"设备别名:",
"Model:":"型      号:",
"IP:":"设备 IP:",
"SN:":"设备 SN:",
"Commu Interf:":"通讯接口:",
"of time record, sure to import?":"的时间记录,确定导入?",
"Impendence(Ω)":"阻抗(Ω)",
"Measurement Type:":"测量类型:",
"Acquisition Time:":"采集时间:",
"Channel Offset":"通道偏移",
"Save":"保存",
"Add":"添加",
"Empty":"清空",
"Remove":"移除",
"Single-Calibr":"单机校准",
"Sys-Calibr":"系统校准",
"The receiving service is starting...":"接收服务启动中...",
"The receiving service has been started and completed":"接收服务已启动完成",
"Service startup":"服务启动情况",
"Choose":"选择",
"Search result":"查询结果",
"Device Model":"设备型号",
"Calibration Status":"校准状态",
"in":"在",
"Selected":"已选",
"SN:":"仪器序列号:",
"Model:":"仪器型号:",
"Firmware Version:":"固件版本:",
"Device No.:":"机器编号:",
"IP Address:":"IP 地址:",
"No test record found.":"未查询到测试记录",
"Interpolation Factor:X":"内插倍数:X",
"Register":"注册",
"Kilomega":"千兆",
"This account is a super administrator and cannot be modified as a guest":"此账号为超级管理员,无法修改权限为访客",
"This account is the default administrator and cannot be deleted":"此账号为默认管理员,无法删除"
}
{
"文件":"File",
"工具":"Tool",
"操作":"Operate",
"用户":"User",
"帮助":"Help",
"新建":"New",
"打开":"Open",
"本地":"Local",
"数据库":"Database",
"用户管理":"User management",
"系统配置":"SysConf",
"波形监测":"WaveMon",
"运行监测":"OperMon",
"数据存储":"DtStor",
"校   准":"Calibr",
"等待触发":"Wait to Trig",
"接收数据":"Rec Data",
"存储数据库":"Save Database",
"仪器配置":"Instrument Config",
"通道配置":"Channel Config",
"显示配置":"Display Config",
"记录配置":"Record Config",
"数据对比":"DataCompar",
"初始化插值系数表失败!":"Failed to initialize the interpolation coefficients table!",
"警告":"Warning",
"通道配置页面未被应用,是否应用?":"The channel configuration page has not been applied. Do you want to apply the configuration?",
"提示信息":"Prompt message",
"设备数量不能为0!":"The number of devices cannot be 0!",
"文件已保存完毕,存储路径为":"The file has been saved successfully! The storage path is",
"保存情况":"Save or not",
"文件保存中...":"The file is saving...",
"无可用端口":"No available port",
"服务已关闭,数据已写入,内存已清理":"Service off, data written, memory cleared",
"您尚未保存工程,是否保存工程?":"You haven't saved the project. Do you want to save it?",
"添加用户":"Add User",
"账户":"Account",
"密码":"Password",
"权限":"Authority",
"确认":"OK",
"取消":"Cancel",
"修改用户信息":"Modify User Info",
"修改":"Modify",
"管理员":"Administrator",
"访客":"Guest",
"存在没有填写的信息,请确认":"You haven't completed the full information, please check again.",
"该账号已存在":"The user name already exists.",
"设备名称":"Device Name",
"序列号":"SN",
"设备延时校准时间":"Delay Calibration Time",
"设备延时":"Delay",
"通道校准时间":"Channel Calibration Time",
"应用":"Apply",
"触发源:":"TrigSource",
"触发方式:":"TrigMode",
"触发电平:":"TrigLevel",
"触发释抑:":"TrigHoldoff",
"水平时基:":"HorScale",
"水平偏移:":"HorOffset",
"存储深度:":"MemDepth",
"主机IP:":"Host IP",
"采集":"Acquire",
"记录":"Record",
"设备":"Device",
"通道":"Channel",
"通道标记":"Channel Tag",
"标记注释":"Remarks",
"测量类型":"Measurement Type",
"幅值范围":"Amplitude Range",
"偏移":"Offset",
"阻抗":"Impedance",
"耦合":"Coupling",
"探头比":"Probe Ratio",
"通道配置已完成":"Channel configuration completed.",
"配置情况":"Configuration",
"存在空值或无设备信息,请输入完成或注册仪器再点击应用":"Null exists or no device information is available. Please input complete information or register the instrument before clicking Apply.",
"此输入不合法,请重新输入":"Invalid input. Please try to input again.",
"是否应用所有通道":"Apply to all channels?",
"确定":"OK.",
"偏移值输入非常规值":"Unconventional value for offset value.",
"最大值输入非常规值":"Unconventional value for max. value.",
"最小值输入非常规值":"Unconventional value for min. value.",
"下限不能超过上限":"Lower limit cannot exceed the upper limit.",
"上下限不能相等":"Lower and upper limits cannot be the same.",
"数据库导入数据":"Load Data from Database",
"项目名称:":"Project Time:",
"测试时间:":"Test Time:",
"查询":"Query",
"项目和测试时间不允许为空":"Project and Test Time cannot be null.",
"未查询到满足条件的项目信息":"No project information that meets the conditions is found.",
"提示":"Tip",
"还未创建过项目,请先创建项目":"You haven't created a project. Please create a project first.",
"项目名称":"Project Name",
"采集时间":"Acquisition Time",
"导入":"Load",
"请选择采集时间":"Please select the acquisition time",
"新建工程":"New Project",
"工程名:":"ProjName:",
"位 置:":"Location:",
"注 释:":"Remarks:",
"浏览":"Browse",
"您有信息未填写":"You haven't filled in all the information.",
"该工程信息已存在,请重新输入工程名":"The project information already exists. Please input a new project name.",
"请选择文件存储位置":"Please select a path for storing the file.",
"数据库数据操作":"Data Operation in the Database",
"查询条件":"Query Condition",
"配置时间:":"Configur Time:",
"通道起始编号:":"Channel Start No.",
"通道终止编号:":"Channel Stop No.",
"查询结构":"Query Structure",
"检查":"Check",
"设备别名":"Device Aliases",
"点数":"Points",
"采样率:":"Sample Rate:",
"全选":"Select All.",
"全 选":"Select All",
"取消全选":"Deselect All",
"保存至本地":"Save to Local",
"未查询到满足条件的波形数据":"No waveform data that meet the conditions are found.",
"该通道对应的表不存在,请检查数据库中存在该表":"The table for the channel does not exist. Please check whether this table exists in the database.",
"文件已经保存在":"The file has been saved",
"警告信息":"Alarm message",
"是否删除仪器(设备)":"Cancel the instrument?",
"通道延时校准":"Channel delay calibration",
"开始校准":"Start calibrating",
"加载设备信息":"Load Info",
"校准过程信息":"Calibration process information",
"外触发延时校准":"External trigger delay calibration",
"请确保同步机输出打开!":"Please ensure that the sync module output is enabled!",
"被校准设备的所有输入通道和外触发通道均需通过50Ω端子与同步机连接完好!":"All the input channels of the device under calibration should be properly connected to the sync module via the 50 Ω terminal!",
"点击确认开始校准":"Click OK to start calibration.",
"未选择校准设备!":"No calibration device is selected!",
"设备开始通道延时校准":"The device is starting to perform the channel delay calibration.",
"写入数据库完成!":"Writing into the database completed!",
"请确保每台被校准设备的CH1通道和外触发通过均已通过50Ω端子与外触发连接!":"Please ensure that CH1 of each device under calibration has been properly connected to the sync module via the 50 Ω terminal!",
"机器间的时钟信号需要通过10M IN/OUT进行级联!":"The clock signals among the devices should be in cascaded connection via 10 M In/Out!",
"仪器列表":"Instrument list",
"注册仪器":"Registered Instrument",
"删除":"Delete",
"注册仪器列表":"Registered Instru List",
"在线仪器列表":"Online Instru List",
"检索":"Search",
"仪器序列号":"SN.",
"仪器型号":"Model",
"固件版本":"Firmware Version",
"机器编号":"Device No.",
"IP地址":"IP Address",
"添加失败":"Failed to add the instrument.",
"当前仪器配置列表已存在该设备":"The instrument already exists in the current instrument configuration list.",
"添加情况":"Add Instrument",
"内存错误":"Memory error",
"通信I/O错误,请检查设备参数":"Communication I/O error. Please check the parameters of the instrument.",
"查询超时,请确保是否为支持的设备型号列表":"Query timeout. Please confirm whether the IP address matches the selected instrument model.",
"当前位置已存在设备":"The instrument already exists in the current location.",
"账号":"UserName",
"管理员登录":"Master Login",
"访客登录":"Slave Login",
"用户登录":"User Login",
"该账号不存在":"Incorrect password",
"登录情况":"Login",
"权限为访客,请点击访客按钮":"You are guest, please click on the Slave Login button to log in as a guest.",
"权限为管理员,请点击管理员按钮":"You are administrator, please click on the Master Login button to log in as an administrator.",
"通道配置中":"Channel configurin...",
"出错啦!":"Error!",
"采集条件:":"Acquisition Condition",
"记录位置:":"Record Location",
"本地文件记录类型:":"Local File Record Type",
"二进制":"Bin",
"本地文件保存位置:":"Local File Storage Location",
"文件命名规则:":"File Naming Rule",
"设备名":"Device Name.",
"通道数":"No. of Channels",
"附加时间":"Additional Time",
"设备信息":"Device Information",
"型号":"Model",
"设备IP":"Device IP",
"设备SN":"Device SN.",
"通讯接口":"Communication Interface",
"您的信息未填写完全,无法注册":"Information incomplete.Unable to register.",
"小图标显示模式":"Small Icon",
"正常图标显示模式":"Normal Icon",
"大图标显示模式":"Large Icon",
"显示范围设置":"Display Range",
"请输入有效的范围!":"Please input a valid range!",
"最小显示个数需大于0":"No. of displayed should be greater than 0.",
"系统运行状态":"System Operating Status",
"工程状态:":"Project Status",
"上次校准记录:":"Last Calibration Record",
"开始测试时间:":"Time to Start Test ",
"已记录条目数:":"Recorded",
"数据丢失:":"Data Loss",
"写入错误:":"Written Error",
"仪器运行状态":"Instrument Operating Status",
"刷新":"Refresh",
"刷 新":"Refresh.",
"查看详情":"View Details",
"用户名":"User Name",
"创建时间":"Creation Time",
"未查询到数据":"Not query data",
"组名":"Group Name",
"通道选择":"Channel Selection",
"波形颜色":"Waveform Color",
"趋势图":"Trend Graph",
"上下限不能相同":"The uppper and lower limits cannot be the same.",
"通道信息":"Channel Information",
"测量结果":"Measurement Results",
"内插倍数:":"Interpolation Factor",
"第一个峰值":"1st Peak",
"半峰宽":"Half Peak Width",
"垂直档位":"Vertical Scale",
"垂直偏移":"Vertical Offset",
"反向":"Inverse",
"最小值不能超过最大值!":"The min. value cannot exceed the max. value!",
"幅度范围的最小值必须<最大值!":"The min. value of the amplitude range must be smaller than the max. value!",
"最小值输入格式有误!":"Error occurred for the min. value input format!",
"幅度范围的最大值必须>最小值!":"The max. value of the amplitude range must be greater than the min. value!",
"最大值输入格式有误!":"Error occurred for the max. value input format!",
"时基":"Scale",
"位移":"Position",
"语言转换":"LangTran",
"中文":"Chinese",
"英文":"English",
"仪器的通用参数未设置成功:":"The general parameters of the instrument have not been set successfully:",
"查询到项目,但是未查询到测试信息":"The project is queried, but the test information is not queried",
"查询到项目":"Queryed project",
"未查询到相关采集数据":"No relevant collected data was queried",
"请先选择数据添加绘制表中":"Please select data to add to the drawing table",
"目录下":"under the directory of",
"设备开始外触发延时校准":"The device starts external trigger delay calibration.",
"校准失败":"Calibration failed",
"校准失败!":"Calibration failed!",
"校准结束,是否存储数据库":"The end of calibration, whether to store the database.",
"点击确认开始存储数据库":"Click OK to start storing the database",
"添加失败,当前仪器配置列表已存在该设备":"Failed to add the instrument,the instrument already exists in the current instrument configuration list.",
"添加失败,当前位置已存在设备":"Failed to add the instrument,the instrument already exists in the current location.",
"检索完成":"Search complete",
"最大值不能低于最小值!":"The max. value cannot be lower than the min. value!",
"归一化完成!":"Normalization is complete!",
"消息":"Message",
"半峰高对齐完成!":"Half peak height alignment is complete!",
"半峰高对齐错误!":"Half peak height alignment is wrong!",
"您输入的密码不正确!":"The password you entered is not correct!",
"您的信息未填写完全,无法添加":"Your information is incomplete and cannot be added",
"您输入的IP对应的设备SN和原位置的不匹配,请重新输入":"The device SN corresponding to the IP you entered does not match the original location, please re-enter",
"修改成功":"Successfully modified",
"您的IP无效,请确认":"Your IP is invalid, please confirm.",
"您的IP未填写完全,无法添加":"Your IP has not been filled in completely and cannot be added.",
"未添加资源文件,请及时确认或与工作人员联系":"No resource file has been added, please confirm or contact staff in time.",
"设备别名:":"Device Alias:",
"型      号:":"Model:",
"设备 IP:":"IP:",
"设备 SN:":"SN:",
"通讯接口:":"Commu Interf:",
"的时间记录,确定导入?":"of time record, sure to import?",
"阻抗(Ω)":"Impendence(Ω)",
"测量类型:":"Measurement Type:",
"采集时间:":"Acquisition Time:",
"通道偏移":"Channel Offset",
"保存":"Save",
"添加":"Add",
"清空":"Empty",
"移除":"Remove",
"单机校准":"Single-Calibr",
"系统校准":"Sys-Calibr",
"接收服务启动中...":"The receiving service is starting...",
"接收服务已启动完成":"The receiving service has been started and completed",
"服务启动情况":"Service startup",
"选择":"Choose",
"查询结果":"Search result",
"设备型号":"Device Model",
"校准状态":"Calibration Status",
"在":"in",
"已选":"Selected",
"仪器序列号:":"SN:",
"仪器型号:":"Model:",
"固件版本:":"Firmware Version:",
"机器编号:":"Device No.:",
"IP 地址:":"IP Address:",
"未查询到测试记录":"No test record found.",
"内插倍数:X":"Interpolation Factor:X",
"注册":"Register",
"千兆":"Kilomega",
"此账号为超级管理员,无法修改权限为访客":"This account is a super administrator and cannot be modified as a guest",
"此账号为默认管理员,无法删除":"This account is the default administrator and cannot be deleted"
}