d3ro-voice/apps/web/.next/server/chunks/398.js
yunchan8804 d0c33ca259 feat(V2-3): Web App MVP — Next.js 15 + @d3ro/api-client
packages/api-client (@d3ro/api-client) 신규:
- types.ts: 12개 테이블 Row/Insert/Update 타입 + Database 형식
- client.ts: createD3roSupabaseClient 팩토리 (placeholder fallback)
- auth.ts: signInWithOAuth/signOut/getSession/onAuthStateChange
- meetings.ts: 회의 + 메모 + 문서 + 전사 CRUD
- history.ts: 음성 입력 이력 CRUD
- usage.ts: 일일 쿼터 + 구독 조회
- 루트 barrel은 types만 re-export, 함수는 subpath import 전용

apps/web (@d3ro/web) 신규 — Next.js 15 App Router:
- transpilePackages: @d3ro/core, ui, i18n, api-client
- ThemeProvider (MUI + AppRouterCacheProvider)
- I18nProvider (localStorage 어댑터)
- AuthProvider (Supabase session Context)
- 라우트 9개:
  - / (auth 상태 기반 리다이렉트)
  - /login (Google/GitHub OAuth, 미설정 경고)
  - /auth/callback (code -> session 교환)
  - /dashboard (요약 카드 + 최근 회의)
  - /meetings (카드 그리드 리스트)
  - /meetings/[id] (transcripts/memos/documents)
  - /record (getUserMedia + MediaRecorder + stt-proxy)
- Sidebar, 인증 가드, 9바 웨이브폼, 레벨 미터

packages/ui 확장:
- MetalCard가 BoxProps 상속 (sx/onClick 등 전달)
- theme.ts에 typoSx(key) 헬퍼 추가 (d3roTypo -> MUI sx 변환)
- d3roPalette.tag.blue 추가 (M5 정리 포함)
- DS 컴포넌트 9개에 'use client' directive
- MetalDial 미사용 import 제거

packages/i18n 확장:
- ko.json에 7개 새 키 (nav.meetings/record/logout, login.*)

설계 결정:
- Database 제네릭 현재는 기본 타입 (V2-4에서 supabase gen types로 자동화)
- api-client barrel은 타입만 노출해서 컴파일 전파 차단
- DS 컴포넌트 client 경계 명시
- env 없어도 Next.js 빌드 성공 (placeholder URL/key)

검증:
- web typecheck OK
- desktop typecheck OK (회귀 없음)
- web next build OK (9 라우트 정적/동적 생성)
- desktop build OK (회귀 없음)
2026-04-09 02:52:31 +09:00

1 line
No EOL
205 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

