git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Jiang Xin <worldhello.net@gmail.com>
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Git List" <git@vger.kernel.org>,
	"Jean-Noël Avila" <jn.avila@free.fr>
Subject: Re: [PATCH] PRItime: wrap PRItime for better l10n compatibility
Date: Wed, 19 Jul 2017 15:25:09 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.21.1.1707191456010.4193@virtualbox> (raw)
In-Reply-To: <CANYiYbFROuyXso2ZKuJWDp4cSwpBu=bNAbC-yZtEyDwkbUcAhQ@mail.gmail.com>

Hi Jian (or is it Xin?),

On Wed, 19 Jul 2017, Jiang Xin wrote:

> 2017-07-19 1:35 GMT+08:00 Junio C Hamano <gitster@pobox.com>:
> > Jiang Xin <worldhello.net@gmail.com> writes:
> >
> >>> Two potential issues are:
> >>>
> >>>  - After this patch, there still are quite a many
> >>>
> >>>         printf("time is %"PRItime" ...\n", timestamp)
> >>>
> >>>    so the burden on the programmers having to remember when it is
> >>>    required to use format_raw_time() becomes unclear, and makes the
> >>>    change/churn larger when an existing message needs to be marked
> >>>    for translation.
> >>>
> >>>  - The static struct strbuf here is a cheap way to avoid leaks, but
> >>>    at the same time it is unfriendly to threaded code.  We could
> >>>    instead do:
> >>>
> >>>         void append_PRItime(struct strbuf *buf, timestamp_t time);
> >>>
> >>>    to fix that trivially, but the damage to the caller obviously is
> >>>    much larger going this way.
> >>>
> >>
> >> I wonder if we can replace the original %lu for timestamp with PRIuMAX
> >> instead.  PRIuMAX works fine with gettext utils.
> >
> > I think the question can better be answered if we know how gettext
> > tools special case PRIuMAX.  One thing that may be problematic is
> > that timestamp can later become a signed type and use of one level
> > of redirection in the current code via PRItime and via timestamp_t
> > is a good way to keep such a transition much easier.  Reverting it
> > to use PRIuMAX would make such a transition much harder.
> 
> Gettext handles macros such as PRIuMAX in commit 8b45c5df1 ("Add
> support for ISO C 99 <inttypes.h> format string directive macros.",
> 2002-07-23 12:33:13 +0000).

Wow. This is ugly.

If I understand correctly, then this will not even work correctly for
PRIuMAX on Windows: I highly doubt that the gettext library will interpret
%I64u in the format string correctly to be what %<PRIuMAX> in the po file
refers to.

But there may be hope. Since the character sequence "PRItime" is highly
unlikely to occur in Git's source code in any context other than the
format to print/parse timestamp_t, it should be possible to automate a the
string replacement

	git ls-files -z \*.[ch] |
	xargs -0r sed -i 's/PRItime/PRIuMAX/g'

(assuming, of course, that you use GNU sed, not BSD sed, for which the
`-i` needs to read `-i ''` instead) as part of the update?

For all the reasons Junio mentioned, I, too, would be reluctant to change
the source code to cull all of the PRItime mentions, as it is pleasing
from a semantic point of view that we know what the heck we are talking
about here.

BTW *thank you so much* for your Herculean effort to keep going with the
translation.

Ciao,
Dscho

  reply	other threads:[~2017-07-19 13:25 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-15  5:06 [L10N] Kickoff of translation for Git 2.14.0 round 1 Jiang Xin
2017-07-15 19:30 ` Jean-Noël Avila
2017-07-17  0:56   ` Jiang Xin
2017-07-17 16:06     ` Johannes Schindelin
2017-07-18  1:28       ` Jiang Xin
2017-07-17 15:23   ` [PATCH] PRItime: wrap PRItime for better l10n compatibility Jiang Xin
2017-07-17 17:10     ` Junio C Hamano
2017-07-18  1:33       ` Jiang Xin
2017-07-18 17:35         ` Junio C Hamano
2017-07-19  0:57           ` Jiang Xin
2017-07-19 13:25             ` Johannes Schindelin [this message]
2017-07-19 21:32               ` Junio C Hamano
2017-07-19 23:03               ` Junio C Hamano
2017-07-20 18:19                 ` Junio C Hamano
2017-07-20 18:24                   ` Junio C Hamano
2017-07-20 18:57                   ` Junio C Hamano
2017-07-21 14:38                     ` Jean-Noël Avila
2017-07-21 14:54                       ` Junio C Hamano
2017-07-22 11:21                         ` Johannes Schindelin
2017-07-22 15:53                           ` Junio C Hamano
2017-07-25 10:20                             ` Johannes Schindelin
2017-07-25 20:46                               ` Junio C Hamano
2017-07-21 22:17                   ` Jiang Xin
2017-07-21 22:40                     ` Junio C Hamano
2017-07-21 23:13                       ` Jiang Xin
2017-07-21 23:34                         ` Junio C Hamano
2017-07-22  0:43                           ` Jiang Xin
2017-07-22  0:52                             ` [PATCH] Makefile: generate pot file using a tweaked version of xgettext Jiang Xin
2017-07-22  2:44                             ` [PATCH] PRItime: wrap PRItime for better l10n compatibility Junio C Hamano
2017-07-22 11:28                             ` Johannes Schindelin
2017-07-22 15:48                               ` Junio C Hamano
2017-07-24  1:50                                 ` Jiang Xin
2017-07-25 10:22                                 ` Johannes Schindelin
2017-07-25 20:49                                   ` Junio C Hamano
2017-07-24  1:38                               ` Jiang Xin
2017-07-24 19:09                                 ` Junio C Hamano
2017-07-25 10:25                                 ` Johannes Schindelin
2017-07-23  2:33                             ` Jean-Noël AVILA
2017-07-23 21:54                               ` Junio C Hamano
2017-07-24  2:02                               ` Jiang Xin
2017-07-24 19:10                                 ` Junio C Hamano
2017-07-22 17:02   ` [L10N] Kickoff of translation for Git 2.14.0 round 1 Kaartic Sivaraam
2017-07-23  2:43     ` Jean-Noël Avila
2017-07-19  5:44 ` Jordi Mas
2017-07-20  0:50   ` Jiang Xin

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=alpine.DEB.2.21.1.1707191456010.4193@virtualbox \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jn.avila@free.fr \
    --cc=worldhello.net@gmail.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).