pymud 0.20.3__py3-none-any.whl → 0.21.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
pymud/session.py CHANGED
@@ -159,11 +159,6 @@ class Session:
159
159
  self.encoding = encoding or self.encoding
160
160
  self.after_connect = after_connect
161
161
 
162
- # 插件处置移动到 pymud.py 2024-3-22
163
- # for plugin in app.plugins.values():
164
- # if isinstance(plugin, Plugin):
165
- # plugin.onSessionCreate(self)
166
-
167
162
  self._modules = OrderedDict()
168
163
 
169
164
  # 将变量加载和脚本加载调整到会话创建时刻
@@ -174,13 +169,13 @@ class Session:
174
169
  try:
175
170
  vars = pickle.load(fp)
176
171
  self._variables.update(vars)
177
- self.info(f"自动从{file}中加载保存变量成功")
172
+ self.info(Settings.gettext("msg_var_autoload_success", file))
178
173
  except Exception as e:
179
- self.warning(f"自动从{file}中加载变量失败,错误消息为: {e}")
174
+ self.warning(Settings.gettext("msg_var_autoload_fail", file, e))
180
175
 
181
176
 
182
177
  if self._auto_script:
183
- self.info(f"即将自动加载以下模块:{self._auto_script}")
178
+ self.info(Settings.gettext("msg_auto_script", self._auto_script))
184
179
  self.load_module(self._auto_script)
185
180
 
186
181
  if Settings.client["auto_connect"]:
@@ -229,7 +224,7 @@ class Session:
229
224
 
230
225
  except Exception as exc:
231
226
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
232
- self.error(f"创建连接过程中发生错误, 错误发生时刻 {now}, 错误信息为 {exc}, ")
227
+ self.error(Settings.gettext("msg_connection_fail", now, exec))
233
228
  self._state = "EXCEPTION"
234
229
 
235
230
  if Settings.client["auto_reconnect"]:
@@ -242,14 +237,14 @@ class Session:
242
237
 
243
238
  :param timeout: 重连之前的等待时间,默认15s,可由 `Settings.client['reconnect_wait']` 设置所覆盖
244
239
  """
245
- self.info(f"{timeout}秒之后将自动重新连接...")
240
+ self.info(Settings.gettext("msg_auto_reconnect", timeout))
246
241
  await asyncio.sleep(timeout)
247
242
  await self.create_task(self.connect())
248
243
 
249
244
  def onConnected(self):
250
245
  "当连接到服务器之后执行的操作。包括打印连接时间,执行自定义事件(若设置)等。"
251
246
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
252
- self.info(f"{now}: 已成功连接到服务器")
247
+ self.info(Settings.gettext("msg_connected", now))
253
248
  if isinstance(self.after_connect, str):
254
249
  self.writeline(self.after_connect)
255
250
 
@@ -270,7 +265,7 @@ class Session:
270
265
 
271
266
  self.clean()
272
267
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
273
- self.info(f"{now}: 与服务器连接已断开")
268
+ self.info(Settings.gettext("msg_disconnected", now))
274
269
 
275
270
  event_disconnected = self._events["disconnected"]
276
271
  if callable(event_disconnected):
@@ -386,7 +381,7 @@ class Session:
386
381
 
387
382
  else:
388
383
  if name not in self._loggers.keys():
389
- self.warning(f"其它会话中已存在一个名为 {name} 的记录器,将直接返回该记录器")
384
+ self.warning(Settings.gettext("msg_duplicate_logname", name))
390
385
 
391
386
  logger = self.application.loggers[name]
392
387
  logger.mode = mode
@@ -517,7 +512,7 @@ class Session:
517
512
 
518
513
  def get_status(self):
519
514
  "返回状态窗口内容的真实函数。 **脚本中无需调用。**"
520
- text = f"这是一个默认的状态窗口信息\n会话: {self.name} 连接状态: {self.connected}"
515
+ text = Settings.gettext("msg_default_statuswindow", self.name, self.connected)
521
516
  if callable(self._status_maker):
522
517
  text = self._status_maker()
523
518
 
@@ -646,7 +641,7 @@ class Session:
646
641
  self.write(b"\x1b[1z<SUPPORTS>")
647
642
  else:
648
643
  #self.write(b"\x1b[0z")
649
- self.warning("MXP支持尚未开发,请暂时不要打开MXP支持设置")
644
+ self.warning(Settings.gettext("msg_mxp_not_support"))
650
645
 
651
646
  # 全局变量%line
652
647
  self.setVariable("%line", tri_line)
@@ -659,7 +654,7 @@ class Session:
659
654
 
660
655
  if not self._ignore:
661
656
  # 修改实现,形成列表时即排除非使能状态触发器,加快响应速度
662
- #all_tris = list(self._triggers.values())
657
+
663
658
  all_tris = [tri for tri in self._triggers.values() if isinstance(tri, Trigger) and tri.enabled]
664
659
  all_tris.sort(key = lambda tri: tri.priority)
665
660
 
@@ -689,7 +684,7 @@ class Session:
689
684
 
690
685
  :param exc: 异常对象
691
686
  """
692
- self.error(f"连接过程中发生异常,异常信息为: {exc}")
687
+ self.error(Settings.gettext("msg_connection_fail", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), exc))
693
688
 
694
689
 
695
690
  def create_task(self, coro, *args, name: str = None) -> asyncio.Task:
@@ -833,7 +828,7 @@ class Session:
833
828
  session = self.application.sessions[name]
834
829
  session.exec_command(cmd, *args, **kwargs)
835
830
  else:
836
- self.error(f"不存在名称为{name}的会话")
831
+ self.error(Settings.gettext("msg_no_session", name))
837
832
 
838
833
  async def exec_async(self, cmd: str, name = None, *args, **kwargs):
839
834
  """
@@ -848,7 +843,7 @@ class Session:
848
843
  session = self.application.sessions[name]
849
844
  return await session.exec_command_async(cmd, *args, **kwargs)
850
845
  else:
851
- self.error(f"不存在名称为{name}的会话")
846
+ self.error(Settings.gettext("msg_no_session", name))
852
847
 
853
848
  def exec_code(self, cl: CodeLine, *args, **kwargs):
854
849
  """
@@ -876,7 +871,7 @@ class Session:
876
871
  if times > 0:
877
872
  self.create_task(self.handle_num(times, code = cl, *args, **kwargs))
878
873
  else:
879
- self.warning("#{num} {cmd}只能支持正整数!")
874
+ self.warning(Settings.gettext("msg_num_positive"))
880
875
 
881
876
  elif cmd in self.application.sessions.keys():
882
877
  name = cmd
@@ -905,7 +900,7 @@ class Session:
905
900
  else:
