From 45e5c657c7f418b29e82b88acb82c608f5888e31 Mon Sep 17 00:00:00 2001 From: schn33fuchs Date: Wed, 17 Jun 2026 15:47:34 +0200 Subject: [PATCH] Translation to German --- frontend/src/auth.rs | 4 +-- frontend/src/lib.rs | 4 +-- frontend/src/pages/basic_pages.rs | 4 +-- frontend/src/pages/setup.rs | 42 +++++++++++------------ frontend/src/pages/sidebar.rs | 21 +++++++----- frontend/src/pages/ticket.rs | 55 +++++++++++++++++-------------- frontend/src/pages/user.rs | 46 +++++++++++++------------- frontend/src/pages/utilities.rs | 22 ++++++------- 8 files changed, 104 insertions(+), 94 deletions(-) diff --git a/frontend/src/auth.rs b/frontend/src/auth.rs index 77fc817..8ff46a1 100644 --- a/frontend/src/auth.rs +++ b/frontend/src/auth.rs @@ -109,7 +109,7 @@ pub fn protected_route(props: &ProtectedRouteProps) -> Html { AuthState { is_authenticated: None, .. - } => html! {
{ "Loading..." }
}, + } => html! {
{ "Wird geladen..." }
}, AuthState { is_authenticated: Some(false), .. @@ -126,7 +126,7 @@ pub fn protected_route(props: &ProtectedRouteProps) -> Html { Some(false) => { html! { to={crate::Route::PermissionDenied}/> } } - None => html! {
{ "Checking permissions..." }
}, + None => html! {
{ "Überprüfe Berechtigungen..." }
}, } } else { props.children.clone().into() diff --git a/frontend/src/lib.rs b/frontend/src/lib.rs index e609e9a..f1d663a 100644 --- a/frontend/src/lib.rs +++ b/frontend/src/lib.rs @@ -193,10 +193,10 @@ fn admin_check_wrapper(props: &AdminCheckWrapperProps) -> Html { } match *admin_exists { - None => html! {
{ "Loading..." }
}, + None => html! {
{ "Wird geladen..." }
}, Some(false) => { navigator.push(&Route::Setup); - html! {
{ "Redirecting to setup..." }
} + html! {
{ "Wird weitergeleitet zur Einrichtung..." }
} } Some(true) => props.children.clone().into(), } diff --git a/frontend/src/pages/basic_pages.rs b/frontend/src/pages/basic_pages.rs index e16c55f..42a286a 100644 --- a/frontend/src/pages/basic_pages.rs +++ b/frontend/src/pages/basic_pages.rs @@ -82,7 +82,7 @@ pub fn home_component() -> Html {
- +

{ &*name }

} @@ -101,7 +101,7 @@ pub fn home_component() -> Html { /// ``` #[component(NotFound)] pub fn not_found_component() -> Html { - let message = "404 Not found"; + let message = "404 Nicht gefunden"; html! {

{&message}

diff --git a/frontend/src/pages/setup.rs b/frontend/src/pages/setup.rs index d63a294..9aa86ab 100644 --- a/frontend/src/pages/setup.rs +++ b/frontend/src/pages/setup.rs @@ -103,7 +103,7 @@ pub fn initial_admin_setup() -> Html { } if !*admin_check_done { - return html! {
{ "Checking..." }
}; + return html! {
{ "Wird überprüft..." }
}; } let onsubmit = { @@ -121,17 +121,17 @@ pub fn initial_admin_setup() -> Html { e.prevent_default(); if (*pwd).is_empty() || (*pwd_confirm).is_empty() { - error.set("Password fields cannot be empty".to_string()); + error.set("Passwortfelder dürfen nicht leer sein".to_string()); return; } if *pwd != *pwd_confirm { - error.set("Passwords do not match".to_string()); + error.set("Passwörter stimmen nicht überein".to_string()); return; } if (*username).is_empty() { - error.set("Username cannot be empty".to_string()); + error.set("Benutzername darf nicht leer sein".to_string()); return; } @@ -172,10 +172,10 @@ pub fn initial_admin_setup() -> Html { navigator.push(&crate::Route::Login); } Ok(r) => { - let text = r.text().await.unwrap_or_else(|_| "unknown".into()); - error.set(format!("HTTP {}: {}", r.status(), text)); + let text = r.text().await.unwrap_or_else(|_| "Unbekannt".into()); + error.set(text); } - Err(err) => error.set(format!("Network error: {}", err)), + Err(err) => error.set(format!("Netzwerkfehler: {}", err)), } }); }) @@ -184,16 +184,16 @@ pub fn initial_admin_setup() -> Html { html! {
-

{ "Initial Admin Setup" }

-

{ "Create your first administrator account" }

+

{ "Admin-Einrichtung" }

+

{ "Erstellen Sie Ihr erstes Administratorkonto" }

-
-
-
-
-
if !error.is_empty() { @@ -272,7 +272,7 @@ pub fn initial_admin_setup() -> Html { } if *success { -

{ "Admin account created successfully! Redirecting to login..." }

+

{ "Administratorkonto erfolgreich erstellt! Wird weitergeleitet zum Login..." }

}
diff --git a/frontend/src/pages/sidebar.rs b/frontend/src/pages/sidebar.rs index 6ca4578..cc53b72 100644 --- a/frontend/src/pages/sidebar.rs +++ b/frontend/src/pages/sidebar.rs @@ -234,10 +234,10 @@ pub fn ticket_menu() -> Html { html! { } @@ -289,7 +289,7 @@ pub fn users_menu() -> Html { onclick={on_toggle} aria-expanded={open.to_string()} > - { "Users" } + { "Benutzer" } { if open { " ▾" } else { " ▸" } } @@ -298,10 +298,10 @@ pub fn users_menu() -> Html { html! { } @@ -398,7 +398,7 @@ pub fn sidebar(props: &SidebarComponentProps) -> Html { }; match *is_admin { - None => html! { }, + None => html! { }, // Non-admin: render a condensed user sidebar (no diagnostics, limited links) Some(false) => { @@ -423,6 +423,7 @@ pub fn sidebar(props: &SidebarComponentProps) -> Html {
  • + + to={crate::Route::AllTickets}>{ "Tickets ansehen" }> @@ -448,9 +451,12 @@ pub fn ticket_by_id_component(props: &TicketProps) -> Html { .expect("Failed to construct request"); match request.send().await { - Ok(response) if response.status() == 200 => error.set(Some("Success".into())), - Ok(response) => error.set(Some(format!("Error: {}", response.status()))), - Err(err) => error.set(Some(format!("Network error: {}", err))), + Ok(response) if response.status() == 200 => error.set(Some("Erfolg".into())), + Ok(response) => { + let text = response.text().await.unwrap_or_else(|_| "Unbekannt".into()); + error.set(Some(text)); + }, + Err(err) => error.set(Some(format!("Netzwerkfehler: {}", err))), } }); }) @@ -488,14 +494,13 @@ pub fn ticket_by_id_component(props: &TicketProps) -> Html { match request.send().await { Ok(resp) if resp.status() == 200 || resp.status() == 204 => { - // remove local state or navigate away - ticket_state.set(None); // clears the shown item + ticket_state.set(None); } Ok(resp) => { - let txt = resp.text().await.unwrap_or_else(|_| "Unknown".into()); - delete_error.set(Some(format!("HTTP {}: {}", resp.status(), txt))); + let txt = resp.text().await.unwrap_or_else(|_| "Unbekannt".into()); + delete_error.set(Some(txt)); } - Err(err) => delete_error.set(Some(format!("Network error: {}", err))), + Err(err) => delete_error.set(Some(format!("Netzwerkfehler: {}", err))), } deleting.set(false); }); @@ -503,9 +508,9 @@ pub fn ticket_by_id_component(props: &TicketProps) -> Html { }; if *loading { - html! {

    { "Loading" }

    } + html! {

    { "Wird geladen" }

    } } else if let Some(e) = &*error { - html! {

    { format!("Error: {}", e) }

    } + html! {

    { format!("Fehler: {}", e) }

    } } else if let Some(t) = &*ticket { html! {
    @@ -549,7 +554,7 @@ pub fn ticket_by_id_component(props: &TicketProps) -> Html {
    } } else { - html! {

    { "No ticket found." }

    } + html! {

    { "Kein Ticket gefunden." }

    } } } @@ -659,9 +664,9 @@ pub fn all_tickets_component() -> Html { } if *loading { - html! {

    { "Loading" }

    } + html! {

    { "Wird geladen" }

    } } else if let Some(e) = &*error { - html! {

    { format!("Error: {}", e) }

    } + html! {

    { format!("Fehler: {}", e) }

    } } else { html! {
      @@ -742,17 +747,17 @@ pub fn archived_tickets_component() -> Html { Ok(response) if response.status() == 200 => { match response.json::>().await { Ok(t) => tickets.set(t), - Err(e) => error.set(Some(format!("parse error: {}", e))), + Err(e) => error.set(Some(format!("Parsefehler: {}", e))), } } Ok(response) => { if let Ok(text) = response.text().await { error.set(Some(text)); } else { - error.set(Some(format!("status {}", response.status()))); + error.set(Some(format!("Status {}", response.status()))); } } - Err(err) => error.set(Some(format!("Network error: {}", err))), + Err(err) => error.set(Some(format!("Netzwerkfehler: {}", err))), } loading.set(false); }); @@ -792,9 +797,9 @@ pub fn archived_tickets_component() -> Html { } if *loading { - html! {

      { "Loading" }

      } + html! {

      { "Wird geladen" }

      } } else if let Some(e) = &*error { - html! {

      { format!("Error: {}", e) }

      } + html! {

      { format!("Fehler: {}", e) }

      } } else { html! {
        diff --git a/frontend/src/pages/user.rs b/frontend/src/pages/user.rs index 93130fe..87b7f08 100644 --- a/frontend/src/pages/user.rs +++ b/frontend/src/pages/user.rs @@ -181,9 +181,12 @@ pub fn register_component() -> Html { .expect("Error building request"); match request.send().await { - Ok(response) if response.status() == 200 => status.set(Some("Success".into())), - Ok(response) => status.set(Some(format!("Error: {}", response.status()))), - Err(err) => status.set(Some(format!("Network error: {}", err))), + Ok(response) if response.status() == 200 => status.set(Some("Erfolg".into())), + Ok(response) => { + let text = response.text().await.unwrap_or_else(|_| "Unbekannt".into()); + status.set(Some(text)); + }, + Err(err) => status.set(Some(format!("Netzwerkfehler: {}", err))), } }); }) @@ -326,10 +329,10 @@ pub fn login_component() -> Html { navigator.push(&crate::Route::Home); } Ok(r) => { - let text = r.text().await.unwrap_or_else(|_| "unknown".into()); - error.set(format!("HTTP {}: {}", r.status(), text)); + let text = r.text().await.unwrap_or_else(|_| "Unbekannt".into()); + error.set(text); } - Err(err) => error.set(format!("Network error: {}", err)), + Err(err) => error.set(format!("Netzwerkfehler: {}", err)), } }); }) @@ -340,7 +343,7 @@ pub fn login_component() -> Html {

        { "Anmeldung" }

  • @@ -428,9 +431,9 @@ pub fn all_users_component() -> Html { } if *loading { - html! {

    { "Loading" }

    } + html! {

    { "Wird geladen" }

    } } else if let Some(e) = &*error { - html! {

    { format!("Error: {}", e) }

    } + html! {

    { format!("Fehler: {}", e) }

    } } else { html! {
      @@ -637,7 +640,7 @@ pub fn user_by_id_component(props: &UserProps) -> Html { // confirm if !web_sys::window() .and_then(|w| { - w.confirm_with_message("Are you sure you want to delete this item?") + w.confirm_with_message("Möchten Sie diesen Eintrag wirklich löschen?") .ok() }) .unwrap_or(false) @@ -653,19 +656,18 @@ pub fn user_by_id_component(props: &UserProps) -> Html { let user_state = user_state.clone(); spawn_local(async move { - let url = format!("/api/users/{}", id); // or /api/tickets/{} + let url = format!("/api/users/{}", id); let req = Request::delete(&url).credentials(web_sys::RequestCredentials::Include); match req.send().await { Ok(resp) if resp.status() == 200 || resp.status() == 204 => { - // remove local state or navigate away - user_state.set(None); // clears the shown item + user_state.set(None); } Ok(resp) => { - let txt = resp.text().await.unwrap_or_else(|_| "Unknown".into()); - delete_error.set(Some(format!("HTTP {}: {}", resp.status(), txt))); + let txt = resp.text().await.unwrap_or_else(|_| "Unbekannt".into()); + delete_error.set(Some(txt)); } - Err(err) => delete_error.set(Some(format!("Network error: {}", err))), + Err(err) => delete_error.set(Some(format!("Netzwerkfehler: {}", err))), } deleting.set(false); }); @@ -673,9 +675,9 @@ pub fn user_by_id_component(props: &UserProps) -> Html { }; if *loading { - html! {

      { "Loading" }

      } + html! {

      { "Wird geladen" }

      } } else if let Some(e) = &*error { - html! {

      { format!("Error: {}", e) }

      } + html! {

      { format!("Fehler: {}", e) }

      } } else if let Some(u) = &*user { html! {
      @@ -743,7 +745,7 @@ pub fn user_by_id_component(props: &UserProps) -> Html { if *save_success { -

      { "Updated successfully" }

      +

      { "Erfolgreich aktualisiert" }

      } if let Some(err) = &*save_error {

      { err.clone() }

      @@ -761,6 +763,6 @@ pub fn user_by_id_component(props: &UserProps) -> Html {
      } } else { - html! {

      { "No ticket found." }

      } + html! {

      { "Kein Benutzer gefunden." }

      } } } diff --git a/frontend/src/pages/utilities.rs b/frontend/src/pages/utilities.rs index b2fb47f..d3a11e9 100644 --- a/frontend/src/pages/utilities.rs +++ b/frontend/src/pages/utilities.rs @@ -225,17 +225,17 @@ pub fn ticket_count_component() -> Html { Ok(response) if response.status() == 200 => { match response.json::>().await { Ok(t) => tickets.set(t), - Err(e) => error.set(Some(format!("parse error: {}", e))), + Err(e) => error.set(Some(format!("Parsefehler: {}", e))), } } Ok(response) => { if let Ok(text) = response.text().await { error.set(Some(text)); } else { - error.set(Some(format!("status {}", response.status()))); + error.set(Some(format!("Status {}", response.status()))); } } - Err(err) => error.set(Some(format!("Network error: {}", err))), + Err(err) => error.set(Some(format!("Netzwerkfehler: {}", err))), } loading.set(false); }); @@ -275,9 +275,9 @@ pub fn ticket_count_component() -> Html { } if *loading { - html! {

      { "Loading" }

      } + html! {

      { "Wird geladen" }

      } } else if let Some(e) = &*error { - html! {

      { format!("Error: {}", e) }

      } + html! {

      { format!("Fehler: {}", e) }

      } } else { let status_conditions = |t: &Ticket| t.status == "ToDo" || t.status == "InProgress"; let count = tickets @@ -342,17 +342,17 @@ pub fn submit_stats_component() -> Html { Ok(response) if response.status() == 200 => { match response.json::>().await { Ok(t) => tickets.set(t), - Err(e) => error.set(Some(format!("parse error: {}", e))), + Err(e) => error.set(Some(format!("Parsefehler: {}", e))), } } Ok(response) => { if let Ok(text) = response.text().await { error.set(Some(text)); } else { - error.set(Some(format!("status {}", response.status()))); + error.set(Some(format!("Status {}", response.status()))); } } - Err(err) => error.set(Some(format!("Network error: {}", err))), + Err(err) => error.set(Some(format!("Netzwerkfehler: {}", err))), } loading.set(false); }); @@ -372,7 +372,7 @@ pub fn submit_stats_component() -> Html { } } - let weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + let weekdays = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]; let (max_idx, _max_val) = counts .iter() .enumerate() @@ -383,12 +383,12 @@ pub fn submit_stats_component() -> Html { html! {
      if *loading { -

      { "Loading..." }

      +

      { "Wird geladen..." }

      } if let Some(e) = &*error {

      { e.clone() }

      } -

      { "Tickets per weekday" }

      +

      { "Tickets pro Wochentag" }

      { for (0..7).map(|i| {