[pbs-devel] [PATCH proxmox-backup v2] fix #3103. node config: allow to configure default UI language
Matthias Heiserer
m.heiserer at proxmox.com
Mon Jan 24 11:09:51 CET 2022
This language is only used if none is set in the cookies.
Signed-off-by: Matthias Heiserer <m.heiserer at proxmox.com>
---
Changes from v1:
Adhere to max length
Remove trailing whitespace
Use enum to store available translations
Add language name to enum variants
Rename chinese and portugese to same case as in i18 files
Check for existance of translation file when using default language
src/bin/proxmox-backup-proxy.rs | 9 ++++
src/config/node.rs | 75 ++++++++++++++++++++++++++++++++-
2 files changed, 82 insertions(+), 2 deletions(-)
diff --git a/src/bin/proxmox-backup-proxy.rs b/src/bin/proxmox-backup-proxy.rs
index 523966cf..382d4507 100644
--- a/src/bin/proxmox-backup-proxy.rs
+++ b/src/bin/proxmox-backup-proxy.rs
@@ -168,6 +168,15 @@ async fn get_index_future(
lang = language;
}
}
+ if lang.is_empty() {
+ if let Ok((config, _)) = proxmox_backup::config::node::config() {
+ if let Some(default) = config.default_lang {
+ if Path::new(&format!("/usr/share/pbs-i18n/pbs-lang-{}.js", default)).exists() {
+ lang = default;
+ }
+ }
+ }
+ }
let data = json!({
"NodeName": nodename,
diff --git a/src/config/node.rs b/src/config/node.rs
index 40d7b220..a26f5974 100644
--- a/src/config/node.rs
+++ b/src/config/node.rs
@@ -57,6 +57,69 @@ pub struct AcmeConfig {
account: AcmeAccountName,
}
+/// All available languages in Proxmox. Taken from proxmox-i18n repository.
+/// pt_BR, zh_CN, and zh_TW use the same case in the translation files.
+// TODO: auto-generate from available translations
+#[api]
+#[allow(non_camel_case_types)]
+#[derive(Serialize, Deserialize)]
+#[serde(rename_all="lowercase")]
+pub enum Translation {
+ /// Arabic
+ Ar,
+ /// Catalan
+ Ca,
+ /// Danish
+ Da,
+ /// German
+ De,
+ /// Spanish
+ Es,
+ /// Euskera
+ Eu,
+ /// Persian (Farsi)
+ Fa,
+ /// French
+ Fr,
+ /// Galician
+ Gl,
+ /// Hebrew
+ He,
+ /// Hungarian
+ Hu,
+ /// Italian
+ It,
+ /// Japanese
+ Ja,
+ /// Korean
+ Kr,
+ /// Norwegian (Bokmal)
+ Nb,
+ /// Dutch
+ Nl,
+ /// Norwegian (Nynorsk)
+ Nn,
+ /// Polish
+ Pl,
+ /// Portuguese (Brazil)
+ #[serde(rename="pt_BR")]
+ Pt_Br,
+ /// Russian
+ Ru,
+ /// Slovenian
+ Sl,
+ /// Swedish
+ Sv,
+ /// Turkish
+ Tr,
+ /// Chinese (simplified)
+ #[serde(rename="zh_CN")]
+ Zh_Cn,
+ /// Chinese (traditional)
+ #[serde(rename="zh_TW")]
+ Zh_Tw,
+}
+
#[api(
properties: {
acme: {
@@ -100,6 +163,10 @@ pub struct AcmeConfig {
schema: OPENSSL_CIPHERS_TLS_1_2_SCHEMA,
optional: true,
},
+ "default-lang" : {
+ schema: Translation::API_SCHEMA,
+ optional: true,
+ }
},
)]
#[derive(Deserialize, Serialize, Updater)]
@@ -127,17 +194,21 @@ pub struct NodeConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub http_proxy: Option<String>,
-
+
#[serde(skip_serializing_if = "Option::is_none")]
pub email_from: Option<String>,
/// List of TLS ciphers for TLS 1.3 that will be used by the proxy. (Proxy has to be restarted for changes to take effect)
#[serde(skip_serializing_if = "Option::is_none", rename="ciphers-tls-1.3")]
pub ciphers_tls_1_3: Option<String>,
-
+
/// List of TLS ciphers for TLS <= 1.2 that will be used by the proxy. (Proxy has to be restarted for changes to take effect)
#[serde(skip_serializing_if = "Option::is_none", rename="ciphers-tls-1.2")]
pub ciphers_tls_1_2: Option<String>,
+
+ /// Default language used in the GUI
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub default_lang: Option<String>,
}
impl NodeConfig {
--
2.30.2
More information about the pbs-devel
mailing list