From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH/RESEND] transport.c: mark push status strings for translation
Date: Tue, 3 Dec 2013 17:26:49 +0700 [thread overview]
Message-ID: <1386066409-15262-1-git-send-email-pclouds@gmail.com> (raw)
Mark strings like "[up to date]" passed to print_ref_status() for
translation with N_() instead of _() so they can remain untranslated
in porcelain mode.
While at there, mark some error strings in git push for translation
too.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
---
builtin/push.c | 8 +++---
transport.c | 81 ++++++++++++++++++++++++++++++++++------------------------
2 files changed, 52 insertions(+), 37 deletions(-)
diff --git a/builtin/push.c b/builtin/push.c
index 7b1b66c..22e2d4c 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -319,7 +319,7 @@ static int push_with_options(struct transport *transport, int flags)
if (!is_empty_cas(&cas)) {
if (!transport->smart_options)
- die("underlying transport does not support --%s option",
+ die(_("underlying transport does not support --%s option"),
CAS_OPT_NAME);
transport->smart_options->cas = &cas;
}
@@ -426,7 +426,7 @@ static int option_parse_recurse_submodules(const struct option *opt,
if (*flags & (TRANSPORT_RECURSE_SUBMODULES_CHECK |
TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND))
- die("%s can only be used once.", opt->long_name);
+ die(_("%s can only be used once."), opt->long_name);
if (arg) {
if (!strcmp(arg, "check"))
@@ -434,9 +434,9 @@ static int option_parse_recurse_submodules(const struct option *opt,
else if (!strcmp(arg, "on-demand"))
*flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
else
- die("bad %s argument: %s", opt->long_name, arg);
+ die(_("bad %s argument: %s"), opt->long_name, arg);
} else
- die("option %s needs an argument (check|on-demand)",
+ die(_("option %s needs an argument (check|on-demand)"),
opt->long_name);
return 0;
diff --git a/transport.c b/transport.c
index 7202b77..1fb92a1 100644
--- a/transport.c
+++ b/transport.c
@@ -14,6 +14,7 @@
#include "url.h"
#include "submodule.h"
#include "string-list.h"
+#include "utf8.h"
/* rsync support */
@@ -627,16 +628,23 @@ static void print_ref_status(char flag, const char *summary, struct ref *to, str
else
fprintf(stdout, "%s\n", summary);
} else {
- fprintf(stderr, " %c %-*s ", flag, TRANSPORT_SUMMARY_WIDTH, summary);
+ int width = TRANSPORT_SUMMARY_WIDTH;
+ const char *localized_summary = _(summary);
+ /*
+ * Compensate for the invisible bytes in utf-8
+ * strings. The expression below is guaranteed always
+ * positive (or zero in case of ascii strings) because
+ * none of the doublewidth characters are ASCII
+ * characters.
+ */
+ width += strlen(localized_summary) - utf8_strwidth(localized_summary);
+ fprintf(stderr, " %c %-*s ", flag, width, localized_summary);
if (from)
fprintf(stderr, "%s -> %s", prettify_refname(from->name), prettify_refname(to->name));
else
fputs(prettify_refname(to->name), stderr);
- if (msg) {
- fputs(" (", stderr);
- fputs(msg, stderr);
- fputc(')', stderr);
- }
+ if (msg)
+ fprintf(stderr, " (%s)", _(msg));
fputc('\n', stderr);
}
}
@@ -649,11 +657,11 @@ static const char *status_abbrev(unsigned char sha1[20])
static void print_ok_ref_status(struct ref *ref, int porcelain)
{
if (ref->deletion)
- print_ref_status('-', "[deleted]", ref, NULL, NULL, porcelain);
+ print_ref_status('-', N_("[deleted]"), ref, NULL, NULL, porcelain);
else if (is_null_sha1(ref->old_sha1))
print_ref_status('*',
- (!prefixcmp(ref->name, "refs/tags/") ? "[new tag]" :
- "[new branch]"),
+ (!prefixcmp(ref->name, "refs/tags/") ? N_("[new tag]") :
+ N_("[new branch]")),
ref, ref->peer_ref, NULL, porcelain);
else {
char quickref[84];
@@ -664,7 +672,7 @@ static void print_ok_ref_status(struct ref *ref, int porcelain)
if (ref->forced_update) {
strcat(quickref, "...");
type = '+';
- msg = "forced update";
+ msg = N_("forced update");
} else {
strcat(quickref, "..");
type = ' ';
@@ -678,50 +686,57 @@ static void print_ok_ref_status(struct ref *ref, int porcelain)
static int print_one_push_status(struct ref *ref, const char *dest, int count, int porcelain)
{
- if (!count)
- fprintf(porcelain ? stdout : stderr, "To %s\n", dest);
+ if (!count) {
+ if (porcelain)
+ fprintf(stdout, "To %s\n", dest);
+ else
+ fprintf_ln(stderr, _("To %s"), dest);
+ }
switch(ref->status) {
case REF_STATUS_NONE:
- print_ref_status('X', "[no match]", ref, NULL, NULL, porcelain);
+ print_ref_status('X', N_("[no match]"), ref, NULL,
+ NULL, porcelain);
break;
case REF_STATUS_REJECT_NODELETE:
- print_ref_status('!', "[rejected]", ref, NULL,
- "remote does not support deleting refs", porcelain);
+ print_ref_status('!', N_("[rejected]"), ref, NULL,
+ N_("remote does not support deleting refs"),
+ porcelain);
break;
case REF_STATUS_UPTODATE:
- print_ref_status('=', "[up to date]", ref,
- ref->peer_ref, NULL, porcelain);
+ print_ref_status('=', N_("[up to date]"), ref,
+ ref->peer_ref, NULL, porcelain);
break;
case REF_STATUS_REJECT_NONFASTFORWARD:
- print_ref_status('!', "[rejected]", ref, ref->peer_ref,
- "non-fast-forward", porcelain);
+ print_ref_status('!', N_("[rejected]"), ref, ref->peer_ref,
+ N_("non-fast-forward"), porcelain);
break;
case REF_STATUS_REJECT_ALREADY_EXISTS:
- print_ref_status('!', "[rejected]", ref, ref->peer_ref,
- "already exists", porcelain);
+ print_ref_status('!', N_("[rejected]"), ref, ref->peer_ref,
+ N_("already exists"), porcelain);
break;
case REF_STATUS_REJECT_FETCH_FIRST:
- print_ref_status('!', "[rejected]", ref, ref->peer_ref,
- "fetch first", porcelain);
+ print_ref_status('!', N_("[rejected]"), ref, ref->peer_ref,
+ N_("fetch first"), porcelain);
break;
case REF_STATUS_REJECT_NEEDS_FORCE:
- print_ref_status('!', "[rejected]", ref, ref->peer_ref,
- "needs force", porcelain);
+ print_ref_status('!', N_("[rejected]"), ref, ref->peer_ref,
+ N_("needs force"), porcelain);
break;
case REF_STATUS_REJECT_STALE:
- print_ref_status('!', "[rejected]", ref, ref->peer_ref,
- "stale info", porcelain);
+ print_ref_status('!', N_("[rejected]"), ref, ref->peer_ref,
+ N_("stale info"), porcelain);
break;
case REF_STATUS_REMOTE_REJECT:
- print_ref_status('!', "[remote rejected]", ref,
- ref->deletion ? NULL : ref->peer_ref,
- ref->remote_status, porcelain);
+ print_ref_status('!', N_("[remote rejected]"), ref,
+ ref->deletion ? NULL : ref->peer_ref,
+ ref->remote_status, porcelain);
break;
case REF_STATUS_EXPECTING_REPORT:
- print_ref_status('!', "[remote failure]", ref,
- ref->deletion ? NULL : ref->peer_ref,
- "remote failed to report status", porcelain);
+ print_ref_status('!', N_("[remote failure]"), ref,
+ ref->deletion ? NULL : ref->peer_ref,
+ N_("remote failed to report status"),
+ porcelain);
break;
case REF_STATUS_OK:
print_ok_ref_status(ref, porcelain);
--
1.8.2.83.gc99314b
next reply other threads:[~2013-12-03 10:22 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-03 10:26 Nguyễn Thái Ngọc Duy [this message]
2013-12-03 20:08 ` [PATCH/RESEND] transport.c: mark push status strings for translation Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1386066409-15262-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).