summaryrefslogtreecommitdiff
path: root/components/notice/notice-client.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'components/notice/notice-client.tsx')
-rw-r--r--components/notice/notice-client.tsx37
1 files changed, 33 insertions, 4 deletions
diff --git a/components/notice/notice-client.tsx b/components/notice/notice-client.tsx
index e32a40c9..e5c05d84 100644
--- a/components/notice/notice-client.tsx
+++ b/components/notice/notice-client.tsx
@@ -1,6 +1,8 @@
"use client"
import { useState, useEffect, useTransition } from "react"
+import { useParams } from "next/navigation"
+import { useTranslation } from "@/i18n/client"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import {
@@ -55,6 +57,25 @@ type SortField = "title" | "pagePath" | "createdAt"
type SortDirection = "asc" | "desc"
export function NoticeClient({ initialData = [], currentUserId }: NoticeClientProps) {
+ const params = useParams()
+ const lng = (params?.lng as string) || 'ko'
+ const { t } = useTranslation(lng, 'menu')
+
+ // 안전한 번역 함수 (키가 없을 때 원본 키 반환)
+ const safeTranslate = (key: string): string => {
+ try {
+ const translated = t(key)
+ // 번역 키가 그대로 반환되는 경우 원본 키 사용
+ if (translated === key) {
+ return key
+ }
+ return translated || key
+ } catch (error) {
+ console.warn(`Translation failed for key: ${key}`, error)
+ return key
+ }
+ }
+
const [notices, setNotices] = useState<NoticeWithAuthor[]>(initialData)
const [loading, setLoading] = useState(false)
const [searchQuery, setSearchQuery] = useState("")
@@ -172,7 +193,7 @@ export function NoticeClient({ initialData = [], currentUserId }: NoticeClientPr
const paths = await getPagePathList()
const options = paths.map(path => ({
value: path.pagePath,
- label: `${path.pageName} (${path.pagePath})`
+ label: path.pageName // i18n 키를 그대로 저장 (화면에서 번역)
}))
setPagePathOptions(options)
} catch (error) {
@@ -325,9 +346,17 @@ export function NoticeClient({ initialData = [], currentUserId }: NoticeClientPr
</div>
</TableCell>
<TableCell>
- <span className="font-mono text-sm max-w-[200px] truncate block">
- {notice.pagePath}
- </span>
+ <div className="max-w-[200px]">
+ <div className="font-mono text-xs text-muted-foreground truncate">
+ {notice.pagePath}
+ </div>
+ <div className="text-sm truncate">
+ {(() => {
+ const pageOption = pagePathOptions.find(opt => opt.value === notice.pagePath)
+ return pageOption ? safeTranslate(pageOption.label) : notice.pagePath
+ })()}
+ </div>
+ </div>
</TableCell>
<TableCell>
<div className="flex flex-col">