public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Maximiliano Sandoval <m.sandoval@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH proxmox-i18n v2 2/5] fix strings with wrong format
Date: Wed,  4 Feb 2026 14:48:30 +0100	[thread overview]
Message-ID: <20260204134835.422155-3-m.sandoval@proxmox.com> (raw)
In-Reply-To: <20260204134835.422155-1-m.sandoval@proxmox.com>

Strings where tr! (or gettext() in js) cannot make the substitution at
runtime due to broken formatting (e.g. if msgid contains {0} but msgstr
does not) will remain untranslated.

Where it was not clear how to fix the issue the string is rather marked
as fuzzy so it is re-translated.

After this commit the remaining errors are only in ukr.po, ru.po which
require more consideration.

These were detected with a python script doing basically:

```python
import pathlib
import polib

def is_formatted(entry):
    return (
        "{}" in entry.msgid
        or "{0}" in entry.msgid
        or "{n}" in entry.msgid
        or "{}" in entry.msgid_plural
        or "{0}" in entry.msgid_plural
        or "{n}" in entry.msgid_plural
    )

for path in pathlib.Path().iterdir():
    po = polib.pofile(path)
    for entry in po:
        if (
            entry.occurrences
            and is_formatted(entry)
        ):
            entry.flags.append("rust-format")

    po.save(f"{file.stem}.with-formats.po")
```

which attaches the `rust-format` flag to a string. Then later the new po
files are checked with
```
msgfmt --check $PO_FILE
```

with gettext 0.26. This can be done, for example, with
```sh
for f in *.with-formats.po; do flatpak run --command=msgfmt --filesystem=home org.freedesktop.Platform//25.08 --check $f; done
```

for example.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 ar.po    | 4 ++--
 cs.po    | 6 +++---
 de.po    | 4 +---
 hr.po    | 1 +
 hu.po    | 1 +
 ja.po    | 3 ++-
 ko.po    | 3 ++-
 pl.po    | 1 +
 pt_BR.po | 2 +-
 tr.po    | 1 +
 ukr.po   | 3 ++-
 11 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/ar.po b/ar.po
index 66a34efa..4f51419f 100644
--- a/ar.po
+++ b/ar.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: pve-manager 31813246103b2582162f422dc34d8077eaee1e01\n"
 "Report-Msgid-Bugs-To: <support@proxmox.com>\n"
 "POT-Creation-Date: 2025-12-10 15:47+0100\n"
-"PO-Revision-Date: 2025-07-18 10:53+0200\n"
+"PO-Revision-Date: 2026-02-04 10:38+0100\n"
 "Last-Translator: \n"
 "Language-Team: Arabic <support@proxmox.com>\n"
 "Language: ar\n"
@@ -19107,7 +19107,7 @@ msgid "{0}% ({1} of {2})"
 msgstr "{0} إلى {1} ({2})"
 
 #: proxmox-widget-toolkit/src/Utils.js:1121
-#, javascript-format
+#, javascript-format, fuzzy
 msgid "{0}% of {1}"
 msgstr "{0}٪ من {1}"
 
diff --git a/cs.po b/cs.po
index 728f23aa..2d779ead 100644
--- a/cs.po
+++ b/cs.po
@@ -12,7 +12,7 @@ msgstr ""
 "Project-Id-Version: proxmox-backup 254169f622d891d67de38e8c8c6b9fa8f4af5dc9\n"
 "Report-Msgid-Bugs-To: <support@proxmox.com>\n"
 "POT-Creation-Date: 2025-12-10 15:47+0100\n"
-"PO-Revision-Date: 2025-12-03 08:55+0100\n"
+"PO-Revision-Date: 2026-02-04 10:49+0100\n"
 "Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
 "Language-Team: Czech <support@proxmox.com>\n"
 "Language: cs\n"
@@ -18875,14 +18875,14 @@ msgstr "{0}  let"
 
 #: pve-manager/www/manager6/sdn/NetworkBrowser.js:157
 msgid "{0} {1} on node {2}"
