Skip to content

Commit fa1bd08

Browse files
committed
🎉 v2.0.3: 修复按钮显示和国际化问题
✅ 修复PyInstaller配置,添加语言文件包含 ✅ 修复所有硬编码中文文本的国际化问题 ✅ 修复补丁状态'已补丁'的国际化显示 ✅ 完善工作线程和补丁操作的多语言支持 ✅ 更新版本号到v2.0.3 修复问题: - 按钮显示键名而不是实际文本 - 语言文件在打包后缺失 - 工作线程日志硬编码中文 - 补丁状态显示硬编码中文
1 parent a308467 commit fa1bd08

File tree

8 files changed

+378
-157
lines changed

8 files changed

+378
-157
lines changed

augment_tools_core/patch_manager.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@
1414

1515
from .common_utils import print_info, print_success, print_error, print_warning, IDEType
1616

17+
# 导入语言管理器,但要处理可能的导入错误
18+
try:
19+
from language_manager import get_text
20+
LANGUAGE_SUPPORT = True
21+
except ImportError:
22+
LANGUAGE_SUPPORT = False
23+
def get_text(key, **kwargs):
24+
return key
25+
1726

1827
class PatchMode(Enum):
1928
"""补丁模式枚举"""
@@ -184,15 +193,15 @@ def get_patch_status(self, file_path: str) -> str:
184193
"""获取文件的补丁状态"""
185194
try:
186195
if not os.path.exists(file_path):
187-
return "文件不存在"
188-
196+
return get_text("patch.status.file_not_found") if LANGUAGE_SUPPORT else "文件不存在"
197+
189198
with open(file_path, 'r', encoding='utf-8') as f:
190199
content = f.read()
191-
200+
192201
if self._is_already_patched(content):
193-
return "已补丁"
202+
return get_text("patch.status.patched") if LANGUAGE_SUPPORT else "已补丁"
194203
else:
195-
return "未补丁"
196-
204+
return get_text("patch.status.not_patched") if LANGUAGE_SUPPORT else "未补丁"
205+
197206
except Exception:
198-
return "状态未知"
207+
return get_text("patch.status.status_unknown") if LANGUAGE_SUPPORT else "状态未知"

config/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"language": "zh_CN",
2+
"language": "en_US",
33
"first_run": false,
44
"window_geometry": "680x780",
55
"last_selected_ide": "Cursor",