906
901
  handler(code = cl, *args, **kwargs)
907
902
  else:
908
- self.warning(f"未识别的命令: {cl.commandText}")
903
+ self.warning(Settings.gettext("msg_cmd_not_recognized", cl.commandText))
909
904
 
910
905
  else:
911
906
  cmdtext, code = cl.expand(self, *args, **kwargs)
@@ -940,7 +935,7 @@ class Session:
940
935
  if times > 0:
941
936
  await self.handle_num(times, code = cl, *args, **kwargs)
942
937
  else:
943
- self.warning("#{num} {cmd}只能支持正整数!")
938
+ self.warning(Settings.gettext("msg_num_positive"))
944
939
 
945
940
  elif cmd in self.application.sessions.keys():
946
941
  name = cmd
@@ -966,7 +961,7 @@ class Session:
966
961
  else:
967
962
  handler(code = cl, *args, **kwargs)
968
963
  else:
969
- self.warning(f"未识别的命令: {cl.commandText}")
964
+ self.warning(Settings.gettext("msg_cmd_not_recognized", cl.commandText))
970
965
 
971
966
  else:
972
967
  cmdtext, code = cl.expand(self, *args, **kwargs)
@@ -981,23 +976,35 @@ class Session:
981
976
  :param cmdtext: 纯文本命令
982
977
  """
983
978
  isNotCmd = True
979
+
980
+ # fix bugs, commands filter for enabled and sorted for priority
981
+ avai_cmds = [cmd for cmd in self._commands.values() if isinstance(cmd, Command) and cmd.enabled]
982
+ avai_cmds.sort(key = lambda cmd: cmd.priority)
983
+
984
984
  for command in self._commands.values():
985
- if isinstance(command, Command) and command.enabled:
986
- state = command.match(cmdtext)
987
- if state.result == Command.SUCCESS:
988
- # 命令的任务名称采用命令id,以便于后续查错
989
- self.create_task(command.execute(cmdtext), name = "task-{0}".format(command.id))
990
- isNotCmd = False
991
- break
985
+ state = command.match(cmdtext)
986
+ if state.result == Command.SUCCESS:
987
+ # 命令的任务名称采用命令id,以便于后续查错
988
+ self.create_task(command.execute(cmdtext), name = "task-{0}".format(command.id))
989
+ isNotCmd = False
990
+ break
992
991
 
993
992
  # 再判断是否是别名
994
993
  if isNotCmd:
995
994
  notAlias = True
996
- for alias in self._aliases.values():
997
- if isinstance(alias, Alias) and alias.enabled:
998
- state = alias.match(cmdtext)
999
- if state.result == Alias.SUCCESS:
1000
- notAlias = False
995
+
996
+ # fix bugs, aliases filter for enabled and sorted for priority, and add oneShot, keepEval judge
997
+ avai_alis = [ali for ali in self._aliases.values() if isinstance(ali, Alias) and ali.enabled]
998
+ avai_alis.sort(key = lambda ali: ali.priority)
999
+
1000
+ for alias in avai_alis:
1001
+ state = alias.match(cmdtext)
1002
+ if state.result == Alias.SUCCESS:
1003
+ notAlias = False
1004
+ if alias.oneShot:
1005
+ self.delAlias(alias.id)
1006
+
1007
+ if not alias.keepEval:
1001
1008
  break
1002
1009
 
1003
1010
  # 都不是则是普通命令,直接发送
@@ -1012,23 +1019,35 @@ class Session:
1012
1019
  """
1013
1020
  result = None
1014
1021
  isNotCmd = True
1015
- for command in self._commands.values():
1016
- if isinstance(command, Command) and command.enabled:
1017
- state = command.match(cmdtext)
1018
- if state.result == Command.SUCCESS:
1019
- # 命令的任务名称采用命令id,以便于后续查错
1020
- result = await self.create_task(command.execute(cmdtext), name = "task-{0}".format(command.id))
1021
- isNotCmd = False
1022
- break
1022
+
1023
+ # fix bugs, commands filter for enabled and sorted for priority
1024
+ avai_cmds = [cmd for cmd in self._commands.values() if isinstance(cmd, Command) and cmd.enabled]
1025
+ avai_cmds.sort(key = lambda cmd: cmd.priority)
1026
+
1027
+ for command in avai_cmds:
1028
+ state = command.match(cmdtext)
1029
+ if state.result == Command.SUCCESS:
1030
+ # 命令的任务名称采用命令id,以便于后续查错
1031
+ result = await self.create_task(command.execute(cmdtext), name = "task-{0}".format(command.id))
1032
+ isNotCmd = False
1033
+ break
1023
1034
 
1024
1035
  # 再判断是否是别名
1025
1036
  if isNotCmd:
1026
1037
  notAlias = True
1027
- for alias in self._aliases.values():
1028
- if isinstance(alias, Alias) and alias.enabled:
1029
- state = alias.match(cmdtext)
1030
- if state.result == Alias.SUCCESS:
1031
- notAlias = False
1038
+
1039
+ # fix bugs, aliases filter for enabled and sorted for priority, and add oneShot, keepEval judge
1040
+ avai_alis = [ali for ali in self._aliases.values() if isinstance(ali, Alias) and ali.enabled]
1041
+ avai_alis.sort(key = lambda ali: ali.priority)
1042
+
1043
+ for alias in avai_alis:
1044
+ state = alias.match(cmdtext)
1045
+ if state.result == Alias.SUCCESS:
1046
+ notAlias = False
1047
+ if alias.oneShot:
1048
+ self.delAlias(alias.id)
1049
+
1050
+ if not alias.keepEval:
1032
1051
  break
1033
1052
 
1034
1053
  # 都不是则是普通命令,直接发送
@@ -1162,18 +1181,6 @@ class Session:
1162
1181
 
1163
1182
  return counts
1164
1183
 
1165
- # def _addObjects(self, objs: dict, cls: type):
1166
- # if cls == Alias:
1167
- # self._aliases.update(objs)
1168
- # elif cls == Command:
1169
- # self._commands.update(objs)
1170
- # elif cls == Trigger:
1171
- # self._triggers.update(objs)
1172
- # elif cls == Timer:
1173
- # self._timers.update(objs)
1174
- # elif cls == GMCPTrigger:
1175
- # self._gmcp.update(objs)
1176
-
1177
1184
  def _addObjects(self, objs):
1178
1185
  if isinstance(objs, list) or isinstance(objs, tuple):
1179
1186
  for item in objs:
@@ -1183,24 +1190,10 @@ class Session:
1183
1190
  for key, item in objs.items():
1184
1191
  if isinstance(item, BaseObject):
