/** * UI 크롬(툴 사용자용) 메시지 카탈로그 — 한국어(단일 진실 소스). * * 콘텐츠 다국어(MultiLangText: 엔티티/속성 논리명·설명)와는 **별개 축**이다. * 이건 툴 자체의 버튼/라벨/툴팁/검증 메시지를 쓰는 사람의 언어로 보여주기 위한 것. * * `ko`가 키 집합의 SoT — `en`/`ja`는 `Record`로 선언되어 키 누락이 컴파일 에러가 된다. * 새 문자열은 여기에 키를 먼저 추가하고 en/ja를 채운다. * * 키 규약: `em.area.item`(camelCase). `em.` 프리픽스로 lib 소유 키를 네임스페이싱(CSS `em-`·`EmIcon` * 등 코드베이스 전면 컨벤션과 일관 + 번역 관리 시 호스트 키와 그룹 구분). 파라미터는 `{name}` 형태 삽입. */ export declare const ko: { readonly 'em.mode.view': "조회"; readonly 'em.mode.edit': "편집"; readonly 'em.mode.frozen': "편집 잠김 (충돌)"; readonly 'em.mode.frozenTitle': "동시편집 충돌로 편집이 잠겼습니다. 최신 내용을 다시 불러오는 중입니다."; readonly 'em.mode.readonlyTitle': "이 다이어그램은 조회 전용입니다"; readonly 'em.toolbar.undo': "실행 취소"; readonly 'em.toolbar.redo': "다시 실행"; readonly 'em.toolbar.displayLabel': "표시"; readonly 'em.toolbar.routingToggle': "연결선 모드 전환"; readonly 'em.toolbar.routingOrthogonal': "직각"; readonly 'em.toolbar.routingStraight': "직선"; readonly 'em.toolbar.grid': "그리드"; readonly 'em.toolbar.gridOn': "그리드 켜기"; readonly 'em.toolbar.gridOff': "그리드 끄기"; readonly 'em.toolbar.minimap': "미니맵"; readonly 'em.toolbar.minimapOn': "미니맵 켜기"; readonly 'em.toolbar.minimapOff': "미니맵 끄기"; readonly 'em.toolbar.fitView': "전체 보기"; readonly 'em.toolbar.exportText': "내보내기 (텍스트 · Mermaid)"; readonly 'em.toolbar.exportSvg': "SVG 내보내기"; readonly 'em.toolbar.exportPng': "PNG 내보내기"; readonly 'em.toolbar.import': "가져오기 (텍스트 붙여넣기)"; readonly 'em.toolbar.history': "이력"; readonly 'em.toolbar.historyOpen': "변경 이력 열기"; readonly 'em.toolbar.historyClose': "변경 이력 닫기"; readonly 'em.toolbar.shortcuts': "키보드 단축키 (?)"; readonly 'em.displayMode.logical': "논리"; readonly 'em.displayMode.physical': "물리"; readonly 'em.displayMode.logicalPhysical': "논리·물리"; readonly 'em.displayMode.class': "클래스"; readonly 'em.panel.resizeWidth': "너비 조절"; readonly 'em.panel.collapse': "접기"; readonly 'em.panel.expand': "펼치기"; readonly 'em.panel.collapseAll': "모두 접기"; readonly 'em.panel.expandAll': "모두 펼치기"; readonly 'em.panel.lockedBanner': "편집 잠김 — 이동·수정·삭제 차단"; readonly 'em.panel.openNamed': "{name} 열기"; readonly 'em.notice.readOnly': "조회 모드에서는 편집할 수 없습니다"; readonly 'em.notice.entityLocked': "잠긴 엔티티입니다 — 잠금 해제 후 편집하세요"; readonly 'em.notice.groupLocked': "잠긴 그룹입니다 — 잠금 해제 후 편집하세요"; readonly 'em.notice.assocLocked': "잠긴 엔티티에 연결된 관계입니다 — 잠금 해제 후 편집하세요"; readonly 'em.validation.title': "검증"; readonly 'em.validation.noIssues': "검증 이슈가 없습니다."; readonly 'em.validation.noVisibleIssues': "표시할 이슈가 없습니다 (필터 적용 중)."; readonly 'em.validation.checkOrphanEntities': "관계 없는 엔티티 검사"; readonly 'em.validation.nameless': "(이름 없음)"; readonly 'em.validation.severityError': "오류"; readonly 'em.validation.severityWarning': "경고"; readonly 'em.validation.severityInfo': "정보"; readonly 'em.validation.hideSeverity': "{label} 숨기기"; readonly 'em.validation.showSeverity': "{label} 표시"; readonly 'em.validation.expandPanel': "검증 패널 펼치기"; readonly 'em.validation.quickFix': "수정"; readonly 'em.validation.quickFixTip': "자동 수정 적용 (되돌리기 가능)"; readonly 'em.common.close': "닫기"; readonly 'em.common.save': "저장"; readonly 'em.export.title': "내보내기"; readonly 'em.export.formatText': "논리 모델 텍스트"; readonly 'em.export.formatMermaidEr': "Mermaid (ER)"; readonly 'em.export.formatMermaidClass': "Mermaid (클래스)"; readonly 'em.export.formatDdl': "SQL DDL (PostgreSQL)"; readonly 'em.export.formatJson': "JSON (백업)"; readonly 'em.export.copy': "복사"; readonly 'em.export.download': "다운로드"; readonly 'em.export.copied': "클립보드에 복사되었습니다."; readonly 'em.export.copyFailed': "복사에 실패했습니다."; readonly 'em.import.title': "가져오기"; readonly 'em.import.placeholder': "SQL DDL · Mermaid ER · JSON 백업을 붙여넣으세요."; readonly 'em.import.formatGroup': "입력 형식"; readonly 'em.import.formatAuto': "자동 감지"; readonly 'em.import.formatMermaid': "Mermaid ER"; readonly 'em.import.formatDdl': "SQL DDL"; readonly 'em.import.formatJson': "JSON"; readonly 'em.import.detected': "감지: {format}"; readonly 'em.import.summary': "엔티티 {entities} · 관계 {relations}"; readonly 'em.import.warnings': "경고 {n}건 (부분 파싱)"; readonly 'em.import.error': "파싱 실패: {message}"; readonly 'em.import.emptyParse': "인식된 엔티티가 없습니다."; readonly 'em.import.unknownFormat': "포맷을 감지하지 못했습니다 — 위에서 직접 선택하세요."; readonly 'em.import.confirm': "가져오기"; readonly 'em.import.commentLocale': "주석 로케일"; readonly 'em.import.commentLocaleUnset': "지정 안 함 — 논리명 유보"; readonly 'em.import.commentEvidence': "COMMENT {n}건 — 한국어(한글) {hangul} · 일본어(가나) {kana} · 판별 불가 {undecidable}"; readonly 'em.import.commentCertain': "{locale} 확정"; readonly 'em.import.commentMixed': "혼재 — 로케일별로 나눠 가져오기 권장"; readonly 'em.import.commentUnknown': "판별 불가 — 원본 언어를 아는 사람이 지정"; readonly 'em.import.commentMarker': "텍스트가 밝힌 로케일: {locale}"; readonly 'em.shortcuts.title': "키보드 단축키"; readonly 'em.shortcuts.groupEdit': "편집"; readonly 'em.shortcuts.groupMove': "이동 · 정렬"; readonly 'em.shortcuts.groupExplorer': "탐색기"; readonly 'em.shortcuts.descExplorerSearch': "탐색기 검색으로 포커스"; readonly 'em.shortcuts.descExplorerNav': "트리 이동 (←→ 접기·펼치기)"; readonly 'em.shortcuts.descExplorerSelect': "항목 선택 + 캔버스 이동"; readonly 'em.shortcuts.descExplorerDetail': "엔티티 상세 편집 열기"; readonly 'em.shortcuts.groupOther': "기타"; readonly 'em.shortcuts.keyArrows': "방향키"; readonly 'em.shortcuts.keyRightClick': "우클릭"; readonly 'em.shortcuts.descUndo': "실행 취소"; readonly 'em.shortcuts.descRedo': "다시 실행"; readonly 'em.shortcuts.descCopy': "선택 복사"; readonly 'em.shortcuts.descPaste': "붙여넣기"; readonly 'em.shortcuts.descDelete': "선택 항목 삭제 (Backspace 동일)"; readonly 'em.shortcuts.descMove1': "선택 노드 1px 이동"; readonly 'em.shortcuts.descMove10': "선택 노드 10px 이동"; readonly 'em.shortcuts.descAttrFocus': "속성 선택 시 포커스 이동"; readonly 'em.shortcuts.descAttrReorder': "속성 순서 위/아래로"; readonly 'em.shortcuts.descContextMenu': "컨텍스트 메뉴 (엔티티·노트 추가 등)"; readonly 'em.shortcuts.descInlineConfirm': "인라인 편집 확정"; readonly 'em.shortcuts.descCloseEdit': "편집·메뉴 닫기"; readonly 'em.shortcuts.descOpenHelp': "이 도움말 열기"; readonly 'em.shortcuts.descCommandPalette': "명령 팔레트 (이동·명령 실행)"; readonly 'em.opSource.title': "본문 — {name}()"; readonly 'em.opSource.placeholder': "// Java 구현 코드"; readonly 'em.entity.name': "이름"; readonly 'em.entity.stereotype': "스테레오타입"; readonly 'em.entity.package': "패키지"; readonly 'em.panel.unlock': "잠금 해제"; readonly 'em.entity.fallback': "엔티티"; readonly 'em.group.fallback': "그룹"; readonly 'em.common.description': "설명"; readonly 'em.common.memo': "메모"; readonly 'em.common.color': "색상"; readonly 'em.common.add': "추가"; readonly 'em.common.inherit': "기본(따름)"; readonly 'em.common.noneParen': "(없음)"; readonly 'em.swatch.none': "없음"; readonly 'em.swatch.red': "빨강"; readonly 'em.swatch.amber': "주황"; readonly 'em.swatch.green': "초록"; readonly 'em.swatch.teal': "청록"; readonly 'em.swatch.blue': "파랑"; readonly 'em.swatch.indigo': "남색"; readonly 'em.swatch.violet': "보라"; readonly 'em.swatch.pink': "분홍"; readonly 'em.inspector.ctxEntityAttrs': "엔티티 · {name} › 속성 · {n}개"; readonly 'em.inspector.ctxEntityDivider': "엔티티 · {name} › 구분선"; readonly 'em.inspector.ctxEntityAttr': "엔티티 · {name} › 속성 · {attr}"; readonly 'em.inspector.ctxEntity': "엔티티 · {name}"; readonly 'em.inspector.ctxAssoc': "관계 · {a} — {b}"; readonly 'em.inspector.ctxGroup': "그룹 · {name}"; readonly 'em.inspector.ctxNote': "노트"; readonly 'em.inspector.ctxNone': "선택된 항목 없음"; readonly 'em.assoc.identifying': "identifying (식별 관계)"; readonly 'em.assoc.selfNoIdentifying': "셀프 연관은 식별 관계로 둘 수 없습니다 (비식별 FK 강제)."; readonly 'em.assoc.embedNoIdentifying': "임베드(@Embedded/@ElementCollection)는 식별 관계로 둘 수 없습니다 (임베더블은 독립 식별자가 없음)."; readonly 'em.assoc.embedSelfBlocked': "\"{name}\"은(는) 자기 자신을 임베드할 수 없습니다 — 무한 중첩이 됩니다(다른 임베더블을 품는 연쇄는 가능합니다)."; readonly 'em.assoc.embedCycleBlocked': "임베드가 순환이 됩니다: {path} — 한쪽 임베드를 먼저 정리한 뒤 연결하세요."; readonly 'em.assoc.multiplicity': "다중성"; readonly 'em.assoc.navFieldName': "연관 필드명(nav)"; readonly 'em.assoc.cascadeAllNote': "ALL이 개별 cascade를 모두 포함합니다 (CHK-JPA-5)."; readonly 'em.assoc.orphanRemovalNote': "반대편이 컬렉션(@ManyToOne/@ManyToMany)이라 orphanRemoval이 무효입니다 (CHK-JPA-14)."; readonly 'em.assoc.navRequiredNote': "이 방향에 nav 속성이 없어(navigable 꺼짐) cascade·fetch가 적용되지 않습니다."; readonly 'em.assoc.ownerNavFixed': "JPA 소유측 참조(@ManyToOne)는 관계 존재와 동치라 항상 켜집니다 — 참조 없는 FK는 관계 대신 일반 컬럼으로 모델링하세요."; readonly 'em.assoc.orderByPlaceholder': "예: name ASC"; readonly 'em.assoc.jpaDetails': "JPA 상세"; readonly 'em.embed.legend': "임베드"; readonly 'em.embed.cardinality': "카디널리티"; readonly 'em.embed.card1': "1 (필수 @Embedded)"; readonly 'em.embed.card01': "0..1 (선택 @Embedded)"; readonly 'em.embed.card0N': "0..* (컬렉션 @ElementCollection)"; readonly 'em.embed.collectionTablePlaceholder': "미지정 시 코드젠 폴백"; readonly 'em.embed.orderColumnPlaceholder': "미지정 시 순서 비보존"; readonly 'em.embed.ownerFixedNote': "임베더블은 소유자에 평탄화되므로 소유자 쪽 end(다중성·navigable·composition)는 구조적으로 고정이라 표시하지 않습니다."; readonly 'em.group.nameLegend': "그룹명"; readonly 'em.group.excludeDDL': "DDL 생성 제외"; readonly 'em.group.members': "멤버 엔티티 {n}개"; readonly 'em.entity.classLegend': "클래스"; readonly 'em.entity.superClass': "부모 클래스"; readonly 'em.entity.superClassPlaceholder': "예: BaseEntity"; readonly 'em.entity.interfaces': "구현 인터페이스"; readonly 'em.entity.interfacesPlaceholder': "콤마로 구분 (예: Serializable, Cloneable)"; readonly 'em.entity.abstractClass': "추상 클래스"; readonly 'em.entity.tablePhysical': "테이블(물리)"; readonly 'em.entity.schema': "스키마"; readonly 'em.entity.schemaPlaceholder': "예: sales, master"; readonly 'em.entity.tableLogicalLegend': "테이블 논리명"; readonly 'em.entity.classLogicalLegend': "클래스 논리명"; readonly 'em.entity.discColumn': "Discriminator 컬럼명"; readonly 'em.entity.discColumnPlaceholder': "예: DTYPE"; readonly 'em.entity.discType': "Discriminator 타입"; readonly 'em.entity.discLength': "Discriminator 길이"; readonly 'em.entity.hasPersonalInfo': "개인정보 포함 (hasPersonalInfo)"; readonly 'em.entity.referenceOnly': "참고 전용 (산출·검증 대상 외)"; readonly 'em.entity.referenceOnlyHint': "문서 이해용 자료·테스트 초안 등 산출물이 아닌 엔티티. DDL·Java 코드·mermaid 를 생성하지 않고 검증 대상에서도 빠집니다(AI 입력 텍스트에는 남습니다). 그룹의 「DDL 생성 제외」와 다릅니다 — 그쪽은 타 서비스가 소유한 실재 테이블용으로 Java 클래스는 계속 생성됩니다."; readonly 'em.entity.headerColor': "헤더 색상"; readonly 'em.attr.section': "속성 ({n})"; readonly 'em.attr.addEmbeddable': "임베더블 추가"; readonly 'em.attr.nameless': "(이름 없음)"; readonly 'em.attr.selectHint': "위 목록에서 속성을 선택하면 편집 폼이 표시됩니다."; readonly 'em.attr.inverseNavHint': "역방향 연관관계 필드 — 물리 컬럼이 없습니다(대상 엔티티 참조)."; readonly 'em.attr.fkDerivedNote': "외래키(FK)에서 파생된 컬럼입니다 — 형상은 부모 PK를 따르며, 변경은 관계선·식별관계에서 하세요."; readonly 'em.attr.scaleTypeHint': "소수부(scale)는 NUMERIC·DECIMAL 타입에만 적용됩니다."; readonly 'em.attr.embedFixedHint': "임베더블 정의에서 고정된 값입니다."; readonly 'em.attr.fkFixedHint': "부모 PK 컬럼에서 상속된 값입니다 — 형상은 부모를 따릅니다."; readonly 'em.attr.embedSharedHint': "다른 컬럼과 공유하는 통화 컬럼입니다 — 대상에서 파생(읽기 전용)."; readonly 'em.attr.derivedIdField': "파생 식별 @Id 필드"; readonly 'em.attr.assocField': "연관 필드명(@MapsId)"; readonly 'em.attr.derivedIdNote': "이 속성은 **두 Java 필드**를 냅니다 — 위 이름 칸은 스칼라 @Id 필드명(비우면 부모 PK 물리명에서 파생)이고, 여기는 @MapsId 연관 필드명입니다. 같은 값을 관계선 인스펙터에서도 편집할 수 있습니다."; readonly 'em.attr.joinColumnOnlyNote': "복합 외래키의 형제 컬럼입니다 — JPA 필드는 관계당 하나뿐이라 이 이름은 방출되지 않습니다. 필드명은 «{anchor}»에서 편집하세요."; readonly 'em.attr.namePlaceholder': "이름"; readonly 'em.attr.typePlaceholder': "타입"; readonly 'em.attr.customTypePlaceholder': "커스텀 타입명"; readonly 'em.attr.logicalPlaceholder': "논리명"; readonly 'em.attr.columnPlaceholder': "컬럼"; readonly 'em.attr.sequence': "시퀀스"; readonly 'em.attr.sequencePlaceholder': "시퀀스명"; readonly 'em.attr.sequenceHint': "이 컬럼이 번호를 받는 시퀀스. PK·Auto Increment가 아니면 «애플리케이션 채번»(채번기가 이 시퀀스로 값을 만듦)이며 여러 컬럼이 같은 이름을 공유할 수 있습니다. Auto Increment 컬럼에서 비우면 <테이블>_<컬럼>_seq 로 자동 명명됩니다."; readonly 'em.attr.sequencePick': "기존 시퀀스 선택"; readonly 'em.attr.defaultValue': "기본값"; readonly 'em.attr.codeGroup': "코드그룹"; readonly 'em.attr.currencyColumn': "통화 컬럼"; readonly 'em.attr.pii': "개인정보"; readonly 'em.attr.colFallback': "컬럼 {n}"; readonly 'em.attr.sharedOwn': "전용 컬럼(OWN)"; readonly 'em.attr.sharedRef': "↗ {owner}{physical} ({mode})"; readonly 'em.attr.currencyMode': "통화"; readonly 'em.attr.sharedMode': "공유"; readonly 'em.attr.batchHint': "선택 {n}개 일괄"; readonly 'em.attr.fkDeleteHint': "외래키는 연관관계에서 파생됩니다 — 연관관계선을 삭제하세요"; readonly 'em.attr.embedConvertPkBlocked': "식별자 속성은 컬럼 개수가 바뀌는 임베더블로 전환할 수 없습니다 — PK 형상이 바뀌면 이 PK를 참조하는 자식 FK가 함께 어긋납니다"; readonly 'em.op.section': "오퍼레이션 ({n})"; readonly 'em.op.namePlaceholder': "오퍼레이션명"; readonly 'em.op.editBodyDirty': "본문 편집 ●"; readonly 'em.op.editBody': "본문 편집"; readonly 'em.index.section': "인덱스 ({n})"; readonly 'em.index.inherited': "{field} (상속)"; readonly 'em.index.namePlaceholder': "인덱스명"; readonly 'em.index.addColumn': "컬럼"; readonly 'em.index.condition': "조건 (partial index)"; readonly 'em.index.conditionPlaceholder': "예: WHERE status = 'A'"; readonly 'em.groupCode.searchPlaceholder': "코드그룹 검색/선택"; readonly 'em.groupCode.noMatch': "일치하는 코드그룹 없음"; readonly 'em.detail.tabBasics': "기본"; readonly 'em.detail.tabColumns': "속성"; readonly 'em.detail.tabIndexes': "인덱스"; readonly 'em.detail.tabOperations': "오퍼레이션"; readonly 'em.detail.title': "엔티티 — {name}"; readonly 'em.attr.addDivider': "구분선"; readonly 'em.attr.columnPhysical': "컬럼(물리)"; readonly 'em.attr.constraints': "제약"; readonly 'em.attr.dividerLabelPlaceholder': "구분선 라벨(선택)"; readonly 'em.attr.dividerNote': "── 시각 구획 ──"; readonly 'em.attr.detailCollapse': "상세 접기"; readonly 'em.attr.detailExpand': "상세 펼치기"; readonly 'em.attr.semanticLegend': "의미"; readonly 'em.attr.embedChildCols': "임베더블 — 하위 컬럼 {n}개"; readonly 'em.attr.fkChildCols': "복합 외래키 — 컬럼 {n}개"; readonly 'em.attr.overrideCollapse': "오버라이드 접기"; readonly 'em.attr.overrideExpand': "오버라이드 펼치기"; readonly 'em.attr.overrideLegend': "컬럼 오버라이드"; readonly 'em.attr.empty': "속성 없음 — '추가'로 생성"; readonly 'em.op.body': "본문"; readonly 'em.op.bodyDirty': "본문 ●"; readonly 'em.op.empty': "오퍼레이션 없음 — '추가'로 생성"; readonly 'em.index.delete': "인덱스 삭제"; readonly 'em.index.empty': "인덱스 없음 — '추가'로 생성"; readonly 'em.index.conditionPlaceholderWide': "예: WHERE status = 'A' AND deleted = false"; readonly 'em.index.inheritedColTitle': "슈퍼클래스 상속 컬럼"; readonly 'em.index.inheritedBadge': "상속"; readonly 'em.index.colUnspecified': "{name} (컬럼 {n}개 중 미지정)"; readonly 'em.index.multiColumn': "{name} (컬럼 {n}개)"; readonly 'em.index.unnamedAttr': "(이름 없음)"; readonly 'em.index.availColumns': "가용 컬럼 ({n})"; readonly 'em.index.indexColumns': "인덱스 컬럼 ({n})"; readonly 'em.index.allColumnsUsed': "모든 컬럼 사용됨"; readonly 'em.index.addArrow': "추가 →"; readonly 'em.index.moveUp': "위로"; readonly 'em.index.moveDown': "아래로"; readonly 'em.index.removeColumn': "제거"; readonly 'em.index.noColumns': "컬럼 없음 — 좌측에서 추가"; readonly 'em.index.selectPrompt': "인덱스를 선택하거나 추가하세요."; readonly 'em.palette.autoLayout': "자동 배치"; readonly 'em.cmd.title': "명령 팔레트"; readonly 'em.cmd.placeholder': "엔티티로 이동하거나 명령 실행…"; readonly 'em.cmd.sectionGoto': "이동"; readonly 'em.cmd.sectionActions': "명령"; readonly 'em.cmd.empty': "일치하는 항목이 없습니다"; readonly 'em.cmd.groupTag': "그룹"; readonly 'em.canvas.emptyTitle': "빈 다이어그램입니다"; readonly 'em.canvas.emptyHint': "캔버스를 우클릭하거나 좌하단 + 버튼으로 첫 엔티티를 추가하세요."; readonly 'em.canvas.emptyConnectHint': "엔티티를 두 개 이상 만들면, 엔티티 가장자리에서 드래그해 관계를 연결할 수 있어요."; readonly 'em.canvas.emptyShortcutHint': "단축키 도움말은 ? 키"; readonly 'em.canvas.emptyReadonly': "표시할 엔티티가 없습니다"; readonly 'em.canvas.exportFailed': "내보내기에 실패했습니다"; readonly 'em.conflict.lockedTitle': "편집이 잠겼습니다"; readonly 'em.conflict.missingDetail': "변경 사항을 저장하지 못했습니다(서버 또는 네트워크 오류). 최신 내용을 다시 불러오세요."; readonly 'em.conflict.changedDetail': "다른 곳에서 변경되어 편집이 잠겼습니다. 최신 내용을 다시 불러오세요."; readonly 'em.conflict.commandFailedDetail': "편집을 처리하지 못해 화면 내용이 어긋났습니다. 저장된 내용은 그대로이니 최신 내용을 다시 불러오세요."; readonly 'em.conflict.reloadingDetail': "최신 내용을 다시 불러오는 중입니다. 잠시만 기다려 주세요."; readonly 'em.ctx.addEntity': "엔티티 추가"; readonly 'em.ctx.addNote': "노트 추가"; readonly 'em.ctx.addGroup': "그룹 추가"; readonly 'em.ctx.paste': "붙여넣기"; readonly 'em.ctx.copy': "복사"; readonly 'em.ctx.copyN': "복사 ({n})"; readonly 'em.ctx.editDetail': "상세 편집…"; readonly 'em.ctx.viewDetail': "상세 보기…"; readonly 'em.ctx.lock': "잠금"; readonly 'em.ctx.ungroup': "그룹 해제"; readonly 'em.ctx.deleteNote': "노트 삭제"; readonly 'em.ctx.addAttr': "속성 추가"; readonly 'em.ctx.colorN': "색상 ({n})"; readonly 'em.ctx.pasteAttr': "속성 붙여넣기"; readonly 'em.ctx.pasteAttrN': "속성 붙여넣기 ({n})"; readonly 'em.ctx.deleteAttr': "속성 삭제"; readonly 'em.ctx.deleteAttrN': "속성 삭제 ({n})"; readonly 'em.ctx.addOperation': "오퍼레이션 추가"; readonly 'em.ctx.deleteOperation': "오퍼레이션 삭제"; readonly 'em.ctx.addMethod': "메서드 추가"; readonly 'em.ctx.groupInto': "그룹으로 묶기"; readonly 'em.ctx.addSelfAssoc': "셀프 연관 추가"; readonly 'em.ctx.addEmbeddableNamed': "임베더블 추가: {label}"; readonly 'em.ctx.ungroupEntity': "그룹에서 빼기"; readonly 'em.ctx.deleteEntity': "엔티티 삭제"; readonly 'em.ctx.clearWaypoints': "꺾은선 풀기"; readonly 'em.ctx.deleteConnection': "연결 삭제"; readonly 'em.ctx.deleteAssociation': "관계 삭제"; readonly 'em.node.keyPfk': "PFK (식별 외래키)"; readonly 'em.node.keyPk': "PK (기본키)"; readonly 'em.node.keyFk': "FK (외래키)"; readonly 'em.node.required': "필수 (NOT NULL)"; readonly 'em.node.logicalMissing': "(논리명)"; readonly 'em.node.editLock': "편집 잠금"; readonly 'em.node.connectHint': "드래그해 다른 엔티티와 관계 연결"; readonly 'em.node.connectHintNode': "드래그해 관계 연결 (이 엔티티 전체를 시작점으로)"; readonly 'em.node.derivedIdRow': "파생 식별(@MapsId)이 방출하는 스칼라 @Id 필드입니다 — 모델에는 연관 속성 하나로 저장되며, 편집은 그 속성의 인스펙터에서 합니다."; readonly 'em.node.embedRepeatedShow': "이 엔티티에서 값이 같아 접힌 컬럼 {count}개 보기"; readonly 'em.node.embedRepeatedHide': "값이 같아 반복되는 컬럼 접기"; readonly 'em.node.embedAttrHide': "이 임베드 컬럼 접기"; readonly 'em.node.embedAttrShow': "접힌 임베드 컬럼 {count}개 보기"; readonly 'em.node.embedAllHide': "이 엔티티의 서브컬럼 모두 접기"; readonly 'em.node.embedAllShow': "접힌 서브컬럼 모두 펼치기"; readonly 'em.node.embedAllSummary': "서브컬럼 {n}개 숨김"; readonly 'em.node.opsSummaryTitle': "오퍼레이션 {n}개 — 클래스 표시 모드에서 펼쳐 보입니다"; readonly 'em.node.opsSummary': "오퍼레이션 {n}개"; readonly 'em.node.addAttr': "+ 속성"; readonly 'em.node.addDivider': "+ 구분선"; readonly 'em.group.ddlExcludeBadge': "DDL 제외"; readonly 'em.toolbar.referenceOnlyBadge': "참고 전용 문서"; readonly 'em.toolbar.referenceOnlyDocHint': "이 문서 전체가 산출·검증 대상이 아닙니다. DDL·Java 코드·mermaid 내보내기가 비고 검증 신호도 나오지 않습니다 — 모델이 비어서가 아니라 대상 외이기 때문입니다(AI 입력 텍스트에는 남습니다). 캔버스의 파선 테두리가 같은 뜻입니다."; readonly 'em.explorer.groupFallback': "(그룹)"; readonly 'em.explorer.associations': "관계 ({n})"; readonly 'em.explorer.notes': "노트 ({n})"; readonly 'em.explorer.emptyNote': "(빈 노트)"; readonly 'em.explorer.diagram': "다이어그램"; readonly 'em.explorer.searchPlaceholder': "엔티티·속성 검색 ( / )"; readonly 'em.explorer.treeAria': "다이어그램 트리"; readonly 'em.explorer.searchAria': "엔티티·속성 검색"; readonly 'em.explorer.clearSearchAria': "검색어 지우기"; readonly 'em.explorer.clearSearchTitle': "지우기 (Esc)"; readonly 'em.explorer.noMatches': "일치하는 엔티티·속성이 없습니다"; readonly 'em.history.title': "변경 이력"; readonly 'em.history.refresh': "새로고침"; readonly 'em.history.loading': "이력을 불러오는 중…"; readonly 'em.history.loadError': "이력을 불러오지 못했습니다."; readonly 'em.history.emptyLoaded': "표시할 변경 이력이 없습니다."; readonly 'em.history.emptyNotLoaded': "이력을 불러오세요."; readonly 'em.history.filterAll': "전체"; readonly 'em.history.kindEdit': "편집"; readonly 'em.history.kindRestore': "복원"; readonly 'em.history.verbAdd': "추가"; readonly 'em.history.verbUpdate': "수정"; readonly 'em.history.verbRemove': "삭제"; readonly 'em.history.assocFallback': "연관"; readonly 'em.history.groupSubject': "그룹 {name}"; readonly 'em.history.noteSubject': "노트 {name}"; readonly 'em.history.emptyValue': "(비움)"; readonly 'em.history.noChange': "변경 없음"; readonly 'em.history.summaryAdd': "{name} 추가"; readonly 'em.history.summaryRemove': "{name} 삭제"; readonly 'em.history.summaryFields': "{name} {n}개 변경"; readonly 'em.history.summaryMore': "{summary} 외 {n}건"; readonly 'em.history.restoreFailed': "복원 실패: {reason}"; readonly 'em.history.unknown': "알 수 없음"; readonly 'em.history.confirmRestore': "이 시점으로 되돌립니다."; readonly 'em.history.doRestore': "복원"; readonly 'em.history.cancel': "취소"; readonly 'em.history.restoreToHere': "이 시점으로 복원"; readonly 'em.history.diff.compare': "현재와 비교"; readonly 'em.history.diff.current': "현재"; readonly 'em.history.diff.exit': "비교 해제"; readonly 'em.history.diff.count': "누적 변경 {n}건"; readonly 'em.history.diff.empty': "이 구간의 누적 변경이 없습니다."; readonly 'em.history.diff.restorePreview': "되돌아갈 변경 {n}건"; readonly 'em.history.diff.restorePreviewNone': "되돌아갈 변경이 없습니다."; readonly 'em.history.loadMore': "이전 기록 더 보기 ({n})"; readonly 'em.history.periodLabel': "기간"; readonly 'em.history.periodFrom': "시작일"; readonly 'em.history.periodTo': "종료일"; readonly 'em.history.periodReset': "기간 해제"; readonly 'em.check.catName': "이름"; readonly 'em.check.catJpa': "JPA"; readonly 'em.check.catType': "타입"; readonly 'em.check.catDsn': "설계"; readonly 'em.check.name1': "속성 이름이 중복됩니다: \"{name}\""; readonly 'em.check.name2': "컬럼 물리명이 중복됩니다: \"{name}\""; readonly 'em.check.name3Entity': "엔티티 이름이 중복됩니다: \"{name}\" — 같은 이름의 엔티티가 또 있습니다. JPA는 엔티티 이름을 퍼시스턴스 유닛 전역에 등록하므로 패키지(그룹)를 나눠도 해소되지 않습니다"; readonly 'em.check.name3Package': "엔티티 이름이 중복됩니다: \"{name}\" — 같은 패키지에 같은 이름이 있습니다. 이름을 바꾸거나 그룹(패키지)을 나누면 해소됩니다"; readonly 'em.check.name4Entity': "엔티티 이름이 비어 있습니다"; readonly 'em.check.name4Attr': "속성 이름이 비어 있습니다"; readonly 'em.check.name11Entity': "엔티티 이름 \"{name}\"이 Java 클래스 관례(PascalCase)를 벗어납니다 — 코드 생성이 이 이름을 그대로 클래스명으로 냅니다"; readonly 'em.check.name11Attr': "속성 이름 \"{name}\"이 Java 필드 관례(lowerCamelCase)를 벗어납니다 — 코드 생성이 이 이름을 그대로 필드명으로 냅니다"; readonly 'em.check.name5': "물리명이 {max}자를 초과했습니다 ({len}자) — 일부 DB에서 잘릴 수 있습니다"; readonly 'em.check.name6Column': "컬럼 물리명이 SQL 예약어입니다: \"{name}\""; readonly 'em.check.name6Table': "테이블 물리명이 SQL 예약어입니다: \"{name}\""; readonly 'em.check.name6Index': "인덱스 이름이 SQL 예약어입니다: \"{name}\""; readonly 'em.check.name7': "관계/임베드 속성({attrType})의 이름이 비어 있습니다 — 이름이 곧 JPA 필드명이라 코드 생성 시 이 관계가 통째로 누락됩니다. 속성명을 채우세요"; readonly 'em.check.name8': "속성 \"{name}\"의 컬럼 물리명이 비어 있습니다 — DDL·코드 생성에서 이 컬럼이 통째로 누락됩니다. 물리명을 채우세요"; readonly 'em.check.name9': "두 엔티티가 같은 테이블 \"{name}\"에 매핑됩니다 — 컬럼이 한 테이블에 뒤섞입니다. 테이블 물리명을 구분하세요"; readonly 'em.check.name10': "인덱스 이름이 중복됩니다: \"{name}\" — 인덱스 이름은 DB 스키마 전역에서 유일해야 합니다"; readonly 'em.check.name12': "자동 명명된 시퀀스 \"{seq}\"가 {other}의 시퀀스와 겹칩니다 — 속성 \"{name}\"의 컬럼에 시퀀스명을 명시해 번호 공간을 가르세요"; readonly 'em.entity.valueTypeSwitchEmbedded': "\"{name}\"은(는) 현재 {owners}개 엔티티에 임베드되어 있어 직렬화 타입/임베더블 사이를 바로 전환할 수 없습니다 — 임베드 속성을 먼저 정리한 뒤 전환하세요(직렬화 타입은 관계가 아니라 타입 참조로 지목됩니다)"; readonly 'em.attr.serializedNoColumnNote': "직렬화 타입은 필드별 물리 컬럼이 없습니다 — 소비 속성의 컬럼 하나에 통째로 직렬화됩니다"; readonly 'em.attr.serializedContainer': "컨테이너"; readonly 'em.attr.serializedContainerNone': "없음 (단일 값)"; readonly 'em.entity.noOwnTableNote': "값 타입은 자체 테이블이 없습니다 — 임베더블은 소유자 테이블로 펼쳐지고, 직렬화 타입은 소비 속성의 컬럼 하나에 직렬화됩니다"; readonly 'em.entity.serializedTypeHasRelations': "\"{name}\"은(는) 연관관계 {count}개에 참여 중이라 직렬화 타입으로 바꿀 수 없습니다 — 연관을 먼저 정리하세요(직렬화 타입은 관계가 아니라 소비 속성의 타입 참조로 지목됩니다)"; readonly 'em.entity.serializedContainer': "컨테이너"; readonly 'em.entity.serializedContainerNone': "없음 (단일 값)"; readonly 'em.entity.serializedMapKey': "Map 키 타입"; readonly 'em.entity.serializedMapKeyPlaceholder': "예: PromoType (미지정 시 코드젠이 임시 Object + 손채움)"; readonly 'em.entity.noIndexNote': "직렬화 타입은 인덱스를 가질 수 없습니다 — 인덱스는 컬럼에 걸리는데 이 타입은 소비 속성의 컬럼 하나에 통째로 직렬화됩니다"; readonly 'em.check.jpa1': "JPA 엔티티에 식별자(PK) 속성이 없습니다"; readonly 'em.check.jpa2': "값 타입(임베더블·직렬화 타입)은 식별자 속성을 가질 수 없습니다: \"{name}\""; readonly 'em.check.jpa4': "식별 관계 사이클입니다 (PK 무한 의존): {path}"; readonly 'em.check.jpa5': "{which}: cascade ALL이 개별 cascade와 중복됩니다 (ALL이 모두 포함)"; readonly 'em.check.jpa7': "{which}: 컬렉션(to-many) 연관에 EAGER 페치는 성능 위험이 있습니다"; readonly 'em.check.jpa8': "JPA 엔티티에 테이블 물리명이 설정되지 않았습니다"; readonly 'em.check.jpa9': "{which}: 단일(to-one) 연관에 컬렉션 메타(collectionType/collectionTable/orderColumn)는 무의미합니다 — @ElementCollection은 컬렉션에서만 적용됩니다"; readonly 'em.check.jpa10': "{which}: SET 컬렉션은 순서를 보존하지 않아 orderColumn(@OrderColumn)이 무의미합니다"; readonly 'em.check.jpa11': "임베드(@Embedded/@ElementCollection)는 식별 관계로 둘 수 없습니다 — 임베더블은 독립 식별자가 없습니다"; readonly 'em.check.jpa12': "식별자(@Id) 속성은 transient(@Transient)일 수 없습니다: \"{name}\""; readonly 'em.check.jpa13AutoIncrement': "채번(auto increment)은 식별자(@Id) 속성에만 쓸 수 있습니다 — 비식별 속성 \"{name}\"에 설정되어 있습니다"; readonly 'em.check.jpa14': "{which}: orphanRemoval은 @ManyToOne/@ManyToMany(반대편이 컬렉션) 연관에는 적용할 수 없습니다 — @OneToOne·@OneToMany에서만 유효합니다"; readonly 'em.check.jpa15': "식별자(@Id) 속성은 자연키(@NaturalId)일 수 없습니다 — 자연키는 PK와 별개의 비즈니스 키입니다: \"{name}\""; readonly 'em.check.jpa16': "자연키(@NaturalId) 속성은 transient(@Transient)일 수 없습니다: \"{name}\""; readonly 'em.check.jpa17': "자연키(@NaturalId) 속성은 not null이 권장됩니다(비즈니스 키는 non-null이 원칙): \"{name}\""; readonly 'em.check.jpa18': "cascade가 관계 양쪽(부모·자식)에 모두 설정되어 양방향 전파됩니다 — 의도치 않은 연쇄 저장/삭제·전파 사이클 위험. 보통 cascade는 한쪽에만 둡니다"; readonly 'em.check.jpa19': "부모에 컬렉션/참조 필드가 있으나 자식({child})에 대응 관계 속성이 없어 JPA 매핑(mappedBy)을 만들 수 없습니다 — 코드젠이 이 관계를 방출하지 못합니다. 자식에 FK 속성을 만들거나 관계를 단방향으로 정리하세요"; readonly 'em.check.jpa20': "복합 PK(@IdClass/@EmbeddedId)에는 채번(@GeneratedValue)을 쓸 수 없습니다 — 속성 \"{name}\"에 설정되어 있습니다"; readonly 'em.check.jpa21Missing': "임베드 \"{name}\"의 컬럼이 임베더블({embeddable}) 선언보다 적습니다 — 슬롯 {slots} / 선언 {declared}. 뒤에 추가된 컬럼이 반영되지 않아 DDL에서 빠집니다(JPA는 임베더블 선언대로 컬럼을 만듭니다)"; readonly 'em.check.jpa21Extra': "임베드 \"{name}\"의 컬럼이 임베더블({embeddable}) 선언보다 많습니다 — 슬롯 {slots} / 선언 {declared}. 임베더블에서 지워진 컬럼이 남아 DDL에 없는 컬럼을 방출합니다"; readonly 'em.check.type1': "타겟 DB가 지원하지 않는 컬럼 타입입니다: \"{dataType}\""; readonly 'em.check.type2': "{dataType} 타입에 length가 지정되지 않았습니다"; readonly 'em.check.type3': "공유 대상 컬럼의 타입({targetType})이 {metaName} 정의({metaType})와 다릅니다"; readonly 'em.check.type4': "다중값(Multi-Value) 속성은 GroupCodeEnum + VARCHAR 조합에서만 컨버터가 자동 생성됩니다 — 현재({type} / {dataType})에서는 Set<…> 필드만 생성되어 매핑이 불완전할 수 있습니다"; readonly 'em.check.type6': "속성 \"{name}\"의 컬럼에 데이터 타입이 지정되지 않았습니다 — DDL에서 이 컬럼이 생략됩니다"; readonly 'em.check.type7': "자바 타입({type})과 컬럼 타입({dataType})이 호환되지 않습니다 — 코드젠 필드와 DDL 컬럼이 서로 다른 타입으로 산출됩니다"; readonly 'em.check.type8': "NULL 허용 컬럼({dataType})이 원시 타입({type})에 매핑됩니다 — DB의 NULL 을 읽는 순간 예외가 납니다. NOT NULL 을 지정하거나 박싱 타입({boxed})으로 바꾸세요"; readonly 'em.check.dsn1': "both-many(M:N) 관계를 조인 엔티티 없이 직접 연결했습니다 — 연관 엔티티 도입을 검토하세요"; readonly 'em.check.dsn2': "속성이 하나도 없는 엔티티입니다"; readonly 'em.check.dsn3': "모델링된 관계가 없습니다 (연관·상속·임베딩 미참여 — 의도적 생략이면 무시)"; readonly 'em.check.dsn4': "속성이 {count}개로 많습니다 (임계치 {threshold} 초과) — 분해를 검토하세요"; readonly 'em.check.dsn5Inherited': "인덱스 \"{name}\"가 참조하는 상속 컬럼을 슈퍼클래스 카탈로그에서 찾을 수 없습니다({field})."; readonly 'em.check.dsn5Missing': "인덱스 \"{name}\"가 존재하지 않는 컬럼을 참조합니다."; readonly 'em.check.dsn6': "인덱스 \"{name}\"에 컬럼이 없습니다 — 컬럼 없는 인덱스는 DDL·코드 생성에서 산출되지 않습니다"; readonly 'em.check.dsn7': "인덱스 \"{name}\"에 같은 컬럼이 두 번 이상 들어 있습니다 — 뒤의 중복 항목은 의미가 없습니다"; readonly 'em.check.unspecified': "미지정"; }; /** 메시지 키 — `ko` 카탈로그의 키 집합(단일 진실 소스). */ export type MessageKey = keyof typeof ko;