From d8e67d8ef047307ab548dac03e323e948116d74b Mon Sep 17 00:00:00 2001 From: eiiko6 Date: Thu, 7 May 2026 21:12:31 +0200 Subject: [PATCH] added i18n but not using it yet --- Cargo.lock | 271 ++++++++++++++++++++++++++++++++++++++- Cargo.toml | 3 + locales/en.ftl | 66 ++++++++++ locales/fr.ftl | 66 ++++++++++ src/handlers.rs | 50 +++++++- src/main.rs | 12 +- templates/_layout.html | 32 +++-- templates/analytics.html | 30 +++-- templates/details.html | 22 ++-- templates/homepage.html | 64 ++++----- 10 files changed, 541 insertions(+), 75 deletions(-) create mode 100644 locales/en.ftl create mode 100644 locales/fr.ftl diff --git a/Cargo.lock b/Cargo.lock index bd2f629..9d8e2af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "accept-language" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f27d075294830fcab6f66e320dab524bc6d048f4a151698e153205559113772" + [[package]] name = "aho-corasick" version = "1.1.4" @@ -129,9 +135,9 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "bytes", @@ -179,6 +185,28 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum-extra" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be44683b41ccb9ab2d23a5230015c9c3c55be97a25e4428366de8873103f7970" +dependencies = [ + "axum", + "axum-core", + "bytes", + "cookie", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "base64" version = "0.22.1" @@ -353,6 +381,17 @@ dependencies = [ "memchr", ] +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -437,6 +476,15 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", +] + [[package]] name = "deunicode" version = "1.6.2" @@ -491,6 +539,85 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "fluent-bundle" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash", + "self_cell", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" +dependencies = [ + "memchr", + "thiserror 2.0.18", +] + +[[package]] +name = "fluent-template-macros" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b1dac7e7f07f8a60aa844f616bede13deeffaf24e9e35ae9e4979a7dac4a5c" +dependencies = [ + "flume", + "ignore", + "proc-macro2", + "quote", + "syn", + "unic-langid", +] + +[[package]] +name = "fluent-templates" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d48ac2b8e7c3a2198fc584af78e674d15dacdede8a6cebb686c844713f7d0ba" +dependencies = [ + "fluent-bundle", + "fluent-langneg", + "fluent-syntax", + "fluent-template-macros", + "flume", + "heck", + "ignore", + "intl-memoizer", + "log", + "serde_json", + "tera", + "thiserror 2.0.18", + "unic-langid", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "spin", +] + [[package]] name = "fnv" version = "1.0.7" @@ -983,6 +1110,25 @@ dependencies = [ "hashbrown 0.16.1", ] +[[package]] +name = "intl-memoizer" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" +dependencies = [ + "unic-langid", +] + [[package]] name = "ipnet" version = "2.12.0" @@ -1170,6 +1316,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "num-conv" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" + [[package]] name = "num-traits" version = "0.2.19" @@ -1363,6 +1515,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1372,6 +1530,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + [[package]] name = "proc-macro2" version = "1.0.106" @@ -1767,6 +1931,12 @@ dependencies = [ "libc", ] +[[package]] +name = "self_cell" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" + [[package]] name = "serde" version = "1.0.228" @@ -1875,10 +2045,13 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" name = "slimes-website" version = "0.1.2" dependencies = [ + "accept-language", "anyhow", "axum", + "axum-extra", "chrono", "clap", + "fluent-templates", "lazy_static", "reqwest", "serde", @@ -1917,6 +2090,15 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + [[package]] name = "spinning_top" version = "0.3.0" @@ -2067,6 +2249,37 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.8.2" @@ -2074,6 +2287,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", + "serde_core", "zerovec", ] @@ -2312,6 +2526,15 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "type-map" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" +dependencies = [ + "rustc-hash", +] + [[package]] name = "typenum" version = "1.19.0" @@ -2324,6 +2547,49 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" +[[package]] +name = "unic-langid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" +dependencies = [ + "unic-langid-impl", + "unic-langid-macros", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" +dependencies = [ + "tinystr", +] + +[[package]] +name = "unic-langid-macros" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5957eb82e346d7add14182a3315a7e298f04e1ba4baac36f7f0dbfedba5fc25" +dependencies = [ + "proc-macro-hack", + "tinystr", + "unic-langid-impl", + "unic-langid-macros-impl", +] + +[[package]] +name = "unic-langid-macros-impl" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1249a628de3ad34b821ecb1001355bca3940bcb2f88558f1a8bd82e977f75b5" +dependencies = [ + "proc-macro-hack", + "quote", + "syn", + "unic-langid-impl", +] + [[package]] name = "unicode-ident" version = "1.0.24" @@ -2922,6 +3188,7 @@ version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", diff --git a/Cargo.toml b/Cargo.toml index 63486c7..06a3deb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,3 +18,6 @@ serde = { version = "1.0.228", features = ["derive"] } chrono = { version = "0.4.44", features = ["serde"] } reqwest = { version = "0.13.2", features = ["json"] } serde_json = "1.0.149" +fluent-templates = { version = "0.14.0", features = ["tera"] } +axum-extra = { version = "0.12.6", features = ["cookie"] } +accept-language = "3.1.0" diff --git a/locales/en.ftl b/locales/en.ftl new file mode 100644 index 0000000..6af1ac1 --- /dev/null +++ b/locales/en.ftl @@ -0,0 +1,66 @@ +lang = en +nav-leaderboard = Leaderboard +nav-analytics = Analytics +nav-source-header = Source Code +nav-cli-title = CLI + Server +nav-cli-desc = Core lib, CLI and API monorepo +nav-web-title = Website +nav-web-desc = This very website +nav-gui-title = GUI Version +nav-gui-desc = Experimental Cross-platform GUI +footer-text = Slimes + +home-title = Benchmark Reports +home-experimental = Experimental +home-experimental-tooltip = Show Android clients +home-sort-by = Sort by: +home-order-desc = Descending +home-order-asc = Ascending + +sort-score = Score +sort-single = Single Thread +sort-multi = Multi Thread +sort-ram = RAM Amount +sort-threads = Thread Count +sort-time = Time Ago + +sort-desc-score = (Singlethread + Multithread) / 2 +sort-desc-single = Single-core efficiency +sort-desc-multi = Multi-core efficiency +sort-desc-ram = System memory capacity +sort-desc-threads = Total logical cores +sort-desc-time = Newest reports first + +table-cpu-score = CPU Score +table-threads = Threads +table-ram = RAM +table-os = OS +table-hostname = Hostname +table-time = Time +table-note = Note +badge-new = NEW + +details-back = Back to Leaderboard +details-device = Device { $sig } +details-report-id = ID +details-version = VERSION +details-mac = MAC +details-reported = REPORTED +details-cpu-score = CPU Score +details-perf-breakdown = CPU Performance breakdown +details-single = Single-Thread +details-multi = Multi-Thread +details-threads = Threads + +analytics-title = Benchmark Analytics +analytics-insights = Insights from { $count } benchmarks +analytics-ram-eff = RAM Efficiency +analytics-ram-eff-desc = Avg Score per GB RAM +analytics-cpu-eff = CPU Thread Efficiency +analytics-cpu-eff-desc = Avg Score per Thread +analytics-chart-dist = Score Distribution +analytics-chart-os-count = Reports by Operating System +analytics-chart-os-avg = Avg Score by Operating System +analytics-chart-os-max = Highest Score by Operating System +analytics-chart-os-min = Lowest Score by Operating System +analytics-full-view = Full View diff --git a/locales/fr.ftl b/locales/fr.ftl new file mode 100644 index 0000000..79f2df9 --- /dev/null +++ b/locales/fr.ftl @@ -0,0 +1,66 @@ +lang = fr +nav-leaderboard = Classement +nav-analytics = Statistiques +nav-source-header = Code Source +nav-cli-title = CLI + Serveur +nav-cli-desc = Lib principale, CLI et API +nav-web-title = Site Web +nav-web-desc = Ce site même +nav-gui-title = Version GUI +nav-gui-desc = GUI multiplateforme expérimentale +footer-text = Slimes + +home-title = Rapports de Benchmark +home-experimental = Expérimental +home-experimental-tooltip = Afficher les clients Android +home-sort-by = Trier par : +home-order-desc = Décroissant +home-order-asc = Croissant + +sort-score = Score +sort-single = Singlethread +sort-multi = Multithread +sort-ram = Quantité de RAM +sort-threads = Nombre de threads +sort-time = Temps + +sort-desc-score = (Singlethread + Multithread) / 2 +sort-desc-single = Efficacité singlethread +sort-desc-multi = Efficacité multithread +sort-desc-ram = Capacité mémoire système +sort-desc-threads = Total des coeurs logiques +sort-desc-time = Rapports les plus récents + +table-cpu-score = Score CPU +table-threads = Threads +table-ram = RAM +table-os = Système +table-hostname = Nom d'hôte +table-time = Temps +table-note = Note +badge-new = NOUVEAU + +details-back = Retour au classement +details-device = Machine { $sig } +details-report-id = ID +details-version = VERSION +details-mac = MAC +details-reported = ENVOYÉ +details-cpu-score = Score CPU +details-perf-breakdown = Détails des performances CPU +details-single = Mono-thread +details-multi = Multi-thread +details-threads = Threads + +analytics-title = Statistiques de Benchmark +analytics-insights = Aperçu de { $count } benchmarks +analytics-ram-eff = Efficacité RAM +analytics-ram-eff-desc = Score moyen par Go de RAM +analytics-cpu-eff = Efficacité CPU +analytics-cpu-eff-desc = Score moyen par thread +analytics-chart-dist = Distribution des scores +analytics-chart-os-count = Rapports par système d'exploitation +analytics-chart-os-avg = Score moyen par système d'exploitation +analytics-chart-os-max = Score le plus élevé par système +analytics-chart-os-min = Score le plus bas par système +analytics-full-view = Plein écran diff --git a/src/handlers.rs b/src/handlers.rs index 7bd4ed6..8c3baad 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -2,8 +2,9 @@ use axum::{ extract::{Path, Query, State}, response::{Html, IntoResponse}, }; +use axum_extra::extract::CookieJar; use chrono::{DateTime, Utc}; -use reqwest::StatusCode; +use reqwest::{StatusCode, header::ACCEPT_LANGUAGE}; use serde::{Deserialize, Serialize}; use std::{collections::HashMap, sync::Arc, time::Instant}; use tera::Context; @@ -11,10 +12,11 @@ use tera::Context; use crate::{AppState, TEMPLATES}; #[derive(Debug, Serialize, Deserialize)] -pub struct SortParams { +pub struct Params { pub sort: Option, pub order: Option, pub experimental: Option, + pub lang: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -58,6 +60,22 @@ pub struct ScoreDetail { pub score: u64, } +pub struct Lang(pub String); +impl Lang { + pub fn resolve(jar: &CookieJar, headers: &axum::http::HeaderMap) -> String { + if let Some(lang_cookie) = jar.get("lang").map(|c| c.value().to_string()) { + return lang_cookie; + } + + // Check Accept-Language header + if let Some(accept_lang) = headers.get(ACCEPT_LANGUAGE).and_then(|h| h.to_str().ok()) { + // TODO: use accept_language::parse + } + + "en".to_string() + } +} + fn format_time_ago(timestamp: &str) -> String { let Ok(ts) = DateTime::parse_from_rfc3339(timestamp) else { return "unknown".into(); @@ -189,10 +207,23 @@ async fn get_cached_reports(state: &AppState) -> Result, (StatusCode Ok(fresh_reports) } +pub async fn set_lang_handler(Path(lang): Path, jar: CookieJar) -> impl IntoResponse { + let cookie = axum_extra::extract::cookie::Cookie::build(("lang", lang)) + .path("/") + // .max_age(value) + .build(); + + (jar.add(cookie), axum::response::Redirect::to("/")) +} + pub async fn home_handler( State(state): State>, - Query(params): Query, + jar: CookieJar, + headers: axum::http::HeaderMap, + Query(params): Query, ) -> Result { + let lang = Lang::resolve(&jar, &headers); + let raw_reports = get_cached_reports(&state).await?; let mut reports = process_reports(raw_reports); @@ -220,6 +251,7 @@ pub async fn home_handler( }); let mut context = Context::new(); + context.insert("lang", &lang); context.insert("reports", &reports); context.insert("title", &state.app_name); context.insert("current_sort", &sort_field); @@ -227,6 +259,7 @@ pub async fn home_handler( context.insert("show_experimental", &show_experimental); context.insert("current_page", "leaderboard"); context.insert("prefix", ""); + context.insert("lang", &lang); match TEMPLATES.render("index.html", &context) { Ok(html) => Ok(Html(html)), @@ -237,13 +270,15 @@ pub async fn home_handler( pub async fn report_details_handler( State(state): State>, Path(id): Path, + Query(params): Query, ) -> Result { // Check if the report exists in our current cache to avoid API call + let lang = params.lang.unwrap_or_else(|| "en".to_string()); { let cache = state.reports_cache.read().await; if let Some(c) = &*cache { if let Some(report) = c.data.iter().find(|r| r.id == id) { - return render_details(report.clone(), &state).await; + return render_details(report.clone(), &state, &lang).await; } } } @@ -257,12 +292,13 @@ pub async fn report_details_handler( .await .map_err(|e| (StatusCode::NOT_FOUND, format!("Report not found: {}", e)))?; - render_details(report, &state).await + render_details(report, &state, &lang).await } async fn render_details( report: Report, state: &AppState, + lang: &str, ) -> Result, (StatusCode, String)> { let mut context = Context::new(); context.insert("report", &report); @@ -277,6 +313,7 @@ async fn render_details( ); context.insert("current_page", "details"); context.insert("prefix", "../"); + context.insert("lang", lang); match TEMPLATES.render("details.html", &context) { Ok(html) => Ok(Html(html)), @@ -303,7 +340,9 @@ pub struct AnalyticsData { pub async fn analytics_handler( State(state): State>, + Query(params): Query, ) -> Result { + let lang = params.lang.unwrap_or_else(|| "en".to_string()); let raw_reports = get_cached_reports(&state).await?; let reports = process_reports(raw_reports); @@ -421,6 +460,7 @@ pub async fn analytics_handler( context.insert("data", &data); context.insert("current_page", "analytics"); context.insert("prefix", ""); + context.insert("lang", &lang); match TEMPLATES.render("analytics.html", &context) { Ok(html) => Ok(Html(html)), diff --git a/src/main.rs b/src/main.rs index b153369..c670984 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ use axum::{Router, routing::get}; use clap::Parser; +use fluent_templates::{FluentLoader, static_loader}; use lazy_static::lazy_static; use std::{ sync::Arc, @@ -11,7 +12,14 @@ use tokio::sync::RwLock; mod handlers; use handlers::home_handler; -use crate::handlers::{Report, analytics_handler, report_details_handler}; +use crate::handlers::{Report, analytics_handler, report_details_handler, set_lang_handler}; + +static_loader! { + static LOCALES = { + locales: "./locales", + fallback_language: "en", + }; +} lazy_static! { pub static ref TEMPLATES: Tera = { @@ -27,6 +35,7 @@ lazy_static! { ), ]) .unwrap(); + tera.register_function("fluent", FluentLoader::new(&*LOCALES)); tera }; } @@ -76,6 +85,7 @@ async fn main() -> anyhow::Result<()> { .route("/", get(home_handler)) .route("/report/{id}", get(report_details_handler)) .route("/analytics", get(analytics_handler)) + .route("/set-lang/{lang}", get(set_lang_handler)) .with_state(shared_state); let addr = if cli.host { diff --git a/templates/_layout.html b/templates/_layout.html index ecda191..c5cf24b 100644 --- a/templates/_layout.html +++ b/templates/_layout.html @@ -1,5 +1,5 @@ - + @@ -15,8 +15,8 @@ @@ -27,21 +27,31 @@ + + + + + + + + + + @@ -49,7 +59,7 @@
{% block content %}{% endblock %}
-
{{ now() | date(format="%Y") }} - Slimes
+
{{ now() | date(format="%Y") }} - {{ fluent(key="footer-text", lang=lang) }}
@@ -244,6 +244,10 @@ z-index: 10; } +.expand-btn i { + margin-right: 5px; +} + .expand-btn:hover { background: var(--primary-soft); } diff --git a/templates/details.html b/templates/details.html index 83d8a77..0f0d93c 100644 --- a/templates/details.html +++ b/templates/details.html @@ -2,7 +2,7 @@ {% block content %}
@@ -12,7 +12,7 @@ {% if report.slimes["Hostname"] %} {{ report.slimes["Hostname"].0 }} {% else %} - Device {{ report.signature | truncate(length=10) }} + {{ fluent(key="details-device", lang=lang, sig=report.signature | truncate(length=10)) }} {% endif %} @@ -21,22 +21,22 @@
- ID + {{ fluent(key="details-report-id", lang=lang) }} #{{ report.id }}
- VERSION + {{ fluent(key="details-version", lang=lang) }} v{{ report.client_version }}
- MAC + {{ fluent(key="details-mac", lang=lang) }} {{ report.mac_address }}
- REPORTED + {{ fluent(key="details-reported", lang=lang) }} {{ time_ago }}
@@ -45,25 +45,25 @@
{{ score }}
-
CPU Score
+
{{ fluent(key="details-cpu-score", lang=lang) }}
(mt+st)/2
-