1185
1192
  if key != item.id:
1186
- self.warning(f'对象 {item} 字典键值 {key} 与其id {item.id} 不一致,将丢弃键值,以其id添加到会话中...')
1193
+ self.warning(Settings.gettext("msg_id_not_consistent", item, key, item.id))
1187
1194
 
1188
1195
  self._addObject(item)
1189
1196
 
1190
- # def _addObject(self, obj, cls: type):
1191
- # #if type(obj) == cls:
1192
- # if isinstance(obj, cls):
1193
- # if cls == Alias:
1194
- # self._aliases[obj.id] = obj
1195
- # elif cls == Command:
1196
- # self._commands[obj.id] = obj
1197
- # elif cls == Trigger:
1198
- # self._triggers[obj.id] = obj
1199
- # elif cls == Timer:
1200
- # self._timers[obj.id] = obj
1201
- # elif cls == GMCPTrigger:
1202
- # self._gmcp[obj.id] = obj
1203
-
1204
1197
  def _addObject(self, obj):
1205
1198
  if isinstance(obj, Alias):
1206
1199
  self._aliases[obj.id] = obj
@@ -1620,7 +1613,7 @@ class Session:
1620
1613
 
1621
1614
  :param name: 变量名
1622
1615
  """
1623
- assert isinstance(name, str), "name必须是一个字符串"
1616
+ assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
1624
1617
  if name in self._variables.keys():
1625
1618
  self._variables.pop(name)
1626
1619
 
@@ -1638,7 +1631,7 @@ class Session:
1638
1631
  session.setVariable("myvar1", "the value")
1639
1632
  session.vars.myvar1 = "the value"
1640
1633
  """
1641
- assert isinstance(name, str), "name必须是一个字符串"
1634
+ assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
1642
1635
  self._variables[name] = value
1643
1636
 
1644
1637
  def getVariable(self, name, default = None):
@@ -1657,7 +1650,7 @@ class Session:
1657
1650
  myvar = session.vars.myvar1
1658
1651
  """
1659
1652
  """获取一个变量的值. 当name指定的变量不存在时,返回default"""
1660
- assert isinstance(name, str), "name必须是一个字符串"
1653
+ assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
1661
1654
  return self._variables.get(name, default)
1662
1655
 
1663
1656
  def setVariables(self, names, values):
@@ -1675,9 +1668,9 @@ class Session:
1675
1668
 
1676
1669
  session.setVariables(hp_key, hp_value)
1677
1670
  """
1678
- assert isinstance(names, tuple) or isinstance(names, list), "names命名应为元组或列表,不接受其他类型"
1679
- assert isinstance(values, tuple) or isinstance(values, list), "values值应为元组或列表,不接受其他类型"
1680
- assert (len(names) > 0) and (len(values) > 0) and (len(names) == len(values)), "names与values应不为空,且长度相等"
1671
+ assert isinstance(names, tuple) or isinstance(names, list), Settings.gettext("msg_shall_be_list_or_tuple", "names")
1672
+ assert isinstance(values, tuple) or isinstance(values, list), Settings.gettext("msg_shall_be_list_or_tuple", "values")
1673
+ assert (len(names) > 0) and (len(values) > 0) and (len(names) == len(values)), Settings.gettext("msg_names_and_values")
1681
1674
  for index in range(0, len(names)):
1682
1675
  name = names[index]
1683
1676
  value = values[index]
@@ -1695,8 +1688,8 @@ class Session:
1695
1688
 
1696
1689
  qi, jing, neili, jingli = session.getVariables(["qi", "jing", "neili", "jingli"])
1697
1690
  """
1698
- assert isinstance(names, tuple) or isinstance(names, list), "names命名应为元组或列表,不接受其他类型"
1699
- assert len(names) > 0, "names应不为空"
1691
+ assert isinstance(names, tuple) or isinstance(names, list), Settings.gettext("msg_shall_be_list_or_tuple", "names")
1692
+ assert len(names) > 0, Settings.gettext("msg_not_null", "names")
1700
1693
  values = list()
1701
1694
  for name in names:
1702
1695
  value = self.getVariable(name)
@@ -1728,7 +1721,7 @@ class Session:
1728
1721
 
1729
1722
  :param name: 全局变量的名称
1730
1723
  """
1731
- assert isinstance(name, str), "name必须是一个字符串"
1724
+ assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
1732
1725
  self.application.del_globals(name)
1733
1726
 
1734
1727
  def setGlobal(self, name, value):
@@ -1738,7 +1731,7 @@ class Session:
1738
1731
  :param name: 全局变量的名称
1739
1732
  :param value: 全局变量的值
1740
1733
  """
1741
- assert isinstance(name, str), "name必须是一个字符串"
1734
+ assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
1742
1735
  self.application.set_globals(name, value)
1743
1736
 
1744
1737
  def getGlobal(self, name, default = None):
@@ -1750,7 +1743,7 @@ class Session:
1750
1743
  :return: 全局变量的值,或者 default
1751
1744
  """
1752
1745
 
1753
- assert isinstance(name, str), "name必须是一个字符串"
1746
+ assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
1754
1747
  return self.application.get_globals(name, default)
1755
1748
 
1756
1749
  ## ###################
@@ -1832,7 +1825,7 @@ class Session:
1832
1825
  elif topic in self._sys_commands:
1833
1826
  docstring = self._cmds_handler[topic].__doc__
1834
1827
  else:
1835
- docstring = f"未找到主题{topic}, 请确认输入是否正确."
1828
+ docstring = Settings.gettext("msg_topic_not_found", topic)
1836
1829
 
1837
1830
  self.writetobuffer(docstring, True)
1838
1831
 
@@ -1911,12 +1904,12 @@ class Session:
1911
1904
  sec = duration % 60
1912
1905
  time_msg = ""
1913
1906
  if hour > 0:
1914
- time_msg += f"{hour} 小时"
1907
+ time_msg += f"{hour} {Settings.gettext('Hour')}"
1915
1908
  if min > 0:
1916
- time_msg += f"{min} "
1917
- time_msg += f"{math.ceil(sec)} "
1909
+ time_msg += f"{min} {Settings.gettext('Minute')}"
1910
+ time_msg += f"{math.ceil(sec)} {Settings.gettext('Second')}"
1918
1911
 
1919
- self.info("已经与服务器连接了 {}".format(time_msg))
1912
+ self.info(Settings.gettext("msg_connection_duration",time_msg))
1920
1913
 
1921
1914
  def handle_disconnect(self, code: CodeLine = None, *args, **kwargs):
1922
1915
  '''
@@ -2118,7 +2111,7 @@ class Session:
2118
2111
  self.writetobuffer(line, newline = True)
2119
2112
 
2120
2113
  else:
2121
- self.warning(f"当前session中不存在名称为 {args[0]} 的变量")
2114
+ self.warning(Settings.gettext("msg_no_object", args[0], Settings.gettext("variable")))
2122
2115
 
2123
2116
  elif len(args) == 2:
2124
2117
  val = None
@@ -2128,7 +2121,7 @@ class Session:
2128
2121
  val = args[1]
2129
2122
 
2130
2123
  self.setVariable(args[0], val)
2131
- self.info(f"成功设置变量 {args[0]} 值为 {val}")
2124
+ self.info(Settings.gettext("msg_object_value_setted", Settings.gettext("variable"), args[0], val.__repr__()))
2132
2125
 
2133
2126
  def handle_global(self, code: CodeLine = None, *args, **kwargs):
2134
2127
  '''
@@ -2170,7 +2163,7 @@ class Session:
2170
2163
  for line in lines:
2171
2164
  self.writetobuffer(line, newline = True)
2172
2165
  else:
2173
- self.info("全局空间不存在名称为 {} 的变量".format(var), "全局变量")
2166
+ self.warning(Settings.gettext("msg_no_global_object", var, Settings.gettext("variable")))
2174
2167
 
2175
2168
  elif len(args) == 2:
2176
2169
  val = None
@@ -2179,7 +2172,7 @@ class Session:
2179
2172
  except:
2180
2173
  val = args[1]
2181
2174
  self.application.set_globals(args[0], val)
2182
- self.info(f"成功设置全局变量 {args[0]} 值为 {val}")
2175
+ self.info(Settings.gettext("msg_object_value_setted", Settings.gettext("globalvar"), args[0], val.__repr__()))
2183
2176
 
2184
2177
  def _handle_objs(self, name: str, objs: dict, *args):
2185
2178
  if len(args) == 0:
@@ -2200,7 +2193,7 @@ class Session:
2200
2193
  obj = objs[args[0]]
2201
2194
  self.info(obj.__detailed__())
2202
2195
  else:
2203
- self.warning(f"当前session中不存在key为 {args[0]} 的 {name}, 请确认后重试.")
2196
+ self.warning(Settings.gettext("msg_object_not_exists", args[0], name))
2204
2197
 
2205
2198
  elif len(args) == 2:
2206
2199
  # 当第一个参数为对象obj名称时,对对象进行处理
@@ -2208,20 +2201,18 @@ class Session:
2208
2201
  obj = objs[args[0]]
2209
2202
  if args[1] == "on":
2210
2203
  obj.enabled = True
2211
- self.info(f"对象 {obj} 的使能状态已打开.")
2204
+ self.info(Settings.gettext("msg_object_enabled", obj.__repr__()))
2212
2205
  elif args[1] == "off":
2213
2206
  obj.enabled = False
2214
- self.info(f"对象 {obj} 的使能状态已禁用.")
2207
+ self.info(Settings.gettext("msg_object_disabled", obj.__repr__()))
2215
2208
  elif args[1] == "del":
2216
2209
  obj.enabled = False
2217
2210
  objs.pop(args[0])
2218
- self.info(f"对象 {obj} 已从会话中删除.")
2211
+ self.info(Settings.gettext("msg_object_deleted", obj.__repr__()))
2219
2212
  else:
2220
- self.error(f"#{name.lower()}命令的第二个参数仅能接受on/off/del")
2213
+ self.error(Settings.gettext("msg_invalid_param", name.lower()))
2221
2214
 
2222
- # 当第一个参数为不是对象obj名称时,创建新对象 (此处还有BUG,调试中)
2223
2215
  else:
2224
- #self.warning(f"当前session中不存在key为 {args[0]} 的 {name}, 请确认后重试.")
2225
2216
  pattern, code = args[0], args[1]
2226
2217
  if (len(pattern)>=2) and (pattern[0] == '{') and (pattern[-1] == '}'):
2227
2218
  pattern = pattern[1:-1]
@@ -2230,18 +2221,18 @@ class Session:
2230
2221
  if name == "alias":
2231
2222
  ali = SimpleAlias(self, pattern, code)
2232
2223
  self.addAlias(ali)
2233
- self.info("创建Alias {} 成功: {}".format(ali.id, ali.__repr__()))
2224
+ self.info(Settings.gettext("msg_alias_created", ali.id, ali.__repr__()))
2234
2225
  elif name == "trigger":
2235
2226
  tri = SimpleTrigger(self, pattern, code)
2236
2227
  self.addTrigger(tri)
2237
- self.info("创建Trigger {} 成功: {}".format(tri.id, tri.__repr__()))
2228
+ self.info(Settings.gettext("msg_trigger_created", tri.id, tri.__repr__()))
2238
2229
  elif name == "timer":
2239
2230
  if pattern.isnumeric():
2240
2231
  timeout = float(pattern)
2241
2232
  if timeout > 0:
2242
2233
  ti = SimpleTimer(self, code, timeout = timeout)
2243
2234
  self.addTimer(ti)
2244
- self.info("创建Timer {} 成功: {}".format(ti.id, ti.__repr__()))
2235
+ self.info(Settings.gettext("msg_timer_created", ti.id, ti.__repr__()))
2245
2236
 
2246
2237
  def handle_alias(self, code: CodeLine = None, *args, **kwargs):
