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

@@ -131,13 +131,13 @@ export const en = {
nameLabel: "Workspace Name", nameLabel: "Workspace Name",
namePlaceholder: "Enter workspace name", namePlaceholder: "Enter workspace name",
descriptionLabel: "Description", descriptionLabel: "Description",
descriptionPlaceholder: "Enter description (optional)", descriptionPlaceholder: "Enter description (optional)",
thumbnailLabel: "Thumbnail", thumbnailLabel: "Thumbnail",
uploadImage: "Click to upload image", uploadImage: "Click to upload image",
removeImage: "Remove image", removeImage: "Remove image",
thumbnailInvalidType: "Unsupported image type. Use JPG, PNG, or WebP.", thumbnailInvalidType: "Unsupported image type. Use JPG, PNG, or WebP.",
thumbnailMaxSizeError: "Image size must be 2MB or less.", thumbnailMaxSizeError: "Image size must be 2MB or less.",
searchMemberPlaceholder: "Search exact mobile (e.g. 09123456789)", searchMemberPlaceholder: "Search exact mobile (e.g. 09123456789)",
addMember: "Add Member", addMember: "Add Member",
roleAdmin: "Admin", roleAdmin: "Admin",
roleMember: "Member", roleMember: "Member",
@@ -154,6 +154,8 @@ export const en = {
subtitle: "Manage your workspaces", subtitle: "Manage your workspaces",
noDescription: "No description", noDescription: "No description",
emptyState: "You are not a member of any workspace.", emptyState: "You are not a member of any workspace.",
noWorkspaceSearch: "Try adjusting your search query.",
noWorkspace: "No workspaces found.",
createTitle: "Create Workspace", createTitle: "Create Workspace",
editTitle: "Edit Workspace", editTitle: "Edit Workspace",
detailTitle: "Workspace Details", detailTitle: "Workspace Details",
@@ -244,13 +246,13 @@ export const en = {
editClient: "Edit Client", editClient: "Edit Client",
deleteConfirmTitle: "Delete Client", deleteConfirmTitle: "Delete Client",
deleteConfirmMessage: (name: string) => `Are you sure you want to delete ${name}?`, deleteConfirmMessage: (name: string) => `Are you sure you want to delete ${name}?`,
delete: "Delete", delete: "Delete",
saveChanges: "Save Changes", saveChanges: "Save Changes",
createSuccess: "Client created successfully.", createSuccess: "Client created successfully.",
updateSuccess: "Client updated successfully.", updateSuccess: "Client updated successfully.",
deleteSuccess: "Client deleted successfully.", deleteSuccess: "Client deleted successfully.",
errors: { errors: {
createFailed: "Failed to create client", createFailed: "Failed to create client",
fetchFailed: "Failed to fetch clients", fetchFailed: "Failed to fetch clients",
updateFailed: "Failed to update client", updateFailed: "Failed to update client",
deleteFailed: "Failed to delete client", deleteFailed: "Failed to delete client",
@@ -267,13 +269,13 @@ export const en = {
next: "Next", next: "Next",
}, },
sidebar: { sidebar: {
timesheet: "Timesheet", timesheet: "Timesheet",
reports: "Reports", reports: "Reports",
logs: "Logs", logs: "Logs",
workspaces: 'Workspaces', workspaces: 'Workspaces',
clients: 'Clients', clients: 'Clients',
projects: "Projects", projects: "Projects",
tags: "Tags", tags: "Tags",
expand: 'Expand', expand: 'Expand',
collapse: 'Collapse', collapse: 'Collapse',
@@ -292,11 +294,11 @@ export const en = {
description: (workspaceName: string) => `Manage projects for ${workspaceName}`, description: (workspaceName: string) => `Manage projects for ${workspaceName}`,
active: "Active Projects", active: "Active Projects",
archived: "Archived Projects", archived: "Archived Projects",
createNew: "Create New", createNew: "Create New",
searchPlaceholder: "Search projects...", searchPlaceholder: "Search projects...",
selectWorkspace: "Please select a workspace first.", selectWorkspace: "Please select a workspace first.",
titlePlaceholder: "Enter title", titlePlaceholder: "Enter title",
descriptionPlaceholder: "Enter desription", descriptionPlaceholder: "Enter desription",
titleLabel: "Title", titleLabel: "Title",
clientLabel: "Client", clientLabel: "Client",
colorLabel: "Color", colorLabel: "Color",
@@ -305,6 +307,7 @@ export const en = {
client: "Client", client: "Client",
noClient: "No client", noClient: "No client",
emptyState: "No projects found", emptyState: "No projects found",
noProjectsSearch: "Try adjusting your search query.",
deleteTitle: "Delete Project", deleteTitle: "Delete Project",
deleteWarning: "To confirm deletion, please type the project name:", deleteWarning: "To confirm deletion, please type the project name:",
deleteSuccess: "Project deleted successfully", deleteSuccess: "Project deleted successfully",
@@ -314,13 +317,13 @@ export const en = {
createProject: "Create New Project", createProject: "Create New Project",
editProject: "Edit Project", editProject: "Edit Project",
restore: "Restore", restore: "Restore",
archive: "Archive", archive: "Archive",
archiveSuccess: "Project archived successfully.", archiveSuccess: "Project archived successfully.",
restoreSuccess: "Project restored successfully.", restoreSuccess: "Project restored successfully.",
fetchError: "Failed to fetch projects.", fetchError: "Failed to fetch projects.",
clientFetchError: "Failed to load clients.", clientFetchError: "Failed to load clients.",
filterClients: "Filter by client", filterClients: "Filter by client",
clearClientFilters: "Clear filters", clearClientFilters: "Clear filters",
namePlaceholder: "Project name...", namePlaceholder: "Project name...",
teamMembers: "Team Members", teamMembers: "Team Members",
creator: "Creator", creator: "Creator",
@@ -362,6 +365,7 @@ export const en = {
namePlaceholder: "e.g. Design", namePlaceholder: "e.g. Design",
colorLabel: "Color", colorLabel: "Color",
emptyState: "No tags found", emptyState: "No tags found",
noTagsSearch: "Try adjusting your search query.",
selectWorkspace: "Please select a workspace first.", selectWorkspace: "Please select a workspace first.",
fetchError: "Failed to load tags", fetchError: "Failed to load tags",
createSuccess: "Tag created successfully.", createSuccess: "Tag created successfully.",
@@ -423,14 +427,14 @@ export const en = {
optionsError: "Failed to load projects and tags.", optionsError: "Failed to load projects and tags.",
descriptionLabel: "Description", descriptionLabel: "Description",
descriptionPlaceholder: "What are you working on?", descriptionPlaceholder: "What are you working on?",
projectLabel: "Project", projectLabel: "Project",
noProject: "No project", noProject: "No project",
startLabel: "Start", startLabel: "Start",
endLabel: "End", endLabel: "End",
timeLabel: "Time", timeLabel: "Time",
billable: "Billable", billable: "Billable",
noTagsHint: "Create tags first from the Tags page.", noTagsHint: "Create tags first from the Tags page.",
clearFilters: "Clear filters", clearFilters: "Clear filters",
customFromLabel: "From date", customFromLabel: "From date",
customToLabel: "To date", customToLabel: "To date",
allClientsLabel: "All clients", allClientsLabel: "All clients",
@@ -440,23 +444,23 @@ export const en = {
hideFiltersLabel: "Hide filters", hideFiltersLabel: "Hide filters",
applyFiltersLabel: "Apply", applyFiltersLabel: "Apply",
clientFilterPrefix: "Client", clientFilterPrefix: "Client",
projectFilterPrefix: "Project", projectFilterPrefix: "Project",
tagFilterPrefix: "Tag", tagFilterPrefix: "Tag",
fromFilterPrefix: "From", fromFilterPrefix: "From",
toFilterPrefix: "To", toFilterPrefix: "To",
deleteTitle: "Delete Time Entry", deleteTitle: "Delete Time Entry",
deleteConfirmMessage: "Are you sure you want to delete this time entry?", deleteConfirmMessage: "Are you sure you want to delete this time entry?",
restartConfirmMessage: "Start a new running timer from this entry?", restartConfirmMessage: "Start a new running timer from this entry?",
discardConfirmMessage: "Are you sure you want to discard this running timer?", discardConfirmMessage: "Are you sure you want to discard this running timer?",
searchTagsLabel: "Search tags...", searchTagsLabel: "Search tags...",
noTagsFoundLabel: "No tags found.", noTagsFoundLabel: "No tags found.",
searchProjectsLabel: "Search projects...", searchProjectsLabel: "Search projects...",
noProjectsFoundLabel: "No projects found.", noProjectsFoundLabel: "No projects found.",
deletedProjectLabel: "Deleted project", deletedProjectLabel: "Deleted project",
deletedTagLabel: "Deleted tag", deletedTagLabel: "Deleted tag",
}, },
reports: { reports: {
title: "Reports", title: "Reports",
description: (workspaceName: string) => `Review activity reports for ${workspaceName}`, description: (workspaceName: string) => `Review activity reports for ${workspaceName}`,
selectWorkspace: "Please select a workspace first.", selectWorkspace: "Please select a workspace first.",
@@ -486,11 +490,11 @@ export const en = {
name: "Name", name: "Name",
clear: "Clear", clear: "Clear",
apply: "Apply", apply: "Apply",
totalHours: "Total hours", totalHours: "Total hours",
billableHours: "Billable hours", billableHours: "Billable hours",
nonBillableHours: "Non-billable hours", nonBillableHours: "Non-billable hours",
hourlyRate: "Hourly rate", hourlyRate: "Hourly rate",
totalIncome: "Total income", totalIncome: "Total income",
chartTitle: "Activity chart", chartTitle: "Activity chart",
totalSeconds: "Total seconds", totalSeconds: "Total seconds",
exportExcel: "Export Excel", exportExcel: "Export Excel",
@@ -504,120 +508,120 @@ export const en = {
loadError: "Failed to load reports.", loadError: "Failed to load reports.",
loadDayDetailsError: "Failed to load day details.", loadDayDetailsError: "Failed to load day details.",
loadFiltersError: "Failed to load report filters.", loadFiltersError: "Failed to load report filters.",
exportQueued: "Export queued. You will receive a notification with the download link.", exportQueued: "Export queued. You will receive a notification with the download link.",
exportError: "Failed to queue report export.", exportError: "Failed to queue report export.",
}, },
logs: { logs: {
eyebrow: "Workspace activity", eyebrow: "Workspace activity",
title: "Activity logs", title: "Activity logs",
description: (workspaceName: string) => `Review what has happened inside ${workspaceName}.`, description: (workspaceName: string) => `Review what has happened inside ${workspaceName}.`,
selectWorkspace: "Please select a workspace first.", selectWorkspace: "Please select a workspace first.",
unauthorized: "Only owners and admins can access workspace activity logs.", unauthorized: "Only owners and admins can access workspace activity logs.",
loading: "Loading logs...", loading: "Loading logs...",
loadingUsers: "Loading users...", loadingUsers: "Loading users...",
loadingDetails: "Loading details...", loadingDetails: "Loading details...",
loadError: "Failed to load logs.", loadError: "Failed to load logs.",
loadDetailsError: "Failed to load log details.", loadDetailsError: "Failed to load log details.",
loadFiltersError: "Failed to load log filters.", loadFiltersError: "Failed to load log filters.",
search: "Search", search: "Search",
searchPlaceholder: "Search logs...", searchPlaceholder: "Search logs...",
section: "Section", section: "Section",
allSections: "All sections", allSections: "All sections",
event: "Event", event: "Event",
allEvents: "All events", allEvents: "All events",
actor: "Actor", actor: "Actor",
allActors: "All actors", allActors: "All actors",
searchActors: "Search users...", searchActors: "Search users...",
ordering: "Ordering", ordering: "Ordering",
newestFirst: "Newest first", newestFirst: "Newest first",
oldestFirst: "Oldest first", oldestFirst: "Oldest first",
fromDate: "From date", fromDate: "From date",
toDate: "To date", toDate: "To date",
clear: "Clear", clear: "Clear",
apply: "Apply", apply: "Apply",
loadMore: "Load more", loadMore: "Load more",
totalLogs: "Total logs", totalLogs: "Total logs",
activeFilters: "Active filters", activeFilters: "Active filters",
latestActivity: "Latest activity", latestActivity: "Latest activity",
resultsCount: (count: number) => `${count} results`, resultsCount: (count: number) => `${count} results`,
empty: "No activity logs found", empty: "No activity logs found",
emptyHint: "Adjust your filters or wait for new workspace activity.", emptyHint: "Adjust your filters or wait for new workspace activity.",
detailsTitle: "Activity details", detailsTitle: "Activity details",
detailsHint: "Select an activity item to inspect the exact field changes.", detailsHint: "Select an activity item to inspect the exact field changes.",
selectLogHint: "Select a log entry to see its details.", selectLogHint: "Select a log entry to see its details.",
target: "Target", target: "Target",
timestamp: "Timestamp", timestamp: "Timestamp",
remoteAddress: "Remote address", remoteAddress: "Remote address",
previousValue: "Previous", previousValue: "Previous",
currentValue: "Current", currentValue: "Current",
changesTitle: "Changes", changesTitle: "Changes",
noDetails: "No field-level details are available for this activity.", noDetails: "No field-level details are available for this activity.",
snapshot: "Serialized snapshot", snapshot: "Serialized snapshot",
unknownActor: "Unknown actor", unknownActor: "Unknown actor",
summary: (actor: string, event: string, section: string, target: string) => summary: (actor: string, event: string, section: string, target: string) =>
`${actor} ${event.toLowerCase()} ${target} in ${section.toLowerCase()}`, `${actor} ${event.toLowerCase()} ${target} in ${section.toLowerCase()}`,
sections: { sections: {
workspace: "Workspace", workspace: "Workspace",
workspace_members: "Workspace members", workspace_members: "Workspace members",
clients: "Clients", clients: "Clients",
projects: "Projects", projects: "Projects",
tags: "Tags", tags: "Tags",
time_entries: "Time entries", time_entries: "Time entries",
rates: "Rates", rates: "Rates",
report_exports: "Report exports", report_exports: "Report exports",
}, },
events: { events: {
create: "Created", create: "Created",
update: "Updated", update: "Updated",
delete: "Deleted", delete: "Deleted",
restore: "Restored", restore: "Restored",
archive: "Archived", archive: "Archived",
unarchive: "Unarchived", unarchive: "Unarchived",
activate: "Activated", activate: "Activated",
deactivate: "Deactivated", deactivate: "Deactivated",
}, },
}, },
notifications: { notifications: {
title: "Notifications", title: "Notifications",
pageDescription: "Review all notifications and export updates.", pageDescription: "Review all notifications and export updates.",
open: "Open notifications", open: "Open notifications",
empty: "No notifications yet.", empty: "No notifications yet.",
emptyUnread: "No unread notifications.", emptyUnread: "No unread notifications.",
loading: "Loading notifications...", loading: "Loading notifications...",
loadingMore: "Loading more...", loadingMore: "Loading more...",
loadMore: "Load more", loadMore: "Load more",
markAllRead: "Mark all as read", markAllRead: "Mark all as read",
viewAll: "View all notifications", viewAll: "View all notifications",
totalLabel: "Total notifications", totalLabel: "Total notifications",
unreadLabel: "Unread notifications", unreadLabel: "Unread notifications",
deleteLabel: "Delete notification", deleteLabel: "Delete notification",
markSeenError: "Failed to update notification", markSeenError: "Failed to update notification",
markAllError: "Failed to update notifications", markAllError: "Failed to update notifications",
deleteError: "Failed to delete notification", deleteError: "Failed to delete notification",
loadError: "Failed to load notifications", loadError: "Failed to load notifications",
openError: "Failed to open notification", openError: "Failed to open notification",
newTitle: "New notification", newTitle: "New notification",
openAction: "Open", openAction: "Open",
summary: (total: number, unread: number) => `${total} total, ${unread} unread`, summary: (total: number, unread: number) => `${total} total, ${unread} unread`,
workspaceMembershipAddedTitle: "Added to workspace", workspaceMembershipAddedTitle: "Added to workspace",
workspaceMembershipAddedMessage: (actor: string, workspace: string, role: string) => workspaceMembershipAddedMessage: (actor: string, workspace: string, role: string) =>
`${actor} added you to ${workspace} as ${role}.`, `${actor} added you to ${workspace} as ${role}.`,
workspaceMembershipRoleChangedTitle: "Workspace role changed", workspaceMembershipRoleChangedTitle: "Workspace role changed",
workspaceMembershipRoleChangedMessage: (actor: string, workspace: string, previousRole: string, newRole: string) => workspaceMembershipRoleChangedMessage: (actor: string, workspace: string, previousRole: string, newRole: string) =>
`${actor} changed your role in ${workspace} from ${previousRole} to ${newRole}.`, `${actor} changed your role in ${workspace} from ${previousRole} to ${newRole}.`,
workspaceMembershipDeactivatedTitle: "Workspace access deactivated", workspaceMembershipDeactivatedTitle: "Workspace access deactivated",
workspaceMembershipDeactivatedMessage: (actor: string, workspace: string) => workspaceMembershipDeactivatedMessage: (actor: string, workspace: string) =>
`${actor} deactivated your access to ${workspace}.`, `${actor} deactivated your access to ${workspace}.`,
workspaceMembershipRemovedTitle: "Removed from workspace", workspaceMembershipRemovedTitle: "Removed from workspace",
workspaceMembershipRemovedMessage: (actor: string, workspace: string) => workspaceMembershipRemovedMessage: (actor: string, workspace: string) =>
`${actor} removed you from ${workspace}.`, `${actor} removed you from ${workspace}.`,
reportExportReadyTitle: "Report export is ready", reportExportReadyTitle: "Report export is ready",
reportExportReadyMessage: (exportType: string, workspace: string, fileName?: string | null) => reportExportReadyMessage: (exportType: string, workspace: string, fileName?: string | null) =>
`Your ${exportType.toUpperCase()} report for ${workspace} is ready${fileName ? `: ${fileName}` : ""}.`, `Your ${exportType.toUpperCase()} report for ${workspace} is ready${fileName ? `: ${fileName}` : ""}.`,
reportExportFailedTitle: "Report export failed", reportExportFailedTitle: "Report export failed",
reportExportFailedMessage: (exportType: string, workspace: string) => reportExportFailedMessage: (exportType: string, workspace: string) =>
`Your ${exportType.toUpperCase()} report for ${workspace} could not be generated.`, `Your ${exportType.toUpperCase()} report for ${workspace} could not be generated.`,
}, },
} }

View File

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