-msgstr "{0} {{1} na uzlu {2})"
+msgstr "{0} ({1} na uzlu {2})"
 
 #: proxmox-datacenter-manager/ui/src/pve/remote_overview.rs:220
 #: proxmox-datacenter-manager/ui/src/pve/remote_overview.rs:236
 #: proxmox-datacenter-manager/ui/src/pve/storage.rs:288
 #: proxmox-datacenter-manager/ui/src/renderer.rs:76
 msgid "{0}% ({1} of {2})"
-msgstr "{0}% {{1} z {2})"
+msgstr "{0}% ({1} z {2})"
 
 #: proxmox-widget-toolkit/src/Utils.js:1121
 #, javascript-format
diff --git a/de.po b/de.po
index 255d712d..3292214a 100644
--- a/de.po
+++ b/de.po
@@ -15716,9 +15716,7 @@ msgstr ""
 #: proxmox-yew-comp/src/apt_repositories.rs:279
 msgid ""
 "The {0}no-subscription{1} repository is not recommended for production use!"
-msgstr ""
-"Das {0}no-subscription Repository ist nicht für die Verwendung in "
-"Produktivsystemen empfohlen!"
+msgstr "Das {0}no-subscription{1} Repository ist nicht für die Verwendung in Produktivsystemen empfohlen!"
 
 #: proxmox-widget-toolkit/src/node/APTRepositories.js:528
 #: proxmox-yew-comp/src/apt_repositories.rs:264
diff --git a/hr.po b/hr.po
index c20c687f..d1f82dda 100644
--- a/hr.po
+++ b/hr.po
@@ -16029,6 +16029,7 @@ msgstr "Enterprise {0}spremište je omogućeno, ali nema aktivne pretplate!"
 #: proxmox-widget-toolkit/src/node/APTRepositories.js:516
 #: proxmox-yew-comp/src/apt_repositories.rs:256
 #: proxmox-yew-comp/src/apt_repositories.rs:279
+#, fuzzy
 msgid ""
 "The {0}no-subscription{1} repository is not recommended for production use!"
 msgstr ""
diff --git a/hu.po b/hu.po
index 4098e8e4..34057044 100644
--- a/hu.po
+++ b/hu.po
@@ -19683,6 +19683,7 @@ msgid "{0} running / {1} physical ({2} total configured)"
 msgstr ""
 
 #: pmg-gui/js/GeneralMailStatistics.js:120
+#, fuzzy
 msgid "{0} seconds"
 msgstr "másodperc"
 
diff --git a/ja.po b/ja.po
index 485b98c8..0ec205a5 100644
--- a/ja.po
+++ b/ja.po
@@ -8542,6 +8542,7 @@ msgid "Match if"
 msgstr "Match if"
 
 #: proxmox-widget-toolkit/src/window/NotificationMatcherEdit.js:473
+#, fuzzy
 msgid "Match severity: {0}"
 msgstr "重要度に一致"
 
@@ -18710,7 +18711,7 @@ msgstr "{1}の {0}"
 
 #: proxmox-datacenter-manager/ui/src/dashboard/node_status_panel.rs:125
 msgid "{0} of {1} nodes are offline"
-msgstr "1}の {0} ノードがオフライン"
+msgstr "{1}の {0} ノードがオフライン"
 
 #. TRANSLATORS: For example "resource on Remote 'HAL 9000'"
 #: proxmox-datacenter-manager/ui/src/dashboard/top_entities.rs:249
diff --git a/ko.po b/ko.po
index e494cabb..ac605f2a 100644
--- a/ko.po
+++ b/ko.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: proxmox translations\n"
 "Report-Msgid-Bugs-To: <support@proxmox.com>\n"
 "POT-Creation-Date: 2025-12-19 10:53+0100\n"
-"PO-Revision-Date: 2025-12-16 23:20+0900\n"
+"PO-Revision-Date: 2026-02-04 10:52+0100\n"
 "Last-Translator: angrystar170 <angrystar170@gmail.com>\n"
 "Language-Team: Korean <support@proxmox.com>\n"
 "Language: ko_KR\n"