2247
2238
  r"""
@@ -2432,26 +2423,26 @@ class Session:
2432
2423
  if cmd in ("ig", "ignore"):
2433
2424
  self._ignore = not self._ignore
2434
2425
  if self._ignore:
2435
- self.info("所有触发器使能已全局禁用。")
2426
+ self.info(Settings.gettext("msg_ignore_on"))
2436
2427
  else:
2437
- self.info("不再全局禁用所有触发器使能。")
2428
+ self.info(Settings.gettext("msg_ignore_off"))
2438
2429
  elif cmd == "t+":
2439
2430
  if code.length <= 2:
2440
- self.warning("#T+使能组使用不正确,正确使用示例: #t+ mygroup \n请使用#help ignore进行查询。")
2431
+ self.warning(Settings.gettext("msg_T_plus_incorrect"))
2441
2432
  return
2442
2433
 
2443
2434
  groupname = code.code[2]
2444
2435
  cnts = self.enableGroup(groupname)
2445
- self.info(f" {groupname} 中的 {cnts[0]} 个别名,{cnts[1]} 个触发器,{cnts[2]} 个命令,{cnts[3]} 个定时器,{cnts[4]} 个GMCP触发器均已使能。")
2436
+ self.info(Settings.gettext("msg_group_enabled", groupname, *cnts))
2446
2437
 
2447
2438
  elif cmd == "t-":
2448
2439
  if code.length <= 2:
2449
- self.warning("#T-禁用组使用不正确,正确使用示例: #t+ mygroup \n请使用#help ignore进行查询。")
2440
+ self.warning(Settings.gettext("msg_T_minus_incorrect"))
2450
2441
  return
2451
2442
 
2452
2443
  groupname = code.code[2]
2453
2444
  cnts = self.enableGroup(groupname, False)
2454
- self.info(f" {groupname} 中的 {cnts[0]} 个别名,{cnts[1]} 个触发器,{cnts[2]} 个命令,{cnts[3]} 个定时器,{cnts[4]} 个GMCP触发器均已禁用。")
2445
+ self.info(Settings.gettext("msg_group_disabled", groupname, *cnts))
2455
2446
 
2456
2447
  def handle_repeat(self, code: CodeLine = None, *args, **kwargs):
2457
2448
  '''
@@ -2468,7 +2459,7 @@ class Session:
2468
2459
  if self.connected and self.last_command:
2469
2460
  self.exec_command(self.last_command)
2470
2461
  else:
2471
- self.info("当前会话没有连接或没有键入过指令,repeat无效")
2462
+ self.info(Settings.gettext("msg_repeat_invalid"))
2472
2463
 
2473
2464
  async def handle_num(self, times, code: CodeLine = None, *args, **kwargs):
2474
2465
  '''
@@ -2547,7 +2538,7 @@ class Session:
2547
2538
  - ``#mess %line`` : 使用弹出窗口显示系统变量%line的值
2548
2539
  '''
2549
2540
 
2550
- title = "来自会话 {} 的消息".format(self.name)
2541
+ title = Settings.gettext("msg_window_title", self.name)
2551
2542
 
2552
2543
  new_cmd_text, new_code = code.expand(self, *args, **kwargs)
2553
2544
  index = new_cmd_text.find(" ")
@@ -2667,8 +2658,8 @@ class Session:
2667
2658
 
2668
2659
  except Exception as e:
2669
2660
  import traceback
2670
- self.error(f"模块 {module_name} 加载失败,异常为 {e}, 类型为 {type(e)}.")
2671
- self.error(f"异常追踪为: {traceback.format_exc()}")
2661
+ self.error(Settings.gettext("msg_module_load_fail", module_name, e, type(e)))
2662
+ self.error(Settings.gettext("msg_exception_traceback", traceback.format_exc()))
2672
2663
 
2673
2664
  def unload_module(self, module_names):
2674
2665
  """
@@ -2696,7 +2687,7 @@ class Session:
2696
2687
  mod.unload()
2697
2688
 
2698
2689
  else:
2699
- self.warning(f"指定模块名称 {module_name} 并未加载.")
2690
+ self.warning(Settings.gettext("msg_module_not_loaded", module_name))
2700
2691
 
2701
2692
  def reload_module(self, module_names = None):
