From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Jonathan Niedier" <jrnieder@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Jiang Xin" <worldhello.net@gmail.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 01/65] i18n: parseopt: lookup help and argument translations when showing usage
Date: Sun, 6 May 2012 21:23:51 +0700 [thread overview]
Message-ID: <1336314232-21002-2-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1336314232-21002-1-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
parse-options.c | 19 +++++++++++--------
parse-options.h | 25 ++++++++++++++-----------
2 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/parse-options.c b/parse-options.c
index 850cfa7..ab70c29 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -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);
diff --git a/parse-options.h b/parse-options.h
index da999f8..77a4a8b 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -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))
--
1.7.8.36.g69ee2
next prev parent reply other threads:[~2012-05-06 14:27 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-06 14:23 [PATCH 00/65] Mark parseopt strings for translation Nguyễn Thái Ngọc Duy
2012-05-06 14:23 ` Nguyễn Thái Ngọc Duy [this message]
2012-05-06 14:23 ` [PATCH 02/65] i18n: apply: mark " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 03/65] i18n: archive: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 04/65] i18n: add: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 05/65] i18n: bisect--helper: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 06/65] i18n: blame: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 07/65] i18n: branch: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 08/65] i18n: cat-file: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 09/65] i18n: check-attr: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 10/65] i18n: checkout-index: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 11/65] i18n: checkout: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 12/65] i18n: cherry: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 13/65] i18n: clean: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 14/65] i18n: clone: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 15/65] i18n: column: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 16/65] i18n: commit: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 17/65] i18n: config: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 18/65] i18n: count-objects: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 19/65] i18n: describe: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 20/65] i18n: fast-export: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 21/65] i18n: fetch: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 22/65] i18n: fmt-merge-msg: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 23/65] i18n: for-each-ref: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 24/65] i18n: format-patch: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 25/65] i18n: fsck: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 26/65] i18n: gc: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 27/65] i18n: grep: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 28/65] i18n: hash-object: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 29/65] i18n: help: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 30/65] i18n: init-db: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 31/65] i18n: log: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 32/65] i18n: ls-files: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 33/65] i18n: ls-tree: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 34/65] i18n: merge-base: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 35/65] i18n: merge-file: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 36/65] i18n: merge: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 37/65] i18n: mktree: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 38/65] i18n: mv: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 39/65] i18n: name-rev: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 40/65] i18n: notes: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 41/65] i18n: pack-objects: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 42/65] i18n: pack-refs: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 43/65] i18n: prune-packed: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 44/65] i18n: prune: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 45/65] i18n: push: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 46/65] i18n: read-tree: " Nguyễn Thái Ngọc Duy
2012-05-28 11:13 ` [PATCH 47/65] i18n: remote: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 48/65] i18n: replace: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 49/65] i18n: status: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 50/65] i18n: rerere: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 51/65] i18n: reset: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 52/65] i18n: rev-parse: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 53/65] i18n: revert, cherry-pick: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 54/65] i18n: rm: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 55/65] i18n: shortlog: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 56/65] i18n: show-branch: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 57/65] i18n: show-ref: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 58/65] i18n: symbolic-ref: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 59/65] i18n: tag: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 60/65] i18n: update-index: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 61/65] i18n: update-ref: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 62/65] i18n: update-server-info: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 63/65] i18n: verify-pack: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 64/65] i18n: verify-tag: " Nguyễn Thái Ngọc Duy
2012-05-28 11:14 ` [PATCH 65/65] i18n: write-tree: " Nguyễn Thái Ngọc Duy
2012-05-28 22:47 ` [PATCH 03/65] i18n: archive: " Jonathan Nieder
2012-05-29 11:30 ` Nguyen Thai Ngoc Duy
2012-05-29 12:14 ` Jonathan Nieder
2012-05-29 18:49 ` Junio C Hamano
2012-05-30 5:11 ` Nguyen Thai Ngoc Duy
2012-05-30 6:24 ` Jonathan Nieder
2012-05-30 12:25 ` Nguyen Thai Ngoc Duy
2012-05-30 12:50 ` Nguyen Thai Ngoc Duy
2012-05-29 20:31 ` Junio C Hamano
2012-05-29 20:37 ` Jonathan Nieder
2012-05-29 21:08 ` Junio C Hamano
2012-05-30 5:27 ` Nguyen Thai Ngoc Duy
2012-06-02 10:55 ` Nguyen Thai Ngoc Duy
2012-06-02 12:44 ` Jonathan Nieder
2012-06-07 12:31 ` Nguyen Thai Ngoc Duy
2012-06-07 12:41 ` Jonathan Nieder
2012-06-07 12:53 ` Nguyen Thai Ngoc Duy
2012-06-07 19:50 ` Jonathan Nieder
2012-06-07 18:03 ` Junio C Hamano
2012-05-08 18:40 ` [PATCH 00/65] Mark " Junio C Hamano
2012-05-18 4:25 ` Nguyen Thai Ngoc Duy
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=1336314232-21002-2-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--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).