/* global React */
// ===========================================================
// 다국어 (i18n) — ko / en / zh / ja / es / pt
// 첫 실행 시 OS/브라우저 언어 자동 감지. 설정에서 변경 가능.
// L("key", {var}) 로 번역 문자열 사용. App이 useI18n()로 구독해 전역 리렌더.
// ===========================================================
(function () {
  const DICT = {
    ko: {
      "tab.todo": "할 일", "tab.memo": "메모", "tab.cheat": "명령어", "tab.mail": "메일함", "tab.cal": "달력", "tab.week": "주간", "tab.room": "작업방", "tab.deco": "꾸미기", "tab.settings": "설정",
      "todo.today": "오늘", "todo.backToday": "오늘", "todo.addPh": "할 일 추가…", "todo.addPhDate": "마감 할 일 추가…",
      "todo.emptyToday": "오늘 할 일을 입력칸에 적어주세요", "todo.emptyDate": "{d} 마감 할 일이 없어요 — 위에서 추가할 수 있어요",
      "memo.write": "메모 작성", "memo.saved": "저장된 메모", "memo.new": "새 메모",
      "memo.placeholder": "여기에 메모를 적으면 자동으로 저장돼요. 첫 줄이 제목이 됩니다.",
      "memo.empty": "위 칸에 메모를 적으면 여기에 쌓여요",
      "memo.untitled": "(빈 메모)", "memo.delete": "삭제",
      "memo.delConfirm": "\"{x}\" 메모를 삭제할까요?",
      "memo.buddies": "메모 친구목록", "memo.newDraft": "새 메모", "memo.newHint": "대화 시작하듯 메모를 작성하세요",
      "memo.chatHint": "자동으로 저장돼요", "memo.changeIcon": "아이콘 바꾸기",
      "memo.buddyWindow": "메모", "memo.category": "메모",
      "memo.searchPh": "메모 검색…", "memo.searchNone": "검색 결과가 없어요",
      "memo.searchResult": "{n}/{t}개 표시", "memo.totalCount": "{n}개 메모",
      "memo.sort": "정렬", "memo.sortRecent": "최근 수정", "memo.sortTitle": "제목순", "memo.sortCreated": "만든 순",
      "memo.cleanEmpty": "빈 메모 정리", "memo.cleanConfirm": "빈 메모 {n}개를 삭제할까요?", "memo.noEmpty": "정리할 빈 메모가 없어요",
      "memo.editHint": "자유롭게 쓰기 — 자동 저장돼요",
      "memo.bold": "굵게", "memo.italic": "기울임", "memo.underline": "밑줄", "memo.strike": "취소선",
      "memo.highlight": "형광펜", "memo.bullet": "글머리 기호", "memo.number": "번호 매기기",
      "memo.sizeS": "작게", "memo.sizeN": "보통", "memo.sizeL": "크게", "memo.sizeXL": "아주 크게",
      "memo.sizeDown": "글자 작게", "memo.sizeUp": "글자 크게",
      "memo.fontHand": "손글씨", "memo.fontSerif": "세리프", "memo.fontMono": "고정폭", "memo.fontSans": "기본",
      "memo.heading": "단락 스타일", "memo.hBody": "본문", "memo.h1": "제목 1", "memo.h2": "제목 2", "memo.h3": "제목 3",
      "memo.alignLeft": "왼쪽 정렬", "memo.alignCenter": "가운데 정렬", "memo.alignRight": "오른쪽 정렬",
      "memo.quote": "인용", "memo.hr": "구분선", "memo.clearFormat": "서식 지우기",
      "memo.manage": "메모 관리", "memo.managePlaceholder": "여기에 검색·정렬·일괄정리 기능이 들어갈 예정이에요.",
      "memo.msgCount": "{n}개 메시지", "memo.empty2": "(빈 메모)",
      "memo.back": "목록으로",
      "memo.editEmpty": "아래 입력칸에 적어 Enter를 누르면 위에 쌓여요",
      "memo.inputPh": "메시지를 입력하고 Enter… (Shift+Enter 줄바꿈)",
      "memo.editing": "수정 중… Enter 저장 · Esc 취소",
      "memo.send": "보내기", "memo.save": "저장",
      "memo.color": "글자색", "memo.size": "크기", "memo.font": "폰트",
      "memo.image": "사진 첨부", "memo.link": "링크 추가",
      "memo.linkUrl": "링크 URL (https://…)", "memo.linkLabel": "표시할 글자 (선택)",
      "memo.imageTooLarge": "이미지가 너무 커요 (600KB 이하 권장)",
      "memo.edit": "수정", "memo.msgDelete": "이 메시지 삭제",
      "memo.msgDelConfirm": "이 메시지를 삭제할까요?",
      "memo.cancelEdit": "취소",
      "proj.menu": "프로젝트", "proj.new": "＋ 새 프로젝트 추가", "proj.rename": "✎ 이름 변경", "proj.delete": "✕ \"{name}\" 삭제",
      "proj.newPrompt": "새 프로젝트 이름", "proj.renamePrompt": "프로젝트 이름 변경", "proj.fallback": "프로젝트",
      "proj.deleteConfirm": "\"{name}\" 프로젝트를 삭제할까요? (할 일 등 데이터는 그대로 남음)",
      "todo.need": "해야 할 일", "todo.done": "한 일", "todo.add": "할 일 추가…",
      "todo.excelColDone": "완료", "todo.excelColTitle": "할 일",
      "todo.excelColSchedule": "일정", "todo.excelColTime": "시간",
      "todo.excelSheetTabs": "할 일 시트", "todo.excelResizeCol": "열 너비 조절",
      "todo.excelFooterAria": "할 일 집계",
      "todo.excelFooterPct": "{n}%",
      "todo.excelStatusCount": "개수", "todo.excelStatusDoneN": "완료",
      "todo.excelQuickAddPh": "할 일 추가… (Enter로 바로 입력)",
      "todo.excelStatusNow": "지금", "todo.excelStatusNowNone": "일정 없음",
      "todo.excelGroupProgress": "{total}개 중 {done} 완료",
      "todo.excelGroupScheduled": "예정", "todo.excelGroupNoDue": "기한 없음",
      "todo.excelGroupCount": "{n}개",
      "todo.excelTracking": "진행 중",
      "todo.excelTrackStart": "타이머 시작 — 이 할 일에 시간 기록",
      "todo.excelTrackStop": "타이머 중지",
      "todo.excelTrackedTime": "측정 시간 {t}",
      "todo.excelStatusCountN": "{n}개",
      "todo.excelCalShow": "달력 펼치기", "todo.excelCalHide": "달력 접기",
      "todo.excelCalForced": "날짜 지정 중에는 달력이 항상 펼쳐져요",
      "todo.excelTabWeek": "주간", "todo.excelTabStats": "통계",
      "todo.excelCsvExport": "CSV 내보내기",
      "todo.excelStatsDow": "요일", "todo.excelStatsDist": "분포", "todo.excelStatsTotal": "합계",
      "todo.excelPaneTodoHint": "오늘 할 일 — 표 형태로 투두리스트를 추가·관리합니다",
      "todo.excelPaneTimetableHint": "일주일 시간표 — 이번 주(월–일) 시간별 일정을 배치합니다",
      "todo.excelNowScheduleAria": "지금 해당 일정", "todo.excelNowScheduleLabel": "지금 해당", "todo.excelNowScheduleEmpty": "지금 시간에 해당하는 일정이 없어요",
      "todo.excelNowScheduleTime": "시간", "todo.excelNowScheduleTitle": "일정",
      "todo.excelNowFilterOn": "지금 해당 할 일만 보기", "todo.excelNowFilterOff": "전체 할 일 보기",
      "todo.excelNowFilterBlock": "이 일정에 연결된 할 일만 보기",
      "todo.excelPaneGraphHint": "주간 대시보드 — 작업시간·완료율·총계를 한눈에 봅니다",
      "todo.excelStatusTimer": "타이머",
      "todo.excelTimetableTime": "시간",
      "todo.excelWeekScheduleTitle": "{range}",
      "todo.excelScheduleLink": "일정 연결", "todo.excelScheduleUnlink": "연결 해제",
      "todo.excelScheduleLinkEmpty": "이 날짜에 등록된 일정이 없어요. 일주일 시간표에서 먼저 추가하세요.",
      "todo.excelSchedulePrep": "준비 할 일", "todo.excelSchedulePrepAdd": "준비 할 일 추가",
      "todo.excelSchedulePrepEmpty": "연결된 할 일 없음",
      "todo.excelScheduleDropHint": "오늘 할 일에서 끌어다 이 블록에 놓아도 연결됩니다",
      "todo.excelScheduleColor": "색상",
      "todo.excelScheduleDockCreate": "새 일정", "todo.excelScheduleDockEdit": "일정 편집",
      "todo.excelScheduleConfirm": "등록", "todo.excelScheduleCancel": "취소", "todo.excelScheduleClose": "닫기",
      "todo.excelScheduleDelete": "삭제", "todo.excelTimetableDefault": "일정",
      "todo.excelTimetablePrompt": "일정 이름", "todo.excelTimetableEditPrompt": "일정 이름 (비우면 삭제)",
      "todo.excelDashboardWeek": "주간 통계 ({range})",
      "todo.excelDashCompletion": "완료율",
      "todo.excelDashDailyAvg": "일평균", "todo.excelDashStreak": "연속",
      "todo.excelDashActiveDays": "활동일", "todo.excelDashActiveDaysVal": "{n}일",
      "todo.doneAt": "완료 {t}",
      "set.excelGrid": "표 격자선", "set.excelGridHint": "할 일 표의 세로·가로 구분선을 표시해요.",
      "todo.emptyNeed": "아래 입력칸에 할 일을 적어주세요", "todo.emptyDone": "끝낸 일이 여기에 쌓여요",
      "cheat.registered": "등록한 명령어", "cheat.frequent": "주로 쓰는 명령어", "cheat.add": "명령어 추가…",
      "cheat.emptyReg": "위 입력칸에 명령어를 적어 저장하세요", "cheat.emptyFreq": "자주 쓰면 여기에 올라와요 (복사 시 카운트)",
      "cheat.label": "(라벨)", "cheat.uses": "{n}회", "cheat.delConfirm": "\"{x}\" 을(를) 삭제할까요?",
      "prompt.delConfirm": "이 프롬프트를 삭제할까요?",
      "mail.received": "받은 문의", "mail.draft": "메일 초안", "mail.paste": "받은 메일 붙여넣기…", "mail.add": "담기",
      "mail.markReplied": "답장함으로 표시", "mail.replied": "✓ 답장함", "mail.site": "사이트 열기", "mail.siteConnect": "사이트 연결",
      "mail.draftLabel": "답장 초안", "mail.emptyTop": "받은 메일을 붙여넣어 담아보세요",
      "mail.emptyBottom": "위에서 받은 문의를 선택하면 여기서 초안을 적을 수 있어요",
      "mail.draftPlaceholder": "답장 초안을 적어두세요…", "mail.noTitle": "(제목 없음)", "mail.inquiry": "받은 문의",
      "mail.sitePrompt": "이 메일의 답장/플랫폼 주소 (예: https://mail.google.com/...)",
      "mail.back": "목록", "mail.copyDraft": "초안 복사", "mail.noBody": "(본문 없음)",
      "mail.presets": "빠른 답장 프리셋", "mail.presetEmpty": "자주 쓰는 답장 문구를 등록해두세요",
      "mail.presetNew": "프리셋 추가", "mail.presetLabel": "라벨 (예: 환불 안내)", "mail.presetText": "답장 문구",
      "mail.presetSave": "저장", "mail.presetCancel": "취소",
      "mail.presetDelConfirm": "이 프리셋을 삭제할까요?",
      "mail.useApplied": "프리셋이 초안에 적용됐어요",
      "cal.todayBtn": "오늘로", "cal.note": "오늘의 메모 · 일기를 적어보세요…",
      "cal.done": "{n}개 완료", "cal.mails": "{n}개 메일",
      "planner.title": "WEEKLY PLANNER", "planner.notes": "Notes",
      "planner.notesPh": "이 주의 메모를 적어보세요…",
      "planner.mon": "월요일", "planner.tue": "화요일", "planner.wed": "수요일", "planner.thu": "목요일",
      "planner.fri": "금요일", "planner.sat": "토요일", "planner.sun": "일요일",
      "planner.today": "오늘", "planner.add": "추가", "planner.addPh": "할 일 적고 Enter…",
      "planner.prev": "이전 주", "planner.next": "다음 주", "planner.thisWeek": "이번 주",
      "planner.weekTotal": "이번 주 총 작업시간",
      "planner.unattributed": "미분류",
      "dday.set": "설정", "dday.dday": "D-DAY", "dday.title": "디데이 설정", "dday.label": "디데이",
      "dday.namePlaceholder": "이름 (예: 출시)", "dday.clear": "날짜 지우기",
      "music.add": "유튜브 링크를 추가하세요 ♫", "music.loading": "재생 준비 중…",
      "music.playlist": "플레이리스트 ♫", "music.paste": "유튜브 링크 붙여넣기", "music.err": "유튜브 링크를 인식하지 못했어요", "music.empty": "유튜브 링크를 붙여넣어 곡을 추가하세요",
      "music.prev": "이전 곡", "music.next": "다음 곡", "music.play": "재생", "music.pause": "일시정지", "music.volume": "볼륨",
      "app.close": "앱 종료", "app.minimize": "최소화", "app.miniMode": "도크 미니화",
      "set.dockHide": "도크 미니화", "set.dockHideHint": "도크를 작은 정보 띠로 줄여요. 띠를 클릭하면 다시 열려요.",
      "set.dockReveal": "도크 다시 열기",
      "set.dockMiniTip": "끌어서 이동 · ⤢ 또는 더블클릭 · Esc 로 도크 열기",
      "set.tabsAutoHide": "탭 자동 숨김", "set.tabsAutoHideHint": "옆에 삐죽 나온 탭을 숨기고, 가장자리에 마우스를 1초간 올리면 다시 나타나요.",
      "timer.next": "다음 스트레칭", "work.title": "오늘 작업한 시간",
      "timer.clickPause": "클릭: 일시정지", "timer.clickResume": "클릭: 시작/재개",
      "stretch.tip0": "어깨 한 번 돌리고 와요", "stretch.tip1": "목을 천천히 좌우로", "stretch.tip2": "허리 펴고 깊게 숨 한 번",
      "stretch.tip3": "손목 한 바퀴 돌리기", "stretch.tip4": "눈 깜빡깜빡, 멀리 한 번 보기", "stretch.tip5": "잠깐 일어서서 기지개", "stretch.tip6": "물 한 모금 어떠세요?",
      "header.todayTitle": "오늘 — {date}", "header.todaySub": "작업 {minutes}m · {todos}개 할 일 · {mail}개 미답 메일",
      "header.todoSub": "{left}개 남음 · {hot}개 급함", "header.memoSub": "{project} · {count}개 · {autosave}",
      "header.promptTitle": "프롬프트 함", "header.promptSub": "{count}개 보관됨 · {sortHint}",
      "header.mailTitle": "고객 문의", "header.mailSub": "{unreplied}개 미답 · {replyHint}",
      "header.retroTitle": "회고", "header.retroSub": "{retroHint}", "header.calSub": "주간 플래너 · {autosave}",
      "header.autosave": "자동 저장", "header.sortByUse": "자주 쓰는 순", "header.replyHint": "답장 체크하면 자동 정리",
      "header.retroHint": "날짜별 한 개 · 자동 저장",
      "kbd.todoPh": "할 일 추가…  (Enter 저장 · Shift+Enter 줄바꿈)", "kbd.memoPh": "메모 추가…  (Enter 저장 · Shift+Enter 줄바꿈)",
      "kbd.mailPh": "받은 메일 붙여넣고 Enter…  (Shift+Enter 줄바꿈)", "kbd.calPh": "이 날짜에 메모 추가…  (Enter 저장)",
      "kbd.submit": "추가 (Enter)",
      "deco.pickColor": "색 선택", "deco.pickColorCustom": "직접 색 선택",
      "fakeIde.caption": "✿ 이건 참고용 페이크 IDE — 다이어리가 실제로 어디 도킹되는지 보여주려고",
      "fakeIde.taskbarApp": "♡ 다이어리", "fakeIde.taskbarStatus": "{clock} · {stretch} {remain}m",
      "retro.todayLabel": "오늘 · {date}", "retro.textPh": "오늘 어땠나요? 한 줄도 충분해요.",
      "retro.goodLabel": "👍 잘된 것", "retro.goodPh": "잘된 일 (선택)", "retro.badLabel": "👎 막힌 것", "retro.badPh": "안 풀린 일 (선택)",
      "retro.pastTitle": "지난 회고 · {n}", "retro.pastEmpty": "지난 회고가 없어요 — 매일 한 줄씩 쌓아봐요", "retro.optional": "(선택)",
      "finish.title": "오늘 작업 마치기", "finish.workMin": "⏱ {minutes}m 작업", "finish.doneCount": "✓ {n}개 완료",
      "finish.oneLine": "오늘 한 줄", "finish.aiThinking": "생각 중…", "finish.aiDraft": "✨ AI 초안",
      "finish.doneToday": "오늘 끝낸 일", "finish.closeContinue": "닫기 (계속 작업)", "finish.finishToday": "✓ 오늘 마치기",
      "common.fail": "실패", "common.copy": "복사", "common.optional": "(선택)",
      "ai.title": "AI 세션 북마크", "ai.sub": "이 프로젝트 · {n}개 · 굿/별로 + 한 줄 메모",
      "ai.addNew": "+ 새 북마크 추가", "ai.titlePh": "세션 한 줄 요약 (예: Auth 흐름 설계)", "ai.notePh": "기억할 메모 (선택)",
      "ai.goodBtn": "● 굿", "ai.badBtn": "○ 별로", "ai.goodShort": "굿", "ai.badShort": "별로", "ai.toggle": "굿/별로 토글",
      "ai.empty": "이 프로젝트의 AI 세션 기록이 없어요", "ai.todayPrefix": "오늘 · ", "ai.noteAddPh": "메모 추가…",
      "prompt.searchPh": "제목으로 찾기…", "prompt.addNew": "+ 새 프롬프트 저장", "prompt.bodyPh": "자주 쓰는 프롬프트 본문…",
      "prompt.emptySearch": "검색 결과 없음", "prompt.empty": "프롬프트가 없어요 — 위에서 추가해보세요",
      "prompt.bodyEditPh": "프롬프트 본문", "prompt.uses": "{n}회 사용", "prompt.copied": "✓ 복사함", "prompt.copy": "📋 복사",
      "planner.dayDetail": "{month}/{day} 자세히",
      "mood.great": "반짝", "mood.happy": "좋아", "mood.love": "두근", "mood.calm": "잔잔",
      "mood.soso": "그저", "mood.tired": "지침", "mood.sad": "울적", "mood.stress": "꽉참",
      "split.resizeCal": "끌어서 달력 크기 조절 (1주 단위)",
      "proj.folderOpenFail": "폴더 열기 실패: {msg}", "proj.folderDesktopOnly": "폴더 열기는 데스크탑 앱에서만 동작해요.",
      "proj.folderPrompt": "프로젝트 폴더 경로 (예: C:\\\\work\\\\my-repo)", "proj.gitPrompt": "git 저장소 주소 (예: https://github.com/me/repo)",
      "proj.gitConnect": "git 연결", "proj.gitRepo": "git 저장소", "proj.gitConnectTip": "git 주소 연결",
      "proj.folderConnect": "폴더 연결", "proj.folderConnectTip": "폴더 경로 연결",
      "pomo.title": "뽀모도로", "pomo.work": "집중", "pomo.break": "휴식", "pomo.idle": "대기",
      "pomo.start": "시작", "pomo.pause": "일시정지", "pomo.resume": "재개", "pomo.skip": "건너뛰기", "pomo.stop": "정지", "pomo.continue": "계속",
      "pomo.notifyWork": "집중 시간 끝! 잠깐 쉬어요.", "pomo.notifyBreak": "휴식 끝! 다시 시작할까요?",
      "pomo.notifyOn": "시스템 알림 켜짐", "pomo.notifyOff": "시스템 알림 꺼짐",
      "pomo.notifyEnable": "알림 허용", "pomo.notifyHint": "집중·휴식이 끝나면 알려드려요. 앱 안 토스트는 항상 표시됩니다.",
      "pomo.settings": "설정", "pomo.settingsClose": "설정 닫기",
      "pomo.sound": "알림음", "pomo.soundVolume": "알림음 크기", "pomo.soundType": "알림음 종류",
      "pomo.soundChime": "차임", "pomo.soundBell": "벨", "pomo.soundSoft": "부드럽게",
      "pomo.soundTest": "🔔 미리듣기", "pomo.workMin": "집중 (분)", "pomo.breakMin": "휴식 (분)",
      "pomo.minHoldHint": "짧게 누르면 1분 · 1.5초 이상 누르면 빠르게 변경",
      "pomo.minInputHint": "클릭해서 숫자 직접 입력", "pomo.minInput": "분",
      "pomo.durationIdleHint": "시간 변경은 대기 상태에서만 가능해요.",
      "pomo.durationActiveHint": "타이머 진행 중이면 다음 사이클부터 적용돼요.",
      "pomo.notifyLabel": "시스템 알림",
      "pomo.sectionTime": "시간", "pomo.sectionSound": "알림음", "pomo.sectionNotify": "알림",
      "set.pomodoro": "뽀모도로 타이머", "set.pomodoroHint": "켜면 상단 상태표(디데이 옆)에 뽀모도로가 나타나요.",
      "worktrack.runningOn": "작업 시간 측정 중 · 클릭하면 일시정지",
      "worktrack.runningOff": "측정 멈춤 · 클릭하면 다시 시작",
      "app.close": "앱 종료",
      "worktrack.settingsTip": "작업 시간 설정",
      "worktrack.settingsTitle": "작업 시간 설정",
      "worktrack.accumulated": "누적 시간",
      "worktrack.pendingSec": "현재 진행",
      "worktrack.pendingHint": "아직 1분에 합산되지 않은 초예요. 측정 중일 때만 자동으로 올라갑니다.",
      "worktrack.tracking": "자동 측정",
      "worktrack.resetBtn": "0으로 초기화",
      "worktrack.resetTip": "오늘 작업 시간 0으로 초기화",
      "worktrack.resetConfirm": "오늘 누적된 작업 시간을 0으로 만들까요?",
      "worktrack.resetConfirmDate": "{d} 작업 시간을 0으로 만들까요?",
      "worktrack.presets": "빠른 추가",
      "worktrack.byProject": "프로젝트별",
      "worktrack.unclassified": "미분류",
      "worktrack.sectionOptions": "표시 · 자동",
      "worktrack.showSeconds": "초 단위 표시",
      "worktrack.dailyGoal": "일일 목표 (분)",
      "worktrack.goalTip": "오늘 목표 {n}분",
      "worktrack.autoPauseBlur": "창 비활성 시 정지",
      "worktrack.autoPauseIdle": "유휴 정지 (분)",
      "worktrack.autoPauseIdleHint": "0이면 끔. 입력한 분 동안 입력이 없으면 자동으로 측정을 멈춥니다.",
      "worktrack.sessionLogs": "작업 세션",
      "worktrack.editDate": "날짜",
      "worktrack.tabTime": "시간",
      "worktrack.tabProject": "프로젝트",
      "worktrack.tabPrefs": "환경",
      "worktrack.noSessions": "기록된 세션이 없어요",
      "worktrack.noProjects": "프로젝트별 기록이 없어요",
      "set.dock": "도크 위치", "set.left": "왼쪽", "set.right": "오른쪽",
      "set.dockHide": "도크 미니화", "set.dockHideHint": "도크를 작은 정보 띠로 줄여요. 띠를 클릭하면 다시 열려요.",
      "set.dockReveal": "도크 다시 열기",
      "set.dockMiniTip": "끌어서 이동 · ⤢ 또는 더블클릭 · Esc 로 도크 열기",
      "set.tabsAutoHide": "탭 자동 숨김", "set.tabsAutoHideHint": "옆에 삐죽 나온 탭을 숨기고, 가장자리에 마우스를 1초간 올리면 다시 나타나요.",
      "set.todayShort": "오늘",
      "set.tabDir": "인덱스 탭 방향", "set.outer": "바깥쪽", "set.inner": "안쪽",
      "set.desktop": "데스크탑 모드 (투명 창)", "set.desktopHint": "켜면 도크만 떠 있고 바탕·코드 배경은 숨겨져요. 데스크탑 앱에서 바탕화면이 비칩니다.",
      "set.on": "켜짐", "set.off": "꺼짐",
      "set.alwaysOnTop": "항상 위에 띄우기", "set.alwaysOnTopHint": "켜면 다른 창 위에 항상 올라와 있어요.",
      "set.roomTab": "작업방 탭", "set.roomTabHint": "끄면 사이드의 작업방 탭이 사라져요. 혼자 쓸 때는 꺼두세요.",
      "set.tab.general": "기본", "set.tab.data": "데이터", "set.tab.support": "문의", "set.tab.advanced": "고급",
      "set.lang": "언어 (Language)", "set.size": "앱 길이", "set.sizeNormal": "기본", "set.sizeMedium": "중간", "set.sizeCompact": "짧게", "set.data": "데이터", "set.reset": "모든 데이터 초기화",
      "set.about": "앱 정보", "set.aboutCaption": "todoary 데스크탑 앱",
      "set.update": "업데이트", "set.updateCheck": "업데이트 확인", "set.updateChecking": "확인 중…",
      "set.updateHint": "새 버전이 있으면 설치 여부를 물어봅니다.",
      "set.updateNone": "현재 최신 버전입니다.", "set.updateDeclined": "업데이트를 미뤘습니다.",
      "set.updateDeferred": "이번 실행에서는 알림을 건너뜁니다.", "set.updateDesktopOnly": "데스크탑 앱에서만 확인할 수 있어요.",
      "set.bugReport": "버그·건의", "set.bugReportCaption": "① 진단 정보 복사 → ② 문의 폼 열기 → 폼에 붙여넣기. 데이터 손실·버그 조사에 쓰입니다.",
      "set.bugReportBtn": "문의 폼 열기", "set.copyDiag": "진단 정보 복사",
      "set.diagCopied": "진단 정보를 복사했습니다. 문의 폼 내용란에 붙여넣어 주세요.",
      "set.diagExplain": "앱 버전, OS(브라우저 정보), 언어, 첫 실행 시 데이터 유무, 손상 기록, localStorage 키 목록이 포함됩니다. 할 일 본문 등 개인 데이터는 없습니다.",
      "set.releasesLink": "릴리스 페이지 열기",
      "set.advancedRoom": "작업방 개발 샌드박스", "set.advancedEmpty": "고급 설정이 없습니다.",
      "set.resetCaption": "프로젝트·할 일·명령어·문의·메모가 모두 지워지고 초기 상태로 돌아갑니다.",
      "set.resetConfirm": "정말 모든 데이터를 지우고 초기 상태로 되돌릴까요?",
      "set.exportBackup": "백업 파일로 보내기",
      "set.importBackup": "백업 파일에서 가져오기",
      "set.importBusy": "가져오는 중…",
      "set.exportDone": "백업 파일을 저장했습니다. ({n}개 항목)",
      "set.backupCaption": "프로젝트·할 일·메모·설정 등 todoary 데이터를 JSON 파일로 저장·복원합니다.",
      "set.importConfirm": "가져오면 현재 데이터가 백업 파일 내용으로 바뀝니다. 계속할까요?",
      "set.importDone": "가져오기가 완료되었습니다. 앱을 다시 불러옵니다.",
      "set.importFail": "백업 파일을 읽지 못했습니다.",
      "set.importFailNoFile": "파일이 선택되지 않았습니다.",
      "set.importFailRead": "파일을 읽지 못했습니다.",
      "set.importFailParse": "JSON 형식이 올바르지 않습니다.",
      "set.importFailFormat": "지원하지 않는 백업 형식입니다.",
      "set.importFailMissing": "백업에 메인 데이터(todoary.v1)가 없습니다.",
      "set.importFailInvalid": "메인 데이터가 손상되었습니다.",
      "set.importFailSchema": "지원하지 않는 데이터 버전입니다.",
      "set.importFailApply": "localStorage에 저장하지 못했습니다.",
      "set.storagePath": "저장 위치",
      "set.storagePathHint": "할 일·메모 등은 WebView 프로필 폴더의 localStorage에 저장됩니다.",
      "set.openStorageFolder": "저장 폴더 열기",
      "set.storageWebOnly": "브라우저에서는 폴더를 열 수 없습니다. 데스크탑 앱에서 이용해 주세요.",
      "store.saveFailed": "데이터를 저장하지 못했습니다. 앱을 다시 시작하기 전에 백업을 권장합니다.",
      "store.saveQuota": "저장 공간이 부족해 데이터를 저장하지 못했습니다. 일부 변경이 사라질 수 있습니다.",
      "store.restoredFromMirror": "저장된 데이터가 비어 있어 자동 백업에서 복구했습니다.",
      "update.prompt": "새 버전 {version}이 있습니다. (현재 {current})\n지금 업데이트할까요?",
      "update.yes": "업데이트",
      "update.later": "미루기",
      "update.installing": "업데이트를 받는 중입니다. 잠시만 기다려 주세요.",
      "update.fail": "업데이트에 실패했습니다.\n{msg}",
      "deco.skin": "스킨", "deco.skinHint": "스킨을 바꾸면 배경·헤더·할 일 줄 모양이 한꺼번에 바뀌어요.",
      "skin.default": "기본", "skin.defaultDesc": "파스텔 테이프와 둥근 선",
      "skin.notion": "흑백", "skin.notionDesc": "흑백·얇은 구분선·기호 UI",
      "skin.excel": "스프레드 시트", "skin.excelDesc": "녹색 리본·셀 격자·줄무늬 행",
      "skin.locked": "이 스킨은 구매 후 라이선스 키로 해제할 수 있어요.",
      "skin.lockedBadge": "잠김",
      "skin.enterKey": "라이선스 키",
      "skin.keyPlaceholder": "Polar 라이선스 키 붙여넣기",
      "skin.redeem": "키로 설치",
      "skin.buy": "구매하기",
      "skin.tauriOnly": "데스크탑 앱에서만 설치할 수 있어요.",
      "skin.keyRequired": "라이선스 키를 입력해 주세요.",
      "skin.licensesConfigMissing": "라이선스 서버 설정이 없습니다 (firebase-licenses-config).",
      "skin.redeemInvalidKey": "라이선스 키가 올바르지 않습니다.",
      "skin.redeemForbidden": "이 키로는 해당 스킨을 사용할 수 없습니다.",
      "skin.redeemNetwork": "네트워크 오류입니다. 연결을 확인한 뒤 다시 시도해 주세요.",
      "skin.redeemBundleMissing": "이 앱 빌드에 스킨 파일이 포함되어 있지 않습니다.",
      "skin.redeemReceiptInvalid": "영수증 검증에 실패했습니다. 앱을 최신 버전으로 업데이트해 주세요.",
      "skin.redeemFailed": "라이선스 등록에 실패했습니다.",
      "deco.theme": "테마", "deco.bg": "배경", "deco.color": "색상",
      "deco.baseTheme": "기본 테마", "deco.myTheme": "내 테마", "deco.save": "＋ 지금 화면을 내 테마로 저장",
      "deco.saveName": "테마 이름", "deco.myThemeName": "내 테마 ",
      "deco.preview": "미리보기", "deco.type": "종류", "deco.linear": "선형", "deco.radial": "원형(오로라)",
      "deco.dir": "방향", "deco.stops": "색 단계", "deco.addColor": "＋ 색 추가",
      "deco.shape": "도형", "deco.shapeNone": "없음", "deco.shapeHeart": "하트", "deco.shapeHearts": "겹하트", "deco.shapeStars": "별", "deco.shapeClover": "클로버", "deco.shapeRibbon": "리본", "deco.shapeFish": "금붕어",
      "deco.point": "포인트 컬러", "deco.chrome": "헤더·바 색 (타이틀바 / 탭)", "deco.headerGrad": "헤더 그라데이션",
      "deco.tape": "테이프", "deco.tapePreview": "미리보기", "deco.tapePattern": "패턴",
      "deco.tapePatternDots": "점무늬", "deco.tapePatternDiag": "사선", "deco.tapePatternGingham": "체크", "deco.tapePatternNone": "없음",
      "deco.tapePalette": "색 팔레트", "deco.tapePin": "핀 고정 색", "deco.tapeAddColor": "＋ 색 추가", "deco.tapeReset": "기본값으로", "deco.tapeResetConfirm": "테이프 설정을 기본값으로 되돌릴까요?",
      "deco.tapePreviewHint": "탭을 눌러 색을 바꿀 수 있어요",
      "deco.tapeSample": "할 일", "deco.tapePinLabel": "핀 고정",
      "deco.tapePickOne": "이 줄만", "deco.tapePickAll": "전체 팔레트",
      "deco.tapeBorder": "테두리", "deco.tapeBorderNone": "없음", "deco.tapeBorderNormal": "보통", "deco.tapeBorderBold": "굵게",
      "deco.tapeBorderSoft": "연하게", "deco.tapeBorderInk": "진하게",
      "deco.tapeEdgeFade": "끝 흐림", "deco.tapePatternColor": "패턴 색",
      "deco.tapeGradient": "1~12 그라데이션", "deco.tapeGradientHint": "1번은 연하게, 12번은 진하게 채워져요",
      "deco.tapeGradLight": "연한 색 (1번)", "deco.tapeGradDark": "진한 색 (12번)", "deco.tapeGradApply": "그라데이션 적용",
      "deco.myTapeTheme": "내 테이프", "deco.myTapeThemeName": "내 테이프 ", "deco.saveTapeTheme": "＋ 지금 테이프 설정 저장",
      "th.basic": "기본", "th.melon": "메론소다", "th.summer": "여름", "th.green": "초록", "th.milk": "딸기우유", "th.peach": "복숭아", "th.lavender": "라벤더", "th.night": "밤하늘",
      "room.title": "우리 작업방", "room.emptyTitle": "함께 작업방",
      "room.emptyHint": "옆에 누가 있는 것처럼 — 조용히 같이 일해요.\n채팅·통화·알림은 없어요.",
      "room.create": "방 만들기", "room.join": "초대 코드로 들어가기",
      "room.namePh": "방 이름 (예: 우리 작업방)", "room.codePh": "초대 코드 6자리",
      "room.copyCode": "코드 복사", "room.copied": "복사됨",
      "room.invite": "초대", "room.leave": "나가기", "room.leaveConfirm": "이 방에서 나갈까요?",
      "room.online": "작업 중", "room.idle": "잠시", "room.offline": "오프라인",
      "room.you": "나", "room.todayTotal": "오늘 우리 방 합계",
      "room.connected": "{n}/4 접속중", "room.full": "방이 꽉 찼어요 (최대 4명)",
      "room.notFound": "그런 방이 없어요", "room.codeInvalid": "초대 코드를 다시 확인해 주세요",
      "room.permission": "Firestore 권한이 부족해요. Firebase 콘솔 → Firestore → Rules 에 firestore.rules 내용을 붙여넣고 게시해 주세요.",
      "room.showTitle": "할 일 제목 공개", "room.hideTitle": "개수만 공개",
      "room.clap": "👏", "room.clapHint": "박수를 보냈습니다",
      "room.clapLog": "박수 보내기", "room.clapDirected": "{from}님이 {to}님에게 박수를 보냈습니다",
      "room.clapCollapsed": "박수 {n}개",
      "room.celebrate": "{name}님이 오늘을 정복했습니다",
      "room.newDay": "새로운 하루가 시작 되었습니다", "room.logEmpty": "오늘 로그가 아직 없어요요",
      "room.todoRegister": "오늘 공유할 할 일", "room.todoRegisterBtn": "채팅창에 등록",
      "room.todoRegistered": "채팅창에 등록됨",
      "room.localMode": "로컬 미리보기 모드 — Firebase 설정이 없어 혼자만 보여요",
      "room.connecting": "연결 중…",
      "room.noTodo": "할 일이 아직 없어요", "room.notWorking": "쉬는 중",
      "room.pickAvatar": "아바타 고르기", "room.namePrompt": "방에서 보일 이름",
      "room.savedMember": "이 방 멤버로 등록됐어요",
      "room.dismissNotice": "공지 닫기",
      "room.logExpand": "펼치기", "room.logCollapse": "접기",
      "room.chatLogsShow": "오늘 대화 {n}건 보기",
      "room.chatLogsHide": "오늘 대화 숨기기",
      "room.chatLogBoxTitle": "오늘 대화",
      "room.headerStats": "{time} · D+{days}",
      "room.levelShort": "Lv.{n}",
      "room.expHint": "경험치 {done}/{total}",
      "room.statusMessageLabel": "상태 메시지",
      "room.statusMessagePh": "짧은 한마디…",
      "room.statusMessageHint": "공백 포함 최대 25자",
      "room.statusMessageCooldownMin": "{min}분 후 다시 등록할 수 있어요",
      "room.statusMessageCooldownSec": "{sec}초 후 다시 등록할 수 있어요",
      "room.statusMessageCooldownMinSec": "{min}분 {sec}초 후 다시 등록할 수 있어요",
      "room.excelTitle": "워크시트1 — 작업방 ({name})",
      "room.excelMembersHead": "멤버 ({n})",
      "room.excelLogTimeCol": "시간",
      "room.excelLogMemberCol": "멤버",
      "room.excelLogCol": "작업 로그",
      "room.excelLogInputPh": "로그 입력하려면 클릭…",
      "room.excelLogSaved": "한마디를 남겼어요",
      "room.excelSharedHead": "{name}의 공유 할 일 ({n})",
      "room.excelConnected": "접속 {n}",
      "room.excelTotal": "총 {t}",
      "memo.excelColTitle": "제목",
      "memo.excelColUpdated": "수정일",
    },
    en: {
      "tab.todo": "Tasks", "tab.memo": "Memos", "tab.cheat": "Commands", "tab.mail": "Mailbox", "tab.cal": "Calendar", "tab.week": "Week", "tab.room": "Work Room", "tab.deco": "Theme", "tab.settings": "Settings",
      "todo.today": "Today", "todo.backToday": "Today", "todo.addPh": "Add a task…", "todo.addPhDate": "due task…",
      "todo.emptyToday": "Type a task in the box above", "todo.emptyDate": "No tasks due on {d} — add one above",
      "memo.write": "Write a memo", "memo.saved": "Saved memos", "memo.new": "New memo",
      "memo.placeholder": "Type here and it saves automatically. The first line becomes the title.",
      "memo.empty": "Memos you write above will pile up here",
      "memo.untitled": "(empty)", "memo.delete": "Delete",
      "memo.delConfirm": "Delete memo \"{x}\"?",
      "memo.buddies": "Memo buddies", "memo.newDraft": "New memo", "memo.newHint": "Write like you're starting a chat",
      "memo.chatHint": "Saves automatically", "memo.changeIcon": "Change icon",
      "memo.buddyWindow": "Memos", "memo.category": "Memos",
      "memo.searchPh": "Search memos…", "memo.searchNone": "No results",
      "memo.searchResult": "{n}/{t} shown", "memo.totalCount": "{n} memos",
      "memo.sort": "Sort", "memo.sortRecent": "Recent", "memo.sortTitle": "Title", "memo.sortCreated": "Created",
      "memo.cleanEmpty": "Clean empty memos", "memo.cleanConfirm": "Delete {n} empty memos?", "memo.noEmpty": "No empty memos to clean",
      "memo.editHint": "Write freely — saved automatically",
      "memo.bold": "Bold", "memo.italic": "Italic", "memo.underline": "Underline", "memo.strike": "Strikethrough",
      "memo.highlight": "Highlight", "memo.bullet": "Bullet list", "memo.number": "Numbered list",
      "memo.sizeS": "Small", "memo.sizeN": "Normal", "memo.sizeL": "Large", "memo.sizeXL": "Huge",
      "memo.sizeDown": "Smaller", "memo.sizeUp": "Larger",
      "memo.fontHand": "Handwriting", "memo.fontSerif": "Serif", "memo.fontMono": "Mono", "memo.fontSans": "Sans",
      "memo.heading": "Block style", "memo.hBody": "Body", "memo.h1": "Heading 1", "memo.h2": "Heading 2", "memo.h3": "Heading 3",
      "memo.alignLeft": "Align left", "memo.alignCenter": "Align center", "memo.alignRight": "Align right",
      "memo.quote": "Quote", "memo.hr": "Divider", "memo.clearFormat": "Clear formatting",
      "memo.manage": "Manage memos", "memo.managePlaceholder": "Search, sort and batch tools will live here.",
      "memo.msgCount": "{n} messages", "memo.empty2": "(empty)",
      "memo.back": "Back to list",
      "memo.editEmpty": "Type below and press Enter to add a message",
      "memo.inputPh": "Type a message and press Enter… (Shift+Enter for newline)",
      "memo.editing": "Editing… Enter to save · Esc to cancel",
      "memo.send": "Send", "memo.save": "Save",
      "memo.color": "Text color", "memo.size": "Size", "memo.font": "Font",
      "memo.image": "Attach image", "memo.link": "Add link",
      "memo.linkUrl": "Link URL (https://…)", "memo.linkLabel": "Label (optional)",
      "memo.imageTooLarge": "Image too large (please keep under 600KB)",
      "memo.edit": "Edit", "memo.msgDelete": "Delete this message",
      "memo.msgDelConfirm": "Delete this message?",
      "memo.cancelEdit": "Cancel",
      "proj.menu": "Project", "proj.new": "＋ New project", "proj.rename": "✎ Rename", "proj.delete": "✕ Delete \"{name}\"",
      "proj.newPrompt": "New project name", "proj.renamePrompt": "Rename project", "proj.fallback": "Project",
      "proj.deleteConfirm": "Delete project \"{name}\"? (tasks and other data remain)",
      "todo.need": "To do", "todo.done": "Done", "todo.add": "Add a task…",
      "todo.excelColDone": "Done", "todo.excelColTitle": "Task",
      "todo.excelColSchedule": "Schedule", "todo.excelColTime": "Time",
      "todo.excelSheetTabs": "Task sheets", "todo.excelResizeCol": "Resize column",
      "todo.excelFooterAria": "Task summary",
      "todo.excelFooterPct": "{n}%",
      "todo.excelStatusCount": "Count", "todo.excelStatusDoneN": "Done",
      "todo.excelQuickAddPh": "Add a task… (Enter to add)",
      "todo.excelStatusNow": "Now", "todo.excelStatusNowNone": "no schedule",
      "todo.excelGroupProgress": "{done} of {total} done",
      "todo.excelGroupScheduled": "Scheduled", "todo.excelGroupNoDue": "No due date",
      "todo.excelGroupCount": "{n}",
      "todo.excelTracking": "In progress",
      "todo.excelTrackStart": "Start timer — track time on this task",
      "todo.excelTrackStop": "Stop timer",
      "todo.excelTrackedTime": "Tracked {t}",
      "todo.excelStatusCountN": "{n}",
      "todo.excelCalShow": "Show calendar", "todo.excelCalHide": "Hide calendar",
      "todo.excelCalForced": "Calendar stays open while picking a date",
      "todo.excelTabWeek": "Week", "todo.excelTabStats": "Stats",
      "todo.excelCsvExport": "Export CSV",
      "todo.excelStatsDow": "Day", "todo.excelStatsDist": "Bars", "todo.excelStatsTotal": "Total",
      "todo.excelPaneTodoHint": "Today's tasks in a spreadsheet grid",
      "todo.excelPaneTimetableHint": "Weekly schedule — place timed events for this week (Mon–Sun)",
      "todo.excelNowScheduleAria": "Current schedule", "todo.excelNowScheduleLabel": "Right now", "todo.excelNowScheduleEmpty": "Nothing scheduled for this time",
      "todo.excelNowScheduleTime": "Time", "todo.excelNowScheduleTitle": "Event",
      "todo.excelNowFilterOn": "Show linked tasks only", "todo.excelNowFilterOff": "Show all tasks",
      "todo.excelNowFilterBlock": "Show tasks for this event only",
      "todo.excelPaneGraphHint": "Weekly dashboard — work time, completion, and totals",
      "todo.excelStatusTimer": "Timer",
      "todo.excelTimetableTime": "Time",
      "todo.excelTimetablePrompt": "Event name", "todo.excelTimetableEditPrompt": "Event name (empty to delete)",
      "todo.excelWeekScheduleTitle": "{range}",
      "todo.excelScheduleLink": "Link event", "todo.excelScheduleUnlink": "Unlink",
      "todo.excelScheduleLinkEmpty": "No events on this day. Add one in the week schedule first.",
      "todo.excelSchedulePrep": "Prep tasks", "todo.excelSchedulePrepAdd": "Add prep task",
      "todo.excelSchedulePrepEmpty": "No linked tasks",
      "todo.excelScheduleDropHint": "Drag tasks from Today onto this block to link",
      "todo.excelScheduleColor": "Color",
      "todo.excelScheduleDockCreate": "New event", "todo.excelScheduleDockEdit": "Edit event",
      "todo.excelScheduleConfirm": "Add", "todo.excelScheduleCancel": "Cancel", "todo.excelScheduleClose": "Close",
      "todo.excelScheduleDelete": "Delete", "todo.excelTimetableDefault": "Event",
      "todo.excelDashboardWeek": "Weekly stats ({range})",
      "todo.excelDashCompletion": "Completion",
      "todo.excelDashDailyAvg": "Daily avg", "todo.excelDashStreak": "Streak",
      "todo.excelDashActiveDays": "Active days", "todo.excelDashActiveDaysVal": "{n}d",
      "todo.doneAt": "Done at {t}",
      "set.excelGrid": "Grid lines", "set.excelGridHint": "Show cell borders on the task spreadsheet.",
      "todo.emptyNeed": "Type a task in the box below", "todo.emptyDone": "Finished tasks pile up here",
      "cheat.registered": "Saved commands", "cheat.frequent": "Frequently used", "cheat.add": "Add a command…",
      "cheat.emptyReg": "Type a command above to save it", "cheat.emptyFreq": "Used ones show up here (counted on copy)",
      "cheat.label": "(label)", "cheat.uses": "{n}×", "cheat.delConfirm": "Delete \"{x}\"?",
      "prompt.delConfirm": "Delete this prompt?",
      "mail.received": "Received", "mail.draft": "Draft", "mail.paste": "Paste received mail…", "mail.add": "Add",
      "mail.markReplied": "Mark replied", "mail.replied": "✓ Replied", "mail.site": "Open site", "mail.siteConnect": "Link site",
      "mail.draftLabel": "Reply draft", "mail.emptyTop": "Paste a received mail to add it",
      "mail.emptyBottom": "Select a received inquiry above to write a draft here",
      "mail.draftPlaceholder": "Write your reply draft…", "mail.noTitle": "(no subject)", "mail.inquiry": "Inquiry",
      "mail.sitePrompt": "Reply/platform URL for this mail (e.g. https://mail.google.com/...)",
      "mail.back": "Inbox", "mail.copyDraft": "Copy draft", "mail.noBody": "(no body)",
      "mail.presets": "Quick reply presets", "mail.presetEmpty": "Save phrases you reuse often",
      "mail.presetNew": "Add preset", "mail.presetLabel": "Label (e.g. Refund)", "mail.presetText": "Reply text",
      "mail.presetSave": "Save", "mail.presetCancel": "Cancel",
      "mail.presetDelConfirm": "Delete this preset?",
      "mail.useApplied": "Preset applied to draft",
      "cal.todayBtn": "Today", "cal.note": "Write today's memo · diary…",
      "cal.done": "{n} done", "cal.mails": "{n} mails",
      "planner.title": "WEEKLY PLANNER", "planner.notes": "Notes",
      "planner.notesPh": "Write notes for this week…",
      "planner.mon": "Monday", "planner.tue": "Tuesday", "planner.wed": "Wednesday", "planner.thu": "Thursday",
      "planner.fri": "Friday", "planner.sat": "Saturday", "planner.sun": "Sunday",
      "planner.today": "today", "planner.add": "add", "planner.addPh": "Type and press Enter…",
      "planner.prev": "Previous week", "planner.next": "Next week", "planner.thisWeek": "This week",
      "planner.weekTotal": "Total this week",
      "planner.unattributed": "Unassigned",
      "dday.set": "set", "dday.dday": "D-DAY", "dday.title": "D-day settings", "dday.label": "D-day",
      "dday.namePlaceholder": "Name (e.g. Launch)", "dday.clear": "Clear date",
      "music.add": "Add a YouTube link ♫", "music.loading": "Loading…",
      "music.playlist": "Playlist ♫", "music.paste": "Paste YouTube link", "music.err": "Couldn't read that YouTube link", "music.empty": "Paste a YouTube link to add a track",
      "music.prev": "Previous", "music.next": "Next", "music.play": "Play", "music.pause": "Pause", "music.volume": "Volume",
      "app.close": "Close app", "app.minimize": "Minimize", "app.miniMode": "Mini mode",
      "set.dockHide": "Minify dock", "set.dockHideHint": "Shrinks the dock to a small info strip. Click the strip to reopen.",
      "set.dockReveal": "Show dock",
      "set.dockMiniTip": "Drag to move · Click to open dock",
      "set.tabsAutoHide": "Auto-hide tabs", "set.tabsAutoHideHint": "Hides the side tabs. Hover the edge for 1 second to bring them back.",
      "timer.next": "Next stretch", "work.title": "Worked today",
      "timer.clickPause": "Click: pause", "timer.clickResume": "Click: start / resume",
      "stretch.tip0": "Roll your shoulders", "stretch.tip1": "Slowly turn your neck side to side",
      "stretch.tip2": "Straighten up and take a deep breath", "stretch.tip3": "Rotate your wrists",
      "stretch.tip4": "Blink and look into the distance", "stretch.tip5": "Stand up and stretch",
      "stretch.tip6": "How about a sip of water?",
      "header.todayTitle": "Today — {date}", "header.todaySub": "{minutes}m worked · {todos} tasks · {mail} unreplied",
      "header.todoSub": "{left} left · {hot} urgent", "header.memoSub": "{project} · {count} · {autosave}",
      "header.promptTitle": "Prompt library", "header.promptSub": "{count} saved · {sortHint}",
      "header.mailTitle": "Customer inbox", "header.mailSub": "{unreplied} unreplied · {replyHint}",
      "header.retroTitle": "Retro", "header.retroSub": "{retroHint}", "header.calSub": "Weekly planner · {autosave}",
      "header.autosave": "auto-save", "header.sortByUse": "most used first",
      "header.replyHint": "mark replied to tidy up", "header.retroHint": "one per day · auto-save",
      "kbd.todoPh": "Add a task…  (Enter save · Shift+Enter newline)",
      "kbd.memoPh": "Add a memo…  (Enter save · Shift+Enter newline)",
      "kbd.mailPh": "Paste received mail, Enter…  (Shift+Enter newline)",
      "kbd.calPh": "Add a note for this date…  (Enter save)", "kbd.submit": "Add (Enter)",
      "deco.pickColor": "Pick color", "deco.pickColorCustom": "Custom color",
      "fakeIde.caption": "✿ Fake IDE for reference — shows where the diary docks",
      "fakeIde.taskbarApp": "♡ Diary", "fakeIde.taskbarStatus": "{clock} · {stretch} {remain}m",
      "retro.todayLabel": "Today · {date}", "retro.textPh": "How was today? One line is enough.",
      "retro.goodLabel": "👍 What went well", "retro.goodPh": "Something good (optional)", "retro.badLabel": "👎 What stuck", "retro.badPh": "Something stuck (optional)",
      "retro.pastTitle": "Past retros · {n}", "retro.pastEmpty": "No past retros yet — add a line each day",
      "retro.optional": "(optional)",
      "finish.title": "Finish work for today", "finish.workMin": "⏱ {minutes}m worked", "finish.doneCount": "✓ {n} done",
      "finish.oneLine": "One line for today", "finish.aiThinking": "Thinking…", "finish.aiDraft": "✨ AI draft",
      "finish.doneToday": "Done today", "finish.closeContinue": "Close (keep working)", "finish.finishToday": "✓ Finish today",
      "common.fail": "Failed", "common.copy": "Copy", "common.optional": "(optional)",
      "ai.title": "AI session bookmarks", "ai.sub": "This project · {n} · thumbs + one-line note",
      "ai.addNew": "+ Add bookmark", "ai.titlePh": "One-line summary (e.g. Auth flow design)", "ai.notePh": "Note to remember (optional)",
      "ai.goodBtn": "● Good", "ai.badBtn": "○ Meh", "ai.goodShort": "Good", "ai.badShort": "Meh", "ai.toggle": "Toggle good/meh",
      "ai.empty": "No AI session bookmarks in this project", "ai.todayPrefix": "Today · ", "ai.noteAddPh": "Add a note…",
      "prompt.searchPh": "Search by text…", "prompt.addNew": "+ Save new prompt", "prompt.bodyPh": "Prompt body you use often…",
      "prompt.emptySearch": "No search results", "prompt.empty": "No prompts yet — add one above",
      "prompt.bodyEditPh": "Prompt body", "prompt.uses": "Used {n}×", "prompt.copied": "✓ Copied", "prompt.copy": "📋 Copy",
      "planner.dayDetail": "{month}/{day} details",
      "mood.great": "Sparkle", "mood.happy": "Good", "mood.love": "Flutter", "mood.calm": "Calm",
      "mood.soso": "So-so", "mood.tired": "Tired", "mood.sad": "Low", "mood.stress": "Tight",
      "split.resizeCal": "Drag to resize calendar (1-week steps)",
      "proj.folderOpenFail": "Couldn't open folder: {msg}", "proj.folderDesktopOnly": "Opening folders works in the desktop app only.",
      "proj.folderPrompt": "Project folder path (e.g. C:\\\\work\\\\my-repo)", "proj.gitPrompt": "Git repo URL (e.g. https://github.com/me/repo)",
      "proj.gitConnect": "Connect git", "proj.gitRepo": "Git repo", "proj.gitConnectTip": "Connect git URL",
      "proj.folderConnect": "Connect folder", "proj.folderConnectTip": "Connect folder path",
      "pomo.title": "Pomodoro", "pomo.work": "Focus", "pomo.break": "Break", "pomo.idle": "Idle",
      "pomo.start": "Start", "pomo.pause": "Pause", "pomo.resume": "Resume", "pomo.skip": "Skip", "pomo.stop": "Stop", "pomo.continue": "Continue",
      "pomo.notifyWork": "Focus time is up — take a break!", "pomo.notifyBreak": "Break is over — ready to focus again?",
      "pomo.notifyOn": "System notifications on", "pomo.notifyOff": "System notifications off",
      "pomo.notifyEnable": "Allow notifications", "pomo.notifyHint": "Alerts when focus or break ends. In-app toast always shows.",
      "pomo.settings": "Settings", "pomo.settingsClose": "Close settings",
      "pomo.sound": "Sound", "pomo.soundVolume": "Sound volume", "pomo.soundType": "Sound type",
      "pomo.soundChime": "Chime", "pomo.soundBell": "Bell", "pomo.soundSoft": "Soft",
      "pomo.soundTest": "🔔 Preview", "pomo.workMin": "Focus (min)", "pomo.breakMin": "Break (min)",
      "pomo.minHoldHint": "Tap ±1 · hold 1.5s for fast change",
      "pomo.minInputHint": "Click to type a number", "pomo.minInput": "Minutes",
      "pomo.durationIdleHint": "Change durations only while idle.",
      "pomo.durationActiveHint": "While the timer is running, changes apply from the next cycle.",
      "pomo.notifyLabel": "System notifications",
      "pomo.sectionTime": "Duration", "pomo.sectionSound": "Sound", "pomo.sectionNotify": "Alerts",
      "set.pomodoro": "Pomodoro timer", "set.pomodoroHint": "Shows Pomodoro in the header status table (next to D-day).",
      "worktrack.runningOn": "Tracking work time · click to pause",
      "worktrack.runningOff": "Paused · click to resume tracking",
      "app.close": "Close app",
      "worktrack.settingsTip": "Work time settings",
      "worktrack.settingsTitle": "Work time settings",
      "worktrack.accumulated": "Accumulated",
      "worktrack.pendingSec": "In progress",
      "worktrack.pendingHint": "Seconds not yet rolled into a minute. Increases automatically while tracking.",
      "worktrack.tracking": "Auto tracking",
      "worktrack.resetBtn": "Reset to 0",
      "worktrack.resetTip": "Reset today's work time to 0",
      "worktrack.resetConfirm": "Reset today's accumulated work time to 0?",
      "worktrack.resetConfirmDate": "Reset work time for {d} to 0?",
      "worktrack.presets": "Quick add",
      "worktrack.byProject": "By project",
      "worktrack.unclassified": "Unclassified",
      "worktrack.sectionOptions": "Display · auto",
      "worktrack.showSeconds": "Show seconds",
      "worktrack.dailyGoal": "Daily goal (min)",
      "worktrack.goalTip": "Today's goal: {n} min",
      "worktrack.autoPauseBlur": "Pause when inactive",
      "worktrack.autoPauseIdle": "Idle pause (min)",
      "worktrack.autoPauseIdleHint": "0 = off. Stops tracking after this many idle minutes.",
      "worktrack.sessionLogs": "Work sessions",
      "worktrack.editDate": "Date",
      "worktrack.tabTime": "Time",
      "worktrack.tabProject": "Projects",
      "worktrack.tabPrefs": "Prefs",
      "worktrack.noSessions": "No sessions recorded",
      "worktrack.noProjects": "No per-project records",
      "set.dock": "Dock side", "set.left": "Left", "set.right": "Right",
      "set.dockHide": "Minify dock", "set.dockHideHint": "Shrinks the dock to a small info strip. Click the strip to reopen.",
      "set.dockReveal": "Show dock",
      "set.dockMiniTip": "Drag to move · Click to open dock",
      "set.tabsAutoHide": "Auto-hide tabs", "set.tabsAutoHideHint": "Hides the side tabs. Hover the edge for 1 second to bring them back.",
      "set.todayShort": "Today",
      "set.tabDir": "Tab direction", "set.outer": "Outward", "set.inner": "Inward",
      "set.desktop": "Desktop mode (transparent)", "set.desktopHint": "Shows only the dock panel; hides the fake IDE background. In the desktop app, the wallpaper shows through.",
      "set.on": "On", "set.off": "Off",
      "set.alwaysOnTop": "Always on top", "set.alwaysOnTopHint": "Keeps the window above other apps.",
      "set.roomTab": "Work Room tab", "set.roomTabHint": "Off hides the Work Room tab from the side. Turn off if you're using Dingle solo.",
      "set.tab.general": "General", "set.tab.data": "Data", "set.tab.support": "Support", "set.tab.advanced": "Advanced",
      "set.lang": "Language", "set.size": "App height", "set.sizeNormal": "Large", "set.sizeMedium": "Medium", "set.sizeCompact": "Short", "set.data": "Data", "set.reset": "Reset all data",
      "set.about": "About", "set.aboutCaption": "todoary desktop app",
      "set.update": "Updates", "set.updateCheck": "Check for updates", "set.updateChecking": "Checking…",
      "set.updateHint": "You'll be asked before installing a new version.",
      "set.updateNone": "You're on the latest version.", "set.updateDeclined": "Update postponed.",
      "set.updateDeferred": "Skipped for this session.", "set.updateDesktopOnly": "Only available in the desktop app.",
      "set.bugReport": "Bug report", "set.bugReportCaption": "① Copy diagnostics → ② Open the form → paste into the form. Helps us investigate bugs and data loss.",
      "set.bugReportBtn": "Open contact form", "set.copyDiag": "Copy diagnostics",
      "set.diagCopied": "Copied. Paste into the contact form.",
      "set.diagExplain": "Includes app version, OS (user agent), language, first-run data snapshot, corrupt-file metadata, and localStorage key names—not your tasks or memos.",
      "set.releasesLink": "Open releases page",
      "set.advancedRoom": "Work room dev sandbox", "set.advancedEmpty": "No advanced settings.",
      "set.resetCaption": "All projects, tasks, commands, inbox and memos are erased and reset.",
      "set.resetConfirm": "Erase all data and reset to the initial state?",
      "set.exportBackup": "Export backup file",
      "set.importBackup": "Import backup file",
      "set.importBusy": "Importing…",
      "set.exportDone": "Backup file saved. ({n} items)",
      "set.backupCaption": "Save or restore projects, tasks, memos, and settings as a JSON file.",
      "set.importConfirm": "Importing will replace your current data with the backup. Continue?",
      "set.importDone": "Import complete. Reloading the app.",
      "set.importFail": "Could not read the backup file.",
      "set.importFailNoFile": "No file was selected.",
      "set.importFailRead": "Could not read the file.",
      "set.importFailParse": "Invalid JSON.",
      "set.importFailFormat": "Unsupported backup format.",
      "set.importFailMissing": "Backup is missing main data (todoary.v1).",
      "set.importFailInvalid": "Main data is corrupted.",
      "set.importFailSchema": "Unsupported data version.",
      "set.importFailApply": "Could not write to localStorage.",
      "set.storagePath": "Storage location",
      "set.storagePathHint": "Tasks and memos are stored in the WebView profile folder (localStorage).",
      "set.openStorageFolder": "Open storage folder",
      "set.storageWebOnly": "Folder open is only available in the desktop app.",
      "store.saveFailed": "Could not save your data. Back up before restarting the app.",
      "store.saveQuota": "Storage is full and your data could not be saved. Some changes may be lost.",
      "store.restoredFromMirror": "Saved data was empty, so it was restored from the automatic backup.",
      "update.prompt": "Version {version} is available. (current {current})\nUpdate now?",
      "update.yes": "Update",
      "update.later": "Later",
      "update.installing": "Downloading the update. Please wait…",
      "update.fail": "Update failed.\n{msg}",
      "deco.skin": "Skins", "deco.skinHint": "A skin updates background, header, and task rows together.",
      "skin.default": "Default", "skin.defaultDesc": "Pastel tape and rounded strokes",
      "skin.notion": "Black & white", "skin.notionDesc": "Light gray, thin dividers, database rows",
      "skin.excel": "Spreadsheet", "skin.excelDesc": "Green ribbon, cell grid, striped rows",
      "skin.locked": "Purchase this skin and unlock it with your license key.",
      "skin.lockedBadge": "Locked",
      "skin.enterKey": "License key",
      "skin.keyPlaceholder": "Paste Polar license key",
      "skin.redeem": "Install with key",
      "skin.buy": "Buy",
      "skin.tauriOnly": "Install is only available in the desktop app.",
      "skin.keyRequired": "Enter a license key.",
      "skin.licensesConfigMissing": "License server is not configured (firebase-licenses-config).",
      "skin.redeemInvalidKey": "Invalid license key.",
      "skin.redeemForbidden": "This license does not include this skin.",
      "skin.redeemNetwork": "Network error. Check your connection and try again.",
      "skin.redeemBundleMissing": "This skin is not bundled in this app build.",
      "skin.redeemReceiptInvalid": "Receipt verification failed. Update the app.",
      "skin.redeemFailed": "Redeem failed.",
      "deco.theme": "Themes", "deco.bg": "Background", "deco.color": "Colors",
      "deco.baseTheme": "Presets", "deco.myTheme": "My themes", "deco.save": "＋ Save current as my theme",
      "deco.saveName": "Theme name", "deco.myThemeName": "My theme ",
      "deco.preview": "Preview", "deco.type": "Type", "deco.linear": "Linear", "deco.radial": "Radial (aura)",
      "deco.dir": "Direction", "deco.stops": "Color stops", "deco.addColor": "＋ Add color",
      "deco.shape": "Shape", "deco.shapeNone": "None", "deco.shapeHeart": "Heart", "deco.shapeHearts": "Hearts", "deco.shapeStars": "Stars", "deco.shapeClover": "Clover", "deco.shapeRibbon": "Ribbon", "deco.shapeFish": "Goldfish",
      "deco.point": "Accent color", "deco.chrome": "Header / bar color", "deco.headerGrad": "Header gradient",
      "deco.tape": "Tape", "deco.tapePreview": "Preview", "deco.tapePattern": "Pattern",
      "deco.tapePatternDots": "Dots", "deco.tapePatternDiag": "Diagonal", "deco.tapePatternGingham": "Gingham", "deco.tapePatternNone": "None",
      "deco.tapePalette": "Color palette", "deco.tapePin": "Pinned color", "deco.tapeAddColor": "＋ Add color", "deco.tapeReset": "Reset to default", "deco.tapeResetConfirm": "Reset tape settings to default?",
      "deco.tapePreviewHint": "Tap a strip to change its color",
      "deco.tapeSample": "Todo", "deco.tapePinLabel": "Pinned",
      "deco.tapePickOne": "This row", "deco.tapePickAll": "All palette",
      "deco.tapeBorder": "Border", "deco.tapeBorderNone": "None", "deco.tapeBorderNormal": "Normal", "deco.tapeBorderBold": "Bold",
      "deco.tapeBorderSoft": "Light", "deco.tapeBorderInk": "Dark",
      "deco.tapeEdgeFade": "Edge fade", "deco.tapePatternColor": "Pattern color",
      "deco.tapeGradient": "1–12 gradient", "deco.tapeGradientHint": "Slot 1 stays light, slot 12 gets darker",
      "deco.tapeGradLight": "Light (1)", "deco.tapeGradDark": "Dark (12)", "deco.tapeGradApply": "Apply gradient",
      "deco.myTapeTheme": "My tape", "deco.myTapeThemeName": "My tape ", "deco.saveTapeTheme": "＋ Save current tape settings",
      "th.basic": "Basic", "th.melon": "Melon Soda", "th.summer": "Summer", "th.green": "Green", "th.milk": "Strawberry Milk", "th.peach": "Peach", "th.lavender": "Lavender", "th.night": "Night Sky",
      "room.title": "Our Work Room", "room.emptyTitle": "Work together, quietly",
      "room.emptyHint": "Like someone sitting nearby — no chat, no calls, no pings.\nJust the feeling of company.",
      "room.create": "Create room", "room.join": "Join with invite code",
      "room.namePh": "Room name (e.g. Our Work Room)", "room.codePh": "6-digit invite code",
      "room.copyCode": "Copy code", "room.copied": "Copied",
      "room.invite": "Invite", "room.leave": "Leave", "room.leaveConfirm": "Leave this room?",
      "room.online": "working", "room.idle": "idle", "room.offline": "offline",
      "room.you": "you", "room.todayTotal": "Together today",
      "room.connected": "{n}/4 here", "room.full": "Room is full (max 4)",
      "room.notFound": "No room with that code", "room.codeInvalid": "Check the invite code",
      "room.permission": "Firestore permission denied. Publish rules from firestore.rules in Firebase Console.",
      "room.showTitle": "Show task title", "room.hideTitle": "Count only",
      "room.clap": "👏", "room.clapHint": "A clap was sent",
      "room.clapLog": "Send a clap", "room.clapDirected": "{from} sent a clap to {to}",
      "room.clapCollapsed": "{n} claps",
      "room.celebrate": "{name} has completed today's tasks",
      "room.newDay": "A new day has begun", "room.logEmpty": "No logs yet today",
      "room.todoRegister": "Tasks to share today", "room.todoRegisterBtn": "Add to chat",
      "room.todoRegistered": "Added to chat",
      "room.localMode": "Local preview mode — only you can see this until Firebase is configured",
      "room.connecting": "Connecting…",
      "room.noTodo": "no tasks yet", "room.notWorking": "resting",
      "room.pickAvatar": "Pick an avatar", "room.namePrompt": "Name shown in the room",
      "room.savedMember": "You're in the room",
      "room.dismissNotice": "Dismiss notice",
      "room.logExpand": "Expand", "room.logCollapse": "Collapse",
      "room.chatLogsShow": "Show {n} messages",
      "room.chatLogsHide": "Hide messages",
      "room.chatLogBoxTitle": "Today's chat",
      "room.headerStats": "{time} · D+{days}",
      "room.levelShort": "Lv.{n}",
      "room.expHint": "XP {done}/{total}",
      "room.statusMessageLabel": "Status message",
      "room.statusMessagePh": "A short line…",
      "room.statusMessageHint": "Up to 25 characters (spaces count)",
      "room.statusMessageCooldownMin": "You can update again in {min} min",
      "room.statusMessageCooldownSec": "You can update again in {sec} sec",
      "room.statusMessageCooldownMinSec": "You can update again in {min} min {sec} sec",
      "room.excelTitle": "Sheet1 — Work room ({name})",
      "room.excelMembersHead": "Members ({n})",
      "room.excelLogTimeCol": "Time",
      "room.excelLogMemberCol": "Member",
      "room.excelLogCol": "Work log",
      "room.excelLogInputPh": "Click to add a note…",
      "room.excelLogSaved": "Note saved",
      "room.excelSharedHead": "{name} — shared tasks ({n})",
      "room.excelConnected": "Online {n}",
      "room.excelTotal": "Total {t}",
      "memo.excelColTitle": "Title",
      "memo.excelColUpdated": "Updated",
    },
    zh: {
      "tab.todo": "待办", "tab.memo": "备忘", "tab.cheat": "命令", "tab.mail": "邮箱", "tab.cal": "日历", "tab.week": "周计划", "tab.room": "工作室", "tab.deco": "装扮", "tab.settings": "设置",
      "todo.today": "今天", "todo.backToday": "今天", "todo.addPh": "添加任务…", "todo.addPhDate": "截止任务…",
      "todo.emptyToday": "在上方输入任务", "todo.emptyDate": "{d} 没有截止任务 — 可在上方添加",
      "memo.write": "撰写备忘", "memo.saved": "已保存备忘", "memo.new": "新建备忘",
      "memo.placeholder": "在这里写下内容，会自动保存。首行将作为标题。",
      "memo.empty": "在上方写下的备忘会显示在这里",
      "memo.untitled": "(空备忘)", "memo.delete": "删除",
      "memo.delConfirm": "删除备忘 \"{x}\"？",
      "memo.buddies": "备忘好友列表", "memo.newDraft": "新建备忘", "memo.newHint": "像开始聊天一样写下备忘",
      "memo.chatHint": "自动保存", "memo.changeIcon": "更换图标",
      "memo.buddyWindow": "备忘", "memo.category": "备忘",
      "memo.searchPh": "搜索备忘…", "memo.searchNone": "没有结果",
      "memo.searchResult": "显示 {n}/{t}", "memo.totalCount": "{n} 个备忘",
      "memo.sort": "排序", "memo.sortRecent": "最近修改", "memo.sortTitle": "按标题", "memo.sortCreated": "按创建",
      "memo.cleanEmpty": "清理空备忘", "memo.cleanConfirm": "删除 {n} 个空备忘？", "memo.noEmpty": "没有需要清理的空备忘",
      "memo.editHint": "自由书写 — 自动保存",
      "memo.bold": "加粗", "memo.italic": "斜体", "memo.underline": "下划线", "memo.strike": "删除线",
      "memo.highlight": "高亮", "memo.bullet": "项目符号", "memo.number": "编号列表",
      "memo.sizeS": "小", "memo.sizeN": "中", "memo.sizeL": "大", "memo.sizeXL": "特大",
      "memo.sizeDown": "缩小", "memo.sizeUp": "放大",
      "memo.fontHand": "手写", "memo.fontSerif": "衬线", "memo.fontMono": "等宽", "memo.fontSans": "默认",
      "memo.heading": "段落样式", "memo.hBody": "正文", "memo.h1": "标题 1", "memo.h2": "标题 2", "memo.h3": "标题 3",
      "memo.alignLeft": "左对齐", "memo.alignCenter": "居中", "memo.alignRight": "右对齐",
      "memo.quote": "引用", "memo.hr": "分隔线", "memo.clearFormat": "清除格式",
      "memo.manage": "备忘管理", "memo.managePlaceholder": "搜索、排序、批量整理功能即将上线。",
      "memo.msgCount": "{n} 条消息", "memo.empty2": "(空)",
      "memo.back": "返回列表",
      "memo.editEmpty": "在下方输入并按 Enter，消息会出现在上方",
      "memo.inputPh": "输入消息并按 Enter…（Shift+Enter 换行）",
      "memo.editing": "编辑中… Enter 保存 · Esc 取消",
      "memo.send": "发送", "memo.save": "保存",
      "memo.color": "文字颜色", "memo.size": "大小", "memo.font": "字体",
      "memo.image": "添加图片", "memo.link": "添加链接",
      "memo.linkUrl": "链接 URL（https://…）", "memo.linkLabel": "显示文本（可选）",
      "memo.imageTooLarge": "图片过大（建议小于 600KB）",
      "memo.edit": "编辑", "memo.msgDelete": "删除这条消息",
      "memo.msgDelConfirm": "删除这条消息？",
      "memo.cancelEdit": "取消",
      "proj.menu": "项目", "proj.new": "＋ 新建项目", "proj.rename": "✎ 重命名", "proj.delete": "✕ 删除 \"{name}\"",
      "proj.newPrompt": "新项目名称", "proj.renamePrompt": "重命名项目", "proj.fallback": "项目",
      "proj.deleteConfirm": "删除项目 \"{name}\"？（任务等数据将保留）",
      "todo.need": "待办", "todo.done": "已完成", "todo.add": "添加任务…",
      "todo.excelColDone": "完成", "todo.excelColTitle": "待办",
      "todo.excelColSchedule": "日程", "todo.excelColTime": "时间",
      "todo.excelSheetTabs": "任务表", "todo.excelResizeCol": "调整列宽",
      "todo.excelFooterAria": "待办汇总",
      "todo.excelFooterPct": "{n}%",
      "todo.excelStatusCount": "数量", "todo.excelStatusDoneN": "完成",
      "todo.excelQuickAddPh": "添加任务…（按 Enter 直接添加）",
      "todo.excelStatusNow": "当前", "todo.excelStatusNowNone": "无日程",
      "todo.excelGroupProgress": "共{total}项 · 完成{done}",
      "todo.excelGroupScheduled": "计划", "todo.excelGroupNoDue": "无期限",
      "todo.excelGroupCount": "{n}项",
      "todo.excelTracking": "进行中",
      "todo.excelTrackStart": "开始计时 — 记录此任务时间",
      "todo.excelTrackStop": "停止计时",
      "todo.excelTrackedTime": "已记录 {t}",
      "todo.excelStatusCountN": "{n}项",
      "todo.excelCalShow": "展开日历", "todo.excelCalHide": "收起日历",
      "todo.excelCalForced": "指定日期时日历保持展开",
      "todo.excelTabWeek": "周", "todo.excelTabStats": "统计",
      "todo.excelCsvExport": "导出 CSV",
      "todo.excelStatsDow": "星期", "todo.excelStatsDist": "分布", "todo.excelStatsTotal": "合计",
      "todo.excelPaneTodoHint": "今日待办 — 表格管理任务",
      "todo.excelPaneTimetableHint": "一周时间表 — 安排本周（周一至周日）的时间日程",
      "todo.excelNowScheduleAria": "当前日程", "todo.excelNowScheduleLabel": "当前时段", "todo.excelNowScheduleEmpty": "当前时间没有对应日程",
      "todo.excelNowScheduleTime": "时间", "todo.excelNowScheduleTitle": "日程",
      "todo.excelNowFilterOn": "仅显示当前关联待办", "todo.excelNowFilterOff": "显示全部待办",
      "todo.excelNowFilterBlock": "仅显示此日程关联待办",
      "todo.excelPaneGraphHint": "周统计面板",
      "todo.excelStatusTimer": "计时器",
      "todo.excelTimetableTime": "时间",
      "todo.excelTimetablePrompt": "日程名称", "todo.excelTimetableEditPrompt": "日程名称（留空删除）",
      "todo.excelWeekScheduleTitle": "{range}",
      "todo.excelScheduleLink": "关联日程", "todo.excelScheduleUnlink": "取消关联",
      "todo.excelScheduleLinkEmpty": "当天没有日程，请先在周时间表中添加。",
      "todo.excelSchedulePrep": "准备事项", "todo.excelSchedulePrepAdd": "添加准备事项",
      "todo.excelSchedulePrepEmpty": "暂无关联待办",
      "todo.excelScheduleDropHint": "也可从今日待办拖到此处关联",
      "todo.excelScheduleColor": "颜色",
      "todo.excelScheduleDockCreate": "新日程", "todo.excelScheduleDockEdit": "编辑日程",
      "todo.excelScheduleConfirm": "添加", "todo.excelScheduleCancel": "取消", "todo.excelScheduleClose": "关闭",
      "todo.excelScheduleDelete": "删除", "todo.excelTimetableDefault": "日程",
      "todo.excelDashboardWeek": "周统计（{range}）",
      "todo.excelDashCompletion": "完成率",
      "todo.excelDashDailyAvg": "日均", "todo.excelDashStreak": "连续",
      "todo.excelDashActiveDays": "活动日", "todo.excelDashActiveDaysVal": "{n}天",
      "todo.doneAt": "完成于 {t}",
      "todo.emptyNeed": "在下方输入框写下任务", "todo.emptyDone": "完成的任务会累积在这里",
      "cheat.registered": "已保存命令", "cheat.frequent": "常用命令", "cheat.add": "添加命令…",
      "cheat.emptyReg": "在上方输入命令以保存", "cheat.emptyFreq": "常用的会显示在这里（复制时计数）",
      "cheat.label": "(标签)", "cheat.uses": "{n}次", "cheat.delConfirm": "删除 \"{x}\"？",
      "prompt.delConfirm": "删除此提示词？",
      "mail.received": "收到的咨询", "mail.draft": "回复草稿", "mail.paste": "粘贴收到的邮件…", "mail.add": "添加",
      "mail.markReplied": "标记为已回复", "mail.replied": "✓ 已回复", "mail.site": "打开网站", "mail.siteConnect": "关联网站",
      "mail.draftLabel": "回复草稿", "mail.emptyTop": "粘贴收到的邮件以添加",
      "mail.emptyBottom": "在上方选择咨询后即可在此撰写草稿",
      "mail.draftPlaceholder": "写下回复草稿…", "mail.noTitle": "(无主题)", "mail.inquiry": "咨询",
      "mail.sitePrompt": "此邮件的回复/平台网址（例：https://mail.google.com/...）",
      "mail.back": "返回", "mail.copyDraft": "复制草稿", "mail.noBody": "(无正文)",
      "mail.presets": "快速回复模板", "mail.presetEmpty": "保存常用的回复话术",
      "mail.presetNew": "添加模板", "mail.presetLabel": "标签（例：退款说明）", "mail.presetText": "回复内容",
      "mail.presetSave": "保存", "mail.presetCancel": "取消",
      "mail.presetDelConfirm": "删除此模板？",
      "mail.useApplied": "模板已应用到草稿",
      "cal.todayBtn": "今天", "cal.note": "写下今天的备忘 · 日记…",
      "cal.done": "完成{n}项", "cal.mails": "{n}封邮件",
      "planner.title": "WEEKLY PLANNER", "planner.notes": "备注",
      "planner.notesPh": "写下本周的备注…",
      "planner.mon": "周一", "planner.tue": "周二", "planner.wed": "周三", "planner.thu": "周四",
      "planner.fri": "周五", "planner.sat": "周六", "planner.sun": "周日",
      "planner.today": "今天", "planner.add": "添加", "planner.addPh": "输入后按 Enter…",
      "planner.prev": "上一周", "planner.next": "下一周", "planner.thisWeek": "本周",
      "planner.weekTotal": "本周总工时",
      "planner.unattributed": "未分类",
      "dday.set": "设置", "dday.dday": "倒数日", "dday.title": "倒数日设置", "dday.label": "倒数日",
      "dday.namePlaceholder": "名称（例：发布）", "dday.clear": "清除日期",
      "music.add": "添加 YouTube 链接 ♫", "music.loading": "加载中…",
      "music.playlist": "播放列表 ♫", "music.paste": "粘贴 YouTube 链接", "music.err": "无法识别该 YouTube 链接", "music.empty": "粘贴 YouTube 链接以添加曲目",
      "music.prev": "上一首", "music.next": "下一首", "music.play": "播放", "music.pause": "暂停", "music.volume": "音量",
      "app.close": "关闭应用", "app.minimize": "最小化", "app.miniMode": "迷你模式",
      "set.dockHide": "停靠栏迷你化", "set.dockHideHint": "将停靠栏缩成小信息条，点击信息条即可重新打开。",
      "set.dockReveal": "显示停靠栏",
      "set.dockMiniTip": "拖动移动 · 点击打开停靠栏",
      "set.tabsAutoHide": "自动隐藏标签", "set.tabsAutoHideHint": "隐藏侧边标签。将鼠标停在边缘 1 秒即可重新显示。",
      "timer.next": "下次伸展", "work.title": "今日工作时长",
      "worktrack.runningOn": "正在记录工作时间 · 点击暂停",
      "worktrack.runningOff": "已暂停 · 点击继续记录",
      "app.close": "关闭应用",
      "worktrack.resetTip": "将今日工作时间重置为 0",
      "worktrack.resetConfirm": "要将今日累计的工作时间重置为 0 吗？",
      "set.dock": "停靠位置", "set.left": "左侧", "set.right": "右侧",
      "set.dockHide": "停靠栏迷你化", "set.dockHideHint": "将停靠栏缩成小信息条，点击信息条即可重新打开。",
      "set.dockReveal": "显示停靠栏",
      "set.dockMiniTip": "拖动移动 · 点击打开停靠栏",
      "set.tabsAutoHide": "自动隐藏标签", "set.tabsAutoHideHint": "隐藏侧边标签。将鼠标停在边缘 1 秒即可重新显示。",
      "set.todayShort": "今日",
      "set.tabDir": "标签方向", "set.outer": "向外", "set.inner": "向内",
      "set.desktop": "桌面模式（透明）", "set.desktopHint": "开启后仅显示停靠栏，隐藏代码背景。桌面应用中可透出壁纸。",
      "set.on": "开", "set.off": "关",
      "set.alwaysOnTop": "始终置顶", "set.alwaysOnTopHint": "开启后窗口将始终位于其他应用之上。",
      "set.roomTab": "工作室标签", "set.roomTabHint": "关闭后侧边将不再显示工作室标签。独自使用时建议关闭。",
      "set.lang": "语言", "set.size": "应用高度", "set.sizeNormal": "大", "set.sizeMedium": "中", "set.sizeCompact": "紧凑", "set.data": "数据", "set.reset": "重置所有数据",
      "set.resetCaption": "所有项目、任务、命令、收件和备忘都会被清除并重置。",
      "set.resetConfirm": "确定清除所有数据并恢复初始状态吗？",
      "deco.skin": "皮肤", "deco.skinHint": "切换皮肤会同时改变背景、标题栏和待办行样式。",
      "skin.default": "默认", "skin.defaultDesc": "粉彩胶带与圆角线条",
      "skin.notion": "黑白", "skin.notionDesc": "浅灰背景、细分割线、数据库行",
      "skin.excel": "电子表格", "skin.excelDesc": "绿色标题栏、单元格网格、条纹行",
      "skin.locked": "购买后可用许可证密钥解锁此皮肤。",
      "skin.lockedBadge": "锁定",
      "skin.enterKey": "许可证密钥",
      "skin.keyPlaceholder": "粘贴 Polar 许可证密钥",
      "skin.redeem": "用密钥安装",
      "skin.buy": "购买",
      "skin.tauriOnly": "仅可在桌面应用中安装。",
      "skin.keyRequired": "请输入许可证密钥。",
      "skin.licensesConfigMissing": "未配置许可证服务器 (firebase-licenses-config)。",
      "skin.redeemInvalidKey": "许可证密钥无效。",
      "skin.redeemForbidden": "此密钥不包含该皮肤。",
      "skin.redeemNetwork": "网络错误，请检查连接后重试。",
      "skin.redeemBundleMissing": "此应用构建未包含该皮肤文件。",
      "skin.redeemReceiptInvalid": "收据验证失败，请更新应用。",
      "skin.redeemFailed": "兑换失败。",
      "deco.theme": "主题", "deco.bg": "背景", "deco.color": "颜色",
      "deco.baseTheme": "预设主题", "deco.myTheme": "我的主题", "deco.save": "＋ 保存当前为我的主题",
      "deco.saveName": "主题名称", "deco.myThemeName": "我的主题 ",
      "deco.preview": "预览", "deco.type": "类型", "deco.linear": "线性", "deco.radial": "径向(光晕)",
      "deco.dir": "方向", "deco.stops": "颜色节点", "deco.addColor": "＋ 添加颜色",
      "deco.shape": "图形", "deco.shapeNone": "无", "deco.shapeHeart": "爱心", "deco.shapeHearts": "多层爱心", "deco.shapeStars": "星星", "deco.shapeClover": "四叶草", "deco.shapeRibbon": "蝴蝶结", "deco.shapeFish": "金鱼",
      "deco.point": "强调色", "deco.chrome": "标题栏 / 标签色", "deco.headerGrad": "标题渐变",
      "deco.tape": "胶带", "deco.tapePreview": "预览", "deco.tapePattern": "图案",
      "deco.tapePatternDots": "圆点", "deco.tapePatternDiag": "斜线", "deco.tapePatternGingham": "格纹", "deco.tapePatternNone": "无",
      "deco.tapePalette": "调色板", "deco.tapePin": "置顶颜色", "deco.tapeAddColor": "＋ 添加颜色", "deco.tapeReset": "恢复默认", "deco.tapeResetConfirm": "要将胶带设置恢复为默认吗？",
      "deco.tapePreviewHint": "点击色条可更改颜色",
      "deco.tapeSample": "待办", "deco.tapePinLabel": "置顶",
      "deco.tapePickOne": "仅此行", "deco.tapePickAll": "整个调色板",
      "deco.tapeBorder": "边框", "deco.tapeBorderNone": "无", "deco.tapeBorderNormal": "普通", "deco.tapeBorderBold": "粗",
      "deco.tapeBorderSoft": "浅", "deco.tapeBorderInk": "深",
      "deco.tapeEdgeFade": "边缘淡化", "deco.tapePatternColor": "图案颜色",
      "deco.tapeGradient": "1~12 渐变", "deco.tapeGradientHint": "第 1 条较浅，第 12 条较深",
      "deco.tapeGradLight": "浅色 (1)", "deco.tapeGradDark": "深色 (12)", "deco.tapeGradApply": "应用渐变",
      "deco.myTapeTheme": "我的胶带", "deco.myTapeThemeName": "我的胶带 ", "deco.saveTapeTheme": "＋ 保存当前胶带设置",
      "th.basic": "基础", "th.melon": "蜜瓜苏打", "th.summer": "夏天", "th.green": "绿色", "th.milk": "草莓牛奶", "th.peach": "蜜桃", "th.lavender": "薰衣草", "th.night": "夜空",
      "room.title": "我们的工作室", "room.emptyTitle": "安静地一起工作",
      "room.emptyHint": "像有人在旁边一样 — 没有聊天、没有通话、没有提醒。\n只是陪伴的感觉。",
      "room.create": "创建房间", "room.join": "用邀请码加入",
      "room.namePh": "房间名（例：我们的工作室）", "room.codePh": "6位邀请码",
      "room.copyCode": "复制邀请码", "room.copied": "已复制",
      "room.invite": "邀请", "room.leave": "离开", "room.leaveConfirm": "离开这个房间？",
      "room.online": "工作中", "room.idle": "暂离", "room.offline": "离线",
      "room.you": "你", "room.todayTotal": "今天一起",
      "room.connected": "{n}/4 在线", "room.full": "房间已满（最多4人）",
      "room.notFound": "没有这样的房间", "room.codeInvalid": "请检查邀请码",
      "room.permission": "Firestore 权限不足。请在 Firebase 控制台发布 firestore.rules。",
      "room.showTitle": "显示任务标题", "room.hideTitle": "只显示数量",
      "room.clap": "👏", "room.clapHint": "已送出掌声",
      "room.clapLog": "送上掌声", "room.clapDirected": "{from}向{to}送出了掌声",
      "room.clapCollapsed": "掌声 {n} 次",
      "room.celebrate": "{name}已完成今天的全部任务",
      "room.newDay": "新的一天已开始", "room.logEmpty": "今天还没有日志",
      "room.todoRegister": "今天要分享的任务", "room.todoRegisterBtn": "登记到聊天",
      "room.todoRegistered": "已登记到聊天",
      "room.localMode": "本地预览模式 — 配置 Firebase 后才能多人共享",
      "room.connecting": "连接中…",
      "room.noTodo": "暂无任务", "room.notWorking": "休息中",
      "room.pickAvatar": "选择头像", "room.namePrompt": "在房间内显示的名字",
      "room.savedMember": "已加入房间",
      "room.dismissNotice": "关闭通知",
      "room.logExpand": "展开", "room.logCollapse": "收起",
      "room.chatLogsShow": "查看 {n} 条对话",
      "room.chatLogsHide": "隐藏对话",
      "room.chatLogBoxTitle": "今日对话",
      "room.headerStats": "{time} · D+{days}",
      "room.levelShort": "Lv.{n}",
      "room.expHint": "经验 {done}/{total}",
      "room.statusMessageLabel": "状态消息",
      "room.statusMessagePh": "一句话…",
      "room.statusMessageHint": "含空格最多 25 字",
      "room.statusMessageCooldownMin": "{min} 分钟后可再登记",
      "room.statusMessageCooldownSec": "{sec} 秒后可再登记",
      "room.statusMessageCooldownMinSec": "{min} 分 {sec} 秒后可再登记",
      "room.excelTitle": "工作表1 — 工作室（{name}）",
      "room.excelMembersHead": "成员（{n}）",
      "room.excelLogTimeCol": "时间",
      "room.excelLogMemberCol": "成员",
      "room.excelLogCol": "工作日志",
      "room.excelLogInputPh": "点击输入日志…",
      "room.excelLogSaved": "已保存留言",
      "room.excelSharedHead": "{name} 的共享待办（{n}）",
      "room.excelConnected": "在线 {n}",
      "room.excelTotal": "共 {t}",
      "memo.excelColTitle": "标题",
      "memo.excelColUpdated": "修改日期",
    },
    ja: {
      "tab.todo": "タスク", "tab.memo": "メモ", "tab.cheat": "コマンド", "tab.mail": "メール", "tab.cal": "カレンダー", "tab.week": "週間", "tab.room": "作業ルーム", "tab.deco": "着せ替え", "tab.settings": "設定",
      "todo.today": "今日", "todo.backToday": "今日", "todo.addPh": "タスクを追加…", "todo.addPhDate": "締切タスク…",
      "todo.emptyToday": "上の入力欄にタスクを書いてください", "todo.emptyDate": "{d} 締切のタスクはありません — 上から追加できます",
      "memo.write": "メモを書く", "memo.saved": "保存したメモ", "memo.new": "新規メモ",
      "memo.placeholder": "ここに書くと自動で保存されます。最初の行がタイトルになります。",
      "memo.empty": "上で書いたメモがここに溜まります",
      "memo.untitled": "(空のメモ)", "memo.delete": "削除",
      "memo.delConfirm": "メモ \"{x}\" を削除しますか？",
      "memo.buddies": "メモ友だちリスト", "memo.newDraft": "新規メモ", "memo.newHint": "チャットを始めるようにメモを書こう",
      "memo.chatHint": "自動で保存されます", "memo.changeIcon": "アイコンを変更",
      "memo.buddyWindow": "メモ", "memo.category": "メモ",
      "memo.searchPh": "メモを検索…", "memo.searchNone": "結果がありません",
      "memo.searchResult": "{n}/{t} 件表示", "memo.totalCount": "{n} 件のメモ",
      "memo.sort": "並べ替え", "memo.sortRecent": "更新順", "memo.sortTitle": "タイトル", "memo.sortCreated": "作成順",
      "memo.cleanEmpty": "空メモを整理", "memo.cleanConfirm": "空メモ {n} 件を削除しますか？", "memo.noEmpty": "整理する空メモはありません",
      "memo.editHint": "自由に書く — 自動保存",
      "memo.bold": "太字", "memo.italic": "斜体", "memo.underline": "下線", "memo.strike": "取り消し線",
      "memo.highlight": "ハイライト", "memo.bullet": "箇条書き", "memo.number": "番号付きリスト",
      "memo.sizeS": "小", "memo.sizeN": "標準", "memo.sizeL": "大", "memo.sizeXL": "特大",
      "memo.sizeDown": "小さく", "memo.sizeUp": "大きく",
      "memo.fontHand": "手書き", "memo.fontSerif": "明朝", "memo.fontMono": "等幅", "memo.fontSans": "標準",
      "memo.heading": "段落スタイル", "memo.hBody": "本文", "memo.h1": "見出し 1", "memo.h2": "見出し 2", "memo.h3": "見出し 3",
      "memo.alignLeft": "左揃え", "memo.alignCenter": "中央", "memo.alignRight": "右揃え",
      "memo.quote": "引用", "memo.hr": "区切り線", "memo.clearFormat": "書式をクリア",
      "memo.manage": "メモ管理", "memo.managePlaceholder": "ここに検索・並べ替え・一括整理が入る予定です。",
      "memo.msgCount": "{n}件のメッセージ", "memo.empty2": "(空)",
      "memo.back": "リストへ戻る",
      "memo.editEmpty": "下に入力して Enter を押すと上に追加されます",
      "memo.inputPh": "メッセージを入力して Enter…（Shift+Enter で改行）",
      "memo.editing": "編集中… Enter で保存・Esc でキャンセル",
      "memo.send": "送信", "memo.save": "保存",
      "memo.color": "文字色", "memo.size": "サイズ", "memo.font": "フォント",
      "memo.image": "画像を添付", "memo.link": "リンクを追加",
      "memo.linkUrl": "リンク URL（https://…）", "memo.linkLabel": "表示テキスト（任意）",
      "memo.imageTooLarge": "画像が大きすぎます（600KB 以下推奨）",
      "memo.edit": "編集", "memo.msgDelete": "このメッセージを削除",
      "memo.msgDelConfirm": "このメッセージを削除しますか？",
      "memo.cancelEdit": "キャンセル",
      "proj.menu": "プロジェクト", "proj.new": "＋ 新規プロジェクト", "proj.rename": "✎ 名前変更", "proj.delete": "✕ \"{name}\" を削除",
      "proj.newPrompt": "新しいプロジェクト名", "proj.renamePrompt": "プロジェクト名を変更", "proj.fallback": "プロジェクト",
      "proj.deleteConfirm": "プロジェクト \"{name}\" を削除しますか？（タスク等のデータは残ります）",
      "todo.need": "やること", "todo.done": "やったこと", "todo.add": "タスクを追加…",
      "todo.excelColDone": "完了", "todo.excelColTitle": "タスク",
      "todo.excelColSchedule": "予定", "todo.excelColTime": "時間",
      "todo.excelSheetTabs": "タスクシート", "todo.excelResizeCol": "列幅を調整",
      "todo.excelFooterAria": "タスク集計",
      "todo.excelFooterPct": "{n}%",
      "todo.excelStatusCount": "件数", "todo.excelStatusDoneN": "完了",
      "todo.excelQuickAddPh": "タスクを追加…（Enterで追加）",
      "todo.excelStatusNow": "いま", "todo.excelStatusNowNone": "予定なし",
      "todo.excelGroupProgress": "{total}件中 {done} 完了",
      "todo.excelGroupScheduled": "予定", "todo.excelGroupNoDue": "期限なし",
      "todo.excelGroupCount": "{n}件",
      "todo.excelTracking": "進行中",
      "todo.excelTrackStart": "タイマー開始 — このタスクに時間を記録",
      "todo.excelTrackStop": "タイマー停止",
      "todo.excelTrackedTime": "計測 {t}",
      "todo.excelStatusCountN": "{n}件",
      "todo.excelCalShow": "カレンダーを開く", "todo.excelCalHide": "カレンダーを閉じる",
      "todo.excelCalForced": "日付指定中はカレンダーが開いたままです",
      "todo.excelTabWeek": "週間", "todo.excelTabStats": "統計",
      "todo.excelCsvExport": "CSVエクスポート",
      "todo.excelStatsDow": "曜日", "todo.excelStatsDist": "分布", "todo.excelStatsTotal": "合計",
      "todo.excelPaneTodoHint": "今日のToDo — 表形式で管理",
      "todo.excelPaneTimetableHint": "週間時間表 — 今週（月–日）の時間別予定を配置",
      "todo.excelNowScheduleAria": "いまの予定", "todo.excelNowScheduleLabel": "いま該当", "todo.excelNowScheduleEmpty": "いまの時間に該当する予定はありません",
      "todo.excelNowScheduleTime": "時間", "todo.excelNowScheduleTitle": "予定",
      "todo.excelNowFilterOn": "いまの予定のToDoだけ表示", "todo.excelNowFilterOff": "すべてのToDoを表示",
      "todo.excelNowFilterBlock": "この予定のToDoだけ表示",
      "todo.excelPaneGraphHint": "週間ダッシュボード",
      "todo.excelStatusTimer": "タイマー",
      "todo.excelTimetableTime": "時間",
      "todo.excelTimetablePrompt": "予定名", "todo.excelTimetableEditPrompt": "予定名（空欄で削除）",
      "todo.excelWeekScheduleTitle": "{range}",
      "todo.excelScheduleLink": "予定と連携", "todo.excelScheduleUnlink": "連携解除",
      "todo.excelScheduleLinkEmpty": "この日の予定がありません。週間時間表で追加してください。",
      "todo.excelSchedulePrep": "準備ToDo", "todo.excelSchedulePrepAdd": "準備ToDoを追加",
      "todo.excelSchedulePrepEmpty": "連携されたToDoなし",
      "todo.excelScheduleDropHint": "今日のToDoからここにドロップしても連携できます",
      "todo.excelScheduleColor": "色",
      "todo.excelScheduleDockCreate": "新しい予定", "todo.excelScheduleDockEdit": "予定を編集",
      "todo.excelScheduleConfirm": "登録", "todo.excelScheduleCancel": "キャンセル", "todo.excelScheduleClose": "閉じる",
      "todo.excelScheduleDelete": "削除", "todo.excelTimetableDefault": "予定",
      "todo.excelDashboardWeek": "週間統計（{range}）",
      "todo.excelDashCompletion": "完了率",
      "todo.excelDashDailyAvg": "日平均", "todo.excelDashStreak": "連続",
      "todo.excelDashActiveDays": "活動日", "todo.excelDashActiveDaysVal": "{n}日",
      "todo.doneAt": "完了 {t}",
      "todo.emptyNeed": "下の入力欄にタスクを書いてください", "todo.emptyDone": "終えたタスクがここに溜まります",
      "cheat.registered": "保存したコマンド", "cheat.frequent": "よく使うコマンド", "cheat.add": "コマンドを追加…",
      "cheat.emptyReg": "上の入力欄にコマンドを書いて保存", "cheat.emptyFreq": "よく使うとここに上がります（コピーで集計）",
      "cheat.label": "(ラベル)", "cheat.uses": "{n}回", "cheat.delConfirm": "\"{x}\" を削除しますか？",
      "prompt.delConfirm": "このプロンプトを削除しますか？",
      "mail.received": "受信した問い合わせ", "mail.draft": "返信下書き", "mail.paste": "受信メールを貼り付け…", "mail.add": "追加",
      "mail.markReplied": "返信済みにする", "mail.replied": "✓ 返信済み", "mail.site": "サイトを開く", "mail.siteConnect": "サイトを連携",
      "mail.draftLabel": "返信下書き", "mail.emptyTop": "受信メールを貼り付けて追加",
      "mail.emptyBottom": "上で問い合わせを選ぶとここで下書きを書けます",
      "mail.draftPlaceholder": "返信の下書きを書いてください…", "mail.noTitle": "(件名なし)", "mail.inquiry": "問い合わせ",
      "mail.sitePrompt": "このメールの返信/プラットフォームURL（例：https://mail.google.com/...）",
      "mail.back": "リスト", "mail.copyDraft": "下書きコピー", "mail.noBody": "(本文なし)",
      "mail.presets": "クイック返信プリセット", "mail.presetEmpty": "よく使う返信文を登録しておこう",
      "mail.presetNew": "プリセット追加", "mail.presetLabel": "ラベル（例：返金案内）", "mail.presetText": "返信文",
      "mail.presetSave": "保存", "mail.presetCancel": "キャンセル",
      "mail.presetDelConfirm": "このプリセットを削除しますか？",
      "mail.useApplied": "プリセットを下書きに適用しました",
      "cal.todayBtn": "今日へ", "cal.note": "今日のメモ・日記を書いてみよう…",
      "cal.done": "{n}件完了", "cal.mails": "{n}件メール",
      "planner.title": "WEEKLY PLANNER", "planner.notes": "Notes",
      "planner.notesPh": "今週のメモを書いてみよう…",
      "planner.mon": "月曜日", "planner.tue": "火曜日", "planner.wed": "水曜日", "planner.thu": "木曜日",
      "planner.fri": "金曜日", "planner.sat": "土曜日", "planner.sun": "日曜日",
      "planner.today": "今日", "planner.add": "追加", "planner.addPh": "入力して Enter…",
      "planner.prev": "前の週", "planner.next": "次の週", "planner.thisWeek": "今週",
      "planner.weekTotal": "今週の合計作業時間",
      "planner.unattributed": "未分類",
      "dday.set": "設定", "dday.dday": "D-DAY", "dday.title": "Dデー設定", "dday.label": "Dデー",
      "dday.namePlaceholder": "名前（例：リリース）", "dday.clear": "日付を消す",
      "music.add": "YouTubeリンクを追加 ♫", "music.loading": "読み込み中…",
      "music.playlist": "プレイリスト ♫", "music.paste": "YouTubeリンクを貼り付け", "music.err": "YouTubeリンクを認識できませんでした", "music.empty": "YouTubeリンクを貼り付けて曲を追加",
      "music.prev": "前の曲", "music.next": "次の曲", "music.play": "再生", "music.pause": "一時停止", "music.volume": "音量",
      "app.close": "アプリを終了", "app.minimize": "最小化", "app.miniMode": "ミニモード",
      "set.dockHide": "ドック ミニ化", "set.dockHideHint": "ドックを小さな情報バーに縮小します。バーをクリックで再表示。",
      "set.dockReveal": "ドックを表示",
      "set.dockMiniTip": "ドラッグで移動 · クリックでドックを開く",
      "set.tabsAutoHide": "タブ自動非表示", "set.tabsAutoHideHint": "横タブを隠します。端にマウスを1秒置くと再表示されます。",
      "timer.next": "次のストレッチ", "work.title": "今日の作業時間",
      "worktrack.runningOn": "作業時間を計測中 · クリックで一時停止",
      "worktrack.runningOff": "一時停止中 · クリックで計測再開",
      "app.close": "アプリを終了",
      "worktrack.resetTip": "今日の作業時間を 0 にリセット",
      "worktrack.resetConfirm": "今日累積した作業時間を 0 にリセットしますか？",
      "set.dock": "ドック位置", "set.left": "左", "set.right": "右",
      "set.dockHide": "ドック ミニ化", "set.dockHideHint": "ドックを小さな情報バーに縮小します。バーをクリックで再表示。",
      "set.dockReveal": "ドックを表示",
      "set.dockMiniTip": "ドラッグで移動 · クリックでドックを開く",
      "set.tabsAutoHide": "タブ自動非表示", "set.tabsAutoHideHint": "横タブを隠します。端にマウスを1秒置くと再表示されます。",
      "set.todayShort": "今日",
      "set.tabDir": "タブ方向", "set.outer": "外側", "set.inner": "内側",
      "set.desktop": "デスクトップモード（透明）", "set.desktopHint": "オンでドックだけ表示し、コード風の背景を隠します。デスクトップアプリでは壁紙が透けます。",
      "set.on": "オン", "set.off": "オフ",
      "set.alwaysOnTop": "常に最前面", "set.alwaysOnTopHint": "オンにすると他のウィンドウより常に上に表示されます。",
      "set.roomTab": "作業ルームタブ", "set.roomTabHint": "オフにすると作業ルームタブが非表示になります。一人で使うならオフ推奨。",
      "set.lang": "言語", "set.size": "アプリの高さ", "set.sizeNormal": "大", "set.sizeMedium": "中", "set.sizeCompact": "コンパクト", "set.data": "データ", "set.reset": "すべてのデータを初期化",
      "set.resetCaption": "プロジェクト・タスク・コマンド・問い合わせ・メモがすべて消去され初期化されます。",
      "set.resetConfirm": "本当にすべてのデータを消して初期状態に戻しますか？",
      "deco.skin": "スキン", "deco.skinHint": "スキンで背景・ヘッダー・タスク行をまとめて変更できます。",
      "skin.default": "デフォルト", "skin.defaultDesc": "パステルテープと丸い線",
      "skin.notion": "白黒", "skin.notionDesc": "明るいグレー・細い区切り・DB行",
      "skin.excel": "スプレッドシート", "skin.excelDesc": "緑リボン・セル格子・縞行",
      "skin.locked": "購入後、ライセンスキーで解除できます。",
      "skin.lockedBadge": "ロック",
      "skin.enterKey": "ライセンスキー",
      "skin.keyPlaceholder": "Polar ライセンスキーを貼り付け",
      "skin.redeem": "キーでインストール",
      "skin.buy": "購入",
      "skin.tauriOnly": "デスクトップアプリでのみインストールできます。",
      "skin.keyRequired": "ライセンスキーを入力してください。",
      "skin.licensesConfigMissing": "ライセンスサーバーが未設定です (firebase-licenses-config)。",
      "skin.redeemInvalidKey": "ライセンスキーが無効です。",
      "skin.redeemForbidden": "このキーではこのスキンを利用できません。",
      "skin.redeemNetwork": "ネットワークエラーです。接続を確認して再試行してください。",
      "skin.redeemBundleMissing": "このビルドにスキンファイルが含まれていません。",
      "skin.redeemReceiptInvalid": "レシート検証に失敗しました。アプリを更新してください。",
      "skin.redeemFailed": "引き換えに失敗しました。",
      "deco.theme": "テーマ", "deco.bg": "背景", "deco.color": "カラー",
      "deco.baseTheme": "プリセット", "deco.myTheme": "マイテーマ", "deco.save": "＋ 今の画面をマイテーマに保存",
      "deco.saveName": "テーマ名", "deco.myThemeName": "マイテーマ ",
      "deco.preview": "プレビュー", "deco.type": "種類", "deco.linear": "線形", "deco.radial": "放射(オーロラ)",
      "deco.dir": "方向", "deco.stops": "カラーストップ", "deco.addColor": "＋ 色を追加",
      "deco.shape": "図形", "deco.shapeNone": "なし", "deco.shapeHeart": "ハート", "deco.shapeHearts": "重ねハート", "deco.shapeStars": "星", "deco.shapeClover": "クローバー", "deco.shapeRibbon": "リボン", "deco.shapeFish": "金魚",
      "deco.point": "アクセント色", "deco.chrome": "ヘッダー / バー色", "deco.headerGrad": "ヘッダーグラデーション",
      "deco.tape": "テープ", "deco.tapePreview": "プレビュー", "deco.tapePattern": "柄",
      "deco.tapePatternDots": "ドット", "deco.tapePatternDiag": "斜線", "deco.tapePatternGingham": "ギンガム", "deco.tapePatternNone": "なし",
      "deco.tapePalette": "カラーパレット", "deco.tapePin": "ピン留め色", "deco.tapeAddColor": "＋ 色を追加", "deco.tapeReset": "初期値に戻す", "deco.tapeResetConfirm": "テープ設定を初期値に戻しますか？",
      "deco.tapePreviewHint": "タップを押して色を変更",
      "deco.tapeSample": "やること", "deco.tapePinLabel": "ピン留め",
      "deco.tapePickOne": "この行のみ", "deco.tapePickAll": "全体パレット",
      "deco.tapeBorder": "枠線", "deco.tapeBorderNone": "なし", "deco.tapeBorderNormal": "普通", "deco.tapeBorderBold": "太い",
      "deco.tapeBorderSoft": "薄い", "deco.tapeBorderInk": "濃い",
      "deco.tapeEdgeFade": "端のフェード", "deco.tapePatternColor": "柄の色",
      "deco.tapeGradient": "1~12 グラデ", "deco.tapeGradientHint": "1番は薄く、12番は濃くなります",
      "deco.tapeGradLight": "薄い色 (1)", "deco.tapeGradDark": "濃い色 (12)", "deco.tapeGradApply": "グラデーション適用",
      "deco.myTapeTheme": "マイテープ", "deco.myTapeThemeName": "マイテープ ", "deco.saveTapeTheme": "＋ 今のテープ設定を保存",
      "th.basic": "ベーシック", "th.melon": "メロンソーダ", "th.summer": "夏", "th.green": "グリーン", "th.milk": "いちごミルク", "th.peach": "ピーチ", "th.lavender": "ラベンダー", "th.night": "夜空",
      "room.title": "わたしたちの作業ルーム", "room.emptyTitle": "そっと、一緒に作業",
      "room.emptyHint": "そばに誰かいる感じ。チャットも通話も通知もなし。\nただ一緒にいる雰囲気だけ。",
      "room.create": "ルームを作る", "room.join": "招待コードで入る",
      "room.namePh": "ルーム名（例：わたしたちの作業ルーム）", "room.codePh": "招待コード6桁",
      "room.copyCode": "コードをコピー", "room.copied": "コピー済み",
      "room.invite": "招待", "room.leave": "退出", "room.leaveConfirm": "このルームから出ますか？",
      "room.online": "作業中", "room.idle": "離席", "room.offline": "オフライン",
      "room.you": "あなた", "room.todayTotal": "今日のルーム合計",
      "room.connected": "{n}/4 在室", "room.full": "ルームがいっぱいです（最大4人）",
      "room.notFound": "そのルームはありません", "room.codeInvalid": "招待コードを確認してください",
      "room.permission": "Firestore の権限がありません。コンソールで firestore.rules を公開してください。",
      "room.showTitle": "タスク名を公開", "room.hideTitle": "件数のみ",
      "room.clap": "👏", "room.clapHint": "拍手を送りました",
      "room.clapLog": "拍手を送る", "room.clapDirected": "{from}さんが{to}さんに拍手を送りました",
      "room.clapCollapsed": "拍手 {n} 回",
      "room.celebrate": "{name}さんが今日を制覇しました",
      "room.newDay": "新しい一日が始まりました", "room.logEmpty": "今日のログはまだありません",
      "room.todoRegister": "今日共有するタスク", "room.todoRegisterBtn": "チャットに登録",
      "room.todoRegistered": "チャットに登録しました",
      "room.localMode": "ローカルプレビュー — Firebase 設定後に共有可能",
      "room.connecting": "接続中…",
      "room.noTodo": "まだタスクなし", "room.notWorking": "休憩中",
      "room.pickAvatar": "アバターを選ぶ", "room.namePrompt": "ルームで表示される名前",
      "room.savedMember": "ルームに参加しました",
      "room.dismissNotice": "お知らせを閉じる",
      "room.logExpand": "展開", "room.logCollapse": "折りたたむ",
      "room.chatLogsShow": "会話 {n}件を表示",
      "room.chatLogsHide": "会話を隠す",
      "room.chatLogBoxTitle": "今日の会話",
      "room.headerStats": "{time} · D+{days}",
      "room.levelShort": "Lv.{n}",
      "room.expHint": "経験値 {done}/{total}",
      "room.statusMessageLabel": "ステータスメッセージ",
      "room.statusMessagePh": "ひとこと…",
      "room.statusMessageHint": "空白含め最大25文字",
      "room.statusMessageCooldownMin": "{min}分後に再登録できます",
      "room.statusMessageCooldownSec": "{sec}秒後に再登録できます",
      "room.statusMessageCooldownMinSec": "{min}分{sec}秒後に再登録できます",
      "room.excelTitle": "シート1 — 作業部屋（{name}）",
      "room.excelMembersHead": "メンバー（{n}）",
      "room.excelLogTimeCol": "時間",
      "room.excelLogMemberCol": "メンバー",
      "room.excelLogCol": "作業ログ",
      "room.excelLogInputPh": "クリックしてログを入力…",
      "room.excelLogSaved": "ひとことを保存しました",
      "room.excelSharedHead": "{name} の共有ToDo（{n}）",
      "room.excelConnected": "接続 {n}",
      "room.excelTotal": "計 {t}",
      "memo.excelColTitle": "タイトル",
      "memo.excelColUpdated": "更新日",
    },
  };

  const EXTRA_DICT = {
    es: {
      "tab.todo": "Tareas", "tab.memo": "Notas", "tab.cheat": "Comandos", "tab.mail": "Buzón", "tab.cal": "Calendario", "tab.week": "Semana", "tab.room": "Sala de trabajo", "tab.deco": "Tema", "tab.settings": "Ajustes",
      "todo.today": "Hoy", "todo.backToday": "Hoy", "todo.addPh": "Añadir tarea…", "todo.addPhDate": "tarea con fecha…",
      "todo.emptyToday": "Escribe una tarea en el cuadro de arriba", "todo.emptyDate": "No hay tareas para {d}; puedes añadir una arriba",
      "memo.write": "Escribir nota", "memo.saved": "Notas guardadas", "memo.new": "Nueva nota",
      "memo.placeholder": "Escribe aquí y se guardará automáticamente. La primera línea será el título.",
      "memo.empty": "Las notas que escribas arriba aparecerán aquí",
      "memo.untitled": "(nota vacía)", "memo.delete": "Eliminar",
      "memo.delConfirm": "¿Eliminar la nota \"{x}\"?",
      "memo.buddies": "Lista de notas", "memo.newDraft": "Nueva nota", "memo.newHint": "Escribe como si iniciaras un chat",
      "memo.chatHint": "Se guarda automáticamente", "memo.changeIcon": "Cambiar icono",
      "memo.buddyWindow": "Notas", "memo.category": "Notas",
      "memo.searchPh": "Buscar notas…", "memo.searchNone": "Sin resultados",
      "memo.searchResult": "{n}/{t} mostradas", "memo.totalCount": "{n} notas",
      "memo.sort": "Ordenar", "memo.sortRecent": "Recientes", "memo.sortTitle": "Título", "memo.sortCreated": "Creación",
      "memo.cleanEmpty": "Limpiar notas vacías", "memo.cleanConfirm": "¿Eliminar {n} notas vacías?", "memo.noEmpty": "No hay notas vacías para limpiar",
      "memo.editHint": "Escribe libremente; se guarda automáticamente",
      "memo.bold": "Negrita", "memo.italic": "Cursiva", "memo.underline": "Subrayado", "memo.strike": "Tachado",
      "memo.highlight": "Resaltar", "memo.bullet": "Lista", "memo.number": "Lista numerada",
      "memo.sizeS": "Pequeño", "memo.sizeN": "Normal", "memo.sizeL": "Grande", "memo.sizeXL": "Muy grande",
      "memo.sizeDown": "Más pequeño", "memo.sizeUp": "Más grande",
      "memo.fontHand": "Manuscrita", "memo.fontSerif": "Serif", "memo.fontMono": "Mono", "memo.fontSans": "Sans",
      "memo.heading": "Estilo", "memo.hBody": "Cuerpo", "memo.h1": "Título 1", "memo.h2": "Título 2", "memo.h3": "Título 3",
      "memo.alignLeft": "Alinear izquierda", "memo.alignCenter": "Centrar", "memo.alignRight": "Alinear derecha",
      "memo.quote": "Cita", "memo.hr": "Separador", "memo.clearFormat": "Quitar formato",
      "memo.manage": "Gestionar notas", "memo.managePlaceholder": "Aquí irán búsqueda, orden y limpieza por lotes.",
      "memo.msgCount": "{n} mensajes", "memo.empty2": "(vacío)",
      "memo.back": "Volver a la lista",
      "memo.editEmpty": "Escribe abajo y pulsa Enter para añadir",
      "memo.inputPh": "Escribe un mensaje y pulsa Enter… (Shift+Enter para salto de línea)",
      "memo.editing": "Editando… Enter guarda · Esc cancela",
      "memo.send": "Enviar", "memo.save": "Guardar",
      "memo.color": "Color", "memo.size": "Tamaño", "memo.font": "Fuente",
      "memo.image": "Añadir imagen", "memo.link": "Añadir enlace",
      "memo.linkUrl": "URL del enlace (https://…)", "memo.linkLabel": "Texto visible (opcional)",
      "memo.imageTooLarge": "Imagen demasiado grande (recomendado menos de 600 KB)",
      "memo.edit": "Editar", "memo.msgDelete": "Eliminar este mensaje",
      "memo.msgDelConfirm": "¿Eliminar este mensaje?",
      "memo.cancelEdit": "Cancelar",
      "proj.menu": "Proyecto", "proj.new": "＋ Nuevo proyecto", "proj.rename": "✎ Cambiar nombre", "proj.delete": "✕ Eliminar \"{name}\"",
      "proj.newPrompt": "Nombre del proyecto", "proj.renamePrompt": "Cambiar nombre del proyecto", "proj.fallback": "Proyecto",
      "proj.deleteConfirm": "¿Eliminar el proyecto \"{name}\"? (las tareas y datos se conservan)",
      "todo.need": "Por hacer", "todo.done": "Hecho", "todo.add": "Añadir tarea…",
      "todo.emptyNeed": "Escribe una tarea en el cuadro de abajo", "todo.emptyDone": "Las tareas terminadas aparecerán aquí",
      "cheat.registered": "Comandos guardados", "cheat.frequent": "Frecuentes", "cheat.add": "Añadir comando…",
      "cheat.emptyReg": "Escribe un comando arriba para guardarlo", "cheat.emptyFreq": "Los más usados aparecerán aquí (cuenta al copiar)",
      "cheat.label": "(etiqueta)", "cheat.uses": "{n} veces", "cheat.delConfirm": "¿Eliminar \"{x}\"?",
      "prompt.delConfirm": "¿Eliminar este prompt?",
      "mail.received": "Recibidos", "mail.draft": "Borrador", "mail.paste": "Pegar correo recibido…", "mail.add": "Añadir",
      "mail.markReplied": "Marcar respondido", "mail.replied": "✓ Respondido", "mail.site": "Abrir sitio", "mail.siteConnect": "Vincular sitio",
      "mail.draftLabel": "Borrador de respuesta", "mail.emptyTop": "Pega un correo recibido para añadirlo",
      "mail.emptyBottom": "Selecciona una consulta arriba para escribir aquí",
      "mail.draftPlaceholder": "Escribe tu borrador…", "mail.noTitle": "(sin asunto)", "mail.inquiry": "Consulta",
      "mail.sitePrompt": "URL de respuesta/plataforma (ej. https://mail.google.com/...)",
      "mail.back": "Lista", "mail.copyDraft": "Copiar borrador", "mail.noBody": "(sin contenido)",
      "mail.presets": "Respuestas rápidas", "mail.presetEmpty": "Guarda frases que uses a menudo",
      "mail.presetNew": "Añadir plantilla", "mail.presetLabel": "Etiqueta (ej. Reembolso)", "mail.presetText": "Texto de respuesta",
      "mail.presetSave": "Guardar", "mail.presetCancel": "Cancelar",
      "mail.presetDelConfirm": "¿Eliminar esta plantilla?",
      "mail.useApplied": "Plantilla aplicada al borrador",
      "cal.todayBtn": "Hoy", "cal.note": "Escribe la nota o diario de hoy…",
      "cal.done": "{n} hechas", "cal.mails": "{n} correos",
      "planner.title": "PLAN SEMANAL", "planner.notes": "Notas",
      "planner.notesPh": "Escribe notas de esta semana…",
      "planner.mon": "Lunes", "planner.tue": "Martes", "planner.wed": "Miércoles", "planner.thu": "Jueves",
      "planner.fri": "Viernes", "planner.sat": "Sábado", "planner.sun": "Domingo",
      "planner.today": "hoy", "planner.add": "añadir", "planner.addPh": "Escribe y pulsa Enter…",
      "planner.prev": "Semana anterior", "planner.next": "Semana siguiente", "planner.thisWeek": "Esta semana",
      "planner.weekTotal": "Total de esta semana",
      "planner.unattributed": "Sin asignar",
      "dday.set": "ajustar", "dday.dday": "DÍA D", "dday.title": "Ajustes de día D", "dday.label": "Día D",
      "dday.namePlaceholder": "Nombre (ej. Lanzamiento)", "dday.clear": "Borrar fecha",
      "music.add": "Añade un enlace de YouTube ♫", "music.loading": "Cargando…",
      "music.playlist": "Lista ♫", "music.paste": "Pegar enlace de YouTube", "music.err": "No se pudo leer ese enlace de YouTube", "music.empty": "Pega un enlace de YouTube para añadir una canción",
      "music.prev": "Anterior", "music.next": "Siguiente", "music.play": "Reproducir", "music.pause": "Pausa", "music.volume": "Volumen",
      "app.close": "Cerrar app", "app.minimize": "Minimizar", "app.miniMode": "Modo mini",
      "set.dockHide": "Minimizar dock", "set.dockHideHint": "Reduce el dock a una pequeña barra. Haz clic para abrirlo.",
      "set.dockReveal": "Mostrar dock",
      "set.dockMiniTip": "Arrastra para mover · Clic para abrir",
      "set.tabsAutoHide": "Ocultar pestañas", "set.tabsAutoHideHint": "Oculta las pestañas laterales. Pon el mouse en el borde 1 s para verlas.",
      "timer.next": "Próximo estiramiento", "work.title": "Trabajo de hoy",
      "worktrack.runningOn": "Registrando tiempo · clic para pausar",
      "worktrack.runningOff": "Pausado · clic para reanudar",
      "worktrack.resetTip": "Reiniciar el tiempo de hoy a 0",
      "worktrack.resetConfirm": "¿Reiniciar a 0 el tiempo acumulado de hoy?",
      "set.dock": "Lado del dock", "set.left": "Izquierda", "set.right": "Derecha",
      "set.todayShort": "Hoy",
      "set.tabDir": "Dirección de pestañas", "set.outer": "Fuera", "set.inner": "Dentro",
      "set.desktop": "Modo escritorio (transparente)", "set.desktopHint": "Muestra solo el dock y oculta el fondo de código. En la app de escritorio se ve el fondo.",
      "set.on": "Sí", "set.off": "No",
      "set.alwaysOnTop": "Siempre encima", "set.alwaysOnTopHint": "Mantiene la ventana sobre otras apps.",
      "set.roomTab": "Pestaña Sala", "set.roomTabHint": "Si está apagado, oculta la sala lateral. Útil si usas Todoary solo.",
      "set.lang": "Idioma", "set.size": "Alto de app", "set.sizeNormal": "Grande", "set.sizeMedium": "Medio", "set.sizeCompact": "Corto", "set.data": "Datos", "set.reset": "Reiniciar datos",
      "set.resetCaption": "Se borran proyectos, tareas, comandos, correos y notas.",
      "set.resetConfirm": "¿Borrar todos los datos y volver al estado inicial?",
      "deco.theme": "Temas", "deco.bg": "Fondo", "deco.color": "Colores",
      "deco.baseTheme": "Preajustes", "deco.myTheme": "Mis temas", "deco.save": "＋ Guardar tema actual",
      "deco.saveName": "Nombre del tema", "deco.myThemeName": "Mi tema ",
      "deco.preview": "Vista previa", "deco.type": "Tipo", "deco.linear": "Lineal", "deco.radial": "Radial",
      "deco.dir": "Dirección", "deco.stops": "Colores", "deco.addColor": "＋ Añadir color",
      "deco.shape": "Forma", "deco.shapeNone": "Ninguna", "deco.shapeHeart": "Corazón", "deco.shapeHearts": "Corazones", "deco.shapeStars": "Estrellas", "deco.shapeClover": "Trébol", "deco.shapeRibbon": "Lazo", "deco.shapeFish": "Pez dorado",
      "deco.point": "Color de acento", "deco.chrome": "Color de barra", "deco.headerGrad": "Gradiente superior",
      "deco.tape": "Cinta", "deco.tapePreview": "Vista previa", "deco.tapePattern": "Patrón",
      "deco.tapePatternDots": "Puntos", "deco.tapePatternDiag": "Diagonal", "deco.tapePatternGingham": "Cuadros", "deco.tapePatternNone": "Ninguno",
      "deco.tapePalette": "Paleta", "deco.tapePin": "Color fijado", "deco.tapeAddColor": "＋ Añadir color", "deco.tapeReset": "Restablecer", "deco.tapeResetConfirm": "¿Restablecer la cinta a los valores predeterminados?",
      "deco.tapePreviewHint": "Toca una tira para cambiar el color",
      "deco.tapeSample": "Tarea", "deco.tapePinLabel": "Fijado",
      "deco.tapePickOne": "Solo esta", "deco.tapePickAll": "Toda la paleta",
      "deco.tapeBorder": "Borde", "deco.tapeBorderNone": "Ninguno", "deco.tapeBorderNormal": "Normal", "deco.tapeBorderBold": "Grueso",
      "deco.tapeBorderSoft": "Claro", "deco.tapeBorderInk": "Oscuro",
      "deco.tapeEdgeFade": "Desvanecer bordes", "deco.tapePatternColor": "Color del patrón",
      "deco.tapeGradient": "Gradiente 1–12", "deco.tapeGradientHint": "La 1 queda clara y la 12 más oscura",
      "deco.tapeGradLight": "Claro (1)", "deco.tapeGradDark": "Oscuro (12)", "deco.tapeGradApply": "Aplicar gradiente",
      "deco.myTapeTheme": "Mi cinta", "deco.myTapeThemeName": "Mi cinta ", "deco.saveTapeTheme": "＋ Guardar cinta actual",
      "th.basic": "Básico", "th.melon": "Melón soda", "th.summer": "Verano", "th.green": "Verde", "th.milk": "Leche de fresa", "th.peach": "Durazno", "th.lavender": "Lavanda", "th.night": "Cielo nocturno",
      "room.title": "Nuestra sala", "room.emptyTitle": "Trabajar juntos, en silencio",
      "room.emptyHint": "Como tener a alguien cerca: sin chat, llamadas ni avisos.\nSolo la sensación de compañía.",
      "room.create": "Crear sala", "room.join": "Entrar con código",
      "room.namePh": "Nombre de sala (ej. Nuestra sala)", "room.codePh": "Código de 6 dígitos",
      "room.copyCode": "Copiar código", "room.copied": "Copiado",
      "room.invite": "Invitar", "room.leave": "Salir", "room.leaveConfirm": "¿Salir de esta sala?",
      "room.online": "trabajando", "room.idle": "ausente", "room.offline": "sin conexión",
      "room.you": "tú", "room.todayTotal": "Hoy en equipo",
      "room.connected": "{n}/4 aquí", "room.full": "La sala está llena (máx. 4)",
      "room.notFound": "No existe una sala con ese código", "room.codeInvalid": "Revisa el código de invitación",
      "room.showTitle": "Mostrar título", "room.hideTitle": "Solo cantidad",
      "room.clap": "👏", "room.clapHint": "Enviar aplauso",
      "room.localMode": "Modo local: solo tú puedes verlo hasta configurar Firebase",
      "room.connecting": "Conectando…",
      "room.noTodo": "sin tareas", "room.notWorking": "descansando",
      "room.pickAvatar": "Elegir avatar", "room.namePrompt": "Nombre visible en la sala",
      "room.savedMember": "Ya estás en la sala",
    },
    pt: {
      "tab.todo": "Tarefas", "tab.memo": "Notas", "tab.cheat": "Comandos", "tab.mail": "Caixa", "tab.cal": "Calendário", "tab.week": "Semana", "tab.room": "Sala de foco", "tab.deco": "Tema", "tab.settings": "Ajustes",
      "todo.today": "Hoje", "todo.backToday": "Hoje", "todo.addPh": "Adicionar tarefa…", "todo.addPhDate": "tarefa com prazo…",
      "todo.emptyToday": "Digite uma tarefa na caixa acima", "todo.emptyDate": "Não há tarefas para {d}; adicione uma acima",
      "memo.write": "Escrever nota", "memo.saved": "Notas salvas", "memo.new": "Nova nota",
      "memo.placeholder": "Escreva aqui e será salvo automaticamente. A primeira linha vira o título.",
      "memo.empty": "As notas escritas acima aparecerão aqui",
      "memo.untitled": "(nota vazia)", "memo.delete": "Excluir",
      "memo.delConfirm": "Excluir a nota \"{x}\"?",
      "memo.buddies": "Lista de notas", "memo.newDraft": "Nova nota", "memo.newHint": "Escreva como se começasse um chat",
      "memo.chatHint": "Salva automaticamente", "memo.changeIcon": "Trocar ícone",
      "memo.buddyWindow": "Notas", "memo.category": "Notas",
      "memo.searchPh": "Buscar notas…", "memo.searchNone": "Sem resultados",
      "memo.searchResult": "{n}/{t} exibidas", "memo.totalCount": "{n} notas",
      "memo.sort": "Ordenar", "memo.sortRecent": "Recentes", "memo.sortTitle": "Título", "memo.sortCreated": "Criação",
      "memo.cleanEmpty": "Limpar notas vazias", "memo.cleanConfirm": "Excluir {n} notas vazias?", "memo.noEmpty": "Não há notas vazias para limpar",
      "memo.editHint": "Escreva livremente; salva automaticamente",
      "memo.bold": "Negrito", "memo.italic": "Itálico", "memo.underline": "Sublinhado", "memo.strike": "Riscado",
      "memo.highlight": "Destacar", "memo.bullet": "Lista", "memo.number": "Lista numerada",
      "memo.sizeS": "Pequeno", "memo.sizeN": "Normal", "memo.sizeL": "Grande", "memo.sizeXL": "Enorme",
      "memo.sizeDown": "Menor", "memo.sizeUp": "Maior",
      "memo.fontHand": "Manual", "memo.fontSerif": "Serifada", "memo.fontMono": "Mono", "memo.fontSans": "Sans",
      "memo.heading": "Estilo", "memo.hBody": "Texto", "memo.h1": "Título 1", "memo.h2": "Título 2", "memo.h3": "Título 3",
      "memo.alignLeft": "Alinhar à esquerda", "memo.alignCenter": "Centralizar", "memo.alignRight": "Alinhar à direita",
      "memo.quote": "Citação", "memo.hr": "Divisor", "memo.clearFormat": "Limpar formato",
      "memo.manage": "Gerenciar notas", "memo.managePlaceholder": "Busca, ordenação e limpeza em lote ficarão aqui.",
      "memo.msgCount": "{n} mensagens", "memo.empty2": "(vazio)",
      "memo.back": "Voltar à lista",
      "memo.editEmpty": "Digite abaixo e pressione Enter para adicionar",
      "memo.inputPh": "Digite uma mensagem e pressione Enter… (Shift+Enter para quebrar linha)",
      "memo.editing": "Editando… Enter salva · Esc cancela",
      "memo.send": "Enviar", "memo.save": "Salvar",
      "memo.color": "Cor", "memo.size": "Tamanho", "memo.font": "Fonte",
      "memo.image": "Adicionar imagem", "memo.link": "Adicionar link",
      "memo.linkUrl": "URL do link (https://…)", "memo.linkLabel": "Texto visível (opcional)",
      "memo.imageTooLarge": "Imagem grande demais (recomendado até 600 KB)",
      "memo.edit": "Editar", "memo.msgDelete": "Excluir esta mensagem",
      "memo.msgDelConfirm": "Excluir esta mensagem?",
      "memo.cancelEdit": "Cancelar",
      "proj.menu": "Projeto", "proj.new": "＋ Novo projeto", "proj.rename": "✎ Renomear", "proj.delete": "✕ Excluir \"{name}\"",
      "proj.newPrompt": "Nome do projeto", "proj.renamePrompt": "Renomear projeto", "proj.fallback": "Projeto",
      "proj.deleteConfirm": "Excluir o projeto \"{name}\"? (tarefas e dados permanecem)",
      "todo.need": "A fazer", "todo.done": "Feito", "todo.add": "Adicionar tarefa…",
      "todo.emptyNeed": "Digite uma tarefa na caixa abaixo", "todo.emptyDone": "Tarefas concluídas aparecerão aqui",
      "cheat.registered": "Comandos salvos", "cheat.frequent": "Frequentes", "cheat.add": "Adicionar comando…",
      "cheat.emptyReg": "Digite um comando acima para salvar", "cheat.emptyFreq": "Os mais usados aparecem aqui (conta ao copiar)",
      "cheat.label": "(rótulo)", "cheat.uses": "{n} vezes", "cheat.delConfirm": "Excluir \"{x}\"?",
      "prompt.delConfirm": "Excluir este prompt?",
      "mail.received": "Recebidos", "mail.draft": "Rascunho", "mail.paste": "Cole o e-mail recebido…", "mail.add": "Adicionar",
      "mail.markReplied": "Marcar respondido", "mail.replied": "✓ Respondido", "mail.site": "Abrir site", "mail.siteConnect": "Vincular site",
      "mail.draftLabel": "Rascunho de resposta", "mail.emptyTop": "Cole um e-mail recebido para adicionar",
      "mail.emptyBottom": "Selecione uma consulta acima para escrever aqui",
      "mail.draftPlaceholder": "Escreva seu rascunho…", "mail.noTitle": "(sem assunto)", "mail.inquiry": "Consulta",
      "mail.sitePrompt": "URL de resposta/plataforma (ex. https://mail.google.com/...)",
      "mail.back": "Lista", "mail.copyDraft": "Copiar rascunho", "mail.noBody": "(sem conteúdo)",
      "mail.presets": "Respostas rápidas", "mail.presetEmpty": "Salve frases usadas com frequência",
      "mail.presetNew": "Adicionar modelo", "mail.presetLabel": "Rótulo (ex. Reembolso)", "mail.presetText": "Texto da resposta",
      "mail.presetSave": "Salvar", "mail.presetCancel": "Cancelar",
      "mail.presetDelConfirm": "Excluir este modelo?",
      "mail.useApplied": "Modelo aplicado ao rascunho",
      "cal.todayBtn": "Hoje", "cal.note": "Escreva a nota ou diário de hoje…",
      "cal.done": "{n} feitas", "cal.mails": "{n} e-mails",
      "planner.title": "PLANO SEMANAL", "planner.notes": "Notas",
      "planner.notesPh": "Escreva notas desta semana…",
      "planner.mon": "Segunda", "planner.tue": "Terça", "planner.wed": "Quarta", "planner.thu": "Quinta",
      "planner.fri": "Sexta", "planner.sat": "Sábado", "planner.sun": "Domingo",
      "planner.today": "hoje", "planner.add": "adicionar", "planner.addPh": "Digite e pressione Enter…",
      "planner.prev": "Semana anterior", "planner.next": "Próxima semana", "planner.thisWeek": "Esta semana",
      "planner.weekTotal": "Total desta semana",
      "planner.unattributed": "Sem projeto",
      "dday.set": "ajustar", "dday.dday": "D-DAY", "dday.title": "Ajustes de D-day", "dday.label": "D-day",
      "dday.namePlaceholder": "Nome (ex. Lançamento)", "dday.clear": "Limpar data",
      "music.add": "Adicione um link do YouTube ♫", "music.loading": "Carregando…",
      "music.playlist": "Playlist ♫", "music.paste": "Colar link do YouTube", "music.err": "Não foi possível ler esse link do YouTube", "music.empty": "Cole um link do YouTube para adicionar uma música",
      "music.prev": "Anterior", "music.next": "Próxima", "music.play": "Reproduzir", "music.pause": "Pausar", "music.volume": "Volume",
      "app.close": "Fechar app", "app.minimize": "Minimizar", "app.miniMode": "Modo mini",
      "set.dockHide": "Minimizar dock", "set.dockHideHint": "Reduz o dock a uma pequena faixa. Clique para abrir.",
      "set.dockReveal": "Mostrar dock",
      "set.dockMiniTip": "Arraste para mover · Clique para abrir",
      "set.tabsAutoHide": "Ocultar abas", "set.tabsAutoHideHint": "Oculta as abas laterais. Passe o mouse na borda por 1 s para mostrar.",
      "timer.next": "Próximo alongamento", "work.title": "Trabalho de hoje",
      "worktrack.runningOn": "Registrando tempo · clique para pausar",
      "worktrack.runningOff": "Pausado · clique para retomar",
      "worktrack.resetTip": "Zerar o tempo de hoje",
      "worktrack.resetConfirm": "Zerar o tempo acumulado de hoje?",
      "set.dock": "Lado do dock", "set.left": "Esquerda", "set.right": "Direita",
      "set.todayShort": "Hoje",
      "set.tabDir": "Direção das abas", "set.outer": "Fora", "set.inner": "Dentro",
      "set.desktop": "Modo desktop (transparente)", "set.desktopHint": "Mostra só o dock e oculta o fundo de código. No app desktop o papel de parede aparece.",
      "set.on": "Sim", "set.off": "Não",
      "set.alwaysOnTop": "Sempre no topo", "set.alwaysOnTopHint": "Mantém a janela acima dos outros apps.",
      "set.roomTab": "Aba Sala", "set.roomTabHint": "Desligado oculta a sala lateral. Útil para usar o Todoary sozinho.",
      "set.lang": "Idioma", "set.size": "Altura do app", "set.sizeNormal": "Grande", "set.sizeMedium": "Médio", "set.sizeCompact": "Curto", "set.data": "Dados", "set.reset": "Zerar dados",
      "set.resetCaption": "Projetos, tarefas, comandos, e-mails e notas serão apagados.",
      "set.resetConfirm": "Apagar todos os dados e voltar ao estado inicial?",
      "deco.theme": "Temas", "deco.bg": "Fundo", "deco.color": "Cores",
      "deco.baseTheme": "Predefinidos", "deco.myTheme": "Meus temas", "deco.save": "＋ Salvar tema atual",
      "deco.saveName": "Nome do tema", "deco.myThemeName": "Meu tema ",
      "deco.preview": "Prévia", "deco.type": "Tipo", "deco.linear": "Linear", "deco.radial": "Radial",
      "deco.dir": "Direção", "deco.stops": "Cores", "deco.addColor": "＋ Adicionar cor",
      "deco.shape": "Forma", "deco.shapeNone": "Nenhuma", "deco.shapeHeart": "Coração", "deco.shapeHearts": "Corações", "deco.shapeStars": "Estrelas", "deco.shapeClover": "Trevo", "deco.shapeRibbon": "Laço", "deco.shapeFish": "Peixinho",
      "deco.point": "Cor de destaque", "deco.chrome": "Cor da barra", "deco.headerGrad": "Gradiente superior",
      "deco.tape": "Fita", "deco.tapePreview": "Prévia", "deco.tapePattern": "Padrão",
      "deco.tapePatternDots": "Pontos", "deco.tapePatternDiag": "Diagonal", "deco.tapePatternGingham": "Xadrez", "deco.tapePatternNone": "Nenhum",
      "deco.tapePalette": "Paleta", "deco.tapePin": "Cor fixada", "deco.tapeAddColor": "＋ Adicionar cor", "deco.tapeReset": "Restaurar padrão", "deco.tapeResetConfirm": "Restaurar as configurações da fita para o padrão?",
      "deco.tapePreviewHint": "Toque uma faixa para mudar a cor",
      "deco.tapeSample": "Tarefa", "deco.tapePinLabel": "Fixado",
      "deco.tapePickOne": "Só esta", "deco.tapePickAll": "Paleta inteira",
      "deco.tapeBorder": "Borda", "deco.tapeBorderNone": "Nenhuma", "deco.tapeBorderNormal": "Normal", "deco.tapeBorderBold": "Grossa",
      "deco.tapeBorderSoft": "Clara", "deco.tapeBorderInk": "Escura",
      "deco.tapeEdgeFade": "Desbotar bordas", "deco.tapePatternColor": "Cor do padrão",
      "deco.tapeGradient": "Gradiente 1–12", "deco.tapeGradientHint": "A faixa 1 fica clara e a 12 mais escura",
      "deco.tapeGradLight": "Clara (1)", "deco.tapeGradDark": "Escura (12)", "deco.tapeGradApply": "Aplicar gradiente",
      "deco.myTapeTheme": "Minha fita", "deco.myTapeThemeName": "Minha fita ", "deco.saveTapeTheme": "＋ Salvar fita atual",
      "th.basic": "Básico", "th.melon": "Melon soda", "th.summer": "Verão", "th.green": "Verde", "th.milk": "Leite de morango", "th.peach": "Pêssego", "th.lavender": "Lavanda", "th.night": "Céu noturno",
      "room.title": "Nossa sala", "room.emptyTitle": "Trabalhar juntos, em silêncio",
      "room.emptyHint": "Como ter alguém por perto: sem chat, chamadas ou alertas.\nSó a sensação de companhia.",
      "room.create": "Criar sala", "room.join": "Entrar com código",
      "room.namePh": "Nome da sala (ex. Nossa sala)", "room.codePh": "Código de 6 dígitos",
      "room.copyCode": "Copiar código", "room.copied": "Copiado",
      "room.invite": "Convidar", "room.leave": "Sair", "room.leaveConfirm": "Sair desta sala?",
      "room.online": "trabalhando", "room.idle": "ausente", "room.offline": "offline",
      "room.you": "você", "room.todayTotal": "Hoje em equipe",
      "room.connected": "{n}/4 aqui", "room.full": "A sala está cheia (máx. 4)",
      "room.notFound": "Não há sala com esse código", "room.codeInvalid": "Confira o código de convite",
      "room.showTitle": "Mostrar título", "room.hideTitle": "Só quantidade",
      "room.clap": "👏", "room.clapHint": "Enviar aplauso",
      "room.localMode": "Modo local: só você vê até configurar o Firebase",
      "room.connecting": "Conectando…",
      "room.noTodo": "sem tarefas", "room.notWorking": "descansando",
      "room.pickAvatar": "Escolher avatar", "room.namePrompt": "Nome visível na sala",
      "room.savedMember": "Você entrou na sala",
    },
  };
  Object.keys(EXTRA_DICT).forEach(k => { DICT[k] = { ...DICT.en, ...EXTRA_DICT[k] }; });

  const UI_PATCH = {
    ko: {
      "todo.recDaily": "매일", "todo.recWeekdays": "평일", "todo.recWeekly": "특정 요일", "todo.specificDays": "특정 요일",
      "todo.editTitle": "클릭해서 편집", "todo.due": "마감", "todo.dueDate": "마감일", "todo.repeat": "반복",
      "todo.pin": "핀(중요·예정으로 이동)", "todo.unpin": "핀 해제",
      "todo.markDone": "끝냄으로 표시", "todo.undoDone": "되돌리기",
      "todo.subAdd": "하위 할 일 추가…", "todo.clear": "지우기", "todo.clearPeriod": "기간 지우기",
      "todo.subLinkAdd": "하위 할 일 링크 추가", "todo.subLinkEdit": "하위 할 일 링크 수정", "todo.subLinkOpen": "링크 열기", "todo.subLinkPrompt": "하위 할 일 링크 URL (비우면 삭제)",
      "todo.period": "기간", "todo.apply": "적용", "todo.close": "닫기", "todo.removeRepeat": "반복 해제",
      "todo.dragPeriodHint": "원하는 기간을 드래그 해 주세요",
      "todo.clearSchedule": "일정 해제",
      "todo.clearScheduleHint": "기간·반복을 지우고 처음 추가한 날짜로 돌아갑니다",
      "todo.setRepeat": "반복 설정",
      "todo.setRepeatHint": "원하는 요일을 등록 해 주세요",
      "todo.setRepeatHintNoPeriod": "반복 주기를 선택하세요. 기간을 제한하려면 달력에서 드래그하세요.",
      "todo.schedulePanelHint": "반복을 고르고, 필요하면 달력에서 기간을 드래그하세요.",
      "todo.periodNone": "없음 (계속 반복)",
      "todo.periodStart": "시작",
      "todo.periodEnd": "끝",
      "todo.applyPeriod": "기간 적용",
      "todo.periodPreset1m": "1개월",
      "todo.periodPreset3m": "3개월",
      "todo.periodPresetOngoing": "계속",
      "todo.periodOrDrag": "또는 달력 드래그",
      "todo.periodPending": "{range} — 위에서 예/아니오로 확정",
      "todo.periodConfirm": "{range} — 이 날짜로 등록할까요?",
      "todo.yes": "예",
      "todo.no": "아니오",
      "todo.save": "저장",
      "todo.scheduleSaved": "반영 완료",
      "memo.blocks": "/ blocks", "memo.quickTitle": "제목", "memo.quickTodo": "☐ 할 일", "memo.quickList": "• 목록", "memo.quickQuote": "인용", "memo.quickDivider": "구분선", "memo.todoText": "할 일", "memo.linkedTodo": "연결된 할 일",
      "mail.copyClipboard": "클립보드에 복사", "mail.edit": "편집", "mail.noLabel": "(라벨 없음)",
      "mail.markUnread": "미답으로", "mail.markRepliedTip": "답장함으로",
      "room.roomNameLabel": "방 이름", "room.inviteCodeLabel": "초대 코드", "room.tagline": "조용히 같이 일하는 방",
      "room.profileHint": "프로필을 누르면 이름과 아이콘을 바꿀 수 있어요.",
      "room.description": "설명: 작업방은 옆에 누가 있는 것처럼 조용히 같이 일하는 공간이에요. 채팅·통화 알림 없이 할 일과 상태만 가볍게 공유해요.",
      "room.betaTitle": "실험실 : 작업방 탭", "room.betaBody": "이 탭은 beta 기능입니다. 아직 완성되지 않은 부분들이 많아요. 문제/건의사항이 있을 시 {email}으로 보내주시면 감사드립니다!",
      "room.profileSettings": "프로필 설정", "room.todayReady": "오늘 준비", "room.friend": "친구",
      "room.copyInviteCode": "초대 코드 복사", "room.codeCopied": "{code} 복사됨", "room.inviteCodeFlash": "초대 코드: {code}",
      "room.away": "자리비움", "room.return": "복귀", "room.awayOff": "자리비움 해제",
      "room.noPublicTitle": "공개된 제목이 없어요", "room.totalWork": "우리방 총 작업시간", "room.toggleDone": "완료 토글",
      "room.shareToday": "오늘 공유할 할 일", "room.noTodayTasks": "오늘 할 일이 없어요", "room.register": "등록", "room.registered": "채팅창에 등록됨",
      "room.noName": "이름없음", "room.changeProfile": "프로필 변경", "room.changeNameAvatar": "이름·아바타 변경",
      "room.onlineStatus": "온라인", "room.workingStatus": "작업 중", "room.offlineStatus": "오프라인", "room.pausedStatus": "공유 쉬기",
      "room.statusAwayLog": "자리비움 모드로 전환했습니다.", "room.statusOfflineLog": "오프라인 상태가 되었습니다.", "room.statusOnlineLog": "온라인 상태가 되었습니다.", "room.statusPausedLog": "공유 쉬기 상태가 되었습니다.",
      "room.privateWithTasks": "할 일은 있지만 공개로 표시한 게 없어요", "room.privateProgress": "{n}개 진행 중 · 제목 비공개",
      "room.visibleTip": "방 멤버에게 보임 — 클릭해서 숨기기", "room.privateTip": "비공개 — 클릭해서 방에 공개",
      "room.visibleTipSub": "제목·세부목록 공개 — 클릭해서 숨기기", "room.privateTipSub": "비공개 — 클릭하면 제목·세부목록 공개",
      "room.toggleSubDone": "세부 할 일 완료 토글",
      "room.changeMyStatus": "내 상태 바꾸기", "room.copyInviteSame": "초대 코드 복사 (상단 코드와 동일)",
      "common.cancel": "취소", "common.yes": "예", "common.no": "아니오", "common.save": "저장", "common.error": "오류", "common.delete": "삭제",
      "todo.all": "전체", "todo.emptyMonth": "이번달 할 일이 없어요", "todo.dragMove": "드래그로 이동", "todo.subCollapse": "하위 목록 접기", "todo.subExpand": "하위 목록 펼치기", "todo.openMemo": "메모에서 자세히 쓰기",
      "room.donePublic": "{title}를 완료했습니다.", "room.donePrivate": "할 일 1개를 완료했습니다.",
      "time.am": "오전", "time.pm": "오후",
      "room.profileHintShort": "프로필을 눌러 이름·아이콘·상태 메시지를 바꿔요",
      "room.statusMessageLabel": "상태 메시지",
      "room.statusMessagePh": "짧은 한마디…",
      "room.statusMessageHint": "공백 포함 최대 25자",
      "room.statusMessageCooldownMin": "{min}분 후 다시 등록할 수 있어요",
      "room.statusMessageCooldownSec": "{sec}초 후 다시 등록할 수 있어요",
      "room.statusMessageCooldownMinSec": "{min}분 {sec}초 후 다시 등록할 수 있어요",
      "planner.backWeek": "주간으로", "planner.prevDay": "이전 날", "planner.nextDay": "다음 날",
      "planner.diaryExists": "일기 있음", "planner.diaryShort": "일기", "planner.diaryPh": "오늘의 일기...", "planner.diaryTitle": "일기", "planner.mood": "기분", "planner.workEnd": "작업 종료", "planner.doneSection": "끝낸 일", "planner.noTasksDay": "이 날 할 일이 없었어요", "planner.noSong": "들은 곡 없음", "planner.noSongTitle": "(제목 없음)", "planner.work": "작업", "planner.doneShort": "완료", "planner.streak": "연속", "planner.days": "{n}일",
      "pomo.title": "뽀모도로", "pomo.work": "집중", "pomo.break": "휴식", "pomo.idle": "대기",
      "pomo.start": "시작", "pomo.pause": "일시정지", "pomo.resume": "재개", "pomo.skip": "건너뛰기", "pomo.stop": "정지", "pomo.continue": "계속",
      "pomo.notifyWork": "집중 시간 끝! 잠깐 쉬어요.", "pomo.notifyBreak": "휴식 끝! 다시 시작할까요?",
      "pomo.notifyOn": "시스템 알림 켜짐", "pomo.notifyOff": "시스템 알림 꺼짐",
      "pomo.notifyEnable": "알림 허용", "pomo.notifyHint": "집중·휴식이 끝나면 알려드려요. 앱 안 토스트는 항상 표시됩니다.",
      "pomo.settings": "설정", "pomo.settingsClose": "설정 닫기",
      "pomo.sound": "알림음", "pomo.soundVolume": "알림음 크기", "pomo.soundType": "알림음 종류",
      "pomo.soundChime": "차임", "pomo.soundBell": "벨", "pomo.soundSoft": "부드럽게",
      "pomo.soundTest": "🔔 미리듣기", "pomo.workMin": "집중 (분)", "pomo.breakMin": "휴식 (분)",
      "pomo.minHoldHint": "짧게 누르면 1분 · 1.5초 이상 누르면 빠르게 변경",
      "pomo.minInputHint": "클릭해서 숫자 직접 입력", "pomo.minInput": "분",
      "pomo.durationIdleHint": "시간 변경은 대기 상태에서만 가능해요.",
      "pomo.durationActiveHint": "타이머 진행 중이면 다음 사이클부터 적용돼요.",
      "pomo.notifyLabel": "시스템 알림",
      "pomo.sectionTime": "시간", "pomo.sectionSound": "알림음", "pomo.sectionNotify": "알림",
      "set.pomodoro": "뽀모도로 타이머", "set.pomodoroHint": "켜면 상단 상태표(디데이 옆)에 뽀모도로가 나타나요.",
    },
    en: {
      "todo.recDaily": "Daily", "todo.recWeekdays": "Weekdays", "todo.recWeekly": "Specific days", "todo.specificDays": "Specific days",
      "todo.editTitle": "Click to edit", "todo.due": "Due", "todo.dueDate": "Due date", "todo.repeat": "Repeat",
      "todo.pin": "Pin as important", "todo.unpin": "Unpin",
      "todo.markDone": "Mark done", "todo.undoDone": "Undo done",
      "todo.subAdd": "Add a subtask…", "todo.clear": "Clear", "todo.clearPeriod": "Clear period",
      "todo.subLinkAdd": "Add subtask link", "todo.subLinkEdit": "Edit subtask link", "todo.subLinkOpen": "Open link", "todo.subLinkPrompt": "Subtask link URL (blank removes)",
      "todo.period": "Period", "todo.apply": "Apply", "todo.close": "Close", "todo.removeRepeat": "Remove repeat",
      "todo.dragPeriodHint": "Drag the period you want on the calendar",
      "todo.clearSchedule": "Clear schedule",
      "todo.clearScheduleHint": "Remove period and repeat; restore the original add date",
      "todo.setRepeat": "Set repeat",
      "todo.setRepeatHint": "Choose which weekdays to repeat",
      "todo.setRepeatHintNoPeriod": "Pick a repeat schedule. Drag on the calendar to limit the date range.",
      "todo.schedulePanelHint": "Choose repeat, then drag on the calendar to limit the date range if needed.",
      "todo.periodNone": "None (repeats ongoing)",
      "todo.periodStart": "Start",
      "todo.periodEnd": "End",
      "todo.applyPeriod": "Apply period",
      "todo.periodPreset1m": "1 month",
      "todo.periodPreset3m": "3 months",
      "todo.periodPresetOngoing": "Ongoing",
      "todo.periodOrDrag": "or drag on calendar",
      "todo.periodPending": "{range} — confirm above with Yes/No",
      "todo.periodConfirm": "Register for {range}?",
      "todo.yes": "Yes",
      "todo.no": "No",
      "todo.save": "Save",
      "todo.scheduleSaved": "Saved",
      "memo.blocks": "/ blocks", "memo.quickTitle": "Title", "memo.quickTodo": "☐ Task", "memo.quickList": "• List", "memo.quickQuote": "Quote", "memo.quickDivider": "Divider", "memo.todoText": "Task", "memo.linkedTodo": "Linked task",
      "mail.copyClipboard": "Copy to clipboard", "mail.edit": "Edit", "mail.noLabel": "(no label)",
      "mail.markUnread": "Mark unread", "mail.markRepliedTip": "Mark replied",
      "room.roomNameLabel": "Room name", "room.inviteCodeLabel": "Invite code", "room.tagline": "A quiet room to work together",
      "room.profileHint": "Tap your profile to change your name and icon.",
      "room.description": "About: Work Room is a quiet space that feels like someone is nearby. Share tasks and status lightly, without chat, calls or notifications.",
      "room.betaTitle": "Lab: Work Room tab", "room.betaBody": "This tab is a beta feature and some parts are unfinished. Please send issues or ideas to {email}. Thank you!",
      "room.profileSettings": "Profile settings", "room.todayReady": "Today ready", "room.friend": "Friend",
      "room.copyInviteCode": "Copy invite code", "room.codeCopied": "{code} copied", "room.inviteCodeFlash": "Invite code: {code}",
      "room.away": "Away", "room.return": "Back", "room.awayOff": "Back from away",
      "room.noPublicTitle": "No public titles", "room.totalWork": "Total room work time", "room.toggleDone": "Toggle done",
      "room.shareToday": "Tasks to share today", "room.noTodayTasks": "No tasks today", "room.register": "Register", "room.registered": "Registered in chat",
      "room.noName": "No name", "room.changeProfile": "Change profile", "room.changeNameAvatar": "Change name/avatar",
      "room.onlineStatus": "Online", "room.workingStatus": "Working", "room.offlineStatus": "Offline", "room.pausedStatus": "Paused sharing",
      "room.statusAwayLog": "Switched to away mode.", "room.statusOfflineLog": "Went offline.", "room.statusOnlineLog": "Came online.", "room.statusPausedLog": "Paused sharing.",
      "room.privateWithTasks": "You have tasks, but none are public", "room.privateProgress": "{n} in progress · titles private",
      "room.visibleTip": "Visible to room members; click to hide", "room.privateTip": "Private; click to share in the room",
      "room.visibleTipSub": "Title and subtasks shared; click to hide", "room.privateTipSub": "Private; click to share title and subtasks",
      "room.toggleSubDone": "Toggle subtask done",
      "room.changeMyStatus": "Change my status", "room.copyInviteSame": "Copy invite code (same as top code)",
      "common.cancel": "Cancel", "common.yes": "Yes", "common.no": "No", "common.save": "Save", "common.error": "Error", "common.delete": "Delete",
      "todo.all": "All", "todo.emptyMonth": "No tasks this month", "todo.dragMove": "Drag to move", "todo.subCollapse": "Collapse subtasks", "todo.subExpand": "Expand subtasks", "todo.openMemo": "Write details in memo",
      "room.donePublic": "Completed {title}.", "room.donePrivate": "Completed 1 task.",
      "time.am": "AM", "time.pm": "PM",
      "room.profileHintShort": "Tap your profile to change name, icon, and status message",
      "room.statusMessageLabel": "Status message",
      "room.statusMessagePh": "A short line…",
      "room.statusMessageHint": "Up to 25 characters (spaces count)",
      "room.statusMessageCooldownMin": "You can update again in {min} min",
      "room.statusMessageCooldownSec": "You can update again in {sec} sec",
      "room.statusMessageCooldownMinSec": "You can update again in {min} min {sec} sec",
      "planner.backWeek": "Back to week", "planner.prevDay": "Previous day", "planner.nextDay": "Next day",
      "planner.diaryExists": "Diary exists", "planner.diaryShort": "Diary", "planner.diaryPh": "Today's diary...", "planner.diaryTitle": "Diary", "planner.mood": "Mood", "planner.workEnd": "Work ended", "planner.doneSection": "Done", "planner.noTasksDay": "No tasks this day", "planner.noSong": "No songs", "planner.noSongTitle": "(untitled)", "planner.work": "Work", "planner.doneShort": "Done", "planner.streak": "Streak", "planner.days": "{n}d",
      "pomo.title": "Pomodoro", "pomo.work": "Focus", "pomo.break": "Break", "pomo.idle": "Idle",
      "pomo.start": "Start", "pomo.pause": "Pause", "pomo.resume": "Resume", "pomo.skip": "Skip", "pomo.stop": "Stop", "pomo.continue": "Continue",
      "pomo.notifyWork": "Focus time is up — take a break!", "pomo.notifyBreak": "Break is over — ready to focus again?",
      "pomo.notifyOn": "System notifications on", "pomo.notifyOff": "System notifications off",
      "pomo.notifyEnable": "Allow notifications", "pomo.notifyHint": "Alerts when focus or break ends. In-app toast always shows.",
      "pomo.settings": "Settings", "pomo.settingsClose": "Close settings",
      "pomo.sound": "Sound", "pomo.soundVolume": "Sound volume", "pomo.soundType": "Sound type",
      "pomo.soundChime": "Chime", "pomo.soundBell": "Bell", "pomo.soundSoft": "Soft",
      "pomo.soundTest": "🔔 Preview", "pomo.workMin": "Focus (min)", "pomo.breakMin": "Break (min)",
      "pomo.minHoldHint": "Tap ±1 · hold 1.5s for fast change",
      "pomo.minInputHint": "Click to type a number", "pomo.minInput": "Minutes",
      "pomo.durationIdleHint": "Change durations only while idle.",
      "pomo.durationActiveHint": "While the timer is running, changes apply from the next cycle.",
      "pomo.notifyLabel": "System notifications",
      "pomo.sectionTime": "Duration", "pomo.sectionSound": "Sound", "pomo.sectionNotify": "Alerts",
      "set.pomodoro": "Pomodoro timer", "set.pomodoroHint": "Shows Pomodoro in the header status table (next to D-day).",
    },
    ja: {
      "todo.recDaily": "毎日", "todo.recWeekdays": "平日", "todo.recWeekly": "特定の曜日", "todo.specificDays": "特定の曜日",
      "todo.editTitle": "クリックして編集", "todo.due": "締切", "todo.dueDate": "締切日", "todo.repeat": "繰り返し",
      "todo.pin": "ピン留め", "todo.unpin": "ピン解除",
      "todo.markDone": "完了にする", "todo.undoDone": "元に戻す",
      "todo.subAdd": "サブタスクを追加…", "todo.clear": "クリア", "todo.clearPeriod": "期間をクリア",
      "todo.subLinkAdd": "サブタスクのリンクを追加", "todo.subLinkEdit": "サブタスクのリンクを編集", "todo.subLinkOpen": "リンクを開く", "todo.subLinkPrompt": "サブタスクのリンクURL（空欄で削除）",
      "todo.period": "期間", "todo.apply": "適用", "todo.close": "閉じる", "todo.removeRepeat": "繰り返し解除",
      "memo.blocks": "/ blocks", "memo.quickTitle": "タイトル", "memo.quickTodo": "☐ タスク", "memo.quickList": "• リスト", "memo.quickQuote": "引用", "memo.quickDivider": "区切り線", "memo.todoText": "タスク", "memo.linkedTodo": "連携タスク",
      "mail.copyClipboard": "クリップボードにコピー", "mail.edit": "編集", "mail.noLabel": "(ラベルなし)",
      "mail.markUnread": "未返信に戻す", "mail.markRepliedTip": "返信済みにする",
      "room.roomNameLabel": "ルーム名", "room.inviteCodeLabel": "招待コード", "room.tagline": "静かに一緒に作業する部屋",
      "room.profileHint": "プロフィールを押すと名前とアイコンを変更できます。",
      "room.description": "説明: 作業ルームは、そばに誰かがいるように静かに一緒に作業する場所です。チャット・通話・通知なしで、タスクと状態だけを軽く共有します。",
      "room.betaTitle": "実験室: 作業ルームタブ", "room.betaBody": "このタブは beta 機能です。まだ未完成の部分があります。問題やご意見は {email} までお送りください。",
      "room.profileSettings": "プロフィール設定", "room.todayReady": "今日の準備", "room.friend": "友だち",
      "room.copyInviteCode": "招待コードをコピー", "room.codeCopied": "{code} をコピーしました", "room.inviteCodeFlash": "招待コード: {code}",
      "room.away": "離席", "room.return": "戻る", "room.awayOff": "離席を解除",
      "room.noPublicTitle": "公開されたタイトルはありません", "room.totalWork": "ルーム全体の作業時間", "room.toggleDone": "完了を切り替え",
      "room.shareToday": "今日共有するタスク", "room.noTodayTasks": "今日のタスクはありません", "room.register": "登録", "room.registered": "チャットに登録しました",
      "room.noName": "名前なし", "room.changeProfile": "プロフィール変更", "room.changeNameAvatar": "名前・アバター変更",
      "room.onlineStatus": "オンライン", "room.workingStatus": "作業中", "room.offlineStatus": "オフライン", "room.pausedStatus": "共有休止",
      "room.statusAwayLog": "離席モードに切り替えました。", "room.statusOfflineLog": "オフラインになりました。", "room.statusOnlineLog": "オンラインになりました。", "room.statusPausedLog": "共有を休止しました。",
      "room.privateWithTasks": "タスクはありますが公開表示はありません", "room.privateProgress": "{n}件進行中・タイトル非公開",
      "room.visibleTip": "ルームメンバーに表示中・クリックで非表示", "room.privateTip": "非公開・クリックでルームに共有",
      "room.changeMyStatus": "自分の状態を変更", "room.copyInviteSame": "招待コードをコピー（上のコードと同じ）",
      "common.cancel": "キャンセル", "common.yes": "はい", "common.no": "いいえ", "common.save": "保存", "common.error": "エラー", "common.delete": "削除",
      "todo.all": "全体", "todo.emptyMonth": "今月のタスクはありません", "todo.dragMove": "ドラッグで移動", "todo.subCollapse": "サブタスクを閉じる", "todo.subExpand": "サブタスクを開く", "todo.openMemo": "メモで詳しく書く",
      "room.donePublic": "{title}を完了しました。", "room.donePrivate": "タスクを1件完了しました。",
      "time.am": "午前", "time.pm": "午後",
      "room.profileHintShort": "プロフィールを押して名前とアイコンを変更",
      "planner.backWeek": "週間へ", "planner.prevDay": "前の日", "planner.nextDay": "次の日",
      "planner.diaryExists": "日記あり", "planner.diaryPh": "今日の日記...", "planner.work": "作業", "planner.doneShort": "完了", "planner.streak": "連続", "planner.days": "{n}日",
      "pomo.title": "ポモドーロ", "pomo.work": "集中", "pomo.break": "休憩", "pomo.idle": "待機",
      "pomo.start": "開始", "pomo.pause": "一時停止", "pomo.resume": "再開", "pomo.skip": "スキップ", "pomo.stop": "停止", "pomo.continue": "続ける",
      "pomo.notifyWork": "集中時間終了 — 休憩しましょう。", "pomo.notifyBreak": "休憩終了 — また集中しますか？",
      "pomo.settings": "設定", "pomo.sound": "通知音", "pomo.soundVolume": "音量", "pomo.soundType": "音の種類",
      "pomo.soundChime": "チャイム", "pomo.soundBell": "ベル", "pomo.soundSoft": "ソフト",
      "pomo.soundTest": "🔔 試聴", "pomo.workMin": "集中 (分)", "pomo.breakMin": "休憩 (分)",
      "pomo.minHoldHint": "短押し±1 · 1.5秒長押しで連続変更", "pomo.minInputHint": "クリックで直接入力",
      "pomo.durationIdleHint": "時間変更は待機中のみ可能です。",
      "pomo.notifyLabel": "システム通知", "pomo.notifyHint": "集中・休憩終了時に通知します。",
      "pomo.sectionTime": "時間", "pomo.sectionSound": "通知音", "pomo.sectionNotify": "通知",
      "set.pomodoro": "ポモドーロタイマー", "set.pomodoroHint": "オンにすると上部バーに小さなボタンが表示されます。",
      "timer.clickPause": "クリック: 一時停止", "timer.clickResume": "クリック: 開始/再開",
      "stretch.tip0": "肩をゆっくり回しましょう", "stretch.tip1": "首を左右にゆっくり", "stretch.tip2": "腰を伸ばして深呼吸",
      "stretch.tip3": "手首を回す", "stretch.tip4": "まばたきして遠くを見る", "stretch.tip5": "立って軽く伸び",
      "stretch.tip6": "水を一口どうですか？",
      "header.todayTitle": "今日 — {date}", "header.todaySub": "作業 {minutes}分 · タスク {todos} · 未返信 {mail}",
      "header.todoSub": "残り {left} · 急ぎ {hot}", "header.memoSub": "{project} · {count}件 · {autosave}",
      "header.promptTitle": "プロンプト集", "header.promptSub": "{count}件保存 · {sortHint}",
      "header.mailTitle": "お問い合わせ", "header.mailSub": "未返信 {unreplied} · {replyHint}",
      "header.retroTitle": "振り返り", "header.retroSub": "{retroHint}", "header.calSub": "週間プランナー · {autosave}",
      "header.autosave": "自動保存", "header.sortByUse": "よく使う順", "header.replyHint": "返信済みで整理",
      "header.retroHint": "1日1件 · 自動保存",
      "kbd.todoPh": "タスク追加… (Enter保存 · Shift+Enter改行)", "kbd.memoPh": "メモ追加… (Enter保存 · Shift+Enter改行)",
      "kbd.mailPh": "受信メールを貼り付け Enter… (Shift+Enter改行)", "kbd.calPh": "この日のメモ… (Enter保存)",
      "kbd.submit": "追加 (Enter)",
      "deco.pickColor": "色を選択", "deco.pickColorCustom": "色を直接選択",
      "fakeIde.caption": "✿ 参考用のフェイクIDE — ドック位置のイメージ",
      "fakeIde.taskbarApp": "♡ ダイアリー", "fakeIde.taskbarStatus": "{clock} · {stretch} {remain}分",
      "retro.todayLabel": "今日 · {date}", "retro.textPh": "今日はどうでしたか？一行で十分です。",
      "retro.goodLabel": "👍 うまくいったこと", "retro.goodPh": "うまくいったこと（任意）", "retro.badLabel": "👎 詰まったこと", "retro.badPh": "詰まったこと（任意）",
      "retro.pastTitle": "過去の振り返り · {n}", "retro.pastEmpty": "まだありません — 毎日一行ずつ",
      "finish.title": "今日の作業を終える", "finish.workMin": "⏱ {minutes}分", "finish.doneCount": "✓ {n}件完了",
      "finish.oneLine": "今日の一行", "finish.aiThinking": "考え中…", "finish.aiDraft": "✨ AI下書き",
      "finish.doneToday": "今日終えたこと", "finish.closeContinue": "閉じる（続ける）", "finish.finishToday": "✓ 今日を終える",
      "ai.title": "AIセッション", "ai.sub": "このプロジェクト · {n}件", "ai.addNew": "+ ブックマーク追加",
      "prompt.searchPh": "検索…", "prompt.addNew": "+ プロンプト保存", "prompt.empty": "プロンプトがありません",
      "planner.dayDetail": "{month}/{day} 詳細",
      "mood.great": "キラ", "mood.happy": "良い", "mood.love": "ドキ", "mood.calm": "穏やか",
      "mood.soso": "普通", "mood.tired": "疲れ", "mood.sad": "しょん", "mood.stress": "パン",
      "split.resizeCal": "ドラッグでカレンダー高さ調整", "common.copy": "コピー", "common.optional": "（任意）",
      "proj.gitConnect": "git接続", "proj.folderConnect": "フォルダ接続",
    },
    zh: {
      "todo.recDaily": "每天", "todo.recWeekdays": "工作日", "todo.recWeekly": "指定星期", "todo.specificDays": "指定星期",
      "todo.editTitle": "点击编辑", "todo.due": "截止", "todo.dueDate": "截止日", "todo.repeat": "重复",
      "todo.pin": "置顶为重要", "todo.unpin": "取消置顶",
      "todo.markDone": "标记完成", "todo.undoDone": "撤销完成",
      "todo.subAdd": "添加子任务…", "todo.clear": "清除", "todo.clearPeriod": "清除期间",
      "todo.subLinkAdd": "添加子任务链接", "todo.subLinkEdit": "编辑子任务链接", "todo.subLinkOpen": "打开链接", "todo.subLinkPrompt": "子任务链接 URL（留空删除）",
      "todo.period": "期间", "todo.apply": "应用", "todo.close": "关闭", "todo.removeRepeat": "取消重复",
      "memo.blocks": "/ blocks", "memo.quickTitle": "标题", "memo.quickTodo": "☐ 任务", "memo.quickList": "• 列表", "memo.quickQuote": "引用", "memo.quickDivider": "分隔线", "memo.todoText": "任务", "memo.linkedTodo": "关联任务",
      "mail.copyClipboard": "复制到剪贴板", "mail.edit": "编辑", "mail.noLabel": "(无标签)",
      "mail.markUnread": "标为未回复", "mail.markRepliedTip": "标为已回复",
      "room.roomNameLabel": "房间名", "room.inviteCodeLabel": "邀请码", "room.tagline": "安静地一起工作的房间",
      "room.profileHint": "点击个人资料可更改名称和图标。",
      "room.description": "说明：工作室是一个像有人在旁边一样安静一起工作的空间。无需聊天、通话和通知，只轻量共享任务与状态。",
      "room.betaTitle": "实验室：工作室标签", "room.betaBody": "此标签为 beta 功能，仍有未完善之处。如有问题或建议，请发送至 {email}。谢谢！",
      "room.profileSettings": "个人资料设置", "room.todayReady": "今日准备", "room.friend": "朋友",
      "room.copyInviteCode": "复制邀请码", "room.codeCopied": "{code} 已复制", "room.inviteCodeFlash": "邀请码：{code}",
      "room.away": "暂离", "room.return": "返回", "room.awayOff": "取消暂离",
      "room.noPublicTitle": "没有公开的标题", "room.totalWork": "房间总工作时间", "room.toggleDone": "切换完成",
      "room.shareToday": "今天共享的任务", "room.noTodayTasks": "今天没有任务", "room.register": "登记", "room.registered": "已登记到聊天",
      "room.noName": "未命名", "room.changeProfile": "更改资料", "room.changeNameAvatar": "更改名称/头像",
      "room.onlineStatus": "在线", "room.workingStatus": "工作中", "room.offlineStatus": "离线", "room.pausedStatus": "暂停共享",
      "room.statusAwayLog": "已切换为暂离模式。", "room.statusOfflineLog": "已离线。", "room.statusOnlineLog": "已上线。", "room.statusPausedLog": "已暂停共享。",
      "room.privateWithTasks": "有任务，但没有公开显示的标题", "room.privateProgress": "{n}项进行中 · 标题私密",
      "room.visibleTip": "对房间成员可见；点击隐藏", "room.privateTip": "私密；点击分享到房间",
      "room.changeMyStatus": "更改我的状态", "room.copyInviteSame": "复制邀请码（与上方相同）",
      "common.cancel": "取消", "common.yes": "是", "common.no": "否", "common.save": "保存", "common.error": "错误", "common.delete": "删除",
      "todo.all": "全部", "todo.emptyMonth": "本月没有任务", "todo.dragMove": "拖动移动", "todo.subCollapse": "收起子任务", "todo.subExpand": "展开子任务", "todo.openMemo": "在备忘中写详情",
      "room.donePublic": "已完成 {title}。", "room.donePrivate": "已完成 1 个任务。",
      "time.am": "上午", "time.pm": "下午",
      "room.profileHintShort": "点击个人资料更改名称和图标",
      "planner.backWeek": "返回周视图", "planner.prevDay": "前一天", "planner.nextDay": "后一天",
      "planner.diaryExists": "有日记", "planner.diaryPh": "今天的日记...", "planner.work": "工作", "planner.doneShort": "完成", "planner.streak": "连续", "planner.days": "{n}天",
      "pomo.title": "番茄钟", "pomo.work": "专注", "pomo.break": "休息", "pomo.idle": "待命",
      "pomo.start": "开始", "pomo.pause": "暂停", "pomo.resume": "继续", "pomo.skip": "跳过", "pomo.stop": "停止", "pomo.continue": "继续",
      "pomo.notifyWork": "专注时间结束，休息一下吧。", "pomo.notifyBreak": "休息结束，要继续专注吗？",
      "pomo.settings": "设置", "pomo.sound": "提示音", "pomo.soundVolume": "音量", "pomo.soundType": "提示音类型",
      "pomo.soundChime": "铃声", "pomo.soundBell": "钟铃", "pomo.soundSoft": "柔和",
      "pomo.soundTest": "🔔 试听", "pomo.workMin": "专注 (分)", "pomo.breakMin": "休息 (分)",
      "pomo.minHoldHint": "短按±1 · 长按1.5秒快速变更", "pomo.minInputHint": "点击直接输入数字",
      "pomo.durationIdleHint": "仅在待命时可更改时长。",
      "pomo.notifyLabel": "系统通知", "pomo.notifyHint": "专注或休息结束时通知。",
      "pomo.sectionTime": "时长", "pomo.sectionSound": "提示音", "pomo.sectionNotify": "通知",
      "set.pomodoro": "番茄钟", "set.pomodoroHint": "开启后顶部栏会显示小按钮。",
      "timer.clickPause": "点击：暂停", "timer.clickResume": "点击：开始/继续",
      "stretch.tip0": "转转肩膀", "stretch.tip1": "慢慢左右活动脖子", "stretch.tip2": "挺直腰背，深呼吸一次",
      "stretch.tip3": "转动手腕", "stretch.tip4": "眨眨眼，望向远处", "stretch.tip5": "站起来伸个懒腰",
      "stretch.tip6": "喝口水怎么样？",
      "header.todayTitle": "今天 — {date}", "header.todaySub": "工作 {minutes} 分钟 · {todos} 项任务 · {mail} 封未回复",
      "header.todoSub": "还剩 {left} · 紧急 {hot}", "header.memoSub": "{project} · {count} 条 · {autosave}",
      "header.promptTitle": "提示词库", "header.promptSub": "已存 {count} 条 · {sortHint}",
      "header.mailTitle": "客户咨询", "header.mailSub": "{unreplied} 封未回复 · {replyHint}",
      "header.retroTitle": "回顾", "header.retroSub": "{retroHint}", "header.calSub": "周计划 · {autosave}",
      "header.autosave": "自动保存", "header.sortByUse": "常用优先", "header.replyHint": "标记已回复即可整理",
      "header.retroHint": "每天一条 · 自动保存",
      "kbd.todoPh": "添加任务…（Enter 保存 · Shift+Enter 换行）", "kbd.memoPh": "添加备忘…（Enter 保存 · Shift+Enter 换行）",
      "kbd.mailPh": "粘贴收到的邮件后 Enter…（Shift+Enter 换行）", "kbd.calPh": "为这天添加备忘…（Enter 保存）",
      "kbd.submit": "添加 (Enter)",
      "deco.pickColor": "选择颜色", "deco.pickColorCustom": "自定义颜色",
      "fakeIde.caption": "✿ 参考用假 IDE — 展示日记停靠位置",
      "fakeIde.taskbarApp": "♡ 日记", "fakeIde.taskbarStatus": "{clock} · {stretch} {remain} 分",
      "retro.todayLabel": "今天 · {date}", "retro.textPh": "今天怎么样？一行就够。",
      "retro.goodLabel": "👍 做得好的", "retro.goodPh": "做得好的（可选）", "retro.badLabel": "👎 卡住的", "retro.badPh": "卡住的（可选）",
      "retro.pastTitle": "过往回顾 · {n}", "retro.pastEmpty": "还没有过往回顾 — 每天写一行吧",
      "finish.title": "结束今日工作", "finish.workMin": "⏱ 工作 {minutes} 分钟", "finish.doneCount": "✓ 完成 {n} 项",
      "finish.oneLine": "今日一行", "finish.aiThinking": "思考中…", "finish.aiDraft": "✨ AI 草稿",
      "finish.doneToday": "今日完成", "finish.closeContinue": "关闭（继续工作）", "finish.finishToday": "✓ 结束今天",
      "ai.title": "AI 会话书签", "ai.sub": "本项目 · {n} 条", "ai.addNew": "+ 添加书签",
      "prompt.searchPh": "搜索…", "prompt.addNew": "+ 保存新提示词", "prompt.empty": "还没有提示词",
      "planner.dayDetail": "{month}/{day} 详情",
      "mood.great": "闪亮", "mood.happy": "开心", "mood.love": "心动", "mood.calm": "平静",
      "mood.soso": "一般", "mood.tired": "疲惫", "mood.sad": "低落", "mood.stress": "紧绷",
      "split.resizeCal": "拖动调整日历高度", "common.copy": "复制", "common.optional": "（可选）",
      "proj.gitConnect": "连接 git", "proj.folderConnect": "连接文件夹",
    },
    es: {
      "todo.recDaily": "Todos los días", "todo.recWeekdays": "Días laborables", "todo.recWeekly": "Días específicos", "todo.specificDays": "Días específicos",
      "todo.editTitle": "Clic para editar", "todo.due": "Fecha", "todo.dueDate": "Fecha límite", "todo.repeat": "Repetir",
      "todo.pin": "Fijar como importante", "todo.unpin": "Quitar fijado",
      "todo.markDone": "Marcar como hecha", "todo.undoDone": "Deshacer",
      "todo.subAdd": "Añadir subtarea…", "todo.clear": "Borrar", "todo.clearPeriod": "Borrar periodo",
      "todo.subLinkAdd": "Añadir enlace de subtarea", "todo.subLinkEdit": "Editar enlace de subtarea", "todo.subLinkOpen": "Abrir enlace", "todo.subLinkPrompt": "URL de enlace de subtarea (vacío elimina)",
      "todo.period": "Periodo", "todo.apply": "Aplicar", "todo.close": "Cerrar", "todo.removeRepeat": "Quitar repetición",
      "memo.blocks": "/ bloques", "memo.quickTitle": "Título", "memo.quickTodo": "☐ Tarea", "memo.quickList": "• Lista", "memo.quickQuote": "Cita", "memo.quickDivider": "Divisor", "memo.todoText": "Tarea", "memo.linkedTodo": "Tarea vinculada",
      "mail.copyClipboard": "Copiar al portapapeles", "mail.edit": "Editar", "mail.noLabel": "(sin etiqueta)",
      "mail.markUnread": "Marcar sin responder", "mail.markRepliedTip": "Marcar respondido",
      "room.roomNameLabel": "Sala", "room.inviteCodeLabel": "Código", "room.tagline": "Una sala silenciosa para trabajar juntos",
      "room.profileHint": "Toca tu perfil para cambiar nombre e icono.",
      "room.description": "Descripción: la sala de trabajo es un espacio silencioso que se siente como tener a alguien cerca. Comparte tareas y estado sin chat, llamadas ni avisos.",
      "room.betaTitle": "Laboratorio: pestaña Sala", "room.betaBody": "Esta pestaña está en beta y algunas partes no están terminadas. Envía problemas o ideas a {email}. ¡Gracias!",
      "room.profileSettings": "Perfil", "room.todayReady": "Listo hoy", "room.friend": "Amigo",
      "room.copyInviteCode": "Copiar código", "room.codeCopied": "{code} copiado", "room.inviteCodeFlash": "Código: {code}",
      "room.away": "Ausente", "room.return": "Volver", "room.awayOff": "Quitar ausente",
      "room.noPublicTitle": "Sin títulos públicos", "room.totalWork": "Tiempo total de la sala", "room.toggleDone": "Alternar hecho",
      "room.shareToday": "Tareas para compartir", "room.noTodayTasks": "No hay tareas hoy", "room.register": "Registrar", "room.registered": "Registrado en el chat",
      "room.noName": "Sin nombre", "room.changeProfile": "Cambiar perfil", "room.changeNameAvatar": "Cambiar nombre/avatar",
      "room.onlineStatus": "En línea", "room.workingStatus": "Trabajando", "room.offlineStatus": "Sin conexión", "room.pausedStatus": "Pausar compartir",
      "room.statusAwayLog": "Cambió a modo ausente.", "room.statusOfflineLog": "Se desconectó.", "room.statusOnlineLog": "Está en línea.", "room.statusPausedLog": "Pausó compartir.",
      "room.privateWithTasks": "Hay tareas, pero ninguna está pública", "room.privateProgress": "{n} en curso · títulos privados",
      "room.visibleTip": "Visible para la sala; clic para ocultar", "room.privateTip": "Privado; clic para compartir",
      "room.changeMyStatus": "Cambiar mi estado", "room.copyInviteSame": "Copiar código (igual al superior)",
      "common.cancel": "Cancelar", "common.yes": "Sí", "common.no": "No", "common.save": "Guardar", "common.error": "Error", "common.delete": "Eliminar",
      "todo.all": "Todo", "todo.emptyMonth": "No hay tareas este mes", "todo.dragMove": "Arrastrar para mover", "todo.subCollapse": "Contraer subtareas", "todo.subExpand": "Expandir subtareas", "todo.openMemo": "Escribir detalles en nota",
      "room.donePublic": "Completó {title}.", "room.donePrivate": "Completó 1 tarea.",
      "time.am": "a. m.", "time.pm": "p. m.",
      "room.profileHintShort": "Toca tu perfil para cambiar nombre e icono",
      "planner.backWeek": "Volver a semana", "planner.prevDay": "Día anterior", "planner.nextDay": "Día siguiente",
      "planner.diaryExists": "Hay diario", "planner.diaryPh": "Diario de hoy...", "planner.work": "Trabajo", "planner.doneShort": "Hechas", "planner.streak": "Racha", "planner.days": "{n} d",
      "timer.clickPause": "Clic: pausar", "timer.clickResume": "Clic: iniciar / reanudar",
      "stretch.tip0": "Gira los hombros", "stretch.tip1": "Gira el cuello despacio", "stretch.tip2": "Endereza la espalda y respira hondo",
      "stretch.tip3": "Rota las muñecas", "stretch.tip4": "Parpadea y mira a lo lejos", "stretch.tip5": "Levántate y estírate",
      "stretch.tip6": "¿Un sorbo de agua?",
      "header.todayTitle": "Hoy — {date}", "header.todaySub": "{minutes}m trabajadas · {todos} tareas · {mail} sin responder",
      "header.todoSub": "{left} pendientes · {hot} urgentes", "header.memoSub": "{project} · {count} · {autosave}",
      "header.promptTitle": "Biblioteca de prompts", "header.promptSub": "{count} guardados · {sortHint}",
      "header.mailTitle": "Consultas", "header.mailSub": "{unreplied} sin responder · {replyHint}",
      "header.retroTitle": "Retro", "header.retroSub": "{retroHint}", "header.calSub": "Plan semanal · {autosave}",
      "header.autosave": "autoguardado", "header.sortByUse": "más usados primero", "header.replyHint": "marca respondido para ordenar",
      "header.retroHint": "uno por día · autoguardado",
      "kbd.todoPh": "Añadir tarea… (Enter guardar · Shift+Enter nueva línea)",
      "kbd.memoPh": "Añadir nota… (Enter guardar · Shift+Enter nueva línea)",
      "kbd.mailPh": "Pega el correo recibido, Enter… (Shift+Enter nueva línea)",
      "kbd.calPh": "Nota para esta fecha… (Enter guardar)", "kbd.submit": "Añadir (Enter)",
      "deco.pickColor": "Elegir color", "deco.pickColorCustom": "Color personalizado",
      "fakeIde.caption": "✿ IDE falso de referencia — muestra dónde se acopla el diario",
      "fakeIde.taskbarApp": "♡ Diario", "fakeIde.taskbarStatus": "{clock} · {stretch} {remain}m",
      "set.dockHide": "Minimizar dock", "set.dockHideHint": "Reduce el dock a una pequeña barra. Haz clic para abrirlo.",
      "set.dockReveal": "Mostrar dock", "set.dockMiniTip": "Arrastra para mover · Clic para abrir",
      "set.tabsAutoHide": "Ocultar pestañas", "set.tabsAutoHideHint": "Oculta las pestañas laterales. Pon el mouse en el borde 1 s para verlas.",
      "set.pomodoro": "Temporizador Pomodoro", "set.pomodoroHint": "Muestra el botón Pomodoro junto a Hoy/Todo en Tareas.",
      "pomo.sectionTime": "Duración", "pomo.sectionSound": "Sonido", "pomo.sectionNotify": "Alertas",
      "retro.todayLabel": "Hoy · {date}", "retro.textPh": "¿Cómo fue hoy? Una línea basta.",
      "finish.title": "Terminar el trabajo de hoy", "finish.workMin": "⏱ {minutes}m", "finish.doneCount": "✓ {n} hechas",
      "ai.title": "Marcadores de sesión IA", "ai.addNew": "+ Añadir marcador",
      "prompt.searchPh": "Buscar…", "prompt.addNew": "+ Guardar prompt", "prompt.empty": "Sin prompts aún",
      "planner.dayDetail": "{month}/{day} detalles", "split.resizeCal": "Arrastra para redimensionar el calendario",
      "common.copy": "Copiar", "proj.gitConnect": "Conectar git", "proj.folderConnect": "Conectar carpeta",
      "mood.great": "Brilla", "mood.happy": "Bien", "mood.love": "Palpita", "mood.calm": "Calma",
      "mood.soso": "Regular", "mood.tired": "Cansado", "mood.sad": "Bajo", "mood.stress": "Tenso",
    },
    pt: {
      "todo.recDaily": "Todos os dias", "todo.recWeekdays": "Dias úteis", "todo.recWeekly": "Dias específicos", "todo.specificDays": "Dias específicos",
      "todo.editTitle": "Clique para editar", "todo.due": "Prazo", "todo.dueDate": "Data limite", "todo.repeat": "Repetir",
      "todo.pin": "Fixar como importante", "todo.unpin": "Desafixar",
      "todo.markDone": "Marcar como feita", "todo.undoDone": "Desfazer",
      "todo.subAdd": "Adicionar subtarefa…", "todo.clear": "Limpar", "todo.clearPeriod": "Limpar período",
      "todo.subLinkAdd": "Adicionar link da subtarefa", "todo.subLinkEdit": "Editar link da subtarefa", "todo.subLinkOpen": "Abrir link", "todo.subLinkPrompt": "URL do link da subtarefa (vazio remove)",
      "todo.period": "Período", "todo.apply": "Aplicar", "todo.close": "Fechar", "todo.removeRepeat": "Remover repetição",
      "memo.blocks": "/ blocos", "memo.quickTitle": "Título", "memo.quickTodo": "☐ Tarefa", "memo.quickList": "• Lista", "memo.quickQuote": "Citação", "memo.quickDivider": "Divisor", "memo.todoText": "Tarefa", "memo.linkedTodo": "Tarefa vinculada",
      "mail.copyClipboard": "Copiar para a área de transferência", "mail.edit": "Editar", "mail.noLabel": "(sem rótulo)",
      "mail.markUnread": "Marcar como não respondido", "mail.markRepliedTip": "Marcar respondido",
      "room.roomNameLabel": "Sala", "room.inviteCodeLabel": "Código", "room.tagline": "Uma sala silenciosa para trabalhar juntos",
      "room.profileHint": "Toque no perfil para mudar nome e ícone.",
      "room.description": "Descrição: a sala de foco é um espaço silencioso que parece ter alguém por perto. Compartilhe tarefas e status sem chat, chamadas ou avisos.",
      "room.betaTitle": "Laboratório: aba Sala", "room.betaBody": "Esta aba está em beta e algumas partes ainda não estão prontas. Envie problemas ou ideias para {email}. Obrigado!",
      "room.profileSettings": "Perfil", "room.todayReady": "Pronto hoje", "room.friend": "Amigo",
      "room.copyInviteCode": "Copiar código", "room.codeCopied": "{code} copiado", "room.inviteCodeFlash": "Código: {code}",
      "room.away": "Ausente", "room.return": "Voltar", "room.awayOff": "Sair de ausente",
      "room.noPublicTitle": "Sem títulos públicos", "room.totalWork": "Tempo total da sala", "room.toggleDone": "Alternar feito",
      "room.shareToday": "Tarefas para compartilhar", "room.noTodayTasks": "Sem tarefas hoje", "room.register": "Registrar", "room.registered": "Registrado no chat",
      "room.noName": "Sem nome", "room.changeProfile": "Alterar perfil", "room.changeNameAvatar": "Alterar nome/avatar",
      "room.onlineStatus": "Online", "room.workingStatus": "Trabalhando", "room.offlineStatus": "Offline", "room.pausedStatus": "Pausar compartilhamento",
      "room.statusAwayLog": "Mudou para ausente.", "room.statusOfflineLog": "Ficou offline.", "room.statusOnlineLog": "Está online.", "room.statusPausedLog": "Pausou o compartilhamento.",
      "room.privateWithTasks": "Há tarefas, mas nenhuma está pública", "room.privateProgress": "{n} em andamento · títulos privados",
      "room.visibleTip": "Visível para a sala; clique para ocultar", "room.privateTip": "Privado; clique para compartilhar",
      "room.changeMyStatus": "Alterar meu status", "room.copyInviteSame": "Copiar código (igual ao de cima)",
      "common.cancel": "Cancelar", "common.yes": "Sim", "common.no": "Não", "common.save": "Salvar", "common.error": "Erro", "common.delete": "Excluir",
      "todo.all": "Tudo", "todo.emptyMonth": "Sem tarefas este mês", "todo.dragMove": "Arrastar para mover", "todo.subCollapse": "Recolher subtarefas", "todo.subExpand": "Expandir subtarefas", "todo.openMemo": "Escrever detalhes na nota",
      "room.donePublic": "Concluiu {title}.", "room.donePrivate": "Concluiu 1 tarefa.",
      "time.am": "AM", "time.pm": "PM",
      "room.profileHintShort": "Toque no perfil para mudar nome e ícone",
      "planner.backWeek": "Voltar à semana", "planner.prevDay": "Dia anterior", "planner.nextDay": "Próximo dia",
      "planner.diaryExists": "Há diário", "planner.diaryPh": "Diário de hoje...", "planner.work": "Trabalho", "planner.doneShort": "Feitas", "planner.streak": "Sequência", "planner.days": "{n} d",
      "timer.clickPause": "Clique: pausar", "timer.clickResume": "Clique: iniciar / retomar",
      "stretch.tip0": "Gire os ombros", "stretch.tip1": "Vire o pescoço devagar", "stretch.tip2": "Endireite e respire fundo",
      "stretch.tip3": "Gire os pulsos", "stretch.tip4": "Pisque e olhe ao longe", "stretch.tip5": "Levante e alongue",
      "stretch.tip6": "Que tal um gole de água?",
      "header.todayTitle": "Hoje — {date}", "header.todaySub": "{minutes}m trabalhadas · {todos} tarefas · {mail} sem resposta",
      "header.todoSub": "{left} restantes · {hot} urgentes", "header.memoSub": "{project} · {count} · {autosave}",
      "header.promptTitle": "Biblioteca de prompts", "header.promptSub": "{count} salvos · {sortHint}",
      "header.mailTitle": "Consultas", "header.mailSub": "{unreplied} sem resposta · {replyHint}",
      "header.retroTitle": "Retro", "header.retroSub": "{retroHint}", "header.calSub": "Plano semanal · {autosave}",
      "header.autosave": "salvamento automático", "header.sortByUse": "mais usados primeiro",
      "header.replyHint": "marque respondido para organizar", "header.retroHint": "um por dia · salvamento automático",
      "kbd.todoPh": "Adicionar tarefa… (Enter salvar · Shift+Enter nova linha)",
      "kbd.memoPh": "Adicionar nota… (Enter salvar · Shift+Enter nova linha)",
      "kbd.mailPh": "Cole o e-mail recebido, Enter… (Shift+Enter nova linha)",
      "kbd.calPh": "Nota para esta data… (Enter salvar)", "kbd.submit": "Adicionar (Enter)",
      "deco.pickColor": "Escolher cor", "deco.pickColorCustom": "Cor personalizada",
      "fakeIde.caption": "✿ IDE falso de referência — mostra onde o diário encaixa",
      "fakeIde.taskbarApp": "♡ Diário", "fakeIde.taskbarStatus": "{clock} · {stretch} {remain}m",
      "set.dockHide": "Minimizar dock", "set.dockHideHint": "Reduz o dock a uma pequena faixa. Clique para abrir.",
      "set.dockReveal": "Mostrar dock", "set.dockMiniTip": "Arraste para mover · Clique para abrir",
      "set.tabsAutoHide": "Ocultar abas", "set.tabsAutoHideHint": "Oculta as abas laterais. Passe o mouse na borda por 1 s para mostrar.",
      "set.pomodoro": "Timer Pomodoro", "set.pomodoroHint": "Mostra o botão Pomodoro ao lado de Hoje/Tudo em Tarefas.",
      "pomo.sectionTime": "Duração", "pomo.sectionSound": "Som", "pomo.sectionNotify": "Alertas",
      "retro.todayLabel": "Hoje · {date}", "retro.textPh": "Como foi hoje? Uma linha basta.",
      "finish.title": "Encerrar o trabalho de hoje", "finish.workMin": "⏱ {minutes}m", "finish.doneCount": "✓ {n} feitas",
      "ai.title": "Marcadores de sessão IA", "ai.addNew": "+ Adicionar marcador",
      "prompt.searchPh": "Buscar…", "prompt.addNew": "+ Salvar prompt", "prompt.empty": "Ainda sem prompts",
      "planner.dayDetail": "{month}/{day} detalhes", "split.resizeCal": "Arraste para redimensionar o calendário",
      "common.copy": "Copiar", "proj.gitConnect": "Conectar git", "proj.folderConnect": "Conectar pasta",
      "mood.great": "Brilho", "mood.happy": "Bom", "mood.love": "Coração", "mood.calm": "Calmo",
      "mood.soso": "Mais ou menos", "mood.tired": "Cansado", "mood.sad": "Baixo", "mood.stress": "Tenso",
    },
  };
  Object.keys(UI_PATCH).forEach(k => { DICT[k] = { ...DICT[k], ...UI_PATCH[k] }; });

  const ZH_HANT = {
    "tab.todo": "待辦", "tab.memo": "備忘", "tab.cheat": "命令", "tab.mail": "信箱", "tab.cal": "日曆", "tab.week": "週計畫", "tab.room": "工作室", "tab.deco": "佈置", "tab.settings": "設定",
    "todo.today": "今天", "todo.backToday": "今天", "todo.addPh": "新增任務…", "todo.addPhDate": "截止任務…",
    "todo.emptyToday": "在上方輸入任務", "todo.emptyDate": "{d} 沒有截止任務 — 可在上方新增",
    "todo.recDaily": "每天", "todo.recWeekdays": "工作日", "todo.recWeekly": "指定星期", "todo.specificDays": "指定星期",
    "todo.editTitle": "點擊編輯", "todo.due": "截止", "todo.dueDate": "截止日", "todo.repeat": "重複",
    "todo.pin": "置頂為重要", "todo.unpin": "取消置頂", "todo.markDone": "標記完成", "todo.undoDone": "復原完成",
    "todo.subAdd": "新增子任務…", "todo.clear": "清除", "todo.clearPeriod": "清除期間",
    "todo.period": "期間", "todo.apply": "套用", "todo.close": "關閉", "todo.removeRepeat": "取消重複",
    "todo.all": "全部", "todo.emptyMonth": "本月沒有任務", "todo.dragMove": "拖曳移動", "todo.subCollapse": "收合子任務", "todo.subExpand": "展開子任務", "todo.openMemo": "在備忘中寫詳情",
    "memo.write": "撰寫備忘", "memo.saved": "已儲存備忘", "memo.new": "新增備忘",
    "memo.placeholder": "在這裡寫下內容，會自動儲存。第一行會成為標題。",
    "memo.empty": "在上方寫下的備忘會顯示在這裡",
    "memo.untitled": "(空備忘)", "memo.delete": "刪除", "memo.delConfirm": "刪除備忘「{x}」？",
    "memo.cleanEmpty": "清理空備忘", "memo.cleanConfirm": "刪除 {n} 個空備忘？", "memo.noEmpty": "沒有需要清理的空備忘",
    "proj.deleteConfirm": "刪除專案「{name}」？（任務等資料將保留）",
    "cheat.delConfirm": "刪除「{x}」？",
    "mail.presetDelConfirm": "刪除此回覆範本？",
    "worktrack.resetTip": "將今日工作時間重設為 0",
    "worktrack.resetConfirm": "要將今日累計的工作時間重設為 0 嗎？",
    "set.resetCaption": "所有專案、任務、命令、信箱與備忘都會被清除並重設。",
    "set.resetConfirm": "確定要清除所有資料並恢復初始狀態嗎？",
    "room.leave": "離開", "room.leaveConfirm": "確定要離開這個房間嗎？",
    "prompt.delConfirm": "刪除此提示詞？",
    "memo.searchPh": "搜尋備忘…", "memo.searchNone": "沒有結果", "memo.sort": "排序",
    "memo.bold": "粗體", "memo.italic": "斜體", "memo.underline": "底線", "memo.strike": "刪除線",
    "memo.highlight": "醒目提示", "memo.bullet": "項目符號", "memo.number": "編號清單",
    "memo.heading": "段落樣式", "memo.hBody": "正文", "memo.h1": "標題 1", "memo.h2": "標題 2", "memo.h3": "標題 3",
    "memo.alignLeft": "靠左", "memo.alignCenter": "置中", "memo.alignRight": "靠右",
    "memo.quote": "引用", "memo.hr": "分隔線", "memo.clearFormat": "清除格式",
    "memo.back": "返回列表", "memo.inputPh": "輸入訊息並按 Enter…（Shift+Enter 換行）",
    "memo.send": "傳送", "memo.save": "儲存", "memo.color": "文字顏色", "memo.size": "大小", "memo.font": "字型",
    "memo.image": "新增圖片", "memo.link": "新增連結", "memo.edit": "編輯", "memo.cancelEdit": "取消",
    "memo.blocks": "/ blocks", "memo.quickTitle": "標題", "memo.quickTodo": "☐ 任務", "memo.quickList": "• 清單", "memo.quickQuote": "引用", "memo.quickDivider": "分隔線", "memo.todoText": "任務", "memo.linkedTodo": "連結任務",
    "proj.menu": "專案", "proj.new": "＋ 新增專案", "proj.rename": "✎ 重新命名", "proj.fallback": "專案",
    "mail.received": "收到的諮詢", "mail.draft": "回覆草稿", "mail.paste": "貼上收到的郵件…", "mail.add": "新增",
    "mail.markReplied": "標記為已回覆", "mail.replied": "✓ 已回覆", "mail.site": "開啟網站",
    "mail.back": "返回", "mail.copyDraft": "複製草稿", "mail.noBody": "(無正文)", "mail.noTitle": "(無主旨)",
    "mail.copyClipboard": "複製到剪貼簿", "mail.edit": "編輯", "mail.noLabel": "(無標籤)", "mail.markUnread": "標為未回覆", "mail.markRepliedTip": "標為已回覆",
    "planner.mon": "週一", "planner.tue": "週二", "planner.wed": "週三", "planner.thu": "週四", "planner.fri": "週五", "planner.sat": "週六", "planner.sun": "週日",
    "planner.today": "今天", "planner.thisWeek": "本週", "planner.prev": "上一週", "planner.next": "下一週",
    "planner.backWeek": "返回週視圖", "planner.prevDay": "前一天", "planner.nextDay": "後一天",
    "planner.diaryExists": "有日記", "planner.diaryPh": "今天的日記...", "planner.work": "工作", "planner.doneShort": "完成", "planner.streak": "連續", "planner.days": "{n}天",
    "dday.set": "設定", "dday.dday": "倒數日", "dday.title": "倒數日設定", "dday.label": "倒數日", "dday.clear": "清除日期",
    "set.lang": "語言", "set.size": "應用程式高度", "set.data": "資料", "set.reset": "重設所有資料",
    "set.on": "開", "set.off": "關", "set.left": "左側", "set.right": "右側",
    "room.title": "我們的工作室", "room.emptyTitle": "安靜地一起工作",
    "room.emptyHint": "像有人在旁邊一樣 — 沒有聊天、沒有通話、沒有提醒。\n只是陪伴的感覺。",
    "room.create": "建立房間", "room.join": "用邀請碼加入", "room.roomNameLabel": "房間名", "room.inviteCodeLabel": "邀請碼",
    "room.tagline": "安靜地一起工作的房間", "room.profileHint": "點擊個人資料可更改名稱和圖示。", "room.profileHintShort": "點擊個人資料更改名稱和圖示",
    "room.description": "說明：工作室是一個像有人在旁邊一樣安靜一起工作的空間。無需聊天、通話和通知，只輕量共享任務與狀態。",
    "room.betaTitle": "實驗室：工作室標籤", "room.betaBody": "此標籤為 beta 功能，仍有未完善之處。如有問題或建議，請寄送至 {email}。謝謝！",
    "room.you": "你", "room.friend": "朋友", "room.todayReady": "今日準備", "room.noTodo": "暫無任務",
    "room.away": "暫離", "room.return": "返回", "room.awayOff": "取消暫離", "room.onlineStatus": "線上", "room.workingStatus": "工作中", "room.offlineStatus": "離線", "room.pausedStatus": "暫停共享",
    "room.shareToday": "今天共享的任務", "room.register": "登記", "room.registered": "已登記到聊天",
    "room.donePublic": "已完成 {title}。", "room.donePrivate": "已完成 1 個任務。",
    "common.cancel": "取消", "common.save": "儲存", "common.error": "錯誤", "common.delete": "刪除",
    "time.am": "上午", "time.pm": "下午",
  };

  const DE_DICT = {
    "tab.todo": "Aufgaben", "tab.memo": "Notizen", "tab.cheat": "Befehle", "tab.mail": "Postfach", "tab.cal": "Kalender", "tab.week": "Woche", "tab.room": "Arbeitsraum", "tab.deco": "Design", "tab.settings": "Einstellungen",
    "todo.today": "Heute", "todo.backToday": "Heute", "todo.addPh": "Aufgabe hinzufügen…", "todo.addPhDate": "Aufgabe mit Fälligkeitsdatum…",
    "todo.emptyToday": "Schreibe oben eine Aufgabe hinein", "todo.emptyDate": "Keine Aufgaben für {d}; oben kannst du eine hinzufügen",
    "todo.recDaily": "Täglich", "todo.recWeekdays": "Werktage", "todo.recWeekly": "Bestimmte Tage", "todo.specificDays": "Bestimmte Tage",
    "todo.due": "Fällig", "todo.dueDate": "Fälligkeitsdatum", "todo.repeat": "Wiederholen", "todo.apply": "Anwenden", "todo.close": "Schließen", "todo.clear": "Leeren", "todo.period": "Zeitraum",
    "todo.all": "Alle", "todo.emptyMonth": "Keine Aufgaben in diesem Monat",
    "memo.new": "Neue Notiz", "memo.placeholder": "Schreibe hier. Es wird automatisch gespeichert. Die erste Zeile wird zum Titel.", "memo.delete": "Löschen",
    "memo.delConfirm": "Notiz \"{x}\" löschen?",
    "memo.cleanEmpty": "Leere Notizen aufräumen", "memo.cleanConfirm": "{n} leere Notizen löschen?",
    "proj.deleteConfirm": "Projekt \"{name}\" löschen? (Aufgaben und andere Daten bleiben erhalten)",
    "cheat.delConfirm": "\"{x}\" löschen?",
    "mail.presetDelConfirm": "Diese Vorlage löschen?",
    "worktrack.resetTip": "Heutige Arbeitszeit auf 0 zurücksetzen",
    "worktrack.resetConfirm": "Die heute gesammelte Arbeitszeit auf 0 zurücksetzen?",
    "set.resetCaption": "Alle Projekte, Aufgaben, Befehle, Posteingänge und Notizen werden gelöscht und zurückgesetzt.",
    "set.resetConfirm": "Wirklich alle Daten löschen und zum Ausgangszustand zurücksetzen?",
    "room.leave": "Verlassen", "room.leaveConfirm": "Diesen Raum verlassen?",
    "prompt.delConfirm": "Diesen Prompt löschen?",
    "memo.bold": "Fett", "memo.italic": "Kursiv", "memo.underline": "Unterstrichen", "memo.quote": "Zitat", "memo.quickTitle": "Titel", "memo.quickTodo": "☐ Aufgabe", "memo.quickList": "• Liste", "memo.quickDivider": "Trennlinie",
    "mail.received": "Empfangen", "mail.draft": "Entwurf", "mail.markReplied": "Als beantwortet markieren", "mail.replied": "✓ Beantwortet", "mail.copyClipboard": "In Zwischenablage kopieren", "mail.edit": "Bearbeiten",
    "planner.today": "heute", "planner.thisWeek": "Diese Woche", "planner.backWeek": "Zur Woche", "planner.prevDay": "Vorheriger Tag", "planner.nextDay": "Nächster Tag", "planner.diaryPh": "Heutiges Tagebuch...",
    "dday.set": "setzen", "dday.title": "D-Day-Einstellungen", "dday.label": "D-Day",
    "set.lang": "Sprache", "set.size": "App-Höhe", "set.data": "Daten", "set.reset": "Alle Daten zurücksetzen", "set.on": "Ein", "set.off": "Aus",
    "room.title": "Unser Arbeitsraum", "room.emptyTitle": "Still zusammen arbeiten", "room.create": "Raum erstellen", "room.join": "Mit Code beitreten",
    "room.tagline": "Ein ruhiger Raum zum gemeinsamen Arbeiten", "room.profileHint": "Tippe auf dein Profil, um Name und Icon zu ändern.", "room.profileHintShort": "Profil antippen, um Name und Icon zu ändern",
    "room.description": "Beschreibung: Der Arbeitsraum ist ein ruhiger Ort, der sich anfühlt, als wäre jemand in der Nähe. Teile Aufgaben und Status ohne Chat, Anrufe oder Benachrichtigungen.",
    "room.you": "du", "room.friend": "Freund", "room.away": "Abwesend", "room.workingStatus": "Arbeitet", "room.offlineStatus": "Offline",
    "common.cancel": "Abbrechen", "common.save": "Speichern", "common.error": "Fehler", "common.delete": "Löschen",
    "time.am": "AM", "time.pm": "PM",
  };

  const RU_DICT = {
    "tab.todo": "Задачи", "tab.memo": "Заметки", "tab.cheat": "Команды", "tab.mail": "Почта", "tab.cal": "Календарь", "tab.week": "Неделя", "tab.room": "Комната", "tab.deco": "Тема", "tab.settings": "Настройки",
    "todo.today": "Сегодня", "todo.backToday": "Сегодня", "todo.addPh": "Добавить задачу…", "todo.addPhDate": "задача со сроком…",
    "todo.emptyToday": "Введите задачу в поле выше", "todo.emptyDate": "На {d} нет задач; можно добавить выше",
    "todo.recDaily": "Каждый день", "todo.recWeekdays": "Будни", "todo.recWeekly": "Выбранные дни", "todo.specificDays": "Выбранные дни",
    "todo.due": "Срок", "todo.dueDate": "Дата срока", "todo.repeat": "Повтор", "todo.apply": "Применить", "todo.close": "Закрыть", "todo.clear": "Очистить", "todo.period": "Период",
    "todo.all": "Все", "todo.emptyMonth": "В этом месяце задач нет",
    "memo.new": "Новая заметка", "memo.placeholder": "Пишите здесь. Сохраняется автоматически. Первая строка станет заголовком.", "memo.delete": "Удалить",
    "memo.delConfirm": "Удалить заметку \"{x}\"?",
    "memo.cleanEmpty": "Очистить пустые заметки", "memo.cleanConfirm": "Удалить {n} пустых заметок?",
    "proj.deleteConfirm": "Удалить проект \"{name}\"? (задачи и другие данные останутся)",
    "cheat.delConfirm": "Удалить \"{x}\"?",
    "mail.presetDelConfirm": "Удалить этот шаблон?",
    "worktrack.resetTip": "Сбросить сегодняшнее рабочее время до 0",
    "worktrack.resetConfirm": "Сбросить накопленное за сегодня рабочее время до 0?",
    "set.resetCaption": "Все проекты, задачи, команды, почта и заметки будут удалены и сброшены.",
    "set.resetConfirm": "Действительно удалить все данные и вернуть начальное состояние?",
    "room.leave": "Выйти", "room.leaveConfirm": "Выйти из этой комнаты?",
    "prompt.delConfirm": "Удалить этот промпт?",
    "memo.bold": "Жирный", "memo.italic": "Курсив", "memo.underline": "Подчеркнуть", "memo.quote": "Цитата", "memo.quickTitle": "Заголовок", "memo.quickTodo": "☐ Задача", "memo.quickList": "• Список", "memo.quickDivider": "Разделитель",
    "mail.received": "Получено", "mail.draft": "Черновик", "mail.markReplied": "Отметить как отвечено", "mail.replied": "✓ Отвечено", "mail.copyClipboard": "Копировать", "mail.edit": "Редактировать",
    "planner.today": "сегодня", "planner.thisWeek": "Эта неделя", "planner.backWeek": "К неделе", "planner.prevDay": "Предыдущий день", "planner.nextDay": "Следующий день", "planner.diaryPh": "Дневник за сегодня...",
    "dday.set": "задать", "dday.title": "Настройки D-day", "dday.label": "D-day",
    "set.lang": "Язык", "set.size": "Высота приложения", "set.data": "Данные", "set.reset": "Сбросить все данные", "set.on": "Вкл", "set.off": "Выкл",
    "room.title": "Наша комната", "room.emptyTitle": "Работать вместе тихо", "room.create": "Создать комнату", "room.join": "Войти по коду",
    "room.tagline": "Тихая комната для совместной работы", "room.profileHint": "Нажмите профиль, чтобы изменить имя и иконку.", "room.profileHintShort": "Нажмите профиль, чтобы изменить имя и иконку",
    "room.description": "Описание: рабочая комната создает ощущение, что кто-то рядом. Делитесь задачами и статусом без чата, звонков и уведомлений.",
    "room.you": "вы", "room.friend": "Друг", "room.away": "Отошел", "room.workingStatus": "Работает", "room.offlineStatus": "Офлайн",
    "common.cancel": "Отмена", "common.save": "Сохранить", "common.error": "Ошибка", "common.delete": "Удалить",
    "time.am": "AM", "time.pm": "PM",
  };

  const TH_DICT = {
    "tab.todo": "งาน", "tab.memo": "โน้ต", "tab.cheat": "คำสั่ง", "tab.mail": "กล่องจดหมาย", "tab.cal": "ปฏิทิน", "tab.week": "สัปดาห์", "tab.room": "ห้องทำงาน", "tab.deco": "ธีม", "tab.settings": "ตั้งค่า",
    "todo.today": "วันนี้", "todo.backToday": "วันนี้", "todo.addPh": "เพิ่มงาน…", "todo.addPhDate": "งานที่มีกำหนดส่ง…",
    "todo.emptyToday": "พิมพ์งานในช่องด้านบน", "todo.emptyDate": "ไม่มีงานสำหรับ {d} เพิ่มได้ที่ด้านบน",
    "todo.recDaily": "ทุกวัน", "todo.recWeekdays": "วันธรรมดา", "todo.recWeekly": "วันที่กำหนด", "todo.specificDays": "วันที่กำหนด",
    "todo.due": "กำหนดส่ง", "todo.dueDate": "วันกำหนดส่ง", "todo.repeat": "ทำซ้ำ", "todo.apply": "ใช้", "todo.close": "ปิด", "todo.clear": "ล้าง", "todo.period": "ช่วงเวลา",
    "todo.all": "ทั้งหมด", "todo.emptyMonth": "เดือนนี้ไม่มีงาน",
    "memo.new": "โน้ตใหม่", "memo.placeholder": "พิมพ์ที่นี่ ระบบจะบันทึกอัตโนมัติ บรรทัดแรกจะกลายเป็นหัวข้อ", "memo.delete": "ลบ",
    "memo.delConfirm": "ลบโน้ต \"{x}\" หรือไม่?",
    "memo.cleanEmpty": "ล้างโน้ตที่ว่างเปล่า", "memo.cleanConfirm": "ลบโน้ตว่างเปล่า {n} รายการหรือไม่?",
    "proj.deleteConfirm": "ลบโปรเจกต์ \"{name}\" หรือไม่? (งานและข้อมูลอื่นจะยังคงอยู่)",
    "cheat.delConfirm": "ลบ \"{x}\" หรือไม่?",
    "mail.presetDelConfirm": "ลบเทมเพลตนี้หรือไม่?",
    "worktrack.resetTip": "รีเซ็ตเวลาทำงานของวันนี้เป็น 0",
    "worktrack.resetConfirm": "รีเซ็ตเวลาทำงานสะสมของวันนี้เป็น 0 หรือไม่?",
    "prompt.delConfirm": "ลบพรอมป์ตนี้หรือไม่?",
    "memo.bold": "ตัวหนา", "memo.italic": "ตัวเอียง", "memo.underline": "ขีดเส้นใต้", "memo.quote": "อ้างอิง", "memo.quickTitle": "หัวข้อ", "memo.quickTodo": "☐ งาน", "memo.quickList": "• รายการ", "memo.quickDivider": "เส้นคั่น",
    "mail.received": "ได้รับ", "mail.draft": "ฉบับร่าง", "mail.markReplied": "ทำเครื่องหมายว่าตอบแล้ว", "mail.replied": "✓ ตอบแล้ว", "mail.copyClipboard": "คัดลอกไปยังคลิปบอร์ด", "mail.edit": "แก้ไข",
    "planner.today": "วันนี้", "planner.thisWeek": "สัปดาห์นี้", "planner.backWeek": "กลับไปสัปดาห์", "planner.prevDay": "วันก่อนหน้า", "planner.nextDay": "วันถัดไป", "planner.diaryPh": "ไดอารีวันนี้...",
    "dday.set": "ตั้งค่า", "dday.title": "ตั้งค่า D-day", "dday.label": "D-day",
    "set.tab.general": "ทั่วไป", "set.tab.data": "ข้อมูล", "set.tab.support": "ติดต่อ", "set.tab.advanced": "ขั้นสูง",
    "set.lang": "ภาษา (Language)", "set.size": "ความสูงของแอป", "set.sizeNormal": "ปกติ", "set.sizeMedium": "กลาง", "set.sizeCompact": "สั้น",
    "set.data": "ข้อมูล", "set.reset": "รีเซ็ตข้อมูลทั้งหมด",
    "set.resetCaption": "โปรเจกต์ งาน คำสั่ง อีเมล และโน้ตทั้งหมดจะถูกลบและกลับสู่สถานะเริ่มต้น",
    "set.resetConfirm": "ต้องการลบข้อมูลทั้งหมดและกลับสู่สถานะเริ่มต้นจริงหรือไม่?",
    "set.on": "เปิด", "set.off": "ปิด", "set.left": "ซ้าย", "set.right": "ขวา",
    "set.dock": "ตำแหน่งแถบ Dock", "set.todayShort": "วันนี้",
    "set.tabDir": "ทิศทางแท็บดัชนี", "set.outer": "ด้านนอก", "set.inner": "ด้านใน",
    "set.desktop": "โหมดเดสก์ท็อป (หน้าต่างโปร่งใส)", "set.desktopHint": "เมื่อเปิด จะแสดงเฉพาะ Dock และซ่อนพื้นหลังโค้ด ในแอปเดสก์ท็อปจะมองเห็นวอลล์เปเปอร์",
    "set.alwaysOnTop": "ปักไว้ด้านบนเสมอ", "set.alwaysOnTopHint": "เมื่อเปิด หน้าต่างจะอยู่เหนือหน้าต่างอื่นเสมอ",
    "set.roomTab": "แท็บห้องทำงาน", "set.roomTabHint": "เมื่อปิด แท็บห้องทำงานด้านข้างจะหายไป ปิดไว้หากใช้คนเดียว",
    "set.pomodoro": "ตัวจับเวลา Pomodoro", "set.pomodoroHint": "เมื่อเปิด Pomodoro จะปรากฏบนแถบสถานะด้านบน (ข้าง D-day)",
    "set.excelGrid": "เส้นตาราง", "set.excelGridHint": "แสดงเส้นขอบเซลล์บนตารางงาน",
    "set.dockHide": "ย่อ Dock", "set.dockHideHint": "ย่อ Dock ให้เหลือแถบข้อมูลเล็ก ๆ คลิกที่แถบเพื่อเปิดอีกครั้ง",
    "set.dockReveal": "แสดง Dock", "set.dockMiniTip": "ลากเพื่อย้าย · คลิกเพื่อเปิด",
    "set.tabsAutoHide": "ซ่อนแท็บอัตโนมัติ", "set.tabsAutoHideHint": "ซ่อนแท็บที่ยื่นออกมาด้านข้าง วางเมาส์ที่ขอบ 1 วินาทีเพื่อแสดงอีกครั้ง",
    "set.about": "เกี่ยวกับแอป", "set.aboutCaption": "แอปเดสก์ท็อป todoary",
    "set.update": "อัปเดต", "set.updateCheck": "ตรวจสอบอัปเดต", "set.updateChecking": "กำลังตรวจสอบ…",
    "set.updateHint": "หากมีเวอร์ชันใหม่ ระบบจะถามว่าต้องการติดตั้งหรือไม่",
    "set.updateNone": "คุณใช้เวอร์ชันล่าสุดอยู่แล้ว", "set.updateDeclined": "เลื่อนการอัปเดตออกไปแล้ว",
    "set.updateDeferred": "ข้ามการแจ้งเตือนในการเปิดครั้งนี้", "set.updateDesktopOnly": "ตรวจสอบได้เฉพาะในแอปเดสก์ท็อปเท่านั้น",
    "set.bugReport": "แจ้งบั๊ก · ข้อเสนอแนะ", "set.bugReportCaption": "① คัดลอกข้อมูลวินิจฉัย → ② เปิดฟอร์มติดต่อ → วางลงในฟอร์ม ใช้สำหรับตรวจสอบการสูญหายของข้อมูลและบั๊ก",
    "set.bugReportBtn": "เปิดฟอร์มติดต่อ", "set.copyDiag": "คัดลอกข้อมูลวินิจฉัย",
    "set.diagCopied": "คัดลอกข้อมูลวินิจฉัยแล้ว กรุณาวางลงในช่องเนื้อหาของฟอร์มติดต่อ",
    "set.diagExplain": "ประกอบด้วยเวอร์ชันแอป, OS (ข้อมูลเบราว์เซอร์), ภาษา, การมีข้อมูลเมื่อเปิดครั้งแรก, บันทึกความเสียหาย และรายการคีย์ localStorage ไม่มีข้อมูลส่วนตัว เช่น เนื้อหางาน",
    "set.releasesLink": "เปิดหน้ารีลีส",
    "set.advancedRoom": "แซนด์บ็อกซ์พัฒนาห้องทำงาน", "set.advancedEmpty": "ไม่มีการตั้งค่าขั้นสูง",
    "set.exportBackup": "ส่งออกเป็นไฟล์สำรอง", "set.importBackup": "นำเข้าจากไฟล์สำรอง", "set.importBusy": "กำลังนำเข้า…",
    "set.exportDone": "บันทึกไฟล์สำรองแล้ว ({n} รายการ)",
    "set.backupCaption": "บันทึกและกู้คืนข้อมูล todoary เช่น โปรเจกต์ งาน โน้ต และการตั้งค่า เป็นไฟล์ JSON",
    "set.importConfirm": "เมื่อนำเข้า ข้อมูลปัจจุบันจะถูกแทนที่ด้วยเนื้อหาในไฟล์สำรอง ดำเนินการต่อหรือไม่?",
    "set.importDone": "นำเข้าเสร็จสิ้น กำลังโหลดแอปใหม่",
    "set.importFail": "ไม่สามารถอ่านไฟล์สำรองได้",
    "set.importFailNoFile": "ยังไม่ได้เลือกไฟล์",
    "set.importFailRead": "ไม่สามารถอ่านไฟล์ได้",
    "set.importFailParse": "รูปแบบ JSON ไม่ถูกต้อง",
    "set.importFailFormat": "รูปแบบไฟล์สำรองไม่รองรับ",
    "set.importFailMissing": "ไฟล์สำรองไม่มีข้อมูลหลัก (todoary.v1)",
    "set.importFailInvalid": "ข้อมูลหลักเสียหาย",
    "set.importFailSchema": "เวอร์ชันข้อมูลไม่รองรับ",
    "set.importFailApply": "ไม่สามารถบันทึกลง localStorage ได้",
    "set.storagePath": "ตำแหน่งจัดเก็บ",
    "set.storagePathHint": "งานและโน้ตจะถูกเก็บไว้ใน localStorage ของโฟลเดอร์โปรไฟล์ WebView",
    "set.openStorageFolder": "เปิดโฟลเดอร์จัดเก็บ",
    "set.storageWebOnly": "ไม่สามารถเปิดโฟลเดอร์ในเบราว์เซอร์ได้ กรุณาใช้ในแอปเดสก์ท็อป",
    "room.title": "ห้องของเรา", "room.emptyTitle": "ทำงานร่วมกันอย่างเงียบ ๆ", "room.create": "สร้างห้อง", "room.join": "เข้าร่วมด้วยรหัส",
    "room.tagline": "ห้องเงียบ ๆ สำหรับทำงานร่วมกัน", "room.profileHint": "แตะโปรไฟล์เพื่อเปลี่ยนชื่อและไอคอน", "room.profileHintShort": "แตะโปรไฟล์เพื่อเปลี่ยนชื่อและไอคอน",
    "room.description": "คำอธิบาย: ห้องทำงานคือพื้นที่เงียบ ๆ ที่รู้สึกเหมือนมีคนอยู่ใกล้ ๆ แบ่งปันงานและสถานะแบบเบา ๆ โดยไม่มีแชท การโทร หรือการแจ้งเตือน",
    "room.you": "คุณ", "room.friend": "เพื่อน", "room.away": "ไม่อยู่", "room.workingStatus": "กำลังทำงาน", "room.offlineStatus": "ออฟไลน์",
    "room.leave": "ออก", "room.leaveConfirm": "ออกจากห้องนี้หรือไม่?",
    "room.emptyHint": "เหมือนมีใครนั่งอยู่ใกล้ ๆ — ไม่มีแชท ไม่มีโทร ไม่มีการแจ้งเตือน\nแค่ความรู้สึกว่ามีเพื่อน",
    "room.namePh": "ชื่อห้อง (เช่น ห้องทำงานของเรา)", "room.codePh": "รหัสเชิญ 6 หลัก",
    "room.copyCode": "คัดลอกรหัส", "room.copied": "คัดลอกแล้ว", "room.invite": "เชิญ",
    "room.online": "กำลังทำงาน", "room.idle": "ว่าง", "room.offline": "ออฟไลน์",
    "room.todayTotal": "วันนี้ด้วยกัน", "room.connected": "{n}/4 อยู่ที่นี่", "room.full": "ห้องเต็มแล้ว (สูงสุด 4)",
    "room.notFound": "ไม่มีห้องที่ใช้รหัสนั้น", "room.codeInvalid": "ตรวจสอบรหัสเชิญ",
    "room.permission": "Firestore ปฏิเสธสิทธิ์ เผยแพร่กฎจาก firestore.rules ใน Firebase Console",
    "room.showTitle": "แสดงชื่องาน", "room.hideTitle": "นับจำนวนเท่านั้น",
    "room.clap": "👏", "room.clapHint": "ส่งเสียงปรบมือแล้ว", "room.clapLog": "ส่งเสียงปรบมือ", "room.clapDirected": "{from} ส่งเสียงปรบมือถึง {to}", "room.clapCollapsed": "{n} ปรบมือ",
    "room.celebrate": "{name} ทำงานวันนี้เสร็จแล้ว", "room.newDay": "วันใหม่เริ่มขึ้นแล้ว", "room.logEmpty": "ยังไม่มีบันทึกในวันนี้",
    "room.todoRegister": "งานที่จะแชร์วันนี้", "room.todoRegisterBtn": "เพิ่มลงในแชท", "room.todoRegistered": "เพิ่มลงในแชทแล้ว",
    "room.localMode": "โหมดดูตัวอย่างในเครื่อง — มีเพียงคุณที่เห็นจนกว่าจะตั้งค่า Firebase", "room.connecting": "กำลังเชื่อมต่อ…",
    "room.noTodo": "ยังไม่มีงาน", "room.notWorking": "กำลังพัก",
    "room.pickAvatar": "เลือกอวตาร", "room.namePrompt": "ชื่อที่แสดงในห้อง", "room.savedMember": "คุณอยู่ในห้องแล้ว",
    "room.dismissNotice": "ปิดประกาศ", "room.logExpand": "ขยาย", "room.logCollapse": "ย่อ",
    "room.chatLogsShow": "แสดง {n} ข้อความ", "room.chatLogsHide": "ซ่อนข้อความ", "room.chatLogBoxTitle": "แชทวันนี้",
    "room.headerStats": "{time} · D+{days}", "room.levelShort": "Lv.{n}", "room.expHint": "XP {done}/{total}",
    "room.statusMessageLabel": "ข้อความสถานะ", "room.statusMessagePh": "ข้อความสั้น ๆ…", "room.statusMessageHint": "ไม่เกิน 25 ตัวอักษร (นับช่องว่าง)",
    "room.statusMessageCooldownMin": "อัปเดตได้อีกครั้งใน {min} นาที", "room.statusMessageCooldownSec": "อัปเดตได้อีกครั้งใน {sec} วินาที", "room.statusMessageCooldownMinSec": "อัปเดตได้อีกครั้งใน {min} นาที {sec} วินาที",
    "room.excelTitle": "Sheet1 — ห้องทำงาน ({name})", "room.excelMembersHead": "สมาชิก ({n})",
    "room.excelLogTimeCol": "เวลา", "room.excelLogMemberCol": "สมาชิก", "room.excelLogCol": "บันทึกงาน",
    "room.excelLogInputPh": "คลิกเพื่อเพิ่มบันทึก…", "room.excelLogSaved": "บันทึกแล้ว",
    "room.excelSharedHead": "{name} — งานที่แชร์ ({n})", "room.excelConnected": "ออนไลน์ {n}", "room.excelTotal": "รวม {t}",
    "room.roomNameLabel": "ชื่อห้อง", "room.inviteCodeLabel": "รหัสเชิญ",
    "room.betaTitle": "ห้องทดลอง: แท็บห้องทำงาน", "room.betaBody": "แท็บนี้เป็นฟีเจอร์เบต้าและบางส่วนยังไม่สมบูรณ์ กรุณาส่งปัญหาหรือไอเดียมาที่ {email} ขอบคุณ!",
    "room.profileSettings": "ตั้งค่าโปรไฟล์", "room.todayReady": "พร้อมสำหรับวันนี้",
    "room.copyInviteCode": "คัดลอกรหัสเชิญ", "room.codeCopied": "คัดลอก {code} แล้ว", "room.inviteCodeFlash": "รหัสเชิญ: {code}",
    "room.return": "กลับมา", "room.awayOff": "กลับจากไม่อยู่",
    "room.noPublicTitle": "ไม่มีชื่อสาธารณะ", "room.totalWork": "เวลาทำงานรวมของห้อง", "room.toggleDone": "สลับสถานะเสร็จ",
    "room.shareToday": "งานที่จะแชร์วันนี้", "room.noTodayTasks": "ไม่มีงานวันนี้", "room.register": "ลงทะเบียน", "room.registered": "ลงทะเบียนในแชทแล้ว",
    "room.noName": "ไม่มีชื่อ", "room.changeProfile": "เปลี่ยนโปรไฟล์", "room.changeNameAvatar": "เปลี่ยนชื่อ/อวตาร",
    "room.onlineStatus": "ออนไลน์", "room.pausedStatus": "หยุดแชร์ชั่วคราว",
    "room.statusAwayLog": "เปลี่ยนเป็นโหมดไม่อยู่แล้ว", "room.statusOfflineLog": "ออฟไลน์แล้ว", "room.statusOnlineLog": "ออนไลน์แล้ว", "room.statusPausedLog": "หยุดแชร์ชั่วคราวแล้ว",
    "room.privateWithTasks": "คุณมีงาน แต่ไม่มีงานที่เป็นสาธารณะ", "room.privateProgress": "กำลังดำเนินการ {n} · ชื่อเป็นส่วนตัว",
    "room.visibleTip": "มองเห็นได้สำหรับสมาชิกห้อง คลิกเพื่อซ่อน", "room.privateTip": "ส่วนตัว คลิกเพื่อแชร์ในห้อง",
    "room.visibleTipSub": "แชร์ชื่อและงานย่อย คลิกเพื่อซ่อน", "room.privateTipSub": "ส่วนตัว คลิกเพื่อแชร์ชื่อและงานย่อย", "room.toggleSubDone": "สลับสถานะเสร็จของงานย่อย",
    "room.changeMyStatus": "เปลี่ยนสถานะของฉัน", "room.copyInviteSame": "คัดลอกรหัสเชิญ (เหมือนรหัสด้านบน)",
    "room.donePublic": "ทำ {title} เสร็จแล้ว", "room.donePrivate": "ทำงาน 1 รายการเสร็จแล้ว",
    "common.cancel": "ยกเลิก", "common.yes": "ใช่", "common.no": "ไม่", "common.save": "บันทึก", "common.error": "ข้อผิดพลาด", "common.delete": "ลบ",
    "time.am": "ก่อนเที่ยง", "time.pm": "หลังเที่ยง",
    "memo.write": "เขียนโน้ต", "memo.saved": "โน้ตที่บันทึกไว้",
    "memo.empty": "โน้ตที่คุณเขียนด้านบนจะมาสะสมที่นี่",
    "memo.untitled": "(ว่างเปล่า)",
    "memo.buddies": "รายการโน้ต", "memo.newDraft": "โน้ตใหม่", "memo.newHint": "เขียนเหมือนเริ่มแชท",
    "memo.chatHint": "บันทึกอัตโนมัติ", "memo.changeIcon": "เปลี่ยนไอคอน",
    "memo.buddyWindow": "โน้ต", "memo.category": "โน้ต",
    "memo.searchPh": "ค้นหาโน้ต…", "memo.searchNone": "ไม่พบผลลัพธ์",
    "memo.searchResult": "แสดง {n}/{t}", "memo.totalCount": "{n} โน้ต",
    "memo.sort": "เรียงลำดับ", "memo.sortRecent": "ล่าสุด", "memo.sortTitle": "หัวข้อ", "memo.sortCreated": "วันที่สร้าง",
    "memo.noEmpty": "ไม่มีโน้ตว่างเปล่าให้ล้าง",
    "memo.editHint": "เขียนได้อย่างอิสระ — บันทึกอัตโนมัติ",
    "memo.strike": "ขีดฆ่า",
    "memo.highlight": "ไฮไลต์", "memo.bullet": "รายการแบบจุด", "memo.number": "รายการแบบตัวเลข",
    "memo.sizeS": "เล็ก", "memo.sizeN": "ปกติ", "memo.sizeL": "ใหญ่", "memo.sizeXL": "ใหญ่มาก",
    "memo.sizeDown": "เล็กลง", "memo.sizeUp": "ใหญ่ขึ้น",
    "memo.fontHand": "ลายมือ", "memo.fontSerif": "เซริฟ", "memo.fontMono": "โมโน", "memo.fontSans": "ซานส์",
    "memo.heading": "รูปแบบบล็อก", "memo.hBody": "เนื้อหา", "memo.h1": "หัวข้อ 1", "memo.h2": "หัวข้อ 2", "memo.h3": "หัวข้อ 3",
    "memo.alignLeft": "ชิดซ้าย", "memo.alignCenter": "กึ่งกลาง", "memo.alignRight": "ชิดขวา",
    "memo.hr": "เส้นคั่น", "memo.clearFormat": "ล้างการจัดรูปแบบ",
    "memo.manage": "จัดการโน้ต", "memo.managePlaceholder": "เครื่องมือค้นหา เรียงลำดับ และจัดการเป็นชุดจะอยู่ที่นี่",
    "memo.msgCount": "{n} ข้อความ", "memo.empty2": "(ว่างเปล่า)",
    "memo.back": "กลับไปที่รายการ",
    "memo.editEmpty": "พิมพ์ด้านล่างแล้วกด Enter เพื่อเพิ่มข้อความ",
    "memo.inputPh": "พิมพ์ข้อความแล้วกด Enter… (Shift+Enter ขึ้นบรรทัดใหม่)",
    "memo.editing": "กำลังแก้ไข… Enter เพื่อบันทึก · Esc เพื่อยกเลิก",
    "memo.send": "ส่ง", "memo.save": "บันทึก",
    "memo.color": "สีข้อความ", "memo.size": "ขนาด", "memo.font": "แบบอักษร",
    "memo.image": "แนบรูปภาพ", "memo.link": "เพิ่มลิงก์",
    "memo.linkUrl": "URL ลิงก์ (https://…)", "memo.linkLabel": "ป้ายกำกับ (ไม่บังคับ)",
    "memo.imageTooLarge": "รูปภาพใหญ่เกินไป (กรุณาให้น้อยกว่า 600KB)",
    "memo.edit": "แก้ไข", "memo.msgDelete": "ลบข้อความนี้",
    "memo.msgDelConfirm": "ลบข้อความนี้หรือไม่?",
    "memo.cancelEdit": "ยกเลิก",
    "memo.blocks": "/ บล็อก", "memo.quickQuote": "อ้างอิง", "memo.todoText": "งาน", "memo.linkedTodo": "งานที่เชื่อมโยง",
    "memo.excelColTitle": "หัวข้อ", "memo.excelColUpdated": "อัปเดตเมื่อ",
    "proj.menu": "โปรเจกต์", "proj.new": "＋ โปรเจกต์ใหม่", "proj.rename": "✎ เปลี่ยนชื่อ", "proj.delete": "✕ ลบ \"{name}\"",
    "proj.newPrompt": "ชื่อโปรเจกต์ใหม่", "proj.renamePrompt": "เปลี่ยนชื่อโปรเจกต์", "proj.fallback": "โปรเจกต์",
    "proj.folderOpenFail": "ไม่สามารถเปิดโฟลเดอร์ได้: {msg}", "proj.folderDesktopOnly": "การเปิดโฟลเดอร์ใช้ได้เฉพาะในแอปเดสก์ท็อป",
    "proj.folderPrompt": "เส้นทางโฟลเดอร์โปรเจกต์ (เช่น C:\\\\work\\\\my-repo)", "proj.gitPrompt": "URL ของ Git repo (เช่น https://github.com/me/repo)",
    "proj.gitConnect": "เชื่อมต่อ git", "proj.gitRepo": "Git repo", "proj.gitConnectTip": "เชื่อมต่อ URL ของ git",
    "proj.folderConnect": "เชื่อมต่อโฟลเดอร์", "proj.folderConnectTip": "เชื่อมต่อเส้นทางโฟลเดอร์",
    "todo.need": "ต้องทำ", "todo.done": "เสร็จแล้ว", "todo.add": "เพิ่มงาน…",
    "todo.emptyNeed": "พิมพ์งานในช่องด้านล่าง", "todo.emptyDone": "งานที่เสร็จแล้วจะมาสะสมที่นี่",
    "todo.editTitle": "คลิกเพื่อแก้ไข", "todo.pin": "ปักหมุดเป็นสำคัญ", "todo.unpin": "ยกเลิกปักหมุด",
    "todo.markDone": "ทำเครื่องหมายว่าเสร็จ", "todo.undoDone": "เลิกทำ",
    "todo.subAdd": "เพิ่มงานย่อย…", "todo.clearPeriod": "ล้างช่วงเวลา", "todo.removeRepeat": "ลบการทำซ้ำ",
    "todo.subLinkAdd": "เพิ่มลิงก์งานย่อย", "todo.subLinkEdit": "แก้ไขลิงก์งานย่อย", "todo.subLinkOpen": "เปิดลิงก์", "todo.subLinkPrompt": "URL ลิงก์งานย่อย (เว้นว่างเพื่อลบ)",
    "todo.dragPeriodHint": "ลากช่วงเวลาที่ต้องการบนปฏิทิน",
    "todo.clearSchedule": "ล้างกำหนดการ", "todo.clearScheduleHint": "ลบช่วงเวลาและการทำซ้ำ คืนค่าวันที่เพิ่มเดิม",
    "todo.setRepeat": "ตั้งการทำซ้ำ", "todo.setRepeatHint": "เลือกวันในสัปดาห์ที่จะทำซ้ำ",
    "todo.setRepeatHintNoPeriod": "เลือกกำหนดการทำซ้ำ ลากบนปฏิทินเพื่อจำกัดช่วงวันที่",
    "todo.schedulePanelHint": "เลือกการทำซ้ำ จากนั้นลากบนปฏิทินเพื่อจำกัดช่วงวันที่หากต้องการ",
    "todo.periodNone": "ไม่มี (ทำซ้ำต่อเนื่อง)", "todo.periodStart": "เริ่ม", "todo.periodEnd": "สิ้นสุด", "todo.applyPeriod": "ใช้ช่วงเวลา",
    "todo.periodPreset1m": "1 เดือน", "todo.periodPreset3m": "3 เดือน", "todo.periodPresetOngoing": "ต่อเนื่อง", "todo.periodOrDrag": "หรือลากบนปฏิทิน",
    "todo.periodPending": "{range} — ยืนยันด้านบนด้วยใช่/ไม่", "todo.periodConfirm": "ลงทะเบียนสำหรับ {range} หรือไม่?",
    "todo.yes": "ใช่", "todo.no": "ไม่", "todo.save": "บันทึก", "todo.scheduleSaved": "บันทึกแล้ว",
    "todo.all": "ทั้งหมด", "todo.dragMove": "ลากเพื่อย้าย", "todo.subCollapse": "ย่องานย่อย", "todo.subExpand": "ขยายงานย่อย", "todo.openMemo": "เขียนรายละเอียดในโน้ต",
    "todo.excelColDone": "เสร็จ", "todo.excelColTitle": "งาน", "todo.excelColSchedule": "กำหนดการ", "todo.excelColTime": "เวลา",
    "todo.excelSheetTabs": "ชีตงาน", "todo.excelResizeCol": "ปรับขนาดคอลัมน์", "todo.excelFooterAria": "สรุปงาน", "todo.excelFooterPct": "{n}%",
    "todo.excelStatusCount": "จำนวน", "todo.excelStatusDoneN": "เสร็จ", "todo.excelQuickAddPh": "เพิ่มงาน… (Enter เพื่อเพิ่ม)",
    "todo.excelStatusNow": "ตอนนี้", "todo.excelStatusNowNone": "ไม่มีกำหนดการ", "todo.excelGroupProgress": "เสร็จ {done} จาก {total}",
    "todo.excelGroupScheduled": "มีกำหนดการ", "todo.excelGroupNoDue": "ไม่มีกำหนดส่ง", "todo.excelGroupCount": "{n}",
    "todo.excelTracking": "กำลังดำเนินการ", "todo.excelTrackStart": "เริ่มจับเวลา — ติดตามเวลางานนี้", "todo.excelTrackStop": "หยุดจับเวลา", "todo.excelTrackedTime": "จับเวลาแล้ว {t}",
    "todo.excelStatusCountN": "{n}", "todo.excelCalShow": "แสดงปฏิทิน", "todo.excelCalHide": "ซ่อนปฏิทิน", "todo.excelCalForced": "ปฏิทินจะเปิดค้างไว้ขณะเลือกวันที่",
    "todo.excelTabWeek": "สัปดาห์", "todo.excelTabStats": "สถิติ", "todo.excelCsvExport": "ส่งออก CSV",
    "todo.excelStatsDow": "วัน", "todo.excelStatsDist": "แท่ง", "todo.excelStatsTotal": "รวม",
    "todo.excelPaneTodoHint": "งานวันนี้ในรูปแบบตารางสเปรดชีต", "todo.excelPaneTimetableHint": "ตารางรายสัปดาห์ — วางกิจกรรมตามเวลาสำหรับสัปดาห์นี้ (จ.–อา.)",
    "todo.excelNowScheduleAria": "กำหนดการปัจจุบัน", "todo.excelNowScheduleLabel": "ตอนนี้", "todo.excelNowScheduleEmpty": "ไม่มีกำหนดการสำหรับช่วงเวลานี้",
    "todo.excelNowScheduleTime": "เวลา", "todo.excelNowScheduleTitle": "กิจกรรม",
    "todo.excelNowFilterOn": "แสดงเฉพาะงานที่เชื่อมโยง", "todo.excelNowFilterOff": "แสดงงานทั้งหมด", "todo.excelNowFilterBlock": "แสดงเฉพาะงานของกิจกรรมนี้",
    "todo.excelPaneGraphHint": "แดชบอร์ดรายสัปดาห์ — เวลาทำงาน การทำเสร็จ และยอดรวม", "todo.excelStatusTimer": "ตัวจับเวลา", "todo.excelTimetableTime": "เวลา",
    "todo.excelTimetablePrompt": "ชื่อกิจกรรม", "todo.excelTimetableEditPrompt": "ชื่อกิจกรรม (เว้นว่างเพื่อลบ)", "todo.excelWeekScheduleTitle": "{range}",
    "todo.excelScheduleLink": "เชื่อมโยงกิจกรรม", "todo.excelScheduleUnlink": "ยกเลิกการเชื่อมโยง", "todo.excelScheduleLinkEmpty": "ไม่มีกิจกรรมในวันนี้ เพิ่มในตารางสัปดาห์ก่อน",
    "todo.excelSchedulePrep": "งานเตรียม", "todo.excelSchedulePrepAdd": "เพิ่มงานเตรียม", "todo.excelSchedulePrepEmpty": "ไม่มีงานที่เชื่อมโยง",
    "todo.excelScheduleDropHint": "ลากงานจาก 'วันนี้' มาวางบนบล็อกนี้เพื่อเชื่อมโยง", "todo.excelScheduleColor": "สี",
    "todo.excelScheduleDockCreate": "กิจกรรมใหม่", "todo.excelScheduleDockEdit": "แก้ไขกิจกรรม",
    "todo.excelScheduleConfirm": "เพิ่ม", "todo.excelScheduleCancel": "ยกเลิก", "todo.excelScheduleClose": "ปิด", "todo.excelScheduleDelete": "ลบ", "todo.excelTimetableDefault": "กิจกรรม",
    "todo.excelDashboardWeek": "สถิติรายสัปดาห์ ({range})", "todo.excelDashCompletion": "การทำเสร็จ", "todo.excelDashDailyAvg": "เฉลี่ยต่อวัน", "todo.excelDashStreak": "ต่อเนื่อง",
    "todo.excelDashActiveDays": "วันที่ใช้งาน", "todo.excelDashActiveDaysVal": "{n} วัน", "todo.doneAt": "เสร็จเมื่อ {t}",
    "cheat.registered": "คำสั่งที่บันทึก", "cheat.frequent": "ใช้บ่อย", "cheat.add": "เพิ่มคำสั่ง…",
    "cheat.emptyReg": "พิมพ์คำสั่งด้านบนเพื่อบันทึก", "cheat.emptyFreq": "คำสั่งที่ใช้จะปรากฏที่นี่ (นับเมื่อคัดลอก)",
    "cheat.label": "(ป้ายกำกับ)", "cheat.uses": "{n}×",
    "mail.paste": "วางอีเมลที่ได้รับ…", "mail.add": "เพิ่ม", "mail.site": "เปิดเว็บไซต์", "mail.siteConnect": "เชื่อมโยงเว็บไซต์",
    "mail.draftLabel": "ร่างคำตอบ", "mail.emptyTop": "วางอีเมลที่ได้รับเพื่อเพิ่ม", "mail.emptyBottom": "เลือกคำถามที่ได้รับด้านบนเพื่อเขียนร่างที่นี่",
    "mail.draftPlaceholder": "เขียนร่างคำตอบของคุณ…", "mail.noTitle": "(ไม่มีหัวข้อ)", "mail.inquiry": "คำถาม",
    "mail.sitePrompt": "URL ตอบกลับ/แพลตฟอร์มสำหรับอีเมลนี้ (เช่น https://mail.google.com/...)",
    "mail.back": "กล่องขาเข้า", "mail.copyDraft": "คัดลอกร่าง", "mail.noBody": "(ไม่มีเนื้อหา)",
    "mail.presets": "เทมเพลตคำตอบด่วน", "mail.presetEmpty": "บันทึกข้อความที่ใช้บ่อย",
    "mail.presetNew": "เพิ่มเทมเพลต", "mail.presetLabel": "ป้ายกำกับ (เช่น คืนเงิน)", "mail.presetText": "ข้อความตอบกลับ",
    "mail.presetSave": "บันทึก", "mail.presetCancel": "ยกเลิก", "mail.useApplied": "ใช้เทมเพลตกับร่างแล้ว",
    "mail.noLabel": "(ไม่มีป้ายกำกับ)", "mail.markUnread": "ทำเครื่องหมายว่ายังไม่ตอบ", "mail.markRepliedTip": "ทำเครื่องหมายว่าตอบแล้ว",
    "cal.todayBtn": "วันนี้", "cal.note": "เขียนโน้ต · ไดอารีของวันนี้…", "cal.done": "เสร็จ {n}", "cal.mails": "{n} อีเมล",
    "planner.title": "แผนรายสัปดาห์", "planner.notes": "บันทึกย่อ", "planner.notesPh": "เขียนบันทึกสำหรับสัปดาห์นี้…",
    "planner.mon": "จันทร์", "planner.tue": "อังคาร", "planner.wed": "พุธ", "planner.thu": "พฤหัสบดี",
    "planner.fri": "ศุกร์", "planner.sat": "เสาร์", "planner.sun": "อาทิตย์",
    "planner.add": "เพิ่ม", "planner.addPh": "พิมพ์แล้วกด Enter…", "planner.prev": "สัปดาห์ก่อน", "planner.next": "สัปดาห์ถัดไป",
    "planner.weekTotal": "รวมสัปดาห์นี้", "planner.unattributed": "ไม่ได้กำหนด",
    "planner.diaryExists": "มีไดอารี", "planner.diaryShort": "ไดอารี", "planner.diaryTitle": "ไดอารี", "planner.mood": "อารมณ์",
    "planner.workEnd": "เลิกงาน", "planner.doneSection": "เสร็จแล้ว", "planner.noTasksDay": "ไม่มีงานในวันนี้",
    "planner.noSong": "ไม่มีเพลง", "planner.noSongTitle": "(ไม่มีชื่อ)", "planner.work": "ทำงาน", "planner.doneShort": "เสร็จ", "planner.streak": "ต่อเนื่อง", "planner.days": "{n} วัน",
    "planner.dayDetail": "รายละเอียด {month}/{day}",
    "dday.dday": "D-DAY", "dday.namePlaceholder": "ชื่อ (เช่น เปิดตัว)", "dday.clear": "ล้างวันที่",
    "music.add": "เพิ่มลิงก์ YouTube ♫", "music.loading": "กำลังโหลด…",
    "music.playlist": "เพลย์ลิสต์ ♫", "music.paste": "วางลิงก์ YouTube", "music.err": "ไม่สามารถอ่านลิงก์ YouTube นั้นได้", "music.empty": "วางลิงก์ YouTube เพื่อเพิ่มเพลง",
    "music.prev": "ก่อนหน้า", "music.next": "ถัดไป", "music.play": "เล่น", "music.pause": "หยุดชั่วคราว", "music.volume": "ระดับเสียง",
    "app.close": "ปิดแอป", "app.minimize": "ย่อหน้าต่าง", "app.miniMode": "โหมดมินิ",
    "timer.next": "ยืดเส้นครั้งถัดไป", "work.title": "ทำงานวันนี้",
    "timer.clickPause": "คลิก: หยุดชั่วคราว", "timer.clickResume": "คลิก: เริ่ม / ทำต่อ",
    "stretch.tip0": "หมุนไหล่", "stretch.tip1": "ค่อย ๆ หันคอไปมา",
    "stretch.tip2": "ยืดตัวตรงแล้วหายใจลึก ๆ", "stretch.tip3": "หมุนข้อมือ",
    "stretch.tip4": "กะพริบตาแล้วมองไกล ๆ", "stretch.tip5": "ลุกขึ้นยืดเส้น", "stretch.tip6": "ดื่มน้ำสักอึกไหม?",
    "header.todayTitle": "วันนี้ — {date}", "header.todaySub": "ทำงาน {minutes} นาที · {todos} งาน · ยังไม่ตอบ {mail}",
    "header.todoSub": "เหลือ {left} · ด่วน {hot}", "header.memoSub": "{project} · {count} · {autosave}",
    "header.promptTitle": "คลังพรอมป์ต", "header.promptSub": "บันทึก {count} · {sortHint}",
    "header.mailTitle": "กล่องจดหมายลูกค้า", "header.mailSub": "ยังไม่ตอบ {unreplied} · {replyHint}",
    "header.retroTitle": "ทบทวน", "header.retroSub": "{retroHint}", "header.calSub": "แผนรายสัปดาห์ · {autosave}",
    "header.autosave": "บันทึกอัตโนมัติ", "header.sortByUse": "ใช้บ่อยก่อน",
    "header.replyHint": "ทำเครื่องหมายตอบแล้วเพื่อจัดระเบียบ", "header.retroHint": "วันละหนึ่งครั้ง · บันทึกอัตโนมัติ",
    "kbd.todoPh": "เพิ่มงาน…  (Enter บันทึก · Shift+Enter ขึ้นบรรทัดใหม่)",
    "kbd.memoPh": "เพิ่มโน้ต…  (Enter บันทึก · Shift+Enter ขึ้นบรรทัดใหม่)",
    "kbd.mailPh": "วางอีเมลที่ได้รับ แล้วกด Enter…  (Shift+Enter ขึ้นบรรทัดใหม่)",
    "kbd.calPh": "เพิ่มบันทึกสำหรับวันที่นี้…  (Enter บันทึก)", "kbd.submit": "เพิ่ม (Enter)",
    "deco.pickColor": "เลือกสี", "deco.pickColorCustom": "สีกำหนดเอง",
    "fakeIde.caption": "✿ IDE จำลองเพื่ออ้างอิง — แสดงตำแหน่งที่ไดอารีติดอยู่",
    "fakeIde.taskbarApp": "♡ ไดอารี", "fakeIde.taskbarStatus": "{clock} · {stretch} {remain} นาที",
    "retro.todayLabel": "วันนี้ · {date}", "retro.textPh": "วันนี้เป็นอย่างไรบ้าง? บรรทัดเดียวก็พอ",
    "retro.goodLabel": "👍 สิ่งที่ไปได้ดี", "retro.goodPh": "เรื่องดี ๆ (ไม่บังคับ)", "retro.badLabel": "👎 สิ่งที่ติดขัด", "retro.badPh": "เรื่องที่ติดขัด (ไม่บังคับ)",
    "retro.pastTitle": "การทบทวนที่ผ่านมา · {n}", "retro.pastEmpty": "ยังไม่มีการทบทวน — เพิ่มวันละบรรทัด", "retro.optional": "(ไม่บังคับ)",
    "finish.title": "จบงานสำหรับวันนี้", "finish.workMin": "⏱ ทำงาน {minutes} นาที", "finish.doneCount": "✓ เสร็จ {n}",
    "finish.oneLine": "หนึ่งบรรทัดสำหรับวันนี้", "finish.aiThinking": "กำลังคิด…", "finish.aiDraft": "✨ ร่างโดย AI",
    "finish.doneToday": "เสร็จวันนี้", "finish.closeContinue": "ปิด (ทำงานต่อ)", "finish.finishToday": "✓ จบวันนี้",
    "common.fail": "ล้มเหลว", "common.copy": "คัดลอก", "common.optional": "(ไม่บังคับ)",
    "ai.title": "บุ๊กมาร์กเซสชัน AI", "ai.sub": "โปรเจกต์นี้ · {n} · โหวต + บันทึกหนึ่งบรรทัด",
    "ai.addNew": "+ เพิ่มบุ๊กมาร์ก", "ai.titlePh": "สรุปหนึ่งบรรทัด (เช่น ออกแบบ flow การยืนยันตัวตน)", "ai.notePh": "บันทึกเพื่อจดจำ (ไม่บังคับ)",
    "ai.goodBtn": "● ดี", "ai.badBtn": "○ เฉย ๆ", "ai.goodShort": "ดี", "ai.badShort": "เฉย ๆ", "ai.toggle": "สลับ ดี/เฉย ๆ",
    "ai.empty": "ไม่มีบุ๊กมาร์กเซสชัน AI ในโปรเจกต์นี้", "ai.todayPrefix": "วันนี้ · ", "ai.noteAddPh": "เพิ่มบันทึก…",
    "prompt.searchPh": "ค้นหาด้วยข้อความ…", "prompt.addNew": "+ บันทึกพรอมป์ตใหม่", "prompt.bodyPh": "เนื้อหาพรอมป์ตที่คุณใช้บ่อย…",
    "prompt.emptySearch": "ไม่พบผลการค้นหา", "prompt.empty": "ยังไม่มีพรอมป์ต — เพิ่มด้านบน",
    "prompt.bodyEditPh": "เนื้อหาพรอมป์ต", "prompt.uses": "ใช้ไป {n}×", "prompt.copied": "✓ คัดลอกแล้ว", "prompt.copy": "📋 คัดลอก",
    "mood.great": "เปล่งประกาย", "mood.happy": "ดี", "mood.love": "ตื่นเต้น", "mood.calm": "สงบ",
    "mood.soso": "งั้น ๆ", "mood.tired": "เหนื่อย", "mood.sad": "ห่อเหี่ยว", "mood.stress": "เครียด",
    "split.resizeCal": "ลากเพื่อปรับขนาดปฏิทิน (ทีละ 1 สัปดาห์)",
    "pomo.title": "Pomodoro", "pomo.work": "โฟกัส", "pomo.break": "พัก", "pomo.idle": "ว่าง",
    "pomo.start": "เริ่ม", "pomo.pause": "หยุดชั่วคราว", "pomo.resume": "ทำต่อ", "pomo.skip": "ข้าม", "pomo.stop": "หยุด", "pomo.continue": "ทำต่อ",
    "pomo.notifyWork": "หมดเวลาโฟกัสแล้ว — พักหน่อย!", "pomo.notifyBreak": "หมดเวลาพักแล้ว — พร้อมโฟกัสอีกครั้งไหม?",
    "pomo.notifyOn": "เปิดการแจ้งเตือนของระบบ", "pomo.notifyOff": "ปิดการแจ้งเตือนของระบบ",
    "pomo.notifyEnable": "อนุญาตการแจ้งเตือน", "pomo.notifyHint": "แจ้งเตือนเมื่อหมดเวลาโฟกัสหรือพัก การแจ้งเตือนในแอปจะแสดงเสมอ",
    "pomo.settings": "ตั้งค่า", "pomo.settingsClose": "ปิดการตั้งค่า",
    "pomo.sound": "เสียง", "pomo.soundVolume": "ระดับเสียง", "pomo.soundType": "ชนิดเสียง",
    "pomo.soundChime": "ระฆังราว", "pomo.soundBell": "กระดิ่ง", "pomo.soundSoft": "นุ่มนวล",
    "pomo.soundTest": "🔔 ฟังตัวอย่าง", "pomo.workMin": "โฟกัส (นาที)", "pomo.breakMin": "พัก (นาที)",
    "pomo.minHoldHint": "แตะ ±1 · กดค้าง 1.5 วินาทีเพื่อเปลี่ยนเร็ว", "pomo.minInputHint": "คลิกเพื่อพิมพ์ตัวเลข", "pomo.minInput": "นาที",
    "pomo.durationIdleHint": "เปลี่ยนระยะเวลาได้เฉพาะตอนว่าง", "pomo.durationActiveHint": "ขณะตัวจับเวลาทำงาน การเปลี่ยนแปลงจะมีผลในรอบถัดไป",
    "pomo.notifyLabel": "การแจ้งเตือนของระบบ", "pomo.sectionTime": "ระยะเวลา", "pomo.sectionSound": "เสียง", "pomo.sectionNotify": "การแจ้งเตือน",
    "worktrack.runningOn": "กำลังติดตามเวลาทำงาน · คลิกเพื่อหยุดชั่วคราว", "worktrack.runningOff": "หยุดชั่วคราว · คลิกเพื่อติดตามต่อ",
    "worktrack.settingsTip": "ตั้งค่าเวลาทำงาน", "worktrack.settingsTitle": "ตั้งค่าเวลาทำงาน",
    "worktrack.accumulated": "สะสม", "worktrack.pendingSec": "กำลังดำเนินการ",
    "worktrack.pendingHint": "วินาทีที่ยังไม่ครบนาที จะเพิ่มอัตโนมัติขณะติดตาม",
    "worktrack.tracking": "ติดตามอัตโนมัติ", "worktrack.resetBtn": "รีเซ็ตเป็น 0",
    "worktrack.resetConfirmDate": "รีเซ็ตเวลาทำงานของวันที่ {d} เป็น 0 หรือไม่?",
    "worktrack.presets": "เพิ่มด่วน", "worktrack.byProject": "ตามโปรเจกต์", "worktrack.unclassified": "ไม่จัดหมวด",
    "worktrack.sectionOptions": "การแสดงผล · อัตโนมัติ", "worktrack.showSeconds": "แสดงวินาที",
    "worktrack.dailyGoal": "เป้าหมายต่อวัน (นาที)", "worktrack.goalTip": "เป้าหมายวันนี้: {n} นาที",
    "worktrack.autoPauseBlur": "หยุดเมื่อไม่ได้ใช้งาน", "worktrack.autoPauseIdle": "หยุดเมื่อว่าง (นาที)",
    "worktrack.autoPauseIdleHint": "0 = ปิด หยุดติดตามหลังจากว่างครบจำนวนนาทีนี้",
    "worktrack.sessionLogs": "เซสชันการทำงาน", "worktrack.editDate": "วันที่",
    "worktrack.tabTime": "เวลา", "worktrack.tabProject": "โปรเจกต์", "worktrack.tabPrefs": "ค่ากำหนด",
    "worktrack.noSessions": "ไม่มีเซสชันที่บันทึกไว้", "worktrack.noProjects": "ไม่มีบันทึกแยกตามโปรเจกต์",
    "update.prompt": "มีเวอร์ชัน {version} แล้ว (ปัจจุบัน {current})\nอัปเดตเลยไหม?",
    "update.yes": "อัปเดต", "update.later": "ภายหลัง", "update.installing": "กำลังดาวน์โหลดอัปเดต กรุณารอสักครู่…", "update.fail": "อัปเดตล้มเหลว\n{msg}",
    "store.saveFailed": "ไม่สามารถบันทึกข้อมูลของคุณได้ กรุณาสำรองข้อมูลก่อนรีสตาร์ทแอป",
    "store.saveQuota": "พื้นที่จัดเก็บเต็มและไม่สามารถบันทึกข้อมูลได้ การเปลี่ยนแปลงบางส่วนอาจสูญหาย",
    "store.restoredFromMirror": "ข้อมูลที่บันทึกว่างเปล่า จึงกู้คืนจากข้อมูลสำรองอัตโนมัติ",
    "deco.skin": "สกิน", "deco.skinHint": "สกินจะอัปเดตพื้นหลัง ส่วนหัว และแถวงานพร้อมกัน",
    "skin.default": "ค่าเริ่มต้น", "skin.defaultDesc": "เทปสีพาสเทลและเส้นโค้งมน",
    "skin.notion": "ขาวดำ", "skin.notionDesc": "เทาอ่อน เส้นคั่นบาง แถวแบบฐานข้อมูล",
    "skin.excel": "สเปรดชีต", "skin.excelDesc": "ริบบิ้นเขียว ตารางเซลล์ แถวลายทาง",
    "skin.locked": "ซื้อสกินนี้แล้วปลดล็อกด้วยคีย์ลิขสิทธิ์ของคุณ", "skin.lockedBadge": "ล็อก",
    "skin.enterKey": "คีย์ลิขสิทธิ์", "skin.keyPlaceholder": "วางคีย์ลิขสิทธิ์ Polar", "skin.redeem": "ติดตั้งด้วยคีย์", "skin.buy": "ซื้อ",
    "skin.tauriOnly": "การติดตั้งใช้ได้เฉพาะในแอปเดสก์ท็อป", "skin.keyRequired": "กรุณาป้อนคีย์ลิขสิทธิ์",
    "skin.licensesConfigMissing": "ยังไม่ได้กำหนดค่าเซิร์ฟเวอร์ลิขสิทธิ์ (firebase-licenses-config)",
    "skin.redeemInvalidKey": "คีย์ลิขสิทธิ์ไม่ถูกต้อง", "skin.redeemForbidden": "ลิขสิทธิ์นี้ไม่รวมสกินนี้",
    "skin.redeemNetwork": "ข้อผิดพลาดเครือข่าย ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง", "skin.redeemBundleMissing": "สกินนี้ไม่ได้รวมอยู่ในบิลด์แอปนี้",
    "skin.redeemReceiptInvalid": "การตรวจสอบใบเสร็จล้มเหลว กรุณาอัปเดตแอป", "skin.redeemFailed": "การแลกใช้ล้มเหลว",
    "deco.theme": "ธีม", "deco.bg": "พื้นหลัง", "deco.color": "สี",
    "deco.baseTheme": "ค่าที่ตั้งไว้", "deco.myTheme": "ธีมของฉัน", "deco.save": "＋ บันทึกปัจจุบันเป็นธีมของฉัน",
    "deco.saveName": "ชื่อธีม", "deco.myThemeName": "ธีมของฉัน ",
    "deco.preview": "ตัวอย่าง", "deco.type": "ชนิด", "deco.linear": "เชิงเส้น", "deco.radial": "รัศมี (ออร่า)",
    "deco.dir": "ทิศทาง", "deco.stops": "จุดสี", "deco.addColor": "＋ เพิ่มสี",
    "deco.shape": "รูปทรง", "deco.shapeNone": "ไม่มี", "deco.shapeHeart": "หัวใจ", "deco.shapeHearts": "หัวใจหลายดวง", "deco.shapeStars": "ดาว", "deco.shapeClover": "โคลเวอร์", "deco.shapeRibbon": "ริบบิ้น", "deco.shapeFish": "ปลาทอง",
    "deco.point": "สีเน้น", "deco.chrome": "สีส่วนหัว / แถบ", "deco.headerGrad": "ไล่สีส่วนหัว",
    "deco.tape": "เทป", "deco.tapePreview": "ตัวอย่าง", "deco.tapePattern": "ลวดลาย",
    "deco.tapePatternDots": "จุด", "deco.tapePatternDiag": "ทแยง", "deco.tapePatternGingham": "ลายสก็อต", "deco.tapePatternNone": "ไม่มี",
    "deco.tapePalette": "จานสี", "deco.tapePin": "สีที่ปักหมุด", "deco.tapeAddColor": "＋ เพิ่มสี", "deco.tapeReset": "รีเซ็ตเป็นค่าเริ่มต้น", "deco.tapeResetConfirm": "รีเซ็ตการตั้งค่าเทปเป็นค่าเริ่มต้นหรือไม่?",
    "deco.tapePreviewHint": "แตะแถบเพื่อเปลี่ยนสี", "deco.tapeSample": "งาน", "deco.tapePinLabel": "ปักหมุด",
    "deco.tapePickOne": "แถวนี้", "deco.tapePickAll": "ทั้งจานสี",
    "deco.tapeBorder": "เส้นขอบ", "deco.tapeBorderNone": "ไม่มี", "deco.tapeBorderNormal": "ปกติ", "deco.tapeBorderBold": "หนา",
    "deco.tapeBorderSoft": "อ่อน", "deco.tapeBorderInk": "เข้ม",
    "deco.tapeEdgeFade": "ขอบจางหาย", "deco.tapePatternColor": "สีลวดลาย",
    "deco.tapeGradient": "ไล่สี 1–12", "deco.tapeGradientHint": "ช่อง 1 อ่อน ช่อง 12 เข้มขึ้น",
    "deco.tapeGradLight": "อ่อน (1)", "deco.tapeGradDark": "เข้ม (12)", "deco.tapeGradApply": "ใช้การไล่สี",
    "deco.myTapeTheme": "เทปของฉัน", "deco.myTapeThemeName": "เทปของฉัน ", "deco.saveTapeTheme": "＋ บันทึกการตั้งค่าเทปปัจจุบัน",
    "th.basic": "พื้นฐาน", "th.melon": "เมลอนโซดา", "th.summer": "ฤดูร้อน", "th.green": "เขียว", "th.milk": "นมสตรอว์เบอร์รี", "th.peach": "พีช", "th.lavender": "ลาเวนเดอร์", "th.night": "ท้องฟ้ายามค่ำคืน",
  };

  DICT["zh-Hans"] = { ...DICT.zh };
  DICT["zh-Hant"] = { ...DICT["zh-Hans"], ...ZH_HANT };
  DICT.de = { ...DICT.en, ...DE_DICT };
  DICT.ru = { ...DICT.en, ...RU_DICT };
  DICT.th = { ...DICT.en, ...TH_DICT };

  const LANGS = [
    ["ko", "한국어", "KO"],
    ["en", "English", "EN"],
    ["ja", "日本語", "JA"],
    ["zh-Hans", "简体中文", "简"],
    ["zh-Hant", "繁體中文", "繁"],
    ["es", "Español", "ES"],
    ["pt", "Português", "PT"],
    ["de", "Deutsch", "DE"],
    ["ru", "Русский", "RU"],
    ["th", "ไทย", "TH"],
  ];

  const WEEK = {
    ko: ["일", "월", "화", "수", "목", "금", "토"],
    en: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
    zh: ["日", "一", "二", "三", "四", "五", "六"],
    "zh-Hans": ["日", "一", "二", "三", "四", "五", "六"],
    "zh-Hant": ["日", "一", "二", "三", "四", "五", "六"],
    ja: ["日", "月", "火", "水", "木", "金", "土"],
    es: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
    pt: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
    de: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
    ru: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
    th: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส"],
  };
  const MONTHS = {
    en: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
    es: ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"],
    pt: ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"],
    de: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
    ru: ["янв", "фев", "мар", "апр", "май", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"],
    th: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
  };

  const KEY = "todoary.lang";
  // 앱 이름 변경 전 키에서 한 번만 이관.
  try {
    const LEGACY = "vibe-diary.lang";
    if (!localStorage.getItem(KEY) && localStorage.getItem(LEGACY)) {
      localStorage.setItem(KEY, localStorage.getItem(LEGACY));
      localStorage.removeItem(LEGACY);
    }
  } catch (_) {}
  function detect() {
    const l = (navigator.language || navigator.userLanguage || "en").toLowerCase();
    if (l.startsWith("ko")) return "ko";
    if (l.startsWith("zh-tw") || l.startsWith("zh-hk") || l.startsWith("zh-mo") || l.includes("hant")) return "zh-Hant";
    if (l.startsWith("zh")) return "zh-Hans";
    if (l.startsWith("ja")) return "ja";
    if (l.startsWith("es")) return "es";
    if (l.startsWith("pt")) return "pt";
    if (l.startsWith("de")) return "de";
    if (l.startsWith("ru")) return "ru";
    if (l.startsWith("th")) return "th";
    if (l.startsWith("en")) return "en";
    return "en";
  }
  function normalizeLang(l) {
    if (l === "zh") return "zh-Hans";
    return DICT[l] ? l : detect();
  }
  let lang = normalizeLang(localStorage.getItem(KEY) || detect());
  const subs = new Set();

  window.i18n = {
    get() { return lang; },
    set(l) { const next = normalizeLang(l); if (!DICT[next]) return; lang = next; try { localStorage.setItem(KEY, next); } catch (_) {} subs.forEach(fn => fn()); },
    list() { return LANGS; },
    t(key, vars) {
      const d = DICT[lang] || DICT.en;
      let s = d[key] ?? DICT.en[key] ?? DICT.ko[key] ?? key;
      if (vars) for (const k in vars) s = s.split("{" + k + "}").join(vars[k]);
      return s;
    },
    subscribe(fn) { subs.add(fn); return () => subs.delete(fn); },
    weekdays() { return WEEK[lang] || WEEK.en; },
    fmtDate(iso) {
      if (!iso) return "";
      const [y, m, d] = iso.split("-").map(Number);
      const dow = new Date(y, m - 1, d).getDay();
      const dn = (WEEK[lang] || WEEK.en)[dow];
      if (lang === "ko") return `${m}월 ${d}일 (${dn})`;
      if (lang === "ja") return `${m}月${d}日 (${dn})`;
      if (lang === "zh" || lang === "zh-Hans" || lang === "zh-Hant") return `${m}月${d}日 (周${dn})`;
      if (lang === "es" || lang === "pt" || lang === "de" || lang === "ru" || lang === "th") return `${d} ${(MONTHS[lang] || MONTHS.en)[m - 1]} (${dn})`;
      return `${MONTHS.en[m - 1]} ${d} (${dn})`;
    },
  };
})();

function useI18n() {
  const [, f] = React.useState(0);
  React.useEffect(() => window.i18n.subscribe(() => f(x => x + 1)), []);
  return window.i18n;
}
function L(key, vars) {
  let s = window.i18n.t(key, vars);
  if (typeof window.skinLabel === "function") s = window.skinLabel(s);
  return s;
}

window.useI18n = useI18n;
window.L = L;
