diff options
Diffstat (limited to 'lib/dolce/utils/code-translator.ts')
| -rw-r--r-- | lib/dolce/utils/code-translator.ts | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/lib/dolce/utils/code-translator.ts b/lib/dolce/utils/code-translator.ts new file mode 100644 index 00000000..19cb4217 --- /dev/null +++ b/lib/dolce/utils/code-translator.ts @@ -0,0 +1,208 @@ +/** + * DOLCE 코드 값 번역 유틸리티 + * + * 코드 값을 다국어로 번역하고, 검색 시 번역된 텍스트도 매칭할 수 있도록 지원 + */ + +// B3 DrawingUsage 번역 +export function translateB3DrawingUsage(code: string, lng: string): string { + const translations: Record<string, Record<string, string>> = { + "Approval": { + ko: "승인용", + en: "Approval", + }, + "Working": { + ko: "작업용", + en: "Working", + }, + "APP": { + ko: "승인용", + en: "Approval", + }, + "WOR": { + ko: "작업용", + en: "Working", + }, + }; + + return translations[code]?.[lng] || code; +} + +// B3 RegisterKind 번역 +export function translateB3RegisterKind(code: string, lng: string): string { + const translations: Record<string, Record<string, string>> = { + "APPR": { + ko: "승인 제출용 도면(Full)", + en: "For Approval(Full)", + }, + "APPP": { + ko: "승인 제출용 도면(Partial)", + en: "For Approval(Partial)", + }, + "WORK": { + ko: "작업용 입수도면(Full)", + en: "For Working(Full)", + }, + "WORP": { + ko: "작업용 입수도면(Partial)", + en: "For Working(Partial)", + }, + }; + + return translations[code]?.[lng] || code; +} + +// B4 DrawingUsage 번역 +export function translateB4DrawingUsage(code: string, lng: string): string { + const translations: Record<string, Record<string, string>> = { + "REC": { + ko: "입수용", + en: "GTT→SHI", + }, + "SUB": { + ko: "제출용", + en: "SHI→GTT", + }, + }; + + return translations[code]?.[lng] || code; +} + +// B4 RegisterKind 번역 +export function translateB4RegisterKind(code: string, lng: string): string { + const translations: Record<string, Record<string, string>> = { + "RECW": { + ko: "Working 도면입수(GTT→SHI)", + en: "Working Dwg(GTT→SHI)", + }, + "RECP": { + ko: "Pre. 도면입수(GTT→SHI)", + en: "Pre. Dwg(GTT→SHI)", + }, + "SUBW": { + ko: "Working 제출용(SHI→GTT)", + en: "Working Submission(SHI→GTT)", + }, + "SUBP": { + ko: "Pre. 제출용(SHI→GTT)", + en: "Pre. Submission(SHI→GTT)", + }, + }; + + return translations[code]?.[lng] || code; +} + +// DrawingMoveGbn 번역 (B4 GTT) +export function translateDrawingMoveGbn(code: string, lng: string): string { + const translations: Record<string, Record<string, string>> = { + "도면입수": { + ko: "도면입수", + en: "Receipt", + }, + "도면제출": { + ko: "도면제출", + en: "Submission", + }, + }; + + return translations[code]?.[lng] || code; +} + +// 통합 번역 함수 +export function translateDolceCode( + codeType: "B3_DrawingUsage" | "B3_RegisterKind" | "B4_DrawingUsage" | "B4_RegisterKind" | "DrawingMoveGbn", + code: string, + lng: string +): string { + switch (codeType) { + case "B3_DrawingUsage": + return translateB3DrawingUsage(code, lng); + case "B3_RegisterKind": + return translateB3RegisterKind(code, lng); + case "B4_DrawingUsage": + return translateB4DrawingUsage(code, lng); + case "B4_RegisterKind": + return translateB4RegisterKind(code, lng); + case "DrawingMoveGbn": + return translateDrawingMoveGbn(code, lng); + default: + return code; + } +} + +// 검색용: 코드와 번역된 텍스트 모두 매칭 +export function matchesTranslatedCode( + codeType: "B3_DrawingUsage" | "B3_RegisterKind" | "B4_DrawingUsage" | "B4_RegisterKind" | "DrawingMoveGbn", + code: string, + searchTerm: string, + lng: string +): boolean { + if (!searchTerm) return true; + + const normalizedSearch = searchTerm.toLowerCase(); + + // 원본 코드로 검색 + if (code.toLowerCase().includes(normalizedSearch)) { + return true; + } + + // 번역된 텍스트로 검색 + const translated = translateDolceCode(codeType, code, lng); + if (translated.toLowerCase().includes(normalizedSearch)) { + return true; + } + + // 다른 언어의 번역도 검색 (한국어 사용자가 영어로 검색하는 경우) + const otherLng = lng === "ko" ? "en" : "ko"; + const otherTranslated = translateDolceCode(codeType, code, otherLng); + if (otherTranslated.toLowerCase().includes(normalizedSearch)) { + return true; + } + + return false; +} + +// 옵션 목록 생성 (Select 컴포넌트용) +export function getB3DrawingUsageOptions(lng: string) { + return [ + { value: "APP", label: translateB3DrawingUsage("APP", lng) }, + { value: "WOR", label: translateB3DrawingUsage("WOR", lng) }, + ]; +} + +export function getB3RegisterKindOptions(drawingUsage: string, lng: string) { + if (drawingUsage === "APP") { + return [ + { value: "APPR", label: translateB3RegisterKind("APPR", lng) }, + { value: "APPP", label: translateB3RegisterKind("APPP", lng) }, + ]; + } else if (drawingUsage === "WOR") { + return [ + { value: "WORK", label: translateB3RegisterKind("WORK", lng) }, + { value: "WORP", label: translateB3RegisterKind("WORP", lng) }, + ]; + } + return []; +} + +export function getB4DrawingUsageOptions(lng: string) { + return [ + { value: "REC", label: translateB4DrawingUsage("REC", lng) }, + ]; +} + +export function getB4RegisterKindOptions(drawingUsage: string, lng: string) { + if (drawingUsage === "REC") { + return [ + { value: "RECP", label: translateB4RegisterKind("RECP", lng) }, + { value: "RECW", label: translateB4RegisterKind("RECW", lng) }, + ]; + } else if (drawingUsage === "SUB") { + return [ + { value: "SUBP", label: translateB4RegisterKind("SUBP", lng) }, + { value: "SUBW", label: translateB4RegisterKind("SUBW", lng) }, + ]; + } + return []; +} + |
