deef498f65
Add components.serviceResources and move the resources/scaling panel (metrics, storage usage/expansion, CPU/memory adjust, dump restore, upgrade toasts) onto it; route through the locale-aware router. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
956 lines
52 KiB
TypeScript
956 lines
52 KiB
TypeScript
// Persian (fa-IR) dictionary — the source of truth for the app's copy.
|
||
// The `Dictionary` type is derived from this object; en.ts must match its shape.
|
||
const fa = {
|
||
common: {
|
||
appName: 'ابربان',
|
||
login: 'ورود',
|
||
register: 'ثبتنام',
|
||
logout: 'خروج',
|
||
signOut: 'خروج از حساب',
|
||
dashboard: 'داشبورد',
|
||
backHome: 'بازگشت به خانه',
|
||
loading: 'در حال بارگذاری…',
|
||
save: 'ذخیره',
|
||
cancel: 'انصراف',
|
||
delete: 'حذف',
|
||
edit: 'ویرایش',
|
||
create: 'ایجاد',
|
||
back: 'بازگشت',
|
||
search: 'جستجو',
|
||
confirm: 'تأیید',
|
||
close: 'بستن',
|
||
yes: 'بله',
|
||
no: 'خیر',
|
||
currency: 'تومان',
|
||
currencyShort: 'ت',
|
||
},
|
||
|
||
language: {
|
||
label: 'زبان',
|
||
},
|
||
|
||
meta: {
|
||
title: 'ابربان | زیرساخت ابری، در کنترل تو',
|
||
description:
|
||
'ابربان؛ پلتفرم ابریِ خودسرویس روی کوبرنتیز. اپ خود را در چند ثانیه منتشر کن — دیتابیس مدیریتشده، دامنهٔ اختصاصی، SSL خودکار و لاگ زنده.',
|
||
},
|
||
|
||
roles: {
|
||
admin: 'مدیر',
|
||
technical: 'فنی',
|
||
sales: 'فروش',
|
||
},
|
||
|
||
landing: {
|
||
badge: 'پلتفرم ابریِ خودسرویس',
|
||
hero: {
|
||
title: 'ابربان',
|
||
tagline: 'زیرساخت ابری، در کنترل تو',
|
||
subtitle:
|
||
'اپلیکیشنت را در چند ثانیه روی کوبرنتیز منتشر کن — بدون دردسر سرور، بدون پیچیدگیِ DevOps.',
|
||
ctaPrimary: 'رایگان شروع کن',
|
||
ctaSecondary: 'ورود',
|
||
scrollHint: 'به دلِ ابرها بزن',
|
||
},
|
||
value: {
|
||
lead: 'یک پلتفرمِ ',
|
||
highlight: 'PaaS خودسرویس',
|
||
tail: ' روی کوبرنتیز — تمامِ قدرتِ زیرساختِ ابری، بدون پیچیدگیِ طوفانیاش.',
|
||
body: 'ابربان لایههای سختِ DevOps را برایت مدیریت میکند تا فقط روی محصولت تمرکز کنی.',
|
||
},
|
||
how: {
|
||
title: 'به سادگیِ سه قدم',
|
||
steps: [
|
||
{ n: '۱', title: 'کدت را بده', desc: 'ریپازیتوری یا اپت را وصل کن.' },
|
||
{ n: '۲', title: 'ما میسازیم', desc: 'ابربان بهصورت خودکار بیلد و روی کوبرنتیز دیپلوی میکند.' },
|
||
{ n: '۳', title: 'آنلاین شو', desc: 'دامنه و SSL آماده است؛ اپت زنده میشود.' },
|
||
],
|
||
},
|
||
features: {
|
||
title: 'هرچه برای ساختن لازم داری',
|
||
subtitle: 'یک جعبهابزارِ کامل برای انتشار و نگهداریِ اپ.',
|
||
items: [
|
||
{ title: 'دیپلوی برقآسا', desc: 'Node.js، لاراول و وردپرس را با یک کلیک منتشر کن؛ بیلد و انتشار خودکار.' },
|
||
{ title: 'دیتابیس مدیریتشده', desc: 'PostgreSQL، MySQL، Redis، RabbitMQ و Elasticsearch، آماده و پایدار.' },
|
||
{ title: 'SSL خودکار', desc: 'دامنهٔ اختصاصی وصل کن؛ گواهی SSL خودکار صادر و تمدید میشود.' },
|
||
{ title: 'لینک پیشنمایش', desc: 'برای هر دیپلوی یک Preview URL پایدار روی TLS بگیر و سریع تست کن.' },
|
||
{ title: 'لاگ زنده', desc: 'لاگ بیلد و اجرای اپ را همان لحظه و بهصورت زنده دنبال کن.' },
|
||
{ title: 'اسنپشات و بکاپ', desc: 'از وضعیت اپ اسنپشات بگیر و هر زمان خواستی بازگردان.' },
|
||
{ title: 'بیلینگ شفاف', desc: 'کیفپول پیشپرداخت، فاکتور دقیق و مصرف لحظهای — بدون سورپرایز.' },
|
||
{ title: 'پشتیبانی فارسی', desc: 'تیم پشتیبانی و سیستم تیکت، فارسی و همیشه کنارت.' },
|
||
],
|
||
},
|
||
trust: {
|
||
title: 'چرا تیمها به ابربان اعتماد میکنند',
|
||
items: [
|
||
{ kpi: '< ۶۰ ثانیه', label: 'میانگین زمان دیپلوی' },
|
||
{ kpi: '۹۹٫۹٪', label: 'پایداریِ زیرساخت' },
|
||
{ kpi: 'TLS خودکار', label: 'امنیتِ پیشفرض' },
|
||
{ kpi: 'بومیِ ایران', label: 'بهینه برای کاربر ایرانی' },
|
||
],
|
||
},
|
||
finalCta: {
|
||
titleLead: 'آسمان صاف است؛ وقتِ ',
|
||
titleHighlight: 'زنده',
|
||
titleTail: ' کردنِ اپِ توست.',
|
||
body: 'همین حالا حسابت را بساز و اولین دیپلوی را تجربه کن.',
|
||
ctaPrimary: 'همین حالا شروع کن',
|
||
ctaSecondary: 'داشبورد',
|
||
},
|
||
footer: {
|
||
copyright: '© ابربان — همهٔ حقوق محفوظ است',
|
||
},
|
||
},
|
||
|
||
auth: {
|
||
backHome: 'بازگشت به خانه',
|
||
login: {
|
||
title: 'خوش آمدی',
|
||
subtitle: 'به حساب ابربان خود وارد شو',
|
||
altPrompt: 'هنوز حساب نداری؟',
|
||
altLabel: 'ثبتنام کن',
|
||
email: 'ایمیل',
|
||
password: 'رمز عبور',
|
||
submit: 'ورود',
|
||
submitting: 'در حال ورود…',
|
||
success: 'با موفقیت وارد شدی!',
|
||
error: 'ورود ناموفق بود',
|
||
},
|
||
register: {
|
||
title: 'ساخت حساب',
|
||
subtitle: 'در چند دقیقه اولین اپت را منتشر کن',
|
||
altPrompt: 'قبلاً حساب ساختهای؟',
|
||
altLabel: 'وارد شو',
|
||
firstName: 'نام',
|
||
firstNamePlaceholder: 'مثلاً علی',
|
||
lastName: 'نام خانوادگی',
|
||
lastNamePlaceholder: 'مثلاً رضایی',
|
||
email: 'ایمیل',
|
||
password: 'رمز عبور',
|
||
passwordPlaceholder: 'حداقل ۸ کاراکتر',
|
||
submit: 'ساخت حساب',
|
||
submitting: 'در حال ساخت حساب…',
|
||
success: 'حساب با موفقیت ساخته شد!',
|
||
error: 'ثبتنام ناموفق بود',
|
||
},
|
||
},
|
||
|
||
components: {
|
||
deleting: 'در حال حذف…',
|
||
deletingNamed: 'در حال حذف «{name}»…',
|
||
deletingService: 'در حال حذف سرویس…',
|
||
deletingApplication: 'در حال حذف اپلیکیشن…',
|
||
deletingModalBeingRemoved: '«{name}» برای همیشه حذف میشود.',
|
||
deletingModalDetailApp: 'این اپلیکیشن، دیپلویها و دادههایش از کلاستر حذف میشود. ممکن است یک دقیقه طول بکشد.',
|
||
deletingModalDetailService: 'این سرویس و دادههایش از کلاستر حذف میشود. ممکن است یک دقیقه طول بکشد.',
|
||
deletingModalWait: 'لطفاً صبر کن — این صفحه را نبند.',
|
||
buildPhases: {
|
||
uploading: 'آپلود سورس به کلاستر',
|
||
building: 'ساخت ایمیج داکر',
|
||
deploying: 'انتشار روی کوبرنتیز',
|
||
done: 'دیپلوی کامل شد',
|
||
failed: 'دیپلوی ناموفق بود',
|
||
cancelled: 'دیپلوی لغو شد',
|
||
},
|
||
startingDeployment: 'در حال شروع دیپلوی…',
|
||
deploymentCancelled: 'دیپلوی لغو شد',
|
||
cancelDeploymentFailed: 'لغو دیپلوی ناموفق بود',
|
||
minimizeHint: 'برای ادامهٔ کار حین دیپلوی، کوچک کن. بستن (×) دیپلوی را لغو میکند.',
|
||
continueInBackground: 'ادامه در پسزمینه',
|
||
minimizeAria: 'کوچک کن و در پسزمینه ادامه بده',
|
||
cancelDeploymentAria: 'لغو دیپلوی',
|
||
viewProgressFor: 'مشاهدهٔ پیشرفت دیپلوی برای {name}',
|
||
prevDeployment: 'دیپلوی قبلی',
|
||
nextDeployment: 'دیپلوی بعدی',
|
||
upgradeTitle: 'تأیید ارتقای منابع',
|
||
upgradeNeedsPay: 'این ارتقا نیازمند پرداخت برای بازهٔ باقیماندهٔ صورتحساب است.',
|
||
upgradeNoCost: 'این تغییر هزینهٔ اضافهای ندارد.',
|
||
currentHourlyCost: 'هزینهٔ ساعتی فعلی',
|
||
newHourlyCost: 'هزینهٔ ساعتی جدید',
|
||
remainingHoursInPeriod: 'ساعتهای باقیمانده در بازه',
|
||
proratedAmountToPay: 'مبلغ تسهیمشده برای پرداخت',
|
||
walletBalance: 'موجودی کیفپول',
|
||
tomanPerHour: '{n} تومان/ساعت',
|
||
hoursUnit: '{n} ساعت',
|
||
tomanUnit: '{n} تومان',
|
||
walletShortBy: 'موجودی کیفپول {n} تومان کم است. میتوانی مابهالتفاوت را از طریق درگاه در صفحهٔ فاکتور پرداخت کنی.',
|
||
applying: 'در حال اعمال…',
|
||
createInvoicePay: 'ساخت فاکتور و پرداخت',
|
||
applyChanges: 'اعمال تغییرات',
|
||
res: {
|
||
databaseResources: 'منابع دیتابیس',
|
||
cpuRequest: 'درخواست CPU',
|
||
cpuLimit: 'محدودیت CPU',
|
||
memoryRequest: 'درخواست حافظه',
|
||
memoryLimit: 'محدودیت حافظه',
|
||
oneCore: '۱ هسته',
|
||
twoCores: '۲ هسته',
|
||
storageGb: 'فضای ذخیره (GB)',
|
||
},
|
||
deployStatus: {
|
||
running: 'در حال اجرا',
|
||
pending: 'در انتظار',
|
||
building: 'در حال ساخت',
|
||
deploying: 'در حال انتشار',
|
||
failed: 'ناموفق',
|
||
build_failed: 'ساخت ناموفق',
|
||
cancelled: 'لغوشده',
|
||
stopped: 'متوقف',
|
||
active: 'فعال',
|
||
suspended: 'معلق',
|
||
pending_deletion: 'در انتظار حذف',
|
||
},
|
||
workloadLogs: {
|
||
logs: 'لاگها',
|
||
liveEvery3s: 'زنده (هر ۳ث)',
|
||
autoEvery5s: 'تازهسازی خودکار (هر ۵ث)',
|
||
hideLogs: 'پنهانکردن لاگها',
|
||
showLogs: 'نمایش لاگها',
|
||
podLogs: 'لاگ پاد',
|
||
buildLogs: 'لاگ بیلد',
|
||
noBuildNote: 'خروجی پاد workload (این سرویس بیلد ایمیج ندارد).',
|
||
loadingLogs: 'در حال بارگذاری لاگها…',
|
||
serviceStopped: 'سرویس متوقف است. برای دیدن لاگ آن را اجرا کن.',
|
||
waitingPods: 'در انتظار آمادهشدن پادهای workload…',
|
||
buildInProgress: 'بیلد در حال انجام… لاگ پس از تکمیل نمایش داده میشود.',
|
||
buildPending: 'بیلد در صف است…',
|
||
noDeployments: 'هنوز دیپلویی نیست. برای دیدن لاگ بیلد اپت را منتشر کن.',
|
||
noBuildLogs: 'لاگ بیلدی برای این دیپلوی موجود نیست.',
|
||
},
|
||
externalAccess: {
|
||
title: 'دسترسی خارجی',
|
||
warning: 'یک NodePort روی IP نود کلاستر باز میکند. هر کسی که به آن IP دسترسی داشته باشد تا پایان نشست یا لغو آن میتواند متصل شود. برای دسترسی موقت از مدتهای کوتاه استفاده کن؛ حالت دائمی پورت را تا لغو باز نگه میدارد.',
|
||
deployFirst: 'برای فعالسازی دسترسی خارجی، اول سرویس را منتشر کن.',
|
||
service: 'سرویس',
|
||
accessMode: 'حالت دسترسی',
|
||
temporary: 'موقت',
|
||
alwaysOpen: 'همیشه باز',
|
||
duration: 'مدت',
|
||
persistentNote: 'پورت تا وقتی روی «لغو» کلیک کنی باز میماند. فقط وقتی به یک نقطهٔ پایانیِ خارجیِ پایدار نیاز داری استفاده کن.',
|
||
opening: 'در حال باز کردن…',
|
||
openPermanently: 'باز کردن دائمی پورت',
|
||
enableAccess: 'فعالسازی دسترسی',
|
||
noSessions: 'نشست دسترسی خارجی فعالی وجود ندارد.',
|
||
revoke: 'لغو',
|
||
endpoint: 'نقطهٔ پایانی',
|
||
url: 'آدرس',
|
||
permanentUntilRevoked: 'دائمی (تا لغو)',
|
||
expired: 'منقضیشده',
|
||
targets: {
|
||
database: 'دیتابیس',
|
||
redis: 'Redis',
|
||
rabbitmq_amqp: 'RabbitMQ (AMQP)',
|
||
rabbitmq_management: 'رابط مدیریت RabbitMQ',
|
||
},
|
||
permanentEnabled: 'دسترسی خارجی دائمی فعال شد',
|
||
temporaryEnabled: 'دسترسی خارجی موقت فعال شد',
|
||
enableFailed: 'فعالسازی دسترسی ناموفق بود',
|
||
revoked: 'دسترسی لغو شد',
|
||
revokeFailed: 'لغو دسترسی ناموفق بود',
|
||
hShort: 'س',
|
||
mShort: 'د',
|
||
sShort: 'ث',
|
||
},
|
||
dbConfig: {
|
||
engine: 'موتور دیتابیس',
|
||
version: 'نسخه',
|
||
credentials: 'اطلاعات ورود دیتابیس',
|
||
credentialsOptional: '(اختیاری — اگر خالی باشد خودکار ساخته میشود)',
|
||
username: 'نام کاربری',
|
||
usernamePlaceholder: 'appuser',
|
||
password: 'رمز عبور',
|
||
passwordPlaceholder: 'تولید خودکار',
|
||
generatePassword: 'تولید رمز تصادفی',
|
||
credentialsNote: 'برای دسترسی داخلی کلاستر استفاده میشود. پس از انتشار از دسترسی خارجی موقت یا دائمی زیر استفاده کن.',
|
||
uploadDumpLabel: 'اختیاری: آپلود dump دیتابیس برای بازیابی هنگام ساخت',
|
||
remove: 'حذف',
|
||
uploadHint: 'یک SQL dump آپلود کن تا پس از ساخت دیتابیس بازیابی شود',
|
||
uploadConstraints: 'اختیاری • حداکثر ۵۰۰ مگابایت • .sql, .gz, .dump',
|
||
allowedFormats: 'مجاز: .sql، .gz، .dump',
|
||
maxSize: 'حداکثر ۵۰۰ مگابایت',
|
||
storageSize: 'اندازهٔ فضای ذخیرهٔ دیتابیس',
|
||
suggestedFromDump: 'پیشنهادشده از dump (حداقل {gi} GiB)',
|
||
minimumGb: 'حداقل {n} GB',
|
||
mustFitDump: ' (باید dump آپلودشده را جا دهد)',
|
||
expansionOnly: ' • فقط افزایش پس از ساخت مجاز است',
|
||
storageTooSmallTitle: 'فضای ذخیره خیلی کم است',
|
||
ok: 'باشه',
|
||
storageTooSmallDetail: 'حجم dump دیتابیس شما حدود {dumpGi} GiB است. فضای ذخیرهٔ دیتابیس باید حداقل {need} GiB باشد (شما {selected} GiB انتخاب کردی). فضای ذخیره را افزایش بده و دوباره تلاش کن.',
|
||
},
|
||
snapshots: {
|
||
title: 'اسنپشاتها',
|
||
newSnapshot: 'اسنپشات جدید',
|
||
creating: 'در حال ساخت…',
|
||
hide: 'پنهان',
|
||
show: 'نمایش',
|
||
deployFirst: 'اول سرویس را منتشر کن',
|
||
waitCurrent: 'منتظر پایان بکاپ فعلی بمان',
|
||
infoNote: 'اسنپشاتهای دیتابیس یک SQL dump ذخیره میکنند که بعداً میتوانی دانلود کنی. وقتی پیشرفت به ۱۰۰٪ رسید از دکمهٔ دانلود استفاده کن. تا ۱۰ اسنپشات نگه داشته میشود؛ قدیمیترها خودکار حذف میشوند.',
|
||
loadingBackups: 'در حال بارگذاری بکاپها…',
|
||
noBackups: 'هنوز بکاپی نیست',
|
||
noBackupsHint: 'برای ساخت اولین dump دیتابیس روی «اسنپشات جدید» بزن.',
|
||
defaultLabel: 'بکاپ دیتابیس',
|
||
auto: 'خودکار',
|
||
manual: 'دستی',
|
||
dumping: 'در حال dump…',
|
||
preparing: 'آمادهسازی dump…',
|
||
exporting: 'استخراج دیتابیس…',
|
||
finalizing: 'نهاییسازی…',
|
||
creatingDump: 'ساخت dump دیتابیس…',
|
||
dump: 'dump',
|
||
downloadTitle: 'دانلود dump دیتابیس',
|
||
deleteTitle: 'حذف بکاپ',
|
||
removeFailedTitle: 'حذف بکاپ ناموفق',
|
||
maxKept: 'حداکثر ۱۰ بکاپ نگه داشته میشود.',
|
||
backupReady: 'بکاپ آماده است — حالا میتوانی dump را دانلود کنی',
|
||
backupFailed: 'بکاپ ناموفق بود',
|
||
backupStarted: 'بکاپ آغاز شد — dump در حال انجام',
|
||
createFailed: 'ساخت بکاپ ناموفق بود',
|
||
backupDeleted: 'بکاپ حذف شد',
|
||
deleteFailed: 'حذف بکاپ ناموفق بود',
|
||
downloadStarted: 'دانلود آغاز شد',
|
||
downloadFailed: 'دانلود dump دیتابیس ناموفق بود',
|
||
deleteConfirmTitle: 'حذف بکاپ؟',
|
||
deleteConfirmMessage: 'حذف «{label}»؟ فایل dump برای همیشه حذف میشود.',
|
||
snapStatus: { completed: 'کامل', failed: 'ناموفق' },
|
||
},
|
||
serviceResources: {
|
||
title: 'منابع و مقیاسبندی',
|
||
hide: 'پنهان',
|
||
monitor: 'پایش',
|
||
deployToView: 'برای دیدن متریکها و تنظیم منابع، سرویس را منتشر کن.',
|
||
loadingMetrics: 'در حال بارگذاری متریکها…',
|
||
replicas: 'رپلیکاها',
|
||
pods: 'پادها',
|
||
metrics: 'متریکها',
|
||
serviceStopped: 'سرویس متوقف است.',
|
||
noMetrics: 'هنوز متریک منابعی نیست.',
|
||
storage: 'فضای ذخیره',
|
||
loadingStorage: 'در حال بارگذاری فضای ذخیره…',
|
||
used: 'مصرفشده',
|
||
allocated: 'تخصیصیافته',
|
||
expansionNote: 'فقط افزایش مجاز است. از «اعمال تغییرات» زیر استفاده کن.',
|
||
storageChargedNote: ' فضای ذخیرهٔ اضافه برای بازهٔ باقیماندهٔ صورتحساب محاسبه میشود.',
|
||
storageUnavailable: 'متریک فضای ذخیره در دسترس نیست.',
|
||
adjustCpuMem: 'تنظیم CPU / حافظه',
|
||
redisResources: 'منابع Redis',
|
||
rabbitmqResources: 'منابع RabbitMQ',
|
||
upgradeChargeNote: 'ارتقاهایی که هزینه را افزایش میدهند برای بازهٔ باقیماندهٔ صورتحساب (کیفپول یا فاکتور) محاسبه میشوند، مثل اپلیکیشنها.',
|
||
applying: 'در حال اعمال…',
|
||
applyChanges: 'اعمال تغییرات',
|
||
restoreDump: 'بازیابی dump دیتابیس',
|
||
restoring: 'در حال بازیابی دیتابیس…',
|
||
uploadToRestore: 'آپلود SQL dump برای بازیابی',
|
||
uploadFormats: '.sql، .gz یا .dump — حداکثر ۵۰۰ مگابایت',
|
||
workloads: { database: 'دیتابیس', redis: 'Redis', rabbitmq: 'RabbitMQ' },
|
||
resourcesUpdated: 'منابع بهروزرسانی شد',
|
||
updateFailed: 'بهروزرسانی منابع ناموفق بود',
|
||
upgradedPaid: 'منابع ارتقا یافت! {amount} تومان پرداخت شد',
|
||
updatedSuccess: 'منابع با موفقیت بهروزرسانی شد',
|
||
upgradeFailed: 'ارتقای منابع ناموفق بود',
|
||
calcFailed: 'محاسبهٔ هزینهٔ ارتقا ناموفق بود',
|
||
invoiceCreated: 'فاکتور ساخته شد. روش پرداخت را انتخاب کن.',
|
||
invoiceFailed: 'ساخت فاکتور ارتقا ناموفق بود',
|
||
restoredSuccess: 'دیتابیس با موفقیت بازیابی شد',
|
||
restoreFailed: 'بازیابی دیتابیس ناموفق بود',
|
||
uploadFailed: 'آپلود dump دیتابیس ناموفق بود',
|
||
invalidFile: 'لطفاً فایل .sql، .dump یا .gz آپلود کن',
|
||
fileTooLarge: 'حجم فایل باید کمتر از ۵۰۰ مگابایت باشد',
|
||
renewFirst: 'پیش از تغییر منابع، سرویس را تمدید کن',
|
||
},
|
||
},
|
||
|
||
nav: {
|
||
sectionAdmin: 'مدیریت',
|
||
sectionTechnical: 'فنی',
|
||
sectionSales: 'فروش',
|
||
walletBalanceTitle: 'موجودی کیفپول',
|
||
dashboard: 'داشبورد',
|
||
applications: 'اپلیکیشنها',
|
||
services: 'دیتابیسها و سرویسها',
|
||
logs: 'لاگها',
|
||
newDeploy: 'دیپلوی جدید',
|
||
wallet: 'کیفپول',
|
||
invoices: 'فاکتورها',
|
||
tickets: 'تیکتها',
|
||
users: 'کاربران',
|
||
allApplications: 'همهٔ اپلیکیشنها',
|
||
billingPlans: 'پلنهای صورتحساب',
|
||
clusters: 'کلاسترها',
|
||
clusterPools: 'پولهای کلاستر',
|
||
allTickets: 'همهٔ تیکتها',
|
||
technicalTickets: 'تیکتهای فنی',
|
||
salesTickets: 'تیکتهای فروش',
|
||
},
|
||
|
||
dashboard: {
|
||
status: {
|
||
running: 'در حال اجرا',
|
||
pending: 'در انتظار',
|
||
building: 'در حال بیلد',
|
||
deploying: 'در حال انتشار',
|
||
failed: 'ناموفق',
|
||
build_failed: 'خطای بیلد',
|
||
cancelled: 'لغو شده',
|
||
stopped: 'متوقف',
|
||
},
|
||
home: {
|
||
welcome: 'خوش آمدی، {name}!',
|
||
overview: 'نمای کلیِ اپلیکیشنها و سرویسهای مدیریتشدهٔ تو.',
|
||
creditsTitle: 'اعتبارِ پیشپرداختِ منابع',
|
||
creditsBody:
|
||
'اگر اپی را پیش از پایان پلنت حذف کنی، میتوانی تا زمان انقضای اعتبار، اپ جدیدی با همان منابع و بدون هزینهٔ اضافه منتشر کنی.',
|
||
fromApp: 'از اپِ «{name}»',
|
||
resourceCredit: 'اعتبارِ منابع',
|
||
remaining: '{label} باقیمانده',
|
||
expires: 'انقضا {date}',
|
||
cpu: 'پردازنده',
|
||
ram: 'حافظه',
|
||
replicas: 'تعداد نمونه',
|
||
db: 'دیتابیس',
|
||
dbDisk: 'دیسکِ دیتابیس',
|
||
appDisk: 'دیسکِ اپ',
|
||
useOnNewApp: 'استفاده روی اپ جدید →',
|
||
statApplications: 'اپلیکیشنها',
|
||
statAppsRunning: 'اپهای در حال اجرا',
|
||
statManagedServices: 'سرویسهای مدیریتشده',
|
||
statServicesRunning: 'سرویسهای در حال اجرا',
|
||
appsFailed: '{n} اپلیکیشن ناموفق',
|
||
servicesFailed: '{n} سرویس ناموفق',
|
||
recentApplications: 'اپلیکیشنهای اخیر',
|
||
newApplication: 'اپلیکیشن جدید',
|
||
noApplications: 'هنوز اپلیکیشنی نداری',
|
||
deployFirst: 'اولین اپت را منتشر کن',
|
||
viewAllApplications: 'مشاهدهٔ همهٔ {n} اپلیکیشن →',
|
||
recentServices: 'دیتابیسها و سرویسهای اخیر',
|
||
newService: 'سرویس جدید',
|
||
noServices: 'هنوز سرویس مدیریتشدهای نداری',
|
||
createServiceCta: 'ساخت دیتابیس یا سرویس',
|
||
viewAllServices: 'مشاهدهٔ همهٔ {n} سرویس →',
|
||
replica: 'نمونه',
|
||
replicaPlural: 'نمونه',
|
||
},
|
||
apps: {
|
||
title: 'اپلیکیشنهای من',
|
||
count: '{n} اپلیکیشن',
|
||
newApplication: 'اپلیکیشن جدید',
|
||
noApplications: 'هنوز اپلیکیشنی نداری',
|
||
emptyDesc: 'برای شروع، اولین اپلیکیشنت را منتشر کن.',
|
||
deployFirst: 'اولین اپت را منتشر کن',
|
||
colApplication: 'اپلیکیشن',
|
||
colRuntime: 'محیط اجرا',
|
||
colStatus: 'وضعیت',
|
||
colServiceStatus: 'وضعیت سرویس',
|
||
colExpiry: 'انقضا',
|
||
colActions: 'عملیات',
|
||
view: 'مشاهده',
|
||
lifecycle: {
|
||
active: 'فعال',
|
||
suspended: 'معلق — پرداختنشده',
|
||
pending_deletion: 'در انتظار حذف',
|
||
deleted: 'حذفشده',
|
||
},
|
||
expired: 'منقضی شده',
|
||
daysHours: '{d} روز و {h} ساعت باقیمانده',
|
||
hours: '{h} ساعت باقیمانده',
|
||
mins: '{m} دقیقه باقیمانده',
|
||
noPlan: 'بدون پلن',
|
||
deleteTitle: 'حذف اپلیکیشن',
|
||
deleteMessage:
|
||
'اپلیکیشن «{name}» و همهٔ دادههایش برای همیشه حذف شود؟\n\nاگر از پلنت زمان باقی مانده باشد، منابع پیشپرداختشده روی داشبوردت نمایش داده میشود تا بدون هزینهٔ اضافه روی اپ جدید استفاده کنی.',
|
||
deleted: 'اپلیکیشن حذف شد',
|
||
deletedWithCredit: 'اپلیکیشن حذف شد. منابع پیشپرداختت روی داشبورد نمایش داده میشود.',
|
||
},
|
||
services: {
|
||
title: 'دیتابیسها و سرویسها',
|
||
subtitle: 'دیتابیسهای مستقل، Redis و RabbitMQ — {n} سرویس',
|
||
newService: 'سرویس جدید',
|
||
noServices: 'هنوز سرویس مدیریتشدهای نداری',
|
||
emptyDesc: 'بدون انتشار یک اپلیکیشن کامل، یک دیتابیس، Redis یا RabbitMQ بساز.',
|
||
createFirst: 'اولین سرویست را بساز',
|
||
deleteTitle: 'حذف سرویس؟',
|
||
deleteMessage: 'سرویس «{name}» برای همیشه حذف شود؟ این عمل قابل بازگشت نیست.',
|
||
deleted: 'سرویس حذف شد',
|
||
deletedWithCredit: 'سرویس حذف شد. منابع پیشپرداختت روی داشبورد است.',
|
||
},
|
||
wallet: {
|
||
title: 'کیفپول',
|
||
subtitle: 'موجودی و تراکنشهایت را مدیریت کن',
|
||
currentBalance: 'موجودی فعلی',
|
||
toman: 'تومان',
|
||
topUp: 'افزایش موجودی',
|
||
amountPlaceholder: 'مبلغ (تومان) — حداقل ۱٬۰۰۰',
|
||
payNow: 'پرداخت',
|
||
transactionHistory: 'تاریخچهٔ تراکنشها',
|
||
noTransactions: 'هنوز تراکنشی نداری',
|
||
balanceAfter: 'موجودی: {amount} {unit}',
|
||
invoice: 'فاکتور {number}',
|
||
minChargeError: 'حداقل مبلغ شارژ ۱٬۰۰۰ تومان است',
|
||
chargedSuccess: 'کیفپول با موفقیت شارژ شد',
|
||
chargeFailed: 'شارژ کیفپول ناموفق بود',
|
||
paymentSuccess: 'پرداخت موفق — کیفپول شارژ شد',
|
||
paymentFailed: 'پرداخت ناموفق بود',
|
||
topUpDesc: 'شارژ کیفپول',
|
||
topUpGatewayDesc: 'شارژ کیفپول از طریق درگاه',
|
||
txTypes: {
|
||
charge: 'واریز',
|
||
deduction: 'پرداخت',
|
||
refund: 'بازگشت وجه',
|
||
gateway_payment: 'پرداخت درگاهی',
|
||
},
|
||
},
|
||
tickets: {
|
||
status: { open: 'باز', waiting: 'در انتظار', answered: 'پاسخدادهشده', closed: 'بسته' },
|
||
priority: { low: 'کم', medium: 'متوسط', high: 'زیاد' },
|
||
department: { technical: 'فنی', sales: 'فروش' },
|
||
departmentFull: { technical: 'پشتیبانی فنی', sales: 'فروش' },
|
||
role: { admin: 'مدیر', technical: 'فنی', sales: 'فروش' },
|
||
myTickets: 'تیکتهای من',
|
||
myTicketsSubtitle: 'تیکتهای پشتیبانی و وضعیتشان',
|
||
newTicket: 'تیکت جدید',
|
||
createNewTicket: 'ساخت تیکت جدید',
|
||
subject: 'موضوع',
|
||
subjectPlaceholder: 'توضیح کوتاهی از مشکلت',
|
||
departmentField: 'بخش',
|
||
priorityField: 'اولویت',
|
||
messageField: 'پیام',
|
||
messagePlaceholder: 'مشکلت را با جزئیات توضیح بده…',
|
||
submitTicket: 'ثبت تیکت',
|
||
creating: 'در حال ساخت…',
|
||
noTickets: 'هنوز تیکتی نداری',
|
||
noTicketsHint: 'اگر به کمک نیاز داری یک تیکت بساز',
|
||
createdSuccess: 'تیکت با موفقیت ساخته شد',
|
||
createFailed: 'ساخت تیکت ناموفق بود',
|
||
messages: '{n} پیام',
|
||
msg: '{n} پیام',
|
||
back: 'بازگشت',
|
||
notFound: 'تیکت پیدا نشد',
|
||
by: 'توسط',
|
||
closeTicket: 'بستن تیکت',
|
||
closedNotice: 'این تیکت بسته شده است. اگر باز هم کمک خواستی، تیکت جدیدی بساز.',
|
||
replyPlaceholder: 'پاسخت را بنویس…',
|
||
send: 'ارسال',
|
||
replySent: 'پاسخ ارسال شد',
|
||
replyFailed: 'ارسال پاسخ ناموفق بود',
|
||
ticketClosed: 'تیکت بسته شد',
|
||
unknown: 'ناشناس',
|
||
ticketsTitle: 'تیکتهای {dept}',
|
||
totalTickets: '{n} تیکت در مجموع',
|
||
unanswered: 'بیپاسخ',
|
||
needResponse: 'نیازمند پاسخ',
|
||
answered: 'پاسخدادهشده',
|
||
waitingForUser: 'منتظر کاربر',
|
||
totalOpen: 'مجموع باز',
|
||
excludingClosed: 'بهجز بستهها',
|
||
all: 'همه',
|
||
noTicketsStaff: 'تیکتی نیست',
|
||
noStatusTickets: 'تیکت «{status}» وجود ندارد',
|
||
noDeptTickets: 'در این بخش تیکتی نیست',
|
||
allTickets: 'همهٔ تیکتها',
|
||
allTicketsSubtitle: 'نمای کلیِ همهٔ تیکتهای پشتیبانی در همهٔ بخشها',
|
||
totalTicketsStat: 'کل تیکتها',
|
||
needStaffResponse: 'نیازمند پاسخ پشتیبان',
|
||
avgResponseTime: 'میانگین زمان پاسخ',
|
||
byDepartment: 'بر اساس بخش',
|
||
departmentLabel: 'بخش:',
|
||
statusLabel: 'وضعیت:',
|
||
noTicketsFound: 'تیکتی پیدا نشد',
|
||
minutes: '{n} دقیقه',
|
||
hours: '{n} ساعت',
|
||
days: '{n} روز',
|
||
},
|
||
invoices: {
|
||
status: {
|
||
draft: 'پیشنویس',
|
||
issued: 'پرداختنشده',
|
||
partially_paid: 'پرداخت جزئی',
|
||
paid: 'پرداختشده',
|
||
void: 'باطل',
|
||
failed: 'ناموفق',
|
||
},
|
||
title: 'فاکتورها',
|
||
subtitle: 'ببین هر پرداخت بابت چه بوده و فاکتورهای باز را پرداخت کن.',
|
||
walletBalance: 'موجودی کیفپول',
|
||
toman: 'تومان',
|
||
filterAll: 'همه',
|
||
filterUnpaid: 'پرداختنشده',
|
||
loadingInvoices: 'در حال بارگذاری فاکتورها…',
|
||
noInvoices: 'فاکتوری پیدا نشد',
|
||
total: 'مجموع',
|
||
due: 'مانده',
|
||
paidLabel: 'پرداختشده',
|
||
method: 'روش',
|
||
selectInvoice: 'برای دیدن جزئیات یک فاکتور را انتخاب کن',
|
||
downloadPdf: 'دانلود PDF',
|
||
lineItems: 'اقلام',
|
||
payment: 'پرداخت',
|
||
walletCoversNote: 'موجودی کیفپول {wallet} تومان را پوشش میدهد. مابقی {rest} تومان از طریق درگاه پرداخت میشود.',
|
||
processing: 'در حال پردازش…',
|
||
pay: 'پرداخت',
|
||
paidOn: 'پرداختشده در {date}',
|
||
paymentFailed: 'پرداخت ناموفق بود',
|
||
waitingRemaining: 'منتظر پرداخت مابقی.',
|
||
paymentComplete: 'پرداخت کامل شد',
|
||
paymentCompleteUpdated: 'پرداخت کامل شد و سرویس بهروزرسانی شد',
|
||
gatewayFailed: 'پرداخت درگاهی ناموفق بود',
|
||
invoicePaid: 'فاکتور پرداخت شد',
|
||
invoicePaidUpdated: 'فاکتور پرداخت شد و سرویس بهروزرسانی شد',
|
||
downloadFailed: 'دانلود PDF فاکتور ناموفق بود',
|
||
adminTitle: 'مدیریت فاکتورها',
|
||
adminSubtitle: 'پیگیری همهٔ فاکتورهای کاربران، پرداختها، ارجاع درگاه و تراکنشهای کیفپول.',
|
||
searchPlaceholder: 'جستجوی فاکتور، ایمیل یا اپلیکیشن',
|
||
allStatuses: 'همهٔ وضعیتها',
|
||
allMethods: 'همهٔ روشها',
|
||
methodWallet: 'کیفپول',
|
||
methodGateway: 'درگاه',
|
||
methodMixed: 'ترکیبی',
|
||
colInvoice: 'فاکتور',
|
||
colUser: 'کاربر',
|
||
colStatus: 'وضعیت',
|
||
colMethod: 'روش',
|
||
colDue: 'مانده',
|
||
selectInvoiceShort: 'یک فاکتور را انتخاب کن',
|
||
tracking: 'کد رهگیری',
|
||
transactions: 'تراکنشها',
|
||
noTransactions: 'هنوز تراکنشی متصل نشده',
|
||
manualStatusChange: 'تغییر دستی وضعیت',
|
||
reasonPlaceholder: 'برای ثبت در لاگ، ذکر دلیل الزامی است',
|
||
failedBtn: 'ناموفق',
|
||
voidBtn: 'باطل',
|
||
statusUpdated: 'وضعیت فاکتور بهروزرسانی شد',
|
||
statusUpdateFailed: 'بهروزرسانی وضعیت فاکتور ناموفق بود',
|
||
reasonRequired: 'برای تغییر دستی وضعیت، ذکر دلیل الزامی است',
|
||
},
|
||
logs: {
|
||
title: 'لاگها',
|
||
subtitle: 'لاگ اپلیکیشن، Redis، RabbitMQ و دیتابیس در یکجا',
|
||
levels: { all: 'همهٔ سطوح', error: 'خطا', warn: 'هشدار', info: 'اطلاع', debug: 'دیباگ' },
|
||
sources: { all: 'همهٔ منابع', app: 'اپلیکیشن', redis: 'Redis', rabbitmq: 'RabbitMQ', database: 'دیتابیس' },
|
||
ranges: { '1h': 'یک ساعت اخیر', '6h': '۶ ساعت اخیر', '24h': '۲۴ ساعت اخیر', '7d': '۷ روز اخیر' },
|
||
resource: 'منبع',
|
||
allResources: 'همهٔ منابع',
|
||
applicationsGroup: 'اپلیکیشنها',
|
||
servicesGroup: 'دیتابیسها و سرویسها',
|
||
source: 'منبع',
|
||
level: 'سطح',
|
||
timeRange: 'بازهٔ زمانی',
|
||
search: 'جستجو',
|
||
searchPlaceholder: 'جستجوی پیام…',
|
||
loading: 'در حال بارگذاری',
|
||
refresh: 'تازهسازی',
|
||
autoRefresh: 'تازهسازی خودکار (۵ث)',
|
||
totalPeriod: 'مجموع ({period})',
|
||
errors: 'خطاها',
|
||
warnings: 'هشدارها',
|
||
sourcesStat: 'منابع',
|
||
loadFailed: 'بارگذاری لاگها ناموفق بود. مطمئن شو لاگینگ روی اپت فعال است و Elasticsearch در حال اجراست.',
|
||
logEntries: 'ورودیهای لاگ',
|
||
totalPage: '{total} مورد · صفحهٔ {page}/{pages}',
|
||
loadingLogs: 'در حال بارگذاری لاگها…',
|
||
noLogs: 'برای فیلترهای انتخابشده لاگی پیدا نشد.',
|
||
noLogsHint: 'برای شروع جمعآوری لاگ، اپی با لاگینگ فعال منتشر کن.',
|
||
colTime: 'زمان',
|
||
colLevel: 'سطح',
|
||
colApp: 'اپ',
|
||
colSource: 'منبع',
|
||
colMessage: 'پیام',
|
||
prev: 'قبلی',
|
||
next: 'بعدی',
|
||
reconnecting: 'در حال اتصال مجدد به لاگینگ…',
|
||
notAvailable: 'لاگینگ در دسترس نیست',
|
||
notAvailableMessage: 'Elasticsearch مرکزی روی کلاستر مستقر نشده است. هنگام انتشار اپ، افزونهٔ لاگینگ را فعال کن و از مدیر بخواه استک لاگینگ را مستقر کند.',
|
||
checkingConnection: 'در حال بررسی اتصال…',
|
||
retryingAuto: 'هر چند ثانیه بهصورت خودکار تلاش میشود.',
|
||
},
|
||
users: {
|
||
title: 'مدیریت کاربران',
|
||
count: '{n} کاربر ثبتشده',
|
||
addUser: 'افزودن کاربر',
|
||
createNewUser: 'ساخت کاربر جدید',
|
||
firstName: 'نام',
|
||
lastName: 'نام خانوادگی',
|
||
email: 'ایمیل',
|
||
password: 'رمز عبور',
|
||
firstNamePlaceholder: 'مثلاً علی',
|
||
lastNamePlaceholder: 'مثلاً رضایی',
|
||
emailPlaceholder: 'name@example.com',
|
||
passwordMin: 'حداقل ۸ کاراکتر',
|
||
role: 'نقش',
|
||
roles: { user: 'کاربر', admin: 'مدیر', technical: 'فنی', sales: 'فروش' },
|
||
creating: 'در حال ساخت…',
|
||
createUser: 'ساخت کاربر',
|
||
searchPlaceholder: 'جستجو بر اساس نام یا ایمیل…',
|
||
noUsersSearch: 'کاربری مطابق جستجو پیدا نشد.',
|
||
noUsers: 'هنوز کاربری نیست.',
|
||
colUser: 'کاربر',
|
||
colEmail: 'ایمیل',
|
||
colRole: 'نقش',
|
||
colStatus: 'وضعیت',
|
||
colApps: 'اپها',
|
||
colCreated: 'تاریخ ایجاد',
|
||
colActions: 'عملیات',
|
||
active: 'فعال',
|
||
inactive: 'غیرفعال',
|
||
appsCount: '{n} اپ',
|
||
passwordBtn: 'رمز عبور',
|
||
deactivate: 'غیرفعالسازی',
|
||
activate: 'فعالسازی',
|
||
setPassword: 'تنظیم رمز عبور',
|
||
newPasswordFor: 'رمز عبور جدید برای',
|
||
savePassword: 'ذخیرهٔ رمز',
|
||
saving: 'در حال ذخیره…',
|
||
createdSuccess: 'کاربر با موفقیت ساخته شد',
|
||
createFailed: 'ساخت کاربر ناموفق بود',
|
||
userUpdated: 'کاربر بهروزرسانی شد',
|
||
roleUpdated: 'نقش بهروزرسانی شد',
|
||
passwordUpdated: 'رمز عبور بهروزرسانی شد',
|
||
passwordFailed: 'بهروزرسانی رمز ناموفق بود',
|
||
},
|
||
pools: {
|
||
title: 'پولهای کلاستر',
|
||
subtitle: 'گروههای متوازنشدهٔ کلاستر برای توزیع خودکار اپها',
|
||
createPool: 'ساخت پول',
|
||
editTitle: 'ویرایش «{name}»',
|
||
createNewPool: 'ساخت پول کلاستر جدید',
|
||
poolName: 'نام پول',
|
||
strategy: 'استراتژی',
|
||
strategyOptions: {
|
||
'weighted-resource': 'منابع وزندار — اولویت با ظرفیت سالم و وزن بالاتر',
|
||
'least-loaded': 'کمبارترین — اولویت با کمترین CPU، حافظه و فشار پاد',
|
||
'weighted-round-robin': 'چرخشی وزندار — چرخش متناسب با وزن',
|
||
'region-based': 'بر اساس منطقه — اولویت با منطقهٔ منطبق، سپس وزن و بار',
|
||
'least-apps': 'کمترین اپ — انتشار روی کلاستر با کمترین اپ',
|
||
'round-robin': 'چرخشی — چرخش یکنواخت بین کلاسترها',
|
||
},
|
||
strategyShort: {
|
||
'weighted-resource': 'منابع وزندار',
|
||
'least-loaded': 'کمبارترین',
|
||
'weighted-round-robin': 'چرخشی وزندار',
|
||
'region-based': 'بر اساس منطقه',
|
||
'least-apps': 'کمترین اپ',
|
||
'round-robin': 'چرخشی',
|
||
},
|
||
priority: 'اولویت',
|
||
description: 'توضیحات',
|
||
descriptionPlaceholder: 'پول متوازنشده برای بارهای کاری پروداکشن',
|
||
useAsDefault: 'استفاده بهعنوان پول تخصیص پیشفرض',
|
||
selectClusters: 'انتخاب کلاسترها ({n} انتخابشده)',
|
||
noClustersRegistered: 'هیچ کلاستری ثبت نشده. اول کلاستر اضافه کن.',
|
||
defaultBadge: 'پیشفرض',
|
||
na: 'نامشخص',
|
||
weight: 'وزن',
|
||
saving: 'در حال ذخیره…',
|
||
updatePool: 'بهروزرسانی پول',
|
||
poolCreated: 'پول کلاستر ساخته شد!',
|
||
createFailed: 'ساخت پول ناموفق بود',
|
||
poolUpdated: 'پول کلاستر بهروزرسانی شد!',
|
||
updateFailed: 'بهروزرسانی پول ناموفق بود',
|
||
poolDeleted: 'پول کلاستر حذف شد',
|
||
noPools: 'هنوز پول کلاستری ساخته نشده',
|
||
noPoolsHint: 'برای فعالسازی انتشار متوازن روی چند کلاستر، یک پول بساز',
|
||
active: 'فعال',
|
||
inactive: 'غیرفعال',
|
||
defaultPool: 'پول پیشفرض',
|
||
priorityBadge: 'اولویت {n}',
|
||
noClustersInPool: 'کلاستری در این پول نیست (شاید حذف شدهاند)',
|
||
clustersActive: '{active}/{total} کلاستر فعال · ایجاد {date}',
|
||
edit: 'ویرایش',
|
||
remove: 'حذف',
|
||
deletePoolTitle: 'حذف پول «{name}»',
|
||
deletePoolMessage: 'اپهایی که از قبل به این پول اختصاص یافتهاند، کلاستر فعلیشان را حفظ میکنند.',
|
||
clusterStatus: { active: 'فعال', inactive: 'غیرفعال', error: 'خطا' },
|
||
clusterHealth: { healthy: 'سالم', degraded: 'نزولیافته', unhealthy: 'ناسالم', unknown: 'نامشخص' },
|
||
},
|
||
clusters: {
|
||
title: 'مدیریت کلاسترها',
|
||
count: '{n} کلاستر ثبتشده',
|
||
addCluster: 'افزودن کلاستر',
|
||
registerNew: 'ثبت کلاستر جدید',
|
||
verifyNote: 'سیستم پیش از ثبت، اتصال کوبرنتیز را بررسی میکند.',
|
||
name: 'نام',
|
||
apiServer: 'آدرس API Server',
|
||
region: 'منطقه',
|
||
provider: 'ارائهدهنده',
|
||
selectProvider: 'انتخاب ارائهدهنده',
|
||
weight: 'وزن',
|
||
tags: 'برچسبها',
|
||
tagsPlaceholder: 'ssd, production, iran',
|
||
description: 'توضیحات',
|
||
kubeconfig: 'Kubeconfig (YAML)',
|
||
kubeconfigPlaceholder: 'kubeconfig خود را اینجا بچسبان…',
|
||
setDefault: 'تنظیم بهعنوان کلاستر پیشفرض',
|
||
verifying: 'در حال بررسی اتصال و افزودن…',
|
||
added: 'کلاستر افزوده و اتصال تأیید شد ✓',
|
||
addFailed: 'افزودن کلاستر ناموفق بود',
|
||
connectionOk: 'اتصال موفق — کوبرنتیز {version}',
|
||
connectionFailed: 'اتصال ناموفق: {error}',
|
||
testFailed: 'تست اتصال ناموفق بود',
|
||
removed: 'کلاستر حذف شد',
|
||
noClusters: 'هنوز کلاستری ثبت نشده.',
|
||
noClustersHint: 'برای شروع انتشار اپها، یک کلاستر کوبرنتیز اضافه کن.',
|
||
defaultBadge: 'پیشفرض',
|
||
healthBadge: 'سلامت: {status}',
|
||
weightBadge: 'وزن {n}',
|
||
resources: 'منابع',
|
||
testing: 'در حال تست…',
|
||
test: 'تست',
|
||
remove: 'حذف',
|
||
removeTitle: 'حذف کلاستر',
|
||
removeMessage: 'مطمئنی میخواهی «{name}» را حذف کنی؟',
|
||
loadingResources: 'در حال بارگذاری منابع…',
|
||
resourcesFailed: 'بارگذاری منابع ناموفق بود',
|
||
nodes: 'نودها',
|
||
pods: 'پادها',
|
||
apps: 'اپها',
|
||
totalCpu: 'کل CPU',
|
||
cpuReserved: 'CPU رزروشده',
|
||
memReserved: 'حافظهٔ رزروشده',
|
||
memory: 'حافظه',
|
||
capacity: 'ظرفیت',
|
||
allocatable: 'قابلتخصیص',
|
||
colName: 'نام',
|
||
colStatus: 'وضعیت',
|
||
colRoles: 'نقشها',
|
||
colCpu: 'CPU (ظرفیت / تخصیص)',
|
||
colMemory: 'حافظه (ظرفیت / تخصیص)',
|
||
toolsTitle: 'مدیریت ابزارها',
|
||
toolsSubtitle: 'ابزارهای زیرساخت را برای هر کلاستر نصب و مدیریت کن. هیچچیز بهصورت خودکار نصب نمیشود — فقط آنچه هر کلاستر نیاز دارد را اضافه کن.',
|
||
defaultSuffix: ' (پیشفرض)',
|
||
loadingTools: 'در حال بارگذاری ابزارها…',
|
||
toolsFailed: 'بارگذاری ابزارهای این کلاستر ناموفق بود.',
|
||
toolStatus: {
|
||
installed: 'نصبشده',
|
||
installing: 'در حال نصب…',
|
||
failed: 'ناموفق',
|
||
not_installed: 'نصبنشده',
|
||
unknown: 'نامشخص',
|
||
},
|
||
requires: 'نیازمند:',
|
||
uninstall: 'حذف نصب',
|
||
uninstalling: 'در حال حذف…',
|
||
install: 'نصب',
|
||
installing: 'در حال نصب…',
|
||
repair: 'تعمیر',
|
||
confirmInstall: 'تأیید نصب',
|
||
installRequiredFirst: 'اول ابزارهای موردنیاز را نصب کن',
|
||
removeToolTitle: 'حذف {name}',
|
||
removeToolMessage: '«{name}» از این کلاستر حذف شود؟',
|
||
uninstallConfirm: 'حذف نصب',
|
||
installStarted: '{name} نصب آغاز شد',
|
||
installToolFailed: 'نصب {name} ناموفق بود',
|
||
toolRemoved: '{name} حذف شد',
|
||
removeToolFailed: 'حذف {name} ناموفق بود',
|
||
fieldRequired: '{field} الزامی است',
|
||
clusterStatus: { active: 'فعال', maintenance: 'تعمیر', inactive: 'غیرفعال', error: 'خطا' },
|
||
clusterHealth: { healthy: 'سالم', degraded: 'نزولیافته', unhealthy: 'ناسالم', unknown: 'نامشخص' },
|
||
na: 'نامشخص',
|
||
},
|
||
billing: {
|
||
cycles: { hourly: 'ساعتی', monthly: 'ماهانه', yearly: 'سالانه' },
|
||
resources: {
|
||
base_fee: 'هزینهٔ پایه',
|
||
cpu_per_core: 'CPU (هر هسته)',
|
||
memory_per_gb: 'حافظه (هر GB)',
|
||
storage_per_gb: 'فضای ذخیره (هر GB)',
|
||
database_addon: 'افزونهٔ دیتابیس',
|
||
redis_addon: 'Redis',
|
||
rabbitmq_addon: 'RabbitMQ',
|
||
elasticsearch_addon: 'Elasticsearch',
|
||
custom_domain_addon: 'دامنهٔ اختصاصی + SSL',
|
||
},
|
||
resourceCol: 'منبع',
|
||
title: 'پلنهای صورتحساب',
|
||
subtitle: 'قیمت واحد هر منبع را تعیین کن. کاربران هنگام انتشار CPU، حافظه و فضای ذخیره را انتخاب میکنند؛ هزینه = مصرف آنها × این نرخها.',
|
||
editPlans: 'ویرایش پلنها',
|
||
saving: 'در حال ذخیره…',
|
||
save: 'ذخیره',
|
||
saved: 'پلنهای صورتحساب ذخیره شد',
|
||
saveFailed: 'ذخیرهٔ پلنهای صورتحساب ناموفق بود',
|
||
howTitle: 'صورتحساب چطور کار میکند',
|
||
howApps: 'اپلیکیشنها — کاربر منابع رانتایم را در انتشار انتخاب میکند؛ تو قیمت هر هسته، GB، هزینهٔ پایه و افزونهٔ دیتابیس را تعیین میکنی. CPU و RAM در برآوردها بهتناسب صورتحساب میشوند (مثلاً نیمِ نرخِ هر GB برای نیم گیگابایت حافظه).',
|
||
howOptional: 'سرویسهای اختیاری (Redis، RabbitMQ) — همان ماتریس واحد هر سرویس مثل رانتایمها؛ پیشفرضهای ویزارد انتشار جداگانه ویرایش میشوند. CPU/RAM در محاسبهگر هزینه بهتناسب محدودیتهای واقعی صورتحساب میشوند (مثلاً 500Mi معادل ۰٫۵× نرخِ حافظهٔ هر GB).',
|
||
howDefaults: 'پیشفرضهای انتشار — فقط پیشپرکردنِ اختیاری؛ تغییر آنها هزینهٔ اپهای موجود را عوض نمیکند مگر کاربر همان مقادیر را هنگام انتشار انتخاب کرده باشد.',
|
||
noPricing: 'دادهی قیمتی وجود ندارد',
|
||
appRuntimes: 'رانتایمهای اپلیکیشن',
|
||
appRuntimesSub: 'قیمتگذاری واحد هر رانتایم (ساعتی / ماهانه / سالانه)',
|
||
unitPricesSuffix: '— قیمتهای واحد',
|
||
fillYearly: 'پر کردن سالانه از ماهانه ×۱۲',
|
||
optionalServices: 'سرویسهای اختیاری',
|
||
optionalServicesSub: 'قیمتگذاری واحد هر سرویس (ساعتی / ماهانه / سالانه)',
|
||
deployDefaults: 'سرویسهای اختیاری — پیشفرضهای انتشار',
|
||
deployDefaultsSub: 'پیشپرکردن CPU، حافظه و فضای ذخیره هنگام فعالسازی هر سرویس در ویزارد انتشار',
|
||
addons: 'افزونهها',
|
||
addonsSub: 'هزینههای ثابت بدون وابستگی به رانتایم',
|
||
customDomainTitle: 'دامنهٔ اختصاصی + SSL',
|
||
customDomainSub: 'هزینهٔ ثابت در هر دورهٔ صورتحساب (نه بر اساس منابع)',
|
||
loggingNote: 'محدودیتهای پیشپرشده برای ارسالکنندههای لاگ Fluent Bit (بهازای هر workload فعال هنگام روشنبودن لاگینگ صورتحساب میشود).',
|
||
logShipperCpuLimit: 'محدودیت CPU ارسالکنندهٔ لاگ',
|
||
logShipperMemoryLimit: 'محدودیت حافظهٔ ارسالکنندهٔ لاگ',
|
||
defaultsNote: 'هنگامی که کاربر این سرویس را در انتشار فعال میکند نمایش داده میشود. او میتواند CPU، حافظه و فضای ذخیره را در «منابع و پیکربندی» تغییر دهد؛ صورتحساب واقعی از انتخابهای او × قیمتهای واحد زیر استفاده میکند.',
|
||
cpuRequest: 'درخواست CPU',
|
||
cpuLimit: 'محدودیت CPU',
|
||
memoryRequest: 'درخواست حافظه',
|
||
memoryLimit: 'محدودیت حافظه',
|
||
storageGi: 'فضای ذخیره (Gi)',
|
||
oneCore: '۱ هسته',
|
||
twoCores: '۲ هسته',
|
||
retentionTitle: 'سیاست نگهداری و حذف داده',
|
||
edit: 'ویرایش',
|
||
retentionSub: 'تنظیم کن دادههای کاربر پس از انقضای پلن چه مدت پیش از حذف دائمی نگه داشته شود.',
|
||
hourlyPlans: 'پلنهای ساعتی',
|
||
monthlyPlans: 'پلنهای ماهانه',
|
||
yearlyPlans: 'پلنهای سالانه',
|
||
deleteAfterHours: 'حذف پس از (ساعت):',
|
||
deleteAfterDays: 'حذف پس از (روز):',
|
||
saveSettings: 'ذخیرهٔ تنظیمات',
|
||
lifecycleSaved: 'تنظیمات چرخهٔ عمر بهروزرسانی شد',
|
||
saveFailedShort: 'ذخیره ناموفق بود',
|
||
hours: 'ساعت',
|
||
days: 'روز',
|
||
},
|
||
servicesNew: {
|
||
steps: ['نوع سرویس', 'پیکربندی', 'بررسی و پرداخت'],
|
||
title: 'سرویس مدیریتشدهٔ جدید',
|
||
subtitle: 'دیتابیس، Redis یا RabbitMQ — مثل اپلیکیشنها صورتحساب میشود',
|
||
typeDatabase: 'دیتابیس',
|
||
typeDatabaseDesc: 'PostgreSQL، MySQL، MariaDB، MongoDB',
|
||
typeRedis: 'Redis',
|
||
typeRedisDesc: 'کش و ذخیرهٔ درونحافظهای',
|
||
typeRabbitmq: 'RabbitMQ',
|
||
typeRabbitmqDesc: 'بروکر پیام',
|
||
serviceName: 'نام سرویس',
|
||
serviceNamePlaceholder: 'my-database',
|
||
nameHint: 'فقط حروف کوچک، اعداد و خط تیره',
|
||
redisVersion: 'نسخهٔ Redis',
|
||
rabbitmqVersion: 'نسخهٔ RabbitMQ',
|
||
redisResources: 'منابع Redis',
|
||
rabbitmqResources: 'منابع RabbitMQ',
|
||
billingCycle: 'دورهٔ صورتحساب',
|
||
cycles: { hourly: 'ساعتی', monthly: 'ماهانه', yearly: 'سالانه' },
|
||
paymentMethod: 'روش پرداخت',
|
||
wallet: 'کیفپول',
|
||
insufficient: 'ناکافی',
|
||
payNow: 'پرداخت',
|
||
pricingUnavailable: 'قیمت در دسترس نیست',
|
||
back: 'بازگشت',
|
||
next: 'بعدی',
|
||
payProvision: 'پرداخت و راهاندازی',
|
||
provisioning: 'در حال راهاندازی سرویس',
|
||
creatingService: 'ساخت سرویس',
|
||
uploadingDump: 'آپلود dump دیتابیس',
|
||
payment: 'پرداخت',
|
||
deploying: 'انتشار',
|
||
provisionedSuccess: 'سرویس با موفقیت راهاندازی شد',
|
||
deployFailed: 'انتشار ناموفق بود',
|
||
paySucceededDeployFailed: 'پرداخت موفق بود اما انتشار ناموفق شد',
|
||
payProvisionFailed: 'پرداخت یا راهاندازی ناموفق بود',
|
||
payFailed: 'پرداخت ناموفق بود',
|
||
insufficientBalance: 'موجودی کیفپول کافی نیست',
|
||
serviceDesc: 'سرویس: {name} ({cycle})',
|
||
},
|
||
},
|
||
};
|
||
|
||
export type Dictionary = typeof fa;
|
||
export default fa;
|