Name shortcut zu mailadler
This commit is contained in:
405
PRAKTISCHE_FEATURES.md
Normal file
405
PRAKTISCHE_FEATURES.md
Normal file
@@ -0,0 +1,405 @@
|
||||
# Mail-Adler Praktische Features
|
||||
|
||||
## 1. Google Translate für Englisch → Andere Sprachen
|
||||
|
||||
### Workflow:
|
||||
```
|
||||
1. Englisch Strings exportieren
|
||||
python3 export_to_csv.py → glossary_en.csv
|
||||
|
||||
2. In Excel: Englisch-Spalte kopieren
|
||||
A1:A250 (alle English Strings)
|
||||
|
||||
3. Google Translate öffnen
|
||||
https://translate.google.com
|
||||
- Links: English Paste
|
||||
- Rechts: Wähle Zielsprache
|
||||
- Auto-Übersetzung
|
||||
|
||||
4. Ergebnis → Excel
|
||||
Gespiegelt in neue Spalte
|
||||
|
||||
5. CSV zurück → .ts
|
||||
python3 import_csv_to_ts.py
|
||||
```
|
||||
|
||||
### Zeit sparen:
|
||||
```
|
||||
Deutsch → Englisch: Manuell sorgfältig (10 Min)
|
||||
Englisch → Rest: Google Translate Auto (30 Sekunden pro Sprache)
|
||||
|
||||
Statt 30 Sprachen × 45 Min = 22.5 Std
|
||||
Nur 30 Sprachen × 30 Sec = 15 Minuten!
|
||||
```
|
||||
|
||||
**Das ist VIEL schneller!** ✅
|
||||
|
||||
---
|
||||
|
||||
## 2. Auto-Übersetzung für Email-Inhalte
|
||||
|
||||
### Feature für Phase C:
|
||||
|
||||
Wenn Email in anderer Sprache kommt → automatisch in deine Sprache übersetzen
|
||||
|
||||
```cpp
|
||||
// src/translation/EmailTranslator.h/cpp
|
||||
class EmailTranslator {
|
||||
public:
|
||||
// Erkenne Sprache
|
||||
QString detectLanguage(const QString &emailBody);
|
||||
|
||||
// Übersetze
|
||||
QString translateToUserLanguage(
|
||||
const QString &emailBody,
|
||||
const QString &detectedLanguage
|
||||
);
|
||||
|
||||
// Nutze lokale LLM (Ollama)
|
||||
// Nicht Google (wegen Datenschutz!)
|
||||
};
|
||||
```
|
||||
|
||||
### Verwendung:
|
||||
```cpp
|
||||
// In MailViewWidget:
|
||||
QString emailBody = "Bonjour, comment allez-vous?";
|
||||
|
||||
EmailTranslator translator;
|
||||
QString detectedLang = translator.detectLanguage(emailBody);
|
||||
// → "French"
|
||||
|
||||
if (detectedLang != userLanguage) {
|
||||
QString translated = translator.translateToUserLanguage(
|
||||
emailBody,
|
||||
detectedLang
|
||||
);
|
||||
|
||||
// Zeige Übersetzung
|
||||
ui->emailContent->setText(translated);
|
||||
|
||||
// Zeige auch Original (kleiner)
|
||||
ui->originalContent->setText(emailBody);
|
||||
}
|
||||
```
|
||||
|
||||
### Optionen:
|
||||
|
||||
| Quelle | Datenschutz | Qualität | Geschwindigkeit |
|
||||
|--------|-------------|----------|-----------------|
|
||||
| **Google Translate API** | ❌ Schlecht | ✅✅ Sehr gut | ⚡ Schnell |
|
||||
| **DeepL API** | ⚠️ EU | ✅✅ Sehr gut | ⚡ Schnell |
|
||||
| **Ollama lokal** | ✅✅ Perfekt | ✅ Gut | ⚡⚡ Mittel |
|
||||
| **LibreTranslate OSS** | ✅✅ Perfekt | ✅ Gut | ⚡⚡ Mittel |
|
||||
|
||||
**EMPFEHLUNG für Mail-Adler: Ollama lokal** (dezentralisiert!)
|
||||
|
||||
```python
|
||||
# src/translation/ollama_translator.py
|
||||
import requests
|
||||
|
||||
class OllamaEmailTranslator:
|
||||
def __init__(self, base_url="http://localhost:11434"):
|
||||
self.base_url = base_url
|
||||
|
||||
def translate_email(self, text: str, target_lang: str) -> str:
|
||||
"""Übersetze Email-Text mit lokalem Ollama"""
|
||||
|
||||
prompt = f"""Übersetze folgende Email ins {target_lang}.
|
||||
Halte Formatierung und Umlaute.
|
||||
Antworte nur mit Übersetzung, keine Erklärung.
|
||||
|
||||
Text: {text}
|
||||
|
||||
Übersetzung:"""
|
||||
|
||||
response = requests.post(
|
||||
f"{self.base_url}/api/generate",
|
||||
json={
|
||||
"model": "mistral:7b",
|
||||
"prompt": prompt,
|
||||
"stream": False,
|
||||
}
|
||||
)
|
||||
|
||||
return response.json()["response"].strip()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Copy-Paste überall (Universell)
|
||||
|
||||
### Qt macht das automatisch:
|
||||
|
||||
```cpp
|
||||
// In jedem QTextEdit/QLineEdit:
|
||||
// Ctrl+C/Ctrl+V funktionieren IMMER
|
||||
// Rechts-Klick → Copy/Paste funktioniert IMMER
|
||||
|
||||
// In QTableWidget/QTreeWidget:
|
||||
// Auch Copy-Paste möglich (Zellen-Inhalte)
|
||||
|
||||
// Eigene Implementierung für Custom:
|
||||
class CustomText : public QWidget {
|
||||
Q_OBJECT
|
||||
private:
|
||||
void keyPressEvent(QKeyEvent *event) override {
|
||||
if (event->key() == Qt::Key_C && event->modifiers() == Qt::ControlModifier) {
|
||||
QApplication::clipboard()->setText(selectedText());
|
||||
}
|
||||
if (event->key() == Qt::Key_V && event->modifiers() == Qt::ControlModifier) {
|
||||
pasteFromClipboard();
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### In Mail-Adler:
|
||||
- ✅ Email-Text: Copy-Paste überall
|
||||
- ✅ Email-Header: Copy-Paste Absender, Betreff, etc.
|
||||
- ✅ Anhang-Namen: Copy-Paste
|
||||
- ✅ Links: Copy-Paste
|
||||
- ✅ Metadaten: Alle markierbar & kopierbar
|
||||
|
||||
**Standard in Qt - keine spezielle Implementierung nötig!**
|
||||
|
||||
---
|
||||
|
||||
## 4. Tastatur-Shortcuts
|
||||
|
||||
### Mail-Adler Standard-Shortcuts
|
||||
|
||||
```
|
||||
NAVIGATION:
|
||||
├─ Tab → Nächste Email / Feld
|
||||
├─ Shift+Tab → Vorherige Email / Feld
|
||||
├─ Arrow Up/Down → Navigation in Ordner/Liste
|
||||
├─ Ctrl+Home → Erste Email
|
||||
├─ Ctrl+End → Letzte Email
|
||||
├─ Page Up/Down → Seitenweise scrollen
|
||||
└─ Escape → Zurück zur Ordnerliste
|
||||
|
||||
LESEN:
|
||||
├─ Space → Page Down (Email lesen)
|
||||
├─ Shift+Space → Page Up
|
||||
├─ Ctrl+F → Im Text suchen
|
||||
├─ Ctrl+P → Email drucken
|
||||
└─ Ctrl+Shift+V → Plaintext-Modus
|
||||
|
||||
SCHREIBEN:
|
||||
├─ Ctrl+N → Neue Email
|
||||
├─ Ctrl+Shift+D → Aus Entwürfen fortfahren
|
||||
├─ Tab → Nächstes Feld (An → Cc → Betreff → Text)
|
||||
├─ Ctrl+Enter → Senden
|
||||
└─ Ctrl+Shift+S → Als Entwurf speichern
|
||||
|
||||
ORDNER:
|
||||
├─ Ctrl+1 → Eingang
|
||||
├─ Ctrl+2 → Gesendet
|
||||
├─ Ctrl+3 → Entwürfe
|
||||
├─ Ctrl+4 → Spam
|
||||
├─ Ctrl+5 → Archiv
|
||||
├─ Ctrl+6 → Custom Ordner
|
||||
├─ Ctrl+Shift+N → Neuer Ordner
|
||||
└─ Delete → Ordner löschen
|
||||
|
||||
AKTIONEN:
|
||||
├─ Ctrl+R → Antworten
|
||||
├─ Ctrl+Shift+R → Allen antworten
|
||||
├─ Ctrl+Shift+F → Weiterleiten
|
||||
├─ Ctrl+M → Als gelesen markieren
|
||||
├─ Ctrl+* → Als Markiert (*) togglen
|
||||
├─ Delete → Löschen → Papierkorb
|
||||
├─ Ctrl+Delete → Permanent löschen
|
||||
├─ Ctrl+S → Speichern / Synchronisieren
|
||||
└─ F5 → Aktualisieren / Neu laden
|
||||
|
||||
ALLGEMEIN:
|
||||
├─ Ctrl+Q → Beenden
|
||||
├─ Ctrl+, → Einstellungen
|
||||
├─ F1 → Hilfe
|
||||
├─ Ctrl+H → Verlauf
|
||||
├─ Ctrl+L → Adressleiste aktivieren
|
||||
└─ Alt+Numbers → Menu nutzen
|
||||
```
|
||||
|
||||
### Implementierung in Qt:
|
||||
|
||||
```cpp
|
||||
// src/ui/MainWindow.cpp
|
||||
|
||||
void MainWindow::setupKeyboardShortcuts() {
|
||||
// Neue Email
|
||||
new QShortcut(Qt::CTRL + Qt::Key_N, this, SLOT(on_actionNew_triggered()));
|
||||
|
||||
// Antworten
|
||||
new QShortcut(Qt::CTRL + Qt::Key_R, this, SLOT(on_actionReply_triggered()));
|
||||
|
||||
// Senden (in Compose)
|
||||
new QShortcut(Qt::CTRL + Qt::Key_Return, this, SLOT(on_actionSend_triggered()));
|
||||
|
||||
// Navigation
|
||||
new QShortcut(Qt::CTRL + Qt::Key_1, this, [this]() {
|
||||
switchToFolder("Eingang");
|
||||
});
|
||||
|
||||
new QShortcut(Qt::CTRL + Qt::Key_2, this, [this]() {
|
||||
switchToFolder("Gesendet");
|
||||
});
|
||||
|
||||
// Löschen
|
||||
new QShortcut(Qt::Key_Delete, this, SLOT(on_actionDelete_triggered()));
|
||||
|
||||
// Spam
|
||||
new QShortcut(Qt::CTRL + Qt::Key_Exlamation, this, SLOT(on_actionSpam_triggered()));
|
||||
}
|
||||
```
|
||||
|
||||
### Vim-Style Shortcuts (Optional für Phase D):
|
||||
|
||||
```cpp
|
||||
// Für Power-User:
|
||||
// :q → Beenden
|
||||
// j/k → Down/Up
|
||||
// d → Löschen
|
||||
// a → Antworten
|
||||
// r → Antworten
|
||||
// w → Weiterleiten
|
||||
// etc.
|
||||
|
||||
// Konfigurierbar in Einstellungen:
|
||||
// [] Enable Vim Keybindings
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Kombination: Englisch → Google Translate → Rest
|
||||
|
||||
### Praktischer Workflow (für dich):
|
||||
|
||||
```
|
||||
Tag 1: ENGLISCH (Manuell - sorgfältig)
|
||||
═══════════════════════════════════
|
||||
python3 export_to_csv.py \
|
||||
--source translations/mail-adler_de.ts \
|
||||
--output glossary_all.csv \
|
||||
--languages "English"
|
||||
|
||||
→ Glossary mit Deutsch + leerer English-Spalte
|
||||
→ LM Studio: 70 Wörter eingeben
|
||||
Abbrechen = Cancel
|
||||
Anmeldedaten = Credentials
|
||||
... (30 Min)
|
||||
→ Speichern
|
||||
|
||||
Day 2: GOOGLE TRANSLATE (Auto)
|
||||
═══════════════════════════════════
|
||||
1. Englisch-Spalte aus Excel kopieren (A1:A70)
|
||||
2. Google Translate öffnen
|
||||
3. Paste → Rechts: "Französisch" wählen
|
||||
4. Auto-Übersetzung
|
||||
5. Kopieren → Excel
|
||||
|
||||
→ Repeat für: Español, Português, Italiano, Niederländisch, Polnisch, ...
|
||||
(Pro Sprache: 2-3 Minuten)
|
||||
|
||||
Day 3: IMPORT & RELEASE
|
||||
═══════════════════════
|
||||
./batch_import_parallel.sh
|
||||
→ 20-30 Sekunden
|
||||
|
||||
git push
|
||||
→ GitHub Actions
|
||||
→ Release
|
||||
|
||||
TOTAL: 2.5 Tage für 30 Sprachen statt 22 Tage!
|
||||
```
|
||||
|
||||
### So sieht Excel aus:
|
||||
|
||||
```csv
|
||||
Deutsch,English,Français,Español,Português,Italiano,Niederländisch,Polnisch,...
|
||||
Abbrechen,Cancel,Annuler,Cancelar,Cancelar,Annulla,Annuleren,Anuluj,...
|
||||
Anmeldedaten,Credentials,Identifiants,Credenciales,Credenciais,Credenziali,Inloggegevens,Poświadczenia,...
|
||||
...
|
||||
```
|
||||
|
||||
**Englisch = Manuell sorgfältig**
|
||||
**Alles andere = Google Translate Auto**
|
||||
|
||||
---
|
||||
|
||||
## 6. Zusammenfassung: Praktische Mail-Adler Features
|
||||
|
||||
| Feature | Status | Nutzen |
|
||||
|---------|--------|--------|
|
||||
| **Auto-Translate Email-Inhalt** | Phase C | 🌍 User liest Emails in beliebiger Sprache |
|
||||
| **Copy-Paste überall** | Phase B | ✅ Standard Qt |
|
||||
| **Tastatur-Shortcuts** | Phase B | ⚡ Schnelles Arbeiten |
|
||||
| **Englisch manuell** | Phase B | 👤 Sorgfaltig |
|
||||
| **Englisch→Andere via Google** | Phase B | 🚀 Super schnell |
|
||||
| **Vim-Keybindings** | Phase D | 🎮 Optional für Power-User |
|
||||
|
||||
---
|
||||
|
||||
## 7. Copy-Paste Implementierung (überall)
|
||||
|
||||
```cpp
|
||||
// src/util/ClipboardHelper.h
|
||||
class ClipboardHelper {
|
||||
public:
|
||||
static QString getText() {
|
||||
return QApplication::clipboard()->text();
|
||||
}
|
||||
|
||||
static void setText(const QString &text) {
|
||||
QApplication::clipboard()->setText(text);
|
||||
}
|
||||
|
||||
static void copySelection(QAbstractItemView *view) {
|
||||
// Kopiere ausgewählte Zeilen/Zellen
|
||||
QModelIndexList indexes = view->selectionModel()->selectedIndexes();
|
||||
QString text;
|
||||
for (const auto &index : indexes) {
|
||||
text += index.data().toString() + "\t";
|
||||
}
|
||||
setText(text);
|
||||
}
|
||||
};
|
||||
|
||||
// Nutzung überall:
|
||||
// Rechts-Klick im Email-Text → Copy
|
||||
// Rechts-Klick in Ordnerliste → Copy Ordnernamen
|
||||
// etc. - alles Standard Qt!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Google Translate vs. Ollama für Email-Inhalt (Phase C)
|
||||
|
||||
```
|
||||
Nutzer erhält Emails in verschiedenen Sprachen:
|
||||
|
||||
Option A: Google Translate (Phase C - später)
|
||||
├─ Schnell ⚡
|
||||
├─ Qualität sehr gut ✅✅
|
||||
└─ Datenschutz ❌ (Daten zu Google)
|
||||
|
||||
Option B: Ollama lokal
|
||||
├─ Schnell ⚡⚡ (lokal)
|
||||
├─ Qualität gut ✅
|
||||
└─ Datenschutz ✅✅ (alles lokal)
|
||||
|
||||
EMPFEHLUNG: Ollama (dezentralisiert!)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Fazit:
|
||||
|
||||
✅ **Google Translate für deine Übersetzungsarbeit** (Englisch → Andere)
|
||||
✅ **Ollama für User-Feature** (Email-Inhalt Auto-Übersetzen)
|
||||
✅ **Copy-Paste überall** (Standard in Qt)
|
||||
✅ **Tastatur-Shortcuts** (Schneller arbeiten)
|
||||
|
||||
**Alles machbar und praktisch!** 🎯
|
||||
Reference in New Issue
Block a user