refactor: FSD 구조 강화 및 파일 500줄 제한에 따른 대규모 리팩토링

- SpaceWorkspaceWidget 로직을 전용 훅 및 유틸리티로 분리 (900줄 -> 300줄)
- useSpaceWorkspaceSelection 훅을 기능별(영속성, 진단 등) 소형 훅으로 분리
- SpaceToolsDockWidget의 상태 및 핸들러 로직 추출
- 거대 i18n 번역 파일(ko.ts)을 도메인별 메시지 파일로 구조화
- AdminConsoleWidget 누락분 추가 및 미디어 엔티티 타입 오류 수정
This commit is contained in:
2026-03-11 15:08:36 +09:00
parent 7867bd39ca
commit 35f1dfb92d
36 changed files with 3238 additions and 2611 deletions

View File

@@ -0,0 +1,172 @@
export const core = {
appName: 'VibeRoom',
metadata: {
title: 'VibeRoom - 당신만의 편안한 몰입 공간',
description:
'프리랜서와 온전한 집중이 필요한 분들을 위한 따뜻하고 구조화된 온라인 코워킹 스페이스. 작업 타이머, 세션 관리, 그리고 느슨한 연대를 통해 당신의 리듬을 찾아보세요.',
},
common: {
close: '닫기',
cancel: '취소',
save: '저장',
delete: '삭제',
complete: '완료',
select: '선택',
hub: '허브로',
loading: '불러오는 중이에요.',
default: '기본',
defaultBackground: '기본 배경',
admin: '관리자',
requestFailed: (status: number) => `요청 실패: ${status}`,
apiRequestFailed: (status: number) => `API 요청 실패: ${status}`,
},
landing: {
nav: {
features: '기능 소개',
pricing: '요금제',
login: '로그인',
startFree: '무료로 시작하기',
},
hero: {
titleLead: '함께하는 조용한 몰입,',
titleAccent: 'VibeRoom',
description:
'집중하기 어려운 순간, 당신을 다그치지 않는 편안한 공간으로 들어오세요. 구조화된 코워킹 세션과 느슨한 연대가 당신의 페이스를 되찾아 줍니다.',
primaryCta: '나만의 공간 만들기',
secondaryCta: '더 알아보기',
timerPreview: '45:00 남음',
},
features: {
title: '당신을 위한 다정한 몰입 장치',
description: '단순한 타이머가 아닙니다. 무리하지 않고 오래 지속할 수 있는 환경을 제공합니다.',
items: [
{
icon: '⏳',
title: '구조화된 세션 타이머',
description:
'부담 없이 시작할 수 있는 짧은 몰입과 확실한 휴식. 당신만의 작업 리듬을 부드럽게 설정하고 관리하세요.',
},
{
icon: '🌱',
title: '다정한 연대와 코워킹',
description:
'화면 너머 누군가와 함께하는 바디 더블링 효과. 감시가 아닌, 조용하지만 강력한 동기를 서로 나누어보세요.',
},
{
icon: '🛋️',
title: '나만의 심미적 공간',
description:
'비 오는 다락방, 햇살 드는 카페. 백색소음과 함께 내가 가장 편안함을 느끼는 가상 공간을 꾸미고 머무르세요.',
},
],
},
pricing: {
title: '나에게 맞는 공간 선택하기',
description: '개인의 가벼운 집중부터 프리랜서의 완벽한 워크스페이스까지.',
plans: {
starter: {
name: 'Starter',
subtitle: '가벼운 집중이 필요한 분',
price: '무료',
cta: '무료로 시작하기',
features: ['기본 가상 공간 테마', '1:1 파트너 매칭 (주 3회)', '오픈 코워킹 룸 입장'],
},
pro: {
badge: '추천',
name: 'Pro',
subtitle: '방해 없는 완벽한 몰입 환경',
price: '₩6,900',
priceSuffix: '/월',
cta: 'Pro 시작하기',
features: [
'프리미엄 테마 무제한',
'1:1 매칭 무제한',
'고급 집중 통계 및 리포트',
'공간 커스텀 아이템 제공',
],
},
teams: {
name: 'Teams',
subtitle: '리모트 워크 기업 및 팀',
price: '₩12,000',
priceSuffix: '/인·월',
cta: '도입 문의하기',
features: ['Pro 플랜의 모든 기능', '프라이빗 팀 스페이스', '팀 전체 생산성 대시보드'],
},
},
},
footer: {
description:
'프리랜서와 온전한 집중이 필요한 분들을 위한 따뜻하고 구조화된 온라인 코워킹 스페이스입니다.',
productTitle: '제품',
companyTitle: '회사',
links: {
features: '기능 소개',
pricing: '요금제',
webLogin: '웹앱 로그인',
about: '소개',
privacy: '개인정보처리방침',
terms: '이용약관',
},
copyright: '© 2026 VibeRoom. All rights reserved.',
},
},
login: {
title: '다시 오셨군요!',
descriptionFirstLine: '비밀번호를 외울 필요 없이,',
descriptionSecondLine: '사용 중인 계정으로 3초 만에 시작하세요.',
agreementPrefix: '로그인함으로써 VibeRoom의',
agreementAnd: '및',
terms: '이용약관',
privacy: '개인정보처리방침',
agreementSuffix: '에 동의하게 됩니다.',
},
auth: {
social: {
connecting: '연결 중...',
continueWithGoogle: 'Google로 계속하기',
continueWithApple: 'Apple로 계속하기',
continueWithFacebook: 'Facebook으로 계속하기',
},
errors: {
loginFailed: '로그인에 실패했습니다. 다시 시도해 주세요.',
googleFailed: '구글 로그인에 실패했습니다. 팝업 차단 여부를 확인해 주세요.',
appleFailed: '애플 로그인 중 오류가 발생했습니다.',
appleInitFailed: '애플 로그인 초기화 실패',
facebookFailed: '페이스북 로그인에 실패했습니다.',
},
},
modal: {
closeAriaLabel: '모달 닫기',
closeButton: '닫기',
},
media: {
manifestLoadFailed: '미디어 manifest를 불러오지 못했어요.',
},
preferences: {
defaultNotificationIntensity: '기본',
loadFailed: '설정을 불러오지 못했어요.',
saveFailed: '설정을 저장하지 못했어요.',
saved: '저장됨',
saveFailedLabel: '저장 실패',
},
focusSession: {
syncFailed: '세션 엔진과 동기화하지 못했어요.',
startFailed: '세션을 시작하지 못했어요.',
pauseFailed: '세션을 일시정지하지 못했어요.',
resumeFailed: '세션을 다시 시작하지 못했어요.',
restartPhaseFailed: '현재 페이즈를 다시 시작하지 못했어요.',
completeFailed: '세션을 완료 처리하지 못했어요.',
abandonFailed: '세션을 종료하지 못했어요.',
},
soundPlayback: {
loadFailed: '사운드 파일을 불러오지 못했어요.',
browserDeferred: '브라우저가 사운드 재생을 보류했어요.',
},
restart30s: {
button: '숨 고르기 30초',
mode: 'BREATHE',
toast: '잠깐 숨 고르고, 다시 천천히 시작해요.',
complete: '준비됐어요. 집중으로 돌아가요.',
},
} as const;