finally remove last strings from source code; Fixes #12
All checks were successful
CI/CD Pipeline / test (push) Successful in 16m0s
CI/CD Pipeline / deploy (push) Successful in 7m26s

This commit is contained in:
Philipp Hofer 2025-04-23 15:35:53 +02:00
parent 7bb66bac24
commit d2f49aff1a
7 changed files with 34 additions and 54 deletions

6
Cargo.lock generated
View File

@ -2643,6 +2643,8 @@ dependencies = [
[[package]]
name = "rust-i18n"
version = "3.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2b6307cde881492032919adf26e254981604a6657b339ae23cce8358e9ee203"
dependencies = [
"globwalk",
"once_cell",
@ -2655,6 +2657,8 @@ dependencies = [
[[package]]
name = "rust-i18n-macro"
version = "3.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c0dc724669fe2ddbbec5ed9daea8147a9030de87ebb46fdc7bb9315701d9912"
dependencies = [
"glob",
"once_cell",
@ -2670,6 +2674,8 @@ dependencies = [
[[package]]
name = "rust-i18n-support"
version = "3.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b47501de04282525d0192c4b4133f9e3574e1fab3542ddc7bb109ff773dc108b"
dependencies = [
"arc-swap",
"base62",

View File

@ -25,6 +25,7 @@ come_home_with_these_groups: "Gruppen mitnehmen"
station_info: "Schön, dass du uns als Stationsbetreuer hilfst."
info_crewless_station: "Wenn das eine unbemannte Station ist, wähle hier 0 Personen aus. Dann werden dieser Station keine Startteams zugeteilt und es wird kein PDF generiert."
time: "Uhrzeit"
google_maps_navigation: "Google Maps Navigation..."
#
# ######
@ -117,6 +118,8 @@ confirm_station_cancel_team_finished: "Bist du sicher, dass das Team noch nicht
#
station: "Station"
stations: "Stationen"
stations_expl_without_first_word: "sind festgelegte Orte mit spezifischen Aufgaben."
station_expl_for_everyone: "<p>In diesem Tool solltest du diese 3 Dinge vermerken:</p> <ol> <li> <b>Ein Team kommt zu deiner Station:</b> Du wählst das entsprechende Team aus und klickst auf <em>Team ist da</em>. Das Team ist nun im Wartemodus (⏳). </li> <li> <b>Das Team beginnt mit der Aufgabe bei deiner Station:</b> Du klickst beim entsprechenden Team auf <em>Team startet</em>. Das Team ist nun im aktiven Modus (🎬). </li> <li> <b>Das Team hat deine Station beendet und ist gegangen:</b> Du klickst beim entsprechenden Team auf <em>Team fertig</em>. Bitte schau, dass du das immer zeitnah erledigst, damit die nächste Station informiert werden kann, dass ein Team auf dem Weg ist. </li> </ol> <p>Zu jedem Zeitpunkt kannst du mit Klick auf ✏️ Notizen zu den Teams machen. In aller Ruhe kannst du unter dem Punkt <em>Zu bewerten</em> die Teams, die schon bei dir waren, bewerten.</p>"
nonexisting_station: "Station mit ID %{id} existiert nicht."
station_url: "Stations-Link"
station_url_info: "Diesen Link nur Betreuern der Station %{station} geben! Mit diesem Link erhält man die Berechtigung, Teams zu bewerten."
@ -139,7 +142,6 @@ click_on_map_for_new_location: "Um einen neuen Standort zu wählen, auf einen Pu
click_on_map_for_location: "Um einen Standort zu wählen, auf einen Punkt in der Karte klicken"
enter_ratings_for_station: "Bewertungen für Station %{station} eingeben"
no_stations_yet: "Es gibt noch keine Stationen."
stations_expl_without_first_word: "sind festgelegte Orte mit spezifischen Aufgaben."
station_warning_not_assigned_route: "Noch keiner Route zugeordnet" # should be short -> tooltip
station_confirm_deletion: "Bist du sicher, dass die Station gelöscht werden soll? Das kann _NICHT_ mehr rückgängig gemacht werden."
station_hint_create_first: "Es gibt noch keine Stationen. Das kannst du hier ändern ⤵️"
@ -173,6 +175,9 @@ first_station_expl: "Die erste Station wird beim Anlegen eines Team automatisch
new_team_name: "Team %{old} heißt ab sofort %{new}"
notes_edited: "Notizen für das Team %{team} erfolgreich geändert"
amount_teammembers_edited: "Anzahl an Mitglieder für das Team %{team} erfolgreich geändert"
no_team_to_take_home: "Du musst keine Teams mit heim nehmen"
take_home_the_following_team: "Bitte nimm das folgende Team mit heim:"
take_home_the_following_teams: "Bitte nimm folgende Teams mit heim:"
#
@ -186,6 +191,7 @@ amount_teammembers_edited: "Anzahl an Mitglieder für das Team %{team} erfolgrei
#
team: "Team"
teams: "Teams"
teams_expl_without_first_word: "sind eine Menge an Personen, die verschiedene <a href='/admin/station'>Stationen</a> ablaufen. Welche Stationen, entscheidet sich je nachdem, welcher <a href='/admin/route'>Route</a> sie zugewiesen sind."
nonexisting_team: "Team mit ID %{id} existiert nicht."
select_team: "Team auswählen"
new_team: "Neues Team"
@ -244,6 +250,7 @@ highscore: "Highscore"
#
admin: "Admin"
admins: "Admins"
admin_expl_without_first_word: "sind Menschen, die <a href='/admin/station'>Stationen</a>, <a href='/admin/route'>Routen</a> und <a href='/admin/team'>Teams</a> bearbeiten können. Zusätzlich sehen sie das <a href='/admin/highscore'>Ergebnis</a>."
cant_update_pw_if_already_existing: "Kann kein neues Passwort setzen, weil es bereits eins gibt..."
cant_update_pw_if_already_existing_for_user: "Kann kein neues Passwort für %{user} setzen, weil es bereits eins gibt..."
cant_update_pw_with_wrong_code: "Falscher Code zum Setzen eines neuen Passworts für %{user}"
@ -275,6 +282,7 @@ confirm_admin_delete: "Bist du sicher, dass der User gelöscht werden soll? Das
#
route: "Route"
routes: "Routen"
routes_expl_without_first_word: "definieren welche <a href='/admin/station'>Stationen</a> von den <a href='/admin/team'>Teams</a> in welcher Reihenfolge abgeklappert werden sollen. Wenn es verschiedene Kategorien (zB Kinder- und Erwachsenenwertung) gibt, kannst du auch mehrere <a href='/admin/route'>Routen</a> mit (teils) überlappenden Stationen erstellen."
nonexisting_route: "Route mit ID %{id} existiert nicht."
route_new: "Neue Route"
route_name: "Routenname"

View File

@ -18,15 +18,11 @@ async fn index(State(db): State<Arc<SqlitePool>>, session: Session) -> Markup {
let content = html! {
h1 {
a href="/admin" { "↩️" }
"Routen"
(t!("routes"))
}
article {
em { "Routen " }
"definieren welche "
a href="/admin/station" { "Stationen" }
" von den "
a href="/admin/team" { "Teams" }
" in welcher Reihenfolge abgeklappert werden sollen. Wenn es verschiedene Kategorien (zB Kinder- und Erwachsenenwertung) gibt, kannst du auch mehrere Routen mit (teils) überlappenden Stationen erstellen."
em { (t!("routes")) }
(PreEscaped(t!("routes_expl_without_first_word")))
}
ol {
@for route in &routes{

View File

@ -116,7 +116,7 @@ async fn view(
}
},
None => details {
summary { "Neue Notiz hinzufügen" }
summary { (t!("add_new_note")) }
form action=(format!("/admin/station/{}/notes", station.id)) method="post" {
textarea name="notes" required rows="10" {};
input type="submit" value=(t!("save"));

View File

@ -732,11 +732,7 @@ async fn index(State(db): State<Arc<SqlitePool>>, session: Session) -> Markup {
}
article {
em { (t!("teams")) }
"sind eine Menge an Personen, die verschiedene "
a href="/admin/station" { "Stationen" }
" ablaufen. Welche Stationen, entscheidet sich je nachdem, welcher "
a href="/admin/route" { "Route" }
" sie zugewiesen sind."
(PreEscaped(t!("teams_expl_without_first_word")))
}
@if teams.is_empty() {
article class="warning" {
@ -762,7 +758,7 @@ async fn index(State(db): State<Arc<SqlitePool>>, session: Session) -> Markup {
fieldset role="group" {
input type="text" name="name" placeholder=(t!("teamname")) required;
input type="hidden" name="route_id" value=(routes[0].id) ;
input type="submit" value="Neues Team";
input type="submit" value=(t!("new_team"));
}
} @else {
input type="text" name="name" placeholder=(t!("teamname")) required;

View File

@ -5,7 +5,7 @@ use axum::{
routing::{get, post},
Form, Router,
};
use maud::{html, Markup};
use maud::{html, Markup, PreEscaped};
use serde::Deserialize;
use sqlx::SqlitePool;
use std::sync::Arc;
@ -174,15 +174,8 @@ async fn index(State(db): State<Arc<SqlitePool>>, session: Session) -> Markup {
}
article {
em { "Admins" }
"sind Menschen, die "
a href="/admin/station" { "Stationen" }
", "
a href="/admin/route" { "Routen" }
" und "
a href="/admin/team" { "Teams" }
" bearbeiten können. Zusätzlich sehen sie das "
a href="/admin/highscore" { "Ergebnis" }
"."
" "
(PreEscaped(t!("admin_expl_without_first_word")))
}
article {
h2 { (t!("new_admin")) }

View File

@ -104,35 +104,12 @@ async fn view(
div {
sub {
a href=(format!("https://www.google.com/maps?q={lat},{lng}")) target="_blank" {
"Google Maps Navigation"
(t!("google_maps_navigation"))
}
}
}
hr;
"In diesem Tool solltest du diese 3 Dinge vermerken:"
ol {
li {
b { "Ein Team kommt zu deiner Station:" }
" Du wählst das entsprechende Team aus und klickst auf "
em { (t!("team_is_here")) }
". Das Team ist nun im Wartemodus (⏳)."
}
li {
b { "Das Team beginnt mit der Aufgabe bei deiner Station:" }
" Du klickst beim entsprechenden Team auf "
em { (t!("team_starting")) }
". Das Team ist nun im aktiven Modus (🎬)."
}
li {
b { "Das Team hat deine Station beendet und ist gegangen:" }
" Du klickst beim entsprechenden Team auf "
em { (t!("team_finished")) }
". Bitte schau, dass du das immer zeitnah erledigst, damit die nächste Station informiert werden kann, dass ein Team auf dem Weg ist."
}
}
"Zu jedem Zeitpunkt kannst du mit Klick auf ✏️ Notizen zu den Teams machen. In aller Ruhe kannst du unter dem Punkt "
em { (t!("to_rate")) }
" die Teams, die schon bei dir waren, bewerten."
(PreEscaped(t!("station_expl_for_everyone")))
hr;
a href=(format!("/s/{id}/{code}/ready")){
@if station.ready {
@ -155,14 +132,18 @@ async fn view(
@if status == RunStatus::HasEnded {
@let teams_to_take_home = Team::all_with_last_station(&db, &station).await;
@if !teams_to_take_home.is_empty() {
"Bitte nimm folgende Teams mit heim:"
@if teams_to_take_home.len() == 1 {
(t!("take_home_the_following_team"))
} @else {
(t!("take_home_the_following_teams"))
}
ol {
@for team in teams_to_take_home {
li { (team.name) }
}
}
}@else {
"Du musst keine Teams mit heim nehmen"
(t!("no_team_to_take_home"))
}
}
@ -210,7 +191,7 @@ async fn view(
}
form action=(format!("/s/{id}/{code}/team-update/{}", team.id)) method="post" {
label {
"Notizen"
(t!("notes"))
@if let Some(notes) = &rating.notes {
input type="text" name="notes" value=(notes);
} @else {
@ -246,7 +227,7 @@ async fn view(
}
form action=(format!("/s/{id}/{code}/team-update/{}", team.id)) method="post" {
label {
"Notizen"
(t!("notes"))
@if let Some(notes) = &rating.notes {
input type="text" name="notes" value=(notes);
} @else {