git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/3] i18n: Only extract comments marked by special tag

From
Jiang Xin <worldhello.net@gmail.com>
Date
Apr 18, 2014, 06:03 UTC
Message-ID
<CANYiYbGkjpdrzE25iRS33sm1=AodiREqWmJVkKVEok4mb4G5mQ@mail.gmail.com>
In-Reply-To
<xmqqk3anesml.fsf@gitster.dls.corp.google.com>
2014-04-18 2:08 GMT+08:00 Junio C Hamano <gitster@pobox.com>:
Show 39 quoted lines
> Jiang Xin <worldhello.net@gmail.com> writes:
>
>> When extract l10n messages, we use "--add-comments" option to keep
>> comments right above the l10n messages for references.  But sometimes
>> irrelevant comments are also extracted.  For example in the following
>> code block, the comment in line 2 will be extracted as comment for the
>> l10n message in line 3, but obviously it's wrong.
>>
>>         { OPTION_CALLBACK, 0, "ignore-removal", &addremove_explicit,
>>           NULL /* takes no arguments */,
>>           N_("ignore paths removed in the working tree (same as
>>           --no-all)"),
>>           PARSE_OPT_NOARG, ignore_removal_cb },
>>
>> Since almost all comments for l10n translators are marked with the same
>> prefix (tag): "TRANSLATORS:", it's safe to only extract comments with
>> this special tag.  I.E. it's better to call xgettext as:
>>
>>         xgettext --add-comments=TRANSLATORS: ...
>>
>> Also tweaks the multi-line comment in "init-db.c", to make it start with
>> the proper tag, not "* TRANSLATORS:" (which has a star before the tag).
>
> Hmph.
>
> I am not very happy with this change, as it would force us to
> special case "Translators" comment to follow a non-standard
> multi-line comment formatting convention.  Is there a way to tell
> xgettext to accept both of these forms?
>
>         /* TRANSLATORS: this is a short comment to help you */
>         _("foo bar");
>
>         /*
>          * TRANSLATORS: this comment is to help you, but it is
>          * a lot longer to fit on just a single line.
>          */
>         _("bar baz");
>

We can not provide multiple `--add-comments=TAG` options to xgettext, because xgettext holds the tag in one string, not in a list:

        /* Tag used in comment of prevailing domain.  */
        static char *comment_tag;

So if we won't change our multi-line comments for translators, must hack gettext in some ways.

There maybe 3 ways to hack gettext:
1. When matching comments against TAG, using strstr not strncmp.
        2360         /* When the comment tag is seen, it drags in not
only the line
        2361            which it starts, but all remaining comment lines.  */
        2362         if (add_all_remaining_comments
        2363             || (add_all_remaining_comments =
        2364                   (comment_tag != NULL
        2365                    && strncmp (s, comment_tag, strlen
(comment_tag)) == 0)))
2. Add a extension to in-comment xgettext instructions.
    There is a undocumented feature in xgettext: User can provide
    instructions (prefixed by xgettext:) in comments, such as:
        /*
         * xgettext: fuzzy possible-c-format no-wrap
         * other comments...
         */
    But it does not help much, unless we hack xgettext to extend this
    hidden feature. I.E. Add an additional flag to support unconditionally
    reference to the commit block. Like:
        /*
         * xgettext: comments
         * TRANSLATORS: this comment is to help you, but it is
         * a lot longer to fit on just a single line.
         */
         _("bar baz");
3. Hack the parser for comments in "gettext-tools/src/x-c.c" (maybe
    function phase4_getc()) to support various multi-line comments style,
    such as:
        /*
         * TRANSLATORS: this comment is to help you, but it is
         * a lot longer to fit on just a single line.
         */
        /*
        ** TRANSLATORS: this comment is to help you, but it is
        ** a lot longer to fit on just a single line.
        */
        /********************************************************
         * TRANSLATORS: this comment is to help you, but it is  *
         * a lot longer to fit on just a single line.           *
         ********************************************************/
I CC this mail to the gettext mailing list. Full thread see:
 * http://thread.gmane.org/gmane.comp.version-control.git/246390/focus=246431
-- 
Jiang Xin
Previous: Junio C HamanoNext: Junio C Hamano
Message 7 of 13 in “[l10n] date: Note for translators not included in .po files”
  1. Brian GesiakApr 16, 2014
  2. Jiang XinApr 17, 2014
  3. 0/3 extract proper comments for l10n translatorsJiang Xin, Apr 17, 2014
  4. 1/3 i18n: Fixes uncatchable comments for translatorsJiang Xin, Apr 17, 2014
  5. 2/3 i18n: Only extract comments marked by special tagJiang Xin, Apr 17, 2014
  6. Junio C HamanoApr 17, 2014
  7. Jiang XinApr 18, 2014
  8. Junio C HamanoApr 18, 2014
  9. Junio C HamanoApr 18, 2014
  10. 3/3 i18n: Remove obsolete comments for translatorsJiang Xin, Apr 17, 2014
  11. Jiang XinApr 17, 2014
  12. Junio C HamanoApr 17, 2014
  13. Jiang XinApr 17, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.