@@ -12077,6 +12077,7 @@ msgid "Recovery Keys"
 msgstr "복구 키"
 
 #: proxmox-yew-comp/src/tfa/tfa_add_recovery.rs:119
+#, fuzzy
 msgid "Recovery Keys for user '{}'"
 msgstr "복구 키"
 
diff --git a/pl.po b/pl.po
index 3f195714..5fced118 100644
--- a/pl.po
+++ b/pl.po
@@ -10451,6 +10451,7 @@ msgid "On-site"
 msgstr "na miejscu"
 
 #: proxmox-yew-comp/src/apt_package_manager.rs:481
+#, fuzzy
 msgid "One item"
 msgid_plural "{} items"
 msgstr[0] "Jeden element"
diff --git a/pt_BR.po b/pt_BR.po
index a61ad1cc..e9622c24 100644
--- a/pt_BR.po
+++ b/pt_BR.po
@@ -6700,7 +6700,7 @@ msgstr "Membro do grupo"
 
 #: pmg-gui/js/LDAPConfig.js:449
 msgid "Groups of '{0}'"
-msgstr "Grupos de '{0]'"
+msgstr "Grupos de '{0}'"
 
 #: pve-manager/www/manager6/form/IPRefSelector.js:72
 #: pve-manager/www/manager6/grid/Replication.js:298
diff --git a/tr.po b/tr.po
index 3a5dcef4..e33e717a 100644
--- a/tr.po
+++ b/tr.po
@@ -14446,6 +14446,7 @@ msgid "Shutdown timeout"
 msgstr "Zaman aşımı"
 
 #: pve-manager/www/manager6/qemu/Config.js:167
+#, fuzzy
 msgid "Shutdown, apply pending changes and reboot {0}"
 msgstr "Kapat, bekleyen değişiklikleri uygula ve yeniden başlat"
 
diff --git a/ukr.po b/ukr.po
index 0d26066d..ffbd7279 100644
--- a/ukr.po
+++ b/ukr.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: proxmox translations\n"
 "Report-Msgid-Bugs-To: <support@proxmox.com>\n"
 "POT-Creation-Date: 2025-12-10 15:47+0100\n"
-"PO-Revision-Date: 2025-09-19 09:44+0200\n"
+"PO-Revision-Date: 2026-02-04 11:09+0100\n"
 "Last-Translator: Sviatoslav Brylenko <s.brylenko@proxmox.com>\n"
 "Language-Team: Ukrainian <support@proxmox.com>\n"
 "Language: uk\n"
@@ -4785,6 +4785,7 @@ msgstr "EVPN зона не має зконфігурованого VRF VNI!"
 #: proxmox-datacenter-manager/ui/src/sdn/evpn/remote_tree.rs:280
 #: proxmox-datacenter-manager/ui/src/sdn/evpn/vrf_tree.rs:160
 #: proxmox-datacenter-manager/ui/src/sdn/evpn/vrf_tree.rs:219
+#, fuzzy
 msgid "EVPN Zone {} has no VRF VNI"
 msgstr "EVPN зона не має VRF VNI"
 
-- 
2.47.3





  parent reply	other threads:[~2026-02-04 13:48 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-04 13:48 [PATCH proxmox-i18n v2 0/5] Fix formats of translated strings Maximiliano Sandoval
2026-02-04 13:48 ` [PATCH proxmox-i18n v2 1/5] ja: remove second plural form Maximiliano Sandoval
2026-02-04 13:48 ` Maximiliano Sandoval [this message]
2026-02-04 13:48 ` [PATCH proxmox-i18n v2 3/5] make: remove javascript-format flag from extracted strings Maximiliano Sandoval
2026-02-04 13:48 ` [PATCH proxmox-i18n v2 4/5] run make do_update Maximiliano Sandoval
2026-02-04 13:48 ` [PATCH proxmox-i18n v2 5/5] make: add check target Maximiliano Sandoval
2026-02-04 17:37 ` applied: [PATCH proxmox-i18n v2 0/5] Fix formats of translated strings Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260204134835.422155-3-m.sandoval@proxmox.com \
    --to=m.sandoval@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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