From 756137e8092b78c80decf71867dfc95190a9ec69 Mon Sep 17 00:00:00 2001 From: Jay Sheen Date: Fri, 14 Nov 2025 19:12:34 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=84=EC=A0=95=20=EA=B6=8C=ED=95=9C=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=9D=B4=EB=A6=84=EC=97=90=20=EB=8B=A4?= =?UTF-8?q?=EA=B5=AD=EC=96=B4=20=EC=A7=80=EC=9B=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PermItem 타입에 menuNameEng 속성 추가 - 메뉴 권한 목록/아이템/페이지에서 현재 언어에 따라 메뉴 이름 선택 - 영어 번역 파일에 사용자 삭제 관련 번역 키 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/entities/account/model/types.ts | 4 ++++ .../account/ui/user-account-auth-perm-item.tsx | 11 ++++++++++- .../account/ui/user-account-auth-perm-list.tsx | 9 ++++++++- src/locales/en.json | 5 ++++- src/pages/account/user/menu-auth-page.tsx | 9 ++++++--- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/entities/account/model/types.ts b/src/entities/account/model/types.ts index 23a13e5..74b6651 100644 --- a/src/entities/account/model/types.ts +++ b/src/entities/account/model/types.ts @@ -41,7 +41,11 @@ export interface UserAccountAuthWrapProps { }; export interface PermItem { menuId?: number; + parent?: number; menuName?: string; + menuNameEng?: string; + iconFilePath?: string; + programPath?: string; subMenu?: Array; }; export interface UserAccountAuthPermListProps { diff --git a/src/entities/account/ui/user-account-auth-perm-item.tsx b/src/entities/account/ui/user-account-auth-perm-item.tsx index d888240..63befa8 100644 --- a/src/entities/account/ui/user-account-auth-perm-item.tsx +++ b/src/entities/account/ui/user-account-auth-perm-item.tsx @@ -1,6 +1,7 @@ import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { UserAccountAuthPermItemProps } from '../model/types'; +import { useTranslation } from 'react-i18next'; export const UserAccountAuthPermItem = ({ mid, @@ -13,8 +14,16 @@ export const UserAccountAuthPermItem = ({ menuGrants, }: UserAccountAuthPermItemProps) => { const { navigate } = useNavigate(); + const { i18n } = useTranslation(); + const isEnglish = i18n.language === 'en'; const onClickToNavigation = () => { + // 현재 언어에 맞게 서브메뉴도 변환 + const localizedSubMenu = subMenu.map(sub => ({ + ...sub, + menuName: isEnglish ? (sub.menuNameEng || sub.menuName) : sub.menuName + })); + navigate(PATHS.account.user.menuAuth, { state: { mid: mid, @@ -23,7 +32,7 @@ export const UserAccountAuthPermItem = ({ status: status, menuId: menuId, menuName: menuName, - subMenu: subMenu, + subMenu: localizedSubMenu, menuGrants: menuGrants, } }) diff --git a/src/entities/account/ui/user-account-auth-perm-list.tsx b/src/entities/account/ui/user-account-auth-perm-list.tsx index bf0d08a..c0b6cf1 100644 --- a/src/entities/account/ui/user-account-auth-perm-list.tsx +++ b/src/entities/account/ui/user-account-auth-perm-list.tsx @@ -1,3 +1,4 @@ +import { useTranslation } from 'react-i18next'; import { UserAccountAuthPermListProps } from '../model/types'; import { UserAccountAuthPermItem } from './user-account-auth-perm-item'; @@ -9,6 +10,9 @@ export const UserAccountAuthPermList = ({ menuItems, menuGrants, }: UserAccountAuthPermListProps) => { + const { i18n } = useTranslation(); + const isEnglish = i18n.language === 'en'; + return (
{menuItems.map((item, index) => { @@ -18,6 +22,9 @@ export const UserAccountAuthPermList = ({ subMenuIds.includes(grant.menuId) ); + // 현재 언어에 맞는 메뉴 이름 선택 + const menuName = isEnglish ? (item.menuNameEng ?? item.menuName ?? '') : (item.menuName ?? ''); + return ( diff --git a/src/locales/en.json b/src/locales/en.json index 4f4877e..7a03f45 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -354,7 +354,10 @@ "active": "Active", "inactive": "Inactive", "loginScope": "Login Scope", - "menuPermissions": "Menu Permissions" + "menuPermissions": "Menu Permissions", + "deleteUserConfirm": "Do you want to delete this user?", + "deleteUserSuccess": "User deleted successfully.", + "deleteUserFailed": "Failed to delete user." }, "favorite": { "edit": "Edit", diff --git a/src/pages/account/user/menu-auth-page.tsx b/src/pages/account/user/menu-auth-page.tsx index 471c8fc..b4e6143 100644 --- a/src/pages/account/user/menu-auth-page.tsx +++ b/src/pages/account/user/menu-auth-page.tsx @@ -24,10 +24,11 @@ const PERMISSION = { }; export const UserMenuAuthPage = () => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { navigate } = useNavigate(); const location = useLocation(); const { mid, usrid, menuName, subMenu, menuGrants } = location.state || {}; + const isEnglish = i18n.language === 'en'; // 메뉴별 권한 상태 관리 const [permissions, setPermissions] = useState>({}); @@ -205,15 +206,17 @@ export const UserMenuAuthPage = () => {
{t('account.setMenuPermissions')}
{t('account.permissionRestrictionsNotice')}
- {subMenu && subMenu.map((menu: { menuId: number; menuName: string }) => { + {subMenu && subMenu.map((menu: { menuId: number; menuName: string; menuNameEng?: string }) => { const menuGrant = permissions[menu.menuId] || 0; const hasAccess = menuGrant > 0; + // 현재 언어에 맞는 메뉴 이름 선택 + const displayMenuName = isEnglish ? (menu.menuNameEng || menu.menuName) : menu.menuName; return (
-
{menu.menuName}
+
{displayMenuName}