2702
2693
  """
@@ -2711,7 +2702,7 @@ class Session:
2711
2702
  if isinstance(module, ModuleInfo):
2712
2703
  module.reload()
2713
2704
 
2714
- self.info(f"所有配置模块全部重新加载完成.")
2705
+ self.info(Settings.gettext("msg_all_module_reloaded"))
2715
2706
 
2716
2707
  elif isinstance(module_names, (list, tuple)):
2717
2708
  for mod in module_names:
@@ -2721,7 +2712,7 @@ class Session:
2721
2712
  if isinstance(module, ModuleInfo):
2722
2713
  module.reload()
2723
2714
  else:
2724
- self.warning(f"指定模块名称 {mod} 并未加载,无法重新加载.")
2715
+ self.warning(Settings.gettext("msg_module_not_loaded", mod))
2725
2716
 
2726
2717
  elif isinstance(module_names, str):
2727
2718
  if module_names in self._modules.keys():
@@ -2729,7 +2720,7 @@ class Session:
2729
2720
  if isinstance(module, ModuleInfo):
2730
2721
  module.reload()
2731
2722
  else:
2732
- self.warning(f"指定模块名称 {module_names} 并未加载,无法重新加载.")
2723
+ self.warning(Settings.gettext("msg_module_not_loaded", module_names))
2733
2724
 
2734
2725
 
2735
2726
  def handle_load(self, code: CodeLine = None, *args, **kwargs):
@@ -2811,9 +2802,9 @@ class Session:
2811
2802
 
2812
2803
  elif mod in self.plugins.keys():
2813
2804
  self.application.reload_plugin(self.plugins[mod])
2814
- self.info(f'插件 {mod} 重新加载完成!')
2805
+ self.info(Settings.gettext("msg_plugin_reloaded", mod))
2815
2806
  else:
2816
- self.warning(f"指定名称 {mod} 既未找到模块,也未找到插件,重新加载失败..")
2807
+ self.warning(Settings.gettext("msg_name_not_found", mod))
2817
2808
 
2818
2809
  def handle_unload(self, code: CodeLine = None, *args, **kwargs):
2819
2810
  '''
@@ -2870,9 +2861,9 @@ class Session:
2870
2861
  if len(args) == 0:
2871
2862
  count = len(self._modules.keys())
2872
2863
  if count == 0:
2873
- self.info("当前会话并未加载任何模块。", "MODULES")
2864
+ self.info(Settings.gettext("msg_no_module"), "MODULES")
2874
2865
  else:
2875
- self.info(f"当前会话已加载 {count} 个模块,包括(按加载顺序排列):{list(self._modules.keys())}", "MODULES")
2866
+ self.info(Settings.gettext("msg_module_list", count, list(self._modules.keys()).__repr__()))
2876
2867
 
2877
2868
  elif len(args) >= 1:
2878
2869
  modules = ",".join(args).split(",")
@@ -2881,12 +2872,12 @@ class Session:
2881
2872
  module = self._modules[mod]
2882
2873
  if isinstance(module, ModuleInfo):
2883
2874
  if module.ismainmodule:
2884
- self.info(f"模块 {module.name} 中包含的配置包括: {', '.join(module.config.keys())}")
2875
+ self.info(Settings.gettext("msg_module_configurations", module.name, ",".join(module.config.keys())))
2885
2876
  else:
2886
- self.info(f"模块 {module.name} 为子模块,不包含配置。")
2877
+ self.info(Settings.gettext("msg_submodule_no_config"))
2887
2878
 
2888
2879
  else:
2889
- self.info(f"本会话中不存在指定名称 {mod} 的模块,可能是尚未加载到本会话中")
2880
+ self.info(Settings.gettext("msg_module_not_loaded", mod))
2890
2881
 
2891
2882
  def handle_reset(self, code: CodeLine = None, *args, **kwargs):
2892
2883
  '''
@@ -2937,7 +2928,7 @@ class Session:
2937
2928
  saved.pop("%raw", None)
2938
2929
  saved.pop("%copy", None)
2939
2930
  pickle.dump(saved, fp)
2940
- self.info(f"会话变量信息已保存到{file}")
2931
+ self.info(Settings.gettext("msg_variables_saved", file))
2941
2932
 
2942
2933
  def handle_clear(self, code: CodeLine = None, *args, **kwargs):
2943
2934
  '''
@@ -3010,18 +3001,16 @@ class Session:
3010
3001
  triggered_enabled += 1
3011
3002
  if not block:
3012
3003
  triggered += 1
3013
- # info_enabled.append(f" {Settings.INFO_STYLE}{tri.__detailed__()} 正常触发。{Settings.CLR_STYLE}")
3014
- # info_enabled.append(f" {Settings.INFO_STYLE}捕获:{state.wildcards}{Settings.CLR_STYLE}")
3015
- info_enabled.append(f" {tri.__detailed__()} 正常触发。")
3016
- info_enabled.append(f" 捕获:{state.wildcards}")
3004
+ info_enabled.append(Settings.gettext("msg_tri_triggered", tri.__detailed__()))
3005
+ info_enabled.append(Settings.gettext("msg_tri_wildcards", state.wildcards))
3017
3006
 
3018
3007
  if not tri.keepEval: # 非持续匹配的trigger,匹配成功后停止检测后续Trigger
3019
- info_enabled.append(f" {Settings.WARN_STYLE}该触发器未开启keepEval, 会阻止后续触发器。{Settings.CLR_STYLE}")
3020
- #info_enabled.append(f" 该触发器未开启keepEval, 会阻止后续触发器。")
3008
+ info_enabled.append(Settings.gettext("msg_tri_prevent", Settings.WARN_STYLE, Settings.CLR_STYLE))
3009
+ #info_enabled.append(f" {Settings.WARN_STYLE}该触发器未开启keepEval, 会阻止后续触发器。{Settings.CLR_STYLE}")
3021
3010
  block = True
3022
3011
  else:
3023
- info_enabled.append(f" {Settings.WARN_STYLE}{tri.__detailed__()} 可以触发,但由于优先级与keepEval设定,触发器不会触发。{Settings.CLR_STYLE}")
3024
- #info_enabled.append(f" {tri.__detailed__()} 可以触发,但由于优先级与keepEval设定,触发器不会触发。")
3012
+ info_enabled.append(Settings.gettext("msg_tri_ignored", tri.__detailed__(), Settings.WARN_STYLE, Settings.CLR_STYLE))
3013
+ # info_enabled.append(f" {Settings.WARN_STYLE}{tri.__detailed__()} 可以触发,但由于优先级与keepEval设定,触发器不会触发。{Settings.CLR_STYLE}")
3025
3014
 
3026
3015
 
3027
3016
  for tri in tris_disabled:
@@ -3032,37 +3021,47 @@ class Session:
3032
3021
 
3033
3022
  if state.result == Trigger.SUCCESS:
3034
3023
  triggered_disabled += 1
3035
- # info_disabled.append(f" {Settings.INFO_STYLE}{tri.__detailed__()} 可以匹配触发。{Settings.CLR_STYLE}")
3036
- info_disabled.append(f" {tri.__detailed__()} 可以匹配触发。")
3024
+ #info_disabled.append(f" {tri.__detailed__()} 可以匹配触发。")
3025
+ info_disabled.append(Settings.gettext("msg_tri_matched", tri.__detailed__()))
3037
3026
 
3038
3027
  if triggered_enabled + triggered_disabled == 0:
3039
3028
  info_all.append("")
3040
3029
 
3041
3030
  if triggered_enabled == 0:
3042
- info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,没有可以触发的。")
3031
+ info_enabled.insert(0, Settings.gettext("msg_enabled_summary_0", Settings.INFO_STYLE))
3032
+ #info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,没有可以触发的。")
3043
3033
  elif triggered < triggered_enabled:
3044
- info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,共有 {triggered_enabled} 个可以触发,实际触发 {triggered} 个,另有 {triggered_enabled - triggered} 个由于 keepEval 原因实际不会触发。")
3034
+ info_enabled.insert(0, Settings.gettext("msg_enabled_summary_1", Settings.INFO_STYLE, triggered_enabled, triggered, triggered_enabled - triggered))
3035
+ #info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,共有 {triggered_enabled} 个可以触发,实际触发 {triggered} 个,另有 {triggered_enabled - triggered} 个由于 keepEval 原因实际不会触发。")
3045
3036
  else:
3046
- info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,共有 {triggered_enabled} 个全部可以被正常触发。")
3037
+ info_enabled.insert(0, Settings.gettext("msg_enabled_summary_2", Settings.INFO_STYLE, triggered_enabled))
3038
+ #info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,共有 {triggered_enabled} 个全部可以被正常触发。")
3047
3039
 
3048
3040
  if triggered_disabled > 0:
3049
- info_disabled.insert(0, f"{Settings.INFO_STYLE} 未使能的触发器中,共有 {triggered_disabled} 个可以匹配。")
3041
+ info_disabled.insert(0, Settings.gettext("msg_disabled_summary_0", Settings.INFO_STYLE, triggered_disabled))
3042
+ #info_disabled.insert(0, f"{Settings.INFO_STYLE} 未使能的触发器中,共有 {triggered_disabled} 个可以匹配。")
3050
3043
  else:
3051
- info_disabled.insert(0, f"{Settings.INFO_STYLE} 未使能触发器,没有可以匹配的。")
3044
+ info_disabled.insert(0, Settings.gettext("msg_disabled_summary_1", Settings.INFO_STYLE))
3045
+ #info_disabled.insert(0, f"{Settings.INFO_STYLE} 未使能触发器,没有可以匹配的。")
3052
3046
 
3053
3047
  info_all.append("")
3054
3048
  if triggered_enabled + triggered_disabled == 0:
3055
3049
  #info_all.append(f"PYMUD 触发器测试: {'响应模式' if docallback else '测试模式'}")
3056
- info_all.append(f" 测试内容: {line}")
3057
- info_all.append(f" 测试结果: 没有可以匹配的触发器。")
3050
+ info_all.append(Settings.gettext("msg_test_summary_0", line))
3051
+ info_all.append(Settings.gettext("msg_test_summary_1"))
3052
+ #info_all.append(f" 测试内容: {line}")
3053
+ #info_all.append(f" 测试结果: 没有可以匹配的触发器。")
3058
3054
  else:
3059
3055
  #info_all.append(f"PYMUD 触发器测试: {'响应模式' if docallback else '测试模式'}")
3060
- info_all.append(f" 测试内容: {line}")
3061
- info_all.append(f" 测试结果: 有{triggered}个触发器可以被正常触发,一共有{triggered_enabled + triggered_disabled}个满足匹配触发要求。")
3056
+ info_all.append(Settings.gettext("msg_test_summary_0", line))
3057
+ info_all.append(Settings.gettext("msg_test_summary_2", triggered, triggered_enabled + triggered_disabled))
3058
+ #info_all.append(f" 测试内容: {line}")
3059
+ #info_all.append(f" 测试结果: 有{triggered}个触发器可以被正常触发,一共有{triggered_enabled + triggered_disabled}个满足匹配触发要求。")
3062
3060
  info_all.extend(info_enabled)
3063
3061
  info_all.extend(info_disabled)
3064
3062
 
3065
- title = f"触发器测试 - {'响应模式' if docallback else '测试模式'}"
3063
+ title = Settings.gettext("msg_test_title", Settings.gettext("msg_triggered_mode") if docallback else Settings.gettext("msg_matched_mode"))
3064
+ #title = f"触发器测试 - {'响应模式' if docallback else '测试模式'}"
3066
3065
  self.info("\n".join(info_all), title)
3067
3066
  #self.info("PYMUD 触发器测试 完毕")
3068
3067
 
@@ -3084,17 +3083,21 @@ class Session:
3084
3083
  if len(args) == 0:
3085
3084
  count = len(self.plugins.keys())
3086
3085
  if count == 0:
3087
- self.info("PYMUD当前并未加载任何插件。", "PLUGINS")
3086
+ self.info(Settings.gettext("msg_no_plugins"), "PLUGINS")
3087
+ #self.info("PYMUD当前并未加载任何插件。", "PLUGINS")
3088
3088
  else:
3089
- self.info(f"PYMUD当前已加载 {count} 个插件,分别为:", "PLUGINS")
3089
+ self.info(Settings.gettext("msg_plugins_list", count), "PLUGINS")
3090
+ #self.info(f"PYMUD当前已加载 {count} 个插件,分别为:", "PLUGINS")
3090
3091
  for name, plugin in self.plugins.items():
3091
- self.info(f"{plugin.desc['DESCRIPTION']}, 版本 {plugin.desc['VERSION']} 作者 {plugin.desc['AUTHOR']} 发布日期 {plugin.desc['RELEASE_DATE']}", f"PLUGIN {name}")
3092
+ self.info(Settings.gettext("msg_plugins_info", plugin.desc['DESCRIPTION'], plugin.desc['VERSION'], plugin.desc['AUTHOR'], plugin.desc['RELEASE_DATE']), f"PLUGIN {name}")
3093
+ #self.info(f"{plugin.desc['DESCRIPTION']}, 版本 {plugin.desc['VERSION']} 作者 {plugin.desc['AUTHOR']} 发布日期 {plugin.desc['RELEASE_DATE']}", f"PLUGIN {name}")
3092
3094
 
3093
3095
  elif len(args) == 1:
3094
3096
  name = args[0]
3095
3097
  if name in self.plugins.keys():
3096
3098
  plugin = self.plugins[name]
3097
- self.info(f"{plugin.desc['DESCRIPTION']}, 版本 {plugin.desc['VERSION']} 作者 {plugin.desc['AUTHOR']} 发布日期 {plugin.desc['RELEASE_DATE']}", f"PLUGIN {name}")
3099
+ self.info(Settings.gettext("msg_plugins_info", plugin.desc['DESCRIPTION'], plugin.desc['VERSION'], plugin.desc['AUTHOR'], plugin.desc['RELEASE_DATE']), f"PLUGIN {name}")
3100
+ #self.info(f"{plugin.desc['DESCRIPTION']}, 版本 {plugin.desc['VERSION']} 作者 {plugin.desc['AUTHOR']} 发布日期 {plugin.desc['RELEASE_DATE']}", f"PLUGIN {name}")
3098
3101
  self.writetobuffer(plugin.help, True)
3099
3102
 
3100
3103
  def handle_replace(self, code: CodeLine = None, *args, **kwargs):
@@ -3155,7 +3158,7 @@ class Session:
3155
3158
  try:
3156
3159
  exec(code.commandText[4:])
3157
3160
  except Exception as e:
3158
- self.error(f"Python执行错误:{e}")
3161
+ self.error(Settings.gettext("msg_py_exception", e))
3159
3162
 
3160
3163
  def handle_info(self, code: CodeLine = None, *args, **kwargs):
3161
3164
  '''
@@ -3205,21 +3208,13 @@ class Session:
3205
3208
  new_text, new_code = code.expand(self, *args, **kwargs)
3206
3209
  self.error(new_text[7:])
3207
3210
 
3208
- def info2(self, msg, title = "消息", style = Settings.INFO_STYLE):
3211
+ def info2(self, msg, title = None, style = Settings.INFO_STYLE):
3212
+ title = title or Settings.gettext("title_msg")
3209
3213
  msg = f"{msg}"
3210
3214
 
3211
- # if Settings.client["newline"] in msg:
3212
- # new_lines = list()
3213
- # msg_lines = msg.split(Settings.client["newline"])
3214
- # for line in msg_lines:
3215
- # new_lines.append("{}{}".format(style, line))
3216
-
3217
- # msg = Settings.client["newline"].join(new_lines)
3218
-
3219
- # 将颜色跨行显示移动到了MudFormatProcessor中,此处无需再处理(不行,还得恢复)
3220
3215
  self.writetobuffer("{}〔{}〕{}{}".format(style, title, msg, Settings.CLR_STYLE), newline = True)
3221
3216
 
3222
- def info(self, msg, title = "提示", style = Settings.INFO_STYLE):
3217
+ def info(self, msg, title = None, style = Settings.INFO_STYLE):
3223
3218
  """
