Re: Pasword expiration warning - Mailing list pgsql-hackers

From Euler Taveira
Subject Re: Pasword expiration warning
Date
Msg-id 5798afb7-b10c-436f-987e-14fb625df7d0@app.fastmail.com
Whole thread Raw
In response to Re: Pasword expiration warning  (Nathan Bossart <nathandbossart@gmail.com>)
Responses Re: Pasword expiration warning
List pgsql-hackers
On Wed, Feb 4, 2026, at 1:42 PM, Nathan Bossart wrote:
> On Wed, Feb 04, 2026 at 03:44:05PM +0100, Peter Eisentraut wrote:
>> On 03.02.26 16:28, Nathan Bossart wrote:
>>> +            detail = psprintf(_("The password for role \"%s\" will expire in "
>>> +                                INT64_FORMAT " day(s), " INT64_FORMAT
>>> +                                " hour(s), " INT64_FORMAT " minute(s)."),
>>> +                              role, days, hours, minutes);
>> 
>> You cannot use INT64_FORMAT inside translatable messages.  But you can use
>> PRId64.
>
> Ah, I didn't know that.  Is this documented anywhere?  I skimmed through
> our message-writing guidelines [0] but didn't see any mention of this.
>

In the gettext documentation [1]. Maybe we should also add this information to
the referred section.

>> That said, I find writing plurals with "(s)" kind of lame.  It's not a good
>> look.
>> 
>> It's a bit difficult to do this correctly when you have three separate
>> values in one string.  I would consider for example just showing the number
>> of days if the value is larger than one day, number hours if it's larger
>> than one hour, else minutes.  I don't think you need minute-precision when
>> the expiration time is several days out.
>
> I think we still have the problem with plurals if we go this route, and
> IIUC there isn't a good way to do something like errmsg_plural() here since
> we are just saving the message for later.  I'm skeptical it's worth adding
> new translatable-plural handling functionality for this.
>

That's correct. You should use ngettext(). Using the plural form means better
translation. Looking at some messages in the catalog, the developers tend to
ignore the fact that the sentence has a plural form too. Sometimes it is hard
to write a message if multiple parts of the message have plural form. I
completely understand your resistance.

>> Alternatively, just print the actual expiration timestamp.
>
> That crossed my mind, but I worried about timezone/formatting questions,
> and I haven't found any examples of putting a timestamp in an error message
> like this.  Is it acceptable to use pg_strftime() in a translated string?
>

Although we can add the expiration timestamp, I don't think that's a good UI
because (a) there might be timezone difference and (b) you need to do the math
of the remaining time. We can add it but when we are talking about time until a
certain event, we are expecting a countdown format. If the user decides to
change the password because of this message, we don't need inform the exact
remaining time. I agree with Peter that just the largest unit is sufficient for
the user to take some action. Let's say the remaining time is 1 day and 14
hours. If I just inform the 1 day, I know that I have at least 24 hours to
change it and it is sufficient to postpone that action to tomorrow because your
work day ends in a few minutes.


[1]
https://www.gnu.org/software/gettext/manual/html_node/No-string-concatenation.html#The-_003cinttypes_002eh_003e-macros
[2] https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html


-- 
Euler Taveira
EDB   https://www.enterprisedb.com/



pgsql-hackers by date:

Previous
From: Nathan Bossart
Date:
Subject: Re: Pasword expiration warning
Next
From: Nathan Bossart
Date:
Subject: Re: refactor architecture-specific popcount code