* [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