Files
codecraft/cli/src/i18n.rs
T
Richard ZinkandClaude Opus 5.5 6dffcb501a Add terminal client, memory, model fallback, version and install improvements
- codecraft: full-screen terminal client (ratatui) – local tools and files,
  models via the CodeCraft server gateway or own providers (standalone with a
  guided setup), slash commands, @files, permission dialogs, resume, update
- Static Linux CLI builds (x86_64/aarch64, cargo-zigbuild) served by the
  server: /cli/install.sh and /cli/download/<target>
- Project memory (remember tool, .codecraft/memory.md) and personal memory
- Model fallback when a host is unreachable or a budget is used up
- Version/commit in UI and health, daily release check, "What's new" dialog
- PWA: install button, maskable icon, manifest id and screenshots
- Case-insensitive detection of connection errors for retries

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 00:13:06 +01:00

61 lines
3.4 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! UI texts (English and German).
use std::sync::atomic::{AtomicBool, Ordering};
static GERMAN: AtomicBool = AtomicBool::new(false);
pub fn set_lang(lang: &str) {
GERMAN.store(lang.starts_with("de"), Ordering::Relaxed);
}
pub fn system_lang() -> String {
std::env::var("LC_ALL").or_else(|_| std::env::var("LANG")).unwrap_or_default().chars().take(2).collect()
}
/// (key, English, German)
const TEXTS: &[(&str, &str, &str)] = &[
("placeholder", "Message… (/ commands, @ files, Shift+Enter new line)", "Nachricht… (/ Befehle, @ Dateien, Shift+Enter neue Zeile)"),
("busy_placeholder", "Message is queued and sent after this turn…", "Nachricht wird nach diesem Schritt gesendet…"),
("permission", "Permission required", "Freigabe erforderlich"),
("perm_keys", "[y] allow once [a] always in this session [n] reject [f] reject with feedback", "[y] einmal erlauben [a] immer in dieser Session [n] ablehnen [f] ablehnen mit Hinweis"),
("feedback", "Tell the agent what to do instead (Enter to send):", "Was soll der Agent stattdessen tun? (Enter zum Senden):"),
("question", "Question", "Frage"),
("question_keys", "↑↓ choose · Enter confirm · type your own answer · Esc dismiss", "↑↓ wählen · Enter bestätigen · eigene Antwort tippen · Esc verwerfen"),
("thinking", "Thinking", "Denkt nach"),
("working", "Working", "Arbeitet"),
("interrupt", "Esc to interrupt", "Esc unterbricht"),
("mode", "mode", "Modus"),
("context", "context", "Kontext"),
("quit_again", "Press Ctrl+C again to quit", "Nochmal Ctrl+C zum Beenden"),
("aborted", "interrupted", "unterbrochen"),
("no_model", "No model available – run /setup", "Kein Modell verfügbar – /setup ausführen"),
("help", "Commands", "Befehle"),
("choose_model", "Choose a model", "Modell wählen"),
("choose_mode", "Choose a mode", "Modus wählen"),
("choose_session", "Resume a session", "Session fortsetzen"),
("choose_theme", "Choose a theme", "Theme wählen"),
("filter", "type to filter", "tippen zum Filtern"),
("queued", "queued", "in der Warteschlange"),
("welcome", "Welcome to CodeCraft", "Willkommen bei CodeCraft"),
("setup_title", "Set up CodeCraft", "CodeCraft einrichten"),
("setup_intro", "Where should the models come from? You can add more later with /setup.", "Woher sollen die Modelle kommen? Weitere kannst du später mit /setup hinzufügen."),
("setup_server", "Sign in to a CodeCraft server", "Bei einem CodeCraft-Server anmelden"),
("setup_provider", "Add a model provider (API key or local)", "Modell-Anbieter hinzufügen (API-Key oder lokal)"),
("setup_done", "Done", "Fertig"),
("server_url", "Server URL", "Server-Adresse"),
("username", "Username", "Benutzer"),
("password", "Password", "Passwort"),
("api_key", "API key", "API-Key"),
("base_url", "Endpoint URL", "Endpunkt-URL"),
("provider_name", "Name for this provider", "Name für diesen Anbieter"),
("detected", "running locally", "läuft lokal"),
("saved", "Saved.", "Gespeichert."),
("models_found", "models found", "Modelle gefunden"),
("enter_next", "Enter = next · Esc = back", "Enter = weiter · Esc = zurück"),
];
pub fn t(key: &str) -> &'static str {
let de = GERMAN.load(Ordering::Relaxed);
TEXTS.iter().find(|(k, _, _)| *k == key).map(|(_, en, d)| if de { *d } else { *en }).unwrap_or("?")
}