feat: localize Shopee GUI wording

This commit is contained in:
chengma
2026-07-07 14:58:54 +08:00
parent 7838554c3d
commit 862f791fde
25 changed files with 163 additions and 136 deletions
+3 -3
View File
@@ -615,9 +615,9 @@ def _cover_upload_error_message(result):
if reason == "UPLOAD_CROP_REQUIRED":
return "新封面上传后出现裁剪确认框,当前版本未自动处理裁剪弹窗"
if reason == "UPLOAD_STILL_PROCESSING":
return "新封面上传仍在处理中,未取得 Shopee CDN 地址"
return "新封面上传仍在处理中,未取得蝦皮 CDN 地址"
if reason == "UPLOAD_TIMEOUT":
return "新封面上传超时,未取得 Shopee CDN 地址"
return "新封面上传超时,未取得蝦皮 CDN 地址"
if reason == "UPLOAD_TILE_NOT_READY":
return "新封面上传入口未可点击,未开始上传新封面"
if reason == "IMAGE_MANAGER_BUSY":
@@ -648,7 +648,7 @@ def _wait_ready(cdp, timeout=60):
if invalid_text:
raise EditorError(product_unavailable_error_message(invalid_text))
time.sleep(1)
raise EditorError(_open_product_ready_error(cdp, "等待 Shopee 商品编辑器就绪超时"))
raise EditorError(_open_product_ready_error(cdp, "等待蝦皮商品编辑器就绪超时"))
def _ensure_page_domains(cdp):
+2 -2
View File
@@ -101,7 +101,7 @@ class MainWindow(QMainWindow):
self.tabs.currentChanged.connect(self._on_tab_changed)
for title in TAB_TITLES:
self.tabs.addTab(self._build_tab(title), title)
self.tabs.setTabIcon(TAB_TITLES.index("③ 更新shopee"), _warning_dot_icon())
self.tabs.setTabIcon(TAB_TITLES.index("③ 更新蝦皮"), _warning_dot_icon())
self.setCentralWidget(self.tabs)
self.statusBar().showMessage("就绪")
@@ -130,7 +130,7 @@ class MainWindow(QMainWindow):
cover_prompts_dir=appconfig.cover_prompts_dir(self.config),
open_accounts_callback=lambda: self.open_accounts_tab(),
)
if title == "③ 更新shopee":
if title == "③ 更新蝦皮":
return ApplyTab(
db_path=self.db_path,
config=self.config,
+10 -11
View File
@@ -194,7 +194,7 @@ class ApplyTab(QWidget):
self.empty_state_card,
self.empty_state_label,
self.empty_state_button,
"第一步:前往『④账号管理』配置并登录账号,再回到③更新 Shopee。",
"第一步:前往『④账号管理』配置并登录账号,再回到③更新蝦皮。",
self.open_accounts_callback is not None,
)
return
@@ -327,12 +327,12 @@ class ApplyTab(QWidget):
f"店铺:{self.model.account_name_for(task)}",
"",
"将保留新标题和新封面路径,只把本地状态退回可更新。",
"不会触碰 Shopee,也不会自动回写 Excel。",
"不会触碰蝦皮,也不会自动回写 Excel。",
]
if getattr(task, "committed", 0):
lines.extend([
"",
"注意:该记录已经提交过线上。本地重置不会回滚 Shopee,重复更新会再次提交线上。",
"注意:该记录已经提交过线上。本地重置不会回滚蝦皮,重复更新会再次提交线上。",
])
answer = QMessageBox.question(
self,
@@ -471,7 +471,7 @@ class ApplyTab(QWidget):
intro = (
"即将检查当前筛选结果。\n\n"
if dry_run
else "即将按当前筛选结果分批更新 Shopee 线上商品。\n\n"
else "即将按当前筛选结果分批更新蝦皮线上商品。\n\n"
)
return (
intro
@@ -487,7 +487,7 @@ class ApplyTab(QWidget):
+ f"成功后关闭新页={close_text},"
+ f"多账号并行={parallel_text}\n\n"
+ (
"检查只写运行日志,不打开 Shopee、不点击「更新」、不改任务状态。"
"检查只写运行日志,不打开蝦皮、不点击「更新」、不改任务状态。"
if dry_run
else f"确认后会打开商品编辑页、替换标题/允许时替换封面,并按每批最多 {batch_size} 条点击「更新」提交线上;点击停止后不再开始下一条或下一批。"
)
@@ -500,7 +500,7 @@ class ApplyTab(QWidget):
if not update_cfg.get("allow_real_submit", False):
return (
"设置未开启「允许真实提交线上商品」,已阻止本次更新。\n"
"请到⑤设置 > Shopee 更新安全开启该开关后再开始更新。"
"请到⑤设置 > 蝦皮更新安全开启该开关后再开始更新。"
)
if not update_cfg.get("allow_cover_update", False):
cover_tasks = [
@@ -511,7 +511,7 @@ class ApplyTab(QWidget):
if cover_tasks:
return (
"设置未开启「允许更新封面」,当前任务包含新封面路径,已阻止本次更新。\n"
"请到⑤设置 > Shopee 更新安全开启该开关,或先筛掉含新封面的任务。"
"请到⑤设置 > 蝦皮更新安全开启该开关,或先筛掉含新封面的任务。"
)
return None
@@ -674,7 +674,7 @@ class ApplyTab(QWidget):
logged_out = payload.get("logged_out") or []
if logged_out:
lines.append(
"以下账号未登录 Shopee:"
"以下账号未登录蝦皮:"
+ "、".join(self._account_label(item) for item in logged_out)
)
self._show_account_guide("\n".join(lines))
@@ -683,7 +683,7 @@ class ApplyTab(QWidget):
full_message = (
f"{message}\n\n"
"本轮更新已中止,不会自动打开账号 Chrome,也不会提交任何商品。\n"
"请先到「④ 账号管理」配置账号、启动对应账号 Chrome,并确认已人工登录 Shopee。"
"请先到「④ 账号管理」配置账号、启动对应账号 Chrome,并确认已人工登录蝦皮。"
)
QMessageBox.warning(self, "账号未就绪", full_message)
self._set_status(full_message.replace("\n", " "))
@@ -805,7 +805,7 @@ class ApplyTab(QWidget):
def _apply_summary_message(self, apply_summary, write_back_payload=None, error=None):
dry_run = bool(apply_summary.get("dry_run"))
lines = [
"检查本轮更新完成,未打开 Shopee、未提交线上、未改任务状态。"
"检查本轮更新完成,未打开蝦皮、未提交线上、未改任务状态。"
if dry_run
else "更新完成。",
"{success_label}:{applied},失败:{failed},略过:{skipped}".format(
@@ -825,4 +825,3 @@ class ApplyTab(QWidget):
if error:
lines.append(str(error))
return "\n".join(lines)
+3 -4
View File
@@ -202,7 +202,7 @@ class CollectTab(QWidget):
full_message = (
f"{message}\n\n"
"本轮采集已中止,不会自动打开账号 Chrome。\n"
"请先到「④ 账号管理」配置账号、启动对应账号 Chrome,并确认已人工登录 Shopee。"
"请先到「④ 账号管理」配置账号、启动对应账号 Chrome,并确认已人工登录蝦皮。"
)
QMessageBox.warning(self, "账号未就绪", full_message)
self._set_status(full_message.replace("\n", " "))
@@ -470,7 +470,7 @@ class CollectTab(QWidget):
f"已提交线上:{committed_count}",
"",
"软删除后,该批次不会再出现在①/②/③页面、筛选、采集、生成、更新或回写入口中。",
"软删除只隐藏本地批次,不会回滚 Shopee 线上修改,不删除原始 Excel,也不删除本地图片。",
"软删除只隐藏本地批次,不会回滚蝦皮线上修改,不删除原始 Excel,也不删除本地图片。",
]
answer = QMessageBox.question(
self,
@@ -673,7 +673,7 @@ class CollectTab(QWidget):
logged_out = payload.get("logged_out") or []
if logged_out:
lines.append(
"以下账号未登录 Shopee:"
"以下账号未登录蝦皮:"
+ "、".join(self._account_label(item) for item in logged_out)
)
self._show_account_guide("\n".join(lines))
@@ -837,4 +837,3 @@ class CollectTab(QWidget):
"" if unmatched == 0 else f"{unmatched} 条任务别名未匹配账号,阶段显示为“略过”"
)
+2 -2
View File
@@ -624,13 +624,13 @@ class GenerateTab(QWidget):
"重置封面:只清空新封面,保留新标题和手动微调标题。",
"重置全部:清空新标题和新封面。",
"",
"不会触碰 Shopee,也不会自动回写 Excel;后续重新生成会消耗 cmhub 点数。",
"不会触碰蝦皮,也不会自动回写 Excel;后续重新生成会消耗 cmhub 点数。",
"默认不删除本地新封面文件。",
])
if committed_count:
lines.extend([
"",
f"注意:其中 {committed_count} 条已经提交过线上。本地重置不会回滚 Shopee,重生成后再更新会再次提交线上。",
f"注意:其中 {committed_count} 条已经提交过线上。本地重置不会回滚蝦皮,重生成后再更新会再次提交线上。",
])
box = QMessageBox(self)
box.setWindowTitle("重置生成结果")
+1 -1
View File
@@ -336,7 +336,7 @@ class SettingsTab(QWidget):
"settingsGenerationSectionTitle",
)
self.shopee_update_section_title = self._section_title(
"Shopee 更新安全 / 执行模式",
"蝦皮更新安全 / 执行模式",
"settingsShopeeUpdateSectionTitle",
)
self.infrastructure_section_title = self._section_title(
+1 -1
View File
@@ -55,7 +55,7 @@ except ModuleNotFoundError as exc:
TAB_TITLES = [
"① 导入采集",
"② AI生成",
"③ 更新shopee",
"③ 更新蝦皮",
"④ 账号管理",
"⑤ 设置",
]
+4 -4
View File
@@ -806,7 +806,7 @@ class ApplyWorker(BaseWorker):
task=task,
)
self._write_diagnostic_log(
"Shopee更新任务失败",
"蝦皮更新任务失败",
level="ERROR",
step=failed_step,
task=task,
@@ -829,7 +829,7 @@ class ApplyWorker(BaseWorker):
level="error",
)
self._write_diagnostic_log(
"Shopee更新任务异常",
"蝦皮更新任务异常",
level="ERROR",
step=current_step,
task=task,
@@ -1001,7 +1001,7 @@ class ApplyWorker(BaseWorker):
)
for item in blocked.get("logged_out") or []:
self._log_run_event(
"step=login_check result=blocked detail=账号 {alias} 未登录 Shopee: {reason}".format(
"step=login_check result=blocked detail=账号 {alias} 未登录蝦皮: {reason}".format(
alias=item.get("alias") or "",
reason=item.get("reason") or "",
),
@@ -1460,7 +1460,7 @@ class CollectWorker(BaseWorker):
)
for item in blocked.get("logged_out") or []:
self._log_run_event(
"step=preflight result=blocked detail=账号 {alias} 未登录 Shopee: {reason}".format(
"step=preflight result=blocked detail=账号 {alias} 未登录蝦皮: {reason}".format(
alias=item.get("alias") or "",
reason=item.get("reason") or "",
),