gui_qt6/components.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
"""
66

77
from PyQt6.QtWidgets import (
8-
QPushButton, QLabel, QFrame, QVBoxLayout,
8+
QPushButton, QLabel, QFrame, QVBoxLayout,
99
QHBoxLayout, QWidget, QScrollArea
1010
)
1111
from PyQt6.QtCore import Qt, pyqtSignal
1212
from PyQt6.QtGui import QFont, QCursor
1313
from .font_manager import get_button_font, get_default_font, get_title_font
14+
from language_manager import get_text
1415

1516

1617
class ModernButton(QPushButton):
@@ -198,7 +199,7 @@ def _setup_ui(self):
198199
layout.setContentsMargins(0, 0, 0, 0)
199200

200201
# 语言标签
201-
self.label = SecondaryLabel("语言:")
202+
self.label = SecondaryLabel(get_text("app.language"))
202203
layout.addWidget(self.label)
203204

204205
# 语言下拉框 - 将在主窗口中实现

gui_qt6/main_page.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -763,20 +763,21 @@ def _on_scan_completed(self, results: dict):
763763
ide_results = results.get(ide_type.value, [])
764764

765765
if not ide_results:
766-
self.patch_status_label.setText("状态: 未找到扩展文件")
766+
self.patch_status_label.setText(get_text("status.not_scanned"))
767767
self.patch_status_label.setStyleSheet("color: #6b7280; font-style: italic;")
768768
else:
769-
patched_count = sum(1 for r in ide_results if r['status'] == '已补丁')
769+
patched_status = get_text("patch.status.patched")
770+
patched_count = sum(1 for r in ide_results if r['status'] == patched_status)
770771
total_count = len(ide_results)
771772

772773
if patched_count == 0:
773-
self.patch_status_label.setText(f"状态: 未补丁 ({total_count} 个文件)")
774+
self.patch_status_label.setText(f"{get_text('status.not_scanned')}: {get_text('patch.status.not_patched')} ({total_count} 个文件)")
774775
self.patch_status_label.setStyleSheet("color: #dc2626; font-weight: bold;")
775776
elif patched_count == total_count:
776-
self.patch_status_label.setText(f"状态: 已补丁 ({patched_count}/{total_count})")
777+
self.patch_status_label.setText(f"{get_text('status.ready')}: {get_text('patch.status.patched')} ({patched_count}/{total_count})")
777778
self.patch_status_label.setStyleSheet("color: #059669; font-weight: bold;")
778779
else:
779-
self.patch_status_label.setText(f"状态: 部分补丁 ({patched_count}/{total_count})")
780+
self.patch_status_label.setText(f"{get_text('status.warning')}: 部分补丁 ({patched_count}/{total_count})")
780781
self.patch_status_label.setStyleSheet("color: #d97706; font-weight: bold;")
781782

782783
def _on_patch_file_found(self, file_path: str, status: str):

gui_qt6/patch_worker.py

Lines changed: 76 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from augment_tools_core.common_utils import IDEType, print_info, print_success, print_error, print_warning
1010
from augment_tools_core.patch_manager import PatchManager, PatchMode, PatchResult
1111
from augment_tools_core.extension_finder import ExtensionFinder
12+
from language_manager import get_text
1213

1314

1415
class PatchWorker(QThread):
@@ -30,55 +31,56 @@ def __init__(self, ide_type: IDEType, patch_mode: PatchMode, portable_root: Opti
3031
def run(self):
3132
"""执行补丁操作"""
3233
try:
33-
self.progress_updated.emit("🔍 正在查找扩展文件...")
34-
34+
self.progress_updated.emit(get_text("patch.searching"))
35+
3536
# 查找扩展文件
3637
extension_files = self.extension_finder.find_extension_files(
3738
self.ide_type, self.portable_root
3839
)
39-
40+
4041
if not extension_files:
41-
self.patch_completed.emit(False, f"未找到 {self.ide_type.value} 的扩展文件")
42+
self.patch_completed.emit(False, get_text("patch.not_found", ide_type=self.ide_type.value))
4243
return
43-
44-
self.progress_updated.emit(f"📁 找到 {len(extension_files)} 个扩展文件")
45-
44+
45+
self.progress_updated.emit(get_text("patch.found_files", count=len(extension_files)))
46+
4647
# 对每个文件应用补丁
4748
success_count = 0
4849
total_files = len(extension_files)
49-
50+
5051
for i, file_path in enumerate(extension_files, 1):
51-
self.progress_updated.emit(f"🔧 正在处理文件 {i}/{total_files}: {file_path}")
52-
52+
self.progress_updated.emit(get_text("patch.processing",
53+
current=i, total=total_files, file=file_path))
54+
5355
# 检查文件状态
5456
status = self.patch_manager.get_patch_status(file_path)
5557
self.file_found.emit(file_path, status)
56-
57-
if status == "已补丁":
58-
self.progress_updated.emit(f"⏭️ 文件已补丁,跳过: {file_path}")
58+
59+
if status == get_text("patch.status.patched"):
60+
self.progress_updated.emit(get_text("patch.already_patched", file=file_path))
5961
continue
60-
62+
6163
# 应用补丁
6264
result = self.patch_manager.apply_patch(file_path, self.patch_mode)
63-
65+
6466
if result.success:
6567
success_count += 1
66-
self.progress_updated.emit(f"✅ 补丁成功: {file_path}")
68+
self.progress_updated.emit(get_text("patch.patch_success", file=file_path))
6769
else:
68-
self.progress_updated.emit(f"❌ 补丁失败: {result.message}")
69-
70+
self.progress_updated.emit(get_text("patch.patch_failed", message=result.message))
71+
7072
# 完成总结
7173
if success_count > 0:
72-
message = f"补丁操作完成!成功处理 {success_count}/{total_files} 个文件"
74+
message = get_text("patch.completed", success=success_count, total=total_files)
7375
self.progress_updated.emit(f"🎉 {message}")
7476
self.patch_completed.emit(True, message)
7577
else:
76-
message = "没有文件被成功补丁"
78+
message = get_text("patch.no_success")
7779
self.progress_updated.emit(f"⚠️ {message}")
7880
self.patch_completed.emit(False, message)
79-
81+
8082
except Exception as e:
81-
error_msg = f"补丁操作失败: {str(e)}"
83+
error_msg = get_text("patch.error", error=str(e))
8284
self.progress_updated.emit(f"❌ {error_msg}")
8385
self.patch_completed.emit(False, error_msg)
8486

@@ -100,46 +102,47 @@ def __init__(self, ide_type: IDEType, portable_root: Optional[str] = None):
100102
def run(self):
101103
"""执行恢复操作"""
102104
try:
103-
self.progress_updated.emit("🔍 正在查找扩展文件...")
104-
105+
self.progress_updated.emit(get_text("patch.searching"))
106+
105107
# 查找扩展文件
106108
extension_files = self.extension_finder.find_extension_files(
107109
self.ide_type, self.portable_root
108110
)
109-
111+
110112
if not extension_files:
111-
self.restore_completed.emit(False, f"未找到 {self.ide_type.value} 的扩展文件")
113+
self.restore_completed.emit(False, get_text("patch.not_found", ide_type=self.ide_type.value))
112114
return
113-
114-
self.progress_updated.emit(f"📁 找到 {len(extension_files)} 个扩展文件")
115-
115+
116+
self.progress_updated.emit(get_text("patch.found_files", count=len(extension_files)))
117+
116118
# 对每个文件尝试恢复
117119
success_count = 0
118120
total_files = len(extension_files)
119-
121+
120122
for i, file_path in enumerate(extension_files, 1):
121-
self.progress_updated.emit(f"🔄 正在恢复文件 {i}/{total_files}: {file_path}")
122-
123+
self.progress_updated.emit(get_text("patch.restoring",
124+
current=i, total=total_files, file=file_path))
125+
123126
result = self.patch_manager.restore_from_backup(file_path)
124-
127+
125128
if result.success:
126129
success_count += 1
127-
self.progress_updated.emit(f"✅ 恢复成功: {file_path}")
130+
self.progress_updated.emit(get_text("patch.restore_success", file=file_path))
128131
else:
129-
self.progress_updated.emit(f"⚠️ 恢复跳过: {result.message}")
130-
132+
self.progress_updated.emit(get_text("patch.restore_skipped", message=result.message))
133+
131134
# 完成总结
132135
if success_count > 0:
133-
message = f"恢复操作完成!成功恢复 {success_count}/{total_files} 个文件"
136+
message = get_text("patch.restore_completed", success=success_count, total=total_files)
134137
self.progress_updated.emit(f"🎉 {message}")
135138
self.restore_completed.emit(True, message)
136139
else:
137-
message = "没有文件需要恢复或恢复失败"
140+
message = get_text("patch.restore_no_success")
138141
self.progress_updated.emit(f"⚠️ {message}")
139142
self.restore_completed.emit(False, message)
140-
143+
141144
except Exception as e:
142-
error_msg = f"恢复操作失败: {str(e)}"
145+
error_msg = get_text("patch.restore_error", error=str(e))
143146
self.progress_updated.emit(f"❌ {error_msg}")
144147
self.restore_completed.emit(False, error_msg)
145148

@@ -162,16 +165,16 @@ def __init__(self, ide_types: List[IDEType], portable_roots: Optional[Dict[IDETy
162165
def run(self):
163166
"""执行扫描操作"""
164167
try:
165-
self.progress_updated.emit("🔍 开始扫描所有IDE的扩展文件...")
166-
168+
self.progress_updated.emit(get_text("patch.scanning"))
169+
167170
results = {}
168-
171+
169172
for ide_type in self.ide_types:
170-
self.progress_updated.emit(f"📂 正在扫描 {ide_type.value}...")
171-
173+
self.progress_updated.emit(get_text("patch.scanning_ide", ide_type=ide_type.value))
174+
172175
portable_root = self.portable_roots.get(ide_type)
173176
extension_files = self.extension_finder.find_extension_files(ide_type, portable_root)
174-
177+
175178
ide_results = []
176179
for file_path in extension_files:
177180
status = self.patch_manager.get_patch_status(file_path)
@@ -180,15 +183,16 @@ def run(self):
180183
'status': status
181184
})
182185
self.file_found.emit(ide_type.value, file_path, status)
183-
186+
184187
results[ide_type.value] = ide_results
185-
self.progress_updated.emit(f"✅ {ide_type.value} 扫描完成,找到 {len(extension_files)} 个文件")
186-
187-
self.progress_updated.emit("🎉 扫描完成!")
188+
self.progress_updated.emit(get_text("patch.scan_completed",
189+
ide_type=ide_type.value, count=len(extension_files)))
190+
191+
self.progress_updated.emit(get_text("patch.scan_finished"))
188192
self.scan_completed.emit(results)
189-
193+
190194
except Exception as e:
191-
error_msg = f"扫描失败: {str(e)}"
195+
error_msg = get_text("patch.scan_error", error=str(e))
192196
self.progress_updated.emit(f"❌ {error_msg}")
193197
self.scan_completed.emit({})
194198

@@ -219,32 +223,33 @@ def __init__(self, ide_configs: Dict[IDEType, Dict]):
219223
def run(self):
220224
"""执行批量补丁操作"""
221225
try:
222-
self.progress_updated.emit("🚀 开始批量补丁操作...")
223-
226+
self.progress_updated.emit(get_text("patch.batch_starting"))
227+
224228
total_ides = len(self.ide_configs)
225229
results = {}
226230
overall_success = True
227-
231+
228232
for i, (ide_type, config) in enumerate(self.ide_configs.items(), 1):
229-
self.progress_updated.emit(f"🔧 正在处理 {ide_type.value} ({i}/{total_ides})...")
230-
233+
self.progress_updated.emit(get_text("patch.batch_processing",
234+
ide_type=ide_type.value, current=i, total=total_ides))
235+
231236
patch_mode = config.get('patch_mode', PatchMode.RANDOM)
232237
portable_root = config.get('portable_root')
233-
238+
234239
# 查找扩展文件
235240
extension_files = self.extension_finder.find_extension_files(ide_type, portable_root)
236-
241+
237242
if not extension_files:
238-
message = f"未找到扩展文件"
243+
message = get_text("patch.batch_no_files")
239244
results[ide_type.value] = {'success': False, 'message': message, 'files': []}
240245
self.ide_completed.emit(ide_type.value, False, message)
241246
overall_success = False
242247
continue
243-
248+
244249
# 应用补丁
245250
success_count = 0
246251
file_results = []
247-
252+
248253
for file_path in extension_files:
249254
result = self.patch_manager.apply_patch(file_path, patch_mode)
250255
file_results.append({
@@ -254,30 +259,30 @@ def run(self):
254259
})
255260
if result.success:
256261
success_count += 1
257-
262+
258263
# 记录结果
259264
ide_success = success_count > 0
260-
message = f"成功补丁 {success_count}/{len(extension_files)} 个文件"
265+
message = get_text("patch.batch_success", success=success_count, total=len(extension_files))
261266
results[ide_type.value] = {
262267
'success': ide_success,
263268
'message': message,
264269
'files': file_results
265270
}
266-
271+
267272
self.ide_completed.emit(ide_type.value, ide_success, message)
268273
if not ide_success:
269274
overall_success = False
270-
275+
271276
# 完成总结
272277
if overall_success:
273-
final_message = f"批量补丁完成!成功处理 {total_ides} 个IDE"
278+
final_message = get_text("patch.batch_completed", count=total_ides)
274279
else:
275-
final_message = f"批量补丁部分成功,请查看详细结果"
276-
280+
final_message = get_text("patch.batch_partial")
281+
277282
self.progress_updated.emit(f"🎉 {final_message}")
278283
self.batch_completed.emit(overall_success, final_message, results)
279-
284+
280285
except Exception as e:
281-
error_msg = f"批量补丁失败: {str(e)}"
286+
error_msg = get_text("patch.batch_error", error=str(e))
282287
self.progress_updated.emit(f"❌ {error_msg}")
283288
self.batch_completed.emit(False, error_msg, {})

0 commit comments

Comments
 (0)