diff --git a/Difficult_Rocket/client/__init__.py b/Difficult_Rocket/client/__init__.py index 1846572..6931278 100644 --- a/Difficult_Rocket/client/__init__.py +++ b/Difficult_Rocket/client/__init__.py @@ -89,11 +89,11 @@ class Client: resizable=tools.format_bool(self.config['window']['resizable']), visible=tools.format_bool(self.config['window']['visible']), file_drops=file_drop) - self.logger.info(tr.lang('client', 'setup.done')) + self.logger.info(tr().client.setup.done) end_time = time.time_ns() self.use_time = end_time - start_time - self.logger.info(tr.lang('client', 'setup.use_time').format(Decimal(self.use_time) / 1000000000)) - self.logger.debug(tr.lang('client', 'setup.use_time_ns').format(self.use_time)) + self.logger.info(tr().client.setup.use_time.format(Decimal(self.use_time) / 1000000000)) + self.logger.debug(tr().client.setup.use_time_ns.format(self.use_time)) def start(self): DR_runtime.running = True @@ -188,13 +188,13 @@ class ClientWindow(Window): # 设置刷新率 pyglet.clock.schedule_interval(self.draw_update, float(self.SPF)) # 完成设置后的信息输出 - self.logger.info(tr.lang('window', 'setup.done')) - self.logger.info(tr.lang('window', 'os.pid_is').format(os.getpid(), os.getppid())) + self.logger.info(tr().window.setup.done()) + self.logger.info(tr().window.os.pid_is().format(os.getpid(), os.getppid())) end_time = time.time_ns() self.use_time = end_time - start_time DR_runtime.client_setup_cause_ns = self.use_time - self.logger.info(tr.lang('window', 'setup.use_time').format(Decimal(self.use_time) / 1000000000)) - self.logger.debug(tr.lang('window', 'setup.use_time_ns').format(self.use_time)) + self.logger.info(tr().window.setup.use_time().format(Decimal(self.use_time) / 1000000000)) + self.logger.debug(tr().window.setup.use_time_ns().format(self.use_time)) self.count = 0 def setup(self): @@ -295,7 +295,7 @@ class ClientWindow(Window): @_call_screen_after def on_command(self, command: line.CommandText): - self.logger.info(tr.lang('window', 'command.text').format(command)) + self.logger.info(tr().window.command.text.format(command)) if command.re_match('stop'): # self.dispatch_event('on_exit') pyglet.app.platform_event_loop.stop() @@ -316,7 +316,7 @@ class ClientWindow(Window): @_call_screen_after def on_message(self, message: line.CommandLine.text): - self.logger.info(tr.lang('window', 'message.text').format(message)) + self.logger.info(tr().window.message.text.format(message)) """ keyboard and mouse input @@ -357,16 +357,16 @@ class ClientWindow(Window): @_call_screen_after def on_mouse_press(self, x, y, button, modifiers) -> None: self.logger.debug( - tr.lang('window', 'mouse.press').format( - [x, y], tr.lang('window', f'mouse.{mouse.buttons_string(button)}') + tr().window.mouse.press().format( + [x, y], tr().window.mouse[mouse.buttons_string(button)]() ) ) @_call_screen_after def on_mouse_release(self, x, y, button, modifiers) -> None: self.logger.debug( - tr.lang('window', 'mouse.release').format( - [x, y], tr.lang('window', f'mouse.{mouse.buttons_string(button)}') + tr().window.mouse.release().format( + [x, y], tr().window.mouse[mouse.buttons_string(button)]() ) ) @@ -377,12 +377,12 @@ class ClientWindow(Window): key.MOD_SCROLLLOCK)): self.dispatch_event('on_close') self.logger.debug( - tr.lang('window', 'key.press').format(key.symbol_string(symbol), key.modifiers_string(modifiers))) + tr().window.key.press().format(key.symbol_string(symbol), key.modifiers_string(modifiers))) @_call_screen_after def on_key_release(self, symbol, modifiers) -> None: self.logger.debug( - tr.lang('window', 'key.release').format(key.symbol_string(symbol), key.modifiers_string(modifiers))) + tr().window.key.release().format(key.symbol_string(symbol), key.modifiers_string(modifiers))) @_call_screen_after def on_file_drop(self, x, y, paths): @@ -391,30 +391,30 @@ class ClientWindow(Window): @_call_screen_after def on_text(self, text): if text == '\r': - self.logger.debug(tr.lang('window', 'text.new_line')) + self.logger.debug(tr().window.text.new_line()) else: - self.logger.debug(tr.lang('window', 'text.input').format(text)) + self.logger.debug(tr().window.text.input().format(text)) if text == 't': self.input_box.enabled = True @_call_screen_after def on_text_motion(self, motion): motion_string = key.motion_string(motion) - self.logger.debug(tr.lang('window', 'text.motion').format(motion_string)) + self.logger.debug(tr().window.text.motion.format(motion_string)()) @_call_screen_after def on_text_motion_select(self, motion): motion_string = key.motion_string(motion) - self.logger.debug(tr.lang('window', 'text.motion_select').format(motion_string)) + self.logger.debug(tr().window.text.motion_select.format(motion_string)()) @_call_screen_before def on_close(self, source: str = 'window') -> None: - self.logger.info(tr.lang('window', 'game.stop_get').format(tr.lang('window', f'game.{source}_stop'))) - self.logger.info(tr.lang('window', 'game.stop')) + self.logger.info(tr().window.game.stop_get().format(tr().game[source])) + self.logger.info(tr().window.game.stop()) self.fps_log.check_list = False DR_runtime.running = False if self.run_input: self.run_input = False self.save_info() super().on_close() - self.logger.info(tr.lang('window', 'game.end')) + self.logger.info(tr().window.game.end()) diff --git a/Difficult_Rocket/main.py b/Difficult_Rocket/main.py index 774ceae..f64bdb0 100644 --- a/Difficult_Rocket/main.py +++ b/Difficult_Rocket/main.py @@ -49,8 +49,8 @@ class Game: os.mkdir('logs') logging.config.dictConfig(log_config) self.logger = logging.getLogger('main') - self.logger.info(tr['main']['logger.mkdir']) - self.logger.info(tr['main']['logger.created']) + self.logger.info(tr().main.logger.mkdir()) + self.logger.info(tr().main.logger.created()) # version check self.python_version_check() self.setup() @@ -60,12 +60,12 @@ class Game: self.server = server.Server(net_mode='local') def python_version_check(self) -> None: # best 3.8+ and write at 3.8.10 - self.logger.info(f"{tr().main['version.now_on']} {self.on_python_v}") + self.logger.info(f"{tr().main.version.now_on()} {self.on_python_v}") if self.on_python_v_info[0] == 2: - self.logger.critical(f"{tr['main']['version.need3+']}") - raise SystemError(f"{tr['main']['version.need3+']}") + self.logger.critical(tr().main.version.need3p()) + raise SystemError(tr().main.version.need3p()) elif self.on_python_v_info[1] < 8: - warning = tools.name_handler(tr['main']['version.best3.8+']) + warning = tools.name_handler(tr.main.version.best38p()) self.logger.warning(warning) # @new_thread('main') diff --git a/Difficult_Rocket/server/__init__.py b/Difficult_Rocket/server/__init__.py index 3d2964e..8dfcce4 100644 --- a/Difficult_Rocket/server/__init__.py +++ b/Difficult_Rocket/server/__init__.py @@ -37,7 +37,7 @@ class Server: self.config = tools.load_file('configs/main.toml') # self.dev = Dev # self.net_mode = net_mode - self.logger.info(tr.lang('server', 'setup.done')) + self.logger.info(tr().server.setup.done()) def run(self): - self.logger.info(tr.lang('server', 'os.pid_is').format(os.getpid(), os.getppid())) + self.logger.info(tr().server.os.pid_is().format(os.getpid(), os.getppid())) diff --git a/Difficult_Rocket/utils/translate.py b/Difficult_Rocket/utils/translate.py index 6cf240f..eb839a8 100644 --- a/Difficult_Rocket/utils/translate.py +++ b/Difficult_Rocket/utils/translate.py @@ -24,7 +24,7 @@ from Difficult_Rocket.exception.language import * @dataclass class TranslateConfig: raise_error: bool = False # 引用错误时抛出错误 - crack_normal: bool = False # 出现错误引用后 将引用到的正确内容替换为引用路径 + crack_normal: bool = True # 出现错误引用后 将引用到的正确内容替换为引用路径 insert_crack: bool = True # 加入引用的错误内容 is_final: bool = False # 是否为最终内容 keep_get: bool = True # 引用错误后是否继续引用 @@ -112,18 +112,18 @@ class Translates: if self.config.always_copy: return Translates(value=cache_value, config=self.config, get_list=self.get_list) self.value = cache_value - return self except (KeyError, TypeError, AttributeError) as e: self.get_list.append((False, item)) self._raise_no_value(e, item) if not self.config.keep_get: self.config.is_final = True + return self - def __call__(self, *args, **kwargs): + def __call__(self, *args, **kwargs) -> Union[dict, list, int, str]: if len(self.get_list) == 0: - return self + return self.__str__() if any([x[0] for x in self.get_list]): - return + return self.__str__() def copy(self): return self.__copy__() @@ -132,12 +132,14 @@ class Translates: return Translates(value=self.value, config=self.config, get_list=self.get_list) def __getattr__(self, item: key_type) -> "Translates": - if self.config.is_final and hasattr(self.value, item): + if (self.config.is_final or any(x[0] for x in self.get_list)) and hasattr(self.value, item): return getattr(self.value, item) # 实际上我这里完全不需要处理正常需求,因为 __getattribute__ 已经帮我处理过了 return self.__getitem__(item) def __str__(self): + if not any(not x[0] for x in self.get_list): + return self.value if self.config.crack_normal: return f'{".".join(f"{gets[1]}({gets[0]})" for gets in self.get_list)}' elif self.config.insert_crack: @@ -172,7 +174,7 @@ class Tr: else: return self.default_translate[items] - def lang(self, *items): + def lang(self, *items) -> Translates: cache = self.translates_cache.copy() for item in items: cache = cache[item] @@ -255,4 +257,4 @@ if __name__ == '__main__': tr_ = Tr() tr_().window.xxxx -tr = Tr() +tr = Tr() \ No newline at end of file diff --git a/configs/lang/en-us.toml b/configs/lang/en-us.toml index 4d105bf..a889992 100644 --- a/configs/lang/en-us.toml +++ b/configs/lang/en-us.toml @@ -43,9 +43,6 @@ libs.local = "using local pyglet, version: {}" libs.outer = "using global pyglet, version: {}\n(may cause bug)" fonts.found = "found fonts in font lib: {}" fonts.load = "loading fonts: {}" -game.input_stop = "console" -game.command_stop = "in game commands" -game.window_stop = "window" game.stop_get = "Received closing commands from {}, game closing" game.stop = "game closing, saving data……" game.end = "game closed" @@ -55,4 +52,6 @@ setup.done = "Server loaded " os.pid_is = "Server PID: {} PPID: {}" [game] - +input = "console" +command = "in game commands" +window = "window" diff --git a/configs/lang/zh-CN.toml b/configs/lang/zh-CN.toml index 7eadcab..91cf91f 100644 --- a/configs/lang/zh-CN.toml +++ b/configs/lang/zh-CN.toml @@ -43,9 +43,6 @@ libs.local = "正在使用本地 pyglet 库 版本为: {}" libs.outer = "正在使用全局 pyglet 库 版本为: {}\n(可能会造成bug,因为本地库版本为2.0dev9)" fonts.found = "在字体列表中找到以下字体库: {}" fonts.load = "正在加载字体: {}" -game.input_stop = "控制台" -game.command_stop = "游戏内命令行" -game.window_stop = "窗口" game.stop_get = "从{}传入关闭指令,关闭游戏中" game.stop = "游戏正在关闭,保存数据中···" game.end = "游戏已经关闭" @@ -55,4 +52,6 @@ setup.done = "服务端载入完成" os.pid_is = "服务端 PID: {} PPID: {}" [game] - +input = "控制台" +command = "游戏内命令行" +window = "窗口"