{"thread":{"id":"30446","subject":"[PATCH 00/65] Mark parseopt strings for translation","startedAt":"2012-05-06T14:23:50Z","lastAt":"2012-06-07T19:50:58Z","messageCount":87,"participants":["Nguyễn Thái Ngọc Duy","Junio C Hamano","Nguyen Thai Ngoc Duy","Jonathan Nieder"],"isPatch":true,"patchVersion":1,"patchTotal":65},"messages":[{"id":"190918","messageId":"1336314232-21002-1-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":null,"subject":"[PATCH 00/65] Mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-06T14:23:50Z","receivedAt":"2012-05-06T14:23:50Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"The main code change is in the first patch, which enables parseopt to\nuse gettext(). The rest is a bunch of N_(). I only post 2 patches\nhere. The rest can be found at\n\nhttps://github.com/pclouds/git/commits/parseopt-i18n\n\nAbout 1000 strings are marked for translation in this series.\nShell-based parseopt is not supported because I don't know how to mark\nstrings in shell scripts.\n\nI suggest to merge this series (once it passes the review) in a\nquiet time in next. Then I'll add additional patches to all topics in\npu that touch parseopt and keep doing so until the series graduates to\nmaster.\n\nSurprisingly, this series (based on master) does not cause any\nconflicts with pu. So now may be a good time.\n\nNguyễn Thái Ngọc Duy (65):\n  i18n: parseopt: lookup help and argument translations when showing\n    usage\n  i18n: apply: mark parseopt strings for translation\n  i18n: archive: mark parseopt strings for translation\n  i18n: add: mark parseopt strings for translation\n  i18n: bisect--helper: mark parseopt strings for translation\n  i18n: blame: mark parseopt strings for translation\n  i18n: branch: mark parseopt strings for translation\n  i18n: cat-file: mark parseopt strings for translation\n  i18n: check-attr: mark parseopt strings for translation\n  i18n: checkout-index: mark parseopt strings for translation\n  i18n: checkout: mark parseopt strings for translation\n  i18n: cherry: mark parseopt strings for translation\n  i18n: clean: mark parseopt strings for translation\n  i18n: clone: mark parseopt strings for translation\n  i18n: column: mark parseopt strings for translation\n  i18n: commit: mark parseopt strings for translation\n  i18n: config: mark parseopt strings for translation\n  i18n: count-objects: mark parseopt strings for translation\n  i18n: describe: mark parseopt strings for translation\n  i18n: fast-export: mark parseopt strings for translation\n  i18n: fetch: mark parseopt strings for translation\n  i18n: fmt-merge-msg: mark parseopt strings for translation\n  i18n: for-each-ref: mark parseopt strings for translation\n  i18n: format-patch: mark parseopt strings for translation\n  i18n: fsck: mark parseopt strings for translation\n  i18n: gc: mark parseopt strings for translation\n  i18n: grep: mark parseopt strings for translation\n  i18n: hash-object: mark parseopt strings for translation\n  i18n: help: mark parseopt strings for translation\n  i18n: init-db: mark parseopt strings for translation\n  i18n: log: mark parseopt strings for translation\n  i18n: ls-files: mark parseopt strings for translation\n  i18n: ls-tree: mark parseopt strings for translation\n  i18n: merge-base: mark parseopt strings for translation\n  i18n: merge-file: mark parseopt strings for translation\n  i18n: merge: mark parseopt strings for translation\n  i18n: mktree: mark parseopt strings for translation\n  i18n: mv: mark parseopt strings for translation\n  i18n: name-rev: mark parseopt strings for translation\n  i18n: notes: mark parseopt strings for translation\n  i18n: pack-objects: mark parseopt strings for translation\n  i18n: pack-refs: mark parseopt strings for translation\n  i18n: prune-packed: mark parseopt strings for translation\n  i18n: prune: mark parseopt strings for translation\n  i18n: push: mark parseopt strings for translation\n  i18n: read-tree: mark parseopt strings for translation\n  i18n: remote: mark parseopt strings for translation\n  i18n: replace: mark parseopt strings for translation\n  i18n: status: mark parseopt strings for translation\n  i18n: rerere: mark parseopt strings for translation\n  i18n: reset: mark parseopt strings for translation\n  i18n: rev-parse: mark parseopt strings for translation\n  i18n: revert, cherry-pick: mark parseopt strings for translation\n  i18n: rm: mark parseopt strings for translation\n  i18n: shortlog: mark parseopt strings for translation\n  i18n: show-branch: mark parseopt strings for translation\n  i18n: show-ref: mark parseopt strings for translation\n  i18n: symbolic-ref: mark parseopt strings for translation\n  i18n: tag: mark parseopt strings for translation\n  i18n: update-index: mark parseopt strings for translation\n  i18n: update-ref: mark parseopt strings for translation\n  i18n: update-server-info: mark parseopt strings for translation\n  i18n: verify-pack: mark parseopt strings for translation\n  i18n: verify-tag: mark parseopt strings for translation\n  i18n: write-tree: mark parseopt strings for translation\n\n archive.c                    |   38 +++++++-------\n builtin/add.c                |   26 +++++-----\n builtin/apply.c              |   62 +++++++++++-----------\n builtin/archive.c            |   12 ++--\n builtin/bisect--helper.c     |    6 +-\n builtin/blame.c              |   46 ++++++++--------\n builtin/branch.c             |   54 +++++++++---------\n builtin/cat-file.c           |   20 ++++----\n builtin/check-attr.c         |   12 ++--\n builtin/checkout-index.c     |   24 ++++----\n builtin/checkout.c           |   40 +++++++-------\n builtin/clean.c              |   18 +++---\n builtin/clone.c              |   56 ++++++++++----------\n builtin/column.c             |   16 +++---\n builtin/commit.c             |   98 +++++++++++++++++-----------------\n builtin/config.c             |   56 ++++++++++----------\n builtin/count-objects.c      |    4 +-\n builtin/describe.c           |   28 +++++-----\n builtin/fast-export.c        |   28 +++++-----\n builtin/fetch.c              |   48 ++++++++--------\n builtin/fmt-merge-msg.c      |   16 +++---\n builtin/for-each-ref.c       |   18 +++---\n builtin/fsck.c               |   24 ++++----\n builtin/gc.c                 |   12 ++--\n builtin/grep.c               |   90 ++++++++++++++++----------------\n builtin/hash-object.c        |   16 +++---\n builtin/help.c               |   10 ++--\n builtin/init-db.c            |   18 +++---\n builtin/log.c                |   80 ++++++++++++++--------------\n builtin/ls-files.c           |   54 +++++++++---------\n builtin/ls-tree.c            |   22 ++++----\n builtin/merge-base.c         |   12 ++--\n builtin/merge-file.c         |   20 ++++----\n builtin/merge.c              |   48 ++++++++--------\n builtin/mktree.c             |    8 ++--\n builtin/mv.c                 |   10 ++--\n builtin/name-rev.c           |   22 ++++----\n builtin/notes.c              |  120 +++++++++++++++++++++---------------------\n builtin/pack-objects.c       |   64 +++++++++++-----------\n builtin/pack-refs.c          |    6 +-\n builtin/prune-packed.c       |    6 +-\n builtin/prune.c              |   10 ++--\n builtin/push.c               |   34 ++++++------\n builtin/read-tree.c          |   38 +++++++-------\n builtin/remote.c             |   84 +++++++++++++++---------------\n builtin/replace.c            |   12 ++--\n builtin/rerere.c             |    4 +-\n builtin/reset.c              |   20 ++++----\n builtin/rev-parse.c          |   18 +++---\n builtin/revert.c             |   36 ++++++------\n builtin/rm.c                 |   14 +++---\n builtin/shortlog.c           |   14 +++---\n builtin/show-branch.c        |   42 +++++++-------\n builtin/show-ref.c           |   28 +++++-----\n builtin/symbolic-ref.c       |    8 ++--\n builtin/tag.c                |   56 ++++++++++----------\n builtin/update-index.c       |   54 +++++++++---------\n builtin/update-ref.c         |   10 ++--\n builtin/update-server-info.c |    4 +-\n builtin/verify-pack.c        |    6 +-\n builtin/verify-tag.c         |    4 +-\n builtin/write-tree.c         |   10 ++--\n parse-options.c              |   19 ++++---\n parse-options.h              |   25 +++++----\n 64 files changed, 962 insertions(+), 956 deletions(-)\n\n-- \n1.7.8.36.g69ee2\n"},{"id":"190919","messageId":"1336314232-21002-2-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1336314232-21002-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 01/65] i18n: parseopt: lookup help and argument translations when showing usage","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-06T14:23:51Z","receivedAt":"2012-05-06T14:23:51Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n parse-options.c |   19 +++++++++++--------\n parse-options.h |   25 ++++++++++++++-----------\n 2 files changed, 25 insertions(+), 19 deletions(-)\n\ndiff --git a/parse-options.c b/parse-options.c\nindex 850cfa7..ab70c29 100644\n--- a/parse-options.c\n+++ b/parse-options.c\n@@ -490,7 +490,7 @@ static int usage_argh(const struct option *opts, FILE *outfile)\n \t\t\ts = literal ? \"[%s]\" : \"[<%s>]\";\n \telse\n \t\ts = literal ? \" %s\" : \" <%s>\";\n-\treturn fprintf(outfile, s, opts->argh ? opts->argh : \"...\");\n+\treturn fprintf(outfile, s, opts->argh ? _(opts->argh) : _(\"...\"));\n }\n \n #define USAGE_OPTS_WIDTH 24\n@@ -508,13 +508,16 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,\n \tif (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)\n \t\tfprintf(outfile, \"cat <<\\\\EOF\\n\");\n \n-\tfprintf(outfile, \"usage: %s\\n\", *usagestr++);\n+\tfprintf_ln(outfile, _(\"usage: %s\"), _(*usagestr++));\n \twhile (*usagestr && **usagestr)\n-\t\tfprintf(outfile, \"   or: %s\\n\", *usagestr++);\n+\t\t/* TRANSLATORS: the colon here should align with the\n+\t\t   one in \"usage: %s\" translation */\n+\t\tfprintf_ln(outfile, _(\"   or: %s\"), _(*usagestr++));\n \twhile (*usagestr) {\n-\t\tfprintf(outfile, \"%s%s\\n\",\n-\t\t\t\t**usagestr ? \"    \" : \"\",\n-\t\t\t\t*usagestr);\n+\t\tif (**usagestr)\n+\t\t\tfprintf_ln(outfile, _(\"    %s\"), _(*usagestr));\n+\t\telse\n+\t\t\tputchar('\\n');\n \t\tusagestr++;\n \t}\n \n@@ -528,7 +531,7 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,\n \t\tif (opts->type == OPTION_GROUP) {\n \t\t\tfputc('\\n', outfile);\n \t\t\tif (*opts->help)\n-\t\t\t\tfprintf(outfile, \"%s\\n\", opts->help);\n+\t\t\t\tfprintf(outfile, \"%s\\n\", _(opts->help));\n \t\t\tcontinue;\n \t\t}\n \t\tif (!full && (opts->flags & PARSE_OPT_HIDDEN))\n@@ -558,7 +561,7 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,\n \t\t\tfputc('\\n', outfile);\n \t\t\tpad = USAGE_OPTS_WIDTH;\n \t\t}\n-\t\tfprintf(outfile, \"%*s%s\\n\", pad + USAGE_GAP, \"\", opts->help);\n+\t\tfprintf(outfile, \"%*s%s\\n\", pad + USAGE_GAP, \"\", _(opts->help));\n \t}\n \tfputc('\\n', outfile);\n \ndiff --git a/parse-options.h b/parse-options.h\nindex da999f8..77a4a8b 100644\n--- a/parse-options.h\n+++ b/parse-options.h\n@@ -66,12 +66,14 @@ typedef int parse_opt_ll_cb(struct parse_opt_ctx_t *ctx,\n  *\n  * `argh`::\n  *   token to explain the kind of argument this option wants. Keep it\n- *   homogeneous across the repository.\n+ *   homogeneous across the repository. Should be wrapped by N_() for\n+ *   translation.\n  *\n  * `help`::\n  *   the short help associated to what the option does.\n  *   Must never be NULL (except for OPTION_END).\n  *   OPTION_GROUP uses this pointer to store the group header.\n+ *   Should be wrapped by N_() for translation.\n  *\n  * `flags`::\n  *   mask of parse_opt_option_flags.\n@@ -128,7 +130,7 @@ struct option {\n #define OPT_BOOL(s, l, v, h)        OPT_SET_INT(s, l, v, h, 1)\n #define OPT_SET_PTR(s, l, v, h, p)  { OPTION_SET_PTR, (s), (l), (v), NULL, \\\n \t\t\t\t      (h), PARSE_OPT_NOARG, NULL, (p) }\n-#define OPT_INTEGER(s, l, v, h)     { OPTION_INTEGER, (s), (l), (v), \"n\", (h) }\n+#define OPT_INTEGER(s, l, v, h)     { OPTION_INTEGER, (s), (l), (v), N_(\"n\"), (h) }\n #define OPT_STRING(s, l, v, a, h)   { OPTION_STRING,  (s), (l), (v), (a), (h) }\n #define OPT_STRING_LIST(s, l, v, a, h) \\\n \t\t\t\t    { OPTION_CALLBACK, (s), (l), (v), (a), \\\n@@ -136,7 +138,7 @@ struct option {\n #define OPT_UYN(s, l, v, h)         { OPTION_CALLBACK, (s), (l), (v), NULL, \\\n \t\t\t\t      (h), PARSE_OPT_NOARG, &parse_opt_tertiary }\n #define OPT_DATE(s, l, v, h) \\\n-\t{ OPTION_CALLBACK, (s), (l), (v), \"time\",(h), 0, \\\n+\t{ OPTION_CALLBACK, (s), (l), (v), N_(\"time\"),(h), 0,\t\\\n \t  parse_opt_approxidate_cb }\n #define OPT_CALLBACK(s, l, v, a, h, f) \\\n \t{ OPTION_CALLBACK, (s), (l), (v), (a), (h), 0, (f) }\n@@ -144,21 +146,22 @@ struct option {\n \t{ OPTION_NUMBER, 0, NULL, (v), NULL, (h), \\\n \t  PARSE_OPT_NOARG | PARSE_OPT_NONEG, (f) }\n #define OPT_FILENAME(s, l, v, h)    { OPTION_FILENAME, (s), (l), (v), \\\n-\t\t\t\t       \"file\", (h) }\n+\t\t\t\t       N_(\"file\"), (h) }\n #define OPT_COLOR_FLAG(s, l, v, h) \\\n-\t{ OPTION_CALLBACK, (s), (l), (v), \"when\", (h), PARSE_OPT_OPTARG, \\\n+\t{ OPTION_CALLBACK, (s), (l), (v), N_(\"when\"), (h), PARSE_OPT_OPTARG, \\\n \t\tparse_opt_color_flag_cb, (intptr_t)\"always\" }\n \n #define OPT_NOOP_NOARG(s, l) \\\n \t{ OPTION_CALLBACK, (s), (l), NULL, NULL, \\\n-\t  \"no-op (backward compatibility)\", \\\n+\t  N_(\"no-op (backward compatibility)\"),\t\t\\\n \t  PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, parse_opt_noop_cb }\n \n /* Deprecated synonym */\n #define OPT_BOOLEAN OPT_COUNTUP\n \n /* parse_options() will filter out the processed options and leave the\n- * non-option arguments in argv[].\n+ * non-option arguments in argv[]. usagestr strings should be marked\n+ * for translation with N_().\n  * Returns the number of arguments left in argv[].\n  */\n extern int parse_options(int argc, const char **argv, const char *prefix,\n@@ -222,15 +225,15 @@ extern int parse_opt_noop_cb(const struct option *, const char *, int);\n #define OPT__VERBOSE(var, h)  OPT_BOOLEAN('v', \"verbose\", (var), (h))\n #define OPT__QUIET(var, h)    OPT_BOOLEAN('q', \"quiet\",   (var), (h))\n #define OPT__VERBOSITY(var) \\\n-\t{ OPTION_CALLBACK, 'v', \"verbose\", (var), NULL, \"be more verbose\", \\\n+\t{ OPTION_CALLBACK, 'v', \"verbose\", (var), NULL, N_(\"be more verbose\"), \\\n \t  PARSE_OPT_NOARG, &parse_opt_verbosity_cb, 0 }, \\\n-\t{ OPTION_CALLBACK, 'q', \"quiet\", (var), NULL, \"be more quiet\", \\\n+\t{ OPTION_CALLBACK, 'q', \"quiet\", (var), NULL, N_(\"be more quiet\"), \\\n \t  PARSE_OPT_NOARG, &parse_opt_verbosity_cb, 0 }\n #define OPT__DRY_RUN(var, h)  OPT_BOOLEAN('n', \"dry-run\", (var), (h))\n #define OPT__FORCE(var, h)    OPT_BOOLEAN('f', \"force\",   (var), (h))\n #define OPT__ABBREV(var)  \\\n-\t{ OPTION_CALLBACK, 0, \"abbrev\", (var), \"n\", \\\n-\t  \"use <n> digits to display SHA-1s\", \\\n+\t{ OPTION_CALLBACK, 0, \"abbrev\", (var), N_(\"n\"),\t\\\n+\t  N_(\"use <n> digits to display SHA-1s\"),\t\\\n \t  PARSE_OPT_OPTARG, &parse_opt_abbrev_cb, 0 }\n #define OPT__COLOR(var, h) \\\n \tOPT_COLOR_FLAG(0, \"color\", (var), (h))\n-- \n1.7.8.36.g69ee2\n"},{"id":"190920","messageId":"1336314232-21002-3-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1336314232-21002-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 02/65] i18n: apply: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-06T14:23:52Z","receivedAt":"2012-05-06T14:23:52Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/apply.c |   62 +++++++++++++++++++++++++++---------------------------\n 1 files changed, 31 insertions(+), 31 deletions(-)\n\ndiff --git a/builtin/apply.c b/builtin/apply.c\nindex 725712d..5621a66 100644\n--- a/builtin/apply.c\n+++ b/builtin/apply.c\n@@ -50,7 +50,7 @@ static const char *fake_ancestor;\n static int line_termination = '\\n';\n static unsigned int p_context = UINT_MAX;\n static const char * const apply_usage[] = {\n-\t\"git apply [options] [<patch>...]\",\n+\tN_(\"git apply [options] [<patch>...]\"),\n \tNULL\n };\n \n@@ -3952,66 +3952,66 @@ int cmd_apply(int argc, const char **argv, const char *prefix_)\n \tconst char *whitespace_option = NULL;\n \n \tstruct option builtin_apply_options[] = {\n-\t\t{ OPTION_CALLBACK, 0, \"exclude\", NULL, \"path\",\n-\t\t\t\"don't apply changes matching the given path\",\n+\t\t{ OPTION_CALLBACK, 0, \"exclude\", NULL, N_(\"path\"),\n+\t\t\tN_(\"don't apply changes matching the given path\"),\n \t\t\t0, option_parse_exclude },\n-\t\t{ OPTION_CALLBACK, 0, \"include\", NULL, \"path\",\n-\t\t\t\"apply changes matching the given path\",\n+\t\t{ OPTION_CALLBACK, 0, \"include\", NULL, N_(\"path\"),\n+\t\t\tN_(\"apply changes matching the given path\"),\n \t\t\t0, option_parse_include },\n-\t\t{ OPTION_CALLBACK, 'p', NULL, NULL, \"num\",\n-\t\t\t\"remove <num> leading slashes from traditional diff paths\",\n+\t\t{ OPTION_CALLBACK, 'p', NULL, NULL, N_(\"num\"),\n+\t\t\tN_(\"remove <num> leading slashes from traditional diff paths\"),\n \t\t\t0, option_parse_p },\n \t\tOPT_BOOLEAN(0, \"no-add\", &no_add,\n-\t\t\t\"ignore additions made by the patch\"),\n+\t\t\tN_(\"ignore additions made by the patch\")),\n \t\tOPT_BOOLEAN(0, \"stat\", &diffstat,\n-\t\t\t\"instead of applying the patch, output diffstat for the input\"),\n+\t\t\tN_(\"instead of applying the patch, output diffstat for the input\")),\n \t\tOPT_NOOP_NOARG(0, \"allow-binary-replacement\"),\n \t\tOPT_NOOP_NOARG(0, \"binary\"),\n \t\tOPT_BOOLEAN(0, \"numstat\", &numstat,\n-\t\t\t\"shows number of added and deleted lines in decimal notation\"),\n+\t\t\tN_(\"shows number of added and deleted lines in decimal notation\")),\n \t\tOPT_BOOLEAN(0, \"summary\", &summary,\n-\t\t\t\"instead of applying the patch, output a summary for the input\"),\n+\t\t\tN_(\"instead of applying the patch, output a summary for the input\")),\n \t\tOPT_BOOLEAN(0, \"check\", &check,\n-\t\t\t\"instead of applying the patch, see if the patch is applicable\"),\n+\t\t\tN_(\"instead of applying the patch, see if the patch is applicable\")),\n \t\tOPT_BOOLEAN(0, \"index\", &check_index,\n-\t\t\t\"make sure the patch is applicable to the current index\"),\n+\t\t\tN_(\"make sure the patch is applicable to the current index\")),\n \t\tOPT_BOOLEAN(0, \"cached\", &cached,\n-\t\t\t\"apply a patch without touching the working tree\"),\n+\t\t\tN_(\"apply a patch without touching the working tree\")),\n \t\tOPT_BOOLEAN(0, \"apply\", &force_apply,\n-\t\t\t\"also apply the patch (use with --stat/--summary/--check)\"),\n+\t\t\tN_(\"also apply the patch (use with --stat/--summary/--check)\")),\n \t\tOPT_FILENAME(0, \"build-fake-ancestor\", &fake_ancestor,\n-\t\t\t\"build a temporary index based on embedded index information\"),\n+\t\t\tN_(\"build a temporary index based on embedded index information\")),\n \t\t{ OPTION_CALLBACK, 'z', NULL, NULL, NULL,\n-\t\t\t\"paths are separated with NUL character\",\n+\t\t\tN_(\"paths are separated with NUL character\"),\n \t\t\tPARSE_OPT_NOARG, option_parse_z },\n \t\tOPT_INTEGER('C', NULL, &p_context,\n-\t\t\t\t\"ensure at least <n> lines of context match\"),\n-\t\t{ OPTION_CALLBACK, 0, \"whitespace\", &whitespace_option, \"action\",\n-\t\t\t\"detect new or modified lines that have whitespace errors\",\n+\t\t\t\tN_(\"ensure at least <n> lines of context match\")),\n+\t\t{ OPTION_CALLBACK, 0, \"whitespace\", &whitespace_option, N_(\"action\"),\n+\t\t\tN_(\"detect new or modified lines that have whitespace errors\"),\n \t\t\t0, option_parse_whitespace },\n \t\t{ OPTION_CALLBACK, 0, \"ignore-space-change\", NULL, NULL,\n-\t\t\t\"ignore changes in whitespace when finding context\",\n+\t\t\tN_(\"ignore changes in whitespace when finding context\"),\n \t\t\tPARSE_OPT_NOARG, option_parse_space_change },\n \t\t{ OPTION_CALLBACK, 0, \"ignore-whitespace\", NULL, NULL,\n-\t\t\t\"ignore changes in whitespace when finding context\",\n+\t\t\tN_(\"ignore changes in whitespace when finding context\"),\n \t\t\tPARSE_OPT_NOARG, option_parse_space_change },\n \t\tOPT_BOOLEAN('R', \"reverse\", &apply_in_reverse,\n-\t\t\t\"apply the patch in reverse\"),\n+\t\t\tN_(\"apply the patch in reverse\")),\n \t\tOPT_BOOLEAN(0, \"unidiff-zero\", &unidiff_zero,\n-\t\t\t\"don't expect at least one line of context\"),\n+\t\t\tN_(\"don't expect at least one line of context\")),\n \t\tOPT_BOOLEAN(0, \"reject\", &apply_with_reject,\n-\t\t\t\"leave the rejected hunks in corresponding *.rej files\"),\n+\t\t\tN_(\"leave the rejected hunks in corresponding *.rej files\")),\n \t\tOPT_BOOLEAN(0, \"allow-overlap\", &allow_overlap,\n-\t\t\t\"allow overlapping hunks\"),\n-\t\tOPT__VERBOSE(&apply_verbosely, \"be verbose\"),\n+\t\t\tN_(\"allow overlapping hunks\")),\n+\t\tOPT__VERBOSE(&apply_verbosely, N_(\"be verbose\")),\n \t\tOPT_BIT(0, \"inaccurate-eof\", &options,\n-\t\t\t\"tolerate incorrectly detected missing new-line at the end of file\",\n+\t\t\tN_(\"tolerate incorrectly detected missing new-line at the end of file\"),\n \t\t\tINACCURATE_EOF),\n \t\tOPT_BIT(0, \"recount\", &options,\n-\t\t\t\"do not trust the line counts in the hunk headers\",\n+\t\t\tN_(\"do not trust the line counts in the hunk headers\"),\n \t\t\tRECOUNT),\n-\t\t{ OPTION_CALLBACK, 0, \"directory\", NULL, \"root\",\n-\t\t\t\"prepend <root> to all filenames\",\n+\t\t{ OPTION_CALLBACK, 0, \"directory\", NULL, N_(\"root\"),\n+\t\t\tN_(\"prepend <root> to all filenames\"),\n \t\t\t0, option_parse_directory },\n \t\tOPT_END()\n \t};\n-- \n1.7.8.36.g69ee2\n"},{"id":"191142","messageId":"7vlil2v7lx.fsf@alter.siamese.dyndns.org","threadId":"30446","inReplyTo":"1336314232-21002-1-git-send-email-pclouds@gmail.com","subject":"Re: [PATCH 00/65] Mark parseopt strings for translation","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2012-05-08T18:40:58Z","receivedAt":"2012-05-08T18:40:58Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Both 01/65 (the parse-options implementation) and 02/65 (sample conversion\nof apply.c) made sense, so I'll queue them first.\n\nThanks.\n"},{"id":"191643","messageId":"CACsJy8DBBxt3Q7bvrC5P-28MXk8KwAno4uDwTQyiRkfictZqdw@mail.gmail.com","threadId":"30446","inReplyTo":"7vlil2v7lx.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 00/65] Mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-18T04:25:15Z","receivedAt":"2012-05-18T04:25:15Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, May 9, 2012 at 1:40 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> Both 01/65 (the parse-options implementation) and 02/65 (sample conversion\n> of apply.c) made sense, so I'll queue them first.\n\nparseopt-i18n branch [1] has been rebased on master now that the first\ntwo patches are merged. I find \"git log --patch --color-words=.\" much\neasier to review this series (because it just highlights the added\nparts \"N_(\" and \")\") than line-by-line diff format for email review.\n\n[1] https://github.com/pclouds/git/commits/parseopt-i18n\n-- \nDuy\n"},{"id":"192318","messageId":"1338203657-26486-1-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1336314232-21002-3-git-send-email-pclouds@gmail.com","subject":"[PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:15Z","receivedAt":"2012-05-28T11:13:15Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n rc times are usually more quiet times, let's slip the series in..\n minor conflict with revert topic in pu, but should be easy to\n resolve.\n\n archive.c         | 38 +++++++++++++++++++-------------------\n builtin/archive.c | 12 ++++++------\n 2 files changed, 25 insertions(+), 25 deletions(-)\n\ndiff --git a/archive.c b/archive.c\nindex a484433..2584324 100644\n--- a/archive.c\n+++ b/archive.c\n@@ -7,10 +7,10 @@\n #include \"unpack-trees.h\"\n \n static char const * const archive_usage[] = {\n-\t\"git archive [options] <tree-ish> [<path>...]\",\n-\t\"git archive --list\",\n-\t\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\",\n-\t\"git archive --remote <repo> [--exec <cmd>] --list\",\n+\tN_(\"git archive [options] <tree-ish> [<path>...]\"),\n+\tN_(\"git archive --list\"),\n+\tN_(\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\"),\n+\tN_(\"git archive --remote <repo> [--exec <cmd>] --list\"),\n \tNULL\n };\n \n@@ -319,16 +319,16 @@ static int parse_archive_args(int argc, const char **argv,\n \tint worktree_attributes = 0;\n \tstruct option opts[] = {\n \t\tOPT_GROUP(\"\"),\n-\t\tOPT_STRING(0, \"format\", &format, \"fmt\", \"archive format\"),\n-\t\tOPT_STRING(0, \"prefix\", &base, \"prefix\",\n-\t\t\t\"prepend prefix to each pathname in the archive\"),\n-\t\tOPT_STRING('o', \"output\", &output, \"file\",\n-\t\t\t\"write the archive to this file\"),\n+\t\tOPT_STRING(0, \"format\", &format, N_(\"fmt\"), N_(\"archive format\")),\n+\t\tOPT_STRING(0, \"prefix\", &base, N_(\"prefix\"),\n+\t\t\tN_(\"prepend prefix to each pathname in the archive\")),\n+\t\tOPT_STRING('o', \"output\", &output, N_(\"file\"),\n+\t\t\tN_(\"write the archive to this file\")),\n \t\tOPT_BOOL(0, \"worktree-attributes\", &worktree_attributes,\n-\t\t\t\"read .gitattributes in working directory\"),\n-\t\tOPT__VERBOSE(&verbose, \"report archived files on stderr\"),\n-\t\tOPT__COMPR('0', &compression_level, \"store only\", 0),\n-\t\tOPT__COMPR('1', &compression_level, \"compress faster\", 1),\n+\t\t\tN_(\"read .gitattributes in working directory\")),\n+\t\tOPT__VERBOSE(&verbose, N_(\"report archived files on stderr\")),\n+\t\tOPT__COMPR('0', &compression_level, N_(\"store only\"), 0),\n+\t\tOPT__COMPR('1', &compression_level, N_(\"compress faster\"), 1),\n \t\tOPT__COMPR_HIDDEN('2', &compression_level, 2),\n \t\tOPT__COMPR_HIDDEN('3', &compression_level, 3),\n \t\tOPT__COMPR_HIDDEN('4', &compression_level, 4),\n@@ -336,15 +336,15 @@ static int parse_archive_args(int argc, const char **argv,\n \t\tOPT__COMPR_HIDDEN('6', &compression_level, 6),\n \t\tOPT__COMPR_HIDDEN('7', &compression_level, 7),\n \t\tOPT__COMPR_HIDDEN('8', &compression_level, 8),\n-\t\tOPT__COMPR('9', &compression_level, \"compress better\", 9),\n+\t\tOPT__COMPR('9', &compression_level, N_(\"compress better\"), 9),\n \t\tOPT_GROUP(\"\"),\n \t\tOPT_BOOL('l', \"list\", &list,\n-\t\t\t\"list supported archive formats\"),\n+\t\t\tN_(\"list supported archive formats\")),\n \t\tOPT_GROUP(\"\"),\n-\t\tOPT_STRING(0, \"remote\", &remote, \"repo\",\n-\t\t\t\"retrieve the archive from remote repository <repo>\"),\n-\t\tOPT_STRING(0, \"exec\", &exec, \"cmd\",\n-\t\t\t\"path to the remote git-upload-archive command\"),\n+\t\tOPT_STRING(0, \"remote\", &remote, N_(\"repo\"),\n+\t\t\tN_(\"retrieve the archive from remote repository <repo>\")),\n+\t\tOPT_STRING(0, \"exec\", &exec, N_(\"cmd\"),\n+\t\t\tN_(\"path to the remote git-upload-archive command\")),\n \t\tOPT_END()\n \t};\n \ndiff --git a/builtin/archive.c b/builtin/archive.c\nindex 931956d..e7965bf 100644\n--- a/builtin/archive.c\n+++ b/builtin/archive.c\n@@ -88,12 +88,12 @@ int cmd_archive(int argc, const char **argv, const char *prefix)\n \tconst char *output = NULL;\n \tconst char *remote = NULL;\n \tstruct option local_opts[] = {\n-\t\tOPT_STRING('o', \"output\", &output, \"file\",\n-\t\t\t\"write the archive to this file\"),\n-\t\tOPT_STRING(0, \"remote\", &remote, \"repo\",\n-\t\t\t\"retrieve the archive from remote repository <repo>\"),\n-\t\tOPT_STRING(0, \"exec\", &exec, \"cmd\",\n-\t\t\t\"path to the remote git-upload-archive command\"),\n+\t\tOPT_STRING('o', \"output\", &output, N_(\"file\"),\n+\t\t\tN_(\"write the archive to this file\")),\n+\t\tOPT_STRING(0, \"remote\", &remote, N_(\"repo\"),\n+\t\t\tN_(\"retrieve the archive from remote repository <repo>\")),\n+\t\tOPT_STRING(0, \"exec\", &exec, N_(\"cmd\"),\n+\t\t\tN_(\"path to the remote git-upload-archive command\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192319","messageId":"1338203657-26486-2-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 04/65] i18n: add: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:16Z","receivedAt":"2012-05-28T11:13:16Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/add.c | 26 +++++++++++++-------------\n 1 file changed, 13 insertions(+), 13 deletions(-)\n\ndiff --git a/builtin/add.c b/builtin/add.c\nindex b79336d..6f7c7e1 100644\n--- a/builtin/add.c\n+++ b/builtin/add.c\n@@ -16,7 +16,7 @@\n #include \"bulk-checkin.h\"\n \n static const char * const builtin_add_usage[] = {\n-\t\"git add [options] [--] <filepattern>...\",\n+\tN_(\"git add [options] [--] <filepattern>...\"),\n \tNULL\n };\n static int patch_interactive, add_interactive, edit_interactive;\n@@ -315,19 +315,19 @@ static int verbose = 0, show_only = 0, ignored_too = 0, refresh_only = 0;\n static int ignore_add_errors, addremove, intent_to_add, ignore_missing = 0;\n \n static struct option builtin_add_options[] = {\n-\tOPT__DRY_RUN(&show_only, \"dry run\"),\n-\tOPT__VERBOSE(&verbose, \"be verbose\"),\n+\tOPT__DRY_RUN(&show_only, N_(\"dry run\")),\n+\tOPT__VERBOSE(&verbose, N_(\"be verbose\")),\n \tOPT_GROUP(\"\"),\n-\tOPT_BOOLEAN('i', \"interactive\", &add_interactive, \"interactive picking\"),\n-\tOPT_BOOLEAN('p', \"patch\", &patch_interactive, \"select hunks interactively\"),\n-\tOPT_BOOLEAN('e', \"edit\", &edit_interactive, \"edit current diff and apply\"),\n-\tOPT__FORCE(&ignored_too, \"allow adding otherwise ignored files\"),\n-\tOPT_BOOLEAN('u', \"update\", &take_worktree_changes, \"update tracked files\"),\n-\tOPT_BOOLEAN('N', \"intent-to-add\", &intent_to_add, \"record only the fact that the path will be added later\"),\n-\tOPT_BOOLEAN('A', \"all\", &addremove, \"add changes from all tracked and untracked files\"),\n-\tOPT_BOOLEAN( 0 , \"refresh\", &refresh_only, \"don't add, only refresh the index\"),\n-\tOPT_BOOLEAN( 0 , \"ignore-errors\", &ignore_add_errors, \"just skip files which cannot be added because of errors\"),\n-\tOPT_BOOLEAN( 0 , \"ignore-missing\", &ignore_missing, \"check if - even missing - files are ignored in dry run\"),\n+\tOPT_BOOLEAN('i', \"interactive\", &add_interactive, N_(\"interactive picking\")),\n+\tOPT_BOOLEAN('p', \"patch\", &patch_interactive, N_(\"select hunks interactively\")),\n+\tOPT_BOOLEAN('e', \"edit\", &edit_interactive, N_(\"edit current diff and apply\")),\n+\tOPT__FORCE(&ignored_too, N_(\"allow adding otherwise ignored files\")),\n+\tOPT_BOOLEAN('u', \"update\", &take_worktree_changes, N_(\"update tracked files\")),\n+\tOPT_BOOLEAN('N', \"intent-to-add\", &intent_to_add, N_(\"record only the fact that the path will be added later\")),\n+\tOPT_BOOLEAN('A', \"all\", &addremove, N_(\"add changes from all tracked and untracked files\")),\n+\tOPT_BOOLEAN( 0 , \"refresh\", &refresh_only, N_(\"don't add, only refresh the index\")),\n+\tOPT_BOOLEAN( 0 , \"ignore-errors\", &ignore_add_errors, N_(\"just skip files which cannot be added because of errors\")),\n+\tOPT_BOOLEAN( 0 , \"ignore-missing\", &ignore_missing, N_(\"check if - even missing - files are ignored in dry run\")),\n \tOPT_END(),\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192320","messageId":"1338203657-26486-3-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 05/65] i18n: bisect--helper: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:17Z","receivedAt":"2012-05-28T11:13:17Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/bisect--helper.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c\nindex 8d325a5..e3884e3 100644\n--- a/builtin/bisect--helper.c\n+++ b/builtin/bisect--helper.c\n@@ -4,7 +4,7 @@\n #include \"bisect.h\"\n \n static const char * const git_bisect_helper_usage[] = {\n-\t\"git bisect--helper --next-all [--no-checkout]\",\n+\tN_(\"git bisect--helper --next-all [--no-checkout]\"),\n \tNULL\n };\n \n@@ -14,9 +14,9 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)\n \tint no_checkout = 0;\n \tstruct option options[] = {\n \t\tOPT_BOOLEAN(0, \"next-all\", &next_all,\n-\t\t\t    \"perform 'git bisect next'\"),\n+\t\t\t    N_(\"perform 'git bisect next'\")),\n \t\tOPT_BOOLEAN(0, \"no-checkout\", &no_checkout,\n-\t\t\t    \"update BISECT_HEAD instead of checking out the current commit\"),\n+\t\t\t    N_(\"update BISECT_HEAD instead of checking out the current commit\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192321","messageId":"1338203657-26486-4-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 06/65] i18n: blame: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:18Z","receivedAt":"2012-05-28T11:13:18Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/blame.c | 46 +++++++++++++++++++++++-----------------------\n 1 file changed, 23 insertions(+), 23 deletions(-)\n\ndiff --git a/builtin/blame.c b/builtin/blame.c\nindex 24d3dd5..fe8aa4d 100644\n--- a/builtin/blame.c\n+++ b/builtin/blame.c\n@@ -22,12 +22,12 @@\n #include \"utf8.h\"\n #include \"userdiff.h\"\n \n-static char blame_usage[] = \"git blame [options] [rev-opts] [rev] [--] file\";\n+static char blame_usage[] = N_(\"git blame [options] [rev-opts] [rev] [--] file\");\n \n static const char *blame_opt_usage[] = {\n \tblame_usage,\n \t\"\",\n-\t\"[rev-opts] are documented in git-rev-list(1)\",\n+\tN_(\"[rev-opts] are documented in git-rev-list(1)\"),\n \tNULL\n };\n \n@@ -2296,27 +2296,27 @@ int cmd_blame(int argc, const char **argv, const char *prefix)\n \tstatic const char *revs_file = NULL;\n \tstatic const char *contents_from = NULL;\n \tstatic const struct option options[] = {\n-\t\tOPT_BOOLEAN(0, \"incremental\", &incremental, \"Show blame entries as we find them, incrementally\"),\n-\t\tOPT_BOOLEAN('b', NULL, &blank_boundary, \"Show blank SHA-1 for boundary commits (Default: off)\"),\n-\t\tOPT_BOOLEAN(0, \"root\", &show_root, \"Do not treat root commits as boundaries (Default: off)\"),\n-\t\tOPT_BOOLEAN(0, \"show-stats\", &show_stats, \"Show work cost statistics\"),\n-\t\tOPT_BIT(0, \"score-debug\", &output_option, \"Show output score for blame entries\", OUTPUT_SHOW_SCORE),\n-\t\tOPT_BIT('f', \"show-name\", &output_option, \"Show original filename (Default: auto)\", OUTPUT_SHOW_NAME),\n-\t\tOPT_BIT('n', \"show-number\", &output_option, \"Show original linenumber (Default: off)\", OUTPUT_SHOW_NUMBER),\n-\t\tOPT_BIT('p', \"porcelain\", &output_option, \"Show in a format designed for machine consumption\", OUTPUT_PORCELAIN),\n-\t\tOPT_BIT(0, \"line-porcelain\", &output_option, \"Show porcelain format with per-line commit information\", OUTPUT_PORCELAIN|OUTPUT_LINE_PORCELAIN),\n-\t\tOPT_BIT('c', NULL, &output_option, \"Use the same output mode as git-annotate (Default: off)\", OUTPUT_ANNOTATE_COMPAT),\n-\t\tOPT_BIT('t', NULL, &output_option, \"Show raw timestamp (Default: off)\", OUTPUT_RAW_TIMESTAMP),\n-\t\tOPT_BIT('l', NULL, &output_option, \"Show long commit SHA1 (Default: off)\", OUTPUT_LONG_OBJECT_NAME),\n-\t\tOPT_BIT('s', NULL, &output_option, \"Suppress author name and timestamp (Default: off)\", OUTPUT_NO_AUTHOR),\n-\t\tOPT_BIT('e', \"show-email\", &output_option, \"Show author email instead of name (Default: off)\", OUTPUT_SHOW_EMAIL),\n-\t\tOPT_BIT('w', NULL, &xdl_opts, \"Ignore whitespace differences\", XDF_IGNORE_WHITESPACE),\n-\t\tOPT_BIT(0, \"minimal\", &xdl_opts, \"Spend extra cycles to find better match\", XDF_NEED_MINIMAL),\n-\t\tOPT_STRING('S', NULL, &revs_file, \"file\", \"Use revisions from <file> instead of calling git-rev-list\"),\n-\t\tOPT_STRING(0, \"contents\", &contents_from, \"file\", \"Use <file>'s contents as the final image\"),\n-\t\t{ OPTION_CALLBACK, 'C', NULL, &opt, \"score\", \"Find line copies within and across files\", PARSE_OPT_OPTARG, blame_copy_callback },\n-\t\t{ OPTION_CALLBACK, 'M', NULL, &opt, \"score\", \"Find line movements within and across files\", PARSE_OPT_OPTARG, blame_move_callback },\n-\t\tOPT_CALLBACK('L', NULL, &bottomtop, \"n,m\", \"Process only line range n,m, counting from 1\", blame_bottomtop_callback),\n+\t\tOPT_BOOLEAN(0, \"incremental\", &incremental, N_(\"Show blame entries as we find them, incrementally\")),\n+\t\tOPT_BOOLEAN('b', NULL, &blank_boundary, N_(\"Show blank SHA-1 for boundary commits (Default: off)\")),\n+\t\tOPT_BOOLEAN(0, \"root\", &show_root, N_(\"Do not treat root commits as boundaries (Default: off)\")),\n+\t\tOPT_BOOLEAN(0, \"show-stats\", &show_stats, N_(\"Show work cost statistics\")),\n+\t\tOPT_BIT(0, \"score-debug\", &output_option, N_(\"Show output score for blame entries\"), OUTPUT_SHOW_SCORE),\n+\t\tOPT_BIT('f', \"show-name\", &output_option, N_(\"Show original filename (Default: auto)\"), OUTPUT_SHOW_NAME),\n+\t\tOPT_BIT('n', \"show-number\", &output_option, N_(\"Show original linenumber (Default: off)\"), OUTPUT_SHOW_NUMBER),\n+\t\tOPT_BIT('p', \"porcelain\", &output_option, N_(\"Show in a format designed for machine consumption\"), OUTPUT_PORCELAIN),\n+\t\tOPT_BIT(0, \"line-porcelain\", &output_option, N_(\"Show porcelain format with per-line commit information\"), OUTPUT_PORCELAIN|OUTPUT_LINE_PORCELAIN),\n+\t\tOPT_BIT('c', NULL, &output_option, N_(\"Use the same output mode as git-annotate (Default: off)\"), OUTPUT_ANNOTATE_COMPAT),\n+\t\tOPT_BIT('t', NULL, &output_option, N_(\"Show raw timestamp (Default: off)\"), OUTPUT_RAW_TIMESTAMP),\n+\t\tOPT_BIT('l', NULL, &output_option, N_(\"Show long commit SHA1 (Default: off)\"), OUTPUT_LONG_OBJECT_NAME),\n+\t\tOPT_BIT('s', NULL, &output_option, N_(\"Suppress author name and timestamp (Default: off)\"), OUTPUT_NO_AUTHOR),\n+\t\tOPT_BIT('e', \"show-email\", &output_option, N_(\"Show author email instead of name (Default: off)\"), OUTPUT_SHOW_EMAIL),\n+\t\tOPT_BIT('w', NULL, &xdl_opts, N_(\"Ignore whitespace differences\"), XDF_IGNORE_WHITESPACE),\n+\t\tOPT_BIT(0, \"minimal\", &xdl_opts, N_(\"Spend extra cycles to find better match\"), XDF_NEED_MINIMAL),\n+\t\tOPT_STRING('S', NULL, &revs_file, N_(\"file\"), N_(\"Use revisions from <file> instead of calling git-rev-list\")),\n+\t\tOPT_STRING(0, \"contents\", &contents_from, N_(\"file\"), N_(\"Use <file>'s contents as the final image\")),\n+\t\t{ OPTION_CALLBACK, 'C', NULL, &opt, N_(\"score\"), N_(\"Find line copies within and across files\"), PARSE_OPT_OPTARG, blame_copy_callback },\n+\t\t{ OPTION_CALLBACK, 'M', NULL, &opt, N_(\"score\"), N_(\"Find line movements within and across files\"), PARSE_OPT_OPTARG, blame_move_callback },\n+\t\tOPT_CALLBACK('L', NULL, &bottomtop, N_(\"n,m\"), N_(\"Process only line range n,m, counting from 1\"), blame_bottomtop_callback),\n \t\tOPT__ABBREV(&abbrev),\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192322","messageId":"1338203657-26486-5-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 07/65] i18n: branch: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:19Z","receivedAt":"2012-05-28T11:13:19Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/branch.c | 54 +++++++++++++++++++++++++++---------------------------\n 1 file changed, 27 insertions(+), 27 deletions(-)\n\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex 0e060f2..f9135ed 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -19,10 +19,10 @@\n #include \"column.h\"\n \n static const char * const builtin_branch_usage[] = {\n-\t\"git branch [options] [-r | -a] [--merged | --no-merged]\",\n-\t\"git branch [options] [-l] [-f] <branchname> [<start-point>]\",\n-\t\"git branch [options] [-r] (-d | -D) <branchname>...\",\n-\t\"git branch [options] (-m | -M) [<oldbranch>] <newbranch>\",\n+\tN_(\"git branch [options] [-r | -a] [--merged | --no-merged]\"),\n+\tN_(\"git branch [options] [-l] [-f] <branchname> [<start-point>]\"),\n+\tN_(\"git branch [options] [-r] (-d | -D) <branchname>...\"),\n+\tN_(\"git branch [options] (-m | -M) [<oldbranch>] <newbranch>\"),\n \tNULL\n };\n \n@@ -718,52 +718,52 @@ int cmd_branch(int argc, const char **argv, const char *prefix)\n \tstruct commit_list *with_commit = NULL;\n \n \tstruct option options[] = {\n-\t\tOPT_GROUP(\"Generic options\"),\n+\t\tOPT_GROUP(N_(\"Generic options\")),\n \t\tOPT__VERBOSE(&verbose,\n-\t\t\t\"show hash and subject, give twice for upstream branch\"),\n-\t\tOPT__QUIET(&quiet, \"suppress informational messages\"),\n-\t\tOPT_SET_INT('t', \"track\",  &track, \"set up tracking mode (see git-pull(1))\",\n+\t\t\tN_(\"show hash and subject, give twice for upstream branch\")),\n+\t\tOPT__QUIET(&quiet, N_(\"suppress informational messages\")),\n+\t\tOPT_SET_INT('t', \"track\",  &track, N_(\"set up tracking mode (see git-pull(1))\"),\n \t\t\tBRANCH_TRACK_EXPLICIT),\n-\t\tOPT_SET_INT( 0, \"set-upstream\",  &track, \"change upstream info\",\n+\t\tOPT_SET_INT( 0, \"set-upstream\",  &track, N_(\"change upstream info\"),\n \t\t\tBRANCH_TRACK_OVERRIDE),\n-\t\tOPT__COLOR(&branch_use_color, \"use colored output\"),\n-\t\tOPT_SET_INT('r', \"remotes\",     &kinds, \"act on remote-tracking branches\",\n+\t\tOPT__COLOR(&branch_use_color, N_(\"use colored output\")),\n+\t\tOPT_SET_INT('r', \"remotes\",     &kinds, N_(\"act on remote-tracking branches\"),\n \t\t\tREF_REMOTE_BRANCH),\n \t\t{\n-\t\t\tOPTION_CALLBACK, 0, \"contains\", &with_commit, \"commit\",\n-\t\t\t\"print only branches that contain the commit\",\n+\t\t\tOPTION_CALLBACK, 0, \"contains\", &with_commit, N_(\"commit\"),\n+\t\t\tN_(\"print only branches that contain the commit\"),\n \t\t\tPARSE_OPT_LASTARG_DEFAULT,\n \t\t\tparse_opt_with_commit, (intptr_t)\"HEAD\",\n \t\t},\n \t\t{\n-\t\t\tOPTION_CALLBACK, 0, \"with\", &with_commit, \"commit\",\n-\t\t\t\"print only branches that contain the commit\",\n+\t\t\tOPTION_CALLBACK, 0, \"with\", &with_commit, N_(\"commit\"),\n+\t\t\tN_(\"print only branches that contain the commit\"),\n \t\t\tPARSE_OPT_HIDDEN | PARSE_OPT_LASTARG_DEFAULT,\n \t\t\tparse_opt_with_commit, (intptr_t) \"HEAD\",\n \t\t},\n \t\tOPT__ABBREV(&abbrev),\n \n-\t\tOPT_GROUP(\"Specific git-branch actions:\"),\n-\t\tOPT_SET_INT('a', \"all\", &kinds, \"list both remote-tracking and local branches\",\n+\t\tOPT_GROUP(N_(\"Specific git-branch actions:\")),\n+\t\tOPT_SET_INT('a', \"all\", &kinds, N_(\"list both remote-tracking and local branches\"),\n \t\t\tREF_REMOTE_BRANCH | REF_LOCAL_BRANCH),\n-\t\tOPT_BIT('d', \"delete\", &delete, \"delete fully merged branch\", 1),\n-\t\tOPT_BIT('D', NULL, &delete, \"delete branch (even if not merged)\", 2),\n-\t\tOPT_BIT('m', \"move\", &rename, \"move/rename a branch and its reflog\", 1),\n-\t\tOPT_BIT('M', NULL, &rename, \"move/rename a branch, even if target exists\", 2),\n-\t\tOPT_BOOLEAN(0, \"list\", &list, \"list branch names\"),\n-\t\tOPT_BOOLEAN('l', \"create-reflog\", &reflog, \"create the branch's reflog\"),\n+\t\tOPT_BIT('d', \"delete\", &delete, N_(\"delete fully merged branch\"), 1),\n+\t\tOPT_BIT('D', NULL, &delete, N_(\"delete branch (even if not merged)\"), 2),\n+\t\tOPT_BIT('m', \"move\", &rename, N_(\"move/rename a branch and its reflog\"), 1),\n+\t\tOPT_BIT('M', NULL, &rename, N_(\"move/rename a branch, even if target exists\"), 2),\n+\t\tOPT_BOOLEAN(0, \"list\", &list, N_(\"list branch names\")),\n+\t\tOPT_BOOLEAN('l', \"create-reflog\", &reflog, N_(\"create the branch's reflog\")),\n \t\tOPT_BOOLEAN(0, \"edit-description\", &edit_description,\n-\t\t\t    \"edit the description for the branch\"),\n-\t\tOPT__FORCE(&force_create, \"force creation (when already exists)\"),\n+\t\t\t    N_(\"edit the description for the branch\")),\n+\t\tOPT__FORCE(&force_create, N_(\"force creation (when already exists)\")),\n \t\t{\n \t\t\tOPTION_CALLBACK, 0, \"no-merged\", &merge_filter_ref,\n-\t\t\t\"commit\", \"print only not merged branches\",\n+\t\t\tN_(\"commit\"), N_(\"print only not merged branches\"),\n \t\t\tPARSE_OPT_LASTARG_DEFAULT | PARSE_OPT_NONEG,\n \t\t\topt_parse_merge_filter, (intptr_t) \"HEAD\",\n \t\t},\n \t\t{\n \t\t\tOPTION_CALLBACK, 0, \"merged\", &merge_filter_ref,\n-\t\t\t\"commit\", \"print only merged branches\",\n+\t\t\tN_(\"commit\"), N_(\"print only merged branches\"),\n \t\t\tPARSE_OPT_LASTARG_DEFAULT | PARSE_OPT_NONEG,\n \t\t\topt_parse_merge_filter, (intptr_t) \"HEAD\",\n \t\t},\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192323","messageId":"1338203657-26486-6-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 08/65] i18n: cat-file: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:20Z","receivedAt":"2012-05-28T11:13:20Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/cat-file.c | 20 ++++++++++----------\n 1 file changed, 10 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/cat-file.c b/builtin/cat-file.c\nindex 36a9104..fd08338 100644\n--- a/builtin/cat-file.c\n+++ b/builtin/cat-file.c\n@@ -244,8 +244,8 @@ static int batch_objects(int print_contents)\n }\n \n static const char * const cat_file_usage[] = {\n-\t\"git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>\",\n-\t\"git cat-file (--batch|--batch-check) < <list_of_objects>\",\n+\tN_(\"git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>\"),\n+\tN_(\"git cat-file (--batch|--batch-check) < <list_of_objects>\"),\n \tNULL\n };\n \n@@ -263,19 +263,19 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)\n \tconst char *exp_type = NULL, *obj_name = NULL;\n \n \tconst struct option options[] = {\n-\t\tOPT_GROUP(\"<type> can be one of: blob, tree, commit, tag\"),\n-\t\tOPT_SET_INT('t', NULL, &opt, \"show object type\", 't'),\n-\t\tOPT_SET_INT('s', NULL, &opt, \"show object size\", 's'),\n+\t\tOPT_GROUP(N_(\"<type> can be one of: blob, tree, commit, tag\")),\n+\t\tOPT_SET_INT('t', NULL, &opt, N_(\"show object type\"), 't'),\n+\t\tOPT_SET_INT('s', NULL, &opt, N_(\"show object size\"), 's'),\n \t\tOPT_SET_INT('e', NULL, &opt,\n-\t\t\t    \"exit with zero when there's no error\", 'e'),\n-\t\tOPT_SET_INT('p', NULL, &opt, \"pretty-print object's content\", 'p'),\n+\t\t\t    N_(\"exit with zero when there's no error\"), 'e'),\n+\t\tOPT_SET_INT('p', NULL, &opt, N_(\"pretty-print object's content\"), 'p'),\n \t\tOPT_SET_INT(0, \"textconv\", &opt,\n-\t\t\t    \"for blob objects, run textconv on object's content\", 'c'),\n+\t\t\t    N_(\"for blob objects, run textconv on object's content\"), 'c'),\n \t\tOPT_SET_INT(0, \"batch\", &batch,\n-\t\t\t    \"show info and content of objects fed from the standard input\",\n+\t\t\t    N_(\"show info and content of objects fed from the standard input\"),\n \t\t\t    BATCH),\n \t\tOPT_SET_INT(0, \"batch-check\", &batch,\n-\t\t\t    \"show info about objects fed from the standard input\",\n+\t\t\t    N_(\"show info about objects fed from the standard input\"),\n \t\t\t    BATCH_CHECK),\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192324","messageId":"1338203657-26486-7-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 09/65] i18n: check-attr: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:21Z","receivedAt":"2012-05-28T11:13:21Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/check-attr.c | 12 ++++++------\n 1 file changed, 6 insertions(+), 6 deletions(-)\n\ndiff --git a/builtin/check-attr.c b/builtin/check-attr.c\nindex 44c421e..e1ff575 100644\n--- a/builtin/check-attr.c\n+++ b/builtin/check-attr.c\n@@ -8,19 +8,19 @@ static int all_attrs;\n static int cached_attrs;\n static int stdin_paths;\n static const char * const check_attr_usage[] = {\n-\"git check-attr [-a | --all | attr...] [--] pathname...\",\n-\"git check-attr --stdin [-a | --all | attr...] < <list-of-paths>\",\n+N_(\"git check-attr [-a | --all | attr...] [--] pathname...\"),\n+N_(\"git check-attr --stdin [-a | --all | attr...] < <list-of-paths>\"),\n NULL\n };\n \n static int null_term_line;\n \n static const struct option check_attr_options[] = {\n-\tOPT_BOOLEAN('a', \"all\", &all_attrs, \"report all attributes set on file\"),\n-\tOPT_BOOLEAN(0,  \"cached\", &cached_attrs, \"use .gitattributes only from the index\"),\n-\tOPT_BOOLEAN(0 , \"stdin\", &stdin_paths, \"read file names from stdin\"),\n+\tOPT_BOOLEAN('a', \"all\", &all_attrs, N_(\"report all attributes set on file\")),\n+\tOPT_BOOLEAN(0,  \"cached\", &cached_attrs, N_(\"use .gitattributes only from the index\")),\n+\tOPT_BOOLEAN(0 , \"stdin\", &stdin_paths, N_(\"read file names from stdin\")),\n \tOPT_BOOLEAN('z', NULL, &null_term_line,\n-\t\t\"input paths are terminated by a null character\"),\n+\t\tN_(\"input paths are terminated by a null character\")),\n \tOPT_END()\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192325","messageId":"1338203657-26486-8-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 10/65] i18n: checkout-index: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:22Z","receivedAt":"2012-05-28T11:13:22Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/checkout-index.c | 24 ++++++++++++------------\n 1 file changed, 12 insertions(+), 12 deletions(-)\n\ndiff --git a/builtin/checkout-index.c b/builtin/checkout-index.c\nindex c16d82b..86b7d36 100644\n--- a/builtin/checkout-index.c\n+++ b/builtin/checkout-index.c\n@@ -123,7 +123,7 @@ static void checkout_all(const char *prefix, int prefix_length)\n }\n \n static const char * const builtin_checkout_index_usage[] = {\n-\t\"git checkout-index [options] [--] [<file>...]\",\n+\tN_(\"git checkout-index [options] [--] [<file>...]\"),\n \tNULL\n };\n \n@@ -184,27 +184,27 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)\n \tint force = 0, quiet = 0, not_new = 0;\n \tstruct option builtin_checkout_index_options[] = {\n \t\tOPT_BOOLEAN('a', \"all\", &all,\n-\t\t\t\"checks out all files in the index\"),\n-\t\tOPT__FORCE(&force, \"forces overwrite of existing files\"),\n+\t\t\tN_(\"checks out all files in the index\")),\n+\t\tOPT__FORCE(&force, N_(\"forces overwrite of existing files\")),\n \t\tOPT__QUIET(&quiet,\n-\t\t\t\"no warning for existing files and files not in index\"),\n+\t\t\tN_(\"no warning for existing files and files not in index\")),\n \t\tOPT_BOOLEAN('n', \"no-create\", &not_new,\n-\t\t\t\"don't checkout new files\"),\n+\t\t\tN_(\"don't checkout new files\")),\n \t\t{ OPTION_CALLBACK, 'u', \"index\", &newfd, NULL,\n-\t\t\t\"update stat information in the index file\",\n+\t\t\tN_(\"update stat information in the index file\"),\n \t\t\tPARSE_OPT_NOARG, option_parse_u },\n \t\t{ OPTION_CALLBACK, 'z', NULL, NULL, NULL,\n-\t\t\t\"paths are separated with NUL character\",\n+\t\t\tN_(\"paths are separated with NUL character\"),\n \t\t\tPARSE_OPT_NOARG, option_parse_z },\n \t\tOPT_BOOLEAN(0, \"stdin\", &read_from_stdin,\n-\t\t\t\"read list of paths from the standard input\"),\n+\t\t\tN_(\"read list of paths from the standard input\")),\n \t\tOPT_BOOLEAN(0, \"temp\", &to_tempfile,\n-\t\t\t\"write the content to temporary files\"),\n-\t\tOPT_CALLBACK(0, \"prefix\", NULL, \"string\",\n-\t\t\t\"when creating files, prepend <string>\",\n+\t\t\tN_(\"write the content to temporary files\")),\n+\t\tOPT_CALLBACK(0, \"prefix\", NULL, N_(\"string\"),\n+\t\t\tN_(\"when creating files, prepend <string>\"),\n \t\t\toption_parse_prefix),\n \t\tOPT_CALLBACK(0, \"stage\", NULL, NULL,\n-\t\t\t\"copy out the files from named stage\",\n+\t\t\tN_(\"copy out the files from named stage\"),\n \t\t\toption_parse_stage),\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192327","messageId":"1338203657-26486-9-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 11/65] i18n: checkout: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:23Z","receivedAt":"2012-05-28T11:13:23Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/checkout.c | 40 ++++++++++++++++++++--------------------\n 1 file changed, 20 insertions(+), 20 deletions(-)\n\ndiff --git a/builtin/checkout.c b/builtin/checkout.c\nindex e8c1b1f..77d2b5a 100644\n--- a/builtin/checkout.c\n+++ b/builtin/checkout.c\n@@ -22,8 +22,8 @@\n #include \"argv-array.h\"\n \n static const char * const checkout_usage[] = {\n-\t\"git checkout [options] <branch>\",\n-\t\"git checkout [options] [<branch>] -- <file>...\",\n+\tN_(\"git checkout [options] <branch>\"),\n+\tN_(\"git checkout [options] [<branch>] -- <file>...\"),\n \tNULL,\n };\n \n@@ -931,28 +931,28 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)\n \tint patch_mode = 0;\n \tint dwim_new_local_branch = 1;\n \tstruct option options[] = {\n-\t\tOPT__QUIET(&opts.quiet, \"suppress progress reporting\"),\n-\t\tOPT_STRING('b', NULL, &opts.new_branch, \"branch\",\n-\t\t\t   \"create and checkout a new branch\"),\n-\t\tOPT_STRING('B', NULL, &opts.new_branch_force, \"branch\",\n-\t\t\t   \"create/reset and checkout a branch\"),\n-\t\tOPT_BOOLEAN('l', NULL, &opts.new_branch_log, \"create reflog for new branch\"),\n-\t\tOPT_BOOLEAN(0, \"detach\", &opts.force_detach, \"detach the HEAD at named commit\"),\n-\t\tOPT_SET_INT('t', \"track\",  &opts.track, \"set upstream info for new branch\",\n+\t\tOPT__QUIET(&opts.quiet, N_(\"suppress progress reporting\")),\n+\t\tOPT_STRING('b', NULL, &opts.new_branch, N_(\"branch\"),\n+\t\t\t   N_(\"create and checkout a new branch\")),\n+\t\tOPT_STRING('B', NULL, &opts.new_branch_force, N_(\"branch\"),\n+\t\t\t   N_(\"create/reset and checkout a branch\")),\n+\t\tOPT_BOOLEAN('l', NULL, &opts.new_branch_log, N_(\"create reflog for new branch\")),\n+\t\tOPT_BOOLEAN(0, \"detach\", &opts.force_detach, N_(\"detach the HEAD at named commit\")),\n+\t\tOPT_SET_INT('t', \"track\",  &opts.track, N_(\"set upstream info for new branch\"),\n \t\t\tBRANCH_TRACK_EXPLICIT),\n-\t\tOPT_STRING(0, \"orphan\", &opts.new_orphan_branch, \"new branch\", \"new unparented branch\"),\n-\t\tOPT_SET_INT('2', \"ours\", &opts.writeout_stage, \"checkout our version for unmerged files\",\n+\t\tOPT_STRING(0, \"orphan\", &opts.new_orphan_branch, N_(\"new branch\"), N_(\"new unparented branch\")),\n+\t\tOPT_SET_INT('2', \"ours\", &opts.writeout_stage, N_(\"checkout our version for unmerged files\"),\n \t\t\t    2),\n-\t\tOPT_SET_INT('3', \"theirs\", &opts.writeout_stage, \"checkout their version for unmerged files\",\n+\t\tOPT_SET_INT('3', \"theirs\", &opts.writeout_stage, N_(\"checkout their version for unmerged files\"),\n \t\t\t    3),\n-\t\tOPT__FORCE(&opts.force, \"force checkout (throw away local modifications)\"),\n-\t\tOPT_BOOLEAN('m', \"merge\", &opts.merge, \"perform a 3-way merge with the new branch\"),\n-\t\tOPT_BOOLEAN(0, \"overwrite-ignore\", &opts.overwrite_ignore, \"update ignored files (default)\"),\n-\t\tOPT_STRING(0, \"conflict\", &conflict_style, \"style\",\n-\t\t\t   \"conflict style (merge or diff3)\"),\n-\t\tOPT_BOOLEAN('p', \"patch\", &patch_mode, \"select hunks interactively\"),\n+\t\tOPT__FORCE(&opts.force, N_(\"force checkout (throw away local modifications)\")),\n+\t\tOPT_BOOLEAN('m', \"merge\", &opts.merge, N_(\"perform a 3-way merge with the new branch\")),\n+\t\tOPT_BOOLEAN(0, \"overwrite-ignore\", &opts.overwrite_ignore, N_(\"update ignored files (default)\")),\n+\t\tOPT_STRING(0, \"conflict\", &conflict_style, N_(\"style\"),\n+\t\t\t   N_(\"conflict style (merge or diff3)\")),\n+\t\tOPT_BOOLEAN('p', \"patch\", &patch_mode, N_(\"select hunks interactively\")),\n \t\t{ OPTION_BOOLEAN, 0, \"guess\", &dwim_new_local_branch, NULL,\n-\t\t  \"second guess 'git checkout no-such-branch'\",\n+\t\t  N_(\"second guess 'git checkout no-such-branch'\"),\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },\n \t\tOPT_END(),\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192326","messageId":"1338203657-26486-10-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 12/65] i18n: cherry: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:24Z","receivedAt":"2012-05-28T11:13:24Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/log.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/builtin/log.c b/builtin/log.c\nindex 690caa7..6282ed2 100644\n--- a/builtin/log.c\n+++ b/builtin/log.c\n@@ -1462,7 +1462,7 @@ static int add_pending_commit(const char *arg, struct rev_info *revs, int flags)\n }\n \n static const char * const cherry_usage[] = {\n-\t\"git cherry [-v] [<upstream> [<head> [<limit>]]]\",\n+\tN_(\"git cherry [-v] [<upstream> [<head> [<limit>]]]\"),\n \tNULL\n };\n \n@@ -1496,7 +1496,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)\n \n \tstruct option options[] = {\n \t\tOPT__ABBREV(&abbrev),\n-\t\tOPT__VERBOSE(&verbose, \"be verbose\"),\n+\t\tOPT__VERBOSE(&verbose, N_(\"be verbose\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192328","messageId":"1338203657-26486-11-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 13/65] i18n: clean: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:25Z","receivedAt":"2012-05-28T11:13:25Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/clean.c | 18 +++++++++---------\n 1 file changed, 9 insertions(+), 9 deletions(-)\n\ndiff --git a/builtin/clean.c b/builtin/clean.c\nindex 0c7b3d0..69c1cda 100644\n--- a/builtin/clean.c\n+++ b/builtin/clean.c\n@@ -16,7 +16,7 @@\n static int force = -1; /* unset */\n \n static const char *const builtin_clean_usage[] = {\n-\t\"git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>...\",\n+\tN_(\"git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>...\"),\n \tNULL\n };\n \n@@ -48,16 +48,16 @@ int cmd_clean(int argc, const char **argv, const char *prefix)\n \tconst char *qname;\n \tchar *seen = NULL;\n \tstruct option options[] = {\n-\t\tOPT__QUIET(&quiet, \"do not print names of files removed\"),\n-\t\tOPT__DRY_RUN(&show_only, \"dry run\"),\n-\t\tOPT__FORCE(&force, \"force\"),\n+\t\tOPT__QUIET(&quiet, N_(\"do not print names of files removed\")),\n+\t\tOPT__DRY_RUN(&show_only, N_(\"dry run\")),\n+\t\tOPT__FORCE(&force, N_(\"force\")),\n \t\tOPT_BOOLEAN('d', NULL, &remove_directories,\n-\t\t\t\t\"remove whole directories\"),\n-\t\t{ OPTION_CALLBACK, 'e', \"exclude\", &exclude_list, \"pattern\",\n-\t\t  \"add <pattern> to ignore rules\", PARSE_OPT_NONEG, exclude_cb },\n-\t\tOPT_BOOLEAN('x', NULL, &ignored, \"remove ignored files, too\"),\n+\t\t\t\tN_(\"remove whole directories\")),\n+\t\t{ OPTION_CALLBACK, 'e', \"exclude\", &exclude_list, N_(\"pattern\"),\n+\t\t  N_(\"add <pattern> to ignore rules\"), PARSE_OPT_NONEG, exclude_cb },\n+\t\tOPT_BOOLEAN('x', NULL, &ignored, N_(\"remove ignored files, too\")),\n \t\tOPT_BOOLEAN('X', NULL, &ignored_only,\n-\t\t\t\t\"remove only ignored files\"),\n+\t\t\t\tN_(\"remove only ignored files\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192329","messageId":"1338203657-26486-12-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 14/65] i18n: clone: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:26Z","receivedAt":"2012-05-28T11:13:26Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/clone.c | 56 ++++++++++++++++++++++++++++----------------------------\n 1 file changed, 28 insertions(+), 28 deletions(-)\n\ndiff --git a/builtin/clone.c b/builtin/clone.c\nindex a4d8d25..579319c 100644\n--- a/builtin/clone.c\n+++ b/builtin/clone.c\n@@ -33,7 +33,7 @@\n  *\n  */\n static const char * const builtin_clone_usage[] = {\n-\t\"git clone [options] [--] <repo> [<dir>]\",\n+\tN_(\"git clone [options] [--] <repo> [<dir>]\"),\n \tNULL\n };\n \n@@ -61,43 +61,43 @@ static int opt_parse_reference(const struct option *opt, const char *arg, int un\n static struct option builtin_clone_options[] = {\n \tOPT__VERBOSITY(&option_verbosity),\n \tOPT_BOOL(0, \"progress\", &option_progress,\n-\t\t \"force progress reporting\"),\n+\t\t N_(\"force progress reporting\")),\n \tOPT_BOOLEAN('n', \"no-checkout\", &option_no_checkout,\n-\t\t    \"don't create a checkout\"),\n-\tOPT_BOOLEAN(0, \"bare\", &option_bare, \"create a bare repository\"),\n+\t\t    N_(\"don't create a checkout\")),\n+\tOPT_BOOLEAN(0, \"bare\", &option_bare, N_(\"create a bare repository\")),\n \t{ OPTION_BOOLEAN, 0, \"naked\", &option_bare, NULL,\n-\t\t\"create a bare repository\",\n+\t\tN_(\"create a bare repository\"),\n \t\tPARSE_OPT_NOARG | PARSE_OPT_HIDDEN },\n \tOPT_BOOLEAN(0, \"mirror\", &option_mirror,\n-\t\t    \"create a mirror repository (implies bare)\"),\n+\t\t    N_(\"create a mirror repository (implies bare)\")),\n \tOPT_BOOLEAN('l', \"local\", &option_local,\n-\t\t    \"to clone from a local repository\"),\n+\t\t    N_(\"to clone from a local repository\")),\n \tOPT_BOOLEAN(0, \"no-hardlinks\", &option_no_hardlinks,\n-\t\t    \"don't use local hardlinks, always copy\"),\n+\t\t    N_(\"don't use local hardlinks, always copy\")),\n \tOPT_BOOLEAN('s', \"shared\", &option_shared,\n-\t\t    \"setup as shared repository\"),\n+\t\t    N_(\"setup as shared repository\")),\n \tOPT_BOOLEAN(0, \"recursive\", &option_recursive,\n-\t\t    \"initialize submodules in the clone\"),\n+\t\t    N_(\"initialize submodules in the clone\")),\n \tOPT_BOOLEAN(0, \"recurse-submodules\", &option_recursive,\n-\t\t    \"initialize submodules in the clone\"),\n-\tOPT_STRING(0, \"template\", &option_template, \"template-directory\",\n-\t\t   \"directory from which templates will be used\"),\n-\tOPT_CALLBACK(0 , \"reference\", &option_reference, \"repo\",\n-\t\t     \"reference repository\", &opt_parse_reference),\n-\tOPT_STRING('o', \"origin\", &option_origin, \"name\",\n-\t\t   \"use <name> instead of 'origin' to track upstream\"),\n-\tOPT_STRING('b', \"branch\", &option_branch, \"branch\",\n-\t\t   \"checkout <branch> instead of the remote's HEAD\"),\n-\tOPT_STRING('u', \"upload-pack\", &option_upload_pack, \"path\",\n-\t\t   \"path to git-upload-pack on the remote\"),\n-\tOPT_STRING(0, \"depth\", &option_depth, \"depth\",\n-\t\t    \"create a shallow clone of that depth\"),\n+\t\t    N_(\"initialize submodules in the clone\")),\n+\tOPT_STRING(0, \"template\", &option_template, N_(\"template-directory\"),\n+\t\t   N_(\"directory from which templates will be used\")),\n+\tOPT_CALLBACK(0 , \"reference\", &option_reference, N_(\"repo\"),\n+\t\t     N_(\"reference repository\"), &opt_parse_reference),\n+\tOPT_STRING('o', \"origin\", &option_origin, N_(\"name\"),\n+\t\t   N_(\"use <name> instead of 'origin' to track upstream\")),\n+\tOPT_STRING('b', \"branch\", &option_branch, N_(\"branch\"),\n+\t\t   N_(\"checkout <branch> instead of the remote's HEAD\")),\n+\tOPT_STRING('u', \"upload-pack\", &option_upload_pack, N_(\"path\"),\n+\t\t   N_(\"path to git-upload-pack on the remote\")),\n+\tOPT_STRING(0, \"depth\", &option_depth, N_(\"depth\"),\n+\t\t    N_(\"create a shallow clone of that depth\")),\n \tOPT_BOOL(0, \"single-branch\", &option_single_branch,\n-\t\t    \"clone only one branch, HEAD or --branch\"),\n-\tOPT_STRING(0, \"separate-git-dir\", &real_git_dir, \"gitdir\",\n-\t\t   \"separate git dir from working tree\"),\n-\tOPT_STRING_LIST('c', \"config\", &option_config, \"key=value\",\n-\t\t\t\"set config inside the new repository\"),\n+\t\t    N_(\"clone only one branch, HEAD or --branch\")),\n+\tOPT_STRING(0, \"separate-git-dir\", &real_git_dir, N_(\"gitdir\"),\n+\t\t   N_(\"separate git dir from working tree\")),\n+\tOPT_STRING_LIST('c', \"config\", &option_config, N_(\"key=value\"),\n+\t\t\tN_(\"set config inside the new repository\")),\n \tOPT_END()\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192331","messageId":"1338203657-26486-13-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 15/65] i18n: column: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:27Z","receivedAt":"2012-05-28T11:13:27Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/column.c | 16 ++++++++--------\n 1 file changed, 8 insertions(+), 8 deletions(-)\n\ndiff --git a/builtin/column.c b/builtin/column.c\nindex 5ea798a..e125a55 100644\n--- a/builtin/column.c\n+++ b/builtin/column.c\n@@ -6,7 +6,7 @@\n #include \"column.h\"\n \n static const char * const builtin_column_usage[] = {\n-\t\"git column [options]\",\n+\tN_(\"git column [options]\"),\n \tNULL\n };\n static unsigned int colopts;\n@@ -23,13 +23,13 @@ int cmd_column(int argc, const char **argv, const char *prefix)\n \tstruct column_options copts;\n \tconst char *command = NULL, *real_command = NULL;\n \tstruct option options[] = {\n-\t\tOPT_STRING(0, \"command\", &real_command, \"name\", \"lookup config vars\"),\n-\t\tOPT_COLUMN(0, \"mode\", &colopts, \"layout to use\"),\n-\t\tOPT_INTEGER(0, \"raw-mode\", &colopts, \"layout to use\"),\n-\t\tOPT_INTEGER(0, \"width\", &copts.width, \"Maximum width\"),\n-\t\tOPT_STRING(0, \"indent\", &copts.indent, \"string\", \"Padding space on left border\"),\n-\t\tOPT_INTEGER(0, \"nl\", &copts.nl, \"Padding space on right border\"),\n-\t\tOPT_INTEGER(0, \"padding\", &copts.padding, \"Padding space between columns\"),\n+\t\tOPT_STRING(0, \"command\", &real_command, N_(\"name\"), N_(\"lookup config vars\")),\n+\t\tOPT_COLUMN(0, \"mode\", &colopts, N_(\"layout to use\")),\n+\t\tOPT_INTEGER(0, \"raw-mode\", &colopts, N_(\"layout to use\")),\n+\t\tOPT_INTEGER(0, \"width\", &copts.width, N_(\"Maximum width\")),\n+\t\tOPT_STRING(0, \"indent\", &copts.indent, N_(\"string\"), N_(\"Padding space on left border\")),\n+\t\tOPT_INTEGER(0, \"nl\", &copts.nl, N_(\"Padding space on right border\")),\n+\t\tOPT_INTEGER(0, \"padding\", &copts.padding, N_(\"Padding space between columns\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192330","messageId":"1338203657-26486-14-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 16/65] i18n: commit: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:28Z","receivedAt":"2012-05-28T11:13:28Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/commit.c | 76 ++++++++++++++++++++++++++++----------------------------\n 1 file changed, 38 insertions(+), 38 deletions(-)\n\ndiff --git a/builtin/commit.c b/builtin/commit.c\nindex a2ec73d..34d723b 100644\n--- a/builtin/commit.c\n+++ b/builtin/commit.c\n@@ -30,7 +30,7 @@\n #include \"column.h\"\n \n static const char * const builtin_commit_usage[] = {\n-\t\"git commit [options] [--] <filepattern>...\",\n+\tN_(\"git commit [options] [--] <filepattern>...\"),\n \tNULL\n };\n \n@@ -1367,53 +1367,53 @@ int cmd_commit(int argc, const char **argv, const char *prefix)\n {\n \tstatic struct wt_status s;\n \tstatic struct option builtin_commit_options[] = {\n-\t\tOPT__QUIET(&quiet, \"suppress summary after successful commit\"),\n-\t\tOPT__VERBOSE(&verbose, \"show diff in commit message template\"),\n-\n-\t\tOPT_GROUP(\"Commit message options\"),\n-\t\tOPT_FILENAME('F', \"file\", &logfile, \"read message from file\"),\n-\t\tOPT_STRING(0, \"author\", &force_author, \"author\", \"override author for commit\"),\n-\t\tOPT_STRING(0, \"date\", &force_date, \"date\", \"override date for commit\"),\n-\t\tOPT_CALLBACK('m', \"message\", &message, \"message\", \"commit message\", opt_parse_m),\n-\t\tOPT_STRING('c', \"reedit-message\", &edit_message, \"commit\", \"reuse and edit message from specified commit\"),\n-\t\tOPT_STRING('C', \"reuse-message\", &use_message, \"commit\", \"reuse message from specified commit\"),\n-\t\tOPT_STRING(0, \"fixup\", &fixup_message, \"commit\", \"use autosquash formatted message to fixup specified commit\"),\n-\t\tOPT_STRING(0, \"squash\", &squash_message, \"commit\", \"use autosquash formatted message to squash specified commit\"),\n-\t\tOPT_BOOLEAN(0, \"reset-author\", &renew_authorship, \"the commit is authored by me now (used with -C/-c/--amend)\"),\n-\t\tOPT_BOOLEAN('s', \"signoff\", &signoff, \"add Signed-off-by:\"),\n-\t\tOPT_FILENAME('t', \"template\", &template_file, \"use specified template file\"),\n-\t\tOPT_BOOL('e', \"edit\", &edit_flag, \"force edit of commit\"),\n-\t\tOPT_STRING(0, \"cleanup\", &cleanup_arg, \"default\", \"how to strip spaces and #comments from message\"),\n-\t\tOPT_BOOLEAN(0, \"status\", &include_status, \"include status in commit message template\"),\n-\t\t{ OPTION_STRING, 'S', \"gpg-sign\", &sign_commit, \"key id\",\n-\t\t  \"GPG sign commit\", PARSE_OPT_OPTARG, NULL, (intptr_t) \"\" },\n+\t\tOPT__QUIET(&quiet, N_(\"suppress summary after successful commit\")),\n+\t\tOPT__VERBOSE(&verbose, N_(\"show diff in commit message template\")),\n+\n+\t\tOPT_GROUP(N_(\"Commit message options\")),\n+\t\tOPT_FILENAME('F', \"file\", &logfile, N_(\"read message from file\")),\n+\t\tOPT_STRING(0, \"author\", &force_author, N_(\"author\"), N_(\"override author for commit\")),\n+\t\tOPT_STRING(0, \"date\", &force_date, N_(\"date\"), N_(\"override date for commit\")),\n+\t\tOPT_CALLBACK('m', \"message\", &message, N_(\"message\"), N_(\"commit message\"), opt_parse_m),\n+\t\tOPT_STRING('c', \"reedit-message\", &edit_message, N_(\"commit\"), N_(\"reuse and edit message from specified commit\")),\n+\t\tOPT_STRING('C', \"reuse-message\", &use_message, N_(\"commit\"), N_(\"reuse message from specified commit\")),\n+\t\tOPT_STRING(0, \"fixup\", &fixup_message, N_(\"commit\"), N_(\"use autosquash formatted message to fixup specified commit\")),\n+\t\tOPT_STRING(0, \"squash\", &squash_message, N_(\"commit\"), N_(\"use autosquash formatted message to squash specified commit\")),\n+\t\tOPT_BOOLEAN(0, \"reset-author\", &renew_authorship, N_(\"the commit is authored by me now (used with -C/-c/--amend)\")),\n+\t\tOPT_BOOLEAN('s', \"signoff\", &signoff, N_(\"add Signed-off-by:\")),\n+\t\tOPT_FILENAME('t', \"template\", &template_file, N_(\"use specified template file\")),\n+\t\tOPT_BOOL('e', \"edit\", &edit_flag, N_(\"force edit of commit\")),\n+\t\tOPT_STRING(0, \"cleanup\", &cleanup_arg, N_(\"default\"), N_(\"how to strip spaces and #comments from message\")),\n+\t\tOPT_BOOLEAN(0, \"status\", &include_status, N_(\"include status in commit message template\")),\n+\t\t{ OPTION_STRING, 'S', \"gpg-sign\", &sign_commit, N_(\"key id\"),\n+\t\t  N_(\"GPG sign commit\"), PARSE_OPT_OPTARG, NULL, (intptr_t) \"\" },\n \t\t/* end commit message options */\n \n-\t\tOPT_GROUP(\"Commit contents options\"),\n-\t\tOPT_BOOLEAN('a', \"all\", &all, \"commit all changed files\"),\n-\t\tOPT_BOOLEAN('i', \"include\", &also, \"add specified files to index for commit\"),\n-\t\tOPT_BOOLEAN(0, \"interactive\", &interactive, \"interactively add files\"),\n-\t\tOPT_BOOLEAN('p', \"patch\", &patch_interactive, \"interactively add changes\"),\n-\t\tOPT_BOOLEAN('o', \"only\", &only, \"commit only specified files\"),\n-\t\tOPT_BOOLEAN('n', \"no-verify\", &no_verify, \"bypass pre-commit hook\"),\n-\t\tOPT_BOOLEAN(0, \"dry-run\", &dry_run, \"show what would be committed\"),\n-\t\tOPT_SET_INT(0, \"short\", &status_format, \"show status concisely\",\n+\t\tOPT_GROUP(N_(\"Commit contents options\")),\n+\t\tOPT_BOOLEAN('a', \"all\", &all, N_(\"commit all changed files\")),\n+\t\tOPT_BOOLEAN('i', \"include\", &also, N_(\"add specified files to index for commit\")),\n+\t\tOPT_BOOLEAN(0, \"interactive\", &interactive, N_(\"interactively add files\")),\n+\t\tOPT_BOOLEAN('p', \"patch\", &patch_interactive, N_(\"interactively add changes\")),\n+\t\tOPT_BOOLEAN('o', \"only\", &only, N_(\"commit only specified files\")),\n+\t\tOPT_BOOLEAN('n', \"no-verify\", &no_verify, N_(\"bypass pre-commit hook\")),\n+\t\tOPT_BOOLEAN(0, \"dry-run\", &dry_run, N_(\"show what would be committed\")),\n+\t\tOPT_SET_INT(0, \"short\", &status_format, N_(\"show status concisely\"),\n \t\t\t    STATUS_FORMAT_SHORT),\n-\t\tOPT_BOOLEAN(0, \"branch\", &s.show_branch, \"show branch information\"),\n+\t\tOPT_BOOLEAN(0, \"branch\", &s.show_branch, N_(\"show branch information\")),\n \t\tOPT_SET_INT(0, \"porcelain\", &status_format,\n-\t\t\t    \"machine-readable output\", STATUS_FORMAT_PORCELAIN),\n+\t\t\t    N_(\"machine-readable output\"), STATUS_FORMAT_PORCELAIN),\n \t\tOPT_BOOLEAN('z', \"null\", &s.null_termination,\n-\t\t\t    \"terminate entries with NUL\"),\n-\t\tOPT_BOOLEAN(0, \"amend\", &amend, \"amend previous commit\"),\n-\t\tOPT_BOOLEAN(0, \"no-post-rewrite\", &no_post_rewrite, \"bypass post-rewrite hook\"),\n-\t\t{ OPTION_STRING, 'u', \"untracked-files\", &untracked_files_arg, \"mode\", \"show untracked files, optional modes: all, normal, no. (Default: all)\", PARSE_OPT_OPTARG, NULL, (intptr_t)\"all\" },\n+\t\t\t    N_(\"terminate entries with NUL\")),\n+\t\tOPT_BOOLEAN(0, \"amend\", &amend, N_(\"amend previous commit\")),\n+\t\tOPT_BOOLEAN(0, \"no-post-rewrite\", &no_post_rewrite, N_(\"bypass post-rewrite hook\")),\n+\t\t{ OPTION_STRING, 'u', \"untracked-files\", &untracked_files_arg, N_(\"mode\"), N_(\"show untracked files, optional modes: all, normal, no. (Default: all)\"), PARSE_OPT_OPTARG, NULL, (intptr_t)\"all\" },\n \t\t/* end commit contents options */\n \n \t\t{ OPTION_BOOLEAN, 0, \"allow-empty\", &allow_empty, NULL,\n-\t\t  \"ok to record an empty change\",\n+\t\t  N_(\"ok to record an empty change\"),\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },\n \t\t{ OPTION_BOOLEAN, 0, \"allow-empty-message\", &allow_empty_message, NULL,\n-\t\t  \"ok to record a change with an empty message\",\n+\t\t  N_(\"ok to record a change with an empty message\"),\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },\n \n \t\tOPT_END()\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192332","messageId":"1338203657-26486-15-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 17/65] i18n: config: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:29Z","receivedAt":"2012-05-28T11:13:29Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/config.c | 56 ++++++++++++++++++++++++++++----------------------------\n 1 file changed, 28 insertions(+), 28 deletions(-)\n\ndiff --git a/builtin/config.c b/builtin/config.c\nindex 33c8820..d6922db 100644\n--- a/builtin/config.c\n+++ b/builtin/config.c\n@@ -4,7 +4,7 @@\n #include \"parse-options.h\"\n \n static const char *const builtin_config_usage[] = {\n-\t\"git config [options]\",\n+\tN_(\"git config [options]\"),\n \tNULL\n };\n \n@@ -49,33 +49,33 @@ static int respect_includes = -1;\n #define TYPE_PATH (1<<3)\n \n static struct option builtin_config_options[] = {\n-\tOPT_GROUP(\"Config file location\"),\n-\tOPT_BOOLEAN(0, \"global\", &use_global_config, \"use global config file\"),\n-\tOPT_BOOLEAN(0, \"system\", &use_system_config, \"use system config file\"),\n-\tOPT_BOOLEAN(0, \"local\", &use_local_config, \"use repository config file\"),\n-\tOPT_STRING('f', \"file\", &given_config_file, \"file\", \"use given config file\"),\n-\tOPT_GROUP(\"Action\"),\n-\tOPT_BIT(0, \"get\", &actions, \"get value: name [value-regex]\", ACTION_GET),\n-\tOPT_BIT(0, \"get-all\", &actions, \"get all values: key [value-regex]\", ACTION_GET_ALL),\n-\tOPT_BIT(0, \"get-regexp\", &actions, \"get values for regexp: name-regex [value-regex]\", ACTION_GET_REGEXP),\n-\tOPT_BIT(0, \"replace-all\", &actions, \"replace all matching variables: name value [value_regex]\", ACTION_REPLACE_ALL),\n-\tOPT_BIT(0, \"add\", &actions, \"adds a new variable: name value\", ACTION_ADD),\n-\tOPT_BIT(0, \"unset\", &actions, \"removes a variable: name [value-regex]\", ACTION_UNSET),\n-\tOPT_BIT(0, \"unset-all\", &actions, \"removes all matches: name [value-regex]\", ACTION_UNSET_ALL),\n-\tOPT_BIT(0, \"rename-section\", &actions, \"rename section: old-name new-name\", ACTION_RENAME_SECTION),\n-\tOPT_BIT(0, \"remove-section\", &actions, \"remove a section: name\", ACTION_REMOVE_SECTION),\n-\tOPT_BIT('l', \"list\", &actions, \"list all\", ACTION_LIST),\n-\tOPT_BIT('e', \"edit\", &actions, \"opens an editor\", ACTION_EDIT),\n-\tOPT_STRING(0, \"get-color\", &get_color_slot, \"slot\", \"find the color configured: [default]\"),\n-\tOPT_STRING(0, \"get-colorbool\", &get_colorbool_slot, \"slot\", \"find the color setting: [stdout-is-tty]\"),\n-\tOPT_GROUP(\"Type\"),\n-\tOPT_BIT(0, \"bool\", &types, \"value is \\\"true\\\" or \\\"false\\\"\", TYPE_BOOL),\n-\tOPT_BIT(0, \"int\", &types, \"value is decimal number\", TYPE_INT),\n-\tOPT_BIT(0, \"bool-or-int\", &types, \"value is --bool or --int\", TYPE_BOOL_OR_INT),\n-\tOPT_BIT(0, \"path\", &types, \"value is a path (file or directory name)\", TYPE_PATH),\n-\tOPT_GROUP(\"Other\"),\n-\tOPT_BOOLEAN('z', \"null\", &end_null, \"terminate values with NUL byte\"),\n-\tOPT_BOOL(0, \"includes\", &respect_includes, \"respect include directives on lookup\"),\n+\tOPT_GROUP(N_(\"Config file location\")),\n+\tOPT_BOOLEAN(0, \"global\", &use_global_config, N_(\"use global config file\")),\n+\tOPT_BOOLEAN(0, \"system\", &use_system_config, N_(\"use system config file\")),\n+\tOPT_BOOLEAN(0, \"local\", &use_local_config, N_(\"use repository config file\")),\n+\tOPT_STRING('f', \"file\", &given_config_file, N_(\"file\"), N_(\"use given config file\")),\n+\tOPT_GROUP(N_(\"Action\")),\n+\tOPT_BIT(0, \"get\", &actions, N_(\"get value: name [value-regex]\"), ACTION_GET),\n+\tOPT_BIT(0, \"get-all\", &actions, N_(\"get all values: key [value-regex]\"), ACTION_GET_ALL),\n+\tOPT_BIT(0, \"get-regexp\", &actions, N_(\"get values for regexp: name-regex [value-regex]\"), ACTION_GET_REGEXP),\n+\tOPT_BIT(0, \"replace-all\", &actions, N_(\"replace all matching variables: name value [value_regex]\"), ACTION_REPLACE_ALL),\n+\tOPT_BIT(0, \"add\", &actions, N_(\"adds a new variable: name value\"), ACTION_ADD),\n+\tOPT_BIT(0, \"unset\", &actions, N_(\"removes a variable: name [value-regex]\"), ACTION_UNSET),\n+\tOPT_BIT(0, \"unset-all\", &actions, N_(\"removes all matches: name [value-regex]\"), ACTION_UNSET_ALL),\n+\tOPT_BIT(0, \"rename-section\", &actions, N_(\"rename section: old-name new-name\"), ACTION_RENAME_SECTION),\n+\tOPT_BIT(0, \"remove-section\", &actions, N_(\"remove a section: name\"), ACTION_REMOVE_SECTION),\n+\tOPT_BIT('l', \"list\", &actions, N_(\"list all\"), ACTION_LIST),\n+\tOPT_BIT('e', \"edit\", &actions, N_(\"opens an editor\"), ACTION_EDIT),\n+\tOPT_STRING(0, \"get-color\", &get_color_slot, N_(\"slot\"), N_(\"find the color configured: [default]\")),\n+\tOPT_STRING(0, \"get-colorbool\", &get_colorbool_slot, N_(\"slot\"), N_(\"find the color setting: [stdout-is-tty]\")),\n+\tOPT_GROUP(N_(\"Type\")),\n+\tOPT_BIT(0, \"bool\", &types, N_(\"value is \\\"true\\\" or \\\"false\\\"\"), TYPE_BOOL),\n+\tOPT_BIT(0, \"int\", &types, N_(\"value is decimal number\"), TYPE_INT),\n+\tOPT_BIT(0, \"bool-or-int\", &types, N_(\"value is --bool or --int\"), TYPE_BOOL_OR_INT),\n+\tOPT_BIT(0, \"path\", &types, N_(\"value is a path (file or directory name)\"), TYPE_PATH),\n+\tOPT_GROUP(N_(\"Other\")),\n+\tOPT_BOOLEAN('z', \"null\", &end_null, N_(\"terminate values with NUL byte\")),\n+\tOPT_BOOL(0, \"includes\", &respect_includes, N_(\"respect include directives on lookup\")),\n \tOPT_END(),\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192333","messageId":"1338203657-26486-16-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 18/65] i18n: count-objects: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:30Z","receivedAt":"2012-05-28T11:13:30Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/count-objects.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/builtin/count-objects.c b/builtin/count-objects.c\nindex c37cb98..9afaa88 100644\n--- a/builtin/count-objects.c\n+++ b/builtin/count-objects.c\n@@ -66,7 +66,7 @@ static void count_objects(DIR *d, char *path, int len, int verbose,\n }\n \n static char const * const count_objects_usage[] = {\n-\t\"git count-objects [-v]\",\n+\tN_(\"git count-objects [-v]\"),\n \tNULL\n };\n \n@@ -79,7 +79,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)\n \tunsigned long loose = 0, packed = 0, packed_loose = 0, garbage = 0;\n \toff_t loose_size = 0;\n \tstruct option opts[] = {\n-\t\tOPT__VERBOSE(&verbose, \"be verbose\"),\n+\t\tOPT__VERBOSE(&verbose, N_(\"be verbose\")),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192334","messageId":"1338203657-26486-17-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 19/65] i18n: describe: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:31Z","receivedAt":"2012-05-28T11:13:31Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/describe.c | 28 ++++++++++++++--------------\n 1 file changed, 14 insertions(+), 14 deletions(-)\n\ndiff --git a/builtin/describe.c b/builtin/describe.c\nindex 9f63067..9fe11ed 100644\n--- a/builtin/describe.c\n+++ b/builtin/describe.c\n@@ -12,8 +12,8 @@\n #define MAX_TAGS\t(FLAG_BITS - 1)\n \n static const char * const describe_usage[] = {\n-\t\"git describe [options] <committish>*\",\n-\t\"git describe [options] --dirty\",\n+\tN_(\"git describe [options] <committish>*\"),\n+\tN_(\"git describe [options] --dirty\"),\n \tNULL\n };\n \n@@ -400,22 +400,22 @@ int cmd_describe(int argc, const char **argv, const char *prefix)\n {\n \tint contains = 0;\n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN(0, \"contains\",   &contains, \"find the tag that comes after the commit\"),\n-\t\tOPT_BOOLEAN(0, \"debug\",      &debug, \"debug search strategy on stderr\"),\n-\t\tOPT_BOOLEAN(0, \"all\",        &all, \"use any ref in .git/refs\"),\n-\t\tOPT_BOOLEAN(0, \"tags\",       &tags, \"use any tag in .git/refs/tags\"),\n-\t\tOPT_BOOLEAN(0, \"long\",       &longformat, \"always use long format\"),\n+\t\tOPT_BOOLEAN(0, \"contains\",   &contains, N_(\"find the tag that comes after the commit\")),\n+\t\tOPT_BOOLEAN(0, \"debug\",      &debug, N_(\"debug search strategy on stderr\")),\n+\t\tOPT_BOOLEAN(0, \"all\",        &all, N_(\"use any ref in .git/refs\")),\n+\t\tOPT_BOOLEAN(0, \"tags\",       &tags, N_(\"use any tag in .git/refs/tags\")),\n+\t\tOPT_BOOLEAN(0, \"long\",       &longformat, N_(\"always use long format\")),\n \t\tOPT__ABBREV(&abbrev),\n \t\tOPT_SET_INT(0, \"exact-match\", &max_candidates,\n-\t\t\t    \"only output exact matches\", 0),\n+\t\t\t    N_(\"only output exact matches\"), 0),\n \t\tOPT_INTEGER(0, \"candidates\", &max_candidates,\n-\t\t\t    \"consider <n> most recent tags (default: 10)\"),\n-\t\tOPT_STRING(0, \"match\",       &pattern, \"pattern\",\n-\t\t\t   \"only consider tags matching <pattern>\"),\n+\t\t\t    N_(\"consider <n> most recent tags (default: 10)\")),\n+\t\tOPT_STRING(0, \"match\",       &pattern, N_(\"pattern\"),\n+\t\t\t   N_(\"only consider tags matching <pattern>\")),\n \t\tOPT_BOOLEAN(0, \"always\",     &always,\n-\t\t\t   \"show abbreviated commit object as fallback\"),\n-\t\t{OPTION_STRING, 0, \"dirty\",  &dirty, \"mark\",\n-\t\t\t   \"append <mark> on dirty working tree (default: \\\"-dirty\\\")\",\n+\t\t\t   N_(\"show abbreviated commit object as fallback\")),\n+\t\t{OPTION_STRING, 0, \"dirty\",  &dirty, N_(\"mark\"),\n+\t\t\t   N_(\"append <mark> on dirty working tree (default: \\\"-dirty\\\")\"),\n \t\t PARSE_OPT_OPTARG, NULL, (intptr_t) \"-dirty\"},\n \t\tOPT_END(),\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192336","messageId":"1338203657-26486-18-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 20/65] i18n: fast-export: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:32Z","receivedAt":"2012-05-28T11:13:32Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/fast-export.c | 28 ++++++++++++++--------------\n 1 file changed, 14 insertions(+), 14 deletions(-)\n\ndiff --git a/builtin/fast-export.c b/builtin/fast-export.c\nindex 19509ea..65217eb 100644\n--- a/builtin/fast-export.c\n+++ b/builtin/fast-export.c\n@@ -19,7 +19,7 @@\n #include \"quote.h\"\n \n static const char *fast_export_usage[] = {\n-\t\"git fast-export [rev-list-opts]\",\n+\tN_(\"git fast-export [rev-list-opts]\"),\n \tNULL\n };\n \n@@ -630,24 +630,24 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)\n \tchar *export_filename = NULL, *import_filename = NULL;\n \tstruct option options[] = {\n \t\tOPT_INTEGER(0, \"progress\", &progress,\n-\t\t\t    \"show progress after <n> objects\"),\n-\t\tOPT_CALLBACK(0, \"signed-tags\", &signed_tag_mode, \"mode\",\n-\t\t\t     \"select handling of signed tags\",\n+\t\t\t    N_(\"show progress after <n> objects\")),\n+\t\tOPT_CALLBACK(0, \"signed-tags\", &signed_tag_mode, N_(\"mode\"),\n+\t\t\t     N_(\"select handling of signed tags\"),\n \t\t\t     parse_opt_signed_tag_mode),\n-\t\tOPT_CALLBACK(0, \"tag-of-filtered-object\", &tag_of_filtered_mode, \"mode\",\n-\t\t\t     \"select handling of tags that tag filtered objects\",\n+\t\tOPT_CALLBACK(0, \"tag-of-filtered-object\", &tag_of_filtered_mode, N_(\"mode\"),\n+\t\t\t     N_(\"select handling of tags that tag filtered objects\"),\n \t\t\t     parse_opt_tag_of_filtered_mode),\n-\t\tOPT_STRING(0, \"export-marks\", &export_filename, \"file\",\n-\t\t\t     \"Dump marks to this file\"),\n-\t\tOPT_STRING(0, \"import-marks\", &import_filename, \"file\",\n-\t\t\t     \"Import marks from this file\"),\n+\t\tOPT_STRING(0, \"export-marks\", &export_filename, N_(\"file\"),\n+\t\t\t     N_(\"Dump marks to this file\")),\n+\t\tOPT_STRING(0, \"import-marks\", &import_filename, N_(\"file\"),\n+\t\t\t     N_(\"Import marks from this file\")),\n \t\tOPT_BOOLEAN(0, \"fake-missing-tagger\", &fake_missing_tagger,\n-\t\t\t     \"Fake a tagger when tags lack one\"),\n+\t\t\t     N_(\"Fake a tagger when tags lack one\")),\n \t\tOPT_BOOLEAN(0, \"full-tree\", &full_tree,\n-\t\t\t     \"Output full tree for each commit\"),\n+\t\t\t     N_(\"Output full tree for each commit\")),\n \t\tOPT_BOOLEAN(0, \"use-done-feature\", &use_done_feature,\n-\t\t\t     \"Use the done feature to terminate the stream\"),\n-\t\tOPT_BOOL(0, \"no-data\", &no_data, \"Skip output of blob data\"),\n+\t\t\t     N_(\"Use the done feature to terminate the stream\")),\n+\t\tOPT_BOOL(0, \"no-data\", &no_data, N_(\"Skip output of blob data\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192335","messageId":"1338203657-26486-19-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 21/65] i18n: fetch: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:33Z","receivedAt":"2012-05-28T11:13:33Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/fetch.c | 48 ++++++++++++++++++++++++------------------------\n 1 file changed, 24 insertions(+), 24 deletions(-)\n\ndiff --git a/builtin/fetch.c b/builtin/fetch.c\nindex bb9a074..3f2ad77 100644\n--- a/builtin/fetch.c\n+++ b/builtin/fetch.c\n@@ -16,10 +16,10 @@\n #include \"connected.h\"\n \n static const char * const builtin_fetch_usage[] = {\n-\t\"git fetch [<options>] [<repository> [<refspec>...]]\",\n-\t\"git fetch [<options>] <group>\",\n-\t\"git fetch --multiple [<options>] [(<repository> | <group>)...]\",\n-\t\"git fetch --all [<options>]\",\n+\tN_(\"git fetch [<options>] [<repository> [<refspec>...]]\"),\n+\tN_(\"git fetch [<options>] <group>\"),\n+\tN_(\"git fetch --multiple [<options>] [(<repository> | <group>)...]\"),\n+\tN_(\"git fetch --all [<options>]\"),\n \tNULL\n };\n \n@@ -56,36 +56,36 @@ static int option_parse_recurse_submodules(const struct option *opt,\n static struct option builtin_fetch_options[] = {\n \tOPT__VERBOSITY(&verbosity),\n \tOPT_BOOLEAN(0, \"all\", &all,\n-\t\t    \"fetch from all remotes\"),\n+\t\t    N_(\"fetch from all remotes\")),\n \tOPT_BOOLEAN('a', \"append\", &append,\n-\t\t    \"append to .git/FETCH_HEAD instead of overwriting\"),\n-\tOPT_STRING(0, \"upload-pack\", &upload_pack, \"path\",\n-\t\t   \"path to upload pack on remote end\"),\n-\tOPT__FORCE(&force, \"force overwrite of local branch\"),\n+\t\t    N_(\"append to .git/FETCH_HEAD instead of overwriting\")),\n+\tOPT_STRING(0, \"upload-pack\", &upload_pack, N_(\"path\"),\n+\t\t   N_(\"path to upload pack on remote end\")),\n+\tOPT__FORCE(&force, N_(\"force overwrite of local branch\")),\n \tOPT_BOOLEAN('m', \"multiple\", &multiple,\n-\t\t    \"fetch from multiple remotes\"),\n+\t\t    N_(\"fetch from multiple remotes\")),\n \tOPT_SET_INT('t', \"tags\", &tags,\n-\t\t    \"fetch all tags and associated objects\", TAGS_SET),\n+\t\t    N_(\"fetch all tags and associated objects\"), TAGS_SET),\n \tOPT_SET_INT('n', NULL, &tags,\n-\t\t    \"do not fetch all tags (--no-tags)\", TAGS_UNSET),\n+\t\t    N_(\"do not fetch all tags (--no-tags)\"), TAGS_UNSET),\n \tOPT_BOOLEAN('p', \"prune\", &prune,\n-\t\t    \"prune remote-tracking branches no longer on remote\"),\n-\t{ OPTION_CALLBACK, 0, \"recurse-submodules\", NULL, \"on-demand\",\n-\t\t    \"control recursive fetching of submodules\",\n+\t\t    N_(\"prune remote-tracking branches no longer on remote\")),\n+\t{ OPTION_CALLBACK, 0, \"recurse-submodules\", NULL, N_(\"on-demand\"),\n+\t\t    N_(\"control recursive fetching of submodules\"),\n \t\t    PARSE_OPT_OPTARG, option_parse_recurse_submodules },\n \tOPT_BOOLEAN(0, \"dry-run\", &dry_run,\n-\t\t    \"dry run\"),\n-\tOPT_BOOLEAN('k', \"keep\", &keep, \"keep downloaded pack\"),\n+\t\t    N_(\"dry run\")),\n+\tOPT_BOOLEAN('k', \"keep\", &keep, N_(\"keep downloaded pack\")),\n \tOPT_BOOLEAN('u', \"update-head-ok\", &update_head_ok,\n-\t\t    \"allow updating of HEAD ref\"),\n-\tOPT_BOOL(0, \"progress\", &progress, \"force progress reporting\"),\n-\tOPT_STRING(0, \"depth\", &depth, \"depth\",\n-\t\t   \"deepen history of shallow clone\"),\n-\t{ OPTION_STRING, 0, \"submodule-prefix\", &submodule_prefix, \"dir\",\n-\t\t   \"prepend this to submodule path output\", PARSE_OPT_HIDDEN },\n+\t\t    N_(\"allow updating of HEAD ref\")),\n+\tOPT_BOOL(0, \"progress\", &progress, N_(\"force progress reporting\")),\n+\tOPT_STRING(0, \"depth\", &depth, N_(\"depth\"),\n+\t\t   N_(\"deepen history of shallow clone\")),\n+\t{ OPTION_STRING, 0, \"submodule-prefix\", &submodule_prefix, N_(\"dir\"),\n+\t\t   N_(\"prepend this to submodule path output\"), PARSE_OPT_HIDDEN },\n \t{ OPTION_STRING, 0, \"recurse-submodules-default\",\n \t\t   &recurse_submodules_default, NULL,\n-\t\t   \"default mode for recursion\", PARSE_OPT_HIDDEN },\n+\t\t   N_(\"default mode for recursion\"), PARSE_OPT_HIDDEN },\n \tOPT_END()\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192338","messageId":"1338203657-26486-20-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 22/65] i18n: fmt-merge-msg: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:34Z","receivedAt":"2012-05-28T11:13:34Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/fmt-merge-msg.c | 16 ++++++++--------\n 1 file changed, 8 insertions(+), 8 deletions(-)\n\ndiff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c\nindex d42015d..bf118b3 100644\n--- a/builtin/fmt-merge-msg.c\n+++ b/builtin/fmt-merge-msg.c\n@@ -10,7 +10,7 @@\n #include \"gpg-interface.h\"\n \n static const char * const fmt_merge_msg_usage[] = {\n-\t\"git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]\",\n+\tN_(\"git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]\"),\n \tNULL\n };\n \n@@ -650,16 +650,16 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)\n \tconst char *message = NULL;\n \tint shortlog_len = -1;\n \tstruct option options[] = {\n-\t\t{ OPTION_INTEGER, 0, \"log\", &shortlog_len, \"n\",\n-\t\t  \"populate log with at most <n> entries from shortlog\",\n+\t\t{ OPTION_INTEGER, 0, \"log\", &shortlog_len, N_(\"n\"),\n+\t\t  N_(\"populate log with at most <n> entries from shortlog\"),\n \t\t  PARSE_OPT_OPTARG, NULL, DEFAULT_MERGE_LOG_LEN },\n-\t\t{ OPTION_INTEGER, 0, \"summary\", &shortlog_len, \"n\",\n-\t\t  \"alias for --log (deprecated)\",\n+\t\t{ OPTION_INTEGER, 0, \"summary\", &shortlog_len, N_(\"n\"),\n+\t\t  N_(\"alias for --log (deprecated)\"),\n \t\t  PARSE_OPT_OPTARG | PARSE_OPT_HIDDEN, NULL,\n \t\t  DEFAULT_MERGE_LOG_LEN },\n-\t\tOPT_STRING('m', \"message\", &message, \"text\",\n-\t\t\t\"use <text> as start of message\"),\n-\t\tOPT_FILENAME('F', \"file\", &inpath, \"file to read from\"),\n+\t\tOPT_STRING('m', \"message\", &message, N_(\"text\"),\n+\t\t\tN_(\"use <text> as start of message\")),\n+\t\tOPT_FILENAME('F', \"file\", &inpath, N_(\"file to read from\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192337","messageId":"1338203657-26486-21-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 23/65] i18n: for-each-ref: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:35Z","receivedAt":"2012-05-28T11:13:35Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/for-each-ref.c | 18 +++++++++---------\n 1 file changed, 9 insertions(+), 9 deletions(-)\n\ndiff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c\nindex b01d76a..afe83b9 100644\n--- a/builtin/for-each-ref.c\n+++ b/builtin/for-each-ref.c\n@@ -974,7 +974,7 @@ static int opt_parse_sort(const struct option *opt, const char *arg, int unset)\n }\n \n static char const * const for_each_ref_usage[] = {\n-\t\"git for-each-ref [options] [<pattern>]\",\n+\tN_(\"git for-each-ref [options] [<pattern>]\"),\n \tNULL\n };\n \n@@ -989,19 +989,19 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)\n \n \tstruct option opts[] = {\n \t\tOPT_BIT('s', \"shell\", &quote_style,\n-\t\t        \"quote placeholders suitably for shells\", QUOTE_SHELL),\n+\t\t\tN_(\"quote placeholders suitably for shells\"), QUOTE_SHELL),\n \t\tOPT_BIT('p', \"perl\",  &quote_style,\n-\t\t        \"quote placeholders suitably for perl\", QUOTE_PERL),\n+\t\t\tN_(\"quote placeholders suitably for perl\"), QUOTE_PERL),\n \t\tOPT_BIT(0 , \"python\", &quote_style,\n-\t\t        \"quote placeholders suitably for python\", QUOTE_PYTHON),\n+\t\t\tN_(\"quote placeholders suitably for python\"), QUOTE_PYTHON),\n \t\tOPT_BIT(0 , \"tcl\",  &quote_style,\n-\t\t        \"quote placeholders suitably for tcl\", QUOTE_TCL),\n+\t\t\tN_(\"quote placeholders suitably for tcl\"), QUOTE_TCL),\n \n \t\tOPT_GROUP(\"\"),\n-\t\tOPT_INTEGER( 0 , \"count\", &maxcount, \"show only <n> matched refs\"),\n-\t\tOPT_STRING(  0 , \"format\", &format, \"format\", \"format to use for the output\"),\n-\t\tOPT_CALLBACK(0 , \"sort\", sort_tail, \"key\",\n-\t\t            \"field name to sort on\", &opt_parse_sort),\n+\t\tOPT_INTEGER( 0 , \"count\", &maxcount, N_(\"show only <n> matched refs\")),\n+\t\tOPT_STRING(  0 , \"format\", &format, N_(\"format\"), N_(\"format to use for the output\")),\n+\t\tOPT_CALLBACK(0 , \"sort\", sort_tail, N_(\"key\"),\n+\t\t\t    N_(\"field name to sort on\"), &opt_parse_sort),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192339","messageId":"1338203657-26486-22-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 24/65] i18n: format-patch: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:36Z","receivedAt":"2012-05-28T11:13:36Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/log.c | 66 +++++++++++++++++++++++++++++------------------------------\n 1 file changed, 33 insertions(+), 33 deletions(-)\n\ndiff --git a/builtin/log.c b/builtin/log.c\nindex 6282ed2..da54ce9 100644\n--- a/builtin/log.c\n+++ b/builtin/log.c\n@@ -910,7 +910,7 @@ static const char *set_outdir(const char *prefix, const char *output_directory)\n }\n \n static const char * const builtin_format_patch_usage[] = {\n-\t\"git format-patch [options] [<since> | <revision range>]\",\n+\tN_(\"git format-patch [options] [<since> | <revision range>]\"),\n \tNULL\n };\n \n@@ -1083,61 +1083,61 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n \tchar *branch_name = NULL;\n \tconst struct option builtin_format_patch_options[] = {\n \t\t{ OPTION_CALLBACK, 'n', \"numbered\", &numbered, NULL,\n-\t\t\t    \"use [PATCH n/m] even with a single patch\",\n+\t\t\t    N_(\"use [PATCH n/m] even with a single patch\"),\n \t\t\t    PARSE_OPT_NOARG, numbered_callback },\n \t\t{ OPTION_CALLBACK, 'N', \"no-numbered\", &numbered, NULL,\n-\t\t\t    \"use [PATCH] even with multiple patches\",\n+\t\t\t    N_(\"use [PATCH] even with multiple patches\"),\n \t\t\t    PARSE_OPT_NOARG, no_numbered_callback },\n-\t\tOPT_BOOLEAN('s', \"signoff\", &do_signoff, \"add Signed-off-by:\"),\n+\t\tOPT_BOOLEAN('s', \"signoff\", &do_signoff, N_(\"add Signed-off-by:\")),\n \t\tOPT_BOOLEAN(0, \"stdout\", &use_stdout,\n-\t\t\t    \"print patches to standard out\"),\n+\t\t\t    N_(\"print patches to standard out\")),\n \t\tOPT_BOOLEAN(0, \"cover-letter\", &cover_letter,\n-\t\t\t    \"generate a cover letter\"),\n+\t\t\t    N_(\"generate a cover letter\")),\n \t\tOPT_BOOLEAN(0, \"numbered-files\", &numbered_files,\n-\t\t\t    \"use simple number sequence for output file names\"),\n-\t\tOPT_STRING(0, \"suffix\", &fmt_patch_suffix, \"sfx\",\n-\t\t\t    \"use <sfx> instead of '.patch'\"),\n+\t\t\t    N_(\"use simple number sequence for output file names\")),\n+\t\tOPT_STRING(0, \"suffix\", &fmt_patch_suffix, N_(\"sfx\"),\n+\t\t\t    N_(\"use <sfx> instead of '.patch'\")),\n \t\tOPT_INTEGER(0, \"start-number\", &start_number,\n-\t\t\t    \"start numbering patches at <n> instead of 1\"),\n-\t\t{ OPTION_CALLBACK, 0, \"subject-prefix\", &rev, \"prefix\",\n-\t\t\t    \"Use [<prefix>] instead of [PATCH]\",\n+\t\t\t    N_(\"start numbering patches at <n> instead of 1\")),\n+\t\t{ OPTION_CALLBACK, 0, \"subject-prefix\", &rev, N_(\"prefix\"),\n+\t\t\t    N_(\"Use [<prefix>] instead of [PATCH]\"),\n \t\t\t    PARSE_OPT_NONEG, subject_prefix_callback },\n \t\t{ OPTION_CALLBACK, 'o', \"output-directory\", &output_directory,\n-\t\t\t    \"dir\", \"store resulting files in <dir>\",\n+\t\t\t    N_(\"dir\"), N_(\"store resulting files in <dir>\"),\n \t\t\t    PARSE_OPT_NONEG, output_directory_callback },\n \t\t{ OPTION_CALLBACK, 'k', \"keep-subject\", &rev, NULL,\n-\t\t\t    \"don't strip/add [PATCH]\",\n+\t\t\t    N_(\"don't strip/add [PATCH]\"),\n \t\t\t    PARSE_OPT_NOARG | PARSE_OPT_NONEG, keep_callback },\n \t\tOPT_BOOLEAN(0, \"no-binary\", &no_binary_diff,\n-\t\t\t    \"don't output binary diffs\"),\n+\t\t\t    N_(\"don't output binary diffs\")),\n \t\tOPT_BOOLEAN(0, \"ignore-if-in-upstream\", &ignore_if_in_upstream,\n-\t\t\t    \"don't include a patch matching a commit upstream\"),\n+\t\t\t    N_(\"don't include a patch matching a commit upstream\")),\n \t\t{ OPTION_BOOLEAN, 'p', \"no-stat\", &use_patch_format, NULL,\n-\t\t  \"show patch format instead of default (patch + stat)\",\n+\t\t  N_(\"show patch format instead of default (patch + stat)\"),\n \t\t  PARSE_OPT_NONEG | PARSE_OPT_NOARG },\n-\t\tOPT_GROUP(\"Messaging\"),\n-\t\t{ OPTION_CALLBACK, 0, \"add-header\", NULL, \"header\",\n-\t\t\t    \"add email header\", 0, header_callback },\n-\t\t{ OPTION_CALLBACK, 0, \"to\", NULL, \"email\", \"add To: header\",\n+\t\tOPT_GROUP(N_(\"Messaging\")),\n+\t\t{ OPTION_CALLBACK, 0, \"add-header\", NULL, N_(\"header\"),\n+\t\t\t    N_(\"add email header\"), 0, header_callback },\n+\t\t{ OPTION_CALLBACK, 0, \"to\", NULL, N_(\"email\"), N_(\"add To: header\"),\n \t\t\t    0, to_callback },\n-\t\t{ OPTION_CALLBACK, 0, \"cc\", NULL, \"email\", \"add Cc: header\",\n+\t\t{ OPTION_CALLBACK, 0, \"cc\", NULL, N_(\"email\"), N_(\"add Cc: header\"),\n \t\t\t    0, cc_callback },\n-\t\tOPT_STRING(0, \"in-reply-to\", &in_reply_to, \"message-id\",\n-\t\t\t    \"make first mail a reply to <message-id>\"),\n-\t\t{ OPTION_CALLBACK, 0, \"attach\", &rev, \"boundary\",\n-\t\t\t    \"attach the patch\", PARSE_OPT_OPTARG,\n+\t\tOPT_STRING(0, \"in-reply-to\", &in_reply_to, N_(\"message-id\"),\n+\t\t\t    N_(\"make first mail a reply to <message-id>\")),\n+\t\t{ OPTION_CALLBACK, 0, \"attach\", &rev, N_(\"boundary\"),\n+\t\t\t    N_(\"attach the patch\"), PARSE_OPT_OPTARG,\n \t\t\t    attach_callback },\n-\t\t{ OPTION_CALLBACK, 0, \"inline\", &rev, \"boundary\",\n-\t\t\t    \"inline the patch\",\n+\t\t{ OPTION_CALLBACK, 0, \"inline\", &rev, N_(\"boundary\"),\n+\t\t\t    N_(\"inline the patch\"),\n \t\t\t    PARSE_OPT_OPTARG | PARSE_OPT_NONEG,\n \t\t\t    inline_callback },\n-\t\t{ OPTION_CALLBACK, 0, \"thread\", &thread, \"style\",\n-\t\t\t    \"enable message threading, styles: shallow, deep\",\n+\t\t{ OPTION_CALLBACK, 0, \"thread\", &thread, N_(\"style\"),\n+\t\t\t    N_(\"enable message threading, styles: shallow, deep\"),\n \t\t\t    PARSE_OPT_OPTARG, thread_callback },\n-\t\tOPT_STRING(0, \"signature\", &signature, \"signature\",\n-\t\t\t    \"add a signature\"),\n+\t\tOPT_STRING(0, \"signature\", &signature, N_(\"signature\"),\n+\t\t\t    N_(\"add a signature\")),\n \t\tOPT_BOOLEAN(0, \"quiet\", &quiet,\n-\t\t\t    \"don't print the patch filenames\"),\n+\t\t\t    N_(\"don't print the patch filenames\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192340","messageId":"1338203657-26486-23-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 25/65] i18n: fsck: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:37Z","receivedAt":"2012-05-28T11:13:37Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/fsck.c | 24 ++++++++++++------------\n 1 file changed, 12 insertions(+), 12 deletions(-)\n\ndiff --git a/builtin/fsck.c b/builtin/fsck.c\nindex a710227..bb9a2cd 100644\n--- a/builtin/fsck.c\n+++ b/builtin/fsck.c\n@@ -605,23 +605,23 @@ static int fsck_cache_tree(struct cache_tree *it)\n }\n \n static char const * const fsck_usage[] = {\n-\t\"git fsck [options] [<object>...]\",\n+\tN_(\"git fsck [options] [<object>...]\"),\n \tNULL\n };\n \n static struct option fsck_opts[] = {\n-\tOPT__VERBOSE(&verbose, \"be verbose\"),\n-\tOPT_BOOLEAN(0, \"unreachable\", &show_unreachable, \"show unreachable objects\"),\n-\tOPT_BOOL(0, \"dangling\", &show_dangling, \"show dangling objects\"),\n-\tOPT_BOOLEAN(0, \"tags\", &show_tags, \"report tags\"),\n-\tOPT_BOOLEAN(0, \"root\", &show_root, \"report root nodes\"),\n-\tOPT_BOOLEAN(0, \"cache\", &keep_cache_objects, \"make index objects head nodes\"),\n-\tOPT_BOOLEAN(0, \"reflogs\", &include_reflogs, \"make reflogs head nodes (default)\"),\n-\tOPT_BOOLEAN(0, \"full\", &check_full, \"also consider packs and alternate objects\"),\n-\tOPT_BOOLEAN(0, \"strict\", &check_strict, \"enable more strict checking\"),\n+\tOPT__VERBOSE(&verbose, N_(\"be verbose\")),\n+\tOPT_BOOLEAN(0, \"unreachable\", &show_unreachable, N_(\"show unreachable objects\")),\n+\tOPT_BOOL(0, \"dangling\", &show_dangling, N_(\"show dangling objects\")),\n+\tOPT_BOOLEAN(0, \"tags\", &show_tags, N_(\"report tags\")),\n+\tOPT_BOOLEAN(0, \"root\", &show_root, N_(\"report root nodes\")),\n+\tOPT_BOOLEAN(0, \"cache\", &keep_cache_objects, N_(\"make index objects head nodes\")),\n+\tOPT_BOOLEAN(0, \"reflogs\", &include_reflogs, N_(\"make reflogs head nodes (default)\")),\n+\tOPT_BOOLEAN(0, \"full\", &check_full, N_(\"also consider packs and alternate objects\")),\n+\tOPT_BOOLEAN(0, \"strict\", &check_strict, N_(\"enable more strict checking\")),\n \tOPT_BOOLEAN(0, \"lost-found\", &write_lost_and_found,\n-\t\t\t\t\"write dangling objects in .git/lost-found\"),\n-\tOPT_BOOL(0, \"progress\", &show_progress, \"show progress\"),\n+\t\t\t\tN_(\"write dangling objects in .git/lost-found\")),\n+\tOPT_BOOL(0, \"progress\", &show_progress, N_(\"show progress\")),\n \tOPT_END(),\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192341","messageId":"1338203657-26486-24-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 26/65] i18n: gc: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:38Z","receivedAt":"2012-05-28T11:13:38Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/gc.c | 12 ++++++------\n 1 file changed, 6 insertions(+), 6 deletions(-)\n\ndiff --git a/builtin/gc.c b/builtin/gc.c\nindex 9b4232c..6d46608 100644\n--- a/builtin/gc.c\n+++ b/builtin/gc.c\n@@ -19,7 +19,7 @@\n #define FAILED_RUN \"failed to run %s\"\n \n static const char * const builtin_gc_usage[] = {\n-\t\"git gc [options]\",\n+\tN_(\"git gc [options]\"),\n \tNULL\n };\n \n@@ -174,12 +174,12 @@ int cmd_gc(int argc, const char **argv, const char *prefix)\n \tint quiet = 0;\n \n \tstruct option builtin_gc_options[] = {\n-\t\tOPT__QUIET(&quiet, \"suppress progress reporting\"),\n-\t\t{ OPTION_STRING, 0, \"prune\", &prune_expire, \"date\",\n-\t\t\t\"prune unreferenced objects\",\n+\t\tOPT__QUIET(&quiet, N_(\"suppress progress reporting\")),\n+\t\t{ OPTION_STRING, 0, \"prune\", &prune_expire, N_(\"date\"),\n+\t\t\tN_(\"prune unreferenced objects\"),\n \t\t\tPARSE_OPT_OPTARG, NULL, (intptr_t)prune_expire },\n-\t\tOPT_BOOLEAN(0, \"aggressive\", &aggressive, \"be more thorough (increased runtime)\"),\n-\t\tOPT_BOOLEAN(0, \"auto\", &auto_gc, \"enable auto-gc mode\"),\n+\t\tOPT_BOOLEAN(0, \"aggressive\", &aggressive, N_(\"be more thorough (increased runtime)\")),\n+\t\tOPT_BOOLEAN(0, \"auto\", &auto_gc, N_(\"enable auto-gc mode\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192342","messageId":"1338203657-26486-25-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 27/65] i18n: grep: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:39Z","receivedAt":"2012-05-28T11:13:39Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/grep.c | 90 +++++++++++++++++++++++++++++-----------------------------\n 1 file changed, 45 insertions(+), 45 deletions(-)\n\ndiff --git a/builtin/grep.c b/builtin/grep.c\nindex fe1726f..c2dfdb0 100644\n--- a/builtin/grep.c\n+++ b/builtin/grep.c\n@@ -19,7 +19,7 @@\n #include \"dir.h\"\n \n static char const * const grep_usage[] = {\n-\t\"git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]\",\n+\tN_(\"git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]\"),\n \tNULL\n };\n \n@@ -680,84 +680,84 @@ int cmd_grep(int argc, const char **argv, const char *prefix)\n \n \tstruct option options[] = {\n \t\tOPT_BOOLEAN(0, \"cached\", &cached,\n-\t\t\t\"search in index instead of in the work tree\"),\n+\t\t\tN_(\"search in index instead of in the work tree\")),\n \t\tOPT_NEGBIT(0, \"no-index\", &use_index,\n-\t\t\t \"finds in contents not managed by git\", 1),\n+\t\t\t N_(\"finds in contents not managed by git\"), 1),\n \t\tOPT_BOOLEAN(0, \"untracked\", &untracked,\n-\t\t\t\"search in both tracked and untracked files\"),\n+\t\t\tN_(\"search in both tracked and untracked files\")),\n \t\tOPT_SET_INT(0, \"exclude-standard\", &opt_exclude,\n-\t\t\t    \"search also in ignored files\", 1),\n+\t\t\t    N_(\"search also in ignored files\"), 1),\n \t\tOPT_GROUP(\"\"),\n \t\tOPT_BOOLEAN('v', \"invert-match\", &opt.invert,\n-\t\t\t\"show non-matching lines\"),\n+\t\t\tN_(\"show non-matching lines\")),\n \t\tOPT_BOOLEAN('i', \"ignore-case\", &opt.ignore_case,\n-\t\t\t\"case insensitive matching\"),\n+\t\t\tN_(\"case insensitive matching\")),\n \t\tOPT_BOOLEAN('w', \"word-regexp\", &opt.word_regexp,\n-\t\t\t\"match patterns only at word boundaries\"),\n+\t\t\tN_(\"match patterns only at word boundaries\")),\n \t\tOPT_SET_INT('a', \"text\", &opt.binary,\n-\t\t\t\"process binary files as text\", GREP_BINARY_TEXT),\n+\t\t\tN_(\"process binary files as text\"), GREP_BINARY_TEXT),\n \t\tOPT_SET_INT('I', NULL, &opt.binary,\n-\t\t\t\"don't match patterns in binary files\",\n+\t\t\tN_(\"don't match patterns in binary files\"),\n \t\t\tGREP_BINARY_NOMATCH),\n-\t\t{ OPTION_INTEGER, 0, \"max-depth\", &opt.max_depth, \"depth\",\n-\t\t\t\"descend at most <depth> levels\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_INTEGER, 0, \"max-depth\", &opt.max_depth, N_(\"depth\"),\n+\t\t\tN_(\"descend at most <depth> levels\"), PARSE_OPT_NONEG,\n \t\t\tNULL, 1 },\n \t\tOPT_GROUP(\"\"),\n \t\tOPT_SET_INT('E', \"extended-regexp\", &pattern_type,\n-\t\t\t    \"use extended POSIX regular expressions\",\n+\t\t\t    N_(\"use extended POSIX regular expressions\"),\n \t\t\t    pattern_type_ere),\n \t\tOPT_SET_INT('G', \"basic-regexp\", &pattern_type,\n-\t\t\t    \"use basic POSIX regular expressions (default)\",\n+\t\t\t    N_(\"use basic POSIX regular expressions (default)\"),\n \t\t\t    pattern_type_bre),\n \t\tOPT_SET_INT('F', \"fixed-strings\", &pattern_type,\n-\t\t\t    \"interpret patterns as fixed strings\",\n+\t\t\t    N_(\"interpret patterns as fixed strings\"),\n \t\t\t    pattern_type_fixed),\n \t\tOPT_SET_INT('P', \"perl-regexp\", &pattern_type,\n-\t\t\t    \"use Perl-compatible regular expressions\",\n+\t\t\t    N_(\"use Perl-compatible regular expressions\"),\n \t\t\t    pattern_type_pcre),\n \t\tOPT_GROUP(\"\"),\n-\t\tOPT_BOOLEAN('n', \"line-number\", &opt.linenum, \"show line numbers\"),\n-\t\tOPT_NEGBIT('h', NULL, &opt.pathname, \"don't show filenames\", 1),\n-\t\tOPT_BIT('H', NULL, &opt.pathname, \"show filenames\", 1),\n+\t\tOPT_BOOLEAN('n', \"line-number\", &opt.linenum, N_(\"show line numbers\")),\n+\t\tOPT_NEGBIT('h', NULL, &opt.pathname, N_(\"don't show filenames\"), 1),\n+\t\tOPT_BIT('H', NULL, &opt.pathname, N_(\"show filenames\"), 1),\n \t\tOPT_NEGBIT(0, \"full-name\", &opt.relative,\n-\t\t\t\"show filenames relative to top directory\", 1),\n+\t\t\tN_(\"show filenames relative to top directory\"), 1),\n \t\tOPT_BOOLEAN('l', \"files-with-matches\", &opt.name_only,\n-\t\t\t\"show only filenames instead of matching lines\"),\n+\t\t\tN_(\"show only filenames instead of matching lines\")),\n \t\tOPT_BOOLEAN(0, \"name-only\", &opt.name_only,\n-\t\t\t\"synonym for --files-with-matches\"),\n+\t\t\tN_(\"synonym for --files-with-matches\")),\n \t\tOPT_BOOLEAN('L', \"files-without-match\",\n \t\t\t&opt.unmatch_name_only,\n-\t\t\t\"show only the names of files without match\"),\n+\t\t\tN_(\"show only the names of files without match\")),\n \t\tOPT_BOOLEAN('z', \"null\", &opt.null_following_name,\n-\t\t\t\"print NUL after filenames\"),\n+\t\t\tN_(\"print NUL after filenames\")),\n \t\tOPT_BOOLEAN('c', \"count\", &opt.count,\n-\t\t\t\"show the number of matches instead of matching lines\"),\n-\t\tOPT__COLOR(&opt.color, \"highlight matches\"),\n+\t\t\tN_(\"show the number of matches instead of matching lines\")),\n+\t\tOPT__COLOR(&opt.color, N_(\"highlight matches\")),\n \t\tOPT_BOOLEAN(0, \"break\", &opt.file_break,\n-\t\t\t\"print empty line between matches from different files\"),\n+\t\t\tN_(\"print empty line between matches from different files\")),\n \t\tOPT_BOOLEAN(0, \"heading\", &opt.heading,\n-\t\t\t\"show filename only once above matches from same file\"),\n+\t\t\tN_(\"show filename only once above matches from same file\")),\n \t\tOPT_GROUP(\"\"),\n-\t\tOPT_CALLBACK('C', \"context\", &opt, \"n\",\n-\t\t\t\"show <n> context lines before and after matches\",\n+\t\tOPT_CALLBACK('C', \"context\", &opt, N_(\"n\"),\n+\t\t\tN_(\"show <n> context lines before and after matches\"),\n \t\t\tcontext_callback),\n \t\tOPT_INTEGER('B', \"before-context\", &opt.pre_context,\n-\t\t\t\"show <n> context lines before matches\"),\n+\t\t\tN_(\"show <n> context lines before matches\")),\n \t\tOPT_INTEGER('A', \"after-context\", &opt.post_context,\n-\t\t\t\"show <n> context lines after matches\"),\n-\t\tOPT_NUMBER_CALLBACK(&opt, \"shortcut for -C NUM\",\n+\t\t\tN_(\"show <n> context lines after matches\")),\n+\t\tOPT_NUMBER_CALLBACK(&opt, N_(\"shortcut for -C NUM\"),\n \t\t\tcontext_callback),\n \t\tOPT_BOOLEAN('p', \"show-function\", &opt.funcname,\n-\t\t\t\"show a line with the function name before matches\"),\n+\t\t\tN_(\"show a line with the function name before matches\")),\n \t\tOPT_BOOLEAN('W', \"function-context\", &opt.funcbody,\n-\t\t\t\"show the surrounding function\"),\n+\t\t\tN_(\"show the surrounding function\")),\n \t\tOPT_GROUP(\"\"),\n-\t\tOPT_CALLBACK('f', NULL, &opt, \"file\",\n-\t\t\t\"read patterns from file\", file_callback),\n-\t\t{ OPTION_CALLBACK, 'e', NULL, &opt, \"pattern\",\n-\t\t\t\"match <pattern>\", PARSE_OPT_NONEG, pattern_callback },\n+\t\tOPT_CALLBACK('f', NULL, &opt, N_(\"file\"),\n+\t\t\tN_(\"read patterns from file\"), file_callback),\n+\t\t{ OPTION_CALLBACK, 'e', NULL, &opt, N_(\"pattern\"),\n+\t\t\tN_(\"match <pattern>\"), PARSE_OPT_NONEG, pattern_callback },\n \t\t{ OPTION_CALLBACK, 0, \"and\", &opt, NULL,\n-\t\t  \"combine patterns specified with -e\",\n+\t\t  N_(\"combine patterns specified with -e\"),\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_NONEG, and_callback },\n \t\tOPT_BOOLEAN(0, \"or\", &dummy, \"\"),\n \t\t{ OPTION_CALLBACK, 0, \"not\", &opt, NULL, \"\",\n@@ -769,16 +769,16 @@ int cmd_grep(int argc, const char **argv, const char *prefix)\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_NONEG | PARSE_OPT_NODASH,\n \t\t  close_callback },\n \t\tOPT__QUIET(&opt.status_only,\n-\t\t\t   \"indicate hit with exit status without output\"),\n+\t\t\t   N_(\"indicate hit with exit status without output\")),\n \t\tOPT_BOOLEAN(0, \"all-match\", &opt.all_match,\n-\t\t\t\"show only matches from files that match all patterns\"),\n+\t\t\tN_(\"show only matches from files that match all patterns\")),\n \t\tOPT_GROUP(\"\"),\n \t\t{ OPTION_STRING, 'O', \"open-files-in-pager\", &show_in_pager,\n-\t\t\t\"pager\", \"show matching files in the pager\",\n+\t\t\tN_(\"pager\"), N_(\"show matching files in the pager\"),\n \t\t\tPARSE_OPT_OPTARG, NULL, (intptr_t)default_pager },\n \t\tOPT_BOOLEAN(0, \"ext-grep\", &external_grep_allowed__ignored,\n-\t\t\t    \"allow calling of grep(1) (ignored by this build)\"),\n-\t\t{ OPTION_CALLBACK, 0, \"help-all\", &options, NULL, \"show usage\",\n+\t\t\t    N_(\"allow calling of grep(1) (ignored by this build)\")),\n+\t\t{ OPTION_CALLBACK, 0, \"help-all\", &options, NULL, N_(\"show usage\"),\n \t\t  PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, help_callback },\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192343","messageId":"1338203657-26486-26-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 28/65] i18n: hash-object: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:40Z","receivedAt":"2012-05-28T11:13:40Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/hash-object.c | 16 ++++++++--------\n 1 file changed, 8 insertions(+), 8 deletions(-)\n\ndiff --git a/builtin/hash-object.c b/builtin/hash-object.c\nindex 33911fd..8d184f1 100644\n--- a/builtin/hash-object.c\n+++ b/builtin/hash-object.c\n@@ -57,8 +57,8 @@ static void hash_stdin_paths(const char *type, int write_objects)\n }\n \n static const char * const hash_object_usage[] = {\n-\t\"git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin] [--] <file>...\",\n-\t\"git hash-object  --stdin-paths < <list-of-paths>\",\n+\tN_(\"git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin] [--] <file>...\"),\n+\tN_(\"git hash-object  --stdin-paths < <list-of-paths>\"),\n \tNULL\n };\n \n@@ -69,12 +69,12 @@ static int stdin_paths;\n static const char *vpath;\n \n static const struct option hash_object_options[] = {\n-\tOPT_STRING('t', NULL, &type, \"type\", \"object type\"),\n-\tOPT_BOOLEAN('w', NULL, &write_object, \"write the object into the object database\"),\n-\tOPT_BOOLEAN( 0 , \"stdin\", &hashstdin, \"read the object from stdin\"),\n-\tOPT_BOOLEAN( 0 , \"stdin-paths\", &stdin_paths, \"read file names from stdin\"),\n-\tOPT_BOOLEAN( 0 , \"no-filters\", &no_filters, \"store file as is without filters\"),\n-\tOPT_STRING( 0 , \"path\", &vpath, \"file\", \"process file as it were from this path\"),\n+\tOPT_STRING('t', NULL, &type, N_(\"type\"), N_(\"object type\")),\n+\tOPT_BOOLEAN('w', NULL, &write_object, N_(\"write the object into the object database\")),\n+\tOPT_BOOLEAN( 0 , \"stdin\", &hashstdin, N_(\"read the object from stdin\")),\n+\tOPT_BOOLEAN( 0 , \"stdin-paths\", &stdin_paths, N_(\"read file names from stdin\")),\n+\tOPT_BOOLEAN( 0 , \"no-filters\", &no_filters, N_(\"store file as is without filters\")),\n+\tOPT_STRING( 0 , \"path\", &vpath, N_(\"file\"), N_(\"process file as it were from this path\")),\n \tOPT_END()\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192344","messageId":"1338203657-26486-27-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 29/65] i18n: help: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:41Z","receivedAt":"2012-05-28T11:13:41Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/help.c | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/help.c b/builtin/help.c\nindex 43d3c84..05ddd76 100644\n--- a/builtin/help.c\n+++ b/builtin/help.c\n@@ -34,17 +34,17 @@ static int show_all = 0;\n static unsigned int colopts;\n static enum help_format help_format = HELP_FORMAT_NONE;\n static struct option builtin_help_options[] = {\n-\tOPT_BOOLEAN('a', \"all\", &show_all, \"print all available commands\"),\n-\tOPT_SET_INT('m', \"man\", &help_format, \"show man page\", HELP_FORMAT_MAN),\n-\tOPT_SET_INT('w', \"web\", &help_format, \"show manual in web browser\",\n+\tOPT_BOOLEAN('a', \"all\", &show_all, N_(\"print all available commands\")),\n+\tOPT_SET_INT('m', \"man\", &help_format, N_(\"show man page\"), HELP_FORMAT_MAN),\n+\tOPT_SET_INT('w', \"web\", &help_format, N_(\"show manual in web browser\"),\n \t\t\tHELP_FORMAT_WEB),\n-\tOPT_SET_INT('i', \"info\", &help_format, \"show info page\",\n+\tOPT_SET_INT('i', \"info\", &help_format, N_(\"show info page\"),\n \t\t\tHELP_FORMAT_INFO),\n \tOPT_END(),\n };\n \n static const char * const builtin_help_usage[] = {\n-\t\"git help [--all] [--man|--web|--info] [command]\",\n+\tN_(\"git help [--all] [--man|--web|--info] [command]\"),\n \tNULL\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192345","messageId":"1338203657-26486-28-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 30/65] i18n: init-db: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:42Z","receivedAt":"2012-05-28T11:13:42Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/init-db.c | 18 +++++++++---------\n 1 file changed, 9 insertions(+), 9 deletions(-)\n\ndiff --git a/builtin/init-db.c b/builtin/init-db.c\nindex 0dacb8b..08854d5 100644\n--- a/builtin/init-db.c\n+++ b/builtin/init-db.c\n@@ -463,7 +463,7 @@ static int shared_callback(const struct option *opt, const char *arg, int unset)\n }\n \n static const char *const init_db_usage[] = {\n-\t\"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [directory]\",\n+\tN_(\"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [directory]\"),\n \tNULL\n };\n \n@@ -481,17 +481,17 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)\n \tconst char *template_dir = NULL;\n \tunsigned int flags = 0;\n \tconst struct option init_db_options[] = {\n-\t\tOPT_STRING(0, \"template\", &template_dir, \"template-directory\",\n-\t\t\t\t\"directory from which templates will be used\"),\n+\t\tOPT_STRING(0, \"template\", &template_dir, N_(\"template-directory\"),\n+\t\t\t\tN_(\"directory from which templates will be used\")),\n \t\tOPT_SET_INT(0, \"bare\", &is_bare_repository_cfg,\n-\t\t\t\t\"create a bare repository\", 1),\n+\t\t\t\tN_(\"create a bare repository\"), 1),\n \t\t{ OPTION_CALLBACK, 0, \"shared\", &init_shared_repository,\n-\t\t\t\"permissions\",\n-\t\t\t\"specify that the git repository is to be shared amongst several users\",\n+\t\t\tN_(\"permissions\"),\n+\t\t\tN_(\"specify that the git repository is to be shared amongst several users\"),\n \t\t\tPARSE_OPT_OPTARG | PARSE_OPT_NONEG, shared_callback, 0},\n-\t\tOPT_BIT('q', \"quiet\", &flags, \"be quiet\", INIT_DB_QUIET),\n-\t\tOPT_STRING(0, \"separate-git-dir\", &real_git_dir, \"gitdir\",\n-\t\t\t   \"separate git dir from working tree\"),\n+\t\tOPT_BIT('q', \"quiet\", &flags, N_(\"be quiet\"), INIT_DB_QUIET),\n+\t\tOPT_STRING(0, \"separate-git-dir\", &real_git_dir, N_(\"gitdir\"),\n+\t\t\t   N_(\"separate git dir from working tree\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192346","messageId":"1338203657-26486-29-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 31/65] i18n: log: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:43Z","receivedAt":"2012-05-28T11:13:43Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/log.c | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/log.c b/builtin/log.c\nindex da54ce9..09d9a01 100644\n--- a/builtin/log.c\n+++ b/builtin/log.c\n@@ -33,8 +33,8 @@ static const char *fmt_patch_subject_prefix = \"PATCH\";\n static const char *fmt_pretty;\n \n static const char * const builtin_log_usage[] = {\n-\t\"git log [<options>] [<since>..<until>] [[--] <path>...]\\n\"\n-\t\"   or: git show [options] <object>...\",\n+\tN_(\"git log [<options>] [<since>..<until>] [[--] <path>...]\\n\")\n+\tN_(\"   or: git show [options] <object>...\"),\n \tNULL\n };\n \n@@ -96,9 +96,9 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,\n \tint quiet = 0, source = 0;\n \n \tconst struct option builtin_log_options[] = {\n-\t\tOPT_BOOLEAN(0, \"quiet\", &quiet, \"suppress diff output\"),\n-\t\tOPT_BOOLEAN(0, \"source\", &source, \"show source\"),\n-\t\t{ OPTION_CALLBACK, 0, \"decorate\", NULL, NULL, \"decorate options\",\n+\t\tOPT_BOOLEAN(0, \"quiet\", &quiet, N_(\"suppress diff output\")),\n+\t\tOPT_BOOLEAN(0, \"source\", &source, N_(\"show source\")),\n+\t\t{ OPTION_CALLBACK, 0, \"decorate\", NULL, NULL, N_(\"decorate options\"),\n \t\t  PARSE_OPT_OPTARG, decorate_callback},\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192347","messageId":"1338203657-26486-30-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 32/65] i18n: ls-files: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:44Z","receivedAt":"2012-05-28T11:13:44Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/ls-files.c | 54 +++++++++++++++++++++++++++---------------------------\n 1 file changed, 27 insertions(+), 27 deletions(-)\n\ndiff --git a/builtin/ls-files.c b/builtin/ls-files.c\nindex 7cff175..23ba31c 100644\n--- a/builtin/ls-files.c\n+++ b/builtin/ls-files.c\n@@ -394,7 +394,7 @@ int report_path_error(const char *ps_matched, const char **pathspec, const char\n }\n \n static const char * const ls_files_usage[] = {\n-\t\"git ls-files [options] [<file>...]\",\n+\tN_(\"git ls-files [options] [<file>...]\"),\n \tNULL\n };\n \n@@ -446,57 +446,57 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)\n \tstruct dir_struct dir;\n \tstruct option builtin_ls_files_options[] = {\n \t\t{ OPTION_CALLBACK, 'z', NULL, NULL, NULL,\n-\t\t\t\"paths are separated with NUL character\",\n+\t\t\tN_(\"paths are separated with NUL character\"),\n \t\t\tPARSE_OPT_NOARG, option_parse_z },\n \t\tOPT_BOOLEAN('t', NULL, &show_tag,\n-\t\t\t\"identify the file status with tags\"),\n+\t\t\tN_(\"identify the file status with tags\")),\n \t\tOPT_BOOLEAN('v', NULL, &show_valid_bit,\n-\t\t\t\"use lowercase letters for 'assume unchanged' files\"),\n+\t\t\tN_(\"use lowercase letters for 'assume unchanged' files\")),\n \t\tOPT_BOOLEAN('c', \"cached\", &show_cached,\n-\t\t\t\"show cached files in the output (default)\"),\n+\t\t\tN_(\"show cached files in the output (default)\")),\n \t\tOPT_BOOLEAN('d', \"deleted\", &show_deleted,\n-\t\t\t\"show deleted files in the output\"),\n+\t\t\tN_(\"show deleted files in the output\")),\n \t\tOPT_BOOLEAN('m', \"modified\", &show_modified,\n-\t\t\t\"show modified files in the output\"),\n+\t\t\tN_(\"show modified files in the output\")),\n \t\tOPT_BOOLEAN('o', \"others\", &show_others,\n-\t\t\t\"show other files in the output\"),\n+\t\t\tN_(\"show other files in the output\")),\n \t\tOPT_BIT('i', \"ignored\", &dir.flags,\n-\t\t\t\"show ignored files in the output\",\n+\t\t\tN_(\"show ignored files in the output\"),\n \t\t\tDIR_SHOW_IGNORED),\n \t\tOPT_BOOLEAN('s', \"stage\", &show_stage,\n-\t\t\t\"show staged contents' object name in the output\"),\n+\t\t\tN_(\"show staged contents' object name in the output\")),\n \t\tOPT_BOOLEAN('k', \"killed\", &show_killed,\n-\t\t\t\"show files on the filesystem that need to be removed\"),\n+\t\t\tN_(\"show files on the filesystem that need to be removed\")),\n \t\tOPT_BIT(0, \"directory\", &dir.flags,\n-\t\t\t\"show 'other' directories' name only\",\n+\t\t\tN_(\"show 'other' directories' name only\"),\n \t\t\tDIR_SHOW_OTHER_DIRECTORIES),\n \t\tOPT_NEGBIT(0, \"empty-directory\", &dir.flags,\n-\t\t\t\"don't show empty directories\",\n+\t\t\tN_(\"don't show empty directories\"),\n \t\t\tDIR_HIDE_EMPTY_DIRECTORIES),\n \t\tOPT_BOOLEAN('u', \"unmerged\", &show_unmerged,\n-\t\t\t\"show unmerged files in the output\"),\n+\t\t\tN_(\"show unmerged files in the output\")),\n \t\tOPT_BOOLEAN(0, \"resolve-undo\", &show_resolve_undo,\n-\t\t\t    \"show resolve-undo information\"),\n-\t\t{ OPTION_CALLBACK, 'x', \"exclude\", &dir.exclude_list[EXC_CMDL], \"pattern\",\n-\t\t\t\"skip files matching pattern\",\n+\t\t\t    N_(\"show resolve-undo information\")),\n+\t\t{ OPTION_CALLBACK, 'x', \"exclude\", &dir.exclude_list[EXC_CMDL], N_(\"pattern\"),\n+\t\t\tN_(\"skip files matching pattern\"),\n \t\t\t0, option_parse_exclude },\n-\t\t{ OPTION_CALLBACK, 'X', \"exclude-from\", &dir, \"file\",\n-\t\t\t\"exclude patterns are read from <file>\",\n+\t\t{ OPTION_CALLBACK, 'X', \"exclude-from\", &dir, N_(\"file\"),\n+\t\t\tN_(\"exclude patterns are read from <file>\"),\n \t\t\t0, option_parse_exclude_from },\n-\t\tOPT_STRING(0, \"exclude-per-directory\", &dir.exclude_per_dir, \"file\",\n-\t\t\t\"read additional per-directory exclude patterns in <file>\"),\n+\t\tOPT_STRING(0, \"exclude-per-directory\", &dir.exclude_per_dir, N_(\"file\"),\n+\t\t\tN_(\"read additional per-directory exclude patterns in <file>\")),\n \t\t{ OPTION_CALLBACK, 0, \"exclude-standard\", &dir, NULL,\n-\t\t\t\"add the standard git exclusions\",\n+\t\t\tN_(\"add the standard git exclusions\"),\n \t\t\tPARSE_OPT_NOARG, option_parse_exclude_standard },\n \t\t{ OPTION_SET_INT, 0, \"full-name\", &prefix_len, NULL,\n-\t\t\t\"make the output relative to the project top directory\",\n+\t\t\tN_(\"make the output relative to the project top directory\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL },\n \t\tOPT_BOOLEAN(0, \"error-unmatch\", &error_unmatch,\n-\t\t\t\"if any <file> is not in the index, treat this as an error\"),\n-\t\tOPT_STRING(0, \"with-tree\", &with_tree, \"tree-ish\",\n-\t\t\t\"pretend that paths removed since <tree-ish> are still present\"),\n+\t\t\tN_(\"if any <file> is not in the index, treat this as an error\")),\n+\t\tOPT_STRING(0, \"with-tree\", &with_tree, N_(\"tree-ish\"),\n+\t\t\tN_(\"pretend that paths removed since <tree-ish> are still present\")),\n \t\tOPT__ABBREV(&abbrev),\n-\t\tOPT_BOOLEAN(0, \"debug\", &debug_mode, \"show debugging data\"),\n+\t\tOPT_BOOLEAN(0, \"debug\", &debug_mode, N_(\"show debugging data\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192348","messageId":"1338203657-26486-31-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 33/65] i18n: ls-tree: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:45Z","receivedAt":"2012-05-28T11:13:45Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/ls-tree.c | 22 +++++++++++-----------\n 1 file changed, 11 insertions(+), 11 deletions(-)\n\ndiff --git a/builtin/ls-tree.c b/builtin/ls-tree.c\nindex 6b666e1..235c17c 100644\n--- a/builtin/ls-tree.c\n+++ b/builtin/ls-tree.c\n@@ -24,7 +24,7 @@ static int chomp_prefix;\n static const char *ls_tree_prefix;\n \n static const  char * const ls_tree_usage[] = {\n-\t\"git ls-tree [<options>] <tree-ish> [<path>...]\",\n+\tN_(\"git ls-tree [<options>] <tree-ish> [<path>...]\"),\n \tNULL\n };\n \n@@ -122,25 +122,25 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)\n \tstruct tree *tree;\n \tint i, full_tree = 0;\n \tconst struct option ls_tree_options[] = {\n-\t\tOPT_BIT('d', NULL, &ls_options, \"only show trees\",\n+\t\tOPT_BIT('d', NULL, &ls_options, N_(\"only show trees\"),\n \t\t\tLS_TREE_ONLY),\n-\t\tOPT_BIT('r', NULL, &ls_options, \"recurse into subtrees\",\n+\t\tOPT_BIT('r', NULL, &ls_options, N_(\"recurse into subtrees\"),\n \t\t\tLS_RECURSIVE),\n-\t\tOPT_BIT('t', NULL, &ls_options, \"show trees when recursing\",\n+\t\tOPT_BIT('t', NULL, &ls_options, N_(\"show trees when recursing\"),\n \t\t\tLS_SHOW_TREES),\n \t\tOPT_SET_INT('z', NULL, &line_termination,\n-\t\t\t    \"terminate entries with NUL byte\", 0),\n-\t\tOPT_BIT('l', \"long\", &ls_options, \"include object size\",\n+\t\t\t    N_(\"terminate entries with NUL byte\"), 0),\n+\t\tOPT_BIT('l', \"long\", &ls_options, N_(\"include object size\"),\n \t\t\tLS_SHOW_SIZE),\n-\t\tOPT_BIT(0, \"name-only\", &ls_options, \"list only filenames\",\n+\t\tOPT_BIT(0, \"name-only\", &ls_options, N_(\"list only filenames\"),\n \t\t\tLS_NAME_ONLY),\n-\t\tOPT_BIT(0, \"name-status\", &ls_options, \"list only filenames\",\n+\t\tOPT_BIT(0, \"name-status\", &ls_options, N_(\"list only filenames\"),\n \t\t\tLS_NAME_ONLY),\n \t\tOPT_SET_INT(0, \"full-name\", &chomp_prefix,\n-\t\t\t    \"use full path names\", 0),\n+\t\t\t    N_(\"use full path names\"), 0),\n \t\tOPT_BOOLEAN(0, \"full-tree\", &full_tree,\n-\t\t\t    \"list entire tree; not just current directory \"\n-\t\t\t    \"(implies --full-name)\"),\n+\t\t\t    N_(\"list entire tree; not just current directory \"\n+\t\t\t       \"(implies --full-name)\")),\n \t\tOPT__ABBREV(&abbrev),\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192349","messageId":"1338203657-26486-32-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 34/65] i18n: merge-base: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:46Z","receivedAt":"2012-05-28T11:13:46Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/merge-base.c | 12 ++++++------\n 1 file changed, 6 insertions(+), 6 deletions(-)\n\ndiff --git a/builtin/merge-base.c b/builtin/merge-base.c\nindex 4f30f1b..2f223a6 100644\n--- a/builtin/merge-base.c\n+++ b/builtin/merge-base.c\n@@ -23,9 +23,9 @@ static int show_merge_base(struct commit **rev, int rev_nr, int show_all)\n }\n \n static const char * const merge_base_usage[] = {\n-\t\"git merge-base [-a|--all] <commit> <commit>...\",\n-\t\"git merge-base [-a|--all] --octopus <commit>...\",\n-\t\"git merge-base --independent <commit>...\",\n+\tN_(\"git merge-base [-a|--all] <commit> <commit>...\"),\n+\tN_(\"git merge-base [-a|--all] --octopus <commit>...\"),\n+\tN_(\"git merge-base --independent <commit>...\"),\n \tNULL\n };\n \n@@ -79,9 +79,9 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)\n \tint reduce = 0;\n \n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN('a', \"all\", &show_all, \"output all common ancestors\"),\n-\t\tOPT_BOOLEAN(0, \"octopus\", &octopus, \"find ancestors for a single n-way merge\"),\n-\t\tOPT_BOOLEAN(0, \"independent\", &reduce, \"list revs not reachable from others\"),\n+\t\tOPT_BOOLEAN('a', \"all\", &show_all, N_(\"output all common ancestors\")),\n+\t\tOPT_BOOLEAN(0, \"octopus\", &octopus, N_(\"find ancestors for a single n-way merge\")),\n+\t\tOPT_BOOLEAN(0, \"independent\", &reduce, N_(\"list revs not reachable from others\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192350","messageId":"1338203657-26486-33-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 35/65] i18n: merge-file: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:47Z","receivedAt":"2012-05-28T11:13:47Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/merge-file.c | 20 ++++++++++----------\n 1 file changed, 10 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/merge-file.c b/builtin/merge-file.c\nindex 6f0efef..c0570f2 100644\n--- a/builtin/merge-file.c\n+++ b/builtin/merge-file.c\n@@ -5,7 +5,7 @@\n #include \"parse-options.h\"\n \n static const char *const merge_file_usage[] = {\n-\t\"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file file2\",\n+\tN_(\"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file file2\"),\n \tNULL\n };\n \n@@ -30,19 +30,19 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)\n \tint quiet = 0;\n \tint prefixlen = 0;\n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN('p', \"stdout\", &to_stdout, \"send results to standard output\"),\n-\t\tOPT_SET_INT(0, \"diff3\", &xmp.style, \"use a diff3 based merge\", XDL_MERGE_DIFF3),\n-\t\tOPT_SET_INT(0, \"ours\", &xmp.favor, \"for conflicts, use our version\",\n+\t\tOPT_BOOLEAN('p', \"stdout\", &to_stdout, N_(\"send results to standard output\")),\n+\t\tOPT_SET_INT(0, \"diff3\", &xmp.style, N_(\"use a diff3 based merge\"), XDL_MERGE_DIFF3),\n+\t\tOPT_SET_INT(0, \"ours\", &xmp.favor, N_(\"for conflicts, use our version\"),\n \t\t\t    XDL_MERGE_FAVOR_OURS),\n-\t\tOPT_SET_INT(0, \"theirs\", &xmp.favor, \"for conflicts, use their version\",\n+\t\tOPT_SET_INT(0, \"theirs\", &xmp.favor, N_(\"for conflicts, use their version\"),\n \t\t\t    XDL_MERGE_FAVOR_THEIRS),\n-\t\tOPT_SET_INT(0, \"union\", &xmp.favor, \"for conflicts, use a union version\",\n+\t\tOPT_SET_INT(0, \"union\", &xmp.favor, N_(\"for conflicts, use a union version\"),\n \t\t\t    XDL_MERGE_FAVOR_UNION),\n \t\tOPT_INTEGER(0, \"marker-size\", &xmp.marker_size,\n-\t\t\t    \"for conflicts, use this marker size\"),\n-\t\tOPT__QUIET(&quiet, \"do not warn about conflicts\"),\n-\t\tOPT_CALLBACK('L', NULL, names, \"name\",\n-\t\t\t     \"set labels for file1/orig_file/file2\", &label_cb),\n+\t\t\t    N_(\"for conflicts, use this marker size\")),\n+\t\tOPT__QUIET(&quiet, N_(\"do not warn about conflicts\")),\n+\t\tOPT_CALLBACK('L', NULL, names, N_(\"name\"),\n+\t\t\t     N_(\"set labels for file1/orig_file/file2\"), &label_cb),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192351","messageId":"1338203657-26486-34-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 36/65] i18n: merge: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:48Z","receivedAt":"2012-05-28T11:13:48Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/merge.c | 48 ++++++++++++++++++++++++------------------------\n 1 file changed, 24 insertions(+), 24 deletions(-)\n\ndiff --git a/builtin/merge.c b/builtin/merge.c\nindex 470fc57..9b0d37b 100644\n--- a/builtin/merge.c\n+++ b/builtin/merge.c\n@@ -40,9 +40,9 @@ struct strategy {\n };\n \n static const char * const builtin_merge_usage[] = {\n-\t\"git merge [options] [<commit>...]\",\n-\t\"git merge [options] <msg> HEAD <commit>\",\n-\t\"git merge --abort\",\n+\tN_(\"git merge [options] [<commit>...]\"),\n+\tN_(\"git merge [options] <msg> HEAD <commit>\"),\n+\tN_(\"git merge --abort\"),\n \tNULL\n };\n \n@@ -180,39 +180,39 @@ static int option_parse_n(const struct option *opt,\n \n static struct option builtin_merge_options[] = {\n \t{ OPTION_CALLBACK, 'n', NULL, NULL, NULL,\n-\t\t\"do not show a diffstat at the end of the merge\",\n+\t\tN_(\"do not show a diffstat at the end of the merge\"),\n \t\tPARSE_OPT_NOARG, option_parse_n },\n \tOPT_BOOLEAN(0, \"stat\", &show_diffstat,\n-\t\t\"show a diffstat at the end of the merge\"),\n-\tOPT_BOOLEAN(0, \"summary\", &show_diffstat, \"(synonym to --stat)\"),\n-\t{ OPTION_INTEGER, 0, \"log\", &shortlog_len, \"n\",\n-\t  \"add (at most <n>) entries from shortlog to merge commit message\",\n+\t\tN_(\"show a diffstat at the end of the merge\")),\n+\tOPT_BOOLEAN(0, \"summary\", &show_diffstat, N_(\"(synonym to --stat)\")),\n+\t{ OPTION_INTEGER, 0, \"log\", &shortlog_len, N_(\"n\"),\n+\t  N_(\"add (at most <n>) entries from shortlog to merge commit message\"),\n \t  PARSE_OPT_OPTARG, NULL, DEFAULT_MERGE_LOG_LEN },\n \tOPT_BOOLEAN(0, \"squash\", &squash,\n-\t\t\"create a single commit instead of doing a merge\"),\n+\t\tN_(\"create a single commit instead of doing a merge\")),\n \tOPT_BOOLEAN(0, \"commit\", &option_commit,\n-\t\t\"perform a commit if the merge succeeds (default)\"),\n+\t\tN_(\"perform a commit if the merge succeeds (default)\")),\n \tOPT_BOOL('e', \"edit\", &option_edit,\n-\t\t\"edit message before committing\"),\n+\t\tN_(\"edit message before committing\")),\n \tOPT_BOOLEAN(0, \"ff\", &allow_fast_forward,\n-\t\t\"allow fast-forward (default)\"),\n+\t\tN_(\"allow fast-forward (default)\")),\n \tOPT_BOOLEAN(0, \"ff-only\", &fast_forward_only,\n-\t\t\"abort if fast-forward is not possible\"),\n+\t\tN_(\"abort if fast-forward is not possible\")),\n \tOPT_RERERE_AUTOUPDATE(&allow_rerere_auto),\n-\tOPT_CALLBACK('s', \"strategy\", &use_strategies, \"strategy\",\n-\t\t\"merge strategy to use\", option_parse_strategy),\n-\tOPT_CALLBACK('X', \"strategy-option\", &xopts, \"option=value\",\n-\t\t\"option for selected merge strategy\", option_parse_x),\n-\tOPT_CALLBACK('m', \"message\", &merge_msg, \"message\",\n-\t\t\"merge commit message (for a non-fast-forward merge)\",\n+\tOPT_CALLBACK('s', \"strategy\", &use_strategies, N_(\"strategy\"),\n+\t\tN_(\"merge strategy to use\"), option_parse_strategy),\n+\tOPT_CALLBACK('X', \"strategy-option\", &xopts, N_(\"option=value\"),\n+\t\tN_(\"option for selected merge strategy\"), option_parse_x),\n+\tOPT_CALLBACK('m', \"message\", &merge_msg, N_(\"message\"),\n+\t\tN_(\"merge commit message (for a non-fast-forward merge)\"),\n \t\toption_parse_message),\n \tOPT__VERBOSITY(&verbosity),\n \tOPT_BOOLEAN(0, \"abort\", &abort_current_merge,\n-\t\t\"abort the current in-progress merge\"),\n-\tOPT_SET_INT(0, \"progress\", &show_progress, \"force progress reporting\", 1),\n-\t{ OPTION_STRING, 'S', \"gpg-sign\", &sign_commit, \"key id\",\n-\t  \"GPG sign commit\", PARSE_OPT_OPTARG, NULL, (intptr_t) \"\" },\n-\tOPT_BOOLEAN(0, \"overwrite-ignore\", &overwrite_ignore, \"update ignored files (default)\"),\n+\t\tN_(\"abort the current in-progress merge\")),\n+\tOPT_SET_INT(0, \"progress\", &show_progress, N_(\"force progress reporting\"), 1),\n+\t{ OPTION_STRING, 'S', \"gpg-sign\", &sign_commit, N_(\"key id\"),\n+\t  N_(\"GPG sign commit\"), PARSE_OPT_OPTARG, NULL, (intptr_t) \"\" },\n+\tOPT_BOOLEAN(0, \"overwrite-ignore\", &overwrite_ignore, N_(\"update ignored files (default)\")),\n \tOPT_END()\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192352","messageId":"1338203657-26486-35-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 37/65] i18n: mktree: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:49Z","receivedAt":"2012-05-28T11:13:49Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/mktree.c | 8 ++++----\n 1 file changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/builtin/mktree.c b/builtin/mktree.c\nindex 4ae1c41..f92ba40 100644\n--- a/builtin/mktree.c\n+++ b/builtin/mktree.c\n@@ -64,7 +64,7 @@ static void write_tree(unsigned char *sha1)\n }\n \n static const char *mktree_usage[] = {\n-\t\"git mktree [-z] [--missing] [--batch]\",\n+\tN_(\"git mktree [-z] [--missing] [--batch]\"),\n \tNULL\n };\n \n@@ -150,9 +150,9 @@ int cmd_mktree(int ac, const char **av, const char *prefix)\n \tint got_eof = 0;\n \n \tconst struct option option[] = {\n-\t\tOPT_SET_INT('z', NULL, &line_termination, \"input is NUL terminated\", '\\0'),\n-\t\tOPT_SET_INT( 0 , \"missing\", &allow_missing, \"allow missing objects\", 1),\n-\t\tOPT_SET_INT( 0 , \"batch\", &is_batch_mode, \"allow creation of more than one tree\", 1),\n+\t\tOPT_SET_INT('z', NULL, &line_termination, N_(\"input is NUL terminated\"), '\\0'),\n+\t\tOPT_SET_INT( 0 , \"missing\", &allow_missing, N_(\"allow missing objects\"), 1),\n+\t\tOPT_SET_INT( 0 , \"batch\", &is_batch_mode, N_(\"allow creation of more than one tree\"), 1),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192353","messageId":"1338203657-26486-36-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 38/65] i18n: mv: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:50Z","receivedAt":"2012-05-28T11:13:50Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/mv.c | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/mv.c b/builtin/mv.c\nindex 2a144b0..034fec9 100644\n--- a/builtin/mv.c\n+++ b/builtin/mv.c\n@@ -11,7 +11,7 @@\n #include \"parse-options.h\"\n \n static const char * const builtin_mv_usage[] = {\n-\t\"git mv [options] <source>... <destination>\",\n+\tN_(\"git mv [options] <source>... <destination>\"),\n \tNULL\n };\n \n@@ -59,10 +59,10 @@ int cmd_mv(int argc, const char **argv, const char *prefix)\n \tint i, newfd;\n \tint verbose = 0, show_only = 0, force = 0, ignore_errors = 0;\n \tstruct option builtin_mv_options[] = {\n-\t\tOPT__VERBOSE(&verbose, \"be verbose\"),\n-\t\tOPT__DRY_RUN(&show_only, \"dry run\"),\n-\t\tOPT__FORCE(&force, \"force move/rename even if target exists\"),\n-\t\tOPT_BOOLEAN('k', NULL, &ignore_errors, \"skip move/rename errors\"),\n+\t\tOPT__VERBOSE(&verbose, N_(\"be verbose\")),\n+\t\tOPT__DRY_RUN(&show_only, N_(\"dry run\")),\n+\t\tOPT__FORCE(&force, N_(\"force move/rename even if target exists\")),\n+\t\tOPT_BOOLEAN('k', NULL, &ignore_errors, N_(\"skip move/rename errors\")),\n \t\tOPT_END(),\n \t};\n \tconst char **source, **destination, **dest_path;\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192354","messageId":"1338203657-26486-37-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 39/65] i18n: name-rev: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:51Z","receivedAt":"2012-05-28T11:13:51Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/name-rev.c | 22 +++++++++++-----------\n 1 file changed, 11 insertions(+), 11 deletions(-)\n\ndiff --git a/builtin/name-rev.c b/builtin/name-rev.c\nindex 1b37458..6238247 100644\n--- a/builtin/name-rev.c\n+++ b/builtin/name-rev.c\n@@ -172,9 +172,9 @@ static void show_name(const struct object *obj,\n }\n \n static char const * const name_rev_usage[] = {\n-\t\"git name-rev [options] <commit>...\",\n-\t\"git name-rev [options] --all\",\n-\t\"git name-rev [options] --stdin\",\n+\tN_(\"git name-rev [options] <commit>...\"),\n+\tN_(\"git name-rev [options] --all\"),\n+\tN_(\"git name-rev [options] --stdin\"),\n \tNULL\n };\n \n@@ -226,16 +226,16 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)\n \tint all = 0, transform_stdin = 0, allow_undefined = 1, always = 0;\n \tstruct name_ref_data data = { 0, 0, NULL };\n \tstruct option opts[] = {\n-\t\tOPT_BOOLEAN(0, \"name-only\", &data.name_only, \"print only names (no SHA-1)\"),\n-\t\tOPT_BOOLEAN(0, \"tags\", &data.tags_only, \"only use tags to name the commits\"),\n-\t\tOPT_STRING(0, \"refs\", &data.ref_filter, \"pattern\",\n-\t\t\t\t   \"only use refs matching <pattern>\"),\n+\t\tOPT_BOOLEAN(0, \"name-only\", &data.name_only, N_(\"print only names (no SHA-1)\")),\n+\t\tOPT_BOOLEAN(0, \"tags\", &data.tags_only, N_(\"only use tags to name the commits\")),\n+\t\tOPT_STRING(0, \"refs\", &data.ref_filter, N_(\"pattern\"),\n+\t\t\t\t   N_(\"only use refs matching <pattern>\")),\n \t\tOPT_GROUP(\"\"),\n-\t\tOPT_BOOLEAN(0, \"all\", &all, \"list all commits reachable from all refs\"),\n-\t\tOPT_BOOLEAN(0, \"stdin\", &transform_stdin, \"read from stdin\"),\n-\t\tOPT_BOOLEAN(0, \"undefined\", &allow_undefined, \"allow to print `undefined` names\"),\n+\t\tOPT_BOOLEAN(0, \"all\", &all, N_(\"list all commits reachable from all refs\")),\n+\t\tOPT_BOOLEAN(0, \"stdin\", &transform_stdin, N_(\"read from stdin\")),\n+\t\tOPT_BOOLEAN(0, \"undefined\", &allow_undefined, N_(\"allow to print `undefined` names\")),\n \t\tOPT_BOOLEAN(0, \"always\",     &always,\n-\t\t\t   \"show abbreviated commit object as fallback\"),\n+\t\t\t   N_(\"show abbreviated commit object as fallback\")),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192355","messageId":"1338203657-26486-38-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 40/65] i18n: notes: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:52Z","receivedAt":"2012-05-28T11:13:52Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/notes.c | 120 ++++++++++++++++++++++++++++----------------------------\n 1 file changed, 60 insertions(+), 60 deletions(-)\n\ndiff --git a/builtin/notes.c b/builtin/notes.c\nindex 3644d14..423c6e8 100644\n--- a/builtin/notes.c\n+++ b/builtin/notes.c\n@@ -20,71 +20,71 @@\n #include \"notes-merge.h\"\n \n static const char * const git_notes_usage[] = {\n-\t\"git notes [--ref <notes_ref>] [list [<object>]]\",\n-\t\"git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]\",\n-\t\"git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>\",\n-\t\"git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]\",\n-\t\"git notes [--ref <notes_ref>] edit [<object>]\",\n-\t\"git notes [--ref <notes_ref>] show [<object>]\",\n-\t\"git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>\",\n-\t\"git notes merge --commit [-v | -q]\",\n-\t\"git notes merge --abort [-v | -q]\",\n-\t\"git notes [--ref <notes_ref>] remove [<object>...]\",\n-\t\"git notes [--ref <notes_ref>] prune [-n | -v]\",\n-\t\"git notes [--ref <notes_ref>] get-ref\",\n+\tN_(\"git notes [--ref <notes_ref>] [list [<object>]]\"),\n+\tN_(\"git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]\"),\n+\tN_(\"git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>\"),\n+\tN_(\"git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]\"),\n+\tN_(\"git notes [--ref <notes_ref>] edit [<object>]\"),\n+\tN_(\"git notes [--ref <notes_ref>] show [<object>]\"),\n+\tN_(\"git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>\"),\n+\tN_(\"git notes merge --commit [-v | -q]\"),\n+\tN_(\"git notes merge --abort [-v | -q]\"),\n+\tN_(\"git notes [--ref <notes_ref>] remove [<object>...]\"),\n+\tN_(\"git notes [--ref <notes_ref>] prune [-n | -v]\"),\n+\tN_(\"git notes [--ref <notes_ref>] get-ref\"),\n \tNULL\n };\n \n static const char * const git_notes_list_usage[] = {\n-\t\"git notes [list [<object>]]\",\n+\tN_(\"git notes [list [<object>]]\"),\n \tNULL\n };\n \n static const char * const git_notes_add_usage[] = {\n-\t\"git notes add [<options>] [<object>]\",\n+\tN_(\"git notes add [<options>] [<object>]\"),\n \tNULL\n };\n \n static const char * const git_notes_copy_usage[] = {\n-\t\"git notes copy [<options>] <from-object> <to-object>\",\n-\t\"git notes copy --stdin [<from-object> <to-object>]...\",\n+\tN_(\"git notes copy [<options>] <from-object> <to-object>\"),\n+\tN_(\"git notes copy --stdin [<from-object> <to-object>]...\"),\n \tNULL\n };\n \n static const char * const git_notes_append_usage[] = {\n-\t\"git notes append [<options>] [<object>]\",\n+\tN_(\"git notes append [<options>] [<object>]\"),\n \tNULL\n };\n \n static const char * const git_notes_edit_usage[] = {\n-\t\"git notes edit [<object>]\",\n+\tN_(\"git notes edit [<object>]\"),\n \tNULL\n };\n \n static const char * const git_notes_show_usage[] = {\n-\t\"git notes show [<object>]\",\n+\tN_(\"git notes show [<object>]\"),\n \tNULL\n };\n \n static const char * const git_notes_merge_usage[] = {\n-\t\"git notes merge [<options>] <notes_ref>\",\n-\t\"git notes merge --commit [<options>]\",\n-\t\"git notes merge --abort [<options>]\",\n+\tN_(\"git notes merge [<options>] <notes_ref>\"),\n+\tN_(\"git notes merge --commit [<options>]\"),\n+\tN_(\"git notes merge --abort [<options>]\"),\n \tNULL\n };\n \n static const char * const git_notes_remove_usage[] = {\n-\t\"git notes remove [<object>]\",\n+\tN_(\"git notes remove [<object>]\"),\n \tNULL\n };\n \n static const char * const git_notes_prune_usage[] = {\n-\t\"git notes prune [<options>]\",\n+\tN_(\"git notes prune [<options>]\"),\n \tNULL\n };\n \n static const char * const git_notes_get_ref_usage[] = {\n-\t\"git notes get-ref\",\n+\tN_(\"git notes get-ref\"),\n \tNULL\n };\n \n@@ -531,19 +531,19 @@ static int add(int argc, const char **argv, const char *prefix)\n \tconst unsigned char *note;\n \tstruct msg_arg msg = { 0, 0, STRBUF_INIT };\n \tstruct option options[] = {\n-\t\t{ OPTION_CALLBACK, 'm', \"message\", &msg, \"msg\",\n-\t\t\t\"note contents as a string\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'm', \"message\", &msg, N_(\"msg\"),\n+\t\t\tN_(\"note contents as a string\"), PARSE_OPT_NONEG,\n \t\t\tparse_msg_arg},\n-\t\t{ OPTION_CALLBACK, 'F', \"file\", &msg, \"file\",\n-\t\t\t\"note contents in a file\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'F', \"file\", &msg, N_(\"file\"),\n+\t\t\tN_(\"note contents in a file\"), PARSE_OPT_NONEG,\n \t\t\tparse_file_arg},\n-\t\t{ OPTION_CALLBACK, 'c', \"reedit-message\", &msg, \"object\",\n-\t\t\t\"reuse and edit specified note object\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'c', \"reedit-message\", &msg, N_(\"object\"),\n+\t\t\tN_(\"reuse and edit specified note object\"), PARSE_OPT_NONEG,\n \t\t\tparse_reedit_arg},\n-\t\t{ OPTION_CALLBACK, 'C', \"reuse-message\", &msg, \"object\",\n-\t\t\t\"reuse specified note object\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'C', \"reuse-message\", &msg, N_(\"object\"),\n+\t\t\tN_(\"reuse specified note object\"), PARSE_OPT_NONEG,\n \t\t\tparse_reuse_arg},\n-\t\tOPT__FORCE(&force, \"replace existing notes\"),\n+\t\tOPT__FORCE(&force, N_(\"replace existing notes\")),\n \t\tOPT_END()\n \t};\n \n@@ -611,11 +611,11 @@ static int copy(int argc, const char **argv, const char *prefix)\n \tstruct notes_tree *t;\n \tconst char *rewrite_cmd = NULL;\n \tstruct option options[] = {\n-\t\tOPT__FORCE(&force, \"replace existing notes\"),\n-\t\tOPT_BOOLEAN(0, \"stdin\", &from_stdin, \"read objects from stdin\"),\n-\t\tOPT_STRING(0, \"for-rewrite\", &rewrite_cmd, \"command\",\n-\t\t\t   \"load rewriting config for <command> (implies \"\n-\t\t\t   \"--stdin)\"),\n+\t\tOPT__FORCE(&force, N_(\"replace existing notes\")),\n+\t\tOPT_BOOLEAN(0, \"stdin\", &from_stdin, N_(\"read objects from stdin\")),\n+\t\tOPT_STRING(0, \"for-rewrite\", &rewrite_cmd, N_(\"command\"),\n+\t\t\t   N_(\"load rewriting config for <command> (implies \"\n+\t\t\t      \"--stdin)\")),\n \t\tOPT_END()\n \t};\n \n@@ -688,17 +688,17 @@ static int append_edit(int argc, const char **argv, const char *prefix)\n \tconst char * const *usage;\n \tstruct msg_arg msg = { 0, 0, STRBUF_INIT };\n \tstruct option options[] = {\n-\t\t{ OPTION_CALLBACK, 'm', \"message\", &msg, \"msg\",\n-\t\t\t\"note contents as a string\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'm', \"message\", &msg, N_(\"msg\"),\n+\t\t\tN_(\"note contents as a string\"), PARSE_OPT_NONEG,\n \t\t\tparse_msg_arg},\n-\t\t{ OPTION_CALLBACK, 'F', \"file\", &msg, \"file\",\n-\t\t\t\"note contents in a file\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'F', \"file\", &msg, N_(\"file\"),\n+\t\t\tN_(\"note contents in a file\"), PARSE_OPT_NONEG,\n \t\t\tparse_file_arg},\n-\t\t{ OPTION_CALLBACK, 'c', \"reedit-message\", &msg, \"object\",\n-\t\t\t\"reuse and edit specified note object\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'c', \"reedit-message\", &msg, N_(\"object\"),\n+\t\t\tN_(\"reuse and edit specified note object\"), PARSE_OPT_NONEG,\n \t\t\tparse_reedit_arg},\n-\t\t{ OPTION_CALLBACK, 'C', \"reuse-message\", &msg, \"object\",\n-\t\t\t\"reuse specified note object\", PARSE_OPT_NONEG,\n+\t\t{ OPTION_CALLBACK, 'C', \"reuse-message\", &msg, N_(\"object\"),\n+\t\t\tN_(\"reuse specified note object\"), PARSE_OPT_NONEG,\n \t\t\tparse_reuse_arg},\n \t\tOPT_END()\n \t};\n@@ -861,19 +861,19 @@ static int merge(int argc, const char **argv, const char *prefix)\n \tint verbosity = 0, result;\n \tconst char *strategy = NULL;\n \tstruct option options[] = {\n-\t\tOPT_GROUP(\"General options\"),\n+\t\tOPT_GROUP(N_(\"General options\")),\n \t\tOPT__VERBOSITY(&verbosity),\n-\t\tOPT_GROUP(\"Merge options\"),\n-\t\tOPT_STRING('s', \"strategy\", &strategy, \"strategy\",\n-\t\t\t   \"resolve notes conflicts using the given strategy \"\n-\t\t\t   \"(manual/ours/theirs/union/cat_sort_uniq)\"),\n-\t\tOPT_GROUP(\"Committing unmerged notes\"),\n+\t\tOPT_GROUP(N_(\"Merge options\")),\n+\t\tOPT_STRING('s', \"strategy\", &strategy, N_(\"strategy\"),\n+\t\t\t   N_(\"resolve notes conflicts using the given strategy \"\n+\t\t\t      \"(manual/ours/theirs/union/cat_sort_uniq)\")),\n+\t\tOPT_GROUP(N_(\"Committing unmerged notes\")),\n \t\t{ OPTION_BOOLEAN, 0, \"commit\", &do_commit, NULL,\n-\t\t\t\"finalize notes merge by committing unmerged notes\",\n+\t\t\tN_(\"finalize notes merge by committing unmerged notes\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG },\n-\t\tOPT_GROUP(\"Aborting notes merge resolution\"),\n+\t\tOPT_GROUP(N_(\"Aborting notes merge resolution\")),\n \t\t{ OPTION_BOOLEAN, 0, \"abort\", &do_abort, NULL,\n-\t\t\t\"abort notes merge\",\n+\t\t\tN_(\"abort notes merge\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG },\n \t\tOPT_END()\n \t};\n@@ -980,10 +980,10 @@ static int remove_cmd(int argc, const char **argv, const char *prefix)\n \tint from_stdin = 0;\n \tstruct option options[] = {\n \t\tOPT_BIT(0, \"ignore-missing\", &flag,\n-\t\t\t\"attempt to remove non-existent note is not an error\",\n+\t\t\tN_(\"attempt to remove non-existent note is not an error\"),\n \t\t\tIGNORE_MISSING),\n \t\tOPT_BOOLEAN(0, \"stdin\", &from_stdin,\n-\t\t\t    \"read object names from the standard input\"),\n+\t\t\t    N_(\"read object names from the standard input\")),\n \t\tOPT_END()\n \t};\n \tstruct notes_tree *t;\n@@ -1064,8 +1064,8 @@ int cmd_notes(int argc, const char **argv, const char *prefix)\n \tint result;\n \tconst char *override_notes_ref = NULL;\n \tstruct option options[] = {\n-\t\tOPT_STRING(0, \"ref\", &override_notes_ref, \"notes_ref\",\n-\t\t\t   \"use notes from <notes_ref>\"),\n+\t\tOPT_STRING(0, \"ref\", &override_notes_ref, N_(\"notes_ref\"),\n+\t\t\t   N_(\"use notes from <notes_ref>\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192356","messageId":"1338203657-26486-39-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 41/65] i18n: pack-objects: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:53Z","receivedAt":"2012-05-28T11:13:53Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/pack-objects.c | 64 +++++++++++++++++++++++++-------------------------\n 1 file changed, 32 insertions(+), 32 deletions(-)\n\ndiff --git a/builtin/pack-objects.c b/builtin/pack-objects.c\nindex 1861093..a26ac22 100644\n--- a/builtin/pack-objects.c\n+++ b/builtin/pack-objects.c\n@@ -19,8 +19,8 @@\n #include \"thread-utils.h\"\n \n static const char *pack_usage[] = {\n-\t\"git pack-objects --stdout [options...] [< ref-list | < object-list]\",\n-\t\"git pack-objects [options...] base-name [< ref-list | < object-list]\",\n+\tN_(\"git pack-objects --stdout [options...] [< ref-list | < object-list]\"),\n+\tN_(\"git pack-objects [options...] base-name [< ref-list | < object-list]\"),\n \tNULL\n };\n \n@@ -2362,67 +2362,67 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)\n \tint rev_list_unpacked = 0, rev_list_all = 0, rev_list_reflog = 0;\n \tstruct option pack_objects_options[] = {\n \t\tOPT_SET_INT('q', \"quiet\", &progress,\n-\t\t\t    \"do not show progress meter\", 0),\n+\t\t\t    N_(\"do not show progress meter\"), 0),\n \t\tOPT_SET_INT(0, \"progress\", &progress,\n-\t\t\t    \"show progress meter\", 1),\n+\t\t\t    N_(\"show progress meter\"), 1),\n \t\tOPT_SET_INT(0, \"all-progress\", &progress,\n-\t\t\t    \"show progress meter during object writing phase\", 2),\n+\t\t\t    N_(\"show progress meter during object writing phase\"), 2),\n \t\tOPT_BOOL(0, \"all-progress-implied\",\n \t\t\t &all_progress_implied,\n-\t\t\t \"similar to --all-progress when progress meter is shown\"),\n-\t\t{ OPTION_CALLBACK, 0, \"index-version\", NULL, \"version[,offset]\",\n-\t\t  \"write the pack index file in the specified idx format version\",\n+\t\t\t N_(\"similar to --all-progress when progress meter is shown\")),\n+\t\t{ OPTION_CALLBACK, 0, \"index-version\", NULL, N_(\"version[,offset]\"),\n+\t\t  N_(\"write the pack index file in the specified idx format version\"),\n \t\t  0, option_parse_index_version },\n \t\tOPT_ULONG(0, \"max-pack-size\", &pack_size_limit,\n-\t\t\t  \"maximum size of each output pack file\"),\n+\t\t\t  N_(\"maximum size of each output pack file\")),\n \t\tOPT_BOOL(0, \"local\", &local,\n-\t\t\t \"ignore borrowed objects from alternate object store\"),\n+\t\t\t N_(\"ignore borrowed objects from alternate object store\")),\n \t\tOPT_BOOL(0, \"incremental\", &incremental,\n-\t\t\t \"ignore packed objects\"),\n+\t\t\t N_(\"ignore packed objects\")),\n \t\tOPT_INTEGER(0, \"window\", &window,\n-\t\t\t    \"limit pack window by objects\"),\n+\t\t\t    N_(\"limit pack window by objects\")),\n \t\tOPT_ULONG(0, \"window-memory\", &window_memory_limit,\n-\t\t\t  \"limit pack window by memory in addition to object limit\"),\n+\t\t\t  N_(\"limit pack window by memory in addition to object limit\")),\n \t\tOPT_INTEGER(0, \"depth\", &depth,\n-\t\t\t    \"maximum length of delta chain allowed in the resulting pack\"),\n+\t\t\t    N_(\"maximum length of delta chain allowed in the resulting pack\")),\n \t\tOPT_BOOL(0, \"reuse-delta\", &reuse_delta,\n-\t\t\t \"reuse existing deltas\"),\n+\t\t\t N_(\"reuse existing deltas\")),\n \t\tOPT_BOOL(0, \"reuse-object\", &reuse_object,\n-\t\t\t \"reuse existing objects\"),\n+\t\t\t N_(\"reuse existing objects\")),\n \t\tOPT_BOOL(0, \"delta-base-offset\", &allow_ofs_delta,\n-\t\t\t \"use OFS_DELTA objects\"),\n+\t\t\t N_(\"use OFS_DELTA objects\")),\n \t\tOPT_INTEGER(0, \"threads\", &delta_search_threads,\n-\t\t\t    \"use threads when searching for best delta matches\"),\n+\t\t\t    N_(\"use threads when searching for best delta matches\")),\n \t\tOPT_BOOL(0, \"non-empty\", &non_empty,\n-\t\t\t \"do not create an empty pack output\"),\n+\t\t\t N_(\"do not create an empty pack output\")),\n \t\tOPT_BOOL(0, \"revs\", &use_internal_rev_list,\n-\t\t\t \"read revision arguments from standard input\"),\n+\t\t\t N_(\"read revision arguments from standard input\")),\n \t\t{ OPTION_SET_INT, 0, \"unpacked\", &rev_list_unpacked, NULL,\n-\t\t  \"limit the objects to those that are not yet packed\",\n+\t\t  N_(\"limit the objects to those that are not yet packed\"),\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 1 },\n \t\t{ OPTION_SET_INT, 0, \"all\", &rev_list_all, NULL,\n-\t\t  \"include objects reachable from any reference\",\n+\t\t  N_(\"include objects reachable from any reference\"),\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 1 },\n \t\t{ OPTION_SET_INT, 0, \"reflog\", &rev_list_reflog, NULL,\n-\t\t  \"include objects referred by reflog entries\",\n+\t\t  N_(\"include objects referred by reflog entries\"),\n \t\t  PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 1 },\n \t\tOPT_BOOL(0, \"stdout\", &pack_to_stdout,\n-\t\t\t \"output pack to stdout\"),\n+\t\t\t N_(\"output pack to stdout\")),\n \t\tOPT_BOOL(0, \"include-tag\", &include_tag,\n-\t\t\t \"include tag objects that refer to objects to be packed\"),\n+\t\t\t N_(\"include tag objects that refer to objects to be packed\")),\n \t\tOPT_BOOL(0, \"keep-unreachable\", &keep_unreachable,\n-\t\t\t \"keep unreachable objects\"),\n-\t\t{ OPTION_CALLBACK, 0, \"unpack-unreachable\", NULL, \"time\",\n-\t\t  \"unpack unreachable objects newer than <time>\",\n+\t\t\t N_(\"keep unreachable objects\")),\n+\t\t{ OPTION_CALLBACK, 0, \"unpack-unreachable\", NULL, N_(\"time\"),\n+\t\t  N_(\"unpack unreachable objects newer than <time>\"),\n \t\t  PARSE_OPT_OPTARG, option_parse_unpack_unreachable },\n \t\tOPT_BOOL(0, \"thin\", &thin,\n-\t\t\t \"create thin packs\"),\n+\t\t\t N_(\"create thin packs\")),\n \t\tOPT_BOOL(0, \"honor-pack-keep\", &ignore_packed_keep,\n-\t\t\t \"ignore packs that have companion .keep file\"),\n+\t\t\t N_(\"ignore packs that have companion .keep file\")),\n \t\tOPT_INTEGER(0, \"compression\", &pack_compression_level,\n-\t\t\t    \"pack compression level\"),\n+\t\t\t    N_(\"pack compression level\")),\n \t\tOPT_SET_INT(0, \"keep-true-parents\", &grafts_replace_parents,\n-\t\t\t    \"do not hide commits by grafts\", 0),\n+\t\t\t    N_(\"do not hide commits by grafts\"), 0),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192357","messageId":"1338203657-26486-40-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 42/65] i18n: pack-refs: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:54Z","receivedAt":"2012-05-28T11:13:54Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/pack-refs.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin/pack-refs.c b/builtin/pack-refs.c\nindex 39a9d89..b5a0f88 100644\n--- a/builtin/pack-refs.c\n+++ b/builtin/pack-refs.c\n@@ -3,7 +3,7 @@\n #include \"pack-refs.h\"\n \n static char const * const pack_refs_usage[] = {\n-\t\"git pack-refs [options]\",\n+\tN_(\"git pack-refs [options]\"),\n \tNULL\n };\n \n@@ -11,8 +11,8 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix)\n {\n \tunsigned int flags = PACK_REFS_PRUNE;\n \tstruct option opts[] = {\n-\t\tOPT_BIT(0, \"all\",   &flags, \"pack everything\", PACK_REFS_ALL),\n-\t\tOPT_BIT(0, \"prune\", &flags, \"prune loose refs (default)\", PACK_REFS_PRUNE),\n+\t\tOPT_BIT(0, \"all\",   &flags, N_(\"pack everything\"), PACK_REFS_ALL),\n+\t\tOPT_BIT(0, \"prune\", &flags, N_(\"prune loose refs (default)\"), PACK_REFS_PRUNE),\n \t\tOPT_END(),\n \t};\n \tif (parse_options(argc, argv, prefix, opts, pack_refs_usage, 0))\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192358","messageId":"1338203657-26486-41-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 43/65] i18n: prune-packed: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:55Z","receivedAt":"2012-05-28T11:13:55Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/prune-packed.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin/prune-packed.c b/builtin/prune-packed.c\nindex b58a2e1..83382c1 100644\n--- a/builtin/prune-packed.c\n+++ b/builtin/prune-packed.c\n@@ -4,7 +4,7 @@\n #include \"parse-options.h\"\n \n static const char * const prune_packed_usage[] = {\n-\t\"git prune-packed [-n|--dry-run] [-q|--quiet]\",\n+\tN_(\"git prune-packed [-n|--dry-run] [-q|--quiet]\"),\n \tNULL\n };\n \n@@ -73,8 +73,8 @@ int cmd_prune_packed(int argc, const char **argv, const char *prefix)\n {\n \tint opts = isatty(2) ? VERBOSE : 0;\n \tconst struct option prune_packed_options[] = {\n-\t\tOPT_BIT('n', \"dry-run\", &opts, \"dry run\", DRY_RUN),\n-\t\tOPT_NEGBIT('q', \"quiet\", &opts, \"be quiet\", VERBOSE),\n+\t\tOPT_BIT('n', \"dry-run\", &opts, N_(\"dry run\"), DRY_RUN),\n+\t\tOPT_NEGBIT('q', \"quiet\", &opts, N_(\"be quiet\"), VERBOSE),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192359","messageId":"1338203657-26486-42-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 44/65] i18n: prune: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:56Z","receivedAt":"2012-05-28T11:13:56Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/prune.c | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/prune.c b/builtin/prune.c\nindex b99b635..a9e2241 100644\n--- a/builtin/prune.c\n+++ b/builtin/prune.c\n@@ -9,7 +9,7 @@\n #include \"dir.h\"\n \n static const char * const prune_usage[] = {\n-\t\"git prune [-n] [-v] [--expire <time>] [--] [<head>...]\",\n+\tN_(\"git prune [-n] [-v] [--expire <time>] [--] [<head>...]\"),\n \tNULL\n };\n static int show_only;\n@@ -128,11 +128,11 @@ int cmd_prune(int argc, const char **argv, const char *prefix)\n \tstruct rev_info revs;\n \tstruct progress *progress = NULL;\n \tconst struct option options[] = {\n-\t\tOPT__DRY_RUN(&show_only, \"do not remove, show only\"),\n-\t\tOPT__VERBOSE(&verbose, \"report pruned objects\"),\n-\t\tOPT_BOOL(0, \"progress\", &show_progress, \"show progress\"),\n+\t\tOPT__DRY_RUN(&show_only, N_(\"do not remove, show only\")),\n+\t\tOPT__VERBOSE(&verbose, N_(\"report pruned objects\")),\n+\t\tOPT_BOOL(0, \"progress\", &show_progress, N_(\"show progress\")),\n \t\tOPT_DATE(0, \"expire\", &expire,\n-\t\t\t \"expire objects older than <time>\"),\n+\t\t\t N_(\"expire objects older than <time>\")),\n \t\tOPT_END()\n \t};\n \tchar *s;\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192360","messageId":"1338203657-26486-43-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 45/65] i18n: push: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:57Z","receivedAt":"2012-05-28T11:13:57Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/push.c | 34 +++++++++++++++++-----------------\n 1 file changed, 17 insertions(+), 17 deletions(-)\n\ndiff --git a/builtin/push.c b/builtin/push.c\nindex fdfcc6c..4840bc2 100644\n--- a/builtin/push.c\n+++ b/builtin/push.c\n@@ -11,7 +11,7 @@\n #include \"submodule.h\"\n \n static const char * const push_usage[] = {\n-\t\"git push [<options>] [<repository> [<refspec>...]]\",\n+\tN_(\"git push [<options>] [<repository> [<refspec>...]]\"),\n \tNULL,\n };\n \n@@ -354,25 +354,25 @@ int cmd_push(int argc, const char **argv, const char *prefix)\n \tconst char *repo = NULL;\t/* default repository */\n \tstruct option options[] = {\n \t\tOPT__VERBOSITY(&verbosity),\n-\t\tOPT_STRING( 0 , \"repo\", &repo, \"repository\", \"repository\"),\n-\t\tOPT_BIT( 0 , \"all\", &flags, \"push all refs\", TRANSPORT_PUSH_ALL),\n-\t\tOPT_BIT( 0 , \"mirror\", &flags, \"mirror all refs\",\n+\t\tOPT_STRING( 0 , \"repo\", &repo, N_(\"repository\"), N_(\"repository\")),\n+\t\tOPT_BIT( 0 , \"all\", &flags, N_(\"push all refs\"), TRANSPORT_PUSH_ALL),\n+\t\tOPT_BIT( 0 , \"mirror\", &flags, N_(\"mirror all refs\"),\n \t\t\t    (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE)),\n-\t\tOPT_BOOLEAN( 0, \"delete\", &deleterefs, \"delete refs\"),\n-\t\tOPT_BOOLEAN( 0 , \"tags\", &tags, \"push tags (can't be used with --all or --mirror)\"),\n-\t\tOPT_BIT('n' , \"dry-run\", &flags, \"dry run\", TRANSPORT_PUSH_DRY_RUN),\n-\t\tOPT_BIT( 0,  \"porcelain\", &flags, \"machine-readable output\", TRANSPORT_PUSH_PORCELAIN),\n-\t\tOPT_BIT('f', \"force\", &flags, \"force updates\", TRANSPORT_PUSH_FORCE),\n-\t\t{ OPTION_CALLBACK, 0, \"recurse-submodules\", &flags, \"check\",\n-\t\t\t\"controls recursive pushing of submodules\",\n+\t\tOPT_BOOLEAN( 0, \"delete\", &deleterefs, N_(\"delete refs\")),\n+\t\tOPT_BOOLEAN( 0 , \"tags\", &tags, N_(\"push tags (can't be used with --all or --mirror)\")),\n+\t\tOPT_BIT('n' , \"dry-run\", &flags, N_(\"dry run\"), TRANSPORT_PUSH_DRY_RUN),\n+\t\tOPT_BIT( 0,  \"porcelain\", &flags, N_(\"machine-readable output\"), TRANSPORT_PUSH_PORCELAIN),\n+\t\tOPT_BIT('f', \"force\", &flags, N_(\"force updates\"), TRANSPORT_PUSH_FORCE),\n+\t\t{ OPTION_CALLBACK, 0, \"recurse-submodules\", &flags, N_(\"check\"),\n+\t\t\tN_(\"controls recursive pushing of submodules\"),\n \t\t\tPARSE_OPT_OPTARG, option_parse_recurse_submodules },\n-\t\tOPT_BOOLEAN( 0 , \"thin\", &thin, \"use thin pack\"),\n-\t\tOPT_STRING( 0 , \"receive-pack\", &receivepack, \"receive-pack\", \"receive pack program\"),\n-\t\tOPT_STRING( 0 , \"exec\", &receivepack, \"receive-pack\", \"receive pack program\"),\n-\t\tOPT_BIT('u', \"set-upstream\", &flags, \"set upstream for git pull/status\",\n+\t\tOPT_BOOLEAN( 0 , \"thin\", &thin, N_(\"use thin pack\")),\n+\t\tOPT_STRING( 0 , \"receive-pack\", &receivepack, \"receive-pack\", N_(\"receive pack program\")),\n+\t\tOPT_STRING( 0 , \"exec\", &receivepack, \"receive-pack\", N_(\"receive pack program\")),\n+\t\tOPT_BIT('u', \"set-upstream\", &flags, N_(\"set upstream for git pull/status\"),\n \t\t\tTRANSPORT_PUSH_SET_UPSTREAM),\n-\t\tOPT_BOOL(0, \"progress\", &progress, \"force progress reporting\"),\n-\t\tOPT_BIT(0, \"prune\", &flags, \"prune locally removed refs\",\n+\t\tOPT_BOOL(0, \"progress\", &progress, N_(\"force progress reporting\")),\n+\t\tOPT_BIT(0, \"prune\", &flags, N_(\"prune locally removed refs\"),\n \t\t\tTRANSPORT_PUSH_PRUNE),\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192361","messageId":"1338203657-26486-44-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 46/65] i18n: read-tree: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:58Z","receivedAt":"2012-05-28T11:13:58Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/read-tree.c | 38 +++++++++++++++++++-------------------\n 1 file changed, 19 insertions(+), 19 deletions(-)\n\ndiff --git a/builtin/read-tree.c b/builtin/read-tree.c\nindex df6c4c8..042ac1b 100644\n--- a/builtin/read-tree.c\n+++ b/builtin/read-tree.c\n@@ -33,7 +33,7 @@ static int list_tree(unsigned char *sha1)\n }\n \n static const char * const read_tree_usage[] = {\n-\t\"git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>] [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])\",\n+\tN_(\"git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>] [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])\"),\n \tNULL\n };\n \n@@ -104,37 +104,37 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)\n \tstruct unpack_trees_options opts;\n \tint prefix_set = 0;\n \tconst struct option read_tree_options[] = {\n-\t\t{ OPTION_CALLBACK, 0, \"index-output\", NULL, \"file\",\n-\t\t  \"write resulting index to <file>\",\n+\t\t{ OPTION_CALLBACK, 0, \"index-output\", NULL, N_(\"file\"),\n+\t\t  N_(\"write resulting index to <file>\"),\n \t\t  PARSE_OPT_NONEG, index_output_cb },\n \t\tOPT_SET_INT(0, \"empty\", &read_empty,\n-\t\t\t    \"only empty the index\", 1),\n-\t\tOPT__VERBOSE(&opts.verbose_update, \"be verbose\"),\n-\t\tOPT_GROUP(\"Merging\"),\n+\t\t\t    N_(\"only empty the index\"), 1),\n+\t\tOPT__VERBOSE(&opts.verbose_update, N_(\"be verbose\")),\n+\t\tOPT_GROUP(N_(\"Merging\")),\n \t\tOPT_SET_INT('m', NULL, &opts.merge,\n-\t\t\t    \"perform a merge in addition to a read\", 1),\n+\t\t\t    N_(\"perform a merge in addition to a read\"), 1),\n \t\tOPT_SET_INT(0, \"trivial\", &opts.trivial_merges_only,\n-\t\t\t    \"3-way merge if no file level merging required\", 1),\n+\t\t\t    N_(\"3-way merge if no file level merging required\"), 1),\n \t\tOPT_SET_INT(0, \"aggressive\", &opts.aggressive,\n-\t\t\t    \"3-way merge in presence of adds and removes\", 1),\n+\t\t\t    N_(\"3-way merge in presence of adds and removes\"), 1),\n \t\tOPT_SET_INT(0, \"reset\", &opts.reset,\n-\t\t\t    \"same as -m, but discard unmerged entries\", 1),\n-\t\t{ OPTION_STRING, 0, \"prefix\", &opts.prefix, \"<subdirectory>/\",\n-\t\t  \"read the tree into the index under <subdirectory>/\",\n+\t\t\t    N_(\"same as -m, but discard unmerged entries\"), 1),\n+\t\t{ OPTION_STRING, 0, \"prefix\", &opts.prefix, N_(\"<subdirectory>/\"),\n+\t\t  N_(\"read the tree into the index under <subdirectory>/\"),\n \t\t  PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP },\n \t\tOPT_SET_INT('u', NULL, &opts.update,\n-\t\t\t    \"update working tree with merge result\", 1),\n+\t\t\t    N_(\"update working tree with merge result\"), 1),\n \t\t{ OPTION_CALLBACK, 0, \"exclude-per-directory\", &opts,\n-\t\t  \"gitignore\",\n-\t\t  \"allow explicitly ignored files to be overwritten\",\n+\t\t  N_(\"gitignore\"),\n+\t\t  N_(\"allow explicitly ignored files to be overwritten\"),\n \t\t  PARSE_OPT_NONEG, exclude_per_directory_cb },\n \t\tOPT_SET_INT('i', NULL, &opts.index_only,\n-\t\t\t    \"don't check the working tree after merging\", 1),\n-\t\tOPT__DRY_RUN(&opts.dry_run, \"don't update the index or the work tree\"),\n+\t\t\t    N_(\"don't check the working tree after merging\"), 1),\n+\t\tOPT__DRY_RUN(&opts.dry_run, N_(\"don't update the index or the work tree\")),\n \t\tOPT_SET_INT(0, \"no-sparse-checkout\", &opts.skip_sparse_checkout,\n-\t\t\t    \"skip applying sparse checkout filter\", 1),\n+\t\t\t    N_(\"skip applying sparse checkout filter\"), 1),\n \t\tOPT_SET_INT(0, \"debug-unpack\", &opts.debug_unpack,\n-\t\t\t    \"debug unpack-trees\", 1),\n+\t\t\t    N_(\"debug unpack-trees\"), 1),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192362","messageId":"1338203657-26486-45-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 47/65] i18n: remote: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:13:59Z","receivedAt":"2012-05-28T11:13:59Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/remote.c | 84 ++++++++++++++++++++++++++++----------------------------\n 1 file changed, 42 insertions(+), 42 deletions(-)\n\ndiff --git a/builtin/remote.c b/builtin/remote.c\nindex 920262d..8a670d8 100644\n--- a/builtin/remote.c\n+++ b/builtin/remote.c\n@@ -8,66 +8,66 @@\n #include \"refs.h\"\n \n static const char * const builtin_remote_usage[] = {\n-\t\"git remote [-v | --verbose]\",\n-\t\"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <name> <url>\",\n-\t\"git remote rename <old> <new>\",\n-\t\"git remote rm <name>\",\n-\t\"git remote set-head <name> (-a | -d | <branch>)\",\n-\t\"git remote [-v | --verbose] show [-n] <name>\",\n-\t\"git remote prune [-n | --dry-run] <name>\",\n-\t\"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]\",\n-\t\"git remote set-branches [--add] <name> <branch>...\",\n-\t\"git remote set-url [--push] <name> <newurl> [<oldurl>]\",\n-\t\"git remote set-url --add <name> <newurl>\",\n-\t\"git remote set-url --delete <name> <url>\",\n+\tN_(\"git remote [-v | --verbose]\"),\n+\tN_(\"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <name> <url>\"),\n+\tN_(\"git remote rename <old> <new>\"),\n+\tN_(\"git remote rm <name>\"),\n+\tN_(\"git remote set-head <name> (-a | -d | <branch>)\"),\n+\tN_(\"git remote [-v | --verbose] show [-n] <name>\"),\n+\tN_(\"git remote prune [-n | --dry-run] <name>\"),\n+\tN_(\"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]\"),\n+\tN_(\"git remote set-branches [--add] <name> <branch>...\"),\n+\tN_(\"git remote set-url [--push] <name> <newurl> [<oldurl>]\"),\n+\tN_(\"git remote set-url --add <name> <newurl>\"),\n+\tN_(\"git remote set-url --delete <name> <url>\"),\n \tNULL\n };\n \n static const char * const builtin_remote_add_usage[] = {\n-\t\"git remote add [<options>] <name> <url>\",\n+\tN_(\"git remote add [<options>] <name> <url>\"),\n \tNULL\n };\n \n static const char * const builtin_remote_rename_usage[] = {\n-\t\"git remote rename <old> <new>\",\n+\tN_(\"git remote rename <old> <new>\"),\n \tNULL\n };\n \n static const char * const builtin_remote_rm_usage[] = {\n-\t\"git remote rm <name>\",\n+\tN_(\"git remote rm <name>\"),\n \tNULL\n };\n \n static const char * const builtin_remote_sethead_usage[] = {\n-\t\"git remote set-head <name> (-a | -d | <branch>])\",\n+\tN_(\"git remote set-head <name> (-a | -d | <branch>])\"),\n \tNULL\n };\n \n static const char * const builtin_remote_setbranches_usage[] = {\n-\t\"git remote set-branches <name> <branch>...\",\n-\t\"git remote set-branches --add <name> <branch>...\",\n+\tN_(\"git remote set-branches <name> <branch>...\"),\n+\tN_(\"git remote set-branches --add <name> <branch>...\"),\n \tNULL\n };\n \n static const char * const builtin_remote_show_usage[] = {\n-\t\"git remote show [<options>] <name>\",\n+\tN_(\"git remote show [<options>] <name>\"),\n \tNULL\n };\n \n static const char * const builtin_remote_prune_usage[] = {\n-\t\"git remote prune [<options>] <name>\",\n+\tN_(\"git remote prune [<options>] <name>\"),\n \tNULL\n };\n \n static const char * const builtin_remote_update_usage[] = {\n-\t\"git remote update [<options>] [<group> | <remote>]...\",\n+\tN_(\"git remote update [<options>] [<group> | <remote>]...\"),\n \tNULL\n };\n \n static const char * const builtin_remote_seturl_usage[] = {\n-\t\"git remote set-url [--push] <name> <newurl> [<oldurl>]\",\n-\t\"git remote set-url --add <name> <newurl>\",\n-\t\"git remote set-url --delete <name> <url>\",\n+\tN_(\"git remote set-url [--push] <name> <newurl> [<oldurl>]\"),\n+\tN_(\"git remote set-url --add <name> <newurl>\"),\n+\tN_(\"git remote set-url --delete <name> <url>\"),\n \tNULL\n };\n \n@@ -160,17 +160,17 @@ static int add(int argc, const char **argv)\n \tint i;\n \n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN('f', \"fetch\", &fetch, \"fetch the remote branches\"),\n+\t\tOPT_BOOLEAN('f', \"fetch\", &fetch, N_(\"fetch the remote branches\")),\n \t\tOPT_SET_INT(0, \"tags\", &fetch_tags,\n-\t\t\t    \"import all tags and associated objects when fetching\",\n+\t\t\t    N_(\"import all tags and associated objects when fetching\"),\n \t\t\t    TAGS_SET),\n \t\tOPT_SET_INT(0, NULL, &fetch_tags,\n-\t\t\t    \"or do not fetch any tag at all (--no-tags)\", TAGS_UNSET),\n-\t\tOPT_STRING_LIST('t', \"track\", &track, \"branch\",\n-\t\t\t\t\"branch(es) to track\"),\n-\t\tOPT_STRING('m', \"master\", &master, \"branch\", \"master branch\"),\n-\t\t{ OPTION_CALLBACK, 0, \"mirror\", &mirror, \"push|fetch\",\n-\t\t\t\"set up remote as a mirror to push to or fetch from\",\n+\t\t\t    N_(\"or do not fetch any tag at all (--no-tags)\"), TAGS_UNSET),\n+\t\tOPT_STRING_LIST('t', \"track\", &track, N_(\"branch\"),\n+\t\t\t\tN_(\"branch(es) to track\")),\n+\t\tOPT_STRING('m', \"master\", &master, N_(\"branch\"), N_(\"master branch\")),\n+\t\t{ OPTION_CALLBACK, 0, \"mirror\", &mirror, N_(\"push|fetch\"),\n+\t\t\tN_(\"set up remote as a mirror to push to or fetch from\"),\n \t\t\tPARSE_OPT_OPTARG, parse_mirror_opt },\n \t\tOPT_END()\n \t};\n@@ -1088,7 +1088,7 @@ static int show(int argc, const char **argv)\n {\n \tint no_query = 0, result = 0, query_flag = 0;\n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN('n', NULL, &no_query, \"do not query remotes\"),\n+\t\tOPT_BOOLEAN('n', NULL, &no_query, N_(\"do not query remotes\")),\n \t\tOPT_END()\n \t};\n \tstruct ref_states states;\n@@ -1196,9 +1196,9 @@ static int set_head(int argc, const char **argv)\n \n \tstruct option options[] = {\n \t\tOPT_BOOLEAN('a', \"auto\", &opt_a,\n-\t\t\t    \"set refs/remotes/<name>/HEAD according to remote\"),\n+\t\t\t    N_(\"set refs/remotes/<name>/HEAD according to remote\")),\n \t\tOPT_BOOLEAN('d', \"delete\", &opt_d,\n-\t\t\t    \"delete refs/remotes/<name>/HEAD\"),\n+\t\t\t    N_(\"delete refs/remotes/<name>/HEAD\")),\n \t\tOPT_END()\n \t};\n \targc = parse_options(argc, argv, NULL, options, builtin_remote_sethead_usage,\n@@ -1250,7 +1250,7 @@ static int prune(int argc, const char **argv)\n {\n \tint dry_run = 0, result = 0;\n \tstruct option options[] = {\n-\t\tOPT__DRY_RUN(&dry_run, \"dry run\"),\n+\t\tOPT__DRY_RUN(&dry_run, N_(\"dry run\")),\n \t\tOPT_END()\n \t};\n \n@@ -1318,7 +1318,7 @@ static int update(int argc, const char **argv)\n \tint i, prune = 0;\n \tstruct option options[] = {\n \t\tOPT_BOOLEAN('p', \"prune\", &prune,\n-\t\t\t    \"prune remotes after fetching\"),\n+\t\t\t    N_(\"prune remotes after fetching\")),\n \t\tOPT_END()\n \t};\n \tconst char **fetch_argv;\n@@ -1404,7 +1404,7 @@ static int set_branches(int argc, const char **argv)\n {\n \tint add_mode = 0;\n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN('\\0', \"add\", &add_mode, \"add branch\"),\n+\t\tOPT_BOOLEAN('\\0', \"add\", &add_mode, N_(\"add branch\")),\n \t\tOPT_END()\n \t};\n \n@@ -1433,11 +1433,11 @@ static int set_url(int argc, const char **argv)\n \tstruct strbuf name_buf = STRBUF_INIT;\n \tstruct option options[] = {\n \t\tOPT_BOOLEAN('\\0', \"push\", &push_mode,\n-\t\t\t    \"manipulate push URLs\"),\n+\t\t\t    N_(\"manipulate push URLs\")),\n \t\tOPT_BOOLEAN('\\0', \"add\", &add_mode,\n-\t\t\t    \"add URL\"),\n+\t\t\t    N_(\"add URL\")),\n \t\tOPT_BOOLEAN('\\0', \"delete\", &delete_mode,\n-\t\t\t    \"delete URLs\"),\n+\t\t\t    N_(\"delete URLs\")),\n \t\tOPT_END()\n \t};\n \targc = parse_options(argc, argv, NULL, options, builtin_remote_seturl_usage,\n@@ -1566,7 +1566,7 @@ static int show_all(void)\n int cmd_remote(int argc, const char **argv, const char *prefix)\n {\n \tstruct option options[] = {\n-\t\tOPT__VERBOSE(&verbose, \"be verbose; must be placed before a subcommand\"),\n+\t\tOPT__VERBOSE(&verbose, N_(\"be verbose; must be placed before a subcommand\")),\n \t\tOPT_END()\n \t};\n \tint result;\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192363","messageId":"1338203657-26486-46-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 48/65] i18n: replace: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:00Z","receivedAt":"2012-05-28T11:14:00Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/replace.c | 12 ++++++------\n 1 file changed, 6 insertions(+), 6 deletions(-)\n\ndiff --git a/builtin/replace.c b/builtin/replace.c\nindex 4a8970e..e3aaf70 100644\n--- a/builtin/replace.c\n+++ b/builtin/replace.c\n@@ -14,9 +14,9 @@\n #include \"parse-options.h\"\n \n static const char * const git_replace_usage[] = {\n-\t\"git replace [-f] <object> <replacement>\",\n-\t\"git replace -d <object>...\",\n-\t\"git replace -l [<pattern>]\",\n+\tN_(\"git replace [-f] <object> <replacement>\"),\n+\tN_(\"git replace -d <object>...\"),\n+\tN_(\"git replace -l [<pattern>]\"),\n \tNULL\n };\n \n@@ -115,9 +115,9 @@ int cmd_replace(int argc, const char **argv, const char *prefix)\n {\n \tint list = 0, delete = 0, force = 0;\n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN('l', NULL, &list, \"list replace refs\"),\n-\t\tOPT_BOOLEAN('d', NULL, &delete, \"delete replace refs\"),\n-\t\tOPT_BOOLEAN('f', NULL, &force, \"replace the ref if it exists\"),\n+\t\tOPT_BOOLEAN('l', NULL, &list, N_(\"list replace refs\")),\n+\t\tOPT_BOOLEAN('d', NULL, &delete, N_(\"delete replace refs\")),\n+\t\tOPT_BOOLEAN('f', NULL, &force, N_(\"replace the ref if it exists\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192364","messageId":"1338203657-26486-47-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 49/65] i18n: status: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:01Z","receivedAt":"2012-05-28T11:14:01Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/commit.c | 22 +++++++++++-----------\n 1 file changed, 11 insertions(+), 11 deletions(-)\n\ndiff --git a/builtin/commit.c b/builtin/commit.c\nindex 34d723b..d94719b 100644\n--- a/builtin/commit.c\n+++ b/builtin/commit.c\n@@ -35,7 +35,7 @@ static const char * const builtin_commit_usage[] = {\n };\n \n static const char * const builtin_status_usage[] = {\n-\t\"git status [options] [--] <filepattern>...\",\n+\tN_(\"git status [options] [--] <filepattern>...\"),\n \tNULL\n };\n \n@@ -1167,24 +1167,24 @@ int cmd_status(int argc, const char **argv, const char *prefix)\n \tint fd;\n \tunsigned char sha1[20];\n \tstatic struct option builtin_status_options[] = {\n-\t\tOPT__VERBOSE(&verbose, \"be verbose\"),\n+\t\tOPT__VERBOSE(&verbose, N_(\"be verbose\")),\n \t\tOPT_SET_INT('s', \"short\", &status_format,\n-\t\t\t    \"show status concisely\", STATUS_FORMAT_SHORT),\n+\t\t\t    N_(\"show status concisely\"), STATUS_FORMAT_SHORT),\n \t\tOPT_BOOLEAN('b', \"branch\", &s.show_branch,\n-\t\t\t    \"show branch information\"),\n+\t\t\t    N_(\"show branch information\")),\n \t\tOPT_SET_INT(0, \"porcelain\", &status_format,\n-\t\t\t    \"machine-readable output\",\n+\t\t\t    N_(\"machine-readable output\"),\n \t\t\t    STATUS_FORMAT_PORCELAIN),\n \t\tOPT_BOOLEAN('z', \"null\", &s.null_termination,\n-\t\t\t    \"terminate entries with NUL\"),\n+\t\t\t    N_(\"terminate entries with NUL\")),\n \t\t{ OPTION_STRING, 'u', \"untracked-files\", &untracked_files_arg,\n-\t\t  \"mode\",\n-\t\t  \"show untracked files, optional modes: all, normal, no. (Default: all)\",\n+\t\t  N_(\"mode\"),\n+\t\t  N_(\"show untracked files, optional modes: all, normal, no. (Default: all)\"),\n \t\t  PARSE_OPT_OPTARG, NULL, (intptr_t)\"all\" },\n \t\tOPT_BOOLEAN(0, \"ignored\", &show_ignored_in_status,\n-\t\t\t    \"show ignored files\"),\n-\t\t{ OPTION_STRING, 0, \"ignore-submodules\", &ignore_submodule_arg, \"when\",\n-\t\t  \"ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)\",\n+\t\t\t    N_(\"show ignored files\")),\n+\t\t{ OPTION_STRING, 0, \"ignore-submodules\", &ignore_submodule_arg, N_(\"when\"),\n+\t\t  N_(\"ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)\"),\n \t\t  PARSE_OPT_OPTARG, NULL, (intptr_t)\"all\" },\n \t\tOPT_COLUMN(0, \"column\", &s.colopts, \"list untracked files in columns\"),\n \t\tOPT_END(),\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192366","messageId":"1338203657-26486-48-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 50/65] i18n: rerere: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:02Z","receivedAt":"2012-05-28T11:14:02Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/rerere.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/builtin/rerere.c b/builtin/rerere.c\nindex 08213c7..dc1708e 100644\n--- a/builtin/rerere.c\n+++ b/builtin/rerere.c\n@@ -8,7 +8,7 @@\n #include \"xdiff-interface.h\"\n \n static const char * const rerere_usage[] = {\n-\t\"git rerere [clear | forget path... | status | remaining | diff | gc]\",\n+\tN_(\"git rerere [clear | forget path... | status | remaining | diff | gc]\"),\n \tNULL,\n };\n \n@@ -53,7 +53,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)\n \n \tstruct option options[] = {\n \t\tOPT_SET_INT(0, \"rerere-autoupdate\", &autoupdate,\n-\t\t\t\"register clean resolutions in index\", 1),\n+\t\t\tN_(\"register clean resolutions in index\"), 1),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192365","messageId":"1338203657-26486-49-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 51/65] i18n: reset: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:03Z","receivedAt":"2012-05-28T11:14:03Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/reset.c | 20 ++++++++++----------\n 1 file changed, 10 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/reset.c b/builtin/reset.c\nindex 8c2c1d5..813b3a6 100644\n--- a/builtin/reset.c\n+++ b/builtin/reset.c\n@@ -22,9 +22,9 @@\n #include \"cache-tree.h\"\n \n static const char * const git_reset_usage[] = {\n-\t\"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]\",\n-\t\"git reset [-q] <commit> [--] <paths>...\",\n-\t\"git reset --patch [<commit>] [--] [<paths>...]\",\n+\tN_(\"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]\"),\n+\tN_(\"git reset [-q] <commit> [--] <paths>...\"),\n+\tN_(\"git reset --patch [<commit>] [--] [<paths>...]\"),\n \tNULL\n };\n \n@@ -235,17 +235,17 @@ int cmd_reset(int argc, const char **argv, const char *prefix)\n \tstruct commit *commit;\n \tstruct strbuf msg = STRBUF_INIT;\n \tconst struct option options[] = {\n-\t\tOPT__QUIET(&quiet, \"be quiet, only report errors\"),\n+\t\tOPT__QUIET(&quiet, N_(\"be quiet, only report errors\")),\n \t\tOPT_SET_INT(0, \"mixed\", &reset_type,\n-\t\t\t\t\t\t\"reset HEAD and index\", MIXED),\n-\t\tOPT_SET_INT(0, \"soft\", &reset_type, \"reset only HEAD\", SOFT),\n+\t\t\t\t\t\tN_(\"reset HEAD and index\"), MIXED),\n+\t\tOPT_SET_INT(0, \"soft\", &reset_type, N_(\"reset only HEAD\"), SOFT),\n \t\tOPT_SET_INT(0, \"hard\", &reset_type,\n-\t\t\t\t\"reset HEAD, index and working tree\", HARD),\n+\t\t\t\tN_(\"reset HEAD, index and working tree\"), HARD),\n \t\tOPT_SET_INT(0, \"merge\", &reset_type,\n-\t\t\t\t\"reset HEAD, index and working tree\", MERGE),\n+\t\t\t\tN_(\"reset HEAD, index and working tree\"), MERGE),\n \t\tOPT_SET_INT(0, \"keep\", &reset_type,\n-\t\t\t\t\"reset HEAD but keep local changes\", KEEP),\n-\t\tOPT_BOOLEAN('p', \"patch\", &patch_mode, \"select hunks interactively\"),\n+\t\t\t\tN_(\"reset HEAD but keep local changes\"), KEEP),\n+\t\tOPT_BOOLEAN('p', \"patch\", &patch_mode, N_(\"select hunks interactively\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192367","messageId":"1338203657-26486-50-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 52/65] i18n: rev-parse: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:04Z","receivedAt":"2012-05-28T11:14:04Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/rev-parse.c | 18 +++++++++---------\n 1 file changed, 9 insertions(+), 9 deletions(-)\n\ndiff --git a/builtin/rev-parse.c b/builtin/rev-parse.c\nindex 733f626..1f79aa5 100644\n--- a/builtin/rev-parse.c\n+++ b/builtin/rev-parse.c\n@@ -318,15 +318,15 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n {\n \tstatic int keep_dashdash = 0, stop_at_non_option = 0;\n \tstatic char const * const parseopt_usage[] = {\n-\t\t\"git rev-parse --parseopt [options] -- [<args>...]\",\n+\t\tN_(\"git rev-parse --parseopt [options] -- [<args>...]\"),\n \t\tNULL\n \t};\n \tstatic struct option parseopt_opts[] = {\n \t\tOPT_BOOLEAN(0, \"keep-dashdash\", &keep_dashdash,\n-\t\t\t\t\t\"keep the `--` passed as an arg\"),\n+\t\t\t\t\tN_(\"keep the `--` passed as an arg\")),\n \t\tOPT_BOOLEAN(0, \"stop-at-non-option\", &stop_at_non_option,\n-\t\t\t\t\t\"stop parsing after the \"\n-\t\t\t\t\t\"first non-option argument\"),\n+\t\t\t\t\tN_(\"stop parsing after the \"\n+\t\t\t\t\t   \"first non-option argument\")),\n \t\tOPT_END(),\n \t};\n \n@@ -443,11 +443,11 @@ static void die_no_single_rev(int quiet)\n }\n \n static const char builtin_rev_parse_usage[] =\n-\"git rev-parse --parseopt [options] -- [<args>...]\\n\"\n-\"   or: git rev-parse --sq-quote [<arg>...]\\n\"\n-\"   or: git rev-parse [options] [<arg>...]\\n\"\n-\"\\n\"\n-\"Run \\\"git rev-parse --parseopt -h\\\" for more information on the first usage.\";\n+N_(\"git rev-parse --parseopt [options] -- [<args>...]\\n\"\n+   \"   or: git rev-parse --sq-quote [<arg>...]\\n\"\n+   \"   or: git rev-parse [options] [<arg>...]\\n\"\n+   \"\\n\"\n+   \"Run \\\"git rev-parse --parseopt -h\\\" for more information on the first usage.\");\n \n int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n {\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192368","messageId":"1338203657-26486-51-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 53/65] i18n: revert, cherry-pick: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:05Z","receivedAt":"2012-05-28T11:14:05Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/revert.c | 36 ++++++++++++++++++------------------\n 1 file changed, 18 insertions(+), 18 deletions(-)\n\ndiff --git a/builtin/revert.c b/builtin/revert.c\nindex 82d1bf8..02ca95f 100644\n--- a/builtin/revert.c\n+++ b/builtin/revert.c\n@@ -19,14 +19,14 @@\n  */\n \n static const char * const revert_usage[] = {\n-\t\"git revert [options] <commit-ish>\",\n-\t\"git revert <subcommand>\",\n+\tN_(\"git revert [options] <commit-ish>\"),\n+\tN_(\"git revert <subcommand>\"),\n \tNULL\n };\n \n static const char * const cherry_pick_usage[] = {\n-\t\"git cherry-pick [options] <commit-ish>\",\n-\t\"git cherry-pick <subcommand>\",\n+\tN_(\"git cherry-pick [options] <commit-ish>\"),\n+\tN_(\"git cherry-pick <subcommand>\"),\n \tNULL\n };\n \n@@ -100,18 +100,18 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)\n \tint contin = 0;\n \tint rollback = 0;\n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN(0, \"quit\", &remove_state, \"end revert or cherry-pick sequence\"),\n-\t\tOPT_BOOLEAN(0, \"continue\", &contin, \"resume revert or cherry-pick sequence\"),\n-\t\tOPT_BOOLEAN(0, \"abort\", &rollback, \"cancel revert or cherry-pick sequence\"),\n-\t\tOPT_BOOLEAN('n', \"no-commit\", &opts->no_commit, \"don't automatically commit\"),\n-\t\tOPT_BOOLEAN('e', \"edit\", &opts->edit, \"edit the commit message\"),\n+\t\tOPT_BOOLEAN(0, \"quit\", &remove_state, N_(\"end revert or cherry-pick sequence\")),\n+\t\tOPT_BOOLEAN(0, \"continue\", &contin, N_(\"resume revert or cherry-pick sequence\")),\n+\t\tOPT_BOOLEAN(0, \"abort\", &rollback, N_(\"cancel revert or cherry-pick sequence\")),\n+\t\tOPT_BOOLEAN('n', \"no-commit\", &opts->no_commit, N_(\"don't automatically commit\")),\n+\t\tOPT_BOOLEAN('e', \"edit\", &opts->edit, N_(\"edit the commit message\")),\n \t\tOPT_NOOP_NOARG('r', NULL),\n-\t\tOPT_BOOLEAN('s', \"signoff\", &opts->signoff, \"add Signed-off-by:\"),\n-\t\tOPT_INTEGER('m', \"mainline\", &opts->mainline, \"parent number\"),\n+\t\tOPT_BOOLEAN('s', \"signoff\", &opts->signoff, N_(\"add Signed-off-by:\")),\n+\t\tOPT_INTEGER('m', \"mainline\", &opts->mainline, N_(\"parent number\")),\n \t\tOPT_RERERE_AUTOUPDATE(&opts->allow_rerere_auto),\n-\t\tOPT_STRING(0, \"strategy\", &opts->strategy, \"strategy\", \"merge strategy\"),\n-\t\tOPT_CALLBACK('X', \"strategy-option\", &opts, \"option\",\n-\t\t\t\"option for merge strategy\", option_parse_x),\n+\t\tOPT_STRING(0, \"strategy\", &opts->strategy, N_(\"strategy\"), N_(\"merge strategy\")),\n+\t\tOPT_CALLBACK('X', \"strategy-option\", &opts, N_(\"option\"),\n+\t\t\tN_(\"option for merge strategy\"), option_parse_x),\n \t\tOPT_END(),\n \t\tOPT_END(),\n \t\tOPT_END(),\n@@ -121,10 +121,10 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)\n \n \tif (opts->action == REPLAY_PICK) {\n \t\tstruct option cp_extra[] = {\n-\t\t\tOPT_BOOLEAN('x', NULL, &opts->record_origin, \"append commit name\"),\n-\t\t\tOPT_BOOLEAN(0, \"ff\", &opts->allow_ff, \"allow fast-forward\"),\n-\t\t\tOPT_BOOLEAN(0, \"allow-empty\", &opts->allow_empty, \"preserve initially empty commits\"),\n-\t\t\tOPT_BOOLEAN(0, \"keep-redundant-commits\", &opts->keep_redundant_commits, \"keep redundant, empty commits\"),\n+\t\t\tOPT_BOOLEAN('x', NULL, &opts->record_origin, N_(\"append commit name\")),\n+\t\t\tOPT_BOOLEAN(0, \"ff\", &opts->allow_ff, N_(\"allow fast-forward\")),\n+\t\t\tOPT_BOOLEAN(0, \"allow-empty\", &opts->allow_empty, N_(\"preserve initially empty commits\")),\n+\t\t\tOPT_BOOLEAN(0, \"keep-redundant-commits\", &opts->keep_redundant_commits, N_(\"keep redundant, empty commits\")),\n \t\t\tOPT_END(),\n \t\t};\n \t\tif (parse_options_concat(options, ARRAY_SIZE(options), cp_extra))\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192369","messageId":"1338203657-26486-52-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 54/65] i18n: rm: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:06Z","receivedAt":"2012-05-28T11:14:06Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/rm.c | 14 +++++++-------\n 1 file changed, 7 insertions(+), 7 deletions(-)\n\ndiff --git a/builtin/rm.c b/builtin/rm.c\nindex 90c8a50..b384c4c 100644\n--- a/builtin/rm.c\n+++ b/builtin/rm.c\n@@ -11,7 +11,7 @@\n #include \"parse-options.h\"\n \n static const char * const builtin_rm_usage[] = {\n-\t\"git rm [options] [--] <file>...\",\n+\tN_(\"git rm [options] [--] <file>...\"),\n \tNULL\n };\n \n@@ -130,13 +130,13 @@ static int show_only = 0, force = 0, index_only = 0, recursive = 0, quiet = 0;\n static int ignore_unmatch = 0;\n \n static struct option builtin_rm_options[] = {\n-\tOPT__DRY_RUN(&show_only, \"dry run\"),\n-\tOPT__QUIET(&quiet, \"do not list removed files\"),\n-\tOPT_BOOLEAN( 0 , \"cached\",         &index_only, \"only remove from the index\"),\n-\tOPT__FORCE(&force, \"override the up-to-date check\"),\n-\tOPT_BOOLEAN('r', NULL,             &recursive,  \"allow recursive removal\"),\n+\tOPT__DRY_RUN(&show_only, N_(\"dry run\")),\n+\tOPT__QUIET(&quiet, N_(\"do not list removed files\")),\n+\tOPT_BOOLEAN( 0 , \"cached\",         &index_only, N_(\"only remove from the index\")),\n+\tOPT__FORCE(&force, N_(\"override the up-to-date check\")),\n+\tOPT_BOOLEAN('r', NULL,             &recursive,  N_(\"allow recursive removal\")),\n \tOPT_BOOLEAN( 0 , \"ignore-unmatch\", &ignore_unmatch,\n-\t\t\t\t\"exit with a zero status even if nothing matched\"),\n+\t\t\t\tN_(\"exit with a zero status even if nothing matched\")),\n \tOPT_END(),\n };\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192370","messageId":"1338203657-26486-53-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 55/65] i18n: shortlog: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:07Z","receivedAt":"2012-05-28T11:14:07Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/shortlog.c | 14 +++++++-------\n 1 file changed, 7 insertions(+), 7 deletions(-)\n\ndiff --git a/builtin/shortlog.c b/builtin/shortlog.c\nindex 37f3193..b316cf3 100644\n--- a/builtin/shortlog.c\n+++ b/builtin/shortlog.c\n@@ -10,9 +10,9 @@\n #include \"parse-options.h\"\n \n static char const * const shortlog_usage[] = {\n-\t\"git shortlog [-n] [-s] [-e] [-w] [rev-opts] [--] [<commit-id>... ]\",\n+\tN_(\"git shortlog [-n] [-s] [-e] [-w] [rev-opts] [--] [<commit-id>... ]\"),\n \t\"\",\n-\t\"[rev-opts] are documented in git-rev-list(1)\",\n+\tN_(\"[rev-opts] are documented in git-rev-list(1)\"),\n \tNULL\n };\n \n@@ -250,13 +250,13 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)\n \n \tstatic const struct option options[] = {\n \t\tOPT_BOOLEAN('n', \"numbered\", &log.sort_by_number,\n-\t\t\t    \"sort output according to the number of commits per author\"),\n+\t\t\t    N_(\"sort output according to the number of commits per author\")),\n \t\tOPT_BOOLEAN('s', \"summary\", &log.summary,\n-\t\t\t    \"Suppress commit descriptions, only provides commit count\"),\n+\t\t\t    N_(\"Suppress commit descriptions, only provides commit count\")),\n \t\tOPT_BOOLEAN('e', \"email\", &log.email,\n-\t\t\t    \"Show the email address of each author\"),\n-\t\t{ OPTION_CALLBACK, 'w', NULL, &log, \"w[,i1[,i2]]\",\n-\t\t\t\"Linewrap output\", PARSE_OPT_OPTARG, &parse_wrap_args },\n+\t\t\t    N_(\"Show the email address of each author\")),\n+\t\t{ OPTION_CALLBACK, 'w', NULL, &log, N_(\"w[,i1[,i2]]\"),\n+\t\t\tN_(\"Linewrap output\"), PARSE_OPT_OPTARG, &parse_wrap_args },\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192371","messageId":"1338203657-26486-54-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 56/65] i18n: show-branch: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:08Z","receivedAt":"2012-05-28T11:14:08Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/show-branch.c | 42 +++++++++++++++++++++---------------------\n 1 file changed, 21 insertions(+), 21 deletions(-)\n\ndiff --git a/builtin/show-branch.c b/builtin/show-branch.c\nindex a59e088..d208fd6 100644\n--- a/builtin/show-branch.c\n+++ b/builtin/show-branch.c\n@@ -6,8 +6,8 @@\n #include \"parse-options.h\"\n \n static const char* show_branch_usage[] = {\n-    \"git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--current] [--color[=<when>] | --no-color] [--sparse] [--more=<n> | --list | --independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]\",\n-    \"git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]\",\n+    N_(\"git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--current] [--color[=<when>] | --no-color] [--sparse] [--more=<n> | --list | --independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]\"),\n+    N_(\"git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]\"),\n     NULL\n };\n \n@@ -648,36 +648,36 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \tconst char *reflog_base = NULL;\n \tstruct option builtin_show_branch_options[] = {\n \t\tOPT_BOOLEAN('a', \"all\", &all_heads,\n-\t\t\t    \"show remote-tracking and local branches\"),\n+\t\t\t    N_(\"show remote-tracking and local branches\")),\n \t\tOPT_BOOLEAN('r', \"remotes\", &all_remotes,\n-\t\t\t    \"show remote-tracking branches\"),\n+\t\t\t    N_(\"show remote-tracking branches\")),\n \t\tOPT__COLOR(&showbranch_use_color,\n-\t\t\t    \"color '*!+-' corresponding to the branch\"),\n-\t\t{ OPTION_INTEGER, 0, \"more\", &extra, \"n\",\n-\t\t\t    \"show <n> more commits after the common ancestor\",\n+\t\t\t    N_(\"color '*!+-' corresponding to the branch\")),\n+\t\t{ OPTION_INTEGER, 0, \"more\", &extra, N_(\"n\"),\n+\t\t\t    N_(\"show <n> more commits after the common ancestor\"),\n \t\t\t    PARSE_OPT_OPTARG, NULL, (intptr_t)1 },\n-\t\tOPT_SET_INT(0, \"list\", &extra, \"synonym to more=-1\", -1),\n-\t\tOPT_BOOLEAN(0, \"no-name\", &no_name, \"suppress naming strings\"),\n+\t\tOPT_SET_INT(0, \"list\", &extra, N_(\"synonym to more=-1\"), -1),\n+\t\tOPT_BOOLEAN(0, \"no-name\", &no_name, N_(\"suppress naming strings\")),\n \t\tOPT_BOOLEAN(0, \"current\", &with_current_branch,\n-\t\t\t    \"include the current branch\"),\n+\t\t\t    N_(\"include the current branch\")),\n \t\tOPT_BOOLEAN(0, \"sha1-name\", &sha1_name,\n-\t\t\t    \"name commits with their object names\"),\n+\t\t\t    N_(\"name commits with their object names\")),\n \t\tOPT_BOOLEAN(0, \"merge-base\", &merge_base,\n-\t\t\t    \"show possible merge bases\"),\n+\t\t\t    N_(\"show possible merge bases\")),\n \t\tOPT_BOOLEAN(0, \"independent\", &independent,\n-\t\t\t    \"show refs unreachable from any other ref\"),\n+\t\t\t    N_(\"show refs unreachable from any other ref\")),\n \t\tOPT_BOOLEAN(0, \"topo-order\", &lifo,\n-\t\t\t    \"show commits in topological order\"),\n+\t\t\t    N_(\"show commits in topological order\")),\n \t\tOPT_BOOLEAN(0, \"topics\", &topics,\n-\t\t\t    \"show only commits not on the first branch\"),\n+\t\t\t    N_(\"show only commits not on the first branch\")),\n \t\tOPT_SET_INT(0, \"sparse\", &dense,\n-\t\t\t    \"show merges reachable from only one tip\", 0),\n+\t\t\t    N_(\"show merges reachable from only one tip\"), 0),\n \t\tOPT_SET_INT(0, \"date-order\", &lifo,\n-\t\t\t    \"show commits where no parent comes before its \"\n-\t\t\t    \"children\", 0),\n-\t\t{ OPTION_CALLBACK, 'g', \"reflog\", &reflog_base, \"<n>[,<base>]\",\n-\t\t\t    \"show <n> most recent ref-log entries starting at \"\n-\t\t\t    \"base\",\n+\t\t\t    N_(\"show commits where no parent comes before its \"\n+\t\t\t       \"children\"), 0),\n+\t\t{ OPTION_CALLBACK, 'g', \"reflog\", &reflog_base, N_(\"<n>[,<base>]\"),\n+\t\t\t    N_(\"show <n> most recent ref-log entries starting at \"\n+\t\t\t       \"base\"),\n \t\t\t    PARSE_OPT_OPTARG | PARSE_OPT_LITERAL_ARGHELP,\n \t\t\t    parse_reflog_param },\n \t\tOPT_END()\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192372","messageId":"1338203657-26486-55-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 57/65] i18n: show-ref: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:09Z","receivedAt":"2012-05-28T11:14:09Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/show-ref.c | 28 ++++++++++++++--------------\n 1 file changed, 14 insertions(+), 14 deletions(-)\n\ndiff --git a/builtin/show-ref.c b/builtin/show-ref.c\nindex 3911661..4eb016d 100644\n--- a/builtin/show-ref.c\n+++ b/builtin/show-ref.c\n@@ -7,8 +7,8 @@\n #include \"parse-options.h\"\n \n static const char * const show_ref_usage[] = {\n-\t\"git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [pattern*] \",\n-\t\"git show-ref --exclude-existing[=pattern] < ref-list\",\n+\tN_(\"git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [pattern*] \"),\n+\tN_(\"git show-ref --exclude-existing[=pattern] < ref-list\"),\n \tNULL\n };\n \n@@ -179,26 +179,26 @@ static int help_callback(const struct option *opt, const char *arg, int unset)\n }\n \n static const struct option show_ref_options[] = {\n-\tOPT_BOOLEAN(0, \"tags\", &tags_only, \"only show tags (can be combined with heads)\"),\n-\tOPT_BOOLEAN(0, \"heads\", &heads_only, \"only show heads (can be combined with tags)\"),\n-\tOPT_BOOLEAN(0, \"verify\", &verify, \"stricter reference checking, \"\n-\t\t    \"requires exact ref path\"),\n+\tOPT_BOOLEAN(0, \"tags\", &tags_only, N_(\"only show tags (can be combined with heads)\")),\n+\tOPT_BOOLEAN(0, \"heads\", &heads_only, N_(\"only show heads (can be combined with tags)\")),\n+\tOPT_BOOLEAN(0, \"verify\", &verify, N_(\"stricter reference checking, \"\n+\t\t    \"requires exact ref path\")),\n \t{ OPTION_BOOLEAN, 'h', NULL, &show_head, NULL,\n-\t  \"show the HEAD reference\",\n+\t  N_(\"show the HEAD reference\"),\n \t  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },\n-\tOPT_BOOLEAN(0, \"head\", &show_head, \"show the HEAD reference\"),\n+\tOPT_BOOLEAN(0, \"head\", &show_head, N_(\"show the HEAD reference\")),\n \tOPT_BOOLEAN('d', \"dereference\", &deref_tags,\n-\t\t    \"dereference tags into object IDs\"),\n-\t{ OPTION_CALLBACK, 's', \"hash\", &abbrev, \"n\",\n-\t  \"only show SHA1 hash using <n> digits\",\n+\t\t    N_(\"dereference tags into object IDs\")),\n+\t{ OPTION_CALLBACK, 's', \"hash\", &abbrev, N_(\"n\"),\n+\t  N_(\"only show SHA1 hash using <n> digits\"),\n \t  PARSE_OPT_OPTARG, &hash_callback },\n \tOPT__ABBREV(&abbrev),\n \tOPT__QUIET(&quiet,\n-\t\t   \"do not print results to stdout (useful with --verify)\"),\n+\t\t   N_(\"do not print results to stdout (useful with --verify)\")),\n \t{ OPTION_CALLBACK, 0, \"exclude-existing\", &exclude_existing_arg,\n-\t  \"pattern\", \"show refs from stdin that aren't in local repository\",\n+\t  N_(\"pattern\"), N_(\"show refs from stdin that aren't in local repository\"),\n \t  PARSE_OPT_OPTARG | PARSE_OPT_NONEG, exclude_existing_callback },\n-\t{ OPTION_CALLBACK, 0, \"help-all\", NULL, NULL, \"show usage\",\n+\t{ OPTION_CALLBACK, 0, \"help-all\", NULL, NULL, N_(\"show usage\"),\n \t  PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, help_callback },\n \tOPT_END()\n };\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192373","messageId":"1338203657-26486-56-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 58/65] i18n: symbolic-ref: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:10Z","receivedAt":"2012-05-28T11:14:10Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/symbolic-ref.c | 8 ++++----\n 1 file changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/builtin/symbolic-ref.c b/builtin/symbolic-ref.c\nindex 801d62e..9e92828 100644\n--- a/builtin/symbolic-ref.c\n+++ b/builtin/symbolic-ref.c\n@@ -4,7 +4,7 @@\n #include \"parse-options.h\"\n \n static const char * const git_symbolic_ref_usage[] = {\n-\t\"git symbolic-ref [options] name [ref]\",\n+\tN_(\"git symbolic-ref [options] name [ref]\"),\n \tNULL\n };\n \n@@ -35,9 +35,9 @@ int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)\n \tconst char *msg = NULL;\n \tstruct option options[] = {\n \t\tOPT__QUIET(&quiet,\n-\t\t\t\"suppress error message for non-symbolic (detached) refs\"),\n-\t\tOPT_BOOL(0, \"short\", &shorten, \"shorten ref output\"),\n-\t\tOPT_STRING('m', NULL, &msg, \"reason\", \"reason of the update\"),\n+\t\t\tN_(\"suppress error message for non-symbolic (detached) refs\")),\n+\t\tOPT_BOOL(0, \"short\", &shorten, N_(\"shorten ref output\")),\n+\t\tOPT_STRING('m', NULL, &msg, N_(\"reason\"), N_(\"reason of the update\")),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192374","messageId":"1338203657-26486-57-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 59/65] i18n: tag: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:11Z","receivedAt":"2012-05-28T11:14:11Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/tag.c | 56 ++++++++++++++++++++++++++++----------------------------\n 1 file changed, 28 insertions(+), 28 deletions(-)\n\ndiff --git a/builtin/tag.c b/builtin/tag.c\nindex 4fb6bd7..326fe5f 100644\n--- a/builtin/tag.c\n+++ b/builtin/tag.c\n@@ -19,11 +19,11 @@\n #include \"column.h\"\n \n static const char * const git_tag_usage[] = {\n-\t\"git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]\",\n-\t\"git tag -d <tagname>...\",\n-\t\"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] \"\n-\t\t\"\\n\\t\\t[<pattern>...]\",\n-\t\"git tag -v <tagname>...\",\n+\tN_(\"git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]\"),\n+\tN_(\"git tag -d <tagname>...\"),\n+\tN_(\"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] \"\n+\t\t\"\\n\\t\\t[<pattern>...]\"),\n+\tN_(\"git tag -v <tagname>...\"),\n \tNULL\n };\n \n@@ -444,37 +444,37 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \tstruct msg_arg msg = { 0, STRBUF_INIT };\n \tstruct commit_list *with_commit = NULL;\n \tstruct option options[] = {\n-\t\tOPT_BOOLEAN('l', \"list\", &list, \"list tag names\"),\n-\t\t{ OPTION_INTEGER, 'n', NULL, &lines, \"n\",\n-\t\t\t\t\"print <n> lines of each tag message\",\n+\t\tOPT_BOOLEAN('l', \"list\", &list, N_(\"list tag names\")),\n+\t\t{ OPTION_INTEGER, 'n', NULL, &lines, N_(\"n\"),\n+\t\t\t\tN_(\"print <n> lines of each tag message\"),\n \t\t\t\tPARSE_OPT_OPTARG, NULL, 1 },\n-\t\tOPT_BOOLEAN('d', \"delete\", &delete, \"delete tags\"),\n-\t\tOPT_BOOLEAN('v', \"verify\", &verify, \"verify tags\"),\n+\t\tOPT_BOOLEAN('d', \"delete\", &delete, N_(\"delete tags\")),\n+\t\tOPT_BOOLEAN('v', \"verify\", &verify, N_(\"verify tags\")),\n \n-\t\tOPT_GROUP(\"Tag creation options\"),\n+\t\tOPT_GROUP(N_(\"Tag creation options\")),\n \t\tOPT_BOOLEAN('a', \"annotate\", &annotate,\n-\t\t\t\t\t\"annotated tag, needs a message\"),\n-\t\tOPT_CALLBACK('m', \"message\", &msg, \"message\",\n-\t\t\t     \"tag message\", parse_msg_arg),\n-\t\tOPT_FILENAME('F', \"file\", &msgfile, \"read message from file\"),\n-\t\tOPT_BOOLEAN('s', \"sign\", &opt.sign, \"annotated and GPG-signed tag\"),\n-\t\tOPT_STRING(0, \"cleanup\", &cleanup_arg, \"mode\",\n-\t\t\t\"how to strip spaces and #comments from message\"),\n-\t\tOPT_STRING('u', \"local-user\", &keyid, \"key-id\",\n-\t\t\t\t\t\"use another key to sign the tag\"),\n-\t\tOPT__FORCE(&force, \"replace the tag if exists\"),\n-\t\tOPT_COLUMN(0, \"column\", &colopts, \"show tag list in columns\"),\n-\n-\t\tOPT_GROUP(\"Tag listing options\"),\n+\t\t\t\t\tN_(\"annotated tag, needs a message\")),\n+\t\tOPT_CALLBACK('m', \"message\", &msg, N_(\"message\"),\n+\t\t\t     N_(\"tag message\"), parse_msg_arg),\n+\t\tOPT_FILENAME('F', \"file\", &msgfile, N_(\"read message from file\")),\n+\t\tOPT_BOOLEAN('s', \"sign\", &opt.sign, N_(\"annotated and GPG-signed tag\")),\n+\t\tOPT_STRING(0, \"cleanup\", &cleanup_arg, N_(\"mode\"),\n+\t\t\tN_(\"how to strip spaces and #comments from message\")),\n+\t\tOPT_STRING('u', \"local-user\", &keyid, N_(\"key-id\"),\n+\t\t\t\t\tN_(\"use another key to sign the tag\")),\n+\t\tOPT__FORCE(&force, N_(\"replace the tag if exists\")),\n+\t\tOPT_COLUMN(0, \"column\", &colopts, N_(\"show tag list in columns\")),\n+\n+\t\tOPT_GROUP(N_(\"Tag listing options\")),\n \t\t{\n-\t\t\tOPTION_CALLBACK, 0, \"contains\", &with_commit, \"commit\",\n-\t\t\t\"print only tags that contain the commit\",\n+\t\t\tOPTION_CALLBACK, 0, \"contains\", &with_commit, N_(\"commit\"),\n+\t\t\tN_(\"print only tags that contain the commit\"),\n \t\t\tPARSE_OPT_LASTARG_DEFAULT,\n \t\t\tparse_opt_with_commit, (intptr_t)\"HEAD\",\n \t\t},\n \t\t{\n-\t\t\tOPTION_CALLBACK, 0, \"points-at\", NULL, \"object\",\n-\t\t\t\"print only tags of the object\", 0, parse_opt_points_at\n+\t\t\tOPTION_CALLBACK, 0, \"points-at\", NULL, N_(\"object\"),\n+\t\t\tN_(\"print only tags of the object\"), 0, parse_opt_points_at\n \t\t},\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192375","messageId":"1338203657-26486-58-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 60/65] i18n: update-index: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:12Z","receivedAt":"2012-05-28T11:14:12Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/update-index.c | 54 +++++++++++++++++++++++++-------------------------\n 1 file changed, 27 insertions(+), 27 deletions(-)\n\ndiff --git a/builtin/update-index.c b/builtin/update-index.c\nindex 5f038d6..d611b98 100644\n--- a/builtin/update-index.c\n+++ b/builtin/update-index.c\n@@ -402,7 +402,7 @@ static void read_index_info(int line_termination)\n }\n \n static const char * const update_index_usage[] = {\n-\t\"git update-index [options] [--] [<file>...]\",\n+\tN_(\"git update-index [options] [--] [<file>...]\"),\n \tNULL\n };\n \n@@ -717,79 +717,79 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)\n \tint parseopt_state = PARSE_OPT_UNKNOWN;\n \tstruct option options[] = {\n \t\tOPT_BIT('q', NULL, &refresh_args.flags,\n-\t\t\t\"continue refresh even when index needs update\",\n+\t\t\tN_(\"continue refresh even when index needs update\"),\n \t\t\tREFRESH_QUIET),\n \t\tOPT_BIT(0, \"ignore-submodules\", &refresh_args.flags,\n-\t\t\t\"refresh: ignore submodules\",\n+\t\t\tN_(\"refresh: ignore submodules\"),\n \t\t\tREFRESH_IGNORE_SUBMODULES),\n \t\tOPT_SET_INT(0, \"add\", &allow_add,\n-\t\t\t\"do not ignore new files\", 1),\n+\t\t\tN_(\"do not ignore new files\"), 1),\n \t\tOPT_SET_INT(0, \"replace\", &allow_replace,\n-\t\t\t\"let files replace directories and vice-versa\", 1),\n+\t\t\tN_(\"let files replace directories and vice-versa\"), 1),\n \t\tOPT_SET_INT(0, \"remove\", &allow_remove,\n-\t\t\t\"notice files missing from worktree\", 1),\n+\t\t\tN_(\"notice files missing from worktree\"), 1),\n \t\tOPT_BIT(0, \"unmerged\", &refresh_args.flags,\n-\t\t\t\"refresh even if index contains unmerged entries\",\n+\t\t\tN_(\"refresh even if index contains unmerged entries\"),\n \t\t\tREFRESH_UNMERGED),\n \t\t{OPTION_CALLBACK, 0, \"refresh\", &refresh_args, NULL,\n-\t\t\t\"refresh stat information\",\n+\t\t\tN_(\"refresh stat information\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG,\n \t\t\trefresh_callback},\n \t\t{OPTION_CALLBACK, 0, \"really-refresh\", &refresh_args, NULL,\n-\t\t\t\"like --refresh, but ignore assume-unchanged setting\",\n+\t\t\tN_(\"like --refresh, but ignore assume-unchanged setting\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG,\n \t\t\treally_refresh_callback},\n \t\t{OPTION_LOWLEVEL_CALLBACK, 0, \"cacheinfo\", NULL,\n-\t\t\t\"<mode> <object> <path>\",\n-\t\t\t\"add the specified entry to the index\",\n+\t\t\tN_(\"<mode> <object> <path>\"),\n+\t\t\tN_(\"add the specified entry to the index\"),\n \t\t\tPARSE_OPT_NOARG |\t/* disallow --cacheinfo=<mode> form */\n \t\t\tPARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,\n \t\t\t(parse_opt_cb *) cacheinfo_callback},\n-\t\t{OPTION_CALLBACK, 0, \"chmod\", &set_executable_bit, \"(+/-)x\",\n-\t\t\t\"override the executable bit of the listed files\",\n+\t\t{OPTION_CALLBACK, 0, \"chmod\", &set_executable_bit, N_(\"(+/-)x\"),\n+\t\t\tN_(\"override the executable bit of the listed files\"),\n \t\t\tPARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,\n \t\t\tchmod_callback},\n \t\t{OPTION_SET_INT, 0, \"assume-unchanged\", &mark_valid_only, NULL,\n-\t\t\t\"mark files as \\\"not changing\\\"\",\n+\t\t\tN_(\"mark files as \\\"not changing\\\"\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, MARK_FLAG},\n \t\t{OPTION_SET_INT, 0, \"no-assume-unchanged\", &mark_valid_only, NULL,\n-\t\t\t\"clear assumed-unchanged bit\",\n+\t\t\tN_(\"clear assumed-unchanged bit\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, UNMARK_FLAG},\n \t\t{OPTION_SET_INT, 0, \"skip-worktree\", &mark_skip_worktree_only, NULL,\n-\t\t\t\"mark files as \\\"index-only\\\"\",\n+\t\t\tN_(\"mark files as \\\"index-only\\\"\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, MARK_FLAG},\n \t\t{OPTION_SET_INT, 0, \"no-skip-worktree\", &mark_skip_worktree_only, NULL,\n-\t\t\t\"clear skip-worktree bit\",\n+\t\t\tN_(\"clear skip-worktree bit\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, UNMARK_FLAG},\n \t\tOPT_SET_INT(0, \"info-only\", &info_only,\n-\t\t\t\"add to index only; do not add content to object database\", 1),\n+\t\t\tN_(\"add to index only; do not add content to object database\"), 1),\n \t\tOPT_SET_INT(0, \"force-remove\", &force_remove,\n-\t\t\t\"remove named paths even if present in worktree\", 1),\n+\t\t\tN_(\"remove named paths even if present in worktree\"), 1),\n \t\tOPT_SET_INT('z', NULL, &line_termination,\n-\t\t\t\"with --stdin: input lines are terminated by null bytes\", '\\0'),\n+\t\t\tN_(\"with --stdin: input lines are terminated by null bytes\"), '\\0'),\n \t\t{OPTION_LOWLEVEL_CALLBACK, 0, \"stdin\", &read_from_stdin, NULL,\n-\t\t\t\"read list of paths to be updated from standard input\",\n+\t\t\tN_(\"read list of paths to be updated from standard input\"),\n \t\t\tPARSE_OPT_NONEG | PARSE_OPT_NOARG,\n \t\t\t(parse_opt_cb *) stdin_callback},\n \t\t{OPTION_LOWLEVEL_CALLBACK, 0, \"index-info\", &line_termination, NULL,\n-\t\t\t\"add entries from standard input to the index\",\n+\t\t\tN_(\"add entries from standard input to the index\"),\n \t\t\tPARSE_OPT_NONEG | PARSE_OPT_NOARG,\n \t\t\t(parse_opt_cb *) stdin_cacheinfo_callback},\n \t\t{OPTION_LOWLEVEL_CALLBACK, 0, \"unresolve\", &has_errors, NULL,\n-\t\t\t\"repopulate stages #2 and #3 for the listed paths\",\n+\t\t\tN_(\"repopulate stages #2 and #3 for the listed paths\"),\n \t\t\tPARSE_OPT_NONEG | PARSE_OPT_NOARG,\n \t\t\t(parse_opt_cb *) unresolve_callback},\n \t\t{OPTION_LOWLEVEL_CALLBACK, 'g', \"again\", &has_errors, NULL,\n-\t\t\t\"only update entries that differ from HEAD\",\n+\t\t\tN_(\"only update entries that differ from HEAD\"),\n \t\t\tPARSE_OPT_NONEG | PARSE_OPT_NOARG,\n \t\t\t(parse_opt_cb *) reupdate_callback},\n \t\tOPT_BIT(0, \"ignore-missing\", &refresh_args.flags,\n-\t\t\t\"ignore files missing from worktree\",\n+\t\t\tN_(\"ignore files missing from worktree\"),\n \t\t\tREFRESH_IGNORE_MISSING),\n \t\tOPT_SET_INT(0, \"verbose\", &verbose,\n-\t\t\t\"report actions to standard output\", 1),\n+\t\t\tN_(\"report actions to standard output\"), 1),\n \t\t{OPTION_CALLBACK, 0, \"clear-resolve-undo\", NULL, NULL,\n-\t\t\t\"(for porcelains) forget saved unresolved conflicts\",\n+\t\t\tN_(\"(for porcelains) forget saved unresolved conflicts\"),\n \t\t\tPARSE_OPT_NOARG | PARSE_OPT_NONEG,\n \t\t\tresolve_undo_clear_callback},\n \t\tOPT_INTEGER(0, \"index-version\", &preferred_index_format,\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192377","messageId":"1338203657-26486-59-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 61/65] i18n: update-ref: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:13Z","receivedAt":"2012-05-28T11:14:13Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/update-ref.c | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/update-ref.c b/builtin/update-ref.c\nindex 835c62a..b30394f 100644\n--- a/builtin/update-ref.c\n+++ b/builtin/update-ref.c\n@@ -4,8 +4,8 @@\n #include \"parse-options.h\"\n \n static const char * const git_update_ref_usage[] = {\n-\t\"git update-ref [options] -d <refname> [<oldval>]\",\n-\t\"git update-ref [options]    <refname> <newval> [<oldval>]\",\n+\tN_(\"git update-ref [options] -d <refname> [<oldval>]\"),\n+\tN_(\"git update-ref [options]    <refname> <newval> [<oldval>]\"),\n \tNULL\n };\n \n@@ -15,10 +15,10 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)\n \tunsigned char sha1[20], oldsha1[20];\n \tint delete = 0, no_deref = 0, flags = 0;\n \tstruct option options[] = {\n-\t\tOPT_STRING( 'm', NULL, &msg, \"reason\", \"reason of the update\"),\n-\t\tOPT_BOOLEAN('d', NULL, &delete, \"deletes the reference\"),\n+\t\tOPT_STRING( 'm', NULL, &msg, N_(\"reason\"), N_(\"reason of the update\")),\n+\t\tOPT_BOOLEAN('d', NULL, &delete, N_(\"deletes the reference\")),\n \t\tOPT_BOOLEAN( 0 , \"no-deref\", &no_deref,\n-\t\t\t\t\t\"update <refname> not the one it points to\"),\n+\t\t\t\t\tN_(\"update <refname> not the one it points to\")),\n \t\tOPT_END(),\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192376","messageId":"1338203657-26486-60-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 62/65] i18n: update-server-info: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:14Z","receivedAt":"2012-05-28T11:14:14Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/update-server-info.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/builtin/update-server-info.c b/builtin/update-server-info.c\nindex 0d63c44..6c8cc3e 100644\n--- a/builtin/update-server-info.c\n+++ b/builtin/update-server-info.c\n@@ -3,7 +3,7 @@\n #include \"parse-options.h\"\n \n static const char * const update_server_info_usage[] = {\n-\t\"git update-server-info [--force]\",\n+\tN_(\"git update-server-info [--force]\"),\n \tNULL\n };\n \n@@ -11,7 +11,7 @@ int cmd_update_server_info(int argc, const char **argv, const char *prefix)\n {\n \tint force = 0;\n \tstruct option options[] = {\n-\t\tOPT__FORCE(&force, \"update the info files from scratch\"),\n+\t\tOPT__FORCE(&force, N_(\"update the info files from scratch\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192379","messageId":"1338203657-26486-61-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 63/65] i18n: verify-pack: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:15Z","receivedAt":"2012-05-28T11:14:15Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/verify-pack.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin/verify-pack.c b/builtin/verify-pack.c\nindex e841b4a..66cd2df 100644\n--- a/builtin/verify-pack.c\n+++ b/builtin/verify-pack.c\n@@ -53,7 +53,7 @@ static int verify_one_pack(const char *path, unsigned int flags)\n }\n \n static const char * const verify_pack_usage[] = {\n-\t\"git verify-pack [-v|--verbose] [-s|--stat-only] <pack>...\",\n+\tN_(\"git verify-pack [-v|--verbose] [-s|--stat-only] <pack>...\"),\n \tNULL\n };\n \n@@ -63,9 +63,9 @@ int cmd_verify_pack(int argc, const char **argv, const char *prefix)\n \tunsigned int flags = 0;\n \tint i;\n \tconst struct option verify_pack_options[] = {\n-\t\tOPT_BIT('v', \"verbose\", &flags, \"verbose\",\n+\t\tOPT_BIT('v', \"verbose\", &flags, N_(\"verbose\"),\n \t\t\tVERIFY_PACK_VERBOSE),\n-\t\tOPT_BIT('s', \"stat-only\", &flags, \"show statistics only\",\n+\t\tOPT_BIT('s', \"stat-only\", &flags, N_(\"show statistics only\"),\n \t\t\tVERIFY_PACK_STAT_ONLY),\n \t\tOPT_END()\n \t};\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192380","messageId":"1338203657-26486-62-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 64/65] i18n: verify-tag: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:16Z","receivedAt":"2012-05-28T11:14:16Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/verify-tag.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/builtin/verify-tag.c b/builtin/verify-tag.c\nindex 986789f..a8eee88 100644\n--- a/builtin/verify-tag.c\n+++ b/builtin/verify-tag.c\n@@ -14,7 +14,7 @@\n #include \"gpg-interface.h\"\n \n static const char * const verify_tag_usage[] = {\n-\t\t\"git verify-tag [-v|--verbose] <tag>...\",\n+\t\tN_(\"git verify-tag [-v|--verbose] <tag>...\"),\n \t\tNULL\n };\n \n@@ -70,7 +70,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)\n {\n \tint i = 1, verbose = 0, had_error = 0;\n \tconst struct option verify_tag_options[] = {\n-\t\tOPT__VERBOSE(&verbose, \"print tag contents\"),\n+\t\tOPT__VERBOSE(&verbose, N_(\"print tag contents\")),\n \t\tOPT_END()\n \t};\n \n-- \n1.7.10.2.549.g9354186\n"},{"id":"192381","messageId":"1338203657-26486-63-git-send-email-pclouds@gmail.com","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"[PATCH 65/65] i18n: write-tree: mark parseopt strings for translation","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-28T11:14:17Z","receivedAt":"2012-05-28T11:14:17Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/write-tree.c | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/write-tree.c b/builtin/write-tree.c\nindex b223af4..084c0df 100644\n--- a/builtin/write-tree.c\n+++ b/builtin/write-tree.c\n@@ -10,7 +10,7 @@\n #include \"parse-options.h\"\n \n static const char * const write_tree_usage[] = {\n-\t\"git write-tree [--missing-ok] [--prefix=<prefix>/]\",\n+\tN_(\"git write-tree [--missing-ok] [--prefix=<prefix>/]\"),\n \tNULL\n };\n \n@@ -21,13 +21,13 @@ int cmd_write_tree(int argc, const char **argv, const char *unused_prefix)\n \tunsigned char sha1[20];\n \tconst char *me = \"git-write-tree\";\n \tstruct option write_tree_options[] = {\n-\t\tOPT_BIT(0, \"missing-ok\", &flags, \"allow missing objects\",\n+\t\tOPT_BIT(0, \"missing-ok\", &flags, N_(\"allow missing objects\"),\n \t\t\tWRITE_TREE_MISSING_OK),\n-\t\t{ OPTION_STRING, 0, \"prefix\", &prefix, \"<prefix>/\",\n-\t\t  \"write tree object for a subdirectory <prefix>\" ,\n+\t\t{ OPTION_STRING, 0, \"prefix\", &prefix, N_(\"<prefix>/\"),\n+\t\t  N_(\"write tree object for a subdirectory <prefix>\") ,\n \t\t  PARSE_OPT_LITERAL_ARGHELP },\n \t\t{ OPTION_BIT, 0, \"ignore-cache-tree\", &flags, NULL,\n-\t\t  \"only useful for debugging\",\n+\t\t  N_(\"only useful for debugging\"),\n \t\t  PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, NULL,\n \t\t  WRITE_TREE_IGNORE_CACHE_TREE },\n \t\tOPT_END()\n-- \n1.7.10.2.549.g9354186\n"},{"id":"192405","messageId":"20120528224729.GK14606@burratino","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2012-05-28T22:47:29Z","receivedAt":"2012-05-28T22:47:29Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Nguyễn Thái Ngọc Duy wrote:\n\n>  rc times are usually more quiet times, let's slip the series in..\n>  minor conflict with revert topic in pu, but should be easy to\n>  resolve.\n\nThanks.  Some semi-automated checks follow. :)\n\n\"git log --name-status\" reveals that files these patches change don't\noverlap.  Good.\n\nFiltering out changes involving N, _, (, and ) by running \"git diff\n--word-diff-regex='[^N_()]' origin/master\", the remaining changes are\nin\n\n\tbuiltin/for-each-ref.c\n\tbuiltin/ls-tree.c\n\tbuiltin/notes.c\n\tbuiltin/rev-parse.c\n\tbuiltin/show-branch.c\n\nThese are whitespace adjustments to keep continuation lines lined up\ngiven the extra \"N_(\" characters, except for the for-each-ref.c change\nwhich is an unrelated conversion of 8 spaces to a tab (also seems\nfine).\n\nGETTEXT_POISON is annoyed by\n\n  t0006.1-11 relative dates\n\n\ttest-date show $t >actual &&\n\ttest_cmp expect actual\n\n  t0040.1 test help\n\n\ttest_must_fail test-parse-options -h > output 2> output.err &&\n\ttest_cmp expect output\n\n  t0040.11-12 handling of unknown options\n\n\ttest_must_fail test-parse-options $* >output 2>output.err &&\n\ttest_cmp expect output.err\n\n  t0040.27 form of errors from OPT_CALLBACK\n\n\ttest_cmp expect.err output.err\n\n  t1300.48 no arguments, but no crash\n\n\tgrep usage output\n\n  t1502.1 --parseopt help output\n\n\ttest_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&\n\ttest_cmp expect output\n\n  t2006.1,2 checkout-index --gobbledegook, -h\n\n\tgrep \"[Uu]sage\" err\n\n  t2107.2 update-index --nonsense dumps usage\n\n\tgrep \"[Uu]sage: git update-index\" err\n\n  t3004.3 ls-files with nonsense option\n\n\tgrep \"[Uu]sage: git ls-files\" actual\n\n  t3004.4 ls-files -h in corrupt repository\n\n\tgrep \"[Uu]sage: git ls-files \" broken/usage\n\n  t3200.3 branch -h in broken repository\n\n\tgrep \"[Uu]sage\" broken/usage\n\n  t3200.10 branch -m dumps usage\n\n\tgrep \"[Uu]sage: git branch\" err'\n\n  t3501.2,3 cherry-pick/revert --nonsense\n\n\ttest_must_fail git cherry-pick --nonsense 2>msg &&\n\tgrep '[Uu]sage:' msg\n\n  t4006.4-7 diff --stat, --shorstat\n\n\tgit diff HEAD --stat >actual &&\n\ttest_cmp expect actual\n\n  t4120.3,5 apply with too large -p\n\n\tgrep \"removing 3 leading\" err\n\n  t4012.5-6 apply detects corrupt patch\n\n\t detected=`expr \"$detected\" : \"fatal.*at line \\\\([0-9]*\\\\)\\$\"` &&\n\n  t4133.2 apply diff with consistent filename in headers\n\n\tgrep \"inconsistent new filename\" err &&\n\n  t4200.24,25 rerere --no-no-rerere-autoupdate, -h\n\n\tgrep [Uu]sage err &&\n\n  t4202.33 log --graph with diff and stats\n\n\tsed -e 's/ *$//' \\\n\t    -e 's/commit [0-9a-f]*$/commit COMMIT_OBJECT_NAME/' \\\n\t    -e 's/Merge: [ 0-9a-f]*$/Merge: MERGE_PARENTS/' \\\n\t    -e 's/Merge tag.*/Merge HEADS DESCRIPTION/' \\\n\t    -e 's/Merge commit.*/Merge HEADS DESCRIPTION/' \\\n\t    -e 's/, 0 deletions(-)//' \\\n\t    -e 's/, 0 insertions(+)//' \\\n\t    -e 's/ 1 files changed, / 1 file changed, /' \\\n\t    -e 's/, 1 deletions(-)/, 1 deletion(-)/' \\\n\t    -e 's/, 1 insertions(+)/, 1 insertion(+)/'\n\n  t4205.12 NUL separation with --stat\n\n\texpecting success: \n\t\t  stat0_part=$(git diff --stat HEAD^ HEAD) &&\n\t\t  stat1_part=$(git diff --stat --root HEAD^) &&\n\t\t  printf \"add bar\\n$stat0_part\\n\\0initial\\n$stat1_part\\n\" >expected &&\n\t\t  git log -z --stat --pretty=\"format:%s\" >actual &&\n\t\t  test_cmp expected actual\n\n\tBinary files expected and actual differ\n\tnot ok - 12 NUL separation with --stat\n\t$ xxd trash\\ directory.t4205-log-pretty-formats/expected\n\t0000000: 6164 6420 6261 720a 2320 4745 5454 4558  add bar.# GETTEX\n\t0000010: 5420 504f 4953 4f4e 2023 0a00 696e 6974  T POISON #..init\n\t0000020: 6961 6c0a 2320 4745 5454 4558 5420 504f  ial.# GETTEXT PO\n\t0000030: 4953 4f4e 2023 0a                        ISON #.\n\t$ xxd trash\\ directory.t4205-log-pretty-formats/actual \n\t0000000: 6164 6420 6261 720a 2320 4745 5454 4558  add bar.# GETTEX\n\t0000010: 5420 504f 4953 4f4e 2023 0069 6e69 7469  T POISON #.initi\n\t0000020: 616c 0a23 2047 4554 5445 5854 2050 4f49  al.# GETTEXT POI\n\t0000030: 534f 4e20 23                             SON #\n\n  t5300.32 index-pack detects the SHA1 collision\n\n\tgrep \"SHA1 COLLISION FOUND\" msg\n\n  t5505.2-3,6-9,13,15,46 remote porcelain-ish\n\n\tactual=$(git remote show \"$1\" | sed -ne 's|^    \\(.*\\) tracked$|\\1|p')\n\tshift &&\n\ttokens_match \"$*\" \"$actual\"\n\n  r6500.2-3 gc --gobbledegook, -h\n\n\tgrep \"[Uu]sage: git gc\" err\n\n  t7508.5 status --column\n\n\tCOLUMNS=50 git status --column=\"column dense\" >output &&\n\ttest_cmp expect output\n\n  t7600.3 merge -h\n\n\tgrep \"[Uu]sage: git merge\" broken/usage\n\nAssuming we want to require scripts to set LC_ALL=C before trying\nto parse error messages and descriptions within usage strings (which\nseems like a sensible requirement to me), these look like test suite\nbugs and not bugs in git itself.  So for what it's worth,\n\nReviewed-by: Jonathan Nieder <jrnieder@gmail.com>\n"},{"id":"192412","messageId":"CACsJy8ANyMxLNCP1P28AKywssGdSQP3QnE_HZHHGzkX-4oqFtw@mail.gmail.com","threadId":"30446","inReplyTo":"20120528224729.GK14606@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-29T11:30:54Z","receivedAt":"2012-05-29T11:30:54Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Tue, May 29, 2012 at 5:47 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> GETTEXT_POISON is annoyed by\n> ...\n\nI have not followed gettext poison development, so this question may\nbe silly. Is there any value in running the test suite with\nGETTEXT_POISON on?\n\nI can see the value in running the poisoned command manually under\nmany scenarios, so we are certain we do not miss any i18n strings. But\ncurrent test suite may not be suitable for automating that task (i.e.\nspot new i18n strings). The test suite is currently more focused on\nfeatures than human readable output. And some strings like die(\"...\")\nmay never happen unless you tweak the source code to emulate a broken\ndisk or so.\n-- \nDuy\n"},{"id":"192414","messageId":"20120529121428.GD14697@burratino","threadId":"30446","inReplyTo":"CACsJy8ANyMxLNCP1P28AKywssGdSQP3QnE_HZHHGzkX-4oqFtw@mail.gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2012-05-29T12:14:28Z","receivedAt":"2012-05-29T12:14:28Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Nguyen Thai Ngoc Duy wrote:\n\n>                         The test suite is currently more focused on\n> features than human readable output.\n\nThanks for clarifying this.  Yes, that's the point of the\nGETTEXT_POISON check.  It is supposed to make sure that running git in\nanother locale does not break features by modifying text that\n(internal and external) scripts parse.\n\nFor a sanity check on the messages marked for translation from a\ntranslator's perspective, it is generally better to just look at the\npot file.  And from the end user's perspective, I don't know a better\nway to test than to just use git a little.\n\nAs a side effect, GETTEXT_POISON keeps the test suite usable for\nexercising a copy of git configured for an actual other locale, which\nmeans that in the future the test suite could be used to check for\nproblems due to differences between locales other than the translated\nmessages (think: charset, collation order, etc).\n\nCiao,\nJonathan\n"},{"id":"192426","messageId":"7vmx4q4ycj.fsf@alter.siamese.dyndns.org","threadId":"30446","inReplyTo":"20120529121428.GD14697@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2012-05-29T18:49:00Z","receivedAt":"2012-05-29T18:49:00Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jonathan Nieder <jrnieder@gmail.com> writes:\n\n> Nguyen Thai Ngoc Duy wrote:\n>\n>>                         The test suite is currently more focused on\n>> features than human readable output.\n>\n> Thanks for clarifying this.  Yes, that's the point of the\n> GETTEXT_POISON check.  It is supposed to make sure that running git in\n> another locale does not break features by modifying text that\n> (internal and external) scripts parse.\n\nCorrect.  The most important thing to review in test scripts is that\ntests that verify output from the plumbing commands are *not* marked\nwith GETTEXT_POISON (hence test_i18ncmp).  IOW, storing \"ls-files\"\noutput and then checking it with expected result using test_i18ncmp\nis *wrong*, as it won't catch mistakenly marking plumbing messages\nwith _() and N_().\n\n> For a sanity check on the messages marked for translation from a\n> translator's perspective, it is generally better to just look at the\n> pot file.  And from the end user's perspective, I don't know a better\n> way to test than to just use git a little.\n>\n> As a side effect, GETTEXT_POISON keeps the test suite usable for\n> exercising a copy of git configured for an actual other locale, which\n> means that in the future the test suite could be used to check for\n> problems due to differences between locales other than the translated\n> messages (think: charset, collation order, etc).\n>\n> Ciao,\n> Jonathan\n"},{"id":"192433","messageId":"7vr4u23f0i.fsf@alter.siamese.dyndns.org","threadId":"30446","inReplyTo":"1338203657-26486-1-git-send-email-pclouds@gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2012-05-29T20:31:57Z","receivedAt":"2012-05-29T20:31:57Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n\n> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n> ---\n>  rc times are usually more quiet times, let's slip the series in..\n>  minor conflict with revert topic in pu, but should be easy to\n>  resolve.\n\n\"Yes\", \"no\", and \"does not matter\".  I can buy this, though:\n\n    Let's show this early, so that others are aware of this effort,\n    and if they happen to be touching strings in the affected files,\n    they can take one of these patches and roll it in their series\n    when post 1.7.11 window opens.\n\n> diff --git a/archive.c b/archive.c\n> index a484433..2584324 100644\n> --- a/archive.c\n> +++ b/archive.c\n> @@ -7,10 +7,10 @@\n>  #include \"unpack-trees.h\"\n>  \n>  static char const * const archive_usage[] = {\n> -\t\"git archive [options] <tree-ish> [<path>...]\",\n> -\t\"git archive --list\",\n> -\t\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\",\n> -\t\"git archive --remote <repo> [--exec <cmd>] --list\",\n> +\tN_(\"git archive [options] <tree-ish> [<path>...]\"),\n> +\tN_(\"git archive --list\"),\n> +\tN_(\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\"),\n> +\tN_(\"git archive --remote <repo> [--exec <cmd>] --list\"),\n>  \tNULL\n>  };\n\nI can understand the \"help\" text member of OPT_BLAH() construct, but\ndo we really want to translate the above?\n"},{"id":"192435","messageId":"20120529203759.GC22151@burratino","threadId":"30446","inReplyTo":"7vr4u23f0i.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2012-05-29T20:37:59Z","receivedAt":"2012-05-29T20:37:59Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Junio C Hamano wrote:\n> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n\n>> --- a/archive.c\n>> +++ b/archive.c\n>> @@ -7,10 +7,10 @@\n>>  #include \"unpack-trees.h\"\n>>  \n>>  static char const * const archive_usage[] = {\n>> -\t\"git archive [options] <tree-ish> [<path>...]\",\n>> -\t\"git archive --list\",\n>> -\t\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\",\n>> -\t\"git archive --remote <repo> [--exec <cmd>] --list\",\n>> +\tN_(\"git archive [options] <tree-ish> [<path>...]\"),\n>> +\tN_(\"git archive --list\"),\n>> +\tN_(\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\"),\n>> +\tN_(\"git archive --remote <repo> [--exec <cmd>] --list\"),\n>>  \tNULL\n>>  };\n>\n> I can understand the \"help\" text member of OPT_BLAH() construct, but\n> do we really want to translate the above?\n\n<repo>, <cmd>, [options], <tree-ish>, and <path> may be spelled\ndifferently in other languages.  Would it be possible to take care\nof this kind of substitution automatically?\n\nAt least \"git archive --list\" should probably be kept untranslated\nto lessen the translator workload a bit.  Good catch.\n"},{"id":"192438","messageId":"7vfwai3dav.fsf@alter.siamese.dyndns.org","threadId":"30446","inReplyTo":"20120529203759.GC22151@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2012-05-29T21:08:56Z","receivedAt":"2012-05-29T21:08:56Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jonathan Nieder <jrnieder@gmail.com> writes:\n\n> Junio C Hamano wrote:\n>> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n>\n>>> --- a/archive.c\n>>> +++ b/archive.c\n>>> @@ -7,10 +7,10 @@\n>>>  #include \"unpack-trees.h\"\n>>>  \n>>>  static char const * const archive_usage[] = {\n>>> -\t\"git archive [options] <tree-ish> [<path>...]\",\n>>> -\t\"git archive --list\",\n>>> -\t\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\",\n>>> -\t\"git archive --remote <repo> [--exec <cmd>] --list\",\n>>> +\tN_(\"git archive [options] <tree-ish> [<path>...]\"),\n>>> +\tN_(\"git archive --list\"),\n>>> +\tN_(\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\"),\n>>> +\tN_(\"git archive --remote <repo> [--exec <cmd>] --list\"),\n>>>  \tNULL\n>>>  };\n>>\n>> I can understand the \"help\" text member of OPT_BLAH() construct, but\n>> do we really want to translate the above?\n>\n> <repo>, <cmd>, [options], <tree-ish>, and <path> may be spelled\n> differently in other languages.\n\nOK, fair enough.\n"},{"id":"192455","messageId":"CACsJy8BvZSbsXyh3ct-M3rcWQf9Fw4VDX2VYVy+0Hv+53AQWnw@mail.gmail.com","threadId":"30446","inReplyTo":"7vmx4q4ycj.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-30T05:11:07Z","receivedAt":"2012-05-30T05:11:07Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, May 30, 2012 at 1:49 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> Jonathan Nieder <jrnieder@gmail.com> writes:\n>\n>> Nguyen Thai Ngoc Duy wrote:\n>>\n>>>                         The test suite is currently more focused on\n>>> features than human readable output.\n>>\n>> Thanks for clarifying this.  Yes, that's the point of the\n>> GETTEXT_POISON check.  It is supposed to make sure that running git in\n>> another locale does not break features by modifying text that\n>> (internal and external) scripts parse.\n>\n> Correct.  The most important thing to review in test scripts is that\n> tests that verify output from the plumbing commands are *not* marked\n> with GETTEXT_POISON (hence test_i18ncmp).  IOW, storing \"ls-files\"\n> output and then checking it with expected result using test_i18ncmp\n> is *wrong*, as it won't catch mistakenly marking plumbing messages\n> with _() and N_().\n\nThe intention is good, but the execution is not. Requiring special\nflag to turn this feature on loses its value as normal \"make test\"\ndoes not catch stuff like this. We might want to turn this on by\ndefault (at least in the test suite), or LD_PRELOAD this feature in\nwhen the test suite is run. Or generate a poisoned .mo file, then make\ngit use that.\n\nAnother thing is GETTEXT_POISON poisons too much. printf(_(\"this is\n%s\\n\"), path); is turned to \"# GETTEXT POISON #\". There's no way for\ntest scripts to verify the correct \"path\" output.\n\nAnyway I'll send a fixup patch later to make gettext poison test run pass again.\n-- \nDuy\n"},{"id":"192456","messageId":"CACsJy8Dg-M+3+_LWksq4fYHq3Tx96bQEDYkHApMj8+d=5wqqjQ@mail.gmail.com","threadId":"30446","inReplyTo":"20120529203759.GC22151@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-30T05:27:55Z","receivedAt":"2012-05-30T05:27:55Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, May 30, 2012 at 3:37 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Junio C Hamano wrote:\n>> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n>\n>>> --- a/archive.c\n>>> +++ b/archive.c\n>>> @@ -7,10 +7,10 @@\n>>>  #include \"unpack-trees.h\"\n>>>\n>>>  static char const * const archive_usage[] = {\n>>> -    \"git archive [options] <tree-ish> [<path>...]\",\n>>> -    \"git archive --list\",\n>>> -    \"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\",\n>>> -    \"git archive --remote <repo> [--exec <cmd>] --list\",\n>>> +    N_(\"git archive [options] <tree-ish> [<path>...]\"),\n>>> +    N_(\"git archive --list\"),\n>>> +    N_(\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\"),\n>>> +    N_(\"git archive --remote <repo> [--exec <cmd>] --list\"),\n>>>      NULL\n>>>  };\n>>\n>> I can understand the \"help\" text member of OPT_BLAH() construct, but\n>> do we really want to translate the above?\n>\n> <repo>, <cmd>, [options], <tree-ish>, and <path> may be spelled\n> differently in other languages.  Would it be possible to take care\n> of this kind of substitution automatically?\n\nnot for the \"[<path>...]\" part\n\n> At least \"git archive --list\" should probably be kept untranslated\n> to lessen the translator workload a bit.  Good catch.\n\nI use po-mode and for strings that no change is required like this,\nsimply C-j to copy as-is after a glance.\n-- \nDuy\n"},{"id":"192457","messageId":"20120530062424.GA19114@burratino","threadId":"30446","inReplyTo":"CACsJy8BvZSbsXyh3ct-M3rcWQf9Fw4VDX2VYVy+0Hv+53AQWnw@mail.gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2012-05-30T06:24:24Z","receivedAt":"2012-05-30T06:24:24Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Nguyen Thai Ngoc Duy wrote:\n\n>                             Or generate a poisoned .mo file, then make\n> git use that.\n\nYes, I would like that very much.  I had vague ideas of using some\nvalid language code that doesn't correspond to a human language, but\nan alternate GIT_TEXTDOMAINDIR might be simpler and work better.\n\n> Another thing is GETTEXT_POISON poisons too much. printf(_(\"this is\n> %s\\n\"), path); is turned to \"# GETTEXT POISON #\". There's no way for\n> test scripts to verify the correct \"path\" output.\n\nSomes like a good change. ;)\n\n\"this is %s\\n\" could be translated to \"poison(%s)\" or even \"THIS IS\n%s\\n\" to make it easy to recognize which string was poisoned.\n\nWhen i18n plumbing was starting I thought this would be important and\nmade a mental note to implement a rot13 function that preserves printf\ndirectives.  In the end I have wanted it much less often than I\nthought I would.  In tests that check the effect of commands on a\nrepository, only checking the output of plumbing commands is just a\ngood idea anyway.  (But I can understand that preserving printf\ndirectives would be useful for people wanting to test the UI.)\n\nUI tests are tricky.  I can't imagine how a good test for translated\nrequest-pull that doesn't pick a particular language could work, for\nexample.\n\nWell, hopefully the above is amusing.  Sorry to ramble.\n\nThanks much again for this series --- the translated help makes it\nmuch easier to imagine git to be a native speaker in a locale where\nEnglish is not the main language.\n\nJonathan\n"},{"id":"192482","messageId":"20120530122533.GA28235@do","threadId":"30446","inReplyTo":"20120530062424.GA19114@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-30T12:25:34Z","receivedAt":"2012-05-30T12:25:34Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, May 30, 2012 at 01:24:24AM -0500, Jonathan Nieder wrote:\n> Nguyen Thai Ngoc Duy wrote:\n> \n> >                             Or generate a poisoned .mo file, then make\n> > git use that.\n> \n> Yes, I would like that very much.  I had vague ideas of using some\n> valid language code that doesn't correspond to a human language, but\n> an alternate GIT_TEXTDOMAINDIR might be simpler and work better.\n\nWe're half way there with the following PoC patch. Now if only I could\ntrick gettext into accepting a fake language like \"foo\". Right now\n\"vi\" is the sacrified one\n\n$ make po/build/locale/vi/LC_MESSAGES/git.mo\n$ GIT_TEXTDOMAINDIR=po/build/locale ./git st -abc\nerror: unknown switch `a'\n.................................................\n\n    -v, --verbose         ..........\n    -s, --short           .....................\n    -b, --branch          .......................\n    --porcelain           .......................\n    -z, --null            ..........................\n    -u, --untracked-files[=<....>]\n                          .....................................................................\n    --ignored             ..................\n    --ignore-submodules[=<....>]\n                          ..................................................................................\n    --column[=<.....>]    list untracked files in columns\n\nWe also need to improve the shredder to recognize shell variables,\nthen we can turn on GETTEXT_LOG_UNTRANSLATED to catch i18n messages\nthat are not marked\n\n-- 8< --\ndiff --git a/Makefile b/Makefile\nindex 96ebcf9..cd55650 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -2345,6 +2345,18 @@ LOCALIZED_SH += t/t0200/test.sh\n LOCALIZED_PERL += t/t0200/test.perl\n endif\n \n+shredder: shredder.c\n+\t$(QUIET_CC)$(CC) -o $@ $^\n+\n+po/build/locale/vi/LC_MESSAGES/git.mo: $(LOCALIZED_C) shredder\n+\tmkdir -p `dirname $@`\n+\t$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)\n+\t$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \\\n+\t\t$(LOCALIZED_SH)\n+\t$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_PERL) \\\n+\t\t$(LOCALIZED_PERL)\n+\tmsgen $@+|sed 's/charset=CHARSET/charset=utf-8/'|sed '/^#, fuzzy/d'|msgfilter ./shredder|msgfmt -o $@ -\n+\n po/git.pot: $(LOCALIZED_C)\n \t$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)\n \t$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \\\ndiff --git a/shredder.c b/shredder.c\nnew file mode 100644\nindex 0000000..ea12c10\n--- /dev/null\n+++ b/shredder.c\n@@ -0,0 +1,62 @@\n+#include <stdio.h>\n+#include <string.h>\n+\n+static const char *header =\n+\"Project-Id-Version: git.git\\n\"\n+\"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\\n\"\n+\"POT-Creation-Date: 2012-05-15 06:42+0800\\n\"\n+\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n+\"Last-Translator: 2012-05-15 06:42+0800\\n\"\n+\"Language-Team: gettext poison <gettext@poison.org>\\n\"\n+\"Language: poison\\n\"\n+\"MIME-Version: 1.0\\n\"\n+\"Content-Type: text/plain; charset=utf-8\\n\"\n+\"Content-Transfer-Encoding: 8bit\\n\"\n+\"Plural-Forms: nplurals=2; plural=nr != 1;\\n\";\n+\n+static int is_fmt = 0;\n+static int shred(int ch)\n+{\n+\tconst char *terminators = \"diouxXeEfFgGaAcsp%\";\n+\tif (is_fmt && strchr(terminators, ch))\n+\t\tis_fmt = 0;\n+\telse if (!is_fmt && isprint(ch)) {\n+\t\tif (ch == '%')\n+\t\t\tis_fmt = 1;\n+\t\telse\n+\t\t\tch = '.';\n+\t}\n+\treturn ch;\n+}\n+\n+int main(int ac, char **av)\n+{\n+\tconst char *first_msg = \"Project-Id-Version: \";\n+\tchar buf[32];\n+\tint gotten = 0, len = strlen(first_msg);\n+\tint ch;\n+\twhile ((ch = fgetc(stdin)) != EOF)\n+\t{\n+\t\tif (gotten < len) {\n+\t\t\tbuf[gotten++] = ch;\n+\t\t\tif (gotten == len) {\n+\t\t\t\tif (!strncmp(first_msg, buf, len)) {\n+\t\t\t\t\tfputs(header, stdout);\n+\t\t\t\t\treturn 0;\n+\t\t\t\t} else {\n+\t\t\t\t\tint i;\n+\t\t\t\t\tfor (i = 0; i < len; i++)\n+\t\t\t\t\t\tputchar(shred(buf[i]));\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tcontinue;\n+\t\t}\n+\t\tputchar(shred(ch));\n+\t}\n+\tif (gotten < len) {\n+\t\tint i;\n+\t\tfor (i = 0; i < gotten; i++)\n+\t\t\tputchar(shred(buf[i]));\n+\t}\n+\treturn 0;\n+}\n-- 8< --\n-- \nDuy\n"},{"id":"192483","messageId":"CACsJy8A7cT7F2kb8TuHtazYYL4iJ9W_QgfJ0+A2Tk7-ONRdK=Q@mail.gmail.com","threadId":"30446","inReplyTo":"20120530122533.GA28235@do","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-05-30T12:50:34Z","receivedAt":"2012-05-30T12:50:34Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, May 30, 2012 at 7:25 PM, Nguyen Thai Ngoc Duy <pclouds@gmail.com> wrote:\n> We also need to improve the shredder to recognize shell variables,\n\nOh another idea for the shredder, we could replace the first and last\nletters of a string with something different than the rest, maybe\nbrackets. That way we see clearly how fragmented a string is. Two many\nbrackets on a line is a good indication of i18n legos.\n-- \nDuy\n"},{"id":"192709","messageId":"CACsJy8AGKQHKx9XU+baUagcmi6Sc-=faNshpED=Q46JpV_31WA@mail.gmail.com","threadId":"30446","inReplyTo":"20120529203759.GC22151@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-06-02T10:55:55Z","receivedAt":"2012-06-02T10:55:55Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, May 30, 2012 at 3:37 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Junio C Hamano wrote:\n>> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n>\n>>> --- a/archive.c\n>>> +++ b/archive.c\n>>> @@ -7,10 +7,10 @@\n>>>  #include \"unpack-trees.h\"\n>>>\n>>>  static char const * const archive_usage[] = {\n>>> -    \"git archive [options] <tree-ish> [<path>...]\",\n>>> -    \"git archive --list\",\n>>> -    \"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\",\n>>> -    \"git archive --remote <repo> [--exec <cmd>] --list\",\n>>> +    N_(\"git archive [options] <tree-ish> [<path>...]\"),\n>>> +    N_(\"git archive --list\"),\n>>> +    N_(\"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]\"),\n>>> +    N_(\"git archive --remote <repo> [--exec <cmd>] --list\"),\n>>>      NULL\n>>>  };\n>>\n>> I can understand the \"help\" text member of OPT_BLAH() construct, but\n>> do we really want to translate the above?\n>\n> ...\n>\n> At least \"git archive --list\" should probably be kept untranslated\n> to lessen the translator workload a bit.  Good catch.\n\nShould it? On one hand, it's like 10 strings less for translator (I\nfixed the series) but then we want to catch unmarked strings. _() will\nalways be called on \"git archive --list\" and will give fault positive\nhere. I intend to make \"make test\" warn every time it sees unmarked\nstrings, fault positives will be annoying.\n\nUnless we have a notion to say \"this string is deliberately kept\nunstranslated\", I think we better just mark them all.\n-- \nDuy\n"},{"id":"192714","messageId":"20120602124440.GA28996@burratino","threadId":"30446","inReplyTo":"CACsJy8AGKQHKx9XU+baUagcmi6Sc-=faNshpED=Q46JpV_31WA@mail.gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2012-06-02T12:44:40Z","receivedAt":"2012-06-02T12:44:40Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Nguyen Thai Ngoc Duy wrote:\n> On Wed, May 30, 2012 at 3:37 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n\n>> At least \"git archive --list\" should probably be kept untranslated\n>> to lessen the translator workload a bit.  Good catch.\n>\n> Should it?\n\nNo, since to do so would break GETTEXT_LOG_UNTRANSLATED and it's not\nworth it.  That looks like a great tool, by the way --- thanks for\nfinding it.\n"},{"id":"193061","messageId":"CACsJy8A+FTjD3dzBWtL7X35YE9E3t0Gcx-DA6T_+Nt=X3Wp1jQ@mail.gmail.com","threadId":"30446","inReplyTo":"20120602124440.GA28996@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-06-07T12:31:56Z","receivedAt":"2012-06-07T12:31:56Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Sat, Jun 2, 2012 at 7:44 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Nguyen Thai Ngoc Duy wrote:\n>> On Wed, May 30, 2012 at 3:37 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n>\n>>> At least \"git archive --list\" should probably be kept untranslated\n>>> to lessen the translator workload a bit.  Good catch.\n>>\n>> Should it?\n>\n> No, since to do so would break GETTEXT_LOG_UNTRANSLATED and it's not\n> worth it.  That looks like a great tool, by the way --- thanks for\n> finding it.\n\nNo changes to the series then. Junio, pu material perhaps? The\nbreaking gettext poison thing is different and I plan to kill gettext\npoison soon (whether i succeed is another question of course).\n-- \nDuy\n"},{"id":"193062","messageId":"20120607124155.GB12987@burratino","threadId":"30446","inReplyTo":"CACsJy8A+FTjD3dzBWtL7X35YE9E3t0Gcx-DA6T_+Nt=X3Wp1jQ@mail.gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2012-06-07T12:41:55Z","receivedAt":"2012-06-07T12:41:55Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Nguyen Thai Ngoc Duy wrote:\n\n> No changes to the series then. Junio, pu material perhaps? The\n> breaking gettext poison thing is different and I plan to kill gettext\n> poison soon (whether i succeed is another question of course).\n\nIf you mean to kill it by replacing it with a facility to run tests in\nanother locale, wouldn't all these testsuite bugs still be testsuite\nbugs?\n\nBut I don't think that should delay your series.\n\nThanks,\nJonathan\n"},{"id":"193063","messageId":"CACsJy8D=SMmhiyp-+pL5FxfcUGdLp9X4D42eV0uAGX3_LAa0xA@mail.gmail.com","threadId":"30446","inReplyTo":"20120607124155.GB12987@burratino","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-06-07T12:53:07Z","receivedAt":"2012-06-07T12:53:07Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Thu, Jun 7, 2012 at 7:41 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Nguyen Thai Ngoc Duy wrote:\n>\n>> No changes to the series then. Junio, pu material perhaps? The\n>> breaking gettext poison thing is different and I plan to kill gettext\n>> poison soon (whether i succeed is another question of course).\n>\n> If you mean to kill it by replacing it with a facility to run tests in\n> another locale, wouldn't all these testsuite bugs still be testsuite\n> bugs?\n\nThey still are and should be fixed when the new facility comes, so\nthere's no point fixing them now. I played with the poison .po\ngeneration a bit and started to use libgettext-po, which would give us\nmore control over reading/writing .po. We could even perform\ngit-specific checks on po files..\n\nThe said plan is to build .mo for $LANG in po/build/poison-locale\n(po/build/locale remains good translation) and add a switch to make\nthe test suite use poison-locale instead. Long term I'd like to switch\nto poison locale by default, unless LANG is C, maybe with an option to\nrun with real .mo files.\n-- \nDuy\n"},{"id":"193091","messageId":"7vtxyngfsw.fsf@alter.siamese.dyndns.org","threadId":"30446","inReplyTo":"CACsJy8A+FTjD3dzBWtL7X35YE9E3t0Gcx-DA6T_+Nt=X3Wp1jQ@mail.gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2012-06-07T18:03:43Z","receivedAt":"2012-06-07T18:03:43Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:\n\n> No changes to the series then. Junio, pu material perhaps?\n\nI would say it is a post-release material.\n"},{"id":"193102","messageId":"20120607195058.GC3194@burratino","threadId":"30446","inReplyTo":"CACsJy8D=SMmhiyp-+pL5FxfcUGdLp9X4D42eV0uAGX3_LAa0xA@mail.gmail.com","subject":"Re: [PATCH 03/65] i18n: archive: mark parseopt strings for translation","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2012-06-07T19:50:58Z","receivedAt":"2012-06-07T19:50:58Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Nguyen Thai Ngoc Duy wrote:\n\n> They still are and should be fixed when the new facility comes, so\n> there's no point fixing them now.\n\nMeh.  The whole point of GETTEXT_POISON from my point of view is to\nprepare for a later facility like that, and I don't see how the fix\nwould be any different then, so...\n\nBut I don't mind waiting until someone interested (like me) has time,\nso I guess this kind of question is moot.\n"}]}