From 969c25b56f6d29d7ffa4bc2ce04c5fb4e5846b34 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 14 Aug 2025 11:54:47 +0000 Subject: (대표님) 정규벤더등록, 벤더문서관리, 벤더데이터입력, 첨부파일관리 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tags/table/add-tag-dialog.tsx | 76 ++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 36 deletions(-) (limited to 'lib/tags') diff --git a/lib/tags/table/add-tag-dialog.tsx b/lib/tags/table/add-tag-dialog.tsx index e5207cd8..f3eaed3f 100644 --- a/lib/tags/table/add-tag-dialog.tsx +++ b/lib/tags/table/add-tag-dialog.tsx @@ -1,7 +1,7 @@ "use client" import * as React from "react" -import { useRouter } from "next/navigation" +import { useRouter, useParams } from "next/navigation" import { useForm, useWatch, useFieldArray } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { toast } from "sonner" @@ -51,6 +51,7 @@ import { import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import { cn } from "@/lib/utils" import { Badge } from "@/components/ui/badge" +import { useTranslation } from "@/i18n/client" import type { CreateTagSchema } from "@/lib/tags/validations" import { createTagSchema } from "@/lib/tags/validations" @@ -102,6 +103,9 @@ interface AddTagDialogProps { export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { const router = useRouter() + const params = useParams() + const lng = (params?.lng as string) || "ko" + const { t } = useTranslation(lng, "engineering") const [open, setOpen] = React.useState(false) const [tagTypeList, setTagTypeList] = React.useState([]) @@ -134,7 +138,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { const result = await getClassOptions(selectedPackageId) setClassOptions(result) } catch (err) { - toast.error("클래스 옵션을 불러오는데 실패했습니다.") + toast.error(t("toast.classOptionsLoadFailed")) } finally { setIsLoadingClasses(false) } @@ -198,7 +202,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { form.setValue("rows", updatedRows); return true } catch (err) { - toast.error("서브필드를 불러오는데 실패했습니다.") + toast.error(t("toast.subfieldsLoadFailed")) setSubFields([]) return false } finally { @@ -310,7 +314,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { // --------------- async function onSubmit(data: MultiTagFormValues) { if (!selectedPackageId) { - toast.error("No selectedPackageId."); + toast.error(t("toast.noSelectedPackageId")); return; } @@ -353,12 +357,12 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { // Show results to the user if (successfulTags.length > 0) { - toast.success(`${successfulTags.length}개의 태그가 성공적으로 생성되었습니다!`); + toast.success(`${successfulTags.length}${t("toast.tagsCreatedSuccess")}`); } if (failedTags.length > 0) { console.log("Failed tags:", failedTags); - toast.error(`${failedTags.length}개의 태그 생성에 실패했습니다.`); + toast.error(`${failedTags.length}${t("toast.tagsCreateFailed")}`); } // Refresh the page @@ -370,7 +374,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { setOpen(false); } } catch (err) { - toast.error("태그 생성 처리에 실패했습니다."); + toast.error(t("toast.tagProcessingFailed")); } finally { setIsSubmitting(false); } @@ -435,7 +439,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { return ( - Class + {t("labels.class")} @@ -448,13 +452,13 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { > {isLoadingClasses ? ( <> - 클래스 로딩 중... + {t("messages.loadingClasses")} ) : ( <> - {field.value || "클래스 선택..."} + {field.value || t("placeholders.selectClass")} @@ -465,7 +469,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { @@ -475,7 +479,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { const target = e.currentTarget; target.scrollTop += e.deltaY; // 직접 스크롤 처리 }}> - 검색 결과가 없습니다. + {t("messages.noSearchResults")} {classOptions.map((opt, optIndex) => { if (!classOptionIdsRef.current[opt.code]) { @@ -543,7 +547,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { disabled={!selectedClassOption} > - + {selectedClassOption?.subclasses.map((subclass) => ( @@ -576,7 +580,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { return ( - Tag Type + {t("labels.tagType")} {isReadOnly ? (
@@ -592,7 +596,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { key={`tag-type-placeholder-${inputId}`} {...field} readOnly - placeholder="클래스 선택시 자동으로 결정됩니다" + placeholder={t("placeholders.autoSetByClass")} className="h-9 bg-muted" /> )} @@ -610,15 +614,15 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { return (
-
필드 로딩 중...
+
{t("messages.loadingFields")}
) } if (subFields.length === 0 && selectedTagTypeCode) { const message = selectedClassOption?.subclasses && selectedClassOption.subclasses.length > 0 - ? "서브클래스를 선택해주세요." - : "이 태그 유형에 대한 필드가 없습니다." + ? t("messages.selectSubclassFirst") + : t("messages.noFieldsForTagType") return (
@@ -630,7 +634,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { if (subFields.length === 0) { return (
- 태그 데이터를 입력하려면 먼저 상단에서 클래스를 선택하세요. + {t("messages.selectClassFirst")}
) } @@ -639,10 +643,10 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) {
{/* 헤더 */}
-

태그 항목 ({fields.length}개)

+

{t("sections.tagItems")} ({fields.length}개)

{!areAllTagNosValid && ( - 유효하지 않은 태그 존재 + {t("messages.invalidTagsExist")} )}
@@ -655,10 +659,10 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { # -
Tag No
+
{t("labels.tagNo")}
-
Description
+
{t("labels.description")}
{/* Subfields */} @@ -680,7 +684,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { ))} - Actions + {t("labels.actions")}
@@ -738,7 +742,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { @@ -768,7 +772,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { className="w-full h-8 truncate" title={field.value || ""} > - + )} @@ -820,7 +824,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { -

행 복제

+

{t("tooltips.duplicateRow")}

@@ -843,7 +847,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { -

행 삭제

+

{t("tooltips.deleteRow")}

@@ -864,7 +868,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { disabled={!selectedTagTypeCode || isLoadingSubFields || subFields.length === 0} > - 새 행 추가 + {t("buttons.addRow")}
@@ -903,15 +907,15 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { > - 새 태그 추가 + {t("dialogs.addFormTag")} - 클래스와 서브클래스를 선택하여 태그 유형과 하위 필드를 로드한 다음, 여러 행을 추가하여 여러 태그를 생성하세요. + {t("dialogs.selectClassToLoadFields")} @@ -968,7 +972,7 @@ export function AddTagDialog({ selectedPackageId }: AddTagDialogProps) { }} disabled={isSubmitting} > - 취소 + {t("buttons.cancel")}
-- cgit v1.2.3