diff --git a/dist/langtool.py b/dist/langtool.py old mode 100644 new mode 100755 index 50792cb76..cefff8886 --- a/dist/langtool.py +++ b/dist/langtool.py @@ -1,104 +1,208 @@ +#!/usr/bin/env python3 from pathlib import Path -import sys +import argparse import json +# This fixes a CJK full-width character input issue +# which makes left halves of deleted characters displayed on screen +# pylint: disable=unused-import +import re +import readline + DEFAULT_LANG = "en_US" +DEFAULT_LANG_PATH = "plugins/*/romfs/lang/" INVALID_TRANSLATION = "" -def handle_missing_key(command, lang_data, key, value): - if command == "check": - print(f"Error: Translation {lang_data['code']} is missing translation for key '{key}'") - exit(2) - elif command == "translate" or command == "create": - print(f"Key \033[1m'{key}': '{value}'\033[0m is missing in translation '{lang_data['code']}'") - new_value = input("Enter translation: ") - lang_data["translations"][key] = new_value - elif command == "update": - lang_data["translations"][key] = INVALID_TRANSLATION - - def main(): - if len(sys.argv) < 3: - print(f"Usage: {Path(sys.argv[0]).name} ") + parser = argparse.ArgumentParser( + prog="langtool", + description="ImHex translate tool", + ) + parser.add_argument( + "command", + choices=[ + "check", + "translate", + "update", + "create", + "retranslate", + "untranslate", + "fmtzh", + ], + ) + parser.add_argument( + "-c", "--langdir", default=DEFAULT_LANG_PATH, help="Language folder glob" + ) + parser.add_argument("-l", "--lang", default="", help="Language to translate") + parser.add_argument( + "-r", "--reflang", default="", help="Language for reference when translating" + ) + parser.add_argument( + "-k", "--keys", help="Keys to re-translate (only in re/untranslate mode)" + ) + args = parser.parse_args() + + command = args.command + lang = args.lang + + print(f"Running in {command} mode") + lang_files_glob = f"{lang}.json" if lang != "" else "*.json" + + lang_folders = set(Path(".").glob(args.langdir)) + if len(lang_folders) == 0: + print(f"Error: {args.langdir} matches nothing") return 1 - command = sys.argv[1] - if command not in ["check", "translate", "update", "create"]: - print(f"Unknown command: {command}") - return 1 + for lang_folder in lang_folders: + if not lang_folder.is_dir(): + print(f"Error: {lang_folder} is not a folder") + return 1 - print(f"Using langtool in {command} mode") + default_lang_data = {} + default_lang_path = lang_folder / Path(DEFAULT_LANG + ".json") + if not default_lang_path.exists(): + print( + f"Error: Default language file {default_lang_path} does not exist in {lang_folder}" + ) + return 1 + with default_lang_path.open("r", encoding="utf-8") as file: + default_lang_data = json.load(file) - lang_folder_path = Path(sys.argv[2]) - if not lang_folder_path.exists(): - print(f"Error: {lang_folder_path} does not exist") - return 1 - - if not lang_folder_path.is_dir(): - print(f"Error: {lang_folder_path} is not a folder") - return 1 - - lang = sys.argv[3] if len(sys.argv) > 3 else "" - - print(f"Processing language files in {lang_folder_path}...") - - default_lang_file_path = lang_folder_path / Path(DEFAULT_LANG + ".json") - if not default_lang_file_path.exists(): - print(f"Error: Default language file {default_lang_file_path} does not exist") - return 1 - - print(f"Using file '{default_lang_file_path.name}' as template language file") - - with default_lang_file_path.open("r", encoding="utf-8") as default_lang_file: - default_lang_data = json.load(default_lang_file) + reference_lang_data = None + reference_lang_path = lang_folder / Path(args.reflang + ".json") + if reference_lang_path.exists(): + with reference_lang_path.open("r", encoding="utf-8") as file: + reference_lang_data = json.load(file) if command == "create" and lang != "": - lang_file_path = lang_folder_path / Path(lang + ".json") + lang_file_path = lang_folder / Path(lang + ".json") if lang_file_path.exists(): - print(f"Error: Language file {lang_file_path} already exists") - return 1 + continue - print(f"Creating new language file '{lang_file_path.name}'") + exist_lang_data = None + for lang_folder1 in lang_folders: + lang_file_path1 = lang_folder1 / Path(lang + ".json") + if lang_file_path1.exists(): + with lang_file_path1.open("r", encoding="utf-8") as file: + exist_lang_data = json.load(file) + break + + print(f"Creating new language file '{lang_file_path}'") with lang_file_path.open("w", encoding="utf-8") as new_lang_file: new_lang_data = { "code": lang, - "language": input("Enter language: "), - "country": input("Enter country: "), - "translations": {} + "language": ( + exist_lang_data["language"] + if exist_lang_data + else input("Enter language name: ") + ), + "country": ( + exist_lang_data["country"] + if exist_lang_data + else input("Enter country name: ") + ), + "translations": {}, } json.dump(new_lang_data, new_lang_file, indent=4, ensure_ascii=False) - for additional_lang_file_path in lang_folder_path.glob("*.json"): - if not lang == "" and not additional_lang_file_path.stem == lang: + lang_files = set(lang_folder.glob(lang_files_glob)) + if len(lang_files) == 0: + print(f"Warn: Language file for '{lang}' does not exist in '{lang_folder}'") + for lang_file_path in lang_files: + if ( + lang_file_path.stem == f"{DEFAULT_LANG}.json" + or lang_file_path.stem == f"{args.reflang}.json" + ): continue - if additional_lang_file_path.name.startswith(DEFAULT_LANG): - continue + print(f"\nProcessing '{lang_file_path}'") + if not (command == "update" or command == "create"): + print("\n----------------------------\n") - print(f"\nProcessing file '{additional_lang_file_path.name}'\n----------------------------\n") - - with additional_lang_file_path.open("r+", encoding="utf-8") as additional_lang_file: - additional_lang_data = json.load(additional_lang_file) + with lang_file_path.open("r+", encoding="utf-8") as target_lang_file: + lang_data = json.load(target_lang_file) for key, value in default_lang_data["translations"].items(): - if key not in additional_lang_data["translations"] or additional_lang_data["translations"][key] == INVALID_TRANSLATION: - handle_missing_key(command, additional_lang_data, key, value) + has_translation = ( + key in lang_data["translations"] + and lang_data["translations"][key] != INVALID_TRANSLATION + ) + if not has_translation and not ( + (command == "retranslate" or command == "untranslate") + and re.compile(args.keys).fullmatch(key) + ): + continue + if command == "check": + print( + f"Error: Translation {lang_data['code']} is missing translation for key '{key}'" + ) + exit(2) + elif ( + command == "translate" + or command == "retranslate" + or command == "untranslate" + ): + if command == "untranslate" and not has_translation: + continue + reference_tranlsation = ( + " '%s'" % reference_lang_data["translations"][key] + if reference_lang_data + else "" + ) + print( + f"\033[1m'{key}' '{value}'{reference_tranlsation}\033[0m => {lang_data['language']}", + end="", + ) + if has_translation: + translation = lang_data["translations"][key] + print(f" <= \033[1m'{translation}'\033[0m") + print() # for a new line + if command == "untranslate": + lang_data["translations"][key] = INVALID_TRANSLATION + continue + try: + new_value = input("=> ") + lang_data["translations"][key] = new_value + except KeyboardInterrupt: + break + elif command == "update" or command == "create": + lang_data["translations"][key] = INVALID_TRANSLATION + elif command == "fmtzh": + if has_translation: + lang_data["translations"][key] = fmtzh( + lang_data["translations"][key] + ) keys_to_remove = [] - for key, value in additional_lang_data["translations"].items(): + for key, value in lang_data["translations"].items(): if key not in default_lang_data["translations"]: keys_to_remove.append(key) - for key in keys_to_remove: - additional_lang_data["translations"].pop(key) - print(f"Removed unused key '{key}' from translation '{additional_lang_data['code']}'") + lang_data["translations"].pop(key) + print( + f"Removed unused key '{key}' from translation '{lang_data['code']}'" + ) - additional_lang_file.seek(0) - additional_lang_file.truncate() - json.dump(additional_lang_data, additional_lang_file, indent=4, sort_keys=True, ensure_ascii=False) + target_lang_file.seek(0) + target_lang_file.truncate() + json.dump( + lang_data, + target_lang_file, + indent=4, + sort_keys=True, + ensure_ascii=False, + ) -if __name__ == '__main__': +def fmtzh(text: str) -> str: + text = re.sub(r"(\.{3}|\.{6})", "……", text) + text = text.replace("!", "!") + text = re.sub(r"([^\.\na-zA-Z\d])\.$", "\1。", text, flags=re.M) + text = text.replace("?", "?") + return text + + +if __name__ == "__main__": exit(main()) diff --git a/plugins/builtin/romfs/lang/zh_CN.json b/plugins/builtin/romfs/lang/zh_CN.json index 130300c2d..8d475b55c 100644 --- a/plugins/builtin/romfs/lang/zh_CN.json +++ b/plugins/builtin/romfs/lang/zh_CN.json @@ -4,76 +4,103 @@ "fallback": false, "language": "Chinese (Simplified)", "translations": { + "hex.builtin.achievement.data_processor": "数据处理器", + "hex.builtin.achievement.data_processor.create_connection.desc": "将一个节点拖向另一个节点以连接两个节点。", + "hex.builtin.achievement.data_processor.create_connection.name": "创建连接", + "hex.builtin.achievement.data_processor.custom_node.desc": "通过从上下文菜单中选择“自定义 -> 新节点”来创建自定义节点,并通过将节点移入其中来简化现有模式。", + "hex.builtin.achievement.data_processor.custom_node.name": "自定义节点", + "hex.builtin.achievement.data_processor.modify_data.desc": "使用内置的读取和写入数据访问节点预处理显示的字节。", + "hex.builtin.achievement.data_processor.modify_data.name": "修改数据", + "hex.builtin.achievement.data_processor.place_node.desc": "通过右键单击工作区并从上下文菜单中选择一个节点,将任何内置节点放置在数据处理器中。", + "hex.builtin.achievement.data_processor.place_node.name": "放置节点", + "hex.builtin.achievement.find": "查找", + "hex.builtin.achievement.find.find_numeric.desc": "使用“数值”模式搜索 250 到 1000 之间的数值。", + "hex.builtin.achievement.find.find_numeric.name": "数值查找", + "hex.builtin.achievement.find.find_specific_string.desc": "通过使用“字符串”模式搜索特定字符串的出现次数来优化您的搜索。", + "hex.builtin.achievement.find.find_specific_string.name": "特定字符串查找", + "hex.builtin.achievement.find.find_strings.desc": "使用“字符串”模式下的“查找”视图查找文件中的所有字符串。", + "hex.builtin.achievement.find.find_strings.name": "字符串查找", + "hex.builtin.achievement.hex_editor": "十六进制编辑器", + "hex.builtin.achievement.hex_editor.copy_as.desc": "通过从上下文菜单中选择“复制为”->“C++ 数组”,将字节复制为 C++ 数组。", + "hex.builtin.achievement.hex_editor.copy_as.name": "复制", + "hex.builtin.achievement.hex_editor.create_bookmark.desc": "通过右击一个字节并从上下文菜单中选择“书签”来创建书签。", + "hex.builtin.achievement.hex_editor.create_bookmark.name": "创建书签", + "hex.builtin.achievement.hex_editor.create_patch.desc": "通过选择“文件”菜单中的“导出”选项,创建 IPS 补丁以供其他工具使用。", + "hex.builtin.achievement.hex_editor.create_patch.name": "创建补丁", + "hex.builtin.achievement.hex_editor.fill.desc": "通过从上下文菜单中选择“填充”,用一个字节填充区域。", + "hex.builtin.achievement.hex_editor.fill.name": "填充", + "hex.builtin.achievement.hex_editor.modify_byte.desc": "通过双击然后输入新值来修改该字节。", + "hex.builtin.achievement.hex_editor.modify_byte.name": "十六进制编辑", + "hex.builtin.achievement.hex_editor.open_new_view.desc": "单击书签中的“在新窗口打开”按钮打开新窗口。", + "hex.builtin.achievement.hex_editor.open_new_view.name": "新窗口打开", + "hex.builtin.achievement.hex_editor.select_byte.desc": "在十六进制编辑器通过点击和拖动选择多个字节。", + "hex.builtin.achievement.hex_editor.select_byte.name": "选择字节", + "hex.builtin.achievement.misc": "杂项", + "hex.builtin.achievement.misc.analyze_file.desc": "使用数据信息视图中的“分析”选项来分析数据。", + "hex.builtin.achievement.misc.analyze_file.name": "分析数据", + "hex.builtin.achievement.misc.download_from_store.desc": "从内容商店下载任何内容", + "hex.builtin.achievement.misc.download_from_store.name": "从商店下载", + "hex.builtin.achievement.patterns": "模式", + "hex.builtin.achievement.patterns.data_inspector.desc": "使用模式语言创建自定义数据查看器条目。您可以在文档中找到指引。", + "hex.builtin.achievement.patterns.data_inspector.name": "查看数据", + "hex.builtin.achievement.patterns.load_existing.desc": "使用“文件 -> 导入”菜单加载其他人创建的模式。", + "hex.builtin.achievement.patterns.load_existing.name": "加载已有模式", + "hex.builtin.achievement.patterns.modify_data.desc": "通过在模式数据视图中双击模式的值并输入新值来修改模式的基础字节。", + "hex.builtin.achievement.patterns.modify_data.name": "编辑模式", + "hex.builtin.achievement.patterns.place_menu.desc": "通过右键单击字节并使用“放置模式”选项,可以在数据中放置任何内置类型的模式。", + "hex.builtin.achievement.patterns.place_menu.name": "简易模式", "hex.builtin.achievement.starting_out": "开始", - "hex.builtin.achievement.starting_out.crash.name": "崩溃了!", "hex.builtin.achievement.starting_out.crash.desc": "ImHex首次崩溃", - "hex.builtin.achievement.starting_out.docs.name": "请仔细阅读文档!", + "hex.builtin.achievement.starting_out.crash.name": "崩溃了!", "hex.builtin.achievement.starting_out.docs.desc": "在菜单中选择“帮助”->“文档”打开文档。", + "hex.builtin.achievement.starting_out.docs.name": "请仔细阅读文档!", "hex.builtin.achievement.starting_out.open_file.desc": "将文件拖到 ImHex 上或从菜单栏中选择“文件”->“打开”来打开文件。", "hex.builtin.achievement.starting_out.open_file.name": "打开文件", - "hex.builtin.achievement.starting_out.save_project.name": "保留这个", "hex.builtin.achievement.starting_out.save_project.desc": "通过从菜单栏中选择“文件”->“保存项目”来保存项目。", - "hex.builtin.achievement.hex_editor": "十六进制编辑器", - "hex.builtin.achievement.hex_editor.select_byte.name": "选择字节", - "hex.builtin.achievement.hex_editor.select_byte.desc": "在十六进制编辑器通过点击和拖动选择多个字节。", - "hex.builtin.achievement.hex_editor.create_bookmark.name": "创建书签", - "hex.builtin.achievement.hex_editor.create_bookmark.desc": "通过右击一个字节并从上下文菜单中选择“书签”来创建书签。", - "hex.builtin.achievement.hex_editor.open_new_view.name": "新窗口打开", - "hex.builtin.achievement.hex_editor.open_new_view.desc": "单击书签中的“在新窗口打开”按钮打开新窗口。", - "hex.builtin.achievement.hex_editor.modify_byte.name": "十六进制编辑", - "hex.builtin.achievement.hex_editor.modify_byte.desc": "通过双击然后输入新值来修改该字节。", - "hex.builtin.achievement.hex_editor.copy_as.name": "复制", - "hex.builtin.achievement.hex_editor.copy_as.desc": "通过从上下文菜单中选择“复制为”->“C++ 数组”,将字节复制为 C++ 数组。", - "hex.builtin.achievement.hex_editor.create_patch.name": "创建补丁", - "hex.builtin.achievement.hex_editor.create_patch.desc": "通过选择“文件”菜单中的“导出”选项,创建 IPS 补丁以供其他工具使用。", - "hex.builtin.achievement.hex_editor.fill.name": "填充", - "hex.builtin.achievement.hex_editor.fill.desc": "通过从上下文菜单中选择“填充”,用一个字节填充区域。", - "hex.builtin.achievement.patterns": "模式", - "hex.builtin.achievement.patterns.place_menu.name": "简易模式", - "hex.builtin.achievement.patterns.place_menu.desc": "通过右键单击字节并使用“放置模式”选项,可以在数据中放置任何内置类型的模式。", - "hex.builtin.achievement.patterns.load_existing.name": "加载已有模式", - "hex.builtin.achievement.patterns.load_existing.desc": "使用“文件 -> 导入”菜单加载其他人创建的模式。", - "hex.builtin.achievement.patterns.modify_data.name": "编辑模式", - "hex.builtin.achievement.patterns.modify_data.desc": "通过在模式数据视图中双击模式的值并输入新值来修改模式的基础字节。", - "hex.builtin.achievement.patterns.data_inspector.name": "查看数据", - "hex.builtin.achievement.patterns.data_inspector.desc": "使用模式语言创建自定义数据查看器条目。您可以在文档中找到指引。", - "hex.builtin.achievement.find": "查找", - "hex.builtin.achievement.find.find_numeric.name": "数值查找", - "hex.builtin.achievement.find.find_numeric.desc": "使用“数值”模式搜索 250 到 1000 之间的数值。", - "hex.builtin.achievement.find.find_specific_string.name": "特定字符串查找", - "hex.builtin.achievement.find.find_specific_string.desc": "通过使用“字符串”模式搜索特定字符串的出现次数来优化您的搜索。", - "hex.builtin.achievement.find.find_strings.name": "字符串查找", - "hex.builtin.achievement.find.find_strings.desc": "使用“字符串”模式下的“查找”视图查找文件中的所有字符串。", - "hex.builtin.achievement.data_processor": "数据处理器", - "hex.builtin.achievement.data_processor.place_node.name": "放置节点", - "hex.builtin.achievement.data_processor.place_node.desc": "通过右键单击工作区并从上下文菜单中选择一个节点,将任何内置节点放置在数据处理器中。", - "hex.builtin.achievement.data_processor.create_connection.name": "创建连接", - "hex.builtin.achievement.data_processor.create_connection.desc": "将一个节点拖向另一个节点以连接两个节点。", - "hex.builtin.achievement.data_processor.modify_data.name": "修改数据", - "hex.builtin.achievement.data_processor.modify_data.desc": "使用内置的读取和写入数据访问节点预处理显示的字节。", - "hex.builtin.achievement.data_processor.custom_node.name": "自定义节点", - "hex.builtin.achievement.data_processor.custom_node.desc": "通过从上下文菜单中选择“自定义 -> 新节点”来创建自定义节点,并通过将节点移入其中来简化现有模式。", - "hex.builtin.achievement.misc": "杂项", - "hex.builtin.achievement.misc.analyze_file.name": "分析数据", - "hex.builtin.achievement.misc.analyze_file.desc": "使用数据信息视图中的“分析”选项来分析数据。", - "hex.builtin.achievement.misc.download_from_store.name": "从商店下载", - "hex.builtin.achievement.misc.download_from_store.desc": "从内容商店下载任何内容", + "hex.builtin.achievement.starting_out.save_project.name": "保留这个", "hex.builtin.command.calc.desc": "计算器", - "hex.builtin.command.convert.desc": "单位换算", - "hex.builtin.command.convert.hexadecimal": "十六进制", - "hex.builtin.command.convert.binary": "二进制", - "hex.builtin.command.convert.decimal": "十进制", - "hex.builtin.command.convert.octal": "八进制", - "hex.builtin.command.convert.invalid_conversion": "无效转换", - "hex.builtin.command.convert.invalid_input": "无效输入", - "hex.builtin.command.convert.to": "到", - "hex.builtin.command.convert.in": "在", - "hex.builtin.command.convert.as": "为", "hex.builtin.command.cmd.desc": "命令", "hex.builtin.command.cmd.result": "运行命令 '{0}'", + "hex.builtin.command.convert.as": "为", + "hex.builtin.command.convert.binary": "二进制", + "hex.builtin.command.convert.decimal": "十进制", + "hex.builtin.command.convert.desc": "单位换算", + "hex.builtin.command.convert.hexadecimal": "十六进制", + "hex.builtin.command.convert.in": "在", + "hex.builtin.command.convert.invalid_conversion": "无效转换", + "hex.builtin.command.convert.invalid_input": "无效输入", + "hex.builtin.command.convert.octal": "八进制", + "hex.builtin.command.convert.to": "到", "hex.builtin.command.web.desc": "网站解析", "hex.builtin.command.web.result": "导航到 '{0}'", - "hex.builtin.drag_drop.text": "将文件拖放到此处以打开它们...", + "hex.builtin.drag_drop.text": "将文件拖放到此处以打开它们……", + "hex.builtin.information_section.info_analysis": "信息分析", + "hex.builtin.information_section.info_analysis.block_size": "块大小", + "hex.builtin.information_section.info_analysis.block_size.desc": "{0} 块 × {1} 字节", + "hex.builtin.information_section.info_analysis.byte_types": "字节类型", + "hex.builtin.information_section.info_analysis.distribution": "字节分布", + "hex.builtin.information_section.info_analysis.encrypted": "此数据似乎经过了加密或压缩!", + "hex.builtin.information_section.info_analysis.entropy": "熵", + "hex.builtin.information_section.info_analysis.file_entropy": "整体熵", + "hex.builtin.information_section.info_analysis.highest_entropy": "最高区块熵", + "hex.builtin.information_section.info_analysis.lowest_entropy": "最低区块熵", + "hex.builtin.information_section.info_analysis.plain_text": "此数据很可能是纯文本。", + "hex.builtin.information_section.info_analysis.plain_text_percentage": "纯文本百分比", + "hex.builtin.information_section.info_analysis.show_annotations": "显示注释", + "hex.builtin.information_section.magic": "LibMagic 信息", + "hex.builtin.information_section.magic.apple_type": "Apple 创建者 / 类型代码", + "hex.builtin.information_section.magic.description": "描述", + "hex.builtin.information_section.magic.extension": "文件扩展名", + "hex.builtin.information_section.magic.mime": "MIME 类型", + "hex.builtin.information_section.magic.octet_stream_text": "未知", + "hex.builtin.information_section.magic.octet_stream_warning": "application/octet-stream 表示未知的数据类型。\n\n这意味着该数据没有与之关联的 MIME 类型,因为它不是已知的格式。", + "hex.builtin.information_section.provider_information": "提供者信息", + "hex.builtin.information_section.relationship_analysis": "字节关系", + "hex.builtin.information_section.relationship_analysis.brightness": "亮度", + "hex.builtin.information_section.relationship_analysis.digram": "图", + "hex.builtin.information_section.relationship_analysis.filter": "筛选器", + "hex.builtin.information_section.relationship_analysis.layered_distribution": "分层分布", + "hex.builtin.information_section.relationship_analysis.sample_size": "样本量", "hex.builtin.inspector.ascii": "ASCII 字符", "hex.builtin.inspector.binary": "二进制(8 位)", "hex.builtin.inspector.bool": "bool", @@ -119,64 +146,64 @@ "hex.builtin.menu.file.bookmark.import": "导入书签", "hex.builtin.menu.file.clear_recent": "清除", "hex.builtin.menu.file.close": "关闭", - "hex.builtin.menu.file.create_file": "新建文件...", - "hex.builtin.menu.file.export": "导出...", + "hex.builtin.menu.file.create_file": "新建文件……", + "hex.builtin.menu.file.export": "导出……", "hex.builtin.menu.file.export.as_language": "文本格式字节", "hex.builtin.menu.file.export.as_language.popup.export_error": "无法将字节导出到文件!", "hex.builtin.menu.file.export.base64": "Base64", - "hex.builtin.menu.file.export.error.create_file": "创建新文件失败!", - "hex.builtin.menu.file.export.ips.popup.export_error": "创建新的 IPS 文件失败!", - "hex.builtin.menu.file.export.ips.popup.invalid_patch_header_error": "无效 IPS 补丁头!", - "hex.builtin.menu.file.export.ips.popup.address_out_of_range_error": "补丁尝试修补范围之外的地址!", - "hex.builtin.menu.file.export.ips.popup.patch_too_large_error": "补丁大于最大允许大小!", - "hex.builtin.menu.file.export.ips.popup.invalid_patch_format_error": "无效 IPS 补丁格式!", - "hex.builtin.menu.file.export.ips.popup.missing_eof_error": "缺少 IPS EOF 记录!", - "hex.builtin.menu.file.export.ips": "IPS 补丁", - "hex.builtin.menu.file.export.ips32": "IPS32 补丁", "hex.builtin.menu.file.export.bookmark": "书签", - "hex.builtin.menu.file.export.pattern_file": "导出模式文件", - "hex.builtin.menu.file.export.pattern": "模式文件", "hex.builtin.menu.file.export.data_processor": "数据处理器工作区", + "hex.builtin.menu.file.export.error.create_file": "创建新文件失败!", + "hex.builtin.menu.file.export.ips": "IPS 补丁", + "hex.builtin.menu.file.export.ips.popup.address_out_of_range_error": "补丁尝试修补范围之外的地址!", + "hex.builtin.menu.file.export.ips.popup.export_error": "创建新的 IPS 文件失败!", + "hex.builtin.menu.file.export.ips.popup.invalid_patch_format_error": "无效 IPS 补丁格式!", + "hex.builtin.menu.file.export.ips.popup.invalid_patch_header_error": "无效 IPS 补丁头!", + "hex.builtin.menu.file.export.ips.popup.missing_eof_error": "缺少 IPS EOF 记录!", + "hex.builtin.menu.file.export.ips.popup.patch_too_large_error": "补丁大于最大允许大小!", + "hex.builtin.menu.file.export.ips32": "IPS32 补丁", + "hex.builtin.menu.file.export.pattern": "模式文件", + "hex.builtin.menu.file.export.pattern_file": "导出模式文件", "hex.builtin.menu.file.export.popup.create": "无法导出文件。文件创建失败!", "hex.builtin.menu.file.export.report": "报告", "hex.builtin.menu.file.export.report.popup.export_error": "无法创建新的报告文件!", - "hex.builtin.menu.file.export.selection_to_file": "选择到文件...", + "hex.builtin.menu.file.export.selection_to_file": "选择到文件……", "hex.builtin.menu.file.export.title": "导出文件", - "hex.builtin.menu.file.import": "导入...", + "hex.builtin.menu.file.import": "导入……", + "hex.builtin.menu.file.import.bookmark": "书签", + "hex.builtin.menu.file.import.custom_encoding": "自定义编码文件", + "hex.builtin.menu.file.import.data_processor": "数据处理器工作区", "hex.builtin.menu.file.import.ips": "IPS 补丁", "hex.builtin.menu.file.import.ips32": "IPS32 补丁", "hex.builtin.menu.file.import.modified_file": "已修改", - "hex.builtin.menu.file.import.bookmark": "书签", + "hex.builtin.menu.file.import.modified_file.popup.invalid_size": "所选文件的大小与当前文件的大小不同。 两个尺寸必须匹配。", "hex.builtin.menu.file.import.pattern": "模式文件", "hex.builtin.menu.file.import.pattern_file": "导入模式文件", - "hex.builtin.menu.file.import.data_processor": "数据处理器工作区", - "hex.builtin.menu.file.import.custom_encoding": "自定义编码文件", - "hex.builtin.menu.file.import.modified_file.popup.invalid_size": "所选文件的大小与当前文件的大小不同。 两个尺寸必须匹配。", - "hex.builtin.menu.file.open_file": "打开文件...", - "hex.builtin.menu.file.open_other": "打开其他...", + "hex.builtin.menu.file.open_file": "打开文件……", + "hex.builtin.menu.file.open_other": "打开其他……", "hex.builtin.menu.file.open_recent": "最近打开", "hex.builtin.menu.file.project": "项目", - "hex.builtin.menu.file.project.open": "打开项目...", + "hex.builtin.menu.file.project.open": "打开项目……", "hex.builtin.menu.file.project.save": "保存项目", - "hex.builtin.menu.file.project.save_as": "另存为项目...", + "hex.builtin.menu.file.project.save_as": "另存为项目……", "hex.builtin.menu.file.quit": "退出 ImHex", "hex.builtin.menu.file.reload_provider": "重载提供者", "hex.builtin.menu.help": "帮助", - "hex.builtin.menu.help.ask_for_help": "查找文档...", - "hex.builtin.menu.workspace": "工作区", - "hex.builtin.menu.workspace.create": "新建工作区...", - "hex.builtin.menu.workspace.layout": "布局", - "hex.builtin.menu.workspace.layout.lock": "锁定布局", - "hex.builtin.menu.workspace.layout.save": "保存布局", + "hex.builtin.menu.help.ask_for_help": "查找文档……", "hex.builtin.menu.view": "视图", "hex.builtin.menu.view.always_on_top": "始终最上层", - "hex.builtin.menu.view.fullscreen": "全屏模式", "hex.builtin.menu.view.debug": "显示调试视图", "hex.builtin.menu.view.demo": "ImGui 演示", "hex.builtin.menu.view.fps": "显示 FPS", + "hex.builtin.menu.view.fullscreen": "全屏模式", + "hex.builtin.menu.workspace": "工作区", + "hex.builtin.menu.workspace.create": "新建工作区……", + "hex.builtin.menu.workspace.layout": "布局", + "hex.builtin.menu.workspace.layout.lock": "锁定布局", + "hex.builtin.menu.workspace.layout.save": "保存布局", + "hex.builtin.minimap_visualizer.ascii": "ASCII 计数", "hex.builtin.minimap_visualizer.entropy": "局部熵", "hex.builtin.minimap_visualizer.zeros": "0 计数", - "hex.builtin.minimap_visualizer.ascii": "ASCII 计数", "hex.builtin.nodes.arithmetic": "运算", "hex.builtin.nodes.arithmetic.add": "加法", "hex.builtin.nodes.arithmetic.add.header": "加法", @@ -244,13 +271,13 @@ "hex.builtin.nodes.casting.float_to_buffer.header": "浮点数到缓冲区", "hex.builtin.nodes.casting.int_to_buffer": "整数到缓冲区", "hex.builtin.nodes.casting.int_to_buffer.header": "整数到缓冲区", + "hex.builtin.nodes.common.amount": "数量", "hex.builtin.nodes.common.height": "高度", "hex.builtin.nodes.common.input": "输入", "hex.builtin.nodes.common.input.a": "输入 A", "hex.builtin.nodes.common.input.b": "输入 B", "hex.builtin.nodes.common.output": "输出", "hex.builtin.nodes.common.width": "宽度", - "hex.builtin.nodes.common.amount": "数量", "hex.builtin.nodes.constants": "常量", "hex.builtin.nodes.constants.buffer": "缓冲区", "hex.builtin.nodes.constants.buffer.header": "缓冲区", @@ -267,9 +294,9 @@ "hex.builtin.nodes.constants.rgba8.header": "RGBA8 颜色", "hex.builtin.nodes.constants.rgba8.output.a": "透明", "hex.builtin.nodes.constants.rgba8.output.b": "蓝", + "hex.builtin.nodes.constants.rgba8.output.color": "RGBA8", "hex.builtin.nodes.constants.rgba8.output.g": "绿", "hex.builtin.nodes.constants.rgba8.output.r": "红", - "hex.builtin.nodes.constants.rgba8.output.color": "RGBA8", "hex.builtin.nodes.constants.string": "字符串", "hex.builtin.nodes.constants.string.header": "字符串", "hex.builtin.nodes.control_flow": "控制流", @@ -330,10 +357,10 @@ "hex.builtin.nodes.decoding.hex": "十六进制", "hex.builtin.nodes.decoding.hex.header": "十六进制解码", "hex.builtin.nodes.display": "显示", - "hex.builtin.nodes.display.buffer": "缓冲区", - "hex.builtin.nodes.display.buffer.header": "缓冲区显示", "hex.builtin.nodes.display.bits": "位", "hex.builtin.nodes.display.bits.header": "位显示", + "hex.builtin.nodes.display.buffer": "缓冲区", + "hex.builtin.nodes.display.buffer.header": "缓冲区显示", "hex.builtin.nodes.display.float": "浮点数", "hex.builtin.nodes.display.float.header": "浮点数显示", "hex.builtin.nodes.display.int": "整数", @@ -354,58 +381,74 @@ "hex.builtin.nodes.visualizer.image_rgba.header": "RGBA8 图像可视化", "hex.builtin.nodes.visualizer.layered_dist": "分层布局", "hex.builtin.nodes.visualizer.layered_dist.header": "分层布局", - "hex.builtin.popup.close_provider.desc": "", + "hex.builtin.oobe.server_contact": "服务器连接", + "hex.builtin.oobe.server_contact.crash_logs_only": "仅崩溃日志", + "hex.builtin.oobe.server_contact.data_collected.os": "操作系统", + "hex.builtin.oobe.server_contact.data_collected.uuid": "随机 ID", + "hex.builtin.oobe.server_contact.data_collected.version": "ImHex 版本", + "hex.builtin.oobe.server_contact.data_collected_table.key": "类型", + "hex.builtin.oobe.server_contact.data_collected_table.value": "值", + "hex.builtin.oobe.server_contact.data_collected_title": "会被共享的数据", + "hex.builtin.oobe.server_contact.text": "您想允许与 ImHex 的服务器通信吗?\n\n\n这允许执行自动更新检查并上传非常有限的使用统计信息,所有这些都在下面列出。\n\n或者,您也可以选择仅提交崩溃日志 这对识别和修复您可能遇到的错误有很大帮助。\n\n所有信息均由我们自己的服务器处理,不会泄露给任何第三方。\n\n\n您可以随时在设置中更改这些选择 。", + "hex.builtin.oobe.tutorial_question": "由于这是您第一次使用 ImHex,您想学习一下介绍教程吗?\n\n您始终可以从“帮助”菜单访问该教程。", + "hex.builtin.popup.blocking_task.desc": "一个任务正在运行。", + "hex.builtin.popup.blocking_task.title": "运行任务", "hex.builtin.popup.close_provider.title": "关闭提供者?", - "hex.builtin.popup.docs_question.title": "查找文档", + "hex.builtin.popup.crash_recover.message": "抛出了异常,但 ImHex 能够捕获它并报告崩溃。", + "hex.builtin.popup.crash_recover.title": "崩溃恢复", + "hex.builtin.popup.create_workspace.desc": "输入新工作区的名称", + "hex.builtin.popup.create_workspace.title": "创建新工作区", "hex.builtin.popup.docs_question.no_answer": "文档中没有这个问题的答案", "hex.builtin.popup.docs_question.prompt": "向文档 AI 寻求帮助!", - "hex.builtin.popup.docs_question.thinking": "思考中...", + "hex.builtin.popup.docs_question.thinking": "思考中……", + "hex.builtin.popup.docs_question.title": "查找文档", "hex.builtin.popup.error.create": "创建新文件失败!", "hex.builtin.popup.error.file_dialog.common": "尝试打开文件浏览器时发生了错误:{}", "hex.builtin.popup.error.file_dialog.portal": "打开文件浏览器时出现错误:{}。\n这可能是由于您的系统没有正确安装 xdg-desktop-portal 后端造成的。\n\n对于 KDE,请安装 xdg-desktop-portal-kde。\n对于 Gnome,请安装 xdg-desktop-portal-gnome。\n对于其他,您可以尝试使用 xdg-desktop-portal-gtk。\n\n在安装完成后重启您的系统。\n\n如果文件浏览器仍不工作,请尝试将\n\tdbus-update-activation-environment WAYLAND_DISPLAY DISPLAY XAUTHORITY\n添加到您的窗口管理器或合成器的启动脚本或配置文件中。\n\n如果文件浏览器仍不工作,请在 https://github.com/WerWolv/ImHex/issues 提交报告。\n\n同时,您仍可以通过将文件拖到 ImHex 窗口来打开它们!", "hex.builtin.popup.error.project.load": "加载工程失败:{}", - "hex.builtin.popup.error.project.save": "保存工程失败!", "hex.builtin.popup.error.project.load.create_provider": "创建 {} 提供者失败", + "hex.builtin.popup.error.project.load.file_not_found": "找不到项目文件 {}", + "hex.builtin.popup.error.project.load.invalid_magic": "项目文件中的魔术字文件无效", + "hex.builtin.popup.error.project.load.invalid_tar": "无法打开 tar 打包的项目文件:{}", "hex.builtin.popup.error.project.load.no_providers": "没有可打开的提供者", "hex.builtin.popup.error.project.load.some_providers_failed": "一些提供者加载失败:{}", - "hex.builtin.popup.error.project.load.file_not_found": "找不到项目文件 {}", - "hex.builtin.popup.error.project.load.invalid_tar": "无法打开 tar 打包的项目文件:{}", - "hex.builtin.popup.error.project.load.invalid_magic": "项目文件中的魔术字文件无效", + "hex.builtin.popup.error.project.save": "保存工程失败!", "hex.builtin.popup.error.read_only": "无法获得写权限,文件以只读方式打开。", "hex.builtin.popup.error.task_exception": "任务 '{}' 异常:\n\n{}", "hex.builtin.popup.exit_application.desc": "工程还有未保存的更改。\n确定要退出吗?", "hex.builtin.popup.exit_application.title": "退出?", - "hex.builtin.popup.waiting_for_tasks.title": "等待任务进行", - "hex.builtin.popup.crash_recover.title": "崩溃恢复", - "hex.builtin.popup.crash_recover.message": "抛出了异常,但 ImHex 能够捕获它并报告崩溃。", - "hex.builtin.popup.blocking_task.title": "运行任务", - "hex.builtin.popup.blocking_task.desc": "一个任务正在运行。", - "hex.builtin.popup.save_layout.title": "保存布局", + "hex.builtin.popup.safety_backup.delete": "删除", + "hex.builtin.popup.safety_backup.desc": "糟糕,ImHex 上次崩溃了!\n您想从异常转储中恢复之前的数据吗?", + "hex.builtin.popup.safety_backup.log_file": "日志文件: ", + "hex.builtin.popup.safety_backup.report_error": "向开发者发送崩溃日志", + "hex.builtin.popup.safety_backup.restore": "恢复", + "hex.builtin.popup.safety_backup.title": "恢复崩溃数据", "hex.builtin.popup.save_layout.desc": "输入用于保存当前布局的名称。", + "hex.builtin.popup.save_layout.title": "保存布局", "hex.builtin.popup.waiting_for_tasks.desc": "仍有任务在后台运行。\nImHex 将在完成后关闭。", - "hex.builtin.provider.tooltip.show_more": "按住 SHIFT 了解更多", - "hex.builtin.provider.error.open": "无法打开提供者:{}", + "hex.builtin.popup.waiting_for_tasks.title": "等待任务进行", "hex.builtin.provider.base64": "Base64", "hex.builtin.provider.disk": "原始磁盘", "hex.builtin.provider.disk.disk_size": "磁盘大小", "hex.builtin.provider.disk.elevation": "访问原始磁盘可能需要提升的权限", + "hex.builtin.provider.disk.error.read_ro": "无法以只读模式打开磁盘 {}:{}", + "hex.builtin.provider.disk.error.read_rw": "无法以读写模式打开磁盘 {}:{}", "hex.builtin.provider.disk.reload": "刷新", "hex.builtin.provider.disk.sector_size": "扇区大小", "hex.builtin.provider.disk.selected_disk": "磁盘", - "hex.builtin.provider.disk.error.read_ro": "无法以只读模式打开磁盘 {}:{}", - "hex.builtin.provider.disk.error.read_rw": "无法以读写模式打开磁盘 {}:{}", + "hex.builtin.provider.error.open": "无法打开提供者:{}", "hex.builtin.provider.file": "文件", - "hex.builtin.provider.file.error.open": "无法打开文件:{}", "hex.builtin.provider.file.access": "最后访问时间", "hex.builtin.provider.file.creation": "创建时间", + "hex.builtin.provider.file.error.open": "无法打开文件:{}", "hex.builtin.provider.file.menu.into_memory": "加载到内存", - "hex.builtin.provider.file.modification": "最后更改时间", - "hex.builtin.provider.file.path": "路径", - "hex.builtin.provider.file.size": "大小", "hex.builtin.provider.file.menu.open_file": "在外部打开文件", "hex.builtin.provider.file.menu.open_folder": "打开所处的目录", - "hex.builtin.provider.file.too_large": "该文件太大,无法加载到内存中。 无论如何打开它都会导致修改直接写入文件。 您想以只读方式打开它吗?", + "hex.builtin.provider.file.modification": "最后更改时间", + "hex.builtin.provider.file.path": "路径", "hex.builtin.provider.file.reload_changes": "该文件已被外部源修改。 您想重新加载吗?", + "hex.builtin.provider.file.size": "大小", + "hex.builtin.provider.file.too_large": "该文件太大,无法加载到内存中。 无论如何打开它都会导致修改直接写入文件。 您想以只读方式打开它吗?", "hex.builtin.provider.gdb": "GDB 服务器", "hex.builtin.provider.gdb.ip": "IP 地址", "hex.builtin.provider.gdb.name": "GDB 服务器 <{0}:{1}>", @@ -414,25 +457,26 @@ "hex.builtin.provider.intel_hex": "Intel Hex", "hex.builtin.provider.intel_hex.name": "Intel Hex {0}", "hex.builtin.provider.mem_file": "临时文件", - "hex.builtin.provider.mem_file.unsaved": "未保存的文件", "hex.builtin.provider.mem_file.rename": "重命名", "hex.builtin.provider.mem_file.rename.desc": "输入此内存文件的名称。", + "hex.builtin.provider.mem_file.unsaved": "未保存的文件", "hex.builtin.provider.motorola_srec": "Motorola SREC", "hex.builtin.provider.motorola_srec.name": "Motorola SREC {0}", "hex.builtin.provider.process_memory": "进程内存提供器", "hex.builtin.provider.process_memory.enumeration_failed": "无法枚举进程", "hex.builtin.provider.process_memory.memory_regions": "内存区域", "hex.builtin.provider.process_memory.name": "'{0}' 进程内存", - "hex.builtin.provider.process_memory.process_name": "进程名", "hex.builtin.provider.process_memory.process_id": "PID", + "hex.builtin.provider.process_memory.process_name": "进程名", "hex.builtin.provider.process_memory.region.commit": "提交", - "hex.builtin.provider.process_memory.region.reserve": "保留", - "hex.builtin.provider.process_memory.region.private": "私有", "hex.builtin.provider.process_memory.region.mapped": "映射", + "hex.builtin.provider.process_memory.region.private": "私有", + "hex.builtin.provider.process_memory.region.reserve": "保留", "hex.builtin.provider.process_memory.utils": "工具", "hex.builtin.provider.process_memory.utils.inject_dll": "注入DLL", - "hex.builtin.provider.process_memory.utils.inject_dll.success": "成功注入DLL '{0}'!", "hex.builtin.provider.process_memory.utils.inject_dll.failure": "无法注入DLL '{0}'!", + "hex.builtin.provider.process_memory.utils.inject_dll.success": "成功注入DLL '{0}'!", + "hex.builtin.provider.tooltip.show_more": "按住 SHIFT 了解更多", "hex.builtin.provider.view": "独立查看", "hex.builtin.setting.experiments": "实验性功能", "hex.builtin.setting.experiments.description": "实验性功能是仍在开发中的功能,可能无法正常工作。\n\n请自由尝试并报告您遇到的任何问题!", @@ -441,30 +485,30 @@ "hex.builtin.setting.folders.description": "为模式、脚本和规则等指定额外的搜索路径", "hex.builtin.setting.folders.remove_folder": "从列表中移除当前目录", "hex.builtin.setting.font": "字体", - "hex.builtin.setting.font.glyphs": "字形", "hex.builtin.setting.font.custom_font": "自定义字体", "hex.builtin.setting.font.custom_font_enable": "使用自定义字体", "hex.builtin.setting.font.custom_font_info": "仅当选择自定义字体时,以下设置才可用。", + "hex.builtin.setting.font.font_antialias": "抗锯齿", "hex.builtin.setting.font.font_bold": "粗体", "hex.builtin.setting.font.font_italic": "斜体", - "hex.builtin.setting.font.font_antialias": "抗锯齿", "hex.builtin.setting.font.font_path": "自定义字体路径", "hex.builtin.setting.font.font_size": "字体大小", "hex.builtin.setting.font.font_size.tooltip": "仅当选择了自定义字体时才能调整字体大小。\n\n这是因为 ImHex 默认使用像素完美的位图字体,用任何非整数因子缩放它只会导致它变得模糊。", + "hex.builtin.setting.font.glyphs": "字形", + "hex.builtin.setting.font.load_all_unicode_chars": "加载所有 Unicode 字符", "hex.builtin.setting.general": "通用", - "hex.builtin.setting.general.patterns": "模式", - "hex.builtin.setting.general.network": "网络", "hex.builtin.setting.general.auto_backup_time": "定期备份项目", - "hex.builtin.setting.general.auto_backup_time.format.simple": "每 {0}秒", "hex.builtin.setting.general.auto_backup_time.format.extended": "每 {0}分 {1}秒", + "hex.builtin.setting.general.auto_backup_time.format.simple": "每 {0}秒", "hex.builtin.setting.general.auto_load_patterns": "自动加载支持的模式", - "hex.builtin.setting.general.server_contact": "启用更新检查和使用统计", + "hex.builtin.setting.general.network": "网络", "hex.builtin.setting.general.network_interface": "启动网络", + "hex.builtin.setting.general.patterns": "模式", "hex.builtin.setting.general.save_recent_providers": "保存最近使用的提供者", + "hex.builtin.setting.general.server_contact": "启用更新检查和使用统计", "hex.builtin.setting.general.show_tips": "在启动时显示每日提示", "hex.builtin.setting.general.sync_pattern_source": "在提供器间同步模式源码", "hex.builtin.setting.general.upload_crash_logs": "上传崩溃报告", - "hex.builtin.setting.font.load_all_unicode_chars": "加载所有 Unicode 字符", "hex.builtin.setting.hex_editor": "Hex 编辑器", "hex.builtin.setting.hex_editor.byte_padding": "额外的字节列对齐", "hex.builtin.setting.hex_editor.bytes_per_row": "每行显示的字节数", @@ -476,22 +520,22 @@ "hex.builtin.setting.imhex.recent_files": "最近文件", "hex.builtin.setting.interface": "界面", "hex.builtin.setting.interface.always_show_provider_tabs": "始终显示提供者选项卡", - "hex.builtin.setting.interface.native_window_decorations": "使用操作系统窗口装饰", "hex.builtin.setting.interface.color": "颜色主题", "hex.builtin.setting.interface.crisp_scaling": "启用清晰缩放", "hex.builtin.setting.interface.fps": "FPS 限制", "hex.builtin.setting.interface.fps.native": "系统", - "hex.builtin.setting.interface.language": "语言", "hex.builtin.setting.interface.fps.unlocked": "无限制", + "hex.builtin.setting.interface.language": "语言", "hex.builtin.setting.interface.multi_windows": "启用多窗口支持", - "hex.builtin.setting.interface.scaling_factor": "缩放", + "hex.builtin.setting.interface.native_window_decorations": "使用操作系统窗口装饰", + "hex.builtin.setting.interface.pattern_data_row_bg": "启用彩色图案背景", + "hex.builtin.setting.interface.restore_window_pos": "恢复窗口位置", "hex.builtin.setting.interface.scaling.native": "本地默认", + "hex.builtin.setting.interface.scaling_factor": "缩放", "hex.builtin.setting.interface.show_header_command_palette": "在窗口标题中显示命令面板", "hex.builtin.setting.interface.style": "风格", - "hex.builtin.setting.interface.window": "窗口", - "hex.builtin.setting.interface.pattern_data_row_bg": "启用彩色图案背景", "hex.builtin.setting.interface.wiki_explain_language": "维基百科使用语言", - "hex.builtin.setting.interface.restore_window_pos": "恢复窗口位置", + "hex.builtin.setting.interface.window": "窗口", "hex.builtin.setting.proxy": "网络代理", "hex.builtin.setting.proxy.description": "代理设置会立即在可下载内容、维基百科查询上生效。", "hex.builtin.setting.proxy.enable": "启用代理", @@ -518,10 +562,10 @@ "hex.builtin.tools.color": "颜色选择器", "hex.builtin.tools.color.components": "组件", "hex.builtin.tools.color.formats": "格式", - "hex.builtin.tools.color.formats.hex": "HEX", - "hex.builtin.tools.color.formats.vec4": "Vector4f", - "hex.builtin.tools.color.formats.percent": "百分比", "hex.builtin.tools.color.formats.color_name": "颜色名称", + "hex.builtin.tools.color.formats.hex": "HEX", + "hex.builtin.tools.color.formats.percent": "百分比", + "hex.builtin.tools.color.formats.vec4": "Vector4f", "hex.builtin.tools.demangler": "LLVM 名还原", "hex.builtin.tools.demangler.demangled": "还原名", "hex.builtin.tools.demangler.mangled": "修饰名", @@ -531,11 +575,11 @@ "hex.builtin.tools.euclidean_algorithm.overflow": "检测到溢出! a 和 b 的值太大。", "hex.builtin.tools.file_tools": "文件工具", "hex.builtin.tools.file_tools.combiner": "合并", - "hex.builtin.tools.file_tools.combiner.add": "添加...", + "hex.builtin.tools.file_tools.combiner.add": "添加……", "hex.builtin.tools.file_tools.combiner.add.picker": "添加文件", "hex.builtin.tools.file_tools.combiner.clear": "清空", "hex.builtin.tools.file_tools.combiner.combine": "合并", - "hex.builtin.tools.file_tools.combiner.combining": "合并中...", + "hex.builtin.tools.file_tools.combiner.combining": "合并中……", "hex.builtin.tools.file_tools.combiner.delete": "删除", "hex.builtin.tools.file_tools.combiner.error.open_output": "创建输出文件失败", "hex.builtin.tools.file_tools.combiner.open_input": "打开输入文件 {0} 失败", @@ -548,7 +592,7 @@ "hex.builtin.tools.file_tools.shredder.input": "目标文件", "hex.builtin.tools.file_tools.shredder.picker": "打开文件以销毁", "hex.builtin.tools.file_tools.shredder.shred": "销毁", - "hex.builtin.tools.file_tools.shredder.shredding": "销毁中...", + "hex.builtin.tools.file_tools.shredder.shredding": "销毁中……", "hex.builtin.tools.file_tools.shredder.success": "文件成功销毁!", "hex.builtin.tools.file_tools.shredder.warning": "此工具将不可恢复地破坏文件。请谨慎使用。", "hex.builtin.tools.file_tools.splitter": "分割", @@ -560,7 +604,7 @@ "hex.builtin.tools.file_tools.splitter.picker.input": "打开文件以分割", "hex.builtin.tools.file_tools.splitter.picker.output": "选择输出路径", "hex.builtin.tools.file_tools.splitter.picker.split": "分割", - "hex.builtin.tools.file_tools.splitter.picker.splitting": "分割中...", + "hex.builtin.tools.file_tools.splitter.picker.splitting": "分割中……", "hex.builtin.tools.file_tools.splitter.picker.success": "文件分割成功!", "hex.builtin.tools.file_tools.splitter.sizes.3_5_floppy": "3 寸软盘(1400KiB)", "hex.builtin.tools.file_tools.splitter.sizes.5_75_floppy": "5 寸软盘(1200KiB)", @@ -585,11 +629,11 @@ "hex.builtin.tools.graphing": "图形计算器", "hex.builtin.tools.history": "历史", "hex.builtin.tools.http_requests": "HTTP 请求", + "hex.builtin.tools.http_requests.body": "正文", "hex.builtin.tools.http_requests.enter_url": "输入 URL", - "hex.builtin.tools.http_requests.send": "发送", "hex.builtin.tools.http_requests.headers": "标头", "hex.builtin.tools.http_requests.response": "响应", - "hex.builtin.tools.http_requests.body": "正文", + "hex.builtin.tools.http_requests.send": "发送", "hex.builtin.tools.ieee754": "IEEE 754 浮点数测试器", "hex.builtin.tools.ieee754.clear": "清除", "hex.builtin.tools.ieee754.description": "IEEE754 是大多数现代 CPU 使用的表示浮点数的标准。\n\n此工具可视化浮点数的内部表示,并允许编解码具有非标准数量的尾数或指数位的数字。", @@ -633,31 +677,31 @@ "hex.builtin.tools.value": "值", "hex.builtin.tools.wiki_explain": "维基百科搜索", "hex.builtin.tools.wiki_explain.control": "控制", - "hex.builtin.tools.wiki_explain.invalid_response": "接收到来自 Wikipedia 的无效响应!", + "hex.builtin.tools.wiki_explain.invalid_response": "接收到来自维基百科的无效响应!", "hex.builtin.tools.wiki_explain.results": "结果", "hex.builtin.tools.wiki_explain.search": "搜索", "hex.builtin.tutorial.introduction": "ImHex 简介", "hex.builtin.tutorial.introduction.description": "本教程将指导您了解 ImHex 的基本用法,以帮助您入门。", - "hex.builtin.tutorial.introduction.step1.title": "欢迎来到 ImHex!", "hex.builtin.tutorial.introduction.step1.description": "ImHex 是一个逆向工程套件和十六进制编辑器,其主要重点是可视化二进制数据以便于理解。\n\n您可以通过单击右侧下面的箭头按钮继续下一步。", - "hex.builtin.tutorial.introduction.step2.title": "打开数据", + "hex.builtin.tutorial.introduction.step1.title": "欢迎来到 ImHex!", "hex.builtin.tutorial.introduction.step2.description": "ImHex 支持从各种来源加载数据。这包括文件、原始磁盘、另一个进程的内存等等。\n\n所有这些选项都可以在欢迎页面中或屏幕或文件菜单下找到。", "hex.builtin.tutorial.introduction.step2.highlight": "让我们通过单击“新建文件”按钮来创建一个新的空文件。", + "hex.builtin.tutorial.introduction.step2.title": "打开数据", "hex.builtin.tutorial.introduction.step3.highlight": "这是十六进制编辑器。它显示加载数据的各个字节,还允许您通过双击其中一个字节来编辑它们。\n\n您可以使用箭头键或鼠标滚轮导航数据。", "hex.builtin.tutorial.introduction.step4.highlight": "这是数据查看器。它以更易读的格式显示当前所选字节的数据。\n\n您还可以通过双击在此处编辑一排数据。", - "hex.builtin.tutorial.introduction.step5.highlight.pattern_editor": "这是模式编辑器。它允许您使用模式语言编写代码,该语言可以突出显示和解码加载数据内的二进制数据结构。\n\n您可以在文档中了解有关模式语言的更多信息。", "hex.builtin.tutorial.introduction.step5.highlight.pattern_data": "此视图包含一个树视图,表示您使用模式语言定义的数据结构。", + "hex.builtin.tutorial.introduction.step5.highlight.pattern_editor": "这是模式编辑器。它允许您使用模式语言编写代码,该语言可以突出显示和解码加载数据内的二进制数据结构。\n\n您可以在文档中了解有关模式语言的更多信息。", "hex.builtin.tutorial.introduction.step6.highlight": "您可以在帮助菜单中找到更多教程和文档。", + "hex.builtin.undo_operation.fill": "填充的区域", "hex.builtin.undo_operation.insert": "插入的 {0}", + "hex.builtin.undo_operation.modification": "修改的数据", + "hex.builtin.undo_operation.patches": "应用的补丁", "hex.builtin.undo_operation.remove": "移除的 {0}", "hex.builtin.undo_operation.write": "写入的 {0}", - "hex.builtin.undo_operation.patches": "应用的补丁", - "hex.builtin.undo_operation.fill": "填充的区域", - "hex.builtin.undo_operation.modification": "修改的数据", + "hex.builtin.view.achievements.click": "点这里", "hex.builtin.view.achievements.name": "成就", "hex.builtin.view.achievements.unlocked": "已解锁成就!", "hex.builtin.view.achievements.unlocked_count": "已解锁", - "hex.builtin.view.achievements.click": "点这里", "hex.builtin.view.bookmarks.address": "0x{0:02X} - 0x{1:02X}", "hex.builtin.view.bookmarks.button.jump": "转到", "hex.builtin.view.bookmarks.button.remove": "移除", @@ -684,8 +728,8 @@ "hex.builtin.view.data_inspector.table.name": "格式", "hex.builtin.view.data_inspector.table.value": "值", "hex.builtin.view.data_processor.help_text": "右键以添加新的节点", - "hex.builtin.view.data_processor.menu.file.load_processor": "加载数据处理器...", - "hex.builtin.view.data_processor.menu.file.save_processor": "保存数据处理器...", + "hex.builtin.view.data_processor.menu.file.load_processor": "加载数据处理器……", + "hex.builtin.view.data_processor.menu.file.save_processor": "保存数据处理器……", "hex.builtin.view.data_processor.menu.remove_link": "移除链接", "hex.builtin.view.data_processor.menu.remove_node": "移除节点", "hex.builtin.view.data_processor.menu.remove_selection": "移除已选", @@ -700,14 +744,13 @@ "hex.builtin.view.find.context.replace.hex": "十六进制", "hex.builtin.view.find.demangled": "还原名", "hex.builtin.view.find.name": "查找", - "hex.builtin.view.replace.name": "替换", "hex.builtin.view.find.regex": "正则表达式", "hex.builtin.view.find.regex.full_match": "要求完整匹配", "hex.builtin.view.find.regex.pattern": "模式", "hex.builtin.view.find.search": "搜索", "hex.builtin.view.find.search.entries": "{} 个结果", "hex.builtin.view.find.search.reset": "重置", - "hex.builtin.view.find.searching": "搜索中...", + "hex.builtin.view.find.searching": "搜索中……", "hex.builtin.view.find.sequences": "序列", "hex.builtin.view.find.sequences.ignore_case": "忽略大小写", "hex.builtin.view.find.shortcut.select_all": "全选", @@ -771,24 +814,25 @@ "hex.builtin.view.hex_editor.goto.offset.end": "末尾", "hex.builtin.view.hex_editor.goto.offset.relative": "相对", "hex.builtin.view.hex_editor.menu.edit.copy": "复制", - "hex.builtin.view.hex_editor.menu.edit.copy_as": "复制为...", - "hex.builtin.view.hex_editor.menu.edit.cut": "", - "hex.builtin.view.hex_editor.menu.edit.fill": "填充...", - "hex.builtin.view.hex_editor.menu.edit.insert": "插入...", + "hex.builtin.view.hex_editor.menu.edit.copy_as": "复制为……", + "hex.builtin.view.hex_editor.menu.edit.cut": "剪切", + "hex.builtin.view.hex_editor.menu.edit.fill": "填充……", + "hex.builtin.view.hex_editor.menu.edit.insert": "插入……", + "hex.builtin.view.hex_editor.menu.edit.insert_mode": "插入模式", "hex.builtin.view.hex_editor.menu.edit.jump_to": "转到", "hex.builtin.view.hex_editor.menu.edit.jump_to.curr_pattern": "当前模式", "hex.builtin.view.hex_editor.menu.edit.open_in_new_provider": "在新页面打开选定区域", "hex.builtin.view.hex_editor.menu.edit.paste": "粘贴", "hex.builtin.view.hex_editor.menu.edit.paste_all": "粘贴全部", - "hex.builtin.view.hex_editor.menu.edit.remove": "删除...", - "hex.builtin.view.hex_editor.menu.edit.resize": "修改大小...", + "hex.builtin.view.hex_editor.menu.edit.remove": "删除……", + "hex.builtin.view.hex_editor.menu.edit.resize": "修改大小……", "hex.builtin.view.hex_editor.menu.edit.select_all": "全选", "hex.builtin.view.hex_editor.menu.edit.set_base": "设置基地址", "hex.builtin.view.hex_editor.menu.edit.set_page_size": "设置页面大小", "hex.builtin.view.hex_editor.menu.file.goto": "转到", - "hex.builtin.view.hex_editor.menu.file.load_encoding_file": "加载自定义编码...", + "hex.builtin.view.hex_editor.menu.file.load_encoding_file": "加载自定义编码……", "hex.builtin.view.hex_editor.menu.file.save": "保存", - "hex.builtin.view.hex_editor.menu.file.save_as": "另存为...", + "hex.builtin.view.hex_editor.menu.file.save_as": "另存为……", "hex.builtin.view.hex_editor.menu.file.search": "搜索", "hex.builtin.view.hex_editor.menu.file.select": "选择", "hex.builtin.view.hex_editor.name": "Hex 编辑器", @@ -797,9 +841,9 @@ "hex.builtin.view.hex_editor.search.no_more_results": "没有更多结果", "hex.builtin.view.hex_editor.search.string": "字符串", "hex.builtin.view.hex_editor.search.string.encoding": "编码", - "hex.builtin.view.hex_editor.search.string.encoding.utf8": "UTF-8", "hex.builtin.view.hex_editor.search.string.encoding.utf16": "UTF-16", "hex.builtin.view.hex_editor.search.string.encoding.utf32": "UTF-32", + "hex.builtin.view.hex_editor.search.string.encoding.utf8": "UTF-8", "hex.builtin.view.hex_editor.search.string.endianness": "字节顺序", "hex.builtin.view.hex_editor.search.string.endianness.big": "大端序", "hex.builtin.view.hex_editor.search.string.endianness.little": "小端序", @@ -808,63 +852,36 @@ "hex.builtin.view.hex_editor.select.offset.region": "区域", "hex.builtin.view.hex_editor.select.offset.size": "大小", "hex.builtin.view.hex_editor.select.select": "选择", - "hex.builtin.view.hex_editor.shortcut.remove_selection": "删除选择", - "hex.builtin.view.hex_editor.shortcut.enter_editing": "进入编辑模式", - "hex.builtin.view.hex_editor.shortcut.selection_right": "将选择内容移至右侧", - "hex.builtin.view.hex_editor.shortcut.cursor_right": "将光标向右移动", - "hex.builtin.view.hex_editor.shortcut.selection_left": "将光标向左移动", - "hex.builtin.view.hex_editor.shortcut.cursor_left": "将光标向左移动", - "hex.builtin.view.hex_editor.shortcut.selection_up": "向上移动选择", - "hex.builtin.view.hex_editor.shortcut.cursor_up": "向上移动光标", - "hex.builtin.view.hex_editor.shortcut.cursor_start": "将光标移至行开头", - "hex.builtin.view.hex_editor.shortcut.cursor_end": "将光标移至行尾", - "hex.builtin.view.hex_editor.shortcut.selection_down": "向下移动选择", "hex.builtin.view.hex_editor.shortcut.cursor_down": "向下移动光标", - "hex.builtin.view.hex_editor.shortcut.selection_page_up": "将选择内容向上移动一页", - "hex.builtin.view.hex_editor.shortcut.cursor_page_up": "将光标向上移动一页", - "hex.builtin.view.hex_editor.shortcut.selection_page_down": "将选择内容向下移动一页", + "hex.builtin.view.hex_editor.shortcut.cursor_end": "将光标移至行尾", + "hex.builtin.view.hex_editor.shortcut.cursor_left": "将光标向左移动", "hex.builtin.view.hex_editor.shortcut.cursor_page_down": "将光标向下移动一页", - "hex.builtin.view.highlight_rules.name": "突出显示规则", - "hex.builtin.view.highlight_rules.new_rule": "新规则", + "hex.builtin.view.hex_editor.shortcut.cursor_page_up": "将光标向上移动一页", + "hex.builtin.view.hex_editor.shortcut.cursor_right": "将光标向右移动", + "hex.builtin.view.hex_editor.shortcut.cursor_start": "将光标移至行开头", + "hex.builtin.view.hex_editor.shortcut.cursor_up": "向上移动光标", + "hex.builtin.view.hex_editor.shortcut.enter_editing": "进入编辑模式", + "hex.builtin.view.hex_editor.shortcut.remove_selection": "删除选择", + "hex.builtin.view.hex_editor.shortcut.selection_down": "向下移动选择", + "hex.builtin.view.hex_editor.shortcut.selection_left": "将光标向左移动", + "hex.builtin.view.hex_editor.shortcut.selection_page_down": "将选择内容向下移动一页", + "hex.builtin.view.hex_editor.shortcut.selection_page_up": "将选择内容向上移动一页", + "hex.builtin.view.hex_editor.shortcut.selection_right": "将选择内容移至右侧", + "hex.builtin.view.hex_editor.shortcut.selection_up": "向上移动选择", "hex.builtin.view.highlight_rules.config": "配置", "hex.builtin.view.highlight_rules.expression": "表达式", "hex.builtin.view.highlight_rules.help_text": "输入将针对文件中的每个字节求值的数学表达式。\n\n该表达式可以使用变量“value”和“offset”。\n如果表达式求值 为 true(结果大于 0),该字节将以指定的颜色突出显示。", + "hex.builtin.view.highlight_rules.menu.edit.rules": "修改突出显示规则……", + "hex.builtin.view.highlight_rules.name": "突出显示规则", + "hex.builtin.view.highlight_rules.new_rule": "新规则", "hex.builtin.view.highlight_rules.no_rule": "创建一个规则来编辑它", - "hex.builtin.view.highlight_rules.menu.edit.rules": "修改突出显示规则...", "hex.builtin.view.information.analyze": "分析", - "hex.builtin.view.information.analyzing": "分析中...", - "hex.builtin.information_section.magic.apple_type": "", - "hex.builtin.information_section.info_analysis.block_size": "块大小", - "hex.builtin.information_section.info_analysis.block_size.desc": "{0} 块 × {1} 字节", - "hex.builtin.information_section.info_analysis.byte_types": "字节类型", + "hex.builtin.view.information.analyzing": "分析中……", "hex.builtin.view.information.control": "控制", - "hex.builtin.information_section.magic.description": "描述", - "hex.builtin.information_section.info_analysis.distribution": "字节分布", - "hex.builtin.information_section.info_analysis.encrypted": "此数据似乎经过了加密或压缩!", - "hex.builtin.information_section.info_analysis.entropy": "熵", - "hex.builtin.information_section.magic.extension": "文件扩展名", - "hex.builtin.information_section.info_analysis.file_entropy": "整体熵", - "hex.builtin.information_section.info_analysis.highest_entropy": "最高区块熵", - "hex.builtin.information_section.info_analysis.lowest_entropy": "最低区块熵", - "hex.builtin.information_section.info_analysis": "信息分析", - "hex.builtin.information_section.info_analysis.show_annotations": "显示注释", - "hex.builtin.information_section.relationship_analysis": "字节关系", - "hex.builtin.information_section.relationship_analysis.sample_size": "样本量", - "hex.builtin.information_section.relationship_analysis.brightness": "亮度", - "hex.builtin.information_section.relationship_analysis.filter": "筛选器", - "hex.builtin.information_section.relationship_analysis.digram": "图", - "hex.builtin.information_section.relationship_analysis.layered_distribution": "分层分布", - "hex.builtin.information_section.magic": "LibMagic 信息", "hex.builtin.view.information.error_processing_section": "处理信息块 {0} 失败: '{1}'", "hex.builtin.view.information.magic_db_added": "LibMagic 数据库已添加!", - "hex.builtin.information_section.magic.mime": "MIME 类型", "hex.builtin.view.information.name": "数据信息", "hex.builtin.view.information.not_analyzed": "尚未分析", - "hex.builtin.information_section.magic.octet_stream_text": "未知", - "hex.builtin.information_section.magic.octet_stream_warning": "application/octet-stream 表示未知的数据类型。\n\n这意味着该数据没有与之关联的 MIME 类型,因为它不是已知的格式。", - "hex.builtin.information_section.info_analysis.plain_text": "此数据很可能是纯文本。", - "hex.builtin.information_section.info_analysis.plain_text_percentage": "纯文本百分比", - "hex.builtin.information_section.provider_information": "提供者信息", "hex.builtin.view.logs.component": "组件", "hex.builtin.view.logs.log_level": "日志等级", "hex.builtin.view.logs.message": "消息", @@ -891,23 +908,23 @@ "hex.builtin.view.pattern_editor.debugger.scope": "作用域", "hex.builtin.view.pattern_editor.debugger.scope.global": "全局", "hex.builtin.view.pattern_editor.env_vars": "环境变量", - "hex.builtin.view.pattern_editor.evaluating": "计算中...", + "hex.builtin.view.pattern_editor.evaluating": "计算中……", "hex.builtin.view.pattern_editor.find_hint": "查找", "hex.builtin.view.pattern_editor.find_hint_history": "历史", - "hex.builtin.view.pattern_editor.menu.edit.place_pattern": "放置模式...", + "hex.builtin.view.pattern_editor.menu.edit.place_pattern": "放置模式……", "hex.builtin.view.pattern_editor.menu.edit.place_pattern.builtin": "内置类型", "hex.builtin.view.pattern_editor.menu.edit.place_pattern.builtin.array": "数组", "hex.builtin.view.pattern_editor.menu.edit.place_pattern.builtin.single": "单个", "hex.builtin.view.pattern_editor.menu.edit.place_pattern.custom": "自定义类型", - "hex.builtin.view.pattern_editor.menu.file.load_pattern": "加载模式文件...", - "hex.builtin.view.pattern_editor.menu.file.save_pattern": "保存模式文件...", - "hex.builtin.view.pattern_editor.menu.find": "查找...", + "hex.builtin.view.pattern_editor.menu.file.load_pattern": "加载模式文件……", + "hex.builtin.view.pattern_editor.menu.file.save_pattern": "保存模式文件……", + "hex.builtin.view.pattern_editor.menu.find": "查找……", "hex.builtin.view.pattern_editor.menu.find_next": "查找下一个", "hex.builtin.view.pattern_editor.menu.find_previous": "查找上一个", "hex.builtin.view.pattern_editor.menu.replace": "替换", + "hex.builtin.view.pattern_editor.menu.replace_all": "全部替换", "hex.builtin.view.pattern_editor.menu.replace_next": "替换下一个", "hex.builtin.view.pattern_editor.menu.replace_previous": "替换上一个", - "hex.builtin.view.pattern_editor.menu.replace_all": "全部替换", "hex.builtin.view.pattern_editor.name": "模式编辑器", "hex.builtin.view.pattern_editor.no_in_out_vars": "使用 'in' 或 'out' 修饰符定义一些全局变量,以使它们出现在这里。", "hex.builtin.view.pattern_editor.no_results": "无结果。", @@ -918,28 +935,31 @@ "hex.builtin.view.pattern_editor.section_popup": "段", "hex.builtin.view.pattern_editor.sections": "段", "hex.builtin.view.pattern_editor.settings": "设置", + "hex.builtin.view.pattern_editor.shortcut.add_breakpoint": "添加断点", + "hex.builtin.view.pattern_editor.shortcut.continue_debugger": "继续调试", "hex.builtin.view.pattern_editor.shortcut.run_pattern": "运行模式", "hex.builtin.view.pattern_editor.shortcut.step_debugger": "单步调试", - "hex.builtin.view.pattern_editor.shortcut.continue_debugger": "继续调试", - "hex.builtin.view.pattern_editor.shortcut.add_breakpoint": "添加断点", "hex.builtin.view.pattern_editor.virtual_files": "虚拟文件系统", "hex.builtin.view.provider_settings.load_error": "尝试打开此提供器时出现错误!", "hex.builtin.view.provider_settings.load_error_details": "打开此提供者时出现错误:\n详细信息:{}", "hex.builtin.view.provider_settings.load_popup": "打开提供器", "hex.builtin.view.provider_settings.name": "提供器设置", + "hex.builtin.view.replace.name": "替换", "hex.builtin.view.settings.name": "设置", "hex.builtin.view.settings.restart_question": "一项更改需要重启 ImHex 以生效,您想要现在重启吗?", "hex.builtin.view.store.desc": "从 ImHex 仓库下载新内容", "hex.builtin.view.store.download": "下载", "hex.builtin.view.store.download_error": "下载文件失败!目标文件夹不存在。", - "hex.builtin.view.store.loading": "正在加载在线内容...", + "hex.builtin.view.store.loading": "正在加载在线内容……", "hex.builtin.view.store.name": "可下载内容", "hex.builtin.view.store.netfailed": "通过网络加载内容失败!", "hex.builtin.view.store.reload": "刷新", "hex.builtin.view.store.remove": "移除", - "hex.builtin.view.store.row.description": "描述", "hex.builtin.view.store.row.authors": "作者", + "hex.builtin.view.store.row.description": "描述", "hex.builtin.view.store.row.name": "名称", + "hex.builtin.view.store.system": "系统", + "hex.builtin.view.store.system.explanation": "该条目位于只读目录中,它可能由系统管理。", "hex.builtin.view.store.tab.constants": "常量", "hex.builtin.view.store.tab.encodings": "编码", "hex.builtin.view.store.tab.includes": "库", @@ -949,13 +969,11 @@ "hex.builtin.view.store.tab.themes": "主题", "hex.builtin.view.store.tab.yara": "Yara 规则", "hex.builtin.view.store.update": "更新", - "hex.builtin.view.store.system": "系统", - "hex.builtin.view.store.system.explanation": "该条目位于只读目录中,它可能由系统管理。", "hex.builtin.view.store.update_count": "更新全部\n可用更新:{}", - "hex.builtin.view.theme_manager.name": "主题管理器", "hex.builtin.view.theme_manager.colors": "颜色", "hex.builtin.view.theme_manager.export": "导出", "hex.builtin.view.theme_manager.export.name": "主题名称", + "hex.builtin.view.theme_manager.name": "主题管理器", "hex.builtin.view.theme_manager.save_theme": "保存主题", "hex.builtin.view.theme_manager.styles": "样式", "hex.builtin.view.tools.name": "工具", @@ -980,59 +998,42 @@ "hex.builtin.visualizer.hexadecimal.8bit": "十六进制(8 位)", "hex.builtin.visualizer.hexii": "HexII", "hex.builtin.visualizer.rgba8": "RGBA8 颜色", - "hex.builtin.oobe.server_contact": "服务器连接", - "hex.builtin.oobe.server_contact.text": "您想允许与 ImHex 的服务器通信吗?\n\n\n这允许执行自动更新检查并上传非常有限的使用统计信息,所有这些都在下面列出。\n\n或者,您也可以选择仅提交崩溃日志 这对识别和修复您可能遇到的错误有很大帮助。\n\n所有信息均由我们自己的服务器处理,不会泄露给任何第三方。\n\n\n您可以随时在设置中更改这些选择 。", - "hex.builtin.oobe.server_contact.data_collected_table.key": "类型", - "hex.builtin.oobe.server_contact.data_collected_table.value": "值", - "hex.builtin.oobe.server_contact.data_collected_title": "会被共享的数据", - "hex.builtin.oobe.server_contact.data_collected.uuid": "随机 ID", - "hex.builtin.oobe.server_contact.data_collected.version": "ImHex 版本", - "hex.builtin.oobe.server_contact.data_collected.os": "操作系统", - "hex.builtin.oobe.server_contact.crash_logs_only": "仅崩溃日志", - "hex.builtin.oobe.tutorial_question": "由于这是您第一次使用 ImHex,您想学习一下介绍教程吗?\n\n您始终可以从“帮助”菜单访问该教程。", "hex.builtin.welcome.customize.settings.desc": "更改 ImHex 的设置", "hex.builtin.welcome.customize.settings.title": "设置", - "hex.builtin.welcome.drop_file": "将文件拖放到此处以开始...", + "hex.builtin.welcome.drop_file": "将文件拖放到此处以开始……", "hex.builtin.welcome.header.customize": "自定义", "hex.builtin.welcome.header.help": "帮助", "hex.builtin.welcome.header.info": "信息", "hex.builtin.welcome.header.learn": "学习", "hex.builtin.welcome.header.main": "欢迎来到 ImHex", "hex.builtin.welcome.header.plugins": "已加载插件", + "hex.builtin.welcome.header.quick_settings": "快速设置", "hex.builtin.welcome.header.start": "开始", "hex.builtin.welcome.header.update": "更新", "hex.builtin.welcome.header.various": "杂项", - "hex.builtin.welcome.header.quick_settings": "快速设置", "hex.builtin.welcome.help.discord": "Discord 服务器", "hex.builtin.welcome.help.discord.link": "https://imhex.werwolv.net/discord", "hex.builtin.welcome.help.gethelp": "获得帮助", "hex.builtin.welcome.help.gethelp.link": "https://github.com/WerWolv/ImHex/discussions/categories/get-help", "hex.builtin.welcome.help.repo": "GitHub 仓库", "hex.builtin.welcome.help.repo.link": "https://imhex.werwolv.net/git", - "hex.builtin.welcome.learn.achievements.title": "成就", "hex.builtin.welcome.learn.achievements.desc": "通过完成所有成就来了解如何使用 ImHex", - "hex.builtin.welcome.learn.interactive_tutorial.title": "交互式教程", + "hex.builtin.welcome.learn.achievements.title": "成就", + "hex.builtin.welcome.learn.imhex.desc": "通过我们详细的文档来了解 ImHex 基础知识", + "hex.builtin.welcome.learn.imhex.link": "https://docs.werwolv.net/imhex/", + "hex.builtin.welcome.learn.imhex.title": "ImHex 文档", "hex.builtin.welcome.learn.interactive_tutorial.desc": "通过教程快速入门", + "hex.builtin.welcome.learn.interactive_tutorial.title": "交互式教程", "hex.builtin.welcome.learn.latest.desc": "阅读 ImHex 最新版本的更改日志", "hex.builtin.welcome.learn.latest.link": "https://github.com/WerWolv/ImHex/releases/latest", "hex.builtin.welcome.learn.latest.title": "最新版本", "hex.builtin.welcome.learn.pattern.desc": "如何编写 ImHex 模式", "hex.builtin.welcome.learn.pattern.link": "https://docs.werwolv.net/pattern-language/", "hex.builtin.welcome.learn.pattern.title": "模式文档", - "hex.builtin.welcome.learn.imhex.desc": "通过我们详细的文档来了解 ImHex 基础知识", - "hex.builtin.welcome.learn.imhex.link": "https://docs.werwolv.net/imhex/", - "hex.builtin.welcome.learn.imhex.title": "ImHex 文档", "hex.builtin.welcome.learn.plugins.desc": "通过插件扩展 ImHex 获得更多功能", "hex.builtin.welcome.learn.plugins.link": "https://github.com/WerWolv/ImHex/wiki/Plugins-Development-Guide", "hex.builtin.welcome.learn.plugins.title": "插件 API", - "hex.builtin.popup.create_workspace.title": "创建新工作区", - "hex.builtin.popup.create_workspace.desc": "输入新工作区的名称", - "hex.builtin.popup.safety_backup.delete": "删除", - "hex.builtin.popup.safety_backup.desc": "糟糕,ImHex 上次崩溃了!\n您想从异常转储中恢复之前的数据吗?", - "hex.builtin.popup.safety_backup.log_file": "日志文件: ", - "hex.builtin.popup.safety_backup.report_error": "向开发者发送崩溃日志", - "hex.builtin.popup.safety_backup.restore": "恢复", - "hex.builtin.popup.safety_backup.title": "恢复崩溃数据", + "hex.builtin.welcome.quick_settings.simplified": "简化", "hex.builtin.welcome.start.create_file": "创建新文件", "hex.builtin.welcome.start.open_file": "打开文件", "hex.builtin.welcome.start.open_other": "其他提供器", @@ -1043,7 +1044,6 @@ "hex.builtin.welcome.tip_of_the_day": "每日提示", "hex.builtin.welcome.update.desc": "ImHex {0} 已发布!在这里下载。", "hex.builtin.welcome.update.link": "https://github.com/WerWolv/ImHex/releases/latest", - "hex.builtin.welcome.update.title": "新的更新可用!", - "hex.builtin.welcome.quick_settings.simplified": "简化" + "hex.builtin.welcome.update.title": "新的更新可用!" } } \ No newline at end of file diff --git a/plugins/diffing/romfs/lang/zh_CN.json b/plugins/diffing/romfs/lang/zh_CN.json index 0e97e2025..4005e5c2e 100644 --- a/plugins/diffing/romfs/lang/zh_CN.json +++ b/plugins/diffing/romfs/lang/zh_CN.json @@ -1,21 +1,21 @@ { "code": "zh-CN", - "language": "Chinese (Simplified)", "country": "China", "fallback": false, + "language": "Chinese (Simplified)", "translations": { - "hex.diffing.algorithm.simple.name": "逐个字节简单算法", - "hex.diffing.algorithm.simple.description": "简单的 O(N) 逐字节比较。\n只能识别数据末尾的字节修改和插入/删除", - "hex.diffing.algorithm.myers.name": "迈尔斯位向量算法", "hex.diffing.algorithm.myers.description": "智能的 O(N*M) 比较算法。可以识别数据中任何位置的修改、插入和删除", + "hex.diffing.algorithm.myers.name": "迈尔斯位向量算法", "hex.diffing.algorithm.myers.settings.window_size": "窗口大小", - "hex.diffing.view.diff.name": "差异", + "hex.diffing.algorithm.simple.description": "简单的 O(N) 逐字节比较。\n只能识别数据末尾的字节修改和插入/删除", + "hex.diffing.algorithm.simple.name": "逐个字节简单算法", "hex.diffing.view.diff.added": "添加", + "hex.diffing.view.diff.algorithm": "差异算法", "hex.diffing.view.diff.modified": "修改", + "hex.diffing.view.diff.name": "差异", "hex.diffing.view.diff.provider_a": "提供者A", "hex.diffing.view.diff.provider_b": "提供者B", "hex.diffing.view.diff.removed": "移除", - "hex.diffing.view.diff.algorithm": "差异算法", "hex.diffing.view.diff.settings": "无可用设置", "hex.diffing.view.diff.settings.no_settings": "无可用设置" } diff --git a/plugins/disassembler/romfs/lang/zh_CN.json b/plugins/disassembler/romfs/lang/zh_CN.json index 1fe9e0254..0db4338a1 100644 --- a/plugins/disassembler/romfs/lang/zh_CN.json +++ b/plugins/disassembler/romfs/lang/zh_CN.json @@ -17,7 +17,7 @@ "hex.disassembler.view.disassembler.bpf.classic": "传统 BPF(cBPF)", "hex.disassembler.view.disassembler.bpf.extended": "扩展 BPF(eBPF)", "hex.disassembler.view.disassembler.disassemble": "反汇编", - "hex.disassembler.view.disassembler.disassembling": "反汇编中...", + "hex.disassembler.view.disassembler.disassembling": "反汇编中……", "hex.disassembler.view.disassembler.disassembly.address": "地址", "hex.disassembler.view.disassembler.disassembly.bytes": "字节", "hex.disassembler.view.disassembler.disassembly.offset": "偏移", @@ -51,20 +51,6 @@ "hex.disassembler.view.disassembler.mos65xx.65816_long_x": "65816 Long X", "hex.disassembler.view.disassembler.mos65xx.65c02": "65C02", "hex.disassembler.view.disassembler.mos65xx.w65c02": "W65C02", - "hex.disassembler.view.disassembler.sh.sh2": "SH2", - "hex.disassembler.view.disassembler.sh.sh2a": "SH2A", - "hex.disassembler.view.disassembler.sh.sh3": "SH3", - "hex.disassembler.view.disassembler.sh.sh4": "SH4", - "hex.disassembler.view.disassembler.sh.sh4a": "SH4A", - "hex.disassembler.view.disassembler.sh.fpu": "FPU", - "hex.disassembler.view.disassembler.sh.dsp": "DSP", - "hex.disassembler.view.disassembler.tricore.110": "110", - "hex.disassembler.view.disassembler.tricore.120": "120", - "hex.disassembler.view.disassembler.tricore.130": "130", - "hex.disassembler.view.disassembler.tricore.131": "131", - "hex.disassembler.view.disassembler.tricore.160": "160", - "hex.disassembler.view.disassembler.tricore.161": "161", - "hex.disassembler.view.disassembler.tricore.162": "162", "hex.disassembler.view.disassembler.name": "反汇编", "hex.disassembler.view.disassembler.position": "位置", "hex.disassembler.view.disassembler.ppc.booke": "PowerPC Book-E", @@ -73,6 +59,20 @@ "hex.disassembler.view.disassembler.region": "代码范围", "hex.disassembler.view.disassembler.riscv.compressed": "压缩的 RISC-V", "hex.disassembler.view.disassembler.settings.mode": "模式", - "hex.disassembler.view.disassembler.sparc.v9": "Sparc V9" + "hex.disassembler.view.disassembler.sh.dsp": "DSP", + "hex.disassembler.view.disassembler.sh.fpu": "FPU", + "hex.disassembler.view.disassembler.sh.sh2": "SH2", + "hex.disassembler.view.disassembler.sh.sh2a": "SH2A", + "hex.disassembler.view.disassembler.sh.sh3": "SH3", + "hex.disassembler.view.disassembler.sh.sh4": "SH4", + "hex.disassembler.view.disassembler.sh.sh4a": "SH4A", + "hex.disassembler.view.disassembler.sparc.v9": "Sparc V9", + "hex.disassembler.view.disassembler.tricore.110": "110", + "hex.disassembler.view.disassembler.tricore.120": "120", + "hex.disassembler.view.disassembler.tricore.130": "130", + "hex.disassembler.view.disassembler.tricore.131": "131", + "hex.disassembler.view.disassembler.tricore.160": "160", + "hex.disassembler.view.disassembler.tricore.161": "161", + "hex.disassembler.view.disassembler.tricore.162": "162" } } \ No newline at end of file diff --git a/plugins/hashes/romfs/lang/zh_CN.json b/plugins/hashes/romfs/lang/zh_CN.json index ad4c94f49..d8f7e28d7 100644 --- a/plugins/hashes/romfs/lang/zh_CN.json +++ b/plugins/hashes/romfs/lang/zh_CN.json @@ -4,8 +4,25 @@ "fallback": false, "language": "Chinese (Simplified)", "translations": { - "hex.hashes.achievement.misc.create_hash.name": "Hash!", "hex.hashes.achievement.misc.create_hash.desc": "通过选择类型、为其命名并单击旁边的加号按钮,在“哈希”视图中创建新的哈希函数。", + "hex.hashes.achievement.misc.create_hash.name": "Hash!", + "hex.hashes.hash.common.input_size": "输入值大小", + "hex.hashes.hash.common.iv": "初始值", + "hex.hashes.hash.common.key": "键", + "hex.hashes.hash.common.output_size": "输出值大小", + "hex.hashes.hash.common.personalization": "个性化", + "hex.hashes.hash.common.poly": "多项式", + "hex.hashes.hash.common.refl_in": "输入值取反", + "hex.hashes.hash.common.refl_out": "输出值取反", + "hex.hashes.hash.common.rounds": "哈希轮数", + "hex.hashes.hash.common.salt": "盐", + "hex.hashes.hash.common.security_level": "安全等级", + "hex.hashes.hash.common.size": "哈希大小", + "hex.hashes.hash.common.standard": "标准", + "hex.hashes.hash.common.standard.custom": "自定义", + "hex.hashes.hash.common.xor_out": "结果异或值", + "hex.hashes.hash.sum": "总和", + "hex.hashes.hash.sum.fold": "折叠结果", "hex.hashes.view.hashes.function": "哈希函数", "hex.hashes.view.hashes.hash": "哈希", "hex.hashes.view.hashes.hover_info": "将鼠标放在 Hex 编辑器的选区上,按住 SHIFT 来查看其哈希。", @@ -14,23 +31,6 @@ "hex.hashes.view.hashes.remove": "移除哈希", "hex.hashes.view.hashes.table.name": "名称", "hex.hashes.view.hashes.table.result": "结果", - "hex.hashes.view.hashes.table.type": "类型", - "hex.hashes.hash.common.iv": "初始值", - "hex.hashes.hash.common.poly": "多项式", - "hex.hashes.hash.common.key": "键", - "hex.hashes.hash.common.security_level": "安全等级", - "hex.hashes.hash.common.size": "哈希大小", - "hex.hashes.hash.common.input_size": "输入值大小", - "hex.hashes.hash.common.output_size": "输出值大小", - "hex.hashes.hash.common.rounds": "哈希轮数", - "hex.hashes.hash.common.salt": "盐", - "hex.hashes.hash.common.standard": "标准", - "hex.hashes.hash.common.standard.custom": "自定义", - "hex.hashes.hash.common.personalization": "个性化", - "hex.hashes.hash.common.refl_in": "输入值取反", - "hex.hashes.hash.common.refl_out": "输出值取反", - "hex.hashes.hash.common.xor_out": "结果异或值", - "hex.hashes.hash.sum": "总和", - "hex.hashes.hash.sum.fold": "折叠结果" + "hex.hashes.view.hashes.table.type": "类型" } } \ No newline at end of file diff --git a/plugins/script_loader/romfs/lang/zh_CN.json b/plugins/script_loader/romfs/lang/zh_CN.json new file mode 100644 index 000000000..15c82f493 --- /dev/null +++ b/plugins/script_loader/romfs/lang/zh_CN.json @@ -0,0 +1,10 @@ +{ + "code": "zh_CN", + "country": "China", + "language": "Chinese (Simplified)", + "translations": { + "hex.script_loader.menu.loading": "加载中……", + "hex.script_loader.menu.no_scripts": "空空如也", + "hex.script_loader.menu.run_script": "运行脚本……" + } +} \ No newline at end of file diff --git a/plugins/ui/romfs/lang/zh_CN.json b/plugins/ui/romfs/lang/zh_CN.json index d093d38aa..ae90b9982 100644 --- a/plugins/ui/romfs/lang/zh_CN.json +++ b/plugins/ui/romfs/lang/zh_CN.json @@ -10,7 +10,7 @@ "hex.ui.common.begin": "起始", "hex.ui.common.big": "大", "hex.ui.common.big_endian": "大端序", - "hex.ui.common.browse": "浏览...", + "hex.ui.common.browse": "浏览……", "hex.ui.common.bytes": "字节", "hex.ui.common.cancel": "取消", "hex.ui.common.choose_file": "选择文件", @@ -28,7 +28,6 @@ "hex.ui.common.encoding.utf8": "UTF-8", "hex.ui.common.end": "末尾", "hex.ui.common.endian": "端序", - "hex.ui.common.warning": "警告", "hex.ui.common.error": "错误", "hex.ui.common.fatal": "致命错误", "hex.ui.common.file": "文件", @@ -41,17 +40,17 @@ "hex.ui.common.little": "小", "hex.ui.common.little_endian": "小端序", "hex.ui.common.load": "加载", - "hex.ui.common.loading": "加载...", + "hex.ui.common.loading": "加载……", "hex.ui.common.match_selection": "匹配选择", "hex.ui.common.name": "名称", "hex.ui.common.no": "否", "hex.ui.common.number_format": "数字进制", "hex.ui.common.octal": "八进制", + "hex.ui.common.off": "关", "hex.ui.common.offset": "偏移", "hex.ui.common.okay": "确认", - "hex.ui.common.open": "打开", "hex.ui.common.on": "开", - "hex.ui.common.off": "关", + "hex.ui.common.open": "打开", "hex.ui.common.path": "路径", "hex.ui.common.percentage": "百分比", "hex.ui.common.processing": "处理", @@ -82,13 +81,16 @@ "hex.ui.common.type.u64": "uint64_t", "hex.ui.common.type.u8": "uint8_t", "hex.ui.common.value": "值", + "hex.ui.common.warning": "警告", "hex.ui.common.yes": "是", + "hex.ui.diagram.byte_type_distribution.plain_text": "纯文本", + "hex.ui.diagram.byte_type_distribution.similar_bytes": "类似字节", "hex.ui.hex_editor.ascii_view": "显示 ASCII 栏", - "hex.ui.hex_editor.custom_encoding_view": "显示高级解码栏", "hex.ui.hex_editor.columns": "栏", - "hex.ui.hex_editor.human_readable_units_footer": "将数据转换为人类可读的单位", + "hex.ui.hex_editor.custom_encoding_view": "显示高级解码栏", "hex.ui.hex_editor.data_size": "数据大小", "hex.ui.hex_editor.gray_out_zero": "显示零字节为灰色", + "hex.ui.hex_editor.human_readable_units_footer": "将数据转换为人类可读的单位", "hex.ui.hex_editor.minimap": "小地图", "hex.ui.hex_editor.minimap.width": "宽度", "hex.ui.hex_editor.no_bytes": "没有可显示的字节", @@ -102,22 +104,20 @@ "hex.ui.pattern_drawer.comment": "注释", "hex.ui.pattern_drawer.double_click": "双击查看更多", "hex.ui.pattern_drawer.end": "结束", - "hex.ui.pattern_drawer.export": "导出为...", + "hex.ui.pattern_drawer.export": "导出为……", "hex.ui.pattern_drawer.favorites": "收藏", "hex.ui.pattern_drawer.local": "本地", "hex.ui.pattern_drawer.size": "大小", "hex.ui.pattern_drawer.spec_name": "显示标准名称", "hex.ui.pattern_drawer.start": "开始", - "hex.ui.pattern_drawer.tree_style.tree": "树", "hex.ui.pattern_drawer.tree_style.auto_expanded": "自动展开树", "hex.ui.pattern_drawer.tree_style.flattened": "扁平化", + "hex.ui.pattern_drawer.tree_style.tree": "树", "hex.ui.pattern_drawer.type": "类型", - "hex.ui.pattern_drawer.updating": "更新模式中...", + "hex.ui.pattern_drawer.updating": "更新模式中……", "hex.ui.pattern_drawer.value": "值", "hex.ui.pattern_drawer.var_name": "名称", - "hex.ui.pattern_drawer.visualizer.unknown": "未知可视化器", "hex.ui.pattern_drawer.visualizer.invalid_parameter_count": "无效参数数", - "hex.ui.diagram.byte_type_distribution.plain_text": "纯文本", - "hex.ui.diagram.byte_type_distribution.similar_bytes": "类似字节" + "hex.ui.pattern_drawer.visualizer.unknown": "未知可视化器" } } \ No newline at end of file diff --git a/plugins/visualizers/romfs/lang/zh_CN.json b/plugins/visualizers/romfs/lang/zh_CN.json index 0a62c0f03..4032aaed5 100644 --- a/plugins/visualizers/romfs/lang/zh_CN.json +++ b/plugins/visualizers/romfs/lang/zh_CN.json @@ -4,18 +4,18 @@ "fallback": false, "language": "Chinese (Simplified)", "translations": { - "hex.visualizers.pl_visualizer.3d.light_position": "光线位置", "hex.visualizers.pl_visualizer.3d.ambient_brightness": "环境亮度", "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "漫射亮度", - "hex.visualizers.pl_visualizer.3d.specular_brightness": "镜面亮度", - "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "物体反射率", "hex.visualizers.pl_visualizer.3d.light_color": "光线颜色", + "hex.visualizers.pl_visualizer.3d.light_position": "光线位置", "hex.visualizers.pl_visualizer.3d.more_settings": "更多设置", + "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "物体反射率", + "hex.visualizers.pl_visualizer.3d.specular_brightness": "镜面亮度", "hex.visualizers.pl_visualizer.3d.texture_file": "纹理文件路径", "hex.visualizers.pl_visualizer.coordinates.latitude": "维度", "hex.visualizers.pl_visualizer.coordinates.longitude": "精度", "hex.visualizers.pl_visualizer.coordinates.query": "查找地址", - "hex.visualizers.pl_visualizer.coordinates.querying": "正在查找地址...", + "hex.visualizers.pl_visualizer.coordinates.querying": "正在查找地址……", "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "找不到地址" } } \ No newline at end of file diff --git a/plugins/yara_rules/romfs/lang/zh_CN.json b/plugins/yara_rules/romfs/lang/zh_CN.json index 540b34ea6..603ce95d3 100644 --- a/plugins/yara_rules/romfs/lang/zh_CN.json +++ b/plugins/yara_rules/romfs/lang/zh_CN.json @@ -12,7 +12,7 @@ "hex.yara_rules.view.yara.match": "匹配规则", "hex.yara_rules.view.yara.matches.identifier": "标识符", "hex.yara_rules.view.yara.matches.variable": "变量", - "hex.yara_rules.view.yara.matching": "匹配中...", + "hex.yara_rules.view.yara.matching": "匹配中……", "hex.yara_rules.view.yara.name": "Yara 规则", "hex.yara_rules.view.yara.no_rules": "没有找到 Yara 规则。请将规则放到 ImHex 的 'yara' 目录下。", "hex.yara_rules.view.yara.reload": "重新加载",