
interface TranslationCacheEntry {
key: string // "de|en|hallo welt"
translatedText: string
provider: string
timestamp: number
}
interface ModelMeta {
id: string // "opus-mt-de-en"
type: 'translation' | 'tts' | 'stt'
sizeBytes: number
version: string
}src/lib/offline/db.ts — Schema Definitionensrc/lib/offline/storage-manager.ts — Quota Managementsrc/lib/offline/translation-cache.ts — Cache Logicsrc/lib/translate.ts Zeile 182-186: IndexedDB Check nach In-Memorypackage.json: idb Package (~3KB)navigator.onLine Events + 10s Heartbeat-Pingtype NetworkMode =
| 'online' // Volle Cloud-Power
| 'degraded' // Langsam, Fallbacks
| 'offline' // Nur lokale Enginesconst {
mode,
isOnline,
translationEngine,
ttsEngine,
sttEngine
} = useNetworkStatus()// Model Download
await downloadModel(
'opus-mt-de-en',
(progress) => console.log(progress)
)
// Prüfen
const downloaded =
await isModelDownloaded('opus-mt-de-en')
// Übersetzen
const result = await translateOffline(
'Hallo Welt',
'de',
'en'
) // → "Hello World"
src/lib/offline/tts-cache.tsgetCachedTTSAudio(text, lang, quality)
cacheTTSAudio(text, lang, quality, blob)
preloadPhraseAudio(phrases[])src/lib/offline/stt-engine.tscreateSherpaSTTEngine(): STTEngine
// start(), stop(), cleanup
// provider: 'sherpa-onnx'Header.tsx Zeile 70+: Settings-Icon (⚙️) + Status-Dot integriert.vite.config.ts angepasst:*.onnx, *.wasm inkludiert/index.html für SPA-Routingphrases-mediterranean.json (500 Phrasen), phrases-common.json (200 Basis)npm install @capacitor/core @capacitor/cli
npx cap init "GuideTranslator" \
"com.fintutto.translator"
npm install @capacitor/ios @capacitor/android
npx cap add ios
npx cap add android
npx cap sync
npx cap open ios
npx cap open android