public inbox for pdm-devel@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

* Re: [pdm-devel] [PATCH datacenter-manager] ui: use explicit parameter indices in tr macros
  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
  1 sibling, 0 replies; 3+ messages in thread
From: Lukas Wagner @ 2025-12-01 16:36 UTC (permalink / raw)
  To: Proxmox Datacenter Manager development discussion

On Mon Dec 1, 2025 at 5:06 PM CET, Lukas Wagner wrote:
> 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"
>

I just realized, the message is only shown if there *multiple*
parameters in the string (should have read the error more carefully, I
guess). If wanted, can send a new patch only fixing the instances where
there are indeed multiple params, so to not break any already existing
translations for the other strings.


_______________________________________________
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

* [pdm-devel] superseded: [PATCH datacenter-manager] ui: use explicit parameter indices in tr macros
  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 ` Lukas Wagner
  1 sibling, 0 replies; 3+ messages in thread
From: Lukas Wagner @ 2025-12-01 16:47 UTC (permalink / raw)
  To: Proxmox Datacenter Manager development discussion

On Mon Dec 1, 2025 at 5:06 PM CET, Lukas Wagner wrote:
> 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>

superseded by v2:

https://lore.proxmox.com/all/20251201164600.413879-1-l.wagner@proxmox.com/T/#u


_______________________________________________
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal