feat(V2-1d): packages/i18n 추출 — Electron 독립 i18n 엔진
packages/i18n (@d3ro/i18n) 신규:
- src/locales/ 12개 JSON (ko/en/ja/zh/zh-TW/es/fr/de/pt/ru/vi/th)
- src/index.tsx: TFunction/Locale/LOCALE_META/resolveTranslation/
포맷 유틸(createFormatDate/Number/RelativeDate/Time)/
I18nContext/useI18n/I18nProvider
Electron 독립성 확보 (monorepo 원칙 준수):
- I18nStorage interface 신설 (load/save 어댑터 추상화)
- window.electronAPI.config 직접 호출 제거
- I18nProvider는 storage prop으로 영속화 어댑터 주입
- 기본값 noopStorage (메모리 한정, 세션 범위)
- 결과: packages/i18n은 React에만 의존, web/mobile에서 재사용 가능
apps/desktop 어댑터:
- App.tsx에 electronI18nStorage 구현 (config.get/set 래핑)
- <I18nProvider storage={electronI18nStorage}>로 주입
apps/desktop 설정:
- package.json: @d3ro/i18n '*' dep 추가
- tsconfig.node/web.json paths에 @d3ro/i18n 추가
- electron.vite.config.ts alias + externalize exclude 추가
- vitest.config.ts alias 추가
일괄 치환 (29 파일):
- ./i18n, ../i18n, ../../i18n → @d3ro/i18n
apps/desktop/src/renderer/i18n/ 디렉토리 완전 제거.
검증: typecheck + build + dev 런타임 모두 통과.
Phase V2-1 전체 완료 (a/b/c/d).
This commit is contained in:
parent
a041f1b6a9
commit
3524e958ba
51 changed files with 175 additions and 66 deletions
|
|
@ -4,10 +4,11 @@ import react from '@vitejs/plugin-react'
|
|||
|
||||
const sharedAlias = {
|
||||
'@d3ro/core': resolve(__dirname, '../../packages/core/src'),
|
||||
'@d3ro/ui': resolve(__dirname, '../../packages/ui/src')
|
||||
'@d3ro/ui': resolve(__dirname, '../../packages/ui/src'),
|
||||
'@d3ro/i18n': resolve(__dirname, '../../packages/i18n/src/index.tsx')
|
||||
}
|
||||
|
||||
const workspaceExclude = ['@d3ro/core', '@d3ro/ui']
|
||||
const workspaceExclude = ['@d3ro/core', '@d3ro/ui', '@d3ro/i18n']
|
||||
|
||||
export default defineConfig({
|
||||
main: {
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@d3ro/core": "*",
|
||||
"@d3ro/i18n": "*",
|
||||
"@d3ro/ui": "*",
|
||||
"@electron-toolkit/preload": "^3.0.2",
|
||||
"@electron-toolkit/utils": "^4.0.0",
|
||||
|
|
|
|||
|
|
@ -5,12 +5,23 @@
|
|||
import { useState, useEffect, useMemo, useRef } from 'react'
|
||||
import { ThemeProvider, CssBaseline, useMediaQuery } from '@mui/material'
|
||||
import { getTheme } from '@d3ro/ui/theme'
|
||||
import { I18nProvider } from './i18n'
|
||||
import { I18nProvider, type I18nStorage, type Locale } from '@d3ro/i18n'
|
||||
import { AppLayout } from './components/AppLayout'
|
||||
import { UpgradePromptModal } from './components/UpgradePromptModal'
|
||||
import { startSystemAudioCapture, stopSystemAudioCapture } from './utils/systemAudioCapture'
|
||||
import type { ThemeMode, ConfigChangedEvent } from '@d3ro/core/types'
|
||||
|
||||
// Electron ConfigService에 바인딩된 i18n 영속화 어댑터
|
||||
const electronI18nStorage: I18nStorage = {
|
||||
load: async () => {
|
||||
const result = await window.electronAPI.config.get({ key: 'language' })
|
||||
return result.success && result.data ? (result.data as string) : null
|
||||
},
|
||||
save: (locale: Locale) => {
|
||||
window.electronAPI.config.set({ key: 'language', value: locale })
|
||||
}
|
||||
}
|
||||
|
||||
export function App(): React.ReactElement {
|
||||
const [themeMode, setThemeMode] = useState<ThemeMode>('auto')
|
||||
const prefersDark = useMediaQuery('(prefers-color-scheme: dark)')
|
||||
|
|
@ -60,7 +71,7 @@ export function App(): React.ReactElement {
|
|||
const theme = useMemo(() => getTheme(themeMode, prefersDark), [themeMode, prefersDark])
|
||||
|
||||
return (
|
||||
<I18nProvider>
|
||||
<I18nProvider storage={electronI18nStorage}>
|
||||
<ThemeProvider theme={theme}>
|
||||
<CssBaseline />
|
||||
<AppLayout />
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ import { LicenseModal } from './LicenseModal'
|
|||
import { OnboardingModal } from './OnboardingModal'
|
||||
import { StatusBar } from './StatusBar'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roShadow, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import type { TranslationKey } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { TranslationKey } from '@d3ro/i18n'
|
||||
import type { LicenseTier } from '@d3ro/core/types'
|
||||
|
||||
type Route = 'dashboard' | 'history' | 'dictionary' | 'commands' | 'conversation' | 'knowledge' | 'meeting'
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import CloseIcon from '@mui/icons-material/Close'
|
|||
import UploadFileIcon from '@mui/icons-material/UploadFile'
|
||||
import { MetalCard, PhosphorText, Led } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type {
|
||||
FileTranscriptionProgress,
|
||||
FileTranscriptionResult,
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import {
|
|||
Typography,
|
||||
} from '@mui/material'
|
||||
import { d3roPalette } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { HotkeyBinding } from '@d3ro/core/types'
|
||||
|
||||
// ── 키 이름 매핑 (Windows) ──────────────────────────────
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import CheckCircleIcon from '@mui/icons-material/CheckCircle'
|
|||
import CancelIcon from '@mui/icons-material/Cancel'
|
||||
import { MetalCard, PhosphorText, Led, ScreenPanel, PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { LicenseInfo, LicenseTier, TierComparison, UsageQuota } from '@d3ro/core/types'
|
||||
|
||||
interface LicenseModalProps {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import {
|
|||
import CheckCircleIcon from '@mui/icons-material/CheckCircle'
|
||||
import CancelIcon from '@mui/icons-material/Cancel'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type {
|
||||
LicenseInfo,
|
||||
LicenseTier,
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import OpenInNewIcon from '@mui/icons-material/OpenInNew'
|
|||
import ContentCopyIcon from '@mui/icons-material/ContentCopy'
|
||||
import { d3roPalette, d3roFontMono, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { Led } from '@d3ro/ui/components/ds'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
|
||||
interface OllamaGuideModalProps {
|
||||
open: boolean
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import OpenInNewIcon from '@mui/icons-material/OpenInNew'
|
|||
import { d3roPalette, d3roFontMono, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { Led } from '@d3ro/ui/components/ds'
|
||||
import { HotkeyRecordModal } from './HotkeyRecordModal'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { HotkeyBinding, AudioDevice } from '@d3ro/core/types'
|
||||
|
||||
interface OnboardingModalProps {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { Box, Typography } from '@mui/material'
|
|||
import LockIcon from '@mui/icons-material/Lock'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useProFeature } from '../hooks/useProFeature'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { Feature } from '@d3ro/core/types'
|
||||
|
||||
interface ProBadgeProps {
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ import CancelIcon from '@mui/icons-material/Cancel'
|
|||
import { d3roPalette, d3roFontMono, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { HotkeyRecordModal } from './HotkeyRecordModal'
|
||||
import { LicenseTab } from './LicenseTab'
|
||||
import { useI18n, LOCALE_META } from '../i18n'
|
||||
import type { Locale } from '../i18n'
|
||||
import { useI18n, LOCALE_META } from '@d3ro/i18n'
|
||||
import type { Locale } from '@d3ro/i18n'
|
||||
import type { ThemeMode, AppConfig, HotkeyBinding, AudioDevice } from '@d3ro/core/types'
|
||||
import { Feature } from '@d3ro/core/types'
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import CloseIcon from '@mui/icons-material/Close'
|
|||
import { Led } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roShadow, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { OllamaGuideModal } from './OllamaGuideModal'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { LLMStatus } from '@d3ro/core/types'
|
||||
|
||||
export function StatusBar(): React.ReactElement {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import PlayArrowIcon from '@mui/icons-material/PlayArrow'
|
|||
import { MetalCard, PhosphorText, Led, PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { PageHeader, EmptyStateCard } from './shared'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { DictationTemplate, TemplateField, TemplateSessionInfo } from '@d3ro/core/types'
|
||||
|
||||
export function TemplateSection(): React.ReactElement {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import {
|
|||
import LockIcon from '@mui/icons-material/Lock'
|
||||
import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { UpgradePromptEvent, UsageQuota } from '@d3ro/core/types'
|
||||
|
||||
export function UpgradePromptModal(): React.ReactElement {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import { MetalCard } from '@d3ro/ui/components/ds'
|
|||
import { PhosphorText } from '@d3ro/ui/components/ds'
|
||||
import { PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
|
||||
interface TemplateItem {
|
||||
id: string
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { MarkdownEditor } from './MarkdownEditor'
|
|||
import { ExportMenu } from './ExportMenu'
|
||||
import { PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { MeetingExportFormat } from '@d3ro/core/types'
|
||||
|
||||
interface DocumentTabDoc {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
import { useState, useRef, useCallback } from 'react'
|
||||
import { Box, TextField, Tooltip, Chip } from '@mui/material'
|
||||
import { d3roPalette, d3roFontMono } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
|
||||
// Phase 15.5: 화자별 색상 매핑 (d3roPalette SSOT)
|
||||
const SPEAKER_COLORS = [
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { Menu, MenuItem } from '@mui/material'
|
|||
import FileDownloadIcon from '@mui/icons-material/FileDownload'
|
||||
import { PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roTypo, d3roFontMono, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { MeetingExportFormat } from '@d3ro/core/types'
|
||||
|
||||
interface ExportMenuProps {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { Box } from '@mui/material'
|
|||
import { MarkdownRenderer } from './MarkdownRenderer'
|
||||
import { PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roShadow, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
|
||||
interface MarkdownEditorProps {
|
||||
content: string
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
|
|||
import { PhosphorText } from '@d3ro/ui/components/ds'
|
||||
import { PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { MeetingChatMessage } from '@d3ro/core/types'
|
||||
|
||||
interface MeetingChatPanelProps {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import { AddDocumentDialog } from './AddDocumentDialog'
|
|||
import { MeetingChatPanel } from './MeetingChatPanel'
|
||||
import { PhosphorText } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type {
|
||||
MeetingSessionDetail,
|
||||
MeetingDocument,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { EditableSegment } from './EditableSegment'
|
|||
import { PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { PhosphorText } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import FileDownloadIcon from '@mui/icons-material/FileDownload'
|
||||
import AutoFixHighIcon from '@mui/icons-material/AutoFixHigh'
|
||||
import RecordVoiceOverIcon from '@mui/icons-material/RecordVoiceOver'
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import SummarizeIcon from '@mui/icons-material/Summarize'
|
|||
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
|
||||
import { MetalCard, Led } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import { formatDuration } from '../../utils/formatters'
|
||||
import type { HistoryEntry, MemoTag, MeetingSummaryResult } from '@d3ro/core/types'
|
||||
|
||||
|
|
|
|||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"app.name": "D3RO Voice",
|
||||
"app.tagline": "Lokaler KI-Sprachassistent",
|
||||
"nav.dashboard": "Dashboard",
|
||||
"nav.history": "Verlauf",
|
||||
"nav.dictionary": "Wörterbuch",
|
||||
"nav.commands": "Befehle",
|
||||
"nav.settings": "Einstellungen",
|
||||
"dashboard.sessionOverview": "Sitzungsübersicht",
|
||||
"dashboard.systemStatus": "Systemstatus",
|
||||
"dashboard.sessionsToday": "Sitzungen heute",
|
||||
"dashboard.pressToRecord": "Drücke {{key}}, um die Aufnahme zu starten",
|
||||
"dashboard.hotkeyNotSet": "Tastenkürzel nicht festgelegt",
|
||||
"dashboard.words": "Wörter",
|
||||
"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ücke das Tastenkürzel, um die Aufnahme zu starten",
|
||||
"dashboard.copy": "Kopieren",
|
||||
"dashboard.entries": "{{count}} Einträge",
|
||||
"dashboard.stat": "Statistiken",
|
||||
"dashboard.sys": "System",
|
||||
"history.title": "Transkriptionsverlauf",
|
||||
"history.search": "Suchen...",
|
||||
"history.entries": "{{count}} Einträge",
|
||||
"history.loading": "Laden...",
|
||||
"history.noResults": "Keine Ergebnisse",
|
||||
"history.noHistory": "Kein Verlauf — starte eine Aufnahme",
|
||||
"history.count": "{{count}} Einträge",
|
||||
"dictionary.title": "Benutzerwörterbuch",
|
||||
"dictionary.words": "{{count}} Wörter",
|
||||
"dictionary.add": "Hinzufügen",
|
||||
"dictionary.search": "Suchen...",
|
||||
"dictionary.loading": "Laden...",
|
||||
"dictionary.noResults": "Keine Ergebnisse",
|
||||
"dictionary.noWords": "Keine Wörter — füge benutzerdefinierte Wörter hinzu, um die STT-Genauigkeit zu verbessern",
|
||||
"dictionary.used": "{{count}} Mal verwendet",
|
||||
"dictionary.editTitle": "Wort bearbeiten",
|
||||
"dictionary.addTitle": "Wort hinzufügen",
|
||||
"dictionary.word": "Wort",
|
||||
"dictionary.pronunciation": "Aussprache (optional)",
|
||||
"commands.title": "LLM-Befehle",
|
||||
"commands.count": "{{count}} Befehle",
|
||||
"commands.add": "Hinzufügen",
|
||||
"commands.activeCommand": "Aktiver Befehl",
|
||||
"commands.none": "Keiner",
|
||||
"commands.loading": "Laden...",
|
||||
"commands.noCommands": "Keine Befehle — klicke auf Hinzufügen, um einen zu erstellen",
|
||||
"commands.editTitle": "Befehl bearbeiten",
|
||||
"commands.addTitle": "Befehl hinzufügen",
|
||||
"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": "Über",
|
||||
"settings.shortcuts": "Tastenkürzel",
|
||||
"settings.dictation": "Diktat",
|
||||
"settings.dictation.desc": "Gedrückt 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ürzel fest.",
|
||||
"settings.oneTouch": "Ein-Tasten-Modus",
|
||||
"settings.oneTouch.desc": "Drücken zum Starten, erneut drücken zum Beenden. Erfordert ein eigenes Tastenkürzel.",
|
||||
"settings.key": "Taste",
|
||||
"settings.notSet": "Nicht festgelegt",
|
||||
"settings.enabled": "Aktiviert",
|
||||
"settings.disabled": "Deaktiviert",
|
||||
"settings.interface": "Oberfläche",
|
||||
"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ügen",
|
||||
"settings.soundEffects": "Soundeffekte",
|
||||
"settings.microphone": "Mikrofon",
|
||||
"settings.inputDevice": "Eingabegerät",
|
||||
"settings.deviceDefault": "(Standard)",
|
||||
"settings.textInsert": "Texteinfügung",
|
||||
"settings.insertMethod": "Einfügemethode",
|
||||
"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ät)",
|
||||
"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äuft. Lade Modelle direkt über Ollama herunter (z. B.: ollama pull qwen3:4b).",
|
||||
"settings.postProcess": "Sprachnachbearbeitung",
|
||||
"settings.defaultAction": "Standard-Nachbearbeitungsaktion",
|
||||
"settings.action.none": "Keine (Originaltext unverändert)",
|
||||
"settings.action.refine": "Verfeinern (Grammatik + Natürlichkeit)",
|
||||
"settings.action.translate": "Übersetzen",
|
||||
"settings.action.summarize": "Zusammenfassen",
|
||||
"settings.action.grammar": "Grammatikkorrektur",
|
||||
"settings.action.custom": "Benutzerdefinierter Prompt",
|
||||
"settings.actionHint": "Die gewählte LLM-Nachbearbeitung wird auf den transkribierten Text angewendet, nachdem mit dem Tastenkürzel 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ändig lokaler KI-Sprachassistent, basierend auf Reverse Engineering von Speakly. Funktioniert ohne Cloud-Abhängigkeiten.",
|
||||
"settings.about.restartOnboarding": "Einrichtungsanleitung erneut anzeigen",
|
||||
"status.ollama": "OLLAMA",
|
||||
"status.offline": "OFFLINE",
|
||||
"status.nudge.title": "Ollama läuft nicht",
|
||||
"status.nudge.desc": "Ollama wird für die LLM-Nachbearbeitung (Übersetzung, Zusammenfassung usw.) benötigt.",
|
||||
"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ähle das Mikrofon aus, das du verwenden möchtest. Du kannst es später in den Einstellungen ändern.",
|
||||
"onboarding.hotkey.title": "Tastenkürzel einrichten",
|
||||
"onboarding.hotkey.desc": "Lege das Diktat-Tastenkürzel fest. Die Aufnahme läuft, solange du die Taste gedrückt hältst.",
|
||||
"onboarding.hotkey.notSet": "Kein Tastenkürzel festgelegt",
|
||||
"onboarding.hotkey.change": "Tastenkürzel ändern",
|
||||
"onboarding.hotkey.set": "Tastenkürzel festlegen",
|
||||
"onboarding.ollama.title": "Ollama installieren (optional)",
|
||||
"onboarding.ollama.desc": "Ollama wird für die LLM-Nachbearbeitung wie Übersetzung oder Zusammenfassung benötigt. Die Sprachdiktierung funktioniert ohne Ollama.",
|
||||
"onboarding.ollama.download": "Ollama herunterladen",
|
||||
"onboarding.ollama.modelHint": "Lade nach der Installation ein Modell über das Terminal herunter",
|
||||
"onboarding.done.title": "Einrichtung abgeschlossen!",
|
||||
"onboarding.done.descWithKey": "Halte {{key}} gedrückt und sprich, um deine Stimme in Text umzuwandeln.",
|
||||
"onboarding.done.descNoKey": "Lege in den Einstellungen ein Tastenkürzel fest, um mit der Spracheingabe zu beginnen.",
|
||||
"onboarding.done.start": "Loslegen",
|
||||
"onboarding.back": "Zurück",
|
||||
"onboarding.next": "Weiter",
|
||||
"hotkey.title": "Tastenkürzel einrichten",
|
||||
"hotkey.dictationTitle": "Diktat-Tastenkürzel einrichten",
|
||||
"hotkey.oneTouchTitle": "Tastenkürzel für Ein-Tasten-Modus einrichten",
|
||||
"hotkey.prompt": "Drücke eine Tastenkombination...",
|
||||
"hotkey.ready": "✓ {{keys}} — drücke Speichern",
|
||||
"hotkey.noKey": "Bitte gib eine Taste ein",
|
||||
"hotkey.reserved": "{{keys}} ist ein vom System reserviertes Tastenkürzel",
|
||||
"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ühren von LLMs.",
|
||||
"ollama.step2.title": "SCHRITT 2 — Modell herunterladen",
|
||||
"ollama.step2.desc": "Führe den folgenden Befehl im Terminal aus, um das empfohlene Modell herunterzuladen:",
|
||||
"ollama.step2.alt": "Oder ein größeres Modell: ollama pull qwen3:8b (genauer, langsamer)",
|
||||
"ollama.step3.title": "SCHRITT 3 — Automatische Verbindung",
|
||||
"ollama.step3.desc": "D3RO-VOICE erkennt automatisch, wenn Ollama läuft. Wenn die LED in der Statusleiste von Rot auf Grün wechselt, ist alles bereit!",
|
||||
"service.sttEngine": "STT-ENGINE",
|
||||
"service.ollamaLlm": "OLLAMA LLM",
|
||||
"service.hotkeyHook": "TASTENKÜRZEL",
|
||||
"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öschen",
|
||||
"common.add": "Hinzufügen",
|
||||
"common.edit": "Bearbeiten",
|
||||
"common.close": "Schließen",
|
||||
"common.confirm": "Bestätigen",
|
||||
"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ür Platzhalter",
|
||||
"nav.meeting": "Meeting",
|
||||
"meeting.title": "Meeting-Modus",
|
||||
"meeting.newMeeting": "Neues Meeting",
|
||||
"meeting.startRecording": "Aufnahme starten",
|
||||
"meeting.stopRecording": "Aufnahme beenden",
|
||||
"meeting.recording": "Aufnahme läuft",
|
||||
"meeting.processing": "Protokoll wird erstellt...",
|
||||
"meeting.completed": "Abgeschlossen",
|
||||
"meeting.error": "Fehler",
|
||||
"meeting.elapsed": "Vergangen",
|
||||
"meeting.memoPlaceholder": "Memo eingeben (Enter zum Hinzufügen)",
|
||||
"meeting.memoAdded": "Memo hinzugefügt",
|
||||
"meeting.noSessions": "Keine Meeting-Aufnahmen",
|
||||
"meeting.noSessionsDesc": "Drücke «Neues Meeting», um die Aufnahme zu starten",
|
||||
"meeting.summary": "Zusammenfassung",
|
||||
"meeting.decisions": "Beschlüsse",
|
||||
"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öschen",
|
||||
"meeting.deleteConfirm": "Diesen Meeting-Eintrag löschen?",
|
||||
"meeting.backToList": "Zurück 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ühren...",
|
||||
"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ügen",
|
||||
"meeting.selectTemplate": "Vorlage auswählen",
|
||||
"meeting.generate": "Generieren",
|
||||
"meeting.generating": "Dokument wird generiert...",
|
||||
"meeting.editMode": "Bearbeiten",
|
||||
"meeting.previewMode": "Vorschau",
|
||||
"meeting.modified": "Geändert",
|
||||
"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öscht",
|
||||
"meeting.autoSaved": "Automatisch gespeichert",
|
||||
"meeting.minutesTemplate": "Besprechungsprotokoll",
|
||||
"meeting.reportTemplate": "Bericht",
|
||||
"meeting.ideaNoteTemplate": "Ideennotiz",
|
||||
"meeting.customTemplate": "Benutzerdefiniert",
|
||||
"meeting.downloadTranscript": "Transkript herunterladen",
|
||||
"meeting.polish": "KI Glätten",
|
||||
"meeting.polishing": "KI glättet Transkript...",
|
||||
"meeting.polished": "KI Glättung abgeschlossen",
|
||||
"meeting.mindmapTemplate": "Mindmap",
|
||||
"meeting.chat": "KI-Chat",
|
||||
"meeting.chatPlaceholder": "Fragen Sie zum Meeting...",
|
||||
"meeting.chatSend": "Senden",
|
||||
"meeting.chatClear": "Chat löschen",
|
||||
"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ür die Sprechertrennung benötigt",
|
||||
"settings.diarization": "Sprechertrennung",
|
||||
"settings.diarizationHint": "Sprecher werden nach der Aufnahme automatisch identifiziert"
|
||||
}
|
||||
|
|
@ -1,483 +0,0 @@
|
|||
{
|
||||
"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"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"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ón",
|
||||
"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ías",
|
||||
"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ísticas",
|
||||
"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ñadir",
|
||||
"dictionary.search": "Buscar...",
|
||||
"dictionary.loading": "Cargando...",
|
||||
"dictionary.noResults": "Sin resultados",
|
||||
"dictionary.noWords": "Sin palabras — añade palabras personalizadas para mejorar la precisión del STT",
|
||||
"dictionary.used": "usado {{count}} veces",
|
||||
"dictionary.editTitle": "Editar palabra",
|
||||
"dictionary.addTitle": "Añadir palabra",
|
||||
"dictionary.word": "Palabra",
|
||||
"dictionary.pronunciation": "Pronunciación (opcional)",
|
||||
"commands.title": "Comandos LLM",
|
||||
"commands.count": "{{count}} comandos",
|
||||
"commands.add": "Añadir",
|
||||
"commands.activeCommand": "Comando activo",
|
||||
"commands.none": "Ninguno",
|
||||
"commands.loading": "Cargando...",
|
||||
"commands.noCommands": "Sin comandos — haz clic en añadir para crear uno",
|
||||
"commands.editTitle": "Editar comando",
|
||||
"commands.addTitle": "Añadir comando",
|
||||
"commands.name": "Nombre",
|
||||
"commands.description": "Descripción",
|
||||
"commands.promptTemplate": "Plantilla de prompt",
|
||||
"commands.promptHelp": "{{text}} se reemplazará 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én pulsado para hablar. Al soltar, comienza la transcripción.",
|
||||
"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áticamente tras transcripción",
|
||||
"settings.soundEffects": "Efectos de sonido",
|
||||
"settings.microphone": "Micrófono",
|
||||
"settings.inputDevice": "Dispositivo de entrada",
|
||||
"settings.deviceDefault": "(predeterminado)",
|
||||
"settings.textInsert": "Inserción de texto",
|
||||
"settings.insertMethod": "Método de inserción",
|
||||
"settings.insertClipboard": "Portapapeles (Ctrl+V)",
|
||||
"settings.insertKeyboard": "Escritura con teclado",
|
||||
"settings.whisperModel": "Modelo Whisper",
|
||||
"settings.model.tiny": "tiny (39 MB, más rápido)",
|
||||
"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ón automática",
|
||||
"settings.ollamaServer": "Servidor Ollama",
|
||||
"settings.ollamaUrl": "URL del servidor Ollama",
|
||||
"settings.ollamaHint": "D3RO Voice se conecta automáticamente cuando Ollama está en ejecución. Descarga modelos directamente desde Ollama (ej: ollama pull qwen3:4b).",
|
||||
"settings.postProcess": "Postprocesado de voz",
|
||||
"settings.defaultAction": "Acción de postprocesado predeterminada",
|
||||
"settings.action.none": "Ninguna (texto original sin cambios)",
|
||||
"settings.action.refine": "Refinar (gramática + naturalidad)",
|
||||
"settings.action.translate": "Traducir",
|
||||
"settings.action.summarize": "Resumir",
|
||||
"settings.action.grammar": "Corrección 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á conectado.",
|
||||
"settings.about.version": "Versión",
|
||||
"settings.about.techStack": "Stack tecnológico",
|
||||
"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ía inversa de Speakly. Funciona sin dependencias en la nube.",
|
||||
"settings.about.restartOnboarding": "Ver guía de configuración inicial de nuevo",
|
||||
"status.ollama": "OLLAMA",
|
||||
"status.offline": "OFFLINE",
|
||||
"status.nudge.title": "Ollama no está en ejecución",
|
||||
"status.nudge.desc": "Se necesita Ollama para el postprocesado LLM (traducción, resumen, etc.).",
|
||||
"status.nudge.guide": "Ver guía de instalación →",
|
||||
"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ófono",
|
||||
"onboarding.mic.desc": "Selecciona el micrófono que quieres usar. Puedes cambiarlo más tarde en los ajustes.",
|
||||
"onboarding.hotkey.title": "Configurar atajo",
|
||||
"onboarding.hotkey.desc": "Configura el atajo de dictado. Se grabará mientras mantengas la tecla pulsada.",
|
||||
"onboarding.hotkey.notSet": "No se ha configurado ningún 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ón 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": "¡Configuración completa!",
|
||||
"onboarding.done.descWithKey": "Mantén 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ás",
|
||||
"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ón 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ón (ej: Ctrl+Shift+Q) o una tecla sola (ej: F5)",
|
||||
"hotkey.reset": "Volver a introducir",
|
||||
"ollama.title": "GUÍA DE CONFIGURACIÓN 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ás grande: ollama pull qwen3:8b (más preciso, más lento)",
|
||||
"ollama.step3.title": "PASO 3 — Conexión automática",
|
||||
"ollama.step3.desc": "D3RO-VOICE detecta automáticamente cuando Ollama está en ejecución. Cuando el LED de la barra de estado pase de rojo a verde, ¡estará 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ñadir",
|
||||
"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és",
|
||||
"settings.sttLang.ja": "Japonés",
|
||||
"settings.sttLang.zh": "Chino",
|
||||
"template.outputHelperText": "Use {{nombreCampo}} para marcadores de posición",
|
||||
"nav.meeting": "Reunión",
|
||||
"meeting.title": "Modo Reunión",
|
||||
"meeting.newMeeting": "Nueva Reunión",
|
||||
"meeting.startRecording": "Iniciar Grabación",
|
||||
"meeting.stopRecording": "Detener Grabación",
|
||||
"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ñadir)",
|
||||
"meeting.memoAdded": "Memo añadido",
|
||||
"meeting.noSessions": "Sin grabaciones de reuniones",
|
||||
"meeting.noSessionsDesc": "Pulsa Nueva Reunión para empezar a grabar",
|
||||
"meeting.summary": "Resumen",
|
||||
"meeting.decisions": "Decisiones",
|
||||
"meeting.actionItems": "Tareas",
|
||||
"meeting.timeline": "Línea de tiempo",
|
||||
"meeting.transcript": "Transcripción bruta",
|
||||
"meeting.memos": "Memos",
|
||||
"meeting.exportPdf": "Exportar PDF",
|
||||
"meeting.exportMarkdown": "Exportar Markdown",
|
||||
"meeting.delete": "Eliminar",
|
||||
"meeting.deleteConfirm": "¿Eliminar este registro de reunión?",
|
||||
"meeting.backToList": "Volver a la lista",
|
||||
"meeting.notificationTitle": "Actas listas",
|
||||
"meeting.notificationBody": "Las actas de la reunión han sido generadas.",
|
||||
"meeting.sessions": "{{count}} sesiones",
|
||||
"meeting.duration": "{{minutes}} min",
|
||||
"meeting.editTitle": "Editar título",
|
||||
"meeting.untitled": "Reunión sin título",
|
||||
"meeting.processingStep.merging": "Fusionando transcripción...",
|
||||
"meeting.processingStep.generating": "Generando actas con LLM...",
|
||||
"meeting.processingStep.parsing": "Analizando actas...",
|
||||
"meeting.processingStep.saving": "Guardando...",
|
||||
"meeting.processingStep.notifying": "Enviando notificación...",
|
||||
"meeting.transcriptTab": "Transcripción",
|
||||
"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áticamente",
|
||||
"meeting.minutesTemplate": "Actas de reunión",
|
||||
"meeting.reportTemplate": "Informe",
|
||||
"meeting.ideaNoteTemplate": "Nota de ideas",
|
||||
"meeting.customTemplate": "Personalizado",
|
||||
"meeting.downloadTranscript": "Descargar transcripción",
|
||||
"meeting.polish": "Pulir con IA",
|
||||
"meeting.polishing": "IA puliendo transcripción...",
|
||||
"meeting.polished": "Pulido con IA completado",
|
||||
"meeting.mindmapTemplate": "Mapa mental",
|
||||
"meeting.chat": "Chat IA",
|
||||
"meeting.chatPlaceholder": "Pregunta sobre la reunión...",
|
||||
"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ón",
|
||||
"meeting.startRecordingError": "Error al iniciar la grabación",
|
||||
"meeting.diarize": "Identificar hablantes",
|
||||
"meeting.diarizing": "Identificando hablantes...",
|
||||
"meeting.diarizeComplete": "Identificación completada",
|
||||
"meeting.speaker": "Hablante",
|
||||
"settings.hfToken": "Token de HuggingFace",
|
||||
"settings.hfTokenHint": "Se necesita un token de HuggingFace para identificar hablantes",
|
||||
"settings.diarization": "Identificación de hablantes",
|
||||
"settings.diarizationHint": "Identifica automáticamente los hablantes al finalizar la grabación"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"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ètres",
|
||||
"dashboard.sessionOverview": "Aperçu de session",
|
||||
"dashboard.systemStatus": "État du système",
|
||||
"dashboard.sessionsToday": "Sessions aujourd'hui",
|
||||
"dashboard.pressToRecord": "Appuyez sur {{key}} pour commencer l'enregistrement",
|
||||
"dashboard.hotkeyNotSet": "Raccourci non configuré",
|
||||
"dashboard.words": "mots",
|
||||
"dashboard.total": "total",
|
||||
"dashboard.streak": "série",
|
||||
"dashboard.days": "jours",
|
||||
"dashboard.recording": "enregistrement",
|
||||
"dashboard.sessions": "sessions",
|
||||
"dashboard.today": "aujourd'hui",
|
||||
"dashboard.recentTranscriptions": "Transcriptions récentes",
|
||||
"dashboard.noHistory": "Aucun historique — appuyez sur le raccourci pour commencer à enregistrer",
|
||||
"dashboard.copy": "Copier",
|
||||
"dashboard.entries": "{{count}} entrées",
|
||||
"dashboard.stat": "statistiques",
|
||||
"dashboard.sys": "système",
|
||||
"history.title": "Historique des transcriptions",
|
||||
"history.search": "Rechercher...",
|
||||
"history.entries": "{{count}} entrées",
|
||||
"history.loading": "Chargement...",
|
||||
"history.noResults": "Aucun résultat",
|
||||
"history.noHistory": "Aucun historique — commencez à enregistrer",
|
||||
"history.count": "{{count}} entrées",
|
||||
"dictionary.title": "Dictionnaire personnalisé",
|
||||
"dictionary.words": "{{count}} mots",
|
||||
"dictionary.add": "Ajouter",
|
||||
"dictionary.search": "Rechercher...",
|
||||
"dictionary.loading": "Chargement...",
|
||||
"dictionary.noResults": "Aucun résultat",
|
||||
"dictionary.noWords": "Aucun mot — ajoutez des mots personnalisés pour améliorer la précision du STT",
|
||||
"dictionary.used": "utilisé {{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éer une",
|
||||
"commands.editTitle": "Modifier la commande",
|
||||
"commands.addTitle": "Ajouter une commande",
|
||||
"commands.name": "Nom",
|
||||
"commands.description": "Description",
|
||||
"commands.promptTemplate": "Modèle de prompt",
|
||||
"commands.promptHelp": "{{text}} sera remplacé par le texte transcrit",
|
||||
"commands.defaultPrompt": "Veuillez améliorer {{text}}.",
|
||||
"settings.title": "Paramètres",
|
||||
"settings.tabs.general": "Général",
|
||||
"settings.tabs.audio": "Audio",
|
||||
"settings.tabs.stt": "STT",
|
||||
"settings.tabs.llm": "LLM",
|
||||
"settings.tabs.about": "À propos",
|
||||
"settings.shortcuts": "Raccourcis",
|
||||
"settings.dictation": "Dictée",
|
||||
"settings.dictation.desc": "Maintenez enfoncé pour parler. La transcription démarre au relâchement.",
|
||||
"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ée.",
|
||||
"settings.oneTouch": "Mode une touche",
|
||||
"settings.oneTouch.desc": "Appuyez pour démarrer, appuyez à nouveau pour arrêter. Nécessite un raccourci distinct.",
|
||||
"settings.key": "Touche",
|
||||
"settings.notSet": "Non configuré",
|
||||
"settings.enabled": "Activé",
|
||||
"settings.disabled": "Désactivé",
|
||||
"settings.interface": "Interface",
|
||||
"settings.theme": "Thème",
|
||||
"settings.theme.system": "Système",
|
||||
"settings.theme.light": "Clair",
|
||||
"settings.theme.dark": "Sombre",
|
||||
"settings.language": "Langue",
|
||||
"settings.appBehavior": "Comportement de l'application",
|
||||
"settings.closeToTray": "Réduire dans la barre système",
|
||||
"settings.autoLaunch": "Lancer au démarrage du système",
|
||||
"settings.autoInsert": "Insérer le texte automatiquement après la transcription",
|
||||
"settings.soundEffects": "Effets sonores",
|
||||
"settings.microphone": "Microphone",
|
||||
"settings.inputDevice": "Périphérique d'entrée",
|
||||
"settings.deviceDefault": "(par défaut)",
|
||||
"settings.textInsert": "Insertion de texte",
|
||||
"settings.insertMethod": "Méthode d'insertion",
|
||||
"settings.insertClipboard": "Presse-papiers (Ctrl+V)",
|
||||
"settings.insertKeyboard": "Frappe au clavier",
|
||||
"settings.whisperModel": "Modèle Whisper",
|
||||
"settings.model.tiny": "tiny (39 Mo, le plus rapide)",
|
||||
"settings.model.base": "base (74 Mo, équilibré)",
|
||||
"settings.model.small": "small (244 Mo, bon)",
|
||||
"settings.model.medium": "medium (769 Mo, très bon)",
|
||||
"settings.model.large": "large-v3 (1,5 Go, meilleur)",
|
||||
"settings.sttLanguage": "Langue de reconnaissance",
|
||||
"settings.sttLang.auto": "Détection 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écution. Téléchargez les modèles directement depuis Ollama (ex : ollama pull qwen3:4b).",
|
||||
"settings.postProcess": "Post-traitement vocal",
|
||||
"settings.defaultAction": "Action de post-traitement par défaut",
|
||||
"settings.action.none": "Aucune (texte original inchangé)",
|
||||
"settings.action.refine": "Affiner (grammaire + naturel)",
|
||||
"settings.action.translate": "Traduire",
|
||||
"settings.action.summarize": "Résumer",
|
||||
"settings.action.grammar": "Correction grammaticale",
|
||||
"settings.action.custom": "Prompt personnalisé",
|
||||
"settings.actionHint": "Le post-traitement LLM sélectionné est appliqué au texte transcrit après l'enregistrement avec le raccourci. Ne fonctionne que lorsque Ollama est connecté.",
|
||||
"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èrement local, basé sur l'ingénierie inverse de Speakly. Fonctionne sans dépendance 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écution",
|
||||
"status.nudge.desc": "Ollama est nécessaire pour le post-traitement LLM (traduction, résumé, 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électionnez le microphone que vous souhaitez utiliser. Vous pourrez le modifier plus tard dans les paramètres.",
|
||||
"onboarding.hotkey.title": "Configuration du raccourci",
|
||||
"onboarding.hotkey.desc": "Configurez le raccourci de dictée. L'enregistrement dure tant que vous maintenez la touche enfoncée.",
|
||||
"onboarding.hotkey.notSet": "Aucun raccourci configuré",
|
||||
"onboarding.hotkey.change": "Modifier le raccourci",
|
||||
"onboarding.hotkey.set": "Configurer le raccourci",
|
||||
"onboarding.ollama.title": "Installer Ollama (facultatif)",
|
||||
"onboarding.ollama.desc": "Ollama est nécessaire pour le post-traitement LLM comme la traduction ou le résumé. La dictée vocale fonctionne sans Ollama.",
|
||||
"onboarding.ollama.download": "Télécharger Ollama",
|
||||
"onboarding.ollama.modelHint": "Après l'installation, téléchargez un modèle depuis le terminal",
|
||||
"onboarding.done.title": "Configuration terminée !",
|
||||
"onboarding.done.descWithKey": "Maintenez {{key}} enfoncé et parlez pour convertir votre voix en texte.",
|
||||
"onboarding.done.descNoKey": "Configurez un raccourci dans les paramètres pour commencer la dictée.",
|
||||
"onboarding.done.start": "Commencer",
|
||||
"onboarding.back": "Retour",
|
||||
"onboarding.next": "Suivant",
|
||||
"hotkey.title": "Configurer le raccourci",
|
||||
"hotkey.dictationTitle": "Configurer le raccourci de dictée",
|
||||
"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éservé par le système",
|
||||
"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": "ÉTAPE 1 — Installer Ollama",
|
||||
"ollama.step1.desc": "Ollama est un outil gratuit pour exécuter des LLM en local.",
|
||||
"ollama.step2.title": "ÉTAPE 2 — Télécharger un modèle",
|
||||
"ollama.step2.desc": "Exécutez la commande suivante dans le terminal pour télécharger le modèle recommandé :",
|
||||
"ollama.step2.alt": "Ou un modèle plus grand : ollama pull qwen3:8b (plus précis, plus lent)",
|
||||
"ollama.step3.title": "ÉTAPE 3 — Connexion automatique",
|
||||
"ollama.step3.desc": "D3RO-VOICE détecte automatiquement quand Ollama est en cours d'exécution. Quand la LED de la barre d'état passe du rouge au vert, c'est prêt !",
|
||||
"service.sttEngine": "MOTEUR STT",
|
||||
"service.ollamaLlm": "OLLAMA LLM",
|
||||
"service.hotkeyHook": "RACCOURCI CLAVIER",
|
||||
"service.audioInput": "ENTRÉE AUDIO",
|
||||
"service.ready": "PRÊT",
|
||||
"service.connected": "CONNECTÉ",
|
||||
"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êter",
|
||||
"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éen",
|
||||
"settings.sttLang.en": "Anglais",
|
||||
"settings.sttLang.ja": "Japonais",
|
||||
"settings.sttLang.zh": "Chinois",
|
||||
"template.outputHelperText": "Utilisez {{nomChamp}} pour les espaces réservés",
|
||||
"nav.meeting": "Réunion",
|
||||
"meeting.title": "Mode Réunion",
|
||||
"meeting.newMeeting": "Nouvelle Réunion",
|
||||
"meeting.startRecording": "Démarrer l'enregistrement",
|
||||
"meeting.stopRecording": "Arrêter l'enregistrement",
|
||||
"meeting.recording": "Enregistrement en cours",
|
||||
"meeting.processing": "Génération du compte-rendu...",
|
||||
"meeting.completed": "Terminé",
|
||||
"meeting.error": "Erreur",
|
||||
"meeting.elapsed": "Temps écoulé",
|
||||
"meeting.memoPlaceholder": "Saisir un mémo (Entrée pour ajouter)",
|
||||
"meeting.memoAdded": "Mémo ajouté",
|
||||
"meeting.noSessions": "Aucun enregistrement de réunion",
|
||||
"meeting.noSessionsDesc": "Appuyez sur Nouvelle Réunion pour commencer l'enregistrement",
|
||||
"meeting.summary": "Résumé",
|
||||
"meeting.decisions": "Décisions",
|
||||
"meeting.actionItems": "Actions à mener",
|
||||
"meeting.timeline": "Chronologie",
|
||||
"meeting.transcript": "Transcription brute",
|
||||
"meeting.memos": "Mémos",
|
||||
"meeting.exportPdf": "Exporter en PDF",
|
||||
"meeting.exportMarkdown": "Exporter en Markdown",
|
||||
"meeting.delete": "Supprimer",
|
||||
"meeting.deleteConfirm": "Supprimer cet enregistrement de réunion ?",
|
||||
"meeting.backToList": "Retour à la liste",
|
||||
"meeting.notificationTitle": "Compte-rendu prêt",
|
||||
"meeting.notificationBody": "Le compte-rendu de la réunion a été généré.",
|
||||
"meeting.sessions": "{{count}} séances",
|
||||
"meeting.duration": "{{minutes}} min",
|
||||
"meeting.editTitle": "Modifier le titre",
|
||||
"meeting.untitled": "Réunion sans titre",
|
||||
"meeting.processingStep.merging": "Fusion de la transcription...",
|
||||
"meeting.processingStep.generating": "Génération 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èle",
|
||||
"meeting.generate": "Générer",
|
||||
"meeting.generating": "Génération du document...",
|
||||
"meeting.editMode": "Éditer",
|
||||
"meeting.previewMode": "Aperçu",
|
||||
"meeting.modified": "Modifié",
|
||||
"meeting.originalText": "Original",
|
||||
"meeting.editedText": "Édité",
|
||||
"meeting.exportDocx": "Exporter DOCX",
|
||||
"meeting.exportTxt": "Exporter TXT",
|
||||
"meeting.exportFormat": "Exporter",
|
||||
"meeting.customPrompt": "Invite personnalisée",
|
||||
"meeting.templateName": "Nom du modèle",
|
||||
"meeting.templatePrompt": "Invite IA",
|
||||
"meeting.templateSave": "Sauvegarder le modèle",
|
||||
"meeting.documentDeleted": "Document supprimé",
|
||||
"meeting.autoSaved": "Sauvegarde automatique",
|
||||
"meeting.minutesTemplate": "Compte-rendu",
|
||||
"meeting.reportTemplate": "Rapport",
|
||||
"meeting.ideaNoteTemplate": "Note d'idées",
|
||||
"meeting.customTemplate": "Personnalisé",
|
||||
"meeting.downloadTranscript": "Télécharger la transcription",
|
||||
"meeting.polish": "Peaufiner avec IA",
|
||||
"meeting.polishing": "L'IA peaufine la transcription...",
|
||||
"meeting.polished": "Peaufinement IA terminé",
|
||||
"meeting.mindmapTemplate": "Carte mentale",
|
||||
"meeting.chat": "Chat IA",
|
||||
"meeting.chatPlaceholder": "Posez une question sur la réunion...",
|
||||
"meeting.chatSend": "Envoyer",
|
||||
"meeting.chatClear": "Effacer le chat",
|
||||
"meeting.copyToClipboard": "Copier dans le presse-papiers",
|
||||
"meeting.copied": "Copié",
|
||||
"meeting.chatCollapse": "Réduire 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étails de la réunion",
|
||||
"meeting.startRecordingError": "Impossible de démarrer l'enregistrement",
|
||||
"meeting.diarize": "Identifier les locuteurs",
|
||||
"meeting.diarizing": "Identification des locuteurs...",
|
||||
"meeting.diarizeComplete": "Identification terminée",
|
||||
"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ès l'enregistrement"
|
||||
}
|
||||
|
|
@ -1,204 +0,0 @@
|
|||
// src/renderer/i18n/index.ts
|
||||
// SSOT i18n 엔진: 타입 안전 키, React Context, fallback 체인, Intl 포맷팅
|
||||
// 마스터: ko.json — 모든 키의 단일 소스
|
||||
|
||||
import { createContext, useContext, useState, useCallback, useEffect, useMemo } from 'react'
|
||||
import type { ReactNode } from 'react'
|
||||
import ko from './ko.json'
|
||||
import en from './en.json'
|
||||
import ja from './ja.json'
|
||||
import zh from './zh.json'
|
||||
import zhTW from './zh-TW.json'
|
||||
import es from './es.json'
|
||||
import fr from './fr.json'
|
||||
import de from './de.json'
|
||||
import pt from './pt.json'
|
||||
import ru from './ru.json'
|
||||
import vi from './vi.json'
|
||||
import th from './th.json'
|
||||
|
||||
// ── 타입 ────────────────────────────────────────────────
|
||||
/** 마스터 키에서 자동 추출된 번역 키 유니온 */
|
||||
export type TranslationKey = keyof typeof ko
|
||||
|
||||
/** 지원 로케일 */
|
||||
export type Locale =
|
||||
| 'ko' | 'en' | 'ja' | 'zh' | 'zh-TW'
|
||||
| 'es' | 'fr' | 'de' | 'pt' | 'ru' | 'vi' | 'th'
|
||||
|
||||
type Translations = Record<string, string>
|
||||
|
||||
// ── 로케일 레지스트리 ───────────────────────────────────
|
||||
const LOCALE_MAP: Record<Locale, Translations> = {
|
||||
ko,
|
||||
en,
|
||||
ja,
|
||||
zh,
|
||||
'zh-TW': zhTW,
|
||||
es,
|
||||
fr,
|
||||
de,
|
||||
pt,
|
||||
ru,
|
||||
vi,
|
||||
th,
|
||||
}
|
||||
|
||||
/** 언어 선택 UI에 표시할 메타데이터 (각 언어로 된 자국어명) */
|
||||
export const LOCALE_META: ReadonlyArray<{ code: Locale; nativeName: string; englishName: string }> = [
|
||||
{ code: 'ko', nativeName: '한국어', englishName: 'Korean' },
|
||||
{ code: 'en', nativeName: 'English', englishName: 'English' },
|
||||
{ code: 'ja', nativeName: '日本語', englishName: 'Japanese' },
|
||||
{ code: 'zh', nativeName: '简体中文', englishName: 'Chinese (Simplified)' },
|
||||
{ code: 'zh-TW', nativeName: '繁體中文', englishName: 'Chinese (Traditional)' },
|
||||
{ code: 'es', nativeName: 'Español', englishName: 'Spanish' },
|
||||
{ code: 'fr', nativeName: 'Français', englishName: 'French' },
|
||||
{ code: 'de', nativeName: 'Deutsch', englishName: 'German' },
|
||||
{ code: 'pt', nativeName: 'Português', englishName: 'Portuguese' },
|
||||
{ code: 'ru', nativeName: 'Русский', englishName: 'Russian' },
|
||||
{ code: 'vi', nativeName: 'Tiếng Việt', englishName: 'Vietnamese' },
|
||||
{ code: 'th', nativeName: 'ไทย', englishName: 'Thai' },
|
||||
]
|
||||
|
||||
// ── 번역 함수 ──────────────────────────────────────────
|
||||
function resolveTranslation(
|
||||
key: string,
|
||||
translations: Translations,
|
||||
params?: Record<string, string | number>,
|
||||
): string {
|
||||
// fallback 체인: 현재 로케일 → en → ko → key 자체
|
||||
let text = translations[key] ?? (en as Translations)[key] ?? (ko as Translations)[key] ?? key
|
||||
|
||||
if (params) {
|
||||
for (const [k, v] of Object.entries(params)) {
|
||||
text = text.replaceAll(`{{${k}}}`, String(v))
|
||||
}
|
||||
}
|
||||
|
||||
return text
|
||||
}
|
||||
|
||||
// ── Intl 포맷팅 유틸 ───────────────────────────────────
|
||||
function toBcp47(locale: Locale): string {
|
||||
// BCP 47 태그로 변환
|
||||
const map: Partial<Record<Locale, string>> = {
|
||||
'zh': 'zh-CN',
|
||||
'zh-TW': 'zh-TW',
|
||||
}
|
||||
return map[locale] ?? locale
|
||||
}
|
||||
|
||||
function createFormatDate(locale: Locale) {
|
||||
const bcp = toBcp47(locale)
|
||||
return (date: Date | number, options?: Intl.DateTimeFormatOptions): string => {
|
||||
const d = typeof date === 'number' ? new Date(date) : date
|
||||
return new Intl.DateTimeFormat(bcp, options).format(d)
|
||||
}
|
||||
}
|
||||
|
||||
function createFormatNumber(locale: Locale) {
|
||||
const bcp = toBcp47(locale)
|
||||
return (num: number, options?: Intl.NumberFormatOptions): string => {
|
||||
return new Intl.NumberFormat(bcp, options).format(num)
|
||||
}
|
||||
}
|
||||
|
||||
function createFormatRelativeDate(locale: Locale, t: TFunction) {
|
||||
return (ts: number): string => {
|
||||
const d = new Date(ts)
|
||||
d.setHours(0, 0, 0, 0)
|
||||
const today = new Date()
|
||||
today.setHours(0, 0, 0, 0)
|
||||
const yesterday = new Date(today)
|
||||
yesterday.setDate(yesterday.getDate() - 1)
|
||||
|
||||
if (d.getTime() === today.getTime()) return t('date.today')
|
||||
if (d.getTime() === yesterday.getTime()) return t('date.yesterday')
|
||||
|
||||
const bcp = toBcp47(locale)
|
||||
return new Intl.DateTimeFormat(bcp, { month: 'short', day: 'numeric' }).format(d).toUpperCase()
|
||||
}
|
||||
}
|
||||
|
||||
function createFormatTime(locale: Locale) {
|
||||
const bcp = toBcp47(locale)
|
||||
return (ts: number): string => {
|
||||
return new Intl.DateTimeFormat(bcp, { hour: '2-digit', minute: '2-digit' }).format(new Date(ts))
|
||||
}
|
||||
}
|
||||
|
||||
// ── t() 함수 타입 ──────────────────────────────────────
|
||||
export type TFunction = (key: TranslationKey, params?: Record<string, string | number>) => string
|
||||
|
||||
// ── React Context ──────────────────────────────────────
|
||||
export interface I18nContextValue {
|
||||
locale: Locale
|
||||
t: TFunction
|
||||
setLocale: (locale: Locale) => void
|
||||
/** Intl 기반 날짜 포맷 */
|
||||
formatDate: (date: Date | number, options?: Intl.DateTimeFormatOptions) => string
|
||||
/** Intl 기반 숫자 포맷 */
|
||||
formatNumber: (num: number, options?: Intl.NumberFormatOptions) => string
|
||||
/** "오늘" / "어제" / "4월 3일" 등 상대 날짜 */
|
||||
formatRelativeDate: (ts: number) => string
|
||||
/** 시:분 포맷 */
|
||||
formatTime: (ts: number) => string
|
||||
}
|
||||
|
||||
const I18nContext = createContext<I18nContextValue | null>(null)
|
||||
|
||||
// ── Provider ───────────────────────────────────────────
|
||||
export interface I18nProviderProps {
|
||||
initialLocale?: Locale
|
||||
children: ReactNode
|
||||
}
|
||||
|
||||
export function I18nProvider({ initialLocale = 'ko', children }: I18nProviderProps): React.ReactElement {
|
||||
const [locale, setLocaleState] = useState<Locale>(initialLocale)
|
||||
|
||||
// ConfigService에서 저장된 언어 로드
|
||||
useEffect(() => {
|
||||
window.electronAPI.config.get({ key: 'language' }).then((r) => {
|
||||
if (r.success && r.data && isValidLocale(r.data as string)) {
|
||||
setLocaleState(r.data as Locale)
|
||||
}
|
||||
})
|
||||
}, [])
|
||||
|
||||
const setLocale = useCallback((newLocale: Locale) => {
|
||||
setLocaleState(newLocale)
|
||||
// 설정에 저장
|
||||
window.electronAPI.config.set({ key: 'language', value: newLocale })
|
||||
}, [])
|
||||
|
||||
const value = useMemo((): I18nContextValue => {
|
||||
const translations = LOCALE_MAP[locale] ?? ko
|
||||
const t: TFunction = (key, params) => resolveTranslation(key, translations, params)
|
||||
|
||||
return {
|
||||
locale,
|
||||
t,
|
||||
setLocale,
|
||||
formatDate: createFormatDate(locale),
|
||||
formatNumber: createFormatNumber(locale),
|
||||
formatRelativeDate: createFormatRelativeDate(locale, t),
|
||||
formatTime: createFormatTime(locale),
|
||||
}
|
||||
}, [locale, setLocale])
|
||||
|
||||
return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>
|
||||
}
|
||||
|
||||
// ── Hook ───────────────────────────────────────────────
|
||||
export function useI18n(): I18nContextValue {
|
||||
const ctx = useContext(I18nContext)
|
||||
if (!ctx) {
|
||||
throw new Error('useI18n must be used within <I18nProvider>')
|
||||
}
|
||||
return ctx
|
||||
}
|
||||
|
||||
// ── 유틸 ───────────────────────────────────────────────
|
||||
export function isValidLocale(value: string): value is Locale {
|
||||
return value in LOCALE_MAP
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"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": "録音終了後に自動的に話者を識別します"
|
||||
}
|
||||
|
|
@ -1,483 +0,0 @@
|
|||
{
|
||||
"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.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": "녹음 종료 후 화자를 자동으로 구분합니다"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"app.name": "D3RO Voice",
|
||||
"app.tagline": "Assistente de voz com IA local",
|
||||
"nav.dashboard": "Painel",
|
||||
"nav.history": "Histórico",
|
||||
"nav.dictionary": "Dicionário",
|
||||
"nav.commands": "Comandos",
|
||||
"nav.settings": "Configurações",
|
||||
"dashboard.sessionOverview": "Visão geral da sessão",
|
||||
"dashboard.systemStatus": "Status do sistema",
|
||||
"dashboard.sessionsToday": "Sessões hoje",
|
||||
"dashboard.pressToRecord": "Pressione {{key}} para iniciar a gravação",
|
||||
"dashboard.hotkeyNotSet": "Atalho não configurado",
|
||||
"dashboard.words": "palavras",
|
||||
"dashboard.total": "total",
|
||||
"dashboard.streak": "sequência",
|
||||
"dashboard.days": "dias",
|
||||
"dashboard.recording": "gravando",
|
||||
"dashboard.sessions": "sessões",
|
||||
"dashboard.today": "hoje",
|
||||
"dashboard.recentTranscriptions": "Transcrições recentes",
|
||||
"dashboard.noHistory": "Sem histórico — pressione o atalho para começar a gravar",
|
||||
"dashboard.copy": "Copiar",
|
||||
"dashboard.entries": "{{count}} entradas",
|
||||
"dashboard.stat": "estatísticas",
|
||||
"dashboard.sys": "sistema",
|
||||
"history.title": "Histórico de transcrições",
|
||||
"history.search": "Pesquisar...",
|
||||
"history.entries": "{{count}} entradas",
|
||||
"history.loading": "Carregando...",
|
||||
"history.noResults": "Sem resultados",
|
||||
"history.noHistory": "Sem histórico — comece a gravar",
|
||||
"history.count": "{{count}} entradas",
|
||||
"dictionary.title": "Dicionário 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ão do STT",
|
||||
"dictionary.used": "usado {{count}} vezes",
|
||||
"dictionary.editTitle": "Editar palavra",
|
||||
"dictionary.addTitle": "Adicionar palavra",
|
||||
"dictionary.word": "Palavra",
|
||||
"dictionary.pronunciation": "Pronúncia (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ção",
|
||||
"commands.promptTemplate": "Modelo de prompt",
|
||||
"commands.promptHelp": "{{text}} será substituído pelo texto transcrito",
|
||||
"commands.defaultPrompt": "Por favor, melhore {{text}}.",
|
||||
"settings.title": "Configurações",
|
||||
"settings.tabs.general": "Geral",
|
||||
"settings.tabs.audio": "Áudio",
|
||||
"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ção começa 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ão 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ós a transcrição",
|
||||
"settings.soundEffects": "Efeitos sonoros",
|
||||
"settings.microphone": "Microfone",
|
||||
"settings.inputDevice": "Dispositivo de entrada",
|
||||
"settings.deviceDefault": "(padrão)",
|
||||
"settings.textInsert": "Inserção de texto",
|
||||
"settings.insertMethod": "Método de inserção",
|
||||
"settings.insertClipboard": "Área de transferência (Ctrl+V)",
|
||||
"settings.insertKeyboard": "Digitação pelo teclado",
|
||||
"settings.whisperModel": "Modelo Whisper",
|
||||
"settings.model.tiny": "tiny (39 MB, mais rápido)",
|
||||
"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ção automática",
|
||||
"settings.ollamaServer": "Servidor Ollama",
|
||||
"settings.ollamaUrl": "URL do servidor Ollama",
|
||||
"settings.ollamaHint": "D3RO Voice conecta-se automaticamente quando o Ollama está em execução. Baixe modelos diretamente pelo Ollama (ex: ollama pull qwen3:4b).",
|
||||
"settings.postProcess": "Pós-processamento de voz",
|
||||
"settings.defaultAction": "Ação de pós-processamento padrão",
|
||||
"settings.action.none": "Nenhuma (texto original sem alterações)",
|
||||
"settings.action.refine": "Refinar (gramática + naturalidade)",
|
||||
"settings.action.translate": "Traduzir",
|
||||
"settings.action.summarize": "Resumir",
|
||||
"settings.action.grammar": "Correção gramatical",
|
||||
"settings.action.custom": "Prompt personalizado",
|
||||
"settings.actionHint": "O pós-processamento LLM selecionado é aplicado ao texto transcrito após gravar com o atalho. Só funciona quando o Ollama está conectado.",
|
||||
"settings.about.version": "Versão",
|
||||
"settings.about.techStack": "Stack tecnológico",
|
||||
"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ências de nuvem.",
|
||||
"settings.about.restartOnboarding": "Ver guia de configuração inicial novamente",
|
||||
"status.ollama": "OLLAMA",
|
||||
"status.offline": "OFFLINE",
|
||||
"status.nudge.title": "Ollama não está em execução",
|
||||
"status.nudge.desc": "O Ollama é necessário para o pós-processamento LLM (tradução, resumo, etc.).",
|
||||
"status.nudge.guide": "Ver guia de instalação →",
|
||||
"onboarding.welcome.title": "D3RO-VOICE",
|
||||
"onboarding.welcome.desc": "Sem digitar, por voz. Seu assistente de voz com IA local.",
|
||||
"onboarding.welcome.start": "Começar",
|
||||
"onboarding.mic.title": "Configurar microfone",
|
||||
"onboarding.mic.desc": "Selecione o microfone que deseja usar. Você pode alterá-lo depois nas configurações.",
|
||||
"onboarding.hotkey.title": "Configurar atalho",
|
||||
"onboarding.hotkey.desc": "Configure o atalho de ditado. A gravação continua enquanto você 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 é necessário para pós-processamento LLM como tradução ou resumo. O ditado de voz funciona sem o Ollama.",
|
||||
"onboarding.ollama.download": "Baixar Ollama",
|
||||
"onboarding.ollama.modelHint": "Após instalar, baixe um modelo pelo terminal",
|
||||
"onboarding.done.title": "Configuração concluída!",
|
||||
"onboarding.done.descWithKey": "Mantenha {{key}} pressionado e fale para converter sua voz em texto.",
|
||||
"onboarding.done.descNoKey": "Configure um atalho nas configurações para começar a ditar.",
|
||||
"onboarding.done.start": "Começar",
|
||||
"onboarding.back": "Voltar",
|
||||
"onboarding.next": "Próximo",
|
||||
"hotkey.title": "Configurar atalho",
|
||||
"hotkey.dictationTitle": "Configurar atalho de ditado",
|
||||
"hotkey.oneTouchTitle": "Configurar atalho do modo de um toque",
|
||||
"hotkey.prompt": "Pressione uma combinação de teclas...",
|
||||
"hotkey.ready": "✓ {{keys}} — pressione salvar",
|
||||
"hotkey.noKey": "Por favor, insira uma tecla",
|
||||
"hotkey.reserved": "{{keys}} é um atalho reservado pelo sistema",
|
||||
"hotkey.current": "Atual: {{keys}}",
|
||||
"hotkey.hint": "Insira uma combinação (ex: Ctrl+Shift+Q) ou uma tecla única (ex: F5)",
|
||||
"hotkey.reset": "Inserir novamente",
|
||||
"ollama.title": "GUIA DE CONFIGURAÇÃO DO OLLAMA",
|
||||
"ollama.step1.title": "PASSO 1 — Instalar o Ollama",
|
||||
"ollama.step1.desc": "O Ollama é 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ão automática",
|
||||
"ollama.step3.desc": "D3RO-VOICE detecta automaticamente quando o Ollama está em execução. Quando o LED da barra de status mudar de vermelho para verde, está pronto!",
|
||||
"service.sttEngine": "MOTOR STT",
|
||||
"service.ollamaLlm": "OLLAMA LLM",
|
||||
"service.hotkeyHook": "ATALHO DE TECLADO",
|
||||
"service.audioInput": "ENTRADA DE ÁUDIO",
|
||||
"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ês",
|
||||
"settings.sttLang.ja": "Japonês",
|
||||
"settings.sttLang.zh": "Chinês",
|
||||
"template.outputHelperText": "Use {{nomeCampo}} para marcadores de posição",
|
||||
"nav.meeting": "Reunião",
|
||||
"meeting.title": "Modo Reunião",
|
||||
"meeting.newMeeting": "Nova Reunião",
|
||||
"meeting.startRecording": "Iniciar Gravação",
|
||||
"meeting.stopRecording": "Parar Gravação",
|
||||
"meeting.recording": "Gravando",
|
||||
"meeting.processing": "Gerando ata...",
|
||||
"meeting.completed": "Concluído",
|
||||
"meeting.error": "Erro",
|
||||
"meeting.elapsed": "Tempo decorrido",
|
||||
"meeting.memoPlaceholder": "Digite um memo (Enter para adicionar)",
|
||||
"meeting.memoAdded": "Memo adicionado",
|
||||
"meeting.noSessions": "Nenhuma gravação de reunião",
|
||||
"meeting.noSessionsDesc": "Pressione Nova Reunião para começar a gravar",
|
||||
"meeting.summary": "Resumo",
|
||||
"meeting.decisions": "Decisões",
|
||||
"meeting.actionItems": "Itens de ação",
|
||||
"meeting.timeline": "Linha do tempo",
|
||||
"meeting.transcript": "Transcrição bruta",
|
||||
"meeting.memos": "Memos",
|
||||
"meeting.exportPdf": "Exportar PDF",
|
||||
"meeting.exportMarkdown": "Exportar Markdown",
|
||||
"meeting.delete": "Excluir",
|
||||
"meeting.deleteConfirm": "Excluir este registro de reunião?",
|
||||
"meeting.backToList": "Voltar à lista",
|
||||
"meeting.notificationTitle": "Ata pronta",
|
||||
"meeting.notificationBody": "A ata da reunião foi gerada.",
|
||||
"meeting.sessions": "{{count}} sessões",
|
||||
"meeting.duration": "{{minutes}} min",
|
||||
"meeting.editTitle": "Editar título",
|
||||
"meeting.untitled": "Reunião sem título",
|
||||
"meeting.processingStep.merging": "Mesclando transcrição...",
|
||||
"meeting.processingStep.generating": "Gerando ata com LLM...",
|
||||
"meeting.processingStep.parsing": "Analisando ata...",
|
||||
"meeting.processingStep.saving": "Salvando...",
|
||||
"meeting.processingStep.notifying": "Enviando notificação...",
|
||||
"meeting.transcriptTab": "Transcrição",
|
||||
"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ído",
|
||||
"meeting.autoSaved": "Salvo automaticamente",
|
||||
"meeting.minutesTemplate": "Ata de reunião",
|
||||
"meeting.reportTemplate": "Relatório",
|
||||
"meeting.ideaNoteTemplate": "Nota de ideias",
|
||||
"meeting.customTemplate": "Personalizado",
|
||||
"meeting.downloadTranscript": "Baixar transcrição",
|
||||
"meeting.polish": "Polir com IA",
|
||||
"meeting.polishing": "IA está polindo a transcrição...",
|
||||
"meeting.polished": "Polimento IA concluído",
|
||||
"meeting.mindmapTemplate": "Mapa mental",
|
||||
"meeting.chat": "Chat IA",
|
||||
"meeting.chatPlaceholder": "Pergunte sobre a reunião...",
|
||||
"meeting.chatSend": "Enviar",
|
||||
"meeting.chatClear": "Limpar chat",
|
||||
"meeting.copyToClipboard": "Copiar para área de transferência",
|
||||
"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ão",
|
||||
"meeting.startRecordingError": "Falha ao iniciar gravação",
|
||||
"meeting.diarize": "Identificar oradores",
|
||||
"meeting.diarizing": "Identificando oradores...",
|
||||
"meeting.diarizeComplete": "Identificação concluída",
|
||||
"meeting.speaker": "Orador",
|
||||
"settings.hfToken": "Token do HuggingFace",
|
||||
"settings.hfTokenHint": "Um token do HuggingFace é necessário para identificar oradores",
|
||||
"settings.diarization": "Identificação de oradores",
|
||||
"settings.diarizationHint": "Identifica automaticamente os oradores após o término da gravação"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"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": "Команд нет — нажмите «Добавить» для создания",
|
||||
"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}} — нажмите «Сохранить»",
|
||||
"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": "Нажмите «Новое совещание», чтобы начать запись",
|
||||
"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": "Автоматически определять говорящих после завершения записи"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"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": "กด «การประชุมใหม่» เพื่อเริ่มบันทึก",
|
||||
"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": "ระบุผู้พูดโดยอัตโนมัติหลังจากการบันทึกสิ้นสุด"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"app.name": "D3RO Voice",
|
||||
"app.tagline": "Trợ lý giọng nói 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ài đặt",
|
||||
"dashboard.sessionOverview": "Tổng quan phiên",
|
||||
"dashboard.systemStatus": "Trạng thái hệ thống",
|
||||
"dashboard.sessionsToday": "Phiên hôm nay",
|
||||
"dashboard.pressToRecord": "Nhấn {{key}} để bắt đầu ghi âm",
|
||||
"dashboard.hotkeyNotSet": "Chưa đặt phím tắt",
|
||||
"dashboard.words": "Từ",
|
||||
"dashboard.total": "Tổng",
|
||||
"dashboard.streak": "Chuỗi",
|
||||
"dashboard.days": "ngày",
|
||||
"dashboard.recording": "Đang ghi",
|
||||
"dashboard.sessions": "Phiên",
|
||||
"dashboard.today": "Hôm nay",
|
||||
"dashboard.recentTranscriptions": "Phiên âm gần đây",
|
||||
"dashboard.noHistory": "Chưa có lịch sử — nhấn phím tắt để bắt đầu ghi âm",
|
||||
"dashboard.copy": "Sao chép",
|
||||
"dashboard.entries": "{{count}} mục",
|
||||
"dashboard.stat": "Thống kê",
|
||||
"dashboard.sys": "Hệ thống",
|
||||
"history.title": "Lịch sử phiên âm",
|
||||
"history.search": "Tìm kiếm...",
|
||||
"history.entries": "{{count}} mục",
|
||||
"history.loading": "Đang tải...",
|
||||
"history.noResults": "Không tìm thấy kết quả",
|
||||
"history.noHistory": "Chưa có lịch sử — hãy bắt đầu ghi âm",
|
||||
"history.count": "{{count}} mục",
|
||||
"dictionary.title": "Từ điển tùy chỉnh",
|
||||
"dictionary.words": "{{count}} từ",
|
||||
"dictionary.add": "Thêm",
|
||||
"dictionary.search": "Tìm kiếm...",
|
||||
"dictionary.loading": "Đang tải...",
|
||||
"dictionary.noResults": "Không tìm thấy kết quả",
|
||||
"dictionary.noWords": "Chưa có từ — thêm từ tùy chỉnh để cải thiện độ chính xác STT",
|
||||
"dictionary.used": "Đã dùng {{count}} lần",
|
||||
"dictionary.editTitle": "Chỉnh sửa từ",
|
||||
"dictionary.addTitle": "Thêm từ",
|
||||
"dictionary.word": "Từ",
|
||||
"dictionary.pronunciation": "Phát âm (tùy chọn)",
|
||||
"commands.title": "Lệnh LLM",
|
||||
"commands.count": "{{count}} lệnh",
|
||||
"commands.add": "Thêm",
|
||||
"commands.activeCommand": "Lệnh đang hoạt động",
|
||||
"commands.none": "Không có",
|
||||
"commands.loading": "Đang tải...",
|
||||
"commands.noCommands": "Chưa có lệnh — nhấn Thêm để tạo",
|
||||
"commands.editTitle": "Chỉnh sửa lệnh",
|
||||
"commands.addTitle": "Thêm lệnh",
|
||||
"commands.name": "Tên",
|
||||
"commands.description": "Mô tả",
|
||||
"commands.promptTemplate": "Mẫu prompt",
|
||||
"commands.promptHelp": "{{text}} sẽ được thay thế bằng văn bản phiên âm",
|
||||
"commands.defaultPrompt": "Vui lòng cải thiện {{text}}.",
|
||||
"settings.title": "Cài đặt",
|
||||
"settings.tabs.general": "Chung",
|
||||
"settings.tabs.audio": "Âm thanh",
|
||||
"settings.tabs.stt": "STT",
|
||||
"settings.tabs.llm": "LLM",
|
||||
"settings.tabs.about": "Giới thiệu",
|
||||
"settings.shortcuts": "Phím tắt",
|
||||
"settings.dictation": "Chính tả",
|
||||
"settings.dictation.desc": "Giữ phím và nói. Thả phím để bắt đầu phiên âm.",
|
||||
"settings.agent": "Chế độ Agent",
|
||||
"settings.agent.descWithKey": "Nhấn đúp {{key}} để vào chế độ Agent.",
|
||||
"settings.agent.descNoKey": "Vui lòng đặt phím tắt chính 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ím tắt riêng.",
|
||||
"settings.key": "Phím",
|
||||
"settings.notSet": "Chưa đặt",
|
||||
"settings.enabled": "Đã bật",
|
||||
"settings.disabled": "Đã tắt",
|
||||
"settings.interface": "Giao diện",
|
||||
"settings.theme": "Giao diện",
|
||||
"settings.theme.system": "Hệ thống",
|
||||
"settings.theme.light": "Sáng",
|
||||
"settings.theme.dark": "Tối",
|
||||
"settings.language": "Ngôn ngữ",
|
||||
"settings.appBehavior": "Hành vi ứng dụng",
|
||||
"settings.closeToTray": "Thu nhỏ xuống khay hệ thống",
|
||||
"settings.autoLaunch": "Tự động khởi động cùng hệ thống",
|
||||
"settings.autoInsert": "Tự động chèn văn bản sau khi phiên âm",
|
||||
"settings.soundEffects": "Hiệu ứng âm thanh",
|
||||
"settings.microphone": "Micrô",
|
||||
"settings.inputDevice": "Thiết bị đầu vào",
|
||||
"settings.deviceDefault": "(Mặc định)",
|
||||
"settings.textInsert": "Chèn văn bản",
|
||||
"settings.insertMethod": "Phương thức chèn",
|
||||
"settings.insertClipboard": "Bộ nhớ tạm (Ctrl+V)",
|
||||
"settings.insertKeyboard": "Giả lập bàn phím",
|
||||
"settings.whisperModel": "Mô hình Whisper",
|
||||
"settings.model.tiny": "tiny (39 MB, nhanh nhất)",
|
||||
"settings.model.base": "base (74 MB, cân 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ôn ngữ nhận dạng",
|
||||
"settings.sttLang.auto": "Tự động phát hiện",
|
||||
"settings.ollamaServer": "Máy chủ Ollama",
|
||||
"settings.ollamaUrl": "URL máy chủ Ollama",
|
||||
"settings.ollamaHint": "Nếu Ollama đang chạy, kết nối sẽ tự động. Tải mô hình trực tiếp từ Ollama (ví dụ: ollama pull qwen3:4b).",
|
||||
"settings.postProcess": "Hậu xử lý giọng nói",
|
||||
"settings.defaultAction": "Lệnh hậu xử lý mặc định",
|
||||
"settings.action.none": "Không có (văn bản gốc)",
|
||||
"settings.action.refine": "Cải thiện (ngữ pháp + tự nhiên)",
|
||||
"settings.action.translate": "Dịch",
|
||||
"settings.action.summarize": "Tóm tắt",
|
||||
"settings.action.grammar": "Sửa ngữ pháp",
|
||||
"settings.action.custom": "Prompt tùy chỉnh",
|
||||
"settings.actionHint": "Hậu xử lý LLM đã chọn sẽ được áp dụng cho văn bản phiên âm sau khi ghi âm. Chỉ hoạt động khi Ollama được kết nối.",
|
||||
"settings.about.version": "Phiên bản",
|
||||
"settings.about.techStack": "Ngăn xếp công nghệ",
|
||||
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
|
||||
"settings.about.voiceEngine": "Bộ máy giọng nói",
|
||||
"settings.about.voiceEngineValue": "STT: faster-whisper (cục bộ) / LLM: Ollama (cục bộ)",
|
||||
"settings.about.description": "Trợ lý giọng nói AI cục bộ dựa trên kỹ thuật dịch ngược Speakly. Hoạt động hoàn toàn cục bộ, không phụ thuộc vào dịch vụ đám mây.",
|
||||
"settings.about.restartOnboarding": "Xem lại hướng dẫn cài đặ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ý LLM (dịch, tóm tắt, v.v.).",
|
||||
"status.nudge.guide": "Xem hướng dẫn cài đặt →",
|
||||
"onboarding.welcome.title": "D3RO-VOICE",
|
||||
"onboarding.welcome.desc": "Không cần gõ phím — chỉ cần nói. Trợ lý giọng nói AI cục bộ.",
|
||||
"onboarding.welcome.start": "Bắt đầu",
|
||||
"onboarding.mic.title": "Cài đặt micrô",
|
||||
"onboarding.mic.desc": "Chọn micrô bạn muốn dùng. Có thể thay đổi sau trong cài đặt.",
|
||||
"onboarding.hotkey.title": "Cài đặt phím tắt",
|
||||
"onboarding.hotkey.desc": "Đặt phím tắt chính tả. Giữ phím trong khi ghi âm.",
|
||||
"onboarding.hotkey.notSet": "Phím tắt chưa được đặt",
|
||||
"onboarding.hotkey.change": "Thay đổi phím tắt",
|
||||
"onboarding.hotkey.set": "Đặt phím tắt",
|
||||
"onboarding.ollama.title": "Cài đặt Ollama (tùy chọn)",
|
||||
"onboarding.ollama.desc": "Cần Ollama để sử dụng hậu xử lý LLM (dịch, tóm tắt, v.v.). Chính tả giọng nói vẫn hoạt động mà không cần Ollama.",
|
||||
"onboarding.ollama.download": "Tải Ollama",
|
||||
"onboarding.ollama.modelHint": "Sau khi cài đặt, tải mô hình qua terminal",
|
||||
"onboarding.done.title": "Thiết lập hoàn tất!",
|
||||
"onboarding.done.descWithKey": "Giữ phím {{key}} và nói — giọng nói sẽ được chuyển thành văn bản.",
|
||||
"onboarding.done.descNoKey": "Đặt phím tắt trong cài đặt để bắt đầu chính tả giọng nói.",
|
||||
"onboarding.done.start": "Bắt đầu",
|
||||
"onboarding.back": "Quay lại",
|
||||
"onboarding.next": "Tiếp theo",
|
||||
"hotkey.title": "Cài đặt phím tắt",
|
||||
"hotkey.dictationTitle": "Đặt phím tắt chính tả",
|
||||
"hotkey.oneTouchTitle": "Đặt phím tắt chế độ một chạm",
|
||||
"hotkey.prompt": "Nhấn tổ hợp phím...",
|
||||
"hotkey.ready": "✓ {{keys}} — hãy nhấn Lưu",
|
||||
"hotkey.noKey": "Vui lòng nhập phím",
|
||||
"hotkey.reserved": "{{keys}} là phím tắt hệ thống được dành riêng",
|
||||
"hotkey.current": "Hiện tại: {{keys}}",
|
||||
"hotkey.hint": "Nhập tổ hợp phím (ví dụ: Ctrl+Shift+Q) hoặc phím đơn (ví dụ: F5)",
|
||||
"hotkey.reset": "Nhập lại",
|
||||
"ollama.title": "OLLAMA SETUP GUIDE",
|
||||
"ollama.step1.title": "BƯỚC 1 — Cài đặt Ollama",
|
||||
"ollama.step1.desc": "Ollama là công cụ miễn phí để chạy LLM cục bộ.",
|
||||
"ollama.step2.title": "BƯỚC 2 — Tải mô hình",
|
||||
"ollama.step2.desc": "Tải mô hình bạn muốn qua terminal. Khuyến nghị:",
|
||||
"ollama.step2.alt": "Hoặc mô hình lớn hơn: ollama pull qwen3:8b (chính xác 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át hiện. Khi đèn LED trên thanh trạng thái chuyển từ đỏ sang xanh — đã sẵn sàng!",
|
||||
"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óa",
|
||||
"common.add": "Thêm",
|
||||
"common.edit": "Chỉnh sửa",
|
||||
"common.close": "Đóng",
|
||||
"common.confirm": "Xác nhận",
|
||||
"common.loading": "Đang tải...",
|
||||
"common.copy": "Sao chép",
|
||||
"common.test": "Kiểm tra",
|
||||
"common.stop": "Dừng",
|
||||
"date.today": "Hôm nay",
|
||||
"date.yesterday": "Hôm qua",
|
||||
"settings.theme.nord": "Nord",
|
||||
"settings.theme.solarized": "Solarized",
|
||||
"settings.theme.catppuccin": "Catppuccin",
|
||||
"settings.theme.dracula": "Dracula",
|
||||
"settings.sttLang.ko": "Tiếng Hàn",
|
||||
"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ênTrường}} cho trình 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 âm",
|
||||
"meeting.stopRecording": "Dừng ghi âm",
|
||||
"meeting.recording": "Đang ghi âm",
|
||||
"meeting.processing": "Đang tạo biên bản...",
|
||||
"meeting.completed": "Hoàn thành",
|
||||
"meeting.error": "Lỗi",
|
||||
"meeting.elapsed": "Thời gian đã qua",
|
||||
"meeting.memoPlaceholder": "Nhập ghi chú (Enter để thêm)",
|
||||
"meeting.memoAdded": "Đã thêm ghi chú",
|
||||
"meeting.noSessions": "Không có bản ghi cuộc họp",
|
||||
"meeting.noSessionsDesc": "Nhấn «Cuộc họp mới» để bắt đầu ghi âm",
|
||||
"meeting.summary": "Tóm tắt",
|
||||
"meeting.decisions": "Quyết định",
|
||||
"meeting.actionItems": "Hành động cần thực hiện",
|
||||
"meeting.timeline": "Dòng thời gian",
|
||||
"meeting.transcript": "Bản ghi thô",
|
||||
"meeting.memos": "Ghi chú",
|
||||
"meeting.exportPdf": "Xuất PDF",
|
||||
"meeting.exportMarkdown": "Xuất Markdown",
|
||||
"meeting.delete": "Xóa",
|
||||
"meeting.deleteConfirm": "Xóa bản ghi cuộc họp này?",
|
||||
"meeting.backToList": "Quay lại danh sách",
|
||||
"meeting.notificationTitle": "Biên bản đã sẵn sàng",
|
||||
"meeting.notificationBody": "Biên bản cuộc họp đã được tạo.",
|
||||
"meeting.sessions": "{{count}} phiên",
|
||||
"meeting.duration": "{{minutes}} phút",
|
||||
"meeting.editTitle": "Chỉnh sửa tiêu đề",
|
||||
"meeting.untitled": "Cuộc họp không có tiêu đề",
|
||||
"meeting.processingStep.merging": "Đang ghép bản ghi...",
|
||||
"meeting.processingStep.generating": "Đang tạo biên bản với LLM...",
|
||||
"meeting.processingStep.parsing": "Đang phân tích biên bản...",
|
||||
"meeting.processingStep.saving": "Đang lưu...",
|
||||
"meeting.processingStep.notifying": "Đang gửi thông báo...",
|
||||
"meeting.transcriptTab": "Bản ghi",
|
||||
"meeting.addDocument": "Thêm tài liệu",
|
||||
"meeting.selectTemplate": "Chọn mẫu",
|
||||
"meeting.generate": "Tạo",
|
||||
"meeting.generating": "Đang tạo tài liệu...",
|
||||
"meeting.editMode": "Chỉnh sửa",
|
||||
"meeting.previewMode": "Xem trước",
|
||||
"meeting.modified": "Đã chỉnh sửa",
|
||||
"meeting.originalText": "Bản gốc",
|
||||
"meeting.editedText": "Đã chỉnh sửa",
|
||||
"meeting.exportDocx": "Xuất DOCX",
|
||||
"meeting.exportTxt": "Xuất TXT",
|
||||
"meeting.exportFormat": "Xuất",
|
||||
"meeting.customPrompt": "Lệnh tùy chỉnh",
|
||||
"meeting.templateName": "Tên mẫu",
|
||||
"meeting.templatePrompt": "Lệnh AI",
|
||||
"meeting.templateSave": "Lưu mẫu",
|
||||
"meeting.documentDeleted": "Đã xóa tài liệu",
|
||||
"meeting.autoSaved": "Đã lưu tự động",
|
||||
"meeting.minutesTemplate": "Biên bản họp",
|
||||
"meeting.reportTemplate": "Báo cáo",
|
||||
"meeting.ideaNoteTemplate": "Ghi chú ý tưởng",
|
||||
"meeting.customTemplate": "Tùy 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àn 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óa chat",
|
||||
"meeting.copyToClipboard": "Sao chép vào bộ nhớ tạm",
|
||||
"meeting.copied": "Đã sao chép",
|
||||
"meeting.chatCollapse": "Thu gọn chat",
|
||||
"meeting.chatExpand": "Mở rộng chat",
|
||||
"meeting.exportMd": "Markdown (.md)",
|
||||
"meeting.exportPdfFmt": "PDF (.pdf)",
|
||||
"meeting.polishFailed": "AI đánh bóng thất bại",
|
||||
"meeting.viewDetailError": "Không thể tải chi tiết cuộc họp",
|
||||
"meeting.startRecordingError": "Không thể bắt đầu ghi âm",
|
||||
"meeting.diarize": "Phân tách người nói",
|
||||
"meeting.diarizing": "Đang nhận dạng người nói...",
|
||||
"meeting.diarizeComplete": "Phân tách người nói hoàn tất",
|
||||
"meeting.speaker": "Người nói",
|
||||
"settings.hfToken": "Token HuggingFace",
|
||||
"settings.hfTokenHint": "Cần token HuggingFace để phân tách người nói",
|
||||
"settings.diarization": "Phân tách người nói",
|
||||
"settings.diarizationHint": "Tự động nhận dạng người nói sau khi ghi âm kết thúc"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"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": "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": "錄音結束後自動識別說話人"
|
||||
}
|
||||
|
|
@ -1,282 +0,0 @@
|
|||
{
|
||||
"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": "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": "录音结束后自动识别说话人"
|
||||
}
|
||||
|
|
@ -13,7 +13,7 @@ import LinkIcon from '@mui/icons-material/Link'
|
|||
import { MetalCard, PhosphorText, Led, ScreenPanel } from '@d3ro/ui/components/ds'
|
||||
import { PageHeader, EmptyStateCard } from '../components/shared'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import { TemplateSection } from '../components/TemplateSection'
|
||||
import type { VoiceCommandRule, VoiceCommandKeyword, KeywordMatchMode, LLMChain, ChainStep } from '@d3ro/core/types'
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { Box } from '@mui/material'
|
|||
import { CrtDisplay, InstrumentPanel, Led, MetalCard, PhosphorText, ScreenPanel, ButtonGroup, PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { EmptyStateCard, HistoryEntryCard } from '../components/shared'
|
||||
import { d3roPalette, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import { formatRecordingTime, formatRecordingTimeUnit, formatNumber, getDateKey } from '../utils/formatters'
|
||||
import { FileDropZone } from '../components/FileDropZone'
|
||||
import type { StatsSummary, HistoryEntry, HotkeyBinding, CaptionState, LicenseTier, UsageQuota } from '@d3ro/core/types'
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import EditIcon from '@mui/icons-material/Edit'
|
|||
import { MetalCard, PhosphorText } from '@d3ro/ui/components/ds'
|
||||
import { PageHeader, SearchInput, EmptyStateCard } from '../components/shared'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { DictionaryEntry, DictionaryPage as DictPageData } from '@d3ro/core/types'
|
||||
|
||||
const PAGE_SIZE = 50
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { Box, Chip, IconButton, Tooltip } from '@mui/material'
|
|||
import FileDownloadIcon from '@mui/icons-material/FileDownload'
|
||||
import { PhosphorText } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roTypo, d3roFontMono, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import { getDateKey } from '../utils/formatters'
|
||||
import { EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard } from '../components/shared'
|
||||
import type { HistoryEntry, HistoryPage as HistoryPageData, TagCount } from '@d3ro/core/types'
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import DescriptionIcon from '@mui/icons-material/Description'
|
|||
import { MetalCard, PhosphorText, Led, PhysicalButton, ScreenPanel } from '@d3ro/ui/components/ds'
|
||||
import { PageHeader, EmptyStateCard } from '../components/shared'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { RAGDocument, RAGQueryResult, RAGIndexProgress } from '@d3ro/core/types'
|
||||
|
||||
export function KnowledgeBasePage(): React.ReactElement {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import { MeetingDetailTabs } from '../components/meeting/MeetingDetailTabs'
|
|||
import { EditableSegment } from '../components/meeting/EditableSegment'
|
||||
import { PageHeader, EmptyStateCard } from '../components/shared'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type {
|
||||
MeetingSessionSummary,
|
||||
MeetingSessionDetail,
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import CancelIcon from '@mui/icons-material/Cancel'
|
|||
import { MetalCard, PhosphorText, Led, PhysicalButton, ScreenPanel, InstrumentPanel } from '@d3ro/ui/components/ds'
|
||||
import { PageHeader } from '../components/shared'
|
||||
import { d3roPalette, d3roFontMono, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '../i18n'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type {
|
||||
ConversationState,
|
||||
ConversationMessage,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@
|
|||
"@d3ro/core": ["../../packages/core/src/index.ts"],
|
||||
"@d3ro/core/*": ["../../packages/core/src/*"],
|
||||
"@d3ro/ui": ["../../packages/ui/src/index.ts"],
|
||||
"@d3ro/ui/*": ["../../packages/ui/src/*"]
|
||||
"@d3ro/ui/*": ["../../packages/ui/src/*"],
|
||||
"@d3ro/i18n": ["../../packages/i18n/src/index.tsx"]
|
||||
},
|
||||
"strict": true,
|
||||
"noImplicitAny": true,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@
|
|||
"@d3ro/core": ["../../packages/core/src/index.ts"],
|
||||
"@d3ro/core/*": ["../../packages/core/src/*"],
|
||||
"@d3ro/ui": ["../../packages/ui/src/index.ts"],
|
||||
"@d3ro/ui/*": ["../../packages/ui/src/*"]
|
||||
"@d3ro/ui/*": ["../../packages/ui/src/*"],
|
||||
"@d3ro/i18n": ["../../packages/i18n/src/index.tsx"]
|
||||
},
|
||||
"jsx": "react-jsx",
|
||||
"strict": true,
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@ export default defineConfig({
|
|||
resolve: {
|
||||
alias: {
|
||||
'@d3ro/core': resolve(__dirname, '../../packages/core/src'),
|
||||
'@d3ro/ui': resolve(__dirname, '../../packages/ui/src')
|
||||
'@d3ro/ui': resolve(__dirname, '../../packages/ui/src'),
|
||||
'@d3ro/i18n': resolve(__dirname, '../../packages/i18n/src/index.tsx')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue