Am 05.03.2012 04:42, schrieb Junio C Hamano: > Jiang Xin <worldhello.net@xxxxxxxxx> writes: > >> Orignal source code: >> >> 244 case WT_STATUS_CHANGED: >> 245 if (d->new_submodule_commits || d->dirty_submodule) { >> 246 strbuf_addstr(&extra, " ("); >> 247 if (d->new_submodule_commits) >> 248 strbuf_addf(&extra, _("new commits, ")); >> 249 if (d->dirty_submodule & DIRTY_SUBMODULE_MODIFIED) >> 250 strbuf_addf(&extra, _("modified content, ")); >> 251 if (d->dirty_submodule & DIRTY_SUBMODULE_UNTRACKED) >> 252 strbuf_addf(&extra, _("untracked content, ")); >> 253 strbuf_setlen(&extra, extra.len - 2); >> 254 strbuf_addch(&extra, ')'); >> 255 } >> >> The bad thing is strbuf_setlen() at line 253. We can not asume the translation >> of ", " must be 2 characters. > > It sounds like you are merely working around a poor style in the original, > which should have been structured more like this in the first place, no? > > /* a helper function elsewhere, possibly inlined */ > static void add_iwsep_as_needed(struct strbuf *buf, int origlen) > { > if (buf->len != origlen) > strbuf_addstr(buf, _(",")); > } > > ... > int origlen; > > strbuf_addstr(&extra, " (")) > origlen = extra.len; > if (a) > strbuf_addstr(&extra, _("msg a")); > if (b) { > add_iwsep_as_needed(&extra, origlen); > strbuf_addstr(&extra, _("msg b")); > } > if (c) { > add_iwsep_as_needed(&extra, origlen); > strbuf_addstr(&extra, _("msg c")); > } > strbuf_addstr(&extra, ")"); > > Cc'ing Jens whose 9297f77 (git status: Show detailed dirty status of > submodules in long format, 2010-03-08) introduced the "two-byte backstep". I have no objections at all against changing the code that way to make it possible to translate it in a sane way. This code predates the i18n effort by a few months, so it didn't take this kind of problem into account. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html