Performance Breakdown

+

{{ fluent(key="details-perf-breakdown", lang=lang) }}

- Single-Thread + {{ fluent(key="details-single", lang=lang) }} {{ report.benchmark.single_thread.score }}
- Multi-Thread + {{ fluent(key="details-multi", lang=lang) }} {{ report.benchmark.multi_thread.score }}
- Threads + {{ fluent(key="details-threads", lang=lang) }} {{ report.benchmark.logical_cores }}
diff --git a/templates/homepage.html b/templates/homepage.html index 28fe3fd..b94b253 100644 --- a/templates/homepage.html +++ b/templates/homepage.html @@ -2,64 +2,64 @@ {% block content %}
-

Benchmark Reports

+

{{ fluent(key="home-title", lang=lang) }}

-
- + @@ -68,7 +68,7 @@
@@ -81,13 +81,13 @@ - CPU Score - Threads - RAM - OS - Hostname - Time - Note + {{ fluent(key="table-cpu-score", lang=lang) }} + {{ fluent(key="table-threads", lang=lang) }} + {{ fluent(key="table-ram", lang=lang) }} + {{ fluent(key="table-os", lang=lang) }} + {{ fluent(key="table-hostname", lang=lang) }} + {{ fluent(key="table-time", lang=lang) }} + {{ fluent(key="table-note", lang=lang) }} @@ -114,7 +114,7 @@ {{ report.hostname }} {{ report.time_ago }} {% if report.is_new %} - NEW + {{ fluent(key="badge-new", lang=lang) }} {% endif %} {{ report.signature }}