2.1 KiB
2.1 KiB
2026-03-27: 다국어 지원(i18n) 구현
개요
Kord 봇의 모든 사용자 표시 텍스트를 다국어로 제공하는 i18n 시스템을 구현했습니다.
변경된 파일
신규 생성
| 파일 | 설명 |
|---|---|
src/i18n/types.ts |
I18nProvider 인터페이스, TranslationSchema, SupportedLocale 타입 정의 |
src/i18n/index.ts |
t() 번역 함수, resolveLocale(), StaticI18nProvider, setI18nProvider() |
src/i18n/locales/en.ts |
영어 번역 (전체 키 — 에러, 음성채널, 명령어, 모달, 셀렉트 메뉴) |
src/i18n/locales/ko.ts |
한국어 번역 |
src/i18n/localeHelper.ts |
getInteractionLocale(), getContextLocale() 헬퍼 |
src/commands/language.ts |
/language 슬래시 명령어 (user/server scope) |
tests/i18n/i18n.test.ts |
i18n 유닛 테스트 (14 tests) |
수정
| 파일 | 변경 내용 |
|---|---|
src/errors/BotError.ts |
userMessage/resolution → messageKey (i18n 키) |
src/errors/ErrorCodes.ts |
BotError 인스턴스 → ErrorDef 경량 정의 객체 |
src/errors/ErrorReporter.ts |
locale 파라미터 추가, t() 함수로 메시지 해석 |
src/events/interactionCreate.ts |
모든 하드코딩 문자열 → t(locale, key, vars) |
src/services/VoiceService.ts |
컨트롤 패널, 채널명, 응답 → t() 사용 |
src/commands/voiceSetup.ts |
응답 + setDescriptionLocalizations() 적용 |
prisma/schema.prisma |
GuildConfig.locale 추가, UserLocale 모델 신설 |
아키텍처 결정
- I18nProvider 인터페이스:
setI18nProvider()로 런타임에 번역 백엔드 교체 가능 - TypeScript 객체 기반 번역: 타입 안전성 + IDE 자동완성 활용
- Locale 우선순위: 사용자 DB → 서버 DB → Discord Auto-detect → 영어 fallback
- 서버 로그는 영어 고정: 개발자/운영자 전용
검증 결과
- TypeScript 빌드: 성공 (0 errors)
- 테스트: 6 suites, 39 tests 전체 통과
- DB 마이그레이션:
add-i18n-locale-support완료