Subject: Re: [PATCH 04/10] i18n: help: mark strings for translation

From: Jonathan Nieder <[email-masked]>
Date: Mon, 23 Apr 2012 11:30:32 -0500

Nguyễn Thái Ngọc Duy wrote:

> --- a/help.c
> +++ b/help.c
> @@ -217,8 +217,9 @@ void list_commands(const char *title, struct cmdnames *main_cmds,
>  
>  	if (main_cmds->cnt) {
>  		const char *exec_path = git_exec_path();
> -		printf("available %s in '%s'\n", title, exec_path);
> -		printf("----------------");
> +		printf_ln(_("available %s in '%s'"), title, exec_path);
> +		/* TRANSLATORS: this must align with "available %s in '%s'" */
> +		printf(_("----------------"));
>  		mput_char('-', strlen(title) + strlen(exec_path));

Yuck. :)

I would be tempted to do:

	static int strbuf_utf8_width(const struct strbuf *sb)
	{
		char char *p = sb->buf;
		size_t remainder = sb->len;
		int width;

		width = utf8_width(&p, &remainder);
		if (!p || remainder)
			return sb->len;
		return width;
	}
	...

		struct strbuf sb = STRBUF_INIT;
		const char *p;

		strbuf_addf(&sb, _("available %s in '%s'"), title, exec_path);
		fwrite(sb.buf, sb.len, 1, stdout);
		putchar('\n');

		/* NEEDSWORK: handle non-UTF8 locales? */
		mput_char('-', strbuf_utf8_width(&sb));

		strbuf_release(&sb);