exports.id=398,exports.ids=[398],exports.modules={13353:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>j});var d=c(78157),e=c(31768),f=c(20188),g=c(32890),h=c(56362),i=c(75349);function j({children:a}){let b=(0,e.useMemo)(()=>(0,i.O4)("dark",!0),[]);return(0,d.jsx)(h.A,{options:{key:"d3ro-mui",enableCssLayer:!0},children:(0,d.jsxs)(f.default,{theme:b,children:[(0,d.jsx)(g.Ay,{}),a]})})}},15005:(a,b,c)=>{"use strict";c.d(b,{$:()=>g,c:()=>f});var d=c(24347);let e=null;function f(){if(e)return e;let a=process.env.NEXT_PUBLIC_SUPABASE_URL??"https://placeholder.supabase.co",b=process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY??"placeholder-anon-key";return e=(0,d.createBrowserClient)(a,b)}function g(){return!!(process.env.NEXT_PUBLIC_SUPABASE_URL&&process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY)}},26694:(a,b,c)=>{"use strict";c.d(b,{I18nProvider:()=>g});var d=c(78157),e=c(83380);let f={load:()=>null,save:a=>{}};function g({children:a}){return(0,d.jsx)(e.CY,{storage:f,children:a})}},27647:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\workspace\\voice\\apps\\web\\src\\components\\providers\\theme-provider.tsx","ThemeProvider")},28355:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,58671,23)),Promise.resolve().then(c.t.bind(c,56542,23)),Promise.resolve().then(c.t.bind(c,88248,23)),Promise.resolve().then(c.t.bind(c,49743,23)),Promise.resolve().then(c.t.bind(c,96231,23)),Promise.resolve().then(c.t.bind(c,10959,23)),Promise.resolve().then(c.t.bind(c,72041,23)),Promise.resolve().then(c.t.bind(c,95094,23)),Promise.resolve().then(c.t.bind(c,67487,23))},42065:(a,b,c)=>{Promise.resolve().then(c.bind(c,82244)),Promise.resolve().then(c.bind(c,26694)),Promise.resolve().then(c.bind(c,13353))},42427:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,48365,23)),Promise.resolve().then(c.t.bind(c,64596,23)),Promise.resolve().then(c.t.bind(c,56186,23)),Promise.resolve().then(c.t.bind(c,67805,23)),Promise.resolve().then(c.t.bind(c,27561,23)),Promise.resolve().then(c.t.bind(c,47569,23)),Promise.resolve().then(c.t.bind(c,42747,23)),Promise.resolve().then(c.t.bind(c,56676,23)),Promise.resolve().then(c.bind(c,97225))},47570:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i,metadata:()=>h});var d=c(5939),e=c(27647),f=c(90724),g=c(80478);let h={title:"D3RO Voice",description:"로컬+클라우드 하이브리드 AI 음성 어시스턴트",icons:{icon:"/favicon.ico"}};function i({children:a}){return(0,d.jsx)("html",{lang:"ko",children:(0,d.jsx)("body",{children:(0,d.jsx)(e.ThemeProvider,{children:(0,d.jsx)(f.I18nProvider,{children:(0,d.jsx)(g.AuthProvider,{children:a})})})})})}},51793:(a,b,c)=>{Promise.resolve().then(c.bind(c,80478)),Promise.resolve().then(c.bind(c,90724)),Promise.resolve().then(c.bind(c,27647))},75349:(a,b,c)=>{"use strict";c.d(b,{HG:()=>j,O4:()=>n,fz:()=>k,kR:()=>i,nH:()=>h,nt:()=>g,sM:()=>f});var d=c(94063);let e={dark:{bg:{app:"#19191b",card:"#242427",cardHover:"#2a2a2d",elevated:"#2e2e32",input:"#1e1e21",sidebar:"#1e1f21",inset:"#1b1c1e",chassis:"#242528",crtBezel:"#1a1a1c",crtGlass:"#050605"},text:{primary:"#ffffff",secondary:"#8e8e93",label:"#7c7c82",disabled:"#4a4a4e",engraving:"#1a1a1c",inactive:"#77797c",dimLabel:"#5c2615",muted:"#3a3b3f",hover:"#aaaaaa"},border:{subtle:"rgba(255,255,255,0.04)",default:"rgba(255,255,255,0.08)",strong:"rgba(255,255,255,0.12)"},shadow:{card:"0 8px 30px rgba(0,0,0,0.3)",buttonBase:"0 2px 0 rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.06)",chassis:"0 60px 100px -20px rgba(0,0,0,0.8), 0 12px 0 #111111, 0 13px 4px rgba(0,0,0,0.5), inset 0 1px 1px rgba(255,255,255,0.15), inset 0 -1px 2px rgba(0,0,0,0.4)",inset:"inset 0 2px 6px rgba(0,0,0,0.6), 0 1px 1px rgba(255,255,255,0.05)",insetDeep:"inset 0 4px 12px rgba(0,0,0,0.9), inset 0 0 0 1px #000, 0 1px 1px rgba(255,255,255,0.1)",buttonRaised:"0 3px 6px rgba(0,0,0,0.4), inset 0 1px 1px rgba(255,255,255,0.1), inset 0 -1px 2px rgba(0,0,0,0.2)",buttonPressed:"inset 0 2px 6px rgba(0,0,0,0.8), inset 0 0 0 1px #000",screenGlow:"inset 0 0 20px rgba(0,0,0,0.8)",tooltip:"0 8px 24px rgba(0,0,0,0.4)"},accent:{main:"#f25b29",dim:"rgba(242,91,41,0.15)",glow:"rgba(242,91,41,0.6)",light:"#ff7a4d",dark:"#c44a22",crtPhosphor:"#f25b29",crtPhosphorDim:"#c44a22"}},light:{bg:{app:"#f5f5f7",card:"#ffffff",cardHover:"#f7f7f9",elevated:"#f0f0f2",input:"#ffffff",sidebar:"#eeeef0",inset:"#e8e8ea",chassis:"#e2e2e5",crtBezel:"#d5d5d8",crtGlass:"#f0f0f2"},text:{primary:"#1a1a1c",secondary:"#6e6e73",label:"#8e8e93",disabled:"#c7c7cc",engraving:"#d0d0d3",inactive:"#8e8e93",dimLabel:"#b07040",muted:"#b0b0b4",hover:"#555555"},border:{subtle:"rgba(0,0,0,0.06)",default:"rgba(0,0,0,0.10)",strong:"rgba(0,0,0,0.16)"},shadow:{card:"0 4px 20px rgba(0,0,0,0.06)",buttonBase:"0 2px 0 rgba(0,0,0,0.06), inset 0 1px 0 rgba(255,255,255,0.8)",chassis:"0 40px 80px -20px rgba(0,0,0,0.08), 0 12px 0 #d5d5d8, 0 13px 4px rgba(0,0,0,0.06), inset 0 1px 1px rgba(255,255,255,0.8), inset 0 -1px 2px rgba(0,0,0,0.04)",inset:"inset 0 2px 6px rgba(0,0,0,0.08), 0 1px 1px rgba(255,255,255,0.6)",insetDeep:"inset 0 4px 12px rgba(0,0,0,0.12), inset 0 0 0 1px rgba(0,0,0,0.06), 0 1px 1px rgba(255,255,255,0.8)",buttonRaised:"0 3px 6px rgba(0,0,0,0.08), inset 0 1px 1px rgba(255,255,255,0.8), inset 0 -1px 2px rgba(0,0,0,0.04)",buttonPressed:"inset 0 2px 6px rgba(0,0,0,0.12), inset 0 0 0 1px rgba(0,0,0,0.06)",screenGlow:"inset 0 0 20px rgba(0,0,0,0.06)",tooltip:"0 8px 24px rgba(0,0,0,0.08)"},accent:{main:"#f25b29",dim:"rgba(242,91,41,0.15)",glow:"rgba(242,91,41,0.6)",light:"#ff7a4d",dark:"#c44a22",crtPhosphor:"#f25b29",crtPhosphorDim:"#c44a22"}},nord:{bg:{app:"#2e3440",card:"#3b4252",cardHover:"#434c5e",elevated:"#3b4252",input:"#3b4252",sidebar:"#2e3440",inset:"#2e3440",chassis:"#3b4252",crtBezel:"#2e3440",crtGlass:"#242831"},text:{primary:"#eceff4",secondary:"#d8dee9",label:"#adb5c7",disabled:"#4c566a",engraving:"#2e3440",inactive:"#7b88a1",dimLabel:"#5e81ac",muted:"#434c5e",hover:"#e5e9f0"},border:{subtle:"rgba(216,222,233,0.06)",default:"rgba(216,222,233,0.10)",strong:"rgba(216,222,233,0.16)"},shadow:{card:"0 8px 30px rgba(0,0,0,0.35)",buttonBase:"0 2px 0 rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.06)",chassis:"0 60px 100px -20px rgba(0,0,0,0.8), 0 12px 0 #242831, 0 13px 4px rgba(0,0,0,0.5), inset 0 1px 1px rgba(255,255,255,0.1), inset 0 -1px 2px rgba(0,0,0,0.4)",inset:"inset 0 2px 6px rgba(0,0,0,0.5), 0 1px 1px rgba(255,255,255,0.04)",insetDeep:"inset 0 4px 12px rgba(0,0,0,0.8), inset 0 0 0 1px #242831, 0 1px 1px rgba(255,255,255,0.08)",buttonRaised:"0 3px 6px rgba(0,0,0,0.35), inset 0 1px 1px rgba(255,255,255,0.08), inset 0 -1px 2px rgba(0,0,0,0.2)",buttonPressed:"inset 0 2px 6px rgba(0,0,0,0.7), inset 0 0 0 1px #242831",screenGlow:"inset 0 0 20px rgba(0,0,0,0.6)",tooltip:"0 8px 24px rgba(0,0,0,0.4)"},accent:{main:"#88c0d0",dim:"rgba(136,192,208,0.15)",glow:"rgba(136,192,208,0.6)",light:"#a3d0de",dark:"#6aacbe",crtPhosphor:"#88c0d0",crtPhosphorDim:"#5e9daf"}},solarized:{bg:{app:"#002b36",card:"#073642",cardHover:"#0d4250",elevated:"#073642",input:"#073642",sidebar:"#002b36",inset:"#001f28",chassis:"#073642",crtBezel:"#002b36",crtGlass:"#001f28"},text:{primary:"#eee8d5",secondary:"#93a1a1",label:"#839496",disabled:"#586e75",engraving:"#002b36",inactive:"#657b83",dimLabel:"#7a6c2e",muted:"#073642",hover:"#b2c0bf"},border:{subtle:"rgba(131,148,150,0.08)",default:"rgba(131,148,150,0.13)",strong:"rgba(131,148,150,0.20)"},shadow:{card:"0 8px 30px rgba(0,0,0,0.4)",buttonBase:"0 2px 0 rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.05)",chassis:"0 60px 100px -20px rgba(0,0,0,0.8), 0 12px 0 #001f28, 0 13px 4px rgba(0,0,0,0.5), inset 0 1px 1px rgba(255,255,255,0.08), inset 0 -1px 2px rgba(0,0,0,0.4)",inset:"inset 0 2px 6px rgba(0,0,0,0.6), 0 1px 1px rgba(255,255,255,0.04)",insetDeep:"inset 0 4px 12px rgba(0,0,0,0.9), inset 0 0 0 1px #001f28, 0 1px 1px rgba(255,255,255,0.06)",buttonRaised:"0 3px 6px rgba(0,0,0,0.4), inset 0 1px 1px rgba(255,255,255,0.06), inset 0 -1px 2px rgba(0,0,0,0.2)",buttonPressed:"inset 0 2px 6px rgba(0,0,0,0.8), inset 0 0 0 1px #001f28",screenGlow:"inset 0 0 20px rgba(0,0,0,0.7)",tooltip:"0 8px 24px rgba(0,0,0,0.4)"},accent:{main:"#b58900",dim:"rgba(181,137,0,0.15)",glow:"rgba(181,137,0,0.6)",light:"#d4a017",dark:"#8a6800",crtPhosphor:"#b58900",crtPhosphorDim:"#8a6800"}},catppuccin:{bg:{app:"#1e1e2e",card:"#313244",cardHover:"#3a3a54",elevated:"#313244",input:"#181825",sidebar:"#181825",inset:"#11111b",chassis:"#313244",crtBezel:"#1e1e2e",crtGlass:"#11111b"},text:{primary:"#cdd6f4",secondary:"#bac2de",label:"#a6adc8",disabled:"#585b70",engraving:"#11111b",inactive:"#7f849c",dimLabel:"#585b70",muted:"#313244",hover:"#e6e9f8"},border:{subtle:"rgba(205,214,244,0.04)",default:"rgba(205,214,244,0.08)",strong:"rgba(205,214,244,0.14)"},shadow:{card:"0 8px 30px rgba(0,0,0,0.4)",buttonBase:"0 2px 0 rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.05)",chassis:"0 60px 100px -20px rgba(0,0,0,0.8), 0 12px 0 #11111b, 0 13px 4px rgba(0,0,0,0.5), inset 0 1px 1px rgba(255,255,255,0.08), inset 0 -1px 2px rgba(0,0,0,0.4)",inset:"inset 0 2px 6px rgba(0,0,0,0.6), 0 1px 1px rgba(255,255,255,0.04)",insetDeep:"inset 0 4px 12px rgba(0,0,0,0.9), inset 0 0 0 1px #11111b, 0 1px 1px rgba(255,255,255,0.06)",buttonRaised:"0 3px 6px rgba(0,0,0,0.4), inset 0 1px 1px rgba(255,255,255,0.06), inset 0 -1px 2px rgba(0,0,0,0.2)",buttonPressed:"inset 0 2px 6px rgba(0,0,0,0.8), inset 0 0 0 1px #11111b",screenGlow:"inset 0 0 20px rgba(0,0,0,0.7)",tooltip:"0 8px 24px rgba(0,0,0,0.4)"},accent:{main:"#cba6f7",dim:"rgba(203,166,247,0.15)",glow:"rgba(203,166,247,0.6)",light:"#dfc0ff",dark:"#a67fd4",crtPhosphor:"#cba6f7",crtPhosphorDim:"#a67fd4"}},dracula:{bg:{app:"#282a36",card:"#44475a",cardHover:"#4f5266",elevated:"#383a4a",input:"#383a4a",sidebar:"#21222c",inset:"#21222c",chassis:"#44475a",crtBezel:"#282a36",crtGlass:"#1e2029"},text:{primary:"#f8f8f2",secondary:"#a9b0d0",label:"#8891b5",disabled:"#6272a4",engraving:"#21222c",inactive:"#6272a4",dimLabel:"#6272a4",muted:"#44475a",hover:"#ffffff"},border:{subtle:"rgba(248,248,242,0.04)",default:"rgba(248,248,242,0.08)",strong:"rgba(248,248,242,0.14)"},shadow:{card:"0 8px 30px rgba(0,0,0,0.4)",buttonBase:"0 2px 0 rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.06)",chassis:"0 60px 100px -20px rgba(0,0,0,0.8), 0 12px 0 #1e2029, 0 13px 4px rgba(0,0,0,0.5), inset 0 1px 1px rgba(255,255,255,0.1), inset 0 -1px 2px rgba(0,0,0,0.4)",inset:"inset 0 2px 6px rgba(0,0,0,0.6), 0 1px 1px rgba(255,255,255,0.04)",insetDeep:"inset 0 4px 12px rgba(0,0,0,0.9), inset 0 0 0 1px #1e2029, 0 1px 1px rgba(255,255,255,0.08)",buttonRaised:"0 3px 6px rgba(0,0,0,0.4), inset 0 1px 1px rgba(255,255,255,0.08), inset 0 -1px 2px rgba(0,0,0,0.2)",buttonPressed:"inset 0 2px 6px rgba(0,0,0,0.8), inset 0 0 0 1px #1e2029",screenGlow:"inset 0 0 20px rgba(0,0,0,0.7)",tooltip:"0 8px 24px rgba(0,0,0,0.4)"},accent:{main:"#bd93f9",dim:"rgba(189,147,249,0.15)",glow:"rgba(189,147,249,0.6)",light:"#d4b8ff",dark:"#9a70e0",crtPhosphor:"#bd93f9",crtPhosphorDim:"#9a70e0"}}},f={bg:{app:"var(--d3-bg-app)",card:"var(--d3-bg-card)",cardHover:"var(--d3-bg-cardHover)",elevated:"var(--d3-bg-elevated)",input:"var(--d3-bg-input)",sidebar:"var(--d3-bg-sidebar)",inset:"var(--d3-bg-inset)",chassis:"var(--d3-bg-chassis)",crtBezel:"var(--d3-bg-crtBezel)",crtGlass:"var(--d3-bg-crtGlass)"},accent:{amber:"var(--d3-accent-main)",amberDim:"var(--d3-accent-dim)",amberGlow:"var(--d3-accent-glow)"},tag:{purple:"#b854f5",purpleBg:"rgba(184, 84, 245, 0.12)",orange:"#f59e0b",orangeBg:"rgba(245, 158, 11, 0.12)",red:"#ef4444",redBg:"rgba(239, 68, 68, 0.12)",green:"#22c55e",greenBg:"rgba(34, 197, 94, 0.12)",blue:"#3b82f6",blueBg:"rgba(59, 130, 246, 0.12)",greenGlow:"rgba(34, 197, 94, 0.6)",redGlow:"rgba(239, 68, 68, 0.6)",orangeGlow:"rgba(245, 158, 11, 0.6)"},text:{primary:"var(--d3-text-primary)",secondary:"var(--d3-text-secondary)",label:"var(--d3-text-label)",disabled:"var(--d3-text-disabled)",engraving:"var(--d3-text-engraving)",inactive:"var(--d3-text-inactive)",dimLabel:"var(--d3-text-dimLabel)",muted:"var(--d3-text-muted)",hover:"var(--d3-text-hover)"},border:{subtle:"var(--d3-border-subtle)",default:"var(--d3-border-default)",strong:"var(--d3-border-strong)"},crt:{phosphor:"var(--d3-accent-crtPhosphor)",phosphorDim:"var(--d3-accent-crtPhosphorDim)",scanline:"rgba(0, 0, 0, 0.15)",bg:"var(--d3-bg-chassis)"},led:{off:"#111111"}},g='ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace',h={hero:{size:"42px",weight:300,spacing:"-2px",line:1},title:{size:"28px",weight:300,spacing:"-1px",line:1.2},value:{size:"20px",weight:400,spacing:"0.02em",line:1},heading:{size:"16px",weight:600,spacing:"0.02em",line:1.4},body:{size:"14px",weight:400,spacing:"0.01em",line:1.5},compact:{size:"13px",weight:400,spacing:"0.01em",line:1.5},small:{size:"12px",weight:600,spacing:"0.03em",line:1.4},meta:{size:"11px",weight:600,spacing:"0.05em",line:1.3},label:{size:"10px",weight:700,spacing:"2px",line:1.2},engrave:{size:"9px",weight:700,spacing:"1.5px",line:1},micro:{size:"8px",weight:700,spacing:"1.5px",line:1},nano:{size:"7px",weight:700,spacing:"0.5px",line:1}};function i(a){let b=h[a];return{fontSize:b.size,fontWeight:b.weight,letterSpacing:b.spacing,lineHeight:b.line}}let j={chassis:"var(--d3-shadow-chassis)",card:"var(--d3-shadow-card)",inset:"var(--d3-shadow-inset)",insetDeep:"var(--d3-shadow-insetDeep)",buttonRaised:"var(--d3-shadow-buttonRaised)",buttonPressed:"var(--d3-shadow-buttonPressed)",buttonActive:"var(--d3-shadow-buttonPressed)",dialog:"var(--d3-shadow-card)",tooltip:"var(--d3-shadow-tooltip)",screenGlow:"var(--d3-shadow-screenGlow)"},k={outer:"24px",card:"22px",inner:"12px",button:"8px",small:"6px",xs:"4px",pill:"999px"};function l(a){let b="light"===a?"light":"dark",c=e[a],g=function(a){let b=e[a];return{"--d3-bg-app":b.bg.app,"--d3-bg-card":b.bg.card,"--d3-bg-cardHover":b.bg.cardHover,"--d3-bg-elevated":b.bg.elevated,"--d3-bg-input":b.bg.input,"--d3-bg-sidebar":b.bg.sidebar,"--d3-bg-inset":b.bg.inset,"--d3-bg-chassis":b.bg.chassis,"--d3-bg-crtBezel":b.bg.crtBezel,"--d3-bg-crtGlass":b.bg.crtGlass,"--d3-text-primary":b.text.primary,"--d3-text-secondary":b.text.secondary,"--d3-text-label":b.text.label,"--d3-text-disabled":b.text.disabled,"--d3-text-engraving":b.text.engraving,"--d3-text-inactive":b.text.inactive,"--d3-text-dimLabel":b.text.dimLabel,"--d3-text-muted":b.text.muted,"--d3-text-hover":b.text.hover,"--d3-border-subtle":b.border.subtle,"--d3-border-default":b.border.default,"--d3-border-strong":b.border.strong,"--d3-shadow-card":b.shadow.card,"--d3-shadow-buttonBase":b.shadow.buttonBase,"--d3-shadow-chassis":b.shadow.chassis,"--d3-shadow-inset":b.shadow.inset,"--d3-shadow-insetDeep":b.shadow.insetDeep,"--d3-shadow-buttonRaised":b.shadow.buttonRaised,"--d3-shadow-buttonPressed":b.shadow.buttonPressed,"--d3-shadow-screenGlow":b.shadow.screenGlow,"--d3-shadow-tooltip":b.shadow.tooltip,"--d3-accent-main":b.accent.main,"--d3-accent-dim":b.accent.dim,"--d3-accent-glow":b.accent.glow,"--d3-accent-light":b.accent.light,"--d3-accent-dark":b.accent.dark,"--d3-accent-crtPhosphor":b.accent.crtPhosphor,"--d3-accent-crtPhosphorDim":b.accent.crtPhosphorDim}}(a),h=c.accent.main,i=c.accent.dim,j=c.accent.light,k=c.accent.dark;return(0,d.A)({palette:{mode:b,primary:{main:h,light:j,dark:k,contrastText:"#fff"},secondary:{main:f.tag.purple,light:"#d084ff",dark:"#8a3cc4"},error:{main:f.tag.red},warning:{main:f.tag.orange},success:{main:f.tag.green},background:{default:c.bg.app,paper:c.bg.card},text:{primary:c.text.primary,secondary:c.text.secondary,disabled:c.text.disabled},divider:c.border.default},typography:{fontFamily:'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif',h4:{fontWeight:700,fontSize:"22px",lineHeight:1.3},h5:{fontWeight:700,fontSize:"18px",lineHeight:1.4},h6:{fontWeight:600,fontSize:"14px",lineHeight:1.5},subtitle1:{fontWeight:500,fontSize:"18px",lineHeight:1.4},body1:{fontSize:"14px",lineHeight:1.5},body2:{fontSize:"12px",lineHeight:1.4},button:{textTransform:"none",fontWeight:600,fontSize:"14px"},caption:{fontSize:"11px",fontWeight:600,letterSpacing:"0.1em",textTransform:"uppercase",color:c.text.label},overline:{fontSize:"11px",fontWeight:600,letterSpacing:"0.1em",textTransform:"uppercase",lineHeight:1.2}},shape:{borderRadius:22},components:{MuiCssBaseline:{styleOverrides:{":root":g,body:{backgroundColor:c.bg.app,color:c.text.primary}}},MuiButton:{defaultProps:{disableElevation:!0},styleOverrides:{root:{textTransform:"none",fontWeight:600,borderRadius:10,padding:"10px 20px",transition:"transform 0.05s linear, box-shadow 0.05s linear",boxShadow:c.shadow.buttonBase,"&:active":{transform:"translateY(2px)",boxShadow:"var(--d3-shadow-buttonPressed)"}},containedPrimary:{color:"#fff","&:hover":{backgroundColor:k}},outlined:{borderColor:c.border.strong,color:c.text.primary,"&:hover":{borderColor:h,color:h}},containedSecondary:{backgroundColor:c.bg.elevated,color:c.text.primary,"&:hover":{backgroundColor:"dark"===b?"#353539":"#e5e5e7"}}}},MuiCard:{defaultProps:{elevation:0},styleOverrides:{root:{backgroundColor:c.bg.card,borderRadius:22,borderTop:`1px solid ${c.border.subtle}`,boxShadow:c.shadow.card,transition:"background-color 0.2s ease","&:hover":{backgroundColor:c.bg.cardHover}}}},MuiChip:{styleOverrides:{root:{borderRadius:999,fontWeight:700,fontSize:"11px",letterSpacing:"0.1em",textTransform:"uppercase",height:24},colorPrimary:{backgroundColor:i,color:h},colorSecondary:{backgroundColor:f.tag.purpleBg,color:f.tag.purple},colorSuccess:{backgroundColor:f.tag.greenBg,color:f.tag.green},colorError:{backgroundColor:f.tag.redBg,color:f.tag.red},colorWarning:{backgroundColor:f.tag.orangeBg,color:f.tag.orange}}},MuiDrawer:{styleOverrides:{paper:{width:240,backgroundColor:c.bg.app,borderRight:`1px solid ${c.border.subtle}`}}},MuiListItemButton:{styleOverrides:{root:{borderRadius:10,marginLeft:8,marginRight:8,"&.Mui-selected":{backgroundColor:i,color:h,fontWeight:600,"&:hover":{backgroundColor:i}}}}},MuiDialog:{styleOverrides:{paper:{backgroundColor:c.bg.card,borderRadius:22,border:`1px solid ${c.border.subtle}`,boxShadow:"var(--d3-shadow-card)"}}},MuiTextField:{defaultProps:{size:"small",variant:"outlined"},styleOverrides:{root:{"& .MuiOutlinedInput-root":{backgroundColor:c.bg.input,borderRadius:10,color:c.text.primary,"& fieldset":{borderColor:c.border.default},"&:hover fieldset":{borderColor:c.border.strong},"&.Mui-focused fieldset":{borderColor:h}}}}},MuiSelect:{styleOverrides:{select:{color:c.text.primary},icon:{color:c.text.secondary}}},MuiInputLabel:{styleOverrides:{root:{color:c.text.secondary,"&.Mui-focused":{color:h}}}},MuiFormControlLabel:{styleOverrides:{label:{color:c.text.primary,fontSize:"14px"}}},MuiSwitch:{styleOverrides:{switchBase:{"&.Mui-checked":{color:h},"&.Mui-checked + .MuiSwitch-track":{backgroundColor:h}},track:{backgroundColor:c.text.disabled}}},MuiMenuItem:{styleOverrides:{root:{color:c.text.primary,"&.Mui-selected":{backgroundColor:i}}}},MuiTooltip:{defaultProps:{arrow:!0},styleOverrides:{tooltip:{backgroundColor:c.bg.elevated,color:c.text.primary,fontSize:"12px",borderRadius:8,border:`1px solid ${c.border.subtle}`}}},MuiTabs:{styleOverrides:{indicator:{backgroundColor:h}}},MuiTab:{styleOverrides:{root:{textTransform:"none",fontWeight:500,fontSize:"14px","&.Mui-selected":{color:h,fontWeight:600}}}}}})}let m={dark:l("dark"),light:l("light"),nord:l("nord"),solarized:l("solarized"),catppuccin:l("catppuccin"),dracula:l("dracula")};function n(a,b=!0){return"auto"===a?b?m.dark:m.light:m[a]??m.dark}m.dark,m.light},80478:(a,b,c)=>{"use strict";c.d(b,{AuthProvider:()=>e});var d=c(25459);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call AuthProvider() from the server but AuthProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\workspace\\voice\\apps\\web\\src\\components\\providers\\auth-provider.tsx","AuthProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useAuth() from the server but useAuth is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\workspace\\voice\\apps\\web\\src\\components\\providers\\auth-provider.tsx","useAuth")},82244:(a,b,c)=>{"use strict";c.d(b,{A:()=>h,AuthProvider:()=>g});var d=c(78157),e=c(31768);c(15005);let f=(0,e.createContext)({session:null,user:null,loading:!0});function g({children:a}){let[b,c]=(0,e.useState)(null),[g,h]=(0,e.useState)(!0);return(0,d.jsx)(f.Provider,{value:{session:b,user:b?.user??null,loading:g},children:a})}function h(){return(0,e.useContext)(f)}},83380:(a,b,c)=>{"use strict";c.d(b,{CY:()=>t,s9:()=>u});var d=c(78157),e=c(31768);let f=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"로컬 AI 음성 어시스턴트","nav.dashboard":"대시보드","nav.history":"히스토리","nav.dictionary":"사전","nav.commands":"명령어","nav.settings":"설정","nav.meetings":"회의","nav.record":"녹음","nav.logout":"로그아웃","login.subtitle":"AI 음성 어시스턴트","login.google":"Google로 계속하기","login.github":"GitHub로 계속하기","login.terms":"계속 진행하면 이용약관 및 개인정보 처리방침에 동의합니다.","dashboard.sessionOverview":"세션 개요","dashboard.systemStatus":"시스템 상태","dashboard.sessionsToday":"오늘 세션","dashboard.pressToRecord":"{{key}}를 눌러 녹음 시작","dashboard.hotkeyNotSet":"핫키 미설정","dashboard.words":"단어","dashboard.total":"전체","dashboard.streak":"연속","dashboard.days":"일","dashboard.recording":"녹음","dashboard.sessions":"세션","dashboard.today":"오늘","dashboard.recentTranscriptions":"최근 전사","dashboard.noHistory":"히스토리 없음 — 핫키를 눌러 녹음을 시작하세요","dashboard.copy":"복사","dashboard.entries":"{{count}}건","dashboard.stat":"통계","dashboard.sys":"시스템","history.title":"전사 기록","history.search":"검색...","history.entries":"{{count}}건","history.loading":"로딩...","history.noResults":"검색 결과 없음","history.noHistory":"히스토리 없음 — 녹음을 시작하세요","history.count":"{{count}}건","dictionary.title":"커스텀 사전","dictionary.words":"{{count}}개","dictionary.add":"추가","dictionary.search":"검색...","dictionary.loading":"로딩...","dictionary.noResults":"검색 결과 없음","dictionary.noWords":"단어 없음 — STT 정확도 향상을 위해 커스텀 단어를 추가하세요","dictionary.used":"{{count}}회 사용","dictionary.editTitle":"단어 편집","dictionary.addTitle":"단어 추가","dictionary.word":"단어","dictionary.pronunciation":"발음 (선택)","commands.title":"LLM 명령어","commands.count":"{{count}}개","commands.add":"추가","commands.activeCommand":"활성 명령어","commands.none":"없음","commands.loading":"로딩...","commands.noCommands":"명령어 없음 — 추가를 클릭하여 생성","commands.editTitle":"명령어 편집","commands.addTitle":"명령어 추가","commands.name":"이름","commands.description":"설명","commands.promptTemplate":"프롬프트 템플릿","commands.promptHelp":"{{text}}는 전사된 텍스트로 치환됩니다","commands.defaultPrompt":"{{text}}를 다듬어주세요.","settings.title":"설정","settings.tabs.general":"일반","settings.tabs.audio":"오디오","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"정보","settings.shortcuts":"단축키","settings.dictation":"받아쓰기","settings.dictation.desc":"누른 상태에서 말하기. 키를 놓으면 전사가 시작됩니다.","settings.agent":"Agent 모드","settings.agent.descWithKey":"{{key}}를 두 번 클릭하면 Agent 모드에 진입합니다.","settings.agent.descNoKey":"받아쓰기 핫키를 먼저 설정하세요.","settings.oneTouch":"원터치 모드","settings.oneTouch.desc":"눌러서 시작, 다시 눌러서 중지. 별도 단축키가 필요합니다.","settings.caption":"실시간 자막","settings.caption.desc":"핫키로 자막 모드를 토글합니다. 마이크 입력을 실시간 전사합니다.","settings.captionAudio":"자막 오디오 소스","settings.captionSource":"오디오 소스","settings.captionSource.mic":"마이크만","settings.captionSource.system":"시스템 오디오만 (데스크톱 소리)","settings.captionSource.both":"마이크 + 시스템 오디오","settings.key":"키","settings.notSet":"미설정","settings.enabled":"활성화됨","settings.disabled":"비활성화","settings.interface":"인터페이스","settings.theme":"테마","settings.theme.system":"시스템","settings.theme.light":"라이트","settings.theme.dark":"다크","settings.language":"언어","settings.appBehavior":"앱 동작","settings.closeToTray":"트레이로 최소화","settings.autoLaunch":"시스템 시작 시 자동 실행","settings.autoInsert":"전사 후 자동 텍스트 삽입","settings.soundEffects":"효과음","settings.microphone":"마이크","settings.inputDevice":"입력 장치","settings.deviceDefault":"(기본)","settings.textInsert":"텍스트 삽입","settings.insertMethod":"삽입 방식","settings.insertClipboard":"클립보드 (Ctrl+V)","settings.insertKeyboard":"키보드 타이핑","settings.whisperModel":"Whisper 모델","settings.model.tiny":"tiny (39 MB, 가장 빠름)","settings.model.base":"base (74 MB, 균형)","settings.model.small":"small (244 MB, 양호)","settings.model.medium":"medium (769 MB, 우수)","settings.model.large":"large-v3 (1.5 GB, 최고)","settings.sttLanguage":"인식 언어","settings.sttLang.auto":"자동 감지","settings.ollamaServer":"Ollama 서버","settings.ollamaUrl":"Ollama 서버 URL","settings.ollamaHint":"Ollama가 실행 중이면 자동으로 연결됩니다. 모델은 Ollama에서 직접 pull하세요 (예: ollama pull qwen3:4b).","settings.llmModel":"LLM 모델","settings.postProcess":"음성 후처리","settings.defaultAction":"기본 후처리 명령어","settings.action.none":"없음 (원본 텍스트 그대로)","settings.action.refine":"다듬기 (문법+자연스러움)","settings.action.translate":"번역","settings.action.summarize":"요약","settings.action.grammar":"문법 교정","settings.action.custom":"커스텀 프롬프트","settings.actionHint":"핫키로 녹음 후 전사된 텍스트에 선택한 LLM 후처리가 적용됩니다. Ollama가 연결되어 있을 때만 동작합니다.","settings.about.version":"버전","settings.about.techStack":"기술 스택","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"음성 엔진","settings.about.voiceEngineValue":"STT: faster-whisper (로컬) / LLM: Ollama (로컬)","settings.about.description":"Speakly 리버스엔지니어링 노하우 기반 로컬 AI 음성 어시스턴트. 클라우드 의존성 없이 완전 로컬로 동작합니다.","settings.about.restartOnboarding":"초기 설정 안내 다시 보기","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama가 실행되지 않고 있어요","status.nudge.desc":"LLM 후처리(번역, 요약 등)를 사용하려면 Ollama가 필요합니다.","status.nudge.guide":"설치 안내 보기 →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"타이핑 없이, 음성으로. 로컬 AI 음성 어시스턴트입니다.","onboarding.welcome.start":"시작하기","onboarding.mic.title":"마이크 설정","onboarding.mic.desc":"사용할 마이크를 선택하세요. 나중에 설정에서 변경할 수 있습니다.","onboarding.hotkey.title":"단축키 설정","onboarding.hotkey.desc":"받아쓰기 단축키를 설정하세요. 키를 누르고 있는 동안 녹음됩니다.","onboarding.hotkey.notSet":"단축키가 설정되지 않았습니다","onboarding.hotkey.change":"단축키 변경","onboarding.hotkey.set":"단축키 설정","onboarding.ollama.title":"Ollama 설치 (선택)","onboarding.ollama.desc":"번역, 요약 등 LLM 후처리를 사용하려면 Ollama가 필요합니다. 음성 받아쓰기 자체는 Ollama 없이도 동작합니다.","onboarding.ollama.download":"Ollama 다운로드","onboarding.ollama.modelHint":"설치 후 터미널에서 모델을 다운로드하세요","onboarding.done.title":"설정 완료!","onboarding.done.descWithKey":"{{key}} 키를 누르고 말하면 음성이 텍스트로 변환됩니다.","onboarding.done.descNoKey":"설정에서 단축키를 지정하면 음성 받아쓰기를 시작할 수 있습니다.","onboarding.done.start":"시작하기","onboarding.back":"뒤로","onboarding.next":"다음","hotkey.title":"단축키 설정","hotkey.dictationTitle":"받아쓰기 단축키 설정","hotkey.oneTouchTitle":"원터치 모드 단축키 설정","hotkey.captionTitle":"실시간 자막 단축키 설정","hotkey.prompt":"키 조합을 눌러주세요...","hotkey.ready":"✓ {{keys}} — 저장을 눌러주세요","hotkey.noKey":"키를 입력해주세요","hotkey.reserved":"{{keys}}은 시스템 예약 단축키입니다","hotkey.current":"현재: {{keys}}","hotkey.hint":"조합키(예: Ctrl+Shift+Q) 또는 단일키(예: F5)를 입력하세요","hotkey.reset":"다시 입력","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"STEP 1 — Ollama 설치","ollama.step1.desc":"Ollama는 로컬에서 LLM을 실행하는 무료 도구입니다.","ollama.step2.title":"STEP 2 — 모델 다운로드","ollama.step2.desc":"터미널에서 원하는 모델을 pull하세요. 한국어에 추천:","ollama.step2.alt":"또는 더 큰 모델: ollama pull qwen3:8b (더 정확, 더 느림)","ollama.step3.title":"STEP 3 — 자동 연결","ollama.step3.desc":"Ollama가 실행되면 D3RO-VOICE가 자동으로 감지합니다. 하단 상태 바의 LED가 빨간색에서 초록색으로 바뀌면 준비 완료!","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"취소","common.save":"저장","common.delete":"삭제","common.add":"추가","common.edit":"편집","common.close":"닫기","common.confirm":"확인","common.loading":"로딩...","common.copy":"복사","common.test":"테스트","common.stop":"중지","memo.tags":"태그","memo.addTag":"태그 추가","memo.removeTag":"태그 제거","memo.tagPlaceholder":"태그 입력 후 Enter","memo.noTags":"태그 없음","memo.export":"마크다운 내보내기","memo.exportSuccess":"내보내기 완료","memo.filterByTag":"태그로 필터","memo.allTags":"전체 태그","memo.clearFilter":"필터 해제","voiceCommand.title":"음성 명령어","voiceCommand.enabled":"음성 키워드 인식","voiceCommand.enabledDesc":"전사 시작 시 키워드를 감지하여 명령어를 자동 선택합니다.","voiceCommand.keywords":"키워드","voiceCommand.keywordPlaceholder":"키워드 입력 후 Enter","voiceCommand.noKeywords":"키워드 없음","voiceCommand.matchMode":"매칭 모드","voiceCommand.matchMode.prefix":"앞부분 일치","voiceCommand.matchMode.suffix":"뒷부분 일치","voiceCommand.matchMode.contains":"포함","chain.title":"LLM 체인","chain.count":"{{count}}개","chain.add":"체인 추가","chain.editTitle":"체인 편집","chain.addTitle":"체인 추가","chain.name":"체인 이름","chain.steps":"단계","chain.addStep":"단계 추가","chain.removeStep":"제거","chain.inputSource":"입력 소스","chain.inputSource.original":"원본 텍스트","chain.inputSource.previous":"이전 단계 결과","chain.selectInstruction":"명령어 선택","chain.execute":"실행","chain.executing":"실행 중...","chain.noChains":"체인 없음 — 여러 명령어를 순차 실행하는 파이프라인을 만들어 보세요","chain.step":"{{n}}단계","chain.progress":"{{current}}/{{total}} 단계 처리 중","context.title":"화면 컨텍스트","context.enabled":"스크린 컨텍스트","context.enabledDesc":"녹음 시작 시 활성 앱과 선택된 텍스트를 캡처하여 LLM에 전달합니다.","dashboard.caption":"실시간 자막","dashboard.captionStart":"자막 시작","dashboard.captionStop":"자막 종료","dashboard.captionActive":"자막 활성","settings.voiceCommands":"음성 명령어","settings.voiceCommands.desc":"전사된 텍스트에서 키워드를 감지하여 명령어를 자동 선택합니다.","settings.screenContext":"화면 컨텍스트","settings.screenContext.desc":"녹음 시 활성 앱 정보와 선택된 텍스트를 LLM에 함께 전달합니다.","date.today":"오늘","date.yesterday":"어제","license.title":"라이선스","license.currentTier":"현재 등급","license.free":"FREE","license.pro":"PRO","license.proPlus":"PRO+","license.activate":"라이선스 활성화","license.deactivate":"비활성화","license.keyPlaceholder":"라이선스 키 입력...","license.activating":"활성화 중...","license.activated":"활성화 완료","license.activateError":"활성화 실패: {{message}}","license.deactivated":"비활성화 완료","license.machineId":"기기 ID","license.activatedAt":"활성화 일시","license.manageLicense":"라이선스 관리","license.upgrade":"업그레이드","license.upgradeTitle":"Pro로 업그레이드","license.upgradeDesc":"모든 기능을 잠금 해제하세요","license.quotaUsed":"{{used}}/{{limit}} 사용","license.quotaUnlimited":"무제한","license.tierComparison":"등급 비교","license.dailyUsage":"일일 사용량","license.feature.dictation":"받아쓰기","license.feature.llm_process":"LLM 처리","license.feature.live_caption":"실시간 자막","license.feature.screen_context":"화면 컨텍스트","license.feature.voice_command":"음성 명령어","license.feature.llm_chain":"LLM 체인","license.feature.voice_memo":"음성 메모","license.feature.history_unlimited":"무제한 히스토리","license.feature.history_export":"히스토리 내보내기","license.feature.custom_instruction_create":"커스텀 명령어 생성","license.feature.file_transcription":"파일 전사","license.feature.voice_conversation":"음성 대화","license.feature.dictation_template":"받아쓰기 템플릿","license.feature.meeting_summary":"회의 요약","license.feature.local_rag":"로컬 RAG","license.feature.os_automation":"OS 자동화","license.feature.llmProcess":"LLM 처리","license.feature.liveCaption":"실시간 자막","license.feature.screenContext":"화면 컨텍스트","license.feature.voiceCommand":"음성 명령어","license.feature.llmChain":"LLM 체인","license.feature.voiceMemo":"음성 메모","license.feature.historyUnlimited":"무제한 히스토리","license.feature.historyExport":"히스토리 내보내기","license.feature.customInstruction":"커스텀 명령어 생성","license.feature.fileTranscription":"파일 전사","license.feature.voiceConversation":"음성 대화","license.feature.dictationTemplate":"받아쓰기 템플릿","license.feature.meetingSummary":"회의 요약","license.feature.localRag":"로컬 RAG","license.feature.osAutomation":"OS 자동화","license.pro.required":"PRO 필요","license.proPlus.required":"PRO+ 필요","license.included":"포함","license.notIncluded":"미포함","license.keyLabel":"라이선스 키","license.quotaExceeded.title":"오늘의 {{feature}}을(를) 모두 사용했습니다","license.quotaExceeded.desc":"Pro로 업그레이드하면 무제한으로 사용할 수 있습니다","license.tierRequired.title":"{{feature}}은(는) {{tier}} 기능입니다","license.tierRequired.desc":"{{tier}}로 업그레이드하여 잠금을 해제하세요","license.tryTomorrow":"내일 다시 사용하기","license.learnMore":"알아보기","license.upgradeBenefits":"업그레이드 혜택","license.benefit.unlimitedDictation":"무제한 받아쓰기","license.benefit.unlimitedLLM":"무제한 AI 다듬기","license.benefit.liveCaption":"실시간 자막","license.benefit.unlimitedHistory":"히스토리 무제한 보존","license.usageToday":"오늘 사용량","license.perDay":"회/일","license.unlimited":"무제한","license.locked":"잠금","license.nav":"라이선스","fileTranscription.title":"파일 전사","fileTranscription.dropZone":"오디오/비디오 파일을 여기에 드래그하세요","fileTranscription.dropZoneHint":"MP3, WAV, M4A, MP4, MKV, WEBM 지원","fileTranscription.converting":"변환 중...","fileTranscription.processing":"전사 중...","fileTranscription.progress":"청크 {{current}} / {{total}}","fileTranscription.complete":"전사 완료","fileTranscription.copyAll":"전체 복사","fileTranscription.cancel":"취소","fileTranscription.retry":"다시 시도","fileTranscription.error.invalidFormat":"지원하지 않는 파일 형식입니다","fileTranscription.error.unknown":"알 수 없는 오류","meetingSummary.title":"회의록 요약","meetingSummary.generating":"요약 생성 중...","meetingSummary.summary":"요약","meetingSummary.decisions":"핵심 결정사항","meetingSummary.actionItems":"할 일 목록","meetingSummary.exportMarkdown":"마크다운 내보내기","meetingSummary.noSummary":"요약이 없습니다","meetingSummary.generate":"요약 생성","template.title":"딕테이션 템플릿","template.create":"새 템플릿","template.edit":"템플릿 편집","template.delete":"삭제","template.name":"템플릿 이름","template.description":"설명","template.fields":"필드","template.addField":"필드 추가","template.fieldName":"필드명","template.fieldLabel":"라벨","template.fieldPrompt":"음성 안내","template.outputFormat":"출력 포맷","template.startSession":"시작","template.cancelSession":"세션 취소","template.empty":"템플릿이 없습니다","nav.conversation":"대화","conversation.title":"음성 대화","conversation.idle":"대기","conversation.listening":"듣는 중","conversation.thinking":"생각 중","conversation.speaking":"말하는 중","conversation.empty":"D3RO에게 말을 걸어보세요","conversation.emptyHint":"마이크 버튼을 누르거나 텍스트를 입력하세요","conversation.inputPlaceholder":"메시지 입력...","conversation.end":"종료","conversation.clearHistory":"대화 초기화","nav.knowledge":"지식 베이스","rag.title":"지식 베이스","rag.addDocument":"문서 추가","rag.documents":"문서","rag.noDocuments":"문서가 없습니다","rag.chunks":"청크","rag.indexed":"인덱싱 완료","rag.pending":"대기 중","rag.indexing":"인덱싱 중","rag.reindex":"재인덱싱","rag.askQuestion":"질문하기","rag.queryPlaceholder":"문서에 대해 질문하세요...","rag.searching":"검색 중...","rag.sources":"참조 문서","rag.adding":"추가 중...","rag.parsing":"문서 분석 중...","voiceAction.title":"음성 액션","voiceAction.execute":"실행","voiceAction.presets":"프리셋 명령","voiceAction.history":"실행 이력","voiceAction.noHistory":"실행 이력이 없습니다","voiceAction.blocked":"차단됨 (위험 명령)","voiceAction.executed":"실행됨","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"한국어","settings.sttLang.en":"English","settings.sttLang.ja":"日本語","settings.sttLang.zh":"中文","template.outputHelperText":"{{필드명}} 형식으로 플레이스홀더를 사용하세요","nav.meeting":"회의","meeting.title":"회의 모드","meeting.newMeeting":"새 회의","meeting.startRecording":"녹음 시작","meeting.stopRecording":"녹음 종료","meeting.recording":"녹음 중","meeting.processing":"회의록 생성 중...","meeting.completed":"완료","meeting.error":"오류","meeting.elapsed":"경과 시간","meeting.memoPlaceholder":"메모 입력 (Enter로 추가)","meeting.memoAdded":"메모 추가됨","meeting.noSessions":"회의 녹음이 없습니다","meeting.noSessionsDesc":"새 회의 버튼을 눌러 녹음을 시작하세요","meeting.summary":"요약","meeting.decisions":"결정사항","meeting.actionItems":"할 일","meeting.timeline":"타임라인","meeting.transcript":"원문 전사","meeting.memos":"메모","meeting.exportPdf":"PDF 내보내기","meeting.exportMarkdown":"마크다운 내보내기","meeting.delete":"삭제","meeting.deleteConfirm":"이 회의록을 삭제하시겠습니까?","meeting.backToList":"목록으로","meeting.notificationTitle":"회의록 준비 완료","meeting.notificationBody":"회의록이 생성되었습니다. 클릭하여 확인하세요.","meeting.sessions":"{{count}}건","meeting.duration":"{{minutes}}분","meeting.editTitle":"제목 편집","meeting.untitled":"무제 회의","meeting.processingStep.merging":"전사 텍스트 합산 중...","meeting.processingStep.generating":"LLM 회의록 생성 중...","meeting.processingStep.parsing":"회의록 파싱 중...","meeting.processingStep.saving":"저장 중...","meeting.processingStep.notifying":"완료 알림 중...","meeting.transcriptTab":"전사","meeting.addDocument":"문서 추가","meeting.selectTemplate":"템플릿 선택","meeting.generate":"생성","meeting.generating":"문서 생성 중...","meeting.editMode":"편집","meeting.previewMode":"미리보기","meeting.modified":"수정됨","meeting.originalText":"원본 보기","meeting.editedText":"수정본 보기","meeting.exportDocx":"DOCX 내보내기","meeting.exportTxt":"TXT 내보내기","meeting.exportFormat":"내보내기","meeting.customPrompt":"커스텀 프롬프트","meeting.templateName":"템플릿 이름","meeting.templatePrompt":"AI 프롬프트","meeting.templateSave":"템플릿 저장","meeting.documentDeleted":"문서가 삭제되었습니다","meeting.autoSaved":"자동 저장됨","meeting.minutesTemplate":"회의록","meeting.reportTemplate":"보고서","meeting.ideaNoteTemplate":"아이디어 노트","meeting.customTemplate":"커스텀","meeting.downloadTranscript":"전사 다운로드","meeting.polish":"AI 다듬기","meeting.polishing":"AI가 전사를 다듬는 중...","meeting.polished":"AI 다듬기 완료","meeting.mindmapTemplate":"마인드맵","meeting.chat":"AI 채팅","meeting.chatPlaceholder":"회의 내용에 대해 질문하세요...","meeting.chatSend":"전송","meeting.chatClear":"대화 초기화","meeting.copyToClipboard":"클립보드 복사","meeting.copied":"복사됨","meeting.chatCollapse":"채팅 접기","meeting.chatExpand":"채팅 펼치기","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"AI 다듬기에 실패했습니다","meeting.viewDetailError":"회의 상세 정보를 불러오지 못했습니다","meeting.startRecordingError":"녹음을 시작하지 못했습니다","meeting.diarize":"화자 구분","meeting.diarizing":"화자를 구분하는 중...","meeting.diarizeComplete":"화자 구분 완료","meeting.speaker":"화자","settings.hfToken":"HuggingFace 토큰","settings.hfTokenHint":"화자 구분을 위해 HuggingFace 토큰이 필요합니다","settings.diarization":"화자 구분","settings.diarizationHint":"녹음 종료 후 화자를 자동으로 구분합니다"}'),g=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"Local AI Voice Assistant","nav.dashboard":"Dashboard","nav.history":"History","nav.dictionary":"Dictionary","nav.commands":"Commands","nav.settings":"Settings","dashboard.sessionOverview":"Session Overview","dashboard.systemStatus":"System Status","dashboard.sessionsToday":"Today\'s Sessions","dashboard.pressToRecord":"Press {{key}} to start recording","dashboard.hotkeyNotSet":"Hotkey not set","dashboard.words":"Words","dashboard.total":"Total","dashboard.streak":"Streak","dashboard.days":"days","dashboard.recording":"Recording","dashboard.sessions":"Sessions","dashboard.today":"Today","dashboard.recentTranscriptions":"Recent Transcriptions","dashboard.noHistory":"No history — press your hotkey to start recording","dashboard.copy":"Copy","dashboard.entries":"{{count}} entries","dashboard.stat":"Stats","dashboard.sys":"System","history.title":"Transcription History","history.search":"Search...","history.entries":"{{count}} entries","history.loading":"Loading...","history.noResults":"No results found","history.noHistory":"No history — start recording","history.count":"{{count}} entries","dictionary.title":"Custom Dictionary","dictionary.words":"{{count}} words","dictionary.add":"Add","dictionary.search":"Search...","dictionary.loading":"Loading...","dictionary.noResults":"No results found","dictionary.noWords":"No words — add custom words to improve STT accuracy","dictionary.used":"Used {{count}} times","dictionary.editTitle":"Edit Word","dictionary.addTitle":"Add Word","dictionary.word":"Word","dictionary.pronunciation":"Pronunciation (optional)","commands.title":"LLM Commands","commands.count":"{{count}} commands","commands.add":"Add","commands.activeCommand":"Active Command","commands.none":"None","commands.loading":"Loading...","commands.noCommands":"No commands — click Add to create one","commands.editTitle":"Edit Command","commands.addTitle":"Add Command","commands.name":"Name","commands.description":"Description","commands.promptTemplate":"Prompt Template","commands.promptHelp":"{{text}} will be replaced with the transcribed text","commands.defaultPrompt":"Please refine the following: {{text}}","settings.title":"Settings","settings.tabs.general":"General","settings.tabs.audio":"Audio","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"About","settings.shortcuts":"Shortcuts","settings.dictation":"Dictation","settings.dictation.desc":"Hold to speak. Transcription begins when you release the key.","settings.agent":"Agent Mode","settings.agent.descWithKey":"Double-press {{key}} to enter Agent mode.","settings.agent.descNoKey":"Set a dictation hotkey first.","settings.oneTouch":"One-Touch Mode","settings.oneTouch.desc":"Press to start, press again to stop. Requires a separate shortcut.","settings.caption":"Live Caption","settings.caption.desc":"Toggle live caption mode with hotkey. Transcribes microphone input in real-time.","settings.captionAudio":"Caption Audio Source","settings.captionSource":"Audio Source","settings.captionSource.mic":"Microphone only","settings.captionSource.system":"System audio only (desktop sound)","settings.captionSource.both":"Microphone + System audio","settings.key":"Key","settings.notSet":"Not set","settings.enabled":"Enabled","settings.disabled":"Disabled","settings.interface":"Interface","settings.theme":"Theme","settings.theme.system":"System","settings.theme.light":"Light","settings.theme.dark":"Dark","settings.language":"Language","settings.appBehavior":"App Behavior","settings.closeToTray":"Minimize to tray on close","settings.autoLaunch":"Launch at system startup","settings.autoInsert":"Auto-insert text after transcription","settings.soundEffects":"Sound Effects","settings.microphone":"Microphone","settings.inputDevice":"Input Device","settings.deviceDefault":"(Default)","settings.textInsert":"Text Insertion","settings.insertMethod":"Insert Method","settings.insertClipboard":"Clipboard (Ctrl+V)","settings.insertKeyboard":"Keyboard Typing","settings.whisperModel":"Whisper Model","settings.model.tiny":"tiny (39 MB, fastest)","settings.model.base":"base (74 MB, balanced)","settings.model.small":"small (244 MB, good)","settings.model.medium":"medium (769 MB, great)","settings.model.large":"large-v3 (1.5 GB, best)","settings.sttLanguage":"Recognition Language","settings.sttLang.auto":"Auto-detect","settings.ollamaServer":"Ollama Server","settings.ollamaUrl":"Ollama Server URL","settings.ollamaHint":"Connects automatically when Ollama is running. Pull models directly in Ollama (e.g. ollama pull qwen3:4b).","settings.llmModel":"LLM Model","settings.postProcess":"Voice Post-Processing","settings.defaultAction":"Default Post-Processing Command","settings.action.none":"None (raw transcription)","settings.action.refine":"Refine (grammar + fluency)","settings.action.translate":"Translate","settings.action.summarize":"Summarize","settings.action.grammar":"Grammar Correction","settings.action.custom":"Custom Prompt","settings.actionHint":"The selected LLM post-processing will be applied to your transcription after recording. Only works when Ollama is connected.","settings.about.version":"Version","settings.about.techStack":"Tech Stack","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"Voice Engine","settings.about.voiceEngineValue":"STT: faster-whisper (local) / LLM: Ollama (local)","settings.about.description":"A fully local AI voice assistant built on Speakly reverse-engineering insights. Runs entirely offline with no cloud dependencies.","settings.about.restartOnboarding":"Restart Setup Wizard","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama is not running","status.nudge.desc":"Ollama is required for LLM post-processing (translation, summarization, etc.).","status.nudge.guide":"View setup guide →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"No typing needed — just speak. Your local AI voice assistant.","onboarding.welcome.start":"Get Started","onboarding.mic.title":"Microphone Setup","onboarding.mic.desc":"Choose a microphone to use. You can change this later in Settings.","onboarding.hotkey.title":"Shortcut Setup","onboarding.hotkey.desc":"Set your dictation shortcut. Hold the key while speaking to record.","onboarding.hotkey.notSet":"No shortcut set","onboarding.hotkey.change":"Change Shortcut","onboarding.hotkey.set":"Set Shortcut","onboarding.ollama.title":"Install Ollama (Optional)","onboarding.ollama.desc":"Ollama is required for LLM post-processing like translation and summarization. Voice dictation works without it.","onboarding.ollama.download":"Download Ollama","onboarding.ollama.modelHint":"After installation, download a model from your terminal","onboarding.done.title":"You\'re all set!","onboarding.done.descWithKey":"Hold {{key}} and speak — your voice will be converted to text.","onboarding.done.descNoKey":"Set a shortcut in Settings to start voice dictation.","onboarding.done.start":"Start Using","onboarding.back":"Back","onboarding.next":"Next","hotkey.title":"Set Shortcut","hotkey.dictationTitle":"Set Dictation Shortcut","hotkey.oneTouchTitle":"Set One-Touch Mode Shortcut","hotkey.captionTitle":"Set Live Caption Shortcut","hotkey.prompt":"Press a key combination...","hotkey.ready":"✓ {{keys}} — press Save to confirm","hotkey.noKey":"Please press a key","hotkey.reserved":"{{keys}} is a reserved system shortcut","hotkey.current":"Current: {{keys}}","hotkey.hint":"Enter a combination (e.g. Ctrl+Shift+Q) or a single key (e.g. F5)","hotkey.reset":"Clear","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"STEP 1 — Install Ollama","ollama.step1.desc":"Ollama is a free tool for running LLMs locally.","ollama.step2.title":"STEP 2 — Download a Model","ollama.step2.desc":"Pull a model from your terminal. Recommended:","ollama.step2.alt":"Or a larger model: ollama pull qwen3:8b (more accurate, slower)","ollama.step3.title":"STEP 3 — Auto-Connect","ollama.step3.desc":"Once Ollama is running, D3RO-VOICE will detect it automatically. When the status bar LED turns from red to green, you\'re ready!","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"Cancel","common.save":"Save","common.delete":"Delete","common.add":"Add","common.edit":"Edit","common.close":"Close","common.confirm":"Confirm","common.loading":"Loading...","common.copy":"Copy","common.test":"Test","common.stop":"Stop","memo.tags":"Tags","memo.addTag":"Add Tag","memo.removeTag":"Remove Tag","memo.tagPlaceholder":"Type a tag and press Enter","memo.noTags":"No tags","memo.export":"Export as Markdown","memo.exportSuccess":"Export complete","memo.filterByTag":"Filter by tag","memo.allTags":"All Tags","memo.clearFilter":"Clear filter","voiceCommand.title":"Voice Commands","voiceCommand.enabled":"Voice Keyword Recognition","voiceCommand.enabledDesc":"Detects keywords at the start of transcription to auto-select commands.","voiceCommand.keywords":"Keywords","voiceCommand.keywordPlaceholder":"Type keyword and press Enter","voiceCommand.noKeywords":"No keywords","voiceCommand.matchMode":"Match Mode","voiceCommand.matchMode.prefix":"Starts with","voiceCommand.matchMode.suffix":"Ends with","voiceCommand.matchMode.contains":"Contains","chain.title":"LLM Chains","chain.count":"{{count}} chains","chain.add":"Add Chain","chain.editTitle":"Edit Chain","chain.addTitle":"Add Chain","chain.name":"Chain Name","chain.steps":"Steps","chain.addStep":"Add Step","chain.removeStep":"Remove","chain.inputSource":"Input Source","chain.inputSource.original":"Original Text","chain.inputSource.previous":"Previous Step Result","chain.selectInstruction":"Select Command","chain.execute":"Execute","chain.executing":"Executing...","chain.noChains":"No chains — create a pipeline to run multiple commands in sequence","chain.step":"Step {{n}}","chain.progress":"Processing step {{current}}/{{total}}","context.title":"Screen Context","context.enabled":"Screen Context","context.enabledDesc":"Captures active app and selected text when recording starts, and sends it to the LLM.","dashboard.caption":"Live Caption","dashboard.captionStart":"Start Caption","dashboard.captionStop":"Stop Caption","dashboard.captionActive":"Caption Active","settings.voiceCommands":"Voice Commands","settings.voiceCommands.desc":"Detects keywords in transcription to auto-select commands.","settings.screenContext":"Screen Context","settings.screenContext.desc":"Sends active app info and selected text to the LLM during recording.","date.today":"Today","date.yesterday":"Yesterday","license.title":"License","license.currentTier":"Current Tier","license.free":"FREE","license.pro":"PRO","license.proPlus":"PRO+","license.activate":"Activate License","license.deactivate":"Deactivate","license.keyPlaceholder":"Enter license key...","license.activating":"Activating...","license.activated":"Activated","license.activateError":"Activation failed: {{message}}","license.deactivated":"Deactivated","license.machineId":"Machine ID","license.activatedAt":"Activated At","license.manageLicense":"Manage License","license.upgrade":"Upgrade","license.upgradeTitle":"Upgrade to Pro","license.upgradeDesc":"Unlock all features","license.quotaUsed":"{{used}}/{{limit}} used","license.quotaUnlimited":"Unlimited","license.tierComparison":"Tier Comparison","license.dailyUsage":"Daily Usage","license.feature.dictation":"Dictation","license.feature.llm_process":"LLM Processing","license.feature.live_caption":"Live Caption","license.feature.screen_context":"Screen Context","license.feature.voice_command":"Voice Commands","license.feature.llm_chain":"LLM Chain","license.feature.voice_memo":"Voice Memo","license.feature.history_unlimited":"Unlimited History","license.feature.history_export":"History Export","license.feature.custom_instruction_create":"Custom Instruction","license.feature.file_transcription":"File Transcription","license.feature.voice_conversation":"Voice Conversation","license.feature.dictation_template":"Dictation Template","license.feature.meeting_summary":"Meeting Summary","license.feature.local_rag":"Local RAG","license.feature.os_automation":"OS Automation","license.feature.llmProcess":"LLM Processing","license.feature.liveCaption":"Live Caption","license.feature.screenContext":"Screen Context","license.feature.voiceCommand":"Voice Commands","license.feature.llmChain":"LLM Chain","license.feature.voiceMemo":"Voice Memo","license.feature.historyUnlimited":"Unlimited History","license.feature.historyExport":"History Export","license.feature.customInstruction":"Custom Instruction","license.feature.fileTranscription":"File Transcription","license.feature.voiceConversation":"Voice Conversation","license.feature.dictationTemplate":"Dictation Template","license.feature.meetingSummary":"Meeting Summary","license.feature.localRag":"Local RAG","license.feature.osAutomation":"OS Automation","license.pro.required":"PRO Required","license.proPlus.required":"PRO+ Required","license.included":"Included","license.notIncluded":"Not included","license.keyLabel":"License Key","license.quotaExceeded.title":"You\'ve used all your daily {{feature}}","license.quotaExceeded.desc":"Upgrade to Pro for unlimited usage","license.tierRequired.title":"{{feature}} is a {{tier}} feature","license.tierRequired.desc":"Upgrade to {{tier}} to unlock","license.tryTomorrow":"Try again tomorrow","license.learnMore":"Learn more","license.upgradeBenefits":"Upgrade Benefits","license.benefit.unlimitedDictation":"Unlimited dictation","license.benefit.unlimitedLLM":"Unlimited AI polish","license.benefit.liveCaption":"Live captions","license.benefit.unlimitedHistory":"Unlimited history retention","license.usageToday":"Usage today","license.perDay":"/day","license.unlimited":"Unlimited","license.locked":"Locked","license.nav":"License","fileTranscription.title":"File Transcription","fileTranscription.dropZone":"Drop audio/video file here","fileTranscription.dropZoneHint":"Supports MP3, WAV, M4A, MP4, MKV, WEBM","fileTranscription.converting":"Converting...","fileTranscription.processing":"Transcribing...","fileTranscription.progress":"Chunk {{current}} / {{total}}","fileTranscription.complete":"Transcription complete","fileTranscription.copyAll":"Copy All","fileTranscription.cancel":"Cancel","fileTranscription.retry":"Retry","fileTranscription.error.invalidFormat":"Unsupported file format","fileTranscription.error.unknown":"Unknown error","meetingSummary.title":"Meeting Summary","meetingSummary.generating":"Generating summary...","meetingSummary.summary":"Summary","meetingSummary.decisions":"Key Decisions","meetingSummary.actionItems":"Action Items","meetingSummary.exportMarkdown":"Export as Markdown","meetingSummary.noSummary":"No summary available","meetingSummary.generate":"Generate Summary","template.title":"Dictation Templates","template.create":"New Template","template.edit":"Edit Template","template.delete":"Delete","template.name":"Template Name","template.description":"Description","template.fields":"Fields","template.addField":"Add Field","template.fieldName":"Field Name","template.fieldLabel":"Label","template.fieldPrompt":"Voice Prompt","template.outputFormat":"Output Format","template.startSession":"Start","template.cancelSession":"Cancel Session","template.empty":"No templates","nav.conversation":"Talk","conversation.title":"Voice Conversation","conversation.idle":"Idle","conversation.listening":"Listening","conversation.thinking":"Thinking","conversation.speaking":"Speaking","conversation.empty":"Talk to D3RO","conversation.emptyHint":"Press the mic button or type a message","conversation.inputPlaceholder":"Type a message...","conversation.end":"End","conversation.clearHistory":"Clear history","nav.knowledge":"Knowledge","rag.title":"Knowledge Base","rag.addDocument":"Add Document","rag.documents":"Documents","rag.noDocuments":"No documents","rag.chunks":"chunks","rag.indexed":"Indexed","rag.pending":"Pending","rag.indexing":"Indexing","rag.reindex":"Reindex","rag.askQuestion":"Ask a Question","rag.queryPlaceholder":"Ask about your documents...","rag.searching":"Searching...","rag.sources":"Sources","rag.adding":"Adding...","rag.parsing":"Parsing document...","voiceAction.title":"Voice Actions","voiceAction.execute":"Execute","voiceAction.presets":"Preset Commands","voiceAction.history":"Action History","voiceAction.noHistory":"No action history","voiceAction.blocked":"Blocked (unsafe)","voiceAction.executed":"Executed","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"한국어 (Korean)","settings.sttLang.en":"English","settings.sttLang.ja":"日本語 (Japanese)","settings.sttLang.zh":"中文 (Chinese)","template.outputHelperText":"Use {{fieldName}} for placeholders","nav.meeting":"Meeting","meeting.title":"Meeting Mode","meeting.newMeeting":"New Meeting","meeting.startRecording":"Start Recording","meeting.stopRecording":"Stop Recording","meeting.recording":"Recording","meeting.processing":"Generating minutes...","meeting.completed":"Completed","meeting.error":"Error","meeting.elapsed":"Elapsed","meeting.memoPlaceholder":"Type a memo (Enter to add)","meeting.memoAdded":"Memo added","meeting.noSessions":"No meeting recordings","meeting.noSessionsDesc":"Press New Meeting to start recording","meeting.summary":"Summary","meeting.decisions":"Decisions","meeting.actionItems":"Action Items","meeting.timeline":"Timeline","meeting.transcript":"Raw Transcript","meeting.memos":"Memos","meeting.exportPdf":"Export PDF","meeting.exportMarkdown":"Export Markdown","meeting.delete":"Delete","meeting.deleteConfirm":"Delete this meeting record?","meeting.backToList":"Back to List","meeting.notificationTitle":"Minutes Ready","meeting.notificationBody":"Meeting minutes have been generated.","meeting.sessions":"{{count}} sessions","meeting.duration":"{{minutes}} min","meeting.editTitle":"Edit Title","meeting.untitled":"Untitled Meeting","meeting.processingStep.merging":"Merging transcript...","meeting.processingStep.generating":"Generating minutes with LLM...","meeting.processingStep.parsing":"Parsing minutes...","meeting.processingStep.saving":"Saving...","meeting.processingStep.notifying":"Sending notification...","meeting.transcriptTab":"Transcript","meeting.addDocument":"Add Document","meeting.selectTemplate":"Select Template","meeting.generate":"Generate","meeting.generating":"Generating document...","meeting.editMode":"Edit","meeting.previewMode":"Preview","meeting.modified":"Modified","meeting.originalText":"Original","meeting.editedText":"Edited","meeting.exportDocx":"Export DOCX","meeting.exportTxt":"Export TXT","meeting.exportFormat":"Export","meeting.customPrompt":"Custom Prompt","meeting.templateName":"Template Name","meeting.templatePrompt":"AI Prompt","meeting.templateSave":"Save Template","meeting.documentDeleted":"Document deleted","meeting.autoSaved":"Auto-saved","meeting.minutesTemplate":"Meeting Minutes","meeting.reportTemplate":"Report","meeting.ideaNoteTemplate":"Idea Note","meeting.customTemplate":"Custom","meeting.downloadTranscript":"Download Transcript","meeting.polish":"AI Polish","meeting.polishing":"AI is polishing transcript...","meeting.polished":"AI Polish complete","meeting.mindmapTemplate":"Mind Map","meeting.chat":"AI Chat","meeting.chatPlaceholder":"Ask about the meeting...","meeting.chatSend":"Send","meeting.chatClear":"Clear Chat","meeting.copyToClipboard":"Copy to Clipboard","meeting.copied":"Copied","meeting.chatCollapse":"Collapse Chat","meeting.chatExpand":"Expand Chat","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"AI polishing failed","meeting.viewDetailError":"Failed to load meeting details","meeting.startRecordingError":"Failed to start recording","meeting.diarize":"Diarize","meeting.diarizing":"Identifying speakers...","meeting.diarizeComplete":"Diarization complete","meeting.speaker":"Speaker","settings.hfToken":"HuggingFace Token","settings.hfTokenHint":"A HuggingFace token is required for speaker diarization","settings.diarization":"Speaker Diarization","settings.diarizationHint":"Automatically identify speakers after recording ends"}'),h=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"ローカルAI音声アシスタント","nav.dashboard":"ダッシュボード","nav.history":"履歴","nav.dictionary":"辞書","nav.commands":"コマンド","nav.settings":"設定","dashboard.sessionOverview":"セッション概要","dashboard.systemStatus":"システム状態","dashboard.sessionsToday":"本日のセッション","dashboard.pressToRecord":"{{key}} を押して録音開始","dashboard.hotkeyNotSet":"ホットキー未設定","dashboard.words":"単語","dashboard.total":"合計","dashboard.streak":"連続","dashboard.days":"日","dashboard.recording":"録音","dashboard.sessions":"セッション","dashboard.today":"今日","dashboard.recentTranscriptions":"最近の文字起こし","dashboard.noHistory":"履歴なし — ホットキーを押して録音を開始してください","dashboard.copy":"コピー","dashboard.entries":"{{count}}件","dashboard.stat":"統計","dashboard.sys":"システム","history.title":"文字起こし履歴","history.search":"検索...","history.entries":"{{count}}件","history.loading":"読み込み中...","history.noResults":"検索結果なし","history.noHistory":"履歴なし — 録音を開始してください","history.count":"{{count}}件","dictionary.title":"カスタム辞書","dictionary.words":"{{count}}語","dictionary.add":"追加","dictionary.search":"検索...","dictionary.loading":"読み込み中...","dictionary.noResults":"検索結果なし","dictionary.noWords":"単語なし — STTの精度向上のためカスタム単語を追加してください","dictionary.used":"{{count}}回使用","dictionary.editTitle":"単語を編集","dictionary.addTitle":"単語を追加","dictionary.word":"単語","dictionary.pronunciation":"読み仮名 (任意)","commands.title":"LLMコマンド","commands.count":"{{count}}個","commands.add":"追加","commands.activeCommand":"アクティブコマンド","commands.none":"なし","commands.loading":"読み込み中...","commands.noCommands":"コマンドなし — 追加をクリックして作成","commands.editTitle":"コマンドを編集","commands.addTitle":"コマンドを追加","commands.name":"名前","commands.description":"説明","commands.promptTemplate":"プロンプトテンプレート","commands.promptHelp":"{{text}} は文字起こしされたテキストに置換されます","commands.defaultPrompt":"{{text}} を整えてください。","settings.title":"設定","settings.tabs.general":"一般","settings.tabs.audio":"オーディオ","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"情報","settings.shortcuts":"ショートカット","settings.dictation":"ディクテーション","settings.dictation.desc":"押しながら話します。キーを離すと文字起こしが始まります。","settings.agent":"エージェントモード","settings.agent.descWithKey":"{{key}} を2回クリックするとエージェントモードに入ります。","settings.agent.descNoKey":"先にディクテーションホットキーを設定してください。","settings.oneTouch":"ワンタッチモード","settings.oneTouch.desc":"押して開始、もう一度押して停止。別のショートカットが必要です。","settings.key":"キー","settings.notSet":"未設定","settings.enabled":"有効","settings.disabled":"無効","settings.interface":"インターフェース","settings.theme":"テーマ","settings.theme.system":"システム","settings.theme.light":"ライト","settings.theme.dark":"ダーク","settings.language":"言語","settings.appBehavior":"アプリの動作","settings.closeToTray":"トレイに最小化","settings.autoLaunch":"システム起動時に自動起動","settings.autoInsert":"文字起こし後に自動テキスト挿入","settings.soundEffects":"効果音","settings.microphone":"マイク","settings.inputDevice":"入力デバイス","settings.deviceDefault":"(デフォルト)","settings.textInsert":"テキスト挿入","settings.insertMethod":"挿入方式","settings.insertClipboard":"クリップボード (Ctrl+V)","settings.insertKeyboard":"キーボード入力","settings.whisperModel":"Whisperモデル","settings.model.tiny":"tiny (39 MB, 最速)","settings.model.base":"base (74 MB, バランス)","settings.model.small":"small (244 MB, 良好)","settings.model.medium":"medium (769 MB, 高精度)","settings.model.large":"large-v3 (1.5 GB, 最高)","settings.sttLanguage":"認識言語","settings.sttLang.auto":"自動検出","settings.ollamaServer":"Ollamaサーバー","settings.ollamaUrl":"OllamaサーバーURL","settings.ollamaHint":"Ollamaが起動していれば自動的に接続されます。モデルはOllamaから直接pullしてください例: ollama pull qwen3:4b。","settings.postProcess":"音声後処理","settings.defaultAction":"デフォルト後処理コマンド","settings.action.none":"なし (元のテキストをそのまま)","settings.action.refine":"整形 (文法+自然さ)","settings.action.translate":"翻訳","settings.action.summarize":"要約","settings.action.grammar":"文法修正","settings.action.custom":"カスタムプロンプト","settings.actionHint":"ホットキーで録音後、文字起こしされたテキストに選択したLLM後処理が適用されます。Ollamaが接続されている場合のみ動作します。","settings.about.version":"バージョン","settings.about.techStack":"技術スタック","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"音声エンジン","settings.about.voiceEngineValue":"STT: faster-whisper (ローカル) / LLM: Ollama (ローカル)","settings.about.description":"Speaklyリバースエンジニアリングのウハウをもとに構築したローカルAI音声アシスタント。クラウドに依存せず完全ローカルで動作します。","settings.about.restartOnboarding":"初期設定ガイドをもう一度見る","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollamaが起動していません","status.nudge.desc":"LLM後処理翻訳、要約などを使用するにはOllamaが必要です。","status.nudge.guide":"インストールガイドを見る →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"タイピング不要、音声で。ローカルAI音声アシスタントです。","onboarding.welcome.start":"始める","onboarding.mic.title":"マイク設定","onboarding.mic.desc":"使用するマイクを選択してください。後で設定から変更できます。","onboarding.hotkey.title":"ショートカット設定","onboarding.hotkey.desc":"ディクテーションショートカットを設定してください。キーを押している間、録音されます。","onboarding.hotkey.notSet":"ショートカットが設定されていません","onboarding.hotkey.change":"ショートカットを変更","onboarding.hotkey.set":"ショートカットを設定","onboarding.ollama.title":"Ollamaのインストール (任意)","onboarding.ollama.desc":"翻訳、要約などのLLM後処理を使用するにはOllamaが必要です。音声ディクテーション自体はOllamaなしでも動作します。","onboarding.ollama.download":"Ollamaをダウンロード","onboarding.ollama.modelHint":"インストール後、ターミナルでモデルをダウンロードしてください","onboarding.done.title":"設定完了!","onboarding.done.descWithKey":"{{key}} キーを押しながら話すと、音声がテキストに変換されます。","onboarding.done.descNoKey":"設定でショートカットを指定すると、音声ディクテーションを開始できます。","onboarding.done.start":"始める","onboarding.back":"戻る","onboarding.next":"次へ","hotkey.title":"ショートカット設定","hotkey.dictationTitle":"ディクテーションショートカットの設定","hotkey.oneTouchTitle":"ワンタッチモードショートカットの設定","hotkey.prompt":"キーの組み合わせを押してください...","hotkey.ready":"✓ {{keys}} — 保存を押してください","hotkey.noKey":"キーを入力してください","hotkey.reserved":"{{keys}} はシステム予約のショートカットです","hotkey.current":"現在: {{keys}}","hotkey.hint":"組み合わせキー(例: Ctrl+Shift+Qまたは単一キー例: F5を入力してください","hotkey.reset":"再入力","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"STEP 1 — Ollamaのインストール","ollama.step1.desc":"OllamaはローカルでLLMを実行するための無料ツールです。","ollama.step2.title":"STEP 2 — モデルのダウンロード","ollama.step2.desc":"ターミナルで希望のモデルをpullしてください。日本語におすすめ:","ollama.step2.alt":"または大きいモデル: ollama pull qwen3:8b (より正確、より遅い)","ollama.step3.title":"STEP 3 — 自動接続","ollama.step3.desc":"Ollamaが起動するとD3RO-VOICEが自動的に検出します。下部ステータスバーのLEDが赤から緑に変われば準備完了","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"キャンセル","common.save":"保存","common.delete":"削除","common.add":"追加","common.edit":"編集","common.close":"閉じる","common.confirm":"確認","common.loading":"読み込み中...","common.copy":"コピー","common.test":"テスト","common.stop":"停止","date.today":"今日","date.yesterday":"昨日","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"한국語","settings.sttLang.en":"English","settings.sttLang.ja":"日本語","settings.sttLang.zh":"中文","template.outputHelperText":"{{フィールド名}} でプレースホルダーを使用","nav.meeting":"ミーティング","meeting.title":"ミーティングモード","meeting.newMeeting":"新規ミーティング","meeting.startRecording":"録音開始","meeting.stopRecording":"録音停止","meeting.recording":"録音中","meeting.processing":"議事録を生成中...","meeting.completed":"完了","meeting.error":"エラー","meeting.elapsed":"経過時間","meeting.memoPlaceholder":"メモを入力Enterで追加","meeting.memoAdded":"メモを追加しました","meeting.noSessions":"ミーティングの録音がありません","meeting.noSessionsDesc":"「新規ミーティング」を押して録音を開始してください","meeting.summary":"要約","meeting.decisions":"決定事項","meeting.actionItems":"アクションアイテム","meeting.timeline":"タイムライン","meeting.transcript":"生のトランスクリプト","meeting.memos":"メモ","meeting.exportPdf":"PDFエクスポート","meeting.exportMarkdown":"Markdownエクスポート","meeting.delete":"削除","meeting.deleteConfirm":"このミーティング記録を削除しますか?","meeting.backToList":"一覧に戻る","meeting.notificationTitle":"議事録が完成しました","meeting.notificationBody":"ミーティングの議事録が生成されました。","meeting.sessions":"{{count}} セッション","meeting.duration":"{{minutes}} 分","meeting.editTitle":"タイトルを編集","meeting.untitled":"無題のミーティング","meeting.processingStep.merging":"トランスクリプトをマージ中...","meeting.processingStep.generating":"LLMで議事録を生成中...","meeting.processingStep.parsing":"議事録を解析中...","meeting.processingStep.saving":"保存中...","meeting.processingStep.notifying":"通知を送信中...","meeting.transcriptTab":"文字起こし","meeting.addDocument":"ドキュメント追加","meeting.selectTemplate":"テンプレートを選択","meeting.generate":"生成","meeting.generating":"ドキュメントを生成中...","meeting.editMode":"編集","meeting.previewMode":"プレビュー","meeting.modified":"編集済み","meeting.originalText":"原文","meeting.editedText":"編集版","meeting.exportDocx":"DOCXエクスポート","meeting.exportTxt":"TXTエクスポート","meeting.exportFormat":"エクスポート","meeting.customPrompt":"カスタムプロンプト","meeting.templateName":"テンプレート名","meeting.templatePrompt":"AIプロンプト","meeting.templateSave":"テンプレートを保存","meeting.documentDeleted":"ドキュメントが削除されました","meeting.autoSaved":"自動保存済み","meeting.minutesTemplate":"議事録","meeting.reportTemplate":"レポート","meeting.ideaNoteTemplate":"アイデアノート","meeting.customTemplate":"カスタム","meeting.downloadTranscript":"文字起こしをダウンロード","meeting.polish":"AI で整える","meeting.polishing":"AI が文字起こしを整えています...","meeting.polished":"AI 整形完了","meeting.mindmapTemplate":"マインドマップ","meeting.chat":"AI チャット","meeting.chatPlaceholder":"会議について質問してください...","meeting.chatSend":"送信","meeting.chatClear":"チャットをクリア","meeting.copyToClipboard":"クリップボードにコピー","meeting.copied":"コピーしました","meeting.chatCollapse":"チャットを折り畳む","meeting.chatExpand":"チャットを展開","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"AI磨き上げに失敗しました","meeting.viewDetailError":"会議の詳細を読み込めませんでした","meeting.startRecordingError":"録音を開始できませんでした","meeting.diarize":"話者分離","meeting.diarizing":"話者を識別中...","meeting.diarizeComplete":"話者分離完了","meeting.speaker":"話者","settings.hfToken":"HuggingFaceトークン","settings.hfTokenHint":"話者分離にはHuggingFaceトークンが必要です","settings.diarization":"話者分離","settings.diarizationHint":"録音終了後に自動的に話者を識別します"}'),i=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"本地AI语音助手","nav.dashboard":"仪表板","nav.history":"历史记录","nav.dictionary":"词典","nav.commands":"命令","nav.settings":"设置","dashboard.sessionOverview":"会话概览","dashboard.systemStatus":"系统状态","dashboard.sessionsToday":"今日会话","dashboard.pressToRecord":"按下 {{key}} 开始录音","dashboard.hotkeyNotSet":"未设置热键","dashboard.words":"词数","dashboard.total":"总计","dashboard.streak":"连续","dashboard.days":"天","dashboard.recording":"录音","dashboard.sessions":"会话","dashboard.today":"今天","dashboard.recentTranscriptions":"最近转录","dashboard.noHistory":"暂无历史记录 — 按下热键开始录音","dashboard.copy":"复制","dashboard.entries":"{{count}}条","dashboard.stat":"统计","dashboard.sys":"系统","history.title":"转录历史","history.search":"搜索...","history.entries":"{{count}}条","history.loading":"加载中...","history.noResults":"无搜索结果","history.noHistory":"暂无历史记录 — 请开始录音","history.count":"{{count}}条","dictionary.title":"自定义词典","dictionary.words":"{{count}}个词","dictionary.add":"添加","dictionary.search":"搜索...","dictionary.loading":"加载中...","dictionary.noResults":"无搜索结果","dictionary.noWords":"暂无词条 — 添加自定义词汇以提高STT识别精度","dictionary.used":"已使用{{count}}次","dictionary.editTitle":"编辑词条","dictionary.addTitle":"添加词条","dictionary.word":"词汇","dictionary.pronunciation":"发音(可选)","commands.title":"LLM命令","commands.count":"{{count}}个","commands.add":"添加","commands.activeCommand":"当前命令","commands.none":"无","commands.loading":"加载中...","commands.noCommands":"暂无命令 — 点击添加以创建","commands.editTitle":"编辑命令","commands.addTitle":"添加命令","commands.name":"名称","commands.description":"描述","commands.promptTemplate":"提示词模板","commands.promptHelp":"{{text}} 将被替换为转录的文本","commands.defaultPrompt":"请润色以下内容:{{text}}","settings.title":"设置","settings.tabs.general":"通用","settings.tabs.audio":"音频","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"关于","settings.shortcuts":"快捷键","settings.dictation":"听写","settings.dictation.desc":"按住键开始说话,松开键后开始转录。","settings.agent":"Agent模式","settings.agent.descWithKey":"双击 {{key}} 进入Agent模式。","settings.agent.descNoKey":"请先设置听写热键。","settings.oneTouch":"一触即发模式","settings.oneTouch.desc":"按下开始,再次按下停止。需要单独的快捷键。","settings.key":"键","settings.notSet":"未设置","settings.enabled":"已启用","settings.disabled":"已禁用","settings.interface":"界面","settings.theme":"主题","settings.theme.system":"跟随系统","settings.theme.light":"浅色","settings.theme.dark":"深色","settings.language":"语言","settings.appBehavior":"应用行为","settings.closeToTray":"最小化到托盘","settings.autoLaunch":"开机自动启动","settings.autoInsert":"转录后自动插入文本","settings.soundEffects":"音效","settings.microphone":"麦克风","settings.inputDevice":"输入设备","settings.deviceDefault":"(默认)","settings.textInsert":"文本插入","settings.insertMethod":"插入方式","settings.insertClipboard":"剪贴板Ctrl+V","settings.insertKeyboard":"键盘输入","settings.whisperModel":"Whisper模型","settings.model.tiny":"tiny39 MB最快","settings.model.base":"base74 MB均衡","settings.model.small":"small244 MB良好","settings.model.medium":"medium769 MB优秀","settings.model.large":"large-v31.5 GB最佳","settings.sttLanguage":"识别语言","settings.sttLang.auto":"自动检测","settings.ollamaServer":"Ollama服务器","settings.ollamaUrl":"Ollama服务器URL","settings.ollamaHint":"Ollama运行时将自动连接。请直接在Ollama中pull模型例如ollama pull qwen3:4b。","settings.postProcess":"语音后处理","settings.defaultAction":"默认后处理命令","settings.action.none":"无(保留原始文本)","settings.action.refine":"润色(语法+自然度)","settings.action.translate":"翻译","settings.action.summarize":"摘要","settings.action.grammar":"语法校正","settings.action.custom":"自定义提示词","settings.actionHint":"通过热键录音后所选LLM后处理将应用于转录文本。仅在Ollama连接时有效。","settings.about.version":"版本","settings.about.techStack":"技术栈","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"语音引擎","settings.about.voiceEngineValue":"STT: faster-whisper本地/ LLM: Ollama本地","settings.about.description":"基于Speakly逆向工程经验构建的本地AI语音助手无需依赖云端完全在本地运行。","settings.about.restartOnboarding":"重新查看初始设置引导","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama未运行","status.nudge.desc":"使用LLM后处理翻译、摘要等需要Ollama。","status.nudge.guide":"查看安装指南 →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"无需打字用声音操作。本地AI语音助手。","onboarding.welcome.start":"开始","onboarding.mic.title":"麦克风设置","onboarding.mic.desc":"选择要使用的麦克风,之后可在设置中更改。","onboarding.hotkey.title":"快捷键设置","onboarding.hotkey.desc":"设置听写快捷键,按住该键时进行录音。","onboarding.hotkey.notSet":"尚未设置快捷键","onboarding.hotkey.change":"更改快捷键","onboarding.hotkey.set":"设置快捷键","onboarding.ollama.title":"安装Ollama可选","onboarding.ollama.desc":"使用翻译、摘要等LLM后处理功能需要Ollama。语音听写本身无需Ollama即可使用。","onboarding.ollama.download":"下载Ollama","onboarding.ollama.modelHint":"安装后在终端中下载模型","onboarding.done.title":"设置完成!","onboarding.done.descWithKey":"按住 {{key}} 键说话,语音即可转换为文本。","onboarding.done.descNoKey":"在设置中指定快捷键后即可开始语音听写。","onboarding.done.start":"开始","onboarding.back":"返回","onboarding.next":"下一步","hotkey.title":"快捷键设置","hotkey.dictationTitle":"设置听写快捷键","hotkey.oneTouchTitle":"设置一触即发模式快捷键","hotkey.prompt":"请按下按键组合...","hotkey.ready":"✓ {{keys}} — 请点击保存","hotkey.noKey":"请输入按键","hotkey.reserved":"{{keys}} 是系统保留快捷键","hotkey.current":"当前: {{keys}}","hotkey.hint":"请输入组合键例如Ctrl+Shift+Q或单个键例如F5","hotkey.reset":"重新输入","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"STEP 1 — 安装Ollama","ollama.step1.desc":"Ollama是一款在本地运行LLM的免费工具。","ollama.step2.title":"STEP 2 — 下载模型","ollama.step2.desc":"在终端中pull所需模型。推荐中文模型","ollama.step2.alt":"或更大的模型ollama pull qwen3:8b更精准更慢","ollama.step3.title":"STEP 3 — 自动连接","ollama.step3.desc":"Ollama启动后D3RO-VOICE将自动检测。底部状态栏的LED从红色变为绿色即表示准备就绪","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"取消","common.save":"保存","common.delete":"删除","common.add":"添加","common.edit":"编辑","common.close":"关闭","common.confirm":"确认","common.loading":"加载中...","common.copy":"复制","common.test":"测试","common.stop":"停止","date.today":"今天","date.yesterday":"昨天","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"韩语","settings.sttLang.en":"English","settings.sttLang.ja":"日语","settings.sttLang.zh":"中文","template.outputHelperText":"使用 {{字段名}} 作为占位符","nav.meeting":"会议","meeting.title":"会议模式","meeting.newMeeting":"新建会议","meeting.startRecording":"开始录音","meeting.stopRecording":"停止录音","meeting.recording":"录音中","meeting.processing":"正在生成会议纪要...","meeting.completed":"已完成","meeting.error":"错误","meeting.elapsed":"已用时","meeting.memoPlaceholder":"输入备忘Enter 添加)","meeting.memoAdded":"备忘已添加","meeting.noSessions":"暂无会议录音","meeting.noSessionsDesc":"点击「新建会议」开始录音","meeting.summary":"摘要","meeting.decisions":"决议","meeting.actionItems":"待办事项","meeting.timeline":"时间轴","meeting.transcript":"原始转录","meeting.memos":"备忘","meeting.exportPdf":"导出 PDF","meeting.exportMarkdown":"导出 Markdown","meeting.delete":"删除","meeting.deleteConfirm":"删除此会议记录?","meeting.backToList":"返回列表","meeting.notificationTitle":"会议纪要已就绪","meeting.notificationBody":"会议纪要已生成。","meeting.sessions":"{{count}} 场会议","meeting.duration":"{{minutes}} 分钟","meeting.editTitle":"编辑标题","meeting.untitled":"无标题会议","meeting.processingStep.merging":"正在合并转录...","meeting.processingStep.generating":"正在用 LLM 生成会议纪要...","meeting.processingStep.parsing":"正在解析会议纪要...","meeting.processingStep.saving":"正在保存...","meeting.processingStep.notifying":"正在发送通知...","meeting.transcriptTab":"转录","meeting.addDocument":"添加文档","meeting.selectTemplate":"选择模板","meeting.generate":"生成","meeting.generating":"正在生成文档...","meeting.editMode":"编辑","meeting.previewMode":"预览","meeting.modified":"已修改","meeting.originalText":"原文","meeting.editedText":"编辑版","meeting.exportDocx":"导出 DOCX","meeting.exportTxt":"导出 TXT","meeting.exportFormat":"导出","meeting.customPrompt":"自定义提示","meeting.templateName":"模板名称","meeting.templatePrompt":"AI 提示","meeting.templateSave":"保存模板","meeting.documentDeleted":"文档已删除","meeting.autoSaved":"已自动保存","meeting.minutesTemplate":"会议记录","meeting.reportTemplate":"报告","meeting.ideaNoteTemplate":"创意笔记","meeting.customTemplate":"自定义","meeting.downloadTranscript":"下载转录","meeting.polish":"AI 润色","meeting.polishing":"AI 正在润色转录...","meeting.polished":"AI 润色完成","meeting.mindmapTemplate":"思维导图","meeting.chat":"AI 聊天","meeting.chatPlaceholder":"询问关于会议的内容...","meeting.chatSend":"发送","meeting.chatClear":"清空聊天","meeting.copyToClipboard":"复制到剪贴板","meeting.copied":"已复制","meeting.chatCollapse":"收起聊天","meeting.chatExpand":"展开聊天","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"AI润色失败","meeting.viewDetailError":"无法加载会议详情","meeting.startRecordingError":"无法开始录音","meeting.diarize":"说话人分离","meeting.diarizing":"正在识别说话人...","meeting.diarizeComplete":"说话人分离完成","meeting.speaker":"说话人","settings.hfToken":"HuggingFace令牌","settings.hfTokenHint":"说话人分离需要HuggingFace令牌","settings.diarization":"说话人分离","settings.diarizationHint":"录音结束后自动识别说话人"}'),j=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"本地AI語音助手","nav.dashboard":"儀表板","nav.history":"歷史記錄","nav.dictionary":"辭典","nav.commands":"指令","nav.settings":"設定","dashboard.sessionOverview":"工作階段總覽","dashboard.systemStatus":"系統狀態","dashboard.sessionsToday":"今日工作階段","dashboard.pressToRecord":"按下 {{key}} 開始錄音","dashboard.hotkeyNotSet":"尚未設定熱鍵","dashboard.words":"字數","dashboard.total":"總計","dashboard.streak":"連續","dashboard.days":"天","dashboard.recording":"錄音","dashboard.sessions":"工作階段","dashboard.today":"今天","dashboard.recentTranscriptions":"最近轉錄","dashboard.noHistory":"尚無歷史記錄 — 按下熱鍵開始錄音","dashboard.copy":"複製","dashboard.entries":"{{count}}筆","dashboard.stat":"統計","dashboard.sys":"系統","history.title":"轉錄歷史","history.search":"搜尋...","history.entries":"{{count}}筆","history.loading":"載入中...","history.noResults":"無搜尋結果","history.noHistory":"尚無歷史記錄 — 請開始錄音","history.count":"{{count}}筆","dictionary.title":"自訂辭典","dictionary.words":"{{count}}個詞","dictionary.add":"新增","dictionary.search":"搜尋...","dictionary.loading":"載入中...","dictionary.noResults":"無搜尋結果","dictionary.noWords":"尚無詞條 — 新增自訂詞彙以提高STT識別精度","dictionary.used":"已使用{{count}}次","dictionary.editTitle":"編輯詞條","dictionary.addTitle":"新增詞條","dictionary.word":"詞彙","dictionary.pronunciation":"發音(選填)","commands.title":"LLM指令","commands.count":"{{count}}個","commands.add":"新增","commands.activeCommand":"目前指令","commands.none":"無","commands.loading":"載入中...","commands.noCommands":"尚無指令 — 點擊新增以建立","commands.editTitle":"編輯指令","commands.addTitle":"新增指令","commands.name":"名稱","commands.description":"說明","commands.promptTemplate":"提示詞範本","commands.promptHelp":"{{text}} 將被替換為轉錄的文字","commands.defaultPrompt":"請潤飾以下內容:{{text}}","settings.title":"設定","settings.tabs.general":"一般","settings.tabs.audio":"音訊","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"關於","settings.shortcuts":"快速鍵","settings.dictation":"聽寫","settings.dictation.desc":"按住鍵開始說話,放開鍵後開始轉錄。","settings.agent":"Agent模式","settings.agent.descWithKey":"連按兩下 {{key}} 進入Agent模式。","settings.agent.descNoKey":"請先設定聽寫熱鍵。","settings.oneTouch":"一鍵模式","settings.oneTouch.desc":"按下開始,再次按下停止。需要獨立的快速鍵。","settings.key":"按鍵","settings.notSet":"未設定","settings.enabled":"已啟用","settings.disabled":"已停用","settings.interface":"介面","settings.theme":"主題","settings.theme.system":"跟隨系統","settings.theme.light":"淺色","settings.theme.dark":"深色","settings.language":"語言","settings.appBehavior":"應用程式行為","settings.closeToTray":"最小化至系統匣","settings.autoLaunch":"開機時自動啟動","settings.autoInsert":"轉錄後自動插入文字","settings.soundEffects":"音效","settings.microphone":"麥克風","settings.inputDevice":"輸入裝置","settings.deviceDefault":"(預設)","settings.textInsert":"文字插入","settings.insertMethod":"插入方式","settings.insertClipboard":"剪貼簿Ctrl+V","settings.insertKeyboard":"鍵盤輸入","settings.whisperModel":"Whisper模型","settings.model.tiny":"tiny39 MB最快","settings.model.base":"base74 MB均衡","settings.model.small":"small244 MB良好","settings.model.medium":"medium769 MB優秀","settings.model.large":"large-v31.5 GB最佳","settings.sttLanguage":"識別語言","settings.sttLang.auto":"自動偵測","settings.ollamaServer":"Ollama伺服器","settings.ollamaUrl":"Ollama伺服器URL","settings.ollamaHint":"Ollama執行時將自動連線。請直接在Ollama中pull模型例如ollama pull qwen3:4b。","settings.postProcess":"語音後處理","settings.defaultAction":"預設後處理指令","settings.action.none":"無(保留原始文字)","settings.action.refine":"潤飾(語法+流暢度)","settings.action.translate":"翻譯","settings.action.summarize":"摘要","settings.action.grammar":"語法校正","settings.action.custom":"自訂提示詞","settings.actionHint":"透過熱鍵錄音後所選LLM後處理將套用至轉錄文字。僅在Ollama連線時有效。","settings.about.version":"版本","settings.about.techStack":"技術堆疊","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"語音引擎","settings.about.voiceEngineValue":"STT: faster-whisper本地/ LLM: Ollama本地","settings.about.description":"基於Speakly逆向工程經驗打造的本地AI語音助手無需依賴雲端完全在本地端執行。","settings.about.restartOnboarding":"重新檢視初始設定引導","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama尚未執行","status.nudge.desc":"使用LLM後處理翻譯、摘要等需要Ollama。","status.nudge.guide":"查看安裝指南 →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"無需打字用聲音操作。本地AI語音助手。","onboarding.welcome.start":"開始","onboarding.mic.title":"麥克風設定","onboarding.mic.desc":"選擇要使用的麥克風,之後可在設定中更改。","onboarding.hotkey.title":"快速鍵設定","onboarding.hotkey.desc":"設定聽寫快速鍵,按住該鍵時進行錄音。","onboarding.hotkey.notSet":"尚未設定快速鍵","onboarding.hotkey.change":"變更快速鍵","onboarding.hotkey.set":"設定快速鍵","onboarding.ollama.title":"安裝Ollama選填","onboarding.ollama.desc":"使用翻譯、摘要等LLM後處理功能需要Ollama。語音聽寫本身無需Ollama即可使用。","onboarding.ollama.download":"下載Ollama","onboarding.ollama.modelHint":"安裝後在終端機中下載模型","onboarding.done.title":"設定完成!","onboarding.done.descWithKey":"按住 {{key}} 鍵說話,語音即可轉換為文字。","onboarding.done.descNoKey":"在設定中指定快速鍵後即可開始語音聽寫。","onboarding.done.start":"開始","onboarding.back":"返回","onboarding.next":"下一步","hotkey.title":"快速鍵設定","hotkey.dictationTitle":"設定聽寫快速鍵","hotkey.oneTouchTitle":"設定一鍵模式快速鍵","hotkey.prompt":"請按下按鍵組合...","hotkey.ready":"✓ {{keys}} — 請點擊儲存","hotkey.noKey":"請輸入按鍵","hotkey.reserved":"{{keys}} 是系統保留快速鍵","hotkey.current":"目前: {{keys}}","hotkey.hint":"請輸入組合鍵例如Ctrl+Shift+Q或單一鍵例如F5","hotkey.reset":"重新輸入","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"STEP 1 — 安裝Ollama","ollama.step1.desc":"Ollama是一款在本地端執行LLM的免費工具。","ollama.step2.title":"STEP 2 — 下載模型","ollama.step2.desc":"在終端機中pull所需模型。推薦繁體中文模型","ollama.step2.alt":"或更大的模型ollama pull qwen3:8b更精準速度較慢","ollama.step3.title":"STEP 3 — 自動連線","ollama.step3.desc":"Ollama啟動後D3RO-VOICE將自動偵測。底部狀態列的LED從紅色變為綠色即表示準備就緒","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"取消","common.save":"儲存","common.delete":"刪除","common.add":"新增","common.edit":"編輯","common.close":"關閉","common.confirm":"確認","common.loading":"載入中...","common.copy":"複製","common.test":"測試","common.stop":"停止","date.today":"今天","date.yesterday":"昨天","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"韓語","settings.sttLang.en":"English","settings.sttLang.ja":"日語","settings.sttLang.zh":"中文","template.outputHelperText":"使用 {{欄位名稱}} 作為佔位符","nav.meeting":"會議","meeting.title":"會議模式","meeting.newMeeting":"新增會議","meeting.startRecording":"開始錄音","meeting.stopRecording":"停止錄音","meeting.recording":"錄音中","meeting.processing":"正在產生會議記錄...","meeting.completed":"已完成","meeting.error":"錯誤","meeting.elapsed":"已用時","meeting.memoPlaceholder":"輸入備忘Enter 新增)","meeting.memoAdded":"備忘已新增","meeting.noSessions":"暫無會議錄音","meeting.noSessionsDesc":"點擊「新增會議」開始錄音","meeting.summary":"摘要","meeting.decisions":"決議","meeting.actionItems":"待辦事項","meeting.timeline":"時間軸","meeting.transcript":"原始逐字稿","meeting.memos":"備忘","meeting.exportPdf":"匯出 PDF","meeting.exportMarkdown":"匯出 Markdown","meeting.delete":"刪除","meeting.deleteConfirm":"刪除此會議記錄?","meeting.backToList":"返回列表","meeting.notificationTitle":"會議記錄已就緒","meeting.notificationBody":"會議記錄已產生。","meeting.sessions":"{{count}} 場會議","meeting.duration":"{{minutes}} 分鐘","meeting.editTitle":"編輯標題","meeting.untitled":"無標題會議","meeting.processingStep.merging":"正在合併逐字稿...","meeting.processingStep.generating":"正在以 LLM 產生會議記錄...","meeting.processingStep.parsing":"正在解析會議記錄...","meeting.processingStep.saving":"正在儲存...","meeting.processingStep.notifying":"正在發送通知...","meeting.transcriptTab":"轉錄","meeting.addDocument":"新增文件","meeting.selectTemplate":"選擇範本","meeting.generate":"生成","meeting.generating":"正在生成文件...","meeting.editMode":"編輯","meeting.previewMode":"預覽","meeting.modified":"已修改","meeting.originalText":"原文","meeting.editedText":"編輯版","meeting.exportDocx":"匯出 DOCX","meeting.exportTxt":"匯出 TXT","meeting.exportFormat":"匯出","meeting.customPrompt":"自訂提示","meeting.templateName":"範本名稱","meeting.templatePrompt":"AI 提示","meeting.templateSave":"儲存範本","meeting.documentDeleted":"文件已刪除","meeting.autoSaved":"已自動儲存","meeting.minutesTemplate":"會議記錄","meeting.reportTemplate":"報告","meeting.ideaNoteTemplate":"創意筆記","meeting.customTemplate":"自訂","meeting.downloadTranscript":"下載轉錄","meeting.polish":"AI 潤飾","meeting.polishing":"AI 正在潤飾轉錄...","meeting.polished":"AI 潤飾完成","meeting.mindmapTemplate":"心智圖","meeting.chat":"AI 聊天","meeting.chatPlaceholder":"詢問有關會議的內容...","meeting.chatSend":"傳送","meeting.chatClear":"清空聊天","meeting.copyToClipboard":"複製到剪貼簿","meeting.copied":"已複製","meeting.chatCollapse":"收起聊天","meeting.chatExpand":"展開聊天","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"AI潤色失敗","meeting.viewDetailError":"無法載入會議詳情","meeting.startRecordingError":"無法開始錄音","meeting.diarize":"說話人分離","meeting.diarizing":"正在識別說話人...","meeting.diarizeComplete":"說話人分離完成","meeting.speaker":"說話人","settings.hfToken":"HuggingFace 令牌","settings.hfTokenHint":"說話人分離需要HuggingFace令牌","settings.diarization":"說話人分離","settings.diarizationHint":"錄音結束後自動識別說話人"}'),k=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"Asistente de voz con IA local","nav.dashboard":"Panel","nav.history":"Historial","nav.dictionary":"Diccionario","nav.commands":"Comandos","nav.settings":"Ajustes","dashboard.sessionOverview":"Resumen de sesi\xf3n","dashboard.systemStatus":"Estado del sistema","dashboard.sessionsToday":"Sesiones hoy","dashboard.pressToRecord":"Pulsa {{key}} para empezar a grabar","dashboard.hotkeyNotSet":"Atajo no configurado","dashboard.words":"palabras","dashboard.total":"total","dashboard.streak":"racha","dashboard.days":"d\xedas","dashboard.recording":"grabando","dashboard.sessions":"sesiones","dashboard.today":"hoy","dashboard.recentTranscriptions":"Transcripciones recientes","dashboard.noHistory":"Sin historial — pulsa el atajo para empezar a grabar","dashboard.copy":"Copiar","dashboard.entries":"{{count}} entradas","dashboard.stat":"estad\xedsticas","dashboard.sys":"sistema","history.title":"Historial de transcripciones","history.search":"Buscar...","history.entries":"{{count}} entradas","history.loading":"Cargando...","history.noResults":"Sin resultados","history.noHistory":"Sin historial — empieza a grabar","history.count":"{{count}} entradas","dictionary.title":"Diccionario personalizado","dictionary.words":"{{count}} palabras","dictionary.add":"A\xf1adir","dictionary.search":"Buscar...","dictionary.loading":"Cargando...","dictionary.noResults":"Sin resultados","dictionary.noWords":"Sin palabras — a\xf1ade palabras personalizadas para mejorar la precisi\xf3n del STT","dictionary.used":"usado {{count}} veces","dictionary.editTitle":"Editar palabra","dictionary.addTitle":"A\xf1adir palabra","dictionary.word":"Palabra","dictionary.pronunciation":"Pronunciaci\xf3n (opcional)","commands.title":"Comandos LLM","commands.count":"{{count}} comandos","commands.add":"A\xf1adir","commands.activeCommand":"Comando activo","commands.none":"Ninguno","commands.loading":"Cargando...","commands.noCommands":"Sin comandos — haz clic en a\xf1adir para crear uno","commands.editTitle":"Editar comando","commands.addTitle":"A\xf1adir comando","commands.name":"Nombre","commands.description":"Descripci\xf3n","commands.promptTemplate":"Plantilla de prompt","commands.promptHelp":"{{text}} se reemplazar\xe1 por el texto transcrito","commands.defaultPrompt":"Por favor, mejora {{text}}.","settings.title":"Ajustes","settings.tabs.general":"General","settings.tabs.audio":"Audio","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"Acerca de","settings.shortcuts":"Atajos","settings.dictation":"Dictado","settings.dictation.desc":"Mant\xe9n pulsado para hablar. Al soltar, comienza la transcripci\xf3n.","settings.agent":"Modo agente","settings.agent.descWithKey":"Haz doble clic en {{key}} para entrar en el modo agente.","settings.agent.descNoKey":"Primero configura el atajo de dictado.","settings.oneTouch":"Modo un toque","settings.oneTouch.desc":"Pulsa para iniciar, pulsa de nuevo para detener. Requiere un atajo independiente.","settings.key":"Tecla","settings.notSet":"No configurado","settings.enabled":"Activado","settings.disabled":"Desactivado","settings.interface":"Interfaz","settings.theme":"Tema","settings.theme.system":"Sistema","settings.theme.light":"Claro","settings.theme.dark":"Oscuro","settings.language":"Idioma","settings.appBehavior":"Comportamiento de la app","settings.closeToTray":"Minimizar a la bandeja","settings.autoLaunch":"Iniciar con el sistema","settings.autoInsert":"Insertar texto autom\xe1ticamente tras transcripci\xf3n","settings.soundEffects":"Efectos de sonido","settings.microphone":"Micr\xf3fono","settings.inputDevice":"Dispositivo de entrada","settings.deviceDefault":"(predeterminado)","settings.textInsert":"Inserci\xf3n de texto","settings.insertMethod":"M\xe9todo de inserci\xf3n","settings.insertClipboard":"Portapapeles (Ctrl+V)","settings.insertKeyboard":"Escritura con teclado","settings.whisperModel":"Modelo Whisper","settings.model.tiny":"tiny (39 MB, m\xe1s r\xe1pido)","settings.model.base":"base (74 MB, equilibrado)","settings.model.small":"small (244 MB, bueno)","settings.model.medium":"medium (769 MB, muy bueno)","settings.model.large":"large-v3 (1.5 GB, mejor)","settings.sttLanguage":"Idioma de reconocimiento","settings.sttLang.auto":"Detecci\xf3n autom\xe1tica","settings.ollamaServer":"Servidor Ollama","settings.ollamaUrl":"URL del servidor Ollama","settings.ollamaHint":"D3RO Voice se conecta autom\xe1ticamente cuando Ollama est\xe1 en ejecuci\xf3n. Descarga modelos directamente desde Ollama (ej: ollama pull qwen3:4b).","settings.postProcess":"Postprocesado de voz","settings.defaultAction":"Acci\xf3n de postprocesado predeterminada","settings.action.none":"Ninguna (texto original sin cambios)","settings.action.refine":"Refinar (gram\xe1tica + naturalidad)","settings.action.translate":"Traducir","settings.action.summarize":"Resumir","settings.action.grammar":"Correcci\xf3n gramatical","settings.action.custom":"Prompt personalizado","settings.actionHint":"El postprocesado LLM seleccionado se aplica al texto transcrito tras grabar con el atajo. Solo funciona cuando Ollama est\xe1 conectado.","settings.about.version":"Versi\xf3n","settings.about.techStack":"Stack tecnol\xf3gico","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"Motor de voz","settings.about.voiceEngineValue":"STT: faster-whisper (local) / LLM: Ollama (local)","settings.about.description":"Asistente de voz con IA completamente local, basado en ingenier\xeda inversa de Speakly. Funciona sin dependencias en la nube.","settings.about.restartOnboarding":"Ver gu\xeda de configuraci\xf3n inicial de nuevo","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama no est\xe1 en ejecuci\xf3n","status.nudge.desc":"Se necesita Ollama para el postprocesado LLM (traducci\xf3n, resumen, etc.).","status.nudge.guide":"Ver gu\xeda de instalaci\xf3n →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"Sin escribir, con voz. Tu asistente de voz con IA local.","onboarding.welcome.start":"Comenzar","onboarding.mic.title":"Configurar micr\xf3fono","onboarding.mic.desc":"Selecciona el micr\xf3fono que quieres usar. Puedes cambiarlo m\xe1s tarde en los ajustes.","onboarding.hotkey.title":"Configurar atajo","onboarding.hotkey.desc":"Configura el atajo de dictado. Se grabar\xe1 mientras mantengas la tecla pulsada.","onboarding.hotkey.notSet":"No se ha configurado ning\xfan atajo","onboarding.hotkey.change":"Cambiar atajo","onboarding.hotkey.set":"Configurar atajo","onboarding.ollama.title":"Instalar Ollama (opcional)","onboarding.ollama.desc":"Se necesita Ollama para el postprocesado LLM como traducci\xf3n o resumen. El dictado de voz funciona sin Ollama.","onboarding.ollama.download":"Descargar Ollama","onboarding.ollama.modelHint":"Tras instalar, descarga un modelo desde la terminal","onboarding.done.title":"\xa1Configuraci\xf3n completa!","onboarding.done.descWithKey":"Mant\xe9n pulsado {{key}} y habla para convertir tu voz en texto.","onboarding.done.descNoKey":"Configura un atajo en los ajustes para empezar a dictar.","onboarding.done.start":"Comenzar","onboarding.back":"Atr\xe1s","onboarding.next":"Siguiente","hotkey.title":"Configurar atajo","hotkey.dictationTitle":"Configurar atajo de dictado","hotkey.oneTouchTitle":"Configurar atajo de modo un toque","hotkey.prompt":"Pulsa una combinaci\xf3n de teclas...","hotkey.ready":"✓ {{keys}} — pulsa guardar","hotkey.noKey":"Por favor, introduce una tecla","hotkey.reserved":"{{keys}} es un atajo reservado por el sistema","hotkey.current":"Actual: {{keys}}","hotkey.hint":"Introduce una combinaci\xf3n (ej: Ctrl+Shift+Q) o una tecla sola (ej: F5)","hotkey.reset":"Volver a introducir","ollama.title":"GU\xcdA DE CONFIGURACI\xd3N DE OLLAMA","ollama.step1.title":"PASO 1 — Instalar Ollama","ollama.step1.desc":"Ollama es una herramienta gratuita para ejecutar LLMs de forma local.","ollama.step2.title":"PASO 2 — Descargar un modelo","ollama.step2.desc":"Ejecuta el siguiente comando en la terminal para descargar el modelo recomendado:","ollama.step2.alt":"O un modelo m\xe1s grande: ollama pull qwen3:8b (m\xe1s preciso, m\xe1s lento)","ollama.step3.title":"PASO 3 — Conexi\xf3n autom\xe1tica","ollama.step3.desc":"D3RO-VOICE detecta autom\xe1ticamente cuando Ollama est\xe1 en ejecuci\xf3n. Cuando el LED de la barra de estado pase de rojo a verde, \xa1estar\xe1 listo!","service.sttEngine":"MOTOR STT","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"ATAJO DE TECLADO","service.audioInput":"ENTRADA DE AUDIO","service.ready":"LISTO","service.connected":"CONECTADO","service.offline":"OFFLINE","service.active":"ACTIVO","service.standby":"EN ESPERA","common.cancel":"Cancelar","common.save":"Guardar","common.delete":"Eliminar","common.add":"A\xf1adir","common.edit":"Editar","common.close":"Cerrar","common.confirm":"Confirmar","common.loading":"Cargando...","common.copy":"Copiar","common.test":"Probar","common.stop":"Detener","date.today":"Hoy","date.yesterday":"Ayer","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"Coreano","settings.sttLang.en":"Ingl\xe9s","settings.sttLang.ja":"Japon\xe9s","settings.sttLang.zh":"Chino","template.outputHelperText":"Use {{nombreCampo}} para marcadores de posici\xf3n","nav.meeting":"Reuni\xf3n","meeting.title":"Modo Reuni\xf3n","meeting.newMeeting":"Nueva Reuni\xf3n","meeting.startRecording":"Iniciar Grabaci\xf3n","meeting.stopRecording":"Detener Grabaci\xf3n","meeting.recording":"Grabando","meeting.processing":"Generando actas...","meeting.completed":"Completado","meeting.error":"Error","meeting.elapsed":"Tiempo transcurrido","meeting.memoPlaceholder":"Escribe un memo (Enter para a\xf1adir)","meeting.memoAdded":"Memo a\xf1adido","meeting.noSessions":"Sin grabaciones de reuniones","meeting.noSessionsDesc":"Pulsa Nueva Reuni\xf3n para empezar a grabar","meeting.summary":"Resumen","meeting.decisions":"Decisiones","meeting.actionItems":"Tareas","meeting.timeline":"L\xednea de tiempo","meeting.transcript":"Transcripci\xf3n bruta","meeting.memos":"Memos","meeting.exportPdf":"Exportar PDF","meeting.exportMarkdown":"Exportar Markdown","meeting.delete":"Eliminar","meeting.deleteConfirm":"\xbfEliminar este registro de reuni\xf3n?","meeting.backToList":"Volver a la lista","meeting.notificationTitle":"Actas listas","meeting.notificationBody":"Las actas de la reuni\xf3n han sido generadas.","meeting.sessions":"{{count}} sesiones","meeting.duration":"{{minutes}} min","meeting.editTitle":"Editar t\xedtulo","meeting.untitled":"Reuni\xf3n sin t\xedtulo","meeting.processingStep.merging":"Fusionando transcripci\xf3n...","meeting.processingStep.generating":"Generando actas con LLM...","meeting.processingStep.parsing":"Analizando actas...","meeting.processingStep.saving":"Guardando...","meeting.processingStep.notifying":"Enviando notificaci\xf3n...","meeting.transcriptTab":"Transcripci\xf3n","meeting.addDocument":"Agregar documento","meeting.selectTemplate":"Seleccionar plantilla","meeting.generate":"Generar","meeting.generating":"Generando documento...","meeting.editMode":"Editar","meeting.previewMode":"Vista previa","meeting.modified":"Modificado","meeting.originalText":"Original","meeting.editedText":"Editado","meeting.exportDocx":"Exportar DOCX","meeting.exportTxt":"Exportar TXT","meeting.exportFormat":"Exportar","meeting.customPrompt":"Prompt personalizado","meeting.templateName":"Nombre de plantilla","meeting.templatePrompt":"Prompt de IA","meeting.templateSave":"Guardar plantilla","meeting.documentDeleted":"Documento eliminado","meeting.autoSaved":"Guardado autom\xe1ticamente","meeting.minutesTemplate":"Actas de reuni\xf3n","meeting.reportTemplate":"Informe","meeting.ideaNoteTemplate":"Nota de ideas","meeting.customTemplate":"Personalizado","meeting.downloadTranscript":"Descargar transcripci\xf3n","meeting.polish":"Pulir con IA","meeting.polishing":"IA puliendo transcripci\xf3n...","meeting.polished":"Pulido con IA completado","meeting.mindmapTemplate":"Mapa mental","meeting.chat":"Chat IA","meeting.chatPlaceholder":"Pregunta sobre la reuni\xf3n...","meeting.chatSend":"Enviar","meeting.chatClear":"Limpiar chat","meeting.copyToClipboard":"Copiar al portapapeles","meeting.copied":"Copiado","meeting.chatCollapse":"Contraer chat","meeting.chatExpand":"Expandir chat","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"Error al pulir con IA","meeting.viewDetailError":"Error al cargar detalles de la reuni\xf3n","meeting.startRecordingError":"Error al iniciar la grabaci\xf3n","meeting.diarize":"Identificar hablantes","meeting.diarizing":"Identificando hablantes...","meeting.diarizeComplete":"Identificaci\xf3n completada","meeting.speaker":"Hablante","settings.hfToken":"Token de HuggingFace","settings.hfTokenHint":"Se necesita un token de HuggingFace para identificar hablantes","settings.diarization":"Identificaci\xf3n de hablantes","settings.diarizationHint":"Identifica autom\xe1ticamente los hablantes al finalizar la grabaci\xf3n"}'),l=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"Assistant vocal IA local","nav.dashboard":"Tableau de bord","nav.history":"Historique","nav.dictionary":"Dictionnaire","nav.commands":"Commandes","nav.settings":"Param\xe8tres","dashboard.sessionOverview":"Aper\xe7u de session","dashboard.systemStatus":"\xc9tat du syst\xe8me","dashboard.sessionsToday":"Sessions aujourd\'hui","dashboard.pressToRecord":"Appuyez sur {{key}} pour commencer l\'enregistrement","dashboard.hotkeyNotSet":"Raccourci non configur\xe9","dashboard.words":"mots","dashboard.total":"total","dashboard.streak":"s\xe9rie","dashboard.days":"jours","dashboard.recording":"enregistrement","dashboard.sessions":"sessions","dashboard.today":"aujourd\'hui","dashboard.recentTranscriptions":"Transcriptions r\xe9centes","dashboard.noHistory":"Aucun historique — appuyez sur le raccourci pour commencer \xe0 enregistrer","dashboard.copy":"Copier","dashboard.entries":"{{count}} entr\xe9es","dashboard.stat":"statistiques","dashboard.sys":"syst\xe8me","history.title":"Historique des transcriptions","history.search":"Rechercher...","history.entries":"{{count}} entr\xe9es","history.loading":"Chargement...","history.noResults":"Aucun r\xe9sultat","history.noHistory":"Aucun historique — commencez \xe0 enregistrer","history.count":"{{count}} entr\xe9es","dictionary.title":"Dictionnaire personnalis\xe9","dictionary.words":"{{count}} mots","dictionary.add":"Ajouter","dictionary.search":"Rechercher...","dictionary.loading":"Chargement...","dictionary.noResults":"Aucun r\xe9sultat","dictionary.noWords":"Aucun mot — ajoutez des mots personnalis\xe9s pour am\xe9liorer la pr\xe9cision du STT","dictionary.used":"utilis\xe9 {{count}} fois","dictionary.editTitle":"Modifier le mot","dictionary.addTitle":"Ajouter un mot","dictionary.word":"Mot","dictionary.pronunciation":"Prononciation (facultatif)","commands.title":"Commandes LLM","commands.count":"{{count}} commandes","commands.add":"Ajouter","commands.activeCommand":"Commande active","commands.none":"Aucune","commands.loading":"Chargement...","commands.noCommands":"Aucune commande — cliquez sur ajouter pour en cr\xe9er une","commands.editTitle":"Modifier la commande","commands.addTitle":"Ajouter une commande","commands.name":"Nom","commands.description":"Description","commands.promptTemplate":"Mod\xe8le de prompt","commands.promptHelp":"{{text}} sera remplac\xe9 par le texte transcrit","commands.defaultPrompt":"Veuillez am\xe9liorer {{text}}.","settings.title":"Param\xe8tres","settings.tabs.general":"G\xe9n\xe9ral","settings.tabs.audio":"Audio","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"\xc0 propos","settings.shortcuts":"Raccourcis","settings.dictation":"Dict\xe9e","settings.dictation.desc":"Maintenez enfonc\xe9 pour parler. La transcription d\xe9marre au rel\xe2chement.","settings.agent":"Mode agent","settings.agent.descWithKey":"Double-cliquez sur {{key}} pour entrer en mode agent.","settings.agent.descNoKey":"Configurez d\'abord le raccourci de dict\xe9e.","settings.oneTouch":"Mode une touche","settings.oneTouch.desc":"Appuyez pour d\xe9marrer, appuyez \xe0 nouveau pour arr\xeater. N\xe9cessite un raccourci distinct.","settings.key":"Touche","settings.notSet":"Non configur\xe9","settings.enabled":"Activ\xe9","settings.disabled":"D\xe9sactiv\xe9","settings.interface":"Interface","settings.theme":"Th\xe8me","settings.theme.system":"Syst\xe8me","settings.theme.light":"Clair","settings.theme.dark":"Sombre","settings.language":"Langue","settings.appBehavior":"Comportement de l\'application","settings.closeToTray":"R\xe9duire dans la barre syst\xe8me","settings.autoLaunch":"Lancer au d\xe9marrage du syst\xe8me","settings.autoInsert":"Ins\xe9rer le texte automatiquement apr\xe8s la transcription","settings.soundEffects":"Effets sonores","settings.microphone":"Microphone","settings.inputDevice":"P\xe9riph\xe9rique d\'entr\xe9e","settings.deviceDefault":"(par d\xe9faut)","settings.textInsert":"Insertion de texte","settings.insertMethod":"M\xe9thode d\'insertion","settings.insertClipboard":"Presse-papiers (Ctrl+V)","settings.insertKeyboard":"Frappe au clavier","settings.whisperModel":"Mod\xe8le Whisper","settings.model.tiny":"tiny (39 Mo, le plus rapide)","settings.model.base":"base (74 Mo, \xe9quilibr\xe9)","settings.model.small":"small (244 Mo, bon)","settings.model.medium":"medium (769 Mo, tr\xe8s bon)","settings.model.large":"large-v3 (1,5 Go, meilleur)","settings.sttLanguage":"Langue de reconnaissance","settings.sttLang.auto":"D\xe9tection automatique","settings.ollamaServer":"Serveur Ollama","settings.ollamaUrl":"URL du serveur Ollama","settings.ollamaHint":"D3RO Voice se connecte automatiquement quand Ollama est en cours d\'ex\xe9cution. T\xe9l\xe9chargez les mod\xe8les directement depuis Ollama (ex : ollama pull qwen3:4b).","settings.postProcess":"Post-traitement vocal","settings.defaultAction":"Action de post-traitement par d\xe9faut","settings.action.none":"Aucune (texte original inchang\xe9)","settings.action.refine":"Affiner (grammaire + naturel)","settings.action.translate":"Traduire","settings.action.summarize":"R\xe9sumer","settings.action.grammar":"Correction grammaticale","settings.action.custom":"Prompt personnalis\xe9","settings.actionHint":"Le post-traitement LLM s\xe9lectionn\xe9 est appliqu\xe9 au texte transcrit apr\xe8s l\'enregistrement avec le raccourci. Ne fonctionne que lorsque Ollama est connect\xe9.","settings.about.version":"Version","settings.about.techStack":"Stack technologique","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"Moteur vocal","settings.about.voiceEngineValue":"STT : faster-whisper (local) / LLM : Ollama (local)","settings.about.description":"Assistant vocal IA enti\xe8rement local, bas\xe9 sur l\'ing\xe9nierie inverse de Speakly. Fonctionne sans d\xe9pendance au cloud.","settings.about.restartOnboarding":"Revoir le guide de configuration initiale","status.ollama":"OLLAMA","status.offline":"HORS LIGNE","status.nudge.title":"Ollama n\'est pas en cours d\'ex\xe9cution","status.nudge.desc":"Ollama est n\xe9cessaire pour le post-traitement LLM (traduction, r\xe9sum\xe9, etc.).","status.nudge.guide":"Voir le guide d\'installation →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"Sans taper, par la voix. Votre assistant vocal IA local.","onboarding.welcome.start":"Commencer","onboarding.mic.title":"Configuration du microphone","onboarding.mic.desc":"S\xe9lectionnez le microphone que vous souhaitez utiliser. Vous pourrez le modifier plus tard dans les param\xe8tres.","onboarding.hotkey.title":"Configuration du raccourci","onboarding.hotkey.desc":"Configurez le raccourci de dict\xe9e. L\'enregistrement dure tant que vous maintenez la touche enfonc\xe9e.","onboarding.hotkey.notSet":"Aucun raccourci configur\xe9","onboarding.hotkey.change":"Modifier le raccourci","onboarding.hotkey.set":"Configurer le raccourci","onboarding.ollama.title":"Installer Ollama (facultatif)","onboarding.ollama.desc":"Ollama est n\xe9cessaire pour le post-traitement LLM comme la traduction ou le r\xe9sum\xe9. La dict\xe9e vocale fonctionne sans Ollama.","onboarding.ollama.download":"T\xe9l\xe9charger Ollama","onboarding.ollama.modelHint":"Apr\xe8s l\'installation, t\xe9l\xe9chargez un mod\xe8le depuis le terminal","onboarding.done.title":"Configuration termin\xe9e !","onboarding.done.descWithKey":"Maintenez {{key}} enfonc\xe9 et parlez pour convertir votre voix en texte.","onboarding.done.descNoKey":"Configurez un raccourci dans les param\xe8tres pour commencer la dict\xe9e.","onboarding.done.start":"Commencer","onboarding.back":"Retour","onboarding.next":"Suivant","hotkey.title":"Configurer le raccourci","hotkey.dictationTitle":"Configurer le raccourci de dict\xe9e","hotkey.oneTouchTitle":"Configurer le raccourci du mode une touche","hotkey.prompt":"Appuyez sur une combinaison de touches...","hotkey.ready":"✓ {{keys}} — appuyez sur enregistrer","hotkey.noKey":"Veuillez saisir une touche","hotkey.reserved":"{{keys}} est un raccourci r\xe9serv\xe9 par le syst\xe8me","hotkey.current":"Actuel : {{keys}}","hotkey.hint":"Saisissez une combinaison (ex : Ctrl+Shift+Q) ou une touche seule (ex : F5)","hotkey.reset":"Ressaisir","ollama.title":"GUIDE DE CONFIGURATION OLLAMA","ollama.step1.title":"\xc9TAPE 1 — Installer Ollama","ollama.step1.desc":"Ollama est un outil gratuit pour ex\xe9cuter des LLM en local.","ollama.step2.title":"\xc9TAPE 2 — T\xe9l\xe9charger un mod\xe8le","ollama.step2.desc":"Ex\xe9cutez la commande suivante dans le terminal pour t\xe9l\xe9charger le mod\xe8le recommand\xe9 :","ollama.step2.alt":"Ou un mod\xe8le plus grand : ollama pull qwen3:8b (plus pr\xe9cis, plus lent)","ollama.step3.title":"\xc9TAPE 3 — Connexion automatique","ollama.step3.desc":"D3RO-VOICE d\xe9tecte automatiquement quand Ollama est en cours d\'ex\xe9cution. Quand la LED de la barre d\'\xe9tat passe du rouge au vert, c\'est pr\xeat !","service.sttEngine":"MOTEUR STT","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"RACCOURCI CLAVIER","service.audioInput":"ENTR\xc9E AUDIO","service.ready":"PR\xcaT","service.connected":"CONNECT\xc9","service.offline":"HORS LIGNE","service.active":"ACTIF","service.standby":"EN VEILLE","common.cancel":"Annuler","common.save":"Enregistrer","common.delete":"Supprimer","common.add":"Ajouter","common.edit":"Modifier","common.close":"Fermer","common.confirm":"Confirmer","common.loading":"Chargement...","common.copy":"Copier","common.test":"Tester","common.stop":"Arr\xeater","date.today":"Aujourd\'hui","date.yesterday":"Hier","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"Cor\xe9en","settings.sttLang.en":"Anglais","settings.sttLang.ja":"Japonais","settings.sttLang.zh":"Chinois","template.outputHelperText":"Utilisez {{nomChamp}} pour les espaces r\xe9serv\xe9s","nav.meeting":"R\xe9union","meeting.title":"Mode R\xe9union","meeting.newMeeting":"Nouvelle R\xe9union","meeting.startRecording":"D\xe9marrer l\'enregistrement","meeting.stopRecording":"Arr\xeater l\'enregistrement","meeting.recording":"Enregistrement en cours","meeting.processing":"G\xe9n\xe9ration du compte-rendu...","meeting.completed":"Termin\xe9","meeting.error":"Erreur","meeting.elapsed":"Temps \xe9coul\xe9","meeting.memoPlaceholder":"Saisir un m\xe9mo (Entr\xe9e pour ajouter)","meeting.memoAdded":"M\xe9mo ajout\xe9","meeting.noSessions":"Aucun enregistrement de r\xe9union","meeting.noSessionsDesc":"Appuyez sur Nouvelle R\xe9union pour commencer l\'enregistrement","meeting.summary":"R\xe9sum\xe9","meeting.decisions":"D\xe9cisions","meeting.actionItems":"Actions \xe0 mener","meeting.timeline":"Chronologie","meeting.transcript":"Transcription brute","meeting.memos":"M\xe9mos","meeting.exportPdf":"Exporter en PDF","meeting.exportMarkdown":"Exporter en Markdown","meeting.delete":"Supprimer","meeting.deleteConfirm":"Supprimer cet enregistrement de r\xe9union ?","meeting.backToList":"Retour \xe0 la liste","meeting.notificationTitle":"Compte-rendu pr\xeat","meeting.notificationBody":"Le compte-rendu de la r\xe9union a \xe9t\xe9 g\xe9n\xe9r\xe9.","meeting.sessions":"{{count}} s\xe9ances","meeting.duration":"{{minutes}} min","meeting.editTitle":"Modifier le titre","meeting.untitled":"R\xe9union sans titre","meeting.processingStep.merging":"Fusion de la transcription...","meeting.processingStep.generating":"G\xe9n\xe9ration du compte-rendu avec LLM...","meeting.processingStep.parsing":"Analyse du compte-rendu...","meeting.processingStep.saving":"Enregistrement...","meeting.processingStep.notifying":"Envoi de la notification...","meeting.transcriptTab":"Transcription","meeting.addDocument":"Ajouter un document","meeting.selectTemplate":"Choisir un mod\xe8le","meeting.generate":"G\xe9n\xe9rer","meeting.generating":"G\xe9n\xe9ration du document...","meeting.editMode":"\xc9diter","meeting.previewMode":"Aper\xe7u","meeting.modified":"Modifi\xe9","meeting.originalText":"Original","meeting.editedText":"\xc9dit\xe9","meeting.exportDocx":"Exporter DOCX","meeting.exportTxt":"Exporter TXT","meeting.exportFormat":"Exporter","meeting.customPrompt":"Invite personnalis\xe9e","meeting.templateName":"Nom du mod\xe8le","meeting.templatePrompt":"Invite IA","meeting.templateSave":"Sauvegarder le mod\xe8le","meeting.documentDeleted":"Document supprim\xe9","meeting.autoSaved":"Sauvegarde automatique","meeting.minutesTemplate":"Compte-rendu","meeting.reportTemplate":"Rapport","meeting.ideaNoteTemplate":"Note d\'id\xe9es","meeting.customTemplate":"Personnalis\xe9","meeting.downloadTranscript":"T\xe9l\xe9charger la transcription","meeting.polish":"Peaufiner avec IA","meeting.polishing":"L\'IA peaufine la transcription...","meeting.polished":"Peaufinement IA termin\xe9","meeting.mindmapTemplate":"Carte mentale","meeting.chat":"Chat IA","meeting.chatPlaceholder":"Posez une question sur la r\xe9union...","meeting.chatSend":"Envoyer","meeting.chatClear":"Effacer le chat","meeting.copyToClipboard":"Copier dans le presse-papiers","meeting.copied":"Copi\xe9","meeting.chatCollapse":"R\xe9duire le chat","meeting.chatExpand":"Agrandir le chat","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"Echec du polish IA","meeting.viewDetailError":"Impossible de charger les d\xe9tails de la r\xe9union","meeting.startRecordingError":"Impossible de d\xe9marrer l\'enregistrement","meeting.diarize":"Identifier les locuteurs","meeting.diarizing":"Identification des locuteurs...","meeting.diarizeComplete":"Identification termin\xe9e","meeting.speaker":"Locuteur","settings.hfToken":"Token HuggingFace","settings.hfTokenHint":"Un token HuggingFace est requis pour l\'identification des locuteurs","settings.diarization":"Identification des locuteurs","settings.diarizationHint":"Identifier automatiquement les locuteurs apr\xe8s l\'enregistrement"}'),m=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"Lokaler KI-Sprachassistent","nav.dashboard":"Dashboard","nav.history":"Verlauf","nav.dictionary":"W\xf6rterbuch","nav.commands":"Befehle","nav.settings":"Einstellungen","dashboard.sessionOverview":"Sitzungs\xfcbersicht","dashboard.systemStatus":"Systemstatus","dashboard.sessionsToday":"Sitzungen heute","dashboard.pressToRecord":"Dr\xfccke {{key}}, um die Aufnahme zu starten","dashboard.hotkeyNotSet":"Tastenk\xfcrzel nicht festgelegt","dashboard.words":"W\xf6rter","dashboard.total":"gesamt","dashboard.streak":"Serie","dashboard.days":"Tage","dashboard.recording":"Aufnahme","dashboard.sessions":"Sitzungen","dashboard.today":"heute","dashboard.recentTranscriptions":"Letzte Transkriptionen","dashboard.noHistory":"Kein Verlauf — dr\xfccke das Tastenk\xfcrzel, um die Aufnahme zu starten","dashboard.copy":"Kopieren","dashboard.entries":"{{count}} Eintr\xe4ge","dashboard.stat":"Statistiken","dashboard.sys":"System","history.title":"Transkriptionsverlauf","history.search":"Suchen...","history.entries":"{{count}} Eintr\xe4ge","history.loading":"Laden...","history.noResults":"Keine Ergebnisse","history.noHistory":"Kein Verlauf — starte eine Aufnahme","history.count":"{{count}} Eintr\xe4ge","dictionary.title":"Benutzerw\xf6rterbuch","dictionary.words":"{{count}} W\xf6rter","dictionary.add":"Hinzuf\xfcgen","dictionary.search":"Suchen...","dictionary.loading":"Laden...","dictionary.noResults":"Keine Ergebnisse","dictionary.noWords":"Keine W\xf6rter — f\xfcge benutzerdefinierte W\xf6rter hinzu, um die STT-Genauigkeit zu verbessern","dictionary.used":"{{count}} Mal verwendet","dictionary.editTitle":"Wort bearbeiten","dictionary.addTitle":"Wort hinzuf\xfcgen","dictionary.word":"Wort","dictionary.pronunciation":"Aussprache (optional)","commands.title":"LLM-Befehle","commands.count":"{{count}} Befehle","commands.add":"Hinzuf\xfcgen","commands.activeCommand":"Aktiver Befehl","commands.none":"Keiner","commands.loading":"Laden...","commands.noCommands":"Keine Befehle — klicke auf Hinzuf\xfcgen, um einen zu erstellen","commands.editTitle":"Befehl bearbeiten","commands.addTitle":"Befehl hinzuf\xfcgen","commands.name":"Name","commands.description":"Beschreibung","commands.promptTemplate":"Prompt-Vorlage","commands.promptHelp":"{{text}} wird durch den transkribierten Text ersetzt","commands.defaultPrompt":"Bitte verbessere {{text}}.","settings.title":"Einstellungen","settings.tabs.general":"Allgemein","settings.tabs.audio":"Audio","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"\xdcber","settings.shortcuts":"Tastenk\xfcrzel","settings.dictation":"Diktat","settings.dictation.desc":"Gedr\xfcckt halten zum Sprechen. Die Transkription beginnt beim Loslassen.","settings.agent":"Agentenmodus","settings.agent.descWithKey":"Doppelklick auf {{key}}, um den Agentenmodus aufzurufen.","settings.agent.descNoKey":"Lege zuerst das Diktat-Tastenk\xfcrzel fest.","settings.oneTouch":"Ein-Tasten-Modus","settings.oneTouch.desc":"Dr\xfccken zum Starten, erneut dr\xfccken zum Beenden. Erfordert ein eigenes Tastenk\xfcrzel.","settings.key":"Taste","settings.notSet":"Nicht festgelegt","settings.enabled":"Aktiviert","settings.disabled":"Deaktiviert","settings.interface":"Oberfl\xe4che","settings.theme":"Design","settings.theme.system":"System","settings.theme.light":"Hell","settings.theme.dark":"Dunkel","settings.language":"Sprache","settings.appBehavior":"App-Verhalten","settings.closeToTray":"In Systembereich minimieren","settings.autoLaunch":"Beim Systemstart automatisch starten","settings.autoInsert":"Text nach der Transkription automatisch einf\xfcgen","settings.soundEffects":"Soundeffekte","settings.microphone":"Mikrofon","settings.inputDevice":"Eingabeger\xe4t","settings.deviceDefault":"(Standard)","settings.textInsert":"Texteinf\xfcgung","settings.insertMethod":"Einf\xfcgemethode","settings.insertClipboard":"Zwischenablage (Ctrl+V)","settings.insertKeyboard":"Tastatureingabe","settings.whisperModel":"Whisper-Modell","settings.model.tiny":"tiny (39 MB, am schnellsten)","settings.model.base":"base (74 MB, ausgewogen)","settings.model.small":"small (244 MB, gut)","settings.model.medium":"medium (769 MB, sehr gut)","settings.model.large":"large-v3 (1,5 GB, beste Qualit\xe4t)","settings.sttLanguage":"Erkennungssprache","settings.sttLang.auto":"Automatische Erkennung","settings.ollamaServer":"Ollama-Server","settings.ollamaUrl":"Ollama-Server-URL","settings.ollamaHint":"D3RO Voice verbindet sich automatisch, wenn Ollama l\xe4uft. Lade Modelle direkt \xfcber Ollama herunter (z. B.: ollama pull qwen3:4b).","settings.postProcess":"Sprachnachbearbeitung","settings.defaultAction":"Standard-Nachbearbeitungsaktion","settings.action.none":"Keine (Originaltext unver\xe4ndert)","settings.action.refine":"Verfeinern (Grammatik + Nat\xfcrlichkeit)","settings.action.translate":"\xdcbersetzen","settings.action.summarize":"Zusammenfassen","settings.action.grammar":"Grammatikkorrektur","settings.action.custom":"Benutzerdefinierter Prompt","settings.actionHint":"Die gew\xe4hlte LLM-Nachbearbeitung wird auf den transkribierten Text angewendet, nachdem mit dem Tastenk\xfcrzel aufgenommen wurde. Funktioniert nur, wenn Ollama verbunden ist.","settings.about.version":"Version","settings.about.techStack":"Tech-Stack","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"Sprach-Engine","settings.about.voiceEngineValue":"STT: faster-whisper (lokal) / LLM: Ollama (lokal)","settings.about.description":"Vollst\xe4ndig lokaler KI-Sprachassistent, basierend auf Reverse Engineering von Speakly. Funktioniert ohne Cloud-Abh\xe4ngigkeiten.","settings.about.restartOnboarding":"Einrichtungsanleitung erneut anzeigen","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama l\xe4uft nicht","status.nudge.desc":"Ollama wird f\xfcr die LLM-Nachbearbeitung (\xdcbersetzung, Zusammenfassung usw.) ben\xf6tigt.","status.nudge.guide":"Installationsanleitung anzeigen →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"Ohne Tippen, per Sprache. Dein lokaler KI-Sprachassistent.","onboarding.welcome.start":"Loslegen","onboarding.mic.title":"Mikrofon einrichten","onboarding.mic.desc":"W\xe4hle das Mikrofon aus, das du verwenden m\xf6chtest. Du kannst es sp\xe4ter in den Einstellungen \xe4ndern.","onboarding.hotkey.title":"Tastenk\xfcrzel einrichten","onboarding.hotkey.desc":"Lege das Diktat-Tastenk\xfcrzel fest. Die Aufnahme l\xe4uft, solange du die Taste gedr\xfcckt h\xe4ltst.","onboarding.hotkey.notSet":"Kein Tastenk\xfcrzel festgelegt","onboarding.hotkey.change":"Tastenk\xfcrzel \xe4ndern","onboarding.hotkey.set":"Tastenk\xfcrzel festlegen","onboarding.ollama.title":"Ollama installieren (optional)","onboarding.ollama.desc":"Ollama wird f\xfcr die LLM-Nachbearbeitung wie \xdcbersetzung oder Zusammenfassung ben\xf6tigt. Die Sprachdiktierung funktioniert ohne Ollama.","onboarding.ollama.download":"Ollama herunterladen","onboarding.ollama.modelHint":"Lade nach der Installation ein Modell \xfcber das Terminal herunter","onboarding.done.title":"Einrichtung abgeschlossen!","onboarding.done.descWithKey":"Halte {{key}} gedr\xfcckt und sprich, um deine Stimme in Text umzuwandeln.","onboarding.done.descNoKey":"Lege in den Einstellungen ein Tastenk\xfcrzel fest, um mit der Spracheingabe zu beginnen.","onboarding.done.start":"Loslegen","onboarding.back":"Zur\xfcck","onboarding.next":"Weiter","hotkey.title":"Tastenk\xfcrzel einrichten","hotkey.dictationTitle":"Diktat-Tastenk\xfcrzel einrichten","hotkey.oneTouchTitle":"Tastenk\xfcrzel f\xfcr Ein-Tasten-Modus einrichten","hotkey.prompt":"Dr\xfccke eine Tastenkombination...","hotkey.ready":"✓ {{keys}} — dr\xfccke Speichern","hotkey.noKey":"Bitte gib eine Taste ein","hotkey.reserved":"{{keys}} ist ein vom System reserviertes Tastenk\xfcrzel","hotkey.current":"Aktuell: {{keys}}","hotkey.hint":"Gib eine Kombination (z. B. Ctrl+Shift+Q) oder eine einzelne Taste (z. B. F5) ein","hotkey.reset":"Erneut eingeben","ollama.title":"OLLAMA EINRICHTUNGSANLEITUNG","ollama.step1.title":"SCHRITT 1 — Ollama installieren","ollama.step1.desc":"Ollama ist ein kostenloses Tool zum lokalen Ausf\xfchren von LLMs.","ollama.step2.title":"SCHRITT 2 — Modell herunterladen","ollama.step2.desc":"F\xfchre den folgenden Befehl im Terminal aus, um das empfohlene Modell herunterzuladen:","ollama.step2.alt":"Oder ein gr\xf6\xdferes Modell: ollama pull qwen3:8b (genauer, langsamer)","ollama.step3.title":"SCHRITT 3 — Automatische Verbindung","ollama.step3.desc":"D3RO-VOICE erkennt automatisch, wenn Ollama l\xe4uft. Wenn die LED in der Statusleiste von Rot auf Gr\xfcn wechselt, ist alles bereit!","service.sttEngine":"STT-ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"TASTENK\xdcRZEL","service.audioInput":"AUDIOEINGABE","service.ready":"BEREIT","service.connected":"VERBUNDEN","service.offline":"OFFLINE","service.active":"AKTIV","service.standby":"BEREITSCHAFT","common.cancel":"Abbrechen","common.save":"Speichern","common.delete":"L\xf6schen","common.add":"Hinzuf\xfcgen","common.edit":"Bearbeiten","common.close":"Schlie\xdfen","common.confirm":"Best\xe4tigen","common.loading":"Laden...","common.copy":"Kopieren","common.test":"Testen","common.stop":"Stoppen","date.today":"Heute","date.yesterday":"Gestern","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"Koreanisch","settings.sttLang.en":"Englisch","settings.sttLang.ja":"Japanisch","settings.sttLang.zh":"Chinesisch","template.outputHelperText":"Verwenden Sie {{Feldname}} f\xfcr Platzhalter","nav.meeting":"Meeting","meeting.title":"Meeting-Modus","meeting.newMeeting":"Neues Meeting","meeting.startRecording":"Aufnahme starten","meeting.stopRecording":"Aufnahme beenden","meeting.recording":"Aufnahme l\xe4uft","meeting.processing":"Protokoll wird erstellt...","meeting.completed":"Abgeschlossen","meeting.error":"Fehler","meeting.elapsed":"Vergangen","meeting.memoPlaceholder":"Memo eingeben (Enter zum Hinzuf\xfcgen)","meeting.memoAdded":"Memo hinzugef\xfcgt","meeting.noSessions":"Keine Meeting-Aufnahmen","meeting.noSessionsDesc":"Dr\xfccke \xabNeues Meeting\xbb, um die Aufnahme zu starten","meeting.summary":"Zusammenfassung","meeting.decisions":"Beschl\xfcsse","meeting.actionItems":"Aufgaben","meeting.timeline":"Zeitlinie","meeting.transcript":"Rohtranskript","meeting.memos":"Memos","meeting.exportPdf":"Als PDF exportieren","meeting.exportMarkdown":"Als Markdown exportieren","meeting.delete":"L\xf6schen","meeting.deleteConfirm":"Diesen Meeting-Eintrag l\xf6schen?","meeting.backToList":"Zur\xfcck zur Liste","meeting.notificationTitle":"Protokoll fertig","meeting.notificationBody":"Das Meeting-Protokoll wurde erstellt.","meeting.sessions":"{{count}} Sitzungen","meeting.duration":"{{minutes}} Min.","meeting.editTitle":"Titel bearbeiten","meeting.untitled":"Meeting ohne Titel","meeting.processingStep.merging":"Transkript zusammenf\xfchren...","meeting.processingStep.generating":"Protokoll mit LLM erstellen...","meeting.processingStep.parsing":"Protokoll analysieren...","meeting.processingStep.saving":"Speichern...","meeting.processingStep.notifying":"Benachrichtigung senden...","meeting.transcriptTab":"Transkript","meeting.addDocument":"Dokument hinzuf\xfcgen","meeting.selectTemplate":"Vorlage ausw\xe4hlen","meeting.generate":"Generieren","meeting.generating":"Dokument wird generiert...","meeting.editMode":"Bearbeiten","meeting.previewMode":"Vorschau","meeting.modified":"Ge\xe4ndert","meeting.originalText":"Original","meeting.editedText":"Bearbeitet","meeting.exportDocx":"DOCX exportieren","meeting.exportTxt":"TXT exportieren","meeting.exportFormat":"Exportieren","meeting.customPrompt":"Benutzerdefinierter Prompt","meeting.templateName":"Vorlagenname","meeting.templatePrompt":"KI-Prompt","meeting.templateSave":"Vorlage speichern","meeting.documentDeleted":"Dokument gel\xf6scht","meeting.autoSaved":"Automatisch gespeichert","meeting.minutesTemplate":"Besprechungsprotokoll","meeting.reportTemplate":"Bericht","meeting.ideaNoteTemplate":"Ideennotiz","meeting.customTemplate":"Benutzerdefiniert","meeting.downloadTranscript":"Transkript herunterladen","meeting.polish":"KI Gl\xe4tten","meeting.polishing":"KI gl\xe4ttet Transkript...","meeting.polished":"KI Gl\xe4ttung abgeschlossen","meeting.mindmapTemplate":"Mindmap","meeting.chat":"KI-Chat","meeting.chatPlaceholder":"Fragen Sie zum Meeting...","meeting.chatSend":"Senden","meeting.chatClear":"Chat l\xf6schen","meeting.copyToClipboard":"In Zwischenablage kopieren","meeting.copied":"Kopiert","meeting.chatCollapse":"Chat einklappen","meeting.chatExpand":"Chat ausklappen","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"KI-Polierung fehlgeschlagen","meeting.viewDetailError":"Meeting-Details konnten nicht geladen werden","meeting.startRecordingError":"Aufnahme konnte nicht gestartet werden","meeting.diarize":"Sprecher trennen","meeting.diarizing":"Sprecher werden identifiziert...","meeting.diarizeComplete":"Sprechertrennung abgeschlossen","meeting.speaker":"Sprecher","settings.hfToken":"HuggingFace Token","settings.hfTokenHint":"Ein HuggingFace Token wird f\xfcr die Sprechertrennung ben\xf6tigt","settings.diarization":"Sprechertrennung","settings.diarizationHint":"Sprecher werden nach der Aufnahme automatisch identifiziert"}'),n=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"Assistente de voz com IA local","nav.dashboard":"Painel","nav.history":"Hist\xf3rico","nav.dictionary":"Dicion\xe1rio","nav.commands":"Comandos","nav.settings":"Configura\xe7\xf5es","dashboard.sessionOverview":"Vis\xe3o geral da sess\xe3o","dashboard.systemStatus":"Status do sistema","dashboard.sessionsToday":"Sess\xf5es hoje","dashboard.pressToRecord":"Pressione {{key}} para iniciar a grava\xe7\xe3o","dashboard.hotkeyNotSet":"Atalho n\xe3o configurado","dashboard.words":"palavras","dashboard.total":"total","dashboard.streak":"sequ\xeancia","dashboard.days":"dias","dashboard.recording":"gravando","dashboard.sessions":"sess\xf5es","dashboard.today":"hoje","dashboard.recentTranscriptions":"Transcri\xe7\xf5es recentes","dashboard.noHistory":"Sem hist\xf3rico — pressione o atalho para come\xe7ar a gravar","dashboard.copy":"Copiar","dashboard.entries":"{{count}} entradas","dashboard.stat":"estat\xedsticas","dashboard.sys":"sistema","history.title":"Hist\xf3rico de transcri\xe7\xf5es","history.search":"Pesquisar...","history.entries":"{{count}} entradas","history.loading":"Carregando...","history.noResults":"Sem resultados","history.noHistory":"Sem hist\xf3rico — comece a gravar","history.count":"{{count}} entradas","dictionary.title":"Dicion\xe1rio personalizado","dictionary.words":"{{count}} palavras","dictionary.add":"Adicionar","dictionary.search":"Pesquisar...","dictionary.loading":"Carregando...","dictionary.noResults":"Sem resultados","dictionary.noWords":"Sem palavras — adicione palavras personalizadas para melhorar a precis\xe3o do STT","dictionary.used":"usado {{count}} vezes","dictionary.editTitle":"Editar palavra","dictionary.addTitle":"Adicionar palavra","dictionary.word":"Palavra","dictionary.pronunciation":"Pron\xfancia (opcional)","commands.title":"Comandos LLM","commands.count":"{{count}} comandos","commands.add":"Adicionar","commands.activeCommand":"Comando ativo","commands.none":"Nenhum","commands.loading":"Carregando...","commands.noCommands":"Sem comandos — clique em adicionar para criar um","commands.editTitle":"Editar comando","commands.addTitle":"Adicionar comando","commands.name":"Nome","commands.description":"Descri\xe7\xe3o","commands.promptTemplate":"Modelo de prompt","commands.promptHelp":"{{text}} ser\xe1 substitu\xeddo pelo texto transcrito","commands.defaultPrompt":"Por favor, melhore {{text}}.","settings.title":"Configura\xe7\xf5es","settings.tabs.general":"Geral","settings.tabs.audio":"\xc1udio","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"Sobre","settings.shortcuts":"Atalhos","settings.dictation":"Ditado","settings.dictation.desc":"Mantenha pressionado para falar. A transcri\xe7\xe3o come\xe7a ao soltar.","settings.agent":"Modo agente","settings.agent.descWithKey":"Clique duas vezes em {{key}} para entrar no modo agente.","settings.agent.descNoKey":"Configure primeiro o atalho de ditado.","settings.oneTouch":"Modo de um toque","settings.oneTouch.desc":"Pressione para iniciar, pressione novamente para parar. Requer um atalho separado.","settings.key":"Tecla","settings.notSet":"N\xe3o configurado","settings.enabled":"Ativado","settings.disabled":"Desativado","settings.interface":"Interface","settings.theme":"Tema","settings.theme.system":"Sistema","settings.theme.light":"Claro","settings.theme.dark":"Escuro","settings.language":"Idioma","settings.appBehavior":"Comportamento do aplicativo","settings.closeToTray":"Minimizar para a bandeja","settings.autoLaunch":"Iniciar com o sistema","settings.autoInsert":"Inserir texto automaticamente ap\xf3s a transcri\xe7\xe3o","settings.soundEffects":"Efeitos sonoros","settings.microphone":"Microfone","settings.inputDevice":"Dispositivo de entrada","settings.deviceDefault":"(padr\xe3o)","settings.textInsert":"Inser\xe7\xe3o de texto","settings.insertMethod":"M\xe9todo de inser\xe7\xe3o","settings.insertClipboard":"\xc1rea de transfer\xeancia (Ctrl+V)","settings.insertKeyboard":"Digita\xe7\xe3o pelo teclado","settings.whisperModel":"Modelo Whisper","settings.model.tiny":"tiny (39 MB, mais r\xe1pido)","settings.model.base":"base (74 MB, equilibrado)","settings.model.small":"small (244 MB, bom)","settings.model.medium":"medium (769 MB, muito bom)","settings.model.large":"large-v3 (1,5 GB, melhor)","settings.sttLanguage":"Idioma de reconhecimento","settings.sttLang.auto":"Detec\xe7\xe3o autom\xe1tica","settings.ollamaServer":"Servidor Ollama","settings.ollamaUrl":"URL do servidor Ollama","settings.ollamaHint":"D3RO Voice conecta-se automaticamente quando o Ollama est\xe1 em execu\xe7\xe3o. Baixe modelos diretamente pelo Ollama (ex: ollama pull qwen3:4b).","settings.postProcess":"P\xf3s-processamento de voz","settings.defaultAction":"A\xe7\xe3o de p\xf3s-processamento padr\xe3o","settings.action.none":"Nenhuma (texto original sem altera\xe7\xf5es)","settings.action.refine":"Refinar (gram\xe1tica + naturalidade)","settings.action.translate":"Traduzir","settings.action.summarize":"Resumir","settings.action.grammar":"Corre\xe7\xe3o gramatical","settings.action.custom":"Prompt personalizado","settings.actionHint":"O p\xf3s-processamento LLM selecionado \xe9 aplicado ao texto transcrito ap\xf3s gravar com o atalho. S\xf3 funciona quando o Ollama est\xe1 conectado.","settings.about.version":"Vers\xe3o","settings.about.techStack":"Stack tecnol\xf3gico","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"Motor de voz","settings.about.voiceEngineValue":"STT: faster-whisper (local) / LLM: Ollama (local)","settings.about.description":"Assistente de voz com IA totalmente local, baseado em engenharia reversa do Speakly. Funciona sem depend\xeancias de nuvem.","settings.about.restartOnboarding":"Ver guia de configura\xe7\xe3o inicial novamente","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama n\xe3o est\xe1 em execu\xe7\xe3o","status.nudge.desc":"O Ollama \xe9 necess\xe1rio para o p\xf3s-processamento LLM (tradu\xe7\xe3o, resumo, etc.).","status.nudge.guide":"Ver guia de instala\xe7\xe3o →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"Sem digitar, por voz. Seu assistente de voz com IA local.","onboarding.welcome.start":"Come\xe7ar","onboarding.mic.title":"Configurar microfone","onboarding.mic.desc":"Selecione o microfone que deseja usar. Voc\xea pode alter\xe1-lo depois nas configura\xe7\xf5es.","onboarding.hotkey.title":"Configurar atalho","onboarding.hotkey.desc":"Configure o atalho de ditado. A grava\xe7\xe3o continua enquanto voc\xea mantiver a tecla pressionada.","onboarding.hotkey.notSet":"Nenhum atalho configurado","onboarding.hotkey.change":"Alterar atalho","onboarding.hotkey.set":"Configurar atalho","onboarding.ollama.title":"Instalar Ollama (opcional)","onboarding.ollama.desc":"O Ollama \xe9 necess\xe1rio para p\xf3s-processamento LLM como tradu\xe7\xe3o ou resumo. O ditado de voz funciona sem o Ollama.","onboarding.ollama.download":"Baixar Ollama","onboarding.ollama.modelHint":"Ap\xf3s instalar, baixe um modelo pelo terminal","onboarding.done.title":"Configura\xe7\xe3o conclu\xedda!","onboarding.done.descWithKey":"Mantenha {{key}} pressionado e fale para converter sua voz em texto.","onboarding.done.descNoKey":"Configure um atalho nas configura\xe7\xf5es para come\xe7ar a ditar.","onboarding.done.start":"Come\xe7ar","onboarding.back":"Voltar","onboarding.next":"Pr\xf3ximo","hotkey.title":"Configurar atalho","hotkey.dictationTitle":"Configurar atalho de ditado","hotkey.oneTouchTitle":"Configurar atalho do modo de um toque","hotkey.prompt":"Pressione uma combina\xe7\xe3o de teclas...","hotkey.ready":"✓ {{keys}} — pressione salvar","hotkey.noKey":"Por favor, insira uma tecla","hotkey.reserved":"{{keys}} \xe9 um atalho reservado pelo sistema","hotkey.current":"Atual: {{keys}}","hotkey.hint":"Insira uma combina\xe7\xe3o (ex: Ctrl+Shift+Q) ou uma tecla \xfanica (ex: F5)","hotkey.reset":"Inserir novamente","ollama.title":"GUIA DE CONFIGURA\xc7\xc3O DO OLLAMA","ollama.step1.title":"PASSO 1 — Instalar o Ollama","ollama.step1.desc":"O Ollama \xe9 uma ferramenta gratuita para executar LLMs localmente.","ollama.step2.title":"PASSO 2 — Baixar um modelo","ollama.step2.desc":"Execute o seguinte comando no terminal para baixar o modelo recomendado:","ollama.step2.alt":"Ou um modelo maior: ollama pull qwen3:8b (mais preciso, mais lento)","ollama.step3.title":"PASSO 3 — Conex\xe3o autom\xe1tica","ollama.step3.desc":"D3RO-VOICE detecta automaticamente quando o Ollama est\xe1 em execu\xe7\xe3o. Quando o LED da barra de status mudar de vermelho para verde, est\xe1 pronto!","service.sttEngine":"MOTOR STT","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"ATALHO DE TECLADO","service.audioInput":"ENTRADA DE \xc1UDIO","service.ready":"PRONTO","service.connected":"CONECTADO","service.offline":"OFFLINE","service.active":"ATIVO","service.standby":"EM ESPERA","common.cancel":"Cancelar","common.save":"Salvar","common.delete":"Excluir","common.add":"Adicionar","common.edit":"Editar","common.close":"Fechar","common.confirm":"Confirmar","common.loading":"Carregando...","common.copy":"Copiar","common.test":"Testar","common.stop":"Parar","date.today":"Hoje","date.yesterday":"Ontem","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"Coreano","settings.sttLang.en":"Ingl\xeas","settings.sttLang.ja":"Japon\xeas","settings.sttLang.zh":"Chin\xeas","template.outputHelperText":"Use {{nomeCampo}} para marcadores de posi\xe7\xe3o","nav.meeting":"Reuni\xe3o","meeting.title":"Modo Reuni\xe3o","meeting.newMeeting":"Nova Reuni\xe3o","meeting.startRecording":"Iniciar Grava\xe7\xe3o","meeting.stopRecording":"Parar Grava\xe7\xe3o","meeting.recording":"Gravando","meeting.processing":"Gerando ata...","meeting.completed":"Conclu\xeddo","meeting.error":"Erro","meeting.elapsed":"Tempo decorrido","meeting.memoPlaceholder":"Digite um memo (Enter para adicionar)","meeting.memoAdded":"Memo adicionado","meeting.noSessions":"Nenhuma grava\xe7\xe3o de reuni\xe3o","meeting.noSessionsDesc":"Pressione Nova Reuni\xe3o para come\xe7ar a gravar","meeting.summary":"Resumo","meeting.decisions":"Decis\xf5es","meeting.actionItems":"Itens de a\xe7\xe3o","meeting.timeline":"Linha do tempo","meeting.transcript":"Transcri\xe7\xe3o bruta","meeting.memos":"Memos","meeting.exportPdf":"Exportar PDF","meeting.exportMarkdown":"Exportar Markdown","meeting.delete":"Excluir","meeting.deleteConfirm":"Excluir este registro de reuni\xe3o?","meeting.backToList":"Voltar \xe0 lista","meeting.notificationTitle":"Ata pronta","meeting.notificationBody":"A ata da reuni\xe3o foi gerada.","meeting.sessions":"{{count}} sess\xf5es","meeting.duration":"{{minutes}} min","meeting.editTitle":"Editar t\xedtulo","meeting.untitled":"Reuni\xe3o sem t\xedtulo","meeting.processingStep.merging":"Mesclando transcri\xe7\xe3o...","meeting.processingStep.generating":"Gerando ata com LLM...","meeting.processingStep.parsing":"Analisando ata...","meeting.processingStep.saving":"Salvando...","meeting.processingStep.notifying":"Enviando notifica\xe7\xe3o...","meeting.transcriptTab":"Transcri\xe7\xe3o","meeting.addDocument":"Adicionar documento","meeting.selectTemplate":"Selecionar modelo","meeting.generate":"Gerar","meeting.generating":"Gerando documento...","meeting.editMode":"Editar","meeting.previewMode":"Visualizar","meeting.modified":"Modificado","meeting.originalText":"Original","meeting.editedText":"Editado","meeting.exportDocx":"Exportar DOCX","meeting.exportTxt":"Exportar TXT","meeting.exportFormat":"Exportar","meeting.customPrompt":"Prompt personalizado","meeting.templateName":"Nome do modelo","meeting.templatePrompt":"Prompt de IA","meeting.templateSave":"Salvar modelo","meeting.documentDeleted":"Documento exclu\xeddo","meeting.autoSaved":"Salvo automaticamente","meeting.minutesTemplate":"Ata de reuni\xe3o","meeting.reportTemplate":"Relat\xf3rio","meeting.ideaNoteTemplate":"Nota de ideias","meeting.customTemplate":"Personalizado","meeting.downloadTranscript":"Baixar transcri\xe7\xe3o","meeting.polish":"Polir com IA","meeting.polishing":"IA est\xe1 polindo a transcri\xe7\xe3o...","meeting.polished":"Polimento IA conclu\xeddo","meeting.mindmapTemplate":"Mapa mental","meeting.chat":"Chat IA","meeting.chatPlaceholder":"Pergunte sobre a reuni\xe3o...","meeting.chatSend":"Enviar","meeting.chatClear":"Limpar chat","meeting.copyToClipboard":"Copiar para \xe1rea de transfer\xeancia","meeting.copied":"Copiado","meeting.chatCollapse":"Recolher chat","meeting.chatExpand":"Expandir chat","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"Falha no polimento de IA","meeting.viewDetailError":"Falha ao carregar detalhes da reuni\xe3o","meeting.startRecordingError":"Falha ao iniciar grava\xe7\xe3o","meeting.diarize":"Identificar oradores","meeting.diarizing":"Identificando oradores...","meeting.diarizeComplete":"Identifica\xe7\xe3o conclu\xedda","meeting.speaker":"Orador","settings.hfToken":"Token do HuggingFace","settings.hfTokenHint":"Um token do HuggingFace \xe9 necess\xe1rio para identificar oradores","settings.diarization":"Identifica\xe7\xe3o de oradores","settings.diarizationHint":"Identifica automaticamente os oradores ap\xf3s o t\xe9rmino da grava\xe7\xe3o"}'),o=JSON.parse('{"app.name":"D3RO Voice","app.tagline":"Локальный голосовой ИИ-ассистент","nav.dashboard":"Панель","nav.history":"История","nav.dictionary":"Словарь","nav.commands":"Команды","nav.settings":"Настройки","dashboard.sessionOverview":"Обзор сессий","dashboard.systemStatus":"Состояние системы","dashboard.sessionsToday":"Сессий сегодня","dashboard.pressToRecord":"Нажмите {{key}} для начала записи","dashboard.hotkeyNotSet":"Горячая клавиша не задана","dashboard.words":"Слова","dashboard.total":"Всего","dashboard.streak":"Серия","dashboard.days":"дн.","dashboard.recording":"Запись","dashboard.sessions":"Сессии","dashboard.today":"Сегодня","dashboard.recentTranscriptions":"Последние транскрипции","dashboard.noHistory":"История пуста — нажмите горячую клавишу для начала записи","dashboard.copy":"Копировать","dashboard.entries":"{{count}} записей","dashboard.stat":"Статистика","dashboard.sys":"Система","history.title":"История транскрипций","history.search":"Поиск...","history.entries":"{{count}} записей","history.loading":"Загрузка...","history.noResults":"Результаты не найдены","history.noHistory":"История пуста — начните запись","history.count":"{{count}} записей","dictionary.title":"Пользовательский словарь","dictionary.words":"{{count}} слов","dictionary.add":"Добавить","dictionary.search":"Поиск...","dictionary.loading":"Загрузка...","dictionary.noResults":"Результаты не найдены","dictionary.noWords":"Слов нет — добавьте собственные слова для улучшения точности STT","dictionary.used":"Использовано {{count}} раз","dictionary.editTitle":"Редактировать слово","dictionary.addTitle":"Добавить слово","dictionary.word":"Слово","dictionary.pronunciation":"Произношение (необязательно)","commands.title":"Команды LLM","commands.count":"{{count}} шт.","commands.add":"Добавить","commands.activeCommand":"Активная команда","commands.none":"Нет","commands.loading":"Загрузка...","commands.noCommands":"Команд нет — нажмите \xabДобавить\xbb для создания","commands.editTitle":"Редактировать команду","commands.addTitle":"Добавить команду","commands.name":"Название","commands.description":"Описание","commands.promptTemplate":"Шаблон промпта","commands.promptHelp":"{{text}} будет заменено на транскрибированный текст","commands.defaultPrompt":"Пожалуйста, улучшите {{text}}.","settings.title":"Настройки","settings.tabs.general":"Общие","settings.tabs.audio":"Аудио","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"О программе","settings.shortcuts":"Горячие клавиши","settings.dictation":"Диктовка","settings.dictation.desc":"Говорите, удерживая клавишу. Отпустите для начала транскрипции.","settings.agent":"Режим агента","settings.agent.descWithKey":"Дважды нажмите {{key}} для перехода в режим агента.","settings.agent.descNoKey":"Сначала задайте горячую клавишу диктовки.","settings.oneTouch":"Режим одного нажатия","settings.oneTouch.desc":"Нажмите для начала, нажмите снова для остановки. Требуется отдельная горячая клавиша.","settings.key":"Клавиша","settings.notSet":"Не задано","settings.enabled":"Включено","settings.disabled":"Выключено","settings.interface":"Интерфейс","settings.theme":"Тема","settings.theme.system":"Системная","settings.theme.light":"Светлая","settings.theme.dark":"Тёмная","settings.language":"Язык","settings.appBehavior":"Поведение приложения","settings.closeToTray":"Сворачивать в трей","settings.autoLaunch":"Автозапуск при старте системы","settings.autoInsert":"Автоматически вставлять текст после транскрипции","settings.soundEffects":"Звуковые эффекты","settings.microphone":"Микрофон","settings.inputDevice":"Устройство ввода","settings.deviceDefault":"(По умолчанию)","settings.textInsert":"Вставка текста","settings.insertMethod":"Метод вставки","settings.insertClipboard":"Буфер обмена (Ctrl+V)","settings.insertKeyboard":"Эмуляция клавиатуры","settings.whisperModel":"Модель Whisper","settings.model.tiny":"tiny (39 МБ, самая быстрая)","settings.model.base":"base (74 МБ, баланс)","settings.model.small":"small (244 МБ, хорошая)","settings.model.medium":"medium (769 МБ, отличная)","settings.model.large":"large-v3 (1.5 ГБ, лучшая)","settings.sttLanguage":"Язык распознавания","settings.sttLang.auto":"Автоопределение","settings.ollamaServer":"Сервер Ollama","settings.ollamaUrl":"URL сервера Ollama","settings.ollamaHint":"Если Ollama запущена, подключение произойдёт автоматически. Загружайте модели напрямую через Ollama (например: ollama pull qwen3:4b).","settings.postProcess":"Постобработка речи","settings.defaultAction":"Команда постобработки по умолчанию","settings.action.none":"Нет (оригинальный текст)","settings.action.refine":"Улучшить (грамматика + естественность)","settings.action.translate":"Перевести","settings.action.summarize":"Резюмировать","settings.action.grammar":"Исправить грамматику","settings.action.custom":"Пользовательский промпт","settings.actionHint":"После записи и транскрипции к тексту будет применена выбранная постобработка LLM. Работает только при подключённом Ollama.","settings.about.version":"Версия","settings.about.techStack":"Технический стек","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"Голосовой движок","settings.about.voiceEngineValue":"STT: faster-whisper (локально) / LLM: Ollama (локально)","settings.about.description":"Локальный голосовой ИИ-ассистент, основанный на методах обратной разработки Speakly. Работает полностью локально без зависимости от облачных сервисов.","settings.about.restartOnboarding":"Показать начальную настройку снова","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama не запущена","status.nudge.desc":"Для постобработки LLM (перевод, резюмирование и т.д.) требуется Ollama.","status.nudge.guide":"Смотреть инструкцию по установке →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"Без набора текста — только голос. Локальный голосовой ИИ-ассистент.","onboarding.welcome.start":"Начать","onboarding.mic.title":"Настройка микрофона","onboarding.mic.desc":"Выберите микрофон. Его можно изменить позже в настройках.","onboarding.hotkey.title":"Настройка горячей клавиши","onboarding.hotkey.desc":"Задайте горячую клавишу для диктовки. Удерживайте её для записи.","onboarding.hotkey.notSet":"Горячая клавиша не задана","onboarding.hotkey.change":"Изменить горячую клавишу","onboarding.hotkey.set":"Задать горячую клавишу","onboarding.ollama.title":"Установка Ollama (необязательно)","onboarding.ollama.desc":"Для постобработки LLM (перевод, резюмирование и т.д.) требуется Ollama. Голосовая диктовка работает и без неё.","onboarding.ollama.download":"Скачать Ollama","onboarding.ollama.modelHint":"После установки загрузите модель через терминал","onboarding.done.title":"Настройка завершена!","onboarding.done.descWithKey":"Удерживайте {{key}} и говорите — речь будет преобразована в текст.","onboarding.done.descNoKey":"Задайте горячую клавишу в настройках, чтобы начать голосовую диктовку.","onboarding.done.start":"Начать","onboarding.back":"Назад","onboarding.next":"Далее","hotkey.title":"Настройка горячей клавиши","hotkey.dictationTitle":"Задать горячую клавишу диктовки","hotkey.oneTouchTitle":"Задать горячую клавишу режима одного нажатия","hotkey.prompt":"Нажмите сочетание клавиш...","hotkey.ready":"✓ {{keys}} — нажмите \xabСохранить\xbb","hotkey.noKey":"Введите клавишу","hotkey.reserved":"{{keys}} является зарезервированным сочетанием системы","hotkey.current":"Текущее: {{keys}}","hotkey.hint":"Введите сочетание клавиш (например: Ctrl+Shift+Q) или одну клавишу (например: F5)","hotkey.reset":"Ввести снова","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"ШАГ 1 — Установка Ollama","ollama.step1.desc":"Ollama — бесплатный инструмент для локального запуска LLM.","ollama.step2.title":"ШАГ 2 — Загрузка модели","ollama.step2.desc":"Загрузите нужную модель через терминал. Рекомендуется:","ollama.step2.alt":"Или более крупная модель: ollama pull qwen3:8b (точнее, медленнее)","ollama.step3.title":"ШАГ 3 — Автоподключение","ollama.step3.desc":"При запуске Ollama D3RO-VOICE обнаружит её автоматически. Когда индикатор LED на нижней панели сменится с красного на зелёный — готово!","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"Отмена","common.save":"Сохранить","common.delete":"Удалить","common.add":"Добавить","common.edit":"Изменить","common.close":"Закрыть","common.confirm":"Подтвердить","common.loading":"Загрузка...","common.copy":"Копировать","common.test":"Тест","common.stop":"Стоп","date.today":"Сегодня","date.yesterday":"Вчера","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"Корейский","settings.sttLang.en":"Английский","settings.sttLang.ja":"Японский","settings.sttLang.zh":"Китайский","template.outputHelperText":"Используйте {{имяПоля}} для заполнителей","nav.meeting":"Совещание","meeting.title":"Режим совещания","meeting.newMeeting":"Новое совещание","meeting.startRecording":"Начать запись","meeting.stopRecording":"Остановить запись","meeting.recording":"Запись","meeting.processing":"Создание протокола...","meeting.completed":"Завершено","meeting.error":"Ошибка","meeting.elapsed":"Прошло","meeting.memoPlaceholder":"Введите заметку (Enter для добавления)","meeting.memoAdded":"Заметка добавлена","meeting.noSessions":"Нет записей совещаний","meeting.noSessionsDesc":"Нажмите \xabНовое совещание\xbb, чтобы начать запись","meeting.summary":"Сводка","meeting.decisions":"Решения","meeting.actionItems":"Задачи","meeting.timeline":"Хронология","meeting.transcript":"Исходная расшифровка","meeting.memos":"Заметки","meeting.exportPdf":"Экспорт в PDF","meeting.exportMarkdown":"Экспорт в Markdown","meeting.delete":"Удалить","meeting.deleteConfirm":"Удалить эту запись совещания?","meeting.backToList":"Вернуться к списку","meeting.notificationTitle":"Протокол готов","meeting.notificationBody":"Протокол совещания сформирован.","meeting.sessions":"{{count}} сессий","meeting.duration":"{{minutes}} мин","meeting.editTitle":"Изменить название","meeting.untitled":"Совещание без названия","meeting.processingStep.merging":"Объединение расшифровки...","meeting.processingStep.generating":"Создание протокола с помощью LLM...","meeting.processingStep.parsing":"Разбор протокола...","meeting.processingStep.saving":"Сохранение...","meeting.processingStep.notifying":"Отправка уведомления...","meeting.transcriptTab":"Транскрипция","meeting.addDocument":"Добавить документ","meeting.selectTemplate":"Выбрать шаблон","meeting.generate":"Создать","meeting.generating":"Создание документа...","meeting.editMode":"Редактировать","meeting.previewMode":"Предпросмотр","meeting.modified":"Изменено","meeting.originalText":"Оригинал","meeting.editedText":"Отредактировано","meeting.exportDocx":"Экспорт DOCX","meeting.exportTxt":"Экспорт TXT","meeting.exportFormat":"Экспорт","meeting.customPrompt":"Пользовательский запрос","meeting.templateName":"Название шаблона","meeting.templatePrompt":"ИИ-запрос","meeting.templateSave":"Сохранить шаблон","meeting.documentDeleted":"Документ удалён","meeting.autoSaved":"Автосохранение","meeting.minutesTemplate":"Протокол встречи","meeting.reportTemplate":"Отчёт","meeting.ideaNoteTemplate":"Заметка с идеями","meeting.customTemplate":"Пользовательский","meeting.downloadTranscript":"Скачать транскрипцию","meeting.polish":"Улучшить с ИИ","meeting.polishing":"ИИ улучшает транскрипцию...","meeting.polished":"Улучшение ИИ завершено","meeting.mindmapTemplate":"Карта мыслей","meeting.chat":"ИИ Чат","meeting.chatPlaceholder":"Задайте вопрос о встрече...","meeting.chatSend":"Отправить","meeting.chatClear":"Очистить чат","meeting.copyToClipboard":"Копировать в буфер обмена","meeting.copied":"Скопировано","meeting.chatCollapse":"Свернуть чат","meeting.chatExpand":"Развернуть чат","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"Ошибка ИИ-полировки","meeting.viewDetailError":"Не удалось загрузить детали встречи","meeting.startRecordingError":"Не удалось начать запись","meeting.diarize":"Определить говорящих","meeting.diarizing":"Определение говорящих...","meeting.diarizeComplete":"Определение завершено","meeting.speaker":"Говорящий","settings.hfToken":"Токен HuggingFace","settings.hfTokenHint":"Токен HuggingFace необходим для определения говорящих","settings.diarization":"Диаризация","settings.diarizationHint":"Автоматически определять говорящих после завершения записи"}'),p={ko:f,en:g,ja:h,zh:i,"zh-TW":j,es:k,fr:l,de:m,pt:n,ru:o,vi:JSON.parse('{"app.name":"D3RO Voice","app.tagline":"Trợ l\xfd giọng n\xf3i AI cục bộ","nav.dashboard":"Bảng điều khiển","nav.history":"Lịch sử","nav.dictionary":"Từ điển","nav.commands":"Lệnh","nav.settings":"C\xe0i đặt","dashboard.sessionOverview":"Tổng quan phi\xean","dashboard.systemStatus":"Trạng th\xe1i hệ thống","dashboard.sessionsToday":"Phi\xean h\xf4m nay","dashboard.pressToRecord":"Nhấn {{key}} để bắt đầu ghi \xe2m","dashboard.hotkeyNotSet":"Chưa đặt ph\xedm tắt","dashboard.words":"Từ","dashboard.total":"Tổng","dashboard.streak":"Chuỗi","dashboard.days":"ng\xe0y","dashboard.recording":"Đang ghi","dashboard.sessions":"Phi\xean","dashboard.today":"H\xf4m nay","dashboard.recentTranscriptions":"Phi\xean \xe2m gần đ\xe2y","dashboard.noHistory":"Chưa c\xf3 lịch sử — nhấn ph\xedm tắt để bắt đầu ghi \xe2m","dashboard.copy":"Sao ch\xe9p","dashboard.entries":"{{count}} mục","dashboard.stat":"Thống k\xea","dashboard.sys":"Hệ thống","history.title":"Lịch sử phi\xean \xe2m","history.search":"T\xecm kiếm...","history.entries":"{{count}} mục","history.loading":"Đang tải...","history.noResults":"Kh\xf4ng t\xecm thấy kết quả","history.noHistory":"Chưa c\xf3 lịch sử — h\xe3y bắt đầu ghi \xe2m","history.count":"{{count}} mục","dictionary.title":"Từ điển t\xf9y chỉnh","dictionary.words":"{{count}} từ","dictionary.add":"Th\xeam","dictionary.search":"T\xecm kiếm...","dictionary.loading":"Đang tải...","dictionary.noResults":"Kh\xf4ng t\xecm thấy kết quả","dictionary.noWords":"Chưa c\xf3 từ — th\xeam từ t\xf9y chỉnh để cải thiện độ ch\xednh x\xe1c STT","dictionary.used":"Đ\xe3 d\xf9ng {{count}} lần","dictionary.editTitle":"Chỉnh sửa từ","dictionary.addTitle":"Th\xeam từ","dictionary.word":"Từ","dictionary.pronunciation":"Ph\xe1t \xe2m (t\xf9y chọn)","commands.title":"Lệnh LLM","commands.count":"{{count}} lệnh","commands.add":"Th\xeam","commands.activeCommand":"Lệnh đang hoạt động","commands.none":"Kh\xf4ng c\xf3","commands.loading":"Đang tải...","commands.noCommands":"Chưa c\xf3 lệnh — nhấn Th\xeam để tạo","commands.editTitle":"Chỉnh sửa lệnh","commands.addTitle":"Th\xeam lệnh","commands.name":"T\xean","commands.description":"M\xf4 tả","commands.promptTemplate":"Mẫu prompt","commands.promptHelp":"{{text}} sẽ được thay thế bằng văn bản phi\xean \xe2m","commands.defaultPrompt":"Vui l\xf2ng cải thiện {{text}}.","settings.title":"C\xe0i đặt","settings.tabs.general":"Chung","settings.tabs.audio":"\xc2m thanh","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"Giới thiệu","settings.shortcuts":"Ph\xedm tắt","settings.dictation":"Ch\xednh tả","settings.dictation.desc":"Giữ ph\xedm v\xe0 n\xf3i. Thả ph\xedm để bắt đầu phi\xean \xe2m.","settings.agent":"Chế độ Agent","settings.agent.descWithKey":"Nhấn đ\xfap {{key}} để v\xe0o chế độ Agent.","settings.agent.descNoKey":"Vui l\xf2ng đặt ph\xedm tắt ch\xednh tả trước.","settings.oneTouch":"Chế độ một chạm","settings.oneTouch.desc":"Nhấn để bắt đầu, nhấn lại để dừng. Cần ph\xedm tắt ri\xeang.","settings.key":"Ph\xedm","settings.notSet":"Chưa đặt","settings.enabled":"Đ\xe3 bật","settings.disabled":"Đ\xe3 tắt","settings.interface":"Giao diện","settings.theme":"Giao diện","settings.theme.system":"Hệ thống","settings.theme.light":"S\xe1ng","settings.theme.dark":"Tối","settings.language":"Ng\xf4n ngữ","settings.appBehavior":"H\xe0nh vi ứng dụng","settings.closeToTray":"Thu nhỏ xuống khay hệ thống","settings.autoLaunch":"Tự động khởi động c\xf9ng hệ thống","settings.autoInsert":"Tự động ch\xe8n văn bản sau khi phi\xean \xe2m","settings.soundEffects":"Hiệu ứng \xe2m thanh","settings.microphone":"Micr\xf4","settings.inputDevice":"Thiết bị đầu v\xe0o","settings.deviceDefault":"(Mặc định)","settings.textInsert":"Ch\xe8n văn bản","settings.insertMethod":"Phương thức ch\xe8n","settings.insertClipboard":"Bộ nhớ tạm (Ctrl+V)","settings.insertKeyboard":"Giả lập b\xe0n ph\xedm","settings.whisperModel":"M\xf4 h\xecnh Whisper","settings.model.tiny":"tiny (39 MB, nhanh nhất)","settings.model.base":"base (74 MB, c\xe2n bằng)","settings.model.small":"small (244 MB, tốt)","settings.model.medium":"medium (769 MB, xuất sắc)","settings.model.large":"large-v3 (1.5 GB, tốt nhất)","settings.sttLanguage":"Ng\xf4n ngữ nhận dạng","settings.sttLang.auto":"Tự động ph\xe1t hiện","settings.ollamaServer":"M\xe1y chủ Ollama","settings.ollamaUrl":"URL m\xe1y chủ Ollama","settings.ollamaHint":"Nếu Ollama đang chạy, kết nối sẽ tự động. Tải m\xf4 h\xecnh trực tiếp từ Ollama (v\xed dụ: ollama pull qwen3:4b).","settings.postProcess":"Hậu xử l\xfd giọng n\xf3i","settings.defaultAction":"Lệnh hậu xử l\xfd mặc định","settings.action.none":"Kh\xf4ng c\xf3 (văn bản gốc)","settings.action.refine":"Cải thiện (ngữ ph\xe1p + tự nhi\xean)","settings.action.translate":"Dịch","settings.action.summarize":"T\xf3m tắt","settings.action.grammar":"Sửa ngữ ph\xe1p","settings.action.custom":"Prompt t\xf9y chỉnh","settings.actionHint":"Hậu xử l\xfd LLM đ\xe3 chọn sẽ được \xe1p dụng cho văn bản phi\xean \xe2m sau khi ghi \xe2m. Chỉ hoạt động khi Ollama được kết nối.","settings.about.version":"Phi\xean bản","settings.about.techStack":"Ngăn xếp c\xf4ng nghệ","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"Bộ m\xe1y giọng n\xf3i","settings.about.voiceEngineValue":"STT: faster-whisper (cục bộ) / LLM: Ollama (cục bộ)","settings.about.description":"Trợ l\xfd giọng n\xf3i AI cục bộ dựa tr\xean kỹ thuật dịch ngược Speakly. Hoạt động ho\xe0n to\xe0n cục bộ, kh\xf4ng phụ thuộc v\xe0o dịch vụ đ\xe1m m\xe2y.","settings.about.restartOnboarding":"Xem lại hướng dẫn c\xe0i đặt ban đầu","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama chưa chạy","status.nudge.desc":"Cần Ollama để sử dụng hậu xử l\xfd LLM (dịch, t\xf3m tắt, v.v.).","status.nudge.guide":"Xem hướng dẫn c\xe0i đặt →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"Kh\xf4ng cần g\xf5 ph\xedm — chỉ cần n\xf3i. Trợ l\xfd giọng n\xf3i AI cục bộ.","onboarding.welcome.start":"Bắt đầu","onboarding.mic.title":"C\xe0i đặt micr\xf4","onboarding.mic.desc":"Chọn micr\xf4 bạn muốn d\xf9ng. C\xf3 thể thay đổi sau trong c\xe0i đặt.","onboarding.hotkey.title":"C\xe0i đặt ph\xedm tắt","onboarding.hotkey.desc":"Đặt ph\xedm tắt ch\xednh tả. Giữ ph\xedm trong khi ghi \xe2m.","onboarding.hotkey.notSet":"Ph\xedm tắt chưa được đặt","onboarding.hotkey.change":"Thay đổi ph\xedm tắt","onboarding.hotkey.set":"Đặt ph\xedm tắt","onboarding.ollama.title":"C\xe0i đặt Ollama (t\xf9y chọn)","onboarding.ollama.desc":"Cần Ollama để sử dụng hậu xử l\xfd LLM (dịch, t\xf3m tắt, v.v.). Ch\xednh tả giọng n\xf3i vẫn hoạt động m\xe0 kh\xf4ng cần Ollama.","onboarding.ollama.download":"Tải Ollama","onboarding.ollama.modelHint":"Sau khi c\xe0i đặt, tải m\xf4 h\xecnh qua terminal","onboarding.done.title":"Thiết lập ho\xe0n tất!","onboarding.done.descWithKey":"Giữ ph\xedm {{key}} v\xe0 n\xf3i — giọng n\xf3i sẽ được chuyển th\xe0nh văn bản.","onboarding.done.descNoKey":"Đặt ph\xedm tắt trong c\xe0i đặt để bắt đầu ch\xednh tả giọng n\xf3i.","onboarding.done.start":"Bắt đầu","onboarding.back":"Quay lại","onboarding.next":"Tiếp theo","hotkey.title":"C\xe0i đặt ph\xedm tắt","hotkey.dictationTitle":"Đặt ph\xedm tắt ch\xednh tả","hotkey.oneTouchTitle":"Đặt ph\xedm tắt chế độ một chạm","hotkey.prompt":"Nhấn tổ hợp ph\xedm...","hotkey.ready":"✓ {{keys}} — h\xe3y nhấn Lưu","hotkey.noKey":"Vui l\xf2ng nhập ph\xedm","hotkey.reserved":"{{keys}} l\xe0 ph\xedm tắt hệ thống được d\xe0nh ri\xeang","hotkey.current":"Hiện tại: {{keys}}","hotkey.hint":"Nhập tổ hợp ph\xedm (v\xed dụ: Ctrl+Shift+Q) hoặc ph\xedm đơn (v\xed dụ: F5)","hotkey.reset":"Nhập lại","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"BƯỚC 1 — C\xe0i đặt Ollama","ollama.step1.desc":"Ollama l\xe0 c\xf4ng cụ miễn ph\xed để chạy LLM cục bộ.","ollama.step2.title":"BƯỚC 2 — Tải m\xf4 h\xecnh","ollama.step2.desc":"Tải m\xf4 h\xecnh bạn muốn qua terminal. Khuyến nghị:","ollama.step2.alt":"Hoặc m\xf4 h\xecnh lớn hơn: ollama pull qwen3:8b (ch\xednh x\xe1c hơn, chậm hơn)","ollama.step3.title":"BƯỚC 3 — Tự động kết nối","ollama.step3.desc":"Khi Ollama chạy, D3RO-VOICE sẽ tự động ph\xe1t hiện. Khi đ\xe8n LED tr\xean thanh trạng th\xe1i chuyển từ đỏ sang xanh — đ\xe3 sẵn s\xe0ng!","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"Hủy","common.save":"Lưu","common.delete":"X\xf3a","common.add":"Th\xeam","common.edit":"Chỉnh sửa","common.close":"Đ\xf3ng","common.confirm":"X\xe1c nhận","common.loading":"Đang tải...","common.copy":"Sao ch\xe9p","common.test":"Kiểm tra","common.stop":"Dừng","date.today":"H\xf4m nay","date.yesterday":"H\xf4m qua","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"Tiếng H\xe0n","settings.sttLang.en":"Tiếng Anh","settings.sttLang.ja":"Tiếng Nhật","settings.sttLang.zh":"Tiếng Trung","template.outputHelperText":"Sử dụng {{t\xeanTrường}} cho tr\xecnh giữ chỗ","nav.meeting":"Cuộc họp","meeting.title":"Chế độ Cuộc họp","meeting.newMeeting":"Cuộc họp mới","meeting.startRecording":"Bắt đầu ghi \xe2m","meeting.stopRecording":"Dừng ghi \xe2m","meeting.recording":"Đang ghi \xe2m","meeting.processing":"Đang tạo bi\xean bản...","meeting.completed":"Ho\xe0n th\xe0nh","meeting.error":"Lỗi","meeting.elapsed":"Thời gian đ\xe3 qua","meeting.memoPlaceholder":"Nhập ghi ch\xfa (Enter để th\xeam)","meeting.memoAdded":"Đ\xe3 th\xeam ghi ch\xfa","meeting.noSessions":"Kh\xf4ng c\xf3 bản ghi cuộc họp","meeting.noSessionsDesc":"Nhấn \xabCuộc họp mới\xbb để bắt đầu ghi \xe2m","meeting.summary":"T\xf3m tắt","meeting.decisions":"Quyết định","meeting.actionItems":"H\xe0nh động cần thực hiện","meeting.timeline":"D\xf2ng thời gian","meeting.transcript":"Bản ghi th\xf4","meeting.memos":"Ghi ch\xfa","meeting.exportPdf":"Xuất PDF","meeting.exportMarkdown":"Xuất Markdown","meeting.delete":"X\xf3a","meeting.deleteConfirm":"X\xf3a bản ghi cuộc họp n\xe0y?","meeting.backToList":"Quay lại danh s\xe1ch","meeting.notificationTitle":"Bi\xean bản đ\xe3 sẵn s\xe0ng","meeting.notificationBody":"Bi\xean bản cuộc họp đ\xe3 được tạo.","meeting.sessions":"{{count}} phi\xean","meeting.duration":"{{minutes}} ph\xfat","meeting.editTitle":"Chỉnh sửa ti\xeau đề","meeting.untitled":"Cuộc họp kh\xf4ng c\xf3 ti\xeau đề","meeting.processingStep.merging":"Đang gh\xe9p bản ghi...","meeting.processingStep.generating":"Đang tạo bi\xean bản với LLM...","meeting.processingStep.parsing":"Đang ph\xe2n t\xedch bi\xean bản...","meeting.processingStep.saving":"Đang lưu...","meeting.processingStep.notifying":"Đang gửi th\xf4ng b\xe1o...","meeting.transcriptTab":"Bản ghi","meeting.addDocument":"Th\xeam t\xe0i liệu","meeting.selectTemplate":"Chọn mẫu","meeting.generate":"Tạo","meeting.generating":"Đang tạo t\xe0i liệu...","meeting.editMode":"Chỉnh sửa","meeting.previewMode":"Xem trước","meeting.modified":"Đ\xe3 chỉnh sửa","meeting.originalText":"Bản gốc","meeting.editedText":"Đ\xe3 chỉnh sửa","meeting.exportDocx":"Xuất DOCX","meeting.exportTxt":"Xuất TXT","meeting.exportFormat":"Xuất","meeting.customPrompt":"Lệnh t\xf9y chỉnh","meeting.templateName":"T\xean mẫu","meeting.templatePrompt":"Lệnh AI","meeting.templateSave":"Lưu mẫu","meeting.documentDeleted":"Đ\xe3 x\xf3a t\xe0i liệu","meeting.autoSaved":"Đ\xe3 lưu tự động","meeting.minutesTemplate":"Bi\xean bản họp","meeting.reportTemplate":"B\xe1o c\xe1o","meeting.ideaNoteTemplate":"Ghi ch\xfa \xfd tưởng","meeting.customTemplate":"T\xf9y chỉnh","meeting.downloadTranscript":"Tải bản ghi","meeting.polish":"Tinh chỉnh bằng AI","meeting.polishing":"AI đang tinh chỉnh bản ghi...","meeting.polished":"Tinh chỉnh AI ho\xe0n tất","meeting.mindmapTemplate":"Sơ đồ tư duy","meeting.chat":"Chat AI","meeting.chatPlaceholder":"Hỏi về cuộc họp...","meeting.chatSend":"Gửi","meeting.chatClear":"X\xf3a chat","meeting.copyToClipboard":"Sao ch\xe9p v\xe0o bộ nhớ tạm","meeting.copied":"Đ\xe3 sao ch\xe9p","meeting.chatCollapse":"Thu gọn chat","meeting.chatExpand":"Mở rộng chat","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"AI đ\xe1nh b\xf3ng thất bại","meeting.viewDetailError":"Kh\xf4ng thể tải chi tiết cuộc họp","meeting.startRecordingError":"Kh\xf4ng thể bắt đầu ghi \xe2m","meeting.diarize":"Ph\xe2n t\xe1ch người n\xf3i","meeting.diarizing":"Đang nhận dạng người n\xf3i...","meeting.diarizeComplete":"Ph\xe2n t\xe1ch người n\xf3i ho\xe0n tất","meeting.speaker":"Người n\xf3i","settings.hfToken":"Token HuggingFace","settings.hfTokenHint":"Cần token HuggingFace để ph\xe2n t\xe1ch người n\xf3i","settings.diarization":"Ph\xe2n t\xe1ch người n\xf3i","settings.diarizationHint":"Tự động nhận dạng người n\xf3i sau khi ghi \xe2m kết th\xfac"}'),th:JSON.parse('{"app.name":"D3RO Voice","app.tagline":"ผู้ช่วยเสียง AI ในเครื่อง","nav.dashboard":"แดชบอร์ด","nav.history":"ประวัติ","nav.dictionary":"พจนานุกรม","nav.commands":"คำสั่ง","nav.settings":"การตั้งค่า","dashboard.sessionOverview":"ภาพรวมเซสชัน","dashboard.systemStatus":"สถานะระบบ","dashboard.sessionsToday":"เซสชันวันนี้","dashboard.pressToRecord":"กด {{key}} เพื่อเริ่มบันทึก","dashboard.hotkeyNotSet":"ยังไม่ได้ตั้งค่าปุ่มลัด","dashboard.words":"คำ","dashboard.total":"ทั้งหมด","dashboard.streak":"ต่อเนื่อง","dashboard.days":"วัน","dashboard.recording":"กำลังบันทึก","dashboard.sessions":"เซสชัน","dashboard.today":"วันนี้","dashboard.recentTranscriptions":"การถอดความล่าสุด","dashboard.noHistory":"ไม่มีประวัติ — กดปุ่มลัดเพื่อเริ่มบันทึก","dashboard.copy":"คัดลอก","dashboard.entries":"{{count}} รายการ","dashboard.stat":"สถิติ","dashboard.sys":"ระบบ","history.title":"ประวัติการถอดความ","history.search":"ค้นหา...","history.entries":"{{count}} รายการ","history.loading":"กำลังโหลด...","history.noResults":"ไม่พบผลลัพธ์","history.noHistory":"ไม่มีประวัติ — เริ่มบันทึกเสียง","history.count":"{{count}} รายการ","dictionary.title":"พจนานุกรมที่กำหนดเอง","dictionary.words":"{{count}} คำ","dictionary.add":"เพิ่ม","dictionary.search":"ค้นหา...","dictionary.loading":"กำลังโหลด...","dictionary.noResults":"ไม่พบผลลัพธ์","dictionary.noWords":"ไม่มีคำ — เพิ่มคำที่กำหนดเองเพื่อเพิ่มความแม่นยำของ STT","dictionary.used":"ใช้แล้ว {{count}} ครั้ง","dictionary.editTitle":"แก้ไขคำ","dictionary.addTitle":"เพิ่มคำ","dictionary.word":"คำ","dictionary.pronunciation":"การออกเสียง (ไม่บังคับ)","commands.title":"คำสั่ง LLM","commands.count":"{{count}} รายการ","commands.add":"เพิ่ม","commands.activeCommand":"คำสั่งที่ใช้งานอยู่","commands.none":"ไม่มี","commands.loading":"กำลังโหลด...","commands.noCommands":"ไม่มีคำสั่ง — คลิกเพิ่มเพื่อสร้าง","commands.editTitle":"แก้ไขคำสั่ง","commands.addTitle":"เพิ่มคำสั่ง","commands.name":"ชื่อ","commands.description":"คำอธิบาย","commands.promptTemplate":"เทมเพลตพรอมต์","commands.promptHelp":"{{text}} จะถูกแทนที่ด้วยข้อความที่ถอดความ","commands.defaultPrompt":"กรุณาปรับปรุง {{text}}","settings.title":"การตั้งค่า","settings.tabs.general":"ทั่วไป","settings.tabs.audio":"เสียง","settings.tabs.stt":"STT","settings.tabs.llm":"LLM","settings.tabs.about":"เกี่ยวกับ","settings.shortcuts":"ปุ่มลัด","settings.dictation":"การบอกเล่า","settings.dictation.desc":"กดค้างไว้แล้วพูด เมื่อปล่อยจะเริ่มถอดความ","settings.agent":"โหมด Agent","settings.agent.descWithKey":"กด {{key}} สองครั้งเพื่อเข้าสู่โหมด Agent","settings.agent.descNoKey":"กรุณาตั้งค่าปุ่มลัดการบอกเล่าก่อน","settings.oneTouch":"โหมดสัมผัสเดียว","settings.oneTouch.desc":"กดเพื่อเริ่ม กดอีกครั้งเพื่อหยุด ต้องใช้ปุ่มลัดแยกต่างหาก","settings.key":"ปุ่ม","settings.notSet":"ยังไม่ได้ตั้งค่า","settings.enabled":"เปิดใช้งาน","settings.disabled":"ปิดใช้งาน","settings.interface":"อินเทอร์เฟซ","settings.theme":"ธีม","settings.theme.system":"ระบบ","settings.theme.light":"สว่าง","settings.theme.dark":"มืด","settings.language":"ภาษา","settings.appBehavior":"พฤติกรรมแอป","settings.closeToTray":"ย่อลงถาดระบบ","settings.autoLaunch":"เปิดอัตโนมัติเมื่อเริ่มระบบ","settings.autoInsert":"แทรกข้อความอัตโนมัติหลังถอดความ","settings.soundEffects":"เอฟเฟกต์เสียง","settings.microphone":"ไมโครโฟน","settings.inputDevice":"อุปกรณ์อินพุต","settings.deviceDefault":"(ค่าเริ่มต้น)","settings.textInsert":"การแทรกข้อความ","settings.insertMethod":"วิธีการแทรก","settings.insertClipboard":"คลิปบอร์ด (Ctrl+V)","settings.insertKeyboard":"จำลองการพิมพ์","settings.whisperModel":"โมเดล Whisper","settings.model.tiny":"tiny (39 MB, เร็วที่สุด)","settings.model.base":"base (74 MB, สมดุล)","settings.model.small":"small (244 MB, ดี)","settings.model.medium":"medium (769 MB, ดีเยี่ยม)","settings.model.large":"large-v3 (1.5 GB, ดีที่สุด)","settings.sttLanguage":"ภาษาที่รู้จัก","settings.sttLang.auto":"ตรวจจับอัตโนมัติ","settings.ollamaServer":"เซิร์ฟเวอร์ Ollama","settings.ollamaUrl":"URL เซิร์ฟเวอร์ Ollama","settings.ollamaHint":"หาก Ollama กำลังทำงาน จะเชื่อมต่ออัตโนมัติ ดาวน์โหลดโมเดลโดยตรงจาก Ollama (เช่น: ollama pull qwen3:4b)","settings.postProcess":"การประมวลผลเสียงหลังการบันทึก","settings.defaultAction":"คำสั่งประมวลผลเริ่มต้น","settings.action.none":"ไม่มี (ข้อความต้นฉบับ)","settings.action.refine":"ปรับปรุง (ไวยากรณ์ + ความเป็นธรรมชาติ)","settings.action.translate":"แปล","settings.action.summarize":"สรุป","settings.action.grammar":"แก้ไขไวยากรณ์","settings.action.custom":"พรอมต์ที่กำหนดเอง","settings.actionHint":"การประมวลผล LLM ที่เลือกจะถูกนำไปใช้กับข้อความที่ถอดความหลังจากบันทึก ทำงานเฉพาะเมื่อเชื่อมต่อ Ollama","settings.about.version":"เวอร์ชัน","settings.about.techStack":"เทคโนโลยีที่ใช้","settings.about.techStackValue":"Electron + React 19 + MUI 7 + TypeScript","settings.about.voiceEngine":"เอนจิ้นเสียง","settings.about.voiceEngineValue":"STT: faster-whisper (ในเครื่อง) / LLM: Ollama (ในเครื่อง)","settings.about.description":"ผู้ช่วยเสียง AI ในเครื่องที่พัฒนาจากความรู้การวิศวกรรมย้อนกลับ Speakly ทำงานได้อย่างสมบูรณ์ในเครื่องโดยไม่พึ่งพาบริการคลาวด์","settings.about.restartOnboarding":"ดูคู่มือการตั้งค่าเริ่มต้นอีกครั้ง","status.ollama":"OLLAMA","status.offline":"OFFLINE","status.nudge.title":"Ollama ยังไม่ได้ทำงาน","status.nudge.desc":"ต้องใช้ Ollama สำหรับการประมวลผล LLM (แปล สรุป ฯลฯ)","status.nudge.guide":"ดูคำแนะนำการติดตั้ง →","onboarding.welcome.title":"D3RO-VOICE","onboarding.welcome.desc":"ไม่ต้องพิมพ์ — แค่พูด ผู้ช่วยเสียง AI ในเครื่อง","onboarding.welcome.start":"เริ่มต้น","onboarding.mic.title":"การตั้งค่าไมโครโฟน","onboarding.mic.desc":"เลือกไมโครโฟนที่ต้องการใช้ สามารถเปลี่ยนได้ในการตั้งค่า","onboarding.hotkey.title":"การตั้งค่าปุ่มลัด","onboarding.hotkey.desc":"ตั้งค่าปุ่มลัดสำหรับการบอกเล่า กดค้างไว้ขณะบันทึก","onboarding.hotkey.notSet":"ยังไม่ได้ตั้งค่าปุ่มลัด","onboarding.hotkey.change":"เปลี่ยนปุ่มลัด","onboarding.hotkey.set":"ตั้งค่าปุ่มลัด","onboarding.ollama.title":"ติดตั้ง Ollama (ไม่บังคับ)","onboarding.ollama.desc":"ต้องใช้ Ollama สำหรับการประมวลผล LLM (แปล สรุป ฯลฯ) การบอกเล่าเสียงทำงานได้โดยไม่มี Ollama","onboarding.ollama.download":"ดาวน์โหลด Ollama","onboarding.ollama.modelHint":"หลังติดตั้ง ดาวน์โหลดโมเดลผ่านเทอร์มินัล","onboarding.done.title":"ตั้งค่าเสร็จสมบูรณ์!","onboarding.done.descWithKey":"กด {{key}} ค้างไว้แล้วพูด — เสียงจะถูกแปลงเป็นข้อความ","onboarding.done.descNoKey":"ตั้งค่าปุ่มลัดในการตั้งค่าเพื่อเริ่มการบอกเล่าเสียง","onboarding.done.start":"เริ่มต้น","onboarding.back":"ย้อนกลับ","onboarding.next":"ถัดไป","hotkey.title":"การตั้งค่าปุ่มลัด","hotkey.dictationTitle":"ตั้งค่าปุ่มลัดการบอกเล่า","hotkey.oneTouchTitle":"ตั้งค่าปุ่มลัดโหมดสัมผัสเดียว","hotkey.prompt":"กดปุ่มที่ต้องการ...","hotkey.ready":"✓ {{keys}} — กดบันทึก","hotkey.noKey":"กรุณากรอกปุ่ม","hotkey.reserved":"{{keys}} เป็นปุ่มลัดที่ระบบสงวนไว้","hotkey.current":"ปัจจุบัน: {{keys}}","hotkey.hint":"กรอกปุ่มลัด (เช่น: Ctrl+Shift+Q) หรือปุ่มเดี่ยว (เช่น: F5)","hotkey.reset":"กรอกใหม่","ollama.title":"OLLAMA SETUP GUIDE","ollama.step1.title":"ขั้นตอนที่ 1 — ติดตั้ง Ollama","ollama.step1.desc":"Ollama เป็นเครื่องมือฟรีสำหรับรัน LLM ในเครื่อง","ollama.step2.title":"ขั้นตอนที่ 2 — ดาวน์โหลดโมเดล","ollama.step2.desc":"ดาวน์โหลดโมเดลที่ต้องการผ่านเทอร์มินัล แนะนำ:","ollama.step2.alt":"หรือโมเดลที่ใหญ่กว่า: ollama pull qwen3:8b (แม่นยำกว่า ช้ากว่า)","ollama.step3.title":"ขั้นตอนที่ 3 — เชื่อมต่ออัตโนมัติ","ollama.step3.desc":"เมื่อ Ollama ทำงาน D3RO-VOICE จะตรวจพบโดยอัตโนมัติ เมื่อไฟ LED บนแถบสถานะเปลี่ยนจากสีแดงเป็นสีเขียว — พร้อมใช้งาน!","service.sttEngine":"STT ENGINE","service.ollamaLlm":"OLLAMA LLM","service.hotkeyHook":"HOTKEY HOOK","service.audioInput":"AUDIO INPUT","service.ready":"READY","service.connected":"CONNECTED","service.offline":"OFFLINE","service.active":"ACTIVE","service.standby":"STANDBY","common.cancel":"ยกเลิก","common.save":"บันทึก","common.delete":"ลบ","common.add":"เพิ่ม","common.edit":"แก้ไข","common.close":"ปิด","common.confirm":"ยืนยัน","common.loading":"กำลังโหลด...","common.copy":"คัดลอก","common.test":"ทดสอบ","common.stop":"หยุด","date.today":"วันนี้","date.yesterday":"เมื่อวาน","settings.theme.nord":"Nord","settings.theme.solarized":"Solarized","settings.theme.catppuccin":"Catppuccin","settings.theme.dracula":"Dracula","settings.sttLang.ko":"เกาหลี","settings.sttLang.en":"อังกฤษ","settings.sttLang.ja":"ญี่ปุ่น","settings.sttLang.zh":"จีน","template.outputHelperText":"ใช้ {{ชื่อฟิลด์}} สำหรับตัวยึดตำแหน่ง","nav.meeting":"การประชุม","meeting.title":"โหมดการประชุม","meeting.newMeeting":"การประชุมใหม่","meeting.startRecording":"เริ่มบันทึก","meeting.stopRecording":"หยุดบันทึก","meeting.recording":"กำลังบันทึก","meeting.processing":"กำลังสร้างรายงานการประชุม...","meeting.completed":"เสร็จสิ้น","meeting.error":"ข้อผิดพลาด","meeting.elapsed":"เวลาที่ผ่านไป","meeting.memoPlaceholder":"พิมพ์บันทึก (Enter เพื่อเพิ่ม)","meeting.memoAdded":"เพิ่มบันทึกแล้ว","meeting.noSessions":"ไม่มีการบันทึกการประชุม","meeting.noSessionsDesc":"กด \xabการประชุมใหม่\xbb เพื่อเริ่มบันทึก","meeting.summary":"สรุป","meeting.decisions":"การตัดสินใจ","meeting.actionItems":"รายการดำเนินการ","meeting.timeline":"ไทม์ไลน์","meeting.transcript":"ถอดความดิบ","meeting.memos":"บันทึก","meeting.exportPdf":"ส่งออก PDF","meeting.exportMarkdown":"ส่งออก Markdown","meeting.delete":"ลบ","meeting.deleteConfirm":"ลบรายงานการประชุมนี้?","meeting.backToList":"กลับไปยังรายการ","meeting.notificationTitle":"รายงานการประชุมพร้อมแล้ว","meeting.notificationBody":"สร้างรายงานการประชุมเสร็จแล้ว","meeting.sessions":"{{count}} เซสชัน","meeting.duration":"{{minutes}} นาที","meeting.editTitle":"แก้ไขชื่อ","meeting.untitled":"การประชุมที่ไม่มีชื่อ","meeting.processingStep.merging":"กำลังรวมการถอดความ...","meeting.processingStep.generating":"กำลังสร้างรายงานด้วย LLM...","meeting.processingStep.parsing":"กำลังวิเคราะห์รายงาน...","meeting.processingStep.saving":"กำลังบันทึก...","meeting.processingStep.notifying":"กำลังส่งการแจ้งเตือน...","meeting.transcriptTab":"การถอดความ","meeting.addDocument":"เพิ่มเอกสาร","meeting.selectTemplate":"เลือกแม่แบบ","meeting.generate":"สร้าง","meeting.generating":"กำลังสร้างเอกสาร...","meeting.editMode":"แก้ไข","meeting.previewMode":"ดูตัวอย่าง","meeting.modified":"แก้ไขแล้ว","meeting.originalText":"ต้นฉบับ","meeting.editedText":"แก้ไขแล้ว","meeting.exportDocx":"ส่งออก DOCX","meeting.exportTxt":"ส่งออก TXT","meeting.exportFormat":"ส่งออก","meeting.customPrompt":"พรอมต์กำหนดเอง","meeting.templateName":"ชื่อแม่แบบ","meeting.templatePrompt":"พรอมต์ AI","meeting.templateSave":"บันทึกแม่แบบ","meeting.documentDeleted":"ลบเอกสารแล้ว","meeting.autoSaved":"บันทึกอัตโนมัติ","meeting.minutesTemplate":"รายงานการประชุม","meeting.reportTemplate":"รายงาน","meeting.ideaNoteTemplate":"บันทึกไอเดีย","meeting.customTemplate":"กำหนดเอง","meeting.downloadTranscript":"ดาวน์โหลดการถอดความ","meeting.polish":"ปรับแต่งด้วย AI","meeting.polishing":"AI กำลังปรับแต่งการถอดความ...","meeting.polished":"ปรับแต่งด้วย AI เสร็จสิ้น","meeting.mindmapTemplate":"แผนที่ความคิด","meeting.chat":"แชท AI","meeting.chatPlaceholder":"ถามเกี่ยวกับการประชุม...","meeting.chatSend":"ส่ง","meeting.chatClear":"ล้างแชท","meeting.copyToClipboard":"คัดลอกไปยังคลิปบอร์ด","meeting.copied":"คัดลอกแล้ว","meeting.chatCollapse":"ยุบแชท","meeting.chatExpand":"ขยายแชท","meeting.exportMd":"Markdown (.md)","meeting.exportPdfFmt":"PDF (.pdf)","meeting.polishFailed":"AI ปรับแต่งล้มเหลว","meeting.viewDetailError":"ไม่สามารถโหลดรายละเอียดการประชุมได้","meeting.startRecordingError":"ไม่สามารถเริ่มการบันทึกได้","meeting.diarize":"แยกผู้พูด","meeting.diarizing":"กำลังระบุผู้พูด...","meeting.diarizeComplete":"แยกผู้พูดเสร็จสิ้น","meeting.speaker":"ผู้พูด","settings.hfToken":"โทเค็น HuggingFace","settings.hfTokenHint":"ต้องใช้โทเค็น HuggingFace สำหรับการแยกผู้พูด","settings.diarization":"การแยกผู้พูด","settings.diarizationHint":"ระบุผู้พูดโดยอัตโนมัติหลังจากการบันทึกสิ้นสุด"}')};function q(a){return({zh:"zh-CN","zh-TW":"zh-TW"})[a]??a}let r=(0,e.createContext)(null),s={load:()=>null,save:()=>{}};function t({initialLocale:a="ko",storage:b=s,children:c}){let[h,i]=(0,e.useState)(a),j=(0,e.useCallback)(a=>{i(a),b.save(a)},[b]),k=(0,e.useMemo)(()=>{let a=p[h]??f,b=(b,c)=>(function(a,b,c){let d=b[a]??g[a]??f[a]??a;if(c)for(let[a,b]of Object.entries(c))d=d.replaceAll(`{{${a}}}`,String(b));return d})(b,a,c);return{locale:h,t:b,setLocale:j,formatDate:function(a){let b=q(a);return(a,c)=>{let d="number"==typeof a?new Date(a):a;return new Intl.DateTimeFormat(b,c).format(d)}}(h),formatNumber:function(a){let b=q(a);return(a,c)=>new Intl.NumberFormat(b,c).format(a)}(h),formatRelativeDate:a=>{let c=new Date(a);c.setHours(0,0,0,0);let d=new Date;d.setHours(0,0,0,0);let e=new Date(d);if(e.setDate(e.getDate()-1),c.getTime()===d.getTime())return b("date.today");if(c.getTime()===e.getTime())return b("date.yesterday");let f=q(h);return new Intl.DateTimeFormat(f,{month:"short",day:"numeric"}).format(c).toUpperCase()},formatTime:function(a){let b=q(a);return a=>new Intl.DateTimeFormat(b,{hour:"2-digit",minute:"2-digit"}).format(new Date(a))}(h)}},[h,j]);return(0,d.jsx)(r.Provider,{value:k,children:c})}function u(){let a=(0,e.useContext)(r);if(!a)throw Error("useI18n must be used within <I18nProvider>");return a}},90724:(a,b,c)=>{"use strict";c.d(b,{I18nProvider:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call I18nProvider() from the server but I18nProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\workspace\\voice\\apps\\web\\src\\components\\providers\\i18n-provider.tsx","I18nProvider")}};