From 3072cedeba28bd3755819d4851b0de0a122ef513 Mon Sep 17 00:00:00 2001 From: gakshita Date: Mon, 20 Jan 2025 12:34:03 +0530 Subject: [PATCH 1/3] chore: ln support modules constants --- packages/constants/src/index.ts | 1 + .../constants/src}/module.ts | 47 ++++++---- .../i18n/src/locales/en/translations.json | 26 +++++- .../modules/(list)/mobile-header.tsx | 6 +- .../modules/analytics-sidebar/root.tsx | 10 ++- .../modules/applied-filters/status.tsx | 6 +- .../modules/dropdowns/filters/status.tsx | 9 +- .../components/modules/dropdowns/order-by.tsx | 9 +- .../components/modules/gantt-chart/blocks.tsx | 2 +- .../components/modules/module-card-item.tsx | 3 +- .../modules/module-list-item-action.tsx | 2 +- .../modules/module-status-dropdown.tsx | 86 +++++++++--------- .../components/modules/module-view-header.tsx | 7 +- web/core/components/modules/select/status.tsx | 81 +++++++++-------- .../modules/sidebar-select/select-status.tsx | 88 ++++++++++--------- .../stickies/layout/stickies-list.tsx | 2 +- web/core/constants/empty-state.tsx | 2 +- 17 files changed, 223 insertions(+), 164 deletions(-) rename {web/core/constants => packages/constants/src}/module.ts (56%) diff --git a/packages/constants/src/index.ts b/packages/constants/src/index.ts index 2b3964ae9fd..ea735740051 100644 --- a/packages/constants/src/index.ts +++ b/packages/constants/src/index.ts @@ -14,3 +14,4 @@ export * from "./swr"; export * from "./user"; export * from "./workspace"; export * from "./stickies"; +export * from "./module"; diff --git a/web/core/constants/module.ts b/packages/constants/src/module.ts similarity index 56% rename from web/core/constants/module.ts rename to packages/constants/src/module.ts index 8d26ab5f4e7..45c28223e70 100644 --- a/web/core/constants/module.ts +++ b/packages/constants/src/module.ts @@ -1,6 +1,10 @@ import { GanttChartSquare, LayoutGrid, List } from "lucide-react"; // types -import { TModuleLayoutOptions, TModuleOrderByOptions, TModuleStatus } from "@plane/types"; +import { + TModuleLayoutOptions, + TModuleOrderByOptions, + TModuleStatus, +} from "@plane/types"; export const MODULE_STATUS: { label: string; @@ -10,42 +14,42 @@ export const MODULE_STATUS: { bgColor: string; }[] = [ { - label: "Backlog", + label: "project_modules.status.backlog", value: "backlog", color: "#a3a3a2", textColor: "text-custom-text-400", bgColor: "bg-custom-background-80", }, { - label: "Planned", + label: "project_modules.status.planned", value: "planned", color: "#3f76ff", textColor: "text-blue-500", bgColor: "bg-indigo-50", }, { - label: "In Progress", + label: "project_modules.status.in_progress", value: "in-progress", color: "#f39e1f", textColor: "text-amber-500", bgColor: "bg-amber-50", }, { - label: "Paused", + label: "project_modules.status.paused", value: "paused", color: "#525252", textColor: "text-custom-text-300", bgColor: "bg-custom-background-90", }, { - label: "Completed", + label: "project_modules.status.completed", value: "completed", color: "#16a34a", textColor: "text-green-600", bgColor: "bg-green-100", }, { - label: "Cancelled", + label: "project_modules.status.cancelled", value: "cancelled", color: "#ef4444", textColor: "text-red-500", @@ -53,47 +57,54 @@ export const MODULE_STATUS: { }, ]; -export const MODULE_VIEW_LAYOUTS: { key: TModuleLayoutOptions; icon: any; title: string }[] = [ +export const MODULE_VIEW_LAYOUTS: { + key: TModuleLayoutOptions; + icon: any; + title: string; +}[] = [ { key: "list", icon: List, - title: "List layout", + title: "project_modules.layout.list", }, { key: "board", icon: LayoutGrid, - title: "Gallery layout", + title: "project_modules.layout.board", }, { key: "gantt", icon: GanttChartSquare, - title: "Timeline layout", + title: "project_modules.layout.timeline", }, ]; -export const MODULE_ORDER_BY_OPTIONS: { key: TModuleOrderByOptions; label: string }[] = [ +export const MODULE_ORDER_BY_OPTIONS: { + key: TModuleOrderByOptions; + label: string; +}[] = [ { key: "name", - label: "Name", + label: "project_modules.order_by.name", }, { key: "progress", - label: "Progress", + label: "project_modules.order_by.progress", }, { key: "issues_length", - label: "Number of issues", + label: "project_modules.order_by.issues", }, { key: "target_date", - label: "Due date", + label: "project_modules.order_by.due_date", }, { key: "created_at", - label: "Created date", + label: "project_modules.order_by.created_at", }, { key: "sort_order", - label: "Manual", + label: "project_modules.order_by.manual", }, ]; diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index 596c3093fa9..0ba00a266d2 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -316,5 +316,29 @@ "change_parent_issue": "Change parent issue", "remove_parent_issue": "Remove parent issue", "add_parent": "Add parent", - "loading_members": "Loading members..." + "loading_members": "Loading members...", + "project_modules": { + "status": { + "backlog": "Backlog", + "planned": "Planned", + "in_progress": "In Progress", + "paused": "Paused", + "completed": "Completed", + "cancelled": "Cancelled" + }, + "layout": { + "list": "List layout", + "board": "Gallery layout", + "timeline": "Timeline layout" + }, + "order_by": { + "name": "Name", + "progress": "Progress", + "issues": "Number of issues", + "due_date": "Due date", + "created_at": "Created date", + "manual": "Manual" + } + } + } diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx index 12301c9d44d..4172e97ce33 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx @@ -2,13 +2,15 @@ import { observer } from "mobx-react"; import { ChevronDown } from "lucide-react"; +import { MODULE_VIEW_LAYOUTS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { CustomMenu, Row } from "@plane/ui"; -import { MODULE_VIEW_LAYOUTS } from "@/constants/module"; import { useModuleFilter, useProject } from "@/hooks/store"; export const ModulesListMobileHeader = observer(() => { const { currentProjectDetails } = useProject(); const { updateDisplayFilters } = useModuleFilter(); + const { t } = useTranslation(); return (
@@ -35,7 +37,7 @@ export const ModulesListMobileHeader = observer(() => { className="flex items-center gap-2" > -
{layout.title}
+
{t(layout.title)}
); })} diff --git a/web/core/components/modules/analytics-sidebar/root.tsx b/web/core/components/modules/analytics-sidebar/root.tsx index cf3ae40c85b..118b62cb2c7 100644 --- a/web/core/components/modules/analytics-sidebar/root.tsx +++ b/web/core/components/modules/analytics-sidebar/root.tsx @@ -18,6 +18,8 @@ import { } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; // plane types +import { MODULE_STATUS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { ILinkDetails, IModule, ModuleLink } from "@plane/types"; // plane ui import { @@ -46,7 +48,7 @@ import { MODULE_LINK_UPDATED, MODULE_UPDATED, } from "@/constants/event-tracker"; -import { MODULE_STATUS } from "@/constants/module"; + // helpers import { getDate, renderFormattedPayloadDate } from "@/helpers/date-time.helper"; import { copyUrlToClipboard } from "@/helpers/string.helper"; @@ -84,7 +86,7 @@ export const ModuleAnalyticsSidebar: React.FC = observer((props) => { const { workspaceSlug, projectId } = useParams(); // store hooks - + const { t } = useTranslation(); const { allowPermissions } = useUserPermissions(); const { getModuleById, updateModuleDetails, createModuleLink, updateModuleLink, deleteModuleLink, restoreModule } = @@ -374,7 +376,7 @@ export const ModuleAnalyticsSidebar: React.FC = observer((props) => { backgroundColor: moduleStatus ? `${moduleStatus.color}20` : "#a3a3a220", }} > - {moduleStatus?.label ?? "Backlog"} + {(moduleStatus && t(moduleStatus?.label)) ?? t("project_modules.status.backlog")} } value={value} @@ -387,7 +389,7 @@ export const ModuleAnalyticsSidebar: React.FC = observer((props) => {
- {status.label} + {t(status.label)}
))} diff --git a/web/core/components/modules/applied-filters/status.tsx b/web/core/components/modules/applied-filters/status.tsx index 442dcfadcc8..b4b6ae8625b 100644 --- a/web/core/components/modules/applied-filters/status.tsx +++ b/web/core/components/modules/applied-filters/status.tsx @@ -3,9 +3,10 @@ import { observer } from "mobx-react"; import { X } from "lucide-react"; // ui +import { MODULE_STATUS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { ModuleStatusIcon } from "@plane/ui"; // constants -import { MODULE_STATUS } from "@/constants/module"; type Props = { handleRemove: (val: string) => void; @@ -15,6 +16,7 @@ type Props = { export const AppliedStatusFilters: React.FC = observer((props) => { const { handleRemove, values, editable } = props; + const { t } = useTranslation(); return ( <> @@ -25,7 +27,7 @@ export const AppliedStatusFilters: React.FC = observer((props) => { return (
- {statusDetails.label} + {t(statusDetails.label)} {editable && (
- } - onChange={onChange} - tabIndex={tabIndex} - noChevron - > - {MODULE_STATUS.map((status) => ( - -
- - {status.label} -
-
- ))} - - )} - /> -); +export const ModuleStatusSelect: React.FC = ({ control, error, tabIndex }) => { + const { t } = useTranslation(); + return ( + { + const selectedValue = MODULE_STATUS.find((s) => s.value === value); + return ( + + {value ? ( + + ) : ( + + )} + {(selectedValue && t(selectedValue?.label)) ?? ( + Status + )} +
+ } + onChange={onChange} + tabIndex={tabIndex} + noChevron + > + {MODULE_STATUS.map((status) => ( + +
+ + {t(status.label)} +
+
+ ))} + + ); + }} + /> + ); +}; diff --git a/web/core/components/modules/sidebar-select/select-status.tsx b/web/core/components/modules/sidebar-select/select-status.tsx index fcac3e01fae..75c5863894f 100644 --- a/web/core/components/modules/sidebar-select/select-status.tsx +++ b/web/core/components/modules/sidebar-select/select-status.tsx @@ -4,11 +4,12 @@ import React from "react"; // react-hook-form import { Control, Controller, UseFormWatch } from "react-hook-form"; +import { MODULE_STATUS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { IModule } from "@plane/types"; // ui import { CustomSelect, DoubleCircleIcon } from "@plane/ui"; // types -import { MODULE_STATUS } from "@/constants/module"; // common // constants @@ -18,45 +19,48 @@ type Props = { watch: UseFormWatch>; }; -export const SidebarStatusSelect: React.FC = ({ control, submitChanges, watch }) => ( -
-
- -

