supervertaler 1.9.194__tar.gz → 1.9.196__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of supervertaler might be problematic. Click here for more details.
- {supervertaler-1.9.194 → supervertaler-1.9.196}/CHANGELOG.md +27 -1
- {supervertaler-1.9.194 → supervertaler-1.9.196}/FAQ.md +28 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/PKG-INFO +1 -1
- {supervertaler-1.9.194 → supervertaler-1.9.196}/Supervertaler.py +62 -34
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/index.html +21 -5
- supervertaler-1.9.196/docs/screenshots/QuickTrans.png +0 -0
- supervertaler-1.9.196/docs/screenshots/Supervertalerv1.9.195_2026-02-02.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/reference/faq.md +28 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/llm_clients.py +58 -33
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/unified_prompt_manager_qt.py +22 -1
- {supervertaler-1.9.194 → supervertaler-1.9.196}/pyproject.toml +1 -1
- {supervertaler-1.9.194 → supervertaler-1.9.196}/supervertaler.egg-info/PKG-INFO +1 -1
- {supervertaler-1.9.194 → supervertaler-1.9.196}/supervertaler.egg-info/SOURCES.txt +3 -1
- {supervertaler-1.9.194 → supervertaler-1.9.196}/LICENSE +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/MANIFEST.in +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/README.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/ICON_CONVERSION_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/MB.ico +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/README.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/README_ICONS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/arrow_left_dark.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/arrow_left_light.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/arrow_right_dark.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/arrow_right_light.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/generate_icons.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon.ico +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_128.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_16x16.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_24.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_256.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_256x256.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_32.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_32x32.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_48.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_48x48.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_64.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_preview.html +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_sv_modern.svg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_sv_modern_paths.svg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_sv_simple.svg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/icon_sv_website.svg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/patent-drawing-1951.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/scrollbar_down.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/scrollbar_up.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/assets/supervertaler_icon_colours.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/.nojekyll +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/CNAME +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/SIMILAR_APPS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/apple-touch-icon.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/BUGFIX_README.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/CHANGELIST.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/CHANGELOG_Old.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/FAQ.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/MASTER_INDEX.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/PHASE2_START_HERE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/SESSION_STATUS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/START_HERE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TERMBASE_FIXES.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/assets/Figure1.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/assets/patent-drawing-1951.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/changelog.html +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/dev-notes/QA.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/dev-notes/issue_28.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/dev-notes/openai_debug.txt +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/emoji_mockup.html +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/favicon.ico +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/FAQ.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/PDF_RESCUE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/logo.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_grid.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/script.js +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/site.webmanifest +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/specifications/opus-api-integration.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/styles.css +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/README.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/SUMMARY.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/ai-translation/batch-translation.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/ai-translation/ollama.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/ai-translation/overview.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/ai-translation/prompt-library.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/ai-translation/prompts.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/ai-translation/providers.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/ai-translation/single-segment.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/cat-tools/cafetran.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/cat-tools/memoq.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/cat-tools/overview.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/cat-tools/phrase.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/cat-tools/trados.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/editor/editing-confirming.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/editor/filtering.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/editor/find-replace.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/editor/navigation.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/editor/pagination.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/editor/translation-grid.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/get-started/api-keys.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/get-started/first-project.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/get-started/installation.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/get-started/quick-start.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/glossaries/basics.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/glossaries/creating.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/glossaries/extraction.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/glossaries/highlighting.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/glossaries/importing.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/import-export/bilingual-tables.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/import-export/docx-import.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/import-export/exporting.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/import-export/formats.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/import-export/multi-file.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/import-export/txt-import.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/qa/non-translatables.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/qa/spellcheck.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/qa/tag-validation.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/reference/changelog.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/reference/contributing.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/reference/file-formats.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/settings/fonts.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/settings/general.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/settings/shortcuts.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/settings/theme.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/settings/view.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/superlookup/glossary-search.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/superlookup/mt.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/superlookup/overview.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/superlookup/tm-search.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/superlookup/web-resources.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/tools/autofingers.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/tools/image-extractor.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/tools/pdf-rescue.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/tools/tmx-editor.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/tools/voice-commands.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/translation-memory/basics.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/translation-memory/managing-tms.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/translation-memory/supermemory.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/api-issues.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/common-issues.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/linux.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/performance.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/sv-icon.svg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/DATABASE_LOCATIONS.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/README.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/tests/test_encoding_corruption.txt +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/web-app-manifest-192x192.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/docs/web-app-manifest-512x512.png +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/__init__.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/ai_actions.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/ai_attachment_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/ai_file_viewer_dialog.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/autofingers_engine.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/cafetran_docx_handler.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/config_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/database_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/database_migrations.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/dejavurtf_handler.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/document_analyzer.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/docx_handler.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/encoding_repair.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/encoding_repair_Qt.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/encoding_repair_ui.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/extract_tm.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/feature_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/figure_context_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/file_dialog_helper.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/find_replace.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/find_replace_qt.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/glossary_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/image_extractor.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/keyboard_shortcuts_widget.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/llm_leaderboard.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/llm_superbench_ui.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/local_llm_setup.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/model_update_dialog.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/model_version_checker.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/mqxliff_handler.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/non_translatables_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/pdf_rescue_Qt.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/pdf_rescue_tkinter.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/phrase_docx_handler.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/project_home_panel.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/project_tm.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/prompt_assistant.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/prompt_library.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/prompt_library_migration.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/quick_access_sidebar.py +0 -0
- /supervertaler-1.9.194/modules/mt_quick_popup.py → /supervertaler-1.9.196/modules/quicktrans.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/ribbon_widget.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/sdlppx_handler.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/setup_wizard.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/shortcut_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/simple_segmenter.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/spellcheck_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/statuses.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/style_guide_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/superbench_ui.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/superbrowser.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/supercleaner.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/supercleaner_ui.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/superdocs.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/superdocs_viewer_qt.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/superlookup.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tag_cleaner.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tag_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/term_extractor.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/termbase_entry_editor.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/termbase_import_export.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/termbase_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/termview_widget.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/theme_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tm_editor_dialog.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tm_manager_qt.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tm_metadata_manager.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tmx_editor.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tmx_editor_qt.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tmx_generator.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/tracked_changes.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/trados_docx_handler.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/translation_memory.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/translation_results_panel.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/translation_services.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/unified_prompt_library.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/voice_commands.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/voice_dictation.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/modules/voice_dictation_lite.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/setup.cfg +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/setup.py +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/supervertaler.egg-info/dependency_links.txt +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/supervertaler.egg-info/entry_points.txt +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/supervertaler.egg-info/not-zip-safe +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/supervertaler.egg-info/requires.txt +0 -0
- {supervertaler-1.9.194 → supervertaler-1.9.196}/supervertaler.egg-info/top_level.txt +0 -0
|
@@ -2,10 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Supervertaler are documented in this file.
|
|
4
4
|
|
|
5
|
-
**Current Version:** v1.9.
|
|
5
|
+
**Current Version:** v1.9.196 (February 2, 2026)
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## v1.9.196 - February 2, 2026
|
|
10
|
+
|
|
11
|
+
### 🐛 Bug Fixes
|
|
12
|
+
|
|
13
|
+
- **AI Assistant "Analyze Project" Fixed**: Fixed a bug where clicking "Analyze Project & Generate Prompts" in the AI Assistant would fail with "AI responded but no actions were found". The issue was that the LLM wasn't receiving a system prompt explaining the ACTION format. Now all providers (OpenAI, Claude, Gemini, Ollama) receive proper instructions on how to format their responses.
|
|
14
|
+
|
|
15
|
+
### 🎨 UI Improvements
|
|
16
|
+
|
|
17
|
+
- **Supervoice Settings Two-Column Layout**: Reorganized the Supervoice settings tab into a two-column layout. Voice commands table now displays on the right side, allowing more commands to be visible at once. Settings (Always-On Listening, Speech Recognition Model, AutoHotkey) remain on the left.
|
|
18
|
+
|
|
19
|
+
- **Green Checkmark Checkbox**: The "Enable voice commands" checkbox in Supervoice settings now uses the standard green checkmark style (CheckmarkCheckBox) for visual consistency with the rest of the application.
|
|
20
|
+
|
|
21
|
+
### 🏗️ Code Architecture
|
|
22
|
+
|
|
23
|
+
- **LLM Client System Prompt Support**: Added `system_prompt` parameter to the LLM client's `translate()` method and all provider-specific methods. This enables passing behavioral instructions to AI models for features like the AI Assistant.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## v1.9.195 - February 2, 2026
|
|
28
|
+
|
|
29
|
+
### 🏗️ Code Architecture
|
|
30
|
+
|
|
31
|
+
- **Module Rename**: Renamed `mt_quick_popup.py` → `quicktrans.py` to align with the QuickTrans branding. This prepares the module for future standalone distribution as a separate Windows executable.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
9
35
|
## v1.9.194 - February 1, 2026
|
|
10
36
|
|
|
11
37
|
### 🎨 Branding & Naming
|
|
@@ -672,6 +672,34 @@ ollama pull qwen2.5:3b
|
|
|
672
672
|
- Multiple API keys (GPT-4o, Claude, Gemini)
|
|
673
673
|
- Sufficient API credits for testing runs
|
|
674
674
|
|
|
675
|
+
### Why is my antivirus flagging Supervertaler as malware?
|
|
676
|
+
|
|
677
|
+
This is a **known false positive** that affects applications built with PyInstaller (the tool used to create the Windows EXE).
|
|
678
|
+
|
|
679
|
+
**Why it happens:**
|
|
680
|
+
- PyInstaller bundles Python + all libraries into a single package
|
|
681
|
+
- This binary pattern triggers heuristic detection in some AV software (especially Norton 360)
|
|
682
|
+
- Generic detections like "Win64:Malware-gen" are pattern matches, not actual malware signatures
|
|
683
|
+
- The executable is not code-signed (certificates cost ~$300/year)
|
|
684
|
+
|
|
685
|
+
**Solutions:**
|
|
686
|
+
|
|
687
|
+
1. **Use pip install (Recommended)**
|
|
688
|
+
- Install: `pip install supervertaler`
|
|
689
|
+
- Run: `supervertaler`
|
|
690
|
+
- No AV warnings because it runs from Python source
|
|
691
|
+
|
|
692
|
+
2. **Whitelist the application**
|
|
693
|
+
- Add an exception in your antivirus settings
|
|
694
|
+
- The application is safe - you can verify by checking the [source code on GitHub](https://github.com/michaelbeijer/Supervertaler)
|
|
695
|
+
|
|
696
|
+
3. **Report as false positive**
|
|
697
|
+
- Norton: https://submit.norton.com/
|
|
698
|
+
- Windows Defender: Click "More info" → "Run anyway"
|
|
699
|
+
- Other AV: Check vendor's false positive submission page
|
|
700
|
+
|
|
701
|
+
**This is common for PyInstaller apps** - it affects tools like Calibre, many game mods, and scientific software. See the [PyInstaller FAQ](https://pyinstaller.org/en/stable/faq.html) for more details.
|
|
702
|
+
|
|
675
703
|
---
|
|
676
704
|
|
|
677
705
|
## Workflow & Integration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: supervertaler
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.196
|
|
4
4
|
Summary: Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
|
|
5
5
|
Home-page: https://supervertaler.com
|
|
6
6
|
Author: Michael Beijer
|
|
@@ -32,9 +32,9 @@ License: MIT
|
|
|
32
32
|
"""
|
|
33
33
|
|
|
34
34
|
# Version Information.
|
|
35
|
-
__version__ = "1.9.
|
|
35
|
+
__version__ = "1.9.196"
|
|
36
36
|
__phase__ = "0.9"
|
|
37
|
-
__release_date__ = "2026-02-
|
|
37
|
+
__release_date__ = "2026-02-02"
|
|
38
38
|
__edition__ = "Qt"
|
|
39
39
|
|
|
40
40
|
import sys
|
|
@@ -7447,7 +7447,7 @@ class SupervertalerQt(QMainWindow):
|
|
|
7447
7447
|
return
|
|
7448
7448
|
|
|
7449
7449
|
# Import and create the popup
|
|
7450
|
-
from modules.
|
|
7450
|
+
from modules.quicktrans import MTQuickPopup
|
|
7451
7451
|
|
|
7452
7452
|
# Create popup
|
|
7453
7453
|
popup = MTQuickPopup(
|
|
@@ -18307,14 +18307,15 @@ class SupervertalerQt(QMainWindow):
|
|
|
18307
18307
|
|
|
18308
18308
|
def _create_voice_dictation_settings_tab(self):
|
|
18309
18309
|
"""Create Supervoice Settings tab content with Voice Commands"""
|
|
18310
|
-
from PyQt6.QtWidgets import (QGroupBox, QPushButton, QComboBox, QSpinBox,
|
|
18310
|
+
from PyQt6.QtWidgets import (QGroupBox, QPushButton, QComboBox, QSpinBox,
|
|
18311
18311
|
QTableWidget, QTableWidgetItem, QHeaderView,
|
|
18312
|
-
QAbstractItemView, QCheckBox)
|
|
18312
|
+
QAbstractItemView, QCheckBox, QSplitter)
|
|
18313
|
+
from modules.keyboard_shortcuts_widget import CheckmarkCheckBox
|
|
18313
18314
|
|
|
18314
18315
|
tab = QWidget()
|
|
18315
|
-
|
|
18316
|
-
|
|
18317
|
-
|
|
18316
|
+
main_layout = QVBoxLayout(tab)
|
|
18317
|
+
main_layout.setContentsMargins(20, 20, 20, 20)
|
|
18318
|
+
main_layout.setSpacing(15)
|
|
18318
18319
|
|
|
18319
18320
|
# Load current dictation settings
|
|
18320
18321
|
dictation_settings = self.load_dictation_settings()
|
|
@@ -18327,19 +18328,33 @@ class SupervertalerQt(QMainWindow):
|
|
|
18327
18328
|
header_info.setTextFormat(Qt.TextFormat.RichText)
|
|
18328
18329
|
header_info.setStyleSheet("font-size: 9pt; color: #444; padding: 10px; background-color: #E3F2FD; border-radius: 4px;")
|
|
18329
18330
|
header_info.setWordWrap(True)
|
|
18330
|
-
|
|
18331
|
+
main_layout.addWidget(header_info)
|
|
18331
18332
|
|
|
18332
|
-
# ===== Voice Commands
|
|
18333
|
-
|
|
18334
|
-
|
|
18333
|
+
# ===== Two-column layout: Left = Settings, Right = Voice Commands Table =====
|
|
18334
|
+
columns_layout = QHBoxLayout()
|
|
18335
|
+
columns_layout.setSpacing(15)
|
|
18335
18336
|
|
|
18336
|
-
#
|
|
18337
|
-
|
|
18337
|
+
# --- LEFT COLUMN: Settings ---
|
|
18338
|
+
left_column = QVBoxLayout()
|
|
18339
|
+
left_column.setSpacing(15)
|
|
18340
|
+
|
|
18341
|
+
# Enable voice commands checkbox (green checkmark style)
|
|
18342
|
+
voice_cmd_enabled = CheckmarkCheckBox("Enable voice commands (spoken phrases trigger actions)")
|
|
18338
18343
|
voice_cmd_enabled.setChecked(dictation_settings.get('voice_commands_enabled', True))
|
|
18339
18344
|
voice_cmd_enabled.setToolTip("When enabled, spoken phrases like 'confirm' or 'next segment' will execute commands instead of being inserted as text")
|
|
18340
|
-
|
|
18345
|
+
left_column.addWidget(voice_cmd_enabled)
|
|
18341
18346
|
self.voice_commands_enabled_checkbox = voice_cmd_enabled
|
|
18342
18347
|
|
|
18348
|
+
# Create a layout variable for settings sections to be added below
|
|
18349
|
+
layout = left_column
|
|
18350
|
+
|
|
18351
|
+
# --- RIGHT COLUMN: Voice Commands Table ---
|
|
18352
|
+
right_column = QVBoxLayout()
|
|
18353
|
+
right_column.setSpacing(10)
|
|
18354
|
+
|
|
18355
|
+
commands_group = QGroupBox("🗣️ Voice Commands (Talon-style)")
|
|
18356
|
+
commands_layout = QVBoxLayout()
|
|
18357
|
+
|
|
18343
18358
|
commands_info = QLabel(
|
|
18344
18359
|
"Voice commands let you control Supervertaler by voice. Say a phrase to execute an action.\n"
|
|
18345
18360
|
"If no command matches, the spoken text is inserted as dictation."
|
|
@@ -18358,38 +18373,47 @@ class SupervertalerQt(QMainWindow):
|
|
|
18358
18373
|
self.voice_commands_table.horizontalHeader().setSectionResizeMode(3, QHeaderView.ResizeMode.ResizeToContents)
|
|
18359
18374
|
self.voice_commands_table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
|
|
18360
18375
|
self.voice_commands_table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
|
|
18361
|
-
self.voice_commands_table.setMinimumHeight(
|
|
18362
|
-
|
|
18363
|
-
|
|
18376
|
+
self.voice_commands_table.setMinimumHeight(350)
|
|
18377
|
+
|
|
18364
18378
|
# Populate table with current commands
|
|
18365
18379
|
self._populate_voice_commands_table()
|
|
18366
18380
|
commands_layout.addWidget(self.voice_commands_table)
|
|
18367
18381
|
|
|
18368
18382
|
# Command buttons
|
|
18369
18383
|
cmd_btn_layout = QHBoxLayout()
|
|
18370
|
-
|
|
18371
|
-
add_cmd_btn = QPushButton("➕ Add
|
|
18384
|
+
|
|
18385
|
+
add_cmd_btn = QPushButton("➕ Add")
|
|
18372
18386
|
add_cmd_btn.clicked.connect(self._add_voice_command)
|
|
18373
18387
|
cmd_btn_layout.addWidget(add_cmd_btn)
|
|
18374
|
-
|
|
18375
|
-
edit_cmd_btn = QPushButton("✏️ Edit
|
|
18388
|
+
|
|
18389
|
+
edit_cmd_btn = QPushButton("✏️ Edit")
|
|
18376
18390
|
edit_cmd_btn.clicked.connect(self._edit_voice_command)
|
|
18377
18391
|
cmd_btn_layout.addWidget(edit_cmd_btn)
|
|
18378
|
-
|
|
18379
|
-
remove_cmd_btn = QPushButton("🗑️ Remove
|
|
18392
|
+
|
|
18393
|
+
remove_cmd_btn = QPushButton("🗑️ Remove")
|
|
18380
18394
|
remove_cmd_btn.clicked.connect(self._remove_voice_command)
|
|
18381
18395
|
cmd_btn_layout.addWidget(remove_cmd_btn)
|
|
18382
|
-
|
|
18396
|
+
|
|
18383
18397
|
cmd_btn_layout.addStretch()
|
|
18384
|
-
|
|
18385
|
-
reset_cmd_btn = QPushButton("🔄 Reset
|
|
18398
|
+
|
|
18399
|
+
reset_cmd_btn = QPushButton("🔄 Reset")
|
|
18386
18400
|
reset_cmd_btn.clicked.connect(self._reset_voice_commands)
|
|
18387
18401
|
cmd_btn_layout.addWidget(reset_cmd_btn)
|
|
18388
|
-
|
|
18402
|
+
|
|
18389
18403
|
commands_layout.addLayout(cmd_btn_layout)
|
|
18390
18404
|
|
|
18391
18405
|
commands_group.setLayout(commands_layout)
|
|
18392
|
-
|
|
18406
|
+
right_column.addWidget(commands_group)
|
|
18407
|
+
right_column.addStretch()
|
|
18408
|
+
|
|
18409
|
+
# Add columns to the two-column layout
|
|
18410
|
+
left_widget = QWidget()
|
|
18411
|
+
left_widget.setLayout(left_column)
|
|
18412
|
+
right_widget = QWidget()
|
|
18413
|
+
right_widget.setLayout(right_column)
|
|
18414
|
+
|
|
18415
|
+
columns_layout.addWidget(left_widget, stretch=1)
|
|
18416
|
+
columns_layout.addWidget(right_widget, stretch=1)
|
|
18393
18417
|
|
|
18394
18418
|
# ===== Always-On Mode Section =====
|
|
18395
18419
|
alwayson_group = QGroupBox("🎧 Always-On Listening Mode")
|
|
@@ -18552,7 +18576,13 @@ class SupervertalerQt(QMainWindow):
|
|
|
18552
18576
|
ahk_group.setLayout(ahk_layout)
|
|
18553
18577
|
layout.addWidget(ahk_group)
|
|
18554
18578
|
|
|
18555
|
-
#
|
|
18579
|
+
# Add stretch to left column to push content up
|
|
18580
|
+
layout.addStretch()
|
|
18581
|
+
|
|
18582
|
+
# Add two-column layout to main layout
|
|
18583
|
+
main_layout.addLayout(columns_layout, stretch=1)
|
|
18584
|
+
|
|
18585
|
+
# Save button (full width, below the two columns)
|
|
18556
18586
|
save_btn = QPushButton("💾 Save Supervoice Settings")
|
|
18557
18587
|
save_btn.setStyleSheet("background-color: #4CAF50; color: white; font-weight: bold; padding: 10px; border: none; outline: none;")
|
|
18558
18588
|
save_btn.clicked.connect(lambda: self._save_voice_settings(
|
|
@@ -18561,15 +18591,13 @@ class SupervertalerQt(QMainWindow):
|
|
|
18561
18591
|
lang_combo.currentText(),
|
|
18562
18592
|
voice_cmd_enabled.isChecked()
|
|
18563
18593
|
))
|
|
18564
|
-
|
|
18594
|
+
main_layout.addWidget(save_btn)
|
|
18565
18595
|
|
|
18566
18596
|
# Store references
|
|
18567
18597
|
self.dictation_model_combo = model_combo
|
|
18568
18598
|
self.dictation_duration_spin = duration_spin
|
|
18569
18599
|
self.dictation_lang_combo = lang_combo
|
|
18570
18600
|
|
|
18571
|
-
layout.addStretch()
|
|
18572
|
-
|
|
18573
18601
|
return tab
|
|
18574
18602
|
|
|
18575
18603
|
def _populate_voice_commands_table(self):
|
|
@@ -49563,7 +49591,7 @@ class SuperlookupTab(QWidget):
|
|
|
49563
49591
|
target_lang = getattr(main_window, 'target_language', 'Dutch')
|
|
49564
49592
|
|
|
49565
49593
|
# Import and show MT Quick Lookup popup
|
|
49566
|
-
from modules.
|
|
49594
|
+
from modules.quicktrans import MTQuickPopup
|
|
49567
49595
|
|
|
49568
49596
|
# Create popup without Qt parent so it can appear independently over any app
|
|
49569
49597
|
# Pass main_window as parent_app for API access
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
|
18
18
|
<link rel="manifest" href="site.webmanifest">
|
|
19
19
|
|
|
20
|
-
<link rel="stylesheet" href="styles.css?v=1.9.
|
|
20
|
+
<link rel="stylesheet" href="styles.css?v=1.9.196">
|
|
21
21
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
22
22
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
23
23
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap"
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
class="nav-discussions">💬 Discussions</a></li>
|
|
51
51
|
<li class="nav-action">
|
|
52
52
|
<a href="https://github.com/michaelbeijer/Supervertaler/blob/main/CHANGELOG.md" target="_blank"
|
|
53
|
-
class="nav-version" title="Current version">v1.9.
|
|
53
|
+
class="nav-version" title="Current version">v1.9.196</a>
|
|
54
54
|
</li>
|
|
55
55
|
<li class="nav-action">
|
|
56
56
|
<a href="https://github.com/michaelbeijer/Supervertaler" target="_blank" class="nav-icon-link"
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
Supervertaler
|
|
75
75
|
<span class="gradient-text">The Ultimate Translation Workbench</span>
|
|
76
76
|
</h1>
|
|
77
|
-
<p class="version-badge">v1.9.
|
|
77
|
+
<p class="version-badge">v1.9.196</p>
|
|
78
78
|
<p class="hero-subtitle">
|
|
79
79
|
AI-enhanced translation workbench. Work with ChatGPT, Claude, and Gemini simultaneously.
|
|
80
80
|
Built by translators, for translators and writers.
|
|
@@ -711,7 +711,7 @@
|
|
|
711
711
|
<div style="text-align: center; margin: 40px 0;">
|
|
712
712
|
<div class="download-card featured"
|
|
713
713
|
style="border: 3px solid #6366F1; max-width: 700px; margin: 0 auto;">
|
|
714
|
-
<div class="download-badge" style="background: #6366F1;">v1.9.
|
|
714
|
+
<div class="download-badge" style="background: #6366F1;">v1.9.196</div>
|
|
715
715
|
<h3>🎨 Supervertaler</h3>
|
|
716
716
|
<p class="download-description" style="font-weight: 600; color: #6366F1; margin-bottom: 10px;">
|
|
717
717
|
Modern Professional Interface
|
|
@@ -823,6 +823,22 @@
|
|
|
823
823
|
<p class="section-subtitle">See Supervertaler in action</p>
|
|
824
824
|
|
|
825
825
|
<div class="screenshots-grid">
|
|
826
|
+
<div class="screenshot-card" style="border: 3px solid #6366F1;">
|
|
827
|
+
<a href="screenshots/Supervertalerv1.9.196_2026-02-02.png" class="screenshot-link" target="_blank">
|
|
828
|
+
<img src="screenshots/Supervertalerv1.9.196_2026-02-02.png"
|
|
829
|
+
alt="Supervertaler v1.9.196 with QuickTrans" loading="lazy">
|
|
830
|
+
<div class="screenshot-overlay">
|
|
831
|
+
<span class="zoom-icon">🔍 Click to enlarge</span>
|
|
832
|
+
</div>
|
|
833
|
+
</a>
|
|
834
|
+
<div class="screenshot-caption">
|
|
835
|
+
<h3>⚡ QuickTrans & Modern UI <span class="badge"
|
|
836
|
+
style="background: #6366F1; color: white; padding: 3px 8px; border-radius: 12px; font-size: 11px; margin-left: 5px;">v1.9.196</span>
|
|
837
|
+
</h3>
|
|
838
|
+
<p>QuickTrans instant translation popup with MT engines and LLMs. Global hotkey (Ctrl+Alt+M) works from any application.</p>
|
|
839
|
+
</div>
|
|
840
|
+
</div>
|
|
841
|
+
|
|
826
842
|
<div class="screenshot-card" style="border: 3px solid #2196F3;">
|
|
827
843
|
<a href="screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png" class="screenshot-link" target="_blank">
|
|
828
844
|
<img src="screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png"
|
|
@@ -1207,7 +1223,7 @@
|
|
|
1207
1223
|
</svg>
|
|
1208
1224
|
</button>
|
|
1209
1225
|
|
|
1210
|
-
<script src="script.js?v=1.9.
|
|
1226
|
+
<script src="script.js?v=1.9.196"></script>
|
|
1211
1227
|
</body>
|
|
1212
1228
|
|
|
1213
1229
|
</html>
|
|
Binary file
|
|
@@ -722,6 +722,34 @@ ollama pull qwen2.5:3b
|
|
|
722
722
|
- Multiple API keys (GPT-4o, Claude, Gemini)
|
|
723
723
|
- Sufficient API credits for testing runs
|
|
724
724
|
|
|
725
|
+
### Why is my antivirus flagging Supervertaler as malware?
|
|
726
|
+
|
|
727
|
+
This is a **known false positive** that affects applications built with PyInstaller (the tool used to create the Windows EXE).
|
|
728
|
+
|
|
729
|
+
**Why it happens:**
|
|
730
|
+
- PyInstaller bundles Python + all libraries into a single package
|
|
731
|
+
- This binary pattern triggers heuristic detection in some AV software (especially Norton 360)
|
|
732
|
+
- Generic detections like "Win64:Malware-gen" are pattern matches, not actual malware signatures
|
|
733
|
+
- The executable is not code-signed (certificates cost ~$300/year)
|
|
734
|
+
|
|
735
|
+
**Solutions:**
|
|
736
|
+
|
|
737
|
+
1. **Use pip install (Recommended)**
|
|
738
|
+
- Install: `pip install supervertaler`
|
|
739
|
+
- Run: `supervertaler`
|
|
740
|
+
- No AV warnings because it runs from Python source
|
|
741
|
+
|
|
742
|
+
2. **Whitelist the application**
|
|
743
|
+
- Add an exception in your antivirus settings
|
|
744
|
+
- The application is safe - you can verify by checking the [source code on GitHub](https://github.com/michaelbeijer/Supervertaler)
|
|
745
|
+
|
|
746
|
+
3. **Report as false positive**
|
|
747
|
+
- Norton: https://submit.norton.com/
|
|
748
|
+
- Windows Defender: Click "More info" → "Run anyway"
|
|
749
|
+
- Other AV: Check vendor's false positive submission page
|
|
750
|
+
|
|
751
|
+
**This is common for PyInstaller apps** - it affects tools like Calibre, many game mods, and scientific software. See the [PyInstaller FAQ](https://pyinstaller.org/en/stable/faq.html) for more details.
|
|
752
|
+
|
|
725
753
|
---
|
|
726
754
|
|
|
727
755
|
## Workflow & Integration
|
|
@@ -594,18 +594,20 @@ class LLMClient:
|
|
|
594
594
|
context: Optional[str] = None,
|
|
595
595
|
custom_prompt: Optional[str] = None,
|
|
596
596
|
max_tokens: Optional[int] = None,
|
|
597
|
-
images: Optional[List] = None
|
|
597
|
+
images: Optional[List] = None,
|
|
598
|
+
system_prompt: Optional[str] = None
|
|
598
599
|
) -> str:
|
|
599
600
|
"""
|
|
600
601
|
Translate text using configured LLM
|
|
601
|
-
|
|
602
|
+
|
|
602
603
|
Args:
|
|
603
604
|
text: Text to translate
|
|
604
605
|
source_lang: Source language code
|
|
605
606
|
target_lang: Target language code
|
|
606
607
|
context: Optional context for translation
|
|
607
608
|
custom_prompt: Optional custom prompt (overrides default simple prompt)
|
|
608
|
-
|
|
609
|
+
system_prompt: Optional system prompt for AI behavior context
|
|
610
|
+
|
|
609
611
|
Returns:
|
|
610
612
|
Translated text
|
|
611
613
|
"""
|
|
@@ -615,30 +617,30 @@ class LLMClient:
|
|
|
615
617
|
else:
|
|
616
618
|
# Build prompt
|
|
617
619
|
prompt = f"Translate the following text from {source_lang} to {target_lang}:\n\n{text}"
|
|
618
|
-
|
|
620
|
+
|
|
619
621
|
if context:
|
|
620
622
|
prompt = f"Context: {context}\n\n{prompt}"
|
|
621
|
-
|
|
623
|
+
|
|
622
624
|
# Log warning if images provided but model doesn't support vision
|
|
623
625
|
if images and not self.model_supports_vision(self.provider, self.model):
|
|
624
626
|
print(f"⚠️ Warning: Model {self.model} doesn't support vision. Images will be ignored.")
|
|
625
627
|
images = None # Don't pass to API
|
|
626
|
-
|
|
628
|
+
|
|
627
629
|
# Call appropriate provider
|
|
628
630
|
if self.provider == "openai":
|
|
629
|
-
return self._call_openai(prompt, max_tokens=max_tokens, images=images)
|
|
631
|
+
return self._call_openai(prompt, max_tokens=max_tokens, images=images, system_prompt=system_prompt)
|
|
630
632
|
elif self.provider == "claude":
|
|
631
|
-
return self._call_claude(prompt, max_tokens=max_tokens, images=images)
|
|
633
|
+
return self._call_claude(prompt, max_tokens=max_tokens, images=images, system_prompt=system_prompt)
|
|
632
634
|
elif self.provider == "gemini":
|
|
633
|
-
return self._call_gemini(prompt, max_tokens=max_tokens, images=images)
|
|
635
|
+
return self._call_gemini(prompt, max_tokens=max_tokens, images=images, system_prompt=system_prompt)
|
|
634
636
|
elif self.provider == "ollama":
|
|
635
|
-
return self._call_ollama(prompt, max_tokens=max_tokens)
|
|
637
|
+
return self._call_ollama(prompt, max_tokens=max_tokens, system_prompt=system_prompt)
|
|
636
638
|
else:
|
|
637
639
|
raise ValueError(f"Unsupported provider: {self.provider}")
|
|
638
640
|
|
|
639
|
-
def _call_openai(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None) -> str:
|
|
641
|
+
def _call_openai(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None, system_prompt: Optional[str] = None) -> str:
|
|
640
642
|
"""Call OpenAI API with GPT-5/o1/o3 reasoning model support and vision capability"""
|
|
641
|
-
print(f"🔵 _call_openai START: model={self.model}, prompt_len={len(prompt)}, max_tokens={max_tokens}, images={len(images) if images else 0}")
|
|
643
|
+
print(f"🔵 _call_openai START: model={self.model}, prompt_len={len(prompt)}, max_tokens={max_tokens}, images={len(images) if images else 0}, has_system={bool(system_prompt)}")
|
|
642
644
|
|
|
643
645
|
try:
|
|
644
646
|
from openai import OpenAI
|
|
@@ -686,10 +688,16 @@ class LLMClient:
|
|
|
686
688
|
# Standard text-only format
|
|
687
689
|
content = prompt
|
|
688
690
|
|
|
691
|
+
# Build messages list
|
|
692
|
+
messages = []
|
|
693
|
+
if system_prompt:
|
|
694
|
+
messages.append({"role": "system", "content": system_prompt})
|
|
695
|
+
messages.append({"role": "user", "content": content})
|
|
696
|
+
|
|
689
697
|
# Build API call parameters
|
|
690
698
|
api_params = {
|
|
691
699
|
"model": self.model,
|
|
692
|
-
"messages":
|
|
700
|
+
"messages": messages,
|
|
693
701
|
"timeout": timeout_seconds
|
|
694
702
|
}
|
|
695
703
|
|
|
@@ -742,7 +750,7 @@ class LLMClient:
|
|
|
742
750
|
print(f" Response: {e.response}")
|
|
743
751
|
raise # Re-raise to be caught by calling code
|
|
744
752
|
|
|
745
|
-
def _call_claude(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None) -> str:
|
|
753
|
+
def _call_claude(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None, system_prompt: Optional[str] = None) -> str:
|
|
746
754
|
"""Call Anthropic Claude API with vision support"""
|
|
747
755
|
try:
|
|
748
756
|
import anthropic
|
|
@@ -786,12 +794,19 @@ class LLMClient:
|
|
|
786
794
|
# Standard text-only format
|
|
787
795
|
content = prompt
|
|
788
796
|
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
797
|
+
# Build API call parameters
|
|
798
|
+
api_params = {
|
|
799
|
+
"model": self.model,
|
|
800
|
+
"max_tokens": tokens_to_use,
|
|
801
|
+
"messages": [{"role": "user", "content": content}],
|
|
802
|
+
"timeout": timeout_seconds # Explicit timeout
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
# Add system prompt if provided (Claude uses 'system' parameter, not a message)
|
|
806
|
+
if system_prompt:
|
|
807
|
+
api_params["system"] = system_prompt
|
|
808
|
+
|
|
809
|
+
response = client.messages.create(**api_params)
|
|
795
810
|
|
|
796
811
|
translation = response.content[0].text.strip()
|
|
797
812
|
|
|
@@ -800,7 +815,7 @@ class LLMClient:
|
|
|
800
815
|
|
|
801
816
|
return translation
|
|
802
817
|
|
|
803
|
-
def _call_gemini(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None) -> str:
|
|
818
|
+
def _call_gemini(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None, system_prompt: Optional[str] = None) -> str:
|
|
804
819
|
"""Call Google Gemini API with vision support"""
|
|
805
820
|
try:
|
|
806
821
|
import google.generativeai as genai
|
|
@@ -809,10 +824,15 @@ class LLMClient:
|
|
|
809
824
|
raise ImportError(
|
|
810
825
|
"Google AI library not installed. Install with: pip install google-generativeai pillow"
|
|
811
826
|
)
|
|
812
|
-
|
|
827
|
+
|
|
813
828
|
genai.configure(api_key=self.api_key)
|
|
814
|
-
|
|
815
|
-
|
|
829
|
+
|
|
830
|
+
# Gemini supports system instructions via GenerativeModel parameter
|
|
831
|
+
if system_prompt:
|
|
832
|
+
model = genai.GenerativeModel(self.model, system_instruction=system_prompt)
|
|
833
|
+
else:
|
|
834
|
+
model = genai.GenerativeModel(self.model)
|
|
835
|
+
|
|
816
836
|
# Build content (text + optional images)
|
|
817
837
|
if images:
|
|
818
838
|
# Gemini format: list with prompt text followed by PIL Image objects
|
|
@@ -823,7 +843,7 @@ class LLMClient:
|
|
|
823
843
|
else:
|
|
824
844
|
# Standard text-only
|
|
825
845
|
content = prompt
|
|
826
|
-
|
|
846
|
+
|
|
827
847
|
response = model.generate_content(content)
|
|
828
848
|
translation = response.text.strip()
|
|
829
849
|
|
|
@@ -832,20 +852,21 @@ class LLMClient:
|
|
|
832
852
|
|
|
833
853
|
return translation
|
|
834
854
|
|
|
835
|
-
def _call_ollama(self, prompt: str, max_tokens: Optional[int] = None) -> str:
|
|
855
|
+
def _call_ollama(self, prompt: str, max_tokens: Optional[int] = None, system_prompt: Optional[str] = None) -> str:
|
|
836
856
|
"""
|
|
837
857
|
Call local Ollama server for translation.
|
|
838
|
-
|
|
858
|
+
|
|
839
859
|
Ollama provides a simple REST API compatible with local LLM inference.
|
|
840
860
|
Models run entirely on the user's computer - no API keys, no internet required.
|
|
841
|
-
|
|
861
|
+
|
|
842
862
|
Args:
|
|
843
863
|
prompt: The full prompt to send
|
|
844
864
|
max_tokens: Maximum tokens to generate (default: 4096)
|
|
845
|
-
|
|
865
|
+
system_prompt: Optional system prompt for AI behavior context
|
|
866
|
+
|
|
846
867
|
Returns:
|
|
847
868
|
Translated text
|
|
848
|
-
|
|
869
|
+
|
|
849
870
|
Raises:
|
|
850
871
|
ConnectionError: If Ollama is not running
|
|
851
872
|
ValueError: If model is not available
|
|
@@ -866,13 +887,17 @@ class LLMClient:
|
|
|
866
887
|
print(f"🟠 _call_ollama START: model={self.model}, prompt_len={len(prompt)}, max_tokens={tokens_to_use}")
|
|
867
888
|
print(f"🟠 Ollama endpoint: {endpoint}")
|
|
868
889
|
|
|
890
|
+
# Build messages list
|
|
891
|
+
messages = []
|
|
892
|
+
if system_prompt:
|
|
893
|
+
messages.append({"role": "system", "content": system_prompt})
|
|
894
|
+
messages.append({"role": "user", "content": prompt})
|
|
895
|
+
|
|
869
896
|
# Build request payload
|
|
870
897
|
# Using /api/chat for chat-style interaction (better for translation prompts)
|
|
871
898
|
payload = {
|
|
872
899
|
"model": self.model,
|
|
873
|
-
"messages":
|
|
874
|
-
{"role": "user", "content": prompt}
|
|
875
|
-
],
|
|
900
|
+
"messages": messages,
|
|
876
901
|
"stream": False, # Get complete response at once
|
|
877
902
|
"options": {
|
|
878
903
|
"temperature": 0.3, # Low temperature for consistent translations
|
|
@@ -3795,6 +3795,26 @@ Output complete ACTION."""
|
|
|
3795
3795
|
from PyQt6.QtWidgets import QApplication
|
|
3796
3796
|
QApplication.processEvents()
|
|
3797
3797
|
|
|
3798
|
+
# System prompt that explains the ACTION format to the AI
|
|
3799
|
+
ai_system_prompt = """You are an AI assistant for Supervertaler, a professional translation workbench.
|
|
3800
|
+
|
|
3801
|
+
You can execute actions using a special format. When you need to create, modify, or manage prompts, output ACTION blocks in this EXACT format:
|
|
3802
|
+
|
|
3803
|
+
ACTION:function_name PARAMS:{"param1": "value1", "param2": "value2"}
|
|
3804
|
+
|
|
3805
|
+
Available actions:
|
|
3806
|
+
- create_prompt: Create a new prompt. Required params: name, content. Optional: folder, description, activate
|
|
3807
|
+
- update_prompt: Update an existing prompt. Required params: name. Optional: content, folder, description
|
|
3808
|
+
- delete_prompt: Delete a prompt. Required params: name
|
|
3809
|
+
- list_prompts: List all prompts. Optional params: folder
|
|
3810
|
+
- activate_prompt: Set a prompt as active. Required params: name
|
|
3811
|
+
|
|
3812
|
+
IMPORTANT:
|
|
3813
|
+
1. Output ONLY the ACTION block when asked to create/modify prompts - no explanatory text
|
|
3814
|
+
2. The ACTION must be on a single line (PARAMS JSON can be multiline if needed)
|
|
3815
|
+
3. Use valid JSON for PARAMS (double quotes for strings, escape special characters)
|
|
3816
|
+
4. Do not wrap in code fences or add any markdown formatting"""
|
|
3817
|
+
|
|
3798
3818
|
# Call LLM using translate method with custom prompt
|
|
3799
3819
|
# The translate method accepts a custom_prompt parameter that we can use for any text generation
|
|
3800
3820
|
self.log_message("[AI Assistant] Calling LLM translate method...")
|
|
@@ -3802,7 +3822,8 @@ Output complete ACTION."""
|
|
|
3802
3822
|
text="", # Empty text since we're using custom_prompt
|
|
3803
3823
|
source_lang="en",
|
|
3804
3824
|
target_lang="en",
|
|
3805
|
-
custom_prompt=prompt
|
|
3825
|
+
custom_prompt=prompt,
|
|
3826
|
+
system_prompt=ai_system_prompt
|
|
3806
3827
|
)
|
|
3807
3828
|
|
|
3808
3829
|
# Log the response
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "supervertaler"
|
|
7
|
-
version = "1.9.
|
|
7
|
+
version = "1.9.196"
|
|
8
8
|
description = "Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core)."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: supervertaler
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.196
|
|
4
4
|
Summary: Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
|
|
5
5
|
Home-page: https://supervertaler.com
|
|
6
6
|
Author: Michael Beijer
|