Full Changelog: [New Features] - Added Native Translation Mode: - Whisper model now fully supports Translating any language to English - Added 'task' and 'language' parameters to Transcriber core - Dual Hotkey Support: - Added separate Global Hotkeys for Transcribe (default F8) and Translate (default F10) - Both hotkeys are fully customizable in Settings - Engine dynamically switches modes based on which key is pressed [UI/UX Improvements] - Settings Window: - Widened Hotkey Input fields (240px) to accommodate long combinations - Added Pretty-Printing for hotkey sequences (e.g. 'ctrl+f9' display as 'Ctrl + F9') - Replaced Country Code dropdown with Full Language Names (99+ languages) - Made Language Dropdown scrollable (max height 300px) to prevent screen overflow - Removed redundant 'Task' selector (replaced by dedicated hotkeys) - System Tray: - Tooltip now displays both Transcribe and Translate hotkeys - Tooltip hotkeys are formatted readably [Core & Performance] - Bootstrapper: - Implemented Smart Incremental Sync - Now checks filesize and content hash before copying files - Drastically reduces startup time for subsequent runs - Preserves user settings.json during updates - Backend: - Fixed HotkeyManager to support dynamic configuration keys - Fixed Language Lock: selecting a language now correctly forces the model to use it - Refactored bridge/main connection for language list handling
33 lines
958 B
Python
33 lines
958 B
Python
"""
|
|
Formatter Utilities
|
|
===================
|
|
Helper functions for text formatting.
|
|
"""
|
|
|
|
def format_hotkey(sequence: str) -> str:
|
|
"""
|
|
Formats a hotkey sequence string (e.g. 'ctrl+alt+f9')
|
|
into a pretty readable string (e.g. 'Ctrl + Alt + F9').
|
|
"""
|
|
if not sequence:
|
|
return "None"
|
|
|
|
parts = sequence.split('+')
|
|
formatted_parts = []
|
|
|
|
for p in parts:
|
|
p = p.strip().lower()
|
|
if p == 'ctrl': formatted_parts.append('Ctrl')
|
|
elif p == 'alt': formatted_parts.append('Alt')
|
|
elif p == 'shift': formatted_parts.append('Shift')
|
|
elif p == 'win': formatted_parts.append('Win')
|
|
elif p == 'esc': formatted_parts.append('Esc')
|
|
else:
|
|
# Capitalize first letter
|
|
if len(p) > 0:
|
|
formatted_parts.append(p[0].upper() + p[1:])
|
|
else:
|
|
formatted_parts.append(p)
|
|
|
|
return " + ".join(formatted_parts)
|