Status

+export const SidebarStatusSelect: React.FC = ({ control, submitChanges, watch }) => { + const { t } = useTranslation(); + return ( +
+
+ +

Status

+
+
+ ( + + option.value === value)?.color, + }} + /> + {watch("status")} + + } + value={value} + onChange={(value: any) => { + submitChanges({ status: value }); + }} + > + {MODULE_STATUS.map((option) => ( + +
+ + {t(option.label)} +
+
+ ))} +
+ )} + /> +
-
- ( - - option.value === value)?.color, - }} - /> - {watch("status")} - - } - value={value} - onChange={(value: any) => { - submitChanges({ status: value }); - }} - > - {MODULE_STATUS.map((option) => ( - -
- - {option.label} -
-
- ))} -
- )} - /> -
-
-); + ); +}; diff --git a/web/core/components/stickies/layout/stickies-list.tsx b/web/core/components/stickies/layout/stickies-list.tsx index 4da6efe7b03..2a743d0cc02 100644 --- a/web/core/components/stickies/layout/stickies-list.tsx +++ b/web/core/components/stickies/layout/stickies-list.tsx @@ -12,13 +12,13 @@ import { Loader } from "@plane/ui"; // components import { EmptyState } from "@/components/empty-state"; // constants +import { StickiesEmptyState } from "@/components/home/widgets/empty-states/stickies"; import { EmptyStateType } from "@/constants/empty-state"; // hooks import { useSticky } from "@/hooks/use-stickies"; import { useStickyOperations } from "../sticky/use-operations"; import { StickyDNDWrapper } from "./sticky-dnd-wrapper"; import { getInstructionFromPayload } from "./sticky.helpers"; -import { StickiesEmptyState } from "@/components/home/widgets/empty-states/stickies"; type TStickiesLayout = { workspaceSlug: string; diff --git a/web/core/constants/empty-state.tsx b/web/core/constants/empty-state.tsx index ef1b9e91829..c2ae08784d7 100644 --- a/web/core/constants/empty-state.tsx +++ b/web/core/constants/empty-state.tsx @@ -1,5 +1,5 @@ -import { EUserPermissions } from "ee/constants/user-permissions"; import { Plus, Shapes } from "lucide-react"; +import { EUserPermissions } from "ee/constants/user-permissions"; export interface EmptyStateDetails { key: EmptyStateType; From f8dc1bdac612526aa9f206f48d9dbb02c9c17056 Mon Sep 17 00:00:00 2001 From: gakshita Date: Wed, 22 Jan 2025 16:32:57 +0530 Subject: [PATCH 2/3] fix: translation key --- packages/constants/src/module.ts | 41 ++++++++----------- .../modules/(list)/mobile-header.tsx | 5 ++- .../modules/analytics-sidebar/root.tsx | 4 +- .../modules/applied-filters/status.tsx | 2 +- .../modules/dropdowns/filters/status.tsx | 2 +- .../components/modules/dropdowns/order-by.tsx | 4 +- web/core/components/modules/index.ts | 2 +- .../components/modules/module-layout-icon.tsx | 38 +++++++++++++++++ .../modules/module-status-dropdown.tsx | 4 +- .../components/modules/module-view-header.tsx | 10 ++--- web/core/components/modules/select/status.tsx | 4 +- .../modules/sidebar-select/select-status.tsx | 2 +- 12 files changed, 74 insertions(+), 44 deletions(-) create mode 100644 web/core/components/modules/module-layout-icon.tsx diff --git a/packages/constants/src/module.ts b/packages/constants/src/module.ts index 45c28223e70..6ce30f0dcf1 100644 --- a/packages/constants/src/module.ts +++ b/packages/constants/src/module.ts @@ -1,4 +1,3 @@ -import { GanttChartSquare, LayoutGrid, List } from "lucide-react"; // types import { TModuleLayoutOptions, @@ -7,49 +6,49 @@ import { } from "@plane/types"; export const MODULE_STATUS: { - label: string; + i18n_label: string; value: TModuleStatus; color: string; textColor: string; bgColor: string; }[] = [ { - label: "project_modules.status.backlog", + i18n_label: "project_modules.status.backlog", value: "backlog", color: "#a3a3a2", textColor: "text-custom-text-400", bgColor: "bg-custom-background-80", }, { - label: "project_modules.status.planned", + i18n_label: "project_modules.status.planned", value: "planned", color: "#3f76ff", textColor: "text-blue-500", bgColor: "bg-indigo-50", }, { - label: "project_modules.status.in_progress", + i18n_label: "project_modules.status.in_progress", value: "in-progress", color: "#f39e1f", textColor: "text-amber-500", bgColor: "bg-amber-50", }, { - label: "project_modules.status.paused", + i18n_label: "project_modules.status.paused", value: "paused", color: "#525252", textColor: "text-custom-text-300", bgColor: "bg-custom-background-90", }, { - label: "project_modules.status.completed", + i18n_label: "project_modules.status.completed", value: "completed", color: "#16a34a", textColor: "text-green-600", bgColor: "bg-green-100", }, { - label: "project_modules.status.cancelled", + i18n_label: "project_modules.status.cancelled", value: "cancelled", color: "#ef4444", textColor: "text-red-500", @@ -59,52 +58,48 @@ export const MODULE_STATUS: { export const MODULE_VIEW_LAYOUTS: { key: TModuleLayoutOptions; - icon: any; - title: string; + i18n_title: string; }[] = [ { key: "list", - icon: List, - title: "project_modules.layout.list", + i18n_title: "project_modules.layout.list", }, { key: "board", - icon: LayoutGrid, - title: "project_modules.layout.board", + i18n_title: "project_modules.layout.board", }, { key: "gantt", - icon: GanttChartSquare, - title: "project_modules.layout.timeline", + i18n_title: "project_modules.layout.timeline", }, ]; export const MODULE_ORDER_BY_OPTIONS: { key: TModuleOrderByOptions; - label: string; + i18n_label: string; }[] = [ { key: "name", - label: "project_modules.order_by.name", + i18n_label: "project_modules.order_by.name", }, { key: "progress", - label: "project_modules.order_by.progress", + i18n_label: "project_modules.order_by.progress", }, { key: "issues_length", - label: "project_modules.order_by.issues", + i18n_label: "project_modules.order_by.issues", }, { key: "target_date", - label: "project_modules.order_by.due_date", + i18n_label: "project_modules.order_by.due_date", }, { key: "created_at", - label: "project_modules.order_by.created_at", + i18n_label: "project_modules.order_by.created_at", }, { key: "sort_order", - label: "project_modules.order_by.manual", + i18n_label: "project_modules.order_by.manual", }, ]; diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx index 4172e97ce33..629dca36a1c 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx @@ -5,6 +5,7 @@ import { ChevronDown } from "lucide-react"; import { MODULE_VIEW_LAYOUTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { CustomMenu, Row } from "@plane/ui"; +import { ModuleLayoutIcon } from "@/components/modules"; import { useModuleFilter, useProject } from "@/hooks/store"; export const ModulesListMobileHeader = observer(() => { @@ -36,8 +37,8 @@ export const ModulesListMobileHeader = observer(() => { }} className="flex items-center gap-2" > - -
{t(layout.title)}
+ +
{t(layout.i18n_title)}
); })} diff --git a/web/core/components/modules/analytics-sidebar/root.tsx b/web/core/components/modules/analytics-sidebar/root.tsx index 118b62cb2c7..227619623ed 100644 --- a/web/core/components/modules/analytics-sidebar/root.tsx +++ b/web/core/components/modules/analytics-sidebar/root.tsx @@ -376,7 +376,7 @@ export const ModuleAnalyticsSidebar: React.FC = observer((props) => { backgroundColor: moduleStatus ? `${moduleStatus.color}20` : "#a3a3a220", }} > - {(moduleStatus && t(moduleStatus?.label)) ?? t("project_modules.status.backlog")} + {(moduleStatus && t(moduleStatus?.i18n_label)) ?? t("project_modules.status.backlog")} } value={value} @@ -389,7 +389,7 @@ export const ModuleAnalyticsSidebar: React.FC = observer((props) => {
- {t(status.label)} + {t(status.i18n_label)}
))} diff --git a/web/core/components/modules/applied-filters/status.tsx b/web/core/components/modules/applied-filters/status.tsx index b4b6ae8625b..15a2e8b6ee7 100644 --- a/web/core/components/modules/applied-filters/status.tsx +++ b/web/core/components/modules/applied-filters/status.tsx @@ -27,7 +27,7 @@ export const AppliedStatusFilters: React.FC = observer((props) => { return (
- {t(statusDetails.label)} + {t(statusDetails.i18n_label)} {editable && ( ))} diff --git a/web/core/components/modules/select/status.tsx b/web/core/components/modules/select/status.tsx index 79f0b2a93c9..7da437946c1 100644 --- a/web/core/components/modules/select/status.tsx +++ b/web/core/components/modules/select/status.tsx @@ -37,7 +37,7 @@ export const ModuleStatusSelect: React.FC = ({ control, error, tabIndex } ) : ( )} - {(selectedValue && t(selectedValue?.label)) ?? ( + {(selectedValue && t(selectedValue?.i18n_label)) ?? ( Status )}
@@ -50,7 +50,7 @@ export const ModuleStatusSelect: React.FC = ({ control, error, tabIndex }
- {t(status.label)} + {t(status.i18n_label)}
))} diff --git a/web/core/components/modules/sidebar-select/select-status.tsx b/web/core/components/modules/sidebar-select/select-status.tsx index 75c5863894f..9d7a7fda93d 100644 --- a/web/core/components/modules/sidebar-select/select-status.tsx +++ b/web/core/components/modules/sidebar-select/select-status.tsx @@ -53,7 +53,7 @@ export const SidebarStatusSelect: React.FC = ({ control, submitChanges, w
- {t(option.label)} + {t(option.i18n_label)}
))} From 5f6b443dd10ecb2afa8ce9b0a67e7b7b65e77682 Mon Sep 17 00:00:00 2001 From: gakshita Date: Mon, 27 Jan 2025 20:22:37 +0530 Subject: [PATCH 3/3] fi: added translations --- .../i18n/src/locales/es/translations.json | 24 +++++++++++++++++ .../i18n/src/locales/fr/translations.json | 24 +++++++++++++++++ .../i18n/src/locales/ja/translations.json | 26 +++++++++++++++++++ .../i18n/src/locales/zh-CN/translations.json | 25 ++++++++++++++++++ 4 files changed, 99 insertions(+) diff --git a/packages/i18n/src/locales/es/translations.json b/packages/i18n/src/locales/es/translations.json index a4baa482bab..79d379ea802 100644 --- a/packages/i18n/src/locales/es/translations.json +++ b/packages/i18n/src/locales/es/translations.json @@ -1283,5 +1283,29 @@ "assigned": "Asignados", "created": "Creados", "subscribed": "Suscritos" + }, + + "project_modules": { + "status": { + "backlog": "Pendientes", + "planned": "Planificado", + "in_progress": "En progreso", + "paused": "Pausado", + "completed": "Completado", + "cancelled": "Cancelado" + }, + "layout": { + "list": "Vista lista", + "board": "Vista galería", + "timeline": "Vista cronológica" + }, + "order_by": { + "name": "Nombre", + "progress": "Progreso", + "issues": "Número de problemas", + "due_date": "Fecha de vencimiento", + "created_at": "Fecha de creación", + "manual": "Manual" + } } } diff --git a/packages/i18n/src/locales/fr/translations.json b/packages/i18n/src/locales/fr/translations.json index 2c5847e4b93..83886c12cff 100644 --- a/packages/i18n/src/locales/fr/translations.json +++ b/packages/i18n/src/locales/fr/translations.json @@ -1278,5 +1278,29 @@ "assigned": "Assignés", "created": "Créés", "subscribed": "Abonnés" + }, + + "project_modules": { + "status": { + "backlog": "Backlog", + "planned": "Planifié", + "in_progress": "En cours", + "paused": "En pause", + "completed": "Terminé", + "cancelled": "Annulé" + }, + "layout": { + "list": "Vue liste", + "board": "Vue galerie", + "timeline": "Vue chronologique" + }, + "order_by": { + "name": "Nom", + "progress": "Progression", + "issues": "Nombre de problèmes", + "due_date": "Date d'échéance", + "created_at": "Date de création", + "manual": "Manuel" + } } } diff --git a/packages/i18n/src/locales/ja/translations.json b/packages/i18n/src/locales/ja/translations.json index 7f727c34964..5f1c2a47459 100644 --- a/packages/i18n/src/locales/ja/translations.json +++ b/packages/i18n/src/locales/ja/translations.json @@ -1281,5 +1281,31 @@ "assigned": "割り当て済み", "created": "作成済み", "subscribed": "購読済み" + }, + + + "project_modules": { + "status": { + "backlog": "バックログ", + "planned": "計画済み", + "in_progress": "進行中", + "paused": "一時停止", + "completed": "完了", + "cancelled": "キャンセル" + }, + "layout": { + "list": "リスト表示", + "board": "ギャラリー表示", + "timeline": "タイムライン表示" + }, + "order_by": { + "name": "名前", + "progress": "進捗", + "issues": "課題数", + "due_date": "期限", + "created_at": "作成日", + "manual": "手動" + } } + } diff --git a/packages/i18n/src/locales/zh-CN/translations.json b/packages/i18n/src/locales/zh-CN/translations.json index e75371244a2..b86c5d1674a 100644 --- a/packages/i18n/src/locales/zh-CN/translations.json +++ b/packages/i18n/src/locales/zh-CN/translations.json @@ -852,5 +852,30 @@ "common": { "months_count": "{months, plural, one{#个月} other{#个月}}" } + }, + + "project_modules": { + "status": { + "backlog": "待办", + "planned": "已规划", + "in_progress": "进行中", + "paused": "已暂停", + "completed": "已完成", + "cancelled": "已取消" + }, + "layout": { + "list": "列表视图", + "board": "画廊视图", + "timeline": "时间轴视图" + }, + "order_by": { + "name": "名称", + "progress": "进度", + "issues": "问题数量", + "due_date": "截止日期", + "created_at": "创建日期", + "manual": "手动" + } } + }