diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index ae8a7bc9273..a71742a6bbb 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -505,7 +505,8 @@ "desc": "Descending" }, "comments": "Comments", - "updates": "Updates" + "updates": "Updates", + "clear_all": "Clear all" }, "form": { @@ -1063,7 +1064,30 @@ }, "notification": { - "label": "Notifications", + "label": "Inbox", + "page_label": "{workspace} - Inbox", + "options": { + "mark_all_as_read": "Mark all as read", + "mark_read": "Mark as read", + "mark_unread": "Mark as unread", + "refresh": "Refresh", + "filters": "Inbox Filters", + "show_unread": "Show unread", + "show_snoozed": "Show snoozed", + "show_archived": "Show archived", + "mark_archive": "Archive", + "mark_unarchive": "Un archive", + "mark_snooze": "Snooze", + "mark_unsnooze": "Un snooze" + }, + "toasts": { + "read": "Inbox marked as read", + "unread": "Inbox marked as unread", + "archived": "Inbox marked as archived", + "unarchived": "Inbox marked as un archived", + "snoozed": "Inbox snoozed", + "unsnoozed": "Inbox un snoozed" + }, "empty_state": { "detail": { "title": "Select to view details." diff --git a/web/app/[workspaceSlug]/(projects)/notifications/page.tsx b/web/app/[workspaceSlug]/(projects)/notifications/page.tsx index a056a370a7c..315449618c8 100644 --- a/web/app/[workspaceSlug]/(projects)/notifications/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/notifications/page.tsx @@ -34,7 +34,9 @@ const WorkspaceDashboardPage = observer(() => { const { fetchUserProjectInfo } = useUserPermissions(); const { setPeekIssue } = useIssueDetail(); // derived values - const pageTitle = currentWorkspace?.name ? `${currentWorkspace?.name} - Inbox` : undefined; + const pageTitle = currentWorkspace?.name + ? t("notification.page_label", { workspace: currentWorkspace?.name }) + : undefined; const { workspace_slug, project_id, issue_id, is_inbox_issue } = notificationLiteByNotificationId(currentSelectedNotificationId); const resolvedPath = useResolvedAssetPath({ basePath: "/empty-state/intake/issue-detail" }); diff --git a/web/ce/components/workspace-notifications/notification-card/root.tsx b/web/ce/components/workspace-notifications/notification-card/root.tsx index 60d8e5091a8..2aff9edfea8 100644 --- a/web/ce/components/workspace-notifications/notification-card/root.tsx +++ b/web/ce/components/workspace-notifications/notification-card/root.tsx @@ -5,6 +5,7 @@ import { observer } from "mobx-react"; // plane imports import { ENotificationLoader, ENotificationQueryParamType } from "@plane/constants"; // components +import { useTranslation } from "@plane/i18n"; import { NotificationItem } from "@/components/workspace-notifications"; // constants // hooks @@ -20,6 +21,7 @@ export const NotificationCardListRoot: FC = observer( // hooks const { loader, paginationInfo, getNotifications, notificationIdsByWorkspaceId } = useWorkspaceNotifications(); const notificationIds = notificationIdsByWorkspaceId(workspaceId); + const { t } = useTranslation(); const getNextNotifications = async () => { try { @@ -41,12 +43,12 @@ export const NotificationCardListRoot: FC = observer( <> {loader === ENotificationLoader.PAGINATION_LOADER ? (
-
Loading...
+
{t("loading")}...
) : (
- Load more + {t("load_more")}
)} diff --git a/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx b/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx index 81a090fce41..f551a25f4a3 100644 --- a/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx +++ b/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx @@ -58,7 +58,7 @@ export const AppliedFilters: FC = observer((props) => { })} diff --git a/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx b/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx index 61a57a8040b..e52e989a0ce 100644 --- a/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx +++ b/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx @@ -27,7 +27,7 @@ export const NotificationFilter: FC = observer(() => { +
diff --git a/web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx b/web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx index b719838b5a6..21905a54dc3 100644 --- a/web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx +++ b/web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx @@ -3,6 +3,7 @@ import { FC, ReactNode } from "react"; import { observer } from "mobx-react"; import { Check, CheckCircle, Clock } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { TNotificationFilter } from "@plane/types"; import { ArchiveIcon, PopoverMenu } from "@plane/ui"; // components @@ -24,6 +25,7 @@ export type TPopoverMenuOptions = { export const NotificationHeaderMenuOption = observer(() => { // hooks const { filters, updateFilters, updateBulkFilters } = useWorkspaceNotifications(); + const { t } = useTranslation(); const handleFilterChange = (filterType: keyof TNotificationFilter, filterValue: boolean) => updateFilters(filterType, filterValue); @@ -34,7 +36,7 @@ export const NotificationHeaderMenuOption = observer(() => { { key: "menu-unread", type: "menu-item", - label: "Show unread", + label: t("notification.options.show_unread"), isActive: filters?.read, prependIcon: , appendIcon: filters?.read ? : undefined, @@ -43,7 +45,7 @@ export const NotificationHeaderMenuOption = observer(() => { { key: "menu-archived", type: "menu-item", - label: "Show archived", + label: t("notification.options.show_archived"), isActive: filters?.archived, prependIcon: , appendIcon: filters?.archived ? : undefined, @@ -56,7 +58,7 @@ export const NotificationHeaderMenuOption = observer(() => { { key: "menu-snoozed", type: "menu-item", - label: "Show snoozed", + label: t("notification.options.show_snoozed"), isActive: filters?.snoozed, prependIcon: , appendIcon: filters?.snoozed ? : undefined, diff --git a/web/core/components/workspace-notifications/sidebar/header/options/root.tsx b/web/core/components/workspace-notifications/sidebar/header/options/root.tsx index 850b472e590..5dbd8e0e927 100644 --- a/web/core/components/workspace-notifications/sidebar/header/options/root.tsx +++ b/web/core/components/workspace-notifications/sidebar/header/options/root.tsx @@ -3,6 +3,7 @@ import { observer } from "mobx-react"; import { CheckCheck, RefreshCw } from "lucide-react"; // plane imports import { ENotificationLoader, ENotificationQueryParamType } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Spinner, Tooltip } from "@plane/ui"; // components import { NotificationFilter, NotificationHeaderMenuOption } from "@/components/workspace-notifications"; @@ -22,6 +23,7 @@ export const NotificationSidebarHeaderOptions: FC { if (loader) return; @@ -45,7 +47,7 @@ export const NotificationSidebarHeaderOptions: FC {/* mark all notifications as read*/} - +
{ @@ -62,7 +64,7 @@ export const NotificationSidebarHeaderOptions: FC {/* refetch current notifications */} - +
= observer((props) => { const { workspaceSlug } = props; + const { t } = useTranslation(); if (!workspaceSlug) return <>; return ( @@ -27,7 +29,11 @@ export const NotificationSidebarHeader: FC = observe } disableTooltip /> + } + disableTooltip + /> } /> diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx b/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx index 651404a2f7c..78932dedcfb 100644 --- a/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx +++ b/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx @@ -3,6 +3,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { ArchiveRestore } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { ArchiveIcon, TOAST_TYPE, setToast } from "@plane/ui"; // components import { NotificationItemOptionButton } from "@/components/workspace-notifications"; @@ -24,6 +25,7 @@ export const NotificationItemArchiveOption: FC = const { captureEvent } = useEventTracker(); const { currentNotificationTab } = useWorkspaceNotifications(); const { asJson: data, archiveNotification, unArchiveNotification } = notification; + const { t } = useTranslation(); const handleNotificationUpdate = async () => { try { @@ -35,7 +37,7 @@ export const NotificationItemArchiveOption: FC = state: "SUCCESS", }); setToast({ - title: data.archived_at ? "Notification un-archived" : "Notification archived", + title: data.archived_at ? t("notification.toasts.unarchived") : t("notification.toasts.archived"), type: TOAST_TYPE.SUCCESS, }); } catch (e) { @@ -45,7 +47,9 @@ export const NotificationItemArchiveOption: FC = return ( {data.archived_at ? ( diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx b/web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx index 42b4e29f07c..17866b28912 100644 --- a/web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx +++ b/web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx @@ -3,6 +3,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { MessageSquare } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { TOAST_TYPE, setToast } from "@plane/ui"; // components import { NotificationItemOptionButton } from "@/components/workspace-notifications"; @@ -24,6 +25,7 @@ export const NotificationItemReadOption: FC = obser const { captureEvent } = useEventTracker(); const { currentNotificationTab } = useWorkspaceNotifications(); const { asJson: data, markNotificationAsRead, markNotificationAsUnRead } = notification; + const { t } = useTranslation(); const handleNotificationUpdate = async () => { try { @@ -35,7 +37,7 @@ export const NotificationItemReadOption: FC = obser state: "SUCCESS", }); setToast({ - title: data.read_at ? "Notification marked as unread" : "Notification marked as read", + title: data.read_at ? t("notification.toasts.unread") : t("notification.toasts.read"), type: TOAST_TYPE.SUCCESS, }); } catch (e) { @@ -45,7 +47,7 @@ export const NotificationItemReadOption: FC = obser return ( diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx b/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx index 6a72e68a7a6..1695cd8c81f 100644 --- a/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx +++ b/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx @@ -39,8 +39,8 @@ export const NotificationItemSnoozeOption: FC = o try { await snoozeNotification(workspaceSlug, snoozeTill); setToast({ - title: "Success!", - message: "Notification snoozed successfully", + title: `${t("common.success")}!`, + message: t("notification.toasts.snoozed"), type: TOAST_TYPE.SUCCESS, }); } catch (e) { @@ -50,8 +50,8 @@ export const NotificationItemSnoozeOption: FC = o try { await unSnoozeNotification(workspaceSlug); setToast({ - title: "Success!", - message: "Notification un snoozed successfully", + title: `${t("common.success")}!`, + message: t("notification.toasts.un_snoozed"), type: TOAST_TYPE.SUCCESS, }); } catch (e) { @@ -89,7 +89,12 @@ export const NotificationItemSnoozeOption: FC = o return ( <> - + = o handleDropdownSelect("un-snooze"); }} > -
Un snooze
+
{t("notification.options.mark_unsnooze")}
)}