feat(i18n): ③ 原型接单源 — I18N 块由 strings.json 生成,消除重复翻译
原型 design/prototype/screens/{ui-desktop,ui-mobile}.html 的 I18N 数据块不再手写,
改由 strings.json 生成(marker 包裹、生成器唯一写):
- alias.json:protoKey → flutterKey(产品串取单源 zh/en,单源赢);desktop 130 / mobile 143。
- overlay.json:原型专属(开发挡板 + app 没有的串,zh/en);desktop 98 / mobile 104。
- new-strings.json:4 个新产品串(分流规则/自定义/局域网直连/强制),6 语,已并入
strings.json + app_text.dart 抽象声明 + 重生成 6 份 strings_*.dart。
- gen_proto_i18n.mjs:strings.json+alias+overlay → 两份 HTML 的 I18N 块;--check 只比对
marker 块(unrelated HTML 编辑不误报)。
- check-proto-i18n.mjs:两份 HTML 所有 data-i18n key 的 zh/en 必须 resolve。
- ci/check-codegen-drift.sh:加原型 i18n 段(--check 漂移 + resolution 验收)。
同带入之前路由原型 WIP 的 i18n 收口:私有服务内置行→局域网/私网直连行、rr.* 接 data-i18n
(rr.lan→routingLanDirect 等)。路由页其余 UI(段选/添加规则页)仍为独立后续。
验收(自复核全绿):生成器跑通、data-i18n 0 unresolved、两生成器重生成零 diff、
flutter analyze lib/l10n 0 issue、flutter test 244 全绿、new-strings 无红线词。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
This commit is contained in:
@@ -0,0 +1,279 @@
|
||||
{
|
||||
"desktop": {
|
||||
"nav.nodes": "tabServers",
|
||||
"nav.stats": "tabStats",
|
||||
"nav.settings": "settingsTitle",
|
||||
"nav.orders": "ordersTitle",
|
||||
"nav.notifications": "notifTitle",
|
||||
"nav.invite": "inviteTitle",
|
||||
"acc.buy": "purchaseTitle",
|
||||
"acc.orders": "ordersTitle",
|
||||
"acc.invite": "inviteEntry",
|
||||
"acc.inviteSub": "inviteEntrySub",
|
||||
"nt.title": "notifTitle",
|
||||
"nt.tImportant": "notifTypeImportant",
|
||||
"nt.tFeature": "notifTypeFeature",
|
||||
"nt.tNews": "notifTypeNews",
|
||||
"nt.tVersion": "notifTypeVersion",
|
||||
"inv.title": "inviteTitle",
|
||||
"inv.progHead": "inviteProgressTitle",
|
||||
"inv.invited": "inviteStatInvited",
|
||||
"inv.converted": "inviteStatConverted",
|
||||
"inv.earned": "inviteStatDays",
|
||||
"inv.tasksHead": "inviteTasksTitle",
|
||||
"inv.tgTitle": "inviteJoinTgTitle",
|
||||
"inv.tgJoinBtn": "inviteJoinTgBtn",
|
||||
"inv.tgVerifyBtn": "inviteVerifyBtn",
|
||||
"inv.tgDoneBtn": "inviteTaskDone",
|
||||
"set.orders": "ordersTitle",
|
||||
"ord.kOrderNo": "orderNoLabel",
|
||||
"ord.kPlan": "orderPlanLabel",
|
||||
"ord.kAmount": "orderAmountLabel",
|
||||
"ord.kMethod": "orderMethodLabel",
|
||||
"ord.kCreated": "orderCreatedLabel",
|
||||
"ord.actContinue": "orderContinuePay",
|
||||
"ord.actCancel": "cancelOrder",
|
||||
"ord.actRefresh": "orderRefresh",
|
||||
"ord.actBuyAgain": "orderRebuy",
|
||||
"ord.copied": "copied",
|
||||
"pur.channel": "payChannel",
|
||||
"pur.chanUsdt": "payChannelUsdt",
|
||||
"pur.chanCny": "payChannelCny",
|
||||
"pur.pop": "mostPopular",
|
||||
"pur.buy": "buyNow",
|
||||
"pur.network": "payNetworkLabel",
|
||||
"pur.address": "payAddressLabel",
|
||||
"pur.cancel": "cancelOrder",
|
||||
"pur.done": "payDone",
|
||||
"pur.failTitle": "payFailed",
|
||||
"brand.name": "brand",
|
||||
"q.remain": "quotaToday",
|
||||
"nodes.smart": "smartSelect",
|
||||
"nodes.rec": "recommended",
|
||||
"stats.month": "periodMonth",
|
||||
"stats.week": "periodWeek",
|
||||
"stats.today": "periodToday",
|
||||
"stats.down": "statDown",
|
||||
"stats.up": "statUp",
|
||||
"stats.chart": "chartTwoWeeks",
|
||||
"stats.allDevices": "allDevices",
|
||||
"acc.info": "accInfoTitle",
|
||||
"acc.change": "accChange",
|
||||
"acc.myDevices": "myDevices",
|
||||
"acc.lang": "language",
|
||||
"acc.dark": "darkAppearance",
|
||||
"acc.protocol": "protocol",
|
||||
"acc.upgrade": "upgradeBtn",
|
||||
"acc.logout": "signOut",
|
||||
"set.redeem": "redeemTitle",
|
||||
"set.redeemSub": "proMember",
|
||||
"set.autostart": "autostart",
|
||||
"set.autostartSub": "autostartSub",
|
||||
"set.autoconnect": "autoConnect",
|
||||
"set.autoconnectSub": "autoConnectSub",
|
||||
"set.smart": "smartRoute",
|
||||
"set.routeModeSmart": "smartRoute",
|
||||
"set.lang": "language",
|
||||
"set.dark": "darkAppearance",
|
||||
"set.protocol": "protocol",
|
||||
"set.grpAppear": "settingsGroupAppearance",
|
||||
"set.grpAbout": "settingsGroupAbout",
|
||||
"set.update": "checkUpdate",
|
||||
"contact.web": "contactWebsite",
|
||||
"contact.hoursTitle": "contactHoursTitle",
|
||||
"contact.hours": "contactHours",
|
||||
"dl.title": "deviceLimitTitle",
|
||||
"dl.remove": "deviceLimitRemoveOldest",
|
||||
"dl.logout": "signOut",
|
||||
"dev.current": "thisDevice",
|
||||
"dev.remove": "remove",
|
||||
"dev.lastOnline": "devLastOnline",
|
||||
"dev.mRename": "devRename",
|
||||
"dev.mForceLogout": "devForceLogout",
|
||||
"dev.mClearLogin": "devClearLogin",
|
||||
"state.on": "stateOn",
|
||||
"state.off": "followLight",
|
||||
"nav.connect": "tabConnect",
|
||||
"ord.kValid": "payExpiresAt",
|
||||
"acc.email": "accEmail",
|
||||
"acc.pwd": "accPassword",
|
||||
"set.grpConn": "settingsGroupConn",
|
||||
"contact.email": "contactEmail",
|
||||
"login.email": "emailLabel",
|
||||
"login.pwd": "pwLabel",
|
||||
"login.signin": "doLogin",
|
||||
"nav.contact": "contactEntry",
|
||||
"nav.account": "tabMe",
|
||||
"nav.purchase": "purchaseTitle",
|
||||
"nav.devices": "myDevices",
|
||||
"nav.redeem": "redeemCodeTitle",
|
||||
"acc.redeem": "redeemCodeTitle",
|
||||
"nt.tReward": "notifTypeReward",
|
||||
"nt.tPromo": "notifTypePromo",
|
||||
"inv.rewardsHead": "inviteRewardsTitle",
|
||||
"rd.title": "redeemCodeTitle",
|
||||
"rd.ph": "redeemPh",
|
||||
"rd.btn": "redeemBtn",
|
||||
"pur.amount": "payAmountLabel",
|
||||
"pur.switch": "switchPayMethod",
|
||||
"pur.okTitle": "paySucceeded",
|
||||
"pur.retry": "payRetry",
|
||||
"nodes.smartSub": "smartSub",
|
||||
"stats.dur": "statDuration",
|
||||
"acc.devices": "myDevices",
|
||||
"set.smartSub": "smartRouteSub",
|
||||
"set.kill": "killSwitch",
|
||||
"set.killSub": "killSwitchSub",
|
||||
"set.web": "webUserCenter",
|
||||
"contact.intro": "contactIntro",
|
||||
"login.signupTitle": "tabRegister",
|
||||
"nav.routing": "routingRulesTitle",
|
||||
"set.routing": "routingRulesTitle",
|
||||
"set.routingSub": "routingRulesSub"
|
||||
},
|
||||
"mobile": {
|
||||
"brandName": "brand",
|
||||
"dlTitle": "deviceLimitTitle",
|
||||
"dlRemoveLru": "deviceLimitRemoveOldest",
|
||||
"dlRemove": "remove",
|
||||
"dlOnline": "devOnline",
|
||||
"navNodes": "tabServers",
|
||||
"navStats": "tabStats",
|
||||
"rateDown": "download",
|
||||
"rateUp": "upload",
|
||||
"latency": "latency",
|
||||
"searchPh": "searchPh",
|
||||
"smartTitle": "smartSelect",
|
||||
"recommend": "recommended",
|
||||
"periodMonth": "periodMonth",
|
||||
"periodWeek": "periodWeek",
|
||||
"periodToday": "periodToday",
|
||||
"statDur": "statDuration",
|
||||
"chartTwoWeeks": "chartTwoWeeks",
|
||||
"upgrade": "upgradeBtn",
|
||||
"renew": "upgradeBtn",
|
||||
"secAccount": "accInfoTitle",
|
||||
"accChange": "accChange",
|
||||
"myDevices": "myDevices",
|
||||
"thisDevice": "thisDevice",
|
||||
"lastOnline": "devLastOnline",
|
||||
"devRename": "devRename",
|
||||
"devForceLogout": "devForceLogout",
|
||||
"devClearLogin": "devClearLogin",
|
||||
"prefLang": "language",
|
||||
"prefTheme": "darkAppearance",
|
||||
"prefProtocol": "protocol",
|
||||
"followLight": "followLight",
|
||||
"stateOn": "stateOn",
|
||||
"navSettings": "settingsTitle",
|
||||
"navRedeem": "redeemTitle",
|
||||
"logout": "signOut",
|
||||
"navOrders": "ordersTitle",
|
||||
"ordDetailTitle": "orderDetailTitle",
|
||||
"kOrderNo": "orderNoLabel",
|
||||
"kPlan": "orderPlanLabel",
|
||||
"kAmount": "orderAmountLabel",
|
||||
"kMethod": "orderMethodLabel",
|
||||
"kCreated": "orderCreatedLabel",
|
||||
"actContinue": "orderContinuePay",
|
||||
"actCancel": "cancelOrder",
|
||||
"actRefresh": "orderRefresh",
|
||||
"actBuyAgain": "orderRebuy",
|
||||
"connOff": "connectNow",
|
||||
"cbSubOn": "secure",
|
||||
"stOff": "capOff",
|
||||
"stDoing": "capConnecting",
|
||||
"stOn": "capOn",
|
||||
"pillOn": "secure",
|
||||
"authRegister": "tabRegister",
|
||||
"authTagline": "authTagline",
|
||||
"authForgot": "forgotPw",
|
||||
"authTos": "tos",
|
||||
"authSendCode": "sendCode",
|
||||
"authRegBtn": "tabRegister",
|
||||
"devAll": "allDevices",
|
||||
"planPop": "mostPopular",
|
||||
"buyNow": "buyNow",
|
||||
"payChannel": "payChannel",
|
||||
"chanSwUsdt": "payChannelUsdt",
|
||||
"chanSwCny": "payChannelCny",
|
||||
"ordPlan": "orderPlanLabel",
|
||||
"ordAmount": "orderAmountLabel",
|
||||
"payNetwork": "payNetworkLabel",
|
||||
"payAddr": "payAddressLabel",
|
||||
"payCancel": "cancelOrder",
|
||||
"purDone": "payDone",
|
||||
"failTitle": "payFailed",
|
||||
"rowBuyPlan": "purchaseTitle",
|
||||
"inviteEntry": "inviteEntry",
|
||||
"setLaunch": "autostart",
|
||||
"setAutoConn": "autoConnect",
|
||||
"setSmartRoute": "smartRoute",
|
||||
"setGrpAppr": "settingsGroupAppearance",
|
||||
"setGrpAbout": "settingsGroupAbout",
|
||||
"setCheckUpdate": "checkUpdate",
|
||||
"contactWeb": "contactWebsite",
|
||||
"contactHours": "contactHoursTitle",
|
||||
"navNotifications": "notifTitle",
|
||||
"nt1Type": "notifTypeImportant",
|
||||
"nt2Type": "notifTypeFeature",
|
||||
"nt3Type": "notifTypeNews",
|
||||
"nt5Type": "notifTypeVersion",
|
||||
"inviteTitle": "inviteTitle",
|
||||
"inviteHeadline": "inviteEntry",
|
||||
"inviteCode": "inviteCodeLabel",
|
||||
"inviteLink": "inviteLinkLabel",
|
||||
"inviteRewards": "inviteRewardsTitle",
|
||||
"inviteR1": "inviteRewardRegister",
|
||||
"inviteProgress": "inviteProgressTitle",
|
||||
"inviteStatInvited": "inviteStatInvited",
|
||||
"inviteStatConverted": "inviteStatConverted",
|
||||
"inviteStatDays": "inviteStatDays",
|
||||
"inviteTasksTitle": "inviteTasksTitle",
|
||||
"inviteJoinTgTitle": "inviteJoinTgTitle",
|
||||
"inviteJoinTgBtn": "inviteJoinTgBtn",
|
||||
"inviteVerifyBtn": "inviteVerifyBtn",
|
||||
"inviteTaskDone": "inviteTaskDone",
|
||||
"navConnect": "tabConnect",
|
||||
"planFree": "planFreeTag",
|
||||
"accEmail": "accEmail",
|
||||
"accPassword": "accPassword",
|
||||
"navContact": "contactEntry",
|
||||
"kValid": "payExpiresAt",
|
||||
"pillFree": "planFreeTag",
|
||||
"authLogin": "tabLogin",
|
||||
"authEmail": "emailLabel",
|
||||
"authPassword": "pwLabel",
|
||||
"authLoginBtn": "doLogin",
|
||||
"setGrpConn": "settingsGroupConn",
|
||||
"contactEmail": "emailLabel",
|
||||
"navAccount": "tabMe",
|
||||
"smartSub": "smartSub",
|
||||
"devMgmt": "myDevices",
|
||||
"navDevices": "myDevices",
|
||||
"navWebUC": "webUserCenter",
|
||||
"authCode": "codeLabel",
|
||||
"purTitle": "purchaseTitle",
|
||||
"purCheckout": "paymentTitle",
|
||||
"perMo": "perMonthSuffix",
|
||||
"ordUntil": "payExpiresAt",
|
||||
"payAmount": "payAmountLabel",
|
||||
"payOpenAlipay": "openAlipay",
|
||||
"paySwitch": "switchPayMethod",
|
||||
"succTitle": "paySucceeded",
|
||||
"purRetry": "payRetry",
|
||||
"setKill": "killSwitch",
|
||||
"contactHoursVal": "contactHours",
|
||||
"nt4Type": "notifTypeReward",
|
||||
"nt6Type": "notifTypePromo",
|
||||
"inviteEntrySub": "inviteEntrySub",
|
||||
"inviteR2": "inviteRewardFirstBuy",
|
||||
"inviteR3": "inviteRewardJoinTg",
|
||||
"navRedeemCode": "redeemCodeTitle",
|
||||
"redeemPh": "redeemPh",
|
||||
"redeemBtn": "redeemBtn",
|
||||
"navRouting": "routingRulesTitle",
|
||||
"rr.lan": "routingLanDirect",
|
||||
"rr.lanSub": "routingLanForced"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"routingRulesTitle": {
|
||||
"zh": "分流规则",
|
||||
"en": "Routing rules",
|
||||
"ja": "ルーティングルール",
|
||||
"ko": "라우팅 규칙",
|
||||
"ru": "Правила маршрутизации",
|
||||
"es": "Reglas de enrutamiento"
|
||||
},
|
||||
"routingRulesSub": {
|
||||
"zh": "自定义直连 / 走隧道 / 拒绝",
|
||||
"en": "Custom direct / tunnel / reject",
|
||||
"ja": "直接接続 / トンネル / 拒否をカスタム",
|
||||
"ko": "직접 연결 / 터널 / 거부 사용자 지정",
|
||||
"ru": "Настройка: напрямую / туннель / отклонить",
|
||||
"es": "Personalizar: directo / túnel / rechazar"
|
||||
},
|
||||
"routingLanDirect": {
|
||||
"zh": "局域网 / 私网直连",
|
||||
"en": "LAN & private direct",
|
||||
"ja": "LAN・プライベート直接接続",
|
||||
"ko": "LAN / 사설망 직접 연결",
|
||||
"ru": "Локальная и частная сеть напрямую",
|
||||
"es": "LAN y red privada directas"
|
||||
},
|
||||
"routingLanForced": {
|
||||
"zh": "强制,不可关",
|
||||
"en": "Always on",
|
||||
"ja": "常時オン",
|
||||
"ko": "항상 켜짐",
|
||||
"ru": "Всегда включено",
|
||||
"es": "Siempre activo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,814 @@
|
||||
{
|
||||
"desktop": {
|
||||
"acc.billing": {
|
||||
"zh": "购买 & 订单 & 兑换",
|
||||
"en": "Buy · Orders · Redeem"
|
||||
},
|
||||
"acc.buySub": {
|
||||
"zh": "升级 PRO 会员",
|
||||
"en": "Upgrade to PRO"
|
||||
},
|
||||
"acc.ordersSub": {
|
||||
"zh": "查看订单记录",
|
||||
"en": "View order history"
|
||||
},
|
||||
"acc.redeemSub": {
|
||||
"zh": "输入激活码开通",
|
||||
"en": "Activate with a code"
|
||||
},
|
||||
"nt.back": {
|
||||
"zh": "返回",
|
||||
"en": "Back"
|
||||
},
|
||||
"nt.n1t": {
|
||||
"zh": "服务条款与隐私政策更新",
|
||||
"en": "Terms & privacy policy updated"
|
||||
},
|
||||
"nt.n1s": {
|
||||
"zh": "我们更新了服务条款,请查阅最新内容。",
|
||||
"en": "We have updated our terms — please review the latest version."
|
||||
},
|
||||
"nt.n2t": {
|
||||
"zh": "新增日本 · 大阪加速线路",
|
||||
"en": "New Japan · Osaka lines added"
|
||||
},
|
||||
"nt.n2s": {
|
||||
"zh": "三条低延迟线路已上线,欢迎体验。",
|
||||
"en": "Three low-latency lines are now live."
|
||||
},
|
||||
"nt.n3t": {
|
||||
"zh": "邀请好友活动进行中",
|
||||
"en": "Invite-a-friend event is live"
|
||||
},
|
||||
"nt.n3s": {
|
||||
"zh": "邀请好友注册,双方都可获得会员天数。",
|
||||
"en": "Invite friends to sign up — both sides earn membership days."
|
||||
},
|
||||
"nt.n1full": {
|
||||
"zh": "本次更新新增数据留存与第三方共享条款说明,不影响现有账户与订阅权益,建议登录网页用户中心查看完整版本。",
|
||||
"en": "This update adds details on data retention and third-party sharing. It does not affect your existing account or subscription — please review the full version in the web user center."
|
||||
},
|
||||
"nt.n4t": {
|
||||
"zh": "邀请奖励 +3 天已到账",
|
||||
"en": "Referral reward: +3 days credited"
|
||||
},
|
||||
"nt.n4s": {
|
||||
"zh": "好友已完成注册,会员天数已计入你的账户。",
|
||||
"en": "Your friend has completed sign-up — the days have been added to your account."
|
||||
},
|
||||
"nt.n5t": {
|
||||
"zh": "v1.0.73 已发布",
|
||||
"en": "v1.0.73 is out"
|
||||
},
|
||||
"nt.n5s": {
|
||||
"zh": "修复已知问题,建议尽快更新。",
|
||||
"en": "Bug fixes included — update is recommended."
|
||||
},
|
||||
"nt.updateBtn": {
|
||||
"zh": "去更新",
|
||||
"en": "Update now"
|
||||
},
|
||||
"nt.n6t": {
|
||||
"zh": "¥6 月付优惠上线",
|
||||
"en": "¥6/mo promo is live"
|
||||
},
|
||||
"nt.n6s": {
|
||||
"zh": "限时活动,PRO 月付低至 ¥6,先到先得。",
|
||||
"en": "Limited-time offer — PRO monthly as low as ¥6, while it lasts."
|
||||
},
|
||||
"inv.back": {
|
||||
"zh": "返回",
|
||||
"en": "Back"
|
||||
},
|
||||
"inv.lead": {
|
||||
"zh": "分享你的邀请码或链接,好友注册后双方都得会员天数。",
|
||||
"en": "Share your code or link — when a friend signs up, both of you earn membership days."
|
||||
},
|
||||
"inv.r1": {
|
||||
"zh": "好友注册",
|
||||
"en": "Friend signs up"
|
||||
},
|
||||
"inv.r1s": {
|
||||
"zh": "双方各得 3 天",
|
||||
"en": "Both earn 3 days each"
|
||||
},
|
||||
"inv.r2": {
|
||||
"zh": "好友首次购买",
|
||||
"en": "Friend first purchase"
|
||||
},
|
||||
"inv.r2s": {
|
||||
"zh": "双方各得 7 天",
|
||||
"en": "Both earn 7 days each"
|
||||
},
|
||||
"inv.r3": {
|
||||
"zh": "加入 TG 频道",
|
||||
"en": "Join the TG channel"
|
||||
},
|
||||
"inv.r3s": {
|
||||
"zh": "获得 3 天",
|
||||
"en": "Earn 3 days"
|
||||
},
|
||||
"inv.tgSub": {
|
||||
"zh": "+3 天",
|
||||
"en": "+3 days"
|
||||
},
|
||||
"inv.tgDemoPending": {
|
||||
"zh": "演示态 · 待验证",
|
||||
"en": "Demo · pending"
|
||||
},
|
||||
"inv.tgDemoDone": {
|
||||
"zh": "演示态 · 已领取",
|
||||
"en": "Demo · claimed"
|
||||
},
|
||||
"rd.back": {
|
||||
"zh": "返回",
|
||||
"en": "Back"
|
||||
},
|
||||
"rd.label": {
|
||||
"zh": "兑换码",
|
||||
"en": "Redemption code"
|
||||
},
|
||||
"rd.hint": {
|
||||
"zh": "输入卡密即可激活对应时长,激活后立即生效。",
|
||||
"en": "Enter a code to instantly activate plan time."
|
||||
},
|
||||
"set.ordersSub": {
|
||||
"zh": "查看订单记录",
|
||||
"en": "View order history"
|
||||
},
|
||||
"ord.back": {
|
||||
"zh": "返回",
|
||||
"en": "Back"
|
||||
},
|
||||
"ord.details": {
|
||||
"zh": "明细",
|
||||
"en": "Details"
|
||||
},
|
||||
"ord.kStatus": {
|
||||
"zh": "状态",
|
||||
"en": "Status"
|
||||
},
|
||||
"ord.kDeadline": {
|
||||
"zh": "支付截止",
|
||||
"en": "Pay before"
|
||||
},
|
||||
"ord.kTrade": {
|
||||
"zh": "交易流水号",
|
||||
"en": "Trade No."
|
||||
},
|
||||
"ord.actMembership": {
|
||||
"zh": "查看会员",
|
||||
"en": "View membership"
|
||||
},
|
||||
"pur.aliScan": {
|
||||
"zh": "用支付宝扫码支付",
|
||||
"en": "Scan with Alipay to pay"
|
||||
},
|
||||
"pur.back": {
|
||||
"zh": "返回",
|
||||
"en": "Back"
|
||||
},
|
||||
"pur.proIncludes": {
|
||||
"zh": "PRO 全部特性",
|
||||
"en": "Everything in PRO"
|
||||
},
|
||||
"pur.f1": {
|
||||
"zh": "不限时长 · 不限流量",
|
||||
"en": "Unlimited time & data"
|
||||
},
|
||||
"pur.f2": {
|
||||
"zh": "80+ 全球加速线路",
|
||||
"en": "80+ global lines"
|
||||
},
|
||||
"pur.f3": {
|
||||
"zh": "5 台设备同时在线",
|
||||
"en": "5 devices at once"
|
||||
},
|
||||
"pur.f4": {
|
||||
"zh": "优先客服支持",
|
||||
"en": "Priority support"
|
||||
},
|
||||
"pur.month": {
|
||||
"zh": "按月",
|
||||
"en": "Monthly"
|
||||
},
|
||||
"pur.quarter": {
|
||||
"zh": "按季",
|
||||
"en": "Quarterly"
|
||||
},
|
||||
"pur.year": {
|
||||
"zh": "按年",
|
||||
"en": "Yearly"
|
||||
},
|
||||
"pur.usdtHint": {
|
||||
"zh": "请按精确金额(含小数末位)转账,金额用于自动对账识别,多退少不到账。",
|
||||
"en": "Send the exact amount (incl. trailing decimals) — it is used to auto-match your order."
|
||||
},
|
||||
"pur.alipayHint": {
|
||||
"zh": "付款后自动开通,无需手动确认。",
|
||||
"en": "Activated automatically after payment — no manual confirmation needed."
|
||||
},
|
||||
"pur.waitCrypto": {
|
||||
"zh": "等待到账确认…",
|
||||
"en": "Waiting for confirmation…"
|
||||
},
|
||||
"pur.waitAlipay": {
|
||||
"zh": "等待付款确认…",
|
||||
"en": "Waiting for payment…"
|
||||
},
|
||||
"pur.demo": {
|
||||
"zh": "评审演示",
|
||||
"en": "Review demo"
|
||||
},
|
||||
"pur.simPaid": {
|
||||
"zh": "▸ 模拟到账",
|
||||
"en": "▸ Simulate paid"
|
||||
},
|
||||
"pur.simFail": {
|
||||
"zh": "▸ 模拟失败",
|
||||
"en": "▸ Simulate failure"
|
||||
},
|
||||
"pur.failSub": {
|
||||
"zh": "订单已超时,请重试",
|
||||
"en": "Order timed out, please retry"
|
||||
},
|
||||
"plan.free": {
|
||||
"zh": "免费版",
|
||||
"en": "Free"
|
||||
},
|
||||
"q.zero": {
|
||||
"zh": "0 分钟",
|
||||
"en": "0 min"
|
||||
},
|
||||
"nodes.search": {
|
||||
"zh": "搜索加速线路…",
|
||||
"en": "Search lines…"
|
||||
},
|
||||
"nodes.stream": {
|
||||
"zh": "流媒体",
|
||||
"en": "Streaming"
|
||||
},
|
||||
"nodes.hk": {
|
||||
"zh": "香港 · 优选",
|
||||
"en": "Hong Kong · Premium"
|
||||
},
|
||||
"nodes.jp": {
|
||||
"zh": "日本 · 东京",
|
||||
"en": "Japan · Tokyo"
|
||||
},
|
||||
"nodes.sg": {
|
||||
"zh": "新加坡",
|
||||
"en": "Singapore"
|
||||
},
|
||||
"nodes.us": {
|
||||
"zh": "美国 · 洛杉矶",
|
||||
"en": "US · Los Angeles"
|
||||
},
|
||||
"nodes.de": {
|
||||
"zh": "德国 · 法兰克福",
|
||||
"en": "Germany · Frankfurt"
|
||||
},
|
||||
"nodes.unavail": {
|
||||
"zh": "暂不可用",
|
||||
"en": "Unavailable"
|
||||
},
|
||||
"acc.pref": {
|
||||
"zh": "偏好",
|
||||
"en": "Preferences"
|
||||
},
|
||||
"acc.myDevicesSub": {
|
||||
"zh": "重命名 · 强制下线 · 移除",
|
||||
"en": "Rename · force offline · remove"
|
||||
},
|
||||
"ub.title": {
|
||||
"zh": "发现新版本 v2.5.0,建议更新",
|
||||
"en": "New version v2.5.0 available"
|
||||
},
|
||||
"ub.cta": {
|
||||
"zh": "立即更新",
|
||||
"en": "Update"
|
||||
},
|
||||
"dl.desc": {
|
||||
"zh": "你的套餐最多 5 台设备,请移除一台以继续。",
|
||||
"en": "Your plan allows up to 5 devices. Remove one to continue."
|
||||
},
|
||||
"dev.back": {
|
||||
"zh": "返回",
|
||||
"en": "Back"
|
||||
},
|
||||
"dev.now": {
|
||||
"zh": "刚刚",
|
||||
"en": "just now"
|
||||
},
|
||||
"dev.h2": {
|
||||
"zh": "2 小时前",
|
||||
"en": "2h ago"
|
||||
},
|
||||
"dev.yesterday": {
|
||||
"zh": "昨天",
|
||||
"en": "yesterday"
|
||||
},
|
||||
"dev.tRenamed": {
|
||||
"zh": "已重命名(演示)",
|
||||
"en": "Renamed (demo)"
|
||||
},
|
||||
"dev.tLoggedOut": {
|
||||
"zh": "已强制退出(演示)",
|
||||
"en": "Force logged out (demo)"
|
||||
},
|
||||
"dev.tCleared": {
|
||||
"zh": "已清除登录信息(演示)",
|
||||
"en": "Login info cleared (demo)"
|
||||
},
|
||||
"demo.theme": {
|
||||
"zh": "主题",
|
||||
"en": "Theme"
|
||||
},
|
||||
"demo.light": {
|
||||
"zh": "明",
|
||||
"en": "Light"
|
||||
},
|
||||
"demo.dark": {
|
||||
"zh": "暗",
|
||||
"en": "Dark"
|
||||
},
|
||||
"demo.lang": {
|
||||
"zh": "语言",
|
||||
"en": "Language"
|
||||
},
|
||||
"demo.persp": {
|
||||
"zh": "视角",
|
||||
"en": "Perspective"
|
||||
},
|
||||
"demo.upd": {
|
||||
"zh": "更新条",
|
||||
"en": "Banner"
|
||||
},
|
||||
"demo.show": {
|
||||
"zh": "显",
|
||||
"en": "On"
|
||||
},
|
||||
"demo.hide": {
|
||||
"zh": "隐",
|
||||
"en": "Off"
|
||||
},
|
||||
"demo.gate": {
|
||||
"zh": "挡板",
|
||||
"en": "Gate"
|
||||
},
|
||||
"demo.deviceLimit": {
|
||||
"zh": "设备超限",
|
||||
"en": "Device limit"
|
||||
},
|
||||
"login.frame": {
|
||||
"zh": "分屏卡 · 品牌左 / 表单右",
|
||||
"en": "Split card · brand left / form right"
|
||||
},
|
||||
"login.note": {
|
||||
"zh": "(独立静态屏,不并入交互窗口)",
|
||||
"en": "(standalone static screen, outside the interactive window)"
|
||||
},
|
||||
"login.slogan": {
|
||||
"zh": "极速畅连 · 稳定加速线路<br>隐私保护 · 全程无日志",
|
||||
"en": "Fast & stable lines<br>Privacy protected · No logs"
|
||||
},
|
||||
"login.title": {
|
||||
"zh": "登录账户",
|
||||
"en": "Sign in"
|
||||
},
|
||||
"login.signup": {
|
||||
"zh": "没有账户?免费注册",
|
||||
"en": "No account? Sign up free"
|
||||
},
|
||||
"login.pwd2": {
|
||||
"zh": "确认密码",
|
||||
"en": "Confirm password"
|
||||
},
|
||||
"login.signupBtn": {
|
||||
"zh": "免费注册",
|
||||
"en": "Sign up free"
|
||||
},
|
||||
"login.haveAccount": {
|
||||
"zh": "已有账户?登录",
|
||||
"en": "Have an account? Sign in"
|
||||
}
|
||||
},
|
||||
"mobile": {
|
||||
"brandLatin": {
|
||||
"zh": "Pangolin",
|
||||
"en": ""
|
||||
},
|
||||
"demoTheme": {
|
||||
"zh": "主题",
|
||||
"en": "Theme"
|
||||
},
|
||||
"demoLang": {
|
||||
"zh": "语言",
|
||||
"en": "Language"
|
||||
},
|
||||
"demoView": {
|
||||
"zh": "视角",
|
||||
"en": "View"
|
||||
},
|
||||
"demoUpdate": {
|
||||
"zh": "更新",
|
||||
"en": "Update"
|
||||
},
|
||||
"demoGate": {
|
||||
"zh": "挡板",
|
||||
"en": "Gate"
|
||||
},
|
||||
"demoDeviceLimit": {
|
||||
"zh": "设备超限",
|
||||
"en": "Device limit"
|
||||
},
|
||||
"dlDesc": {
|
||||
"zh": "你的账户最多可同时登录 5 台设备,请移除一台后继续。",
|
||||
"en": "Your account allows up to 5 devices at once. Remove one to continue."
|
||||
},
|
||||
"segLight": {
|
||||
"zh": "明",
|
||||
"en": "Light"
|
||||
},
|
||||
"segDark": {
|
||||
"zh": "暗",
|
||||
"en": "Dark"
|
||||
},
|
||||
"segFree": {
|
||||
"zh": "免费版",
|
||||
"en": "Free"
|
||||
},
|
||||
"segPro": {
|
||||
"zh": "PRO",
|
||||
"en": "PRO"
|
||||
},
|
||||
"segShow": {
|
||||
"zh": "显示",
|
||||
"en": "Show"
|
||||
},
|
||||
"segHide": {
|
||||
"zh": "隐藏",
|
||||
"en": "Hide"
|
||||
},
|
||||
"disconnect": {
|
||||
"zh": "断开连接",
|
||||
"en": "Disconnect"
|
||||
},
|
||||
"nHKt": {
|
||||
"zh": "香港 01",
|
||||
"en": "Hong Kong 01"
|
||||
},
|
||||
"nJPt": {
|
||||
"zh": "日本 · 东京 02",
|
||||
"en": "Japan · Tokyo 02"
|
||||
},
|
||||
"nSGt": {
|
||||
"zh": "新加坡 01",
|
||||
"en": "Singapore 01"
|
||||
},
|
||||
"nUSt": {
|
||||
"zh": "美国 · 洛杉矶 03",
|
||||
"en": "USA · Los Angeles 03"
|
||||
},
|
||||
"nTWt": {
|
||||
"zh": "台湾 01",
|
||||
"en": "Taiwan 01"
|
||||
},
|
||||
"tagStream": {
|
||||
"zh": "流媒体",
|
||||
"en": "Streaming"
|
||||
},
|
||||
"tagLowLat": {
|
||||
"zh": "低延迟",
|
||||
"en": "Low latency"
|
||||
},
|
||||
"tagStable": {
|
||||
"zh": "高速稳定",
|
||||
"en": "Fast & stable"
|
||||
},
|
||||
"tagDistant": {
|
||||
"zh": "远距离",
|
||||
"en": "Distant"
|
||||
},
|
||||
"maintenance": {
|
||||
"zh": "维护中",
|
||||
"en": "Maintenance"
|
||||
},
|
||||
"unavail": {
|
||||
"zh": "不可用",
|
||||
"en": "Unavailable"
|
||||
},
|
||||
"statDownArr": {
|
||||
"zh": "↓ 下行",
|
||||
"en": "↓ Down"
|
||||
},
|
||||
"statUpArr": {
|
||||
"zh": "↑ 上行",
|
||||
"en": "↑ Up"
|
||||
},
|
||||
"planProMeta": {
|
||||
"zh": "PRO 会员 · 2027-07-11",
|
||||
"en": "PRO member · 2027-07-11"
|
||||
},
|
||||
"devFreeLbl": {
|
||||
"zh": "我的设备 · 1 / 1 台",
|
||||
"en": "My devices · 1 / 1"
|
||||
},
|
||||
"devProLbl": {
|
||||
"zh": "我的设备 · 3 / 5 台",
|
||||
"en": "My devices · 3 / 5"
|
||||
},
|
||||
"secDevices": {
|
||||
"zh": "设备",
|
||||
"en": "Devices"
|
||||
},
|
||||
"devOnlineNow": {
|
||||
"zh": "当前在线",
|
||||
"en": "Online now"
|
||||
},
|
||||
"rel2h": {
|
||||
"zh": "2 小时前",
|
||||
"en": "2h ago"
|
||||
},
|
||||
"relYday": {
|
||||
"zh": "昨天",
|
||||
"en": "yesterday"
|
||||
},
|
||||
"devRenamedToast": {
|
||||
"zh": "已重命名(演示)",
|
||||
"en": "Renamed (demo)"
|
||||
},
|
||||
"devLoggedOutToast": {
|
||||
"zh": "已强制退出(演示)",
|
||||
"en": "Force logged out (demo)"
|
||||
},
|
||||
"devClearedToast": {
|
||||
"zh": "已清除登录信息(演示)",
|
||||
"en": "Login info cleared (demo)"
|
||||
},
|
||||
"secPref": {
|
||||
"zh": "偏好",
|
||||
"en": "Preferences"
|
||||
},
|
||||
"secMore": {
|
||||
"zh": "更多",
|
||||
"en": "More"
|
||||
},
|
||||
"rr.forced": {
|
||||
"zh": "🔒",
|
||||
"en": "🔒"
|
||||
},
|
||||
"ordSecDetail": {
|
||||
"zh": "明细",
|
||||
"en": "Details"
|
||||
},
|
||||
"kStatus": {
|
||||
"zh": "状态",
|
||||
"en": "Status"
|
||||
},
|
||||
"kDeadline": {
|
||||
"zh": "支付截止",
|
||||
"en": "Pay before"
|
||||
},
|
||||
"kTrade": {
|
||||
"zh": "交易流水号",
|
||||
"en": "Trade No."
|
||||
},
|
||||
"actMembership": {
|
||||
"zh": "查看会员",
|
||||
"en": "View membership"
|
||||
},
|
||||
"updateTitle": {
|
||||
"zh": "发现新版本 v1.1.0",
|
||||
"en": "New version v1.1.0"
|
||||
},
|
||||
"updateCta": {
|
||||
"zh": "更新",
|
||||
"en": "Update"
|
||||
},
|
||||
"connDoing": {
|
||||
"zh": "连接中",
|
||||
"en": "Connecting"
|
||||
},
|
||||
"pillDoing": {
|
||||
"zh": "连接中",
|
||||
"en": "Connecting"
|
||||
},
|
||||
"pillOffPro": {
|
||||
"zh": "未连接",
|
||||
"en": "Not connected"
|
||||
},
|
||||
"toastUpdate": {
|
||||
"zh": "演示:前往应用商店更新",
|
||||
"en": "Demo: go to store to update"
|
||||
},
|
||||
"authEmailPh": {
|
||||
"zh": "you@example.com",
|
||||
"en": "you@example.com"
|
||||
},
|
||||
"authCodePh": {
|
||||
"zh": "6 位验证码",
|
||||
"en": "6-digit code"
|
||||
},
|
||||
"authSetPw": {
|
||||
"zh": "设置密码",
|
||||
"en": "Set password"
|
||||
},
|
||||
"authSetPwPh": {
|
||||
"zh": "至少 6 位",
|
||||
"en": "At least 6 characters"
|
||||
},
|
||||
"statsFilterLbl": {
|
||||
"zh": "设备",
|
||||
"en": "Device"
|
||||
},
|
||||
"proIncludes": {
|
||||
"zh": "所有套餐均含",
|
||||
"en": "All plans include"
|
||||
},
|
||||
"featSupport": {
|
||||
"zh": "优先客服",
|
||||
"en": "Priority support"
|
||||
},
|
||||
"planMonth": {
|
||||
"zh": "按月",
|
||||
"en": "Monthly"
|
||||
},
|
||||
"planQuarter": {
|
||||
"zh": "按季",
|
||||
"en": "Quarterly"
|
||||
},
|
||||
"planYear": {
|
||||
"zh": "按年",
|
||||
"en": "Yearly"
|
||||
},
|
||||
"featUnlimited": {
|
||||
"zh": "不限时长 · 不限流量",
|
||||
"en": "Unlimited time & data"
|
||||
},
|
||||
"feat80": {
|
||||
"zh": "80+ 全球加速线路",
|
||||
"en": "80+ global nodes"
|
||||
},
|
||||
"feat5": {
|
||||
"zh": "5 台设备同时在线",
|
||||
"en": "5 devices at once"
|
||||
},
|
||||
"chanUsdt": {
|
||||
"zh": "加密货币 · USDT",
|
||||
"en": "Crypto · USDT"
|
||||
},
|
||||
"chanCny": {
|
||||
"zh": "支付宝 · 人民币",
|
||||
"en": "Alipay · CNY"
|
||||
},
|
||||
"payHintCryptoTpl": {
|
||||
"zh": "请转账 {amt} USDT(含小数末位),金额用于自动对账识别,多退少不到账。",
|
||||
"en": "Send exactly {amt} USDT (including the last decimals) — the amount is used for automatic reconciliation."
|
||||
},
|
||||
"payHintAlipay": {
|
||||
"zh": "将跳转至支付宝完成付款,付款后自动返回本页并开通。",
|
||||
"en": "You will be redirected to Alipay; after payment you return here and get activated."
|
||||
},
|
||||
"payWaitCrypto": {
|
||||
"zh": "等待到账确认…",
|
||||
"en": "Waiting for confirmation…"
|
||||
},
|
||||
"payWaitAlipay": {
|
||||
"zh": "等待付款确认…",
|
||||
"en": "Waiting for payment…"
|
||||
},
|
||||
"demoReview": {
|
||||
"zh": "评审演示",
|
||||
"en": "Demo"
|
||||
},
|
||||
"demoPaid": {
|
||||
"zh": "▸ 模拟到账",
|
||||
"en": "▸ Simulate paid"
|
||||
},
|
||||
"demoFailed": {
|
||||
"zh": "▸ 模拟失败",
|
||||
"en": "▸ Simulate failure"
|
||||
},
|
||||
"succSubTpl": {
|
||||
"zh": "PRO({name})有效期至 {date}",
|
||||
"en": "PRO ({name}) · valid until {date}"
|
||||
},
|
||||
"failSub": {
|
||||
"zh": "订单已超时,请重试",
|
||||
"en": "Order timed out, please retry"
|
||||
},
|
||||
"toastCopied": {
|
||||
"zh": "已复制:{v}",
|
||||
"en": "Copied: {v}"
|
||||
},
|
||||
"toastAlipay": {
|
||||
"zh": "已拉起支付宝(演示)",
|
||||
"en": "Opened Alipay (demo)"
|
||||
},
|
||||
"secBilling": {
|
||||
"zh": "购买 · 订单 · 兑换",
|
||||
"en": "Buy · Orders · Redeem"
|
||||
},
|
||||
"secInvite": {
|
||||
"zh": "推广",
|
||||
"en": "Referral"
|
||||
},
|
||||
"secGeneral": {
|
||||
"zh": "通用",
|
||||
"en": "General"
|
||||
},
|
||||
"notiFoot": {
|
||||
"zh": "仅显示最近通知(演示占位)",
|
||||
"en": "Recent notifications only (demo)"
|
||||
},
|
||||
"nt1Title": {
|
||||
"zh": "服务条款与隐私政策更新",
|
||||
"en": "Terms & privacy policy updated"
|
||||
},
|
||||
"nt1Sub": {
|
||||
"zh": "我们更新了服务条款,请查阅最新内容。",
|
||||
"en": "We have updated our terms — please review the latest version."
|
||||
},
|
||||
"nt1Full": {
|
||||
"zh": "本次更新新增数据留存与第三方共享条款说明,不影响现有账户与订阅权益,建议登录网页用户中心查看完整版本。",
|
||||
"en": "This update adds details on data retention and third-party sharing. It does not affect your existing account or subscription — please review the full version in the web user center."
|
||||
},
|
||||
"nt2Title": {
|
||||
"zh": "新增日本 · 大阪加速线路",
|
||||
"en": "New Japan · Osaka lines added"
|
||||
},
|
||||
"nt2Sub": {
|
||||
"zh": "三条低延迟线路已上线,欢迎体验。",
|
||||
"en": "Three low-latency lines are now live."
|
||||
},
|
||||
"nt3Title": {
|
||||
"zh": "邀请好友活动进行中",
|
||||
"en": "Invite-a-friend event is live"
|
||||
},
|
||||
"nt3Sub": {
|
||||
"zh": "邀请好友注册,双方都可获得会员天数。",
|
||||
"en": "Invite friends to sign up — both sides earn membership days."
|
||||
},
|
||||
"nt4Title": {
|
||||
"zh": "邀请奖励 +3 天已到账",
|
||||
"en": "Referral reward: +3 days credited"
|
||||
},
|
||||
"nt4Sub": {
|
||||
"zh": "好友已完成注册,会员天数已计入你的账户。",
|
||||
"en": "Your friend has completed sign-up — the days have been added to your account."
|
||||
},
|
||||
"nt5Title": {
|
||||
"zh": "v1.0.73 已发布",
|
||||
"en": "v1.0.73 is out"
|
||||
},
|
||||
"nt5Sub": {
|
||||
"zh": "修复已知问题,建议尽快更新。",
|
||||
"en": "Bug fixes included — update is recommended."
|
||||
},
|
||||
"nt5Btn": {
|
||||
"zh": "去更新",
|
||||
"en": "Update now"
|
||||
},
|
||||
"nt6Title": {
|
||||
"zh": "¥6 月付优惠上线",
|
||||
"en": "¥6/mo promo is live"
|
||||
},
|
||||
"nt6Sub": {
|
||||
"zh": "限时活动,PRO 月付低至 ¥6,先到先得。",
|
||||
"en": "Limited-time offer — PRO monthly as low as ¥6, while it lasts."
|
||||
},
|
||||
"inviteLede": {
|
||||
"zh": "好友注册、首购、加入社区,双方都各得订阅天数。",
|
||||
"en": "When friends sign up, buy, or join the community, both of you earn plan days."
|
||||
},
|
||||
"inviteProgressSub": {
|
||||
"zh": "已邀请 2 位好友,累计获得 6 天会员(演示占位)",
|
||||
"en": "Invited 2 friends · earned 6 days (demo)"
|
||||
},
|
||||
"inviteShare": {
|
||||
"zh": "分享邀请链接",
|
||||
"en": "Share invite link"
|
||||
},
|
||||
"inviteTgSub": {
|
||||
"zh": "+3 天",
|
||||
"en": "+3 days"
|
||||
},
|
||||
"inviteTgDemoPending": {
|
||||
"zh": "演示态 · 待验证",
|
||||
"en": "Demo · pending"
|
||||
},
|
||||
"inviteTgDemoDone": {
|
||||
"zh": "演示态 · 已领取",
|
||||
"en": "Demo · claimed"
|
||||
},
|
||||
"redeemLabel": {
|
||||
"zh": "兑换码",
|
||||
"en": "Redemption code"
|
||||
},
|
||||
"redeemHint": {
|
||||
"zh": "输入卡密即可激活对应时长,激活后立即生效。",
|
||||
"en": "Enter a code to instantly activate plan time."
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user