fix(i18n): починка плейсхолдеров и переводов в zh/fa/en локалях кабинета

Аудит локалей кабинета с русским в качестве эталона.

Битые {{плейсхолдеры}} в zh/fa (рендерились как литеральные скобки,
теряли значение или дублировали то, что и так выводится в JSX):
- gift.sentTo / gift.activatedBy: неверное имя переменной
  ({{name}} → {{recipient}} / {{username}})
- dashboard.devicesConnectedUnlimited: {{count}} → {{used}} (+ «без лимита»)
- dashboard.maxUsage, gift.deviceCount, gift.activateSuccessDesc: потерянные
  значения возвращены
- dashboard.expired.activeUntil, subscription.trialInfo.remaining: убран
  {{date}}/{{count}} — значение выводится отдельным элементом
- trialInfo.description, trialOffer.freeDesc/paidDesc, gift.shareText:
  переписаны без {{days}}/{{price}}/{{code}}, которые код не передаёт
- wheel.payWithStars: одинарные {stars} (i18next их не подставляет) убраны

Мисперводы zh/fa (разошлись по смыслу с ru/en):
- subscription.cta.*Hint, expiredBanner.selectTariff, trialUpgrade.description,
  reduceDevicesDescription, menuEditor.customLabelsHint, myGiftsEmptyDesc,
  partners.settingsFields.*, remnawave.overview.bandwidth, shareModalActivateVia

fa admin.pinnedMessages: 40 строк были на английском → переведены на фарси.
zh common.all: 'All' → '全部'.
en admin.broadcasts.subtitle: устаревшее «History and management» →
соответствует ru «Массовая отправка сообщений пользователям».

Плейсхолдеры и синхронность en/ru проверены (locales.test.ts).
This commit is contained in:
kewldan
2026-07-26 02:09:24 +03:00
parent 51d0f0431a
commit fb1f5cf3a7
3 changed files with 94 additions and 94 deletions

View File

@@ -20,7 +20,7 @@
"delete": "删除",
"currency": "¥",
"copy": "复制",
"all": "All",
"all": "全部",
"add": "添加",
"refresh": "刷新",
"retry": "重试",
@@ -276,7 +276,7 @@
"traffic": "流量",
"devices": "设备",
"expiredDate": "过期时间",
"activeUntil": "已过期 — 至 {{date}}"
"activeUntil": "有效期至"
},
"deviceLimitReached": "断开设备以添加新设备",
"suspended": {
@@ -287,9 +287,9 @@
"showAll": "全部显示",
"subscriptions": "订阅",
"connectDevice": "连接设备",
"devicesConnectedUnlimited": "已连接 {{count}} 台设备",
"devicesConnectedUnlimited": "已连接 {{used}} 台设备 · 无限制",
"devicesOfMax": "{{used}} / {{max}}",
"maxUsage": "最大",
"maxUsage": "最大 {{amount}}",
"remaining": "剩余",
"stats": {
"balance": "余额",
@@ -298,9 +298,9 @@
"tariff": "套餐",
"trafficUsageTitle": "流量使用",
"trialOffer": {
"freeDesc": "免费试用 {{days}} 天 — 无需付款",
"freeDesc": "免费试用我们的 VPN无需任何承诺",
"freeTitle": "免费试用",
"paidDesc": "{{days}} 天试用,仅需 {{price}}",
"paidDesc": "从试用订阅开始吧",
"paidTitle": "付费试用"
},
"unlimited": "无限",
@@ -458,7 +458,7 @@
"newDeviceLimit": "新设备限制",
"reduce": "减少",
"reduceDevices": "减少设备数量",
"reduceDevicesDescription": "调整您的设备限制。如有需要,请先断开多余设备的连接",
"reduceDevicesDescription": "您可以将设备数量减少至套餐的最低限制",
"reduceDevicesTitle": "减少设备数量",
"reduceUnavailable": "当前无法减少设备数量",
"reducing": "正在减少…"
@@ -604,9 +604,9 @@
"confirmDelete": "删除订阅?",
"cta": {
"renewHint": "订阅已过期 — 续订以继续使用",
"activeHint": "订阅有效 — 您可以连接设备并使用 VPN",
"expiredHint": "订阅已过期 — 续订以继续使用",
"trialHint": "您正在试用中 — 升级到付费套餐以解锁所有功能"
"activeHint": "续费和更换套餐",
"expiredHint": "选择套餐并付款",
"trialHint": "更多流量和设备"
},
"dailyAutoCharge": "每日自动扣费",
"defaultName": "订阅",
@@ -626,16 +626,16 @@
"statusTrial": "试用",
"daysShort": "天",
"expiredBanner": {
"selectTariff": "选择套餐",
"selectTariff": "您的订阅已到期。请在下方选择套餐,以恢复 VPN 访问。",
"title": "订阅已过期"
},
"trialInfo": {
"description": "免费试用我们的服务 {{days}} 天",
"remaining": "剩余 {{count}} 天",
"description": "您正在使用服务的试用版。请在下方选择套餐以获得完整访问权限。",
"remaining": "剩余",
"title": "试用期"
},
"trialUpgrade": {
"description": "升级到付费订阅以解锁所有功能并继续使用",
"description": "您的试用期即将结束。请选择合适的套餐,以继续无限制使用 VPN。",
"title": "升级订阅"
}
},
@@ -1012,7 +1012,7 @@
"noSubscription": "需要有效订阅才能转动轮盘。请先激活订阅。",
"selectSubscription": "请先选择订阅"
},
"payWithStars": "支付 {stars} Stars",
"payWithStars": "支付 Stars",
"processingPayment": "处理中...",
"starsPaymentSuccess": "支付成功抽奖结果已发送到Telegram。",
"starsPaymentFailed": "支付失败。请重试。",
@@ -1667,7 +1667,7 @@
},
"broadcasts": {
"title": "广播",
"subtitle": "历史和管理",
"subtitle": "向用户群发消息",
"create": "创建群发",
"empty": "没有广播",
"selectFilter": "选择受众",
@@ -2072,7 +2072,7 @@
"builtinButtons": "内置栏目",
"resetConfirm": "将菜单重置为默认设置?所有更改将丢失。",
"buttonTextPlaceholder": "按钮文本",
"customLabelsHint": "每种语言的按钮文本",
"customLabelsHint": "留空 = 默认名称",
"moveUp": "上移",
"moveDown": "下移",
"openIn": "打开方式",
@@ -2624,10 +2624,10 @@
"programEnabled": "推荐计划已启用",
"programEnabledDesc": "启用整个推荐人功能",
"requisitesText": "收款信息文本",
"requisitesTextDesc": "将在合作申请表单中向用户显示",
"requisitesTextDesc": "自定义提示,告知用户提现时需填写的收款信息",
"requisitesTextPlaceholder": "请输入您的收款信息...",
"withdrawalEnabled": "允许提款",
"withdrawalEnabledDesc": "允许用户请求提款"
"withdrawalEnabledDesc": "允许合作伙伴申请提现推荐余额"
},
"settingsLoadError": "加载推荐设置失败",
"settingsSection": {
@@ -3406,7 +3406,7 @@
"usersOnlineCount": "{{count}} 在线"
},
"overview": {
"bandwidth": "实时带宽",
"bandwidth": "各 inbound 流量",
"connections": "连接数",
"cpu": "CPU核心",
"download": "下载",
@@ -4939,33 +4939,33 @@
},
"activateButton": "激活",
"activateCodePlaceholder": "输入礼物代码",
"activatedBy": "由 {{name}} 激活",
"activatedBy": "由 {{username}} 激活",
"activateDescription": "输入您收到的礼物代码以激活订阅",
"activatedGiftsTitle": "已激活的礼物",
"activateError": "激活礼物失败",
"activateSelfError": "您不能激活自己的礼物",
"activateSuccess": "礼物已激活!",
"activateSuccessDesc": "订阅添加到您的账户",
"activateSuccessDesc": "{{tariff}}:已为您的订阅添加 {{days}} 天",
"activateTitle": "激活礼物",
"activeGiftsTitle": "活跃的礼物",
"codeLabel": "礼物代码",
"codeReadyTitle": "您的礼物代码已就绪",
"copyMessage": "复制消息",
"daysShort": "天",
"deviceCount": "设备",
"deviceCount": "{{count}} 台设备",
"devicesShort": "台",
"gbShort": "GB",
"myGiftsEmpty": "暂无礼物",
"myGiftsEmptyDesc": "您发送或收到的礼物将显示在这里",
"myGiftsEmptyDesc": "为好友购买礼物,或激活已收到的兑换码",
"pageTitle": "礼物",
"receivedGiftsTitle": "已收到的礼物",
"selectPeriod": "选择时长",
"selectTariff": "选择套餐",
"sentTo": "已发送给 {{name}}",
"sentTo": "已发送给 {{recipient}}",
"shareGift": "分享礼物",
"shareModalActivateVia": "通过以下方式激活",
"shareModalActivateVia": "通过机器人激活",
"shareModalActivateViaCabinet": "通过个人中心",
"shareText": "我为您准备了一份 Bedolaga VPN 礼物{{code}}",
"shareText": "我给你准备了一份 Bedolaga VPN 礼物,在这里激活它:",
"shareToastCopied": "链接已复制",
"statusActivated": "已激活",
"statusAvailable": "可激活",