From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 7ECA01FF0AD for ; Sat, 22 Aug 2026 15:22:41 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id BA566215C4; Sat, 22 Aug 2026 15:22:38 +0200 (CEST) MIME-Version: 1.0 Date: Sat, 22 Aug 2026 13:22:21 +0000 Subject: Re: [PATCH v4 i18n 1/1] add pgettext() and npgettext() support for context-aware translations In-Reply-To: References: <20260610075947.1173141-1-k.chai@proxmox.com> <20260610075947.1173141-2-k.chai@proxmox.com> X-Mailer: BlueMind-MailApp-v5 Message-ID: From: Kefu Chai To: Maximiliano Sandoval , Thomas Lamprecht X-Bm-Parsing-Options: encoded-parts X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1787404924142 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.266 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy HTML_MESSAGE 0.001 HTML included in message KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) KAM_SHORT 0.001 Use of a URL Shortener for very short URL RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: ERAGKMSJCEYXFQEGYBRBXRWMOPNNBJOX X-Message-ID-Hash: ERAGKMSJCEYXFQEGYBRBXRWMOPNNBJOX X-MailFrom: k.chai@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=utf-8 X-Content-Filtered-By: Mailman/MimeDel 3.3.10 CC: pve-devel@lists.proxmox.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: SGkgVGhvbWFzLA0KY291bGQgeW91IHBsZWFzZSBoZWxwIHJldmlldyB0aGlzIHBhdGNoPw0KT24g V2VkbmVzZGF5LCAwNy8yOS8yMDI2LCAyMTo1MCwgTWF4aW1pbGlhbm8gU2FuZG92YWwgPG0uc2Fu ZG92YWxAcHJveG1veC5jb20+IHdyb3RlOg0KDQpGcm9tIDogTWF4aW1pbGlhbm8gU2FuZG92YWwg PG0uc2FuZG92YWxAcHJveG1veC5jb20+DQpTZW50IG9uIDogV2VkbmVzZGF5LCAwNy8yOS8yMDI2 LCAyMTo1MA0KVG8gOiBLZWZ1IENoYWkgPGsuY2hhaUBwcm94bW94LmNvbT4NCkNjIDogcHZlLWRl dmVsQGxpc3RzLnByb3htb3guY29tDQpTdWJqZWN0IDogUmU6IFtQQVRDSCB2NCBpMThuIDEvMV0g YWRkIHBnZXR0ZXh0KCkgYW5kIG5wZ2V0dGV4dCgpIHN1cHBvcnQgZm9yIGNvbnRleHQtYXdhcmUg dHJhbnNsYXRpb25zDQpLZWZ1IENoYWkgPGsuY2hhaUBwcm94bW94LmNvbT4gd3JpdGVzOg0KDQoN CiBDb250ZXh0LWF3YXJlIHRyYW5zbGF0aW9ucyAobXNnY3R4dCBpbiBnZXR0ZXh0KSBkaXN0aW5n dWlzaCBpZGVudGljYWwNCiBtc2dpZHMgdGhhdCBtZWFuIGRpZmZlcmVudCB0aGluZ3MgaW4gZGlm ZmVyZW50IHBhcnRzIG9mIHRoZSBVSSwgZm9yDQogZXhhbXBsZSAiTW9uaXRvciIgZm9yIENlcGgg dmVyc3VzIFFFTVUuDQoNCiBUbyBrZWVwIG1zZ2lkK21zZ2N0eHQgcGFpcnMgZGlzdGluY3QgaW4g dGhlIGdlbmVyYXRlZCBKUyBjYXRhbG9nLA0KIHBvMmpzLnBsIFtodHRwOi8vcG8yanMucGwvXSBu b3cgaGFzaGVzIHRoZSB0d28gdG9nZXRoZXIgd2l0aCB0aGUgc3RhbmRhcmQgZ2V0dGV4dCBFT1QN CiBzZXBhcmF0b3IgKCJceDA0IikgYmV0d2VlbiB0aGVtLiBNZXNzYWdlcyB3aXRob3V0IGEgY29u dGV4dCBmYWxsDQogdGhyb3VnaCB0byB0aGUgZXhpc3RpbmcgZm52MzFhKG1zZ2lkKS4gTG9jYWxl OjpQTzo6bG9hZF9maWxlX2FzaGFzaCgpDQogY29uZmxhdGVzIHJvd3MgdGhhdCBzaGFyZSB0aGUg c2FtZSBtc2dpZCwgc28gc3dpdGNoIHRvDQogbG9hZF9maWxlX2FzYXJyYXkoKSB0byBwcmVzZXJ2 ZSB0aGUgZGlzdGluY3QgZW50cmllcy4gVGhlIGdlbmVyYXRlZA0KIGNhdGFsb2cgZ2FpbnMgSlMg cGdldHRleHQoKSBhbmQgbnBnZXR0ZXh0KCkgaGVscGVycyB0aGF0IHBlcmZvcm0gdGhlDQogc2Ft ZSBsb29rdXAgYXQgcnVudGltZS4NCg0KIFRoZSBNYWtlZmlsZSBjaGFuZ2UgYWRkcyAtLWtleXdv cmQ9bnBnZXR0ZXh0OjFjLDIsMyB0byB4Z2V0dGV4dC4NCiBwZ2V0dGV4dCBpcyBpbiB4Z2V0dGV4 dCdzIGRlZmF1bHQgSmF2YVNjcmlwdCBrZXl3b3JkIGxpc3QsIGJ1dA0KIG5wZ2V0dGV4dCBpcyBu b3Q6IGl0IHdhcyBvbWl0dGVkIGZyb20gdGhlIGRlZmF1bHRzIGluIGdldHRleHQgMC4xOC4zDQog KDIwMTMpIHdoZW4gSmF2YVNjcmlwdCBzdXBwb3J0IGZpcnN0IGxhbmRlZCwgYW5kIG5ldmVyIGFk ZGVkIHNpbmNlLg0KIFdpdGhvdXQgdGhlIGV4cGxpY2l0IGZsYWcsIHhnZXR0ZXh0IHNpbGVudGx5 IGRyb3BzIG5wZ2V0dGV4dCgpIGNhbGxzDQogZHVyaW5nICdtYWtlIHVwZGF0ZV9wb3QnLg0KDQog U2VlICJ4Z2V0dGV4dCBJbnZvY2F0aW9uIiBpbiB0aGUgR05VIGdldHRleHQgbWFudWFsOg0KIGh0 dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9tYW51YWwvaHRtbF9ub2RlL3hnZXR0 ZXh0LUludm9jYXRpb24uaHRtbA0KDQogU2lnbmVkLW9mZi1ieTogS2VmdSBDaGFpIDxrLmNoYWlA cHJveG1veC5jb20+DQogLS0tDQogwqBNYWtlZmlsZSB8IMKgMSArDQogwqBwbzJqcy5wbCBbaHR0 cDovL3BvMmpzLnBsL10gfCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLQ0KIMKgMiBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCsp LCA5IGRlbGV0aW9ucygtKQ0KDQogZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUNCiBp bmRleCAxNmFhYjMyLi5lMWQ5NjMzIDEwMDY0NA0KIC0tLSBhL01ha2VmaWxlDQogKysrIGIvTWFr ZWZpbGUNCiBAQCAtMTU1LDYgKzE1NSw3IEBAIGRlZmluZSBwb3R1cGRhdGUNCiDCoAkgwqAtLXBh Y2thZ2UtdmVyc2lvbj0iJChzaGVsbCBjZCAkKDIpO2dpdCByZXYtcGFyc2UgSEVBRCkiIFwNCiDC oAkgwqAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iPHN1cHBvcnRAcHJveG1veC5jb20+IiBcDQogwqAJ IMKgLS1jb3B5cmlnaHQtaG9sZGVyPSJDb3B5cmlnaHQgKEMpIFByb3htb3ggU2VydmVyIFNvbHV0 aW9ucyBHbWJIIDxzdXBwb3J0QHByb3htb3guY29tPiAmIHRoZSB0cmFuc2xhdGlvbiBjb250cmli dXRvcnMuIiBcDQogKwkgwqAtLWtleXdvcmQ9bnBnZXR0ZXh0OjFjLDIsMyBcDQogwqAJIMKgLS1v dXRwdXQ9IiQoMSkiLnBvdA0KIMKgZW5kZWYNCiDCoA0KIGRpZmYgLS1naXQgYS9wbzJqcy5wbCBb aHR0cDovL3BvMmpzLnBsL10gYi9wbzJqcy5wbCBbaHR0cDovL3BvMmpzLnBsL10NCiBpbmRleCAz MTZjMGJkLi40YjdiMDQ0IDEwMDc1NQ0KIC0tLSBhL3BvMmpzLnBsIFtodHRwOi8vcG8yanMucGwv XQ0KICsrKyBiL3BvMmpzLnBsIFtodHRwOi8vcG8yanMucGwvXQ0KIEBAIC04LDEwICs4LDYgQEAg dXNlIEdldG9wdDo6TG9uZzsNCiDCoHVzZSBKU09OOw0KIMKgdXNlIExvY2FsZTo6UE87DQogwqAN CiAtIyBjdXJyZW50IGxpbWl0czoNCiAtIyAtIHdlIGRvIG5vdCBzdXBwb3J0IHBsdXJhbC4gZm9y bXMNCiAtIyAtIG5vIG1lc3NhZ2UgY29udGVudCBzdXBwb3J0DQogLQ0KIMKgbXkgJG9wdGlvbnMg PSB7fTsNCiDCoEdldE9wdGlvbnMoJG9wdGlvbnMsICd0PXMnLCAnbz1zJywgJ3Y9cycpIG9yIGRp ZSAidW5hYmxlIHRvIHBhcnNlIG9wdGlvbnNcbiI7DQogwqANCiBAQCAtMzQsNiArMzAsMTUgQEAg c3ViIGZudjMxYSB7DQogwqAgwqAgwqByZXR1cm4gJGh2YWwgJiAweDdmZmZmZmZmOw0KIMKgfQ0K IMKgDQogKyMgSGFzaCBmdW5jdGlvbiBmb3IgbWVzc2FnZXMgd2l0aCBjb250ZXh0DQogK3N1YiBm bnYzMWFfY3R4dCB7DQogKyDCoCDCoG15ICgkbXNnY3R4dCwgJG1zZ2lkKSA9IEBfOw0KICsgwqAg wqByZXR1cm4gZm52MzFhKCRtc2dpZCkgaWYgIWxlbmd0aCgkbXNnY3R4dCk7IMKgIyBFbXB0eSBj b250ZXh0ID0gbm8gY29udGV4dA0KICsgwqAgwqAjIFVzZSBFT1QgY2hhcmFjdGVyICgweDA0KSBh cyBzZXBhcmF0b3IsIHN0YW5kYXJkIGluIGdldHRleHQNCiArIMKgIMKgbXkgJGNvbWJpbmVkID0g JG1zZ2N0eHQgLiAiXHgwNCIgLiAkbXNnaWQ7DQogKyDCoCDCoHJldHVybiBmbnYzMWEoJGNvbWJp bmVkKTsNCiArfQ0KICsNCiDCoG15ICRjYXRhbG9nID0ge307DQogwqBteSAkcGx1cmFsc19jYXRh bG9nID0ge307DQogwqANCiBAQCAtNDEsMTEgKzQ2LDIwIEBAIG15ICRucGx1cmFscyA9IDI7DQog wqBteSAkcGx1cmFsX2Zvcm1zID0gIm4hPTEiOw0KIMKgDQogwqBmb3JlYWNoIG15ICRmaWxlbmFt ZSAoQEFSR1YpIHsNCiAtIMKgIMKgbXkgJGhyZWYgPSBMb2NhbGU6OlBPLT5sb2FkX2ZpbGVfYXNo YXNoKCRmaWxlbmFtZSkNCiArIMKgIMKgbXkgJGFyZWYgPSBMb2NhbGU6OlBPLT5sb2FkX2ZpbGVf YXNhcnJheSgkZmlsZW5hbWUpDQogwqAgwqAgwqAgwqAgwqB8fCBkaWUgInVuYWJsZSB0byBsb2Fk ICckZmlsZW5hbWUnXG4iOw0KIMKgDQogwqAgwqAgwqBteSAkY2hhcnNldDsNCiAtIMKgIMKgbXkg JGhwbyA9ICRocmVmLT57JyIiJ30gfHwgZGllICJubyBoZWFkZXIiOw0KICsgwqAgwqAjIEZpbmQg aGVhZGVyIGVudHJ5IChtc2dpZCAiIikNCiArIMKgIMKgbXkgJGhwbzsNCiArIMKgIMKgZm9yZWFj aCBteSAkcG8gKEAkYXJlZikgew0KICsgwqAgwqAgwqAgwqBpZiAoJHBvLT5tc2dpZCBlcSAnIiIn KSB7DQogKyDCoCDCoCDCoCDCoCDCoCDCoCRocG8gPSAkcG87DQogKyDCoCDCoCDCoCDCoCDCoCDC oGxhc3Q7DQogKyDCoCDCoCDCoCDCoH0NCiArIMKgIMKgfQ0KICsgwqAgwqBkaWUgIm5vIGhlYWRl ciIgaWYgISRocG87DQogKw0KIMKgIMKgIMKgbXkgJGhlYWRlciA9ICRocG8tPmRlcXVvdGUoJGhw by0+bXNnc3RyKTsNCiDCoCDCoCDCoGlmICgkaGVhZGVyID1+IG18XkNvbnRlbnQtVHlwZTpccyt0 ZXh0L3BsYWluO1xzK2NoYXJzZXQ9KFxTKykkfGltKSB7DQogwqAgwqAgwqAgwqAgwqAkY2hhcnNl dCA9ICQxOw0KIEBAIC01OCw4ICs3Miw3IEBAIGZvcmVhY2ggbXkgJGZpbGVuYW1lIChAQVJHVikg ew0KIMKgCSRwbHVyYWxfZm9ybXMgPSAkMjsNCiDCoCDCoCDCoH0NCiDCoA0KIC0gwqAgwqBmb3Jl YWNoIG15ICRrIChrZXlzICUkaHJlZikgew0KIC0gwqAgwqAgwqAgwqBteSAkcG8gPSAkaHJlZi0+ eyRrfTsNCiArIMKgIMKgZm9yZWFjaCBteSAkcG8gKEAkYXJlZikgew0KIMKgIMKgIMKgIMKgIMKg bmV4dCBpZiAkcG8tPmZ1enp5KCk7ICMgc2tpcCBmdXp6eSBlbnRyaWVzDQogwqAgwqAgwqAgwqAg wqBteSAkcmVmID0gJHBvLT5yZWZlcmVuY2UoKTsNCiDCoA0KIEBAIC03Niw5ICs4OSwxOCBAQCBm b3JlYWNoIG15ICRmaWxlbmFtZSAoQEFSR1YpIHsNCiDCoCDCoCDCoCDCoCDCoG15ICRxbXNnaWRf cGx1cmFsID0gZGVjb2RlKCRjaGFyc2V0LCAkcG8tPm1zZ2lkX3BsdXJhbCk7DQogwqAgwqAgwqAg wqAgwqBteSAkbXNnaWRfcGx1cmFsID0gJHBvLT5kZXF1b3RlKCRxbXNnaWRfcGx1cmFsKTsNCiDC oA0KICsgwqAgwqAgwqAgwqAjIEV4dHJhY3QgbWVzc2FnZSBjb250ZXh0IGlmIHByZXNlbnQNCiAr IMKgIMKgIMKgIMKgbXkgJG1zZ2N0eHQgPSAnJzsNCiArIMKgIMKgIMKgIMKgaWYgKGRlZmluZWQo JHBvLT5tc2djdHh0KSkgew0KICsgwqAgwqAgwqAgwqAgwqAgwqBteSAkcW1zZ2N0eHQgPSBkZWNv ZGUoJGNoYXJzZXQsICRwby0+bXNnY3R4dCk7DQogKyDCoCDCoCDCoCDCoCDCoCDCoCRtc2djdHh0 ID0gJHBvLT5kZXF1b3RlKCRxbXNnY3R4dCk7DQogKyDCoCDCoCDCoCDCoH0NCiArDQogwqAgwqAg wqAgwqAgwqBuZXh0IGlmICFsZW5ndGgoJG1zZ2lkKSAmJiAhbGVuZ3RoKCRtc2dpZF9wbHVyYWwp OyAjIHNraXAgaGVhZGVyDQogwqANCiAtIMKgIMKgIMKgIMKgbXkgJGRpZ2VzdCA9IGZudjMxYSgk bXNnaWQpOw0KICsgwqAgwqAgwqAgwqBteSAkZGlnZXN0ID0gbGVuZ3RoKCRtc2djdHh0KSA+IDAN CiArIMKgIMKgIMKgIMKgIMKgIMKgPyBmbnYzMWFfY3R4dCgkbXNnY3R4dCwgJG1zZ2lkKQ0KICsg wqAgwqAgwqAgwqAgwqAgwqA6IGZudjMxYSgkbXNnaWQpOw0KIMKgDQogwqAgwqAgwqAgwqAgwqBk aWUgImR1cGxpY2F0ZSBkaWdlc3QiIGlmICRjYXRhbG9nLT57JGRpZ2VzdH07DQogwqANCiBAQCAt MTUwLDYgKzE3MiwzNSBAQCBmdW5jdGlvbiBuZ2V0dGV4dChzaW5ndWxhciwgcGx1cmFsLCBuKSB7 DQogwqAgwqAgwqB9DQogwqAgwqAgwqByZXR1cm4gdHJhbnNsYXRpb25bbXNnX2lkeF07DQogwqB9 DQogKw0KICtmdW5jdGlvbiBmbnYzMWFfY3R4dChjb250ZXh0LCB0ZXh0KSB7DQogKyDCoCDCoC8v IFVzZSBFT1QgY2hhcmFjdGVyICgweDA0KSBhcyBzZXBhcmF0b3INCiArIMKgIMKgdmFyIGNvbWJp bmVkID0gY29udGV4dCArICJcXHgwNCIgKyB0ZXh0Ow0KICsgwqAgwqByZXR1cm4gZm52MzFhKGNv bWJpbmVkKTsNCiArfQ0KICsNCiArZnVuY3Rpb24gcGdldHRleHQoY29udGV4dCwgbXNnaWQpIHsN CiArIMKgIMKgdmFyIGRpZ2VzdCA9IGZudjMxYV9jdHh0KGNvbnRleHQsIG1zZ2lkKTsNCiArIMKg IMKgdmFyIGRhdGEgPSBfX3Byb3htb3hfaTE4bl9tc2djYXRfX1tkaWdlc3RdOw0KICsgwqAgwqBp ZiAoIWRhdGEpIHsNCiArIMKgIMKgIMKgIMKgcmV0dXJuIG1zZ2lkOyDCoC8vIFJldHVybiBtc2dp ZCAobm90IGNvbnRleHQpIGFzIGZhbGxiYWNrDQogKyDCoCDCoH0NCiArIMKgIMKgcmV0dXJuIGRh dGFbMF0gfHwgbXNnaWQ7DQogK30NCiArDQogK2Z1bmN0aW9uIG5wZ2V0dGV4dChjb250ZXh0LCBz aW5ndWxhciwgcGx1cmFsLCBuKSB7DQogKyDCoCDCoGNvbnN0IG1zZ19pZHggPSBOdW1iZXIoJHBs dXJhbF9mb3Jtcyk7DQogKyDCoCDCoGNvbnN0IGRpZ2VzdCA9IGZudjMxYV9jdHh0KGNvbnRleHQs IHNpbmd1bGFyKTsNCiArIMKgIMKgY29uc3QgdHJhbnNsYXRpb24gPSBfX3Byb3htb3hfaTE4bl9w bHVyYWxzX21zZ2NhdF9fW2RpZ2VzdF07DQogKyDCoCDCoGlmICghdHJhbnNsYXRpb24gfHwgbXNn X2lkeCA+PSB0cmFuc2xhdGlvbi5sZW5ndGgpIHsNCiArIMKgIMKgIMKgIMKgaWYgKG4gPT09IDEp IHsNCiArIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIHNpbmd1bGFyOw0KICsgwqAgwqAgwqAgwqB9 IGVsc2Ugew0KICsgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gcGx1cmFsOw0KICsgwqAgwqAgwqAg wqB9DQogKyDCoCDCoH0NCiArIMKgIMKgcmV0dXJuIHRyYW5zbGF0aW9uW21zZ19pZHhdOw0KICt9 DQogwqBfX0VPRA0KIMKgDQogwqBpZiAoJG91dGZpbGUpIHsNCg0KDQpUZXN0ZWQgdGhhdCBzdHJp bmdzIHVzaW5nIHBnZXR0ZXh0IGFyZSBjb3JyZWN0bHkgZXh0cmFjdGVkOg0KDQojOiBwdmUtbWFu YWdlci93d3cvbWFuYWdlcjYvY2VwaC9Nb25pdG9yLmpzOjM2DQojOiBwdmUtbWFuYWdlci93d3cv bWFuYWdlcjYvbm9kZS9Db25maWcuanM6MzczDQptc2djdHh0ICJjZXBoIg0KbXNnaWQgIk1vbml0 b3IiDQptc2dzdHIgIiINCg0KIzogcHZlLW1hbmFnZXIvd3d3L21hbmFnZXI2L3FlbXUvQ29uZmln LmpzOjM1MA0KbXNnY3R4dCAicWVtdS1ndWVzdC1hZ2VudCINCm1zZ2lkICJNb25pdG9yIg0KbXNn c3RyICIiDQoNCmFuZCB0aGF0IHRoZXkgYXJlIGRpc3BsYXllZCBjb3JyZWN0bHkgb24gdGhlIHdl YiBVSSBhZnRlciB0cmFuc2xhdGlvbi4NCg0KVGhpcyB3b3VsZCBiZSBhIGdvb2QgYWRkaXRpb24g Zm9yIGEgY291cGxlIG9mIHN0cmluZ3Mgd2hlcmUgd2UgaGF2ZSB0d28NCnZlcnNpb25zIG9mIHRo ZSBzYW1lIHN0cmluZyB3aGljaCBtaWdodCByZXF1aXJlIGRpZmZlcmVudCB0cmFuc2xhdGlvbnMu DQpsZ3RtLg0KDQpUZXN0ZWQtYnk6IE1heGltaWxpYW5vIFNhbmRvdmFsIDxtLnNhbmRvdmFsQHBy b3htb3guY29tPg0KUmV2aWV3ZWQtYnk6IE1heGltaWxpYW5vIFNhbmRvdmFsIDxtLnNhbmRvdmFs QHByb3htb3guY29tPg0KDQotLSANCk1heGltaWxpYW5vDQoNCg==