mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-09-13 16:23:08 +00:00
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:
@@ -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": "ویپیان ما را رایگان امتحان کنید: بدون هیچ تعهدی",
|
||||
"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": "ارتقای اشتراک"
|
||||
}
|
||||
},
|
||||
@@ -1008,7 +1008,7 @@
|
||||
"noSubscription": "برای چرخاندن گردونه نیاز به اشتراک فعال دارید. ابتدا اشتراک خود را فعال کنید.",
|
||||
"selectSubscription": "ابتدا یک اشتراک انتخاب کنید"
|
||||
},
|
||||
"payWithStars": "پرداخت {stars} Stars",
|
||||
"payWithStars": "پرداخت Stars",
|
||||
"processingPayment": "در حال پردازش...",
|
||||
"starsPaymentSuccess": "پرداخت موفق! نتیجه به تلگرام ارسال شد.",
|
||||
"starsPaymentFailed": "پرداخت ناموفق. دوباره تلاش کنید.",
|
||||
@@ -1564,7 +1564,7 @@
|
||||
},
|
||||
"broadcasts": {
|
||||
"title": "نشریات",
|
||||
"subtitle": "تاریخچه و مدیریت",
|
||||
"subtitle": "ارسال گروهی پیام به کاربران",
|
||||
"create": "ایجاد پیام",
|
||||
"empty": "هیچ نشریهای نیست",
|
||||
"selectFilter": "انتخاب مخاطبین",
|
||||
@@ -1652,46 +1652,46 @@
|
||||
"telegramSection": "ارسال انبوه تلگرام"
|
||||
},
|
||||
"pinnedMessages": {
|
||||
"title": "Pinned Messages",
|
||||
"subtitle": "Manage pinned messages for users",
|
||||
"create": "Create",
|
||||
"empty": "No pinned messages",
|
||||
"content": "Message text",
|
||||
"contentPlaceholder": "Enter pinned message text...",
|
||||
"noContent": "No text",
|
||||
"media": "Media file",
|
||||
"addMedia": "Add media",
|
||||
"uploading": "Uploading...",
|
||||
"settings": "Settings",
|
||||
"sendBeforeMenu": "Send before menu",
|
||||
"sendOnEveryStart": "Send on every start",
|
||||
"broadcast": "Broadcast",
|
||||
"broadcastOnCreate": "Broadcast on create",
|
||||
"broadcastConfirm": "Broadcast pinned message to all active users?",
|
||||
"broadcastToAll": "Broadcast to all",
|
||||
"activate": "Activate",
|
||||
"deactivate": "Deactivate",
|
||||
"unpin": "Unpin",
|
||||
"unpinAll": "Unpin for everyone",
|
||||
"unpinConfirm": "Unpin message for all users?",
|
||||
"delete": "Delete",
|
||||
"deleteConfirm": "Delete this pinned message?",
|
||||
"active": "Active",
|
||||
"inactive": "Inactive",
|
||||
"prev": "Previous",
|
||||
"next": "Next",
|
||||
"createSuccess": "Pinned message created",
|
||||
"updateSuccess": "Message updated",
|
||||
"deleteSuccess": "Message deleted",
|
||||
"activateSuccess": "Message activated",
|
||||
"deactivateSuccess": "Message deactivated",
|
||||
"broadcastSuccess": "Broadcast completed",
|
||||
"unpinSuccess": "Messages unpinned",
|
||||
"sentCount": "Sent",
|
||||
"failedCount": "Failed",
|
||||
"unpinnedCount": "Unpinned",
|
||||
"editMessage": "Edit",
|
||||
"cantDeleteActive": "Cannot delete active message"
|
||||
"title": "پیامهای سنجاقشده",
|
||||
"subtitle": "مدیریت پیامهای سنجاقشده برای کاربران",
|
||||
"create": "ایجاد",
|
||||
"empty": "هیچ پیام سنجاقشدهای وجود ندارد",
|
||||
"content": "متن پیام",
|
||||
"contentPlaceholder": "متن پیام سنجاقشده را وارد کنید...",
|
||||
"noContent": "بدون متن",
|
||||
"media": "فایل رسانه",
|
||||
"addMedia": "افزودن رسانه",
|
||||
"uploading": "در حال بارگذاری...",
|
||||
"settings": "تنظیمات",
|
||||
"sendBeforeMenu": "ارسال قبل از منو",
|
||||
"sendOnEveryStart": "ارسال در هر بار شروع",
|
||||
"broadcast": "ارسال همگانی",
|
||||
"broadcastOnCreate": "ارسال همگانی هنگام ایجاد",
|
||||
"broadcastConfirm": "پیام سنجاقشده برای همه کاربران فعال ارسال شود؟",
|
||||
"broadcastToAll": "ارسال به همه",
|
||||
"activate": "فعالسازی",
|
||||
"deactivate": "غیرفعالسازی",
|
||||
"unpin": "برداشتن سنجاق",
|
||||
"unpinAll": "برداشتن سنجاق برای همه",
|
||||
"unpinConfirm": "سنجاق پیام برای همه کاربران برداشته شود؟",
|
||||
"delete": "حذف",
|
||||
"deleteConfirm": "این پیام سنجاقشده حذف شود؟",
|
||||
"active": "فعال",
|
||||
"inactive": "غیرفعال",
|
||||
"prev": "قبلی",
|
||||
"next": "بعدی",
|
||||
"createSuccess": "پیام سنجاقشده ایجاد شد",
|
||||
"updateSuccess": "پیام بهروزرسانی شد",
|
||||
"deleteSuccess": "پیام حذف شد",
|
||||
"activateSuccess": "پیام فعال شد",
|
||||
"deactivateSuccess": "پیام غیرفعال شد",
|
||||
"broadcastSuccess": "ارسال همگانی تکمیل شد",
|
||||
"unpinSuccess": "سنجاق پیامها برداشته شد",
|
||||
"sentCount": "ارسالشده",
|
||||
"failedCount": "ناموفق",
|
||||
"unpinnedCount": "سنجاقبرداشته",
|
||||
"editMessage": "ویرایش",
|
||||
"cantDeleteActive": "نمیتوان پیام فعال را حذف کرد"
|
||||
},
|
||||
"channelSubscriptions": {
|
||||
"title": "کانالهای اجباری",
|
||||
@@ -2005,7 +2005,7 @@
|
||||
"builtinButtons": "بخشهای داخلی",
|
||||
"resetConfirm": "منو به تنظیمات پیشفرض بازنشانی شود؟ تمام تغییرات از بین میرود.",
|
||||
"buttonTextPlaceholder": "متن دکمه",
|
||||
"customLabelsHint": "متن دکمه برای هر زبان ربات",
|
||||
"customLabelsHint": "خالی = عنوان پیشفرض",
|
||||
"moveUp": "انتقال به بالا",
|
||||
"moveDown": "انتقال به پایین",
|
||||
"openIn": "باز کردن در",
|
||||
@@ -2625,10 +2625,10 @@
|
||||
"programEnabled": "برنامه معرفی فعال است",
|
||||
"programEnabledDesc": "تمام عملکرد ارجاع را فعال میکند",
|
||||
"requisitesText": "متن اطلاعات حساب",
|
||||
"requisitesTextDesc": "در فرم درخواست همکاری به کاربر نمایش داده میشود",
|
||||
"requisitesTextDesc": "متن سفارشی برای توضیح به کاربران که هنگام برداشت چه اطلاعات پرداختی را وارد کنند",
|
||||
"requisitesTextPlaceholder": "اطلاعات حساب خود را وارد کنید...",
|
||||
"withdrawalEnabled": "برداشت مجاز است",
|
||||
"withdrawalEnabledDesc": "به کاربران اجازه میدهد درخواست برداشت بدهند"
|
||||
"withdrawalEnabledDesc": "اجازه دادن به همکاران برای درخواست برداشت موجودی معرفی"
|
||||
},
|
||||
"settingsLoadError": "بارگذاری تنظیمات همکاری ناموفق بود",
|
||||
"settingsSection": {
|
||||
@@ -3398,7 +3398,7 @@
|
||||
"usersOnlineCount": "{{count}} آنلاین"
|
||||
},
|
||||
"overview": {
|
||||
"bandwidth": "پهنای باند لحظهای",
|
||||
"bandwidth": "ترافیک ورودیها",
|
||||
"connections": "اتصالات",
|
||||
"cpu": "هستههای CPU",
|
||||
"download": "دانلود",
|
||||
@@ -4940,33 +4940,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": "گیگابایت",
|
||||
"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": "قابل فعالسازی",
|
||||
|
||||
Reference in New Issue
Block a user