Tom Lane wrote: > Alvaro Herrera <alvhe...@commandprompt.com> writes: > > I think it should use the %2$s style specifier in that case. This > > should work: > > > printf (ngettext ("One file removed, containing %2$lu bytes", > > "%d files removed, containing %lu bytes", n), > > n, total_bytes); > > How's that gonna work? In the n=1 case, printf would have no idea about > the type/size of the argument it would need to skip over.
Hmm, I admit I have no idea how it works ... but now that I think about it, you are right that at least I only use it with the whole argument array, just in a different order. > I think maybe you could make it work like this: > > printf (ngettext ("One file removed, containing %1$lu bytes", > "%2$d files removed, containing %1$lu bytes", n), > total_bytes, n); > > but *for sure* I don't want us playing such games without a robust > compile-time check on both variants of the ngettext string. I'm > not real sure it's a good idea at all, because of the potential for > confusing translators. Notice also that we have subtly embedded the > preferred English phrase ordering here: if someone wants to pull the > same type of trick in a language where the bytecount ought to come > first, he's just plain out of luck. Agreed on both counts. We have enough trouble finding translators as it is; I don't want to know what would happen if we were to confuse them with this :-) I find it strange that this topic has not been fully hashed out in the GNU gettext documentation. Maybe we should talk to them. -- Alvaro Herrera http://www.CommandPrompt.com/ PostgreSQL Replication, Consulting, Custom Development, 24x7 support -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers