chore(frontend): update locale dictionaries

This commit is contained in:
2026-04-29 11:31:19 +03:30
parent 06d083c818
commit 013c78a46d
2 changed files with 357 additions and 349 deletions

View File

@@ -155,6 +155,8 @@ export const fa = {
subtitle: "ورک‌اسپیس‌های خود را مدیریت کنید",
noDescription: "بدون توضیحات",
emptyState: "شما در هیچ ورک‌اسپیس عضو نیستید.",
noWorkspaceSearch: "لطفاً عبارت جستجو را تغییر دهید.",
noWorkspace: "ورک‌اسپیس یافت نشد.",
createTitle: "ایجاد ورک‌اسپیس",
editTitle: "ویرایش ورک‌اسپیس",
detailTitle: "جزئیات ورک‌اسپیس",
@@ -241,13 +243,13 @@ export const fa = {
editClient: "ویرایش مشتری",
deleteConfirmTitle: "حذف مشتری",
deleteConfirmMessage: (name: string) => `آیا از حذف ${name} اطمینان دارید؟`,
delete: "حذف",
saveChanges: "ذخیره تغییرات",
createSuccess: "مشتری با موفقیت ایجاد شد.",
updateSuccess: "مشتری با موفقیت به‌روزرسانی شد.",
deleteSuccess: "مشتری با موفقیت حذف شد.",
errors: {
createFailed: "خطا در ایجاد مشتری",
delete: "حذف",
saveChanges: "ذخیره تغییرات",
createSuccess: "مشتری با موفقیت ایجاد شد.",
updateSuccess: "مشتری با موفقیت به‌روزرسانی شد.",
deleteSuccess: "مشتری با موفقیت حذف شد.",
errors: {
createFailed: "خطا در ایجاد مشتری",
fetchFailed: "خطا در دریافت لیست مشتری‌ها",
updateFailed: "خطا در ویرایش مشتری",
deleteFailed: "خطا در حذف مشتری",
@@ -264,11 +266,11 @@ export const fa = {
next: "بعدی",
},
sidebar: {
timesheet: 'تایم‌شیت',
reports: 'گزارش‌ها',
logs: "لاگ‌ها",
workspaces: 'ورک‌اسپیس‌ها',
sidebar: {
timesheet: 'تایم‌شیت',
reports: 'گزارش‌ها',
logs: "لاگ‌ها",
workspaces: 'ورک‌اسپیس‌ها',
clients: 'مشتری‌ها',
projects: "پروژه‌ها",
tags: "تگ‌ها",
@@ -288,11 +290,11 @@ export const fa = {
title: "پروژه‌ها",
description: (workspaceName: string) => `مدیریت پروژه‌ها برای ${workspaceName}`,
active: "پروژه‌های فعال",
archived: "پروژه‌های بایگانی شده",
createNew: "ایجاد پروژه جدید",
searchPlaceholder: "جستجوی پروژه‌ها...",
selectWorkspace: "لطفاً ابتدا یک ورک‌اسپیس انتخاب کنید.",
titlePlaceholder: "عنوان پروژه",
archived: "پروژه‌های بایگانی شده",
createNew: "ایجاد پروژه جدید",
searchPlaceholder: "جستجوی پروژه‌ها...",
selectWorkspace: "لطفاً ابتدا یک ورک‌اسپیس انتخاب کنید.",
titlePlaceholder: "عنوان پروژه",
descriptionPlaceholder: "توضیحات پروژه",
titleLabel: "عنوان",
descriptionLabel: "توضیحات",
@@ -302,6 +304,7 @@ export const fa = {
client: "مشتری",
noClient: "بدون مشتری",
emptyState: "پروژه‌ای یافت نشد",
noProjectsSearch: "لطفاً عبارت جستجو را تغییر دهید.",
deleteTitle: "حذف پروژه",
deleteWarning: "برای تایید حذف، لطفاً نام پروژه را تایپ کنید:",
deleteSuccess: "پروژه با موفقیت حذف شد",
@@ -309,15 +312,15 @@ export const fa = {
create: "ایجاد",
cancel: "انصراف",
createProject: "ایجاد پروژه",
editProject: "ویرایش پروژه",
restore: "بازیابی",
archive: "بایگانی",
archiveSuccess: "پروژه با موفقیت بایگانی شد.",
restoreSuccess: "پروژه با موفقیت بازیابی شد.",
fetchError: "خطا در دریافت پروژه‌ها.",
clientFetchError: "خطا در دریافت لیست مشتری‌ها.",
filterClients: "فیلتر بر اساس مشتری",
clearClientFilters: "پاک کردن فیلترها",
editProject: "ویرایش پروژه",
restore: "بازیابی",
archive: "بایگانی",
archiveSuccess: "پروژه با موفقیت بایگانی شد.",
restoreSuccess: "پروژه با موفقیت بازیابی شد.",
fetchError: "خطا در دریافت پروژه‌ها.",
clientFetchError: "خطا در دریافت لیست مشتری‌ها.",
filterClients: "فیلتر بر اساس مشتری",
clearClientFilters: "پاک کردن فیلترها",
memberAlreadyAdded: "این کاربر قبلا اضافه شده است",
creator: "سازنده",
addUser: "افزودن کاربر",
@@ -359,6 +362,7 @@ export const fa = {
namePlaceholder: "مثلاً طراحی",
colorLabel: "رنگ",
emptyState: "تگی یافت نشد",
noTagsSearch: "لطفاً عبارت جستجو را تغییر دهید.",
selectWorkspace: "لطفاً ابتدا یک ورک‌اسپیس انتخاب کنید.",
fetchError: "دریافت تگ‌ها با خطا مواجه شد.",
createSuccess: "تگ با موفقیت ایجاد شد.",
@@ -420,14 +424,14 @@ export const fa = {
optionsError: "دریافت پروژه‌ها و تگ‌ها با خطا مواجه شد.",
descriptionLabel: "توضیحات",
descriptionPlaceholder: "روی چه چیزی کار می‌کنید؟",
projectLabel: "پروژه",
noProject: "بدون پروژه",
startLabel: "شروع",
endLabel: "پایان",
timeLabel: "زمان",
billable: "قابل صورتحساب",
noTagsHint: "ابتدا از صفحه تگ‌ها، تگ ایجاد کنید.",
clearFilters: "پاک کردن فیلترها",
projectLabel: "پروژه",
noProject: "بدون پروژه",
startLabel: "شروع",
endLabel: "پایان",
timeLabel: "زمان",
billable: "قابل صورتحساب",
noTagsHint: "ابتدا از صفحه تگ‌ها، تگ ایجاد کنید.",
clearFilters: "پاک کردن فیلترها",
customFromLabel: "از تاریخ",
customToLabel: "تا تاریخ",
allClientsLabel: "همه مشتری‌ها",
@@ -437,22 +441,22 @@ export const fa = {
hideFiltersLabel: "مخفی کردن فیلترها",
applyFiltersLabel: "اعمال",
clientFilterPrefix: "مشتری",
projectFilterPrefix: "پروژه",
tagFilterPrefix: "تگ",
fromFilterPrefix: "از",
toFilterPrefix: "تا",
deleteTitle: "حذف ورودی زمان",
deleteConfirmMessage: "آیا از حذف این ورودی زمان اطمینان دارید؟",
restartConfirmMessage: "می‌خواهید یک تایمر جدید را از روی این ورودی شروع کنید؟",
discardConfirmMessage: "آیا از دور انداختن این تایمر در حال اجرا اطمینان دارید؟",
searchTagsLabel: "جست‌وجوی تگ‌ها...",
noTagsFoundLabel: "تگی پیدا نشد.",
searchProjectsLabel: "جست‌وجوی پروژه‌ها...",
noProjectsFoundLabel: "پروژه‌ای پیدا نشد.",
deletedProjectLabel: "پروژه حذف‌شده",
deletedTagLabel: "تگ حذف‌شده",
},
reports: {
projectFilterPrefix: "پروژه",
tagFilterPrefix: "تگ",
fromFilterPrefix: "از",
toFilterPrefix: "تا",
deleteTitle: "حذف ورودی زمان",
deleteConfirmMessage: "آیا از حذف این ورودی زمان اطمینان دارید؟",
restartConfirmMessage: "می‌خواهید یک تایمر جدید را از روی این ورودی شروع کنید؟",
discardConfirmMessage: "آیا از دور انداختن این تایمر در حال اجرا اطمینان دارید؟",
searchTagsLabel: "جست‌وجوی تگ‌ها...",
noTagsFoundLabel: "تگی پیدا نشد.",
searchProjectsLabel: "جست‌وجوی پروژه‌ها...",
noProjectsFoundLabel: "پروژه‌ای پیدا نشد.",
deletedProjectLabel: "پروژه حذف‌شده",
deletedTagLabel: "تگ حذف‌شده",
},
reports: {
title: "گزارش‌ها",
description: (workspaceName: string) => `مرور گزارش فعالیت برای ${workspaceName}`,
selectWorkspace: "لطفاً ابتدا یک ورک‌اسپیس انتخاب کنید.",
@@ -482,11 +486,11 @@ export const fa = {
name: "نام",
clear: "پاک کردن",
apply: "اعمال",
totalHours: "مجموع ساعت",
billableHours: "ساعات کاری",
nonBillableHours: "ساعات غیر کاری",
hourlyRate: "نرخ ساعتی",
totalIncome: "مجموع درآمد",
totalHours: "مجموع ساعت",
billableHours: "ساعات کاری",
nonBillableHours: "ساعات غیر کاری",
hourlyRate: "نرخ ساعتی",
totalIncome: "مجموع درآمد",
chartTitle: "نمودار فعالیت",
totalSeconds: "مجموع ثانیه",
exportExcel: "خروجی Excel",
@@ -500,118 +504,118 @@ export const fa = {
loadError: "دریافت گزارش‌ها با خطا مواجه شد.",
loadDayDetailsError: "دریافت جزئیات روز با خطا مواجه شد.",
loadFiltersError: "دریافت فیلترهای گزارش با خطا مواجه شد.",
exportQueued: "درخواست خروجی ثبت شد. پیوند دانلود از طریق اعلان ارسال می‌شود.",
exportError: "ثبت درخواست خروجی با خطا مواجه شد.",
},
logs: {
eyebrow: "فعالیت‌های ورک‌اسپیس",
title: "لاگ‌های فعالیت",
description: (workspaceName: string) => `مرور رویدادهای ثبت‌شده در ${workspaceName}`,
selectWorkspace: "لطفاً ابتدا یک ورک‌اسپیس انتخاب کنید.",
unauthorized: "فقط مالک و ادمین می‌توانند لاگ‌های فعالیت ورک‌اسپیس را مشاهده کنند.",
loading: "در حال بارگذاری لاگ‌ها...",
loadingUsers: "در حال بارگذاری کاربران...",
loadingDetails: "در حال بارگذاری جزئیات...",
loadError: "دریافت لاگ‌ها با خطا مواجه شد.",
loadDetailsError: "دریافت جزئیات لاگ با خطا مواجه شد.",
loadFiltersError: "دریافت فیلترهای لاگ با خطا مواجه شد.",
search: "جست‌وجو",
searchPlaceholder: "جست‌وجوی لاگ‌ها...",
section: "بخش",
allSections: "همه بخش‌ها",
event: "رویداد",
allEvents: "همه رویدادها",
actor: "انجام‌دهنده",
allActors: "همه کاربران",
searchActors: "جست‌وجوی کاربران...",
ordering: "مرتب‌سازی",
newestFirst: "جدیدترین",
oldestFirst: "قدیمی‌ترین",
fromDate: "از تاریخ",
toDate: "تا تاریخ",
clear: "پاک کردن",
apply: "اعمال",
loadMore: "بارگذاری بیشتر",
totalLogs: "کل لاگ‌ها",
activeFilters: "فیلترهای فعال",
latestActivity: "آخرین فعالیت",
resultsCount: (count: number) => `${count} نتیجه`,
empty: "لاگ فعالیتی پیدا نشد",
emptyHint: "فیلترها را تغییر دهید یا منتظر فعالیت جدید بمانید.",
detailsTitle: "جزئیات فعالیت",
detailsHint: "برای بررسی دقیق تغییرات، یک مورد را انتخاب کنید.",
selectLogHint: "یک لاگ را برای مشاهده جزئیات انتخاب کنید.",
target: "هدف",
timestamp: "زمان",
remoteAddress: "آدرس شبکه",
previousValue: "مقدار قبلی",
currentValue: "مقدار جدید",
changesTitle: "تغییرات",
noDetails: "برای این رویداد جزئیات فیلدی در دسترس نیست.",
snapshot: "نمونه ذخیره‌شده",
unknownActor: "کاربر نامشخص",
summary: (actor: string, event: string, section: string, target: string) =>
`${actor} ${target} را در بخش ${section} ${event}`,
sections: {
workspace: "ورک‌اسپیس",
workspace_members: "اعضای ورک‌اسپیس",
clients: "مشتری‌ها",
projects: "پروژه‌ها",
tags: "تگ‌ها",
time_entries: "ورودی‌های زمان",
rates: "نرخ‌ها",
report_exports: "خروجی‌های گزارش",
},
events: {
create: "ایجاد کرد",
update: "ویرایش کرد",
delete: "حذف کرد",
restore: "بازیابی کرد",
archive: "بایگانی کرد",
unarchive: "از بایگانی خارج کرد",
activate: "فعال کرد",
deactivate: "غیرفعال کرد",
},
},
notifications: {
title: "اعلان‌ها",
pageDescription: "مرور همه اعلان‌ها و وضعیت خروجی‌های گزارش.",
open: "باز کردن اعلان‌ها",
empty: "هنوز اعلانی وجود ندارد.",
emptyUnread: "اعلان خوانده‌نشده‌ای وجود ندارد.",
loading: "در حال بارگذاری اعلان‌ها...",
loadingMore: "در حال بارگذاری بیشتر...",
loadMore: "بارگذاری بیشتر",
markAllRead: "خواندن همه",
viewAll: "نمایش همه اعلان‌ها",
totalLabel: "مجموع اعلان‌ها",
unreadLabel: "اعلان‌های خوانده‌نشده",
deleteLabel: "حذف اعلان",
markSeenError: "به‌روزرسانی اعلان با خطا مواجه شد.",
markAllError: "به‌روزرسانی اعلان‌ها با خطا مواجه شد.",
deleteError: "حذف اعلان با خطا مواجه شد.",
loadError: "دریافت اعلان‌ها با خطا مواجه شد.",
openError: "باز کردن اعلان با خطا مواجه شد.",
newTitle: "اعلان جدید",
openAction: "باز کردن",
summary: (total: number, unread: number) => `${total} کل، ${unread} خوانده‌نشده`,
workspaceMembershipAddedTitle: "به ورک‌اسپیس اضافه شدید",
workspaceMembershipAddedMessage: (actor: string, workspace: string, role: string) =>
`${actor} شما را با نقش ${role} به ${workspace} اضافه کرد.`,
workspaceMembershipRoleChangedTitle: "نقش شما در ورک‌اسپیس تغییر کرد",
workspaceMembershipRoleChangedMessage: (actor: string, workspace: string, previousRole: string, newRole: string) =>
`${actor} نقش شما را در ${workspace} از ${previousRole} به ${newRole} تغییر داد.`,
workspaceMembershipDeactivatedTitle: "دسترسی ورک‌اسپیس غیرفعال شد",
workspaceMembershipDeactivatedMessage: (actor: string, workspace: string) =>
`${actor} دسترسی شما به ${workspace} را غیرفعال کرد.`,
workspaceMembershipRemovedTitle: "از ورک‌اسپیس حذف شدید",
workspaceMembershipRemovedMessage: (actor: string, workspace: string) =>
`${actor} شما را از ${workspace} حذف کرد.`,
reportExportReadyTitle: "خروجی گزارش آماده است",
reportExportReadyMessage: (exportType: string, workspace: string, fileName?: string | null) =>
`خروجی ${exportType.toUpperCase()} گزارش ${workspace}${fileName ? ` با نام ${fileName}` : ""} آماده دانلود است.`,
reportExportFailedTitle: "خروجی گزارش ناموفق بود",
reportExportFailedMessage: (exportType: string, workspace: string) =>
`تولید خروجی ${exportType.toUpperCase()} گزارش ${workspace} با خطا مواجه شد.`,
},
}
exportQueued: "درخواست خروجی ثبت شد. پیوند دانلود از طریق اعلان ارسال می‌شود.",
exportError: "ثبت درخواست خروجی با خطا مواجه شد.",
},
logs: {
eyebrow: "فعالیت‌های ورک‌اسپیس",
title: "لاگ‌های فعالیت",
description: (workspaceName: string) => `مرور رویدادهای ثبت‌شده در ${workspaceName}`,
selectWorkspace: "لطفاً ابتدا یک ورک‌اسپیس انتخاب کنید.",
unauthorized: "فقط مالک و ادمین می‌توانند لاگ‌های فعالیت ورک‌اسپیس را مشاهده کنند.",
loading: "در حال بارگذاری لاگ‌ها...",
loadingUsers: "در حال بارگذاری کاربران...",
loadingDetails: "در حال بارگذاری جزئیات...",
loadError: "دریافت لاگ‌ها با خطا مواجه شد.",
loadDetailsError: "دریافت جزئیات لاگ با خطا مواجه شد.",
loadFiltersError: "دریافت فیلترهای لاگ با خطا مواجه شد.",
search: "جست‌وجو",
searchPlaceholder: "جست‌وجوی لاگ‌ها...",
section: "بخش",
allSections: "همه بخش‌ها",
event: "رویداد",
allEvents: "همه رویدادها",
actor: "انجام‌دهنده",
allActors: "همه کاربران",
searchActors: "جست‌وجوی کاربران...",
ordering: "مرتب‌سازی",
newestFirst: "جدیدترین",
oldestFirst: "قدیمی‌ترین",
fromDate: "از تاریخ",
toDate: "تا تاریخ",
clear: "پاک کردن",
apply: "اعمال",
loadMore: "بارگذاری بیشتر",
totalLogs: "کل لاگ‌ها",
activeFilters: "فیلترهای فعال",
latestActivity: "آخرین فعالیت",
resultsCount: (count: number) => `${count} نتیجه`,
empty: "لاگ فعالیتی پیدا نشد",
emptyHint: "فیلترها را تغییر دهید یا منتظر فعالیت جدید بمانید.",
detailsTitle: "جزئیات فعالیت",
detailsHint: "برای بررسی دقیق تغییرات، یک مورد را انتخاب کنید.",
selectLogHint: "یک لاگ را برای مشاهده جزئیات انتخاب کنید.",
target: "هدف",
timestamp: "زمان",
remoteAddress: "آدرس شبکه",
previousValue: "مقدار قبلی",
currentValue: "مقدار جدید",
changesTitle: "تغییرات",
noDetails: "برای این رویداد جزئیات فیلدی در دسترس نیست.",
snapshot: "نمونه ذخیره‌شده",
unknownActor: "کاربر نامشخص",
summary: (actor: string, event: string, section: string, target: string) =>
`${actor} ${target} را در بخش ${section} ${event}`,
sections: {
workspace: "ورک‌اسپیس",
workspace_members: "اعضای ورک‌اسپیس",
clients: "مشتری‌ها",
projects: "پروژه‌ها",
tags: "تگ‌ها",
time_entries: "ورودی‌های زمان",
rates: "نرخ‌ها",
report_exports: "خروجی‌های گزارش",
},
events: {
create: "ایجاد کرد",
update: "ویرایش کرد",
delete: "حذف کرد",
restore: "بازیابی کرد",
archive: "بایگانی کرد",
unarchive: "از بایگانی خارج کرد",
activate: "فعال کرد",
deactivate: "غیرفعال کرد",
},
},
notifications: {
title: "اعلان‌ها",
pageDescription: "مرور همه اعلان‌ها و وضعیت خروجی‌های گزارش.",
open: "باز کردن اعلان‌ها",
empty: "هنوز اعلانی وجود ندارد.",
emptyUnread: "اعلان خوانده‌نشده‌ای وجود ندارد.",
loading: "در حال بارگذاری اعلان‌ها...",
loadingMore: "در حال بارگذاری بیشتر...",
loadMore: "بارگذاری بیشتر",
markAllRead: "خواندن همه",
viewAll: "نمایش همه اعلان‌ها",
totalLabel: "مجموع اعلان‌ها",
unreadLabel: "اعلان‌های خوانده‌نشده",
deleteLabel: "حذف اعلان",
markSeenError: "به‌روزرسانی اعلان با خطا مواجه شد.",
markAllError: "به‌روزرسانی اعلان‌ها با خطا مواجه شد.",
deleteError: "حذف اعلان با خطا مواجه شد.",
loadError: "دریافت اعلان‌ها با خطا مواجه شد.",
openError: "باز کردن اعلان با خطا مواجه شد.",
newTitle: "اعلان جدید",
openAction: "باز کردن",
summary: (total: number, unread: number) => `${total} کل، ${unread} خوانده‌نشده`,
workspaceMembershipAddedTitle: "به ورک‌اسپیس اضافه شدید",
workspaceMembershipAddedMessage: (actor: string, workspace: string, role: string) =>
`${actor} شما را با نقش ${role} به ${workspace} اضافه کرد.`,
workspaceMembershipRoleChangedTitle: "نقش شما در ورک‌اسپیس تغییر کرد",
workspaceMembershipRoleChangedMessage: (actor: string, workspace: string, previousRole: string, newRole: string) =>
`${actor} نقش شما را در ${workspace} از ${previousRole} به ${newRole} تغییر داد.`,
workspaceMembershipDeactivatedTitle: "دسترسی ورک‌اسپیس غیرفعال شد",
workspaceMembershipDeactivatedMessage: (actor: string, workspace: string) =>
`${actor} دسترسی شما به ${workspace} را غیرفعال کرد.`,
workspaceMembershipRemovedTitle: "از ورک‌اسپیس حذف شدید",
workspaceMembershipRemovedMessage: (actor: string, workspace: string) =>
`${actor} شما را از ${workspace} حذف کرد.`,
reportExportReadyTitle: "خروجی گزارش آماده است",
reportExportReadyMessage: (exportType: string, workspace: string, fileName?: string | null) =>
`خروجی ${exportType.toUpperCase()} گزارش ${workspace}${fileName ? ` با نام ${fileName}` : ""} آماده دانلود است.`,
reportExportFailedTitle: "خروجی گزارش ناموفق بود",
reportExportFailedMessage: (exportType: string, workspace: string) =>
`تولید خروجی ${exportType.toUpperCase()} گزارش ${workspace} با خطا مواجه شد.`,
},
}