all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pdm-devel] [PATCH datacenter-manager] ui: use explicit parameter indices in tr macros
@ 2025-12-01 16:06 Lukas Wagner
  2025-12-01 16:36 ` Lukas Wagner
  2025-12-01 16:47 ` [pdm-devel] superseded: " Lukas Wagner
  0 siblings, 2 replies; 3+ messages in thread
From: Lukas Wagner @ 2025-12-01 16:06 UTC (permalink / raw)
  To: pdm-devel

The order of parameters can change in translations, so it is important
to use explicit indexing. The gettext runtime shows warnings in the
browser console for these:

"... multiple non-indexed, non-named arguments - order is implicit"

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 ui/src/remotes/firewall/columns.rs    |  2 +-
 ui/src/remotes/firewall/ui_helpers.rs |  6 +++---
 ui/src/sdn/evpn/add_zone.rs           |  2 +-
 ui/src/sdn/evpn/remote_tree.rs        | 23 +++++++++++++----------
 ui/src/sdn/evpn/vrf_tree.rs           | 22 +++++++++++-----------
 5 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/ui/src/remotes/firewall/columns.rs b/ui/src/remotes/firewall/columns.rs
index 454fd814..71c233c9 100644
--- a/ui/src/remotes/firewall/columns.rs
+++ b/ui/src/remotes/firewall/columns.rs
@@ -42,7 +42,7 @@ fn create_name_column(
         .render(move |entry: &TreeEntry| {
             let (icon, text) = match entry {
                 TreeEntry::Root if loading => {
-                    let loading_text = tr!("Loading {}...", scope.loading_description());
+                    let loading_text = tr!("Loading {0}...", scope.loading_description());
                     (
                         Container::from_tag("i").class("pwt-loading-icon"),
                         loading_text,
diff --git a/ui/src/remotes/firewall/ui_helpers.rs b/ui/src/remotes/firewall/ui_helpers.rs
index 741064d8..d251797d 100644
--- a/ui/src/remotes/firewall/ui_helpers.rs
+++ b/ui/src/remotes/firewall/ui_helpers.rs
@@ -78,7 +78,7 @@ impl PanelConfig {
         let mut rules = proxmox_yew_comp::FirewallRules::cluster(remote.to_string());
         rules.reload_token = reload_token;
         Self {
-            title: create_panel_title("list", tr!("Cluster Firewall Rules - {}", remote)),
+            title: create_panel_title("list", tr!("Cluster Firewall Rules - {0}", remote)),
             key: format!("cluster-{}", remote),
             content: rules.into(),
             title_prefix: None,
@@ -89,7 +89,7 @@ impl PanelConfig {
         let mut rules = proxmox_yew_comp::FirewallRules::node(remote.to_string(), node.to_string());
         rules.reload_token = reload_token;
         Self {
-            title: create_panel_title("list", tr!("Node Firewall Rules - {}/{}", remote, node)),
+            title: create_panel_title("list", tr!("Node Firewall Rules - {0}/{1}", remote, node)),
             key: format!("node-{}-{}", remote, node),
             content: rules.into(),
             title_prefix: None,
@@ -115,7 +115,7 @@ impl PanelConfig {
             title: create_panel_title(
                 "list",
                 tr!(
-                    "Guest Firewall Rules - {}/{}/{} {}",
+                    "Guest Firewall Rules - {0}/{1}/{2} {3}",
                     remote,
                     node,
                     vmtype.to_uppercase(),
diff --git a/ui/src/sdn/evpn/add_zone.rs b/ui/src/sdn/evpn/add_zone.rs
index 7685511c..23bf7da3 100644
--- a/ui/src/sdn/evpn/add_zone.rs
+++ b/ui/src/sdn/evpn/add_zone.rs
@@ -230,7 +230,7 @@ impl ManagedField for ControllerTableComponent {
                     controller: controller.controller.controller.clone(),
                     asn: controller.controller.asn.ok_or_else(|| {
                         format_err!(tr!(
-                            "EVPN controller {} has no ASN",
+                            "EVPN controller {0} has no ASN",
                             controller.controller.controller
                         ))
                     })?,
diff --git a/ui/src/sdn/evpn/remote_tree.rs b/ui/src/sdn/evpn/remote_tree.rs
index 17999174..e5570cf9 100644
--- a/ui/src/sdn/evpn/remote_tree.rs
+++ b/ui/src/sdn/evpn/remote_tree.rs
@@ -159,7 +159,7 @@ fn zones_to_remote_view(
 
         let zone_controller_id = zone_data.controller.as_ref().ok_or_else(|| {
             anyhow!(tr!(
-                "EVPN zone {} has no controller defined!",
+                "EVPN zone {0} has no controller defined!",
                 zone_data.zone
             ))
         })?;
@@ -172,7 +172,7 @@ fn zones_to_remote_view(
             })
             .ok_or_else(|| {
                 anyhow!(tr!(
-                    "Could not find Controller for EVPN zone {}",
+                    "Could not find Controller for EVPN zone {0}",
                     zone_data.zone
                 ))
             })?;
@@ -180,12 +180,15 @@ fn zones_to_remote_view(
         let route_target = EvpnRouteTarget {
             asn: controller.controller.asn.ok_or_else(|| {
                 anyhow!(tr!(
-                    "EVPN controller {} has no ASN defined!",
+                    "EVPN controller {0} has no ASN defined!",
                     controller.controller.controller
                 ))
             })?,
             vni: zone.zone.vrf_vxlan.ok_or_else(|| {
-                anyhow!(tr!("EVPN Zone {} has no VXLAN ID defined!", zone_data.zone))
+                anyhow!(tr!(
+                    "EVPN Zone {0} has no VXLAN ID defined!",
+                    zone_data.zone
+                ))
             })?,
         };
 
@@ -231,7 +234,7 @@ fn zones_to_remote_view(
         let vnet_zone_id = vnet_data
             .zone
             .as_ref()
-            .ok_or_else(|| anyhow!(tr!("VNet {} has no zone defined!", vnet_data.vnet)))?;
+            .ok_or_else(|| anyhow!(tr!("VNet {0} has no zone defined!", vnet_data.vnet)))?;
 
         let Some(zone) = zones
             .iter()
@@ -243,7 +246,7 @@ fn zones_to_remote_view(
 
         let zone_controller_id = zone.zone.controller.as_ref().ok_or_else(|| {
             anyhow!(tr!(
-                "EVPN zone {} has no controller defined!",
+                "EVPN zone {0} has no controller defined!",
                 &zone.zone.zone
             ))
         })?;
@@ -256,14 +259,14 @@ fn zones_to_remote_view(
             })
             .ok_or_else(|| {
                 anyhow!(tr!(
-                    "Controller of EVPN zone {} does not exist",
+                    "Controller of EVPN zone {0} does not exist",
                     zone.zone.zone
                 ))
             })?;
 
         let controller_asn = controller.controller.asn.ok_or_else(|| {
             anyhow!(tr!(
-                "EVPN controller {} has no ASN defined!",
+                "EVPN controller {0} has no ASN defined!",
                 controller.controller.controller
             ))
         })?;
@@ -273,14 +276,14 @@ fn zones_to_remote_view(
             vni: zone
                 .zone
                 .vrf_vxlan
-                .ok_or_else(|| anyhow!(tr!("EVPN Zone {} has no VRF VNI", zone.zone.zone)))?,
+                .ok_or_else(|| anyhow!(tr!("EVPN Zone {0} has no VRF VNI", zone.zone.zone)))?,
         };
 
         let vnet_target = EvpnRouteTarget {
             asn: controller_asn,
             vni: vnet_data
                 .tag
-                .ok_or_else(|| anyhow!(tr!("VNet {} has no VNI", vnet_data.vnet)))?,
+                .ok_or_else(|| anyhow!(tr!("VNet {0} has no VNI", vnet_data.vnet)))?,
         };
 
         for mut remote_entry in root.children_mut() {
diff --git a/ui/src/sdn/evpn/vrf_tree.rs b/ui/src/sdn/evpn/vrf_tree.rs
index 0de41454..e839a91e 100644
--- a/ui/src/sdn/evpn/vrf_tree.rs
+++ b/ui/src/sdn/evpn/vrf_tree.rs
@@ -123,7 +123,7 @@ fn zones_to_vrf_view(
 
         let zone_controller_id = zone_data.controller.as_ref().ok_or_else(|| {
             anyhow!(tr!(
-                "EVPN zone {} has no controller defined!",
+                "EVPN zone {0} has no controller defined!",
                 &zone_data.zone
             ))
         })?;
@@ -136,14 +136,14 @@ fn zones_to_vrf_view(
             })
             .ok_or_else(|| {
                 anyhow!(tr!(
-                    "Controller of EVPN zone {} does not exist",
+                    "Controller of EVPN zone {0} does not exist",
                     zone_data.zone
                 ))
             })?;
 
         let controller_asn = controller.controller.asn.ok_or_else(|| {
             anyhow!(tr!(
-                "EVPN controller {} has no ASN defined!",
+                "EVPN controller {0} has no ASN defined!",
                 controller.controller.controller
             ))
         })?;
@@ -153,7 +153,7 @@ fn zones_to_vrf_view(
             vni: zone
                 .zone
                 .vrf_vxlan
-                .ok_or_else(|| anyhow!(tr!("EVPN Zone {} has no VRF VNI", zone_data.zone)))?,
+                .ok_or_else(|| anyhow!(tr!("EVPN Zone {0} has no VRF VNI", zone_data.zone)))?,
         };
 
         if !existing_vrfs.insert(route_target) {
@@ -170,7 +170,7 @@ fn zones_to_vrf_view(
         let vnet_zone_id = vnet_data
             .zone
             .as_ref()
-            .ok_or_else(|| anyhow!(tr!("VNet {} has no zone defined!", vnet_data.vnet)))?;
+            .ok_or_else(|| anyhow!(tr!("VNet {0} has no zone defined!", vnet_data.vnet)))?;
 
         let Some(zone) = zones
             .iter()
@@ -182,7 +182,7 @@ fn zones_to_vrf_view(
 
         let zone_controller_id = zone.zone.controller.as_ref().ok_or_else(|| {
             anyhow!(tr!(
-                "EVPN zone {} has no controller defined!",
+                "EVPN zone {0} has no controller defined!",
                 &zone.zone.zone
             ))
         })?;
@@ -195,14 +195,14 @@ fn zones_to_vrf_view(
             })
             .ok_or_else(|| {
                 anyhow!(tr!(
-                    "Controller of EVPN zone {} does not exist",
+                    "Controller of EVPN zone {0} does not exist",
                     zone.zone.zone
                 ))
             })?;
 
         let controller_asn = controller.controller.asn.ok_or_else(|| {
             anyhow!(tr!(
-                "EVPN controller {} has no ASN defined!",
+                "EVPN controller {0} has no ASN defined!",
                 controller.controller.controller
             ))
         })?;
@@ -212,14 +212,14 @@ fn zones_to_vrf_view(
             vni: zone
                 .zone
                 .vrf_vxlan
-                .ok_or_else(|| anyhow!(tr!("EVPN Zone {} has no VRF VNI", zone.zone.zone)))?,
+                .ok_or_else(|| anyhow!(tr!("EVPN Zone {0} has no VRF VNI", zone.zone.zone)))?,
         };
 
         let vnet_target = EvpnRouteTarget {
             asn: controller_asn,
             vni: vnet_data
                 .tag
-                .ok_or_else(|| anyhow!(tr!("VNet {} has no VNI", vnet_data.vnet)))?,
+                .ok_or_else(|| anyhow!(tr!("VNet {0} has no VNI", vnet_data.vnet)))?,
         };
 
         for mut vrf_entry in root.children_mut() {
@@ -249,7 +249,7 @@ fn zones_to_vrf_view(
 
                 let vnet_zone =
                     vnet.vnet.zone.as_ref().ok_or_else(|| {
-                        anyhow!(tr!("VNet {} has no zone defined!", vnet.vnet.vnet))
+                        anyhow!(tr!("VNet {0} has no zone defined!", vnet.vnet.vnet))
                     })?;
 
                 fdb_entry.append(VrfTreeEntry::Remote(RemoteData {
-- 
2.47.3



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-12-01 16:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-01 16:06 [pdm-devel] [PATCH datacenter-manager] ui: use explicit parameter indices in tr macros Lukas Wagner
2025-12-01 16:36 ` Lukas Wagner
2025-12-01 16:47 ` [pdm-devel] superseded: " Lukas Wagner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal