i18n: parseopt: lookup help and argument translations when showing usage
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									a3935e6791
								
							
						
					
					
						commit
						54e6dc7daf
					
				|  | @ -490,7 +490,7 @@ static int usage_argh(const struct option *opts, FILE *outfile) | |||
| 			s = literal ? "[%s]" : "[<%s>]"; | ||||
| 	else | ||||
| 		s = literal ? " %s" : " <%s>"; | ||||
| 	return fprintf(outfile, s, opts->argh ? opts->argh : "..."); | ||||
| 	return fprintf(outfile, s, opts->argh ? _(opts->argh) : _("...")); | ||||
| } | ||||
|  | ||||
| #define USAGE_OPTS_WIDTH 24 | ||||
|  | @ -508,13 +508,16 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx, | |||
| 	if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL) | ||||
| 		fprintf(outfile, "cat <<\\EOF\n"); | ||||
|  | ||||
| 	fprintf(outfile, "usage: %s\n", *usagestr++); | ||||
| 	fprintf_ln(outfile, _("usage: %s"), _(*usagestr++)); | ||||
| 	while (*usagestr && **usagestr) | ||||
| 		fprintf(outfile, "   or: %s\n", *usagestr++); | ||||
| 		/* TRANSLATORS: the colon here should align with the | ||||
| 		   one in "usage: %s" translation */ | ||||
| 		fprintf_ln(outfile, _("   or: %s"), _(*usagestr++)); | ||||
| 	while (*usagestr) { | ||||
| 		fprintf(outfile, "%s%s\n", | ||||
| 				**usagestr ? "    " : "", | ||||
| 				*usagestr); | ||||
| 		if (**usagestr) | ||||
| 			fprintf_ln(outfile, _("    %s"), _(*usagestr)); | ||||
| 		else | ||||
| 			putchar('\n'); | ||||
| 		usagestr++; | ||||
| 	} | ||||
|  | ||||
|  | @ -528,7 +531,7 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx, | |||
| 		if (opts->type == OPTION_GROUP) { | ||||
| 			fputc('\n', outfile); | ||||
| 			if (*opts->help) | ||||
| 				fprintf(outfile, "%s\n", opts->help); | ||||
| 				fprintf(outfile, "%s\n", _(opts->help)); | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (!full && (opts->flags & PARSE_OPT_HIDDEN)) | ||||
|  | @ -558,7 +561,7 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx, | |||
| 			fputc('\n', outfile); | ||||
| 			pad = USAGE_OPTS_WIDTH; | ||||
| 		} | ||||
| 		fprintf(outfile, "%*s%s\n", pad + USAGE_GAP, "", opts->help); | ||||
| 		fprintf(outfile, "%*s%s\n", pad + USAGE_GAP, "", _(opts->help)); | ||||
| 	} | ||||
| 	fputc('\n', outfile); | ||||
|  | ||||
|  |  | |||
|  | @ -66,12 +66,14 @@ typedef int parse_opt_ll_cb(struct parse_opt_ctx_t *ctx, | |||
|  * | ||||
|  * `argh`:: | ||||
|  *   token to explain the kind of argument this option wants. Keep it | ||||
|  *   homogeneous across the repository. | ||||
|  *   homogeneous across the repository. Should be wrapped by N_() for | ||||
|  *   translation. | ||||
|  * | ||||
|  * `help`:: | ||||
|  *   the short help associated to what the option does. | ||||
|  *   Must never be NULL (except for OPTION_END). | ||||
|  *   OPTION_GROUP uses this pointer to store the group header. | ||||
|  *   Should be wrapped by N_() for translation. | ||||
|  * | ||||
|  * `flags`:: | ||||
|  *   mask of parse_opt_option_flags. | ||||
|  | @ -128,7 +130,7 @@ struct option { | |||
| #define OPT_BOOL(s, l, v, h)        OPT_SET_INT(s, l, v, h, 1) | ||||
| #define OPT_SET_PTR(s, l, v, h, p)  { OPTION_SET_PTR, (s), (l), (v), NULL, \ | ||||
| 				      (h), PARSE_OPT_NOARG, NULL, (p) } | ||||
| #define OPT_INTEGER(s, l, v, h)     { OPTION_INTEGER, (s), (l), (v), "n", (h) } | ||||
| #define OPT_INTEGER(s, l, v, h)     { OPTION_INTEGER, (s), (l), (v), N_("n"), (h) } | ||||
| #define OPT_STRING(s, l, v, a, h)   { OPTION_STRING,  (s), (l), (v), (a), (h) } | ||||
| #define OPT_STRING_LIST(s, l, v, a, h) \ | ||||
| 				    { OPTION_CALLBACK, (s), (l), (v), (a), \ | ||||
|  | @ -136,7 +138,7 @@ struct option { | |||
| #define OPT_UYN(s, l, v, h)         { OPTION_CALLBACK, (s), (l), (v), NULL, \ | ||||
| 				      (h), PARSE_OPT_NOARG, &parse_opt_tertiary } | ||||
| #define OPT_DATE(s, l, v, h) \ | ||||
| 	{ OPTION_CALLBACK, (s), (l), (v), "time",(h), 0, \ | ||||
| 	{ OPTION_CALLBACK, (s), (l), (v), N_("time"),(h), 0,	\ | ||||
| 	  parse_opt_approxidate_cb } | ||||
| #define OPT_CALLBACK(s, l, v, a, h, f) \ | ||||
| 	{ OPTION_CALLBACK, (s), (l), (v), (a), (h), 0, (f) } | ||||
|  | @ -144,21 +146,22 @@ struct option { | |||
| 	{ OPTION_NUMBER, 0, NULL, (v), NULL, (h), \ | ||||
| 	  PARSE_OPT_NOARG | PARSE_OPT_NONEG, (f) } | ||||
| #define OPT_FILENAME(s, l, v, h)    { OPTION_FILENAME, (s), (l), (v), \ | ||||
| 				       "file", (h) } | ||||
| 				       N_("file"), (h) } | ||||
| #define OPT_COLOR_FLAG(s, l, v, h) \ | ||||
| 	{ OPTION_CALLBACK, (s), (l), (v), "when", (h), PARSE_OPT_OPTARG, \ | ||||
| 	{ OPTION_CALLBACK, (s), (l), (v), N_("when"), (h), PARSE_OPT_OPTARG, \ | ||||
| 		parse_opt_color_flag_cb, (intptr_t)"always" } | ||||
|  | ||||
| #define OPT_NOOP_NOARG(s, l) \ | ||||
| 	{ OPTION_CALLBACK, (s), (l), NULL, NULL, \ | ||||
| 	  "no-op (backward compatibility)", \ | ||||
| 	  N_("no-op (backward compatibility)"),		\ | ||||
| 	  PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, parse_opt_noop_cb } | ||||
|  | ||||
| /* Deprecated synonym */ | ||||
| #define OPT_BOOLEAN OPT_COUNTUP | ||||
|  | ||||
| /* parse_options() will filter out the processed options and leave the | ||||
|  * non-option arguments in argv[]. | ||||
|  * non-option arguments in argv[]. usagestr strings should be marked | ||||
|  * for translation with N_(). | ||||
|  * Returns the number of arguments left in argv[]. | ||||
|  */ | ||||
| extern int parse_options(int argc, const char **argv, const char *prefix, | ||||
|  | @ -222,15 +225,15 @@ extern int parse_opt_noop_cb(const struct option *, const char *, int); | |||
| #define OPT__VERBOSE(var, h)  OPT_BOOLEAN('v', "verbose", (var), (h)) | ||||
| #define OPT__QUIET(var, h)    OPT_BOOLEAN('q', "quiet",   (var), (h)) | ||||
| #define OPT__VERBOSITY(var) \ | ||||
| 	{ OPTION_CALLBACK, 'v', "verbose", (var), NULL, "be more verbose", \ | ||||
| 	{ OPTION_CALLBACK, 'v', "verbose", (var), NULL, N_("be more verbose"), \ | ||||
| 	  PARSE_OPT_NOARG, &parse_opt_verbosity_cb, 0 }, \ | ||||
| 	{ OPTION_CALLBACK, 'q', "quiet", (var), NULL, "be more quiet", \ | ||||
| 	{ OPTION_CALLBACK, 'q', "quiet", (var), NULL, N_("be more quiet"), \ | ||||
| 	  PARSE_OPT_NOARG, &parse_opt_verbosity_cb, 0 } | ||||
| #define OPT__DRY_RUN(var, h)  OPT_BOOLEAN('n', "dry-run", (var), (h)) | ||||
| #define OPT__FORCE(var, h)    OPT_BOOLEAN('f', "force",   (var), (h)) | ||||
| #define OPT__ABBREV(var)  \ | ||||
| 	{ OPTION_CALLBACK, 0, "abbrev", (var), "n", \ | ||||
| 	  "use <n> digits to display SHA-1s", \ | ||||
| 	{ OPTION_CALLBACK, 0, "abbrev", (var), N_("n"),	\ | ||||
| 	  N_("use <n> digits to display SHA-1s"),	\ | ||||
| 	  PARSE_OPT_OPTARG, &parse_opt_abbrev_cb, 0 } | ||||
| #define OPT__COLOR(var, h) \ | ||||
| 	OPT_COLOR_FLAG(0, "color", (var), (h)) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Nguyễn Thái Ngọc Duy
						Nguyễn Thái Ngọc Duy