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