Imported Upstream version 2.2.12 upstream/2.2.12
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 9 Feb 2021 07:00:41 +0000 (16:00 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 9 Feb 2021 07:00:41 +0000 (16:00 +0900)
63 files changed:
NEWS
README
agent/agent.h
agent/gpg-agent.c
agent/protect.c
common/iobuf.c
common/mischelp.c
common/mischelp.h
configure.ac
dirmngr/Makefile.am
dirmngr/crlcache.c
dirmngr/http.c
dirmngr/http.h
dirmngr/ks-engine-hkp.c
dirmngr/ks-engine-http.c
dirmngr/server.c
dirmngr/t-http-basic.c [new file with mode: 0644]
dirmngr/t-http.c
doc/gpg-agent.texi
doc/gpg.texi
doc/wks.texi
g10/call-agent.c
g10/call-agent.h
g10/card-util.c
g10/gpg.c
g10/keyid.c
g10/keylist.c
g10/keyserver.c
g10/mainproc.c
g10/options.h
po/ca.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/eo.po
po/es.po
po/et.po
po/fi.po
po/fr.po
po/gl.po
po/hu.po
po/id.po
po/it.po
po/ja.po
po/nb.po
po/pl.po
po/pt.po
po/ro.po
po/ru.po
po/sk.po
po/sv.po
po/tr.po
po/uk.po
po/zh_CN.po
po/zh_TW.po
scd/app-openpgp.c
tools/addgnupghome
tools/gpg-wks-client.c
tools/gpg-wks-server.c
tools/gpg-wks.h
tools/gpg-zip.in
tools/wks-util.c

diff --git a/NEWS b/NEWS
index 2d72ada..294709d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,41 @@
+Noteworthy changes in version 2.2.12 (2018-12-14)
+-------------------------------------------------
+
+  * tools: New commands --install-key and --remove-key for
+    gpg-wks-client.  This allows to prepare a Web Key Directory on a
+    local file system for later upload to a web server.
+
+  * gpg: New --list-option "show-only-fpr-mbox".  This makes the use
+    of the new gpg-wks-client --install-key command easier on Windows.
+
+  * gpg: Improve processing speed when --skip-verify is used.
+
+  * gpg: Fix a bug where a LF was accidentally written to the console.
+
+  * gpg: --card-status now shwos whether a card has the new KDF
+    feature enabled.
+
+  * agent: New runtime option --s2k-calibration=MSEC.  New configure
+    option --with-agent-s2k-calibration=MSEC.  [#3399]
+
+  * dirmngr: Try another keyserver from the pool on receiving a 502,
+    503, or 504 error.  [#4175]
+
+  * dirmngr: Avoid possible CSRF attacks via http redirects.  A HTTP
+    query will not anymore follow a 3xx redirect unless the Location
+    header gives the same host.  If the host is different only the
+    host and port is taken from the Location header and the original
+    path and query parts are kept.
+
+  * dirmngr: New command FLUSHCRL to flush all CRLS from disk and
+    memory.  [#3967]
+
+  * New simplified Chinese translation (zh_CN).
+
+  Release-info: https://dev.gnupg.org/T4289
+  See-also: gnupg-announce/2018q4/000433.html
+
+
 Noteworthy changes in version 2.2.11 (2018-11-06)
 -------------------------------------------------
 
diff --git a/README b/README
index d46efd9..4580a39 100644 (file)
--- a/README
+++ b/README
   can be freely used, modified and distributed under the terms of the
   GNU General Public License.
 
-  Note that the 2.0 series of GnuPG will reach end-of-life on
-  2017-12-31.  It is not possible to install a 2.2.x version along
-  with any 2.0.x version.
-
+  Note that the 2.0 series of GnuPG reached end-of-life on 2017-12-31.
+  It is not possible to install a 2.2.x version along with any 2.0.x
+  version.
 
 * BUILD INSTRUCTIONS
 
 
   Add other options as needed.
 
-
 * MIGRATION from 1.4 or 2.0 to 2.2
 
   The major change in 2.2 is gpg-agent taking care of the OpenPGP
               fi
             done )
 
-
 * DOCUMENTATION
 
   The complete documentation is in the texinfo manual named
   version of the manual pertaining to the current development snapshot
   is at [[https://gnupg.org/documentation/manuals/gnupg-devel/]] .
 
-
 * Installing GnuPG 2.2. and GnuPG 1.4
 
   GnuPG 2.2 is a current version of GnuPG with state of the art
   possible, the 2.2 version can be installed under the name "gpg2"
   using the configure option --enable-gpg-is-gpg2.
 
-
 * HOW TO GET MORE INFORMATION
 
   A description of new features and changes since version 2.1 can be
index cf50d92..2b045f8 100644 (file)
@@ -486,6 +486,7 @@ gpg_error_t agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey,
                                      char **passphrase_addr);
 
 /*-- protect.c --*/
+void set_s2k_calibration_time (unsigned int milliseconds);
 unsigned long get_calibrated_s2k_count (void);
 unsigned long get_standard_s2k_count (void);
 unsigned char get_standard_s2k_count_rfc4880 (void);
index 1fdc94d..ffd85d1 100644 (file)
@@ -135,6 +135,7 @@ enum cmd_and_opt_values
   oDisableScdaemon,
   oDisableCheckOwnSocket,
   oS2KCount,
+  oS2KCalibration,
   oAutoExpandSecmem,
   oListenBacklog,
 
@@ -253,6 +254,7 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_n (oEnableExtendedKeyFormat, "enable-extended-key-format", "@"),
 
   ARGPARSE_s_u (oS2KCount, "s2k-count", "@"),
+  ARGPARSE_s_u (oS2KCalibration, "s2k-calibration", "@"),
 
   ARGPARSE_op_u (oAutoExpandSecmem, "auto-expand-secmem", "@"),
 
@@ -834,6 +836,7 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread)
       /* Note: When changing the next line, change also gpgconf_list.  */
       opt.ssh_fingerprint_digest = GCRY_MD_MD5;
       opt.s2k_count = 0;
+      set_s2k_calibration_time (0);  /* Set to default.  */
       return 1;
     }
 
@@ -929,6 +932,10 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread)
       opt.s2k_count = pargs->r.ret_ulong;
       break;
 
+    case oS2KCalibration:
+      set_s2k_calibration_time (pargs->r.ret_ulong);
+      break;
+
     default:
       return 0; /* not handled */
     }
index 7b5abf2..134fbf2 100644 (file)
@@ -71,6 +71,13 @@ static const struct {
 };
 
 
+/* The number of milliseconds we use in the S2K function and the
+ * calibrated count value.  A count value of zero indicates that the
+ * calibration has not yet been done or needs to be done again.  */
+static unsigned int s2k_calibration_time = AGENT_S2K_CALIBRATION;
+static unsigned long s2k_calibrated_count;
+
+
 /* A helper object for time measurement.  */
 struct calibrate_time_s
 {
@@ -163,7 +170,7 @@ calibrate_s2k_count_one (unsigned long count)
 
 
 /* Measure the time we need to do the hash operations and deduce an
-   S2K count which requires about 100ms of time.  */
+   S2K count which requires roughly some targeted amount of time.  */
 static unsigned long
 calibrate_s2k_count (void)
 {
@@ -175,11 +182,11 @@ calibrate_s2k_count (void)
       ms = calibrate_s2k_count_one (count);
       if (opt.verbose > 1)
         log_info ("S2K calibration: %lu -> %lums\n", count, ms);
-      if (ms > 100)
+      if (ms > s2k_calibration_time)
         break;
     }
 
-  count = (unsigned long)(((double)count / ms) * 100);
+  count = (unsigned long)(((double)count / ms) * s2k_calibration_time);
   count /= 1024;
   count *= 1024;
   if (count < 65536)
@@ -195,18 +202,30 @@ calibrate_s2k_count (void)
 }
 
 
+/* Set the calibration time.  This may be called early at startup or
+ * at any time.  Thus it should one set variables.  */
+void
+set_s2k_calibration_time (unsigned int milliseconds)
+{
+  if (!milliseconds)
+    milliseconds = AGENT_S2K_CALIBRATION;
+  else if (milliseconds > 60 * 1000)
+    milliseconds = 60 * 1000;  /* Cap at 60 seconds.  */
+  s2k_calibration_time = milliseconds;
+  s2k_calibrated_count = 0;  /* Force re-calibration.  */
+}
+
+
 /* Return the calibrated S2K count.  This is only public for the use
  * of the Assuan getinfo s2k_count_cal command.  */
 unsigned long
 get_calibrated_s2k_count (void)
 {
-  static unsigned long count;
-
-  if (!count)
-    count = calibrate_s2k_count ();
+  if (!s2k_calibrated_count)
+    s2k_calibrated_count = calibrate_s2k_count ();
 
   /* Enforce a lower limit.  */
-  return count < 65536 ? 65536 : count;
+  return s2k_calibrated_count < 65536 ? 65536 : s2k_calibrated_count;
 }
 
 
index 8de46f4..589bdf9 100644 (file)
@@ -2216,6 +2216,7 @@ iobuf_copy (iobuf_t dest, iobuf_t source)
 
   size_t nread;
   size_t nwrote = 0;
+  size_t max_read = 0;
   int err;
 
   assert (source->use == IOBUF_INPUT || source->use == IOBUF_INPUT_TEMP);
@@ -2232,6 +2233,9 @@ iobuf_copy (iobuf_t dest, iobuf_t source)
         /* EOF.  */
         break;
 
+      if (nread > max_read)
+        max_read = nread;
+
       err = iobuf_write (dest, temp, nread);
       if (err)
         break;
@@ -2239,7 +2243,8 @@ iobuf_copy (iobuf_t dest, iobuf_t source)
     }
 
   /* Burn the buffer.  */
-  wipememory (temp, sizeof (temp));
+  if (max_read)
+    wipememory (temp, max_read);
   xfree (temp);
 
   return nwrote;
index 75ba607..81dd501 100644 (file)
 #include "mischelp.h"
 
 
+void
+wipememory (void *ptr, size_t len)
+{
+#if defined(HAVE_W32_SYSTEM) && defined(SecureZeroMemory)
+  SecureZeroMemory (ptr, len);
+#elif defined(HAVE_EXPLICIT_BZERO)
+  explicit_bzero (ptr, len);
+#else
+  /* Prevent compiler from optimizing away the call to memset by accessing
+     memset through volatile pointer. */
+  static void *(*volatile memset_ptr)(void *, int, size_t) = (void *)memset;
+  memset_ptr (ptr, 0, len);
+#endif
+}
+
+
 /* Check whether the files NAME1 and NAME2 are identical.  This is for
    example achieved by comparing the inode numbers of the files.  */
 int
index 18ec96e..bdee5a4 100644 (file)
@@ -47,15 +47,9 @@ time_t timegm (struct tm *tm);
 #define DIM(v)              (sizeof(v)/sizeof((v)[0]))
 #define DIMof(type,member)   DIM(((type *)0)->member)
 
-/* To avoid that a compiler optimizes certain memset calls away, these
-   macros may be used instead. */
-#define wipememory2(_ptr,_set,_len) do { \
-              volatile char *_vptr=(volatile char *)(_ptr); \
-              size_t _vlen=(_len); \
-              while(_vlen) { *_vptr=(_set); _vptr++; _vlen--; } \
-                  } while(0)
-#define wipememory(_ptr,_len) wipememory2(_ptr,0,_len)
-
+/* To avoid that a compiler optimizes certain memset calls away,
+   wipememory function may be used instead.  */
+void wipememory(void *ptr, size_t len);
 
 /* Include hacks which are mainly required for Slowaris.  */
 #ifdef GNUPG_COMMON_NEED_AFLOCAL
index 4d66af9..919ab31 100644 (file)
@@ -28,7 +28,7 @@ min_automake_version="1.14"
 m4_define([mym4_package],[gnupg])
 m4_define([mym4_major], [2])
 m4_define([mym4_minor], [2])
-m4_define([mym4_micro], [11])
+m4_define([mym4_micro], [12])
 
 # To start a new development series, i.e a new major or minor number
 # you need to mark an arbitrary commit before the first beta release
@@ -116,7 +116,6 @@ use_tls_library=no
 large_secmem=no
 show_tor_support=no
 
-
 GNUPG_BUILD_PROGRAM(gpg, yes)
 GNUPG_BUILD_PROGRAM(gpgsm, yes)
 # The agent is a required part and can't be disabled anymore.
@@ -247,6 +246,15 @@ fi
 AC_DEFINE_UNQUOTED(SECMEM_BUFFER_SIZE,$SECMEM_BUFFER_SIZE,
                    [Size of secure memory buffer])
 
+AC_MSG_CHECKING([calibrated passphrase-stretching (s2k) duration])
+AC_ARG_WITH(agent-s2k-calibration,
+              AC_HELP_STRING([--with-agent-s2k-calibration=MSEC],
+                             [calibrate passphrase stretching (s2k) to MSEC milliseconds]),
+              agent_s2k_calibration=$withval, agent_s2k_calibration=100)
+AC_MSG_RESULT($agent_s2k_calibration milliseconds)
+AC_DEFINE_UNQUOTED(AGENT_S2K_CALIBRATION, $agent_s2k_calibration,
+                   [Agent s2k calibration time (ms)])
+
 AC_MSG_CHECKING([whether to enable trust models])
 AC_ARG_ENABLE(trust-models,
               AC_HELP_STRING([--disable-trust-models],
@@ -1382,18 +1390,17 @@ AC_CHECK_DECLS(getpagesize)
 AC_FUNC_FSEEKO
 AC_FUNC_VPRINTF
 AC_FUNC_FORK
-AC_CHECK_FUNCS([strerror strlwr tcgetattr mmap canonicalize_file_name])
-AC_CHECK_FUNCS([strcasecmp strncasecmp ctermid times gmtime_r strtoull])
-AC_CHECK_FUNCS([setenv unsetenv fcntl ftruncate inet_ntop])
-AC_CHECK_FUNCS([canonicalize_file_name])
-AC_CHECK_FUNCS([gettimeofday getrusage getrlimit setrlimit clock_gettime])
-AC_CHECK_FUNCS([atexit raise getpagesize strftime nl_langinfo setlocale])
-AC_CHECK_FUNCS([waitpid wait4 sigaction sigprocmask pipe getaddrinfo])
-AC_CHECK_FUNCS([ttyname rand ftello fsync stat lstat])
-AC_CHECK_FUNCS([memicmp stpcpy strsep strlwr strtoul memmove stricmp strtol \
-                memrchr isascii timegm getrusage setrlimit stat setlocale   \
-                flockfile funlockfile getpwnam getpwuid \
-                getenv inet_pton strpbrk])
+AC_CHECK_FUNCS([atexit canonicalize_file_name clock_gettime ctermid  \
+                explicit_bzero fcntl flockfile fsync ftello          \
+                ftruncate funlockfile getaddrinfo getenv getpagesize \
+                getpwnam getpwuid getrlimit getrusage gettimeofday   \
+                gmtime_r inet_ntop inet_pton isascii lstat memicmp   \
+                memmove memrchr mmap nl_langinfo pipe raise rand     \
+                setenv setlocale setrlimit sigaction sigprocmask     \
+                stat stpcpy strcasecmp strerror strftime stricmp     \
+                strlwr strncasecmp strpbrk strsep strtol strtoul     \
+                strtoull tcgetattr timegm times ttyname unsetenv     \
+                wait4 waitpid ])
 
 # On some systems (e.g. Solaris) nanosleep requires linking to librl.
 # Given that we use nanosleep only as an optimization over a select
index 43f59bd..081f723 100644 (file)
@@ -120,7 +120,7 @@ t_common_ldadd = $(libcommon) $(LIBASSUAN_LIBS) $(LIBGCRYPT_LIBS) \
                  $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) \
                  $(DNSLIBS) $(LIBINTL) $(LIBICONV)
 
-module_tests =
+module_tests = t-http-basic
 
 if USE_LDAP
 module_tests += t-ldap-parse-uri
@@ -151,6 +151,15 @@ t_http_CFLAGS  = -DWITHOUT_NPTH=1  $(USE_C99_CFLAGS) \
 t_http_LDADD   = $(t_common_ldadd) \
                 $(NTBTLS_LIBS) $(KSBA_LIBS) $(LIBGNUTLS_LIBS) $(DNSLIBS)
 
+t_http_basic_SOURCES = $(t_common_src) t-http-basic.c http.c \
+                      dns-stuff.c http-common.c
+t_http_basic_CFLAGS  = -DWITHOUT_NPTH=1  $(USE_C99_CFLAGS) \
+                $(LIBGCRYPT_CFLAGS) $(NTBTLS_CFLAGS) $(LIBGNUTLS_CFLAGS) \
+                 $(LIBASSUAN_CFLAGS) $(GPG_ERROR_CFLAGS) $(KSBA_CFLAGS)
+t_http_basic_LDADD   = $(t_common_ldadd) \
+                $(NTBTLS_LIBS) $(KSBA_LIBS) $(LIBGNUTLS_LIBS) $(DNSLIBS)
+
+
 t_ldap_parse_uri_SOURCES = \
        t-ldap-parse-uri.c ldap-parse-uri.c ldap-parse-uri.h \
         http.c http-common.c dns-stuff.c \
index 0b2fe16..52f49c0 100644 (file)
@@ -1250,13 +1250,15 @@ crl_cache_deinit (void)
 }
 
 
-/* Delete the cache from disk. Return 0 on success.*/
+/* Delete the cache from disk and memory. Return 0 on success.*/
 int
 crl_cache_flush (void)
 {
   int rc;
 
+  crl_cache_deinit ();
   rc = cleanup_cache_dir (0)? -1 : 0;
+  crl_cache_init ();
 
   return rc;
 }
index 6846107..9f4afc8 100644 (file)
@@ -1347,6 +1347,8 @@ do_parse_uri (parsed_uri_t uri, int only_local_part,
   uri->v6lit = 0;
   uri->onion = 0;
   uri->explicit_port = 0;
+  uri->off_host = 0;
+  uri->off_path = 0;
 
   /* A quick validity check. */
   if (strspn (p, VALID_URI_CHARS) != n)
@@ -1390,7 +1392,19 @@ do_parse_uri (parsed_uri_t uri, int only_local_part,
        {
           p += 2;
          if ((p2 = strchr (p, '/')))
-           *p2++ = 0;
+            {
+              if (p2 - uri->buffer > 10000)
+                return GPG_ERR_BAD_URI;
+              uri->off_path = p2 - uri->buffer;
+              *p2++ = 0;
+            }
+          else
+            {
+              n = (p - uri->buffer) + strlen (p);
+              if (n > 10000)
+                return GPG_ERR_BAD_URI;
+              uri->off_path = n;
+            }
 
           /* Check for username/password encoding */
           if ((p3 = strchr (p, '@')))
@@ -1409,11 +1423,19 @@ do_parse_uri (parsed_uri_t uri, int only_local_part,
              *p3++ = '\0';
              /* worst case, uri->host should have length 0, points to \0 */
              uri->host = p + 1;
+              if (p - uri->buffer > 10000)
+                return GPG_ERR_BAD_URI;
+              uri->off_host = (p + 1) - uri->buffer;
               uri->v6lit = 1;
              p = p3;
            }
          else
-           uri->host = p;
+            {
+              uri->host = p;
+              if (p - uri->buffer > 10000)
+                return GPG_ERR_BAD_URI;
+              uri->off_host = p - uri->buffer;
+            }
 
          if ((p3 = strchr (p, ':')))
            {
@@ -3490,3 +3512,172 @@ uri_query_lookup (parsed_uri_t uri, const char *key)
 
   return NULL;
 }
+
+
+/* Return true if both URI point to the same host.  */
+static int
+same_host_p (parsed_uri_t a, parsed_uri_t b)
+{
+  return a->host && b->host && !ascii_strcasecmp (a->host, b->host);
+}
+
+
+/* Prepare a new URL for a HTTP redirect.  INFO has flags controlling
+ * the operaion, STATUS_CODE is used for diagnostics, LOCATION is the
+ * value of the "Location" header, and R_URL reveives the new URL on
+ * success or NULL or error.  Note that INFO->ORIG_URL is
+ * required.  */
+gpg_error_t
+http_prepare_redirect (http_redir_info_t *info, unsigned int status_code,
+                       const char *location, char **r_url)
+{
+  gpg_error_t err;
+  parsed_uri_t locuri;
+  parsed_uri_t origuri;
+  char *newurl;
+  char *p;
+
+  *r_url = NULL;
+
+  if (!info || !info->orig_url)
+    return gpg_error (GPG_ERR_INV_ARG);
+
+  if (!info->silent)
+    log_info (_("URL '%s' redirected to '%s' (%u)\n"),
+              info->orig_url, location? location:"[none]", status_code);
+
+  if (!info->redirects_left)
+    {
+      if (!info->silent)
+        log_error (_("too many redirections\n"));
+      return gpg_error (GPG_ERR_NO_DATA);
+    }
+  info->redirects_left--;
+
+  if (!location || !*location)
+    return gpg_error (GPG_ERR_NO_DATA);
+
+  err = http_parse_uri (&locuri, location, 0);
+  if (err)
+    return err;
+
+  /* Make sure that an onion address only redirects to another
+   * onion address, or that a https address only redirects to a
+   * https address. */
+  if (info->orig_onion && !locuri->onion)
+    {
+      http_release_parsed_uri (locuri);
+      return gpg_error (GPG_ERR_FORBIDDEN);
+    }
+  if (!info->allow_downgrade && info->orig_https && !locuri->use_tls)
+    {
+      http_release_parsed_uri (locuri);
+      return gpg_error (GPG_ERR_FORBIDDEN);
+    }
+
+  if (info->trust_location)
+    {
+      /* We trust the Location - return it verbatim.  */
+      http_release_parsed_uri (locuri);
+      newurl = xtrystrdup (location);
+      if (!newurl)
+        {
+          err = gpg_error_from_syserror ();
+          http_release_parsed_uri (locuri);
+          return err;
+        }
+    }
+  else if ((err = http_parse_uri (&origuri, info->orig_url, 0)))
+    {
+      http_release_parsed_uri (locuri);
+      return err;
+    }
+  else if (same_host_p (origuri, locuri))
+    {
+      /* The host is the same and thus we can take the location
+       * verbatim.  */
+      http_release_parsed_uri (origuri);
+      http_release_parsed_uri (locuri);
+      newurl = xtrystrdup (location);
+      if (!newurl)
+        {
+          err = gpg_error_from_syserror ();
+          http_release_parsed_uri (locuri);
+          return err;
+        }
+    }
+  else
+    {
+      /* We take only the host and port from the URL given in the
+       * Location.  This limits the effects of redirection attacks by
+       * rogue hosts returning an URL to servers in the client's own
+       * network.  We don't even include the userinfo because they
+       * should be considered similar to the path and query parts.
+       */
+      if (!(locuri->off_path - locuri->off_host))
+        {
+          http_release_parsed_uri (origuri);
+          http_release_parsed_uri (locuri);
+          return gpg_error (GPG_ERR_BAD_URI);
+        }
+      if (!(origuri->off_path - origuri->off_host))
+        {
+          http_release_parsed_uri (origuri);
+          http_release_parsed_uri (locuri);
+          return gpg_error (GPG_ERR_BAD_URI);
+        }
+
+      newurl = xtrymalloc (strlen (origuri->original)
+                           + (locuri->off_path - locuri->off_host) + 1);
+      if (!newurl)
+        {
+          err = gpg_error_from_syserror ();
+          http_release_parsed_uri (origuri);
+          http_release_parsed_uri (locuri);
+          return err;
+        }
+      /* Build new URL from
+       *   uriguri:  scheme userinfo ---- ---- path rest
+       *   locuri:   ------ -------- host port ---- ----
+       */
+      p = newurl;
+      memcpy (p, origuri->original, origuri->off_host);
+      p += origuri->off_host;
+      memcpy (p, locuri->original + locuri->off_host,
+              (locuri->off_path - locuri->off_host));
+      p += locuri->off_path - locuri->off_host;
+      strcpy (p, origuri->original + origuri->off_path);
+
+      http_release_parsed_uri (origuri);
+      http_release_parsed_uri (locuri);
+      if (!info->silent)
+        log_info (_("redirection changed to '%s'\n"), newurl);
+    }
+
+  *r_url = newurl;
+  return 0;
+}
+
+
+/* Return string describing the http STATUS.  Returns an empty string
+ * for an unknown status.  */
+const char *
+http_status2string (unsigned int status)
+{
+  switch (status)
+    {
+    case 500: return "Internal Server Error";
+    case 501: return "Not Implemented";
+    case 502: return "Bad Gateway";
+    case 503: return "Service Unavailable";
+    case 504: return "Gateway Timeout";
+    case 505: return "HTTP version Not Supported";
+    case 506: return "Variant Also Negation";
+    case 507: return "Insufficient Storage";
+    case 508: return "Loop Detected";
+    case 510: return "Not Extended";
+    case 511: return "Network Authentication Required";
+    }
+
+  return "";
+}
index 4cfb4c8..2bad63d 100644 (file)
@@ -58,6 +58,8 @@ struct parsed_uri_s
   char *auth;           /* username/password for basic auth.  */
   char *host;          /* Host (converted to lowercase). */
   unsigned short port;  /* Port (always set if the host is set). */
+  unsigned short off_host; /* Offset to the HOST respective PATH parts  */
+  unsigned short off_path; /* in the original URI buffer.               */
   char *path;          /* Path. */
   uri_tuple_t params;  /* ";xxxxx" */
   uri_tuple_t query;   /* "?xxx=yyy" */
@@ -100,6 +102,21 @@ typedef struct http_session_s *http_session_t;
 struct http_context_s;
 typedef struct http_context_s *http_t;
 
+/* An object used to track redirection infos.  */
+struct http_redir_info_s
+{
+  unsigned int redirects_left;   /* Number of still possible redirects.    */
+  const char *orig_url;          /* The original requested URL.            */
+  unsigned int orig_onion:1;     /* Original request was an onion address. */
+  unsigned int orig_https:1;     /* Original request was a http address.   */
+  unsigned int silent:1;         /* No diagnostics.                        */
+  unsigned int allow_downgrade:1;/* Allow a downgrade from https to http.  */
+  unsigned int trust_location:1; /* Trust the received Location header.    */
+};
+typedef struct http_redir_info_s http_redir_info_t;
+
+
+
 /* A TLS verify callback function.  */
 typedef gpg_error_t (*http_verify_cb_t) (void *opaque,
                                          http_t http,
@@ -176,5 +193,11 @@ gpg_error_t http_verify_server_credentials (http_session_t sess);
 char *http_escape_string (const char *string, const char *specials);
 char *http_escape_data (const void *data, size_t datalen, const char *specials);
 
+gpg_error_t http_prepare_redirect (http_redir_info_t *info,
+                                   unsigned int status_code,
+                                   const char *location, char **r_url);
+
+const char *http_status2string (unsigned int status);
+
 
 #endif /*GNUPG_COMMON_HTTP_H*/
index 7c2836c..20d29e9 100644 (file)
@@ -1159,18 +1159,21 @@ send_request (ctrl_t ctrl, const char *request, const char *hostportstr,
   gpg_error_t err;
   http_session_t session = NULL;
   http_t http = NULL;
-  int redirects_left = MAX_REDIRECTS;
+  http_redir_info_t redirinfo = { MAX_REDIRECTS };
   estream_t fp = NULL;
   char *request_buffer = NULL;
   parsed_uri_t uri = NULL;
-  int is_onion;
 
   *r_fp = NULL;
 
   err = http_parse_uri (&uri, request, 0);
   if (err)
     goto leave;
-  is_onion = uri->onion;
+  redirinfo.orig_url   = request;
+  redirinfo.orig_onion = uri->onion;
+  redirinfo.allow_downgrade = 1;
+  /* FIXME: I am not sure whey we allow a downgrade for hkp requests.
+   * Needs at least an explanation here..  */
 
   err = http_session_new (&session, httphost,
                           ((ctrl->http_no_crl? HTTP_FLAG_NO_CRL : 0)
@@ -1251,45 +1254,18 @@ send_request (ctrl_t ctrl, const char *request, const char *hostportstr,
     case 302:
     case 307:
       {
-        const char *s = http_get_header (http, "Location");
-
-        log_info (_("URL '%s' redirected to '%s' (%u)\n"),
-                  request, s?s:"[none]", http_get_status_code (http));
-        if (s && *s && redirects_left-- )
-          {
-            if (is_onion)
-              {
-                /* Make sure that an onion address only redirects to
-                 * another onion address.  */
-                http_release_parsed_uri (uri);
-                uri = NULL;
-                err = http_parse_uri (&uri, s, 0);
-                if (err)
-                  goto leave;
-
-                if (! uri->onion)
-                  {
-                    err = gpg_error (GPG_ERR_FORBIDDEN);
-                    goto leave;
-                  }
-              }
+        xfree (request_buffer);
+        err = http_prepare_redirect (&redirinfo, http_get_status_code (http),
+                                     http_get_header (http, "Location"),
+                                     &request_buffer);
+        if (err)
+          goto leave;
 
-            xfree (request_buffer);
-            request_buffer = xtrystrdup (s);
-            if (request_buffer)
-              {
-                request = request_buffer;
-                http_close (http, 0);
-                http = NULL;
-                goto once_more;
-              }
-            err = gpg_error_from_syserror ();
-          }
-        else
-          err = gpg_error (GPG_ERR_NO_DATA);
-        log_error (_("too many redirections\n"));
+        request = request_buffer;
+        http_close (http, 0);
+        http = NULL;
       }
-      goto leave;
+      goto once_more;
 
     case 501:
       err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
@@ -1334,7 +1310,7 @@ send_request (ctrl_t ctrl, const char *request, const char *hostportstr,
    down to zero. */
 static int
 handle_send_request_error (ctrl_t ctrl, gpg_error_t err, const char *request,
-                           unsigned int *tries_left)
+                           unsigned int http_status, unsigned int *tries_left)
 {
   int retry = 0;
 
@@ -1377,6 +1353,27 @@ handle_send_request_error (ctrl_t ctrl, gpg_error_t err, const char *request,
         }
       break;
 
+    case GPG_ERR_NO_DATA:
+      {
+        switch (http_status)
+          {
+          case 502: /* Bad Gateway  */
+            log_info ("marking host dead due to a %u (%s)\n",
+                      http_status, http_status2string (http_status));
+            if (mark_host_dead (request) && *tries_left)
+              retry = 1;
+            break;
+
+          case 503: /* Service Unavailable */
+          case 504: /* Gateway Timeout    */
+            log_info ("selecting a different host due to a %u (%s)",
+                      http_status, http_status2string (http_status));
+            retry = 1;
+            break;
+          }
+      }
+      break;
+
     default:
       break;
     }
@@ -1405,6 +1402,7 @@ ks_hkp_search (ctrl_t ctrl, parsed_uri_t uri, const char *pattern,
   int reselect;
   unsigned int httpflags;
   char *httphost = NULL;
+  unsigned int http_status;
   unsigned int tries = SEND_REQUEST_RETRIES;
 
   *r_fp = NULL;
@@ -1486,12 +1484,14 @@ ks_hkp_search (ctrl_t ctrl, parsed_uri_t uri, const char *pattern,
 
   /* Send the request.  */
   err = send_request (ctrl, request, hostport, httphost, httpflags,
-                      NULL, NULL, &fp, r_http_status);
-  if (handle_send_request_error (ctrl, err, request, &tries))
+                      NULL, NULL, &fp, &http_status);
+  if (handle_send_request_error (ctrl, err, request, http_status, &tries))
     {
       reselect = 1;
       goto again;
     }
+  if (r_http_status)
+    *r_http_status = http_status;
   if (err)
     {
       if (gpg_err_code (err) == GPG_ERR_NO_DATA)
@@ -1553,6 +1553,7 @@ ks_hkp_get (ctrl_t ctrl, parsed_uri_t uri, const char *keyspec, estream_t *r_fp)
   int reselect;
   char *httphost = NULL;
   unsigned int httpflags;
+  unsigned int http_status;
   unsigned int tries = SEND_REQUEST_RETRIES;
 
   *r_fp = NULL;
@@ -1625,8 +1626,8 @@ ks_hkp_get (ctrl_t ctrl, parsed_uri_t uri, const char *keyspec, estream_t *r_fp)
 
   /* Send the request.  */
   err = send_request (ctrl, request, hostport, httphost, httpflags,
-                      NULL, NULL, &fp, NULL);
-  if (handle_send_request_error (ctrl, err, request, &tries))
+                      NULL, NULL, &fp, &http_status);
+  if (handle_send_request_error (ctrl, err, request, http_status, &tries))
     {
       reselect = 1;
       goto again;
@@ -1700,6 +1701,7 @@ ks_hkp_put (ctrl_t ctrl, parsed_uri_t uri, const void *data, size_t datalen)
   int reselect;
   char *httphost = NULL;
   unsigned int httpflags;
+  unsigned int http_status;
   unsigned int tries = SEND_REQUEST_RETRIES;
 
   parm.datastring = NULL;
@@ -1738,8 +1740,8 @@ ks_hkp_put (ctrl_t ctrl, parsed_uri_t uri, const void *data, size_t datalen)
 
   /* Send the request.  */
   err = send_request (ctrl, request, hostport, httphost, 0,
-                      put_post_cb, &parm, &fp, NULL);
-  if (handle_send_request_error (ctrl, err, request, &tries))
+                      put_post_cb, &parm, &fp, &http_status);
+  if (handle_send_request_error (ctrl, err, request, http_status, &tries))
     {
       reselect = 1;
       goto again;
index 946c927..1abb350 100644 (file)
@@ -74,17 +74,18 @@ ks_http_fetch (ctrl_t ctrl, const char *url, unsigned int flags,
   http_session_t session = NULL;
   unsigned int session_flags;
   http_t http = NULL;
-  int redirects_left = MAX_REDIRECTS;
+  http_redir_info_t redirinfo = { MAX_REDIRECTS };
   estream_t fp = NULL;
   char *request_buffer = NULL;
   parsed_uri_t uri = NULL;
-  int is_onion, is_https;
 
   err = http_parse_uri (&uri, url, 0);
   if (err)
     goto leave;
-  is_onion = uri->onion;
-  is_https = uri->use_tls;
+  redirinfo.orig_url   = url;
+  redirinfo.orig_onion = uri->onion;
+  redirinfo.orig_https = uri->use_tls;
+  redirinfo.allow_downgrade = !!(flags & KS_HTTP_FETCH_ALLOW_DOWNGRADE);
 
   /* By default we only use the system provided certificates with this
    * fetch command.  */
@@ -158,53 +159,20 @@ ks_http_fetch (ctrl_t ctrl, const char *url, unsigned int flags,
     case 302:
     case 307:
       {
-        const char *s = http_get_header (http, "Location");
-
-        log_info (_("URL '%s' redirected to '%s' (%u)\n"),
-                  url, s?s:"[none]", http_get_status_code (http));
-        if (s && *s && redirects_left-- )
-          {
-            if (is_onion || is_https)
-              {
-                /* Make sure that an onion address only redirects to
-                 * another onion address, or that a https address
-                 * only redirects to a https address. */
-                http_release_parsed_uri (uri);
-                uri = NULL;
-                err = http_parse_uri (&uri, s, 0);
-                if (err)
-                  goto leave;
-
-                if (is_onion && !uri->onion)
-                  {
-                    err = gpg_error (GPG_ERR_FORBIDDEN);
-                    goto leave;
-                  }
-                if (!(flags & KS_HTTP_FETCH_ALLOW_DOWNGRADE)
-                    && is_https && !uri->use_tls)
-                  {
-                    err = gpg_error (GPG_ERR_FORBIDDEN);
-                    goto leave;
-                  }
-              }
-
-            xfree (request_buffer);
-            request_buffer = xtrystrdup (s);
-            if (request_buffer)
-              {
-                url = request_buffer;
-                http_close (http, 0);
-                http = NULL;
-                http_session_release (session);
-                goto once_more;
-              }
-            err = gpg_error_from_syserror ();
-          }
-        else
-          err = gpg_error (GPG_ERR_NO_DATA);
-        log_error (_("too many redirections\n"));
+        xfree (request_buffer);
+        err = http_prepare_redirect (&redirinfo, http_get_status_code (http),
+                                     http_get_header (http, "Location"),
+                                     &request_buffer);
+        if (err)
+          goto leave;
+
+        url = request_buffer;
+        http_close (http, 0);
+        http = NULL;
+        http_session_release (session);
+        session = NULL;
       }
-      goto leave;
+      goto once_more;
 
     default:
       log_error (_("error accessing '%s': http status %u\n"),
index d414c0e..272b95a 100644 (file)
@@ -2689,6 +2689,20 @@ cmd_reloaddirmngr (assuan_context_t ctx, char *line)
 }
 
 
+static const char hlp_flushcrls[] =
+  "FLUSHCRLS\n"
+  "\n"
+  "Remove all cached CRLs from memory and\n"
+  "the file system.";
+static gpg_error_t
+cmd_flushcrls (assuan_context_t ctx, char *line)
+{
+  (void)line;
+
+  return leave_cmd (ctx, crl_cache_flush () ? GPG_ERR_GENERAL : 0);
+}
+
+
 \f
 /* Tell the assuan library about our commands. */
 static int
@@ -2719,6 +2733,7 @@ register_commands (assuan_context_t ctx)
     { "LOADSWDB",   cmd_loadswdb,   hlp_loadswdb },
     { "KILLDIRMNGR",cmd_killdirmngr,hlp_killdirmngr },
     { "RELOADDIRMNGR",cmd_reloaddirmngr,hlp_reloaddirmngr },
+    { "FLUSHCRLS",  cmd_flushcrls,  hlp_flushcrls },
     { NULL, NULL }
   };
   int i, j, rc;
diff --git a/dirmngr/t-http-basic.c b/dirmngr/t-http-basic.c
new file mode 100644 (file)
index 0000000..edf82ef
--- /dev/null
@@ -0,0 +1,199 @@
+/* t-http-basic.c - Basic regression tests for http.c
+ * Copyright (C) 2018  g10 Code GmbH
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://gnu.org/licenses/>.
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#include <config.h>
+#include <stdlib.h>
+
+#include "../common/util.h"
+#include "t-support.h"
+#include "http.h"
+
+#define PGM "t-http-basic"
+
+
+static void
+test_http_prepare_redirect (void)
+{
+  static struct {
+    const char *url;
+    const char *location;
+    const char *expect_url;
+    gpg_error_t expect_err;
+  } tests[] = {
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      NULL,
+      "",
+      GPG_ERR_NO_DATA
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "",
+      "",
+      GPG_ERR_NO_DATA
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "foo//bla",
+      "",
+      GPG_ERR_BAD_URI
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://foo.gnupg.org:8080/.not-so-well-known/openpgpkey/hu/12345678",
+      "http://foo.gnupg.org:8080/.well-known/openpgpkey/hu/12345678",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http:///.no-so-well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      GPG_ERR_BAD_URI
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org:8080/.not-so-well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org:8080/.not-so-well-known/openpgpkey/hu/12345678",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org:8/.not-so-well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org:8/.not-so-well-known/openpgpkey/hu/12345678",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org:/.no-so-well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org:/.no-so-well-known/openpgpkey/hu/12345678",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org/",
+      "http://gnupg.org/",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.net",
+      "http://gnupg.net/.well-known/openpgpkey/hu/12345678",
+      0
+    },
+    {
+      "http://gnupg.org",
+      "http://gnupg.org",
+      "http://gnupg.org",
+      0
+    },
+    {
+      "http://gnupg.org",
+      "http://foo.gnupg.org",
+      "http://foo.gnupg.org",
+      0
+    },
+    {
+      "http://gnupg.org/",
+      "http://foo.gnupg.org",
+      "http://foo.gnupg.org/",
+      0
+    },
+    {
+      "http://gnupg.org",
+      "http://foo.gnupg.org/",
+      "http://foo.gnupg.org",
+      0
+    },
+    {
+      "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
+      "http://gnupg.org/something-else",
+      "http://gnupg.org/something-else",
+      0
+    },
+  };
+  int tidx;
+  http_redir_info_t ri;
+  gpg_error_t err;
+  char *newurl;
+
+  err = http_prepare_redirect (NULL, 301, tests[0].location, &newurl);
+  if (gpg_err_code (err) != GPG_ERR_INV_ARG)
+    fail (0);
+  memset (&ri, 0, sizeof ri);
+  err = http_prepare_redirect (&ri, 301, tests[0].location, &newurl);
+  if (gpg_err_code (err) != GPG_ERR_INV_ARG)
+    fail (0);
+  memset (&ri, 0, sizeof ri);
+  ri.silent = 1;
+  ri.orig_url = "http://example.org";
+  err = http_prepare_redirect (&ri, 301, tests[0].location, &newurl);
+  if (gpg_err_code (err) != GPG_ERR_NO_DATA)
+    fail (0);
+
+  for (tidx = 0; tidx < DIM (tests); tidx++)
+    {
+      memset (&ri, 0, sizeof ri);
+      ri.silent = 1;
+      ri.redirects_left = 1;
+      ri.orig_url = tests[tidx].url;
+
+      err = http_prepare_redirect (&ri, 301, tests[tidx].location, &newurl);
+      if (err && newurl)
+        fail (tidx);
+      if (err && gpg_err_code (err) != tests[tidx].expect_err)
+        fail (tidx);
+      if (err)
+        continue;
+      if (!newurl)
+        fail (tidx);
+      if (strcmp (tests[tidx].expect_url, newurl))
+        {
+          fprintf (stderr, "want: '%s'\n", tests[tidx].expect_url);
+          fprintf (stderr, "got : '%s'\n", newurl);
+          fail (tidx);
+        }
+
+      xfree (newurl);
+    }
+}
+
+
+int
+main (int argc, char **argv)
+{
+  (void)argc;
+  (void)argv;
+
+  test_http_prepare_redirect ();
+
+  return 0;
+}
index 440633d..3cf08ad 100644 (file)
@@ -394,9 +394,9 @@ main (int argc, char **argv)
   else
     {
       printf ("Auth  : %s\n", uri->auth? uri->auth:"[none]");
-      printf ("Host  : %s\n", uri->host);
+      printf ("Host  : %s (off=%hu)\n", uri->host, uri->off_host);
       printf ("Port  : %u\n", uri->port);
-      printf ("Path  : %s\n", uri->path);
+      printf ("Path  : %s (off=%hu)\n", uri->path, uri->off_path);
       for (r = uri->params; r; r = r->next)
         {
           printf ("Params: %s", r->name);
index bcce033..3997d20 100644 (file)
@@ -669,12 +669,19 @@ For an heavy loaded gpg-agent with many concurrent connection this
 option avoids sign or decrypt errors due to out of secure memory error
 returns.
 
+@item --s2k-calibration @var{milliseconds}
+@opindex s2k-calibration
+Change the default calibration time to @var{milliseconds}.  The given
+value is capped at 60 seconds; a value of 0 resets to the compiled-in
+default.  This option is re-read on a SIGHUP (or @code{gpgconf
+--reload gpg-agent}) and the S2K count is then re-calibrated.
+
 @item --s2k-count @var{n}
 @opindex s2k-count
 Specify the iteration count used to protect the passphrase.  This
 option can be used to override the auto-calibration done by default.
-The auto-calibration computes a count which requires 100ms to mangle
-a given passphrase.
+The auto-calibration computes a count which requires by default 100ms
+to mangle a given passphrase.  See also @option{--s2k-calibration}.
 
 To view the actually used iteration count and the milliseconds
 required for an S2K operation use:
index ffcdaf2..1eed9fa 100644 (file)
@@ -1328,6 +1328,10 @@ give the opposite meaning.  The options are:
   meaningful when using @option{--with-colons} along with
   @option{--check-signatures}.
 
+  @item show-only-fpr-mbox
+  @opindex list-options:show-only-fpr-mbox
+  For each valid user-id which also has a valid mail address print
+  only the fingerprint and the mail address.
 @end table
 
 @item --verify-options @var{parameters}
@@ -1783,7 +1787,9 @@ list.  The default is "local,wkd".
 
   @item clear
   Clear all defined mechanisms.  This is useful to override
-  mechanisms given in a config file.
+  mechanisms given in a config file.  Note that a @code{nodefault} in
+  @var{mechanisms} will also be cleared unless it is given after the
+  @code{clear}.
 
 @end table
 
index 89288d0..d6798b1 100644 (file)
@@ -90,6 +90,17 @@ decrypted MIME message.  The result of these commands are another mail
 which can be send in the same way as the mail created with
 @option{--create}.
 
+The command @option{--install-key} manually installs a key into a
+local directory (see option @option{-C}) reflecting the structure of a
+WKD.  The arguments are a file with the keyblock and the user-id to
+install.  If the first argument resembles a fingerprint the key is
+taken from the current keyring; to force the use of a file, prefix the
+first argument with "./".  If no arguments are given the parameters
+are read from stdin; the expected format are lines with the
+fingerprint and the mailbox separated by a space.  The command
+@option{--remove-key} removes a key from that directory, its only
+argument is a user-id.
+
 @command{gpg-wks-client} is not commonly invoked directly and thus it
 is not installed in the bin directory.  Here is an example how it can
 be invoked manually to check for a Web Key Directory entry for
@@ -161,6 +172,13 @@ This program returns only the status messages SUCCESS or FAILURE which
 are helpful when the caller uses a double fork approach and can't
 easily get the return code of the process.
 
+@item -C @var{dir}
+@itemx --directory @var{dir}
+@opindex directory
+Use @var{dir} as top level directory for the commands
+@option{--install-key} and @option{--remove-key}.  The default is
+@file{openpgpkey}.
+
 @item --verbose
 @opindex verbose
 Enable extra informational output.
@@ -265,7 +283,9 @@ The command @option{--install-key} manually installs a key into the
 WKD.  The arguments are a file with the keyblock and the user-id to
 install.  If the first argument resembles a fingerprint the key is
 taken from the current keyring; to force the use of a file, prefix the
-first argument with "./".
+first argument with "./".  If no arguments are given the parameters
+are read from stdin; the expected format are lines with the
+fingerprint and the mailbox separated by a space.
 
 The command @option{--remove-key} uninstalls a key from the WKD.  The
 process returns success in this case; to also print a diagnostic, use
index 6ee82a5..4630506 100644 (file)
@@ -704,6 +704,10 @@ learn_status_cb (void *opaque, const char *line)
       xfree (parm->private_do[no]);
       parm->private_do[no] = unescape_status_string (line);
     }
+  else if (keywordlen == 3 && !memcmp (keyword, "KDF", 3))
+    {
+      parm->kdf_do_enabled = 1;
+    }
 
   return 0;
 }
index 7314ae8..d7f102c 100644 (file)
@@ -71,6 +71,7 @@ struct agent_card_info_s
     unsigned int kdf:1;    /* KDF object to support PIN hashing available.  */
   } extcap;
   unsigned int status_indicator;
+  int kdf_do_enabled;      /* Card has a KDF object */
 };
 
 
@@ -192,14 +193,14 @@ gpg_error_t agent_keywrap_key (ctrl_t ctrl, int forexport,
 gpg_error_t agent_import_key (ctrl_t ctrl, const char *desc,
                               char **cache_nonce_addr, const void *key,
                               size_t keylen, int unattended, int force,
-                             u32 *keyid, u32 *mainkeyid, int pubkey_algo);
+                              u32 *keyid, u32 *mainkeyid, int pubkey_algo);
 
 /* Receive a key from the agent.  */
 gpg_error_t agent_export_key (ctrl_t ctrl, const char *keygrip,
                               const char *desc, int openpgp_protected,
                               char **cache_nonce_addr,
                               unsigned char **r_result, size_t *r_resultlen,
-                             u32 *keyid, u32 *mainkeyid, int pubkey_algo);
+                              u32 *keyid, u32 *mainkeyid, int pubkey_algo);
 
 /* Delete a key from the agent.  */
 gpg_error_t agent_delete_key (ctrl_t ctrl, const char *hexkeygrip,
index 52a09b5..13c2445 100644 (file)
@@ -509,6 +509,10 @@ current_card_status (ctrl_t ctrl, estream_t fp,
       es_fprintf (fp, "pinretry:%d:%d:%d:\n",
                   info.chvretry[0], info.chvretry[1], info.chvretry[2]);
       es_fprintf (fp, "sigcount:%lu:::\n", info.sig_counter);
+      if (info.extcap.kdf)
+        {
+          es_fprintf (fp, "kdf:%s:\n", info.kdf_do_enabled ? "on" : "off");
+        }
 
       for (i=0; i < 4; i++)
         {
@@ -612,6 +616,11 @@ current_card_status (ctrl_t ctrl, estream_t fp,
       tty_fprintf (fp,    "PIN retry counter : %d %d %d\n",
                    info.chvretry[0], info.chvretry[1], info.chvretry[2]);
       tty_fprintf (fp,    "Signature counter : %lu\n", info.sig_counter);
+      if (info.extcap.kdf)
+        {
+          tty_fprintf (fp, "KDF setting ......: %s\n",
+                       info.kdf_do_enabled ? "on" : "off");
+        }
       tty_fprintf (fp, "Signature key ....:");
       print_sha1_fpr (fp, info.fpr1valid? info.fpr1:NULL);
       if (info.fpr1valid && info.fpr1time)
@@ -667,7 +676,7 @@ card_status (ctrl_t ctrl, estream_t fp, const char *serialno)
 {
   int err;
   strlist_t card_list, sl;
-  char *serialno0;
+  char *serialno0, *serialno1;
   int all_cards = 0;
 
   if (serialno == NULL)
@@ -693,8 +702,6 @@ card_status (ctrl_t ctrl, estream_t fp, const char *serialno)
 
   for (sl = card_list; sl; sl = sl->next)
     {
-      char *serialno1;
-
       if (!all_cards && strcmp (serialno, sl->d))
         continue;
 
@@ -715,7 +722,8 @@ card_status (ctrl_t ctrl, estream_t fp, const char *serialno)
     }
 
   /* Select the original card again.  */
-  err = agent_scd_serialno (&serialno0, serialno0);
+  err = agent_scd_serialno (&serialno1, serialno0);
+  xfree (serialno1);
 
  leave:
   xfree (serialno0);
index e18eefe..0e98c1a 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -1972,6 +1972,8 @@ parse_list_options(char *str)
        N_("show expiration dates during signature listings")},
       {"show-sig-subpackets",LIST_SHOW_SIG_SUBPACKETS,NULL,
        NULL},
+      {"show-only-fpr-mbox",LIST_SHOW_ONLY_FPR_MBOX, NULL,
+       NULL},
       {NULL,0,NULL,NULL}
     };
 
@@ -3487,7 +3489,7 @@ main (int argc, char **argv)
          case oAutoKeyLocate:
             if (default_akl)
               {
-                /* This is the first time --aito-key-locate is seen.
+                /* This is the first time --auto-key-locate is seen.
                  * We need to reset the default akl.  */
                 default_akl = 0;
                 release_akl();
index ba35ec2..5b868cd 100644 (file)
@@ -941,7 +941,12 @@ keygrip_from_pk (PKT_public_key *pk, unsigned char *array)
 
   if (!gcry_pk_get_keygrip (s_pkey, array))
     {
-      log_info ("error computing keygrip\n");
+      char *hexfpr;
+
+      hexfpr = hexfingerprint (pk, NULL, 0);
+      log_info ("error computing keygrip (fpr=%s)\n", hexfpr);
+      xfree (hexfpr);
+
       memset (array, 0, 20);
       err = gpg_error (GPG_ERR_GENERAL);
     }
index 7942558..66b03bb 100644 (file)
@@ -211,7 +211,7 @@ print_pubkey_info (ctrl_t ctrl, estream_t fp, PKT_public_key *pk)
   else
     p = get_user_id_native (ctrl, keyid);
 
-  if (fp)
+  if (!fp)
     tty_printf ("\n");
   tty_fprintf (fp, "%s  %s/%s %s %s\n",
                pk->flags.primary? "pub":"sub",
@@ -540,7 +540,7 @@ list_all (ctrl_t ctrl, int secret, int mark_secret)
         ; /* Secret key listing requested but this isn't one.  */
       else
         {
-          if (!opt.with_colons)
+          if (!opt.with_colons && !(opt.list_options & LIST_SHOW_ONLY_FPR_MBOX))
             {
               resname = keydb_get_resource_name (hd);
               if (lastresname != resname)
@@ -1217,6 +1217,57 @@ list_keyblock_print (ctrl_t ctrl, kbnode_t keyblock, int secret, int fpr,
   xfree (hexgrip);
 }
 
+
+/* Do a simple key listing printing only the fingerprint and the mail
+ * address of valid keys.  */
+static void
+list_keyblock_simple (ctrl_t ctrl, kbnode_t keyblock)
+{
+  gpg_err_code_t ec;
+  kbnode_t kbctx;
+  kbnode_t node;
+  char hexfpr[2*MAX_FINGERPRINT_LEN+1];
+  char *mbox;
+
+  (void)ctrl;
+
+  node = find_kbnode (keyblock, PKT_PUBLIC_KEY);
+  if (!node)
+    {
+      log_error ("Oops; key lost!\n");
+      dump_kbnode (keyblock);
+      return;
+    }
+  hexfingerprint (node->pkt->pkt.public_key, hexfpr, sizeof hexfpr);
+
+  for (kbctx = NULL; (node = walk_kbnode (keyblock, &kbctx, 0));)
+    {
+      if (node->pkt->pkttype == PKT_USER_ID)
+       {
+         PKT_user_id *uid = node->pkt->pkt.user_id;
+
+         if (uid->attrib_data)
+           continue;
+
+         if (uid->flags.expired || uid->flags.revoked)
+            continue;
+
+          mbox = mailbox_from_userid (uid->name);
+          if (!mbox)
+            {
+              ec = gpg_err_code_from_syserror ();
+              if (ec != GPG_ERR_EINVAL)
+                log_error ("error getting mailbox from user-id: %s\n",
+                           gpg_strerror (ec));
+              continue;
+            }
+          es_fprintf (es_stdout, "%s %s\n", hexfpr, mbox);
+          xfree (mbox);
+       }
+    }
+}
+
+
 void
 print_revokers (estream_t fp, PKT_public_key * pk)
 {
@@ -1767,6 +1818,12 @@ list_keyblock (ctrl_t ctrl,
 
   if (opt.with_colons)
     list_keyblock_colon (ctrl, keyblock, secret, has_secret);
+  else if ((opt.list_options & LIST_SHOW_ONLY_FPR_MBOX))
+    {
+      if (!listctx->no_validity)
+        check_trustdb_stale (ctrl);
+      list_keyblock_simple (ctrl, keyblock);
+    }
   else
     list_keyblock_print (ctrl, keyblock, secret, fpr, listctx);
 
index a8c222d..8509d83 100644 (file)
@@ -1528,7 +1528,7 @@ keyserver_search (ctrl_t ctrl, strlist_t tokens)
 
   err = gpg_dirmngr_ks_search (ctrl, searchstr, search_line_handler, &parm);
 
-  if (parm.not_found)
+  if (parm.not_found || gpg_err_code (err) == GPG_ERR_NO_DATA)
     {
       if (parm.searchstr_disp)
         log_info (_("key \"%s\" not found on keyserver\n"),
@@ -1539,6 +1539,8 @@ keyserver_search (ctrl_t ctrl, strlist_t tokens)
 
   if (gpg_err_code (err) == GPG_ERR_NO_KEYSERVER)
     log_error (_("no keyserver known (use option --keyserver)\n"));
+  else if (gpg_err_code (err) == GPG_ERR_NO_DATA)
+    err = gpg_error (GPG_ERR_NOT_FOUND);
   else if (err)
     log_error ("error searching keyserver: %s\n", gpg_strerror (err));
 
index f4e3db6..a0ec2e9 100644 (file)
@@ -799,7 +799,10 @@ proc_plaintext( CTX c, PACKET *pkt )
           /* The onepass signature case. */
           if (n->pkt->pkt.onepass_sig->digest_algo)
             {
-              gcry_md_enable (c->mfx.md, n->pkt->pkt.onepass_sig->digest_algo);
+              if (!opt.skip_verify)
+                gcry_md_enable (c->mfx.md,
+                                n->pkt->pkt.onepass_sig->digest_algo);
+
               any = 1;
             }
         }
@@ -817,7 +820,8 @@ proc_plaintext( CTX c, PACKET *pkt )
            * documents.  */
           clearsig = (*data == 0x01);
           for (data++, datalen--; datalen; datalen--, data++)
-            gcry_md_enable (c->mfx.md, *data);
+            if (!opt.skip_verify)
+              gcry_md_enable (c->mfx.md, *data);
           any = 1;
           break;  /* Stop here as one-pass signature packets are not
                      expected.  */
@@ -825,7 +829,8 @@ proc_plaintext( CTX c, PACKET *pkt )
       else if (n->pkt->pkttype == PKT_SIGNATURE)
         {
           /* The SIG+LITERAL case that PGP used to use.  */
-          gcry_md_enable ( c->mfx.md, n->pkt->pkt.signature->digest_algo );
+          if (!opt.skip_verify)
+            gcry_md_enable (c->mfx.md, n->pkt->pkt.signature->digest_algo);
           any = 1;
         }
     }
index 6c67265..782c0cb 100644 (file)
@@ -378,6 +378,7 @@ EXTERN_UNLESS_MAIN_MODULE int memory_stat_debug_mode;
 #define LIST_SHOW_SIG_EXPIRE             (1<<9)
 #define LIST_SHOW_SIG_SUBPACKETS         (1<<10)
 #define LIST_SHOW_USAGE                  (1<<11)
+#define LIST_SHOW_ONLY_FPR_MBOX          (1<<12)
 
 #define VERIFY_SHOW_PHOTOS               (1<<0)
 #define VERIFY_SHOW_POLICY_URLS          (1<<1)
index e97c9f3..ad6d235 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -8650,6 +8650,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "error en la lectura de «%s»: %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "hi ha massa preferències «%c»\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "s'està escrivint en «%s»\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "error en crear l'anell «%s»: %s\n"
@@ -8752,14 +8765,6 @@ msgstr "error mentre s'escrivia l'anell «%s»: %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "error en la lectura de «%s»: %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "hi ha massa preferències «%c»\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "error mentre s'enviava a «%s»: %s\n"
index c5c45e4..24ada94 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -8179,6 +8179,20 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "chyba přístupu k „%s“: status HTTP %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "URL „%s“ přesměrováno na „%s“ (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "příliš mnoho přesměrování\n"
+
+# g10/import.c:766 g10/openfile.c:261#, c-format
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "zapisuje se do „%s“\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "chyba při alokování paměti: %s\n"
 
@@ -8279,14 +8293,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "chyba při čtení HTTP odpovědi od „%s“: %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "URL „%s“ přesměrováno na „%s“ (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "příliš mnoho přesměrování\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "chyba při rozebírání OCSP odpovědi od „%s“: %s\n"
 
index 0128441..36cc3d7 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -8709,6 +8709,20 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "fejl ved kørsel af »%s«: afslutningsstatus %d\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "too many cipher preferences\n"
+msgid "too many redirections\n"
+msgstr "for mange chifferpræferencer\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "skriver til »%s«\n"
+
 #, fuzzy, c-format
 #| msgid "error allocating enough memory: %s\n"
 msgid "error allocating memory: %s\n"
@@ -8825,15 +8839,6 @@ msgstr "fejl ved skrivning til »%s«: %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "fejl ved læsning fra %s: %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "too many cipher preferences\n"
-msgid "too many redirections\n"
-msgstr "for mange chifferpræferencer\n"
-
 #, fuzzy, c-format
 #| msgid "error binding socket to `%s': %s\n"
 msgid "error parsing OCSP response for '%s': %s\n"
index 6badf9d..ac4d77d 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -8367,6 +8367,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "Fehler beim Zugreifen auf `%s': HTTP Status %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "URL `%s' nach `%s' umgeleitet (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "zu viele verschachtelte Umleitungen\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "Schreiben nach '%s'\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "Fehler beim Allozieren von Speicher: %s\n"
 
@@ -8467,14 +8480,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "Fehler beim Lesen der HTTP Antwort von `%s': %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "URL `%s' nach `%s' umgeleitet (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "zu viele verschachtelte Umleitungen\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "Fehler beim Zerlegen der OCSP Antwort für `%s': %s\n"
 
index a6a324c..fc25941 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -8483,6 +8483,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "σφάλμα κατά την ανάγνωση του `%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "πάρα πολλές `%c' προεπιλογές\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "εγγραφή στο  `%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "αδυναμία δημιουργίας της κλειδοθήκης `%s': %s\n"
@@ -8585,14 +8598,6 @@ msgstr "αδυναμία εγγραφής της κλειδοθήκης `%s': %s
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "σφάλμα κατά την ανάγνωση του `%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "πάρα πολλές `%c' προεπιλογές\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "σφάλμα στη αποστολή προς το `%s': %s\n"
index bf430e4..8626ebc 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -8399,6 +8399,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "eraro dum legado de '%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "tro da '%c'-preferoj\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "skribas al '%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "eraro dum kreado de ŝlosilaro '%s': %s\n"
@@ -8501,14 +8514,6 @@ msgstr "eraro dum skribado de ŝlosilaro '%s': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "eraro dum legado de '%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "tro da '%c'-preferoj\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "eraro dum sendo al '%s': %s\n"
index 9e62659..c0e05fb 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8166,6 +8166,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "error mientras se accedía '%s': http status %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "URL '%s' redirigida a '%s' (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "demasiadas redirecciones\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "escribiendo en '%s'\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "error al reservar memoria: %s\n"
 
@@ -8267,14 +8280,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "error al leer la respuesta HTTP para '%s': %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "URL '%s' redirigida a '%s' (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "demasiadas redirecciones\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "error al leer la respuesta OCSP para '%s': %s\n"
 
index 4a64887..8b12acc 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -8399,6 +8399,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "viga `%s' lugemisel: %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "liiga palju `%c' eelistusi\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "kirjutan faili `%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "viga võtmehoidla `%s' loomisel: %s\n"
@@ -8501,14 +8514,6 @@ msgstr "viga võtmehoidlasse `%s' kirjutamisel: %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "viga `%s' lugemisel: %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "liiga palju `%c' eelistusi\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "viga teate saatmisel serverile `%s': %s\n"
index 5fb814d..14b94c2 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -8461,6 +8461,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "virhe luettaessa tiedostoa \"%s\": %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "liian monta \"%c\" valintaa\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "kirjoitetaan kohteeseen \"%s\"\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "virhe luotaessa avainrengasta \"%s\": %s\n"
@@ -8563,14 +8576,6 @@ msgstr "virhe kirjoitettaessa avainrenkaaseen \"%s\": %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "virhe luettaessa tiedostoa \"%s\": %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "liian monta \"%c\" valintaa\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n"
index c2a3d10..a8e618f 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -8528,6 +8528,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "erreur d'accès à « %s » : état HTTP %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "URL « %s » redirigée vers « %s » (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "trop de redirections\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "écriture de « %s »\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "erreur d'allocation de mémoire : %s\n"
 
@@ -8629,14 +8642,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "erreur de lecture de réponse HTTP pour « %s » : %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "URL « %s » redirigée vers « %s » (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "trop de redirections\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "erreur d'analyse de réponse OCSP pour « %s » : %s\n"
 
index a8ac8ab..61942eb 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -8478,6 +8478,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "erro lendo `%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "demasiadas preferencias `%c'\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "escribindo a `%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "erro ao crea-lo chaveiro `%s': %s\n"
@@ -8580,14 +8593,6 @@ msgstr "erro escribindo no chaveiro `%s': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "erro lendo `%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "demasiadas preferencias `%c'\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "erro ao enviar a `%s': %s\n"
index c594a62..c45dac1 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -8429,6 +8429,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "Hiba \"%s\" olvasásakor: %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "Túl sok \"%c\" preferencia.\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "Írok a \"%s\" állományba.\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "Hiba a(z) \"%s\" kulcskarika létrehozásakor: %s\n"
@@ -8531,14 +8544,6 @@ msgstr "Hiba a \"%s\" kulcskarika írásakor: %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "Hiba \"%s\" olvasásakor: %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "Túl sok \"%c\" preferencia.\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "Hiba %s-ra/-re küldéskor: %s\n"
index c0d8069..00d416a 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -8422,6 +8422,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "kesalahan membaca `%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "terlalu banyak preferensi `%c'\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "menulis ke `%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "kesalahan menulis keyring `%s': %s\n"
@@ -8524,14 +8537,6 @@ msgstr "kesalahan menulis keyring `%s': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "kesalahan membaca `%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "terlalu banyak preferensi `%c'\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "kesalahan mengirim ke `%s': %s\n"
index 49a5784..42fdee3 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -8463,6 +8463,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "errore leggendo `%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "ci sono troppe preferenze `%c'\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "scrittura in `%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "errore creando il portachiavi `%s': %s\n"
@@ -8565,14 +8578,6 @@ msgstr "errore scrivendo il portachiavi `%s': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "errore leggendo `%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "ci sono troppe preferenze `%c'\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "errore leggendo `%s': %s\n"
index c891b23..cde684b 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -7943,6 +7943,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "'%s'へアクセスのエラー: httpステイタス %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "URL'%s' は '%s' (%u) へリダイレクトされました\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "リダイレクトが多すぎます\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "'%s'への書き込み\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "メモリの確保のエラー: %s\n"
 
@@ -8043,14 +8056,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "'%s'のHTTP応答の読み込みエラー: %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "URL'%s' は '%s' (%u) へリダイレクトされました\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "リダイレクトが多すぎます\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "'%s'に対するOCSP応答構文解析エラー: %s\n"
 
index b6a9698..159349f 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -8083,6 +8083,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "fikk ikke tilgang til «%s»: http-status %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "Videresendt fra adresse «%s» til «%s» (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "for mange videresendinger\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "skriver til «%s»\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "feil under minnetildeling: %s\n"
 
@@ -8183,14 +8196,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "feil under lesing av HTTP-svar for «%s»: %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "Videresendt fra adresse «%s» til «%s» (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "for mange videresendinger\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "feil under tolking av OCSP-svar for «%s»: %s\n"
 
index 52861fc..4b775d4 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -8773,6 +8773,20 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "błąd uruchamiania ,,%s'': kod wyjścia %d\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "too many cipher preferences\n"
+msgid "too many redirections\n"
+msgstr "zbyt wiele ustawień szyfru\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "zapis do ,,%s''\n"
+
 #, fuzzy, c-format
 #| msgid "error allocating enough memory: %s\n"
 msgid "error allocating memory: %s\n"
@@ -8889,15 +8903,6 @@ msgstr "błąd zapisu do ,,%s'': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "błąd odczytu z %s: %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "too many cipher preferences\n"
-msgid "too many redirections\n"
-msgstr "zbyt wiele ustawień szyfru\n"
-
 #, fuzzy, c-format
 #| msgid "error binding socket to `%s': %s\n"
 msgid "error parsing OCSP response for '%s': %s\n"
index 2e2e035..578649a 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -8423,6 +8423,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "erro na leitura de `%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "demasiadas preferências `%c'\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "a escrever para `%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "erro ao criar porta-chaves `%s': %s\n"
@@ -8525,14 +8538,6 @@ msgstr "erro na escrita do porta-chaves `%s': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "erro na leitura de `%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "demasiadas preferências `%c'\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "erro ao enviar para `%s': %s\n"
index f9510ba..0f5dced 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -8533,6 +8533,20 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "eroare la citire `%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "too many cipher preferences\n"
+msgid "too many redirections\n"
+msgstr "prea multe preferinţe de cifrare\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "scriu în `%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "eroare la crearea inelului de chei `%s': %s\n"
@@ -8637,15 +8651,6 @@ msgstr "eroare la scrierea inelului de chei `%s': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "eroare la citire `%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "too many cipher preferences\n"
-msgid "too many redirections\n"
-msgstr "prea multe preferinţe de cifrare\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "eroare trimitere la `%s': %s\n"
index a44b1ac..6972220 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -8197,6 +8197,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "ошибка чтения '%s': статус HTTP %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "URL '%s' перенаправлен на '%s' (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "слишком много перенаправлений\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "сохраняю в '%s'\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "ошибка выделения памяти: %s\n"
 
@@ -8297,14 +8310,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "ошибка чтения ответа HTTP для '%s': %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "URL '%s' перенаправлен на '%s' (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "слишком много перенаправлений\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "ошибка разбора ответа OCSP для '%s': %s\n"
 
index 36c4e67..c8a58fb 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -8453,6 +8453,19 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "chyba pri čítaní `%s': %s\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "too many redirections\n"
+msgstr "príliš veľa `%c' predvolieb\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "zapisujem do '%s'\n"
+
 #, fuzzy, c-format
 msgid "error allocating memory: %s\n"
 msgstr "chyba pri vytváraní súboru kľúčov (keyring)`%s': %s\n"
@@ -8555,14 +8568,6 @@ msgstr "chyba pri zápise súboru kľúčov (keyring)  `%s': %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "chyba pri čítaní `%s': %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "too many redirections\n"
-msgstr "príliš veľa `%c' predvolieb\n"
-
 #, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "chyba pri posielaní na `%s': %s\n"
index 5091570..b763b8d 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -8851,6 +8851,20 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "fel vid körning av \"%s\": avslutsstatus %d\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "too many cipher preferences\n"
+msgid "too many redirections\n"
+msgstr "för många chifferinställningar\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "skriver till \"%s\"\n"
+
 #, fuzzy, c-format
 #| msgid "error allocating enough memory: %s\n"
 msgid "error allocating memory: %s\n"
@@ -8967,15 +8981,6 @@ msgstr "fel vid skrivning till \"%s\": %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "fel vid läsning från %s: %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "too many cipher preferences\n"
-msgid "too many redirections\n"
-msgstr "för många chifferinställningar\n"
-
 #, fuzzy, c-format
 #| msgid "error binding socket to `%s': %s\n"
 msgid "error parsing OCSP response for '%s': %s\n"
index 6451e4e..8e76bf2 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -8750,6 +8750,20 @@ msgstr ""
 msgid "error accessing '%s': http status %u\n"
 msgstr "`%s' çalışırken hata: çıkış durumu: %d\n"
 
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "too many cipher preferences\n"
+msgid "too many redirections\n"
+msgstr "çok fazla şifreleme tercihi\n"
+
+#, fuzzy, c-format
+#| msgid "writing to `%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "\"%s\"e yazıyor\n"
+
 #, fuzzy, c-format
 #| msgid "error allocating enough memory: %s\n"
 msgid "error allocating memory: %s\n"
@@ -8866,15 +8880,6 @@ msgstr "`%s' yazılırken hata: %s\n"
 msgid "error reading HTTP response for '%s': %s\n"
 msgstr "%s okunurken hata: %s\n"
 
-#, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "too many cipher preferences\n"
-msgid "too many redirections\n"
-msgstr "çok fazla şifreleme tercihi\n"
-
 #, fuzzy, c-format
 #| msgid "error binding socket to `%s': %s\n"
 msgid "error parsing OCSP response for '%s': %s\n"
index fae0cd8..ea8270b 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -8326,6 +8326,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "помилка під час спроби доступу до «%s»: стан http %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "Адресу «%s» переспрямовано до «%s» (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "занадто багато переспрямувань\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "записуємо до «%s»\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "помилка під час спроби отримання області пам’яті: %s\n"
 
@@ -8426,14 +8439,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "помилка під час спроби читання відповіді за HTTP для «%s»: %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "Адресу «%s» переспрямовано до «%s» (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "занадто багато переспрямувань\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "помилка під час обробки відповіді за OCSP для «%s»: %s\n"
 
index 9ee42bb..ae0fdc4 100644 (file)
@@ -2,26 +2,26 @@
 # Copyright (C) 2006 Free Software Foundation, Inc.
 # This file is distributed under the same license as the PACKAGE package.
 # Meng Jie <zuxyhere@eastday.com>, 2004.
-#
+# Chuhao Li <lchopn@gmail.com>, 2018.
 msgid ""
 msgstr ""
-"Project-Id-Version: gnupg 1.4.4\n"
+"Project-Id-Version: GNU gnupg 2.3.0-beta485\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2009-07-09 10:03+0200\n"
-"Last-Translator: Meng Jie <zuxyhere@eastday.com>\n"
-"Language-Team: Chinese (simplified) <i18n-translation@lists.linux.net.cn>\n"
+"PO-Revision-Date: 2018-12-07 20:59+0800\n"
+"Last-Translator: Chuhao Li <lchopn@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Chinese\n"
-"X-Poedit-Country: CHINA\n"
 "X-Poedit-SourceCharset: iso-8859-1\n"
-"X-Poedit-Basepath: d:\\msys\\source\\gnupg-1.4.3\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.2\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to acquire the pinentry lock: %s\n"
-msgstr "无法存储指纹:%s\n"
+msgstr "获取 pinentry 锁失败: %s\n"
 
 #. TRANSLATORS: These are labels for buttons etc used in
 #. Pinentries.  An underscore indicates that the next letter
@@ -30,41 +30,36 @@ msgstr "无法存储指纹:%s\n"
 #. the second vertical bar.  Note that gpg-agent has been set to
 #. utf-8 so that the strings are in the expected encoding.
 msgid "|pinentry-label|_OK"
-msgstr ""
+msgstr "|pinentry-label|好"
 
 msgid "|pinentry-label|_Cancel"
-msgstr ""
+msgstr "|pinentry-label|取消"
 
 msgid "|pinentry-label|_Yes"
-msgstr ""
+msgstr "|pinentry-label|是"
 
 msgid "|pinentry-label|_No"
-msgstr ""
+msgstr "|pinentry-label|否"
 
 msgid "|pinentry-label|PIN:"
-msgstr ""
+msgstr "|pinentry-label|PIN:"
 
 msgid "|pinentry-label|_Save in password manager"
-msgstr ""
+msgstr "|pinentry-label|在密码管理器中保存"
 
-#, fuzzy
-#| msgid "Do you really want to delete the selected keys? (y/N) "
 msgid "Do you really want to make your passphrase visible on the screen?"
-msgstr "您真的想要删除选定的密钥吗?(y/N)"
+msgstr "您真的想要使您的密码在屏幕上可见吗?"
 
 msgid "|pinentry-tt|Make passphrase visible"
-msgstr ""
+msgstr "|pinentry-tt|使密码可见"
 
-#, fuzzy
-#| msgid "invalid passphrase"
 msgid "|pinentry-tt|Hide passphrase"
-msgstr "无效的密码"
+msgstr "|pinentry-tt|隐藏密码"
 
 #. TRANSLATORS: This string is displayed by Pinentry as the label
 #. for the quality bar.
-#, fuzzy
 msgid "Quality:"
-msgstr "有效性:%s"
+msgstr "强度:"
 
 #. TRANSLATORS: This string is a tooltip, shown by pinentry when
 #. hovering over the quality bar.  Please use an appropriate
@@ -73,28 +68,26 @@ msgstr "有效性:%s"
 #. translate this entry, a default english text (see source)
 #. will be used.
 msgid "pinentry.qualitybar.tooltip"
-msgstr ""
+msgstr "pinentry.qualitybar.tooltip"
 
 msgid ""
 "Please enter your PIN, so that the secret key can be unlocked for this "
 "session"
-msgstr ""
+msgstr "请输入您的 PIN,从而为此会话解锁私钥"
 
-#, fuzzy
 msgid ""
 "Please enter your passphrase, so that the secret key can be unlocked for "
 "this session"
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入您的密码,从而为此会话解锁私钥"
 
 msgid "PIN:"
-msgstr ""
+msgstr "PIN:"
 
-#, fuzzy
 msgid "Passphrase:"
-msgstr "错误的密码"
+msgstr "密码:"
 
 msgid "does not match - try again"
-msgstr ""
+msgstr "不匹配 - 请重试"
 
 #. TRANSLATORS: The string is appended to an error message in
 #. the pinentry.  The %s is the actual error message, the
@@ -104,230 +97,203 @@ msgid "SETERROR %s (try %d of %d)"
 msgstr ""
 
 msgid "Repeat:"
-msgstr ""
+msgstr "重复:"
 
-#, fuzzy
 msgid "PIN too long"
-msgstr "太长"
+msgstr "PIN 太长"
 
-#, fuzzy
 msgid "Passphrase too long"
-msgstr "å\88\97太长"
+msgstr "å¯\86ç \81太长"
 
-#, fuzzy
 msgid "Invalid characters in PIN"
-msgstr "姓名含有无效的字符\n"
+msgstr "PIN 中含有无效字符"
 
 msgid "PIN too short"
-msgstr ""
+msgstr "PIN 太短"
 
-#, fuzzy
 msgid "Bad PIN"
-msgstr "损坏的多精度整数(MPI)"
+msgstr "错误的 PIN"
 
-#, fuzzy
 msgid "Bad Passphrase"
 msgstr "错误的密码"
 
-#, fuzzy, c-format
+#, c-format
 msgid "ssh keys greater than %d bits are not supported\n"
-msgstr "不支持保护散列 %d\n"
+msgstr "长度超过 %d 位的 ssh 密钥不被支持\n"
 
-#, fuzzy, c-format
-#| msgid "can't create `%s': %s\n"
+#, c-format
 msgid "can't create '%s': %s\n"
-msgstr "æ\97 æ³\95建ç«\8bâ\80\98%sâ\80\99ï¼\9a%s\n"
+msgstr "æ\97 æ³\95å\88\9b建 â\80\98%sâ\80\99ï¼\9a %s\n"
 
-#, fuzzy, c-format
-#| msgid "can't open `%s': %s\n"
+#, c-format
 msgid "can't open '%s': %s\n"
-msgstr "无法打开‘%s’: %s\n"
+msgstr "无法打开 ‘%s’: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting serial number of card: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取卡的序列号时出现错误: %s\n"
 
 #, c-format
 msgid "detected card with S/N: %s\n"
-msgstr ""
+msgstr "检测到卡具有的 S/N: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no authentication key for ssh on card: %s\n"
-msgstr "å\8f\96å¾\97å½\93å\89\8då¯\86é\92¥ä¿¡æ\81¯æ\97¶å\87ºé\94\99:%s\n"
+msgstr "å\8d¡ç\89\87ä¸\8a没æ\9c\89 ssh èº«ä»½éª\8cè¯\81ç\94¨ç\9a\84å¯\86é\92¥:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no suitable card key found: %s\n"
-msgstr "æ\89¾ä¸\8då\88°å\8f¯å\86\99ç\9a\84ç§\81é\92¥é\92¥å\8c\99ç\8e¯:%s\n"
+msgstr "没æ\9c\89æ\89¾å\88°å\90\88é\80\82ç\9a\84å\8d¡ç\89\87å¯\86é\92¥:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting list of cards: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取卡片列表时出现错误:%s\n"
 
 #, c-format
 msgid ""
 "An ssh process requested the use of key%%0A  %s%%0A  (%s)%%0ADo you want to "
 "allow this?"
-msgstr ""
+msgstr "一个 ssh 进程请求使用密钥%%0A  %s%%0A  (%s)%%0A您想要允许这一请求吗?"
 
 msgid "Allow"
-msgstr ""
+msgstr "允许"
 
 msgid "Deny"
-msgstr ""
+msgstr "拒绝"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Please enter the passphrase for the ssh key%%0A  %F%%0A  (%c)"
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入 ssh 密钥 %%0A  %F%%0A  (%c)  的密码"
 
-#, fuzzy
 msgid "Please re-enter this passphrase"
-msgstr "更改密码"
+msgstr "请重新输入此密码"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Please enter a passphrase to protect the received secret key%%0A   %s%%0A   "
 "%s%%0Awithin gpg-agent's key storage"
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr ""
+"请输入一个密码,以便于在 gpg-agent 的密钥存储中保护接收到的私钥 %%0A   %s"
+"%%0A   %s%%0A"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to create stream from socket: %s\n"
-msgstr "%s:建立散列表失败:%s\n"
+msgstr "从以下套接字创建流时失败: %s\n"
 
-#, fuzzy
 msgid "Please insert the card with serial number"
-msgstr ""
-"请取出当前的卡,并插入有下列序列号的卡:\n"
-"  %.*s\n"
+msgstr "请插入具有以下序列号的卡"
 
-#, fuzzy
 msgid "Please remove the current card and insert the one with serial number"
-msgstr ""
-"请取出当前的卡,并插入有下列序列号的卡:\n"
-"  %.*s\n"
+msgstr "请移除当前的卡并插入具有以下序列号的那一张"
 
-#, fuzzy
 msgid "Admin PIN"
-msgstr "|A|管理员 PIN"
+msgstr "管理员 PIN"
 
 #. TRANSLATORS: A PUK is the Personal Unblocking Code
 #. used to unblock a PIN.
 msgid "PUK"
-msgstr ""
+msgstr "PUK"
 
 msgid "Reset Code"
-msgstr ""
+msgstr "重置代码"
 
-#, c-format
+#, fuzzy, c-format
+#| msgid "Use the reader's pinpad for input."
 msgid "%s%%0A%%0AUse the reader's pinpad for input."
-msgstr ""
+msgstr "使用读卡器的小键盘输入。"
 
-#, fuzzy
 msgid "Repeat this Reset Code"
-msgstr "再次输入此 PIN:"
+msgstr "重复此重置代码"
 
-#, fuzzy
 msgid "Repeat this PUK"
-msgstr "再次输入此 PIN:"
+msgstr "重复此 PUK"
 
-#, fuzzy
 msgid "Repeat this PIN"
-msgstr "再次输入此 PIN"
+msgstr "再次输入此 PIN"
 
-#, fuzzy
 msgid "Reset Code not correctly repeated; try again"
-msgstr "PIN 再次输入时与首次输入不符;请再试一次"
+msgstr "重置代码再次输入时与首次输入不符;请重试"
 
-#, fuzzy
 msgid "PUK not correctly repeated; try again"
-msgstr "PIN 再次输入时与首次输入不符;请再试一次"
+msgstr "PUK 再次输入时与首次输入不符;请重试"
 
 msgid "PIN not correctly repeated; try again"
-msgstr "PIN 再次输入时与首次输入不符;请再试一次"
+msgstr "PIN 再次输入时与首次输入不符;请重试"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Please enter the PIN%s%s%s to unlock the card"
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "请输入 PIN%s%s%s 以解锁这张卡"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating temporary file: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "创建临时文件时出现错误: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error writing to temporary file: %s\n"
-msgstr "%s:写入目录记录时出错:%s\n"
+msgstr "写入临时文件时出现错误: %s\n"
 
-#, fuzzy
 msgid "Enter new passphrase"
-msgstr "请è¾\93å\85¥å¯\86ç \81\n"
+msgstr "è¾\93å\85¥æ\96°ç\9a\84å¯\86ç \81"
 
-#, fuzzy
 msgid "Take this one anyway"
-msgstr "无论如何还是使用这把密钥吗?(y/N)"
+msgstr "无论如何使用这个"
 
 #, c-format
 msgid ""
 "You have not entered a passphrase!%0AAn empty passphrase is not allowed."
-msgstr ""
+msgstr "您并没有输入一个密码!%0A不允许密码留空。"
 
 #, c-format
 msgid ""
 "You have not entered a passphrase - this is in general a bad idea!%0APlease "
 "confirm that you do not want to have any protection on your key."
 msgstr ""
+"您并没有输入一个密码 - 这通常不是一个好主意!%0A请确认您不想给您的密钥加上任"
+"何的保护。"
 
 msgid "Yes, protection is not needed"
-msgstr ""
+msgstr "是的,保护不是必须的"
 
-#, fuzzy, c-format
-#| msgid "Name must be at least 5 characters long\n"
+#, c-format
 msgid "A passphrase should be at least %u character long."
 msgid_plural "A passphrase should be at least %u characters long."
-msgstr[0] "姓名至少要有五个字符长\n"
-msgstr[1] "姓名至少要有五个字符长\n"
+msgstr[0] "密码长度应至少为 %u 字符。"
 
 #, c-format
 msgid "A passphrase should contain at least %u digit or%%0Aspecial character."
 msgid_plural ""
 "A passphrase should contain at least %u digits or%%0Aspecial characters."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "密码应当包括至少 %u 位或者%%0A特殊字符。"
 
 #, c-format
 msgid "A passphrase may not be a known term or match%%0Acertain pattern."
-msgstr ""
+msgstr "密码不应该是一个已知的用语或者与%%0A特定的模式相匹配。"
 
 msgid "Warning: You have entered an insecure passphrase."
-msgstr ""
+msgstr "警告:您输入了一个不安全的密码。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Please enter the passphrase to%0Aprotect your new key"
-msgstr ""
-"您需要一个密码来保护您的私钥。\n"
-"\n"
+msgstr "请输入密码以%0A保护您的新密钥"
 
-#, fuzzy
 msgid "Please enter the new passphrase"
-msgstr "更改密码"
+msgstr "请输入新的密码"
 
-#, fuzzy
 msgid ""
 "@Options:\n"
 " "
 msgstr ""
-"@\n"
-"选项:\n"
+"@选项:\n"
 " "
 
 msgid "run in daemon mode (background)"
-msgstr ""
+msgstr "以守护进程模式运行 (后台)"
 
 msgid "run in server mode (foreground)"
-msgstr ""
+msgstr "以服务进程模式运行 (前台)"
 
-#, fuzzy
-#| msgid "Key is superseded"
 msgid "run in supervised mode"
-msgstr "密钥被替换"
+msgstr "以管理进程模式运行"
 
 msgid "verbose"
 msgstr "详细模式"
@@ -336,77 +302,67 @@ msgid "be somewhat more quiet"
 msgstr "尽量减少提示信息"
 
 msgid "sh-style command output"
-msgstr ""
+msgstr "sh 风格的命令行输出"
 
 msgid "csh-style command output"
-msgstr ""
+msgstr "csh 风格的命令行输出"
 
-#, fuzzy
 msgid "|FILE|read options from FILE"
-msgstr "从‘%s’读取选项\n"
+msgstr "|FILE|从 FILE 中读取选项"
 
 msgid "do not detach from the console"
-msgstr ""
+msgstr "未能从控制台分离"
 
-#, fuzzy
 msgid "use a log file for the server"
-msgstr "在公钥服务器上搜寻密钥"
+msgstr "为服务器使用日志文件"
 
 msgid "|PGM|use PGM as the PIN-Entry program"
-msgstr ""
+msgstr "|PGM|使用 PGM 作为 PIN-Entry 程序"
 
 msgid "|PGM|use PGM as the SCdaemon program"
-msgstr ""
+msgstr "|PGM|使用 PGM 作为 SCdaemon 程序"
 
-#, fuzzy
 msgid "do not use the SCdaemon"
-msgstr "导入后不更新信任度数据库"
+msgstr "不使用 SCdaemon"
 
-#, fuzzy
 msgid "|NAME|accept some commands via NAME"
-msgstr "|某甲|为收件者“某甲”加密"
+msgstr "|NAME|通过 NAME 接收一些命令"
 
 msgid "ignore requests to change the TTY"
-msgstr ""
+msgstr "忽略改变 TTY 的请求"
 
 msgid "ignore requests to change the X display"
-msgstr ""
+msgstr "忽略改变 X display 的请求"
 
 msgid "|N|expire cached PINs after N seconds"
-msgstr ""
+msgstr "|N|使被缓存的 PIN 在 N 秒后过期"
 
 msgid "do not use the PIN cache when signing"
-msgstr ""
+msgstr "在签名时不使用 PIN 缓存"
 
-#, fuzzy
 msgid "disallow the use of an external password cache"
-msgstr "ç\94\9fæ\88\90å¯\86ç \81ç\9a\84æ\97¶å\80\99å\8f\91ç\94\9fé\94\99误ï¼\9a%s\n"
+msgstr "ç¦\81止使ç\94¨ä¸\80个å¤\96é\83¨ç\9a\84å¯\86ç \81ç¼\93å­\98"
 
 msgid "disallow clients to mark keys as \"trusted\""
-msgstr ""
+msgstr "禁止客户端将一个密钥标记为“信任”"
 
-#, fuzzy
 msgid "allow presetting passphrase"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "允许预设置的密码"
 
 msgid "disallow caller to override the pinentry"
-msgstr ""
+msgstr "禁止调用者覆盖 pinentry"
 
 msgid "allow passphrase to be prompted through Emacs"
-msgstr ""
+msgstr "运行密码通过 Emacs 回显"
 
-#, fuzzy
-#| msgid "not supported"
 msgid "enable ssh support"
-msgstr "未被支持"
+msgstr "启用 ssh 支持"
 
 msgid "|ALGO|use ALGO to show ssh fingerprints"
-msgstr ""
+msgstr "|ALGO|使用 ALGO 显示 ssh 指纹"
 
-#, fuzzy
-#| msgid "not supported"
 msgid "enable putty support"
-msgstr "未被支持"
+msgstr "启用 putty 支持"
 
 #. TRANSLATORS: @EMAIL@ will get replaced by the actual bug
 #. reporting address.  This is so that we can change the
@@ -414,137 +370,133 @@ msgstr "未被支持"
 msgid "Please report bugs to <@EMAIL@>.\n"
 msgstr ""
 "请向 <@EMAIL@> 报告程序缺陷。\n"
-"请向 <zuxyhere@eastday.com> 反映简体中文翻译的问题。\n"
+"请向 <i18n-zh@googlegroups.com> 邮件列表反映简体中文的翻译问题或建议。\n"
 
-#, fuzzy
 msgid "Usage: @GPG_AGENT@ [options] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法: @GPG_AGENT@ [选项] (-h 获取帮助)"
 
 msgid ""
 "Syntax: @GPG_AGENT@ [options] [command [args]]\n"
 "Secret key management for @GNUPG@\n"
 msgstr ""
+"语法: @GPG_AGENT@ [options] [command [args]]\n"
+"@GNUPG@ 私钥管理器\n"
 
 #, c-format
 msgid "invalid debug-level '%s' given\n"
-msgstr ""
+msgstr "无效的调试级别‘%s’\n"
 
 #, c-format
 msgid "selected digest algorithm is invalid\n"
 msgstr "所选的散列算法无效\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: no default option file `%s'\n"
+#, c-format
 msgid "Note: no default option file '%s'\n"
 msgstr "注意:没有默认配置文件‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "option file `%s': %s\n"
+#, c-format
 msgid "option file '%s': %s\n"
-msgstr "é\85\8dç½®文件‘%s’:%s\n"
+msgstr "é\80\89项文件‘%s’:%s\n"
 
-#, fuzzy, c-format
-#| msgid "reading options from `%s'\n"
+#, c-format
 msgid "reading options from '%s'\n"
 msgstr "从‘%s’读取选项\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: \"%s\" is a deprecated option\n"
+#, c-format
 msgid "Note: '%s' is not considered an option\n"
-msgstr "警告:“%s”选项已不建议使用\n"
+msgstr "注意:‘%s’不被认为是一个选项\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't create socket: %s\n"
-msgstr "æ\97 æ³\95建ç«\8bâ\80\98%sâ\80\99ï¼\9a%s\n"
+msgstr "æ\97 æ³\95å\88\9b建å¥\97æ\8e¥å­\97ï¼\9a %s\n"
 
 #, c-format
 msgid "socket name '%s' is too long\n"
-msgstr ""
+msgstr "套接字名称‘%s’太长\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "a gpg-agent is already running - not starting a new one\n"
-msgstr "gpg-agent 在此次舍话中无法使用\n"
+msgstr "一个 gpg-agent 实例正在运行 - 不启动新的实例\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting nonce for the socket\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取套接字 nonce 时出现错误\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error binding socket to '%s': %s\n"
-msgstr "在‘%s’中寻找信任度记录时出错:%s\n"
+msgstr "绑定套接字到 '%s' 时出现错误: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't set permissions of '%s': %s\n"
-msgstr "警告:扩展模块‘%s’权限不安全\n"
+msgstr "无法设置‘%s’的权限: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "listening on socket '%s'\n"
-msgstr "正在将私钥写至`%s'\n"
+msgstr "正在监听套接字‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "can't create directory `%s': %s\n"
+#, c-format
 msgid "can't create directory '%s': %s\n"
-msgstr "æ\97 æ³\95建ç«\8b目录‘%s’:%s\n"
+msgstr "æ\97 æ³\95å\88\9b建目录‘%s’:%s\n"
 
-#, fuzzy, c-format
-#| msgid "directory `%s' created\n"
+#, c-format
 msgid "directory '%s' created\n"
-msgstr "已创建目录‘%s’\n"
+msgstr "目录‘%s’已创建\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "stat() failed for '%s': %s\n"
-msgstr "fstat(%d) 在 %s 中出错:%s\n"
+msgstr "‘%s’的 stat() 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't use '%s' as home directory\n"
-msgstr "无法建立目录‘%s’:%s\n"
+msgstr "无法使用‘%s’作为家目录\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading nonce on fd %d: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "在读取 fd %d 上的 nonce 时出现错误: %s\n"
 
 #, c-format
 msgid "handler 0x%lx for fd %d started\n"
-msgstr ""
+msgstr "句柄 0x%lx 于文件描述符 %d 启动\n"
 
 #, c-format
 msgid "handler 0x%lx for fd %d terminated\n"
-msgstr ""
+msgstr "句柄 0x%lx 于文件描述符 %d 终止\n"
 
 #, c-format
 msgid "ssh handler 0x%lx for fd %d started\n"
-msgstr ""
+msgstr "ssh 句柄 0x%lx 于文件描述符 %d 启动\n"
 
 #, c-format
 msgid "ssh handler 0x%lx for fd %d terminated\n"
-msgstr ""
+msgstr "ssh 句柄 0x%lx 于文件描述符 %d 终止\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "npth_pselect failed: %s - waiting 1s\n"
-msgstr "更新私钥失败:%s\n"
+msgstr "npth_pselect 方法失败:%s - 等待 1s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s %s stopped\n"
-msgstr "%s:已跳过:%s\n"
+msgstr "%s %s 已停止\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no gpg-agent running in this session\n"
-msgstr "gpg-agent 在此次舍话中无法使用\n"
+msgstr "此会话中没有 gpg-agent 实例运行\n"
 
-#, fuzzy
 msgid "Usage: gpg-preset-passphrase [options] KEYGRIP (-h for help)\n"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法: gpg-preset-passphrase [选项] KEYGRIP (-h 获取帮助)\n"
 
 msgid ""
 "Syntax: gpg-preset-passphrase [options] KEYGRIP\n"
 "Password cache maintenance\n"
 msgstr ""
+"语法: gpg-preset-passphrase [options] KEYGRIP\n"
+"密码缓存管理\n"
 
 msgid ""
 "@Commands:\n"
 " "
 msgstr ""
-"@令:\n"
+"@令:\n"
 " "
 
 msgid ""
@@ -556,73 +508,73 @@ msgstr ""
 "选项:\n"
 " "
 
-#, fuzzy
 msgid "Usage: gpg-protect-tool [options] (-h for help)\n"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法: gpg-protect-tool [选项] (-h 获取帮助)\n"
 
 msgid ""
 "Syntax: gpg-protect-tool [options] [args]\n"
 "Secret key maintenance tool\n"
 msgstr ""
+"语法:gpg-protect-tool [options] [args]\n"
+"私钥管理工具\n"
 
-#, fuzzy
 msgid "Please enter the passphrase to unprotect the PKCS#12 object."
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入密码以解密 PKCS#12 对象。"
 
-#, fuzzy
 msgid "Please enter the passphrase to protect the new PKCS#12 object."
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入密码以保护新的 PKCS#12 对象。"
 
 msgid ""
 "Please enter the passphrase to protect the imported object within the GnuPG "
 "system."
-msgstr ""
+msgstr "请输入密码以在 GnuPG 系统内部保护已导入的对象。"
 
-#, fuzzy
 msgid ""
 "Please enter the passphrase or the PIN\n"
 "needed to complete this operation."
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr ""
+"请输入所需的密码或者 PIN\n"
+"以完成这一操作。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "cancelled\n"
-msgstr "已取消"
+msgstr "已取消\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error while asking for the passphrase: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "请求密码时出现错误: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error opening '%s': %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "打开‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "file '%s', line %d: %s\n"
-msgstr "配置文件‘%s’:%s\n"
+msgstr "文件‘%s’ 的第 %d 行:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "statement \"%s\" ignored in '%s', line %d\n"
-msgstr "读取‘%s’错误:%s\n"
+msgstr "已忽略声明 “%s” ,其位于‘%s’的第 %d 行\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "system trustlist '%s' not available\n"
-msgstr "ç§\81é\92¥é\83¨å\88\86不可用\n"
+msgstr "ç³»ç»\9fä¿¡ä»»å\88\97表 â\80\98%sâ\80\99 不可用\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "bad fingerprint in '%s', line %d\n"
-msgstr "读取‘%s’错误:%s\n"
+msgstr "错误的指纹,其位于 ‘%s’ 的第 %d 行\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid keyflag in '%s', line %d\n"
-msgstr "错误:指纹格式无效。\n"
+msgstr "无效的密钥标记,其位于 ‘%s’ 的第 %d 行\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading '%s', line %d: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取 ‘%s’ 的第 %d 行时出现错误:%s\n"
 
 #, c-format
 msgid "error reading list of trusted root certificates\n"
-msgstr ""
+msgstr "读取受信任的根证书列表时出现错误\n"
 
 #. TRANSLATORS: This prompt is shown by the Pinentry
 #. and has one special property: A "%%0A" is used by
@@ -636,14 +588,13 @@ msgstr ""
 msgid ""
 "Do you ultimately trust%%0A  \"%s\"%%0Ato correctly certify user "
 "certificates?"
-msgstr ""
+msgstr "您要无限地信任%%0A  “%s”%%0A为正确的认证用户证书吗?"
 
-#, fuzzy
 msgid "Yes"
-msgstr "yes"
+msgstr ""
 
 msgid "No"
-msgstr ""
+msgstr ""
 
 #. TRANSLATORS: This prompt is shown by the Pinentry and has
 #. one special property: A "%%0A" is used by Pinentry to
@@ -657,62 +608,61 @@ msgstr ""
 msgid ""
 "Please verify that the certificate identified as:%%0A  \"%s\"%%0Ahas the "
 "fingerprint:%%0A  %s"
-msgstr ""
+msgstr "请确认被识别为%%0A “%s”%%0A的证书具有以下的指纹:%%0A  %s"
 
 #. TRANSLATORS: "Correct" is the label of a button and intended
 #. to be hit if the fingerprint matches the one of the CA.  The
 #. other button is "the default "Cancel" of the Pinentry.
 msgid "Correct"
-msgstr ""
+msgstr "正确"
 
 msgid "Wrong"
-msgstr ""
+msgstr "错误"
 
 #, c-format
 msgid "Note: This passphrase has never been changed.%0APlease change it now."
-msgstr ""
+msgstr "注意:此密码从未被修改过。%0A请立即修改。"
 
 #, c-format
 msgid ""
 "This passphrase has not been changed%%0Asince %.4s-%.2s-%.2s.  Please change "
 "it now."
-msgstr ""
+msgstr "此密码自从 %.4s-%.2s-%.2s 起未被修改过。%%0A请立即修改。"
 
-#, fuzzy
 msgid "Change passphrase"
 msgstr "更改密码"
 
 msgid "I'll change it later"
-msgstr ""
+msgstr "我要稍后修改"
 
-#, fuzzy, c-format
-#| msgid "Do you really want to delete the selected keys? (y/N) "
+#, c-format
 msgid ""
 "Do you really want to delete the key identified by keygrip%%0A  %s%%0A  %%C"
 "%%0A?"
-msgstr "您真的想要删除选定的密钥吗?(y/N)"
+msgstr ""
+"您真的想要删除这个被以下的 keygrip 所标识的密钥吗 %%0A  %s%%0A  %%C%%0A?"
 
-#, fuzzy
-#| msgid "enable key"
 msgid "Delete key"
-msgstr "å\90¯ç\94¨密钥"
+msgstr "å\88 é\99¤密钥"
 
 msgid ""
 "Warning: This key is also listed for use with SSH!\n"
 "Deleting the key might remove your ability to access remote machines."
 msgstr ""
+"警告:这个密钥也被列为用于 SSH!\n"
+"删除这个密钥可能使您失去访问远程主机的能力。"
 
 #, c-format
 msgid "DSA requires the hash length to be a multiple of 8 bits\n"
-msgstr "DSA 需要散列值长度为 8 位的倍数\n"
+msgstr "DSA 要求散列值长度为 8 位的倍数\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s key uses an unsafe (%u bit) hash\n"
-msgstr "DSA 密钥 %s 使用不安全的(%u 位)的散列\n"
+msgstr "%s 密钥使用了一个不安全的(%u 位)散列\n"
 
 #, c-format
 msgid "a %zu bit hash is not valid for a %u bit %s key\n"
-msgstr ""
+msgstr "%zu 位的散列对于一个 %u 位的 %s 密钥无效\n"
 
 #, c-format
 msgid "checking created signature failed: %s\n"
@@ -722,86 +672,81 @@ msgstr "检查已建立的签名时发生错误: %s\n"
 msgid "secret key parts are not available\n"
 msgstr "私钥部分不可用\n"
 
-#, fuzzy, c-format
-#| msgid "protection algorithm %d%s is not supported\n"
+#, c-format
 msgid "public key algorithm %d (%s) is not supported\n"
-msgstr "保护算法 %d%s 未被支持\n"
+msgstr "公钥算法 %d (%s) 不被支持\n"
 
-#, fuzzy, c-format
-#| msgid "protection algorithm %d%s is not supported\n"
+#, c-format
 msgid "protection algorithm %d (%s) is not supported\n"
-msgstr "保护算法 %d%s 未被支持\n"
+msgstr "保护算法 %d (%s) 不被支持\n"
 
-#, fuzzy, c-format
-#| msgid "protection algorithm %d%s is not supported\n"
+#, c-format
 msgid "protection hash algorithm %d (%s) is not supported\n"
-msgstr "保护算法 %d%s 未被支持\n"
+msgstr "保护散列算法 %d (%s) 不被支持\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating a pipe: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "创建管道时发生错误: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating a stream for a pipe: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "为管道创建流时出现错误: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error forking process: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "在 fork 进程时出现错误: %s\n"
 
 #, c-format
 msgid "waiting for process %d to terminate failed: %s\n"
-msgstr ""
+msgstr "等待进程 %d 终止时失败: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error running '%s': probably not installed\n"
-msgstr "读å\8f\96â\80\98%sâ\80\99æ\97¶å\87ºé\94\99ï¼\9a%s\n"
+msgstr "è¿\90è¡\8câ\80\98%sâ\80\99æ\97¶å\87ºç\8e°é\94\99误ï¼\9aå\8f¯è\83½æ\9cªå®\89è£\85\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error running '%s': exit status %d\n"
-msgstr "读å\8f\96â\80\98%sâ\80\99æ\97¶å\87ºé\94\99ï¼\9a%s\n"
+msgstr "è¿\90è¡\8câ\80\98%sâ\80\99æ\97¶å\87ºç\8e°é\94\99误ï¼\9aé\80\80å\87ºä»£ç \81 %d\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error running '%s': terminated\n"
-msgstr "读å\8f\96â\80\98%sâ\80\99æ\97¶å\87ºé\94\99ï¼\9a%s\n"
+msgstr "è¿\90è¡\8câ\80\98%sâ\80\99æ\97¶å\87ºç\8e°é\94\99误ï¼\9a被ç»\88æ­¢\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "waiting for processes to terminate failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "等待进程终止时失败: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting exit code of process %d: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "获取进程 %d 的退出代码时出现错误: %s\n"
 
-#, fuzzy, c-format
-#| msgid "can't connect to `%s': %s\n"
+#, c-format
 msgid "can't connect to '%s': %s\n"
 msgstr "无法连接至‘%s’:%s\n"
 
 #, c-format
 msgid "problem setting the gpg-agent options\n"
-msgstr ""
+msgstr "gpg-agent 的选项设置存在问题\n"
 
 #, c-format
 msgid "can't disable core dumps: %s\n"
 msgstr "无法禁用核心内存转储:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Warning: unsafe ownership on %s \"%s\"\n"
-msgstr "警告:扩展模块‘%s’所有权不安全\n"
+msgstr "警告: %s 具有不安全的文件所有权 “%s”\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Warning: unsafe permissions on %s \"%s\"\n"
-msgstr "警告:扩展模块‘%s’权限不安全\n"
+msgstr "警告:%s 具有不安全的文件权限位 “%s”\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "waiting for file '%s' to become accessible ...\n"
-msgstr "更新失败:%s\n"
+msgstr "等待 ‘%s’ 可被访问...\n"
 
-#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
+#, c-format
 msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "将 ‘%s’ 重命名为 ‘%s’ 时失败:%s\n"
 
 #. TRANSLATORS: See doc/TRANSLATE about this string.
 msgid "yes"
@@ -846,373 +791,338 @@ msgstr ""
 msgid "out of core while allocating %lu bytes"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "error allocating enough memory: %s\n"
-msgstr "建ç«\8bé\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99æ\97¶å\8f\91ç\94\9fé\94\99误ï¼\9a%s\n"
+msgstr "å\9c¨å\88\86é\85\8d足å¤\9fç\9a\84å\86\85å­\98æ\97¶å\87ºç\8e°é\94\99误ï¼\9a %s\n"
 
 #, c-format
 msgid "%s:%u: obsolete option \"%s\" - it has no effect\n"
-msgstr ""
+msgstr "%s:%u: 废弃的选项 \"%s\" - 此选项不会产生作用\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n"
-msgstr "警告:“%s”选项已不建议使用\n"
+msgstr "警告: “%s%s” 是一个废弃的选项 - 此选项不会产生作用\n"
 
 #, c-format
 msgid "unknown debug flag '%s' ignored\n"
-msgstr ""
+msgstr "未知的调试选项 ‘%s’ 已被忽略\n"
 
 #, fuzzy, c-format
+#| msgid "waiting for the agent to come up ... (%ds)\n"
 msgid "waiting for the %s to come up ... (%ds)\n"
-msgstr "更新失败:%s\n"
+msgstr "等待代理人程序启动 ... (%ds)\n"
 
 #, fuzzy, c-format
-#| msgid "can't do this in batch mode\n"
+#| msgid "connection to the agent established\n"
 msgid "connection to %s established\n"
-msgstr "å\9c¨æ\89¹å¤\84ç\90\86模å¼\8f中æ\97 æ³\95å®\8cæ\88\90æ­¤æ\93\8dä½\9c\n"
+msgstr "å\88°ä»£ç\90\86人ç¨\8båº\8fç\9a\84è¿\9eæ\8e¥å·²å»ºç«\8b\n"
 
 #, c-format
 msgid "no running gpg-agent - starting '%s'\n"
-msgstr ""
+msgstr "没有正在运行的 gpg-agent 实例 - 正在启动 ‘%s’\n"
 
 #, fuzzy, c-format
-#| msgid "can't do this in batch mode\n"
+#| msgid "connection to the agent is in restricted mode\n"
 msgid "connection to agent is in restricted mode\n"
-msgstr "在批处理模式中无法完成此操作\n"
+msgstr "与代理人程序的连接处于限制模式\n"
 
-#, c-format
+#, fuzzy, c-format
+#| msgid "no running dirmngr - starting '%s'\n"
 msgid "no running Dirmngr - starting '%s'\n"
-msgstr ""
+msgstr "没有正在运行的 dirmngr 实例 - 正在启动‘%s’\n"
 
 #. TRANSLATORS: Copy the prefix between the vertical bars
 #. verbatim.  It will not be printed.
 msgid "|audit-log-result|Good"
-msgstr ""
+msgstr "|audit-log-result|好"
 
 msgid "|audit-log-result|Bad"
-msgstr ""
+msgstr "|audit-log-result|坏"
 
 msgid "|audit-log-result|Not supported"
-msgstr ""
+msgstr "|audit-log-result|不被支持"
 
-#, fuzzy
 msgid "|audit-log-result|No certificate"
-msgstr "证书已损坏"
+msgstr "|audit-log-result|无证书"
 
-#, fuzzy
 msgid "|audit-log-result|Not enabled"
-msgstr "证书已损坏"
+msgstr "|audit-log-result|未启用"
 
 msgid "|audit-log-result|Error"
-msgstr ""
+msgstr "|audit-log-result|错误"
 
-#, fuzzy
 msgid "|audit-log-result|Not used"
-msgstr "证书已损坏"
+msgstr "|audit-log-result|未被使用"
 
-#, fuzzy
 msgid "|audit-log-result|Okay"
-msgstr "证书已损坏"
+msgstr "|audit-log-result|Okay"
 
-#, fuzzy
 msgid "|audit-log-result|Skipped"
-msgstr "证书已损坏"
+msgstr "|audit-log-result|已跳过"
 
-#, fuzzy
 msgid "|audit-log-result|Some"
-msgstr "证书已损坏"
+msgstr "|audit-log-result|一些"
 
-#, fuzzy
 msgid "Certificate chain available"
-msgstr "证书已损坏"
+msgstr "证书链可用"
 
-#, fuzzy
 msgid "root certificate missing"
-msgstr "证书已损坏"
+msgstr "根证书丢失"
 
 msgid "Data encryption succeeded"
-msgstr ""
+msgstr "数据加密成功"
 
-#, fuzzy
 msgid "Data available"
-msgstr "列出所有可用数据"
+msgstr "数据可用"
 
-#, fuzzy
 msgid "Session key created"
-msgstr "%s:钥匙环已建立\n"
+msgstr "会话密钥已经创建"
 
-#, fuzzy, c-format
+#, c-format
 msgid "algorithm: %s"
-msgstr "有效性:%s"
+msgstr "算法: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "unsupported algorithm: %s"
-msgstr ""
-"\n"
-"支持的算法:\n"
+msgstr "不支持的算法:%s"
 
-#, fuzzy
 msgid "seems to be not encrypted"
-msgstr "被加密"
+msgstr "看起来并没有被加密"
 
-#, fuzzy
 msgid "Number of recipients"
-msgstr "当前收件人:\n"
+msgstr "接收者数目"
 
 #, c-format
 msgid "Recipient %d"
-msgstr ""
+msgstr "接收者 %d"
 
 msgid "Data signing succeeded"
-msgstr ""
+msgstr "数据签名成功"
 
-#, fuzzy, c-format
+#, c-format
 msgid "data hash algorithm: %s"
-msgstr "æ\97 æ\95\88ç\9a\84â\80\98%sâ\80\99æ\95£å\88\97ç®\97æ³\95\n"
+msgstr "æ\95°æ\8d®æ\95£å\88\97ç®\97æ³\95ï¼\9a%s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Signer %d"
-msgstr "签名建立于 %s\n"
+msgstr "签名者 %d"
 
-#, fuzzy, c-format
+#, c-format
 msgid "attr hash algorithm: %s"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "属性散列算法: %s"
 
 msgid "Data decryption succeeded"
-msgstr ""
+msgstr "数据解密成功"
 
-#, fuzzy
 msgid "Encryption algorithm supported"
-msgstr "保护算法 %d%s 未被支持\n"
+msgstr "加密算法受到支持"
 
-#, fuzzy
 msgid "Data verification succeeded"
-msgstr "签名验证已被抑制\n"
+msgstr "数据验证成功"
 
-#, fuzzy
 msgid "Signature available"
-msgstr "ç­¾å\90\8d建ç«\8bäº\8e %s\n"
+msgstr "ç­¾å\90\8då\8f¯ç\94¨"
 
-#, fuzzy
 msgid "Parsing data succeeded"
-msgstr "æ\9cªæ\89¾å\88°ç­¾å\90\8d\n"
+msgstr "æ\95°æ\8d®è§£æ\9e\90æ\88\90å\8a\9f"
 
-#, fuzzy, c-format
+#, c-format
 msgid "bad data hash algorithm: %s"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "无效的数据散列算法: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Signature %d"
-msgstr "签名建立于 %s\n"
+msgstr "签名 %d"
 
-#, fuzzy
 msgid "Certificate chain valid"
-msgstr "è¿\99æ\8a\8aå¯\86é\92¥å·²ç»\8fè¿\87æ\9c\9fï¼\81"
+msgstr "è¯\81书é\93¾æ\9d¡æ\9c\89æ\95\88"
 
-#, fuzzy
 msgid "Root certificate trustworthy"
-msgstr "证书已损坏"
+msgstr "根证书可靠"
 
-#, fuzzy
 msgid "no CRL found for certificate"
-msgstr "证书已损坏"
+msgstr "未找到该证书的证书吊销列表(CRL)"
 
-#, fuzzy
 msgid "the available CRL is too old"
-msgstr "可用的密钥在:"
+msgstr "可用的证书吊销列表(CRL)太旧"
 
-#, fuzzy
 msgid "CRL/OCSP check of certificates"
-msgstr "证书已损坏"
+msgstr "针对证书的 CRL/OCSP 检查"
 
-#, fuzzy
 msgid "Included certificates"
-msgstr "证书已损坏"
+msgstr "包括的证书"
 
 msgid "No audit log entries."
-msgstr ""
+msgstr "没有审计日志条目。"
 
-#, fuzzy
 msgid "Unknown operation"
-msgstr "未知的版本"
+msgstr "未知操作"
 
 msgid "Gpg-Agent usable"
-msgstr ""
+msgstr "Gpg-Agent 可用"
 
 msgid "Dirmngr usable"
-msgstr ""
+msgstr "Dirmngr 可用"
 
-#, fuzzy, c-format
+#, c-format
 msgid "No help available for '%s'."
-msgstr "‘%s’没有可用的帮助"
+msgstr "没有关于 ‘%s’ 的可用帮助。"
 
-#, fuzzy
 msgid "ignoring garbage line"
-msgstr "结尾行有问题\n"
+msgstr "忽略无用行"
 
-#, fuzzy
 msgid "[none]"
 msgstr "[未设定]"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid radix64 character %02x skipped\n"
-msgstr "跳过无效的 64 进制字符 %02x\n"
+msgstr "无效的 radix64 字符 %02x 已被跳过\n"
 
-#, fuzzy
 msgid "argument not expected"
-msgstr "不允许使用管理员命令\n"
+msgstr "未预期的参数"
 
-#, fuzzy
 msgid "read error"
-msgstr "文件读取错误"
+msgstr "读取错误"
 
-#, fuzzy
 msgid "keyword too long"
-msgstr "å\88\97太é\95¿"
+msgstr "å\85³é\94®å­\97太é\95¿"
 
-#, fuzzy
 msgid "missing argument"
-msgstr "无效的参数"
+msgstr "缺少参数"
 
-#, fuzzy
-#| msgid "invalid armor"
 msgid "invalid argument"
-msgstr "无效的 ASCII 封装格式"
+msgstr "无效的参数"
 
-#, fuzzy
 msgid "invalid command"
-msgstr "仅供管理员使用的命令\n"
+msgstr "无效的命令"
 
-#, fuzzy
 msgid "invalid alias definition"
-msgstr "æ\97 æ\95\88ç\9a\84å\88\97表é\80\89项\n"
+msgstr "æ\97 æ\95\88ç\9a\84å\88«å\90\8då®\9aä¹\89"
 
-#, fuzzy
 msgid "out of core"
-msgstr "可选"
+msgstr "out of core"
 
-#, fuzzy
 msgid "invalid option"
-msgstr "无效的列表选项\n"
+msgstr "无效的选项"
 
 #, c-format
 msgid "missing argument for option \"%.50s\"\n"
-msgstr ""
+msgstr "选项 “%.50s” 的参数缺失\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid argument for option \"%.50s\"\n"
-msgstr "无效的列表选项\n"
+msgstr "选项 “%.50s” 的参数无效\n"
 
 #, c-format
 msgid "option \"%.50s\" does not expect an argument\n"
-msgstr ""
+msgstr "选项 “%.50s” 不需要参数\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid command \"%.50s\"\n"
-msgstr "无效的指令(尝试“help”)\n"
+msgstr "无效的命令 \"%.50s\"\n"
 
 #, c-format
 msgid "option \"%.50s\" is ambiguous\n"
-msgstr ""
+msgstr "选项 “%.50s” 含义模糊\n"
 
 #, c-format
 msgid "command \"%.50s\" is ambiguous\n"
-msgstr ""
+msgstr "命令 “%.50s” 含义模糊\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "out of core\n"
-msgstr "可选"
+msgstr "out of core\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid option \"%.50s\"\n"
-msgstr "无效的列表选项\n"
+msgstr "无效的选项 “%.50s”\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "conversion from '%s' to '%s' not available\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "不能从 ‘%s’ 转换到 ‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "iconv_open failed: %s\n"
-msgstr "签名时失败: %s\n"
+msgstr "iconv_open 方法失败: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "conversion from '%s' to '%s' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "从 ‘%s’ 转换到 ‘%s’ 时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to create temporary file '%s': %s\n"
-msgstr "无法建立目录‘%s’:%s\n"
+msgstr "创建临时文件 ‘%s’ 失败: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error writing to '%s': %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "写入 ‘%s’ 时出现错误: %s\n"
 
 #, c-format
 msgid "removing stale lockfile (created by %d)\n"
-msgstr ""
+msgstr "移除旧的锁文件 (由 %d 创建)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "waiting for lock (held by %d%s) %s...\n"
-msgstr "等待‘%s’上的锁\n"
+msgstr "等待锁(由 %d%s 持有) %s...\n"
 
 msgid "(deadlock?) "
-msgstr ""
+msgstr "(死锁?) "
 
-#, fuzzy, c-format
+#, c-format
 msgid "lock '%s' not made: %s\n"
-msgstr "找不到公钥 %s:%s\n"
+msgstr "锁 ‘%s’ 未被建立: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "waiting for lock %s...\n"
-msgstr "等待‘%s’上的锁\n"
+msgstr "等待锁 %s...\n"
 
 #, c-format
 msgid "%s is too old (need %s, have %s)\n"
-msgstr ""
+msgstr "%s 太旧 (需要 %s,拥有 %s)\n"
 
 #, c-format
 msgid "armor: %s\n"
-msgstr "ASCII 封装:%s\n"
+msgstr "字符封装:%s\n"
 
 #, c-format
 msgid "invalid armor header: "
-msgstr "无效的 ASCII 封装头:"
+msgstr "无效的字符封装头: "
 
 #, c-format
 msgid "armor header: "
-msgstr "ASCII 封装头:"
+msgstr "字符封装头: "
 
 #, c-format
 msgid "invalid clearsig header\n"
 msgstr "无效的明文签名头\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "unknown armor header: "
-msgstr "ASCII 封装头:"
+msgstr "未知的字符封装头: "
 
 #, c-format
 msgid "nested clear text signatures\n"
-msgstr "å¤\9aå±\82明文签名\n"
+msgstr "åµ\8cå¥\97明文签名\n"
 
 #, c-format
 msgid "unexpected armor: "
-msgstr "与预期不符的 ASCII 封装:"
+msgstr "与预期不符的字符封装: "
 
 #, c-format
 msgid "invalid dash escaped line: "
-msgstr "以连字符开头的行格式错误:"
+msgstr "无效的连字符转义行: "
 
 #, c-format
 msgid "invalid radix64 character %02X skipped\n"
-msgstr "跳过无效的 64 进制字符 %02x\n"
+msgstr "无效的 radix64 字符 %02X 已被跳过\n"
 
 #, c-format
 msgid "premature eof (no CRC)\n"
-msgstr "文件先于预期结束(没有 CRC 部分)\n"
+msgstr "文件过早结束(没有 CRC 部分)\n"
 
 #, c-format
 msgid "premature eof (in CRC)\n"
-msgstr "文件先于预期结束(CRC 部分未结束)\n"
+msgstr "文件过早结束(CRC 部分未结束)\n"
 
 #, c-format
 msgid "malformed CRC\n"
@@ -1220,15 +1130,15 @@ msgstr "异常的 CRC\n"
 
 #, c-format
 msgid "CRC error; %06lX - %06lX\n"
-msgstr "CRC é\94\99误ï¼\9a%06lx - %06lx\n"
+msgstr "CRC é\94\99误ï¼\9b%06lX - %06lX\n"
 
 #, c-format
 msgid "premature eof (in trailer)\n"
-msgstr "文件先于预期结束(于结尾处)\n"
+msgstr "文件过早结束(于结尾处)\n"
 
 #, c-format
 msgid "error in trailer line\n"
-msgstr "结尾行有问题\n"
+msgstr "结尾行出现错误\n"
 
 #, c-format
 msgid "no valid OpenPGP data found.\n"
@@ -1236,81 +1146,78 @@ msgstr "找不到有效的 OpenPGP 数据。\n"
 
 #, c-format
 msgid "invalid armor: line longer than %d characters\n"
-msgstr "无效的 ASCII 封装:一行超过 %d 字符\n"
+msgstr "无效的字符封装:一行超过 %d 字符\n"
 
 #, c-format
 msgid ""
 "quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr "封装里出现括上的可打印字符――可能是有缺陷的信件传输程序造成的\n"
+msgstr ""
+"字符封装中出现引号包裹起来的可打印字符 - 可能使用了有缺陷的邮件传输代理\n"
 
 #, c-format
 msgid "[ not human readable (%zu bytes: %s%s) ]"
-msgstr ""
+msgstr "[ 非人类可读(%zu 字节:%s%s) ]"
 
 #, c-format
 msgid ""
 "a notation name must have only printable characters or spaces, and end with "
 "an '='\n"
-msgstr ""
+msgstr "一个记号的名称必须只含有可打印字符或者空格,并且以一个‘=’结尾\n"
 
 #, c-format
 msgid "a user notation name must contain the '@' character\n"
-msgstr ""
+msgstr "一个用户记号名称必须包含‘@’字符\n"
 
 #, c-format
 msgid "a notation name must not contain more than one '@' character\n"
-msgstr ""
+msgstr "一个记号名称必须不包含多于一个的‘@’字符\n"
 
 #, c-format
 msgid "a notation value must not use any control characters\n"
-msgstr ""
+msgstr "一个记号的值必须不能使用任何的控制字符\n"
 
 #, c-format
 msgid "a notation name may not contain an '=' character\n"
-msgstr ""
+msgstr "一个记号的名称可能不能包含‘=’字符\n"
 
 #, c-format
 msgid "a notation name must have only printable characters or spaces\n"
-msgstr ""
+msgstr "一个记号的名称必须只含有可打印字符或者空格\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "WARNING: invalid notation data found\n"
-msgstr "找不到有效的 OpenPGP 数据。\n"
+msgstr "警告: 找到的记号数据无效\n"
 
 #, c-format
 msgid "failed to proxy %s inquiry to client\n"
-msgstr ""
+msgstr "代理 %s 到客户端的查询失败\n"
 
 msgid "Enter passphrase: "
-msgstr "请è¾\93å\85¥å¯\86ç \81ï¼\9a"
+msgstr "è¾\93å\85¥å¯\86ç \81ï¼\9a "
 
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
+#, c-format
 msgid "error getting version from '%s': %s\n"
-msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+msgstr "从 ‘%s’ 获取版本时出现错误: %s\n"
 
 #, c-format
 msgid "server '%s' is older than us (%s < %s)"
-msgstr ""
+msgstr "服务器 ‘%s’ 比我们的版本更老 (%s < %s)"
 
-#, fuzzy, c-format
-#| msgid "WARNING: "
+#, c-format
 msgid "WARNING: %s\n"
-msgstr "警告:"
+msgstr "警告:%s\n"
 
 #, c-format
 msgid "Note: Outdated servers may lack important security fixes.\n"
-msgstr ""
+msgstr "注意: 过时的服务器可能缺少重要的安全修复。\n"
 
-#, fuzzy, c-format
-#| msgid "Please use the command \"toggle\" first.\n"
+#, c-format
 msgid "Note: Use the command \"%s\" to restart them.\n"
-msgstr "请先使用“toggle”指令。\n"
+msgstr "注意: 使用 “%s” 来重启他们。\n"
 
-#, fuzzy, c-format
-#| msgid "%s does not yet work with %s\n"
+#, c-format
 msgid "%s is not compliant with %s mode\n"
-msgstr "%s 尚不能和 %s 并用\n"
+msgstr "%s 与 %s 模式不兼容\n"
 
 #, c-format
 msgid "OpenPGP card not available: %s\n"
@@ -1318,102 +1225,103 @@ msgstr "OpenPGP 卡不可用:%s\n"
 
 #, c-format
 msgid "OpenPGP card no. %s detected\n"
-msgstr "检测到 OpenPGP 卡 %s\n"
+msgstr "检测到 OpenPGP 卡,号码为 %s\n"
 
 #, c-format
 msgid "can't do this in batch mode\n"
 msgstr "在批处理模式中无法完成此操作\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "This command is only available for version 2 cards\n"
-msgstr "在 %s 模式中不允许使用这个指令。\n"
+msgstr "这一命令只在版本 2 的卡上可用\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Reset Code not or not anymore available\n"
-msgstr "ç§\81é\92¥é\83¨å\88\86ä¸\8då\8f¯ç\94¨\n"
+msgstr "é\87\8d置代ç \81ä¸\8då\8f¯ç\94¨æ\88\96ä¸\8då\86\8då\8f¯ç\94¨\n"
 
 msgid "Your selection? "
-msgstr "您的选择? "
+msgstr "您的选择? "
 
 msgid "[not set]"
 msgstr "[未设定]"
 
 msgid "male"
-msgstr "男性"
+msgstr ""
 
 msgid "female"
-msgstr "女性"
+msgstr ""
 
+#, fuzzy
+#| msgid "No reason specified"
 msgid "unspecified"
-msgstr "未定义"
+msgstr "未指定原因"
 
 msgid "not forced"
-msgstr "可选"
+msgstr "非强制"
 
 msgid "forced"
-msgstr "å¿\85é¡»"
+msgstr "强å\88"
 
 msgid "Error: Only plain ASCII is currently allowed.\n"
-msgstr "错误:目前只允许使用 ASCII 字符。\n"
+msgstr "错误:目前只允许使用 ASCII 字符。\n"
 
 msgid "Error: The \"<\" character may not be used.\n"
-msgstr "错误:不能使用字符“<”。\n"
+msgstr "错误:不能使用字符 “<”。\n"
 
 msgid "Error: Double spaces are not allowed.\n"
 msgstr "错误:不允许出现两个空格。\n"
 
 msgid "Cardholder's surname: "
-msgstr "卡持有人的姓:"
+msgstr "卡片持有人的姓: "
 
 msgid "Cardholder's given name: "
-msgstr "卡持有人的名:"
+msgstr "卡片持有人的名: "
 
 #, c-format
 msgid "Error: Combined name too long (limit is %d characters).\n"
-msgstr "错误:合成的姓名太长(至多 %d 个字符)。\n"
+msgstr "错误:合成后的姓名太长(至多 %d 个字符)。\n"
 
 msgid "URL to retrieve public key: "
-msgstr "获取公钥的 URL:"
+msgstr "拉取公钥的 URL: "
 
-#, fuzzy, c-format
-#| msgid "error reading `%s': %s\n"
+#, c-format
 msgid "error reading '%s': %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取 ‘%s’ 时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error writing '%s': %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "写入 ‘%s’ 时出现错误: %s\n"
 
 msgid "Login data (account name): "
-msgstr "登录数据(帐号名):"
+msgstr "登录数据(帐户名): "
 
 msgid "Private DO data: "
-msgstr "个人 DO 数据:"
+msgstr "个人 DO 数据: "
 
 msgid "Language preferences: "
-msgstr "首选语言:"
+msgstr "语言偏好: "
 
 msgid "Error: invalid length of preference string.\n"
-msgstr "错误:首选项字符串长度无效。\n"
+msgstr "错误:偏好字符串长度无效。\n"
 
 msgid "Error: invalid characters in preference string.\n"
-msgstr "错误:首选项字符串里有无效字符。\n"
+msgstr "错误:偏好字符串中存在无效字符。\n"
 
 msgid "Sex ((M)ale, (F)emale or space): "
-msgstr "性别(男性输入 M,女性输入 F,不指定输入空格):"
+msgstr ""
 
 msgid "Error: invalid response.\n"
 msgstr "错误:无效的响应。\n"
 
 msgid "CA fingerprint: "
-msgstr "CA 指纹:"
+msgstr "CA 指纹: "
 
 msgid "Error: invalid formatted fingerprint.\n"
 msgstr "错误:指纹格式无效。\n"
 
 #, c-format
 msgid "key operation not possible: %s\n"
-msgstr "针对密钥的操作无法实现:%s\n"
+msgstr "密钥操作无法实现:%s\n"
 
 msgid "not an OpenPGP card"
 msgstr "不是一个 OpenPGP 卡"
@@ -1423,17 +1331,27 @@ msgid "error getting current key info: %s\n"
 msgstr "取得当前密钥信息时出错:%s\n"
 
 msgid "Replace existing key? (y/N) "
-msgstr "替换已有的密钥?(y/N)"
+msgstr "替换现存的密钥?(y/N) "
 
+#, fuzzy
+#| msgid ""
+#| "Note: There is no guarantee that the card supports the requested\n"
+#| "      key type or size.  If the key generation does not succeed,\n"
+#| "      please check the documentation of your card to see which\n"
+#| "      key types and sizes are supported.\n"
 msgid ""
 "Note: There is no guarantee that the card supports the requested size.\n"
 "      If the key generation does not succeed, please check the\n"
 "      documentation of your card to see what sizes are allowed.\n"
 msgstr ""
+"注意:此处并不保证此卡片支持所请求的\n"
+"     密钥类型或者长度。如果密钥没有成功生成,\n"
+"     请检查您的卡片的文档以确定支持哪种密钥\n"
+"     类型和长度。\n"
 
 #, c-format
 msgid "What keysize do you want? (%u) "
-msgstr "您想要用多大的密钥尺寸?(%u)"
+msgstr "您想要使用的密钥长度?(%u) "
 
 #, c-format
 msgid "rounded up to %u bits\n"
@@ -1441,88 +1359,76 @@ msgstr "舍入到 %u 位\n"
 
 #, c-format
 msgid "%s keysizes must be in the range %u-%u\n"
-msgstr "%s 密钥尺寸必须在 %u 与 %u 间\n"
+msgstr "%s 密钥长度必须在 %u 与 %u 间\n"
 
 msgid "Changing card key attribute for: "
-msgstr ""
+msgstr "正在改变卡片的密钥属性: "
 
-#, fuzzy
-#| msgid "   (1) Signature key\n"
 msgid "Signature key\n"
-msgstr "  (1) 签名密钥\n"
+msgstr "签名密钥\n"
 
-#, fuzzy
-#| msgid "   (2) Encryption key\n"
 msgid "Encryption key\n"
-msgstr "  (2) 加密密钥\n"
+msgstr "加密密钥\n"
 
-#, fuzzy
-#| msgid "   (3) Authentication key\n"
 msgid "Authentication key\n"
-msgstr "  (3) 认证密钥\n"
+msgstr "身份验证密钥\n"
 
 msgid "Please select what kind of key you want:\n"
-msgstr "请é\80\89æ\8b©æ\82¨è¦\81使ç\94¨ç\9a\84å¯\86é\92¥ç§\8dç±»:\n"
+msgstr "请é\80\89æ\8b©æ\82¨è¦\81使ç\94¨ç\9a\84å¯\86é\92¥ç±»å\9e\8b:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) RSA\n"
-msgstr "   (%d) RSA (仅用于签名)\n"
+msgstr "   (%d) RSA\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) ECC\n"
-msgstr "   (%d) DSA 和 ElGamal (默认)\n"
+msgstr "   (%d) ECC\n"
 
 msgid "Invalid selection.\n"
 msgstr "无效的选择。\n"
 
 #, c-format
 msgid "The card will now be re-configured to generate a key of %u bits\n"
-msgstr ""
+msgstr "此卡片将会被重新配置以生成一个 %u 位的新密钥\n"
 
 #, c-format
 msgid "The card will now be re-configured to generate a key of type: %s\n"
-msgstr ""
+msgstr "此卡片将会被重新配置以生成一个以下类型的密钥: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error changing key attribute for key %d: %s\n"
-msgstr "在‘%s’中寻找信任度记录时出错:%s\n"
+msgstr "改变密钥 %d 的密钥属性时出现错误: %s\n"
 
-#, fuzzy, c-format
-#| msgid "error getting current key info: %s\n"
+#, c-format
 msgid "error getting card info: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "获取卡片信息时出现错: %s\n"
 
-#, fuzzy, c-format
-#| msgid "This command is not allowed while in %s mode.\n"
+#, c-format
 msgid "This command is not supported by this card\n"
-msgstr "在 %s 模式中不允许使用这个指令。\n"
+msgstr "此命令不被此卡片支持\n"
 
 msgid "Make off-card backup of encryption key? (Y/n) "
-msgstr "是否为加密密钥创建卡外的备份?(Y/n)"
+msgstr "创建加密密钥的离卡备份? (Y/n) "
 
-#, fuzzy, c-format
+#, c-format
 msgid "Note: keys are already stored on the card!\n"
-msgstr "私钥已存储在卡上\n"
+msgstr "注意: 已有密钥被存储于卡片上!\n"
 
 msgid "Replace existing keys? (y/N) "
-msgstr "替换已有的密钥?(y/N)"
+msgstr "替换现存的密钥?(y/N) "
 
-#, fuzzy, c-format
-#| msgid ""
-#| "Please note that the factory settings of the PINs are\n"
-#| "   PIN = `%s'     Admin PIN = `%s'\n"
-#| "You should change them using the command --change-pin\n"
+#, c-format
 msgid ""
 "Please note that the factory settings of the PINs are\n"
 "   PIN = '%s'     Admin PIN = '%s'\n"
 "You should change them using the command --change-pin\n"
 msgstr ""
-"请注意,PIN 在出厂时被设置为:\n"
+"请注意,出厂设置的 PIN 为:\n"
 "  PIN = ‘%s’    管理员 PIN = ‘%s’\n"
 "您应当使用 --change-pin 命令来更改它们\n"
 
 msgid "Please select the type of key to generate:\n"
-msgstr "请选择您要使用的密钥种类:\n"
+msgstr "请选择您要生成的密钥类型:\n"
 
 msgid "   (1) Signature key\n"
 msgstr "  (1) 签名密钥\n"
@@ -1531,39 +1437,37 @@ msgid "   (2) Encryption key\n"
 msgstr "  (2) 加密密钥\n"
 
 msgid "   (3) Authentication key\n"
-msgstr "  (3) è®¤证密钥\n"
+msgstr "  (3) èº«ä»½éª\8c证密钥\n"
 
 msgid "Please select where to store the key:\n"
 msgstr "请选择在哪里存储密钥:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "KEYTOCARD failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "KEYTOCARD 失败: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Note: This command destroys all keys stored on the card!\n"
-msgstr "私钥已存储在卡上\n"
+msgstr "注意: 这一命令将会销毁所有储存于卡片上的密钥!\n"
 
-#, fuzzy
-#| msgid "Sign it? (y/N) "
 msgid "Continue? (y/N) "
-msgstr "为其添加签名吗?(y/N)"
+msgstr "继续? (y/N) "
 
 msgid "Really do a factory reset? (enter \"yes\") "
-msgstr ""
+msgstr "真的要执行恢复出厂设置吗? (输入“yes”) "
 
-#, fuzzy, c-format
+#, c-format
 msgid "error for setup KDF: %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "设置 KDF 时出现错误: %s\n"
 
 msgid "quit this menu"
-msgstr "离开这个菜单"
+msgstr "退出此菜单"
 
 msgid "show admin commands"
 msgstr "显示管理员命令"
 
 msgid "show this help"
-msgstr "显示这份在线说明"
+msgstr "显示此帮助"
 
 msgid "list all available data"
 msgstr "列出所有可用数据"
@@ -1572,7 +1476,7 @@ msgid "change card holder's name"
 msgstr "更改卡持有人的姓名"
 
 msgid "change URL to retrieve key"
-msgstr "更改取密钥的 URL"
+msgstr "更改取密钥的 URL"
 
 msgid "fetch the key specified in the card URL"
 msgstr "根据卡中指定的 URL 获取密钥"
@@ -1581,16 +1485,18 @@ msgid "change the login name"
 msgstr "更改登录名"
 
 msgid "change the language preferences"
-msgstr "更改首选语言首选"
+msgstr "更改语言偏好"
 
+#, fuzzy
+#| msgid "change card holder's name"
 msgid "change card holder's sex"
-msgstr "更改卡持有人的性别"
+msgstr "更改卡持有人的姓名"
 
 msgid "change a CA fingerprint"
 msgstr "更改一个 CA 指纹"
 
 msgid "toggle the signature force PIN flag"
-msgstr "设定 PIN 签名是否必须"
+msgstr "开关签名的强制 PIN 设置"
 
 msgid "generate new keys"
 msgstr "生成新的密钥"
@@ -1602,95 +1508,87 @@ msgid "verify the PIN and list all data"
 msgstr "验证 PIN 并列出所有数据"
 
 msgid "unblock the PIN using a Reset Code"
-msgstr ""
+msgstr "使用重置代码解锁 PIN"
 
 msgid "destroy all keys and data"
-msgstr ""
+msgstr "销毁所有密钥和数据"
 
 msgid "setup KDF for PIN authentication"
-msgstr ""
+msgstr "针对 PIN 身份验证设置 KDF"
 
-#, fuzzy
-#| msgid "change the ownertrust"
 msgid "change the key attribute"
-msgstr "更改信任度"
+msgstr "更改密钥属性"
 
 msgid "gpg/card> "
-msgstr ""
+msgstr "gpg/card> "
 
 msgid "Admin-only command\n"
 msgstr "仅供管理员使用的命令\n"
 
 msgid "Admin commands are allowed\n"
-msgstr "允许使用管理员命令\n"
+msgstr "管理员命令可用\n"
 
 msgid "Admin commands are not allowed\n"
-msgstr "不允许使用管理员命令\n"
+msgstr "管理员命令不可用\n"
 
 msgid "Invalid command  (try \"help\")\n"
-msgstr "无效的指令(尝试“help”)\n"
+msgstr "无效的命令  (尝试“help”)\n"
 
 #, c-format
 msgid "--output doesn't work for this command\n"
 msgstr "--output 在这个命令中不起作用\n"
 
-#, fuzzy, c-format
-#| msgid "can't open `%s'\n"
+#, c-format
 msgid "can't open '%s'\n"
-msgstr "无法打开‘%s’\n"
+msgstr "无法打开 ‘%s’\n"
 
 #, c-format
 msgid "key \"%s\" not found: %s\n"
-msgstr "密钥‘%s’找不到:%s\n"
+msgstr "未找到密钥 ‘%s’:%s\n"
 
 #, c-format
 msgid "error reading keyblock: %s\n"
-msgstr "读å\8f\96å¯\86é\92¥å\8cºå\9d\97æ\97¶å\8f\91ç\94\9fé\94\99误ï¼\9a%s\n"
+msgstr "读å\8f\96å¯\86é\92¥å\9d\97æ\97¶å\87ºç\8e°é\94\99误ï¼\9a %s\n"
 
-#, fuzzy, c-format
-#| msgid "key \"%s\" not found: %s\n"
+#, c-format
 msgid "key \"%s\" not found\n"
-msgstr "密钥‘%s’找不到:%s\n"
+msgstr "未找到密钥 “%s”\n"
 
 #, c-format
 msgid "(unless you specify the key by fingerprint)\n"
-msgstr "(除非您用指纹指定密钥)\n"
+msgstr "(除非您用指纹指定密钥)\n"
 
 #, c-format
 msgid "can't do this in batch mode without \"--yes\"\n"
-msgstr "在批处理模式中,没有“--yes”就无法这么做\n"
+msgstr "无法于批处理模式中在没有“--yes”的情况下完成此操作\n"
 
 msgid "Delete this key from the keyring? (y/N) "
-msgstr "要从钥匙环里删除这把密钥吗?(y/N)"
+msgstr "要从钥匙环里删除这个密钥吗?(y/N) "
 
 msgid "This is a secret key! - really delete? (y/N) "
-msgstr "这是一把私钥!――真的要删除吗?(y/N)"
+msgstr "这是一个私钥!- 真的要删除吗?(y/N) "
 
-#, fuzzy, c-format
+#, c-format
 msgid "deleting secret %s failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "删除私钥 %s 时失败: %s\n"
 
-#, fuzzy
-#| msgid "bad key"
 msgid "key"
-msgstr "密钥已损坏"
+msgstr "密钥"
 
-#, fuzzy
-#| msgid "Pubkey: "
 msgid "subkey"
-msgstr "å\85¬é\92¥ï¼\9a"
+msgstr "å­\90å¯\86é\92¥"
 
 #, c-format
 msgid "deleting keyblock failed: %s\n"
-msgstr "å\88 é\99¤å¯\86é\92¥å\8cºå\9d\97æ\97¶å¤±è´¥ï¼\9a%s\n"
+msgstr "删除密钥块时失败:%s\n"
 
 #, c-format
 msgid "ownertrust information cleared\n"
-msgstr "信任度信息已被清除\n"
+msgstr "所有者信任信息已被清除\n"
 
 #, c-format
 msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "å\85¬é\92¥â\80\9c%sâ\80\9dæ\9c\89对åº\94ç\9a\84ç§\81é\92¥!\n"
+msgstr "å­\98å\9c¨ä¸\80个ç§\81é\92¥å¯¹åº\94äº\8eå\85¬é\92¥ â\80\9c%sâ\80\9d!\n"
 
 #, c-format
 msgid "use option \"--delete-secret-keys\" to delete it first.\n"
@@ -1698,67 +1596,65 @@ msgstr "请先使用“--delete-secret-keys”选项来删除它。\n"
 
 #, c-format
 msgid "error creating passphrase: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "创建密码时出现错误:%s\n"
 
 #, c-format
 msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr "在此 S2K 模式下无法使用对称的 ESK 包\n"
+msgstr "由于在 S2K 模式,不能使用一个对称的 ESK 封包\n"
 
-#, c-format
+#, fuzzy, c-format
+#| msgid "using cipher %s.%s\n"
 msgid "using cipher %s\n"
-msgstr "使ç\94¨å¯¹ç§°å\8a å¯\86ç®\97æ³\95 %s\n"
+msgstr "使ç\94¨å¯\86æ\96\87 %s.%s\n"
 
-#, fuzzy, c-format
-#| msgid "`%s' already compressed\n"
+#, c-format
 msgid "'%s' already compressed\n"
 msgstr "‘%s’已被压缩\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: `%s' is an empty file\n"
+#, c-format
 msgid "WARNING: '%s' is an empty file\n"
 msgstr "警告:‘%s’是一个空文件\n"
 
-#, fuzzy, c-format
-#| msgid "reading from `%s'\n"
+#, c-format
 msgid "reading from '%s'\n"
 msgstr "正在从‘%s’读取\n"
 
 #, c-format
 msgid ""
 "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr "警告:强行使用的 %s (%d)对称加密算法不在收件者的首选项中\n"
+msgstr "警告: 强制对称密文 %s (%d) 与接收者的偏好设置冲突\n"
 
-#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
+#, c-format
 msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "您不能在 %s 模式下使用‘%s’对称加密算法\n"
+msgstr "密文算法 ‘%s’ 可能不能被用于 %s 模式\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
-msgstr "警告:“%s”选项已不建议使用\n"
+msgstr "警告: 密钥 %s 在 %s 模式下不适用于加密\n"
 
 #, c-format
 msgid ""
 "WARNING: forcing compression algorithm %s (%d) violates recipient "
 "preferences\n"
-msgstr "警告:强行使用的 %s (%d)压缩算法不在收件者的首选项中\n"
+msgstr "警告: 强制压缩算法 %s (%d) 与接收者的偏好设置冲突\n"
 
 #, c-format
 msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr "强行使用的 %s (%d)对称加密算法不在收件者的首选项中\n"
+msgstr "强行对称密文算法 %s (%d) 与接收者的偏好设置冲突\n"
 
-#, c-format
+#, fuzzy, c-format
+#| msgid "%s/%s.%s encrypted for: \"%s\"\n"
 msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s 已经加密给:“%s”\n"
+msgstr "%s/%s.%s 已加密给 \"%s\"\n"
 
-#, fuzzy, c-format
-#| msgid "you may not use %s while in %s mode\n"
+#, c-format
 msgid "option '%s' may not be used in %s mode\n"
-msgstr "您不该将 %s 用于 %s 模式中\n"
+msgstr "选项 ‘%s’ 可能不能用于 %s 模式\n"
 
-#, c-format
+#, fuzzy, c-format
+#| msgid "%s.%s encrypted data\n"
 msgid "%s encrypted data\n"
-msgstr "%s 加密过的数据\n"
+msgstr "%s.%s 已加密的数据\n"
 
 #, c-format
 msgid "encrypted with unknown algorithm %d\n"
@@ -1767,38 +1663,36 @@ msgstr "以未知的算法 %d 加密\n"
 #, c-format
 msgid ""
 "WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr "警告:报文被使用对称加密算法的弱密钥加密。\n"
+msgstr "警告: 消息使用了一个弱密钥以对称密文的形式加密\n"
 
 #, c-format
 msgid "problem handling encrypted packet\n"
-msgstr "å¤\84ç\90\86å\8a å¯\86å\8c\85æ\9c\89问题\n"
+msgstr "å¤\84ç\90\86å\8a å¯\86å°\81å\8c\85æ\97¶å\87ºç\8e°问题\n"
 
 #, c-format
 msgid "no remote program execution supported\n"
-msgstr "不支持远程调用\n"
+msgstr "不支持远程程序执行\n"
 
 #, c-format
 msgid ""
 "external program calls are disabled due to unsafe options file permissions\n"
-msgstr "由于配置文件权限不安全,外部程序调用被禁用\n"
+msgstr "由于文件权限位不安全,外部程序调用被禁用\n"
 
 #, c-format
 msgid "this platform requires temporary files when calling external programs\n"
-msgstr "在这个操作平台上调用外部程序时需要临时文件\n"
+msgstr "此平台上调用外部程序时要求临时文件\n"
 
-#, fuzzy, c-format
-#| msgid "unable to execute program `%s': %s\n"
+#, c-format
 msgid "unable to execute program '%s': %s\n"
 msgstr "无法执行程序‘%s’:%s\n"
 
-#, fuzzy, c-format
-#| msgid "unable to execute shell `%s': %s\n"
+#, c-format
 msgid "unable to execute shell '%s': %s\n"
-msgstr "无法在命令解释环境中执行‘%s’:%s\n"
+msgstr "无法执行外壳程序‘%s’:%s\n"
 
 #, c-format
 msgid "system error while calling external program: %s\n"
-msgstr "è°\83ç\94¨å¤\96é\83¨ç¨\8båº\8fæ\97¶å\8f\91ç\94\9f系统错误:%s\n"
+msgstr "è°\83ç\94¨å¤\96é\83¨ç¨\8båº\8fæ\97¶å\87ºç\8e°系统错误:%s\n"
 
 #, c-format
 msgid "unnatural exit of external program\n"
@@ -1812,47 +1706,42 @@ msgstr "无法执行外部程序\n"
 msgid "unable to read external program response: %s\n"
 msgstr "无法读取外部程序响应:%s\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n"
+#, c-format
 msgid "WARNING: unable to remove tempfile (%s) '%s': %s\n"
-msgstr "警告:无法删除临时文件(%s)‘%s’:%s\n"
+msgstr "警告:无法删除临时文件(%s)‘%s’:%s\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unable to remove temp directory `%s': %s\n"
+#, c-format
 msgid "WARNING: unable to remove temp directory '%s': %s\n"
 msgstr "警告:无法删除临时目录‘%s’:%s\n"
 
 msgid "export signatures that are marked as local-only"
-msgstr "导出被标记为局部的密名"
+msgstr "导出被标记为“仅限本地”的签名"
 
 msgid "export attribute user IDs (generally photo IDs)"
-msgstr "导出属性用户标识(一般为照片标识)"
+msgstr "导出附属用户标识(一般为照片标识)"
 
 msgid "export revocation keys marked as \"sensitive\""
-msgstr "导出被标记为“敏感”的吊销密钥"
+msgstr "导出被标记为“敏感”的吊销密钥"
 
 msgid "remove unusable parts from key during export"
-msgstr "导出时清除密钥中的不可用部分"
+msgstr "导出时移除密钥中未使用的部分"
 
 msgid "remove as much as possible from key during export"
-msgstr "导出时尽可能除密钥中的可选部分"
+msgstr "导出时尽可能除密钥中的可选部分"
 
 msgid "use the GnuPG key backup format"
-msgstr ""
+msgstr "使用 GnuPG 密钥备份格式"
 
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
 msgid " - skipped"
-msgstr "%s:已跳过:%s\n"
+msgstr " - 已跳过"
 
-#, fuzzy, c-format
-#| msgid "writing to `%s'\n"
+#, c-format
 msgid "writing to '%s'\n"
 msgstr "正在写入‘%s’\n"
 
 #, c-format
 msgid "key %s: key material on-card - skipped\n"
-msgstr "密钥 %s:密钥在卡上——已跳过\n"
+msgstr "密钥 %s:密钥在卡片上 - 已跳过\n"
 
 #, c-format
 msgid "exporting secret keys not allowed\n"
@@ -1860,78 +1749,71 @@ msgstr "不允许导出私钥\n"
 
 #, c-format
 msgid "key %s: PGP 2.x style key - skipped\n"
-msgstr "密钥 %s:PGP 2.x 样式的密钥――已跳过\n"
+msgstr "密钥 %s:PGP 2.x 样式的密钥 - 已跳过\n"
 
 #, c-format
 msgid "WARNING: nothing exported\n"
 msgstr "警告:没有导出任何东西\n"
 
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
+#, c-format
 msgid "error creating '%s': %s\n"
-msgstr "建ç«\8bâ\80\98%sâ\80\99æ\97¶å\8f\91ç\94\9f错误:%s\n"
+msgstr "å\88\9b建â\80\98%sâ\80\99æ\97¶å\87ºç\8e°错误:%s\n"
 
 msgid "[User ID not found]"
-msgstr "[找不到用户标识]"
+msgstr "[用户标识未找到]"
 
-#, fuzzy, c-format
-#| msgid "automatically retrieved `%s' via %s\n"
+#, c-format
 msgid "automatically retrieved '%s' via %s\n"
-msgstr "自动取‘%s’,通过 %s\n"
+msgstr "自动取‘%s’,通过 %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error retrieving '%s' via %s: %s\n"
-msgstr "建立‘%s’时发生错误:%s\n"
+msgstr "拉取‘%s’通过 %s 时出现错误: %s\n"
 
-#, fuzzy
 msgid "No fingerprint"
-msgstr "CA 指纹:"
+msgstr "无指纹"
 
 #, c-format
 msgid "checking for a fresh copy of an expired key via %s\n"
-msgstr ""
+msgstr "正在通过 %s 检查一个已过期密钥的新拷贝\n"
 
 #, c-format
 msgid "secret key \"%s\" not found: %s\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "找不到私钥 “%s”:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "(check argument of option '%s')\n"
-msgstr "无效的列表选项\n"
+msgstr "(检查选项 ‘%s’ 的参数)\n"
 
-#, fuzzy, c-format
-#| msgid "unusable secret key"
+#, c-format
 msgid "Warning: not using '%s' as default key: %s\n"
-msgstr "不可用的私钥"
+msgstr "警告:未使用‘%s’作为默认密钥:%s\n"
 
-#, fuzzy, c-format
-#| msgid "unusable secret key"
+#, c-format
 msgid "using \"%s\" as default secret key for signing\n"
-msgstr "ä¸\8då\8f¯ç\94¨ç\9a\84ç§\81é\92¥"
+msgstr "使ç\94¨ â\80\9c%sâ\80\9d ä½\9c为é»\98认签å\90\8dç\94¨ç§\81é\92¥\n"
 
 #, c-format
 msgid "all values passed to '%s' ignored\n"
-msgstr ""
+msgstr "传递给‘%s’的所有值被忽略\n"
 
 #, c-format
 msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
-msgstr "--allow-non-selfsigned-uid 使无效密钥 %s 生效\n"
+msgstr "无效的密钥 %s 通过 --allow-non-selfsigned-uid 生效\n"
 
 #, c-format
 msgid "using subkey %s instead of primary key %s\n"
-msgstr "使用子钥 %s 而非主钥 %s\n"
+msgstr "使用子密钥 %s 而非主密钥 %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "valid values for option '%s':\n"
-msgstr "无效的列表选项\n"
+msgstr "选项 ‘%s’ 的有效值:\n"
 
-#, fuzzy
 msgid "make a signature"
-msgstr "|[文件名]|生成一份签名"
+msgstr "生成一份签名"
 
-#, fuzzy
 msgid "make a clear text signature"
-msgstr "|[文件名]|生成一份明文签名"
+msgstr "生成一份明文签名"
 
 msgid "make a detached signature"
 msgstr "生成一份分离的签名"
@@ -1940,10 +1822,10 @@ msgid "encrypt data"
 msgstr "加密数据"
 
 msgid "encryption only with symmetric cipher"
-msgstr "仅使用对称加密"
+msgstr "ä»\85使ç\94¨å¯¹ç§°å¯\86æ\96\87å\8a å¯\86"
 
 msgid "decrypt data (default)"
-msgstr "解密数据(默认)"
+msgstr "解密数据(默认)"
 
 msgid "verify a signature"
 msgstr "验证签名"
@@ -1964,30 +1846,22 @@ msgid "list secret keys"
 msgstr "列出私钥"
 
 msgid "generate a new key pair"
-msgstr "生成一新的密钥对"
+msgstr "生成一新的密钥对"
 
-#, fuzzy
-#| msgid "generate a new key pair"
 msgid "quickly generate a new key pair"
-msgstr "生成一副新的密钥对"
+msgstr "快速生成一个新的密钥对"
 
-#, fuzzy
-#| msgid "generate a new key pair"
 msgid "quickly add a new user-id"
-msgstr "生成一副新的密钥对"
+msgstr "快速添加一个新的用户标识"
 
-#, fuzzy
-#| msgid "generate a new key pair"
 msgid "quickly revoke a user-id"
-msgstr "生成一副新的密钥对"
+msgstr "快速吊销一个用户标识"
 
-#, fuzzy
-#| msgid "generate a new key pair"
 msgid "quickly set a new expiration date"
-msgstr "生成一副新的密钥对"
+msgstr "快速设置一个过期日期"
 
 msgid "full featured key pair generation"
-msgstr ""
+msgstr "完整功能的密钥对生成"
 
 msgid "generate a revocation certificate"
 msgstr "生成一份吊销证书"
@@ -1998,26 +1872,21 @@ msgstr "从公钥钥匙环里删除密钥"
 msgid "remove keys from the secret keyring"
 msgstr "从私钥钥匙环里删除密钥"
 
-#, fuzzy
-#| msgid "sign a key"
 msgid "quickly sign a key"
-msgstr "为某把密钥添加签名"
+msgstr "快速签名一个密钥"
 
-#, fuzzy
-#| msgid "sign a key locally"
 msgid "quickly sign a key locally"
-msgstr "为某把密钥添加本地签名"
+msgstr "快速本地签名一个密钥"
 
 msgid "sign a key"
-msgstr "为某把密钥添加签名"
+msgstr "签名一个密钥"
 
 msgid "sign a key locally"
-msgstr "为某把密钥添加本地签名"
+msgstr "本地签名一个密钥"
 
 msgid "sign or edit a key"
-msgstr "ç¼\96è¾\91æ\9f\90æ\8a\8aå¯\86é\92¥æ\88\96为å\85¶æ·»å\8a ç­¾å\90\8d"
+msgstr "ç­¾å\90\8dæ\88\96ç¼\96è¾\91ä¸\80个å¯\86é\92¥"
 
-#, fuzzy
 msgid "change a passphrase"
 msgstr "更改密码"
 
@@ -2025,90 +1894,75 @@ msgid "export keys"
 msgstr "导出密钥"
 
 msgid "export keys to a keyserver"
-msgstr "把密钥导出到某个公钥服务器上"
+msgstr "个密钥导出到一个公钥服务器上"
 
 msgid "import keys from a keyserver"
 msgstr "从公钥服务器上导入密钥"
 
 msgid "search for keys on a keyserver"
-msgstr "在公钥服务器上搜密钥"
+msgstr "在公钥服务器上搜密钥"
 
 msgid "update all keys from a keyserver"
-msgstr "从公钥服务器更新所有的本地密钥"
+msgstr "从公钥服务器更新所有密钥"
 
 msgid "import/merge keys"
 msgstr "导入/合并密钥"
 
 msgid "print the card status"
-msgstr "打印卡状态"
+msgstr "æ\89\93å\8d°å\8d¡ç\89\87ç\8a¶æ\80\81"
 
 msgid "change data on a card"
-msgstr "更改卡上的数据"
+msgstr "更改卡上的数据"
 
 msgid "change a card's PIN"
-msgstr "更改卡的 PIN"
+msgstr "æ\9b´æ\94¹å\8d¡ç\89\87ç\9a\84 PIN"
 
 msgid "update the trust database"
-msgstr "更新信任数据库"
+msgstr "更新信任数据库"
 
-#, fuzzy
 msgid "print message digests"
-msgstr "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr "打印消息摘要"
 
 msgid "run in server mode"
-msgstr ""
+msgstr "以服务器模式运行"
 
 msgid "|VALUE|set the TOFU policy for a key"
-msgstr ""
+msgstr "|VALUE|设置一个密钥的 TOFU 政策"
 
 msgid "create ascii armored output"
-msgstr "输出经 ASCII 封装"
+msgstr "创建 ASCII 字符封装的输出"
 
-#, fuzzy
 msgid "|USER-ID|encrypt for USER-ID"
-msgstr "|某甲|为收件者“某甲”加密"
+msgstr "|USER-ID|为 USER-ID 加密"
 
-#, fuzzy
 msgid "|USER-ID|use USER-ID to sign or decrypt"
-msgstr "使用这个用户标识来签名或解密"
+msgstr "|USER-ID|使用 USER-ID 来签名或者解密"
 
-#, fuzzy
 msgid "|N|set compress level to N (0 disables)"
-msgstr "|N|设定压缩等级为 N (0 表示不压缩)"
+msgstr "|N|设置压缩等级为 N (0 为禁用)"
 
 msgid "use canonical text mode"
-msgstr "使用标准的文本模式"
+msgstr "使用规范的文本模式"
 
-#, fuzzy
 msgid "|FILE|write output to FILE"
-msgstr "从‘%s’读取选项\n"
+msgstr "|FILE|写输出到 FILE"
 
 msgid "do not make any changes"
-msgstr "ä¸\8då\81\9aä»»ä½\95æ\94¹å\8f\98"
+msgstr "ä¸\8då\81\9aä»»ä½\95æ\9b´æ\94¹"
 
 msgid "prompt before overwriting"
-msgstr "覆盖前先询问"
+msgstr "覆盖前提示"
 
 msgid "use strict OpenPGP behavior"
-msgstr "行为严格遵循 OpenPGP 定义"
+msgstr "使用严格的 OpenPGP 行为"
 
 msgid ""
 "@\n"
 "(See the man page for a complete listing of all commands and options)\n"
 msgstr ""
 "@\n"
-"(请参考在线说明以获得所有命令和选项的完整清单)\n"
+"(请参考手册页以获得所有命令和选项的完整列表)\n"
 
-#, fuzzy
-#| msgid ""
-#| "@\n"
-#| "Examples:\n"
-#| "\n"
-#| " -se -r Bob [file]          sign and encrypt for user Bob\n"
-#| " --clear-sign [file]         make a clear text signature\n"
-#| " --detach-sign [file]       make a detached signature\n"
-#| " --list-keys [names]        show keys\n"
-#| " --fingerprint [names]      show fingerprints\n"
 msgid ""
 "@\n"
 "Examples:\n"
@@ -2120,30 +1974,23 @@ msgid ""
 " --fingerprint [names]      show fingerprints\n"
 msgstr ""
 "@\n"
-"范例:\n"
+"例子:\n"
 "\n"
-" -se -r Bob [文件名]          为 Bob 这个收件人签名及加密\n"
-" --clear-sign [文件名]         做出明文签名\n"
-" --detach-sign [文件名]       做出分离式签名\n"
-" --list-keys [æ\9f\90ç\94²]           æ\98¾ç¤ºå¯\86é\92¥\n"
-" --fingerprint [某甲]         显示指纹\n"
+" -se -r Bob [file]          为用户 Bob 签名和加密\n"
+" --clear-sign [file]        创建一个明文签名\n"
+" --detach-sign [file]       创建一个分离签名\n"
+" --list-keys [names]        å\88\97å\87ºå¯\86é\92¥\n"
+" --fingerprint [names]      显示指纹\n"
 
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
 msgid "Usage: @GPG@ [options] [files] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法: @GPG@ [options] [files] (-h 获取帮助)"
 
-#, fuzzy
-#| msgid ""
-#| "Syntax: gpg [options] [files]\n"
-#| "sign, check, encrypt or decrypt\n"
-#| "default operation depends on the input data\n"
 msgid ""
 "Syntax: @GPG@ [options] [files]\n"
 "Sign, check, encrypt or decrypt\n"
 "Default operation depends on the input data\n"
 msgstr ""
-"语法:gpg [选项] [文件名]\n"
+"语法:@GPG@ [options] [files]\n"
 "签名、检查、加密或解密\n"
 "默认的操作依输入数据而定\n"
 
@@ -2155,113 +2002,94 @@ msgstr ""
 "支持的算法:\n"
 
 msgid "Pubkey: "
-msgstr "公钥:"
+msgstr "公钥: "
 
 msgid "Cipher: "
-msgstr "对称å\8a å¯\86ï¼\9a"
+msgstr "å¯\86æ\96\87ï¼\9a "
 
 msgid "Hash: "
-msgstr "散列:"
+msgstr "散列: "
 
 msgid "Compression: "
-msgstr "压缩:"
+msgstr "压缩:  "
 
-#, fuzzy, c-format
+#, c-format
 msgid "usage: %s [options] %s\n"
-msgstr "用法:gpg [选项] "
+msgstr "用法: %s [选项] %s\n"
 
 #, c-format
 msgid "conflicting commands\n"
 msgstr "冲突的指令\n"
 
-#, fuzzy, c-format
-#| msgid "no = sign found in group definition `%s'\n"
+#, c-format
 msgid "no = sign found in group definition '%s'\n"
-msgstr "在‘%s’组定义里找不到等号(=)\n"
+msgstr "群组定义 ‘%s’ 中找不到 = 标志\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe ownership on homedir `%s'\n"
+#, c-format
 msgid "WARNING: unsafe ownership on homedir '%s'\n"
-msgstr "警告:用户目录‘%s’所有权不安全\n"
+msgstr "警告:家目录‘%s’的所有权不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe ownership on configuration file `%s'\n"
+#, c-format
 msgid "WARNING: unsafe ownership on configuration file '%s'\n"
-msgstr "警告:配置文件‘%s’所有权不安全\n"
+msgstr "警告:配置文件‘%s’所有权不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe ownership on extension `%s'\n"
+#, c-format
 msgid "WARNING: unsafe ownership on extension '%s'\n"
-msgstr "警告:扩展模块‘%s’所有权不安全\n"
+msgstr "警告:扩展模块‘%s’所有权不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe permissions on homedir `%s'\n"
+#, c-format
 msgid "WARNING: unsafe permissions on homedir '%s'\n"
-msgstr "警告:用户目录‘%s’权限不安全\n"
+msgstr "警告:家目录‘%s’的权限位不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe permissions on configuration file `%s'\n"
+#, c-format
 msgid "WARNING: unsafe permissions on configuration file '%s'\n"
-msgstr "警告:配置文件‘%s’权限不安全\n"
+msgstr "警告:配置文件‘%s’的权限位不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe permissions on extension `%s'\n"
+#, c-format
 msgid "WARNING: unsafe permissions on extension '%s'\n"
-msgstr "警告:扩展模块‘%s’权限不安全\n"
+msgstr "警告:扩展模块‘%s’的权限位不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n"
+#, c-format
 msgid "WARNING: unsafe enclosing directory ownership on homedir '%s'\n"
-msgstr "警告:用户目录‘%s’的关闭目录所有权不安全\n"
+msgstr "警告:家目录‘%s’的上级目录所有权不安全\n"
 
-#, fuzzy, c-format
-#| msgid ""
-#| "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n"
+#, c-format
 msgid ""
 "WARNING: unsafe enclosing directory ownership on configuration file '%s'\n"
-msgstr "警告:配置文件‘%s’的关闭目录所有权不安全\n"
+msgstr "警告:配置文件‘%s’的上级目录所有权不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n"
+#, c-format
 msgid "WARNING: unsafe enclosing directory ownership on extension '%s'\n"
-msgstr "警告:扩展模块‘%s’的关闭目录所有权不安全\n"
+msgstr "警告:扩展模块‘%s’的上级目录所有权不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n"
+#, c-format
 msgid "WARNING: unsafe enclosing directory permissions on homedir '%s'\n"
-msgstr "警告:用户目录‘%s’的关闭目录权限不安全\n"
+msgstr "警告:家目录‘%s’的上级目录权限位不安全\n"
 
-#, fuzzy, c-format
-#| msgid ""
-#| "WARNING: unsafe enclosing directory permissions on configuration file `"
-#| "%s'\n"
+#, c-format
 msgid ""
 "WARNING: unsafe enclosing directory permissions on configuration file '%s'\n"
-msgstr "警告:配置文件‘%s’的关闭目录权限不安全\n"
+msgstr "警告:配置文件‘%s’的上级目录权限不安全\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n"
+#, c-format
 msgid "WARNING: unsafe enclosing directory permissions on extension '%s'\n"
-msgstr "警告:扩展模块‘%s’的关闭目录权限不安全\n"
+msgstr "警告:扩展模块‘%s’的上级目录权限位不安全\n"
 
-#, fuzzy, c-format
-#| msgid "unknown configuration item `%s'\n"
+#, c-format
 msgid "unknown configuration item '%s'\n"
 msgstr "未知的配置项‘%s’\n"
 
 msgid "display photo IDs during key listings"
-msgstr "å\88\97å\87ºå¯\86é\92¥æ\97¶æ\98¾ç¤ºç\94¨æ\88·标识"
+msgstr "å\88\97å\87ºå¯\86é\92¥æ\97¶æ\98¾ç¤ºç\85§ç\89\87标识"
 
-#, fuzzy
-#| msgid "show user ID validity during key listings"
 msgid "show key usage information during key listings"
-msgstr "列出密钥时显示用户标识的有效性"
+msgstr "列出密钥时显示用途信息"
 
 msgid "show policy URLs during signature listings"
 msgstr "列出签名时显示策略 URL"
 
 msgid "show all notations during signature listings"
-msgstr "列出签名时显示 IETF 标准注记"
+msgstr "列出签名时显示所有注记"
 
 msgid "show IETF standard notations during signature listings"
 msgstr "列出签名时显示 IETF 标准注记"
@@ -2270,7 +2098,7 @@ msgid "show user-supplied notations during signature listings"
 msgstr "列出签名时显示用户提供的注记"
 
 msgid "show preferred keyserver URLs during signature listings"
-msgstr "列出密钥时显示首选公钥服务器 URL"
+msgstr "列出签名时显示首选公钥服务器 URL"
 
 msgid "show user ID validity during key listings"
 msgstr "列出密钥时显示用户标识的有效性"
@@ -2279,7 +2107,7 @@ msgid "show revoked and expired user IDs in key listings"
 msgstr "列出密钥时显示已吊销或已过期的用户标识"
 
 msgid "show revoked and expired subkeys in key listings"
-msgstr "列出密钥时显示已吊销或已过期的子钥"
+msgstr "列出密钥时显示已吊销或已过期的子钥"
 
 msgid "show the keyring name in key listings"
 msgstr "列出密钥时显示钥匙环的名称"
@@ -2287,44 +2115,39 @@ msgstr "列出密钥时显示钥匙环的名称"
 msgid "show expiration dates during signature listings"
 msgstr "列出签名时显示过期日期"
 
-#, fuzzy, c-format
-#| msgid "unknown option `%s'\n"
+#, c-format
 msgid "unknown TOFU policy '%s'\n"
-msgstr "未知的选项 '%s'\n"
+msgstr "未知的 TOFU 政策‘%s’\n"
 
 #, c-format
 msgid "(use \"help\" to list choices)\n"
-msgstr ""
+msgstr "(使用“help”来列出选择)\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: old default options file `%s' ignored\n"
+#, c-format
 msgid "Note: old default options file '%s' ignored\n"
-msgstr "注意:旧的默认配置文件‘%s’已被忽略\n"
+msgstr "注意:旧的默认配置文件‘%s’已被忽略\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: %s is not for normal use!\n"
+#, c-format
 msgid "Note: %s is not for normal use!\n"
-msgstr "注意:一般情况下不会用到 %s!\n"
+msgstr "注意:%s 不适用于一般使用!\n"
 
-#, fuzzy, c-format
-#| msgid "`%s' is not a valid signature expiration\n"
+#, c-format
 msgid "'%s' is not a valid signature expiration\n"
 msgstr "‘%s’不是一个有效的签名过期日期\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "\"%s\" is not a proper mail address\n"
-msgstr "电子邮件地址无效\n"
+msgstr "“%s” 不是一个合适的邮件地址\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid pinentry mode '%s'\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "无效的 pinentry 模式‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid request origin '%s'\n"
-msgstr "无效的列表选项\n"
+msgstr "无效的请求来源‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "`%s' is not a valid character set\n"
+#, c-format
 msgid "'%s' is not a valid character set\n"
 msgstr "‘%s’不是一个有效的字符集\n"
 
@@ -2348,10 +2171,9 @@ msgstr "%s:%d:无效的导入选项\n"
 msgid "invalid import options\n"
 msgstr "无效的导入选项\n"
 
-#, fuzzy, c-format
-#| msgid "invalid list options\n"
+#, c-format
 msgid "invalid filter option: %s\n"
-msgstr "无效的列表选项\n"
+msgstr "无效的过滤选项:%s\n"
 
 #, c-format
 msgid "%s:%d: invalid export options\n"
@@ -2393,55 +2215,54 @@ msgstr "验证签名时显示用户标识的有效性"
 msgid "show revoked and expired user IDs in signature verification"
 msgstr "验证密钥时显示已吊销或已过期的子钥"
 
-#, fuzzy
 msgid "show only the primary user ID in signature verification"
-msgstr "验证密钥时显示已吊销或已过期的子钥"
+msgstr "在签名验证中只显示主要用户标识"
 
 msgid "validate signatures with PKA data"
-msgstr "使用 PKA 数据验证签名的有效性"
+msgstr "使用 PKA 数据验证签名"
 
 msgid "elevate the trust of signatures with valid PKA data"
 msgstr "提升带有有效 PKA 数据的签名的信任度"
 
 #, c-format
 msgid "%s:%d: invalid verify options\n"
-msgstr "%s:%d:无效的校验选项\n"
+msgstr "%s:%d: 无效的验证选项\n"
 
 #, c-format
 msgid "invalid verify options\n"
-msgstr "无效的校验选项\n"
+msgstr "无效的验证选项\n"
 
 #, c-format
 msgid "unable to set exec-path to %s\n"
-msgstr "无法把运行路径设成 %s\n"
+msgstr "无法设置运行路径为 %s\n"
 
 #, c-format
 msgid "%s:%d: invalid auto-key-locate list\n"
-msgstr "%s:%d:无效的 auto-key-locate 清单\n"
+msgstr "%s%d: 无效的 auto-key-locate 列表\n"
 
 #, c-format
 msgid "invalid auto-key-locate list\n"
-msgstr "无效的 auto-key-locate 清单\n"
+msgstr "无效的 auto-key-locate 列表\n"
 
 #, c-format
 msgid "WARNING: program may create a core file!\n"
-msgstr "警告:程序可能会创建核心内存转储!\n"
+msgstr "警告:程序可能会创建核心内存转储文件!\n"
 
 #, c-format
 msgid "WARNING: %s overrides %s\n"
-msgstr "警告:%s 会使得 %s 失效\n"
+msgstr "警告:%s 覆盖了 %s \n"
 
 #, c-format
 msgid "%s not allowed with %s!\n"
-msgstr "%s ä¸\8då\8f¯与 %s 并用\n"
+msgstr "%s ä¸\8då\85\81许与 %s 并用\n"
 
 #, c-format
 msgid "%s makes no sense with %s!\n"
-msgstr "%s ä¸\8e %s å¹¶ç\94¨æ\97 æ\84\8fä¹\89ï¼\81\n"
+msgstr "%s ä¸\8e %s å¹¶ç\94¨æ\97¶ä¸\8dèµ·ä½\9cç\94¨\n"
 
 #, c-format
 msgid "WARNING: running with faked system time: "
-msgstr ""
+msgstr "警告:正在以虚假的系统时间运行: "
 
 #, c-format
 msgid "will not run with insecure memory due to %s\n"
@@ -2449,7 +2270,7 @@ msgstr "不会在内存不安全的情况下运行,原因是 %s\n"
 
 #, c-format
 msgid "selected cipher algorithm is invalid\n"
-msgstr "æ\89\80é\80\89ç\9a\84对称å\8a å¯\86算法无效\n"
+msgstr "æ\89\80é\80\89ç\9a\84å¯\86æ\96\87算法无效\n"
 
 #, c-format
 msgid "selected compression algorithm is invalid\n"
@@ -2459,30 +2280,29 @@ msgstr "所选的压缩算法无效\n"
 msgid "selected certification digest algorithm is invalid\n"
 msgstr "所选的证书散列算法无效\n"
 
-#, c-format
+#, fuzzy, c-format
 msgid "completes-needed must be greater than 0\n"
 msgstr "需要的完全可信签名数一定要大于 0\n"
 
-#, c-format
+#, fuzzy, c-format
 msgid "marginals-needed must be greater than 1\n"
 msgstr "需要的勉强可信签名数一定要大于 1\n"
 
 #, c-format
 msgid "max-cert-depth must be in the range from 1 to 255\n"
-msgstr "最大验证深度一定要介于 1 和 255 之间\n"
+msgstr "最大证书链深度(max-cert-depth)一定要介于 1 和 255 之间\n"
 
 #, c-format
 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n"
-msgstr "无效的默认验证级别;一定要是 0,1,2 或 3\n"
+msgstr "无效的默认认证级别(default-cert-level);必须为 0,1,2 或 3\n"
 
 #, c-format
 msgid "invalid min-cert-level; must be 1, 2, or 3\n"
-msgstr "无效的最小验证级别;一定要是 1,2 或 3\n"
+msgstr "无效的最小认证级别(default-cert-level);必须为 1,2 或 3\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
+#, c-format
 msgid "Note: simple S2K mode (0) is strongly discouraged\n"
-msgstr "注意:强烈不建议使用简单的 S2K 模式(0)\n"
+msgstr "注意:强烈不建议使用简单的 S2K 模式 (0)\n"
 
 #, c-format
 msgid "invalid S2K mode; must be 0, 1 or 3\n"
@@ -2490,15 +2310,15 @@ msgstr "无效的 S2K 模式;必须是 0,1 或 3\n"
 
 #, c-format
 msgid "invalid default preferences\n"
-msgstr "无效的默认首选项\n"
+msgstr "无效的默认偏好设置\n"
 
 #, c-format
 msgid "invalid personal cipher preferences\n"
-msgstr "æ\97 æ\95\88ç\9a\84个人对称å\8a å¯\86ç®\97æ³\95é¦\96é\80\89项\n"
+msgstr "æ\97 æ\95\88ç\9a\84个人å¯\86æ\96\87å\81\8f好设置\n"
 
 #, c-format
 msgid "invalid personal digest preferences\n"
-msgstr "æ\97 æ\95\88ç\9a\84个人æ\95£å\88\97ç®\97æ³\95é¦\96é\80\89项\n"
+msgstr "æ\97 æ\95\88ç\9a\84个人æ\91\98è¦\81ç®\97æ³\95å\81\8f好设置\n"
 
 #, c-format
 msgid "invalid personal compress preferences\n"
@@ -2508,15 +2328,13 @@ msgstr "无效的个人压缩算法首选项\n"
 msgid "%s does not yet work with %s\n"
 msgstr "%s 尚不能和 %s 并用\n"
 
-#, fuzzy, c-format
-#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
+#, c-format
 msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "æ\82¨ä¸\8dè\83½å\9c¨ %s æ¨¡å¼\8fä¸\8b使ç\94¨â\80\98%sâ\80\99æ\95£å\88\97ç®\97æ³\95\n"
+msgstr "æ\91\98è¦\81ç®\97æ³\95â\80\98%sâ\80\99ä¸\8dè\83½å\9c¨ %s æ¨¡å¼\8fä¸\8b使ç\94¨\n"
 
-#, fuzzy, c-format
-#| msgid "you may not use compression algorithm `%s' while in %s mode\n"
+#, c-format
 msgid "compression algorithm '%s' may not be used in %s mode\n"
-msgstr "您不能在 %s 模式下使用‘%s’压缩算法\n"
+msgstr "压缩算法‘%s’不能在 %s 模式下使用\n"
 
 #, c-format
 msgid "failed to initialize the TrustDB: %s\n"
@@ -2524,34 +2342,31 @@ msgstr "初始化信任度数据库失败:%s\n"
 
 #, c-format
 msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr "è­¦å\91\8aï¼\9aç»\99å®\9aäº\86æ\94¶ä»¶äºº(-r)但并未使用公钥加密\n"
+msgstr "è­¦å\91\8aï¼\9aç»\99å®\9aäº\86æ\8e¥æ\94¶è\80\85ï¼\88-rï¼\89但并未使用公钥加密\n"
 
-#, fuzzy, c-format
-#| msgid "symmetric encryption of `%s' failed: %s\n"
+#, c-format
 msgid "symmetric encryption of '%s' failed: %s\n"
 msgstr "对称加密‘%s’失败:%s\n"
 
 #, c-format
 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n"
-msgstr "使用 --symmetric --encrypt 时不能使用 --s2k-mode 0\n"
+msgstr "您不能在使用 --symmetric --encrypt 时使用 --s2k-mode 0\n"
 
-#, fuzzy, c-format
-#| msgid "you cannot use --symmetric --encrypt while in %s mode\n"
+#, c-format
 msgid "you cannot use --symmetric --encrypt in %s mode\n"
 msgstr "您不能在 %s 模式下使用 --symmetric -encrypt\n"
 
 #, c-format
 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n"
-msgstr "使用 --symmetric --sign --encrypt 时不能使用 --s2k-mode 0\n"
+msgstr "您不能在使用 --symmetric --sign --encrypt 时使用 --s2k-mode 0\n"
 
-#, fuzzy, c-format
-#| msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n"
+#, c-format
 msgid "you cannot use --symmetric --sign --encrypt in %s mode\n"
 msgstr "您不能在 %s 模式下使用 --symmetric --sign -encrypt\n"
 
 #, c-format
 msgid "keyserver send failed: %s\n"
-msgstr "上传至公钥服务器失败:%s\n"
+msgstr "发送至公钥服务器失败:%s\n"
 
 #, c-format
 msgid "keyserver receive failed: %s\n"
@@ -2561,51 +2376,49 @@ msgstr "从公钥服务器接收失败:%s\n"
 msgid "key export failed: %s\n"
 msgstr "导出密钥失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "key export failed: %s\n"
+#, c-format
 msgid "export as ssh key failed: %s\n"
-msgstr "导出密钥失败:%s\n"
+msgstr "作为 ssh 密钥导出失败:%s\n"
 
 #, c-format
 msgid "keyserver search failed: %s\n"
-msgstr "搜寻公钥服务器失败:%s\n"
+msgstr "公钥服务器搜索失败:%s\n"
 
 #, c-format
 msgid "keyserver refresh failed: %s\n"
-msgstr "从公钥服务器更新失败:%s\n"
+msgstr "公钥服务器刷新失败:%s\n"
 
 #, c-format
 msgid "dearmoring failed: %s\n"
-msgstr "解开 ASCII 封装失败:%s\n"
+msgstr "解开字符封装时失败:%s\n"
 
 #, c-format
 msgid "enarmoring failed: %s\n"
-msgstr "进行 ASCII 封装失败:%s\n"
+msgstr "进行字符封装时失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "invalid hash algorithm `%s'\n"
+#, c-format
 msgid "invalid hash algorithm '%s'\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "无效的散列算法‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error parsing key specification '%s': %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "解析密钥指定‘%s’时出现错误:%s\n"
 
 #, c-format
 msgid "'%s' does not appear to be a valid key ID, fingerprint or keygrip\n"
-msgstr ""
+msgstr "‘%s’不像是一个有效的密钥标识、指纹或者 keygrip\n"
 
 #, c-format
 msgid "WARNING: no command supplied.  Trying to guess what you mean ...\n"
-msgstr ""
+msgstr "警告:没有提供命令。正在尝试猜测您的意图...\n"
 
 #, c-format
 msgid "Go ahead and type your message ...\n"
-msgstr "请开始键入您的报文……\n"
+msgstr "请开始输入您的消息…\n"
 
 #, c-format
 msgid "the given certification policy URL is invalid\n"
-msgstr "给定的的验证策略 URL 无效\n"
+msgstr "给定的的证书策略 URL 无效\n"
 
 #, c-format
 msgid "the given signature policy URL is invalid\n"
@@ -2615,109 +2428,99 @@ msgstr "给定的签名策略 URL 无效\n"
 msgid "the given preferred keyserver URL is invalid\n"
 msgstr "给定的首选公钥服务器 URL 无效\n"
 
-#, fuzzy
 msgid "|FILE|take the keys from the keyring FILE"
-msgstr "从这个钥匙环里取用密钥"
+msgstr "|FILE|从钥匙环 FILE 文件中取得密钥"
 
 msgid "make timestamp conflicts only a warning"
-msgstr "把时间戳矛盾仅视为警告"
+msgstr "把时间戳冲突仅视为警告"
 
 msgid "|FD|write status info to this FD"
 msgstr "|FD|把状态信息写入文件描述符 FD"
 
 msgid "|ALGO|reject signatures made with ALGO"
-msgstr ""
+msgstr "|ALGO|拒绝由 ALGO 生成的签名"
 
 msgid "Usage: gpgv [options] [files] (-h for help)"
-msgstr "用法:gpgv [选项] [文件] (用 -h 求助)"
+msgstr "用法:gpgv [选项] [文件] (-h 获取帮助)"
 
-#, fuzzy
 msgid ""
 "Syntax: gpgv [options] [files]\n"
 "Check signatures against known trusted keys\n"
 msgstr ""
-"语法:gpg [选项] [文件]\n"
-"用已知的受信任密钥来检查签名\n"
+"语法:gpgv [选项] [文件]\n"
+"检查已知可信密钥的签名\n"
 
 msgid "No help available"
 msgstr "没有可用的帮助"
 
-#, fuzzy, c-format
-#| msgid "No help available for `%s'"
+#, c-format
 msgid "No help available for '%s'"
-msgstr "‘%s’没有可用的帮助"
+msgstr "没有关于‘%s’的可用帮助"
 
 msgid "import signatures that are marked as local-only"
-msgstr "导入被标记为局部的签名"
+msgstr "导入被标记为仅限本地(local-only)的签名"
 
 msgid "repair damage from the pks keyserver during import"
-msgstr "导入时修复 PKS 公钥服务器导致的损坏"
+msgstr "导入时修复源于 PKS 公钥服务器的损坏"
 
-#, fuzzy
-#| msgid "do not update the trustdb after import"
 msgid "do not clear the ownertrust values during import"
-msgstr "导å\85¥å\90\8eä¸\8dæ\9b´æ\96°ä¿¡ä»»åº¦æ\95°æ\8d®åº\93"
+msgstr "å\9c¨å¯¼å\85¥æ\9c\9fé\97´ä¸\8dæ¸\85é\99¤ä¿¡ä»»åº¦"
 
 msgid "do not update the trustdb after import"
 msgstr "导入后不更新信任度数据库"
 
-#, fuzzy
-#| msgid "show key fingerprint"
 msgid "show key during import"
-msgstr "显示密钥指纹"
+msgstr "在导入时显示密钥"
 
 msgid "only accept updates to existing keys"
-msgstr "只接受对有密钥的更新"
+msgstr "只接受对有密钥的更新"
 
 msgid "remove unusable parts from key after import"
-msgstr "导入后除密钥中无用的部分"
+msgstr "导入后除密钥中无用的部分"
 
 msgid "remove as much as possible from key after import"
-msgstr "导入后尽可能除密钥中的可选部分"
+msgstr "导入后尽可能多地移除密钥中的可选部分"
 
 msgid "run import filters and export key immediately"
-msgstr ""
+msgstr "运行导入过滤器并立即导出密钥"
 
 msgid "assume the GnuPG key backup format"
-msgstr ""
+msgstr "假定为 GnuPG 密钥备份格式"
 
-#, fuzzy
-#| msgid "show key fingerprint"
 msgid "repair keys on import"
-msgstr "显示密钥指纹"
+msgstr "在导入期间修复密钥"
 
 #, c-format
 msgid "skipping block of type %d\n"
-msgstr "跳过 %d 样式的区块\n"
+msgstr "跳过 %d 类型的块\n"
 
 #, c-format
 msgid "%lu keys processed so far\n"
-msgstr "目前已处理 %lu 密钥\n"
+msgstr "目前已处理 %lu 密钥\n"
 
 #, c-format
 msgid "Total number processed: %lu\n"
-msgstr "å\90\88计被å¤\84ç\90\86ç\9a\84æ\95°é\87\8f:%lu\n"
+msgstr "å¤\84ç\90\86ç\9a\84æ\80»æ\95°:%lu\n"
 
-#, fuzzy, c-format
-#| msgid "      skipped new keys: %lu\n"
+#, c-format
 msgid "    skipped PGP-2 keys: %lu\n"
-msgstr "  已跳过的新密钥:%lu\n"
+msgstr "    已跳过的 PGP-2 密钥:%lu\n"
 
 #, c-format
 msgid "      skipped new keys: %lu\n"
-msgstr "  已跳过的新密钥:%lu\n"
+msgstr "      已跳过的新密钥:%lu\n"
 
 #, c-format
 msgid "          w/o user IDs: %lu\n"
-msgstr "    遗失用户标识:%lu\n"
+msgstr "          缺少用户标识:%lu\n"
 
 #, c-format
 msgid "              imported: %lu"
-msgstr "          已导入:%lu"
+msgstr "              已导入:%lu"
 
 #, c-format
 msgid "             unchanged: %lu\n"
-msgstr "          未改变:%lu\n"
+msgstr "             未改变:%lu\n"
 
 #, c-format
 msgid "          new user IDs: %lu\n"
@@ -2725,7 +2528,7 @@ msgstr "      新用户标识:%lu\n"
 
 #, c-format
 msgid "           new subkeys: %lu\n"
-msgstr "        新的子钥:%lu\n"
+msgstr "        新的子钥:%lu\n"
 
 #, c-format
 msgid "        new signatures: %lu\n"
@@ -2733,7 +2536,7 @@ msgstr "        新的签名:%lu\n"
 
 #, c-format
 msgid "   new key revocations: %lu\n"
-msgstr "    新的密钥吊销:%lu\n"
+msgstr "   新的密钥吊销:%lu\n"
 
 #, c-format
 msgid "      secret keys read: %lu\n"
@@ -2741,33 +2544,35 @@ msgstr "      读取的私钥:%lu\n"
 
 #, c-format
 msgid "  secret keys imported: %lu\n"
-msgstr "      导入的私钥:%lu\n"
+msgstr "  导入的私钥:%lu\n"
 
 #, c-format
 msgid " secret keys unchanged: %lu\n"
-msgstr "    未改变的私钥:%lu\n"
+msgstr " 未改变的私钥:%lu\n"
 
 #, c-format
 msgid "          not imported: %lu\n"
-msgstr "        未被导入:%lu\n"
+msgstr "          未被导入:%lu\n"
 
 #, c-format
 msgid "    signatures cleaned: %lu\n"
-msgstr "      清除的签名:%lu\n"
+msgstr "    清理的签名:%lu\n"
 
 #, c-format
 msgid "      user IDs cleaned: %lu\n"
-msgstr "  清除的用户标识:%lu\n"
+msgstr "      清理的用户标识:%lu\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "WARNING: key %s contains preferences for unavailable\n"
 "algorithms on these user IDs:\n"
-msgstr "警告:密钥 %s 下列用户标识的首选项中包含不可用的算法:\n"
+msgstr ""
+"警告:密钥 %s 包含了不可用算法的偏好设置\n"
+"于下列用户标识上:\n"
 
 #, c-format
 msgid "         \"%s\": preference for cipher algorithm %s\n"
-msgstr "         â\80\9c%sâ\80\9dï¼\9a对称å\8a å¯\86ç®\97æ³\95 %s å¯¹åº\94首选项\n"
+msgstr "         â\80\9c%sâ\80\9dï¼\9aå¯\86æ\96\87ç®\97æ³\95 %s ç\9a\84首选项\n"
 
 #, c-format
 msgid "         \"%s\": preference for digest algorithm %s\n"
@@ -2779,7 +2584,7 @@ msgstr "         “%s”:压缩算法 %s 对应首选项\n"
 
 #, c-format
 msgid "it is strongly suggested that you update your preferences and\n"
-msgstr "强烈建议您更新您的首选项并重新分发这把密钥,\n"
+msgstr "强烈建议您更新您的偏好设置并重新分发这个密钥\n"
 
 #, c-format
 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n"
@@ -2787,27 +2592,26 @@ msgstr "以避免可能的算法不匹配问题\n"
 
 #, c-format
 msgid "you can update your preferences with: gpg --edit-key %s updpref save\n"
-msgstr "您可以这样更新您的首选项:gpg --edit-key %s updpref save\n"
+msgstr "您可以这样更新您的偏好设置:gpg --edit-key %s updpref save\n"
 
 #, c-format
 msgid "key %s: no user ID\n"
 msgstr "密钥 %s:没有用户标识\n"
 
-#, fuzzy, c-format
-#| msgid "skipped \"%s\": %s\n"
+#, c-format
 msgid "key %s: %s\n"
-msgstr "“%s”已跳过:%s\n"
+msgstr "密钥 %s: %s\n"
 
 msgid "rejected by import screener"
-msgstr ""
+msgstr "被导入筛查器拒绝"
 
 #, c-format
 msgid "key %s: PKS subkey corruption repaired\n"
-msgstr "密钥 %s:PKS 子钥破损已修复\n"
+msgstr "密钥%s:PKS 子密钥破损已修复\n"
 
 #, c-format
 msgid "key %s: accepted non self-signed user ID \"%s\"\n"
-msgstr "密钥 %s:已接受不含自身签名的用户标识“%s”\n"
+msgstr "密钥 %s:已接受不含自签名的用户标识 “%s”\n"
 
 #, c-format
 msgid "key %s: no valid user IDs\n"
@@ -2815,7 +2619,7 @@ msgstr "密钥 %s:没有有效的用户标识\n"
 
 #, c-format
 msgid "this may be caused by a missing self-signature\n"
-msgstr "这可能由于遗失自签名所致\n"
+msgstr "这可能由于遗失自签名所致\n"
 
 #, c-format
 msgid "key %s: public key not found: %s\n"
@@ -2823,94 +2627,91 @@ msgstr "密钥 %s:找不到公钥:%s\n"
 
 #, c-format
 msgid "key %s: new key - skipped\n"
-msgstr "密钥 %s:新密钥――已跳过\n"
+msgstr "密钥 %s:新密钥 - 已跳过\n"
 
 #, c-format
 msgid "no writable keyring found: %s\n"
 msgstr "找不到可写的钥匙环:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error writing keyring `%s': %s\n"
+#, c-format
 msgid "error writing keyring '%s': %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "写入钥匙环 ‘%s’ 时出现错误: %s\n"
 
 #, c-format
 msgid "key %s: public key \"%s\" imported\n"
-msgstr "密钥 %s:公钥“%s”已导入\n"
+msgstr "密钥 %s:公钥 “%s” 已导入\n"
 
 #, c-format
 msgid "key %s: doesn't match our copy\n"
-msgstr "密钥 %s:与我们的副本不合\n"
+msgstr "密钥 %s:与我们的副本不合\n"
 
 #, c-format
 msgid "key %s: \"%s\" 1 new user ID\n"
-msgstr "密钥 %s:“%s”个新的用户标识\n"
+msgstr "密钥 %s:“%s” 1 个新的用户标识\n"
 
 #, c-format
 msgid "key %s: \"%s\" %d new user IDs\n"
-msgstr "密钥 %s:“%s”%d 个新的用户标识\n"
+msgstr "密钥 %s:“%s” %d 个新的用户标识\n"
 
 #, c-format
 msgid "key %s: \"%s\" 1 new signature\n"
-msgstr "密钥 %s:“%s”1 个新的签名\n"
+msgstr "密钥 %s:“%s” 1 个新的签名\n"
 
 #, c-format
 msgid "key %s: \"%s\" %d new signatures\n"
-msgstr "密钥 %s:“%s”%d 个新的签名\n"
+msgstr "密钥 %s:“%s” %d 个新的签名\n"
 
 #, c-format
 msgid "key %s: \"%s\" 1 new subkey\n"
-msgstr "密钥 %s:“%s”1 个新的子钥\n"
+msgstr "密钥 %s:“%s” 1 个新的子密钥\n"
 
 #, c-format
 msgid "key %s: \"%s\" %d new subkeys\n"
-msgstr "密钥 %s:“%s”%d 个新的子钥\n"
+msgstr "密钥 %s:“%s” %d 个新的子密钥\n"
 
 #, c-format
 msgid "key %s: \"%s\" %d signature cleaned\n"
-msgstr "密钥 %s:“%s”%d 个签名被清除\n"
+msgstr "密钥 %s:“%s” %d 个签名被清理\n"
 
 #, c-format
 msgid "key %s: \"%s\" %d signatures cleaned\n"
-msgstr "密钥 %s:“%s”%d 个签名被清除\n"
+msgstr "密钥 %s:“%s” %d 个签名被清理\n"
 
 #, c-format
 msgid "key %s: \"%s\" %d user ID cleaned\n"
-msgstr "密钥 %s:“%s”%d 个用户标识被清除\n"
+msgstr "密钥 %s:“%s” %d 个用户标识被清理\n"
 
 #, c-format
 msgid "key %s: \"%s\" %d user IDs cleaned\n"
-msgstr "密钥 %s:“%s”%d 个用户标识被清除\n"
+msgstr "密钥 %s:“%s” %d 个用户标识被清理\n"
 
 #, c-format
 msgid "key %s: \"%s\" not changed\n"
-msgstr "密钥 %s:“%s”未改变\n"
+msgstr "密钥 %s:“%s” 未改变\n"
 
 #, c-format
 msgid "key %s: secret key imported\n"
 msgstr "密钥 %s:私钥已导入\n"
 
-#, fuzzy, c-format
-#| msgid "skipped: secret key already present\n"
+#, c-format
 msgid "key %s: secret key already exists\n"
-msgstr "已跳è¿\87:私钥已存在\n"
+msgstr "å¯\86é\92¥ %s:私钥已存在\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "key %s: error sending to agent: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "密钥 %s:发送至代理人程序时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "secret key \"%s\" not found: %s\n"
+#, c-format
 msgid "secret key %s: %s\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "私钥 %s:%s\n"
 
 #, c-format
 msgid "importing secret keys not allowed\n"
-msgstr "不允许导入私钥\n"
+msgstr "私钥导入被禁止\n"
 
 #, c-format
 msgid "key %s: secret key with invalid cipher %d - skipped\n"
-msgstr "å¯\86é\92¥ %sï¼\9aç§\81é\92¥ä½¿ç\94¨äº\86æ\97 æ\95\88ç\9a\84å\8a å¯\86ç®\97æ³\95 %dâ\80\95â\80\95已跳过\n"
+msgstr "å¯\86é\92¥ %sï¼\9aç§\81é\92¥ä½¿ç\94¨äº\86æ\97 æ\95\88ç\9a\84å¯\86æ\96\87ç®\97æ³\95 %d - 已跳过\n"
 
 #. TRANSLATORS: For smartcard, each private key on
 #. host has a reference (stub) to a smartcard and
@@ -2924,7 +2725,7 @@ msgstr "密钥 %s:私钥使用了无效的加密算法 %d――已跳过\n"
 #. created again.
 #, c-format
 msgid "To migrate '%s', with each smartcard, run: %s\n"
-msgstr ""
+msgstr "要迁移 ‘%s’,对每一张智能卡,执行:%s\n"
 
 msgid "No reason specified"
 msgstr "未指定原因"
@@ -2943,15 +2744,15 @@ msgstr "用户标识不再有效"
 
 #, c-format
 msgid "reason for revocation: "
-msgstr "吊销原因:"
+msgstr "吊销原因: "
 
 #, c-format
 msgid "revocation comment: "
-msgstr "吊销注释:"
+msgstr "吊销注释: "
 
 #, c-format
 msgid "key %s: no public key - can't apply revocation certificate\n"
-msgstr "密钥 %s:没有公钥――无法应用吊销证书\n"
+msgstr "密钥 %s:没有公钥 - 无法应用吊销证书\n"
 
 #, c-format
 msgid "key %s: can't locate original keyblock: %s\n"
@@ -2959,15 +2760,15 @@ msgstr "密钥 %s:无法定位原始的密钥区块:%s\n"
 
 #, c-format
 msgid "key %s: can't read original keyblock: %s\n"
-msgstr "密钥 %s:无法读取原始的密钥区块: %s\n"
+msgstr "密钥 %s:无法读取原始的密钥区块:%s\n"
 
 #, c-format
 msgid "key %s: invalid revocation certificate: %s - rejected\n"
-msgstr "密钥 %s:无效的吊销证书:%s――已拒绝\n"
+msgstr "密钥 %s:无效的吊销证书:%s - 已拒绝\n"
 
 #, c-format
 msgid "key %s: \"%s\" revocation certificate imported\n"
-msgstr "密钥 %s:“%s”吊销证书已被导入\n"
+msgstr "密钥 %s:“%s” 吊销证书已被导入\n"
 
 #, c-format
 msgid "key %s: no user ID for signature\n"
@@ -2975,59 +2776,55 @@ msgstr "密钥 %s:签名没有用户标识\n"
 
 #, c-format
 msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n"
-msgstr "密钥 %s:用户标识“%s”使用了不支持的公钥算法\n"
+msgstr "密钥 %s:用户标识 “%s” 使用了不支持的公钥算法\n"
 
 #, c-format
 msgid "key %s: invalid self-signature on user ID \"%s\"\n"
-msgstr "密钥 %s:用户标识“%s”自身签名无效\n"
+msgstr "密钥 %s:用户标识 “%s” 自身签名无效\n"
 
 #, c-format
 msgid "key %s: unsupported public key algorithm\n"
 msgstr "密钥 %s:不支持的公钥算法\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "key %s: invalid direct key signature\n"
-msgstr "密钥 %s:已新增直接密钥签名\n"
+msgstr "密钥 %s:无效的直接密钥签名\n"
 
 #, c-format
 msgid "key %s: no subkey for key binding\n"
-msgstr "密钥 %s:没有可供绑定的子钥\n"
+msgstr "密钥 %s:没有可供绑定的子钥\n"
 
 #, c-format
 msgid "key %s: invalid subkey binding\n"
-msgstr "密钥 %s:无效的子钥绑定\n"
+msgstr "密钥 %s:无效的子钥绑定\n"
 
 #, c-format
 msgid "key %s: removed multiple subkey binding\n"
-msgstr "密钥 %s:已删除多重子钥绑定\n"
+msgstr "密钥 %s:已删除多重子钥绑定\n"
 
 #, c-format
 msgid "key %s: no subkey for key revocation\n"
-msgstr "å¯\86é\92¥ %sï¼\9a没æ\9c\89ç\94¨äº\8eå¯\86é\92¥å\90\8aé\94\80ç\9a\84å­\90钥\n"
+msgstr "å¯\86é\92¥ %sï¼\9a没æ\9c\89ç\94¨äº\8eå¯\86é\92¥å\90\8aé\94\80ç\94¨ç\9a\84å­\90å¯\86钥\n"
 
 #, c-format
 msgid "key %s: invalid subkey revocation\n"
-msgstr "密钥 %s:无效的子钥吊销\n"
+msgstr "密钥 %s:无效的子钥吊销\n"
 
 #, c-format
 msgid "key %s: removed multiple subkey revocation\n"
-msgstr "密钥 %s:已删除多重子钥吊销\n"
+msgstr "密钥 %s:已删除多重子钥吊销\n"
 
 #, c-format
 msgid "key %s: skipped user ID \"%s\"\n"
-msgstr "密钥 %s:已跳过用户标识“%s”\n"
+msgstr "密钥 %s:已跳过用户标识 “%s”\n"
 
 #, c-format
 msgid "key %s: skipped subkey\n"
-msgstr "密钥 %s:已跳过子钥\n"
+msgstr "密钥 %s:已跳过子钥\n"
 
-#  here we violate the rfc a bit by still allowing
-#  * to import non-exportable signature when we have the
-#  * the secret key used to create this signature - it
-#  * seems that this makes sense
 #, c-format
 msgid "key %s: non exportable signature (class 0x%02X) - skipped\n"
-msgstr "密钥 %s:不可导出的签名(验证级别 0x%02X)――已跳过\n"
+msgstr "密钥 %s:非可导出签名(验证级别 0x%02X)- 已跳过\n"
 
 #, c-format
 msgid "key %s: revocation certificate at wrong place - skipped\n"
@@ -3039,58 +2836,55 @@ msgstr "密钥 %s:无效的吊销证书:%s――已跳过\n"
 
 #, c-format
 msgid "key %s: subkey signature in wrong place - skipped\n"
-msgstr "密钥 %s:子钥签名位置错误――已跳过\n"
+msgstr "密钥 %s:子钥签名位置错误 - 已跳过\n"
 
 #, c-format
 msgid "key %s: unexpected signature class (0x%02X) - skipped\n"
-msgstr "密钥 %s:与预期不符的签名验证级别(0x%02X)――已跳过\n"
+msgstr "密钥 %s:与预期不符的签名级别(0x%02X) - 已跳过\n"
 
 #, c-format
 msgid "key %s: duplicated user ID detected - merged\n"
-msgstr "密钥 %s:检测到重复的用户标识――已合并\n"
+msgstr "密钥 %s:检测到重复的用户标识 - 已合并\n"
 
 #, c-format
 msgid "WARNING: key %s may be revoked: fetching revocation key %s\n"
-msgstr "警告:密钥 %s 可能已被吊销:正在取回吊销密钥 %s\n"
+msgstr "警告:密钥 %s 可能已被吊销:正在取回吊销密钥 %s\n"
 
 #, c-format
 msgid "WARNING: key %s may be revoked: revocation key %s not present.\n"
-msgstr "警告:密钥 %s 可能已被吊销:吊销密钥 %s 不存在。\n"
+msgstr "警告:密钥 %s 可能已被吊销:吊销密钥 %s 不存在。\n"
 
 #, c-format
 msgid "key %s: \"%s\" revocation certificate added\n"
-msgstr "å¯\86é\92¥ %sï¼\9aå·²æ\96°å¢\9eå\90\8aé\94\80è¯\81书“%s”\n"
+msgstr "å¯\86é\92¥ %sï¼\9a已添å\8a å\90\8aé\94\80è¯\81书 “%s”\n"
 
 #, c-format
 msgid "key %s: direct key signature added\n"
-msgstr "å¯\86é\92¥ %sï¼\9aå·²æ\96°å¢\9e直接密钥签名\n"
+msgstr "å¯\86é\92¥ %sï¼\9a已添å\8a 直接密钥签名\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating keybox '%s': %s\n"
-msgstr "建ç«\8bé\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99æ\97¶å\8f\91ç\94\9f错误:%s\n"
+msgstr "å\88\9b建é\92¥å\8c\99ç®±â\80\98%sâ\80\99æ\97¶å\87ºç\8e°错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
+#, c-format
 msgid "error creating keyring '%s': %s\n"
-msgstr "建ç«\8bé\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99æ\97¶å\8f\91ç\94\9f错误:%s\n"
+msgstr "å\88\9b建é\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99æ\97¶å\87ºç\8e°错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "keybox '%s' created\n"
-msgstr "é\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99已建ç«\8b\n"
+msgstr "é\92¥å\8c\99ç®±â\80\98%sâ\80\99å·²å\88\9b建\n"
 
-#, fuzzy, c-format
-#| msgid "keyring `%s' created\n"
+#, c-format
 msgid "keyring '%s' created\n"
-msgstr "é\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99已建ç«\8b\n"
+msgstr "é\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99å·²å\88\9b建\n"
 
-#, fuzzy, c-format
-#| msgid "keyblock resource `%s': %s\n"
+#, c-format
 msgid "keyblock resource '%s': %s\n"
-msgstr "密钥块资源‘%s’:%s\n"
+msgstr "å¯\86é\92¥å\8cºå\9d\97èµ\84æº\90â\80\98%sâ\80\99ï¼\9a%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error opening key DB: %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "打开密钥数据库时出现错误:%s\n"
 
 #, c-format
 msgid "failed to rebuild keyring cache: %s\n"
@@ -3100,7 +2894,7 @@ msgid "[revocation]"
 msgstr "[吊销]"
 
 msgid "[self-signature]"
-msgstr "[自签名]"
+msgstr "[自签名]"
 
 msgid ""
 "Please decide how far you trust this user to correctly verify other users' "
@@ -3108,9 +2902,8 @@ msgid ""
 "(by looking at passports, checking fingerprints from different sources, "
 "etc.)\n"
 msgstr ""
-"您是否相信这位用户有能力验证其他用户密钥的有效性(查对身份证、通过不同的渠道检"
-"查\n"
-"指纹等)?\n"
+"请决定您对这名用户能否正确地验证其他用户密钥\n"
+"(通过查看护照,检查不同来源的的指纹等等)的相信程度\n"
 
 #, c-format
 msgid "  %d = I trust marginally\n"
@@ -3125,101 +2918,102 @@ msgid ""
 "A depth greater than 1 allows the key you are signing to make\n"
 "trust signatures on your behalf.\n"
 msgstr ""
-"请输入这份信任签名的深度。\n"
-"深度若大于 1 则您将签名的这把密钥将可以以您的名义做出信任签名。\n"
+"请输入此信任签名的深度。\n"
+"深度若大于 1 您将签名的这个密钥将可以\n"
+"代表您进行信任签名。\n"
 
 msgid "Please enter a domain to restrict this signature, or enter for none.\n"
-msgstr "请输入这份签名的限制域,如果没有请按回车。\n"
+msgstr "请输入一个限制此签名的域,如果没有请按回车。\n"
 
 #, c-format
 msgid "Skipping user ID \"%s\", which is not a text ID.\n"
-msgstr ""
+msgstr "跳过用户标识 “%s”,其不是一个文字标识。\n"
 
 #, c-format
 msgid "User ID \"%s\" is revoked."
-msgstr "用户标识“%s”已被吊销。"
+msgstr "用户标识 “%s” 已被吊销。"
 
 msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "您仍然想要为它签名吗?(y/N)"
+msgstr "您仍然想要为它签名吗?(y/N) "
 
 msgid "  Unable to sign.\n"
 msgstr "  无法添加签名。\n"
 
 #, c-format
 msgid "User ID \"%s\" is expired."
-msgstr "用户标识“%s”已过期。"
+msgstr "用户标识 “%s” 已过期。"
 
 #, c-format
 msgid "User ID \"%s\" is not self-signed."
-msgstr "警告:用户标识“%s”不含自身签名。"
+msgstr "警告:用户标识 “%s” 不含自签名。"
 
 #, c-format
 msgid "User ID \"%s\" is signable.  "
-msgstr "可以为用户标识“%s”添加签名。"
+msgstr "用户标识 “%s” 可被签名。 "
 
 msgid "Sign it? (y/N) "
-msgstr "为其添加签名吗?(y/N)"
+msgstr "为其签名吗?(y/N) "
 
 #, c-format
 msgid ""
 "The self-signature on \"%s\"\n"
 "is a PGP 2.x-style signature.\n"
 msgstr ""
-"“%s”的自身签名是 PGP 2.x 样\n"
-"式的签名。\n"
+"“%s” 上的自签名是\n"
+"PGP 2.x 样式的签名。\n"
 
 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "您是否想要将它升级成 OpenPGP 的自身签名?(y/N)"
+msgstr "您是否想要将它升级成一个 OpenPGP 自签名?(y/N) "
 
 #, c-format
 msgid ""
 "Your current signature on \"%s\"\n"
 "has expired.\n"
-msgstr "您目前为“%s”的签名已经过期了。\n"
+msgstr "您当前在 “%s” 上的签名已过期。\n"
 
 msgid "Do you want to issue a new signature to replace the expired one? (y/N) "
-msgstr "æ\82¨æ\83³è¦\81å\8f\91å¸\83ä¸\80份æ\96°ç\9a\84ç­¾å\90\8dæ\9d¥å\8f\96代已è¿\87æ\9c\9fç\9a\84é\82£ä¸\80个å\90\97ï¼\9f(y/N)"
+msgstr "æ\82¨æ\98¯å\90¦æ\83³è¦\81ç­¾å\8f\91ä¸\80个æ\96°ç\9a\84ç­¾å\90\8dæ\9d¥å\8f\96代已è¿\87æ\9c\9fç\9a\84é\82£ä¸ªå\90\97ï¼\9f(y/N) "
 
 #, c-format
 msgid ""
 "Your current signature on \"%s\"\n"
 "is a local signature.\n"
-msgstr "您目前为“%s”的签名是一份本地签名。\n"
+msgstr "您目前为 “%s” 的签名是一个本地签名。\n"
 
 msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "您是否想要把它升级成可以完全导出的签名?(y/N)"
+msgstr "您是否想要把它升级成一个可完整导出的签名?(y/N) "
 
 #, c-format
 msgid "\"%s\" was already locally signed by key %s\n"
-msgstr "“%s”已由密钥 %s 在本地签名\n"
+msgstr "“%s” 已由密钥 %s 在本地签名\n"
 
 #, c-format
 msgid "\"%s\" was already signed by key %s\n"
-msgstr "“%s”已由密钥 %s 签名\n"
+msgstr "“%s” 已由密钥 %s 签名\n"
 
 msgid "Do you want to sign it again anyway? (y/N) "
-msgstr "您仍然想要为它再次签名吗?(y/N)"
+msgstr "您无论如何都要为它再次签名吗?(y/N) "
 
 #, c-format
 msgid "Nothing to sign with key %s\n"
-msgstr "没有东西可以密钥 %s 签名\n"
+msgstr "没有东西可以密钥 %s 签名\n"
 
 msgid "This key has expired!"
-msgstr "这把密钥已经过期!"
+msgstr "这个密钥已过期!"
 
 #, c-format
 msgid "This key is due to expire on %s.\n"
-msgstr "这密钥将在 %s 过期。\n"
+msgstr "这密钥将在 %s 过期。\n"
 
 msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "æ\82¨æ\83³è¦\81让æ\82¨ç\9a\84ç­¾å\90\8dä¹\9få\90\8cæ\97过期吗? (Y/n) "
+msgstr "æ\82¨æ\83³è¦\81让æ\82¨ç\9a\84ç­¾å\90\8dä¹\9få\9c¨å\90\8cä¸\80æ\97¶é\97´过期吗? (Y/n) "
 
 msgid ""
 "How carefully have you verified the key you are about to sign actually "
 "belongs\n"
 "to the person named above?  If you don't know what to answer, enter \"0\".\n"
 msgstr ""
-"æ\82¨æ\98¯å\90¦è°¨æ\85\8eå\9c°æ£\80æ\9f¥è¿\87ï¼\8c确认正è¦\81ç­¾å\90\8dç\9a\84å¯\86é\92¥ç\9a\84ç¡®å±\9eäº\8e以ä¸\8aå®\83æ\89\80声称ç\9a\84æ\89\80æ\9c\89è\80\85呢?\n"
+"æ\82¨æ\9c\89å¤\9aä»\94ç»\86å\9c°æ£\80æ\9f¥è¿\87æ\82¨æ­£è¦\81ç­¾å\90\8dç\9a\84å¯\86é\92¥ç¡®å®\9eå±\9eäº\8eå\85·æ\9c\89以ä¸\8aå\90\8då­\97ç\9a\84人呢?\n"
 "如果您不知道这个问题的答案,请输入“0”。\n"
 
 #, c-format
@@ -3238,67 +3032,63 @@ msgstr "   (2) 我随意检查过。 %s\n"
 msgid "   (3) I have done very careful checking.%s\n"
 msgstr "   (3) 我非常小心地检查过。 %s\n"
 
-#, fuzzy
-#| msgid "Your selection? (enter `?' for more information): "
 msgid "Your selection? (enter '?' for more information): "
-msgstr "您的选择?(输入‘?’以获得更多的信息):"
+msgstr "您的选择是?(输入‘?’以获得更多的信息): "
 
 #, c-format
 msgid ""
 "Are you sure that you want to sign this key with your\n"
 "key \"%s\" (%s)\n"
 msgstr ""
-"您真的确定要签名这密钥,使用您的密钥\n"
-"“%s”(%s)\n"
+"您真的确定要签名这密钥,使用您的密钥\n"
+"“%s” (%s)\n"
 
 msgid "This will be a self-signature.\n"
-msgstr "这将是一个自身签名。\n"
+msgstr "这将会是一个自签名。\n"
 
 msgid "WARNING: the signature will not be marked as non-exportable.\n"
-msgstr "警告:这份签名不会被标记为不可导出。\n"
+msgstr "警告:这份签名不会被标记为不可导出。\n"
 
 msgid "WARNING: the signature will not be marked as non-revocable.\n"
-msgstr "警告:这份签名不会被标记成不可吊销。\n"
+msgstr "警告:这份签名不会被标记成不可吊销。\n"
 
 msgid "The signature will be marked as non-exportable.\n"
-msgstr "这份签名会被标记成不可导出。\n"
+msgstr "这份签名会被标记成不可导出。\n"
 
 msgid "The signature will be marked as non-revocable.\n"
-msgstr "这份签名会被标记成不可吊销。\n"
+msgstr "这份签名会被标记成不可吊销。\n"
 
 msgid "I have not checked this key at all.\n"
-msgstr "我根本没有检查过这密钥。\n"
+msgstr "我根本没有检查过这密钥。\n"
 
 msgid "I have checked this key casually.\n"
-msgstr "我随意检查过这密钥。\n"
+msgstr "我随意检查过这密钥。\n"
 
 msgid "I have checked this key very carefully.\n"
-msgstr "我非常小心地检查过这密钥。\n"
+msgstr "我非常小心地检查过这密钥。\n"
 
 msgid "Really sign? (y/N) "
-msgstr "真的要签名吗?(y/N)"
+msgstr "真的要签名吗?(y/N) "
 
 #, c-format
 msgid "signing failed: %s\n"
 msgstr "签名时失败: %s\n"
 
 msgid "Key has only stub or on-card key items - no passphrase to change.\n"
-msgstr "å\8fªæ\9c\89å\8d ä½\8då¯\86é\92¥ï¼\8cæ\88\96è\80\85å¯\86é\92¥å­\98å\82¨å\9c¨å\8d¡ä¸\8aâ\80\94â\80\94没有密码可以更改。\n"
+msgstr "å¯\86é\92¥å\8fªæ\9c\89å­\98æ ¹æ\88\96è\80\85å\8d¡ä¸\8a项ç\9b® - 没有密码可以更改。\n"
 
-#, fuzzy, c-format
-#| msgid "error creating passphrase: %s\n"
+#, c-format
 msgid "key %s: error changing passphrase: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "密钥 %s:修改密码时出现错误:%s\n"
 
 msgid "save and quit"
-msgstr "保存并离开"
+msgstr "保存并退出"
 
 msgid "show key fingerprint"
 msgstr "显示密钥指纹"
 
-#, fuzzy
 msgid "show the keygrip"
-msgstr "输入注记:"
+msgstr "显示 keygrip"
 
 msgid "list key and user IDs"
 msgstr "列出密钥和用户标识"
@@ -3307,13 +3097,13 @@ msgid "select user ID N"
 msgstr "选择用户标识 N"
 
 msgid "select subkey N"
-msgstr "选择子钥 N"
+msgstr "选择子钥 N"
 
 msgid "check signatures"
 msgstr "检查签名"
 
 msgid "sign selected user IDs [* see below for related commands]"
-msgstr "为所选用户标识添加签名[* 参见下面的相关命令]"
+msgstr "为所选用户标识添加签名 [* 参见下面的相关命令]"
 
 msgid "sign selected user IDs locally"
 msgstr "为所选用户标识添加本地签名"
@@ -3334,52 +3124,52 @@ msgid "delete selected user IDs"
 msgstr "删除选定的用户标识"
 
 msgid "add a subkey"
-msgstr "添加一个子钥"
+msgstr "增加一个子密钥"
 
 msgid "add a key to a smartcard"
-msgstr "å\9c¨æ\99ºè\83½å\8d¡ä¸\8aæ·»å\8a ä¸\80æ\8a\8aå¯\86é\92¥"
+msgstr "å¢\9eå\8a ä¸\80个å¯\86é\92¥å\88°æ\99ºè\83½å\8d¡"
 
 msgid "move a key to a smartcard"
-msgstr "将一把密钥移动到智能卡上"
+msgstr "移动一个密钥到智能卡"
 
 msgid "move a backup key to a smartcard"
-msgstr "将备份密钥转移到卡上"
+msgstr "移动一个备份密钥到智能卡上"
 
 msgid "delete selected subkeys"
-msgstr "删除选定的子钥"
+msgstr "删除选定的子钥"
 
 msgid "add a revocation key"
-msgstr "增加一把吊销密钥"
+msgstr "增加一个吊销用密钥"
 
 msgid "delete signatures from the selected user IDs"
-msgstr "删除所选用户标识上的签名"
+msgstr "从所选用户标识上删除签名"
 
 msgid "change the expiration date for the key or selected subkeys"
-msgstr "变更密钥或所选子钥的使用期限"
+msgstr "变更密钥或所选子钥的使用期限"
 
 msgid "flag the selected user ID as primary"
-msgstr "将所选的用户标识设为首选用户标识"
+msgstr "标记所选的用户标识为主要"
 
 msgid "list preferences (expert)"
-msgstr "列出首选项(专家模式)"
+msgstr "列出偏好设置(专家模式)"
 
 msgid "list preferences (verbose)"
-msgstr "列出首选项(详细模式)"
+msgstr "列出偏好设置(详细模式)"
 
 msgid "set preference list for the selected user IDs"
-msgstr "设定所选用户标识的首选项"
+msgstr "为所选用户标识设定偏好设置列表"
 
 msgid "set the preferred keyserver URL for the selected user IDs"
-msgstr "设定所选用户标识的首选公钥服务器的 URL"
+msgstr "为所选用户标识设定首选公钥服务器 URL"
 
 msgid "set a notation for the selected user IDs"
 msgstr "为所选用户标识的设定注记"
 
 msgid "change the passphrase"
-msgstr "更改密码"
+msgstr "变更密码"
 
 msgid "change the ownertrust"
-msgstr "更改信任度"
+msgstr "变更信任度"
 
 msgid "revoke signatures on the selected user IDs"
 msgstr "吊销所选用户标识上的签名"
@@ -3388,7 +3178,7 @@ msgid "revoke selected user IDs"
 msgstr "吊销选定的用户标识"
 
 msgid "revoke key or selected subkeys"
-msgstr "吊销密钥或选定的子钥"
+msgstr "吊销密钥或选定的子钥"
 
 msgid "enable key"
 msgstr "启用密钥"
@@ -3400,141 +3190,126 @@ msgid "show selected photo IDs"
 msgstr "显示选定的照片标识"
 
 msgid "compact unusable user IDs and remove unusable signatures from key"
-msgstr "压缩不可用的用户标识并除不可用的签名"
+msgstr "压缩不可用的用户标识并从密钥上移除不可用的签名"
 
 msgid "compact unusable user IDs and remove all signatures from key"
-msgstr "压缩不可用的用户标识并除所有签名"
+msgstr "压缩不可用的用户标识并从密钥上移除所有签名"
 
 msgid "Secret key is available.\n"
 msgstr "私钥可用。\n"
 
-#, fuzzy
-#| msgid "Secret key is available.\n"
 msgid "Secret subkeys are available.\n"
-msgstr "私钥可用。\n"
+msgstr "私密子密钥可用。\n"
 
 msgid "Need the secret key to do this.\n"
 msgstr "要有私钥才能这么做。\n"
 
-#, fuzzy
-#| msgid ""
-#| "* The `sign' command may be prefixed with an `l' for local signatures "
-#| "(lsign),\n"
-#| "  a `t' for trust signatures (tsign), an `nr' for non-revocable "
-#| "signatures\n"
-#| "  (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n"
 msgid ""
 "* The 'sign' command may be prefixed with an 'l' for local signatures "
 "(lsign),\n"
 "  a 't' for trust signatures (tsign), an 'nr' for non-revocable signatures\n"
 "  (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n"
 msgstr ""
-"* ‘sign’命令可以带‘l’前缀(lsign)以添加本地签名,或‘t’前缀(tsign)以添加\n"
-"  信任签名,或‘nr’前缀(nrsign)以添加不可吊销签名,或者以上三种前缀的任何组\n"
-"  合(ltsign、tnrsign 等)。\n"
+"* ‘sign’命令可以通过‘l’前缀(lsign)进行本地签名,‘t’前缀(tsign)进行\n"
+"  信任签名,‘nr’前缀(nrsign)进行不可吊销签名,\n"
+"  或者上述三种前缀的任意组合(ltsign、tnrsign 等)。\n"
 
 msgid "Key is revoked."
 msgstr "密钥已被吊销。"
 
-#, fuzzy
-#| msgid "Really sign all user IDs? (y/N) "
 msgid "Really sign all text user IDs? (y/N) "
-msgstr "真的为所有的用户标识签名吗?(y/N)"
+msgstr "真的要签名所有的文本用户标识吗?(y/N) "
 
 msgid "Really sign all user IDs? (y/N) "
-msgstr "真的为所有的用户标识签名吗?(y/N)"
+msgstr "真的要签名所有的用户标识吗?(y/N) "
 
 msgid "Hint: Select the user IDs to sign\n"
-msgstr "提示:选择要添加签名的用户标识\n"
+msgstr "提示:选择用户标识以签名\n"
 
-#, fuzzy, c-format
-#| msgid "Unknown signature type `%s'\n"
+#, c-format
 msgid "Unknown signature type '%s'\n"
 msgstr "未知的签名类型‘%s’\n"
 
 #, c-format
 msgid "This command is not allowed while in %s mode.\n"
-msgstr "在 %s 模式中不允许使用这个指令。\n"
+msgstr "不允许在 %s 模式中使用此命令。\n"
 
 msgid "You must select at least one user ID.\n"
-msgstr "您至少得选择一个用户标识。\n"
+msgstr "您必须选择至少一个用户标识。\n"
 
 #, c-format
 msgid "(Use the '%s' command.)\n"
-msgstr ""
+msgstr "(使用‘%s’ 命令。)\n"
 
 msgid "You can't delete the last user ID!\n"
 msgstr "您不能删除最后一个用户标识!\n"
 
 msgid "Really remove all selected user IDs? (y/N) "
-msgstr "真的要删除所有选定的用户标识吗?(y/N)"
+msgstr "真的要移除所有选定的用户标识吗?(y/N) "
 
 msgid "Really remove this user ID? (y/N) "
-msgstr "真的要删除这个用户标识吗?(y/N)"
+msgstr "真的要移除此用户标识吗?(y/N) "
 
 #. TRANSLATORS: Please take care: This is about
 #. moving the key and not about removing it.
-#, fuzzy
 msgid "Really move the primary key? (y/N) "
-msgstr "真的要删除主钥吗?(y/N)"
+msgstr "真的要移动主密钥吗?(y/N) "
 
 msgid "You must select exactly one key.\n"
-msgstr "您必须指定一把密钥。\n"
+msgstr "您必须选择一个密钥。\n"
 
 msgid "Command expects a filename argument\n"
 msgstr "命令需要一个文件名作为参数\n"
 
-#, fuzzy, c-format
-#| msgid "Can't open `%s': %s\n"
+#, c-format
 msgid "Can't open '%s': %s\n"
 msgstr "无法打开‘%s’:%s\n"
 
-#, fuzzy, c-format
-#| msgid "Error reading backup key from `%s': %s\n"
+#, c-format
 msgid "Error reading backup key from '%s': %s\n"
-msgstr "从‘%s’读取备份密钥时出:%s\n"
+msgstr "从‘%s’读取备份密钥时出现错误:%s\n"
 
 msgid "You must select at least one key.\n"
-msgstr "您必须选择至少一密钥。\n"
+msgstr "您必须选择至少一密钥。\n"
 
 msgid "Do you really want to delete the selected keys? (y/N) "
-msgstr "您真的想要删除选定的密钥吗?(y/N)"
+msgstr "您真的想要删除选定的密钥吗?(y/N) "
 
 msgid "Do you really want to delete this key? (y/N) "
-msgstr "您真的要删除这把密钥吗?(y/N)"
+msgstr "您真的要删除此密钥吗?(y/N) "
 
 msgid "Really revoke all selected user IDs? (y/N) "
-msgstr "真的要吊销所有选定的用户标识吗?(y/N)"
+msgstr "真的要吊销所有选定的用户标识吗?(y/N) "
 
 msgid "Really revoke this user ID? (y/N) "
-msgstr "真的要吊销这个用户标识吗?(y/N)"
+msgstr "真的要吊销此用户标识吗?(y/N) "
 
 msgid "Do you really want to revoke the entire key? (y/N) "
-msgstr "您真的要吊销整把密钥吗?(y/N)"
+msgstr "您真的要吊销整个密钥吗?(y/N) "
 
 msgid "Do you really want to revoke the selected subkeys? (y/N) "
-msgstr "您真的要吊销选定的子钥吗?(y/N)"
+msgstr "您真的要吊销选定的子密钥吗?(y/N) "
 
 msgid "Do you really want to revoke this subkey? (y/N) "
-msgstr "您真的要吊销这把子钥吗?(y/N)"
+msgstr "您真的要吊销这个子密钥吗?(y/N) "
 
 msgid "Owner trust may not be set while using a user provided trust database\n"
-msgstr "使用用户提供的信任度数据库时信任度可能并未被设定\n"
+msgstr "在使用一个用户提供的信任度数据库时信任度可能并未被设定\n"
 
 msgid "Set preference list to:\n"
-msgstr "设为首选项列表为:\n"
+msgstr "设定偏好设置列表为:\n"
 
 msgid "Really update the preferences for the selected user IDs? (y/N) "
-msgstr "真的要更新所选用户标识的首选项吗?(y/N)"
+msgstr "真的要更新所选用户标识的偏好设置吗?(y/N) "
 
 msgid "Really update the preferences? (y/N) "
-msgstr "真的要更新首选项吗?(y/N)"
+msgstr "真的要更新偏好设置吗?(y/N) "
 
 msgid "Save changes? (y/N) "
-msgstr "要保存变动吗?(y/N)"
+msgstr "要保存变更吗?(y/N) "
 
 msgid "Quit without saving? (y/N) "
-msgstr "要不保存而离开吗?(y/N)"
+msgstr "要不保存而退出吗?(y/N) "
 
 #, c-format
 msgid "update failed: %s\n"
@@ -3542,88 +3317,78 @@ msgstr "更新失败:%s\n"
 
 #, c-format
 msgid "Key not changed so no update needed.\n"
-msgstr "密钥没有变所以不需要更新。\n"
+msgstr "密钥没有变所以不需要更新。\n"
 
-#, fuzzy, c-format
-#| msgid "You can't delete the last user ID!\n"
+#, c-format
 msgid "cannot revoke the last valid user ID.\n"
-msgstr "您不能删除最后一个用户标识!\n"
+msgstr "不能吊销最后一个有效的用户标识。\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "revoking the user ID failed: %s\n"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "吊销用户标识时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "setting the primary user ID failed: %s\n"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "设置主要用户标识时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "invalid fingerprint"
+#, c-format
 msgid "\"%s\" is not a fingerprint\n"
-msgstr "指纹无效"
+msgstr "\"%s\" 不是一个指纹\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "\"%s\" is not the primary fingerprint\n"
-msgstr "无法存储指纹:%s\n"
+msgstr "“%s” 不是主要指纹\n"
 
-#, fuzzy, c-format
-#| msgid "invalid value\n"
+#, c-format
 msgid "Invalid user ID '%s': %s\n"
-msgstr "无效的数值\n"
+msgstr "无效的用户标识‘%s’:%s\n"
 
-#, fuzzy
-#| msgid "No such user ID.\n"
 msgid "No matching user IDs."
-msgstr "没有这个用户标识。\n"
+msgstr "没有匹配的用户标识。"
 
-#, fuzzy
-#| msgid "Nothing to sign with key %s\n"
 msgid "Nothing to sign.\n"
-msgstr "没有东西可以让密钥 %s 签名\n"
+msgstr "没有可被签名的东西。\n"
 
-#, fuzzy, c-format
-#| msgid "`%s' is not a valid signature expiration\n"
+#, c-format
 msgid "'%s' is not a valid expiration time\n"
-msgstr "‘%s’不是一个有效的签名过期日期\n"
+msgstr "‘%s’不是一个有效的过期时间\n"
 
-#, fuzzy, c-format
-#| msgid "invalid fingerprint"
+#, c-format
 msgid "\"%s\" is not a proper fingerprint\n"
-msgstr "指纹无效"
+msgstr "“%s” 不是一个正确的指纹\n"
 
-#, fuzzy, c-format
-#| msgid "key \"%s\" not found: %s\n"
+#, c-format
 msgid "subkey \"%s\" not found\n"
-msgstr "å¯\86é\92¥â\80\98%sâ\80\99æ\89¾ä¸\8då\88°ï¼\9a%s\n"
+msgstr "å­\90å¯\86é\92¥ â\80\9c%sâ\80\9d æ\9cªæ\89¾å\88°\n"
 
 msgid "Digest: "
-msgstr "æ\95£å\88\97ï¼\9a"
+msgstr "æ\91\98è¦\81ï¼\9a "
 
 msgid "Features: "
-msgstr "特点:"
+msgstr "特点: "
 
 msgid "Keyserver no-modify"
-msgstr "公钥服务器不可变造"
+msgstr "公钥服务器不可修改"
 
 msgid "Preferred keyserver: "
-msgstr "首选公钥服务器:"
+msgstr "首选公钥服务器: "
 
 msgid "Notations: "
-msgstr "注记:"
+msgstr "注记: "
 
 msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr "PGP 2.x 样式的用户标识没有首选项。\n"
+msgstr "没有关于 PGP 2.x 样式用户标识的偏好设置。\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "The following key was revoked on %s by %s key %s\n"
-msgstr "此密钥已于 %s 被 %s 密钥 %s 所吊销\n"
+msgstr "下列密钥在 %s 被 %s 的密钥 %s 所吊销\n"
 
 #, c-format
 msgid "This key may be revoked by %s key %s"
-msgstr "这把密钥可被 %s 密钥 %s 吊销"
+msgstr "这个密钥可被 %s 的密钥 %s 吊销"
 
 msgid "(sensitive)"
-msgstr " (敏感的)"
+msgstr "(敏感的)"
 
 #, c-format
 msgid "created: %s"
@@ -3631,11 +3396,11 @@ msgstr "创建于:%s"
 
 #, c-format
 msgid "revoked: %s"
-msgstr "å·²å\90\8aé\94\80:%s"
+msgstr "å\90\8aé\94\80äº\8e:%s"
 
 #, c-format
 msgid "expired: %s"
-msgstr "已过期:%s"
+msgstr "过期于:%s"
 
 #, c-format
 msgid "expires: %s"
@@ -3646,7 +3411,7 @@ msgid "usage: %s"
 msgstr "可用于:%s"
 
 msgid "card-no: "
-msgstr "卡号:"
+msgstr "卡号: "
 
 #, c-format
 msgid "trust: %s"
@@ -3657,12 +3422,12 @@ msgid "validity: %s"
 msgstr "有效性:%s"
 
 msgid "This key has been disabled"
-msgstr "这密钥已经被禁用"
+msgstr "这密钥已经被禁用"
 
 msgid ""
 "Please note that the shown key validity is not necessarily correct\n"
 "unless you restart the program.\n"
-msgstr "请注æ\84\8fï¼\8cå\9c¨æ\82¨é\87\8då\90¯ç¨\8båº\8fä¹\8bå\89\8dï¼\8cæ\98¾ç¤ºç\9a\84å¯\86é\92¥æ\9c\89æ\95\88æ\80§æ\9cªå¿\85正确ï¼\8c\n"
+msgstr "请注æ\84\8fï¼\8cå\9c¨æ\82¨é\87\8då\90¯ç¨\8båº\8fä¹\8bå\89\8dï¼\8cæ\89\80æ\98¾ç¤ºç\9a\84å¯\86é\92¥æ\9c\89æ\95\88æ\80§ä¸\8dä¸\80å®\9a正确ã\80\82\n"
 
 msgid "revoked"
 msgstr "已吊销"
@@ -3675,33 +3440,33 @@ msgid ""
 "WARNING: no user ID has been marked as primary.  This command may\n"
 "              cause a different user ID to become the assumed primary.\n"
 msgstr ""
-"警告:没有首选用户标识。此指令可能假定一个不同的用户标识为首选用户标识。\n"
+"警告: 没有用户标识被标记为主要。 此命令可能会\n"
+"              导致一个不同的用户标识被假定为主要。\n"
 
 #, c-format
 msgid "WARNING: Your encryption subkey expires soon.\n"
-msgstr ""
+msgstr "警告: 您的加密用子密钥将在不久后过期。\n"
 
-#, fuzzy, c-format
-#| msgid "You can't change the expiration date of a v3 key\n"
+#, c-format
 msgid "You may want to change its expiration date too.\n"
-msgstr "您不能变更 v3 密钥的使用期限\n"
+msgstr "您可能也想要变更它的过期日期。\n"
 
 msgid ""
 "WARNING: This is a PGP2-style key.  Adding a photo ID may cause some "
 "versions\n"
 "         of PGP to reject this key.\n"
 msgstr ""
-"警告:这是一把 PGP2 样式的密钥。\n"
-"      增加照片标识可能会导致某些版本的 PGP 不能识别这把密钥。\n"
+"警告:这是一个 PGP2 样式的密钥。增加照片标识可能会导致某些版本的\n"
+"     PGP 拒绝这个密钥。\n"
 
 msgid "Are you sure you still want to add it? (y/N) "
-msgstr "您确定仍然想要增加吗?(y/N)"
+msgstr "您确定仍然想要增加吗?(y/N) "
 
 msgid "You may not add a photo ID to a PGP2-style key.\n"
 msgstr "您不可以把照片标识增加到 PGP2 样式的密钥里。\n"
 
 msgid "Such a user ID already exists on this key!\n"
-msgstr ""
+msgstr "这样的用户标识已经存在于这个密钥上了!\n"
 
 msgid "Delete this good signature? (y/N/q)"
 msgstr "删除这个完好的签名吗?(y/N/q)"
@@ -3713,14 +3478,12 @@ msgid "Delete this unknown signature? (y/N/q)"
 msgstr "删除这个未知的签名吗?(y/N/q)"
 
 msgid "Really delete this self-signature? (y/N)"
-msgstr "真的要删除这个自签名吗?(y/N)"
+msgstr "真的要删除这个自签名吗?(y/N)"
 
-#, fuzzy, c-format
-#| msgid "Deleted %d signature.\n"
+#, c-format
 msgid "Deleted %d signature.\n"
 msgid_plural "Deleted %d signatures.\n"
 msgstr[0] "已经删除了 %d 个签名。\n"
-msgstr[1] "已经删除了 %d 个签名。\n"
 
 msgid "Nothing deleted.\n"
 msgstr "没有东西被删除。\n"
@@ -3728,120 +3491,106 @@ msgstr "没有东西被删除。\n"
 msgid "invalid"
 msgstr "无效"
 
-#, fuzzy, c-format
+#, c-format
 msgid "User ID \"%s\" compacted: %s\n"
-msgstr "用户标识“%s”:无用部分已清除\n"
+msgstr "用户标识 “%s” 已被压缩:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "User ID \"%s\": %d signature removed\n"
 msgid_plural "User ID \"%s\": %d signatures removed\n"
-msgstr[0] "密钥 %s:“%s”%d 个签名被清除\n"
-msgstr[1] "密钥 %s:“%s”%d 个签名被清除\n"
+msgstr[0] "用户标识 “%s”:%d 个签名被移除\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "User ID \"%s\": already minimized\n"
-msgstr "用户标识“%s”:无用部分已清除\n"
+msgstr "用户标识 “%s”:已被最小化\n"
 
 #, c-format
 msgid "User ID \"%s\": already clean\n"
-msgstr "用户标识“%s”:无用部分已清除\n"
+msgstr "用户标识 “%s”:无用部分已清理\n"
 
 msgid ""
 "WARNING: This is a PGP 2.x-style key.  Adding a designated revoker may "
 "cause\n"
 "         some versions of PGP to reject this key.\n"
 msgstr ""
-"警告:这是一把 PGP2 样式的密钥。\n"
-"      增加指定吊销者可能会导致某些版本的 PGP 无法识别这把密钥。\n"
+"警告:这是一个 PGP2 样式的密钥。增加指定吊销者\n"
+"     可能会导致某些版本的 PGP 无法识别这个密钥。\n"
 
 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n"
 msgstr "您不可以为 PGP 2.x 样式的密钥添加指定吊销者。\n"
 
 msgid "Enter the user ID of the designated revoker: "
-msgstr "输入指定吊销者的用户标识:"
+msgstr "输入指定吊销者的用户标识: "
 
 #, c-format
 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
 msgstr "无法将 PGP 2.x 样式的密钥设为指定吊销者\n"
 
-#  This actually causes no harm (after all, a key that
-#  designates itself as a revoker is the same as a
-#  regular key), but it's easy enough to check.
 #, c-format
 msgid "you cannot appoint a key as its own designated revoker\n"
 msgstr "您不能将某把密钥设为它自己的指定吊销者\n"
 
-#  This actually causes no harm (after all, a key that
-#  designates itself as a revoker is the same as a
-#  regular key), but it's easy enough to check.
 #, c-format
 msgid "this key has already been designated as a revoker\n"
-msgstr "这把密钥已被指定为一个吊销者\n"
+msgstr "这个密钥已被指派为一个吊销者\n"
 
 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n"
-msgstr "警告:将某把密钥指派为指定吊销者的操作无法撤销!\n"
+msgstr "警告:将某把密钥设置为指定吊销者的操作无法撤销!\n"
 
 msgid ""
 "Are you sure you want to appoint this key as a designated revoker? (y/N) "
-msgstr "您确定要将这把密钥设为指定吊销者吗?(y/N):"
+msgstr "您确定要将这个密钥设置为指定吊销者吗?(y/N): "
 
-#, fuzzy
-#| msgid ""
-#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
 msgid ""
 "Are you sure you want to change the expiration time for multiple subkeys? (y/"
 "N) "
-msgstr "您确定要将这把密钥设为指定吊销者吗?(y/N):"
+msgstr "您确定要改变多个子密钥的过期时间吗? (y/N) "
 
 msgid "Changing expiration time for a subkey.\n"
-msgstr "将要变更子钥的使用期限。\n"
+msgstr "将要变更子密钥的过期时间。\n"
 
 msgid "Changing expiration time for the primary key.\n"
-msgstr "将要变更主钥的使用期限。\n"
+msgstr "将要变更主密钥的过期时间。\n"
 
 #, c-format
 msgid "You can't change the expiration date of a v3 key\n"
-msgstr "您不能变更 v3 密钥的使用期限\n"
+msgstr "您不能变更 v3 密钥的过期时间\n"
 
-#, fuzzy
-#| msgid "Changing expiration time for a subkey.\n"
 msgid "Changing usage of a subkey.\n"
-msgstr "å°\86è¦\81å\8f\98æ\9b´å­\90é\92¥ç\9a\84使ç\94¨æ\9c\9fé\99\90。\n"
+msgstr "å\8f\98æ\9b´ä¸\80个å­\90å¯\86é\92¥ç\9a\84ç\94¨é\80\94。\n"
 
-#, fuzzy
-#| msgid "Changing expiration time for the primary key.\n"
 msgid "Changing usage of the primary key.\n"
-msgstr "å°\86è¦\81å\8f\98æ\9b´ä¸»é\92¥ç\9a\84使ç\94¨æ\9c\9fé\99\90。\n"
+msgstr "å\8f\98æ\9b´ä¸»å¯\86é\92¥ç\9a\84ç\94¨é\80\94。\n"
 
 #, c-format
 msgid "signing subkey %s is already cross-certified\n"
-msgstr "签名的子钥 %s 已经交叉验证\n"
+msgstr "签名的子钥 %s 已经交叉验证\n"
 
 #, c-format
 msgid "subkey %s does not sign and so does not need to be cross-certified\n"
-msgstr "子钥 %s 不签名,因此不需要交叉验证\n"
+msgstr "子密钥 %s 不签名,因此不需要被交叉验证\n"
 
 msgid "Please select exactly one user ID.\n"
-msgstr "请精确地选择一个用户标识。\n"
+msgstr "请选定仅一个用户标识。\n"
 
 #, c-format
 msgid "skipping v3 self-signature on user ID \"%s\"\n"
-msgstr "跳过用户标识“%s”的 v3 自身签名\n"
+msgstr "跳过用户标识 “%s” 上的 v3 自签名\n"
 
 msgid "Enter your preferred keyserver URL: "
-msgstr "输入您首选的公钥服务器的 URL:"
+msgstr "输入您首选公钥服务器的 URL: "
 
 msgid "Are you sure you want to replace it? (y/N) "
-msgstr "您确定要替换它吗?(y/N)"
+msgstr "您确定要替换它吗?(y/N) "
 
 msgid "Are you sure you want to delete it? (y/N) "
-msgstr "您确定要删除它吗?(y/N)"
+msgstr "您确定要删除它吗?(y/N) "
 
 msgid "Enter the notation: "
-msgstr "输入注记:"
+msgstr "输入注记: "
 
 msgid "Proceed? (y/N) "
-msgstr "继续?(y/N)"
+msgstr "继续?(y/N) "
 
 #, c-format
 msgid "No user ID with index %d\n"
@@ -3851,14 +3600,13 @@ msgstr "没有索引为 %d 的用户标识\n"
 msgid "No user ID with hash %s\n"
 msgstr "没有散列值为 %s 的用户标识\n"
 
-#, fuzzy, c-format
-#| msgid "No subkey with index %d\n"
+#, c-format
 msgid "No subkey with key ID '%s'.\n"
-msgstr "没有索引为 %d 的子钥\n"
+msgstr "没有属于密钥标识‘%s’的子密钥。\n"
 
 #, c-format
 msgid "No subkey with index %d\n"
-msgstr "没有索引为 %d 的子钥\n"
+msgstr "没有索引为 %d 的子钥\n"
 
 #, c-format
 msgid "user ID: \"%s\"\n"
@@ -3873,33 +3621,33 @@ msgstr " (不可导出)"
 
 #, c-format
 msgid "This signature expired on %s.\n"
-msgstr "这份签名已在 %s 过期。\n"
+msgstr "签名已在 %s 过期。\n"
 
 msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "您确定您仍然想要吊销它吗?(y/N)"
+msgstr "您确定您仍然想要吊销它吗?(y/N) "
 
 msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "要为这份签名生成一份吊销证书吗?(y/N)"
+msgstr "要为这份签名生成一份吊销证书吗?(y/N) "
 
 msgid "Not signed by you.\n"
-msgstr ""
+msgstr "并非由您签名。\n"
 
 #, c-format
 msgid "You have signed these user IDs on key %s:\n"
-msgstr "您已经为这些密钥 %s 上的这些用户标识添加签名:\n"
+msgstr "您已经签名来密钥 %s 上的这些用户标识:\n"
 
 msgid " (non-revocable)"
 msgstr " (不可吊销)"
 
 #, c-format
 msgid "revoked by your key %s on %s\n"
-msgstr "由您的密钥 %s 于 %s 吊销\n"
+msgstr "由您的密钥 %s 吊销于 %s\n"
 
 msgid "You are about to revoke these signatures:\n"
 msgstr "您正在吊销这些签名:\n"
 
 msgid "Really create the revocation certificates? (y/N) "
-msgstr "真的要生成吊销证书吗?(y/N)"
+msgstr "真的要生成吊销证书吗?(y/N) "
 
 #, c-format
 msgid "no secret key\n"
@@ -3907,20 +3655,19 @@ msgstr "没有私钥\n"
 
 #, c-format
 msgid "tried to revoke a non-user ID: %s\n"
-msgstr ""
+msgstr "尝试吊销一个非用户标识:%s\n"
 
 #, c-format
 msgid "user ID \"%s\" is already revoked\n"
-msgstr "用户标识“%s”已经被吊销。\n"
+msgstr "用户标识 “%s” 已经被吊销。\n"
 
 #, c-format
 msgid "WARNING: a user ID signature is dated %d seconds in the future\n"
 msgstr "警告:有一份用户标识签名的日期标记为 %d 秒后的未来\n"
 
-#, fuzzy, c-format
-#| msgid "You can't delete the last user ID!\n"
+#, c-format
 msgid "Cannot revoke the last valid user ID.\n"
-msgstr "您不能删除最后一个用户标识!\n"
+msgstr "不能吊销最后一个有效的用户标识。\n"
 
 #, c-format
 msgid "Key %s is already revoked.\n"
@@ -3928,35 +3675,33 @@ msgstr "密钥 %s 已被吊销。\n"
 
 #, c-format
 msgid "Subkey %s is already revoked.\n"
-msgstr "子钥 %s 已被吊销。\n"
+msgstr "子钥 %s 已被吊销。\n"
 
 #, c-format
 msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n"
-msgstr "æ­£å\9c¨æ\98¾ç¤º %s ç\85§ç\89\87æ \87è¯\86(大å°\8f为 %ldï¼\8cå±\9eäº\8eå¯\86é\92¥ %sï¼\8cç\94¨æ\88·æ \87è¯\86 %d)\n"
+msgstr "æ­£å\9c¨æ\98¾ç¤º %s ç\9a\84ç\85§ç\89\87æ \87è¯\86ï¼\8c大å°\8f %ldï¼\8cå±\9eäº\8eå¯\86é\92¥ %s ï¼\88ç\94¨æ\88·æ \87è¯\86 %dï¼\89\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid value for option '%s'\n"
-msgstr "无效的列表选项\n"
+msgstr "选项‘%s’有无效的值\n"
 
-#, fuzzy, c-format
-#| msgid "preference `%s' duplicated\n"
+#, c-format
 msgid "preference '%s' duplicated\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "偏好设置‘%s’重复\n"
 
 #, c-format
 msgid "too many cipher preferences\n"
-msgstr "太多对称加密算法首选项\n"
+msgstr "过多的密文偏好设置\n"
 
 #, c-format
 msgid "too many digest preferences\n"
-msgstr "太多散列算法首选项\n"
+msgstr "过多的散列算法偏好设置\n"
 
 #, c-format
 msgid "too many compression preferences\n"
-msgstr "太多首选压缩算法\n"
+msgstr "过多的压缩算法偏好设置\n"
 
-#, fuzzy, c-format
-#| msgid "invalid item `%s' in preference string\n"
+#, c-format
 msgid "invalid item '%s' in preference string\n"
 msgstr "首选项字符串里有无效项‘%s’\n"
 
@@ -3966,7 +3711,7 @@ msgstr "正在写入直接签名\n"
 
 #, c-format
 msgid "writing self signature\n"
-msgstr "正在写入自签名\n"
+msgstr "正在写入自签名\n"
 
 #, c-format
 msgid "writing key binding signature\n"
@@ -3974,7 +3719,7 @@ msgstr "正在写入密钥绑定签名\n"
 
 #, c-format
 msgid "keysize invalid; using %u bits\n"
-msgstr "å¯\86é\92¥å°ºå¯¸æ\97 æ\95\88ï¼\9a改用 %u 位\n"
+msgstr "å¯\86é\92¥å°ºå¯¸æ\97 æ\95\88ï¼\9b改用 %u 位\n"
 
 #, c-format
 msgid "keysize rounded up to %u bits\n"
@@ -3983,19 +3728,19 @@ msgstr "密钥尺寸舍入到 %u 位\n"
 #, c-format
 msgid ""
 "WARNING: some OpenPGP programs can't handle a DSA key with this digest size\n"
-msgstr ""
+msgstr "警告:一些 OpenPGP 程序不能处理具有此摘要长度的 DSA 密钥\n"
 
 msgid "Sign"
-msgstr "签名"
+msgstr "签名(Sign)"
 
 msgid "Certify"
-msgstr "验证"
+msgstr "认证(Certify)"
 
 msgid "Encrypt"
-msgstr "加密"
+msgstr "加密(Encrypt)"
 
 msgid "Authenticate"
-msgstr "认è¯\81"
+msgstr "身份éª\8cè¯\81ï¼\88Authenticateï¼\89"
 
 #. TRANSLATORS: Please use only plain ASCII characters for the
 #. translation.  If this is not possible use single digits.  The
@@ -4012,114 +3757,106 @@ msgstr "SsEeAaQq"
 
 #, c-format
 msgid "Possible actions for a %s key: "
-msgstr "%s 密钥可能的操作:"
+msgstr "%s 密钥的可实现的功能: "
 
 msgid "Current allowed actions: "
-msgstr "ç\9b®å\89\8då\85\81许ç\9a\84æ\93\8dä½\9cï¼\9a"
+msgstr "ç\9b®å\89\8då\90¯ç\94¨ç\9a\84å\8a\9fè\83½ï¼\9a "
 
 #, c-format
 msgid "   (%c) Toggle the sign capability\n"
-msgstr "   (%c) 选择是否用于签名\n"
+msgstr "   (%c) 签名功能开关\n"
 
 #, c-format
 msgid "   (%c) Toggle the encrypt capability\n"
-msgstr "   (%c) 选择是否用于加密\n"
+msgstr "   (%c) 加密功能开关\n"
 
 #, c-format
 msgid "   (%c) Toggle the authenticate capability\n"
-msgstr "   (%c) 选择是否用于认证\n"
+msgstr "   (%c) 身份验证功能开关\n"
 
 #, c-format
 msgid "   (%c) Finished\n"
 msgstr "   (%c) 已完成\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) RSA and RSA (default)\n"
-msgstr "   (%d) DSA 和 ElGamal (默认)\n"
+msgstr "   (%d) RSA 和 RSA (默认)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) DSA and Elgamal\n"
-msgstr "   (%d) DSA 和 ElGamal (默认)\n"
+msgstr "   (%d) DSA 和 Elgamal\n"
 
 #, c-format
 msgid "   (%d) DSA (sign only)\n"
-msgstr "   (%d) DSA (仅用于签名)\n"
+msgstr "   (%d) DSA(仅用于签名)\n"
 
 #, c-format
 msgid "   (%d) RSA (sign only)\n"
-msgstr "   (%d) RSA (仅用于签名)\n"
+msgstr "   (%d) RSA(仅用于签名)\n"
 
 #, c-format
 msgid "   (%d) Elgamal (encrypt only)\n"
-msgstr "   (%d) ElGamal (仅用于加密)\n"
+msgstr "   (%d) ElGamal(仅用于加密)\n"
 
 #, c-format
 msgid "   (%d) RSA (encrypt only)\n"
-msgstr "   (%d) RSA (仅用于加密)\n"
+msgstr "   (%d) RSA(仅用于加密)\n"
 
 #, c-format
 msgid "   (%d) DSA (set your own capabilities)\n"
-msgstr "   (%d) DSA (自定义用途)\n"
+msgstr "   (%d) DSA(自定义用途)\n"
 
 #, c-format
 msgid "   (%d) RSA (set your own capabilities)\n"
-msgstr "   (%d) RSA (自定义用途)\n"
+msgstr "   (%d) RSA(自定义用途)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) ECC and ECC\n"
-msgstr "   (%d) DSA 和 ElGamal (默认)\n"
+msgstr "   (%d) ECC 和 ECC\n"
 
-#, fuzzy, c-format
-#| msgid "   (%d) DSA (sign only)\n"
+#, c-format
 msgid "  (%d) ECC (sign only)\n"
-msgstr "   (%d) DSA (仅用于签名)\n"
+msgstr "  (%d) ECC(仅用于签名)\n"
 
-#, fuzzy, c-format
-#| msgid "   (%d) DSA (set your own capabilities)\n"
+#, c-format
 msgid "  (%d) ECC (set your own capabilities)\n"
-msgstr "   (%d) DSA (自定义用途)\n"
+msgstr "  (%d) ECC(自定义用途)\n"
 
-#, fuzzy, c-format
-#| msgid "   (%d) RSA (encrypt only)\n"
+#, c-format
 msgid "  (%d) ECC (encrypt only)\n"
-msgstr "   (%d) RSA (仅用于加密)\n"
+msgstr "  (%d) ECC(仅用于加密)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "  (%d) Existing key\n"
-msgstr "  (2) 加密密钥\n"
+msgstr "  (%d) 现存的密钥\n"
 
-#, fuzzy
 msgid "Enter the keygrip: "
-msgstr "输入注记:"
+msgstr "输入 keygrip: "
 
 msgid "Not a valid keygrip (expecting 40 hex digits)\n"
-msgstr ""
+msgstr "不是一个有效的 keygrip (需要 40 位十六进制数)\n"
 
-#, fuzzy
 msgid "No key with this keygrip\n"
-msgstr "没有索引为 %d 的子钥\n"
+msgstr "没有此 keygrip 关联的密钥\n"
 
-#, fuzzy, c-format
-#| msgid "rounded up to %u bits\n"
+#, c-format
 msgid "rounded to %u bits\n"
 msgstr "舍入到 %u 位\n"
 
 #, c-format
 msgid "%s keys may be between %u and %u bits long.\n"
-msgstr "%s 密钥长度应在 %u 位与 %u 位之间。\n"
+msgstr "%s 密钥长度应在 %u 位与 %u 位之间。\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "What keysize do you want for the subkey? (%u) "
-msgstr "您想要用多大的密钥尺寸?(%u)"
+msgstr "您想要为此子密钥使用的密钥长度?(%u) "
 
 #, c-format
 msgid "Requested keysize is %u bits\n"
-msgstr "您所要求的密钥尺寸是 %u 位\n"
+msgstr "请求的密钥长度是 %u 位\n"
 
-#, fuzzy
-#| msgid "Please select what kind of key you want:\n"
 msgid "Please select which elliptic curve you want:\n"
-msgstr "请选择您要使用的密钥种类:\n"
+msgstr "请选择您想要使用的椭圆曲线:\n"
 
 msgid ""
 "Please specify how long the key should be valid.\n"
@@ -4129,7 +3866,7 @@ msgid ""
 "      <n>m = key expires in n months\n"
 "      <n>y = key expires in n years\n"
 msgstr ""
-"请设定这密钥的有效期限。\n"
+"请设定这密钥的有效期限。\n"
 "         0 = 密钥永不过期\n"
 "      <n>  = 密钥在 n 天后过期\n"
 "      <n>w = 密钥在 n 周后过期\n"
@@ -4156,10 +3893,10 @@ msgstr "密钥的有效期限是?(0) "
 
 #, c-format
 msgid "Signature is valid for? (%s) "
-msgstr "签名的有效期限是多久?(%s) "
+msgstr "签名的有效期限是?(%s) "
 
 msgid "invalid value\n"
-msgstr "无效的值\n"
+msgstr "无效的值\n"
 
 msgid "Key does not expire at all\n"
 msgstr "密钥永远不会过期\n"
@@ -4180,16 +3917,19 @@ msgid ""
 "However, it will be correctly handled up to 2106.\n"
 msgstr ""
 "您的系统无法显示 2038 年以后的日期。\n"
-"不过,它可以正确处理 2106 年之前的年份。\n"
+"然而,它可以正确地处理到 2106 年之前的日期。\n"
 
 msgid "Is this correct? (y/N) "
-msgstr "以上正确吗?(y/n)"
+msgstr "这些内容正确吗? (y/N) "
 
 msgid ""
 "\n"
 "GnuPG needs to construct a user ID to identify your key.\n"
 "\n"
 msgstr ""
+"\n"
+"GnuPG 需要构建用户标识以辨认您的密钥。\n"
+"\n"
 
 #. TRANSLATORS: This string is in general not anymore used
 #. but you should keep your existing translation.  In case
@@ -4204,21 +3944,20 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组"
-"合\n"
-"成用户标识,如下所示:\n"
+"您需要一个用户标识来辨识您的密钥;此软件将使用\n"
+"真实姓名、注释和电子邮件地址组合成以下形式的用户标识:\n"
 "    “Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>”\n"
 "\n"
 
 msgid "Real name: "
-msgstr "真实姓名:"
+msgstr "真实姓名: "
 
 msgid "Invalid character in name\n"
 msgstr "姓名含有无效的字符\n"
 
 #, c-format
 msgid "The characters '%s' and '%s' may not appear in name\n"
-msgstr ""
+msgstr "字符‘%s’和‘%s’不能出现在姓名中\n"
 
 msgid "Name may not start with a digit\n"
 msgstr "姓名不可以用数字开头\n"
@@ -4227,19 +3966,18 @@ msgid "Name must be at least 5 characters long\n"
 msgstr "姓名至少要有五个字符长\n"
 
 msgid "Email address: "
-msgstr "电子邮件地址:"
+msgstr "电子邮件地址: "
 
 msgid "Not a valid email address\n"
 msgstr "电子邮件地址无效\n"
 
 msgid "Comment: "
-msgstr "注释:"
+msgstr "注释: "
 
 msgid "Invalid character in comment\n"
 msgstr "注释含有无效的字符\n"
 
-#, fuzzy, c-format
-#| msgid "You are using the `%s' character set.\n"
+#, c-format
 msgid "You are using the '%s' character set.\n"
 msgstr "您正在使用‘%s’字符集。\n"
 
@@ -4249,7 +3987,7 @@ msgid ""
 "    \"%s\"\n"
 "\n"
 msgstr ""
-"您选定了这个用户标识:\n"
+"您选定了用户标识:\n"
 "    “%s”\n"
 "\n"
 
@@ -4271,20 +4009,16 @@ msgid "NnCcEeOoQq"
 msgstr "NnCcEeOoQq"
 
 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或退出(Q)?"
+msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或退出(Q)? "
 
 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?"
+msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? "
 
-#, fuzzy
-#| msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
 msgid "Change (N)ame, (E)mail, or (Q)uit? "
-msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或退出(Q)?"
+msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或退出(Q)? "
 
-#, fuzzy
-#| msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
 msgid "Change (N)ame, (E)mail, or (O)kay/(Q)uit? "
-msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?"
+msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? "
 
 msgid "Please correct the error first\n"
 msgstr "请先改正错误\n"
@@ -4295,12 +4029,13 @@ msgid ""
 "disks) during the prime generation; this gives the random number\n"
 "generator a better chance to gain enough entropy.\n"
 msgstr ""
-"我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动\n"
-"鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。\n"
+"我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘\n"
+"、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数\n"
+"发生器有更好的机会获得足够的熵。\n"
 
 #, c-format
 msgid "Key generation failed: %s\n"
-msgstr "生成密钥失败:%s\n"
+msgstr "密钥生成失败:%s\n"
 
 #, c-format
 msgid ""
@@ -4308,212 +4043,190 @@ msgid ""
 "    \"%s\"\n"
 "\n"
 msgstr ""
+"将要创建一个密钥:\n"
+"    \"%s\"\n"
+"\n"
 
 msgid "Continue? (Y/n) "
-msgstr ""
+msgstr "继续吗? (Y/n) "
 
-#, fuzzy, c-format
-#| msgid "key already exists\n"
+#, c-format
 msgid "A key for \"%s\" already exists\n"
-msgstr "密钥已存在\n"
+msgstr "一个 \"%s\" 的密钥已经存在\n"
 
-#, fuzzy
-#| msgid "Use this key anyway? (y/N) "
 msgid "Create anyway? (y/N) "
-msgstr "无论如何还是使用这把密钥吗?(y/N)"
+msgstr "无论如何都要创建吗?(y/N) "
 
-#, fuzzy, c-format
-#| msgid "generating new key\n"
+#, c-format
 msgid "creating anyway\n"
-msgstr "生成新密钥\n"
+msgstr "无论如何都创建\n"
 
 #, c-format
 msgid "Note: Use \"%s %s\" for a full featured key generation dialog.\n"
-msgstr ""
+msgstr "注意:使用 “%s %s” 以获得一个功能完整的密钥产生对话框。\n"
 
 #, c-format
 msgid "Key generation canceled.\n"
 msgstr "密钥生成已取消。\n"
 
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
+#, c-format
 msgid "can't create backup file '%s': %s\n"
 msgstr "不能创建备份文件‘%s’:%s\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
+#, c-format
 msgid "Note: backup of card key saved to '%s'\n"
-msgstr "注意:卡密钥的备份已保存到‘%s’\n"
+msgstr "注意:卡密钥的备份已保存到‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "writing public key to `%s'\n"
+#, c-format
 msgid "writing public key to '%s'\n"
-msgstr "正在将公钥写至`%s'\n"
+msgstr "正在将公钥写至‘%s’\n"
 
 #, c-format
 msgid "no writable public keyring found: %s\n"
-msgstr "æ\89¾ä¸\8då\88°可写的公钥钥匙环:%s\n"
+msgstr "æ\97 可写的公钥钥匙环:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error writing public keyring `%s': %s\n"
+#, c-format
 msgid "error writing public keyring '%s': %s\n"
 msgstr "写入公钥钥匙环‘%s’时发生错误: %s\n"
 
 msgid "public and secret key created and signed.\n"
-msgstr "公钥和私钥已经生成并签名。\n"
+msgstr "公钥和私钥已经生成并签名。\n"
 
 msgid ""
 "Note that this key cannot be used for encryption.  You may want to use\n"
 "the command \"--edit-key\" to generate a subkey for this purpose.\n"
 msgstr ""
-"请注意这把密钥还不能用来加密,您必须先用“--edit-key”指令\n"
-"生成用于加密的子钥。\n"
+"请注意这个密钥不能用于加密。您可能想要使用“--edit-key”命令来\n"
+"生成一个用于此用途的子密钥。\n"
 
 #, c-format
 msgid ""
 "key has been created %lu second in future (time warp or clock problem)\n"
-msgstr "密钥是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+msgstr "密钥已经在 %lu 秒后的未来生成(可能是因为时空扭曲或时钟的问题)\n"
 
 #, c-format
 msgid ""
 "key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr "密钥是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+msgstr "密钥已经在 %lu 秒后的未来生成(可能是因为时空扭曲或时钟的问题)\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
+#, c-format
 msgid "Note: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "注意:为 v3 密钥生成子钥会失去 OpenPGP 兼容性\n"
+msgstr "注意:为 v3 密钥创建子密钥是不与 OpenPGP 兼容的\n"
 
 #, c-format
 msgid "Secret parts of primary key are not available.\n"
-msgstr "主钥的私钥部分无法取用。\n"
+msgstr "主密钥的私钥部分不可用。\n"
 
 #, c-format
 msgid "Secret parts of primary key are stored on-card.\n"
-msgstr "主钥的私钥部分存储在卡上。\n"
+msgstr "主钥的私钥部分存储在卡上。\n"
 
 msgid "Really create? (y/N) "
-msgstr "ç\9c\9fç\9a\84è¦\81建ç«\8bå\90\97ï¼\9f(y/N)"
+msgstr "ç\9c\9fç\9a\84è¦\81å\88\9b建å\90\97ï¼\9f(y/N) "
 
 msgid "never     "
-msgstr "永不过期"
+msgstr "永不     "
 
 msgid "Critical signature policy: "
-msgstr "关键签名策略:"
+msgstr "紧急签名策略: "
 
 msgid "Signature policy: "
-msgstr "签名策略:"
+msgstr "签名策略: "
 
 msgid "Critical preferred keyserver: "
-msgstr "关键首选公钥服务器:"
+msgstr "紧急首选公钥服务器: "
 
 msgid "Critical signature notation: "
-msgstr "关键签名注记:"
+msgstr "紧急签名注记: "
 
 msgid "Signature notation: "
-msgstr "签名注记:"
+msgstr "签名注记: "
 
-#, fuzzy, c-format
-#| msgid "%d bad signatures\n"
+#, c-format
 msgid "%d good signature\n"
 msgid_plural "%d good signatures\n"
-msgstr[0] "%d 个损坏的签名\n"
-msgstr[1] "%d 个损坏的签名\n"
+msgstr[0] "%d 个良好签名\n"
 
-#, fuzzy, c-format
-#| msgid "%d bad signatures\n"
+#, c-format
 msgid "%d bad signature\n"
 msgid_plural "%d bad signatures\n"
-msgstr[0] "%d 个损坏的签名\n"
-msgstr[1] "%d 个损坏的签名\n"
+msgstr[0] "%d 个损坏签名\n"
 
-#, fuzzy, c-format
-#| msgid "1 signature not checked due to a missing key\n"
+#, c-format
 msgid "%d signature not checked due to a missing key\n"
 msgid_plural "%d signatures not checked due to missing keys\n"
-msgstr[0] "有 1 份签名因为遗失密钥而未被检查\n"
-msgstr[1] "有 1 份签名因为遗失密钥而未被检查\n"
+msgstr[0] "%d 个签名因密钥遗失而未被检查\n"
 
-#, fuzzy, c-format
-#| msgid "1 signature not checked due to an error\n"
+#, c-format
 msgid "%d signature not checked due to an error\n"
 msgid_plural "%d signatures not checked due to errors\n"
-msgstr[0] "有 1 份签名因为某个错误而未被检查\n"
-msgstr[1] "有 1 份签名因为某个错误而未被检查\n"
+msgstr[0] "%d 个签名因错误而未被检查\n"
 
 #, c-format
 msgid "Warning: %lu key skipped due to its large size\n"
 msgid_plural "Warning: %lu keys skipped due to their large sizes\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "警告:%lu 把密钥因尺寸大而被跳过\n"
 
 msgid "Keyring"
 msgstr "钥匙环"
 
 msgid "Primary key fingerprint:"
-msgstr "主钥指纹:"
+msgstr "主钥指纹:"
 
 msgid "     Subkey fingerprint:"
-msgstr "钥指纹:"
+msgstr "     子密钥指纹:"
 
 #. TRANSLATORS: this should fit into 24 bytes so that the
 #. * fingerprint data is properly aligned with the user ID
 msgid " Primary key fingerprint:"
-msgstr " 主钥指纹:"
+msgstr " 主钥指纹:"
 
 msgid "      Subkey fingerprint:"
-msgstr " 钥指纹:"
+msgstr "      子密钥指纹:"
 
-#  use tty
 msgid "      Key fingerprint ="
-msgstr "密钥指纹 ="
+msgstr "      密钥指纹 ="
 
 msgid "      Card serial no. ="
-msgstr "序列号 ="
+msgstr "      卡片序列号 ="
 
-#, fuzzy, c-format
-#| msgid "caching keyring `%s'\n"
+#, c-format
 msgid "caching keyring '%s'\n"
-msgstr "缓存钥匙环‘%s’\n"
+msgstr "正在缓存钥匙环‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "%lu keys cached so far (%lu signatures)\n"
+#, c-format
 msgid "%lu keys cached so far (%lu signature)\n"
 msgid_plural "%lu keys cached so far (%lu signatures)\n"
-msgstr[0] "目前已缓存 %lu 把密钥(%lu 份签名)\n"
-msgstr[1] "目前已缓存 %lu 把密钥(%lu 份签名)\n"
+msgstr[0] "当前有 %lu 把密钥已缓存 (%lu 个签名)\n"
 
 #, c-format
 msgid "%lu key cached"
 msgid_plural "%lu keys cached"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lu 把密钥已缓存"
 
-#, fuzzy, c-format
-#| msgid "1 bad signature\n"
+#, c-format
 msgid " (%lu signature)\n"
 msgid_plural " (%lu signatures)\n"
-msgstr[0] "1 个损坏的签名\n"
-msgstr[1] "1 个损坏的签名\n"
+msgstr[0] " (%lu 个签名)\n"
 
 #, c-format
 msgid "%s: keyring created\n"
-msgstr "%sï¼\9aé\92¥å\8c\99ç\8e¯å·²å»ºç«\8b\n"
+msgstr "%sï¼\9aé\92¥å\8c\99ç\8e¯å·²å\88\9b建\n"
 
 msgid "override proxy options set for dirmngr"
-msgstr ""
+msgstr "覆盖掉为 dirmngr 设定的代理选项"
 
 msgid "include revoked keys in search results"
 msgstr "在搜索结果中包含已吊销的密钥"
 
 msgid "include subkeys when searching by key ID"
-msgstr "按钥匙号搜索时包含子钥"
+msgstr "通过密钥标识搜索时包含子密钥"
 
 msgid "override timeout options set for dirmngr"
-msgstr ""
+msgstr "覆盖掉为 dirmngr 设定的超时选项"
 
 msgid "automatically retrieve keys when verifying signatures"
-msgstr "验证签名时自动下载密钥"
+msgstr "验证签名时自动拉取密钥"
 
 msgid "honor the preferred keyserver URL set on the key"
 msgstr "使用密钥中指定的首选公钥服务器 URL"
@@ -4525,30 +4238,28 @@ msgid "disabled"
 msgstr "已禁用"
 
 msgid "Enter number(s), N)ext, or Q)uit > "
-msgstr "输入数字以选择,输入 N 翻页,输入 Q 退出 >"
+msgstr "输入数字以选择,输入 N 翻页,输入 Q 退出 > "
 
 #, c-format
 msgid "invalid keyserver protocol (us %d!=handler %d)\n"
-msgstr "无效的公钥服务器协议(us %d!=handler %d)\n"
+msgstr "无效的公钥服务器协议(us %d!=handler %d)\n"
 
 #, c-format
 msgid "\"%s\" not a key ID: skipping\n"
-msgstr "“%s”不是一个用户标识:跳过\n"
+msgstr "“%s” 不是一个用户标识:跳过\n"
 
-#, fuzzy, c-format
-#| msgid "refreshing %d keys from %s\n"
+#, c-format
 msgid "refreshing %d key from %s\n"
 msgid_plural "refreshing %d keys from %s\n"
-msgstr[0] "%d 个密钥正从 %s 得到更新\n"
-msgstr[1] "%d 个密钥正从 %s 得到更新\n"
+msgstr[0] "正在更新 %d 把密钥,从 %s \n"
 
 #, c-format
 msgid "WARNING: unable to refresh key %s via %s: %s\n"
-msgstr "警告:无法更新密钥 %s,通过 %s:%s\n"
+msgstr "警告:无法通过 %s 更新密钥 %s :%s\n"
 
 #, c-format
 msgid "key \"%s\" not found on keyserver\n"
-msgstr "在公钥服务器上找不到密钥“%s”\n"
+msgstr "在公钥服务器上找不到密钥 “%s”\n"
 
 #, c-format
 msgid "key not found on keyserver\n"
@@ -4556,33 +4267,31 @@ msgstr "在公钥服务器上找不到密钥\n"
 
 #, c-format
 msgid "no keyserver known (use option --keyserver)\n"
-msgstr "æ\9cªç»\99å\87ºå\85¬é\92¥æ\9c\8då\8a¡å\99¨(使ç\94¨ --keyserver é\80\89项)\n"
+msgstr "æ\97 å·²ç\9f¥ç\9a\84å\85¬é\92¥æ\9c\8då\8a¡å\99¨ï¼\88使ç\94¨ --keyserver é\80\89项ï¼\89\n"
 
 #, c-format
 msgid "requesting key %s from %s server %s\n"
-msgstr "下载密钥‘%s’,从 %s 服务器 %s\n"
+msgstr "正在请求密钥 %s 从 %s 服务器 %s\n"
 
 #, c-format
 msgid "requesting key %s from %s\n"
-msgstr "下载密钥 %s,从 %s\n"
+msgstr "正在请求密钥 %s 从 %s\n"
 
-#, fuzzy, c-format
-#| msgid "no keyserver action!\n"
+#, c-format
 msgid "no keyserver known\n"
-msgstr "公钥服务器无动作!\n"
+msgstr "无已知的公钥服务器\n"
 
 #, c-format
 msgid "skipped \"%s\": %s\n"
-msgstr "“%s”已跳过:%s\n"
+msgstr "已跳过 “%s”: %s\n"
 
 #, c-format
 msgid "sending key %s to %s\n"
-msgstr "将密钥‘%s’上传到 %s\n"
+msgstr "正在发送密钥 %s 到 %s\n"
 
-#, fuzzy, c-format
-#| msgid "requesting key %s from %s\n"
+#, c-format
 msgid "requesting key from '%s'\n"
-msgstr "下载密钥 %s,从 %s\n"
+msgstr "正在从 %s 请求密钥\n"
 
 #, c-format
 msgid "WARNING: unable to fetch URI %s: %s\n"
@@ -4590,11 +4299,12 @@ msgstr "警告:无法获取 URI %s:%s\n"
 
 #, c-format
 msgid "weird size for an encrypted session key (%d)\n"
-msgstr "å\8a å¯\86è¿\87ç\9a\84ä¼\9aè¯\9då¯\86é\92¥å°ºå¯¸(%d)诡å¼\82\n"
+msgstr "å¥\87æ\80ªç\9a\84å\8a å¯\86ä¼\9aè¯\9då¯\86é\92¥é\95¿åº¦ï¼\88%dï¼\89\n"
 
-#, c-format
+#, fuzzy, c-format
+#| msgid "%s.%s encrypted session key\n"
 msgid "%s encrypted session key\n"
-msgstr "%s 加密过的会话密钥\n"
+msgstr "%s.%s 已加密的会话密钥\n"
 
 #, c-format
 msgid "passphrase generated with unknown digest algorithm %d\n"
@@ -4606,11 +4316,11 @@ msgstr "公钥是 %s\n"
 
 #, c-format
 msgid "public key encrypted data: good DEK\n"
-msgstr "公钥加密过的数据:完好的数据加密密钥\n"
+msgstr "公钥加密数据:完好的数据加密密钥(DEK)\n"
 
 #, c-format
 msgid "encrypted with %u-bit %s key, ID %s, created %s\n"
-msgstr "由 %u 位的 %s 密钥加密,钥匙号为 %s、生成于 %s\n"
+msgstr "由 %u 位的 %s 密钥加密,标识为 %s,生成于 %s\n"
 
 #, c-format
 msgid "      \"%s\"\n"
@@ -4618,7 +4328,7 @@ msgstr "      “%s”\n"
 
 #, c-format
 msgid "encrypted with %s key, ID %s\n"
-msgstr "由 %s 密钥加密、钥匙号为 %s\n"
+msgstr "由 %s 密钥加密、密钥号为 %s\n"
 
 #, c-format
 msgid "public key decryption failed: %s\n"
@@ -4626,7 +4336,7 @@ msgstr "公钥解密失败:%s\n"
 
 #, c-format
 msgid "WARNING: multiple plaintexts seen\n"
-msgstr ""
+msgstr "警告: 检测到多重纯文本\n"
 
 #, c-format
 msgid "encrypted with %lu passphrases\n"
@@ -4642,26 +4352,28 @@ msgstr "假定 %s 为加密过的数据\n"
 
 #, c-format
 msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "IDEA 算法不可用,试以 %s 代替\n"
+msgstr "IDEA 密文算法不可用,尝试使用 %s 代替\n"
 
 #, c-format
 msgid "WARNING: message was not integrity protected\n"
-msgstr "è­¦å\91\8aï¼\9aæ\8a¥æ\96\87æ\9cªå\8f\97å\88°å®\8cæ\95´ç\9a\84保护\n"
+msgstr "è­¦å\91\8aï¼\9aæ\88æ\81¯æ\9cªå\8f\97å\88°å®\8cæ\95´æ\80§保护\n"
 
 msgid ""
 "Hint: If this message was created before the year 2003 it is\n"
 "likely that this message is legitimate.  This is because back\n"
 "then integrity protection was not widely used.\n"
 msgstr ""
+"提示:如果此信息是在 2003 年之前被创建的,那么\n"
+"看起来此信息就是合法的。这是因为那个时候完整性\n"
+"保护还没有被广泛地采用。\n"
 
 #, c-format
 msgid "Use the option '%s' to decrypt anyway.\n"
-msgstr ""
+msgstr "使用选项‘%s’来无论如何都要解密。\n"
 
-#, fuzzy, c-format
-#| msgid "decryption failed: %s\n"
+#, c-format
 msgid "decryption forced to fail!\n"
-msgstr "解å¯\86失败ï¼\9a%s\n"
+msgstr "解å¯\86强å\88¶å¤±è´¥ï¼\81\n"
 
 #, c-format
 msgid "decryption okay\n"
@@ -4675,10 +4387,9 @@ msgstr "警告:加密过的报文已经变造!\n"
 msgid "decryption failed: %s\n"
 msgstr "解密失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
+#, c-format
 msgid "Note: sender requested \"for-your-eyes-only\"\n"
-msgstr "注意:发者要求您“只阅读不存盘”\n"
+msgstr "注意:发者要求您“只阅读不存盘”\n"
 
 #, c-format
 msgid "original file name='%.*s'\n"
@@ -4686,7 +4397,7 @@ msgstr "原始文件名 =‘%.*s’\n"
 
 #, c-format
 msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "独立的吊销证书――请用“gpg --import”来应用\n"
+msgstr "独立的吊销证书 - 请使用“gpg --import”来应用\n"
 
 #, c-format
 msgid "no signature found\n"
@@ -4694,15 +4405,15 @@ msgstr "未找到签名\n"
 
 #, c-format
 msgid "BAD signature from \"%s\""
-msgstr "已损坏的签名,来自于“%s”"
+msgstr "已损坏的签名,来自于 “%s”"
 
 #, c-format
 msgid "Expired signature from \"%s\""
-msgstr "过期的签名,来自于“%s”"
+msgstr "过期的签名,来自于 “%s”"
 
 #, c-format
 msgid "Good signature from \"%s\""
-msgstr "完好的签名,来自于“%s”"
+msgstr "完好的签名,来自于 “%s”"
 
 #, c-format
 msgid "signature verification suppressed\n"
@@ -4710,7 +4421,7 @@ msgstr "签名验证已被抑制\n"
 
 #, c-format
 msgid "can't handle this ambiguous signature data\n"
-msgstr "无法处理这些有歧义的签名\n"
+msgstr "无法处理此有歧义的签名数据\n"
 
 #, c-format
 msgid "Signature made %s\n"
@@ -4722,28 +4433,26 @@ msgstr "              使用 %s 密钥 %s\n"
 
 #, c-format
 msgid "Signature made %s using %s key ID %s\n"
-msgstr "于 %s 创建的签名,使用 %s,钥匙号 %s\n"
+msgstr "于 %s 创建的签名,使用 %s,密钥号 %s\n"
 
-#, fuzzy, c-format
-#| msgid "                aka \"%s\""
+#, c-format
 msgid "               issuer \"%s\"\n"
-msgstr "              亦即“%s”"
+msgstr "               签发者 \"%s\"\n"
 
 #, c-format
 msgid "Key available at: "
-msgstr "å\8f¯ç\94¨ç\9a\84å¯\86é\92¥å\9c¨ï¼\9a"
+msgstr "å¯\86é\92¥å\9c¨ä»¥ä¸\8bå\9c°æ\96¹å\8f¯ç\94¨ï¼\9a "
 
 msgid "[uncertain]"
 msgstr "[不确定]"
 
 #, c-format
 msgid "                aka \"%s\""
-msgstr "              亦即“%s”"
+msgstr "                亦即 “%s”"
 
-#, fuzzy, c-format
-#| msgid "WARNING: This key is not certified with a trusted signature!\n"
+#, c-format
 msgid "WARNING: This key is not suitable for signing in %s mode\n"
-msgstr "警告:这把密钥未经受信任的签名认证!\n"
+msgstr "警告: 此密钥在 %s 模式下不适用于签名\n"
 
 #, c-format
 msgid "Signature expired %s\n"
@@ -4753,10 +4462,9 @@ msgstr "这份签名已于 %s 过期。\n"
 msgid "Signature expires %s\n"
 msgstr "这份签名在 %s 过期。\n"
 
-#, fuzzy, c-format
-#| msgid "%s signature, digest algorithm %s\n"
+#, c-format
 msgid "%s signature, digest algorithm %s%s%s\n"
-msgstr "%s ç­¾å\90\8dï¼\8cæ\95£å\88\97ç®\97æ³\95 %s\n"
+msgstr "%s ç­¾å\90\8dï¼\8cæ\91\98è¦\81ç®\97æ³\95 %s%s%s\n"
 
 msgid "binary"
 msgstr "二进制"
@@ -4767,14 +4475,12 @@ msgstr "文本模式"
 msgid "unknown"
 msgstr "未知"
 
-#, fuzzy
-#| msgid "unknown pubkey algorithm"
 msgid ", key algorithm "
-msgstr "未知的公钥算法"
+msgstr ",密钥算法 "
 
 #, c-format
 msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n"
-msgstr ""
+msgstr "警告:不是一个分离签名;文件‘%s’没有被验证!\n"
 
 #, c-format
 msgid "Can't check signature: %s\n"
@@ -4795,28 +4501,27 @@ msgstr "等级 0x%02x 的独立签名\n"
 
 #, c-format
 msgid "old style (PGP 2.x) signature\n"
-msgstr "旧式(PGP 2.x)签名\n"
+msgstr "旧式(PGP 2.x)签名\n"
 
-#, fuzzy, c-format
-#| msgid "fstat of `%s' failed in %s: %s\n"
+#, c-format
 msgid "fstat of '%s' failed in %s: %s\n"
-msgstr "‘%s’的 fstat 在 %s 中出错:%s\n"
+msgstr "‘%s’的 fstat 方法在 %s 中失败 :%s\n"
 
 #, c-format
 msgid "fstat(%d) failed in %s: %s\n"
-msgstr "fstat(%d) å\9c¨ %s ä¸­å\87ºé\94\99:%s\n"
+msgstr "fstat(%d) å\9c¨ %s ä¸­å¤±è´¥:%s\n"
 
 #, c-format
 msgid "WARNING: using experimental public key algorithm %s\n"
 msgstr "警告: 使用试验性质的公钥算法 %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n"
-msgstr "警告:不建议使用散列算法 %s\n"
+msgstr "警告:Elgamal 签名+加密的密钥已被弃用\n"
 
 #, c-format
 msgid "WARNING: using experimental cipher algorithm %s\n"
-msgstr "è­¦å\91\8aï¼\9a使ç\94¨è¯\95éª\8cæ\80§è´¨ç\9a\84对称å\8a å¯\86算法 %s\n"
+msgstr "è­¦å\91\8aï¼\9a使ç\94¨è¯\95éª\8cæ\80§è´¨ç\9a\84å¯\86æ\96\87算法 %s\n"
 
 #, c-format
 msgid "WARNING: using experimental digest algorithm %s\n"
@@ -4824,51 +4529,48 @@ msgstr "警告:使用试验性质的散列算法 %s\n"
 
 #, c-format
 msgid "WARNING: digest algorithm %s is deprecated\n"
-msgstr "警告:不建议使用散列算法 %s\n"
+msgstr "警告:散列算法 %s 已被弃用\n"
 
-#, fuzzy, c-format
-#| msgid "%s signature, digest algorithm %s\n"
+#, c-format
 msgid "Note: signatures using the %s algorithm are rejected\n"
-msgstr "%s 签名,散列算法 %s\n"
+msgstr "注意:使用 %s 算法的签名已被拒绝\n"
 
-#, fuzzy, c-format
-#| msgid "read error in `%s': %s\n"
+#, c-format
 msgid "(reported error: %s)\n"
-msgstr "读取‘%s’错误:%s\n"
+msgstr "(已报告错误:%s)\n"
 
-#, fuzzy, c-format
-#| msgid "read error in `%s': %s\n"
+#, c-format
 msgid "(reported error: %s <%s>)\n"
-msgstr "读取‘%s’错误:%s\n"
+msgstr "(已报告错误:%s <%s>)\n"
 
 #, c-format
 msgid "(further info: "
-msgstr ""
+msgstr "(更多信息: "
 
 #, c-format
 msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "%s:%d:不建议使用该选项“%s”\n"
+msgstr "%s:%d:被弃用的选项 “%s”\n"
 
 #, c-format
 msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "警告:“%s”选项已不建议使用\n"
+msgstr "警告:“%s” 是一个已被弃用的选项\n"
 
 #, c-format
 msgid "please use \"%s%s\" instead\n"
-msgstr "请“%s%s”代替\n"
+msgstr "请“%s%s”代替\n"
 
 #, c-format
 msgid "WARNING: \"%s\" is a deprecated command - do not use it\n"
-msgstr "警告:“%s”命令已不建议使用——不要使用它\n"
+msgstr "警告:“%s” 命令已被弃用 - 不要使用它\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s:%u: \"%s\" is obsolete in this file - it only has effect in %s\n"
-msgstr "警告:“%s”选项已不建议使用\n"
+msgstr "%s:%u: “%s” 在此文件中已被淘汰 - 其仅在 %s 中起作用\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "WARNING: \"%s%s\" is an obsolete option - it has no effect except on %s\n"
-msgstr "警告:“%s”选项已不建议使用\n"
+msgstr "警告:“%s%s”是一个已经被淘汰的选项 - 它除了在 %s 上之外不起作用\n"
 
 msgid "Uncompressed"
 msgstr "不压缩"
@@ -4879,51 +4581,45 @@ msgstr "未压缩|无"
 
 #, c-format
 msgid "this message may not be usable by %s\n"
-msgstr "%s 也许不能使用这个报文\n"
+msgstr "此消息可能不能被 %s 使用\n"
 
-#, fuzzy, c-format
-#| msgid "ambiguous option `%s'\n"
+#, c-format
 msgid "ambiguous option '%s'\n"
 msgstr "有歧义的选项‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "unknown option `%s'\n"
+#, c-format
 msgid "unknown option '%s'\n"
 msgstr "未知的选项 '%s'\n"
 
-#, fuzzy, c-format
-#| msgid "DSA requires the hash length to be a multiple of 8 bits\n"
+#, c-format
 msgid "ECDSA public key is expected to be in SEC encoding multiple of 8 bits\n"
-msgstr "DSA 需要散列值长度为 8 位的倍数\n"
+msgstr "ECDSA 公钥需要以 8 位的倍数的 SEC 进行编码\n"
 
-#, fuzzy, c-format
-#| msgid "Unknown signature type `%s'\n"
+#, c-format
 msgid "unknown weak digest '%s'\n"
-msgstr "未知的签名类型‘%s’\n"
+msgstr "未知的弱摘要‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "File `%s' exists. "
+#, c-format
 msgid "File '%s' exists. "
 msgstr "文件‘%s’已存在。 "
 
 msgid "Overwrite? (y/N) "
-msgstr "是否覆盖?(y/N)"
+msgstr "是否覆盖?(y/N) "
 
 #, c-format
 msgid "%s: unknown suffix\n"
-msgstr "%s:未知的后缀\n"
+msgstr "%s:未知的后缀\n"
 
 msgid "Enter new filename"
 msgstr "请输入新的文件名"
 
 #, c-format
 msgid "writing to stdout\n"
-msgstr "正在写入到标准输出\n"
+msgstr "正在写入到标准输出(stdout)\n"
 
-#, fuzzy, c-format
-#| msgid "assuming signed data in `%s'\n"
+#, c-format
 msgid "assuming signed data in '%s'\n"
-msgstr "假定被签名的数据‘%s’\n"
+msgstr "假定被签名的数据‘%s’\n"
 
 #, c-format
 msgid "can't handle public key algorithm %d\n"
@@ -4933,18 +4629,17 @@ msgstr "无法操作公钥算法 %d\n"
 msgid "WARNING: potentially insecure symmetrically encrypted session key\n"
 msgstr "警告:潜在不安全的对称加密会话密钥\n"
 
-#, fuzzy, c-format
-#| msgid "Critical signature notation: "
+#, c-format
 msgid "Unknown critical signature notation: "
-msgstr "关键签名注记:"
+msgstr "未知的紧急签名注记: "
 
 #, c-format
 msgid "subpacket of type %d has critical bit set\n"
-msgstr "%d ç±»å\88«ç\9a\84å­\90å\8c\85设å®\9aäº\86å\85³é\94®位\n"
+msgstr "%d ç±»å\9e\8bç\9a\84å­\90å\8c\85设å®\9aäº\86ç´§æ\80¥位\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "problem with the agent: %s\n"
-msgstr "代理程序有问题――正在停用代理程序\n"
+msgstr "代理人程序出现问题:%s\n"
 
 msgid "Enter passphrase\n"
 msgstr "请输入密码\n"
@@ -4955,43 +4650,39 @@ msgstr "用户取消\n"
 
 #, c-format
 msgid " (main key ID %s)"
-msgstr " (主钥匙号 %s)"
+msgstr " (主密钥标识 %s)"
 
-#, fuzzy
 msgid "Please enter the passphrase to unlock the OpenPGP secret key:"
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入密码以解锁 OpenPGP 私钥:"
 
-#, fuzzy
 msgid "Please enter the passphrase to import the OpenPGP secret key:"
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入密码以导入 OpenPGP 私钥:"
 
-#, fuzzy
 msgid "Please enter the passphrase to export the OpenPGP secret subkey:"
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入密码以导出 OpenPGP 私密子密钥:"
 
-#, fuzzy
 msgid "Please enter the passphrase to export the OpenPGP secret key:"
-msgstr "请输入密码:这是一个秘密的句子 \n"
+msgstr "请输入密码以导出 OpenPGP 私钥:"
 
-#, fuzzy
-#| msgid "Do you really want to delete the selected keys? (y/N) "
 msgid "Do you really want to permanently delete the OpenPGP secret subkey key:"
-msgstr "您真的想要删除选定的密钥吗?(y/N)"
+msgstr "您真的想要永久删除此 OpenPGP 私密子密钥吗:"
 
-#, fuzzy
-#| msgid "Do you really want to delete the selected keys? (y/N) "
 msgid "Do you really want to permanently delete the OpenPGP secret key:"
-msgstr "您真的想要删除选定的密钥吗?(y/N)"
+msgstr "您真的想要永久删除此 OpenPGP 私密密钥吗:"
 
-#, fuzzy, c-format
-#| msgid "%u-bit %s key, ID %s, created %s"
+#, c-format
 msgid ""
 "%s\n"
 "\"%.*s\"\n"
 "%u-bit %s key, ID %s,\n"
 "created %s%s.\n"
 "%s"
-msgstr "%u 位的 %s 密钥,钥匙号 %s,建立于 %s"
+msgstr ""
+"%s\n"
+"\"%.*s\"\n"
+"%u 位 %s 密钥,标识 %s,\n"
+"创建于 %s%s.\n"
+"%s"
 
 msgid ""
 "\n"
@@ -5001,38 +4692,35 @@ msgid ""
 "Keeping the image close to 240x288 is a good size to use.\n"
 msgstr ""
 "\n"
-"请挑选一张图片作为您的照片标识 。这张图片一定要是JPEG文件。请记住这张图\n"
-"片会被存放在您的公钥里。如果您挑了非常大的图片的话,您的密钥也会变得非\n"
-"常大!请尽量把图片尺寸控制在240x288左右,这是个理想的尺寸。\n"
+"请挑选一张图片作为您的照片标识。这张图片必须为一个 JPEG文件。\n"
+"请记住这张图片储存在您的公钥里。如果您挑了过大的图片的话,\n"
+"您的密钥也会变得非常大!请把图片控制到接近理想尺寸 240x288。\n"
 
 msgid "Enter JPEG filename for photo ID: "
-msgstr "输入要当作相片标识的JPEG文件名: "
+msgstr "输入要当作相片标识的 JPEG 文件名: "
 
-#, fuzzy, c-format
-#| msgid "unable to open JPEG file `%s': %s\n"
+#, c-format
 msgid "unable to open JPEG file '%s': %s\n"
 msgstr "无法打开 JPEG 文件‘%s’:%s\n"
 
 #, c-format
 msgid "This JPEG is really large (%d bytes) !\n"
-msgstr "这个 JPEG 文件太大了(%d 字节)!\n"
+msgstr "此 JPEG 文件过大(%d 字节)!\n"
 
 msgid "Are you sure you want to use it? (y/N) "
-msgstr "您确定要用它吗?(y/N)"
+msgstr "您确定要用它吗?(y/N) "
 
-#, fuzzy, c-format
-#| msgid "`%s' is not a JPEG file\n"
+#, c-format
 msgid "'%s' is not a JPEG file\n"
-msgstr "â\80\9c%sâ\80\9d不是一个 JPEG 文件\n"
+msgstr "â\80\98%sâ\80\99不是一个 JPEG 文件\n"
 
 msgid "Is this photo correct (y/N/q)? "
-msgstr "这张照片正确吗?(y/N/q)"
+msgstr "这张照片正确吗?(y/N/q) "
 
 #, c-format
 msgid "unable to display photo ID!\n"
 msgstr "无法显示照片标识!\n"
 
-#  a string with valid answers
 #. TRANSLATORS: These are the allowed answers in lower and
 #. uppercase.  Below you will find the matching strings which
 #. should be translated accordingly and the letter changed to
@@ -5047,19 +4735,19 @@ msgid "iImMqQsS"
 msgstr "iImMqQsS"
 
 msgid "No trust value assigned to:\n"
-msgstr "ä¸\8bå\88\97项ç\9b®æ²¡æ\9c\89æ\8c\87å®\9a信任度:\n"
+msgstr "ä¸\8bå\88\97项ç\9b®æ²¡æ\9c\89æ\8c\87å®\9aä¿¡ä»»å\80¼:\n"
 
 #, c-format
 msgid "  aka \"%s\"\n"
-msgstr "  亦即“%s”\n"
+msgstr "  亦即 “%s”\n"
 
 msgid ""
 "How much do you trust that this key actually belongs to the named user?\n"
-msgstr "æ\82¨æ\98¯å\90¦ç\9b¸ä¿¡è¿\99æ\8a\8aå¯\86é\92¥å±\9eäº\8eå®\83æ\89\80声称ç\9a\84æ\8c\81有者?\n"
+msgstr "æ\82¨æ\9c\89å¤\9aç\9b¸ä¿¡è¿\99个å¯\86é\92¥å±\9eäº\8eå\85¶å£°ç§°ç\9a\84æ\89\80有者?\n"
 
 #, c-format
 msgid "  %d = I don't know or won't say\n"
-msgstr "  %d = 我不知道或不作答\n"
+msgstr "  %d = 我不知道或不作答\n"
 
 #, c-format
 msgid "  %d = I do NOT trust\n"
@@ -5073,7 +4761,7 @@ msgid "  m = back to the main menu\n"
 msgstr "  m = 回到主菜单\n"
 
 msgid "  s = skip this key\n"
-msgstr "  s = 跳过这密钥\n"
+msgstr "  s = 跳过这密钥\n"
 
 msgid "  q = quit\n"
 msgstr "  q = 退出\n"
@@ -5083,137 +4771,131 @@ msgid ""
 "The minimum trust level for this key is: %s\n"
 "\n"
 msgstr ""
-"这密钥的最小信任等级为:%s\n"
+"这密钥的最小信任等级为:%s\n"
 "\n"
 
 msgid "Your decision? "
-msgstr "您的决定是什么?"
+msgstr "您的决定是什么? "
 
 msgid "Do you really want to set this key to ultimate trust? (y/N) "
-msgstr "您真的要把这把密钥设成绝对信任?(y/N)"
+msgstr "您真的要把这个密钥设置成绝对信任?(y/N) "
 
 msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "绝对信任的密钥的证书:\n"
+msgstr "确定一个绝对信任的密钥的证书:\n"
 
 #, c-format
 msgid "%s: There is no assurance this key belongs to the named user\n"
-msgstr "%s:没有证据表明这把密钥真的属于它所声称的持有者\n"
+msgstr "%s:不保证这个密钥属于其声称的所有者\n"
 
 #, c-format
 msgid "%s: There is limited assurance this key belongs to the named user\n"
-msgstr "%s:只有有限的证据表明这把密钥属于它所声称的持有者\n"
+msgstr "%s:只有有限的保证这个密钥属于其声称的所有者\n"
 
 #, c-format
 msgid "This key probably belongs to the named user\n"
-msgstr "这把密钥有可能属于它所声称的持有者\n"
+msgstr "这个密钥有可能属于其声称的所有者\n"
 
 #, c-format
 msgid "This key belongs to us\n"
-msgstr "这密钥是属于我们的\n"
+msgstr "这密钥是属于我们的\n"
 
 #, c-format
 msgid "%s: This key is bad!  It has been marked as untrusted!\n"
-msgstr ""
+msgstr "%s:此密钥有问题!其已被标记为不受信任!\n"
 
-#, fuzzy
-#| msgid ""
-#| "It is NOT certain that the key belongs to the person named\n"
-#| "in the user ID.  If you *really* know what you are doing,\n"
-#| "you may answer the next question with yes.\n"
 msgid ""
 "This key is bad!  It has been marked as untrusted!  If you\n"
 "*really* know what you are doing, you may answer the next\n"
 "question with yes.\n"
 msgstr ""
-"这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自\n"
-"己在做什么,您可以在下一个问题回答 yes。\n"
+"此密钥已损坏! 其已被标记为不受信任! 如果您\n"
+"*真的* 了解您正在做的事情,您需要在下面的\n"
+"问题中回答 yes。\n"
 
 msgid ""
 "It is NOT certain that the key belongs to the person named\n"
 "in the user ID.  If you *really* know what you are doing,\n"
 "you may answer the next question with yes.\n"
 msgstr ""
-"这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自\n"
-"己在做什么,您可以在下一个问题回答 yes。\n"
+"这个密钥并不一定属于其用户标识中声称的那个人。如果您真的\n"
+"知道自己在做什么,您可以在下一个问题回答 yes。\n"
 
 msgid "Use this key anyway? (y/N) "
-msgstr "无论如何还是使用这把密钥吗?(y/N)"
+msgstr "无论如何都要使用这个密钥吗?(y/N) "
 
 #, c-format
 msgid "WARNING: Using untrusted key!\n"
-msgstr "警告:正在使用不信任的密钥!\n"
+msgstr "警告:正在使用不信任的密钥!\n"
 
 #, c-format
 msgid "WARNING: this key might be revoked (revocation key not present)\n"
-msgstr "警告:此密钥可能已被吊销(吊销密钥不存在)\n"
+msgstr "警告:此密钥可能已被吊销(吊销用密钥不存在)\n"
 
 #, c-format
 msgid "WARNING: This key has been revoked by its designated revoker!\n"
-msgstr "警告:这把密钥已经被它的指定吊销者吊销了!\n"
+msgstr "警告:密钥已经被它的指定吊销者吊销了!\n"
 
 #, c-format
 msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "警告:这把密钥已经被它的持有者吊销了!\n"
+msgstr "警告:此密钥已经被它的所有者吊销了!\n"
 
 #, c-format
 msgid "         This could mean that the signature is forged.\n"
-msgstr "      这表明这个签名有可能是伪造的。\n"
+msgstr "      这可能表明此签名是伪造的。\n"
 
 #, c-format
 msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "警告:这把子钥已经被它的持有者吊销了!\n"
+msgstr "警告:此子密钥已经被它的所有者吊销了!\n"
 
 #, c-format
 msgid "Note: This key has been disabled.\n"
-msgstr "注意:这把密钥已经被禁用了。\n"
+msgstr "注意:此密钥已被禁用。\n"
 
-#, fuzzy, c-format
-#| msgid "Note: Verified signer's address is `%s'\n"
+#, c-format
 msgid "Note: Verified signer's address is '%s'\n"
-msgstr "注意:验证过的签名者的地址是‘%s’\n"
+msgstr "注意:已验证的签名者的地址是‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "Note: Signer's address `%s' does not match DNS entry\n"
+#, c-format
 msgid "Note: Signer's address '%s' does not match DNS entry\n"
 msgstr "注意:签名者的地址‘%s’不匹配任何 DNS 记录\n"
 
 #, c-format
 msgid "trustlevel adjusted to FULL due to valid PKA info\n"
-msgstr "PKA 信息有效,信任级别调整到“完全”\n"
+msgstr "由于 PKA 信息有效,信任级别调整到“完全”\n"
 
 #, c-format
 msgid "trustlevel adjusted to NEVER due to bad PKA info\n"
-msgstr "PKA 信息无效,信任级别调整到“从不”\n"
+msgstr "由于 PKA 信息无效,信任级别调整到“从不”\n"
 
 #, c-format
 msgid "Note: This key has expired!\n"
-msgstr "注意:这把密钥已经过期了!\n"
+msgstr "注意:此密钥已过期!\n"
 
 #, c-format
 msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "警告:这把密钥未经受信任的签名认证!\n"
+msgstr "警告:此密钥未被受信任签名认证!\n"
 
 #, c-format
 msgid ""
 "         There is no indication that the signature belongs to the owner.\n"
-msgstr "      没有证据表明这个签名属于它所声称的持有者。\n"
+msgstr "      没有证据表明此签名属于其声称的所有者。\n"
 
 #, c-format
 msgid "WARNING: We do NOT trust this key!\n"
-msgstr "警告:我们不信任这密钥!\n"
+msgstr "警告:我们不信任这密钥!\n"
 
 #, c-format
 msgid "         The signature is probably a FORGERY.\n"
-msgstr "      这个签名很有可能是伪造的。\n"
+msgstr "     签名很有可能是伪造的。\n"
 
 #, c-format
 msgid ""
 "WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr "警告:这把密钥未经有足够信任度的签名所认证。\n"
+msgstr "警告:此密钥未被足够可信的签名所认证!\n"
 
 #, c-format
 msgid "         It is not certain that the signature belongs to the owner.\n"
-msgstr "      这份签名并不一定属于它所声称的持有者\n"
+msgstr "      此签名并不一定属于其声称的所有者。\n"
 
 #, c-format
 msgid "%s: skipped: %s\n"
@@ -5227,38 +4909,37 @@ msgstr "%s:已跳过:公钥已被禁用\n"
 msgid "%s: skipped: public key already present\n"
 msgstr "%s: 已跳过:公钥已存在\n"
 
-#, fuzzy, c-format
-#| msgid "can't connect to `%s': %s\n"
+#, c-format
 msgid "can't encrypt to '%s'\n"
-msgstr "无法连接至‘%s’:%s\n"
+msgstr "无法加密给‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "option '%s' given, but no valid default keys given\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "选项‘%s’已给定,但尚未给定有效的默认密钥\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "option '%s' given, but option '%s' not given\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "选项‘%s’已给定,但是选项‘%s’尚未给定\n"
 
 msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "您没有指定用户标识。(您可以在命令行中用“-r”指定)\n"
+msgstr "您没有指定用户标识。(您可以在命令行中用“-r”指定)\n"
 
 msgid "Current recipients:\n"
-msgstr "å½\93å\89\8dæ\94¶ä»¶äºº:\n"
+msgstr "å½\93å\89\8dæ\8e¥æ\94¶è\80\85:\n"
 
 msgid ""
 "\n"
 "Enter the user ID.  End with an empty line: "
 msgstr ""
 "\n"
-"输入用户标识。以空白行结束:"
+"输入用户标识。以空白行结束: "
 
 msgid "No such user ID.\n"
-msgstr "没有这用户标识。\n"
+msgstr "没有这样的用户标识。\n"
 
 #, c-format
 msgid "skipped: public key already set as default recipient\n"
-msgstr "已跳è¿\87ï¼\9aå\85¬é\92¥å·²è¢«è®¾ä¸ºé»\98认æ\94¶ä»¶è\80\85\n"
+msgstr "已跳è¿\87ï¼\9aå\85¬é\92¥å·²è¢«è®¾ä¸ºé»\98认æ\8e¥æ\94¶è\80\85\n"
 
 msgid "Public key is disabled.\n"
 msgstr "公钥被禁用。\n"
@@ -5269,19 +4950,19 @@ msgstr "已跳过:公钥已被设定\n"
 
 #, c-format
 msgid "unknown default recipient \"%s\"\n"
-msgstr "æ\9cªç\9f¥ç\9a\84é»\98认æ\94¶ä»¶è\80\85“%s”\n"
+msgstr "æ\9cªç\9f¥ç\9a\84é»\98认æ\8e¥æ\94¶è\80\85 “%s”\n"
 
 #, c-format
 msgid "no valid addressees\n"
 msgstr "没有有效的地址\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Note: key %s has no %s feature\n"
-msgstr "密钥 %s:没有有效的用户标识\n"
+msgstr "注意:密钥 %s 没有 %s 特性\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Note: key %s has no preference for %s\n"
-msgstr "密钥 %s:没有有效的用户标识\n"
+msgstr "注意:密钥 %s 没有关于 %s 的偏好设置\n"
 
 #, c-format
 msgid "data not saved; use option \"--output\" to save it\n"
@@ -5295,32 +4976,31 @@ msgstr "请输入数据文件的名称: "
 
 #, c-format
 msgid "reading stdin ...\n"
-msgstr "正在从标准输入读取 ...\n"
+msgstr "正在从标准输入(stdin)读取 ...\n"
 
 #, c-format
 msgid "no signed data\n"
-msgstr "不含签名的数据\n"
+msgstr "没有已签名的数据\n"
 
-#, fuzzy, c-format
-#| msgid "can't open signed data `%s'\n"
+#, c-format
 msgid "can't open signed data '%s'\n"
-msgstr "无法打开签名的数据‘%s’\n"
+msgstr "无法打开签名的数据‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't open signed data fd=%d: %s\n"
-msgstr "无法打开有签名的数据‘%s’\n"
+msgstr "无法打开已签名的数据 fd=%d: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "key %s is not suitable for decryption in %s mode\n"
-msgstr "密钥 %sï¼\9a没æ\9c\89æ\9c\89æ\95\88ç\9a\84ç\94¨æ\88·æ \87è¯\86\n"
+msgstr "密钥 %s å\9c¨ %s æ¨¡å¼\8fä¸\8bä¸\8dé\80\82ç\94¨äº\8e解å¯\86\n"
 
 #, c-format
 msgid "anonymous recipient; trying secret key %s ...\n"
-msgstr "å\8c¿å\90\8dæ\94¶ä»¶è\80\85ï¼\9bæ­£å\9c¨å°\9dè¯\95使ç\94¨ç§\81é\92¥ %s â\80¦â\80¦\n"
+msgstr "å\8c¿å\90\8dæ\8e¥æ\94¶è\80\85ï¼\9bæ­£å\9c¨å°\9dè¯\95使ç\94¨ç§\81é\92¥ %s â\80¦â\80¦\n"
 
 #, c-format
 msgid "okay, we are the anonymous recipient.\n"
-msgstr "å¾\88好ï¼\8cæ\88\91们就æ\98¯å\8c¿å\90\8dæ\94¶ä»¶è\80\85ã\80\82\n"
+msgstr "å¾\88好ï¼\8cæ\88\91们就æ\98¯å\8c¿å\90\8dæ\8e¥æ\94¶è\80\85ã\80\82\n"
 
 #, c-format
 msgid "old encoding of the DEK is not supported\n"
@@ -5328,19 +5008,17 @@ msgstr "不支持旧式的 DEK 编码\n"
 
 #, c-format
 msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "对称å\8a å¯\86算法 %d%s 未知或已停用\n"
+msgstr "å¯\86æ\96\87算法 %d%s 未知或已停用\n"
 
 #, c-format
 msgid "WARNING: cipher algorithm %s not found in recipient preferences\n"
-msgstr "注æ\84\8fï¼\9aæ\94¶ä»¶äººç\9a\84é¦\96é\80\89项中æ\89¾ä¸\8då\88°å\8a å¯\86算法 %s\n"
+msgstr "注æ\84\8fï¼\9aæ\8e¥æ\94¶è\80\85ç\9a\84å\81\8f好设置中æ\89¾ä¸\8då\88°å¯\86æ\96\87算法 %s\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: secret key %s expired at %s\n"
+#, c-format
 msgid "Note: secret key %s expired at %s\n"
 msgstr "注意:私钥 %s 已于 %s 过期\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: key has been revoked"
+#, c-format
 msgid "Note: key has been revoked"
 msgstr "注意:密钥已被吊销"
 
@@ -5350,46 +5028,45 @@ msgstr "build_packet 失败:%s\n"
 
 #, c-format
 msgid "key %s has no user IDs\n"
-msgstr "密钥 %s没有有效的用户标识\n"
+msgstr "密钥 %s 没有有效的用户标识\n"
 
 msgid "To be revoked by:\n"
-msgstr "将被吊销,吊销者:\n"
+msgstr "将被吊销,吊销者:\n"
 
 msgid "(This is a sensitive revocation key)\n"
-msgstr "(这是一把敏感的吊销密钥)\n"
+msgstr "(这是一个敏感的吊销用密钥)\n"
 
-#, fuzzy
-#| msgid "Secret key is available.\n"
 msgid "Secret key is not available.\n"
-msgstr "私钥可用。\n"
+msgstr "私钥可用。\n"
 
 msgid "Create a designated revocation certificate for this key? (y/N) "
-msgstr "要为这把密钥建立一份指定吊销者证书吗?(y/N)"
+msgstr "要为这个密钥创建一个指定吊销者证书吗?(y/N) "
 
 msgid "ASCII armored output forced.\n"
-msgstr "已强行使用 ASCII 封装过的输出。\n"
+msgstr "已强è¡\8c使ç\94¨ ASCII å­\97符å°\81è£\85è¿\87ç\9a\84è¾\93å\87ºã\80\82\n"
 
 #, c-format
 msgid "make_keysig_packet failed: %s\n"
-msgstr "make_keysig_packet 失败: %s\n"
+msgstr "make_keysig_packet 方法失败: %s\n"
 
 msgid "Revocation certificate created.\n"
 msgstr "已建立吊销证书。\n"
 
 #, c-format
 msgid "no revocation keys found for \"%s\"\n"
-msgstr "没有找到“%s”的吊销密钥\n"
+msgstr "没有找到 “%s” 的吊销用密钥\n"
 
-#, fuzzy
-#| msgid "Create a revocation certificate for this key? (y/N) "
 msgid "This is a revocation certificate for the OpenPGP key:"
-msgstr "è¦\81为è¿\99æ\8a\8aå¯\86é\92¥å»ºç«\8bä¸\80份å\90\8aé\94\80è¯\81书å\90\97ï¼\9f(y/N)"
+msgstr "è¿\99æ\98¯ä¸\80份é\92\88对此 OpenPGP å¯\86é\92¥ç\9a\84å\90\8aé\94\80è¯\81书ï¼\9a"
 
 msgid ""
 "A revocation certificate is a kind of \"kill switch\" to publicly\n"
 "declare that a key shall not anymore be used.  It is not possible\n"
 "to retract such a revocation certificate once it has been published."
 msgstr ""
+"吊销证书就像是一种“紧急按钮”,用来公开地\n"
+"声明一个密钥将不再被使用。 一旦一个这样的\n"
+"吊销证书被发布之后,就不可能撤回。"
 
 msgid ""
 "Use it to revoke this key in case of a compromise or loss of\n"
@@ -5398,37 +5075,41 @@ msgid ""
 "a reason for the revocation.  For details see the description of\n"
 "of the gpg command \"--generate-revocation\" in the GnuPG manual."
 msgstr ""
+"使用它来吊销这个密钥是一种折衷的方法,或者在私钥丢失的\n"
+"时候使用。然而只要私钥仍然可被访问,更好的做法是生成一\n"
+"个新的吊销证书并给定一个吊销理由。更多的细节请参阅\n"
+" GnuPG 手册中关于 gpg 命令“--generate-revocation”的描述。"
 
 msgid ""
 "To avoid an accidental use of this file, a colon has been inserted\n"
 "before the 5 dashes below.  Remove this colon with a text editor\n"
 "before importing and publishing this revocation certificate."
 msgstr ""
+"为了避免意外使用了此文件,一个冒号已经被插入到了下面的\n"
+"5 个短横线之前。在导入和发布此吊销证书之前,请使用一个\n"
+"文本编辑器来移除此冒号。"
 
-#, fuzzy, c-format
-#| msgid "Revocation certificate created.\n"
+#, c-format
 msgid "revocation certificate stored as '%s.rev'\n"
-msgstr "已建ç«\8bå\90\8aé\94\80è¯\81书ã\80\82\n"
+msgstr "å\90\8aé\94\80è¯\81书已被å­\98å\82¨ä¸ºâ\80\98%s.revâ\80\99\n"
 
-#, fuzzy, c-format
-#| msgid "secret key \"%s\" not found: %s\n"
+#, c-format
 msgid "secret key \"%s\" not found\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "私钥 “%s” 未找到\n"
 
 #. TRANSLATORS: The %s prints a key specification which
 #. for example has been given at the command line.  Several lines
 #. lines with secret key infos are printed after this message.
 #, c-format
 msgid "'%s' matches multiple secret keys:\n"
-msgstr ""
+msgstr "‘%s’匹配了多个私钥:\n"
 
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
+#, c-format
 msgid "error searching the keyring: %s\n"
-msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+msgstr "搜索钥匙环时出现错误: %s\n"
 
 msgid "Create a revocation certificate for this key? (y/N) "
-msgstr "要为这把密钥建立一份吊销证书吗?(y/N)"
+msgstr "要为这个密钥创建一个吊销证书吗?(y/N) "
 
 msgid ""
 "Revocation certificate created.\n"
@@ -5439,13 +5120,13 @@ msgid ""
 "your media become unreadable.  But have some caution:  The print system of\n"
 "your machine might store the data and make it available to others!\n"
 msgstr ""
-"已建ç«\8b吊销证书。\n"
+"å·²å\88\9b建吊销证书。\n"
 "\n"
-"请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这\n"
-"份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏\n"
-"到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万\n"
-"小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他\n"
-"人也能够看得到的地方!\n"
+"请把这个文件转移到一个您可以藏起来的介质上;如果坏人获取到了这\n"
+"份证书的话,那么他就能使用它并让您的密钥无法继续使用。把此证书\n"
+"打印出来再存放到安全的地方也是很好的方法,以免您的保存媒体变得\n"
+"不可读。但是千万小心:您机器上的打印系统可能会在打印过程中储存\n"
+"这些数据,并使得其他人看到!\n"
 
 msgid "Please select the reason for the revocation:\n"
 msgstr "请选择吊销的原因:\n"
@@ -5455,50 +5136,48 @@ msgstr "取消"
 
 #, c-format
 msgid "(Probably you want to select %d here)\n"
-msgstr "(也许您会想要在这里选择 %d)\n"
+msgstr "(也许您会想要在这里选择 %d)\n"
 
 msgid "Enter an optional description; end it with an empty line:\n"
-msgstr "请输入描述(可选);以空白行结束:\n"
+msgstr "请输入描述(可选);以空白行结束:\n"
 
 #, c-format
 msgid "Reason for revocation: %s\n"
 msgstr "吊销原因:%s\n"
 
 msgid "(No description given)\n"
-msgstr "(不给定描述)\n"
+msgstr "(未给定描述)\n"
 
 msgid "Is this okay? (y/N) "
-msgstr "这样可以吗? (y/N)"
+msgstr "这样可以吗? (y/N) "
 
 #, c-format
 msgid "weak key created - retrying\n"
-msgstr "建ç«\8bäº\86å¼±å¯\86é\92¥â\80\95â\80\95正在重试\n"
+msgstr "å\88\9b建äº\86å¼±å¯\86é\92¥ - 正在重试\n"
 
 #, c-format
 msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr "对称å\8a å¯\86无法避免生成弱密钥;已经尝试 %d 次!\n"
+msgstr "对称å¯\86æ\96\87无法避免生成弱密钥;已经尝试 %d 次!\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s key %s uses an unsafe (%zu bit) hash\n"
-msgstr "DSA 密钥 %s 使用不安全的(%u 位)的散列\n"
+msgstr "%s 密钥 %s 使用了一个不安全的(%zu 位)散列\n"
 
-#, fuzzy, c-format
-#| msgid "DSA key %s requires a %u bit or larger hash\n"
+#, c-format
 msgid "%s key %s requires a %zu bit or larger hash (hash is %s)\n"
-msgstr "DSA 密钥 %s 需要 %u 位或更长的散列\n"
+msgstr "%s 密钥 %s 要求一个 %zu 位或更长的散列(散列是 %s)\n"
 
 #, c-format
 msgid "WARNING: signature digest conflict in message\n"
 msgstr "警告:签名散列值与报文不一致\n"
 
-#, fuzzy, c-format
-#| msgid "you may not use %s while in %s mode\n"
+#, c-format
 msgid "key %s may not be used for signing in %s mode\n"
-msgstr "您不该将 %s 用于 %s 模式中\n"
+msgstr "密钥 %s 在 %s 模式中不适用于签名\n"
 
 #, c-format
 msgid "WARNING: signing subkey %s is not cross-certified\n"
-msgstr "警告:签名的子钥 %s 未经交叉验证\n"
+msgstr "警告:签名的子钥 %s 未经交叉验证\n"
 
 #, c-format
 msgid "please see %s for more information\n"
@@ -5506,59 +5185,48 @@ msgstr "请参见 %s 以得到更多信息。\n"
 
 #, c-format
 msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
-msgstr "警告:签名的子钥 %s 交叉验证无效\n"
+msgstr "警告:签名的子密钥 %s 具有无效的交叉验证\n"
 
-#, fuzzy, c-format
-#| msgid "public key %s is %lu second newer than the signature\n"
+#, c-format
 msgid "public key %s is %lu second newer than the signature\n"
 msgid_plural "public key %s is %lu seconds newer than the signature\n"
-msgstr[0] "公钥 %s 在其签名后 %lu 秒生成\n"
-msgstr[1] "公钥 %s 在其签名后 %lu 秒生成\n"
+msgstr[0] "公钥 %s 在其签名之后的 %lu 秒生成\n"
 
-#, fuzzy, c-format
-#| msgid "public key %s is %lu second newer than the signature\n"
+#, c-format
 msgid "public key %s is %lu day newer than the signature\n"
 msgid_plural "public key %s is %lu days newer than the signature\n"
-msgstr[0] "公钥 %s 在其签名后 %lu 秒生成\n"
-msgstr[1] "公钥 %s 在其签名后 %lu 秒生成\n"
+msgstr[0] "公钥 %s 在其签名之后的 %lu 天生成\n"
 
-#, fuzzy, c-format
-#| msgid ""
-#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+#, c-format
 msgid ""
 "key %s was created %lu second in the future (time warp or clock problem)\n"
 msgid_plural ""
 "key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr[0] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
-msgstr[1] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+msgstr[0] ""
+"密钥 %s 生成于未来的 %lu 秒后(可能是因为时空扭曲或系统时钟的问题)\n"
 
-#, fuzzy, c-format
-#| msgid ""
-#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+#, c-format
 msgid "key %s was created %lu day in the future (time warp or clock problem)\n"
 msgid_plural ""
 "key %s was created %lu days in the future (time warp or clock problem)\n"
-msgstr[0] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
-msgstr[1] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+msgstr[0] ""
+"密钥 %s 生成于未来的 %lu 天后(可能是因为时空扭曲或系统时钟的问题)\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: signature key %s expired %s\n"
+#, c-format
 msgid "Note: signature key %s expired %s\n"
 msgstr "注意:签名密钥 %s 已于 %s 过期\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Note: signature key %s has been revoked\n"
-msgstr "注意:密钥已被吊销"
+msgstr "注意:签名密钥 %s 已被吊销\n"
 
-#, fuzzy, c-format
-#| msgid "standalone signature of class 0x%02x\n"
+#, c-format
 msgid "bad key signature from key %s: %s (0x%02x, 0x%x)\n"
-msgstr "等级 0x%02x 的独立签名\n"
+msgstr "损坏的密钥签名来自密钥 %s: %s (0x%02x, 0x%x)\n"
 
-#, fuzzy, c-format
-#| msgid "standalone signature of class 0x%02x\n"
+#, c-format
 msgid "bad data signature from key %s: %s (0x%02x, 0x%x)\n"
-msgstr "等级 0x%02x 的独立签名\n"
+msgstr "损坏的数据签名来自密钥 %s: %s (0x%02x, 0x%x)\n"
 
 #, c-format
 msgid "assuming bad signature from key %s due to an unknown critical bit\n"
@@ -5566,26 +5234,26 @@ msgstr "假定密钥 %s 的签名由于某个未知的关键位出错而损坏\n
 
 #, c-format
 msgid "key %s: no subkey for subkey revocation signature\n"
-msgstr "密钥 %s:没有子钥吊销签名所需的子钥\n"
+msgstr "密钥 %s:没有用于子密钥吊销签名的子密钥\n"
 
 #, c-format
 msgid "key %s: no subkey for subkey binding signature\n"
-msgstr "密钥 %s:没有子钥绑定签名所需的子钥\n"
+msgstr "密钥 %s:没有用于子密钥绑定签名的子密钥\n"
 
 #, c-format
 msgid "WARNING: unable to %%-expand notation (too large).  Using unexpanded.\n"
-msgstr "警告:注记 %% 无法扩展(太大了)。现在使用未扩展的。\n"
+msgstr "警告:注记 %% 无法扩展(过大)。现在使用未扩展的。\n"
 
 #, c-format
 msgid ""
 "WARNING: unable to %%-expand policy URL (too large).  Using unexpanded.\n"
-msgstr "警告:无法 %%-扩展策略 URL (太大了)。现在使用未扩展的。\n"
+msgstr "警告:策略 URL  %% 无法扩展(过大)。现在使用未扩展的。\n"
 
 #, c-format
 msgid ""
 "WARNING: unable to %%-expand preferred keyserver URL (too large).  Using "
 "unexpanded.\n"
-msgstr "警告:无法 %%-扩展首选公钥服务器 URL (太大了)。现在使用未扩展的。\n"
+msgstr "警告:首选公钥服务器 URL %% 无法扩展(过大)。现在使用未扩展的。\n"
 
 #, c-format
 msgid "%s/%s signature from: \"%s\"\n"
@@ -5594,30 +5262,31 @@ msgstr "%s/%s 签名来自:“%s”\n"
 #, c-format
 msgid ""
 "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "警告:强行使用的 %s (%d)散列算法不在收件者的首选项中\n"
+msgstr "警告:强制摘要算法 %s (%d) 与接收者的偏好设置冲突\n"
 
 #, c-format
 msgid "signing:"
 msgstr "正在签名:"
 
-#, c-format
+#, fuzzy, c-format
+#| msgid "%s.%s encryption will be used\n"
 msgid "%s encryption will be used\n"
-msgstr "%s 加密将被采用\n"
+msgstr "%s.%s 加密将被使用\n"
 
 #, c-format
 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr "密钥未被标示为不安全――不能与假的随机数发生器共同使用!\n"
+msgstr "密钥未被标示为不安全不能与假的随机数发生器共同使用!\n"
 
 #, c-format
 msgid "skipped \"%s\": duplicated\n"
-msgstr "“%s”已跳过:重复\n"
+msgstr "“%s” 已跳过:重复\n"
 
 #, c-format
 msgid "skipped: secret key already present\n"
 msgstr "已跳过:私钥已存在\n"
 
 msgid "this is a PGP generated Elgamal key which is not secure for signatures!"
-msgstr "这是一把由 PGP 生成的 ElGamal 密钥,用于签名不安全!"
+msgstr "这是一个由 PGP 生成的 ElGamal 密钥,其用于签名时不安全!"
 
 #, c-format
 msgid "trust record %lu, type %d: write failed: %s\n"
@@ -5628,47 +5297,42 @@ msgid ""
 "# List of assigned trustvalues, created %s\n"
 "# (Use \"gpg --import-ownertrust\" to restore them)\n"
 msgstr ""
-"# 已指定的信任度的清单,建立于 %s \n"
-"# (请用“gpg --import-ownertrust”导入这些信任度)\n"
+"# 已指定的信任度的列表,创建于 %s \n"
+"# (请用“gpg --import-ownertrust”导入这些信任度)\n"
 
-#, fuzzy, c-format
-#| msgid "error in `%s': %s\n"
+#, c-format
 msgid "error in '%s': %s\n"
-msgstr "‘%s’中出:%s\n"
+msgstr "‘%s’中出现错误:%s\n"
 
 msgid "line too long"
-msgstr "列太长"
+msgstr "行过长"
 
 msgid "colon missing"
 msgstr "冒号缺失"
 
 msgid "invalid fingerprint"
-msgstr "æ\8c\87纹æ\97 æ\95\88"
+msgstr "æ\97 æ\95\88ç\9a\84æ\8c\87纹"
 
 msgid "ownertrust value missing"
-msgstr "没有信任度"
+msgstr "信任度缺失"
 
-#, fuzzy, c-format
-#| msgid "error finding trust record in `%s': %s\n"
+#, c-format
 msgid "error finding trust record in '%s': %s\n"
-msgstr "在‘%s’中寻找信任度记录时出:%s\n"
+msgstr "在‘%s’中寻找信任度记录时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "read error in `%s': %s\n"
+#, c-format
 msgid "read error in '%s': %s\n"
-msgstr "读取‘%s’错误:%s\n"
+msgstr "读取‘%s’时出现错误:%s\n"
 
 #, c-format
 msgid "trustdb: sync failed: %s\n"
-msgstr "信任度数据库:同步失败:%s\n"
+msgstr "信任度数据库:sync 失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "can't create lock for `%s'\n"
+#, c-format
 msgid "can't create lock for '%s'\n"
-msgstr "不能为‘%s’创建锁定\n"
+msgstr "无法为‘%s’创建锁\n"
 
-#, fuzzy, c-format
-#| msgid "can't lock `%s'\n"
+#, c-format
 msgid "can't lock '%s'\n"
 msgstr "无法锁定‘%s’\n"
 
@@ -5688,10 +5352,9 @@ msgstr "信任度数据库处理量过大\n"
 msgid "%s: directory does not exist!\n"
 msgstr "%s:目录不存在!\n"
 
-#, fuzzy, c-format
-#| msgid "can't access `%s': %s\n"
+#, c-format
 msgid "can't access '%s': %s\n"
-msgstr "无法存取‘%s’:%s\n"
+msgstr "无法访问‘%s’:%s\n"
 
 #, c-format
 msgid "%s: failed to create version record: %s"
@@ -5705,8 +5368,7 @@ msgstr "%s:建立了无效的信任度数据库\n"
 msgid "%s: trustdb created\n"
 msgstr "%s:建立了信任度数据库\n"
 
-#, fuzzy, c-format
-#| msgid "NOTE: trustdb not writable\n"
+#, c-format
 msgid "Note: trustdb not writable\n"
 msgstr "注意:信任度数据库不可写入\n"
 
@@ -5720,15 +5382,15 @@ msgstr "%s:建立散列表失败:%s\n"
 
 #, c-format
 msgid "%s: error updating version record: %s\n"
-msgstr "%s:更新版本记录时出: %s\n"
+msgstr "%s:更新版本记录时出现错误: %s\n"
 
 #, c-format
 msgid "%s: error reading version record: %s\n"
-msgstr "%s:读取版本记录时出: %s\n"
+msgstr "%s:读取版本记录时出现错误: %s\n"
 
 #, c-format
 msgid "%s: error writing version record: %s\n"
-msgstr "%s:写入版本记录时出:%s\n"
+msgstr "%s:写入版本记录时出现错误:%s\n"
 
 #, c-format
 msgid "trustdb: lseek failed: %s\n"
@@ -5752,11 +5414,11 @@ msgstr "%s:无效的文件版本%d\n"
 
 #, c-format
 msgid "%s: error reading free record: %s\n"
-msgstr "%s:读取自由记录时出:%s\n"
+msgstr "%s:读取自由记录时出现错误:%s\n"
 
 #, c-format
 msgid "%s: error writing dir record: %s\n"
-msgstr "%s:写入目录记录时出:%s\n"
+msgstr "%s:写入目录记录时出现错误:%s\n"
 
 #, c-format
 msgid "%s: failed to zero a record: %s\n"
@@ -5766,9 +5428,9 @@ msgstr "%s:记录归零时失败:%s\n"
 msgid "%s: failed to append a record: %s\n"
 msgstr "%s:附加记录时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error: The trustdb is corrupted.\n"
-msgstr "%s:建立了信任度数据库\n"
+msgstr "错误:信任度数据库已被破坏。\n"
 
 #, c-format
 msgid "can't handle text lines longer than %d characters\n"
@@ -5778,309 +5440,274 @@ msgstr "无法处理长于 %d 字符的文本行\n"
 msgid "input line longer than %d characters\n"
 msgstr "输入行长度超过 %d 字符\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error beginning transaction on TOFU database: %s\n"
-msgstr "在‘%s’中寻找信任度记录时出错:%s\n"
+msgstr "在 TOFU 数据库上开始交易时出现错误:%s\n"
 
 #, c-format
 msgid "error committing transaction on TOFU database: %s\n"
-msgstr ""
+msgstr "在 TOFU 数据库上提交交易时出现错误:%s\n"
 
 #, c-format
 msgid "error rolling back transaction on TOFU database: %s\n"
-msgstr ""
+msgstr "在 TOFU 数据库上回滚交易时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "unsupported TOFU database version: %s\n"
-msgstr ""
-"\n"
-"支持的算法:\n"
+msgstr "不支持的 TOFU 数据库版本: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating 'ultimately_trusted_keys' TOFU table: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "创建名为‘ultimately_trusted_keys’的TOFU 表时出现错误:%s\n"
 
 #, c-format
 msgid "TOFU DB error"
-msgstr ""
+msgstr "TOFU DB 错误"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading TOFU database: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取 TOFU 数据库时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error writing secret keyring `%s': %s\n"
+#, c-format
 msgid "error determining TOFU database's version: %s\n"
-msgstr "写入私钥钥匙环‘%s’时发生错误: %s\n"
+msgstr "检测 TOFU 数据库版本时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "%s: error writing dir record: %s\n"
+#, c-format
 msgid "error initializing TOFU database: %s\n"
-msgstr "%s:写入目录记录时出错:%s\n"
+msgstr "初始化 TOFU 数据库时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating 'encryptions' TOFU table: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "创建名为‘encryptions’的TOFU 表时出现错误:%s\n"
 
 #, c-format
 msgid "adding column effective_policy to bindings DB: %s\n"
-msgstr ""
+msgstr "添加列 effective_policy 到绑定的 DB:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error opening TOFU database '%s': %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "打开 TOFU 数据库’%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error updating TOFU database: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "更新 TOFU 数据库时出现错误:%s\n"
 
 #, c-format
 msgid ""
 "This is the first time the email address \"%s\" is being used with key %s."
-msgstr ""
+msgstr "这是电子邮件地址 “%s” 第一次被用于密钥 %s。"
 
 #, c-format
 msgid "The email address \"%s\" is associated with %d key!"
 msgid_plural "The email address \"%s\" is associated with %d keys!"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "电子邮件地址 “%s” 被关联到了 %d 把密钥!"
 
 msgid "  Since this binding's policy was 'auto', it has been changed to 'ask'."
-msgstr ""
+msgstr "  此前的绑定策略为‘auto’,现已被变更为‘ask’。"
 
 #, c-format
 msgid ""
 "Please indicate whether this email address should be associated with key %s "
 "or whether you think someone is impersonating \"%s\"."
 msgstr ""
+"请确定此电子邮件地址是否应当被关联到密钥 %s 或者您是否认为是有人在模仿 “%s”。"
 
-#, fuzzy, c-format
-#| msgid "error getting new PIN: %s\n"
+#, c-format
 msgid "error gathering other user IDs: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取其他用户标识时出现错误:%s\n"
 
-#, fuzzy
-#| msgid "list key and user IDs"
 msgid "This key's user IDs:\n"
-msgstr "列出密钥和用户标识"
+msgstr "此密钥的用户标识:\n"
 
-#, fuzzy, c-format
-#| msgid "validity: %s"
+#, c-format
 msgid "policy: %s"
-msgstr "有效性:%s"
+msgstr "策略:%s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error gathering signature stats: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取签名状态时出现错误:%s\n"
 
 #, c-format
 msgid "The email address \"%s\" is associated with %d key:\n"
 msgid_plural "The email address \"%s\" is associated with %d keys:\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "电子邮件地址 “%s” 被关联到了 %d  把密钥:\n"
 
 #, c-format
 msgid "Statistics for keys with the email address \"%s\":\n"
-msgstr ""
+msgstr "具有电子邮件地址 “%s” 的密钥的统计信息:\n"
 
-#, fuzzy
-#| msgid "list keys"
 msgid "this key"
-msgstr "列出密钥"
+msgstr "密钥"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Verified %d message."
 msgid_plural "Verified %d messages."
-msgstr[0] "|算法 [文件]|使用指定的散列算法打印报文散列值"
-msgstr[1] "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr[0] "已验证 %d 条消息。"
 
-#, fuzzy, c-format
-#| msgid "encrypted with %lu passphrases\n"
+#, c-format
 msgid "Encrypted %d message."
 msgid_plural "Encrypted %d messages."
-msgstr[0] "以 %lu 个密码加密\n"
-msgstr[1] "以 %lu 个密码加密\n"
+msgstr[0] "已加密 %d 条消息。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Verified %d message in the future."
 msgid_plural "Verified %d messages in the future."
-msgstr[0] "|算法 [文件]|使用指定的散列算法打印报文散列值"
-msgstr[1] "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr[0] "已验证 %d 条将来的消息。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Encrypted %d message in the future."
 msgid_plural "Encrypted %d messages in the future."
-msgstr[0] "|算法 [文件]|使用指定的散列算法打印报文散列值"
-msgstr[1] "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr[0] "已加密 %d 条将来的消息。"
 
 #, c-format
 msgid "Messages verified over the past %d day: %d."
 msgid_plural "Messages verified over the past %d days: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "在过去的 %d 天被验证的消息数目:%d。"
 
 #, c-format
 msgid "Messages encrypted over the past %d day: %d."
 msgid_plural "Messages encrypted over the past %d days: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "在过去的 %d 天被加密的消息数目:%d。"
 
 #, c-format
 msgid "Messages verified over the past %d month: %d."
 msgid_plural "Messages verified over the past %d months: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "在过去的 %d 个月被验证的消息数目:%d。"
 
 #, c-format
 msgid "Messages encrypted over the past %d month: %d."
 msgid_plural "Messages encrypted over the past %d months: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "在过去的 %d 个月被加密的消息数目:%d。"
 
 #, c-format
 msgid "Messages verified over the past %d year: %d."
 msgid_plural "Messages verified over the past %d years: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "在过去的 %d 年被验证的消息数目:%d。"
 
 #, c-format
 msgid "Messages encrypted over the past %d year: %d."
 msgid_plural "Messages encrypted over the past %d years: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "在过去的 %d 年被加密的消息数目:%d。"
 
 #, c-format
 msgid "Messages verified in the past: %d."
-msgstr ""
+msgstr "过去被验证的消息:%d."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Messages encrypted in the past: %d."
-msgstr "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr "过去被加密的消息: %d。"
 
 #. TRANSLATORS: Please translate the text found in the source
 #. * file below.  We don't directly internationalize that text so
 #. * that we can tweak it without breaking translations.
 msgid "TOFU detected a binding conflict"
-msgstr ""
+msgstr "TOFU 检测到了一个绑定冲突"
 
 #. TRANSLATORS: Two letters (normally the lower and upper case
 #. * version of the hotkey) for each of the five choices.  If
 #. * there is only one choice in your language, repeat it.
 msgid "gGaAuUrRbB"
-msgstr ""
+msgstr "gGaAuUrRbB"
 
 msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
-msgstr ""
+msgstr "良好(G),接受一次(A),未知(U),拒绝一次(R),损坏(B) ? "
 
 msgid "Defaulting to unknown.\n"
-msgstr ""
+msgstr "默认为未知。\n"
 
 #, c-format
 msgid "TOFU db corruption detected.\n"
-msgstr ""
+msgstr "检测到 TOFU 数据库出错。\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "resetting keydb: %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "正在重置 keydb: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error setting TOFU binding's policy to %s\n"
-msgstr "读å\8f\96â\80\98%sâ\80\99æ\97¶å\87ºé\94\99ï¼\9a%s\n"
+msgstr "设置 TOFU ç»\91å®\9aç\9a\84ç­\96ç\95¥è\87³ %s æ\97¶å\87ºç\8e°é\94\99误\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error changing TOFU policy: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "变更 TOFU 策略时出现错误:%s\n"
 
 #, c-format
 msgid "%lld~year"
 msgid_plural "%lld~years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~年"
 
 #, c-format
 msgid "%lld~month"
 msgid_plural "%lld~months"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~月"
 
 #, c-format
 msgid "%lld~week"
 msgid_plural "%lld~weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~周"
 
 #, c-format
 msgid "%lld~day"
 msgid_plural "%lld~days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~天"
 
 #, c-format
 msgid "%lld~hour"
 msgid_plural "%lld~hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~小时"
 
 #, c-format
 msgid "%lld~minute"
 msgid_plural "%lld~minutes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~分钟"
 
 #, c-format
 msgid "%lld~second"
 msgid_plural "%lld~seconds"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~秒"
 
 #, c-format
 msgid "%s: Verified 0~signatures and encrypted 0~messages."
-msgstr ""
+msgstr "%s: 已验证 0~签名并加密 0~消息。"
 
-#, fuzzy, c-format
-#| msgid "Deleted %d signatures.\n"
+#, c-format
 msgid "%s: Verified 0 signatures."
-msgstr "已经删除了 %d 个签名。\n"
+msgstr "%s:已验证 0 签名。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Verified %ld~signature in the past %s."
 msgid_plural "%s: Verified %ld~signatures in the past %s."
-msgstr[0] "|算法 [文件]|使用指定的散列算法打印报文散列值"
-msgstr[1] "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr[0] "%s:已验证 %ld~在过去的 %s 的签名。"
 
-#, fuzzy
-#| msgid "encrypted with %lu passphrases\n"
 msgid "Encrypted 0 messages."
-msgstr "以 %lu 个密码加密\n"
+msgstr "已加密 0 信息。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Encrypted %ld~message in the past %s."
 msgid_plural "Encrypted %ld~messages in the past %s."
-msgstr[0] "|算法 [文件]|使用指定的散列算法打印报文散列值"
-msgstr[1] "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr[0] "已加密 %ld~个过去 %s 的信息."
 
-#, fuzzy, c-format
-#| msgid "validity: %s"
+#, c-format
 msgid "(policy: %s)"
-msgstr "有效性:%s"
+msgstr "(策略: %s)"
 
 #, c-format
 msgid ""
 "Warning: we have yet to see a message signed using this key and user id!\n"
-msgstr ""
+msgstr "警告:我们此前还没有见过一条使用此密钥和用户标识签名的消息!\n"
 
 #, c-format
 msgid ""
 "Warning: we've only seen one message signed using this key and user id!\n"
-msgstr ""
+msgstr "警告:我们此前只见过一条使用此密钥和用户标识签名的消息!\n"
 
 #, c-format
 msgid "Warning: you have yet to encrypt a message to this key!\n"
-msgstr ""
+msgstr "警告:您之前没有向此密钥加密过消息!\n"
 
 #, c-format
 msgid "Warning: you have only encrypted one message to this key!\n"
-msgstr ""
+msgstr "警告:您之前只向此密钥加密过一条消息!\n"
 
 #, c-format
 msgid ""
@@ -6096,37 +5723,38 @@ msgid_plural ""
 "  %s\n"
 "to mark it as being bad.\n"
 msgstr[0] ""
-msgstr[1] ""
+"警告:如果您之前见过由此密钥和这些用户标识的更多签名,那么这个密钥有可能是伪"
+"造的! 请仔细地检查邮件地址的微小差异。 如果此密钥是不可信的,则使用\n"
+"  %s\n"
+"以将其标记为坏的。\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error opening TOFU database: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "打开 TOFU 数据库时出现错误:%s\n"
 
 #, c-format
 msgid "WARNING: Encrypting to %s, which has no non-revoked user ids\n"
-msgstr ""
+msgstr "警告:正在加密给 %s,其不具有不可吊销的用户标识。\n"
 
-#, fuzzy, c-format
-#| msgid "error writing public keyring `%s': %s\n"
+#, c-format
 msgid "error setting policy for key %s, user id \"%s\": %s"
-msgstr "写入公钥钥匙环‘%s’时发生错误: %s\n"
+msgstr "设置密钥 %s 的策略时出现错误, 用户标识 “%s”:%s"
 
-#, fuzzy, c-format
-#| msgid "`%s' is not a valid long keyID\n"
+#, c-format
 msgid "'%s' is not a valid long keyID\n"
-msgstr "‘%s’不是一个有效的长式钥匙号\n"
+msgstr "‘%s’不是一个有效的长格式 keyID\n"
 
 #, c-format
 msgid "key %s: accepted as trusted key\n"
-msgstr "密钥 %s:受信任,已接受\n"
+msgstr "密钥 %s:接受为受信任的密钥\n"
 
 #, c-format
 msgid "key %s occurs more than once in the trustdb\n"
-msgstr "密钥 %s 在信任度数据库中重复出现\n"
+msgstr "密钥 %s 在信任度数据库中出现多于一次\n"
 
 #, c-format
 msgid "key %s: no public key for trusted key - skipped\n"
-msgstr "密钥 %s:受信任的密钥没有公钥――已跳过\n"
+msgstr "密钥 %s:受信任的密钥没有公钥 - 已跳过\n"
 
 #, c-format
 msgid "key %s marked as ultimately trusted\n"
@@ -6142,15 +5770,15 @@ msgstr "信任记录 %lu 不属于所请求的类别 %d\n"
 
 #, c-format
 msgid "You may try to re-create the trustdb using the commands:\n"
-msgstr ""
+msgstr "您可以通过下列命令尝试重建信任度数据库:\n"
 
 #, c-format
 msgid "If that does not work, please consult the manual\n"
-msgstr ""
+msgstr "如果那样不起作用,请查阅手册。\n"
 
 #, c-format
 msgid "unable to use unknown trust model (%d) - assuming %s trust model\n"
-msgstr "无法使用未知的信任模型(%d)――假定使用 %s 信任模型\n"
+msgstr "无法使用未知的信任模型(%d)- 假定为 %s 信任模型\n"
 
 #, c-format
 msgid "using %s trust model\n"
@@ -6164,19 +5792,17 @@ msgstr "不需要检查信任度数据库\n"
 msgid "next trustdb check due at %s\n"
 msgstr "下次信任度数据库检查将于 %s 进行\n"
 
-#, fuzzy, c-format
-#| msgid "no need for a trustdb check with `%s' trust model\n"
+#, c-format
 msgid "no need for a trustdb check with '%s' trust model\n"
-msgstr "使用‘%s’信任模型时不需要检查信任度数据库\n"
+msgstr "在‘%s’信任模型下无需进行 trustdb 检查\n"
 
-#, fuzzy, c-format
-#| msgid "no need for a trustdb update with `%s' trust model\n"
+#, c-format
 msgid "no need for a trustdb update with '%s' trust model\n"
-msgstr "使用‘%s’信任模型时不需要更新信任度数据库\n"
+msgstr "在‘%s’信任模型下无需进行 trustdb 更新\n"
 
 #, c-format
 msgid "public key %s not found: %s\n"
-msgstr "找不到公钥 %s:%s\n"
+msgstr "公钥 %s 未找到:%s\n"
 
 #, c-format
 msgid "please do a --check-trustdb\n"
@@ -6186,33 +5812,29 @@ msgstr "请执行一次 --check-trustdb\n"
 msgid "checking the trustdb\n"
 msgstr "正在检查信任度数据库\n"
 
-#, fuzzy, c-format
-#| msgid "%lu keys processed so far\n"
+#, c-format
 msgid "%d key processed"
 msgid_plural "%d keys processed"
-msgstr[0] "目前已处理 %lu 把密钥\n"
-msgstr[1] "目前已处理 %lu 把密钥\n"
+msgstr[0] "已处理 %d 把密钥"
 
-#, fuzzy, c-format
-#| msgid "%d keys processed (%d validity counts cleared)\n"
+#, c-format
 msgid " (%d validity count cleared)\n"
 msgid_plural " (%d validity counts cleared)\n"
-msgstr[0] "已经处理了 %d 把密钥(共计已解决了 %d 份的有效性)\n"
-msgstr[1] "已经处理了 %d 把密钥(共计已解决了 %d 份的有效性)\n"
+msgstr[0] " (%d 个有效计数已被清除)\n"
 
 #, c-format
 msgid "no ultimately trusted keys found\n"
-msgstr "没æ\9c\89找到任何绝对信任的密钥\n"
+msgstr "æ\9cª找到任何绝对信任的密钥\n"
 
 #, c-format
 msgid "public key of ultimately trusted key %s not found\n"
-msgstr "绝对信任的密钥 %s 的公钥未被找到\n"
+msgstr "绝对信任密钥 %s 的公钥未找到\n"
 
 #, c-format
 msgid ""
 "depth: %d  valid: %3d  signed: %3d  trust: %d-, %dq, %dn, %dm, %df, %du\n"
 msgstr ""
-"深度:%d 有效性:%3d 已签名:%3d 信任度:%d-,%dq,%dn,%dm,%df,%du\n"
+"深度:%d  有效性:%3d  已签名:%3d  信任度:%d-,%dq,%dn,%dm,%df,%du\n"
 
 #, c-format
 msgid "unable to update trustdb version record: write failed: %s\n"
@@ -6222,7 +5844,7 @@ msgid "undefined"
 msgstr "未定义"
 
 msgid "never"
-msgstr "不"
+msgstr "不"
 
 msgid "marginal"
 msgstr "勉强"
@@ -6242,26 +5864,23 @@ msgstr "绝对"
 #. essentially a comment and need not be translated.  Either key and
 #. uid are both NULL, or neither are NULL.
 #, fuzzy
-#| msgid "10 translator see trustdb.c:uid_trust_string_fixed"
 msgid "10 translator see trust.c:uid_trust_string_fixed"
 msgstr "10 translator see trustdb.c:uid_trust_string_fixed"
 
 msgid "[ revoked]"
-msgstr "[已吊销]"
+msgstr "[ 已吊销 ]"
 
 msgid "[ expired]"
-msgstr "[已过期]"
+msgstr "[ 已过期 ]"
 
 msgid "[ unknown]"
 msgstr "[ 未知 ]"
 
 msgid "[  undef ]"
-msgstr "[未定义]"
+msgstr "[ 未定义 ]"
 
-#, fuzzy
-#| msgid "never"
 msgid "[  never ]"
-msgstr "从不"
+msgstr "[ 永不 ]"
 
 msgid "[marginal]"
 msgstr "[ 勉强 ]"
@@ -6279,32 +5898,32 @@ msgid ""
 "should be the first file given on the command line.\n"
 msgstr ""
 "签名无法被验证。\n"
-"请记住签名文件(.sig或.asc)\n"
-"åº\94该æ\98¯å\9c¨å\91½ä»¤è¡\8c中ç»\99å®\9aç\9a\84第ä¸\80个文件。\n"
+"请记住签名文件(.sig 或 .asc)应该是\n"
+"å\9c¨å\91½ä»¤è¡\8c中第ä¸\80个ç»\99å®\9aç\9a\84文件。\n"
 
 #, c-format
 msgid "input line %u too long or missing LF\n"
-msgstr "输入行 %u 太长或者行末的换行符 LF 遗失\n"
+msgstr "输入行 %u 太长或者行末的 LF 缺失\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't open fd %d: %s\n"
-msgstr "无法打开‘%s’: %s\n"
+msgstr "无法打开 fd %d:%s\n"
 
 msgid "set debugging flags"
-msgstr ""
+msgstr "设置调试选项"
 
 msgid "enable full debugging"
-msgstr ""
+msgstr "启用完整调试"
 
-#, fuzzy
 msgid "Usage: kbxutil [options] [files] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:kbxutil [选项] [文件] (-h 获取帮助)"
 
-#, fuzzy
 msgid ""
 "Syntax: kbxutil [options] [files]\n"
 "List, export, import Keybox data\n"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr ""
+"语法:kbxutil [选项] [文件]\n"
+"列出、导出或导入钥匙箱数据\n"
 
 #, c-format
 msgid "RSA modulus missing or not of size %d bits\n"
@@ -6320,105 +5939,99 @@ msgstr "PIN 回调返回错误:%s\n"
 
 #, c-format
 msgid "the NullPIN has not yet been changed\n"
-msgstr ""
+msgstr "尚未变更 NullPIN\n"
 
-#, fuzzy
 msgid "|N|Please enter a new PIN for the standard keys."
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "|N|请为标准密钥输入一个新的 PIN。"
 
-#, fuzzy
 msgid "||Please enter the PIN for the standard keys."
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "||请输入标准密钥的 PIN。"
 
-#, fuzzy
 msgid "|NP|Please enter a new PIN Unblocking Code (PUK) for the standard keys."
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "|NP|请为标准密钥输入一个新的 PIN 解锁码(PUK)。"
 
-#, fuzzy
 msgid "|P|Please enter the PIN Unblocking Code (PUK) for the standard keys."
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "|NP|请输入标准密钥的 PIN 解锁码(PUK)。"
 
 msgid "|N|Please enter a new PIN for the key to create qualified signatures."
-msgstr ""
+msgstr "|N|请为这个密钥输入一个新的 PIN 以创建合格的签名。"
 
 msgid "||Please enter the PIN for the key to create qualified signatures."
-msgstr ""
+msgstr "||请为这个密钥输入 PIN 以创建合格的签名。"
 
 msgid ""
 "|NP|Please enter a new PIN Unblocking Code (PUK) for the key to create "
 "qualified signatures."
-msgstr ""
+msgstr "|NP|请为这个密钥输入一个新的 PIN 解锁码(PUK)以创建合格的签名。"
 
 msgid ""
 "|P|Please enter the PIN Unblocking Code (PUK) for the key to create "
 "qualified signatures."
-msgstr ""
+msgstr "|P|请为这个密钥输入 PIN 解锁码(PUK)以创建合格的签名。"
 
 #, c-format
 msgid "error getting new PIN: %s\n"
-msgstr "获取新 PIN 时出:%s\n"
+msgstr "获取新 PIN 时出现错误:%s\n"
 
 #, c-format
 msgid "failed to store the fingerprint: %s\n"
-msgstr "无法存储指纹:%s\n"
+msgstr "存储指纹失败:%s\n"
 
 #, c-format
 msgid "failed to store the creation date: %s\n"
-msgstr "无法存储创建日期:%s\n"
+msgstr "存储创建日期失败:%s\n"
 
 #, c-format
 msgid "error retrieving CHV status from card\n"
-msgstr "从卡中获取 CHV 状态时出错\n"
+msgstr "从卡片中拉取 CHV 状态时出现错误\n"
 
 #, c-format
 msgid "response does not contain the RSA modulus\n"
-msgstr "响应包含 RSA 余数\n"
+msgstr "响应包含 RSA 余数\n"
 
 #, c-format
 msgid "response does not contain the RSA public exponent\n"
-msgstr "响应包含 RSA 公钥指数\n"
+msgstr "响应包含 RSA 公钥指数\n"
 
-#, fuzzy, c-format
-#| msgid "response does not contain the RSA public exponent\n"
+#, c-format
 msgid "response does not contain the EC public key\n"
-msgstr "响应未包含 RSA 公钥指数\n"
+msgstr "响应不包含 EC 公钥\n"
 
 #, c-format
 msgid "response does not contain the public key data\n"
-msgstr "响应包含公钥数据\n"
+msgstr "响应包含公钥数据\n"
 
 #, c-format
 msgid "reading public key failed: %s\n"
-msgstr "æ\97 æ³\95读å\87ºå\85¬é\92¥ï¼\9a%s\n"
+msgstr "读å\8f\96å\85¬é\92¥å¤±è´¥ï¼\9a%s\n"
 
 #. TRANSLATORS: Put a \x1f right before a colon.  This can be
 #. * used by pinentry to nicely align the names and values.  Keep
 #. * the %s at the start and end of the string.
 #, c-format
 msgid "%sNumber\1f: %s%%0AHolder\1f: %s%%0ACounter\1f: %lu%s"
-msgstr ""
+msgstr "%s数字\1f: %s%%0A持有者\1f: %s%%0A计数\1f: %lu%s"
 
 #, c-format
 msgid "%sNumber\1f: %s%%0AHolder\1f: %s%s"
-msgstr ""
+msgstr "%s数字\1f: %s%%0A持有者\1f: %s%s"
 
 #. TRANSLATORS: This is the number of remaining attempts to
 #. * enter a PIN.  Use %%0A (double-percent,0A) for a linefeed.
 #, c-format
 msgid "Remaining attempts: %d"
-msgstr ""
+msgstr "剩余尝试:%d"
 
 #, c-format
 msgid "using default PIN as %s\n"
-msgstr ""
+msgstr "使用默认 PIN 作为 %s\n"
 
 #, c-format
 msgid "failed to use default PIN as %s: %s - disabling further default use\n"
-msgstr ""
+msgstr "使用默认 PIN 作为 %s 失败:%s - 禁用进一步的默认使用\n"
 
-#, fuzzy
 msgid "||Please unlock the card"
-msgstr "||请è¾\93å\85¥ PIN%%0A[å®\8cæ\88\90ç\9a\84ç­¾å­\97ï¼\9a%lu]"
+msgstr "||请解é\94\81å\8d¡ç\89\87"
 
 #, c-format
 msgid "PIN for CHV%d is too short; minimum length is %d\n"
@@ -6430,57 +6043,50 @@ msgstr "验证 CHV%d 失败:%s\n"
 
 #, c-format
 msgid "card is permanently locked!\n"
-msgstr "卡被永久锁定!\n"
+msgstr "卡被永久锁定!\n"
 
-#, fuzzy, c-format
-#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+#, c-format
 msgid "%d Admin PIN attempt remaining before card is permanently locked\n"
 msgid_plural ""
 "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr[0] "尝试管理员 PIN %d 次后,卡将被永久锁定!\n"
-msgstr[1] "尝试管理员 PIN %d 次后,卡将被永久锁定!\n"
+msgstr[0] "在卡片被永久锁定之前剩余 %d 次管理员 PIN 尝试\n"
 
 #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
 #. the start of the string.  Use %0A (single percent) for a linefeed.
-#, fuzzy
 msgid "|A|Please enter the Admin PIN"
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "|A|请输入管理员 PIN"
 
 #, c-format
 msgid "access to admin commands is not configured\n"
-msgstr "尚未配置管理员命令的权限\n"
+msgstr "未配置到管理员命令的访问\n"
 
-#, fuzzy
 msgid "||Please enter the PIN"
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "||请输入 PIN"
 
-#, fuzzy
 msgid "||Please enter the Reset Code for the card"
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "||请输入卡片的重置代码"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Reset Code is too short; minimum length is %d\n"
-msgstr "CHV%d 的 PIN 太短;最小长度为 %d\n"
+msgstr "重置代码太短;最小长度为 %d\n"
 
 #. TRANSLATORS: Do not translate the "|*|" prefixes but
 #. keep it at the start of the string.  We need this elsewhere
 #. to get some infos on the string.
 msgid "|RN|New Reset Code"
-msgstr ""
+msgstr "|RN|新的重置代码"
 
 msgid "|AN|New Admin PIN"
 msgstr "|AN|新的管理员 PIN"
 
 msgid "|N|New PIN"
-msgstr "新的 PIN"
+msgstr "|N|新的 PIN"
 
-#, fuzzy
 msgid "||Please enter the Admin PIN and New Admin PIN"
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "||请输入原管理员 PIN 和新管理员 PIN"
 
-#, fuzzy
 msgid "||Please enter the PIN and New PIN"
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "||请输入原 PIN 和新 PIN"
 
 #, c-format
 msgid "error reading application data\n"
@@ -6488,7 +6094,7 @@ msgstr "读取应用程序数据时出错\n"
 
 #, c-format
 msgid "error reading fingerprint DO\n"
-msgstr "读取指纹 D0 出错\n"
+msgstr "读取指纹 DO 时出现错误\n"
 
 #, c-format
 msgid "key already exists\n"
@@ -6502,9 +6108,9 @@ msgstr "现有的密钥将被替换\n"
 msgid "generating new key\n"
 msgstr "生成新密钥\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "writing new key\n"
-msgstr "生成新密钥\n"
+msgstr "正在写入新密钥\n"
 
 #, c-format
 msgid "creation timestamp missing\n"
@@ -6516,39 +6122,36 @@ msgstr "RSA 质数 %s 缺失或者不是 %d 位长\n"
 
 #, c-format
 msgid "failed to store the key: %s\n"
-msgstr "æ\97 æ³\95å­\98å\82¨å¯\86é\92¥ï¼\9a%s\n"
+msgstr "å­\98å\82¨å¯\86é\92¥å¤±è´¥ï¼\9a%s\n"
 
-#, fuzzy, c-format
-#| msgid "unsupported URI"
+#, c-format
 msgid "unsupported curve\n"
-msgstr "未被支持的 URI"
+msgstr "不支持的曲线\n"
 
 #, c-format
 msgid "please wait while key is being generated ...\n"
-msgstr "请ç¨\8då\80\99ï¼\8cæ­£å\9c¨ç\94\9fæ\88\90å¯\86é\92¥â\80¦…\n"
+msgstr "请ç­\89å¾\85å¯\86é\92¥ç\94\9fæ\88\90…\n"
 
 #, c-format
 msgid "generating key failed\n"
 msgstr "生成密钥失败\n"
 
-#, fuzzy, c-format
-#| msgid "key generation completed (%d seconds)\n"
+#, c-format
 msgid "key generation completed (%d second)\n"
 msgid_plural "key generation completed (%d seconds)\n"
-msgstr[0] "密钥已生成(耗时 %d 秒)\n"
-msgstr[1] "密钥已生成(耗时 %d 秒)\n"
+msgstr[0] "密钥生成完成(%d 秒)\n"
 
 #, c-format
 msgid "invalid structure of OpenPGP card (DO 0x93)\n"
-msgstr "无效的 OpenPGP 卡结构(D0 0x93)\n"
+msgstr "无效的 OpenPGP 卡结构(DO 0x93)\n"
 
 #, c-format
 msgid "fingerprint on card does not match requested one\n"
-msgstr ""
+msgstr "卡片上的指纹与请求的不匹配\n"
 
 #, c-format
 msgid "card does not support digest algorithm %s\n"
-msgstr "卡不支持散列算法 %s\n"
+msgstr "卡片不支持摘要算法 %s\n"
 
 #, c-format
 msgid "signatures created so far: %lu\n"
@@ -6561,310 +6164,300 @@ msgstr "目前禁止通过此命令验证管理员 PIN\n"
 
 #, c-format
 msgid "can't access %s - invalid OpenPGP card?\n"
-msgstr "不能存取 %s――无效的 OpenPGP 卡?\n"
+msgstr "不能访问 %s - 无效的 OpenPGP 卡?\n"
 
-#, fuzzy
 msgid "||Please enter your PIN at the reader's pinpad"
-msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
+msgstr "||请在读卡器的小键盘上输入您的 PIN"
 
 #. TRANSLATORS: Do not translate the "|*|" prefixes but
 #. keep it at the start of the string.  We need this elsewhere
 #. to get some infos on the string.
-#, fuzzy
 msgid "|N|Initial New PIN"
-msgstr "新的 PIN"
+msgstr "|N|初始化新 PIN"
 
 msgid "run in multi server mode (foreground)"
-msgstr ""
+msgstr "正在以多服务器模式运行(前台)"
 
 msgid "|LEVEL|set the debugging level to LEVEL"
-msgstr ""
+msgstr "|LEVEL|设置调试级别至 LEVEL"
 
-#, fuzzy
 msgid "|FILE|write a log to FILE"
-msgstr "从‘%s’读取选项\n"
+msgstr "|FILE|将日志写入 FILE"
 
 msgid "|N|connect to reader at port N"
-msgstr ""
+msgstr "|N|连接到端口 N 上的读卡器"
 
 msgid "|NAME|use NAME as ct-API driver"
-msgstr ""
+msgstr "|NAME|使用 NAME 作为 ct-API 驱动"
 
 msgid "|NAME|use NAME as PC/SC driver"
-msgstr ""
+msgstr "|NAME|使用 NAME 作为 PC/SC 驱动"
 
 msgid "do not use the internal CCID driver"
-msgstr ""
+msgstr "不使用内置的 CCID 驱动"
 
 msgid "|N|disconnect the card after N seconds of inactivity"
-msgstr ""
+msgstr "|N|在 N 秒的不活跃之后断开卡片的连接"
 
 msgid "do not use a reader's pinpad"
-msgstr ""
+msgstr "不使用读卡器的小键盘"
 
-#, fuzzy
 msgid "deny the use of admin card commands"
-msgstr "æ\98¾ç¤º管理员命令"
+msgstr "æ\8b\92ç»\9d使ç\94¨å\8d¡ç\89\87ç\9a\84管理员命令"
 
 msgid "use variable length input for pinpad"
-msgstr ""
+msgstr "使用小键盘的变长输入"
 
-#, fuzzy
 msgid "Usage: @SCDAEMON@ [options] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:@SCDAEMON@ [选项] (-h 获取帮助)"
 
 msgid ""
 "Syntax: scdaemon [options] [command [args]]\n"
 "Smartcard daemon for @GNUPG@\n"
 msgstr ""
+"语法:scdaemon [选项] [命令 [参数]]\n"
+"@GNUPG@ 智能卡守护进程\n"
 
 #, c-format
 msgid "please use the option '--daemon' to run the program in the background\n"
-msgstr ""
+msgstr "请使用‘--daemon’选项以在后台运行此程序\n"
 
 #, c-format
 msgid "handler for fd %d started\n"
-msgstr ""
+msgstr "fd %d 的句柄已启动\n"
 
 #, c-format
 msgid "handler for fd %d terminated\n"
-msgstr ""
+msgstr "fd %d 的句柄已关闭\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no dirmngr running in this session\n"
-msgstr "gpg-agent 在此次舍话中无法使用\n"
+msgstr ""
+"此会话中没有正在运行的 dirmngr\n"
+"\n"
 
 #, c-format
 msgid "validation model requested by certificate: %s"
-msgstr ""
+msgstr "证书所请求的验证模型:%s"
 
 msgid "chain"
-msgstr ""
+msgstr ""
 
 msgid "shell"
-msgstr ""
+msgstr "外壳"
 
-#, fuzzy, c-format
+#, c-format
 msgid "critical certificate extension %s is not supported"
-msgstr "不支持 gpg-agent 协议版本 %d\n"
+msgstr "紧急认证扩展 %s 不被支持"
 
 #, c-format
 msgid "issuer certificate is not marked as a CA"
-msgstr ""
+msgstr "签发者证书没有被标记为 CA"
 
 msgid "critical marked policy without configured policies"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to open '%s': %s\n"
 msgstr "无法打开‘%s’:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Note: non-critical certificate policy not allowed"
-msgstr "不允许导出私钥\n"
+msgstr "注意:非紧急认证策略不被允许"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate policy not allowed"
-msgstr "不允许导出私钥\n"
+msgstr "证书策略不被允许"
 
 #, c-format
 msgid "looking up issuer at external location\n"
-msgstr ""
+msgstr "在外部位置查找签发者\n"
 
 #, c-format
 msgid "number of issuers matching: %d\n"
-msgstr ""
+msgstr "匹配的签发者数目:%d\n"
 
 #, c-format
 msgid "looking up issuer from the Dirmngr cache\n"
-msgstr ""
+msgstr "在 Dirmngr 缓存中查找签发者\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "number of matching certificates: %d\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "匹配的证书数:%d\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "dirmngr cache-only key lookup failed: %s\n"
-msgstr "æ\97 æ³\95读å\87ºå\85¬é\92¥ï¼\9a%s\n"
+msgstr "dirmngr ä»\85ç¼\93å­\98ç\9a\84å¯\86é\92¥æ\9f¥æ\89¾å¤±è´¥ï¼\9a%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to allocate keyDB handle\n"
-msgstr "无法存储密钥:%s\n"
+msgstr "分配 keyDB 句柄时失败\n"
 
-#, fuzzy
 msgid "certificate has been revoked"
-msgstr "注意:密钥已被吊销"
+msgstr "证书已被吊销"
 
 msgid "the status of the certificate is unknown"
-msgstr ""
+msgstr "证书的状态未知"
 
 #, c-format
 msgid "please make sure that the \"dirmngr\" is properly installed\n"
-msgstr ""
+msgstr "请确定“dirmngr”被正确安装\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "checking the CRL failed: %s"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "检查 CRL 时失败:%s"
 
 #, c-format
 msgid "certificate with invalid validity: %s"
-msgstr ""
+msgstr "证书的有效期无效:%s"
 
 #, c-format
 msgid "certificate not yet valid"
-msgstr ""
+msgstr "证书尚未验证"
 
-#, fuzzy
 msgid "root certificate not yet valid"
-msgstr "不允许导出私钥\n"
+msgstr "根证书尚未验证"
 
 msgid "intermediate certificate not yet valid"
-msgstr ""
+msgstr "中间证书尚未验证"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate has expired"
-msgstr "è¿\99æ\8a\8aå¯\86é\92¥å·²ç»\8fè¿\87æ\9c\9fï¼\81"
+msgstr "è¯\81书已è¿\87æ\9c\9f"
 
-#, fuzzy
 msgid "root certificate has expired"
-msgstr "这把密钥已经过期!"
+msgstr "根证书已过期"
 
-#, fuzzy
 msgid "intermediate certificate has expired"
-msgstr "这把密钥已经过期!"
+msgstr "中间证书已过期"
 
 #, c-format
 msgid "required certificate attributes missing: %s%s%s"
-msgstr ""
+msgstr "请求的证书属性缺失:%s%s%s"
 
-#, fuzzy
 msgid "certificate with invalid validity"
-msgstr "è¿\99æ\8a\8aå¯\86é\92¥å·²ç»\8fè¿\87æ\9c\9fï¼\81"
+msgstr "è¯\81书æ\9c\89æ\95\88æ\9c\9fæ\97 æ\95\88"
 
 msgid "signature not created during lifetime of certificate"
-msgstr ""
+msgstr "签名不是在证书的有效期内被创建的"
 
 msgid "certificate not created during lifetime of issuer"
-msgstr ""
+msgstr "签名不是在签发者的有效期内被创建的"
 
 msgid "intermediate certificate not created during lifetime of issuer"
-msgstr ""
+msgstr "中间证书不是在签发者的有效期内被创建的"
 
-#, fuzzy, c-format
+#, c-format
 msgid "  (  signature created at "
-msgstr "      清除的签名:%lu\n"
+msgstr "  (  签名创建于 "
 
-#, fuzzy, c-format
+#, c-format
 msgid "  (certificate created at "
-msgstr "已建立吊销证书。\n"
+msgstr "  (证书创建于 "
 
-#, fuzzy, c-format
+#, c-format
 msgid "  (certificate valid from "
-msgstr "证书已损坏"
+msgstr "  (证书有效期从 "
 
-#, fuzzy, c-format
+#, c-format
 msgid "  (     issuer valid from "
-msgstr "卡序列号 ="
+msgstr "  (    签发者有效期从 "
 
-#, fuzzy, c-format
+#, c-format
 msgid "fingerprint=%s\n"
-msgstr "CA 指纹:"
+msgstr "指纹 = %s\n"
 
 #, c-format
 msgid "root certificate has now been marked as trusted\n"
-msgstr ""
+msgstr "根证书现已被标记为信任\n"
 
 #, c-format
 msgid "interactive marking as trusted not enabled in gpg-agent\n"
-msgstr ""
+msgstr "交互式标记为信任未在 gpg-agent 中开启\n"
 
 #, c-format
 msgid "interactive marking as trusted disabled for this session\n"
-msgstr ""
+msgstr "交互式标记为信任在此会话中被关闭\n"
 
 msgid "WARNING: creation time of signature not known - assuming current time"
-msgstr ""
+msgstr "警告:签名的创建时间未知 - 猜测为当前时间"
 
-#, fuzzy
 msgid "no issuer found in certificate"
-msgstr "生成一份吊销证书"
+msgstr "证书中没有找到签发者"
 
 msgid "self-signed certificate has a BAD signature"
-msgstr ""
+msgstr "自签名证书具有损坏的签名"
 
 #, c-format
 msgid "root certificate is not marked trusted"
-msgstr ""
+msgstr "根证书未被标记为信任"
 
-#, fuzzy, c-format
+#, c-format
 msgid "checking the trust list failed: %s\n"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "检查信任列表时失败:%s\n"
 
 #, c-format
 msgid "certificate chain too long\n"
-msgstr ""
+msgstr "证书链过长\n"
 
 #, c-format
 msgid "issuer certificate not found"
-msgstr ""
+msgstr "签发者证书未找到"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate has a BAD signature"
-msgstr "验证签名"
+msgstr "证书具有损坏的签名"
 
 msgid "found another possible matching CA certificate - trying again"
-msgstr ""
+msgstr "找到另一个可能匹配的 CA 证书 - 正在重试"
 
 #, c-format
 msgid "certificate chain longer than allowed by CA (%d)"
-msgstr ""
+msgstr "证书链长于 CA 允许的长度(%d)"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate is good\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "证书有效\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "intermediate certificate is good\n"
-msgstr "已建立吊销证书。\n"
+msgstr "中间证书有效\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "root certificate is good\n"
-msgstr "证书已损坏"
+msgstr "根证书良好\n"
 
 msgid "switching to chain model"
-msgstr ""
+msgstr "正在切换为链模型"
 
 #, c-format
 msgid "validation model used: %s"
-msgstr ""
+msgstr "使用的验证模型:%s"
 
 #, c-format
 msgid "a %u bit hash is not valid for a %u bit %s key\n"
-msgstr ""
+msgstr "一个 %u 位的散列对于一个 %u 位的 %s 密钥是无效的\n"
 
 #, c-format
 msgid "(this is the MD2 algorithm)\n"
-msgstr ""
+msgstr "(这是 MD2 算法)\n"
 
-#, fuzzy
 msgid "none"
-msgstr "no"
+msgstr "none"
 
-#, fuzzy
 msgid "[Error - invalid encoding]"
-msgstr "错误:无效的响应。\n"
+msgstr "[错误 - 无效编码]"
 
 msgid "[Error - out of core]"
-msgstr ""
+msgstr "[错误 - out of core]"
 
 msgid "[Error - No name]"
-msgstr ""
+msgstr "[错误 - 无名称]"
 
-#, fuzzy
 msgid "[Error - invalid DN]"
-msgstr "错误:无效的响应。\n"
+msgstr "[错误 - 无效 DN]"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Please enter the passphrase to unlock the secret key for the X.509 "
 "certificate:\n"
@@ -6872,225 +6465,212 @@ msgid ""
 "S/N %s, ID 0x%08lX,\n"
 "created %s, expires %s.\n"
 msgstr ""
-"您需要这个用户的密码来解开私钥:\n"
-"“%.*s”\n"
-"%u 位的 %s 密钥,钥匙号 %s,建立于 %s%s\n"
+"请输入密码以解锁此 X.509 证书的私钥:\n"
+"\"%s\"\n"
+"S/N %s,ID 0x%08lX,\n"
+"创建于 %s,过期于 %s。\n"
 
 #, c-format
 msgid "no key usage specified - assuming all usages\n"
-msgstr ""
+msgstr "没有指定密钥用途 - 假设为所有用途\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting key usage information: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "获取密钥用途信息时出现错误:%s\n"
 
 #, c-format
 msgid "certificate should not have been used for certification\n"
-msgstr ""
+msgstr "证书本不应被用于认证\n"
 
 #, c-format
 msgid "certificate should not have been used for OCSP response signing\n"
-msgstr ""
+msgstr "证书本不应被用于认 OCSP 响应签名\n"
 
 #, c-format
 msgid "certificate should not have been used for encryption\n"
-msgstr ""
+msgstr "证书本不应被用于加密\n"
 
 #, c-format
 msgid "certificate should not have been used for signing\n"
-msgstr ""
+msgstr "证书本不应被用于签名\n"
 
 #, c-format
 msgid "certificate is not usable for encryption\n"
-msgstr ""
+msgstr "证书不可用于加密\n"
 
 #, c-format
 msgid "certificate is not usable for signing\n"
-msgstr ""
+msgstr "证书不可用于签名\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid algorithm\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的算法\n"
 
 #, c-format
 msgid "line %d: invalid key length %u (valid are %d to %d)\n"
-msgstr ""
+msgstr "第 %d 行:无效的密钥长度 %u (有效值为从 %d 到 %d)\n"
 
 #, c-format
 msgid "line %d: no subject name given\n"
-msgstr ""
+msgstr "第 %d 行:未指定主题名称\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid subject name label '%.*s'\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的主题名称标签‘%.*s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid subject name '%s' at pos %d\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的主题名称‘%s’位于 %d\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: not a valid email address\n"
-msgstr "ç\94µå­\90é\82®ä»¶å\9c°å\9d\80æ\97 æ\95\88\n"
+msgstr "第 %d è¡\8cï¼\9aä¸\8dæ\98¯æ\9c\89æ\95\88ç\9a\84ç\94µå­\90é\82®ä»¶å\9c°å\9d\80\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid serial number\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的序列号\n"
 
 #, c-format
 msgid "line %d: invalid issuer name label '%.*s'\n"
-msgstr ""
+msgstr "第 %d 行:无效的签发者姓名标签‘%.*s’\n"
 
 #, c-format
 msgid "line %d: invalid issuer name '%s' at pos %d\n"
-msgstr ""
+msgstr "第 %d 行:无效的签发者名称‘%s’,位于 %d\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid date given\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的日期\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: error getting signing key by keygrip '%s': %s\n"
-msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+msgstr "第 %d 行:通过 keygrip '%s' 获取签名密钥时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid hash algorithm given\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的散列算法\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid authority-key-id\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的 authority-key-id\n"
 
-#, fuzzy, c-format
-#| msgid "key %s: invalid subkey binding\n"
+#, c-format
 msgid "line %d: invalid subject-key-id\n"
-msgstr "密钥 %s:无效的子钥绑定\n"
+msgstr "第 %d 行:无效的 subject-key-id\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: invalid extension syntax\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "第 %d 行:无效的扩展语法\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: error reading key '%s' from card: %s\n"
-msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+msgstr "第 %d 行:读取密钥 '%s' 从以下卡片时出现错误: %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: error getting key by keygrip '%s': %s\n"
-msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+msgstr "第 %d 行:通过 keygrip '%s' 获取密钥时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line %d: key generation failed: %s <%s>\n"
-msgstr "ç\94\9fæ\88\90å¯\86é\92¥å¤±è´¥ï¼\9a%s\n"
+msgstr "第 %d è¡\8cï¼\9aå¯\86é\92¥ç\94\9fæ\88\90失败ï¼\9a%s <%s>\n"
 
 msgid ""
 "To complete this certificate request please enter the passphrase for the key "
 "you just created once more.\n"
-msgstr ""
+msgstr "要完成此证书请求,请再次输入您刚才创建的密钥的密码\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) Existing key\n"
-msgstr "  (2) 加密密钥\n"
+msgstr "   (%d) 现存的密钥\n"
 
 #, c-format
 msgid "   (%d) Existing key from card\n"
-msgstr ""
+msgstr "   (%d) 卡片上现存的密钥\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading the card: %s\n"
-msgstr "%s:读取自由记录时出错:%s\n"
+msgstr "读取卡片时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Serial number of the card: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "卡片的序列号:%s\n"
 
-#, fuzzy
 msgid "Available keys:\n"
-msgstr "禁用密钥"
+msgstr "可用的密钥:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Possible actions for a %s key:\n"
-msgstr "%s 密钥可能的操作:"
+msgstr "%s 密钥可能的操作:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) sign, encrypt\n"
-msgstr "   (%d) DSA (仅用于签名)\n"
+msgstr "   (%d) 签名,加密\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) sign\n"
-msgstr "   (%d) DSA (仅用于签名)\n"
+msgstr "   (%d) 签名\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "   (%d) encrypt\n"
-msgstr "   (%d) RSA (仅用于加密)\n"
+msgstr "   (%d) 加密\n"
 
 msgid "Enter the X.509 subject name: "
-msgstr ""
+msgstr "输入 X.509 主题名称: "
 
-#, fuzzy
 msgid "No subject name given\n"
-msgstr "(不给定描述)\n"
+msgstr "未指定主题名称\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid subject name label '%.*s'\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "无效的主题名称标签‘%.*s’\n"
 
 #. TRANSLATORS: The 22 in the second string is the
 #. length of the first string up to the "%s".  Please
 #. adjust it do the length of your translation.  The
 #. second string is merely passed to atoi so you can
 #. drop everything after the number.
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid subject name '%s'\n"
-msgstr "无效的‘%s’散列算法\n"
+msgstr "无效的主题名称‘%s’\n"
 
 msgid "22 translator: see certreg-ui.c:gpgsm_gencertreq_tty"
 msgstr ""
 
-#, fuzzy
 msgid "Enter email addresses"
-msgstr "电子邮件地址:"
+msgstr "输入电子邮件地址"
 
-#, fuzzy
 msgid " (end with an empty line):\n"
-msgstr ""
-"\n"
-"输入用户标识。以空白行结束:"
+msgstr " (以空白行结束):\n"
 
-#, fuzzy
 msgid "Enter DNS names"
-msgstr "请è¾\93å\85¥æ\96°ç\9a\84æ\96\87件å\90\8d"
+msgstr "è¾\93å\85¥ DNS å\90\8d称"
 
-#, fuzzy
 msgid " (optional; end with an empty line):\n"
-msgstr "请输入描述(可选);以空白行结束:\n"
+msgstr " (可选;以空白行结束):\n"
 
-#, fuzzy
 msgid "Enter URIs"
-msgstr "输入 PIN:"
+msgstr "输入 URI"
 
-#, fuzzy
-#| msgid "Create a designated revocation certificate for this key? (y/N) "
 msgid "Create self-signed certificate? (y/N) "
-msgstr "要为这把密钥建立一份指定吊销者证书吗?(y/N)"
+msgstr "创建自签名证书? (y/N) "
 
 msgid "These parameters are used:\n"
-msgstr ""
+msgstr "这些参数被使用:\n"
 
 msgid "Now creating self-signed certificate.  "
-msgstr ""
+msgstr "现在正在创建自签名证书。  "
 
-#, fuzzy
-#| msgid "Revocation certificate created.\n"
 msgid "Now creating certificate request.  "
-msgstr "已建ç«\8bå\90\8aé\94\80è¯\81书ã\80\82\n"
+msgstr "å·²å\88\9b建è¯\81书请æ±\82ã\80\82 "
 
 msgid "This may take a while ...\n"
-msgstr ""
+msgstr "这可能需要等一会儿...\n"
 
 msgid "Ready.\n"
-msgstr ""
+msgstr "就绪。\n"
 
 msgid "Ready.  You should now send this request to your CA.\n"
-msgstr ""
+msgstr "就绪。您现在应该将此请求发送给您的 CA。\n"
 
 #, c-format
 msgid "resource problem: out of core\n"
@@ -7098,243 +6678,230 @@ msgstr ""
 
 #, c-format
 msgid "(this is the RC2 algorithm)\n"
-msgstr ""
+msgstr "(此为 RC2 算法)\n"
 
 #, c-format
 msgid "(this does not seem to be an encrypted message)\n"
-msgstr ""
+msgstr "(这看起来不像是一条被加密的消息)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate '%s' not found: %s\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "证书‘%s’未找到:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error locking keybox: %s\n"
-msgstr "读取密钥区块时发生错误:%s\n"
+msgstr "锁定钥匙箱时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "duplicated certificate '%s' deleted\n"
-msgstr "已建ç«\8bå\90\8aé\94\80è¯\81书ã\80\82\n"
+msgstr "å·²å\88 é\99¤é\87\8då¤\8dç\9a\84è¯\81书â\80\98%sâ\80\99\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate '%s' deleted\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "证书‘%s’已被删除\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "deleting certificate \"%s\" failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "删除证书 “%s” 时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no valid recipients given\n"
-msgstr "(不给定描述)\n"
+msgstr "未指定有效的接收者\n"
 
-#, fuzzy
 msgid "list external keys"
-msgstr "列出钥"
+msgstr "列出外部密钥"
 
-#, fuzzy
 msgid "list certificate chain"
-msgstr "证书已损坏"
+msgstr "列出证书链"
 
-#, fuzzy
 msgid "import certificates"
-msgstr "证书已损坏"
+msgstr "导入证书"
 
-#, fuzzy
 msgid "export certificates"
-msgstr "证书已损坏"
+msgstr "导出证书"
 
-#, fuzzy
 msgid "register a smartcard"
-msgstr "在智能卡上添加一把密钥"
+msgstr "注册一张智能卡"
 
 msgid "pass a command to the dirmngr"
-msgstr ""
+msgstr "传递一条命令给 dirmngr"
 
 msgid "invoke gpg-protect-tool"
-msgstr ""
+msgstr "调用 gpg-protect-tool"
 
-#, fuzzy
 msgid "create base-64 encoded output"
-msgstr "输出经 ASCII 封装"
+msgstr "创建 base-64 编码的输出"
 
 msgid "assume input is in PEM format"
-msgstr ""
+msgstr "假定输入的是 PEM 格式"
 
 msgid "assume input is in base-64 format"
-msgstr ""
+msgstr "假定输入的是 base-64 格式"
 
 msgid "assume input is in binary format"
-msgstr ""
+msgstr "假定输入的是二进制格式"
 
 msgid "never consult a CRL"
-msgstr ""
+msgstr "从不查询 CRL"
 
 msgid "check validity using OCSP"
-msgstr ""
+msgstr "使用 OCSP 检查有效性"
 
 msgid "|N|number of certificates to include"
-msgstr ""
+msgstr "|N|要包含的证书数目"
 
 msgid "|FILE|take policy information from FILE"
-msgstr ""
+msgstr "|FILE|从 FILE 处获取策略信息"
 
 msgid "do not check certificate policies"
-msgstr ""
+msgstr "不检查证书策略"
 
 msgid "fetch missing issuer certificates"
-msgstr ""
+msgstr "获取缺失的签发者证书"
 
 msgid "don't use the terminal at all"
-msgstr ""
+msgstr "始终不使用终端"
 
 msgid "|FILE|write a server mode log to FILE"
-msgstr ""
+msgstr "|FILE|将服务器模式的日志写入到 FILE"
 
-#, fuzzy
 msgid "|FILE|write an audit log to FILE"
-msgstr "从‘%s’读取选项\n"
+msgstr "|FILE|将审计日志写入 FILE"
 
 msgid "batch mode: never ask"
-msgstr ""
+msgstr "批处理模式:永不询问"
 
 msgid "assume yes on most questions"
-msgstr ""
+msgstr "在多数问题上假定回答为是"
 
 msgid "assume no on most questions"
-msgstr ""
+msgstr "在多数问题上假定回答为否"
 
-#, fuzzy
 msgid "|FILE|add keyring to the list of keyrings"
-msgstr "从这个钥匙环里取用密钥"
+msgstr "|FILE|添加钥匙环到钥匙环列表"
 
 msgid "|USER-ID|use USER-ID as default secret key"
-msgstr ""
+msgstr "|USER-ID|使用 USER-ID 作为默认的私钥"
 
 msgid "|SPEC|use this keyserver to lookup keys"
-msgstr ""
+msgstr "|SPEC|使用此公钥服务器来查找密钥"
 
-#, fuzzy
 msgid "|NAME|use cipher algorithm NAME"
-msgstr "未知的对称加密算法"
+msgstr "|NAME|使用名称为 NAME 的密文算法"
 
-#, fuzzy
 msgid "|NAME|use message digest algorithm NAME"
-msgstr "%s 签名,散列算法 %s\n"
+msgstr "|NAME|使用以 NAME 命名的信息摘要算法"
 
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
 msgid "Usage: @GPGSM@ [options] [files] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:@GPGSM@ [选项] [文件] (-h 获取帮助)"
 
-#, fuzzy
 msgid ""
 "Syntax: @GPGSM@ [options] [files]\n"
 "Sign, check, encrypt or decrypt using the S/MIME protocol\n"
 "Default operation depends on the input data\n"
 msgstr ""
-"语法:gpg [选项] [文件名]\n"
-"签名、检查、加密或解密\n"
-"默认的操作依输入数据而定\n"
+"语法:@GPGSM@ [选项] [文件]\n"
+"使用 S/MIME 协议以签名、检查、加密或者解密\n"
+"默认操作取决于输入的数据\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Note: won't be able to encrypt to '%s': %s\n"
-msgstr "æ\97 æ³\95è¿\9eæ\8e¥è\87³‘%s’:%s\n"
+msgstr "注æ\84\8fï¼\9aå°\86ä¸\8då\8a å¯\86ç»\99‘%s’:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "unknown validation model '%s'\n"
-msgstr "æ\9cªç\9f¥ç\9a\84é\80\89项 '%s'\n"
+msgstr "æ\9cªç\9f¥ç\9a\84éª\8cè¯\81模å\9e\8bâ\80\98%sâ\80\99\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s:%u: no hostname given\n"
-msgstr "(不给定描述)\n"
+msgstr "%s:%u: 未指定主机名\n"
 
 #, c-format
 msgid "%s:%u: password given without user\n"
-msgstr ""
+msgstr "%s:%u: 给定密码但未给定用户\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s:%u: skipping this line\n"
-msgstr "  s = 跳过这把密钥\n"
+msgstr "%s:%u: 正在跳过此行\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "could not parse keyserver\n"
-msgstr "无法解析公钥服务器 URL\n"
+msgstr "无法解析公钥服务器\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "importing common certificates '%s'\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "正在导入通用证书‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't sign using '%s': %s\n"
-msgstr "无法存取‘%s’:%s\n"
+msgstr "无法使用‘%s’签名:%s\n"
 
 #, c-format
 msgid "invalid command (there is no implicit command)\n"
-msgstr ""
+msgstr "无效的命令(不存在隐式的命令)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "total number processed: %lu\n"
-msgstr "合计被处理的数量:%lu\n"
+msgstr "经处理的总数:%lu\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error storing certificate\n"
-msgstr "生成一份吊销证书"
+msgstr "存储证书时出现错误\n"
 
 #, c-format
 msgid "basic certificate checks failed - not imported\n"
-msgstr ""
+msgstr "基本证书检查失败 - 未被导入\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting stored flags: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取存储选项时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error importing certificate: %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "导入证书时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading input: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取输入时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to get the fingerprint\n"
-msgstr "无法存储指纹:%s\n"
+msgstr "获取指纹失败\n"
 
 #, c-format
 msgid "problem looking for existing certificate: %s\n"
-msgstr ""
+msgstr "查找现存证书时出现问题:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error finding writable keyDB: %s\n"
-msgstr "å\9c¨â\80\98%sâ\80\99中寻æ\89¾ä¿¡ä»»åº¦è®°å½\95æ\97¶å\87ºé\94\99:%s\n"
+msgstr "寻æ\89¾å\8f¯å\86\99å\85¥ç\9a\84 keyDB æ\97¶å\87ºç\8e°é\94\99误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error storing certificate: %s\n"
-msgstr "å\8f\96å¾\97å½\93å\89\8då¯\86é\92¥ä¿¡æ\81¯æ\97¶å\87ºé\94\99:%s\n"
+msgstr "å­\98å\82¨è¯\81书æ\97¶å\87ºç\8e°é\94\99误:%s\n"
 
 #, c-format
 msgid "problem re-searching certificate: %s\n"
-msgstr ""
+msgstr "重新搜索证书时出现问题:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error storing flags: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "存储选项时出现错误:%s\n"
 
 msgid "Error - "
-msgstr ""
+msgstr "错误 - "
 
 #, c-format
 msgid "GPG_TTY has not been set - using maybe bogus default\n"
-msgstr ""
+msgstr "GPG_TTY 未被设置 - 使用可能是不正确的默认值\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid formatted fingerprint in '%s', line %d\n"
-msgstr "错误:指纹格式无效。\n"
+msgstr "无效的格式化指纹位于‘%s’ 的第 %d 行\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid country code in '%s', line %d\n"
-msgstr "错误:指纹格式无效。\n"
+msgstr "无效的国家/地区代码位于‘%s’的第 %d 行\n"
 
 #, c-format
 msgid ""
@@ -7345,12 +6912,17 @@ msgid ""
 "\n"
 "%s%sAre you really sure that you want to do this?"
 msgstr ""
+"您将要使用您的证书创建一个签名:\n"
+"“%s”\n"
+"这将通过规则创建一个等同于手写签名的合格签名。\n"
+"\n"
+"%s%s您真的确定您要这样做吗?"
 
 #, c-format
 msgid ""
 "Note, that this software is not officially approved to create or verify such "
 "signatures.\n"
-msgstr ""
+msgstr "注意,此软件并没有官方地赞成创建或者验证这种签名。\n"
 
 #, c-format
 msgid ""
@@ -7358,609 +6930,591 @@ msgid ""
 "\"%s\"\n"
 "Note, that this certificate will NOT create a qualified signature!"
 msgstr ""
+"您将要使用您的证书创建一个签名:\n"
+"“%s”\n"
+"注意,此证书将不会创建一个合格签名!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "hash algorithm %d (%s) for signer %d not supported; using %s\n"
-msgstr "保护算法 %d%s 未被支持\n"
+msgstr "散列算法 %d (%s) 对于签名者 %d 而言不被支持;使用 %s\n"
 
 #, c-format
 msgid "hash algorithm used for signer %d: %s (%s)\n"
-msgstr ""
+msgstr "为签名者 %d 使用的散列算法:%s (%s)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "checking for qualified certificate failed: %s\n"
-msgstr "æ£\80æ\9f¥å·²å»ºç«\8bç\9a\84ç­¾å\90\8dæ\97¶å\8f\91ç\94\9fé\94\99误ï¼\9a %s\n"
+msgstr "æ£\80æ\9f¥å\90\88æ ¼è¯\81书失败ï¼\9a%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Signature made "
-msgstr "签名建立于 %s\n"
+msgstr "已签名 "
 
 #, c-format
 msgid "[date not given]"
-msgstr ""
+msgstr "[日期未指定]"
 
-#, fuzzy, c-format
+#, c-format
 msgid " using certificate ID 0x%08lX\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr " 正在使用的证书标识 0x%08lX\n"
 
 #, c-format
 msgid ""
 "invalid signature: message digest attribute does not match computed one\n"
-msgstr ""
+msgstr "无效的签名:消息摘要属性与计算得到的不匹配\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Good signature from"
-msgstr "完好的签名,来自于“%s”"
+msgstr "良好签名来自于"
 
-#, fuzzy, c-format
+#, c-format
 msgid "                aka"
-msgstr "              亦即“%s”"
+msgstr "                亦即"
 
-#, fuzzy, c-format
+#, c-format
 msgid "This is a qualified signature\n"
-msgstr "这将是一个自身签名。\n"
+msgstr "这是一个合格的签名\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't initialize certificate cache lock: %s\n"
-msgstr "æ£\80æ\9f¥å·²å»ºç«\8bç\9a\84ç­¾å\90\8dæ\97¶å\8f\91ç\94\9fé\94\99误ï¼\9a %s\n"
+msgstr "æ\97 æ³\95å\88\9då§\8bå\8c\96è¯\81书ç¼\93å­\98é\94\81ï¼\9a%s\n"
 
 #, c-format
 msgid "can't acquire read lock on the certificate cache: %s\n"
-msgstr ""
+msgstr "无法在证书缓存上为读取加锁:%s\n"
 
 #, c-format
 msgid "can't acquire write lock on the certificate cache: %s\n"
-msgstr ""
+msgstr "无法在证书缓存上为写入加锁:%s\n"
 
 #, c-format
 msgid "can't release lock on the certificate cache: %s\n"
-msgstr ""
+msgstr "无法解除证书缓存上的锁:%s\n"
 
 #, c-format
 msgid "dropping %u certificates from the cache\n"
-msgstr ""
+msgstr "从缓存中丢弃 %u 个证书\n"
 
-#, fuzzy, c-format
-#| msgid "can't create `%s': %s\n"
+#, c-format
 msgid "can't parse certificate '%s': %s\n"
-msgstr "无法建立‘%s’:%s\n"
+msgstr "无法解析证书‘%s’:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate '%s' already cached\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "证书‘%s’已被缓存\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "trusted certificate '%s' loaded\n"
-msgstr "已建ç«\8bå\90\8aé\94\80è¯\81书ã\80\82\n"
+msgstr "å\8f\97ä¿¡ä»»è¯\81书â\80\98%sâ\80\99å·²å\8a è½½\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate '%s' loaded\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "证书‘%s’已加载\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "  SHA1 fingerprint = %s\n"
-msgstr "CA 指纹:"
+msgstr "  SHA1 指纹 = %s\n"
 
 msgid "   issuer ="
-msgstr ""
+msgstr "   签发者 ="
 
 msgid "  subject ="
-msgstr ""
+msgstr "  主题 ="
 
-#, fuzzy, c-format
+#, c-format
 msgid "error loading certificate '%s': %s\n"
-msgstr "å\8f\96å¾\97å½\93å\89\8då¯\86é\92¥ä¿¡æ\81¯æ\97¶å\87ºé\94\99:%s\n"
+msgstr "å\8a è½½è¯\81书â\80\98%sâ\80\99æ\97¶å\87ºç\8e°é\94\99误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "permanently loaded certificates: %u\n"
-msgstr "证书已损坏"
+msgstr "永久载入的证书: %u\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "    runtime cached certificates: %u\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "    运行时缓存的证书: %u\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "           trusted certificates: %u (%u,%u,%u,%u)\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "           信任的证书: %u (%u,%u,%u,%u)\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate already cached\n"
-msgstr "已建立吊销证书。\n"
+msgstr "证书已被缓存。\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate cached\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "证书已缓存\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error caching certificate: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "缓存证书时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "invalid fingerprint"
+#, c-format
 msgid "invalid SHA1 fingerprint string '%s'\n"
-msgstr "æ\8c\87纹æ\97 æ\95\88"
+msgstr "æ\97 æ\95\88ç\9a\84 SHA1 æ\8c\87纹å­\97串 '%s'\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error fetching certificate by S/N: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "通过 S/N 获取证书时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error fetching certificate by subject: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "通过主题获取证书时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no issuer found in certificate\n"
-msgstr "生成一份吊销证书"
+msgstr "没有找到证书的签发者\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting authorityKeyIdentifier: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取 authorityKeyIdentifier 时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "can't create directory `%s': %s\n"
+#, c-format
 msgid "creating directory '%s'\n"
-msgstr "æ\97 æ³\95建ç«\8bç\9b®å½\95â\80\98%sâ\80\99ï¼\9a%s\n"
+msgstr "æ­£å\9c¨å\88\9b建ç\9b®å½\95â\80\98%sâ\80\99\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating directory '%s': %s\n"
-msgstr "建ç«\8bé\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99æ\97¶å\8f\91ç\94\9f错误:%s\n"
+msgstr "å\88\9b建ç\9b®å½\95â\80\98%sâ\80\99æ\97¶å\87ºç\8e°错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "ignoring database dir '%s'\n"
-msgstr "结尾行有问题\n"
+msgstr "忽略数据库文件夹‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading directory '%s': %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取文件夹‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "removing cache file '%s'\n"
-msgstr "æ\97 æ³\95读å\87ºå\85¬é\92¥ï¼\9a%s\n"
+msgstr "æ­£å\9c¨ç§»é\99¤ç¼\93å­\98æ\96\87件â\80\98%sâ\80\99\n"
 
-#, fuzzy, c-format
-#| msgid "enarmoring failed: %s\n"
+#, c-format
 msgid "not removing file '%s'\n"
-msgstr "进行 ASCII 封装失败:%s\n"
+msgstr "未能移除文件‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error closing cache file: %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "关闭缓存文件时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to open cache dir file '%s': %s\n"
-msgstr "æ\97 æ³\95æ\89\93å¼\80â\80\98%sâ\80\99:%s\n"
+msgstr "æ\89\93å¼\80ç¼\93å­\98ç\9b®å½\95æ\96\87件â\80\98%sâ\80\99失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating new cache dir file '%s': %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "创建新的缓存目录文件‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error writing secret keyring `%s': %s\n"
+#, c-format
 msgid "error writing new cache dir file '%s': %s\n"
-msgstr "写入私钥钥匙环‘%s’时发生错误: %s\n"
+msgstr "写入新的缓存目录文件‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error closing new cache dir file '%s': %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "关闭新的缓存目录文件‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "new configuration file `%s' created\n"
+#, c-format
 msgid "new cache dir file '%s' created\n"
-msgstr "新的配置文件‘%s’已建立\n"
+msgstr "新的缓存目录文件‘%s’已创建\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to re-open cache dir file '%s': %s\n"
-msgstr "无法建立目录‘%s’:%s\n"
+msgstr "重新打开缓存目录文件‘%s’时出现错误:%s\n"
 
 #, c-format
 msgid "first record of '%s' is not the version\n"
-msgstr ""
+msgstr "‘%s’的第一条记录不是版本信息\n"
 
 #, c-format
 msgid "old version of cache directory - cleaning up\n"
-msgstr ""
+msgstr "缓存目录的旧版 - 正在清理\n"
 
 #, c-format
 msgid "old version of cache directory - giving up\n"
-msgstr ""
+msgstr "缓存目录的旧版 - 放弃\n"
 
 #, c-format
 msgid "extra field detected in crl record of '%s' line %u\n"
-msgstr ""
+msgstr "在‘%s’的 CRL 记录的第 %u 行检测到额外信息\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid line detected in '%s' line %u\n"
-msgstr "错误:指纹格式无效。\n"
+msgstr "在‘%s’的第 %u 行检测到无效的行\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "duplicate entry detected in '%s' line %u\n"
-msgstr "已建ç«\8bå\90\8aé\94\80è¯\81书ã\80\82\n"
+msgstr "å\9c¨â\80\98%sâ\80\99ç\9a\84第 %u è¡\8cæ£\80æµ\8bå\88°é\87\8då¤\8dç\9a\84æ\9d¡ç\9b®\n"
 
 #, c-format
 msgid "unsupported record type in '%s' line %u skipped\n"
-msgstr ""
+msgstr "已跳过‘%s’的第 %u 行的不支持的记录\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid issuer hash in '%s' line %u\n"
-msgstr "错误:指纹格式无效。\n"
+msgstr ""
+"在‘%s’的第 %u 行检测到无效的签发者散列\n"
+"\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no issuer DN in '%s' line %u\n"
-msgstr "读取‘%s’错误:%s\n"
+msgstr ""
+"在‘%s’的第 %u 行没有签发者 DN\n"
+"\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid timestamp in '%s' line %u\n"
-msgstr "错误:指纹格式无效。\n"
+msgstr ""
+"在‘%s’的第 %u 行检测到无效的时间戳\n"
+"\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: invalid size of random_seed file - not used\n"
+#, c-format
 msgid "WARNING: invalid cache file hash in '%s' line %u\n"
-msgstr "警告:随机数种子文件大小无效――未使用\n"
+msgstr ""
+"警告:在‘%s’的第 %u 行检测到无效的缓存文件\n"
+"\n"
 
 #, c-format
 msgid "detected errors in cache dir file\n"
-msgstr ""
+msgstr "在缓存目录文件中检测到错误\n"
 
 #, c-format
 msgid "please check the reason and manually delete that file\n"
-msgstr ""
+msgstr "请检查理由并手动删除那个文件\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to create temporary cache dir file '%s': %s\n"
-msgstr "无法建立目录‘%s’:%s\n"
+msgstr "创建临时缓存目录文件‘%s’时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error closing '%s': %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "关闭‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error reading `%s': %s\n"
+#, c-format
 msgid "error renaming '%s' to '%s': %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "将‘%s’重命名为‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "can't access `%s': %s\n"
+#, c-format
 msgid "can't hash '%s': %s\n"
-msgstr "æ\97 æ³\95å­\98å\8f\96â\80\98%sâ\80\99:%s\n"
+msgstr "æ\97 æ³\95å\8f\96â\80\98%sâ\80\99ç\9a\84æ\95£å\88\97:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error setting up MD5 hash context: %s\n"
-msgstr "读å\8f\96â\80\98%sâ\80\99æ\97¶å\87ºé\94\99:%s\n"
+msgstr "设置 MD5 æ\95£å\88\97ä¸\8aä¸\8bæ\96\87æ\97¶å\87ºç\8e°é\94\99误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error in `%s': %s\n"
+#, c-format
 msgid "error hashing '%s': %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "计算‘%s’的散列时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "invalid formatted checksum for '%s'\n"
-msgstr "错误:指纹格式无效。\n"
+msgstr "‘%s’具有无效的校验和格式\n"
 
 #, c-format
 msgid "too many open cache files; can't open anymore\n"
-msgstr ""
+msgstr "已经打开太多缓存文件;无法打开更多\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "opening cache file '%s'\n"
-msgstr "签名时失败: %s\n"
+msgstr "正在打开缓存文件‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error opening cache file '%s': %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "打开缓存文件‘%s’时出现错误:%s\n"
 
 #, c-format
 msgid "error initializing cache file '%s' for reading: %s\n"
-msgstr ""
+msgstr "为读取初始化缓存文件‘%s’时出现错误:%s\n"
 
 #, c-format
 msgid "calling unlock_db_file on a closed file\n"
-msgstr ""
+msgstr "对一个已关闭的文件调用 unlock_db_file 方法\n"
 
 #, c-format
 msgid "calling unlock_db_file on an unlocked file\n"
-msgstr ""
+msgstr "对一个已解锁的文件调用 unlock_db_file 方法\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to create a new cache object: %s\n"
-msgstr "%s:建立散列表失败:%s\n"
+msgstr "创建新的缓存对象失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "No help available for `%s'"
+#, c-format
 msgid "no CRL available for issuer id %s\n"
-msgstr "‘%s’没有可用的帮助"
+msgstr "签发者标识为 %s 的 CRL 不可用\n"
 
 #, c-format
 msgid "cached CRL for issuer id %s too old; update required\n"
-msgstr ""
+msgstr "签发者标识 %s 的 CRL 缓存太旧;要求更新\n"
 
 #, c-format
 msgid ""
 "force-crl-refresh active and %d minutes passed for issuer id %s; update "
 "required\n"
 msgstr ""
+"force-crl-refresh 选项已启用并且已过去 %d 分钟,签发者标识为 %s ; 要求更新\n"
 
 #, c-format
 msgid "force-crl-refresh active for issuer id %s; update required\n"
-msgstr ""
+msgstr "签发者标识  %s 的 force-crl-refresh 选项已启用; 要求更新\n"
 
 #, c-format
 msgid "available CRL for issuer ID %s can't be used\n"
-msgstr ""
+msgstr "签发者标识 %s 的可用 CRL 不能被使用\n"
 
 #, c-format
 msgid "cached CRL for issuer id %s tampered; we need to update\n"
-msgstr ""
+msgstr "签发者标识 %s 缓存的 CRL 被修改;我们需要更新\n"
 
 #, c-format
 msgid "WARNING: invalid cache record length for S/N "
-msgstr ""
+msgstr "警告:S/N 具有无效的缓存记录长度 "
 
-#, fuzzy, c-format
-#| msgid "Error reading backup key from `%s': %s\n"
+#, c-format
 msgid "problem reading cache record for S/N %s: %s\n"
-msgstr "从‘%s’读取备份密钥时出错:%s\n"
+msgstr "读取 S/N %s 的缓存记录时出现问题:%s\n"
 
 #, c-format
 msgid "S/N %s is not valid; reason=%02X  date=%.15s\n"
-msgstr ""
+msgstr "S/N %s 无效;原因=%02X  日期=%.15s\n"
 
 #, c-format
 msgid "S/N %s is valid, it is not listed in the CRL\n"
-msgstr ""
+msgstr "S/N %s 有效,其未被列入 CRL\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting data from cache file: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "从缓存文件中获取数据时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "invalid hash algorithm `%s'\n"
+#, c-format
 msgid "unknown hash algorithm '%s'\n"
-msgstr "æ\97 æ\95\88ç\9a\84â\80\98%sâ\80\99æ\95£å\88\97ç®\97æ³\95\n"
+msgstr "æ\9cªç\9f¥ç\9a\84æ\95£å\88\97ç®\97æ³\95â\80\98%sâ\80\99\n"
 
 #, c-format
 msgid "gcry_md_open for algorithm %d failed: %s\n"
-msgstr ""
+msgstr "算法 %d 的 gcry_md_open 方法失败:%s\n"
 
 #, c-format
 msgid "got an invalid S-expression from libksba\n"
-msgstr ""
+msgstr "从  libksba 获得了无效的 S 表达式\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "converting S-expression failed: %s\n"
-msgstr "签名时失败: %s\n"
+msgstr "转换 S 表达式时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "creating S-expression failed: %s\n"
-msgstr "æ\97 æ³\95读å\87ºå\85¬é\92¥ï¼\9a%s\n"
+msgstr "å\88\9b建 S è¡¨è¾¾å¼\8fæ\97¶å¤±è´¥ï¼\9a%s\n"
 
-#, fuzzy, c-format
-#| msgid "build_packet failed: %s\n"
+#, c-format
 msgid "ksba_crl_parse failed: %s\n"
-msgstr "build_packet 失败:%s\n"
+msgstr "ksba_crl_parse 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting update times of CRL: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "从 CRL 获取更新次数时出现错误:%s\n"
 
-#, c-format
+#, fuzzy, c-format
 msgid "update times of this CRL: this=%s next=%s\n"
-msgstr ""
+msgstr "此 CRL 的更新时间:此次=%s 下一次=%s\n"
 
 #, c-format
 msgid "nextUpdate not given; assuming a validity period of one day\n"
-msgstr ""
+msgstr "nextUpdate 参数未被指定;假设有效期为一天\n"
 
-#, fuzzy, c-format
-#| msgid "error getting new PIN: %s\n"
+#, c-format
 msgid "error getting CRL item: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取 CRL 项目时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error inserting item into temporary cache file: %s\n"
-msgstr "%s:写入目录记录时出错:%s\n"
+msgstr "向临时缓存文件中插入项目时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no CRL issuer found in CRL: %s\n"
-msgstr "生成一份吊销证书"
+msgstr "没有在 CRL 中找到 CRL 签发者: %s\n"
 
 #, c-format
 msgid "locating CRL issuer certificate by authorityKeyIdentifier\n"
-msgstr ""
+msgstr "正在通过 authorityKeyIdentifier 定位 CRL 签发者\n"
 
-#, fuzzy, c-format
-#| msgid "signature verification suppressed\n"
+#, c-format
 msgid "CRL signature verification failed: %s\n"
-msgstr "签名验证已被抑制\n"
+msgstr "CRL 签名验证失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error checking validity of CRL issuer certificate: %s\n"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "检查 CRL 签署者证书的有效性时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "ksba_crl_new failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "ksba_crl_new 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "ksba_crl_set_reader failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "ksba_crl_set_reader 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "removed stale temporary cache file '%s'\n"
-msgstr "无法建立目录‘%s’:%s\n"
+msgstr "移除过期的缓存文件‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "problem removing stale temporary cache file '%s': %s\n"
-msgstr "无法建立目录‘%s’:%s\n"
+msgstr "移除过期的缓存文件‘%s’时出现问题:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error creating temporary cache file '%s': %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "创建临时缓存文件‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "update secret failed: %s\n"
+#, c-format
 msgid "crl_parse_insert failed: %s\n"
-msgstr "更新私钥失败:%s\n"
+msgstr "crl_parse_insert 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error finishing temporary cache file '%s': %s\n"
-msgstr "%sï¼\9aå\86\99å\85¥ç\9b®å½\95è®°å½\95æ\97¶å\87ºé\94\99ï¼\9a%s\n"
+msgstr "å®\8cæ\88\90临æ\97¶ç¼\93å­\98æ\96\87件æ\97¶å\87ºç\8e°é\94\99误â\80\98%sâ\80\99ï¼\9a%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error closing temporary cache file '%s': %s\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "关闭临时缓存文件时出现错误‘%s’:%s\n"
 
 #, c-format
 msgid "WARNING: new CRL still too old; it expired on %s - loading anyway\n"
-msgstr ""
+msgstr "警告:新的 CRL 仍然太旧;其已在 %s 过期 - 无论如何先加载\n"
 
 #, c-format
 msgid "new CRL still too old; it expired on %s\n"
-msgstr ""
+msgstr "新的 CRL 仍然太旧;其已在 %s 过期\n"
 
 #, c-format
 msgid "unknown critical CRL extension %s\n"
-msgstr ""
+msgstr "未知的紧急 CRL 扩展 %s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading CRL extensions: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取 CRL 扩展时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "creating cache file '%s'\n"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "正在创建缓存文件‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
+#, c-format
 msgid "problem renaming '%s' to '%s': %s\n"
-msgstr "å°\86â\80\98%sâ\80\99é\87\8då\91½å\90\8d为â\80\98%sâ\80\99æ\97¶å¤±è´¥:%s\n"
+msgstr "å°\86â\80\98%sâ\80\99é\87\8då\91½å\90\8d为â\80\98%sâ\80\99æ\97¶å\87ºç\8e°é\97®é¢\98:%s\n"
 
 #, c-format
 msgid ""
 "updating the DIR file failed - cache entry will get lost with the next "
 "program start\n"
-msgstr ""
+msgstr "更新 DIR 文件时失败 - 缓存条目将会在下次程序启动时丢失\n"
 
 #, c-format
 msgid "Begin CRL dump (retrieved via %s)\n"
-msgstr ""
+msgstr "开始 CRL 导出(已通过 %s 取回)\n"
 
 msgid ""
 " ERROR: The CRL will not be used because it was still too old after an "
 "update!\n"
-msgstr ""
+msgstr " 错误:此 CRL 将不会被使用,因为它在一次更新之后仍然太旧!\n"
 
 msgid ""
 " ERROR: The CRL will not be used due to an unknown critical extension!\n"
-msgstr ""
+msgstr " 错误:此 CRL 将不会被使用,因为一个未知的紧急扩展!\n"
 
 msgid " ERROR: The CRL will not be used\n"
-msgstr ""
+msgstr " 错误:此 CRL 将不会被使用\n"
 
 msgid " ERROR: This cached CRL may have been tampered with!\n"
-msgstr ""
+msgstr " 错误:此缓存的 CRL 可能已经被篡改!\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: invalid size of random_seed file - not used\n"
+#, c-format
 msgid " WARNING: invalid cache record length\n"
-msgstr "警告:随机数种子文件大小无效――未使用\n"
+msgstr " 警告: 无效的缓存记录长度\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "problem reading cache record: %s\n"
-msgstr "%s:读取自由记录时出错:%s\n"
+msgstr "读取缓存记录时出现问题:%s\n"
 
-#, fuzzy, c-format
-#| msgid "error reading keyblock: %s\n"
+#, c-format
 msgid "problem reading cache key: %s\n"
-msgstr "读取密钥区块时发生错误:%s\n"
+msgstr "读取缓存的密钥时出现问题:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading cache entry from db: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "从数据库读取缓存项目时出现错误:%s\n"
 
 msgid "End CRL dump\n"
-msgstr ""
+msgstr "结束 CRL 导出\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "crl_fetch via DP failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "通过 DP 的 crl_fetch 方法失败:%s\n"
 
 #, fuzzy, c-format
 msgid "crl_cache_insert via DP failed: %s\n"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "通过 DP 的 crl_cache_insert 方法失败:%s\n"
 
 #, fuzzy, c-format
 msgid "crl_cache_insert via issuer failed: %s\n"
-msgstr "æ\97 æ³\95读å\87ºå\85¬é\92¥ï¼\9a%s\n"
+msgstr "é\80\9aè¿\87ç­¾å\8f\91è\80\85ç\9a\84 crl_cache_insert å¤±è´¥ï¼\9a%s\n"
 
 #, c-format
 msgid "reader to file mapping table full - waiting\n"
-msgstr ""
+msgstr "读取器的文件映射表已满 - 正在等待\n"
 
 #, c-format
 msgid "CRL access not possible due to disabled %s\n"
-msgstr ""
+msgstr "不能进行 CRL 访问,因为 %s 已禁用\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error retrieving '%s': %s\n"
-msgstr "建立‘%s’时发生错误:%s\n"
+msgstr "拉取‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
-#| msgid "%s: error writing dir record: %s\n"
+#, c-format
 msgid "error initializing reader object: %s\n"
-msgstr "%s:写入目录记录时出错:%s\n"
+msgstr "初始化读取对象时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "CRL access not possible due to Tor mode\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "不能在 Tor 模式下访问 CRL  \n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate search not possible due to disabled %s\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "由于 %s 被关闭,无法进行证书搜索\n"
 
 msgid "use OCSP instead of CRLs"
-msgstr ""
+msgstr "使用 OCSP 代替 CRLs"
 
 msgid "check whether a dirmngr is running"
-msgstr ""
+msgstr "检查 dirmngr 是否正在运行"
 
-#, fuzzy
 msgid "add a certificate to the cache"
-msgstr "已建立吊销证书。\n"
+msgstr "添加一个证书到缓存"
 
-#, fuzzy
 msgid "validate a certificate"
-msgstr "证书已损坏"
+msgstr "验证一个证书"
 
-#, fuzzy
 msgid "lookup a certificate"
-msgstr "证书已损坏"
+msgstr "查找一个证书"
 
-#, fuzzy
 msgid "lookup only locally stored certificates"
-msgstr "证书已损坏"
+msgstr "只查找本地存储的证书"
 
 msgid "expect an URL for --lookup"
-msgstr ""
+msgstr "--lookup 选项需要一个 URL"
 
 msgid "load a CRL into the dirmngr"
-msgstr ""
+msgstr "将一个 CRL 载入 dirmngr"
 
 msgid "special mode for use by Squid"
-msgstr ""
+msgstr "被 Squid 使用的特殊模式"
 
-#, fuzzy
 msgid "expect certificates in PEM format"
-msgstr "证书已损坏"
+msgstr "预期为 PEM 格式的证书"
 
-#, fuzzy
-#| msgid "Enter the user ID of the designated revoker: "
 msgid "force the use of the default OCSP responder"
-msgstr "输入指定吊销者的用户标识:"
+msgstr "强制使用默认的 OCSP 响应者"
 
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
 msgid "Usage: dirmngr-client [options] [certfile|pattern] (-h for help)\n"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法: dirmngr-client [选项] [certfile|pattern] (-h 获取帮助)\n"
 
 msgid ""
 "Syntax: dirmngr-client [options] [certfile|pattern]\n"
@@ -7968,2340 +7522,1152 @@ msgid ""
 "The process returns 0 if the certificate is valid, 1 if it is\n"
 "not valid and other error codes for general failures\n"
 msgstr ""
+"语法:dirmngr-client [选项] [certfile|pattern]\n"
+"通过  CRL 测试一个 X.509 证书或进行 OCSP 检查\n"
+"如果证书有效,这一进程将返回 0;如果证书无效\n"
+"将返回 1;其他错误代码则代表一般性的失败\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading certificate from stdin: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "从标准输入(stdin)读取证书时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading certificate from '%s': %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "从‘%s’读取证书时出现错误:%s\n"
 
 #, c-format
 msgid "certificate too large to make any sense\n"
-msgstr ""
+msgstr "证书太大以至于没有意义\n"
 
-#, fuzzy, c-format
-#| msgid "can't connect to `%s': %s\n"
+#, c-format
 msgid "can't connect to the dirmngr: %s\n"
-msgstr "无法连接至‘%s’:%s\n"
+msgstr "无法连接至 dirmngr:%s\n"
 
-#, fuzzy, c-format
-#| msgid "update failed: %s\n"
+#, c-format
 msgid "lookup failed: %s\n"
-msgstr "æ\9b´æ\96°失败:%s\n"
+msgstr "æ\9f¥æ\89¾失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
+#, c-format
 msgid "loading CRL '%s' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "载入 CRL ‘%s’ 时 失败:%s\n"
 
 #, c-format
 msgid "a dirmngr daemon is up and running\n"
-msgstr ""
+msgstr "一个 dirmngr 守护进程已开启并正在运行\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "validation of certificate failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "证书验证失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate is valid\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "证书有效\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate has been revoked\n"
-msgstr "注意:密钥已被吊销"
+msgstr "证书已被吊销\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate check failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "证书检查失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "can't stat `%s': %s\n"
+#, c-format
 msgid "got status: '%s'\n"
-msgstr "无法获得文件‘%s’的信息: %s\n"
+msgstr "已获取状态:‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "error writing secret keyring `%s': %s\n"
+#, c-format
 msgid "error writing base64 encoding: %s\n"
-msgstr "写入私钥钥匙环‘%s’时发生错误: %s\n"
+msgstr "写入 base64 编码时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "unsupported inquiry '%s'\n"
-msgstr ""
-"\n"
-"支持的算法:\n"
+msgstr "不支持的查询 '%s'\n"
 
 #, c-format
 msgid "absolute file name expected\n"
-msgstr ""
+msgstr "需要绝对文件名\n"
 
 #, c-format
 msgid "looking up '%s'\n"
-msgstr ""
+msgstr "正在查找‘%s’\n"
 
 msgid "list the contents of the CRL cache"
-msgstr ""
+msgstr "列出 CRL 缓存的内容"
 
-#, fuzzy
 msgid "|FILE|load CRL from FILE into cache"
-msgstr "从‘%s’读取选项\n"
+msgstr "|FILE|从 FILE 中加载 CRL 到缓存"
 
 msgid "|URL|fetch a CRL from URL"
-msgstr ""
+msgstr "|URL|从 URL 处获取 CRL"
 
 msgid "shutdown the dirmngr"
-msgstr ""
+msgstr "关闭 dirmngr"
 
 msgid "flush the cache"
-msgstr ""
+msgstr "刷新缓存"
 
 msgid "|FILE|write server mode logs to FILE"
-msgstr ""
+msgstr "|FILE|将服务器模式的日志写入到 FILE"
 
-#, fuzzy
-#| msgid "Quit without saving? (y/N) "
 msgid "run without asking a user"
-msgstr "要不保存而离开吗?(y/N)"
+msgstr "在不询问用户的情况下运行"
 
 msgid "force loading of outdated CRLs"
-msgstr ""
+msgstr "强制载入过期的 CRLs"
 
 msgid "allow sending OCSP requests"
-msgstr ""
+msgstr "允许发送 OCSP 请求"
 
 msgid "allow online software version check"
-msgstr ""
+msgstr "允许在线软件版本检查"
 
 msgid "inhibit the use of HTTP"
-msgstr ""
+msgstr "抑制 HTTP 的使用"
 
 msgid "inhibit the use of LDAP"
-msgstr ""
+msgstr "抑制 LDAP 的使用"
 
 msgid "ignore HTTP CRL distribution points"
-msgstr ""
+msgstr "忽略 HTTP CRL 分发点"
 
 msgid "ignore LDAP CRL distribution points"
-msgstr ""
+msgstr "忽略 LDAP CRL 分发点"
 
 msgid "ignore certificate contained OCSP service URLs"
-msgstr ""
+msgstr "忽略证书包含的 OCSP 服务 URLs"
 
 msgid "|URL|redirect all HTTP requests to URL"
-msgstr ""
+msgstr "|URL|重定向 HTTP 请求到 URL"
 
 msgid "|HOST|use HOST for LDAP queries"
-msgstr ""
+msgstr "|HOST|使用 HOST 进行 LDAP 查询"
 
 msgid "do not use fallback hosts with --ldap-proxy"
-msgstr ""
+msgstr "使用 --ldap-proxy 选项以不使用回退主机"
 
-#, fuzzy
 msgid "|FILE|read LDAP server list from FILE"
-msgstr "从‘%s’读取选项\n"
+msgstr "|FILE|从 FILE 中读取 LDAP 服务器列表"
 
 msgid "add new servers discovered in CRL distribution points to serverlist"
-msgstr ""
+msgstr "添加从 CRL 分发点发现的新服务器到服务器列表"
 
 msgid "|N|set LDAP timeout to N seconds"
-msgstr ""
+msgstr "|N|设置 LDAP 超时时间为 N 秒"
 
-#, fuzzy
 msgid "|URL|use OCSP responder at URL"
-msgstr "无法解析公钥服务器 URL\n"
+msgstr "|URL|使用 URL 处的 OCSP 响应者"
 
 msgid "|FPR|OCSP response signed by FPR"
-msgstr ""
+msgstr "|FPR|OCSP 响应由 FPR 签名"
 
 msgid "|N|do not return more than N items in one query"
-msgstr ""
+msgstr "|N|在一次查询中最多返回 N 个项目"
 
 msgid "|FILE|use the CA certificates in FILE for HKP over TLS"
-msgstr ""
+msgstr "|FILE|为承载 HKP 的 TLS 使用 FILE 中的 CA 证书"
 
 msgid "route all network traffic via Tor"
-msgstr ""
+msgstr "通过 Tor 转发所有网络流量"
 
-#, fuzzy
-#| msgid ""
-#| "@\n"
-#| "(See the man page for a complete listing of all commands and options)\n"
 msgid ""
 "@\n"
 "(See the \"info\" manual for a complete listing of all commands and "
 "options)\n"
 msgstr ""
 "@\n"
-"(请参考在线说明以获得所有命令和选项的完整清单)\n"
+"(参阅 \"info\" 手册以获取一份所有命令及选项的完整列表)\n"
 
-#, fuzzy
 msgid "Usage: @DIRMNGR@ [options] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:@DIRMNGR@ [选项] (-h 获取帮助)"
 
 msgid ""
 "Syntax: @DIRMNGR@ [options] [command [args]]\n"
 "Keyserver, CRL, and OCSP access for @GNUPG@\n"
 msgstr ""
+"语法:@DIRMNGR@ [选项] [命令 [参数]]\n"
+"@GNUPG@ 的公钥服务器、CRL 和 OCSP 访问\n"
 
 #, c-format
 msgid "valid debug levels are: %s\n"
-msgstr ""
+msgstr "有效的调试等级为:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "usage: %s [options] "
-msgstr "用法:gpg [选项] "
+msgstr "用法:%s [选项] "
 
-#, fuzzy, c-format
-#| msgid "%s not allowed with %s!\n"
+#, c-format
 msgid "colons are not allowed in the socket name\n"
-msgstr "%s 不可与 %s 并用\n"
+msgstr "套接字名称中不允许使用冒号\n"
 
-#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
+#, c-format
 msgid "fetching CRL from '%s' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "从‘%s’处获取 CRL 时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "processing CRL from '%s' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "从‘%s’处处理 CRL 时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s:%u: line too long - skipped\n"
-msgstr "列太长"
+msgstr "%s:%u: 行太长 - 跳过\n"
 
-#, fuzzy, c-format
-#| msgid "invalid fingerprint"
+#, c-format
 msgid "%s:%u: invalid fingerprint detected\n"
-msgstr "指纹无效"
+msgstr "%s:%u: 检测到无效指纹\n"
 
-#, fuzzy, c-format
-#| msgid "read error in `%s': %s\n"
+#, c-format
 msgid "%s:%u: read error: %s\n"
-msgstr "读取‘%s’错误:%s\n"
+msgstr "%s:%u: 读取错误:%s\n"
 
 #, c-format
 msgid "%s:%u: garbage at end of line ignored\n"
-msgstr ""
+msgstr "%s:%u: 已忽略行尾部的垃圾数据\n"
 
 #, c-format
 msgid "SIGHUP received - re-reading configuration and flushing caches\n"
-msgstr ""
+msgstr "接收到 SIGHUP 信号 -正在重新读取配置文件并刷新缓存\n"
 
 #, c-format
 msgid "SIGUSR2 received - no action defined\n"
-msgstr ""
+msgstr "接收到 SIGUSR2 信号 - 未定义要进行的操作\n"
 
 #, c-format
 msgid "SIGTERM received - shutting down ...\n"
-msgstr ""
+msgstr "接收到 SIGTERM 信号 - 正在关闭...\n"
 
 #, c-format
 msgid "SIGTERM received - still %d active connections\n"
-msgstr ""
+msgstr "接收到 SIGTERM 信号 - 仍然有 %d 个活动的连接\n"
 
-#, fuzzy, c-format
-#| msgid "not forced"
+#, c-format
 msgid "shutdown forced\n"
-msgstr "å\8f¯é\80\89"
+msgstr "强å\88¶å\85³é\97­\n"
 
 #, c-format
 msgid "SIGINT received - immediate shutdown\n"
-msgstr ""
+msgstr "收到 SIGINT 信号 - 立即关闭\n"
 
 #, c-format
 msgid "signal %d received - no action defined\n"
-msgstr ""
+msgstr "收到 %d 信号 - 未定义要进行的操作\n"
 
 msgid "return all values in a record oriented format"
-msgstr ""
+msgstr "以记录导向的格式返回所有值"
 
 msgid "|NAME|ignore host part and connect through NAME"
-msgstr ""
+msgstr "|NAME|忽略主机部分并通过 NAME 进行连接"
 
-#, fuzzy
 msgid "|NAME|connect to host NAME"
-msgstr "|某甲|为收件者“某甲”加密"
+msgstr "|NAME|连接到以 NAME 命名的主机"
 
 msgid "|N|connect to port N"
-msgstr ""
+msgstr "|N|连接到端口 N"
 
 msgid "|NAME|use user NAME for authentication"
-msgstr ""
+msgstr "|NAME|使用用户名称 NAME 进行身份验证"
 
 msgid "|PASS|use password PASS for authentication"
-msgstr ""
+msgstr "|PASS|使用密码 PASS 进行身份验证"
 
 msgid "take password from $DIRMNGR_LDAP_PASS"
-msgstr ""
+msgstr "从 $DIRMNGR_LDAP_PASS 取得密码"
 
 msgid "|STRING|query DN STRING"
-msgstr ""
+msgstr "|STRING|查询 DN STRING"
 
 msgid "|STRING|use STRING as filter expression"
-msgstr ""
+msgstr "|STRING|使用 STRING 作为过滤器扩展"
 
 msgid "|STRING|return the attribute STRING"
-msgstr ""
+msgstr "|STRING|返回属性 STRING"
 
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
 msgid "Usage: dirmngr_ldap [options] [URL] (-h for help)\n"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法: dirmngr_ldap [选项] [URL] (-h 获取帮助)\n"
 
 msgid ""
 "Syntax: dirmngr_ldap [options] [URL]\n"
 "Internal LDAP helper for Dirmngr\n"
 "Interface and options may change without notice\n"
 msgstr ""
+"语法:dirmngr_ldap [选项] [URL]\n"
+"Dirmngr 的内部 LDAP 助手\n"
+"接口和选项可能在没有通知的情况下改变\n"
 
-#, fuzzy, c-format
-#| msgid "invalid import options\n"
+#, c-format
 msgid "invalid port number %d\n"
-msgstr "无效的导入选项\n"
+msgstr "无效的端口号 %d\n"
 
 #, c-format
 msgid "scanning result for attribute '%s'\n"
-msgstr ""
+msgstr "为属性‘%s’搜索结果\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error writing to stdout: %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "写入到标准输出(stdout)时出现错误:%s\n"
 
 #, c-format
 msgid "          available attribute '%s'\n"
-msgstr ""
+msgstr "          可用属性‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "attribute '%s' not found\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "属性‘%s’未找到\n"
 
 #, c-format
 msgid "found attribute '%s'\n"
-msgstr ""
+msgstr "找到属性‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "reading from `%s'\n"
+#, c-format
 msgid "processing url '%s'\n"
-msgstr "正在从‘%s’读取\n"
+msgstr "正在处理 URL ‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "          w/o user IDs: %lu\n"
+#, c-format
 msgid "          user '%s'\n"
-msgstr "    遗失用户标识:%lu\n"
+msgstr "          用户‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "                aka \"%s\""
+#, c-format
 msgid "          pass '%s'\n"
-msgstr "              亦即“%s”"
+msgstr "          密码‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "          w/o user IDs: %lu\n"
+#, c-format
 msgid "          host '%s'\n"
-msgstr "    遗失用户标识:%lu\n"
+msgstr "          主机‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "          not imported: %lu\n"
+#, c-format
 msgid "          port %d\n"
-msgstr "        未被导入:%lu\n"
+msgstr "          端口 %d\n"
 
-#, fuzzy, c-format
-#| msgid "                aka \"%s\""
+#, c-format
 msgid "            DN '%s'\n"
-msgstr "              亦即“%s”"
+msgstr "            DN ‘%s’\n"
 
 #, c-format
 msgid "        filter '%s'\n"
-msgstr ""
+msgstr "        过滤器 ‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "                aka \"%s\""
+#, c-format
 msgid "          attr '%s'\n"
-msgstr "              亦即“%s”"
+msgstr "          属性 ‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no host name in '%s'\n"
-msgstr "(不给定描述)\n"
+msgstr "‘%s’中没有主机名\n"
 
 #, c-format
 msgid "no attribute given for query '%s'\n"
-msgstr ""
+msgstr "未指定查询‘%s’的属性\n"
 
-#, fuzzy, c-format
-#| msgid "WARNING: using insecure memory!\n"
+#, c-format
 msgid "WARNING: using first attribute only\n"
-msgstr "警告:正在使用不安全的内存!\n"
+msgstr "警告:仅使用第一个属性\n"
 
-#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
+#, c-format
 msgid "LDAP init to '%s:%d' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "LDAP 初始化至 ‘%s:%d’ 时失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
+#, c-format
 msgid "binding to '%s:%d' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+msgstr "绑定至‘%s:%d’时失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "dearmoring failed: %s\n"
+#, c-format
 msgid "searching '%s' failed: %s\n"
-msgstr "解开 ASCII 封装失败:%s\n"
+msgstr "搜索‘%s’时失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "`%s' is not a JPEG file\n"
+#, c-format
 msgid "'%s' is not an LDAP URL\n"
-msgstr "â\80\9c%sâ\80\9dä¸\8dæ\98¯ä¸\80个 JPEG æ\96\87件\n"
+msgstr "â\80\98%sâ\80\99ä¸\8dæ\98¯ä¸\80个 LDAP URL\n"
 
 #, c-format
 msgid "'%s' is an invalid LDAP URL\n"
-msgstr ""
+msgstr "‘%s’是一个无效的 LDAP URL\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error accessing '%s': http status %u\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "访问‘%s’时出现错误:http 状态码 %u\n"
+
+#, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "URL '%s' 重定向到 '%s' (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "过多重定向\n"
 
 #, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "正在写入‘%s’\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
-msgstr "建ç«\8bé\92¥å\8c\99ç\8e¯â\80\98%sâ\80\99æ\97¶å\8f\91ç\94\9f错误:%s\n"
+msgstr "å\88\86é\85\8då\86\85å­\98æ\97¶å\87ºç\8e°错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error printing log line: %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "打印日志行时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading log from ldap wrapper %d: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "从 ldap wrapper %d 处读取日志时出现错误:%s\n"
 
 #, c-format
 msgid "ldap wrapper %d ready"
-msgstr ""
+msgstr "ldap wrapper %d 就绪"
 
 #, c-format
 msgid "ldap wrapper %d ready: timeout\n"
-msgstr ""
+msgstr "ldap wrapper %d 就绪:超时\n"
 
 #, c-format
 msgid "ldap wrapper %d ready: exitcode=%d\n"
-msgstr ""
+msgstr "ldap wrapper %d 就绪:退出代码=%d\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "waiting for ldap wrapper %d failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "等待 ldap wrapper %d 时失败:%s\n"
 
 #, c-format
 msgid "ldap wrapper %d stalled - killing\n"
-msgstr ""
+msgstr "ldap wrapper %d 已挂起 - 正在关闭\n"
 
 #, c-format
 msgid "invalid char 0x%02x in host name - not added\n"
-msgstr ""
+msgstr "主机名中存在无效字符 0x%02x - 未被添加\n"
 
-#, fuzzy, c-format
-#| msgid "sending key %s to %s server %s\n"
+#, c-format
 msgid "adding '%s:%d' to the ldap server list\n"
-msgstr "将密钥‘%s’上传到 %s 服务器 %s\n"
+msgstr "正在将‘%s:%d’添加至 ldap 服务器列表\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "malloc failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "malloc 方法失败:%s\n"
 
 #, c-format
 msgid "start_cert_fetch: invalid pattern '%s'\n"
-msgstr ""
+msgstr "start_cert_fetch:无效的模式‘%s’\n"
 
 #, c-format
 msgid "ldap_search hit the size limit of the server\n"
-msgstr ""
+msgstr "ldap_search 方法触及服务器的大小限制\n"
 
-#, fuzzy, c-format
-#| msgid "%s: invalid file version %d\n"
+#, c-format
 msgid "invalid canonical S-expression found\n"
-msgstr "%s:无效的文件版本%d\n"
+msgstr "无效的规范 S-表达式\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "gcry_md_open failed: %s\n"
-msgstr "签名时失败: %s\n"
+msgstr "gcry_md_open 方法失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "update secret failed: %s\n"
+#, c-format
 msgid "oops: ksba_cert_hash failed: %s\n"
-msgstr "更新私钥失败:%s\n"
+msgstr "oops: ksba_cert_hash 方法失败:%s\n"
 
 #, c-format
 msgid "bad URL encoding detected\n"
-msgstr ""
+msgstr "检测到错误的 URL 编码\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading from responder: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "从响应者处读取失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "Error: Private DO too long (limit is %d characters).\n"
+#, c-format
 msgid "response from server too large; limit is %d bytes\n"
-msgstr "é\94\99误ï¼\9a个人 DO å¤ªé\95¿(è\87³å¤\9a %d ä¸ªå­\97符)ã\80\82\n"
+msgstr "æ\9c\8då\8a¡å\99¨ç\9a\84å\93\8dåº\94太é\95¿ï¼\9bé\99\90å\88¶ä¸º %d å­\97è\8a\82\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "OCSP request not possible due to Tor mode\n"
-msgstr "找不到私钥“%s”:%s\n"
+msgstr "不能在 Tor 模式下进行 OCSP 请求\n"
 
 #, c-format
 msgid "OCSP request not possible due to disabled HTTP\n"
-msgstr ""
+msgstr "不能进行 OCSP 请求,因为 HTTP 已禁用\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error setting OCSP target: %s\n"
-msgstr "读å\8f\96â\80\98%sâ\80\99æ\97¶å\87ºé\94\99:%s\n"
+msgstr "设置 OCSP ç\9b®æ \87æ\97¶å\87ºç\8e°é\94\99误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error building OCSP request: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "构建 OCSP 请求时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error connecting to '%s': %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "连接到‘%s’时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading HTTP response for '%s': %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取‘%s’的 HTTP 响应时出现错误:%s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "too many cipher preferences\n"
-msgid "too many redirections\n"
-msgstr "太多对称加密算法首选项\n"
-
-#, fuzzy, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
-msgstr "å\9c¨â\80\98%sâ\80\99中寻æ\89¾ä¿¡ä»»åº¦è®°å½\95æ\97¶å\87ºé\94\99:%s\n"
+msgstr "å¤\84ç\90\86â\80\98%sâ\80\99ç\9a\84 OCSP å\93\8dåº\94æ\97¶å\87ºç\8e°é\94\99误:%s\n"
 
 #, c-format
 msgid "OCSP responder at '%s' status: %s\n"
-msgstr ""
+msgstr "‘%s’处的 OCSP 响应者状态:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "hashing the OCSP response for '%s' failed: %s\n"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "计算‘%s’的  OCSP 请求的散列时失败:%s\n"
 
 #, c-format
 msgid "not signed by a default OCSP signer's certificate"
-msgstr ""
+msgstr "并非由一个默认的 OCSP 签名者的证书签名"
 
 #, c-format
 msgid "only SHA-1 is supported for OCSP responses\n"
-msgstr ""
+msgstr "对于 OCSP 响应只有 SHA-1 被支持\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "allocating list item failed: %s\n"
-msgstr "æ\97 æ³\95读å\87ºå\85¬é\92¥ï¼\9a%s\n"
+msgstr "å\88\86é\85\8då\88\97表项æ\97¶å¤±è´¥ï¼\9a%s\n"
 
-#, fuzzy, c-format
-#| msgid "error getting new PIN: %s\n"
+#, c-format
 msgid "error getting responder ID: %s\n"
-msgstr "获取新 PIN 时出错:%s\n"
+msgstr "获取响应者 ID 时出现错误:%s\n"
 
 #, c-format
 msgid "no suitable certificate found to verify the OCSP response\n"
-msgstr ""
+msgstr "未找到合适的证书来验证 OCSP 请求\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "issuer certificate not found: %s\n"
-msgstr "æ\89¾ä¸\8då\88°ç§\81é\92¥â\80\9c%sâ\80\9d:%s\n"
+msgstr "æ\9cªæ\89¾å\88°ç­¾å\8f\91è\80\85è¯\81书:%s\n"
 
 #, c-format
 msgid "caller did not return the target certificate\n"
-msgstr ""
+msgstr "调用者没有返回目标证书\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "caller did not return the issuing certificate\n"
-msgstr "生成一份吊销证书"
+msgstr "调用者没有返回签发的证书\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to allocate OCSP context: %s\n"
-msgstr "æ\97 æ³\95å­\98å\82¨å¯\86é\92¥ï¼\9a%s\n"
+msgstr "å\88\86é\85\8d OCSP ä¸\8aä¸\8bæ\96\87æ\97¶å¤±è´¥ï¼\9a%s\n"
 
-#, fuzzy, c-format
-#| msgid "can't access `%s': %s\n"
+#, c-format
 msgid "can't get authorityInfoAccess: %s\n"
-msgstr "无法存取‘%s’:%s\n"
+msgstr "无法获取 authorityInfoAccess:%s\n"
 
 #, c-format
 msgid "no default OCSP responder defined\n"
-msgstr ""
+msgstr "未定义默认的 OCSP 响应者\n"
 
-#, fuzzy, c-format
-#| msgid "no default secret keyring: %s\n"
+#, c-format
 msgid "no default OCSP signer defined\n"
-msgstr "没æ\9c\89é»\98认ç\9a\84ç§\81é\92¥é\92¥å\8c\99ç\8e¯ï¼\9a %s\n"
+msgstr "æ\9cªå®\9aä¹\89é»\98认ç\9a\84 OCSP ç­¾å\90\8dè\80\85\n"
 
 #, c-format
 msgid "using default OCSP responder '%s'\n"
-msgstr ""
+msgstr "正在使用默认的 OCSP 响应者‘%s’\n"
 
-#, fuzzy, c-format
-#| msgid "using cipher %s\n"
+#, c-format
 msgid "using OCSP responder '%s'\n"
-msgstr "使用对称加密算法 %s\n"
+msgstr "正在使用 OCSP 响应者‘%s’\n"
 
 #, c-format
 msgid "failed to establish a hashing context for OCSP: %s\n"
-msgstr ""
+msgstr "为 OCSP 创建散列上下文失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error getting OCSP status for target certificate: %s\n"
-msgstr "取得当前密钥信息时出错:%s\n"
+msgstr "获取目标证书的 OCSP 状态时出现错误:%s\n"
 
 #, c-format
 msgid "certificate status is: %s  (this=%s  next=%s)\n"
-msgstr ""
+msgstr "证书状态:%s  (当前=%s  下一个=%s)\n"
 
 msgid "good"
-msgstr ""
+msgstr "良好"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate has been revoked at: %s due to: %s\n"
-msgstr "注意:密钥已被吊销"
+msgstr "证书已经被吊销于: %s 原因是: %s\n"
 
 #, c-format
 msgid "OCSP responder returned a status in the future\n"
-msgstr ""
+msgstr "OCSP 响应者返回了将来的状态\n"
 
 #, c-format
 msgid "OCSP responder returned a non-current status\n"
-msgstr ""
+msgstr "OCSP 响应者返回了一个非当前的状态\n"
 
 #, c-format
 msgid "OCSP responder returned an too old status\n"
-msgstr ""
+msgstr "OCSP 返回了一个太以前的状态\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "assuan_inquire(%s) failed: %s\n"
-msgstr "签名时失败: %s\n"
+msgstr "assuan_inquire(%s) 方法失败:%s\n"
 
 msgid "ldapserver missing"
-msgstr ""
+msgstr "ldapserver 缺失"
 
 msgid "serialno missing in cert ID"
-msgstr ""
+msgstr "证书 ID 中的序列号缺失"
 
-#, fuzzy, c-format
+#, c-format
 msgid "assuan_inquire failed: %s\n"
-msgstr "签名时失败: %s\n"
+msgstr "assuan_inquire 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "fetch_cert_by_url failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "fetch_cert_by_url 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error sending data: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "发送数据时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "start_cert_fetch failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "start_cert_fetch 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "fetch_next_cert failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "fetch_next_cert 方法失败:%s\n"
 
 #, c-format
 msgid "max_replies %d exceeded\n"
-msgstr ""
+msgstr "超过设置的 max_replies %d\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't allocate control structure: %s\n"
-msgstr "不能创建备份文件‘%s’:%s\n"
+msgstr "无法分配控制结构:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "failed to allocate assuan context: %s\n"
-msgstr "%s:建立散列表失败:%s\n"
+msgstr "分配 assuan 上下文时失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "failed to initialize the TrustDB: %s\n"
+#, c-format
 msgid "failed to initialize the server: %s\n"
-msgstr "初始化信任度数据库失败:%s\n"
+msgstr "初始化服务器时失败:%s\n"
 
-#, fuzzy, c-format
-#| msgid "failed to store the creation date: %s\n"
+#, c-format
 msgid "failed to the register commands with Assuan: %s\n"
-msgstr "无法存储创建日期:%s\n"
+msgstr "向 Assuan 注册命令时失败:%s\n"
 
 #, c-format
 msgid "Assuan accept problem: %s\n"
-msgstr ""
+msgstr "Assuan 接受出现问题:%s\n"
 
-#, fuzzy, c-format
-#| msgid "signing failed: %s\n"
+#, c-format
 msgid "Assuan processing failed: %s\n"
-msgstr "签名时失败: %s\n"
+msgstr "Assuan 处理时失败:%s\n"
 
 #, c-format
 msgid "accepting root CA not marked as a CA"
-msgstr ""
+msgstr "正在接受的根 CA 没有被标记为一个 CA"
 
-#, fuzzy, c-format
-#| msgid "checking the trustdb\n"
+#, c-format
 msgid "CRL checking too deeply nested\n"
-msgstr "正在检查信任度数据库\n"
+msgstr "CRL 检查时出现过深层的嵌套\n"
 
 msgid "not checking CRL for"
-msgstr ""
+msgstr "未检查 CRL ,对于"
 
-#, fuzzy
 msgid "checking CRL for"
-msgstr "æ£\80æ\9f¥å·²å»ºç«\8bç\9a\84ç­¾å\90\8dæ\97¶å\8f\91ç\94\9fé\94\99误ï¼\9a %s\n"
+msgstr "æ­£å\9c¨æ£\80æ\9f¥ CRLï¼\8c对äº\8e"
 
-#, fuzzy, c-format
+#, c-format
 msgid "selfsigned certificate has a BAD signature"
-msgstr "验证签名"
+msgstr "自签名证书具有损坏的签名"
 
-#, fuzzy, c-format
+#, c-format
 msgid "checking trustworthiness of root certificate failed: %s\n"
-msgstr "检查已建立的签名时发生错误: %s\n"
+msgstr "检查根证书的信任度时失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "certificate chain is good\n"
-msgstr "首选项‘%s’重复\n"
+msgstr "证书链良好\n"
 
 #, c-format
 msgid "certificate should not have been used for CRL signing\n"
-msgstr ""
+msgstr "证书本不应被用于 CRL 签名\n"
 
-#, fuzzy
 msgid "quiet"
-msgstr "quit"
+msgstr "静默"
 
 msgid "print data out hex encoded"
-msgstr ""
+msgstr "以十六进制编码打印数据"
 
 msgid "decode received data lines"
-msgstr ""
+msgstr "解码接收到的数据行"
 
 msgid "connect to the dirmngr"
-msgstr ""
+msgstr "连接到 dirmngr"
 
 msgid "|NAME|connect to Assuan socket NAME"
-msgstr ""
+msgstr "|NAME|连接到名称为 NAME 的 Assuan 套接字"
 
 msgid "|ADDR|connect to Assuan server at ADDR"
-msgstr ""
+msgstr "|ADDR|连接到地址为 ADDR 的 Assuan 服务器"
 
 msgid "run the Assuan server given on the command line"
-msgstr ""
+msgstr "运行命令行中指定的 Assuan 服务器"
 
 msgid "do not use extended connect mode"
-msgstr ""
+msgstr "不使用扩展连接模式"
 
-#, fuzzy
 msgid "|FILE|run commands from FILE on startup"
-msgstr "从‘%s’读取选项\n"
+msgstr "|FILE|在启动时从 FILE 处执行命令"
 
 msgid "run /subst on startup"
-msgstr ""
+msgstr "在启动时运行 /subst"
 
-#, fuzzy
 msgid "Usage: @GPG@-connect-agent [options] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:@GPG@-connect-agent [选项] (-h 获取帮助)"
 
 msgid ""
 "Syntax: @GPG@-connect-agent [options]\n"
 "Connect to a running agent and send commands\n"
 msgstr ""
+"语法:@GPG@-connect-agent [选项]\n"
+"连接到一个正在运行的代理人程序并发送命令\n"
 
 #, c-format
 msgid "option \"%s\" requires a program and optional arguments\n"
-msgstr ""
+msgstr "选项 “%s” 要求一个程序和可选参数\n"
 
 #, c-format
 msgid "option \"%s\" ignored due to \"%s\"\n"
-msgstr ""
+msgstr "已忽略选项 “%s”,因为 “%s”\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "receiving line failed: %s\n"
-msgstr "æ\97 æ³\95读å\87ºå\85¬é\92¥ï¼\9a%s\n"
+msgstr "æ\8e¥æ\94¶è¡\8c失败ï¼\9a%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "line too long - skipped\n"
-msgstr "列太长"
+msgstr "行太长 - 跳过\n"
 
 #, c-format
 msgid "line shortened due to embedded Nul character\n"
-msgstr ""
+msgstr "行已被截断,因为内嵌有 Nul 字符\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "unknown command '%s'\n"
-msgstr "未知的选项 '%s'\n"
+msgstr "未知命令‘%s’\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "sending line failed: %s\n"
-msgstr "签名时失败: %s\n"
+msgstr "发送行失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error sending standard options: %s\n"
-msgstr "å\9c¨â\80\98%sâ\80\99中寻æ\89¾ä¿¡ä»»åº¦è®°å½\95æ\97¶å\87ºé\94\99:%s\n"
+msgstr "å\8f\91é\80\81æ \87å\87\86é\80\89项æ\97¶å\87ºç\8e°é\94\99误:%s\n"
 
 msgid "Options controlling the diagnostic output"
-msgstr ""
+msgstr "控制诊断输出的选项"
 
 msgid "Options controlling the configuration"
-msgstr ""
+msgstr "控制配置的选项"
 
 msgid "Options useful for debugging"
-msgstr ""
+msgstr "对调试有用的选项"
 
 msgid "Options controlling the security"
-msgstr ""
+msgstr "控制安全的选项"
 
 msgid "|N|expire SSH keys after N seconds"
-msgstr ""
+msgstr "|N|在 N 秒后使 SSH 密钥过期"
 
 msgid "|N|set maximum PIN cache lifetime to N seconds"
-msgstr ""
+msgstr "|N|设置 PIN 缓存的生命周期为 N 秒"
 
 msgid "|N|set maximum SSH key lifetime to N seconds"
-msgstr ""
+msgstr "|N|设置 SSH 缓存的生命周期为 N 秒"
 
 msgid "Options enforcing a passphrase policy"
-msgstr ""
+msgstr "选项强制要求一个密码策略"
 
 msgid "do not allow bypassing the passphrase policy"
-msgstr ""
+msgstr "不允许绕过密码的策略"
 
 msgid "|N|set minimal required length for new passphrases to N"
-msgstr ""
+msgstr "|N|设置要求新密码的最短长度为 N"
 
 msgid "|N|require at least N non-alpha characters for a new passphrase"
-msgstr ""
+msgstr "|N|要求新密码至少有 N 个非字母字符"
 
 msgid "|FILE|check new passphrases against pattern in FILE"
-msgstr ""
+msgstr "|FILE|按 FILE 中的样式检查新密码"
 
-#, fuzzy
 msgid "|N|expire the passphrase after N days"
-msgstr "从导出的子钥中删除所有密码"
+msgstr "|N|在 N 天后使密码过期"
 
-#, fuzzy
 msgid "do not allow the reuse of old passphrases"
-msgstr "生成密码的时候发生错误:%s\n"
+msgstr "不允许再次使用旧的密码"
 
 msgid "|N|set the Pinentry timeout to N seconds"
-msgstr ""
+msgstr "|N|设置 Pinentry 的超时时间为 N 秒"
 
 msgid "|NAME|use NAME as default secret key"
-msgstr ""
+msgstr "|NAME|使用 NAME 作为默认的私钥"
 
-#, fuzzy
 msgid "|NAME|encrypt to user ID NAME as well"
-msgstr "|某甲|为收件者“某甲”加密"
+msgstr "|NAME|同时给以 NAME 为名称的用户标识加密"
 
 msgid "|SPEC|set up email aliases"
-msgstr ""
+msgstr "|SPEC|设置电子邮件别名"
 
 msgid "Configuration for Keyservers"
-msgstr ""
+msgstr "公钥服务器的配置"
 
-#, fuzzy
 msgid "|URL|use keyserver at URL"
-msgstr "无法解析公钥服务器 URL\n"
+msgstr "|URL|使用 URL 处的密钥服务器"
 
 msgid "allow PKA lookups (DNS requests)"
-msgstr ""
+msgstr "允许 PKA 查询(DNS 请求)"
 
 msgid "|MECHANISMS|use MECHANISMS to locate keys by mail address"
-msgstr ""
+msgstr "|MECHANISMS|通过邮件地址定位密钥时使用机制 MECHANISMS"
 
 msgid "disable all access to the dirmngr"
-msgstr ""
+msgstr "禁用对 dirmngr 的所有访问"
 
 msgid "|NAME|use encoding NAME for PKCS#12 passphrases"
-msgstr ""
+msgstr "|NAME|对 PKCS#12 密码使用名为 NAME 的编码"
 
 msgid "do not check CRLs for root certificates"
-msgstr ""
+msgstr "不对根证书检查 CRLs"
 
 msgid "Options controlling the format of the output"
-msgstr ""
+msgstr "控制输出格式的选项"
 
 msgid "Options controlling the interactivity and enforcement"
-msgstr ""
+msgstr "控制交互性和执行的选项"
 
 msgid "Options controlling the use of Tor"
-msgstr ""
+msgstr "控制使用 Tor 的选项"
 
 msgid "Configuration for HTTP servers"
-msgstr ""
+msgstr "对 HTTP 服务器的配置"
 
 msgid "use system's HTTP proxy setting"
-msgstr ""
+msgstr "使用系统的 HTTP 代理设置"
 
 msgid "Configuration of LDAP servers to use"
-msgstr ""
+msgstr "对要使用的 LDAP 服务器的配置"
 
 msgid "LDAP server list"
-msgstr ""
+msgstr "LDAP 服务器列表"
 
 msgid "Configuration for OCSP"
-msgstr ""
+msgstr "对于 OCSP 的配置"
 
 msgid "OpenPGP"
-msgstr ""
+msgstr "OpenPGP"
 
 msgid "Private Keys"
-msgstr ""
+msgstr "私钥"
 
 msgid "Smartcards"
-msgstr ""
+msgstr "智能卡"
 
 msgid "S/MIME"
-msgstr ""
+msgstr "S/MIME"
 
-#, fuzzy
-#| msgid "network error"
 msgid "Network"
-msgstr "网络错误"
+msgstr "网络"
 
-#, fuzzy
 msgid "Passphrase Entry"
-msgstr "错误的密码"
+msgstr "密码条目"
 
-#, fuzzy
 msgid "Component not suitable for launching"
-msgstr "找不到公钥"
+msgstr "组件不适合启动"
 
 #, c-format
 msgid "External verification of component %s failed"
-msgstr ""
+msgstr "组件 %s 的外部验证失败"
 
 msgid "Note that group specifications are ignored\n"
-msgstr ""
+msgstr "注意,群组规范已被忽略\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error closing '%s'\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "关闭‘%s’时出现错误\n"
 
-#, fuzzy, c-format
-#| msgid "error in `%s': %s\n"
+#, c-format
 msgid "error parsing '%s'\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "处理‘%s’时出现错误\n"
 
 msgid "list all components"
-msgstr ""
+msgstr "列出所有组件"
 
 msgid "check all programs"
-msgstr ""
+msgstr "检查所有程序"
 
 msgid "|COMPONENT|list options"
-msgstr ""
+msgstr "|COMPONENT|列出选项"
 
 msgid "|COMPONENT|change options"
-msgstr ""
+msgstr "|COMPONENT|变更选项"
 
 msgid "|COMPONENT|check options"
-msgstr ""
+msgstr "|COMPONENT|检查选项"
 
 msgid "apply global default values"
-msgstr ""
+msgstr "应用全局默认值"
 
 msgid "|FILE|update configuration files using FILE"
-msgstr ""
+msgstr "|FILE|使用 FILE 更新配置文件"
 
 msgid "get the configuration directories for @GPGCONF@"
-msgstr ""
+msgstr "为 @GPGCONF@ 获取配置目录"
 
-#, fuzzy
 msgid "list global configuration file"
-msgstr "未知的配置项‘%s’\n"
+msgstr "列出全局配置文件"
 
-#, fuzzy
 msgid "check global configuration file"
-msgstr "æ\9cªç\9f¥ç\9a\84é\85\8d置项â\80\98%sâ\80\99\n"
+msgstr "æ£\80æ\9f¥å\85¨å±\80é\85\8dç½®æ\96\87件"
 
-#, fuzzy
-#| msgid "update the trust database"
 msgid "query the software version database"
-msgstr "æ\9b´æ\96°ä¿¡ä»»åº¦数据库"
+msgstr "æ\9f¥è¯¢è½¯ä»¶ç\89\88æ\9c¬数据库"
 
 msgid "reload all or a given component"
-msgstr ""
+msgstr "重新载入全部或者给定的组件"
 
 msgid "launch a given component"
-msgstr ""
+msgstr "启动一个给定的组件"
 
 msgid "kill a given component"
-msgstr ""
+msgstr "关闭一个给定的组件"
 
 msgid "use as output file"
 msgstr "指定输出文件"
 
 msgid "activate changes at runtime, if possible"
-msgstr ""
+msgstr "若可能,在运行时激活变更"
 
-#, fuzzy
 msgid "Usage: @GPGCONF@ [options] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:@GPGCONF@ [选项] (-h 获取帮助)"
 
 msgid ""
 "Syntax: @GPGCONF@ [options]\n"
 "Manage configuration options for tools of the @GNUPG@ system\n"
 msgstr ""
+"语法 @GPGCONF@ [选项]\n"
+"管理 @GNUPG@ 系统的工具的配置选项 \n"
 
 msgid "Need one component argument"
-msgstr ""
+msgstr "需要一个组件参数"
 
-#, fuzzy
 msgid "Component not found"
-msgstr "找不到公钥"
+msgstr "组件未找到"
 
-#, fuzzy
 msgid "No argument allowed"
-msgstr "不允许使用管理员命令\n"
+msgstr "没有参数被允许"
 
-#, fuzzy
 msgid ""
 "@\n"
 "Commands:\n"
 " "
 msgstr ""
-"@指令:\n"
+"@\n"
+"命令:\n"
 " "
 
-#, fuzzy
 msgid "decryption modus"
-msgstr "解å¯\86æ\88\90å\8a\9f\n"
+msgstr "解å¯\86模å¼\8f"
 
-#, fuzzy
 msgid "encryption modus"
-msgstr "解密成功\n"
+msgstr "加密模式"
 
+#, fuzzy
 msgid "tool class (confucius)"
-msgstr ""
+msgstr "工具类(confucius)"
 
-#, fuzzy
 msgid "program filename"
-msgstr "--store [文件名]"
+msgstr "程序文件名"
 
 msgid "secret key file (required)"
-msgstr ""
+msgstr "私钥文件(必须)"
 
 msgid "input file name (default stdin)"
-msgstr ""
+msgstr "输入文件名(默认为标准输入 stdin)"
 
-#, fuzzy
 msgid "Usage: symcryptrun [options] (-h for help)"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:symcryptrun [选项] (-h 获取帮助)"
 
 msgid ""
 "Syntax: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE "
 "[options...] COMMAND [inputfile]\n"
 "Call a simple symmetric encryption tool\n"
 msgstr ""
+"语法:symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE "
+"[options...] COMMAND [inputfile]\n"
+"调用一个简单的对称加密工具\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s on %s aborted with status %i\n"
-msgstr "%s 不可与 %s 并用\n"
+msgstr "%s 在 %s 上被取消,返回状态 %i\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s on %s failed with status %i\n"
-msgstr "‘%s’的 fstat 在 %s 中出错:%s\n"
+msgstr "%s 在 %s 上失败,返回状态 %i\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "can't create temporary directory '%s': %s\n"
-msgstr "æ\97 æ³\95建ç«\8b目录‘%s’:%s\n"
+msgstr "æ\97 æ³\95å\88\9b建临æ\97目录‘%s’:%s\n"
 
 #, c-format
 msgid "could not open %s for writing: %s\n"
-msgstr ""
+msgstr "不能为写入打开 %s :%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error writing to %s: %s\n"
-msgstr "写入钥匙环‘%s’时出错: %s\n"
+msgstr "写入 %s 时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error reading from %s: %s\n"
-msgstr "读取‘%s’时出错:%s\n"
+msgstr "读取 %s 时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "error closing %s: %s\n"
-msgstr "‘%s’中出错:%s\n"
+msgstr "关闭 %s 时出现错误:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "no --program option provided\n"
-msgstr "不支持远程调用\n"
+msgstr "未提供 --program 选项\n"
 
 #, c-format
 msgid "only --decrypt and --encrypt are supported\n"
-msgstr ""
+msgstr "只要 --decrypt 和 --encrypt 被支持\n"
 
 #, c-format
 msgid "no --keyfile option provided\n"
-msgstr ""
+msgstr "没有提供 --keyfile 选项\n"
 
 #, c-format
 msgid "cannot allocate args vector\n"
-msgstr ""
+msgstr "无法分配 args 向量\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "could not create pipe: %s\n"
-msgstr "æ\97 æ³\95建ç«\8bâ\80\98%sâ\80\99:%s\n"
+msgstr "æ\97 æ³\95å\88\9b建管é\81\93:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "could not create pty: %s\n"
-msgstr "æ\97 æ³\95建ç«\8bâ\80\98%sâ\80\99:%s\n"
+msgstr "æ\97 æ³\95å\88\9b建 pty:%s\n"
 
 #, c-format
 msgid "could not fork: %s\n"
-msgstr ""
+msgstr "无法执行 fork 方法:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "execv failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "execv 方法失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "select failed: %s\n"
-msgstr "删除密钥区块时失败:%s\n"
+msgstr "select 失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "read failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "read 失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "pty read failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "pty 读取失败:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "waitpid failed: %s\n"
-msgstr "更新失败:%s\n"
+msgstr "waitpid 方法失败:%s\n"
 
 #, c-format
 msgid "child aborted with status %i\n"
-msgstr ""
+msgstr "子进程被终止,返回状态为 %i\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "cannot allocate infile string: %s\n"
-msgstr "不能创建备份文件‘%s’:%s\n"
+msgstr "无法分配 infile 字符串:%s\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "cannot allocate outfile string: %s\n"
-msgstr "不能创建备份文件‘%s’:%s\n"
+msgstr "无法分配 outfile 字符串:%s\n"
 
 #, c-format
 msgid "either %s or %s must be given\n"
-msgstr ""
+msgstr "必须给定 %s 或 %s 中的任意一个\n"
 
 #, c-format
 msgid "no class provided\n"
-msgstr ""
+msgstr "没有给定类\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "class %s is not supported\n"
-msgstr "不支持保护散列 %d\n"
+msgstr "类 %s 不被支持\n"
 
-#, fuzzy
 msgid "Usage: gpg-check-pattern [options] patternfile (-h for help)\n"
-msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
+msgstr "用法:gpg-check-pattern [选项] patternfile (-h 获取帮助)\n"
 
 msgid ""
 "Syntax: gpg-check-pattern [options] patternfile\n"
 "Check a passphrase given on stdin against the patternfile\n"
 msgstr ""
+"语法:gpg-check-pattern [选项] patternfile\n"
+"按照 patternfile 检查一个由标准输入(stdin)给定的密码\n"
 
-#, fuzzy
-#~ msgid "error looking up: %s\n"
-#~ msgstr "‘%s’中出错:%s\n"
-
-#, fuzzy
-#~| msgid "error creating keyring `%s': %s\n"
-#~ msgid "Warning: %s appears in the keyring %d times\n"
-#~ msgstr "建立钥匙环‘%s’时发生错误:%s\n"
-
-#, fuzzy
-#~ msgid "error retrieving '%s': http status %u\n"
-#~ msgstr "读取‘%s’时出错:%s\n"
-
-#, fuzzy
-#~ msgid "npth_select failed: %s - waiting 1s\n"
-#~ msgstr "更新私钥失败:%s\n"
-
-#, fuzzy
-#~| msgid "reading public key failed: %s\n"
-#~ msgid "reading from ldap wrapper %d failed: %s\n"
-#~ msgstr "无法读出公钥:%s\n"
-
-#, fuzzy
-#~ msgid "What keysize do you want for the Signature key? (%u) "
-#~ msgstr "您想要用多大的密钥尺寸?(%u)"
-
-#, fuzzy
-#~ msgid "What keysize do you want for the Encryption key? (%u) "
-#~ msgstr "您想要用多大的密钥尺寸?(%u)"
-
-#, fuzzy
-#~ msgid "What keysize do you want for the Authentication key? (%u) "
-#~ msgstr "您想要用多大的密钥尺寸?(%u)"
-
-#, fuzzy
-#~ msgid "listen() failed: %s\n"
-#~ msgstr "更新失败:%s\n"
-
-#~ msgid "Error: URL too long (limit is %d characters).\n"
-#~ msgstr "错误:URL 太长(至多 %d 个字符)\n"
-
-#~ msgid "Error: Login data too long (limit is %d characters).\n"
-#~ msgstr "错误:登录数据太长(至多 %d 个字符)。\n"
-
-#~ msgid "Error: Private DO too long (limit is %d characters).\n"
-#~ msgstr "错误:个人 DO 太长(至多 %d 个字符)。\n"
-
-#, fuzzy
-#~| msgid "key %s: unsupported public key algorithm\n"
-#~ msgid ""
-#~ "can't check signature with unsupported public-key algorithm (%d): %s.\n"
-#~ msgstr "密钥 %s:不支持的公钥算法\n"
-
-#, fuzzy
-#~| msgid "card does not support digest algorithm %s\n"
-#~ msgid ""
-#~ "can't check signature with unsupported message-digest algorithm %d: %s.\n"
-#~ msgstr "卡不支持散列算法 %s\n"
-
-#, fuzzy
-#~ msgid " (reordered signatures follow)"
-#~ msgstr "完好的签名,来自于“%s”"
-
-#, fuzzy
-#~| msgid "skipped \"%s\": %s\n"
-#~ msgid "key %s:\n"
-#~ msgstr "“%s”已跳过:%s\n"
-
-#, fuzzy
-#~ msgid "%d duplicate signature removed\n"
-#~ msgid_plural "%d duplicate signatures removed\n"
-#~ msgstr[0] "密钥 %s:“%s”%d 个签名被清除\n"
-#~ msgstr[1] "密钥 %s:“%s”%d 个签名被清除\n"
-
-#, fuzzy
-#~ msgid "%d signature reordered\n"
-#~ msgid_plural "%d signatures reordered\n"
-#~ msgstr[0] "完好的签名,来自于“%s”"
-#~ msgstr[1] "完好的签名,来自于“%s”"
-
-#, fuzzy
-#~| msgid "new configuration file `%s' created\n"
-#~ msgid "new configuration file '%s' created\n"
-#~ msgstr "新的配置文件‘%s’已建立\n"
-
-#, fuzzy
-#~| msgid "WARNING: options in `%s' are not yet active during this run\n"
-#~ msgid "WARNING: options in '%s' are not yet active during this run\n"
-#~ msgstr "警告:在‘%s’里的选项于此次运行期间未被使用\n"
-
-#, fuzzy
-#~| msgid "Key generation failed: %s\n"
-#~ msgid "User ID revocation failed: %s\n"
-#~ msgstr "生成密钥失败:%s\n"
-
-#~ msgid "||Please enter the PIN%%0A[sigs done: %lu]"
-#~ msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
-
-#, fuzzy
-#~ msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]"
-#~ msgstr "||请输入 PIN%%0A[完成的签字:%lu]"
-
-#~ msgid "DSA requires the use of a 160 bit hash algorithm\n"
-#~ msgstr "DSA 要求使用 160 位的散列算法\n"
-
-#~ msgid "--store [filename]"
-#~ msgstr "--store [文件名]"
-
-#~ msgid "--symmetric [filename]"
-#~ msgstr "--symmetric [文件名]"
-
-#~ msgid "--encrypt [filename]"
-#~ msgstr "--encrypt [文件名]"
-
-#~ msgid "--symmetric --encrypt [filename]"
-#~ msgstr "--symmetric --encrypt [文件名]"
-
-#~ msgid "--sign [filename]"
-#~ msgstr "--sign [文件名]"
-
-#~ msgid "--sign --encrypt [filename]"
-#~ msgstr "--sign --encrypt [文件名]"
-
-#~ msgid "--symmetric --sign --encrypt [filename]"
-#~ msgstr "--symmetric --sign --encrypt [文件名]"
-
-#~ msgid "--sign --symmetric [filename]"
-#~ msgstr "--sign --symmetric [文件名]"
-
-#~ msgid "--clear-sign [filename]"
-#~ msgstr "--clear-sign [文件名]"
-
-#~ msgid "--decrypt [filename]"
-#~ msgstr "--decrypt [文件名]"
-
-#~ msgid "--sign-key user-id"
-#~ msgstr "--sign-key 用户标识"
-
-#~ msgid "--lsign-key user-id"
-#~ msgstr "--lsign-key 用户标识"
-
-#~ msgid "--edit-key user-id [commands]"
-#~ msgstr "--edit-key 用户标识 [指令]"
-
-#, fuzzy
-#~ msgid "--passwd <user-id>"
-#~ msgstr "--sign-key 用户标识"
-
-#~ msgid "[filename]"
-#~ msgstr "[文件名]"
-
-#, fuzzy
-#~ msgid "shadowing the key failed: %s\n"
-#~ msgstr "无法读出公钥:%s\n"
-
-#, fuzzy
-#~ msgid "available TOFU policies:\n"
-#~ msgstr "禁用密钥"
-
-#, fuzzy
-#~ msgid "%ld message signed"
-#~ msgid_plural "%ld messages signed"
-#~ msgstr[0] "|算法 [文件]|使用指定的散列算法打印报文散列值"
-#~ msgstr[1] "|算法 [文件]|使用指定的散列算法打印报文散列值"
-
-#, fuzzy
-#~ msgid "canceled by user\n"
-#~ msgstr "用户取消\n"
-
-#, fuzzy
-#~ msgid "problem with the agent\n"
-#~ msgstr "代理程序有问题――正在停用代理程序\n"
-
-#, fuzzy
-#~ msgid "problem with the agent (unexpected response \"%s\")\n"
-#~ msgstr "代理程序有问题――正在停用代理程序\n"
-
-#, fuzzy
-#~ msgid "unknown TOFU DB format '%s'\n"
-#~ msgstr "未知的选项 '%s'\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Please enter the passphrase to unlock the secret key for the OpenPGP "
-#~ "certificate:\n"
-#~ "\"%.*s\"\n"
-#~ "%u-bit %s key, ID %s,\n"
-#~ "created %s%s.\n"
-#~ msgstr ""
-#~ "您需要这个用户的密码来解开私钥:\n"
-#~ "“%.*s”\n"
-#~ "%u 位的 %s 密钥,钥匙号 %s,建立于 %s%s\n"
-
-#~ msgid ""
-#~ "You need a passphrase to unlock the secret key for\n"
-#~ "user: \"%s\"\n"
-#~ msgstr "您需要输入密码,才能解开这个用户的私钥:“%s”\n"
-
-#~ msgid "%u-bit %s key, ID %s, created %s"
-#~ msgstr "%u 位的 %s 密钥,钥匙号 %s,建立于 %s"
-
-#~ msgid "         (subkey on main key ID %s)"
-#~ msgstr "         (主钥 %s 的子钥)"
-
-#, fuzzy
-#~| msgid "can't create directory `%s': %s\n"
-#~ msgid "can't access directory '%s': %s\n"
-#~ msgstr "无法建立目录‘%s’:%s\n"
-
-#~ msgid "you found a bug ... (%s:%d)\n"
-#~ msgstr "您找到一个程序缺陷了……(%s:%d)\n"
-
-#, fuzzy
-#~| msgid "%d user IDs without valid self-signatures detected\n"
-#~ msgid "%d user ID without valid self-signature detected\n"
-#~ msgid_plural "%d user IDs without valid self-signatures detected\n"
-#~ msgstr[0] "检测到 %d 个没有有效自身签名的用户标识\n"
-#~ msgstr[1] "检测到 %d 个没有有效自身签名的用户标识\n"
-
-#~ msgid "moving a key signature to the correct place\n"
-#~ msgstr "正在把密钥的签名移动到正确的位置去\n"
-
-#~ msgid "%d signatures not checked due to missing keys\n"
-#~ msgstr "有 %d 份签名因为遗失密钥而未被检查\n"
-
-#~ msgid "%d signatures not checked due to errors\n"
-#~ msgstr "有 %d 份签名因为某些错误而未被检查\n"
-
-#~ msgid "1 user ID without valid self-signature detected\n"
-#~ msgstr "检测到 1 个没有有效自身签名的用户标识\n"
-
-#, fuzzy
-#~ msgid "User ID \"%s\": %d signatures removed\n"
-#~ msgstr "密钥 %s:“%s”%d 个签名被清除\n"
-
-#~ msgid ""
-#~ "You need a Passphrase to protect your secret key.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "您需要一个密码来保护您的私钥。\n"
-#~ "\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Please enter a passphrase to protect the off-card backup of the new "
-#~ "encryption key."
-#~ msgstr "请输入密码:这是一个秘密的句子 \n"
-
-#~ msgid "passphrase not correctly repeated; try again"
-#~ msgstr "密码再次输入时与首次输入不符;请再试一次"
-
-#~ msgid "%s.\n"
-#~ msgstr "%s.\n"
-
-#~ msgid ""
-#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
-#~ "I will do it anyway.  You can change your passphrase at any time,\n"
-#~ "using this program with the option \"--edit-key\".\n"
-#~ "\n"
-#~ msgstr ""
-#~ "您不想要有密码――这个想法实在是遭透了!\n"
-#~ "不过,我仍然会照您想的去做。您任何时候都可以变更您的密码,仅需要\n"
-#~ "再次执行这个程序,并且使用“--edit-key”选项即可。\n"
-#~ "\n"
-
-#~ msgid "storing key onto card failed: %s\n"
-#~ msgstr "向卡上存储密钥时失败:%s\n"
-
-#, fuzzy
-#~| msgid "1 bad signature\n"
-#~ msgid "1 good signature\n"
-#~ msgstr "1 个损坏的签名\n"
-
-#~ msgid "%lu keys cached (%lu signatures)\n"
-#~ msgstr "缓存了 %lu 把密钥(%lu 份签名)\n"
-
-#~ msgid "refreshing 1 key from %s\n"
-#~ msgstr "1 个密钥正从 %s 得到更新\n"
-
-#~ msgid "sending key %s to %s server %s\n"
-#~ msgstr "将密钥‘%s’上传到 %s 服务器 %s\n"
-
-#~ msgid "public key %s is %lu seconds newer than the signature\n"
-#~ msgstr "公钥 %s 在其签名后 %lu 秒生成\n"
-
-#~ msgid ""
-#~ "key %s was created %lu seconds in the future (time warp or clock "
-#~ "problem)\n"
-#~ msgstr "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
-
-#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-#~ msgstr "需要 %d 份勉强信任和 %d 份完全信任,%s 信任模型\n"
-
-#, fuzzy
-#~| msgid "can't open the keyring"
-#~ msgid "Failed to open the keyring DB.\n"
-#~ msgstr "无法打开钥匙环"
-
-#, fuzzy
-#~ msgid "Failed to parse '%s'.\n"
-#~ msgstr "无法打开‘%s’:%s\n"
-
-#, fuzzy
-#~| msgid "error reading secret keyblock \"%s\": %s\n"
-#~ msgid "error looking up secret key \"%s\": %s\n"
-#~ msgstr "读取私钥区块“%s”时出错:%s\n"
-
-#~ msgid "Please select at most one subkey.\n"
-#~ msgstr "请至多选择一个子钥。\n"
-
-#, fuzzy
-#~ msgid "malformed %s environment variable\n"
-#~ msgstr "GPG_AGENT_INFO 环境变量格式错误\n"
-
-#, fuzzy
-#~ msgid "dirmngr protocol version %d is not supported\n"
-#~ msgstr "不支持 gpg-agent 协议版本 %d\n"
-
-#~ msgid "toggle between the secret and public key listings"
-#~ msgstr "在私钥和公钥清单间切换"
-
-#, fuzzy
-#~ msgid "Passphrase"
-#~ msgstr "错误的密码"
-
-#~ msgid "use temporary files to pass data to keyserver helpers"
-#~ msgstr "向公钥服务器辅助程序传递数据时使用临时文件"
-
-#~ msgid "do not delete temporary files after using them"
-#~ msgstr "不删除使用过的临时文件"
-
-#, fuzzy
-#~| msgid "WARNING: keyserver option `%s' is not used on this platform\n"
-#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
-#~ msgstr "警告:公钥服务器选项‘%s’在此平台上没有被使用\n"
-
-#~ msgid "gpg-agent is not available in this session\n"
-#~ msgstr "gpg-agent 在此次舍话中无法使用\n"
-
-#, fuzzy
-#~ msgid "use a standard location for the socket"
-#~ msgstr "为所选用户标识的设定注记"
-
-#, fuzzy
-#~ msgid "Usage: gpg-agent [options] (-h for help)"
-#~ msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
-
-#~ msgid "malformed GPG_AGENT_INFO environment variable\n"
-#~ msgstr "GPG_AGENT_INFO 环境变量格式错误\n"
-
-#~ msgid "gpg-agent protocol version %d is not supported\n"
-#~ msgstr "不支持 gpg-agent 协议版本 %d\n"
-
-#, fuzzy
-#~ msgid "can't fdopen pipe for reading: %s\n"
-#~ msgstr "无法打开有签名的数据‘%s’\n"
-
-#, fuzzy
-#~ msgid "error creating socket: %s\n"
-#~ msgstr "建立‘%s’时发生错误:%s\n"
-
-#, fuzzy
-#~ msgid "host not found"
-#~ msgstr "[找不到用户标识]"
-
-#~ msgid "unknown key protection algorithm\n"
-#~ msgstr "不支持的密钥保护算法\n"
-
-#~ msgid "secret parts of key are not available\n"
-#~ msgstr "私钥部分不可用\n"
-
-#~ msgid "secret key already stored on a card\n"
-#~ msgstr "私钥已存储在卡上\n"
-
-#, fuzzy
-#~ msgid "error writing key to card: %s\n"
-#~ msgstr "写入钥匙环‘%s’时出错: %s\n"
-
-#~ msgid ""
-#~ "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-#~ msgstr "在 --pgp2 模式中,您只能使用 2048 位及以下的 RSA 密钥加密\n"
-
-#~ msgid ""
-#~ "unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-#~ msgstr "您正要用来加密的所有密钥都不能使用 IDEA 算法。\n"
-
-#~ msgid "remove the passphrase from exported subkeys"
-#~ msgstr "从导出的子钥中删除所有密码"
-
-#~ msgid "key %s: not protected - skipped\n"
-#~ msgstr "密钥 %s:未被保护――已跳过\n"
-
-#~ msgid "about to export an unprotected subkey\n"
-#~ msgstr "准备导出一把不受保护的子钥\n"
-
-#~ msgid "failed to unprotect the subkey: %s\n"
-#~ msgstr "无法取消保护子钥:%s\n"
-
-#  I hope this warning doesn't confuse people.
-#~ msgid "WARNING: secret key %s does not have a simple SK checksum\n"
-#~ msgstr "警告:私钥 %s 不存在简单 SK 检验和\n"
-
-#~ msgid "too many entries in pk cache - disabled\n"
-#~ msgstr "pk 缓存里项目太多――已禁用\n"
-
-#~ msgid "no secret subkey for public subkey %s - ignoring\n"
-#~ msgstr "公钥 %s 没有相对应的私钥――忽略\n"
-
-#~ msgid "key %s: secret key without public key - skipped\n"
-#~ msgstr "密钥 %s:无相应公钥的私钥――已跳过\n"
-
-#~ msgid "usage: gpg [options] "
-#~ msgstr "用法:gpg [选项] "
-
-#~ msgid ""
-#~ "you can only make detached or clear signatures while in --pgp2 mode\n"
-#~ msgstr "您只有在 --pgp2 模式下才能做分离式或明文签名\n"
-
-#~ msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-#~ msgstr "您在 --pgp2 模式下时,不能同时签名和加密\n"
-
-#~ msgid ""
-#~ "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-#~ msgstr "启用 --pgp2 时您应该只使用文件,而非管道\n"
-
-#~ msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-#~ msgstr "在 --pgp2 模式下加密报文需要 IDEA 算法\n"
-
-#~ msgid "create a public key when importing a secret key"
-#~ msgstr "导入私钥时创建对应的公钥"
-
-#~ msgid "key %s: already in secret keyring\n"
-#~ msgstr "密钥 %s:已在私钥钥匙环中\n"
-
-#~ msgid "key %s: secret key not found: %s\n"
-#~ msgstr "密钥 %s:找不到私钥:%s\n"
-
-#~ msgid "NOTE: a key's S/N does not match the card's one\n"
-#~ msgstr "注意:密钥的序列号与卡的不符\n"
-
-#~ msgid "NOTE: primary key is online and stored on card\n"
-#~ msgstr "注意:主钥在线,存储在卡上\n"
-
-#~ msgid "NOTE: secondary key is online and stored on card\n"
-#~ msgstr "注意:子钥在线,存储在卡上\n"
-
-#~ msgid ""
-#~ "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-#~ "mode.\n"
-#~ msgstr "您不能在 --pgp2 模式下,用 PGP 2.x 密钥生成 OpenPGP 签名。\n"
-
-#~ msgid "This would make the key unusable in PGP 2.x.\n"
-#~ msgstr "这会让这把密钥在 PGP 2.x 模式下不可使用。\n"
-
-#~ msgid "This key is not protected.\n"
-#~ msgstr "这把密钥没有被保护。\n"
-
-#~ msgid "Key is protected.\n"
-#~ msgstr "密钥受保护。\n"
-
-#~ msgid "Can't edit this key: %s\n"
-#~ msgstr "无法编辑这把密钥: %s\n"
-
-#~ msgid ""
-#~ "Enter the new passphrase for this secret key.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "输入要给这把私钥用的新密码。\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "您不想要用密码――这大概是个坏主意!\n"
-#~ "\n"
-
-#~ msgid "Do you really want to do this? (y/N) "
-#~ msgstr "您真的想要这么做吗?(y/N)"
-
-#~ msgid "Please remove selections from the secret keys.\n"
-#~ msgstr "请从私钥中删除选择。\n"
-
-#~ msgid "No corresponding signature in secret ring\n"
-#~ msgstr "在私钥环里没有相应的签名\n"
-
-#~ msgid "writing secret key stub to `%s'\n"
-#~ msgstr "向‘%s’写入私钥占位符\n"
-
-#~ msgid "writing secret key to `%s'\n"
-#~ msgstr "正在将私钥写至`%s'\n"
-
-#~ msgid "no writable secret keyring found: %s\n"
-#~ msgstr "找不到可写的私钥钥匙环:%s\n"
-
-#~ msgid "WARNING: 2 files with confidential information exists.\n"
-#~ msgstr "警告:两个文件存在有互相矛盾的信息。\n"
-
-#~ msgid "%s is the unchanged one\n"
-#~ msgstr "%s 是没有改变的那一个\n"
-
-#~ msgid "%s is the new one\n"
-#~ msgstr "%s 是新的那一个\n"
-
-#~ msgid "Please fix this possible security flaw\n"
-#~ msgstr "请修补这个可能的安全性漏洞\n"
-
-#~ msgid "searching for names from %s server %s\n"
-#~ msgstr "在 %s 服务器 %s 上搜索名字\n"
-
-#~ msgid "searching for names from %s\n"
-#~ msgstr "在 %s 上搜索名字\n"
-
-#~ msgid "searching for \"%s\" from %s server %s\n"
-#~ msgstr "搜索“%s”,在 %s 服务器 %s 上\n"
-
-#~ msgid "searching for \"%s\" from %s\n"
-#~ msgstr "搜索“%s”,在 %s 上\n"
-
-#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
-#~ msgstr "警告:处理公钥服务器的程序来自不同版本的 GnuPG (%s)\n"
-
-#~ msgid "keyserver did not send VERSION\n"
-#~ msgstr "公钥服务器未发送 VERSION\n"
-
-#~ msgid "external keyserver calls are not supported in this build\n"
-#~ msgstr "这一编译版本不支持外部调用公钥服务器\n"
-
-#~ msgid "no handler for keyserver scheme `%s'\n"
-#~ msgstr "没有处理‘%s’公钥服务器的程序\n"
-
-#~ msgid "action `%s' not supported with keyserver scheme `%s'\n"
-#~ msgstr "‘%s’操作不为‘%s’公钥服务器所支持\n"
-
-#~ msgid "%s does not support handler version %d\n"
-#~ msgstr "%s 不支持对版本 %d 的处理\n"
-
-#~ msgid "keyserver timed out\n"
-#~ msgstr "公钥服务器超时\n"
-
-#~ msgid "keyserver internal error\n"
-#~ msgstr "公钥服务器内部错误\n"
-
-#~ msgid "keyserver communications error: %s\n"
-#~ msgstr "公钥服务器通讯错误:%s\n"
-
-#~ msgid "WARNING: unable to parse URI %s\n"
-#~ msgstr "不能解析 URI %s\n"
-
-#~ msgid "invalid root packet detected in proc_tree()\n"
-#~ msgstr "在 proc_tree() 中检测到无效的根包\n"
-
-#~ msgid "the IDEA cipher plugin is not present\n"
-#~ msgstr "IDEA 算法插件不存在\n"
-
-#~ msgid "no corresponding public key: %s\n"
-#~ msgstr "没有相对应的公钥:%s\n"
-
-#~ msgid "public key does not match secret key!\n"
-#~ msgstr "公钥与私钥不吻合!\n"
-
-#~ msgid "unknown protection algorithm\n"
-#~ msgstr "未知的保护算法\n"
-
-#~ msgid "NOTE: This key is not protected!\n"
-#~ msgstr "注意:这把密钥没有被保护!\n"
-
-#~ msgid "protection digest %d is not supported\n"
-#~ msgstr "不支持保护散列 %d\n"
-
-#~ msgid "Invalid passphrase; please try again"
-#~ msgstr "无效的密码;请再试一次"
-
-#~ msgid "%s ...\n"
-#~ msgstr "%s……\n"
-
-#~ msgid "WARNING: Weak key detected - please change passphrase again.\n"
-#~ msgstr "警告:检测到弱密钥――请更换密码。\n"
-
-#~ msgid ""
-#~ "generating the deprecated 16-bit checksum for secret key protection\n"
-#~ msgstr "正在产生私钥保护使用的旧式 16 位校验和\n"
-
-#~ msgid "DSA key %s uses an unsafe (%u bit) hash\n"
-#~ msgstr "DSA 密钥 %s 使用不安全的(%u 位)的散列\n"
-
-#~ msgid ""
-#~ "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-#~ msgstr "您在 --pgp2 模式下只能够使用 PGP 2.x 样式的密钥来做分离签名\n"
-
-#~ msgid ""
-#~ "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-#~ msgstr "您在 --pgp2 模式下只能够使用 PGP 2.x 样式的密钥来做明文签名\n"
-
-#, fuzzy
-#~ msgid "Usage: scdaemon [options] (-h for help)"
-#~ msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
-
-#, fuzzy
-#~ msgid "Usage: gpgsm [options] [files] (-h for help)"
-#~ msgstr "用法: gpg [选项] [文件] (用 -h 求助)"
-
-#, fuzzy
-#~ msgid "usage: gpgconf [options] "
-#~ msgstr "用法:gpg [选项] "
-
-#, fuzzy
-#~ msgid "failed to allocated keyDB handle\n"
-#~ msgstr "无法存储密钥:%s\n"
-
-#~ msgid "Command> "
-#~ msgstr "命令> "
-
-#~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-#~ msgstr "信任度数据库已损坏;请执行“gpg --fix-trustdb”。\n"
-
-#, fuzzy
-#~ msgid "Please report bugs to <"
-#~ msgstr ""
-#~ "请向 <gnupg-bugs@gnu.org> 报告程序缺陷。\n"
-#~ "请向 <zuxyhere@eastday.com> 反映简体中文翻译的问题。\n"
-
-#, fuzzy
-#~ msgid "Please report bugs to "
-#~ msgstr ""
-#~ "请向 <gnupg-bugs@gnu.org> 报告程序缺陷。\n"
-#~ "请向 <zuxyhere@eastday.com> 反映简体中文翻译的问题。\n"
-
-#~ msgid "DSA keypair will have %u bits.\n"
-#~ msgstr "DSA 密钥对会有 %u 位。\n"
-
-#~ msgid "Repeat passphrase\n"
-#~ msgstr "请再输入一次密码\n"
-
-#~ msgid "|A|Admin PIN"
-#~ msgstr "|A|管理员 PIN"
-
-#, fuzzy
-#~ msgid "read options from file"
-#~ msgstr "从‘%s’读取选项\n"
-
-#~ msgid "generate PGP 2.x compatible messages"
-#~ msgstr "生成与 PGP 2.x 兼容的报文"
-
-#, fuzzy
-#~ msgid "|[FILE]|make a signature"
-#~ msgstr "|[文件名]|生成一份签名"
-
-#, fuzzy
-#~ msgid "|[FILE]|make a clear text signature"
-#~ msgstr "|[文件名]|生成一份明文签名"
-
-#, fuzzy
-#~ msgid "use the default key as default recipient"
-#~ msgstr "已跳过:公钥已被设为默认收件者\n"
-
-#, fuzzy
-#~ msgid "force v3 signatures"
-#~ msgstr "检查签名"
-
-#, fuzzy
-#~ msgid "add this secret keyring to the list"
-#~ msgstr "要有私钥才能这么做。\n"
-
-#, fuzzy
-#~ msgid "|N|use compress algorithm N"
-#~ msgstr "未知的压缩算法"
-
-#, fuzzy
-#~ msgid "remove key from the public keyring"
-#~ msgstr "从公钥钥匙环里删除密钥"
-
-#~ msgid ""
-#~ "It's up to you to assign a value here; this value will never be exported\n"
-#~ "to any 3rd party.  We need it to implement the web-of-trust; it has "
-#~ "nothing\n"
-#~ "to do with the (implicitly created) web-of-certificates."
-#~ msgstr ""
-#~ "在这里指定的数值完全由您自己决定;这些数值永远不会被输出给任何第三方。\n"
-#~ "我们需要它来实现“信任网络”;这跟隐含建立起来的“验证网络”无关。"
-
-#~ msgid ""
-#~ "To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-#~ "ultimately trusted - those are usually the keys for which you have\n"
-#~ "access to the secret key.  Answer \"yes\" to set this key to\n"
-#~ "ultimately trusted\n"
-#~ msgstr ""
-#~ "要建立起信任网络,GnuPG 需要知道哪些密钥是可绝对信任的――通常\n"
-#~ "就是您拥有私钥的那些密钥。回答“yes”将此密钥设成可绝对信任的\n"
-
-#~ msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-#~ msgstr "如果您无论如何要使用这把未被信任的密钥,请回答“yes”。"
-
-#~ msgid ""
-#~ "Enter the user ID of the addressee to whom you want to send the message."
-#~ msgstr "输入您要递送的报文的接收者的用户标识。"
-
-#~ msgid ""
-#~ "Select the algorithm to use.\n"
-#~ "\n"
-#~ "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n"
-#~ "for signatures.\n"
-#~ "\n"
-#~ "Elgamal is an encrypt-only algorithm.\n"
-#~ "\n"
-#~ "RSA may be used for signatures or encryption.\n"
-#~ "\n"
-#~ "The first (primary) key must always be a key which is capable of signing."
-#~ msgstr ""
-#~ "选择使用的算法。\n"
-#~ "\n"
-#~ "DSA (也叫 DSS)即“数字签名算法”(美国国家标准),只能够用作签名。\n"
-#~ "\n"
-#~ "Elgamal 是一种只能用作加密的算法。\n"
-#~ "\n"
-#~ "RSA 可以用作签名或加密。\n"
-#~ "\n"
-#~ "第一把密钥(主钥)必须具有签名的能力。"
-
-#~ msgid ""
-#~ "In general it is not a good idea to use the same key for signing and\n"
-#~ "encryption.  This algorithm should only be used in certain domains.\n"
-#~ "Please consult your security expert first."
-#~ msgstr ""
-#~ "通常来说用同一把密钥签名及加密并不是个好主意。这个算法只在特定的情况\n"
-#~ "下使用。请先咨询安全方面的专家。"
-
-#~ msgid "Enter the size of the key"
-#~ msgstr "请输入密钥的尺寸"
-
-#~ msgid "Answer \"yes\" or \"no\""
-#~ msgstr "请回答“yes”或“no”"
-
-#~ msgid ""
-#~ "Enter the required value as shown in the prompt.\n"
-#~ "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-#~ "get a good error response - instead the system tries to interpret\n"
-#~ "the given value as an interval."
-#~ msgstr ""
-#~ "请输入提示所要求的数值。\n"
-#~ "您可以输入 ISO 日期格式(YYYY-MM-DD),但是出错时您不会得到友好的响应\n"
-#~ "――系统会尝试将给定值解释为时间间隔。"
-
-#~ msgid "Enter the name of the key holder"
-#~ msgstr "请输入密钥持有人的名字"
-
-#~ msgid "please enter an optional but highly suggested email address"
-#~ msgstr "请输入电子邮件地址(可选项,但强烈推荐使用)"
-
-#~ msgid "Please enter an optional comment"
-#~ msgstr "请输入注释(可选项)"
-
-#~ msgid ""
-#~ "N  to change the name.\n"
-#~ "C  to change the comment.\n"
-#~ "E  to change the email address.\n"
-#~ "O  to continue with key generation.\n"
-#~ "Q  to to quit the key generation."
-#~ msgstr ""
-#~ "N  修改姓名。\n"
-#~ "C  修改注释。\n"
-#~ "E  修改电子邮件地址。\n"
-#~ "O  继续产生密钥。\n"
-#~ "Q  中止产生密钥。"
-
-#~ msgid ""
-#~ "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-#~ msgstr "如果您允许生成子钥,请回答“yes”(或者“y”)。"
-
-#~ msgid ""
-#~ "When you sign a user ID on a key, you should first verify that the key\n"
-#~ "belongs to the person named in the user ID.  It is useful for others to\n"
-#~ "know how carefully you verified this.\n"
-#~ "\n"
-#~ "\"0\" means you make no particular claim as to how carefully you verified "
-#~ "the\n"
-#~ "    key.\n"
-#~ "\n"
-#~ "\"1\" means you believe the key is owned by the person who claims to own "
-#~ "it\n"
-#~ "    but you could not, or did not verify the key at all.  This is useful "
-#~ "for\n"
-#~ "    a \"persona\" verification, where you sign the key of a pseudonymous "
-#~ "user.\n"
-#~ "\n"
-#~ "\"2\" means you did casual verification of the key.  For example, this "
-#~ "could\n"
-#~ "    mean that you verified the key fingerprint and checked the user ID on "
-#~ "the\n"
-#~ "    key against a photo ID.\n"
-#~ "\n"
-#~ "\"3\" means you did extensive verification of the key.  For example, this "
-#~ "could\n"
-#~ "    mean that you verified the key fingerprint with the owner of the key "
-#~ "in\n"
-#~ "    person, and that you checked, by means of a hard to forge document "
-#~ "with a\n"
-#~ "    photo ID (such as a passport) that the name of the key owner matches "
-#~ "the\n"
-#~ "    name in the user ID on the key, and finally that you verified (by "
-#~ "exchange\n"
-#~ "    of email) that the email address on the key belongs to the key "
-#~ "owner.\n"
-#~ "\n"
-#~ "Note that the examples given above for levels 2 and 3 are *only* "
-#~ "examples.\n"
-#~ "In the end, it is up to you to decide just what \"casual\" and \"extensive"
-#~ "\"\n"
-#~ "mean to you when you sign other keys.\n"
-#~ "\n"
-#~ "If you don't know what the right answer is, answer \"0\"."
-#~ msgstr ""
-#~ "当您为某把密钥上某个用户标识添加签名时,您必须首先验证这把密钥确实属于\n"
-#~ "署名于它的用户标识上的那个人。了解到您曾多么谨慎地对此进行过验证,对其\n"
-#~ "他人是非常有用的\n"
-#~ "\n"
-#~ "“0” 表示您对您有多么仔细地验证这把密钥的问题不表态。\n"
-#~ "\n"
-#~ "“1” 表示您相信这把密钥属于那个声明是主人的人,但是您不能或根本没有验\n"
-#~ "      证过。如果您为一把属于类似虚拟人物的密钥签名,这个选择很有用。\n"
-#~ "\n"
-#~ "“2” 表示您随意地验证了那把密钥。例如,您验证了这把密钥的指纹,或比对\n"
-#~ "      照片验证了用户标识。\n"
-#~ "\n"
-#~ "“3” 表示您做了大量而详尽的验证密钥工作。例如,您同密钥持有人验证了密\n"
-#~ "      钥指纹,而且通过查验附带照片而难以伪造的证件(如护照)确认了密钥持\n"
-#~ "      有人的姓名与密钥上的用户标识一致,最后您还(通过电子邮件往来)验证\n"
-#~ "      了密钥上的电子邮件地址确实属于密钥持有人。\n"
-#~ "\n"
-#~ "请注意上述关于验证级别 2 和 3 的说明仅是例子而已。最终还是由您自己决定\n"
-#~ "当您为其他密钥签名时,什么是“随意”,而什么是“大量而详尽”。\n"
-#~ "\n"
-#~ "如果您不知道应该选什么答案的话,就选“0”。"
-
-#~ msgid "Answer \"yes\" if you want to sign ALL the user IDs"
-#~ msgstr "如果您想要为所有用户标识签名的话就选“yes”"
-
-#~ msgid ""
-#~ "Answer \"yes\" if you really want to delete this user ID.\n"
-#~ "All certificates are then also lost!"
-#~ msgstr ""
-#~ "如果您真的想要删除这个用户标识的话就回答“yes”。\n"
-#~ "所有相关认证在此之后也会丢失!"
-
-#~ msgid "Answer \"yes\" if it is okay to delete the subkey"
-#~ msgstr "如果可以删除这把子钥,请回答“yes”"
-
-#~ msgid ""
-#~ "This is a valid signature on the key; you normally don't want\n"
-#~ "to delete this signature because it may be important to establish a\n"
-#~ "trust connection to the key or another key certified by this key."
-#~ msgstr ""
-#~ "这是一份在这把密钥上有效的签名;通常您不会想要删除这份签名,\n"
-#~ "因为要与这把密钥或拥有这把密钥的签名的密钥建立认证关系可能\n"
-#~ "相当重要。"
-
-#~ msgid ""
-#~ "This signature can't be checked because you don't have the\n"
-#~ "corresponding key.  You should postpone its deletion until you\n"
-#~ "know which key was used because this signing key might establish\n"
-#~ "a trust connection through another already certified key."
-#~ msgstr ""
-#~ "这份签名无法被检验,因为您没有相应的密钥。您应该暂缓删除它,\n"
-#~ "直到您知道此签名使用了哪一把密钥;因为用来签名的密钥可能与\n"
-#~ "其他已经验证的密钥存在信任关系。"
-
-#~ msgid ""
-#~ "The signature is not valid.  It does make sense to remove it from\n"
-#~ "your keyring."
-#~ msgstr "这份签名无效。应当把它从您的钥匙环里删除。"
-
-#~ msgid ""
-#~ "This is a signature which binds the user ID to the key. It is\n"
-#~ "usually not a good idea to remove such a signature.  Actually\n"
-#~ "GnuPG might not be able to use this key anymore.  So do this\n"
-#~ "only if this self-signature is for some reason not valid and\n"
-#~ "a second one is available."
-#~ msgstr ""
-#~ "这是一份将密钥与用户标识相联系的签名。通常不应删除这样的签名。\n"
-#~ "事实上,一旦删除,GnuPG可能从此就不能再使用这把密钥了。因此,\n"
-#~ "只有在这把密钥的第一个自身签名因某些原因失效,而有第二个自身签\n"
-#~ "字可用的情况下才这么做。"
-
-#~ msgid ""
-#~ "Change the preferences of all user IDs (or just of the selected ones)\n"
-#~ "to the current list of preferences.  The timestamp of all affected\n"
-#~ "self-signatures will be advanced by one second.\n"
-#~ msgstr ""
-#~ "用现有的首选项更新所有(或选定的)用户标识的首选项。所有受影响的自身签\n"
-#~ "字的时间戳都会增加一秒钟。\n"
-
-#~ msgid "Please enter the passphrase; this is a secret sentence \n"
-#~ msgstr "请输入密码:这是一个秘密的句子 \n"
-
-#~ msgid ""
-#~ "Please repeat the last passphrase, so you are sure what you typed in."
-#~ msgstr "请再次输入上次的密码,以确定您到底键入了些什么。"
-
-#~ msgid "Give the name of the file to which the signature applies"
-#~ msgstr "请给定要添加签名的文件名"
-
-#~ msgid "Answer \"yes\" if it is okay to overwrite the file"
-#~ msgstr "如果可以覆盖这个文件,请回答“yes”"
-
-#~ msgid ""
-#~ "Please enter a new filename. If you just hit RETURN the default\n"
-#~ "file (which is shown in brackets) will be used."
-#~ msgstr ""
-#~ "请输入一个新的文件名。如果您直接按下了回车,那么就会使用显示在括\n"
-#~ "号中的默认的文件名。"
-
-#~ msgid ""
-#~ "You should specify a reason for the certification.  Depending on the\n"
-#~ "context you have the ability to choose from this list:\n"
-#~ "  \"Key has been compromised\"\n"
-#~ "      Use this if you have a reason to believe that unauthorized persons\n"
-#~ "      got access to your secret key.\n"
-#~ "  \"Key is superseded\"\n"
-#~ "      Use this if you have replaced this key with a newer one.\n"
-#~ "  \"Key is no longer used\"\n"
-#~ "      Use this if you have retired this key.\n"
-#~ "  \"User ID is no longer valid\"\n"
-#~ "      Use this to state that the user ID should not longer be used;\n"
-#~ "      this is normally used to mark an email address invalid.\n"
-#~ msgstr ""
-#~ "您应该为这份吊销证书指定一个原因。根据情境的不同,您可以从下列清单中\n"
-#~ "选出一项:\n"
-#~ "  “密钥已泄漏”\n"
-#~ "      如果您相信有某个未经许可的人已取得了您的私钥,请选此项。\n"
-#~ "  “密钥已替换”\n"
-#~ "      如果您已用一把新密钥代替旧的,请选此项。\n"
-#~ "  “密钥不再被使用”\n"
-#~ "      如果您已决定让这把密钥退休,请选此项\n"
-#~ "  “用户标识不再有效”\n"
-#~ "      如果这个用户标识不再被使用了,请选此项;这通常用表明某个电子邮\n"
-#~ "      件地址已不再有效。\n"
-
-#~ msgid ""
-#~ "If you like, you can enter a text describing why you issue this\n"
-#~ "revocation certificate.  Please keep this text concise.\n"
-#~ "An empty line ends the text.\n"
-#~ msgstr ""
-#~ "您也可以输入一串文字,描述发布这份吊销证书的理由。请尽量使这段文\n"
-#~ "字简明扼要。\n"
-#~ "键入一空行以结束输入。\n"
-
-#~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n"
-#~ msgstr "无法在 v3 (PGP 2.x样式)的签名内放入注记数据\n"
-
-#~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n"
-#~ msgstr "无法在 v3 (PGP 2.x样式)的密钥签名内放入注记数据\n"
-
-#~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n"
-#~ msgstr "无法在 v3 (PGP 2.x样式)的签名内放入策略 URL\n"
-
-#~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n"
-#~ msgstr "无法在 v3 (PGP 2.x样式)的密钥签名内放入策略 URL\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "please see http://www.gnupg.org/download/iconv.html for more information\n"
-#~ msgstr "请访问 http://www.gnupg.org/faq.html 以获得更详细的信息\n"
-
-#, fuzzy
-#~ msgid "key generation is not available from the commandline\n"
-#~ msgstr "gpg-agent 在此次舍话中无法使用\n"
-
-#, fuzzy
-#~ msgid "please use the script \"%s\" to generate a new key\n"
-#~ msgstr "请选择您要使用的密钥种类:\n"
-
-#~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n"
-#~ msgstr "对称加算密法扩展模块‘%s’因为权限不安全而未被载入\n"
-
-#, fuzzy
-#~ msgid ".\n"
-#~ msgstr "%s.\n"
-
-#~ msgid "problem with the agent - disabling agent use\n"
-#~ msgstr "代理程序有问题――正在停用代理程序\n"
-
-#~ msgid "can't query passphrase in batch mode\n"
-#~ msgstr "在批处理模式中无法查询密码\n"
-
-#~ msgid "Repeat passphrase: "
-#~ msgstr "请再输入一次密码:"
-
-#~ msgid "-k[v][v][v][c] [user-id] [keyring]"
-#~ msgstr "-k[v][v][v][c] [用户标识] [钥匙环]"
-
-#~ msgid "can't gen prime with pbits=%u qbits=%u\n"
-#~ msgstr "当 pbits=%u 而 qbits=%u 时不能生成质数\n"
-
-#~ msgid "can't generate a prime with less than %d bits\n"
-#~ msgstr "少于 %d 位时不能生成质数\n"
-
-#~ msgid "no entropy gathering module detected\n"
-#~ msgstr "检测不到熵搜集模块\n"
-
-#~ msgid "can't lock `%s': %s\n"
-#~ msgstr "无法锁定‘%s’:%s\n"
-
-#~ msgid "`%s' is not a regular file - ignored\n"
-#~ msgstr "‘%s’不是一个普通文件――已忽略\n"
-
-#~ msgid "note: random_seed file is empty\n"
-#~ msgstr "注意:随机数种子文件为空\n"
-
-#~ msgid "can't read `%s': %s\n"
-#~ msgstr "无法读取‘%s’:%s\n"
-
-#~ msgid "note: random_seed file not updated\n"
-#~ msgstr "注意:随机数种子文件未被更新\n"
-
-#~ msgid "can't write `%s': %s\n"
-#~ msgstr "无法写入‘%s’:%s\n"
-
-#~ msgid "can't close `%s': %s\n"
-#~ msgstr "无法关闭‘%s’:%s\n"
-
-#~ msgid "WARNING: using insecure random number generator!!\n"
-#~ msgstr "警告:正在使用不安全的随机数发生器!!\n"
-
-#~ msgid ""
-#~ "The random number generator is only a kludge to let\n"
-#~ "it run - it is in no way a strong RNG!\n"
-#~ "\n"
-#~ "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "使用这个随机数字发生器纯粹是为了使程序编译通过──它\n"
-#~ "根本就不是真正意义上的强随机数发生器!\n"
-#~ "\n"
-#~ "绝对不要在现实世界中使用这个程序产生的任何数据!!\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Please wait, entropy is being gathered. Do some work if it would\n"
-#~ "keep you from getting bored, because it will improve the quality\n"
-#~ "of the entropy.\n"
-#~ msgstr ""
-#~ "请稍待片刻,系统此时正在搜集熵。如果您觉得无聊的话,不妨做些\n"
-#~ "别的事——事实上这甚至能够让熵数的品质更好。\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Not enough random bytes available.  Please do some other work to give\n"
-#~ "the OS a chance to collect more entropy! (Need %d more bytes)\n"
-#~ msgstr ""
-#~ "\n"
-#~ "随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!\n"
-#~ "(还需要%d字节)\n"
-
-#, fuzzy
-#~ msgid "card reader not available\n"
-#~ msgstr "私钥不可用"
-
-#~ msgid "Please insert the card and hit return or enter 'c' to cancel: "
-#~ msgstr "请插入卡并回车,或输入‘c’来取消:"
-
-#~ msgid "Hit return when ready or enter 'c' to cancel: "
-#~ msgstr "就绪后请回车,或输入‘c’取消"
-
-#~ msgid "Enter New Admin PIN: "
-#~ msgstr "输入新的管理员 PIN:"
-
-#~ msgid "Enter New PIN: "
-#~ msgstr "输入新的 PIN:"
-
-#~ msgid "Enter Admin PIN: "
-#~ msgstr "输入管理员 PIN:"
-
-#~ msgid "NOTE: %s is not available in this version\n"
-#~ msgstr "注意:%s 本版本中不可用\n"
-
-#, fuzzy
-#~ msgid "         algorithms on these user IDs:\n"
-#~ msgstr "      新用户标识:%lu\n"
-
-#~ msgid "no photo viewer set\n"
-#~ msgstr "没有设置照片查看程序\n"
-
-#~ msgid "general error"
-#~ msgstr "常规错误"
-
-#~ msgid "unknown packet type"
-#~ msgstr "未知的包类型"
-
-#~ msgid "unknown digest algorithm"
-#~ msgstr "未知的散列算法"
-
-#~ msgid "bad public key"
-#~ msgstr "公钥已经损坏"
-
-#~ msgid "bad secret key"
-#~ msgstr "私钥已经损坏"
-
-#~ msgid "bad signature"
-#~ msgstr "签名已经损坏"
-
-#~ msgid "checksum error"
-#~ msgstr "校验和错误"
-
-#~ msgid "invalid packet"
-#~ msgstr "无效包"
-
-#~ msgid "no such user id"
-#~ msgstr "没有这个用户标识"
-
-#~ msgid "secret key not available"
-#~ msgstr "私钥不可用"
-
-#~ msgid "wrong secret key used"
-#~ msgstr "使用了错误的私钥"
-
-#~ msgid "file write error"
-#~ msgstr "文件写入错误"
-
-#~ msgid "file open error"
-#~ msgstr "文件打开错误"
-
-#~ msgid "file create error"
-#~ msgstr "文件建立错误"
-
-#~ msgid "unimplemented pubkey algorithm"
-#~ msgstr "未实现的公钥算法"
-
-#~ msgid "unimplemented cipher algorithm"
-#~ msgstr "未实现的对称加密算法"
-
-#~ msgid "unknown signature class"
-#~ msgstr "未知的签名等级"
-
-#~ msgid "trust database error"
-#~ msgstr "信任度数据库错误"
-
-#~ msgid "resource limit"
-#~ msgstr "资源限制"
+#~ msgid "Push ACK button on card/token."
+#~ msgstr "按下 card/token 上的 ACK 按钮。"
 
-#~ msgid "invalid keyring"
-#~ msgstr "无效的钥匙环"
+#~ msgid "waiting for the dirmngr to come up ... (%ds)\n"
+#~ msgstr "等待 dirmngr 启动 ... (%ds)\n"
 
-#~ msgid "malformed user id"
-#~ msgstr "被变造过的用户标识"
+#~ msgid "connection to the dirmngr established\n"
+#~ msgstr "与 dirmngr 的连接已建立\n"
 
-#~ msgid "file close error"
-#~ msgstr "文件关闭错误"
+#~ msgid "Mr."
+#~ msgstr "先生"
 
-#~ msgid "file rename error"
-#~ msgstr "文件重命名错误"
+#~ msgid "Mrs."
+#~ msgstr "女士"
 
-#~ msgid "file delete error"
-#~ msgstr "文件删除错误"
+#~ msgid "Salutation (M = Mr., F = Mrs., or space): "
+#~ msgstr "称呼(M = 先生,F = 女士,或者留空): "
 
-#~ msgid "unexpected data"
-#~ msgstr "非预期的数据"
+#~ msgid "error for setup UIF: %s\n"
+#~ msgstr "设置 KDF 时出现错误: %s\n"
 
-#~ msgid "timestamp conflict"
-#~ msgstr "时间戳冲突"
+#~ msgid "change card holder's salutation"
+#~ msgstr "变更卡片持有人的称呼"
 
-#~ msgid "unusable pubkey algorithm"
-#~ msgstr "无法使用的公钥算法"
+#~ msgid "change the User Interaction Flag"
+#~ msgstr "变更用户交互选项"
 
-#~ msgid "file exists"
-#~ msgstr "文件已存在"
+#~ msgid "Do not export user id or attribute packets"
+#~ msgstr "不要导出用户标识或者属性包"
 
-#~ msgid "weak key"
-#~ msgstr "弱密钥"
+#~ msgid "selected AEAD algorithm is invalid\n"
+#~ msgstr "所选择的 AEAD 算法无效\n"
 
-#~ msgid "bad URI"
-#~ msgstr "URI 已损坏"
+#~ msgid "invalid personal AEAD preferences\n"
+#~ msgstr "无效的个人 AEAD 偏好设置\n"
 
-#~ msgid "not processed"
-#~ msgstr "未被处理"
+#~ msgid "chunk size invalid - using %d\n"
+#~ msgstr "块大小无效 - 使用 %d\n"
 
-#~ msgid "unusable public key"
-#~ msgstr "不可用的公钥"
+#~ msgid "AEAD algorithm '%s' may not be used in %s mode\n"
+#~ msgstr "AEAD 算法‘%s’不能在 %s 模式下使用\n"
 
-#~ msgid "keyserver error"
-#~ msgstr "公钥服务器错误"
+#~ msgid "Do not import user id or attribute packets"
+#~ msgstr "不要导入用户标识或者属性包"
 
-#~ msgid "no card"
-#~ msgstr "没有卡"
+#~ msgid "         \"%s\": preference for AEAD algorithm %s\n"
+#~ msgstr "         \"%s\":关于 AEAD 算法 %s 的偏好设置\n"
 
-#~ msgid "no data"
-#~ msgstr "无数据"
+#~ msgid "AEAD: "
+#~ msgstr "AEAD: "
 
-#~ msgid "ERROR: "
-#~ msgstr "错误:"
+#~ msgid "too many AEAD preferences\n"
+#~ msgstr "过多的 AEAD 偏好设置\n"
 
-#~ msgid "... this is a bug (%s:%d:%s)\n"
-#~ msgstr "……这是个程序缺陷(%s:%d:%s)\n"
+#~ msgid "encrypted with unknown algorithm %d.%s\n"
+#~ msgstr "以下列未知算法加密 %d.%s\n"
 
-#~ msgid "operation is not possible without initialized secure memory\n"
-#~ msgstr "安全内存未初始化,不能进行操作\n"
+#~ msgid "WARNING: encrypting without integrity protection is dangerous\n"
+#~ msgstr "警告:无完整性保护的加密是危险的\n"
 
-#~ msgid "(you may have used the wrong program for this task)\n"
-#~ msgstr "(您可能使用了错误的程序来完成此项任务)\n"
+#~ msgid "Hint: Do not use option %s\n"
+#~ msgstr "提示:不要使用选项 %s\n"
index 908aa6e..89dab47 100644 (file)
@@ -8085,6 +8085,19 @@ msgid "error accessing '%s': http status %u\n"
 msgstr "存取 '%s' 時出錯: http 狀態 %u\n"
 
 #, c-format
+msgid "URL '%s' redirected to '%s' (%u)\n"
+msgstr "網址 '%s' 重新轉向至 '%s' (%u)\n"
+
+#, c-format
+msgid "too many redirections\n"
+msgstr "太多重新導向\n"
+
+#, fuzzy, c-format
+#| msgid "writing to '%s'\n"
+msgid "redirection changed to '%s'\n"
+msgstr "正在寫入 '%s'\n"
+
+#, c-format
 msgid "error allocating memory: %s\n"
 msgstr "配置記憶體時出錯: %s\n"
 
@@ -8186,14 +8199,6 @@ msgid "error reading HTTP response for '%s': %s\n"
 msgstr "讀取 '%s' HTTP 回應時出錯: %s\n"
 
 #, c-format
-msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr "網址 '%s' 重新轉向至 '%s' (%u)\n"
-
-#, c-format
-msgid "too many redirections\n"
-msgstr "太多重新導向\n"
-
-#, c-format
 msgid "error parsing OCSP response for '%s': %s\n"
 msgstr "剖析 '%s' OCSP 回應時出錯: %s\n"
 
index 911bd88..fa23fbe 100644 (file)
@@ -1827,6 +1827,8 @@ do_learn_status (app_t app, ctrl_t ctrl, unsigned int flags)
   do_getattr (app, ctrl, "CA-FPR");
   do_getattr (app, ctrl, "CHV-STATUS");
   do_getattr (app, ctrl, "SIG-COUNTER");
+  if (app->app_local->extcap.kdf_do)
+    do_getattr (app, ctrl, "KDF");
   if (app->app_local->extcap.private_dos)
     {
       do_getattr (app, ctrl, "PRIVATE-DO-1");
index e13c3cd..718b222 100755 (executable)
@@ -107,7 +107,7 @@ if [ ! -d /etc/skel/.gnupg ]; then
     exit 1
 fi
 cd "/etc/skel/.gnupg" || (error "error cd-ing to \`/etc/skel/.gnupg'"; exit 1)
-filelist=$(find . \( -type f -or -type d \) -not -name '*~' -not -name . -print)
+filelist=$(find . \( -type f -o -type d \) '!' -name '*~' '!' -name . -print)
 
 
 if ! umask 0077 ; then
index bf6b119..c8ff166 100644 (file)
@@ -22,6 +22,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 
 #include "../common/util.h"
 #include "../common/status.h"
@@ -48,6 +50,7 @@ enum cmd_and_opt_values
     oQuiet      = 'q',
     oVerbose   = 'v',
     oOutput     = 'o',
+    oDirectory  = 'C',
 
     oDebug      = 500,
 
@@ -56,6 +59,8 @@ enum cmd_and_opt_values
     aCreate,
     aReceive,
     aRead,
+    aInstallKey,
+    aRemoveKey,
 
     oGpgProgram,
     oSend,
@@ -81,6 +86,10 @@ static ARGPARSE_OPTS opts[] = {
               ("receive a MIME confirmation request")),
   ARGPARSE_c (aRead,      "read",
               ("receive a plain text confirmation request")),
+  ARGPARSE_c (aInstallKey, "install-key",
+              "install a key into a directory"),
+  ARGPARSE_c (aRemoveKey, "remove-key",
+              "remove a key from a directory"),
 
   ARGPARSE_group (301, ("@\nOptions:\n ")),
 
@@ -92,6 +101,7 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_s (oOutput, "output", "|FILE|write the mail to FILE"),
   ARGPARSE_s_i (oStatusFD, "status-fd", N_("|FD|write status info to this FD")),
   ARGPARSE_s_n (oWithColons, "with-colons", "@"),
+  ARGPARSE_s_s (oDirectory, "directory", "@"),
 
   ARGPARSE_s_s (oFakeSubmissionAddr, "fake-submission-addr", "@"),
 
@@ -194,6 +204,9 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts)
         case oGpgProgram:
           opt.gpg_program = pargs->r.ret_str;
           break;
+        case oDirectory:
+          opt.directory = pargs->r.ret_str;
+          break;
         case oSend:
           opt.use_sendmail = 1;
           break;
@@ -215,6 +228,8 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts)
        case aReceive:
        case aRead:
         case aCheck:
+        case aInstallKey:
+        case aRemoveKey:
           cmd = pargs->r_opt;
           break;
 
@@ -269,9 +284,34 @@ main (int argc, char **argv)
   if (!opt.gpg_program)
     opt.gpg_program = gnupg_module_name (GNUPG_MODULE_NAME_GPG);
 
+  if (!opt.directory)
+    opt.directory = "openpgpkey";
+
   /* Tell call-dirmngr what options we want.  */
   set_dirmngr_options (opt.verbose, (opt.debug & DBG_IPC_VALUE), 1);
 
+
+  /* Check that the top directory exists.  */
+  if (cmd == aInstallKey || cmd == aRemoveKey)
+    {
+      struct stat sb;
+
+      if (stat (opt.directory, &sb))
+        {
+          err = gpg_error_from_syserror ();
+          log_error ("error accessing directory '%s': %s\n",
+                     opt.directory, gpg_strerror (err));
+          goto leave;
+        }
+      if (!S_ISDIR(sb.st_mode))
+        {
+          log_error ("error accessing directory '%s': %s\n",
+                     opt.directory, "not a directory");
+          err = gpg_error (GPG_ERR_ENOENT);
+          goto leave;
+        }
+    }
+
   /* Run the selected command.  */
   switch (cmd)
     {
@@ -322,12 +362,28 @@ main (int argc, char **argv)
       err = command_check (argv[0]);
       break;
 
+    case aInstallKey:
+      if (!argc)
+        err = wks_cmd_install_key (NULL, NULL);
+      else if (argc == 2)
+        err = wks_cmd_install_key (*argv, argv[1]);
+      else
+        wrong_args ("--install-key [FILE|FINGERPRINT USER-ID]");
+      break;
+
+    case aRemoveKey:
+      if (argc != 1)
+        wrong_args ("--remove-key USER-ID");
+      err = wks_cmd_remove_key (*argv);
+      break;
+
     default:
       usage (1);
       err = 0;
       break;
     }
 
+ leave:
   if (err)
     wks_write_status (STATUS_FAILURE, "- %u", err);
   else if (log_get_errorcount (0))
index 24b3312..1a0ba8f 100644 (file)
@@ -157,8 +157,6 @@ static gpg_error_t command_receive_cb (void *opaque,
                                        const char *mediatype, estream_t fp,
                                        unsigned int flags);
 static gpg_error_t command_list_domains (void);
-static gpg_error_t command_install_key (const char *fname, const char *userid);
-static gpg_error_t command_remove_key (const char *mailaddr);
 static gpg_error_t command_revoke_key (const char *mailaddr);
 static gpg_error_t command_check_key (const char *mailaddr);
 static gpg_error_t command_cron (void);
@@ -383,15 +381,18 @@ main (int argc, char **argv)
       break;
 
     case aInstallKey:
-      if (argc != 2)
-        wrong_args ("--install-key FILE USER-ID");
-      err = command_install_key (*argv, argv[1]);
+      if (!argc)
+        err = wks_cmd_install_key (NULL, NULL);
+      else if (argc == 2)
+        err = wks_cmd_install_key (*argv, argv[1]);
+      else
+        wrong_args ("--install-key [FILE|FINGERPRINT USER-ID]");
       break;
 
     case aRemoveKey:
       if (argc != 1)
         wrong_args ("--remove-key USER-ID");
-      err = command_remove_key (*argv);
+      err = wks_cmd_remove_key (*argv);
       break;
 
     case aRevokeKey:
@@ -1346,81 +1347,6 @@ send_congratulation_message (const char *mbox, const char *keyfile)
 }
 
 
-/* Write the content of SRC to the new file FNAME.  */
-static gpg_error_t
-write_to_file (estream_t src, const char *fname)
-{
-  gpg_error_t err;
-  estream_t dst;
-  char buffer[4096];
-  size_t nread, written;
-
-  dst = es_fopen (fname, "wb");
-  if (!dst)
-    return gpg_error_from_syserror ();
-
-  do
-    {
-      nread = es_fread (buffer, 1, sizeof buffer, src);
-      if (!nread)
-       break;
-      written = es_fwrite (buffer, 1, nread, dst);
-      if (written != nread)
-       break;
-    }
-  while (!es_feof (src) && !es_ferror (src) && !es_ferror (dst));
-  if (!es_feof (src) || es_ferror (src) || es_ferror (dst))
-    {
-      err = gpg_error_from_syserror ();
-      es_fclose (dst);
-      gnupg_remove (fname);
-      return err;
-    }
-
-  if (es_fclose (dst))
-    {
-      err = gpg_error_from_syserror ();
-      log_error ("error closing '%s': %s\n", fname, gpg_strerror (err));
-      return err;
-    }
-
-  return 0;
-}
-
-
-/* Compute the the full file name for the key with ADDRSPEC and return
- * it at R_FNAME.  */
-static gpg_error_t
-compute_hu_fname (char **r_fname, const char *addrspec)
-{
-  gpg_error_t err;
-  char *hash;
-  const char *domain;
-  char sha1buf[20];
-
-  *r_fname = NULL;
-
-  domain = strchr (addrspec, '@');
-  if (!domain || !domain[1] || domain == addrspec)
-    return gpg_error (GPG_ERR_INV_ARG);
-  domain++;
-
-  gcry_md_hash_buffer (GCRY_MD_SHA1, sha1buf, addrspec, domain - addrspec - 1);
-  hash = zb32_encode (sha1buf, 8*20);
-  if (!hash)
-    return gpg_error_from_syserror ();
-
-  *r_fname = make_filename_try (opt.directory, domain, "hu", hash, NULL);
-  if (!*r_fname)
-    err = gpg_error_from_syserror ();
-  else
-    err = 0;
-
-  xfree (hash);
-  return err;
-}
-
-
 /* Check that we have send a request with NONCE and publish the key.  */
 static gpg_error_t
 check_and_publish (server_ctx_t ctx, const char *address, const char *nonce)
@@ -1495,7 +1421,7 @@ check_and_publish (server_ctx_t ctx, const char *address, const char *nonce)
     }
 
   /* Hash user ID and create filename.  */
-  err = compute_hu_fname (&fnewname, address);
+  err = wks_compute_hu_fname (&fnewname, address);
   if (err)
     goto leave;
 
@@ -2004,195 +1930,6 @@ command_cron (void)
 }
 
 
-/* Install a single key into the WKD by reading FNAME and extracting
- * USERID.  */
-static gpg_error_t
-command_install_key (const char *fname, const char *userid)
-{
-  gpg_error_t err;
-  KEYDB_SEARCH_DESC desc;
-  estream_t fp = NULL;
-  char *addrspec = NULL;
-  char *fpr = NULL;
-  uidinfo_list_t uidlist = NULL;
-  uidinfo_list_t uid, thisuid;
-  time_t thistime;
-  char *huname = NULL;
-  int any;
-
-  addrspec = mailbox_from_userid (userid);
-  if (!addrspec)
-    {
-      log_error ("\"%s\" is not a proper mail address\n", userid);
-      err = gpg_error (GPG_ERR_INV_USER_ID);
-      goto leave;
-    }
-
-  if (!classify_user_id (fname, &desc, 1)
-      && (desc.mode == KEYDB_SEARCH_MODE_FPR
-          || desc.mode == KEYDB_SEARCH_MODE_FPR20))
-    {
-      /* FNAME looks like a fingerprint.  Get the key from the
-       * standard keyring.  */
-      err = wks_get_key (&fp, fname, addrspec, 0);
-      if (err)
-        {
-          log_error ("error getting key '%s' (uid='%s'): %s\n",
-                     fname, addrspec, gpg_strerror (err));
-          goto leave;
-        }
-    }
-  else /* Take it from the file */
-    {
-      fp = es_fopen (fname, "rb");
-      if (!fp)
-        {
-          err = gpg_error_from_syserror ();
-          log_error ("error reading '%s': %s\n", fname, gpg_strerror (err));
-          goto leave;
-        }
-    }
-
-  /* List the key so that we can figure out the newest UID with the
-   * requested addrspec.  */
-  err = wks_list_key (fp, &fpr, &uidlist);
-  if (err)
-    {
-      log_error ("error parsing key: %s\n", gpg_strerror (err));
-      err = gpg_error (GPG_ERR_NO_PUBKEY);
-      goto leave;
-    }
-  thistime = 0;
-  thisuid = NULL;
-  any = 0;
-  for (uid = uidlist; uid; uid = uid->next)
-    {
-      if (!uid->mbox)
-        continue; /* Should not happen anyway.  */
-      if (ascii_strcasecmp (uid->mbox, addrspec))
-        continue; /* Not the requested addrspec.  */
-      any = 1;
-      if (uid->created > thistime)
-        {
-          thistime = uid->created;
-          thisuid = uid;
-        }
-    }
-  if (!thisuid)
-    thisuid = uidlist;  /* This is the case for a missing timestamp.  */
-  if (!any)
-    {
-      log_error ("public key in '%s' has no mail address '%s'\n",
-                 fname, addrspec);
-      err = gpg_error (GPG_ERR_INV_USER_ID);
-      goto leave;
-    }
-
-  if (opt.verbose)
-    log_info ("using key with user id '%s'\n", thisuid->uid);
-
-  {
-    estream_t fp2;
-
-    es_rewind (fp);
-    err = wks_filter_uid (&fp2, fp, thisuid->uid, 1);
-    if (err)
-      {
-        log_error ("error filtering key: %s\n", gpg_strerror (err));
-        err = gpg_error (GPG_ERR_NO_PUBKEY);
-        goto leave;
-      }
-    es_fclose (fp);
-    fp = fp2;
-  }
-
-  /* Hash user ID and create filename.  */
-  err = compute_hu_fname (&huname, addrspec);
-  if (err)
-    goto leave;
-
-  /* Publish.  */
-  err = write_to_file (fp, huname);
-  if (err)
-    {
-      log_error ("copying key to '%s' failed: %s\n", huname,gpg_strerror (err));
-      goto leave;
-    }
-
-  /* Make sure it is world readable.  */
-  if (gnupg_chmod (huname, "-rwxr--r--"))
-    log_error ("can't set permissions of '%s': %s\n",
-               huname, gpg_strerror (gpg_err_code_from_syserror()));
-
-  if (!opt.quiet)
-    log_info ("key %s published for '%s'\n", fpr, addrspec);
-
- leave:
-  xfree (huname);
-  free_uidinfo_list (uidlist);
-  xfree (fpr);
-  xfree (addrspec);
-  es_fclose (fp);
-  return err;
-}
-
-
-/* Return the filename and optionally the addrspec for USERID at
- * R_FNAME and R_ADDRSPEC.  R_ADDRSPEC might also be set on error.  */
-static gpg_error_t
-fname_from_userid (const char *userid, char **r_fname, char **r_addrspec)
-{
-  gpg_error_t err;
-  char *addrspec = NULL;
-  const char *domain;
-  char *hash = NULL;
-  const char *s;
-  char shaxbuf[32]; /* Used for SHA-1 and SHA-256 */
-
-  *r_fname = NULL;
-  if (r_addrspec)
-    *r_addrspec = NULL;
-
-  addrspec = mailbox_from_userid (userid);
-  if (!addrspec)
-    {
-      if (opt.verbose)
-        log_info ("\"%s\" is not a proper mail address\n", userid);
-      err = gpg_error (GPG_ERR_INV_USER_ID);
-      goto leave;
-    }
-
-  domain = strchr (addrspec, '@');
-  log_assert (domain);
-  domain++;
-
-  /* Hash user ID and create filename.  */
-  s = strchr (addrspec, '@');
-  log_assert (s);
-  gcry_md_hash_buffer (GCRY_MD_SHA1, shaxbuf, addrspec, s - addrspec);
-  hash = zb32_encode (shaxbuf, 8*20);
-  if (!hash)
-    {
-      err = gpg_error_from_syserror ();
-      goto leave;
-    }
-
-  *r_fname = make_filename_try (opt.directory, domain, "hu", hash, NULL);
-  if (!*r_fname)
-    err = gpg_error_from_syserror ();
-  else
-    err = 0;
-
- leave:
-  if (r_addrspec && addrspec)
-    *r_addrspec = addrspec;
-  else
-    xfree (addrspec);
-  xfree (hash);
-  return err;
-}
-
-
 /* Check whether the key with USER_ID is installed.  */
 static gpg_error_t
 command_check_key (const char *userid)
@@ -2201,7 +1938,7 @@ command_check_key (const char *userid)
   char *addrspec = NULL;
   char *fname = NULL;
 
-  err = fname_from_userid (userid, &fname, &addrspec);
+  err = wks_fname_from_userid (userid, &fname, &addrspec);
   if (err)
     goto leave;
 
@@ -2236,49 +1973,11 @@ command_check_key (const char *userid)
 }
 
 
-/* Remove the key with mail address in USERID.  */
-static gpg_error_t
-command_remove_key (const char *userid)
-{
-  gpg_error_t err;
-  char *addrspec = NULL;
-  char *fname = NULL;
-
-  err = fname_from_userid (userid, &fname, &addrspec);
-  if (err)
-    goto leave;
-
-  if (gnupg_remove (fname))
-    {
-      err = gpg_error_from_syserror ();
-      if (gpg_err_code (err) == GPG_ERR_ENOENT)
-        {
-          if (!opt.quiet)
-            log_info ("key for '%s' is not installed\n", addrspec);
-          log_inc_errorcount ();
-          err = 0;
-        }
-      else
-        log_error ("error removing '%s': %s\n", fname, gpg_strerror (err));
-      goto leave;
-    }
-
-  if (opt.verbose)
-    log_info ("key for '%s' removed\n", addrspec);
-  err = 0;
-
- leave:
-  xfree (fname);
-  xfree (addrspec);
-  return err;
-}
-
-
 /* Revoke the key with mail address MAILADDR.  */
 static gpg_error_t
 command_revoke_key (const char *mailaddr)
 {
   /* Remove should be different from removing but we have not yet
    * defined a suitable way to do this.  */
-  return command_remove_key (mailaddr);
+  return wks_cmd_remove_key (mailaddr);
 }
index fba73f0..e369430 100644 (file)
@@ -98,6 +98,13 @@ gpg_error_t wks_parse_policy (policy_flags_t flags, estream_t stream,
                               int ignore_unknown);
 void wks_free_policy (policy_flags_t policy);
 
+gpg_error_t wks_fname_from_userid (const char *userid,
+                                   char **r_fname, char **r_addrspec);
+gpg_error_t wks_compute_hu_fname (char **r_fname, const char *addrspec);
+gpg_error_t wks_cmd_install_key (const char *fname, const char *userid);
+gpg_error_t wks_cmd_remove_key (const char *userid);
+
+
 /*-- wks-receive.c --*/
 
 /* Flag values for the receive callback.  */
index 48c4766..9047e36 100644 (file)
@@ -34,6 +34,9 @@ Usage: gpg-zip [--help] [--version] [--encrypt] [--decrypt] [--symmetric]
 
 Encrypt or sign files into an archive."
 
+
+echo "gpg-zip: This script is deprecated - please use gpgtar instead." >&2
+
 tar_verbose_opt="v"
 
 while test $# -gt 0 ; do
index 1bcdf78..3e48709 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 
 #include "../common/util.h"
 #include "../common/status.h"
 #include "../common/ccparray.h"
 #include "../common/exectool.h"
+#include "../common/zb32.h"
+#include "../common/userids.h"
 #include "../common/mbox-util.h"
+#include "../common/sysutils.h"
 #include "mime-maker.h"
 #include "send-mail.h"
 #include "gpg-wks.h"
@@ -187,7 +192,7 @@ wks_get_key (estream_t *r_key, const char *fingerprint, const char *addrspec,
   es_fputs ("Content-Type: application/pgp-keys\n"
             "\n", key);
 
-  filterexp = es_bsprintf ("keep-uid=%s=%s", exact? "uid":"mbox", addrspec);
+  filterexp = es_bsprintf ("keep-uid=%s= %s", exact? "uid":"mbox", addrspec);
   if (!filterexp)
     {
       err = gpg_error_from_syserror ();
@@ -461,7 +466,7 @@ wks_filter_uid (estream_t *r_newkey, estream_t key, const char *uid,
     es_fputs ("Content-Type: application/pgp-keys\n"
               "\n", newkey);
 
-  filterexp = es_bsprintf ("keep-uid=uid=%s", uid);
+  filterexp = es_bsprintf ("keep-uid=uid= %s", uid);
   if (!filterexp)
     {
       err = gpg_error_from_syserror ();
@@ -699,3 +704,389 @@ wks_free_policy (policy_flags_t policy)
       memset (policy, 0, sizeof *policy);
     }
 }
+
+
+/* Write the content of SRC to the new file FNAME.  */
+static gpg_error_t
+write_to_file (estream_t src, const char *fname)
+{
+  gpg_error_t err;
+  estream_t dst;
+  char buffer[4096];
+  size_t nread, written;
+
+  dst = es_fopen (fname, "wb");
+  if (!dst)
+    return gpg_error_from_syserror ();
+
+  do
+    {
+      nread = es_fread (buffer, 1, sizeof buffer, src);
+      if (!nread)
+       break;
+      written = es_fwrite (buffer, 1, nread, dst);
+      if (written != nread)
+       break;
+    }
+  while (!es_feof (src) && !es_ferror (src) && !es_ferror (dst));
+  if (!es_feof (src) || es_ferror (src) || es_ferror (dst))
+    {
+      err = gpg_error_from_syserror ();
+      es_fclose (dst);
+      gnupg_remove (fname);
+      return err;
+    }
+
+  if (es_fclose (dst))
+    {
+      err = gpg_error_from_syserror ();
+      log_error ("error closing '%s': %s\n", fname, gpg_strerror (err));
+      return err;
+    }
+
+  return 0;
+}
+
+
+/* Return the filename and optionally the addrspec for USERID at
+ * R_FNAME and R_ADDRSPEC.  R_ADDRSPEC might also be set on error.  */
+gpg_error_t
+wks_fname_from_userid (const char *userid, char **r_fname, char **r_addrspec)
+{
+  gpg_error_t err;
+  char *addrspec = NULL;
+  const char *domain;
+  char *hash = NULL;
+  const char *s;
+  char shaxbuf[32]; /* Used for SHA-1 and SHA-256 */
+
+  *r_fname = NULL;
+  if (r_addrspec)
+    *r_addrspec = NULL;
+
+  addrspec = mailbox_from_userid (userid);
+  if (!addrspec)
+    {
+      if (opt.verbose)
+        log_info ("\"%s\" is not a proper mail address\n", userid);
+      err = gpg_error (GPG_ERR_INV_USER_ID);
+      goto leave;
+    }
+
+  domain = strchr (addrspec, '@');
+  log_assert (domain);
+  domain++;
+
+  /* Hash user ID and create filename.  */
+  s = strchr (addrspec, '@');
+  log_assert (s);
+  gcry_md_hash_buffer (GCRY_MD_SHA1, shaxbuf, addrspec, s - addrspec);
+  hash = zb32_encode (shaxbuf, 8*20);
+  if (!hash)
+    {
+      err = gpg_error_from_syserror ();
+      goto leave;
+    }
+
+  *r_fname = make_filename_try (opt.directory, domain, "hu", hash, NULL);
+  if (!*r_fname)
+    err = gpg_error_from_syserror ();
+  else
+    err = 0;
+
+ leave:
+  if (r_addrspec && addrspec)
+    *r_addrspec = addrspec;
+  else
+    xfree (addrspec);
+  xfree (hash);
+  return err;
+}
+
+
+/* Compute the the full file name for the key with ADDRSPEC and return
+ * it at R_FNAME.  */
+gpg_error_t
+wks_compute_hu_fname (char **r_fname, const char *addrspec)
+{
+  gpg_error_t err;
+  char *hash;
+  const char *domain;
+  char sha1buf[20];
+  char *fname;
+  struct stat sb;
+
+  *r_fname = NULL;
+
+  domain = strchr (addrspec, '@');
+  if (!domain || !domain[1] || domain == addrspec)
+    return gpg_error (GPG_ERR_INV_ARG);
+  domain++;
+
+  gcry_md_hash_buffer (GCRY_MD_SHA1, sha1buf, addrspec, domain - addrspec - 1);
+  hash = zb32_encode (sha1buf, 8*20);
+  if (!hash)
+    return gpg_error_from_syserror ();
+
+  /* Try to create missing directories below opt.directory.  */
+  fname = make_filename_try (opt.directory, domain, NULL);
+  if (fname && stat (fname, &sb)
+      && gpg_err_code_from_syserror () == GPG_ERR_ENOENT)
+    if (!gnupg_mkdir (fname, "-rwxr--r--") && opt.verbose)
+      log_info ("directory '%s' created\n", fname);
+  xfree (fname);
+  fname = make_filename_try (opt.directory, domain, "hu", NULL);
+  if (fname && stat (fname, &sb)
+      && gpg_err_code_from_syserror () == GPG_ERR_ENOENT)
+    if (!gnupg_mkdir (fname, "-rwxr--r--") && opt.verbose)
+      log_info ("directory '%s' created\n", fname);
+  xfree (fname);
+
+  /* Create the filename.  */
+  fname = make_filename_try (opt.directory, domain, "hu", hash, NULL);
+  err = fname? 0 : gpg_error_from_syserror ();
+
+  if (err)
+    xfree (fname);
+  else
+    *r_fname = fname; /* Okay.  */
+  xfree (hash);
+  return err;
+}
+
+
+
+/* Helper form wks_cmd_install_key.  */
+static gpg_error_t
+install_key_from_spec_file (const char *fname)
+{
+  gpg_error_t err;
+  estream_t fp;
+  char *line = NULL;
+  size_t linelen = 0;
+  size_t maxlen = 2048;
+  char *fields[2];
+  unsigned int lnr = 0;
+
+  if (!fname || !strcmp (fname, ""))
+    fp = es_stdin;
+  else
+    fp = es_fopen (fname, "rb");
+  if (!fp)
+    {
+      err = gpg_error_from_syserror ();
+      log_error ("error reading '%s': %s\n", fname, gpg_strerror (err));
+      goto leave;
+    }
+
+  while (es_read_line (fp, &line, &linelen, &maxlen) > 0)
+    {
+      if (!maxlen)
+        {
+          err = gpg_error (GPG_ERR_LINE_TOO_LONG);
+          log_error ("error reading '%s': %s\n", fname, gpg_strerror (err));
+          goto leave;
+        }
+      lnr++;
+      trim_spaces (line);
+      if (!*line ||  *line == '#')
+        continue;
+      if (split_fields (line, fields, DIM(fields)) < 2)
+        {
+          log_error ("error reading '%s': syntax error at line %u\n",
+                     fname, lnr);
+          continue;
+        }
+      err = wks_cmd_install_key (fields[0], fields[1]);
+      if (err)
+        goto leave;
+    }
+  if (es_ferror (fp))
+    {
+      err = gpg_error_from_syserror ();
+      log_error ("error reading '%s': %s\n", fname, gpg_strerror (err));
+      goto leave;
+    }
+
+ leave:
+  if (fp != es_stdin)
+    es_fclose (fp);
+  es_free (line);
+  return err;
+}
+
+
+/* Install a single key into the WKD by reading FNAME and extracting
+ * USERID.  If USERID is NULL FNAME is expected to be a list of fpr
+ * mbox lines and for each line the respective key will be
+ * installed.  */
+gpg_error_t
+wks_cmd_install_key (const char *fname, const char *userid)
+{
+  gpg_error_t err;
+  KEYDB_SEARCH_DESC desc;
+  estream_t fp = NULL;
+  char *addrspec = NULL;
+  char *fpr = NULL;
+  uidinfo_list_t uidlist = NULL;
+  uidinfo_list_t uid, thisuid;
+  time_t thistime;
+  char *huname = NULL;
+  int any;
+
+  if (!userid)
+    return install_key_from_spec_file (fname);
+
+  addrspec = mailbox_from_userid (userid);
+  if (!addrspec)
+    {
+      log_error ("\"%s\" is not a proper mail address\n", userid);
+      err = gpg_error (GPG_ERR_INV_USER_ID);
+      goto leave;
+    }
+
+  if (!classify_user_id (fname, &desc, 1)
+      && (desc.mode == KEYDB_SEARCH_MODE_FPR
+          || desc.mode == KEYDB_SEARCH_MODE_FPR20))
+    {
+      /* FNAME looks like a fingerprint.  Get the key from the
+       * standard keyring.  */
+      err = wks_get_key (&fp, fname, addrspec, 0);
+      if (err)
+        {
+          log_error ("error getting key '%s' (uid='%s'): %s\n",
+                     fname, addrspec, gpg_strerror (err));
+          goto leave;
+        }
+    }
+  else /* Take it from the file */
+    {
+      fp = es_fopen (fname, "rb");
+      if (!fp)
+        {
+          err = gpg_error_from_syserror ();
+          log_error ("error reading '%s': %s\n", fname, gpg_strerror (err));
+          goto leave;
+        }
+    }
+
+  /* List the key so that we can figure out the newest UID with the
+   * requested addrspec.  */
+  err = wks_list_key (fp, &fpr, &uidlist);
+  if (err)
+    {
+      log_error ("error parsing key: %s\n", gpg_strerror (err));
+      err = gpg_error (GPG_ERR_NO_PUBKEY);
+      goto leave;
+    }
+  thistime = 0;
+  thisuid = NULL;
+  any = 0;
+  for (uid = uidlist; uid; uid = uid->next)
+    {
+      if (!uid->mbox)
+        continue; /* Should not happen anyway.  */
+      if (ascii_strcasecmp (uid->mbox, addrspec))
+        continue; /* Not the requested addrspec.  */
+      any = 1;
+      if (uid->created > thistime)
+        {
+          thistime = uid->created;
+          thisuid = uid;
+        }
+    }
+  if (!thisuid)
+    thisuid = uidlist;  /* This is the case for a missing timestamp.  */
+  if (!any)
+    {
+      log_error ("public key in '%s' has no mail address '%s'\n",
+                 fname, addrspec);
+      err = gpg_error (GPG_ERR_INV_USER_ID);
+      goto leave;
+    }
+
+  if (opt.verbose)
+    log_info ("using key with user id '%s'\n", thisuid->uid);
+
+  {
+    estream_t fp2;
+
+    es_rewind (fp);
+    err = wks_filter_uid (&fp2, fp, thisuid->uid, 1);
+    if (err)
+      {
+        log_error ("error filtering key: %s\n", gpg_strerror (err));
+        err = gpg_error (GPG_ERR_NO_PUBKEY);
+        goto leave;
+      }
+    es_fclose (fp);
+    fp = fp2;
+  }
+
+  /* Hash user ID and create filename.  */
+  err = wks_compute_hu_fname (&huname, addrspec);
+  if (err)
+    goto leave;
+
+  /* Publish.  */
+  err = write_to_file (fp, huname);
+  if (err)
+    {
+      log_error ("copying key to '%s' failed: %s\n", huname,gpg_strerror (err));
+      goto leave;
+    }
+
+  /* Make sure it is world readable.  */
+  if (gnupg_chmod (huname, "-rwxr--r--"))
+    log_error ("can't set permissions of '%s': %s\n",
+               huname, gpg_strerror (gpg_err_code_from_syserror()));
+
+  if (!opt.quiet)
+    log_info ("key %s published for '%s'\n", fpr, addrspec);
+
+ leave:
+  xfree (huname);
+  free_uidinfo_list (uidlist);
+  xfree (fpr);
+  xfree (addrspec);
+  es_fclose (fp);
+  return err;
+}
+
+
+/* Remove the key with mail address in USERID.  */
+gpg_error_t
+wks_cmd_remove_key (const char *userid)
+{
+  gpg_error_t err;
+  char *addrspec = NULL;
+  char *fname = NULL;
+
+  err = wks_fname_from_userid (userid, &fname, &addrspec);
+  if (err)
+    goto leave;
+
+  if (gnupg_remove (fname))
+    {
+      err = gpg_error_from_syserror ();
+      if (gpg_err_code (err) == GPG_ERR_ENOENT)
+        {
+          if (!opt.quiet)
+            log_info ("key for '%s' is not installed\n", addrspec);
+          log_inc_errorcount ();
+          err = 0;
+        }
+      else
+        log_error ("error removing '%s': %s\n", fname, gpg_strerror (err));
+      goto leave;
+    }
+
+  if (opt.verbose)
+    log_info ("key for '%s' removed\n", addrspec);
+  err = 0;
+
+ leave:
+  xfree (fname);
+  xfree (addrspec);
+  return err;
+}