3224
3219
  使用默认的INFO_STYLE(绿色)输出信息,并自动换行。信息格式类似 [title] msg
3225
3220
 
@@ -3227,9 +3222,10 @@ class Session:
3227
3222
  :param title: 要显示在前面的标题,不指定时默认为 PYMUD INFO
3228
3223
  :param style: 要输出信息的格式(ANSI), 默认为 INFO_STYLE, \x1b[32m
3229
3224
  """
3225
+ title = title or Settings.gettext("title_info")
3230
3226
  self.info2(msg, title, style)
3231
3227
 
3232
- def warning(self, msg, title = "警告", style = Settings.WARN_STYLE):
3228
+ def warning(self, msg, title = None, style = Settings.WARN_STYLE):
3233
3229
  """
3234
3230
  使用默认的WARN_STYLE(黄色)输出信息,并自动换行。信息格式类似 [title] msg
3235
3231
 
@@ -3237,9 +3233,10 @@ class Session:
3237
3233
  :param title: 要显示在前面的标题,不指定时默认为 PYMUD WARNING
3238
3234
  :param style: 要输出信息的格式(ANSI), 默认为 WARN_STYLE, \x1b[33m
3239
3235
  """
3236
+ title = title or Settings.gettext("title_warning")
3240
3237
  self.info2(msg, title, style)
3241
3238
 
3242
- def error(self, msg, title = "错误", style = Settings.ERR_STYLE):
3239
+ def error(self, msg, title = None, style = Settings.ERR_STYLE):
3243
3240
  """
3244
3241
  使用默认的ERR_STYLE(红色)输出信息,并自动换行。信息格式类似 [title] msg
3245
3242
 
@@ -3247,6 +3244,7 @@ class Session:
3247
3244
  :param title: 要显示在前面的标题,不指定时默认为 PYMUD ERROR
3248
3245
  :param style: 要输出信息的格式(ANSI), 默认为 ERR_STYLE, \x1b[31m
3249
3246
  """
3247
+ title = title or Settings.gettext("title_error")
3250
3248
  self.info2(msg, title, style)
3251
3249
 
3252
3250
  def handle_log(self, code: CodeLine = None, *args, **kwargs):
@@ -3292,16 +3290,21 @@ class Session:
3292
3290
  if len(args) == 0:
3293
3291
  session_loggers = set(self._loggers.keys())
3294
3292
  app_loggers = set(self.application.loggers.keys()).difference(session_loggers)
3295
- self.info("本会话中的记录器情况:")
3293
+
3294
+ self.info(Settings.gettext("msg_log_title"))
3295
+ #self.info("本会话中的记录器情况:")
3296
3296
  for name in session_loggers:
3297
3297
  logger = self.application.loggers[name]
3298
- self.info(f"记录器 {logger.name}, 当前状态: {'开启' if logger.enabled else '关闭'}, 文件模式: {logger.mode}, 记录模式: {'ANSI' if logger.raw else '纯文本'}")
3298
+ self.info(f"{Settings.gettext('logger')} {logger.name}, {Settings.gettext('logger_status')}: {Settings.gettext('enabled') if logger.enabled else Settings.gettext('disabled')}, {Settings.gettext('file_mode')}: {logger.mode}, {Settings.gettext('logger_mode')}: {Settings.gettext('ANSI') if logger.raw else Settings.gettext('plain_text')}")
3299
+ #self.info(f"记录器 {logger.name}, 当前状态: {'开启' if logger.enabled else '关闭'}, 文件模式: {logger.mode}, 记录模式: {'ANSI' if logger.raw else '纯文本'}")
3299
3300
 
3300
3301
  if len(app_loggers) > 0:
3301
- self.info("本应用其他会话中的记录器情况:")
3302
+ self.info(Settings.gettext("msg_log_title2"))
3303
+ #self.info("本应用其他会话中的记录器情况:")
3302
3304
  for name in app_loggers:
3303
3305
  logger = self.application.loggers[name]
3304
- self.info(f"记录器 {logger.name}, 当前状态: {'开启' if logger.enabled else '关闭'}, 文件模式: {logger.mode}, 记录模式: {'ANSI' if logger.raw else '纯文本'}")
3306
+ self.info(f"{Settings.gettext('logger')} {logger.name}, {Settings.gettext('logger_status')}: {Settings.gettext('enabled') if logger.enabled else Settings.gettext('disabled')}, {Settings.gettext('file_mode')}: {logger.mode}, {Settings.gettext('logger_mode')}: {Settings.gettext('ANSI') if logger.raw else Settings.gettext('plain_text')}")
3307
+ #self.info(f"记录器 {logger.name}, 当前状态: {'开启' if logger.enabled else '关闭'}, 文件模式: {logger.mode}, 记录模式: {'ANSI' if logger.raw else '纯文本'}")
3305
3308
 
3306
3309
  else:
3307
3310
  name = self.name
@@ -3311,24 +3314,30 @@ class Session:
3311
3314
  if (args[0] == "start"):
3312
3315
  if "-n" in args:
3313
3316
  mode = "n"
3314
- mode_name = '新建'
3317
+ #mode_name = '新建'
3318
+ mode_name = Settings.gettext("filemode_new")
3315
3319
  elif "-w" in args:
3316
3320
  mode = "w"
3317
- mode_name = '覆写'
3321
+ #mode_name = '覆写'
3322
+ mode_name = Settings.gettext("filemode_overwrite")
3318
3323
  else:
3319
3324
  mode = "a"
3320
- mode_name = '添加'
3325
+ #mode_name = '追加'
3326
+ mode_name = Settings.gettext("filemode_append")
3321
3327
 
3322
3328
  raw = True if "-r" in args else False
3323
- raw_name = '原始ANSI' if raw else '纯文本'
3329
+ #raw_name = '原始ANSI' if raw else '纯文本'
3330
+ raw_name = Settings.gettext("ANSI") if raw else Settings.gettext("plain_text")
3324
3331
 
3325
3332
  logger = self.getLogger(name = name, mode = mode, raw = raw)
3326
3333
  logger.enabled = True
3327
3334
 
3328
- self.info(f"{datetime.datetime.now()}: 记录器{name}以{mode_name}文件模式以及{raw_name}记录模式开启。")
3335
+ #self.info(f"{datetime.datetime.now()}: 记录器{name}以{mode_name}文件模式以及{raw_name}记录模式开启。")
3336
+ self.info(Settings.gettext("msg_logger_enabled", datetime.datetime.now(), name, mode_name, raw_name))
3329
3337
 
3330
3338
  elif (args[0] == "stop"):
3331
- self.info(f"{datetime.datetime.now()}: 记录器{name}记录已关闭。")
3339
+ #self.info(f"{datetime.datetime.now()}: 记录器{name}记录已关闭。")
3340
+ self.info(Settings.gettext("msg_logger_disabled", datetime.datetime.now(), name))
3332
3341
  self.log.enabled = False
3333
3342
 
3334
3343
  elif (args[0] == "show"):
@@ -3345,7 +3354,7 @@ class Session:
3345
3354
  self.application.logFileShown = filepath
3346
3355
  self.application.showLogInTab()
3347
3356
  else:
3348
- self.warning(f'指定记录文件 {file} 不存在!')
3357
+ self.warning(Settings.gettext("msg_logfile_not_exists", file))
3349
3358
 
3350
3359
  else:
3351
3360
  self.application.show_logSelectDialog()