Terminal-Config (Theme/Icon/Titel), UI-Überarbeitung, i18n de/en
- Terminal-Einstellungen pro Projekt in ai-control.json: 5 Themes (Paletten in terminal.ts, Fenster-BG gespiegelt in terminal.rs), Dock-Icon (PNG/ICNS via NSApplication in RunEvent::Ready), Fenstertitel mit Fallback Projektname; Zahnrad-Dialog mit Datei-Picker (tauri-plugin-dialog) - UI: Catppuccin-Mocha-Token, JetBrains Mono für Namen/Pfade/Chips, feste Tabellenspalten, Status-Punkt mit Glow, Pool-Projekte als Hover-Popover, Buttons ausgerichtet (Zahnrad links von Starten/Beenden) - i18n: vue-i18n, Deutsch/Englisch, Umschalter im Header (localStorage) - generate_context nur noch einmal expandiert (Release-Build-Fehler)
This commit is contained in:
+146
@@ -0,0 +1,146 @@
|
||||
import { createI18n } from "vue-i18n";
|
||||
|
||||
const de = {
|
||||
app: {
|
||||
projects: "Projekte",
|
||||
pools: "Pools",
|
||||
autostart: "Autostart",
|
||||
},
|
||||
projects: {
|
||||
project: "Projekt",
|
||||
pool: "Pool",
|
||||
noPool: "– kein Pool –",
|
||||
start: "Starten",
|
||||
stop: "Beenden",
|
||||
terminalSettings: "Terminal-Einstellungen",
|
||||
stillRunning: "{name} läuft noch",
|
||||
poolChangeSaved:
|
||||
"Der Pool-Wechsel ist gespeichert. Die laufende Session arbeitet aber weiter im alten Pool — der neue gilt erst ab dem nächsten Start.",
|
||||
restartHint:
|
||||
"Der Neustart beendet die laufende Session. Der automatische commit+push von claude-sync nach Sessionende entfällt dabei — Ghostty fragt bei laufendem Prozess vor dem Beenden noch einmal nach.",
|
||||
keepRunning: "Weiterlaufen lassen",
|
||||
restartNow: "Jetzt neu starten",
|
||||
restarting: "Starte neu …",
|
||||
terminal: "Terminal — {name}",
|
||||
title: "Titel",
|
||||
theme: "Theme",
|
||||
dockIcon: "Dock-Icon",
|
||||
chooseFile: "Datei wählen …",
|
||||
remove: "Entfernen",
|
||||
defaultIcon: "Standard-Icon",
|
||||
appliesNextStart: "Gilt ab dem nächsten Terminal-Start.",
|
||||
cancel: "Abbrechen",
|
||||
save: "Speichern",
|
||||
noPoolAssigned: "kein Pool",
|
||||
},
|
||||
pools: {
|
||||
pool: "Pool",
|
||||
type: "Typ",
|
||||
actions: "Aktionen",
|
||||
newOauth: "+ oAuth",
|
||||
newApikey: "+ apiKey",
|
||||
relogin: "Neu anmelden",
|
||||
renewToken: "Token erneuern",
|
||||
changeKey: "Key ändern",
|
||||
delete: "Löschen",
|
||||
assigned: "kein Projekt | 1 Projekt | {count} Projekte",
|
||||
empty: "Noch keine Pools angelegt.",
|
||||
newOauthPool: "Neuen oAuth-Pool anlegen",
|
||||
newApikeyPool: "Neuen API-Key-Pool anlegen",
|
||||
editKey: "API-Key ändern – {name}",
|
||||
name: "Name",
|
||||
apiKey: "API-Key",
|
||||
oauthHint:
|
||||
"Nach „Login starten“ öffnet sich der Browser zur Anmeldung gegen dein Abo.",
|
||||
oauthWaiting: "Warte auf die Anmeldung im Browser…",
|
||||
cancel: "Abbrechen",
|
||||
startLogin: "Login starten",
|
||||
save: "Speichern",
|
||||
deletePool: "Pool löschen",
|
||||
deleteWarning:
|
||||
"Pool {name} und seine Credential-Datei werden gelöscht. Das lässt sich nicht rückgängig machen.",
|
||||
},
|
||||
};
|
||||
|
||||
const en: typeof de = {
|
||||
app: {
|
||||
projects: "Projects",
|
||||
pools: "Pools",
|
||||
autostart: "Autostart",
|
||||
},
|
||||
projects: {
|
||||
project: "Project",
|
||||
pool: "Pool",
|
||||
noPool: "– no pool –",
|
||||
start: "Start",
|
||||
stop: "Stop",
|
||||
terminalSettings: "Terminal settings",
|
||||
stillRunning: "{name} is still running",
|
||||
poolChangeSaved:
|
||||
"The pool change is saved. The running session keeps working in the old pool — the new one applies from the next start.",
|
||||
restartHint:
|
||||
"Restarting ends the running session. The automatic commit+push by claude-sync after the session is skipped — Ghostty asks once more before quitting a running process.",
|
||||
keepRunning: "Keep running",
|
||||
restartNow: "Restart now",
|
||||
restarting: "Restarting …",
|
||||
terminal: "Terminal — {name}",
|
||||
title: "Title",
|
||||
theme: "Theme",
|
||||
dockIcon: "Dock icon",
|
||||
chooseFile: "Choose file …",
|
||||
remove: "Remove",
|
||||
defaultIcon: "Default icon",
|
||||
appliesNextStart: "Applies from the next terminal start.",
|
||||
cancel: "Cancel",
|
||||
save: "Save",
|
||||
noPoolAssigned: "no pool",
|
||||
},
|
||||
pools: {
|
||||
pool: "Pool",
|
||||
type: "Type",
|
||||
actions: "Actions",
|
||||
newOauth: "+ oAuth",
|
||||
newApikey: "+ apiKey",
|
||||
relogin: "Sign in again",
|
||||
renewToken: "Renew token",
|
||||
changeKey: "Change key",
|
||||
delete: "Delete",
|
||||
assigned: "no projects | 1 project | {count} projects",
|
||||
empty: "No pools yet.",
|
||||
newOauthPool: "Create oAuth pool",
|
||||
newApikeyPool: "Create API key pool",
|
||||
editKey: "Change API key – {name}",
|
||||
name: "Name",
|
||||
apiKey: "API key",
|
||||
oauthHint:
|
||||
"After “Start login” the browser opens to sign in against your subscription.",
|
||||
oauthWaiting: "Waiting for the sign-in in the browser…",
|
||||
cancel: "Cancel",
|
||||
startLogin: "Start login",
|
||||
save: "Save",
|
||||
deletePool: "Delete pool",
|
||||
deleteWarning:
|
||||
"Pool {name} and its credential file will be deleted. This cannot be undone.",
|
||||
},
|
||||
};
|
||||
|
||||
const stored = localStorage.getItem("lang");
|
||||
const initial =
|
||||
stored === "de" || stored === "en"
|
||||
? stored
|
||||
: navigator.language.startsWith("de")
|
||||
? "de"
|
||||
: "en";
|
||||
|
||||
export const i18n = createI18n({
|
||||
legacy: false,
|
||||
globalInjection: true,
|
||||
locale: initial,
|
||||
fallbackLocale: "en",
|
||||
messages: { de, en },
|
||||
});
|
||||
|
||||
export function setLocale(lang: "de" | "en") {
|
||||
i18n.global.locale.value = lang;
|
||||
localStorage.setItem("lang", lang);
|
||||
}
|
||||
Reference in New Issue
Block a user