summaryrefslogtreecommitdiff
path: root/lib/dolce/utils/code-translator.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-24 20:13:50 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-24 20:13:50 +0900
commitc54a2445b6285d06c0ce3afa1cd3aa6aecf6de94 (patch)
tree7a3f8e9d2eb3c8f4d9659cfe1d719d45dcbec139 /lib/dolce/utils/code-translator.ts
parentb284a6e07c2dd03d10eb471d69457e92bcc0ac76 (diff)
(김준회) dolce rebuild: i18n 지원
Diffstat (limited to 'lib/dolce/utils/code-translator.ts')
-rw-r--r--lib/dolce/utils/code-translator.ts208
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 [];
+}
+