On 2010-09-22, at 12:18 PM, Srinivasa Ragavan wrote: > Hi, > I have made the following changes to evolution-data-server in project > Trunk:Testing. Please review and accept ASAP. > > Thank You, > Srinivasa Ragavan > > [This message was auto-generated] > > --- > > Request #7682: > > submit: > home:srini:branches:Trunk:Testing/evolution-data-server(r2)(cleanup) -> > Trunk:Testing/evolution-data-server > > > Message: > * Wed Sep 22 2010 Srinivasa Ragavan <[email protected]> - 2.30.2 > - Update missing patches from Meego:1.0:Core. Fixes bmc #7055 > * Thu Sep 2 2010 Hao Li <[email protected]> - 2.30.2 > - Update simplified chinese translation in contacts/categories to fix BMC > #2330 > * Tue Aug 17 2010 Federico Mena-Quintero <[email protected]> - 2.30.2 > - Enable evolution-data-server-bmo182-camel-socks-proxy.patch > - Add evolution-data-server-bmo182-camel-socks5.patch to support > SOCKS5 and IPv6 properly. > * Wed Jul 04 2010 Peter Zhu <[email protected]> - 2.30.2 > - Disable socks patch to fix BMC #3667 > * Wed Jun 30 2010 Michael Meeks <[email protected]> - 2.30.2 > - Fix BMC#182 - add SOCKS proxy support (to camel) > * Tue Jun 29 2010 Michael Meeks <[email protected]> - 2.30.2 > - Fix BMC #1510 - use system NSS cache by updating to newer snapshot > of the stable branch fixing many other known bugs. > - drop two patches already present there. > - ensure that we keep the soname we originally shipped with. > * Thu Jun 10 2010 Srinivasa Ragavan <[email protected]> - 2.30.1 > - Fix BMC #1846 - Updated an existing patch. > * Mon May 10 2010 Michael Meeks <[email protected]> - 2.30.1 > - fix name selection sizing & layout to fit screen, bmc#1703 > > State: new 2010-09-22T04:18:50 srini > Comment: None > > > > changes files: > -------------- > --- evolution-data-server.changes > +++ evolution-data-server.changes > @@ -0,0 +1,29 @@ > +* Wed Sep 22 2010 Srinivasa Ragavan <[email protected]> - 2.30.2 > +- Update missing patches from Meego:1.0:Core. Fixes bmc #7055 > + > +* Thu Sep 2 2010 Hao Li <[email protected]> - 2.30.2 > +- Update simplified chinese translation in contacts/categories to fix BMC > #2330 > + > +* Tue Aug 17 2010 Federico Mena-Quintero <[email protected]> - 2.30.2 > +- Enable evolution-data-server-bmo182-camel-socks-proxy.patch > +- Add evolution-data-server-bmo182-camel-socks5.patch to support > + SOCKS5 and IPv6 properly. > + > +* Wed Jul 04 2010 Peter Zhu <[email protected]> - 2.30.2 > +- Disable socks patch to fix BMC #3667 > + > +* Wed Jun 30 2010 Michael Meeks <[email protected]> - 2.30.2 > +- Fix BMC#182 - add SOCKS proxy support (to camel) > + > +* Tue Jun 29 2010 Michael Meeks <[email protected]> - 2.30.2 > +- Fix BMC #1510 - use system NSS cache by updating to newer snapshot > + of the stable branch fixing many other known bugs. > +- drop two patches already present there. > +- ensure that we keep the soname we originally shipped with. > + > +* Thu Jun 10 2010 Srinivasa Ragavan <[email protected]> - 2.30.1 > +- Fix BMC #1846 - Updated an existing patch. > + > +* Mon May 10 2010 Michael Meeks <[email protected]> - 2.30.1 > +- fix name selection sizing & layout to fit screen, bmc#1703 > + > > old: > ---- > evolution-data-server-2.30.1~20100421.tar.bz2 > > new: > ---- > eds-soname-retain.patch > evolution-data-server-2.30.2~20100629.tar.bz2 > evolution-data-server-bmo182-camel-socks-proxy.patch > evolution-data-server-bmo182-camel-socks5.patch > evolution-data-server-contacts-bug-2330.patch > > spec files: > ----------- > --- evolution-data-server.spec > +++ evolution-data-server.spec > @@ -13,10 +13,10 @@ > %define eds_extensions_dir > %{_libdir}/evolution-data-server-%{eds_api_version}/extensions > > Name: evolution-data-server > -Version: 2.30.1~20100421 > +Version: 2.30.2~20100629 > Release: 1 > License: LGPLv2 > -Group: System/Libraries > +Group: System Environment/Libraries
Thats is wrong, please resubmit. > Summary: Backend data server for Evolution > URL: http://git.gnome.org/cgit/evolution-data-server > BuildRoot: %{_tmppath}/%{name}-%{version}-root > @@ -53,8 +53,11 @@ > > # Moblin specific patches > Patch1: no-module-logging.patch > -Patch2: use-nss-system-db.patch > +Patch2: eds-soname-retain.patch > Patch3: BUGFIX-GNOME-Bug-593882-Ghost-mails-seen-in-Anjal-v3.patch > +Patch4: evolution-data-server-bmo182-camel-socks-proxy.patch > +Patch5: evolution-data-server-bmo182-camel-socks5.patch > +Patch6: evolution-data-server-contacts-bug-2330.patch > > %description > The %{name} package provides a unified backend for programs > @@ -77,8 +80,11 @@ > %setup -q > > %patch1 -p1 -b .no-module-logging > -%patch2 -p1 -b .system-nss > +%patch2 -p1 -b .eds-soname-retain > %patch3 -p1 -b .ghost-mails > +%patch4 -p1 -b .evolution-data-server-bmo182-camel-socks-proxy > +%patch5 -p1 -b .evolution-data-server-bmo182-camel-socks5 > +%patch6 -p1 -b .evolution-data-server-contacts-bug-2330 > %build > > %if %{ldap_support} > > other changes: > -------------- > > ++++++ eds-soname-retain.patch (new) > --- eds-soname-retain.patch > +++ eds-soname-retain.patch > +Revert this commit (appended): > + + we always shipped without EComponentListener > + + changing the .soname in mid-flow is really awful > + + The original MeeGo so-name was .11 - so lets keep it > + that way. > + > + > +commit 9930a96021157de4317d19dc275b51a917391df8 > +Author: Matthew Barnes <[email protected]> > +Date: Fri May 21 21:14:12 2010 -0400 > + > + Bump libedataserver soname twice. > + > + We screwed up and forgot to bump libedataserver's shared object name > + when EComponentListener was removed during the 2.29 development cycle. > + > + The problem is we now need to bump both master and gnome-2-30 branches, > + but master was already bumped once when all the deprecated API was > + removed for 2.31.1. So to keep all the names unique, the gnome-2-30 > + soname will leapfrog master, and master will leapfrog gnome-2-30. > + > + It breaks down like this: > + > + Version Shared Object Name Note > + > + <= 2.30.1 : libedataserver-1.2.so.11 : > + == 2.31.1 : libedataserver-1.2.so.12 : Deprecated API removed > + >= 2.30.2 : libedataserver-1.2.so.13 : EComponentListener removed > + >= 2.31.2 : libedataserver-1.2.so.14 : EComponentListener removed > + > +diff --git a/configure.ac b/configure.ac > +index 2edb90c..9c3a099 100644 > +--- a/configure.ac > ++++ b/configure.ac > +@@ -55,7 +55,7 @@ EDS_MICRO_VERSION=eds_micro_version > + dnl ****************************** > + dnl Libtool versioning > + dnl ****************************** > +-LIBEDATASERVER_CURRENT=13 > ++LIBEDATASERVER_CURRENT=11 > + LIBEDATASERVER_REVISION=1 > + LIBEDATASERVER_AGE=0 > + > > ++++++ evolution-data-server-2.30.1~20100421.tar.bz2 -> > evolution-data-server-2.30.2~20100629.tar.bz2 > 34820 lines of diff (skipped) > > ++++++ evolution-data-server-bmo182-camel-socks-proxy.patch (new) > --- evolution-data-server-bmo182-camel-socks-proxy.patch > +++ evolution-data-server-bmo182-camel-socks-proxy.patch > +diff --git a/camel/camel-private.h b/camel/camel-private.h > +index 51fc00f..f235ab4 100644 > +--- a/camel/camel-private.h > ++++ b/camel/camel-private.h > +@@ -97,6 +97,8 @@ struct _CamelSessionPrivate { > + GHashTable *thread_msg_op; > + GHashTable *junk_headers; > + > ++ char *socks_proxy_host; > ++ int socks_proxy_port; > + }; > + > + #define CAMEL_SESSION_LOCK(f, l) \ > +diff --git a/camel/camel-session.c b/camel/camel-session.c > +index 5b626ac..36a2d38 100644 > +--- a/camel/camel-session.c > ++++ b/camel/camel-session.c > +@@ -159,6 +159,34 @@ camel_session_construct (CamelSession *session, const > gchar *storage_path) > + session->storage_path = g_strdup (storage_path); > + } > + > ++void > ++camel_session_set_socks_proxy (CamelSession *session, const gchar > *socks_host, int socks_port) > ++{ > ++ g_return_if_fail (CAMEL_IS_SESSION (session)); > ++ > ++ if (session->priv->socks_proxy_host) > ++ g_free (session->priv->socks_proxy_host); > ++ > ++ if (socks_host && socks_host[0] != '\0') { > ++ session->priv->socks_proxy_host = g_strdup (socks_host); > ++ session->priv->socks_proxy_port = socks_port; > ++ } else { > ++ session->priv->socks_proxy_host = NULL; > ++ session->priv->socks_proxy_port = 0; > ++ } > ++} > ++ > ++void > ++camel_session_get_socks_proxy (CamelSession *session, gchar **host_ret, > gint *port_ret) > ++{ > ++ g_return_if_fail (CAMEL_IS_SESSION (session)); > ++ g_return_if_fail (host_ret != NULL); > ++ g_return_if_fail (port_ret != NULL); > ++ > ++ *host_ret = g_strdup (session->priv->socks_proxy_host); > ++ *port_ret = session->priv->socks_proxy_port; > ++} > ++ > + static CamelService * > + get_service (CamelSession *session, const gchar *url_string, > + CamelProviderType type, CamelException *ex) > +diff --git a/camel/camel-session.h b/camel/camel-session.h > +index e6d6455..543aac1 100644 > +--- a/camel/camel-session.h > ++++ b/camel/camel-session.h > +@@ -132,6 +132,13 @@ CamelType camel_session_get_type (void); > + void camel_session_construct (CamelSession *session, > + const gchar *storage_path); > + > ++void camel_session_set_socks_proxy (CamelSession *session, > ++ const gchar *socks_host, > ++ gint socks_port); > ++void camel_session_get_socks_proxy (CamelSession *session, > ++ gchar **host_ret, > ++ gint *port_ret); > ++ > + CamelService * camel_session_get_service (CamelSession *session, > + const gchar *url_string, > + CamelProviderType type, > +diff --git a/camel/camel-tcp-stream-raw.c b/camel/camel-tcp-stream-raw.c > +index 72979e7..89a29e5 100644 > +--- a/camel/camel-tcp-stream-raw.c > ++++ b/camel/camel-tcp-stream-raw.c > +@@ -33,6 +33,7 @@ > + #include <sys/types.h> > + > + #include "camel-file-utils.h" > ++#include "camel-net-utils.h" > + #include "camel-operation.h" > + #include "camel-tcp-stream-raw.h" > + > +@@ -400,15 +401,97 @@ socket_connect(struct addrinfo *h) > + return fd; > + } > + > ++/* Returns the FD of a socket, already connected to and validated by the > SOCKS4 > ++ * proxy that is configured in the stream. Otherwise returns -1. Assumes > that > ++ * a proxy *is* configured with camel_tcp_stream_set_socks_proxy(). > ++ */ > ++static gint > ++connect_to_socks4_proxy (const gchar *proxy_host, gint proxy_port, struct > addrinfo *connect_addr) > ++{ > ++ struct addrinfo *ai, hints; > ++ gchar serv[16]; > ++ gint fd; > ++ gchar request[9]; > ++ struct sockaddr_in *sin; > ++ gchar reply[8]; > ++ gint save_errno; > ++ > ++ g_assert (proxy_host != NULL); > ++ > ++ sprintf (serv, "%d", proxy_port); > ++ > ++ memset (&hints, 0, sizeof (hints)); > ++ hints.ai_socktype = SOCK_STREAM; > ++ > ++ ai = camel_getaddrinfo (proxy_host, serv, &hints, NULL); /* > NULL-CamelException */ > ++ if (!ai) { > ++ errno = EHOSTUNREACH; /* FIXME: this is not an accurate error; > we should translate the CamelException to an errno */ > ++ return -1; > ++ } > ++ > ++ fd = socket_connect (ai); > ++ save_errno = errno; > ++ > ++ camel_freeaddrinfo (ai); > ++ > ++ if (fd == -1) { > ++ errno = save_errno; > ++ goto error; > ++ } > ++ > ++ g_assert (connect_addr->ai_addr->sa_family == AF_INET); /* FIXME: what > to do about IPv6? Are we just screwed with SOCKS4? */ > ++ sin = (struct sockaddr_in *) connect_addr->ai_addr; > ++ > ++ request[0] = 0x04; /* SOCKS4 */ > ++ request[1] = 0x01; /* CONNECT */ > ++ memcpy (request + 2, &sin->sin_port, 2); /* port in network byte > order */ > ++ memcpy (request + 4, &sin->sin_addr.s_addr, 4); /* address in network > byte order */ > ++ request[8] = 0x00; /* terminator */ > ++ > ++ if (camel_write_socket (fd, request, sizeof (request)) != sizeof > (request)) > ++ goto error; > ++ > ++ if (camel_read_socket (fd, reply, sizeof (reply)) != sizeof (reply)) > ++ goto error; > ++ > ++ if (!(reply[0] == 0 /* first byte of reply is 0 */ > ++ && reply[1] == 90)) { /* 90 means "request granted" */ > ++ errno = ECONNREFUSED; > ++ goto error; > ++ } > ++ > ++ goto out; > ++ > ++error: > ++ if (fd != -1) { > ++ save_errno = errno; > ++ SOCKET_CLOSE (fd); > ++ errno = save_errno; > ++ fd = -1; > ++ } > ++ > ++out: > ++ > ++ return fd; > ++} > ++ > + static gint > + stream_connect (CamelTcpStream *stream, struct addrinfo *host) > + { > + CamelTcpStreamRaw *raw = CAMEL_TCP_STREAM_RAW (stream); > ++ const gchar *proxy_host; > ++ gint proxy_port; > + > + g_return_val_if_fail (host != NULL, -1); > + > ++ camel_tcp_stream_peek_socks_proxy (stream, &proxy_host, &proxy_port); > ++ > + while (host) { > +- raw->sockfd = socket_connect(host); > ++ if (proxy_host) > ++ raw->sockfd = connect_to_socks4_proxy (proxy_host, > proxy_port, host); > ++ else > ++ raw->sockfd = socket_connect (host); > ++ > + if (raw->sockfd != -1) > + return 0; > + > +diff --git a/camel/camel-tcp-stream-ssl.c b/camel/camel-tcp-stream-ssl.c > +index 62290c4..132c977 100644 > +--- a/camel/camel-tcp-stream-ssl.c > ++++ b/camel/camel-tcp-stream-ssl.c > +@@ -55,12 +55,15 @@ > + > + #include "camel-certdb.h" > + #include "camel-file-utils.h" > ++#include "camel-net-utils.h" > + #include "camel-operation.h" > + #include "camel-private.h" > + #include "camel-session.h" > + #include "camel-stream-fs.h" > + #include "camel-tcp-stream-ssl.h" > + > ++#define d(x) > ++ > (806 more lines skipped) > > ++++++ evolution-data-server-bmo182-camel-socks5.patch (new) > --- evolution-data-server-bmo182-camel-socks5.patch > +++ evolution-data-server-bmo182-camel-socks5.patch > +diff --git a/camel/camel-exception-list.def b/camel/camel-exception-list.def > +index 9d2940f..300743f 100644 > +--- a/camel/camel-exception-list.def > ++++ b/camel/camel-exception-list.def > +@@ -38,4 +38,8 @@ CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED, > + > + > + /* CamelOperation */ > +-CAMEL_EXCEPTION_OPERATION_IN_PROGRESS = 400 > ++CAMEL_EXCEPTION_OPERATION_IN_PROGRESS = 400, > ++ > ++/* SOCKS proxies in CamelTcpStream */ > ++CAMEL_EXCEPTION_PROXY_NOT_SUPPORTED = 500, > ++CAMEL_EXCEPTION_PROXY_CANT_AUTHENTICATE > +diff --git a/camel/camel-http-stream.c b/camel/camel-http-stream.c > +index cbab535..40a5dc7 100644 > +--- a/camel/camel-http-stream.c > ++++ b/camel/camel-http-stream.c > +@@ -173,7 +173,6 @@ static CamelStream * > + http_connect (CamelHttpStream *http, CamelURL *url) > + { > + CamelStream *stream = NULL; > +- struct addrinfo *ai, hints = { 0 }; > + gint errsave; > + gchar *serv; > + > +@@ -198,24 +197,14 @@ http_connect (CamelHttpStream *http, CamelURL *url) > + } else { > + serv = url->protocol; > + } > +- hints.ai_socktype = SOCK_STREAM; > + > +- ai = camel_getaddrinfo(url->host, serv, &hints, NULL); > +- if (ai == NULL) { > +- camel_object_unref (stream); > +- return NULL; > +- } > +- > +- if (camel_tcp_stream_connect (CAMEL_TCP_STREAM (stream), ai) == -1) { > ++ if (camel_tcp_stream_connect (CAMEL_TCP_STREAM (stream), url->host, > serv, 0, NULL) == -1) { /* NULL-CamelException */ > + errsave = errno; > + camel_object_unref (stream); > +- camel_freeaddrinfo(ai); > + errno = errsave; > + return NULL; > + } > + > +- camel_freeaddrinfo(ai); > +- > + http->raw = stream; > + http->read = camel_stream_buffer_new (stream, CAMEL_STREAM_BUFFER_READ); > + > +diff --git a/camel/camel-tcp-stream-raw.c b/camel/camel-tcp-stream-raw.c > +index 89a29e5..4e3711a 100644 > +--- a/camel/camel-tcp-stream-raw.c > ++++ b/camel/camel-tcp-stream-raw.c > +@@ -32,24 +32,26 @@ > + #include <sys/time.h> > + #include <sys/types.h> > + > ++#include <nspr.h> > ++#include <prio.h> > ++#include <prerror.h> > ++#include <prerr.h> > ++ > ++#include <glib/gi18n-lib.h> > ++ > + #include "camel-file-utils.h" > + #include "camel-net-utils.h" > + #include "camel-operation.h" > + #include "camel-tcp-stream-raw.h" > + > +-#ifndef G_OS_WIN32 > +-#define SOCKET_ERROR_CODE() errno > +-#define SOCKET_CLOSE(fd) close (fd) > +-#define SOCKET_ERROR_IS_EINPROGRESS() (errno == EINPROGRESS) > +-#define SOCKET_ERROR_IS_EINTR() (errno == EINTR) > +-#else > +-#define SOCKET_ERROR_CODE() WSAGetLastError () > +-#define SOCKET_CLOSE(fd) closesocket (fd) > +-#define SOCKET_ERROR_IS_EINPROGRESS() (WSAGetLastError () == WSAEWOULDBLOCK) > +-#define SOCKET_ERROR_IS_EINTR() 0 /* No WSAEINTR in WinSock2 */ > +-#undef ETIMEDOUT /* In case pthreads-win32's <pthread.h> bogusly > defined it */ > +-#define ETIMEDOUT EAGAIN > +-#endif > ++#define d(x) > ++ > ++#define IO_TIMEOUT (PR_TicksPerSecond() * 4 * 60) > ++#define CONNECT_TIMEOUT (PR_TicksPerSecond () * 4 * 60) > ++ > ++typedef struct _CamelTcpStreamRawPrivate { > ++ PRFileDesc *sockfd; > ++} CamelTcpStreamRawPrivate; > + > + static CamelTcpStreamClass *parent_class = NULL; > + > +@@ -61,11 +63,12 @@ static gssize stream_write (CamelStream *stream, const > gchar *buffer, gsize n); > + static gint stream_flush (CamelStream *stream); > + static gint stream_close (CamelStream *stream); > + > +-static gint stream_connect (CamelTcpStream *stream, struct addrinfo *host); > ++static gint stream_connect (CamelTcpStream *stream, const char *host, const > char *service, gint fallback_port, CamelException *ex); > + static gint stream_getsockopt (CamelTcpStream *stream, CamelSockOptData > *data); > + static gint stream_setsockopt (CamelTcpStream *stream, const > CamelSockOptData *data); > + static struct sockaddr *stream_get_local_address (CamelTcpStream *stream, > socklen_t *len); > + static struct sockaddr *stream_get_remote_address (CamelTcpStream *stream, > socklen_t *len); > ++static PRFileDesc *stream_get_file_desc (CamelTcpStream *stream); > + > + static void > + camel_tcp_stream_raw_class_init (CamelTcpStreamRawClass > *camel_tcp_stream_raw_class) > +@@ -88,23 +91,34 @@ camel_tcp_stream_raw_class_init (CamelTcpStreamRawClass > *camel_tcp_stream_raw_cl > + camel_tcp_stream_class->setsockopt = stream_setsockopt; > + camel_tcp_stream_class->get_local_address = stream_get_local_address; > + camel_tcp_stream_class->get_remote_address = stream_get_remote_address; > ++ camel_tcp_stream_class->get_file_desc = stream_get_file_desc; > + } > + > + static void > + camel_tcp_stream_raw_init (gpointer object, gpointer klass) > + { > + CamelTcpStreamRaw *stream = CAMEL_TCP_STREAM_RAW (object); > ++ CamelTcpStreamRawPrivate *priv; > + > +- stream->sockfd = -1; > ++ stream->priv = g_new0 (CamelTcpStreamRawPrivate, 1); > ++ priv = stream->priv; > ++ > ++ priv->sockfd = NULL; > + } > + > + static void > + camel_tcp_stream_raw_finalize (CamelObject *object) > + { > +- CamelTcpStreamRaw *stream = CAMEL_TCP_STREAM_RAW (object); > ++ CamelTcpStreamRaw *raw = CAMEL_TCP_STREAM_RAW (object); > ++ CamelTcpStreamRawPrivate *priv = raw->priv; > + > +- if (stream->sockfd != -1) > +- SOCKET_CLOSE (stream->sockfd); > ++ if (priv->sockfd != NULL) { > ++ PR_Shutdown (priv->sockfd, PR_SHUTDOWN_BOTH); > ++ PR_Close (priv->sockfd); > ++ } > ++ > ++ g_free (raw->priv); > ++ raw->priv = NULL; > + } > + > + CamelType > +@@ -244,202 +258,492 @@ camel_tcp_stream_raw_new (void) > + return CAMEL_STREAM (stream); > + } > + > ++void > ++_set_errno_from_pr_error (gint pr_code) > ++{ > ++ /* FIXME: this should handle more. */ > ++ switch (pr_code) { > ++ case PR_INVALID_ARGUMENT_ERROR: > ++ errno = EINVAL; > ++ break; > ++ case PR_PENDING_INTERRUPT_ERROR: > ++ errno = EINTR; > ++ break; > ++ case PR_IO_PENDING_ERROR: > ++ errno = EAGAIN; > ++ break; > ++#ifdef EWOULDBLOCK > ++ case PR_WOULD_BLOCK_ERROR: > ++ errno = EWOULDBLOCK; > ++ break; > ++#endif > ++#ifdef EINPROGRESS > ++ case PR_IN_PROGRESS_ERROR: > ++ errno = EINPROGRESS; > ++ break; > ++#endif > ++#ifdef EALREADY > ++ case PR_ALREADY_INITIATED_ERROR: > ++ errno = EALREADY; > ++ break; > ++#endif > ++#ifdef EHOSTUNREACH > ++ case PR_NETWORK_UNREACHABLE_ERROR: > ++ errno = EHOSTUNREACH; > ++ break; > ++#endif > ++#ifdef ECONNREFUSED > ++ case PR_CONNECT_REFUSED_ERROR: > ++ errno = ECONNREFUSED; > ++ break; > ++#endif > ++#ifdef ETIMEDOUT > ++ case PR_CONNECT_TIMEOUT_ERROR: > ++ case PR_IO_TIMEOUT_ERROR: > ++ errno = ETIMEDOUT; > ++ break; > ++#endif > (2969 more lines skipped) > > ++++++ evolution-data-server-contacts-bug-2330.patch (new) > --- evolution-data-server-contacts-bug-2330.patch > +++ evolution-data-server-contacts-bug-2330.patch > +diff --git a/po/zh_CN.po b/po/zh_CN.po > +index ac607f8..c061980 100644 > +--- a/po/zh_CN.po > ++++ b/po/zh_CN.po > +@@ -4819,8 +4819,8 @@ msgid "Category _Name" > + msgstr "类别名称(_N)" > + > + #: ../libedataserverui/e-categories-dialog.ui.h:5 > +-msgid "Item(s) belong to these _categories:" > +-msgstr "项目属于这些类别(_C):" > ++msgid "Item(s) _belong to these categories:" > ++msgstr "项目属于这些类别(_B):" > + > + #: ../libedataserverui/e-categories-dialog.ui.h:6 > + msgid "_Available Categories:" > > _______________________________________________ > Meego-commits mailing list > [email protected] > http://lists.meego.com/listinfo/meego-commits _______________________________________________ MeeGo-packaging mailing list [email protected] http://lists.meego.com/listinfo/meego-packaging
