diff options
author | metamuffin <metamuffin@disroot.org> | 2025-05-31 22:20:59 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-05-31 22:20:59 +0200 |
commit | 22ae272fd60f76d31422e0378e7cdaab4a97a062 (patch) | |
tree | e721196d22b0771ba135f4bc0170dc2cde7754ad | |
parent | 2305e63577187dd0ee014764850427304200463d (diff) | |
download | jellything-22ae272fd60f76d31422e0378e7cdaab4a97a062.tar jellything-22ae272fd60f76d31422e0378e7cdaab4a97a062.tar.bz2 jellything-22ae272fd60f76d31422e0378e7cdaab4a97a062.tar.zst |
localize admin pages
-rw-r--r-- | locale/en.ini | 10 | ||||
-rw-r--r-- | server/src/main.rs | 8 | ||||
-rw-r--r-- | ui/src/admin/mod.rs | 32 |
3 files changed, 35 insertions, 15 deletions
diff --git a/locale/en.ini b/locale/en.ini index 25db0ca..2695e48 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -106,15 +106,25 @@ prop.vis.reduced=Reduced visibility admin.dashboard.title=Admin Panel admin.dashboard.import.inc=Start incremental import admin.dashboard.import.full=Start full import +admin.dashboard.update_search=Regenerate full-text search index +admin.dashboard.manage_users=Manage Users +admin.dashboard.create_invite=Generate new invite code +admin.dashboard.delete_invite=Invalidate +admin.dashboard.invites=Invitations +admin.dashboard.users=Users +admin.dashboard.library=Library admin.invite_create_success=Invite created: {invite} admin.invite_delete_success=Invite deleted admin.import_success=Import finished +admin.import_errors=The last import resulted in {n} errors: admin.update_search_success=Search index updated admin.users.remove_success=User removed admin.users.permission_update_success=Permissions updated admin.users.title=User Management admin.users.user_list=All Users admin.users.return_to_list=Back to user list +admin.log.warnonly=Server Log (Warnings only) +admin.log.full=Server Log (Full) page.curr=Page {cur} of {max} page.prev=Previous page diff --git a/server/src/main.rs b/server/src/main.rs index 7c7bbd2..30b80ed 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -3,7 +3,13 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -#![feature(int_roundings, let_chains, str_as_str, duration_constructors)] +#![feature( + int_roundings, + let_chains, + str_as_str, + duration_constructors, + duration_constructors_lite +)] #![allow(clippy::needless_borrows_for_generic_args)] #![recursion_limit = "4096"] diff --git a/ui/src/admin/mod.rs b/ui/src/admin/mod.rs index c2afc9d..0d50bca 100644 --- a/ui/src/admin/mod.rs +++ b/ui/src/admin/mod.rs @@ -7,7 +7,11 @@ pub mod log; pub mod user; -use crate::{FlashM, Page, locale::Language, scaffold::FlashDisplay}; +use crate::{ + FlashM, Page, + locale::{Language, tr, trs}, + scaffold::FlashDisplay, +}; use jellycommon::routes::{ u_admin_import, u_admin_invite_create, u_admin_invite_remove, u_admin_log, u_admin_update_search, u_admin_users, @@ -24,12 +28,12 @@ impl Page for AdminDashboardPage<'_> { markup::define!( AdminDashboardPage<'a>(lang: &'a Language, busy: Option<&'static str>, last_import_err: &'a [String], flash: &'a FlashM, invites: &'a [String]) { - h1 { "Admin Panel" } + h1 { @trs(lang, "admin.dashboard.title") } @FlashDisplay { flash } @if !last_import_err.is_empty() { section.message.error { details { - summary { p.error { @format!("The last import resulted in {} errors:", last_import_err.len()) } } + summary { p.error { @tr(**lang, "admin.import_errors").replace("{n}", &last_import_err.len().to_string()) } } ol { @for e in *last_import_err { li.error { pre.error { @e } } }} @@ -37,34 +41,34 @@ markup::define!( } } ul { - li{a[href=u_admin_log(true)] { "Server Log (Warnings only)" }} - li{a[href=u_admin_log(false)] { "Server Log (Full) " }} + li{a[href=u_admin_log(true)] { @trs(lang, "admin.log.warnonly") }} + li{a[href=u_admin_log(false)] { @trs(lang, "admin.log.full") }} } - h2 { "Library" } + h2 { @trs(lang, "admin.dashboard.library") } @if let Some(text) = busy { section.message { p.warn { @text } } } form[method="POST", action=u_admin_import(true)] { - input[type="submit", disabled=busy.is_some(), value="Start incremental import"]; + input[type="submit", disabled=busy.is_some(), value=tr(**lang, "admin.dashboard.import.inc").to_string()]; } form[method="POST", action=u_admin_import(false)] { - input[type="submit", disabled=busy.is_some(), value="Start full import"]; + input[type="submit", disabled=busy.is_some(), value=tr(**lang, "admin.dashboard.import.full").to_string()]; } form[method="POST", action=u_admin_update_search()] { - input[type="submit", value="Regenerate full-text search index"]; + input[type="submit", value=tr(**lang, "admin.dashboard.update_search").to_string()]; } - h2 { "Users" } - p { a[href=u_admin_users()] "Manage Users" } - h2 { "Invitations" } + h2 { @trs(lang, "admin.dashboard.users") } + p { a[href=u_admin_users()] { @trs(lang, "admin.dashboard.manage_users") } } + h2 { @trs(lang, "admin.dashboard.invites") } form[method="POST", action=u_admin_invite_create()] { - input[type="submit", value="Generate new invite code"]; + input[type="submit", value=tr(**lang, "admin.dashboard.create_invite").to_string()]; } ul { @for t in *invites { li { form[method="POST", action=u_admin_invite_remove()] { span { @t } input[type="text", name="invite", value=&t, hidden]; - input[type="submit", value="Invalidate"]; + input[type="submit", value=tr(**lang, "admin.dashboard.create_invite").to_string()]; } } }} |