Skip to content

예외 메시지 한/영 이중화 기반 작업과 1차 적용 (v1.18.0) - #48

Merged
Mangom72 merged 1 commit into
mainfrom
claude/remote-control-u4tvpt
Jul 27, 2026
Merged

예외 메시지 한/영 이중화 기반 작업과 1차 적용 (v1.18.0)#48
Mangom72 merged 1 commit into
mainfrom
claude/remote-control-u4tvpt

Conversation

@Mangom72

Copy link
Copy Markdown
Owner

영어 UI에서도 오류 대화상자에 한국어 문구가 그대로 나오던 문제를 다룹니다.

접근 방식 — 예외 타입은 바꾸지 않았습니다

전용 예외 타입(LauncherException 등)을 도입하는 게 교과서적이지만, 이 코드베이스에는 catch (InvalidDataException), catch (WebException), catch (CryptographicException)처럼 타입에 의존하는 catch가 20군데 있습니다. 타입을 바꾸면 그 흐름이 전부 달라져 회귀 위험이 큽니다.

대신 타입은 그대로 두고 Exception.Data에 영어 문구만 덧붙였습니다.

throw Localized(new InvalidDataException("운영 기록 파일 크기가 올바르지 않습니다."),
    "The operations-history file size is invalid.");

DescribeException(exception)이 현재 언어에 맞는 문구를 고르고, 영어 문구가 없으면 지금까지와 동일하게 exception.Message를 그대로 반환합니다. 변환하지 않은 경로도 안전하고, 남은 작업을 점진적으로 이어갈 수 있습니다.

적용 범위

표시 경로 30곳ShowMineHarborDialog, ShowLauncherMessage, 상태 레이블, 콘텐츠 작업 표시줄이 현재 언어에 맞는 문구를 고르도록 했습니다.

throw 지점 121곳 변환

파일 변환
DiscordRemoteManagement.cs 41
ServerAutomation.cs 22
OperationsHistory.cs 16
BackgroundAgent.cs 16
ManagedServerHandoff.cs 12
WindowsNotifications.cs 6
ServerTrash.cs 6
StorageConfiguration.cs 2

설정 저장·불러오기와 예약 자동화처럼 사용자가 실제로 오류를 자주 만나는 경로를 우선했습니다.

남은 작업

약 266곳이 아직 한국어 전용입니다: decompiled/Launcher.decompiled.cs(67), ContentManagementServices(60), RuntimeCompatibility(45), BackupAndProfileTools(30), ContentAndDiagnostics(21), DuplicationSettings(16), QuickCommandsAndBridge(12), 그 외.

이 문구들은 영어 문구가 없으므로 기존과 똑같이 한국어로 표시됩니다 — 동작이 나빠지지는 않지만 아직 해결되지도 않았습니다. 387곳을 한 번에 손대는 것보다 나눠서 검증하는 편이 안전하다고 판단했습니다. 다음 담당자는 같은 Localized(new ...) 방식으로 이어가면 되고, docs/ai/SYNC_STATE.md에 파일별 잔여 목록을 남겼습니다.

검증

회귀 테스트 TestLocalizedExceptionMessages가 확인하는 것:

  • 변환 후에도 예외 타입이 InvalidDataException 그대로인지 (catch 절 회귀 방지)
  • 한국어 UI에서는 기존 메시지가 그대로 유지되는지
  • 영어 UI에서 영어 문구가 선택되고, 그 문구에 한글이 남아 있지 않은지
  • 영어 문구가 없는 예외와 null이 기존 동작을 유지하는지

Generated by Claude Code

영어 UI에서도 오류 대화상자에 한국어 문구가 그대로 나오던 문제입니다.

예외 타입은 바꾸지 않았습니다. catch (InvalidDataException)처럼 타입에
의존하는 곳이 20군데 있어 전용 예외 타입을 도입하면 그 흐름이 모두
바뀝니다. 대신 Localized(new XException("한국어"), "English")로
Exception.Data에 영어 문구만 덧붙이고, DescribeException이 현재 언어에
맞는 문구를 고릅니다. 영어 문구가 없는 예외는 지금까지와 동일하게
원래 메시지를 사용하므로 변환하지 않은 경로도 안전합니다.

- 표시 경로 30곳을 DescribeException으로 변경
- throw 지점 121곳 변환: OperationsHistory 16, ManagedServerHandoff 12,
  StorageConfiguration 2, WindowsNotifications 6, ServerTrash 6,
  BackgroundAgent 16, ServerAutomation 22, DiscordRemoteManagement 41

남은 throw 지점 약 266곳은 영어 문구가 없어 기존과 동일하게 한국어로
표시됩니다. 상세 목록은 docs/ai/SYNC_STATE.md에 남겼습니다.

회귀 테스트는 예외 타입 보존, 언어별 문구 선택, 영어 문구에 한글이
남지 않는지, 미변환 예외의 기존 동작 유지를 확인합니다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A4KU6BZL5oWTjH2eDB18Yu
@Mangom72
Mangom72 merged commit 8129728 into main Jul 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants