From d5fc9c1c07d36234668754d48a1b110f7ecb5ceb Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Wed, 22 Jul 2026 10:38:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E8=A1=A5=20es/ja/ko/ru=20?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=96=87=E6=A1=88=20+=20=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=20pubspec=20=E9=87=8D=E5=A4=8D=E4=BE=9D=E8=B5=96=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HEAD 上客户端编译不过,两处: 1. pay-v2 给 AppText 加了 28 个支付相关 getter,只补了 zh/en, es/ja/ko/ru 四个 Strings* 实现类没跟上 → non_abstract_class_ inherits_abstract_member,flutter analyze/test/build 全挂。 本次按 zh/en 原文补齐四语(购买/支付方式/USDT 收款/支付宝跳转/ 订单态等 28 条),用词沿用生命周期中文词的对应译法。 2. pubspec.yaml 里 url_launcher 声明了两次(line 23 与 line 30), yaml Duplicate mapping key 直接让 flutter 工具链抛异常。删掉 后加的那条重复声明,保留带原注释的首条。 验证:flutter analyze 仅剩 3 条既有 info;flutter build ios --release 成功并已装到 iPad Pro 真机。(test/golden 34 个失败是既有 UI 漂移, 与本次改动无关——goldens 不涉及 es/ja/ko/ru。) Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu --- client/lib/l10n/strings_es.dart | 58 +++++++++++++++++++++++++++++++++ client/lib/l10n/strings_ja.dart | 58 +++++++++++++++++++++++++++++++++ client/lib/l10n/strings_ko.dart | 58 +++++++++++++++++++++++++++++++++ client/lib/l10n/strings_ru.dart | 58 +++++++++++++++++++++++++++++++++ client/pubspec.yaml | 1 - 5 files changed, 232 insertions(+), 1 deletion(-) diff --git a/client/lib/l10n/strings_es.dart b/client/lib/l10n/strings_es.dart index 53cf6ff..5c143a0 100644 --- a/client/lib/l10n/strings_es.dart +++ b/client/lib/l10n/strings_es.dart @@ -370,4 +370,62 @@ class StringsEs extends AppText { String get ob3Title => 'Privado por diseño'; @override String get ob3Sub => 'Cifrado de extremo a extremo. No guardamos ningún registro de navegación.'; + // ── 支付 / 购买(pay-v2)── + @override + String get purchaseTitle => 'Comprar plan'; + @override + String get paymentTitle => 'Pago'; + @override + String get buyNow => 'Comprar ahora'; + @override + String get payMethodAlipay => 'Alipay'; + @override + String get payMethodCrypto => 'USDT (TRC20)'; + @override + String get choosePayMethod => 'Elige un método de pago'; + @override + String get proMonthly => 'Pro · Mensual'; + @override + String get proQuarterly => 'Pro · Trimestral'; + @override + String get proYearly => 'Pro · Anual'; + @override + String get perQuarter => '/trimestre'; + @override + String get perYear => '/año'; + @override + String get payAmountLabel => 'Importe'; + @override + String get payAddressLabel => 'Dirección'; + @override + String get payNetworkLabel => 'Red'; + @override + String get payExactAmountHint => 'Envía el importe exacto; se activa automáticamente'; + @override + String get copied => 'Copiado'; + @override + String get openAlipay => 'Pagar con Alipay'; + @override + String get openAlipayHint => 'Vuelve tras pagar; esta página se actualiza sola'; + @override + String get openAlipayFailed => 'No se pudo abrir Alipay; comprueba que esté instalado o inténtalo de nuevo'; + @override + String get awaitingPayment => 'Esperando el pago'; + @override + String get paySucceeded => 'Activado'; + @override + String get payExpiresAt => 'Válido hasta'; + @override + String get payDone => 'Hecho'; + @override + String get payFailed => 'Pago fallido'; + @override + String get payRetry => 'Reintentar'; + @override + String get switchPayMethod => 'Cambiar de método de pago'; + @override + String get cancelOrder => 'Cancelar pedido'; + @override + String get qrNotSupported => 'Copia el contenido y ábrelo en Alipay'; } + diff --git a/client/lib/l10n/strings_ja.dart b/client/lib/l10n/strings_ja.dart index 14268b8..ac79869 100644 --- a/client/lib/l10n/strings_ja.dart +++ b/client/lib/l10n/strings_ja.dart @@ -370,4 +370,62 @@ class StringsJa extends AppText { String get ob3Title => '設計段階からプライバシー重視'; @override String get ob3Sub => 'エンドツーエンドで暗号化。閲覧ログは一切保持しません。'; + // ── 支付 / 购买(pay-v2)── + @override + String get purchaseTitle => 'プランを購入'; + @override + String get paymentTitle => 'お支払い'; + @override + String get buyNow => '今すぐ購入'; + @override + String get payMethodAlipay => 'Alipay'; + @override + String get payMethodCrypto => 'USDT (TRC20)'; + @override + String get choosePayMethod => 'お支払い方法を選択'; + @override + String get proMonthly => 'Pro・月額'; + @override + String get proQuarterly => 'Pro・3か月'; + @override + String get proYearly => 'Pro・年額'; + @override + String get perQuarter => '/3か月'; + @override + String get perYear => '/年'; + @override + String get payAmountLabel => '送金額'; + @override + String get payAddressLabel => '送金先アドレス'; + @override + String get payNetworkLabel => 'ネットワーク'; + @override + String get payExactAmountHint => '表示どおりの金額を送金してください。着金後に自動で有効化されます'; + @override + String get copied => 'コピーしました'; + @override + String get openAlipay => 'Alipay で支払う'; + @override + String get openAlipayHint => 'お支払い後に戻ってください。このページは自動更新されます'; + @override + String get openAlipayFailed => 'Alipay を開けませんでした。インストール状況を確認するか、後でもう一度お試しください'; + @override + String get awaitingPayment => 'お支払い待ち'; + @override + String get paySucceeded => '有効化されました'; + @override + String get payExpiresAt => '有効期限'; + @override + String get payDone => '完了'; + @override + String get payFailed => 'お支払いに失敗しました'; + @override + String get payRetry => '再試行'; + @override + String get switchPayMethod => '別のお支払い方法にする'; + @override + String get cancelOrder => '注文をキャンセル'; + @override + String get qrNotSupported => '内容をコピーして Alipay で開いてください'; } + diff --git a/client/lib/l10n/strings_ko.dart b/client/lib/l10n/strings_ko.dart index 8b37b5e..f0ee488 100644 --- a/client/lib/l10n/strings_ko.dart +++ b/client/lib/l10n/strings_ko.dart @@ -370,4 +370,62 @@ class StringsKo extends AppText { String get ob3Title => '설계부터 프라이버시'; @override String get ob3Sub => '종단 간 암호화. 브라우징 기록을 전혀 저장하지 않습니다.'; + // ── 支付 / 购买(pay-v2)── + @override + String get purchaseTitle => '요금제 구매'; + @override + String get paymentTitle => '결제'; + @override + String get buyNow => '지금 구매'; + @override + String get payMethodAlipay => 'Alipay'; + @override + String get payMethodCrypto => 'USDT (TRC20)'; + @override + String get choosePayMethod => '결제 수단 선택'; + @override + String get proMonthly => 'Pro · 월간'; + @override + String get proQuarterly => 'Pro · 분기'; + @override + String get proYearly => 'Pro · 연간'; + @override + String get perQuarter => '/분기'; + @override + String get perYear => '/년'; + @override + String get payAmountLabel => '송금 금액'; + @override + String get payAddressLabel => '받는 주소'; + @override + String get payNetworkLabel => '네트워크'; + @override + String get payExactAmountHint => '표시된 금액과 정확히 일치하게 보내주세요. 입금 후 자동으로 활성화됩니다'; + @override + String get copied => '복사됨'; + @override + String get openAlipay => 'Alipay로 결제'; + @override + String get openAlipayHint => '결제 후 돌아오세요. 이 페이지는 자동으로 새로고침됩니다'; + @override + String get openAlipayFailed => 'Alipay를 열 수 없습니다. 설치 여부를 확인하거나 잠시 후 다시 시도해 주세요'; + @override + String get awaitingPayment => '결제 대기 중'; + @override + String get paySucceeded => '활성화됨'; + @override + String get payExpiresAt => '유효 기간'; + @override + String get payDone => '완료'; + @override + String get payFailed => '결제 실패'; + @override + String get payRetry => '다시 시도'; + @override + String get switchPayMethod => '다른 결제 수단 선택'; + @override + String get cancelOrder => '주문 취소'; + @override + String get qrNotSupported => '내용을 복사한 뒤 Alipay에서 열어주세요'; } + diff --git a/client/lib/l10n/strings_ru.dart b/client/lib/l10n/strings_ru.dart index 74094d1..c4e6999 100644 --- a/client/lib/l10n/strings_ru.dart +++ b/client/lib/l10n/strings_ru.dart @@ -370,4 +370,62 @@ class StringsRu extends AppText { String get ob3Title => 'Приватность по умолчанию'; @override String get ob3Sub => 'Сквозное шифрование. Мы не храним журналы просмотров.'; + // ── 支付 / 购买(pay-v2)── + @override + String get purchaseTitle => 'Купить тариф'; + @override + String get paymentTitle => 'Оплата'; + @override + String get buyNow => 'Купить'; + @override + String get payMethodAlipay => 'Alipay'; + @override + String get payMethodCrypto => 'USDT (TRC20)'; + @override + String get choosePayMethod => 'Выберите способ оплаты'; + @override + String get proMonthly => 'Pro · Помесячно'; + @override + String get proQuarterly => 'Pro · Ежеквартально'; + @override + String get proYearly => 'Pro · Ежегодно'; + @override + String get perQuarter => '/квартал'; + @override + String get perYear => '/год'; + @override + String get payAmountLabel => 'Сумма'; + @override + String get payAddressLabel => 'Адрес'; + @override + String get payNetworkLabel => 'Сеть'; + @override + String get payExactAmountHint => 'Отправьте точную сумму — доступ откроется автоматически'; + @override + String get copied => 'Скопировано'; + @override + String get openAlipay => 'Оплатить через Alipay'; + @override + String get openAlipayHint => 'Вернитесь после оплаты — страница обновится сама'; + @override + String get openAlipayFailed => 'Не удалось открыть Alipay. Проверьте, установлен ли он, или повторите позже'; + @override + String get awaitingPayment => 'Ожидание оплаты'; + @override + String get paySucceeded => 'Активировано'; + @override + String get payExpiresAt => 'Действует до'; + @override + String get payDone => 'Готово'; + @override + String get payFailed => 'Оплата не прошла'; + @override + String get payRetry => 'Повторить'; + @override + String get switchPayMethod => 'Сменить способ оплаты'; + @override + String get cancelOrder => 'Отменить заказ'; + @override + String get qrNotSupported => 'Скопируйте данные и откройте в Alipay'; } + diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 2bd6c5b..b956b5c 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -27,7 +27,6 @@ dependencies: launch_at_startup: ^0.5.1 tray_manager: ^0.5.3 window_manager: ^0.5.1 - url_launcher: ^6.3.0 # 支付 redirect(如支付宝)拉起外部浏览器/App dev_dependencies: flutter_test: