diff options
author | Federico Mena Quintero <federico@novell.com> | 2010-09-24 11:43:50 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@novell.com> | 2010-09-24 11:43:50 -0500 |
commit | d4f0f65a53f0163e410a06684ac4c3404f5fd989 (patch) | |
tree | 80a3c43b1053bc9f658b12fe1d05c4fe69b6c4fc | |
parent | 192ec4d20f07fb5cf71e02ce5b7ea90eaa99595a (diff) | |
parent | 4eef23360571d75a6cf83fecbc47cf0784e78267 (diff) | |
download | evolution-data-server-camel-socks-proxy.tar.gz |
Merge branch 'gnome-2-30' into camel-socks-proxycamel-socks-proxy
28 files changed, 2679 insertions, 2269 deletions
@@ -1,3 +1,21 @@ +Evolution-Data-Server 2.30.3 2010-08-11 +--------------------------------------- + +Bug Fixes: + Bug 602287 - Avoid racing with camel_operation_mute() (Matthew Barnes) + Bug 622008 - Don't trust is->select_folder in + imapx_job_scan_changes_done() (David Woodhouse) + Bug 623795 - URI at the end of text isn't clickable (Milan Crha) + Bug 623936 - 75 second delay when creating new DAV entries in Zimbra + (Milan Crha) + +Other Changes: + * Tons of IMAPX improvements backported from 2.31 (David Woodhouse) + * Use text/vcard content type on WebDAV PUT request (Milan Crha) + +Translations: + Christian Kirbach (de) + Evolution-Data-Server 2.30.2 2010-06-20 --------------------------------------- diff --git a/addressbook/backends/webdav/e-book-backend-webdav.c b/addressbook/backends/webdav/e-book-backend-webdav.c index b851b1ea5..2ba4536d5 100644 --- a/addressbook/backends/webdav/e-book-backend-webdav.c +++ b/addressbook/backends/webdav/e-book-backend-webdav.c @@ -137,8 +137,8 @@ download_contact(EBookBackendWebdav *webdav, const gchar *uri) guint status; message = soup_message_new(SOUP_METHOD_GET, uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); status = soup_session_send_message(webdav->priv->session, message); if (status != 200) { @@ -198,8 +198,8 @@ upload_contact(EBookBackendWebdav *webdav, EContact *contact) } message = soup_message_new(SOUP_METHOD_PUT, uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); property = e_source_get_property(source, "avoid_ifmatch"); if (property != NULL && strcmp(property, "1") == 0) { @@ -362,8 +362,8 @@ delete_contact(EBookBackendWebdav *webdav, const gchar *uri) guint status; message = soup_message_new(SOUP_METHOD_DELETE, uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); status = soup_session_send_message(webdav->priv->session, message); g_object_unref(message); @@ -656,8 +656,8 @@ send_propfind(EBookBackendWebdav *webdav) "<propfind xmlns=\"DAV:\"><prop><getetag/></prop></propfind>"; message = soup_message_new(SOUP_METHOD_PROPFIND, priv->uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); soup_message_headers_append(message->request_headers, "Depth", "1"); soup_message_set_request(message, "text/xml", SOUP_MEMORY_TEMPORARY, (gchar *) request, strlen(request)); diff --git a/addressbook/libedata-book/e-data-book-factory.c b/addressbook/libedata-book/e-data-book-factory.c index 821764ca5..5781adf07 100644 --- a/addressbook/libedata-book/e-data-book-factory.c +++ b/addressbook/libedata-book/e-data-book-factory.c @@ -38,6 +38,17 @@ #include "e-book-backend.h" #include "e-book-backend-factory.h" +#ifdef G_OS_WIN32 +#include <windows.h> +#include <conio.h> +#ifndef PROCESS_DEP_ENABLE +#define PROCESS_DEP_ENABLE 0x00000001 +#endif +#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION +#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002 +#endif +#endif + #define d(x) static void impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_uri, DBusGMethodInvocation *context); @@ -425,6 +436,28 @@ main (gint argc, gchar **argv) guint32 request_name_ret; EOfflineListener *eol; +#ifdef G_OS_WIN32 + /* Reduce risks */ + { + typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName); + t_SetDllDirectoryA p_SetDllDirectoryA; + + p_SetDllDirectoryA = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetDllDirectoryA"); + if (p_SetDllDirectoryA) + (*p_SetDllDirectoryA) (""); + } +#ifndef _WIN64 + { + typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags); + t_SetProcessDEPPolicy p_SetProcessDEPPolicy; + + p_SetProcessDEPPolicy = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetProcessDEPPolicy"); + if (p_SetProcessDEPPolicy) + (*p_SetProcessDEPPolicy) (PROCESS_DEP_ENABLE|PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION); + } +#endif +#endif + g_type_init (); g_set_prgname (E_PRGNAME); if (!g_thread_supported ()) g_thread_init (NULL); diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c index 41c898d80..5e7ecc4ef 100644 --- a/calendar/backends/caldav/e-cal-backend-caldav.c +++ b/calendar/backends/caldav/e-cal-backend-caldav.c @@ -889,11 +889,14 @@ send_and_handle_redirection (SoupSession *soup_session, SoupMessage *msg, gchar { gchar *old_uri = NULL; + g_return_if_fail (msg != NULL); + if (new_location) old_uri = soup_uri_to_string (soup_message_get_uri (msg), FALSE); soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT); soup_message_add_header_handler (msg, "got_body", "Location", G_CALLBACK (redirect_handler), soup_session); + soup_message_headers_append (msg->request_headers, "Connection", "close"); soup_session_send_message (soup_session, msg); if (new_location) { diff --git a/calendar/libedata-cal/e-data-cal-factory.c b/calendar/libedata-cal/e-data-cal-factory.c index a26d84f28..a50073d1b 100644 --- a/calendar/libedata-cal/e-data-cal-factory.c +++ b/calendar/libedata-cal/e-data-cal-factory.c @@ -46,6 +46,17 @@ #include "e-data-cal-factory.h" #include "e-cal-backend-loader-factory.h" +#ifdef G_OS_WIN32 +#include <windows.h> +#include <conio.h> +#ifndef PROCESS_DEP_ENABLE +#define PROCESS_DEP_ENABLE 0x00000001 +#endif +#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION +#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002 +#endif +#endif + #define d(x) static void impl_CalFactory_getCal (EDataCalFactory *factory, const gchar *IN_uri, EDataCalObjType type, DBusGMethodInvocation *context); @@ -707,6 +718,28 @@ main (gint argc, gchar **argv) guint32 request_name_ret; EOfflineListener *eol; +#ifdef G_OS_WIN32 + /* Reduce risks */ + { + typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName); + t_SetDllDirectoryA p_SetDllDirectoryA; + + p_SetDllDirectoryA = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetDllDirectoryA"); + if (p_SetDllDirectoryA) + (*p_SetDllDirectoryA) (""); + } +#ifndef _WIN64 + { + typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags); + t_SetProcessDEPPolicy p_SetProcessDEPPolicy; + + p_SetProcessDEPPolicy = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetProcessDEPPolicy"); + if (p_SetProcessDEPPolicy) + (*p_SetProcessDEPPolicy) (PROCESS_DEP_ENABLE|PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION); + } +#endif +#endif + setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); diff --git a/camel/Makefile.am b/camel/Makefile.am index 1f2e26d43..bbb0b0c53 100644 --- a/camel/Makefile.am +++ b/camel/Makefile.am @@ -2,8 +2,7 @@ SUBDIRS = . providers tests if OS_WIN32 LIBCAMEL_PLATFORM_DEP_SOURCES = \ - camel-win32.c \ - camel-net-utils-win32.h + camel-win32.c LIBCAMEL_PROVIDER_PLATFORM_DEP_SOURCES = LOCK_HELPER = else diff --git a/camel/camel-net-utils-win32.h b/camel/camel-net-utils-win32.h deleted file mode 100644 index a4f21f513..000000000 --- a/camel/camel-net-utils-win32.h +++ /dev/null @@ -1,381 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER within this package. - */ -#ifndef _CAMEL_NET_UTILS_WIN32_H_ -#define _CAMEL_NET_UTILS_WIN32_H_ - -#include <stdio.h> -#include <stdlib.h> -#include <malloc.h> -#include <string.h> -#include <ws2tcpip.h> - -#define _COMPAT_STRCPY_S(_Dst,_Size,_Src) strcpy((_Dst),(_Src)) -#define _COMPAT_STRCAT_S(_Dst,_Size,_Src) strcat((_Dst),(_Src)) -#define _COMPAT_STRNCPY_S(_Dst,_Size,_Src,_Count) strncpy((_Dst),(_Src),(_Count)); (_Dst)[(_Size) - 1] = 0 -#define _COMPAT_SPRINTF_S_1(_Dst,_Size,_Format,_Arg1) sprintf((_Dst),(_Format),(_Arg1)) - -#ifndef _COMPAT_COUNTOF -#ifndef __cplusplus -#define _COMPAT_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0])) -#else -template <typename __CountofType,size_t _N> char (&__COMPAT_countof_helper(__CountofType (&_Array)[_N]))[_N]; -#define _COMPAT_COUNTOF(_Array) sizeof(__COMPAT_countof_helper(_Array)) -#endif -#endif - -#define CompatMalloc(tSize) calloc(1,(tSize)) -#define CompatFree(p) free(p) -#define CompatSwap(a,b,c) { (c) = (a); (a) = (b); (b) = (c); } -#define getaddrinfo CompatGetAddrInfo -#define getnameinfo CompatGetNameInfo -#define freeaddrinfo CompatFreeAddrInfo - -typedef int (WINAPI *COMPAT_PGETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); -typedef int (WINAPI *COMPAT_PGETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,size_t hostlen,char *serv,size_t servlen,int flags); -typedef void (WINAPI *COMPAT_PFREEADDRINFO)(struct addrinfo *ai); - -G_BEGIN_DECLS - - static char *WINAPI CompatStrdup (const char *pszString) { - char *pszMemory; - size_t cchMemory; - if(!pszString) return(NULL); - cchMemory = strlen(pszString) + 1; - pszMemory = (char *) CompatMalloc(cchMemory); - if(!pszMemory) return(NULL); - _COMPAT_STRCPY_S(pszMemory,cchMemory,pszString); - return pszMemory; - } - - static WINBOOL WINAPI CompatParseV4Address (const char *pszAddress,PDWORD pdwAddress) { - DWORD dwAddress = 0; - const char *pcNext = NULL; - int iCount = 0; - for(pcNext = pszAddress;*pcNext!='\0';pcNext++) - if(*pcNext=='.') iCount++; - if(iCount!=3) return FALSE; - dwAddress = inet_addr(pszAddress); - if(dwAddress==INADDR_NONE) return FALSE; - *pdwAddress = dwAddress; - return TRUE; - } - - static struct addrinfo *WINAPI CompatNewAddrInfo (int iSocketType,int iProtocol,WORD wPort,DWORD dwAddress) { - struct addrinfo *ptNew; - struct sockaddr_in *ptAddress; - ptNew = (struct addrinfo *) CompatMalloc(sizeof(struct addrinfo)); - if(!ptNew) return NULL; - ptAddress = (struct sockaddr_in *) CompatMalloc(sizeof(struct sockaddr_in)); - if(!ptAddress) { - CompatFree(ptNew); - return NULL; - } - ptAddress->sin_family = AF_INET; - ptAddress->sin_port = wPort; - ptAddress->sin_addr.s_addr = dwAddress; - ptNew->ai_family = PF_INET; - ptNew->ai_socktype = iSocketType; - ptNew->ai_protocol = iProtocol; - ptNew->ai_addrlen = sizeof(struct sockaddr_in); - ptNew->ai_addr = (struct sockaddr *) ptAddress; - return ptNew; - } - - static int WINAPI CompatQueryDNS(const char *pszNodeName,int iSocketType,int iProtocol,WORD wPort,char pszAlias[NI_MAXHOST],struct addrinfo **pptResult) { - struct addrinfo **pptNext = pptResult; - struct hostent *ptHost = NULL; - char **ppAddresses; - *pptNext = NULL; - pszAlias[0] = '\0'; - ptHost = gethostbyname(pszNodeName); - if(ptHost) { - if((ptHost->h_addrtype==AF_INET) && (ptHost->h_length==sizeof(struct in_addr))) { - for(ppAddresses = ptHost->h_addr_list;*ppAddresses!=NULL;ppAddresses++) { - *pptNext = CompatNewAddrInfo(iSocketType,iProtocol,wPort,((struct in_addr *) *ppAddresses)->s_addr); - if(!*pptNext) return EAI_MEMORY; - pptNext = &((*pptNext)->ai_next); - } - } - _COMPAT_STRNCPY_S(pszAlias,NI_MAXHOST,ptHost->h_name,NI_MAXHOST - 1); - return 0; - } - switch(WSAGetLastError()) { - case WSAHOST_NOT_FOUND: return EAI_NONAME; - case WSATRY_AGAIN: return EAI_AGAIN; - case WSANO_RECOVERY: return EAI_FAIL; - case WSANO_DATA: return EAI_NODATA; - default: return EAI_NONAME; - } - } - - static int WINAPI CompatLookupNode(const char *pszNodeName,int iSocketType,int iProtocol,WORD wPort,WINBOOL bAI_CANONNAME,struct addrinfo **pptResult) { - int iError = 0; - int iAliasCount = 0; - char szFQDN1[NI_MAXHOST] = ""; - char szFQDN2[NI_MAXHOST] = ""; - char *pszName = szFQDN1; - char *pszAlias = szFQDN2; - char *pszScratch = NULL; - _COMPAT_STRNCPY_S(pszName,NI_MAXHOST,pszNodeName,NI_MAXHOST - 1); - for(;;) { - iError = CompatQueryDNS(pszNodeName,iSocketType,iProtocol,wPort,pszAlias,pptResult); - if(iError) break; - if(*pptResult) break; - if((!strlen(pszAlias)) || (!strcmp(pszName,pszAlias)) || (++iAliasCount==16)) { - iError = EAI_FAIL; - break; - } - CompatSwap(pszName,pszAlias,pszScratch); - } - if(!iError && bAI_CANONNAME) { - (*pptResult)->ai_canonname = CompatStrdup(pszAlias); - if(!(*pptResult)->ai_canonname) iError = EAI_MEMORY; - } - return iError; - } - - static int WINAPI CompatClone (WORD wPort,struct addrinfo *ptResult) { - struct addrinfo *ptNext = NULL; - struct addrinfo *ptNew = NULL; - for(ptNext = ptResult; ptNext!=NULL;) { - ptNew = CompatNewAddrInfo(SOCK_DGRAM,ptNext->ai_protocol,wPort,((struct sockaddr_in *) ptNext->ai_addr)->sin_addr.s_addr); - if(!ptNew) break; - ptNew->ai_next = ptNext->ai_next; - ptNext->ai_next = ptNew; - ptNext = ptNew->ai_next; - } - if(ptNext!=NULL) return EAI_MEMORY; - return 0; - } - - - static void WINAPI CompatLegacyFreeAddrInfo (struct addrinfo *ptHead) { - struct addrinfo *ptNext; - for(ptNext = ptHead;ptNext!=NULL;ptNext = ptHead) { - if(ptNext->ai_canonname) CompatFree(ptNext->ai_canonname); - if(ptNext->ai_addr) CompatFree(ptNext->ai_addr); - ptHead = ptNext->ai_next; - CompatFree(ptNext); - } - } - - static int WINAPI CompatLegacyGetAddrInfo(const char *pszNodeName,const char *pszServiceName,const struct addrinfo *ptHints,struct addrinfo **pptResult) { - int iError = 0; - int iFlags = 0; - int iFamily = PF_UNSPEC; - int iSocketType = 0; - int iProtocol = 0; - WORD wPort = 0; - DWORD dwAddress = 0; - struct servent *ptService = NULL; - char *pc = NULL; - WINBOOL bClone = FALSE; - WORD wTcpPort = 0; - WORD wUdpPort = 0; - *pptResult = NULL; - if((!pszNodeName) && (!pszServiceName)) return EAI_NONAME; - if(ptHints) { - if((ptHints->ai_addrlen!=0) || (ptHints->ai_canonname!=NULL) || (ptHints->ai_addr!=NULL) || (ptHints->ai_next!=NULL)) return EAI_FAIL; - iFlags = ptHints->ai_flags; - if((iFlags & AI_CANONNAME) && !pszNodeName) return EAI_BADFLAGS; - iFamily = ptHints->ai_family; - if((iFamily!=PF_UNSPEC) && (iFamily!=PF_INET)) return EAI_FAMILY; - iSocketType = ptHints->ai_socktype; - if((iSocketType!=0) && (iSocketType!=SOCK_STREAM) && (iSocketType!=SOCK_DGRAM) && (iSocketType!=SOCK_RAW)) return EAI_SOCKTYPE; - iProtocol = ptHints->ai_protocol; - } - if(pszServiceName) { - wPort = (WORD) strtoul(pszServiceName,&pc,10); - if(*pc=='\0') { - wPort = wTcpPort = wUdpPort = htons(wPort); - if(iSocketType==0) { - bClone = TRUE; - iSocketType = SOCK_STREAM; - } - } else { - if((iSocketType==0) || (iSocketType==SOCK_DGRAM)) { - ptService = getservbyname(pszServiceName,"udp"); - if(ptService) wPort = wUdpPort = ptService->s_port; - } - if((iSocketType==0) || (iSocketType==SOCK_STREAM)) { - ptService = getservbyname(pszServiceName,"tcp"); - if(ptService) wPort = wTcpPort = ptService->s_port; - } - if(wPort==0) return (iSocketType ? EAI_SERVICE : EAI_NONAME); - if(iSocketType==0) { - iSocketType = (wTcpPort) ? SOCK_STREAM : SOCK_DGRAM; - bClone = (wTcpPort && wUdpPort); - } - } - } - if((!pszNodeName) || (CompatParseV4Address(pszNodeName,&dwAddress))) { - if(!pszNodeName) { - dwAddress = htonl((iFlags & AI_PASSIVE) ? INADDR_ANY : INADDR_LOOPBACK); - } - *pptResult = CompatNewAddrInfo(iSocketType,iProtocol,wPort,dwAddress); - if(!(*pptResult)) iError = EAI_MEMORY; - if(!iError && pszNodeName) { - (*pptResult)->ai_flags |= AI_NUMERICHOST; - if(iFlags & AI_CANONNAME) { - (*pptResult)->ai_canonname = - CompatStrdup(inet_ntoa(*((struct in_addr *) &dwAddress))); - if(!(*pptResult)->ai_canonname) iError = EAI_MEMORY; - } - } - } else if(iFlags & AI_NUMERICHOST) iError = EAI_NONAME; - else iError = CompatLookupNode(pszNodeName,iSocketType,iProtocol,wPort,(iFlags & AI_CANONNAME),pptResult); - if(!iError && bClone) iError = CompatClone(wUdpPort,*pptResult); - if(iError) { - CompatLegacyFreeAddrInfo(*pptResult); - *pptResult = NULL; - } - return (iError); - } - - static int WINAPI CompatLegacyGetNameInfo(const struct sockaddr *ptSocketAddress,socklen_t tSocketLength,char *pszNodeName,size_t tNodeLength,char *pszServiceName,size_t tServiceLength,int iFlags) { - struct servent *ptService; - WORD wPort; - char szBuffer[] = "65535"; - char *pszService = szBuffer; - struct hostent *ptHost; - struct in_addr tAddress; - char *pszNode = NULL; - char *pc = NULL; - - if((!ptSocketAddress) || (tSocketLength < sizeof(struct sockaddr))) return EAI_FAIL; - if(ptSocketAddress->sa_family!=AF_INET) return EAI_FAMILY; - if(tSocketLength < sizeof(struct sockaddr_in)) return EAI_FAIL; - if(!(pszNodeName && tNodeLength) && !(pszServiceName && tServiceLength)) return EAI_NONAME; - if((iFlags & NI_NUMERICHOST) && (iFlags & NI_NAMEREQD)) return EAI_BADFLAGS; - if(pszServiceName && tServiceLength) { - wPort = ((struct sockaddr_in *) ptSocketAddress)->sin_port; - if(iFlags & NI_NUMERICSERV) { - _COMPAT_SPRINTF_S_1(szBuffer,_COMPAT_COUNTOF(szBuffer),"%u",ntohs(wPort)); - } else { - ptService = getservbyport(wPort,(iFlags & NI_DGRAM) ? "udp" : NULL); - if(ptService && ptService->s_name) { - pszService = ptService->s_name; - } else { - _COMPAT_SPRINTF_S_1(szBuffer,_COMPAT_COUNTOF(szBuffer),"%u",ntohs(wPort)); - } - } - if(tServiceLength > strlen(pszService)) - _COMPAT_STRCPY_S(pszServiceName,tServiceLength,pszService); - else return EAI_FAIL; - } - if(pszNodeName && tNodeLength) { - tAddress = ((struct sockaddr_in *) ptSocketAddress)->sin_addr; - if(iFlags & NI_NUMERICHOST) { - pszNode = inet_ntoa(tAddress); - } else { - ptHost = gethostbyaddr((char *) &tAddress,sizeof(struct in_addr),AF_INET); - if(ptHost && ptHost->h_name) { - pszNode = ptHost->h_name; - if((iFlags & NI_NOFQDN) && ((pc = strchr(pszNode,'.'))!=NULL)) *pc = '\0'; - } else { - if(iFlags & NI_NAMEREQD) { - switch(WSAGetLastError()) { - case WSAHOST_NOT_FOUND: return EAI_NONAME; - case WSATRY_AGAIN: return EAI_AGAIN; - case WSANO_RECOVERY: return EAI_FAIL; - default: return EAI_NONAME; - } - } else pszNode = inet_ntoa(tAddress); - } - } - if(tNodeLength > strlen(pszNode)) _COMPAT_STRCPY_S(pszNodeName,tNodeLength,pszNode); - else return EAI_FAIL; - } - return 0; - } - - typedef struct { - char const *pszName; - FARPROC pfAddress; - } COMPAT_FUNCTION; - -#define COMPAT_FUNCTION_ARRAY { "getaddrinfo",(FARPROC) CompatLegacyGetAddrInfo,"getnameinfo",(FARPROC) CompatLegacyGetNameInfo,"freeaddrinfo",(FARPROC) CompatLegacyFreeAddrInfo,} - - static FARPROC WINAPI CompatLoad(WORD wFunction) { - HMODULE hLibrary = NULL; - static WINBOOL bInitialized = FALSE; - static COMPAT_FUNCTION rgtGlobal[] = COMPAT_FUNCTION_ARRAY; - static const int iNumGlobal = (sizeof(rgtGlobal) / sizeof(COMPAT_FUNCTION)); - COMPAT_FUNCTION rgtLocal[] = COMPAT_FUNCTION_ARRAY; - FARPROC fScratch = NULL; - int i = 0; - if(bInitialized) return (rgtGlobal[wFunction].pfAddress); - for(;;) { - CHAR SystemDir[MAX_PATH + 1]; - CHAR Path[MAX_PATH + 8]; - if(GetSystemDirectoryA(SystemDir,MAX_PATH)==0) break; - _COMPAT_STRCPY_S(Path,_COMPAT_COUNTOF(Path),SystemDir); - _COMPAT_STRCAT_S(Path,_COMPAT_COUNTOF(Path),"\\ws2_32"); - hLibrary = LoadLibraryA(Path); - if(hLibrary!=NULL) { - fScratch = GetProcAddress(hLibrary,"getaddrinfo"); - if(!fScratch) { - FreeLibrary(hLibrary); - hLibrary = NULL; - } - } - if(hLibrary!=NULL) break; - _COMPAT_STRCPY_S(Path,_COMPAT_COUNTOF(Path),SystemDir); - _COMPAT_STRCAT_S(Path,_COMPAT_COUNTOF(Path),"\\wship6"); - hLibrary = LoadLibraryA(Path); - if(hLibrary!=NULL) { - fScratch = GetProcAddress(hLibrary,"getaddrinfo"); - if(!fScratch) { - FreeLibrary(hLibrary); - hLibrary = NULL; - } - } - break; - } - if(hLibrary!=NULL) { - for(i = 0;i < iNumGlobal;i++) { - rgtLocal[i].pfAddress = GetProcAddress(hLibrary,rgtLocal[i].pszName); - if(!(rgtLocal[i].pfAddress)) { - FreeLibrary(hLibrary); - hLibrary = NULL; - break; - } - } - if(hLibrary!=NULL) { - for(i = 0;i < iNumGlobal;i++) - rgtGlobal[i].pfAddress = rgtLocal[i].pfAddress; - } - } - bInitialized = TRUE; - return (rgtGlobal[wFunction].pfAddress); - } - - static int WINAPI CompatGetAddrInfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res) { - int iError; - static COMPAT_PGETADDRINFO pfGetAddrInfo = NULL; - if(!pfGetAddrInfo) pfGetAddrInfo = (COMPAT_PGETADDRINFO) CompatLoad(0); - iError = (*pfGetAddrInfo)(nodename,servname,hints,res); - WSASetLastError(iError); - return iError; - } - - static int WINAPI CompatGetNameInfo (const struct sockaddr *sa,socklen_t salen,char *host,size_t hostlen,char *serv,size_t servlen,int flags) { - int iError; - static COMPAT_PGETNAMEINFO pfGetNameInfo = NULL; - if(!pfGetNameInfo) pfGetNameInfo = (COMPAT_PGETNAMEINFO) CompatLoad(1); - iError = (*pfGetNameInfo)(sa,salen,host,hostlen,serv,servlen,flags); - WSASetLastError(iError); - return iError; - } - - static void WINAPI CompatFreeAddrInfo (struct addrinfo *ai) { - static COMPAT_PFREEADDRINFO pfFreeAddrInfo = NULL; - if(!pfFreeAddrInfo) pfFreeAddrInfo = (COMPAT_PFREEADDRINFO) CompatLoad(2); - (*pfFreeAddrInfo)(ai); - } - -G_END_DECLS -#endif diff --git a/camel/camel-net-utils.c b/camel/camel-net-utils.c index 3ca1ae1e8..aa97ce065 100644 --- a/camel/camel-net-utils.c +++ b/camel/camel-net-utils.c @@ -35,7 +35,11 @@ #include "camel-msgport.h" #include "camel-net-utils.h" #ifdef G_OS_WIN32 -#include "camel-net-utils-win32.h" +#include <winsock2.h> +#include <ws2tcpip.h> +#ifdef HAVE_WSPIAPI_H +#include <wspiapi.h> +#endif #endif #include "camel-operation.h" diff --git a/camel/camel-operation.c b/camel/camel-operation.c index 87425a950..89fbd0596 100644 --- a/camel/camel-operation.c +++ b/camel/camel-operation.c @@ -492,6 +492,8 @@ camel_operation_start (CamelOperation *cc, const gchar *what, ...) va_list ap; gchar *msg; struct _status_stack *s; + CamelOperationStatusFunc status_func; + gpointer status_data; if (cc == NULL) cc = co_getcc(); @@ -516,9 +518,13 @@ camel_operation_start (CamelOperation *cc, const gchar *what, ...) cc->lastreport = s; cc->status_stack = g_slist_prepend(cc->status_stack, s); + /* This avoids a race with camel_operation_mute() after we unlock. */ + status_func = cc->status; + status_data = cc->status_data; + UNLOCK(); - cc->status(cc, msg, CAMEL_OPERATION_START, cc->status_data); + status_func (cc, msg, CAMEL_OPERATION_START, status_data); d(printf("start '%s'\n", msg, pc)); } @@ -543,11 +549,16 @@ camel_operation_start_transient (CamelOperation *cc, const gchar *what, ...) if (cc == NULL) cc = co_getcc(); - if (cc == NULL || cc->status == NULL) + if (cc == NULL) return; LOCK(); + if (cc->status == NULL) { + UNLOCK(); + return; + } + va_start(ap, what); msg = g_strdup_vprintf(what, ap); va_end(ap); @@ -560,9 +571,6 @@ camel_operation_start_transient (CamelOperation *cc, const gchar *what, ...) d(printf("start '%s'\n", msg, pc)); UNLOCK(); - - /* we dont report it yet */ - /*cc->status(cc, msg, CAMEL_OPERATION_START, cc->status_data);*/ } static guint stamp(void) @@ -592,6 +600,8 @@ camel_operation_progress (CamelOperation *cc, gint pc) guint now; struct _status_stack *s; gchar *msg = NULL; + CamelOperationStatusFunc status_func; + gpointer status_data; if (cc == NULL) cc = co_getcc(); @@ -613,10 +623,12 @@ camel_operation_progress (CamelOperation *cc, gint pc) they started, then they update every second */ now = stamp(); if (cc->status_update == now) { - cc = NULL; + UNLOCK(); + return; } else if (s->flags & CAMEL_OPERATION_TRANSIENT) { if (s->stamp + CAMEL_OPERATION_TRANSIENT_DELAY > now) { - cc = NULL; + UNLOCK(); + return; } else { cc->status_update = now; cc->lastreport = s; @@ -628,12 +640,15 @@ camel_operation_progress (CamelOperation *cc, gint pc) msg = g_strdup(s->msg); } + /* This avoids a race with camel_operation_mute() after we unlock. */ + status_func = cc->status; + status_data = cc->status_data; + UNLOCK(); - if (cc) { - cc->status(cc, msg, pc, cc->status_data); - g_free(msg); - } + status_func (cc, msg, pc, status_data); + + g_free(msg); } /** @@ -662,6 +677,8 @@ camel_operation_end (CamelOperation *cc) guint now; gchar *msg = NULL; gint pc = 0; + CamelOperationStatusFunc status_func; + gpointer status_data; if (cc == NULL) cc = co_getcc(); @@ -712,10 +729,14 @@ camel_operation_end (CamelOperation *cc) g_free(s); cc->status_stack = g_slist_delete_link(cc->status_stack, cc->status_stack); + /* This avoids a race with camel_operation_mute() after we unlock. */ + status_func = cc->status; + status_data = cc->status_data; + UNLOCK(); if (msg) { - cc->status(cc, msg, pc, cc->status_data); - g_free(msg); + status_func (cc, msg, pc, status_data); + g_free (msg); } } diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c index 3d9b0c048..87b49d06f 100644 --- a/camel/providers/imapx/camel-imapx-folder.c +++ b/camel/providers/imapx/camel-imapx-folder.c @@ -1,24 +1,23 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-imap-folder.c : class for a imap folder */ - /* * Authors: Michael Zucchi <notzed@ximian.com> * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program 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. + * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -129,25 +128,33 @@ static void imapx_refresh_info (CamelFolder *folder, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; camel_service_connect((CamelService *)istore, ex); - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_refresh_info(istore->server, folder, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_refresh_info(server, folder, ex); + camel_object_unref(server); + } } static void imapx_expunge (CamelFolder *folder, CamelException *ex) { CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (is)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (is->server && camel_imapx_server_connect (is->server, TRUE, ex)) - camel_imapx_server_expunge(is->server, folder, ex); + server = camel_imapx_store_get_server(is, ex); + if (server) { + camel_imapx_server_expunge(server, folder, ex); + camel_object_unref(server); + } } @@ -155,6 +162,7 @@ static void imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex) { CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; CamelException eex = CAMEL_EXCEPTION_INITIALISER; if (CAMEL_OFFLINE_STORE (is)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) @@ -163,17 +171,21 @@ imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex) if (!ex) ex = &eex; - if (is->server && camel_imapx_server_connect (is->server, TRUE, ex)) - camel_imapx_server_sync_changes (is->server, folder, ex); + server = camel_imapx_store_get_server(is, ex); + if (!server) + return; + + camel_imapx_server_sync_changes (server, folder, ex); /* Sync twice - make sure deleted flags are written out, then sync again incase expunge changed anything */ camel_exception_clear(ex); - if (is->server && expunge) { - camel_imapx_server_expunge(is->server, folder, ex); + if (expunge) { + camel_imapx_server_expunge(server, folder, ex); camel_exception_clear(ex); } + camel_object_unref(server); } static CamelMimeMessage * @@ -183,6 +195,7 @@ imapx_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex) CamelStream *stream = NULL; CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) folder; + CamelIMAPXServer *server; const gchar *path = NULL; gboolean offline_message = FALSE; @@ -203,9 +216,12 @@ imapx_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex) if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return NULL; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) { - stream = camel_imapx_server_get_message(istore->server, folder, uid, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + stream = camel_imapx_server_get_message(server, folder, uid, ex); + camel_object_unref(server); } else { + /* It should _always_ be set */ if (!camel_exception_is_set (ex)) camel_exception_setv(ex, 1, "not authenticated"); return NULL; @@ -231,12 +247,16 @@ static void imapx_sync_message (CamelFolder *folder, const gchar *uid, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_sync_message (istore->server, folder, uid, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_sync_message (server, folder, uid, ex); + camel_object_unref(server); + } } static void @@ -245,12 +265,16 @@ imapx_transfer_messages_to (CamelFolder *source, GPtrArray *uids, gboolean delete_originals, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) source->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_copy_message (istore->server, source, dest, uids, delete_originals, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_copy_message (server, source, dest, uids, delete_originals, ex); + camel_object_unref(server); + } imapx_refresh_info (dest, ex); } @@ -259,6 +283,7 @@ static void imapx_append_message(CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, gchar **appended_uid, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; @@ -266,8 +291,11 @@ imapx_append_message(CamelFolder *folder, CamelMimeMessage *message, const Camel if (appended_uid) *appended_uid = NULL; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_append_message(istore->server, folder, message, info, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_append_message(server, folder, message, info, ex); + camel_object_unref(server); + } } gchar * diff --git a/camel/providers/imapx/camel-imapx-folder.h b/camel/providers/imapx/camel-imapx-folder.h index ae7144a23..5371a0da4 100644 --- a/camel/providers/imapx/camel-imapx-folder.h +++ b/camel/providers/imapx/camel-imapx-folder.h @@ -4,21 +4,21 @@ /* * Authors: Michael Zucchi <notzed@ximian.com> * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program 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. + * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef CAMEL_IMAPX_FOLDER_H @@ -48,6 +48,7 @@ typedef struct _CamelIMAPXFolder { guint32 exists_on_server; guint32 unread_on_server; guint64 modseq_on_server; + guint64 uidvalidity_on_server; guint32 uidnext_on_server; /* hash table of UIDs to ignore as recent when updating folder */ diff --git a/camel/providers/imapx/camel-imapx-provider.c b/camel/providers/imapx/camel-imapx-provider.c index 01f547d73..c704ed0f4 100644 --- a/camel/providers/imapx/camel-imapx-provider.c +++ b/camel/providers/imapx/camel-imapx-provider.c @@ -1,26 +1,25 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-pop3-provider.c: pop3 provider registration code */ - /* * Authors : * Dan Winship <danw@ximian.com> * Michael Zucchi <notzed@ximian.com> * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program 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. + * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -40,8 +39,12 @@ static guint imapx_url_hash (gconstpointer key); static gint imapx_url_equal (gconstpointer a, gconstpointer b); CamelProviderConfEntry imapx_conf_entries[] = { - { CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL, + { CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL, N_("Checking for New Mail") }, +/* Not for stable branch -- new string. Set it with gconf-editor instead + { CAMEL_PROVIDER_CONF_CHECKBOX, "use_qresync", NULL, + N_("Use _Quick Resync if the server supports it"), "1" }, +*/ { CAMEL_PROVIDER_CONF_CHECKBOX, "use_idle", NULL, N_("Use I_dle if the server supports it"), "1" }, { CAMEL_PROVIDER_CONF_CHECKBOX, "check_all", NULL, diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 5f3437836..768a4ff44 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1,3 +1,21 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program 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 Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifdef HAVE_CONFIG_H #include <config.h> @@ -139,7 +157,7 @@ struct _CamelIMAPXCommand { const gchar *name; /* command name/type (e.g. FETCH) */ - gchar *select; /* folder to select */ + CamelFolder *select; /* folder to select */ struct _status_info *status; /* status for command, indicates it is complete if != NULL */ @@ -161,7 +179,7 @@ struct _CamelIMAPXCommand { struct _CamelIMAPXJob *job; }; -CamelIMAPXCommand *camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, const gchar *select, const gchar *fmt, ...); +CamelIMAPXCommand *camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, CamelFolder *select, const gchar *fmt, ...); void camel_imapx_command_add(CamelIMAPXCommand *ic, const gchar *fmt, ...); void camel_imapx_command_free(CamelIMAPXCommand *ic); void camel_imapx_command_close(CamelIMAPXCommand *ic); @@ -170,6 +188,7 @@ static gboolean imapx_is_command_queue_empty (CamelIMAPXServer *is); /* states for the connection? */ enum { IMAPX_DISCONNECTED, + IMAPX_SHUTDOWN, IMAPX_CONNECTED, IMAPX_AUTHENTICATED, IMAPX_INITIALISED, @@ -263,6 +282,8 @@ struct _CamelIMAPXJob { /* used for biulding uidset stuff */ gint index; gint last_index; + gboolean update_unseen; + gboolean dummy_exception; struct _uidset_state uidset; /* changes during refresh */ CamelFolderChangeInfo *changes; @@ -273,6 +294,7 @@ struct _CamelIMAPXJob { guint32 off_set; GArray *on_user; /* imapx_flag_change */ GArray *off_user; + gint unread_change; } sync_changes; struct { gchar *path; @@ -307,6 +329,7 @@ struct _CamelIMAPXJob { } u; }; +static CamelIMAPXJob *imapx_match_active_job (CamelIMAPXServer *is, guint32 type, const gchar *uid); static void imapx_job_done (CamelIMAPXServer *is, CamelIMAPXJob *job); static void imapx_run_job (CamelIMAPXServer *is, CamelIMAPXJob *job); static void imapx_job_fetch_new_messages_start (CamelIMAPXServer *is, CamelIMAPXJob *job); @@ -501,7 +524,7 @@ imapx_command_add_part(CamelIMAPXCommand *ic, camel_imapx_command_part_t type, g } if (type & CAMEL_IMAPX_COMMAND_LITERAL_PLUS) { - if (ic->is->cinfo && ic->is->cinfo->capa & IMAPX_CAPABILITY_LITERALPLUS) { + if (ic->is->cinfo->capa & IMAPX_CAPABILITY_LITERALPLUS) { camel_stream_printf((CamelStream *)ic->mem, "{%u+}", ob_size); } else { type &= ~CAMEL_IMAPX_COMMAND_LITERAL_PLUS; @@ -716,7 +739,7 @@ imapx_command_addv(CamelIMAPXCommand *ic, const gchar *fmt, va_list ap) } CamelIMAPXCommand * -camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, const gchar *select, const gchar *fmt, ...) +camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, CamelFolder *select, const gchar *fmt, ...) { CamelIMAPXCommand *ic; static gint tag = 0; @@ -726,7 +749,7 @@ camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, const gchar *se ic->tag = tag++; ic->name = name; ic->mem = (CamelStreamMem *)camel_stream_mem_new(); - ic->select = g_strdup(select); + ic->select = select; ic->is = is; camel_dlist_init(&ic->parts); ic->ex = camel_exception_new (); @@ -765,8 +788,7 @@ camel_imapx_command_free(CamelIMAPXCommand *ic) if (ic->mem) camel_object_unref((CamelObject *)ic->mem); imapx_free_status(ic->status); - g_free(ic->select); - + while ((cp = ((CamelIMAPXCommandPart *)camel_dlist_remhead(&ic->parts)))) { g_free(cp->data); if (cp->ob) { @@ -844,6 +866,21 @@ imapx_command_start (CamelIMAPXServer *imap, CamelIMAPXCommand *ic) return TRUE; } +static gboolean duplicate_fetch_or_refresh(CamelIMAPXServer *is, CamelIMAPXCommand *ic) +{ + if (!ic->job) + return FALSE; + + if (!(ic->job->type & (IMAPX_JOB_FETCH_NEW_MESSAGES|IMAPX_JOB_REFRESH_INFO))) + return FALSE; + + if (imapx_match_active_job (is, IMAPX_JOB_FETCH_NEW_MESSAGES|IMAPX_JOB_REFRESH_INFO, NULL)) { + c(printf("Not yet sending duplicate fetch/refresh %s command\n", ic->name)); + return TRUE; + } + + return FALSE; +} /* See if we can start another task yet. If we're waiting for a literal, we cannot proceed. @@ -881,7 +918,7 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) nc = ic->next; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { c(printf("-- %3d '%s'?\n", (gint)ic->pri, ic->name)); - if (ic->select == NULL) { + if (!ic->select) { c(printf("--> starting '%s'\n", ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); @@ -905,7 +942,9 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) if (imapx_in_idle (is) && !camel_dlist_empty (&is->queue)) { /* if imapx_stop_idle() returns FALSE, it was only pending and we can go ahead and send a new command - immediately. If it returns TRUE, we must wait. */ + immediately. If it returns TRUE, either it sent the + DONE to exit IDLE mode, or there was an error. + Either way, we do nothing more right now. */ if (imapx_stop_idle (is, ex)) { c(printf ("waiting for idle to stop \n")); return; @@ -925,8 +964,9 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) } /* See if any queued jobs on this select first */ - if (is->select) { - c(printf("- we're selected on '%s', current jobs?\n", is->select)); + if (is->select_folder) { + c(printf("- we're selected on '%s', current jobs?\n", + camel_folder_get_full_name(is->select_folder))); for (ic = (CamelIMAPXCommand *)is->active.head;ic->next;ic=ic->next) { c(printf("- %3d '%s'\n", (gint)ic->pri, ic->name)); if (ic->pri > pri) @@ -944,7 +984,8 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) nc = ic->next; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { c(printf("-- %3d '%s'?\n", (gint)ic->pri, ic->name)); - if (ic->select == NULL || strcmp(ic->select, is->select) == 0) { + if (!ic->select || ((ic->select == is->select_folder) && + !duplicate_fetch_or_refresh(is, ic))) { c(printf("--> starting '%s'\n", ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); @@ -968,14 +1009,17 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) /* If we need to select a folder for the first command, do it now, once it is complete it will re-call us if it succeeded */ - if (ic->job->folder) { - imapx_select(is, ic->job->folder, FALSE, ex); + if (ic->select) { + c(printf("Selecting folder '%s' for command '%s'(%p)\n", + camel_folder_get_full_name(ic->select), ic->name, ic)); + imapx_select(is, ic->select, FALSE, ex); } else { pri = ic->pri; nc = ic->next; count = 0; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { - if (ic->select == NULL || (is->select && strcmp(ic->select, is->select))) { + if (!ic->select || (ic->select == is->select_folder && + !duplicate_fetch_or_refresh(is, ic))) { c(printf("* queueing job %3d '%s'\n", (gint)ic->pri, ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); @@ -1013,6 +1057,15 @@ imapx_command_queue(CamelIMAPXServer *is, CamelIMAPXCommand *ic) QUEUE_LOCK(is); + if (is->state == IMAPX_SHUTDOWN) { + c(printf("refuse to queue job on disconnected server\n")); + camel_exception_set(ic->ex, 1, "Server disconnected"); + QUEUE_UNLOCK(is); + if (ic->complete) + ic->complete(is, ic); + return; + } + scan = (CamelIMAPXCommand *)is->queue.head; if (scan->next == NULL) camel_dlist_addtail(&is->queue, (CamelDListNode *)ic); @@ -1058,20 +1111,19 @@ found: } static gboolean -imapx_job_matches (const gchar *folder_name, CamelIMAPXJob *job, guint32 type, const gchar *uid) +imapx_job_matches (CamelFolder *folder, CamelIMAPXJob *job, guint32 type, const gchar *uid) { switch (job->type) { case IMAPX_JOB_GET_MESSAGE: - if (folder_name && strcmp(job->folder->full_name, folder_name) == 0 - && strcmp(job->u.get_message.uid, uid) == 0) + if (folder == job->folder && + strcmp(job->u.get_message.uid, uid) == 0) return TRUE; break; case IMAPX_JOB_FETCH_NEW_MESSAGES: case IMAPX_JOB_REFRESH_INFO: case IMAPX_JOB_SYNC_CHANGES: case IMAPX_JOB_EXPUNGE: - if (folder_name - && strcmp(job->folder->full_name, folder_name) == 0) + if (folder == job->folder) return TRUE; break; case IMAPX_JOB_LIST: @@ -1095,7 +1147,7 @@ imapx_match_active_job (CamelIMAPXServer *is, guint32 type, const gchar *uid) if (!job || !(job->type & type)) continue; - if (imapx_job_matches (is->select, job, type, uid)) + if (imapx_job_matches (is->select_folder, job, type, uid)) goto found; } job = NULL; @@ -1105,7 +1157,7 @@ found: } static CamelIMAPXJob * -imapx_is_job_in_queue (CamelIMAPXServer *is, const gchar *folder_name, guint32 type, const gchar *uid) +imapx_is_job_in_queue (CamelIMAPXServer *is, CamelFolder *folder, guint32 type, const gchar *uid) { CamelDListNode *node; CamelIMAPXJob *job = NULL; @@ -1119,7 +1171,7 @@ imapx_is_job_in_queue (CamelIMAPXServer *is, const gchar *folder_name, guint32 t if (!job || !(job->type & type)) continue; - if (imapx_job_matches (folder_name, job, type, uid)) { + if (imapx_job_matches (folder, job, type, uid)) { found = TRUE; break; } @@ -1134,12 +1186,12 @@ imapx_is_job_in_queue (CamelIMAPXServer *is, const gchar *folder_name, guint32 t } static void -imapx_expunge_uid_from_summary(CamelIMAPXServer *imap, gchar *uid) +imapx_expunge_uid_from_summary(CamelIMAPXServer *imap, gchar *uid, gboolean unsolicited) { CamelMessageInfo *mi; CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)imap->select_folder; - if (ifolder->exists_on_server) + if (unsolicited && ifolder->exists_on_server) ifolder->exists_on_server--; if (imap->changes == NULL) @@ -1147,7 +1199,7 @@ imapx_expunge_uid_from_summary(CamelIMAPXServer *imap, gchar *uid) mi = camel_folder_summary_uid (imap->select_folder->summary, uid); if (mi) { - imapx_update_summary_for_removed_message (mi, imap->select_folder); + imapx_update_summary_for_removed_message (mi, imap->select_folder, unsolicited); camel_message_info_free (mi); } @@ -1221,21 +1273,40 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) if (!uid) break; - imapx_expunge_uid_from_summary(imap, uid); + imapx_expunge_uid_from_summary(imap, uid, TRUE); } break; } case IMAPX_VANISHED: { - GPtrArray *uids = imapx_parse_uids(imap->stream, ex); + GPtrArray *uids; + gboolean unsolicited = TRUE; int i; + guint len; + guchar *token; + gint tok; + + tok = camel_imapx_stream_token (imap->stream, &token, &len, ex); + if (camel_exception_is_set(ex)) + return -1; + if (tok == '(') { + unsolicited = FALSE; + while (tok != ')') { + /* We expect this to be 'EARLIER' */ + tok = camel_imapx_stream_token(imap->stream, &token, &len, ex); + if (camel_exception_is_set(ex)) + return -1; + } + } else + camel_imapx_stream_ungettoken(imap->stream, tok, token, len); + uids = imapx_parse_uids(imap->stream, ex); if (camel_exception_is_set(ex)) return -1; for (i = 0; i < uids->len; i++) { gchar *uid = g_strdup_printf("%u", GPOINTER_TO_UINT(g_ptr_array_index (uids, i))); c(printf("vanished: %s\n", uid)); - imapx_expunge_uid_from_summary(imap, uid); + imapx_expunge_uid_from_summary(imap, uid, unsolicited); } g_ptr_array_free (uids, FALSE); break; @@ -1343,9 +1414,11 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) if (uid) { mi = camel_folder_summary_uid (folder->summary, uid); - if (mi) - changed = imapx_update_message_info_flags (mi, finfo->flags, finfo->user_flags, folder); - else { + if (mi) { + /* It's unsolicited _unless_ imap->select_pending (i.e. during + a QRESYNC SELECT */ + changed = imapx_update_message_info_flags (mi, finfo->flags, finfo->user_flags, folder, !imap->select_pending); + } else { /* This (UID + FLAGS for previously unknown message) might happen during a SELECT (QRESYNC). We should use it. */ c(printf("flags changed for unknown uid %s\n.", uid)); @@ -1395,6 +1468,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) guint32 server_flags; CamelFlag *server_user_flags; CamelMessageInfoBase *binfo; + gboolean free_user_flags = FALSE; mi->uid = camel_pstring_strdup (finfo->uid); @@ -1433,6 +1507,24 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) server_user_flags = finfo->user_flags; /* free user_flags ? */ finfo->user_flags = NULL; + free_user_flags = TRUE; + } + + /* If the message is a really new one -- equal or higher than what + we know as UIDNEXT for the folder, then it came in since we last + fetched UIDNEXT and UNREAD count. We'll update UIDNEXT in the + command completion, but update UNREAD count now according to the + message SEEN flag */ + if (!(server_flags & CAMEL_MESSAGE_SEEN)) { + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)job->folder; + unsigned long long uidl = strtoull(mi->uid, NULL, 10); + + if (uidl >= ifolder->uidnext_on_server) { + c(printf("Updating unread count for new message %s\n", mi->uid)); + ((CamelIMAPXFolder *)job->folder)->unread_on_server++; + } else { + c(printf("Not updating unread count for new message %s\n", mi->uid)); + } } binfo = (CamelMessageInfoBase *) mi; @@ -1450,10 +1542,15 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) g_hash_table_remove (ifolder->ignore_recent, mi->uid); } - if (job->op) - camel_operation_progress (job->op, (camel_folder_summary_count (job->folder->summary) - * 100)/ifolder->exists_on_server?:1); + if (job->op) { + int cnt = (camel_folder_summary_count (job->folder->summary) * 100 )/ifolder->exists_on_server; + camel_operation_progress (job->op, cnt?cnt:1); + } } + + if (free_user_flags && server_user_flags) + camel_flag_list_free (&server_user_flags); + } } } @@ -1513,6 +1610,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) ifolder->exists_on_server = sinfo->messages; ifolder->modseq_on_server = sinfo->highestmodseq; ifolder->uidnext_on_server = sinfo->uidnext; + ifolder->uidvalidity_on_server = sinfo->uidvalidity; } else { c(printf("Received STATUS for unknown folder '%s'\n", sinfo->name)); } @@ -1530,7 +1628,8 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) c(printf("BYE: %s\n", token)); camel_exception_setv(ex, 1, "IMAP server said BYE: %s", token); } - break; + imap->state = IMAPX_SHUTDOWN; + return -1; } case IMAPX_PREAUTH: c(printf("preauthenticated\n")); @@ -1549,11 +1648,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) case IMAPX_CLOSED: c(printf("previously selected folder is now closed\n")); if (imap->select_pending && !imap->select_folder) { - const gchar *full_name; imap->select_folder = imap->select_pending; - full_name = camel_folder_get_full_name (imap->select_folder); - - imap->select = g_strdup(full_name); } break; case IMAPX_READ_WRITE: @@ -1587,10 +1682,11 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) break; case IMAPX_CAPABILITY: if (sinfo->u.cinfo) { - if (imap->cinfo) - imapx_free_capability(imap->cinfo); + struct _capability_info *cinfo = imap->cinfo; imap->cinfo = sinfo->u.cinfo; sinfo->u.cinfo = NULL; + if (cinfo) + imapx_free_capability(cinfo); c(printf("got capability flags %08x\n", imap->cinfo->capa)); } break; @@ -1631,7 +1727,10 @@ imapx_continuation(CamelIMAPXServer *imap, CamelException *ex, gboolean litplus) /* IDLE got cancelled after we sent the command, while we were waiting for this continuation. Send DONE immediately. */ - imapx_command_idle_stop(imap, ex); + if (!imapx_command_idle_stop (imap, ex)) { + IDLE_UNLOCK(imap->idle); + return -1; + } imap->idle->state = IMAPX_IDLE_OFF; } else { c(printf("idle starts in wrong state %d\n", @@ -1685,7 +1784,7 @@ imapx_continuation(CamelIMAPXServer *imap, CamelException *ex, gboolean litplus) c(printf("got auth continuation, feeding token '%s' back to auth mech\n", resp)); camel_stream_write((CamelStream *)imap->stream, resp, strlen(resp)); - + g_free(resp); /* we want to keep getting called until we get a status reponse from the server ignore what sasl tells us */ newliteral = ic; @@ -1899,6 +1998,10 @@ imapx_job_done (CamelIMAPXServer *is, CamelIMAPXJob *job) if (job->noreply) { camel_exception_clear(job->ex); + if (job->type == IMAPX_JOB_FETCH_NEW_MESSAGES && + job->u.refresh_info.dummy_exception) + camel_exception_free (job->ex); + g_free(job); } else camel_msgport_reply((CamelMsg *) job); @@ -1954,6 +2057,11 @@ imapx_command_idle_stop (CamelIMAPXServer *is, CamelException *ex) { if (!is->stream || camel_stream_printf((CamelStream *)is->stream, "%s", "DONE\r\n") == -1) { camel_exception_set (ex, 1, "Unable to issue DONE"); + c(printf("Failed to issue DONE to terminate IDLE\n")); + is->state = IMAPX_SHUTDOWN; + if (is->op) + camel_operation_cancel(is->op); + is->parser_quit = TRUE; return FALSE; } @@ -1986,7 +2094,7 @@ imapx_job_idle_start(CamelIMAPXServer *is, CamelIMAPXJob *job) CamelIMAPXCommand *ic; CamelIMAPXCommandPart *cp; - ic = camel_imapx_command_new (is, "IDLE", job->folder->full_name, "IDLE"); + ic = camel_imapx_command_new (is, "IDLE", job->folder, "IDLE"); ic->job = job; ic->pri = job->pri; ic->complete = imapx_command_idle_done; @@ -2026,7 +2134,8 @@ camel_imapx_server_idle (CamelIMAPXServer *is, CamelFolder *folder, CamelExcepti } static void -imapx_server_fetch_new_messages (CamelIMAPXServer *is, CamelFolder *folder, gboolean async, CamelException *ex) +imapx_server_fetch_new_messages (CamelIMAPXServer *is, CamelFolder *folder, gboolean async, + gboolean update_unseen, CamelException *ex) { CamelIMAPXJob *job; @@ -2035,8 +2144,13 @@ imapx_server_fetch_new_messages (CamelIMAPXServer *is, CamelFolder *folder, gboo job->start = imapx_job_fetch_new_messages_start; job->folder = folder; job->noreply = async; + if (!ex) { + job->u.refresh_info.dummy_exception = TRUE; + ex = camel_exception_new (); + } job->ex = ex; job->u.refresh_info.changes = camel_folder_change_info_new(); + job->u.refresh_info.update_unseen = update_unseen; job->op = camel_operation_registered (); if (imapx_register_job (is, job)) @@ -2074,7 +2188,7 @@ imapx_idle_thread (gpointer data) if (!camel_exception_is_set (ex) && ifolder->exists_on_server > camel_folder_summary_count (((CamelFolder *) ifolder)->summary) && imapx_is_command_queue_empty (is)) - imapx_server_fetch_new_messages (is, is->select_folder, TRUE, ex); + imapx_server_fetch_new_messages (is, is->select_folder, TRUE, TRUE, ex); if (camel_exception_is_set (ex)) { e(printf ("Caught exception in idle thread: %s \n", ex->desc)); @@ -2114,9 +2228,13 @@ imapx_stop_idle (CamelIMAPXServer *is, CamelException *ex) break; case IMAPX_IDLE_STARTED: - imapx_command_idle_stop (is, ex); - idle->state = IMAPX_IDLE_OFF; + /* We set 'stopped' even if sending DONE fails, to ensure that + our caller doesn't try to submit its own command. */ stopped = TRUE; + if (!imapx_command_idle_stop (is, ex)) + break; + + idle->state = IMAPX_IDLE_OFF; c(printf("Stopping idle after %ld seconds\n", (long)(now - idle->started))); case IMAPX_IDLE_PENDING: @@ -2208,7 +2326,7 @@ imapx_in_idle (CamelIMAPXServer *is) static gboolean imapx_idle_supported (CamelIMAPXServer *is) { - return (is->cinfo && is->cinfo->capa & IMAPX_CAPABILITY_IDLE && is->use_idle); + return (is->cinfo->capa & IMAPX_CAPABILITY_IDLE && is->use_idle); } // end IDLE @@ -2216,7 +2334,6 @@ imapx_idle_supported (CamelIMAPXServer *is) static void imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) { - if (camel_exception_is_set (ic->ex) || ic->status->result != IMAPX_OK) { CamelDList failed; CamelIMAPXCommand *cw, *cn; @@ -2230,7 +2347,9 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (is->select_pending) { while (cn) { - if (cw->select && strcmp(cw->select, is->select_pending->full_name) == 0) { + if (cw->select && cw->select == is->select_pending) { + c(printf("Cancelling command '%s'(%p) for folder '%s'\n", + cw->name, cw, camel_folder_get_full_name(cw->select))); camel_dlist_remove((CamelDListNode *)cw); camel_dlist_addtail(&failed, (CamelDListNode *)cw); } @@ -2247,7 +2366,13 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) while (cn) { if (ic->status) cw->status = imapx_copy_status(ic->status); - camel_exception_setv (cw->ex, 1, "select %s failed", cw->select); + if (camel_exception_is_set(ic->ex)) + camel_exception_xfer (cw->ex, ic->ex); + else { + camel_exception_setv (cw->ex, 1, "SELECT %s failed: %s", + camel_folder_get_full_name(cw->select), + ic->status->text?ic->status->text:"<unknown reason>"); + } cw->complete(is, cw); cw = cn; cn = cn->next; @@ -2257,11 +2382,9 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) camel_object_unref(is->select_pending); /* A [CLOSED] status may have caused us to assume that it had happened */ - if (is->select) { - g_free(is->select); - is->select = NULL; + if (is->select_folder) is->select_folder = NULL; - } + is->state = IMAPX_INITIALISED; } else { CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) is->select_pending; @@ -2270,12 +2393,17 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (!is->select_folder) { /* This could have been done earlier by a [CLOSED] status */ is->select_folder = is->select_pending; - is->select = g_strdup(is->select_folder->full_name); } is->state = IMAPX_SELECTED; ifolder->exists_on_server = is->exists; ifolder->modseq_on_server = is->highestmodseq; - ifolder->uidnext_on_server = is->uidnext; + if (ifolder->uidnext_on_server < is->uidnext) { + imapx_server_fetch_new_messages (is, is->select_pending, TRUE, TRUE, NULL); + /* We don't do this right now because we want the new messages to + update the unseen count. */ + //ifolder->uidnext_on_server = is->uidnext; + } + ifolder->uidvalidity_on_server = is->uidvalidity; #if 0 /* This must trigger a complete index rebuild! */ if (is->uidvalidity && is->uidvalidity != ((CamelIMAPXSummary *)is->select_folder->summary)->uidvalidity) @@ -2314,7 +2442,7 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE if (is->select_pending) return; - if (is->select && strcmp(is->select, folder->full_name) == 0 && !forced) + if (is->select_folder == folder && !forced) return; if (!camel_dlist_empty(&is->active)) @@ -2323,15 +2451,12 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE is->select_pending = folder; camel_object_ref(folder); if (is->select_folder) { - g_free(is->select); camel_object_unref(is->select_folder); - is->select = NULL; is->select_folder = NULL; } else { /* If no folder was selected, we won't get a [CLOSED] status so just point select_folder at the new folder immediately */ is->select_folder = is->select_pending; - is->select = g_strdup(is->select_folder->full_name); } is->uidvalidity = 0; @@ -2347,6 +2472,66 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE is->state = IMAPX_INITIALISED; ic = camel_imapx_command_new(is, "SELECT", NULL, "SELECT %f", folder); + + if (is->use_qresync) { + CamelIMAPXSummary *isum = (CamelIMAPXSummary *)folder->summary; + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)folder; + gint total = camel_folder_summary_count(folder->summary); + const gchar *uid = "1"; + + if (total) + uid = camel_folder_summary_uid_from_index (folder->summary, 0); + + if (isum->modseq && ifolder->uidvalidity_on_server) { + c(printf("SELECT QRESYNC %ld %ld\n", ifolder->uidvalidity_on_server, isum->modseq)); + camel_imapx_command_add(ic, " (QRESYNC (%ld %ld %s:*", ifolder->uidvalidity_on_server, isum->modseq, uid); + + if (total > 10) { + int i; + GString *seqs, *uids; + + seqs = g_string_new(" "); + uids = g_string_new(")"); + + /* Include some seq/uid pairs to avoid a huge VANISHED list + (see RFC5162 §3.1). Work backwards exponentially from the + end of the mailbox, starting with the message 9 from the + end, then 27 from the end, then 81 from the end... */ + i = 3; + do { + gchar buf[10]; + + i *= 3; + if (i > total) + i = total; + + if (i != 9) { /* If not the first time */ + g_string_prepend(seqs, ","); + g_string_prepend(uids, ","); + } + + /* IMAP sequence numbers are one higher than the corresponding + indices in our folder summary -- they start from one, while + the summary starts from zero. */ + sprintf(buf, "%d", total - i + 1); + g_string_prepend(seqs, buf); + g_string_prepend(uids, camel_folder_summary_uid_from_index(folder->summary, total - i)); + } while (i < total); + + g_string_prepend(seqs, " ("); + + c(printf("adding QRESYNC seq/uidset %s%s\n", seqs->str, uids->str)); + camel_imapx_command_add(ic, seqs->str); + camel_imapx_command_add(ic, uids->str); + + g_string_free(seqs, TRUE); + g_string_free(uids, TRUE); + + } + camel_imapx_command_add(ic, "))"); + } + } + ic->complete = imapx_command_select_done; imapx_command_start (is, ic); } @@ -2701,7 +2886,7 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex) goto preauthed; if (!authtype && service->url->authmech) { - if (is->cinfo && !g_hash_table_lookup (is->cinfo->auth_types, service->url->authmech)) { + if (!g_hash_table_lookup (is->cinfo->auth_types, service->url->authmech)) { camel_exception_setv ( ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE, _("IMAP server %s does not support requested " @@ -2828,6 +3013,19 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex) if (camel_exception_is_set (ex)) goto exception; } + if (((CamelIMAPXStore *)is->store)->rec_options & IMAPX_USE_QRESYNC && + is->cinfo->capa & IMAPX_CAPABILITY_QRESYNC) { + ic = camel_imapx_command_new (is, "ENABLE", NULL, "ENABLE CONDSTORE QRESYNC"); + imapx_command_run (is, ic); + camel_exception_xfer (ex, ic->ex); + camel_imapx_command_free (ic); + + if (camel_exception_is_set (ex)) + goto exception; + + is->use_qresync = TRUE; + } else + is->use_qresync = FALSE; if (((CamelIMAPXStore *) is->store)->summary->namespaces == NULL) { CamelIMAPXNamespaceList *nsl = NULL; @@ -2890,7 +3088,7 @@ imapx_command_fetch_message_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (job->op) camel_operation_progress (job->op, (job->u.get_message.fetch_offset *100)/job->u.get_message.size); - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH %t (BODY.PEEK[]", job->u.get_message.uid); camel_imapx_command_add(ic, "<%u.%u>", job->u.get_message.fetch_offset, MULTI_SIZE); camel_imapx_command_add(ic, ")"); @@ -2956,7 +3154,7 @@ imapx_job_get_message_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (job->u.get_message.use_multi_fetch) { for (i=0; i < 3 && job->u.get_message.fetch_offset < job->u.get_message.size;i++) { - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH %t (BODY.PEEK[]", job->u.get_message.uid); camel_imapx_command_add(ic, "<%u.%u>", job->u.get_message.fetch_offset, MULTI_SIZE); camel_imapx_command_add(ic, ")"); @@ -2968,7 +3166,7 @@ imapx_job_get_message_start (CamelIMAPXServer *is, CamelIMAPXJob *job) imapx_command_queue(is, ic); } } else { - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH %t (BODY.PEEK[])", job->u.get_message.uid); ic->complete = imapx_command_fetch_message_done; ic->job = job; @@ -2987,7 +3185,7 @@ imapx_command_copy_messages_step_start (CamelIMAPXServer *is, CamelIMAPXJob *job GPtrArray *uids = job->u.copy_messages.uids; gint i = index; - ic = camel_imapx_command_new (is, "COPY", job->folder->full_name, "UID COPY "); + ic = camel_imapx_command_new (is, "COPY", job->folder, "UID COPY "); ic->complete = imapx_command_copy_messages_step_done; ic->job = job; ic->pri = job->pri; @@ -3097,7 +3295,7 @@ imapx_command_append_message_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (!camel_exception_is_set (ic->ex) && ic->status->result == IMAPX_OK) { if (ic->status->condition == IMAPX_APPENDUID) { c(printf("Got appenduid %d %d\n", (gint)ic->status->u.appenduid.uidvalidity, (gint)ic->status->u.appenduid.uid)); - if (ic->status->u.appenduid.uidvalidity == is->uidvalidity) { + if (ic->status->u.appenduid.uidvalidity == ifolder->uidvalidity_on_server) { CamelFolderChangeInfo *changes; gchar *uid; @@ -3109,7 +3307,10 @@ imapx_command_append_message_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) /* should we update the message count ? */ camel_folder_summary_add (job->folder->summary, mi); - + imapx_set_message_info_flags_for_new_message (mi, + ((CamelMessageInfoBase *)job->u.append_message.info)->flags, + ((CamelMessageInfoBase *)job->u.append_message.info)->user_flags, + job->folder); changes = camel_folder_change_info_new (); camel_folder_change_info_add_uid (changes, mi->uid); camel_object_trigger_event (CAMEL_OBJECT (job->folder), "folder_changed", @@ -3224,6 +3425,8 @@ imapx_index_next (GPtrArray *uids, CamelFolderSummary *s, guint index) static void imapx_command_step_fetch_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) { + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)ic->job->folder; + CamelIMAPXSummary *isum = (CamelIMAPXSummary *)ic->job->folder->summary; CamelIMAPXJob *job = ic->job; gint i = job->u.refresh_info.index; GArray *infos = job->u.refresh_info.infos; @@ -3248,7 +3451,7 @@ imapx_command_step_fetch_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (i<infos->len) { camel_imapx_command_free (ic); - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, "UID FETCH "); + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH "); ic->complete = imapx_command_step_fetch_done; ic->job = job; ic->pri = job->pri - 1; @@ -3277,10 +3480,27 @@ imapx_command_step_fetch_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) } } + if (camel_folder_summary_count(job->folder->summary)) { + gchar *uid = camel_folder_summary_uid_from_index (job->folder->summary, + camel_folder_summary_count(job->folder->summary) - 1); + unsigned long long uidl = strtoull(uid, NULL, 10); + g_free(uid); + + uidl++; + + if (uidl > ifolder->uidnext_on_server) { + c(printf("Updating uidnext_on_server for '%s' to %lld\n", + camel_folder_get_full_name(job->folder), uidl)); + ifolder->uidnext_on_server = uidl; + } + } + isum->uidnext = ifolder->uidnext_on_server; + cleanup: for (i=0;i<infos->len;i++) { struct _refresh_info *r = &g_array_index(infos, struct _refresh_info, i); + camel_flag_list_free (&r->server_user_flags); g_free(r->uid); } g_array_free(job->u.refresh_info.infos, TRUE); @@ -3374,7 +3594,7 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (s_minfo && uid_cmp(s_minfo->uid, r->uid, s) == 0) { info = (CamelIMAPXMessageInfo *)s_minfo; - if (imapx_update_message_info_flags ((CamelMessageInfo *) info, r->server_flags, r->server_user_flags, job->folder)) + if (imapx_update_message_info_flags ((CamelMessageInfo *) info, r->server_flags, r->server_user_flags, job->folder, FALSE)) camel_folder_change_info_change_uid (job->u.refresh_info.changes, camel_message_info_uid (s_minfo)); r->exists = TRUE; } else @@ -3416,7 +3636,7 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) mi = camel_folder_summary_uid (job->folder->summary, uid); if (mi) { - imapx_update_summary_for_removed_message (mi, job->folder); + imapx_update_summary_for_removed_message (mi, job->folder, FALSE); camel_message_info_free (mi); } @@ -3442,7 +3662,9 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (fetch_new) { camel_operation_start (job->op, _("Fetching summary information for new messages in %s"), job->folder->name); imapx_uidset_init(&job->u.refresh_info.uidset, BATCH_FETCH_COUNT, 0); - /* command will be free'ed in step_fetch_done */ + /* These are new messages which arrived since we last knew the unseen count; + update it as they arrive. */ + job->u.refresh_info.update_unseen = TRUE; imapx_command_step_fetch_done(is, ic); return; } @@ -3456,6 +3678,7 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) for (i=0;i<infos->len;i++) { struct _refresh_info *r = &g_array_index(infos, struct _refresh_info, i); + camel_flag_list_free (&r->server_user_flags); g_free(r->uid); } @@ -3473,9 +3696,11 @@ imapx_job_scan_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) { CamelIMAPXCommand *ic; - camel_operation_start (job->op, _("Scanning for changed messages in %s"), job->folder->name); + camel_operation_start ( + job->op, _("Scanning for changed messages in %s"), + job->folder->name); - ic = camel_imapx_command_new (is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new (is, "FETCH", job->folder, "UID FETCH 1:* (UID FLAGS)"); ic->job = job; ic->complete = imapx_job_scan_changes_done; @@ -3497,7 +3722,6 @@ imapx_command_fetch_new_messages_done (CamelIMAPXServer *is, CamelIMAPXCommand * camel_exception_xfer (ic->job->ex, ic->ex); goto exception; } - isum->uidnext = ifolder->uidnext_on_server; if (camel_folder_change_info_changed(ic->job->u.refresh_info.changes)) { imapx_update_store_summary (ic->job->folder); @@ -3506,6 +3730,23 @@ imapx_command_fetch_new_messages_done (CamelIMAPXServer *is, CamelIMAPXCommand * camel_folder_change_info_clear(ic->job->u.refresh_info.changes); } + if (camel_folder_summary_count(ic->job->folder->summary)) { + gchar *uid = camel_folder_summary_uid_from_index (ic->job->folder->summary, + camel_folder_summary_count(ic->job->folder->summary) - 1); + unsigned long long uidl = strtoull(uid, NULL, 10); + g_free(uid); + + uidl++; + + if (uidl > ifolder->uidnext_on_server) { + c(printf("Updating uidnext_on_server for '%s' to %lld\n", + camel_folder_get_full_name(ic->job->folder), uidl)); + ifolder->uidnext_on_server = uidl; + } + } + + isum->uidnext = ifolder->uidnext_on_server; + exception: if (ic->job->noreply) camel_folder_change_info_free(ic->job->u.refresh_info.changes); @@ -3529,22 +3770,26 @@ imapx_job_fetch_new_messages_start (CamelIMAPXServer *is, CamelIMAPXJob *job) total = camel_folder_summary_count (folder->summary); diff = ifolder->exists_on_server - total; - if (total > 0) + if (total > 0) { + unsigned long long uidl; uid = camel_folder_summary_uid_from_index (folder->summary, total - 1); - else + uidl = strtoull(uid, NULL, 10); + g_free(uid); + uid = g_strdup_printf("%lld", uidl+1); + } else uid = g_strdup ("1"); camel_operation_start (job->op, _("Fetching summary information for new messages in %s"), folder->name); if (diff > BATCH_FETCH_COUNT) { - ic = camel_imapx_command_new (is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new (is, "FETCH", job->folder, "UID FETCH %s:* (UID FLAGS)", uid); imapx_uidset_init(&job->u.refresh_info.uidset, BATCH_FETCH_COUNT, 0); job->u.refresh_info.infos = g_array_new (0, 0, sizeof(struct _refresh_info)); ic->pri = job->pri; ic->complete = imapx_command_step_fetch_done; } else { - ic = camel_imapx_command_new (is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new (is, "FETCH", job->folder, "UID FETCH %s:* (RFC822.SIZE RFC822.HEADER FLAGS)", uid); ic->pri = job->pri; ic->complete = imapx_command_fetch_new_messages_done; @@ -3565,6 +3810,7 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) CamelException *ex = job->ex; gboolean need_rescan = FALSE; gboolean is_selected = FALSE; + gboolean can_qresync = FALSE; /* Sync changes first, else unread count will not match. Need to think about better ways for this */ @@ -3574,7 +3820,7 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) #if 0 /* There are issues with this still; continue with the buggy behaviour where we issue STATUS on the current folder, for now...*/ - if (is->select && !strcmp(folder->full_name, is->select)) + if (is->select_folder == folder) is_selected = TRUE; #endif total = camel_folder_summary_count (folder->summary); @@ -3619,10 +3865,10 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) } } } else { - if (is->cinfo && is->cinfo->capa & IMAPX_CAPABILITY_CONDSTORE) - ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDNEXT HIGHESTMODSEQ)", folder); + if (is->cinfo->capa & IMAPX_CAPABILITY_CONDSTORE) + ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDVALIDITY UIDNEXT HIGHESTMODSEQ)", folder); else - ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDNEXT)", folder); + ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDVALIDITY UIDNEXT)", folder); ic->job = job; ic->pri = job->pri; @@ -3650,6 +3896,9 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) } + if (is->use_qresync && isum->modseq && ifolder->uidvalidity_on_server) + can_qresync = TRUE; + e(printf("folder %s is %sselected, total %u / %u, unread %u / %u, modseq %llu / %llu, uidnext %u / %u: will %srescan\n", folder->full_name, is_selected?"": "not ", total, ifolder->exists_on_server, folder->summary->unread_count, ifolder->unread_on_server, @@ -3664,17 +3913,43 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (!total) need_rescan = FALSE; - imapx_server_fetch_new_messages (is, folder, FALSE, job->ex); + imapx_server_fetch_new_messages (is, folder, FALSE, FALSE, job->ex); if (camel_exception_is_set (job->ex)) goto done; + + /* If QRESYNC-capable we'll have got all flags changes in SELECT */ + if (can_qresync) + goto qresync_done; } - /* Refetch flags for the entire folder */ - if (need_rescan) { - imapx_job_scan_changes_start (is, job); - return; + if (!need_rescan) + goto done; + + if (can_qresync) { + /* Actually we only want to select it; no need for the NOOP */ + camel_imapx_server_noop(is, folder, ex); + qresync_done: + isum->modseq = ifolder->modseq_on_server; + total = camel_folder_summary_count(job->folder->summary); + if (total != ifolder->exists_on_server || + folder->summary->unread_count != ifolder->unread_on_server || + (isum->modseq != ifolder->modseq_on_server)) { + c(printf("Eep, after QRESYNC we're out of sync. total %u / %u, unread %u / %u, modseq %" G_GUINT64_FORMAT " / %" G_GUINT64_FORMAT "\n", + total, ifolder->exists_on_server, + folder->summary->unread_count, ifolder->unread_on_server, + isum->modseq, ifolder->modseq_on_server)); + } else { + c(printf("OK, after QRESYNC we're still in sync. total %u / %u, unread %u / %u, modseq %" G_GUINT64_FORMAT " / %" G_GUINT64_FORMAT "\n", + total, ifolder->exists_on_server, + folder->summary->unread_count, ifolder->unread_on_server, + isum->modseq, ifolder->modseq_on_server)); + goto done; + } } + imapx_job_scan_changes_start (is, job); + return; + done: imapx_job_done (is, job); } @@ -3707,7 +3982,7 @@ imapx_command_expunge_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) CamelMessageInfo *mi = camel_folder_summary_uid (folder->summary, uid); if (mi) { - imapx_update_summary_for_removed_message (mi, folder); + imapx_update_summary_for_removed_message (mi, folder, FALSE); camel_message_info_free (mi); } @@ -3739,7 +4014,7 @@ imapx_job_expunge_start(CamelIMAPXServer *is, CamelIMAPXJob *job) imapx_server_sync_changes (is, job->folder, job->pri, job->ex); /* TODO handle UIDPLUS capability */ - ic = camel_imapx_command_new(is, "EXPUNGE", job->folder->full_name, "EXPUNGE"); + ic = camel_imapx_command_new(is, "EXPUNGE", job->folder, "EXPUNGE"); ic->job = job; ic->pri = job->pri; ic->complete = imapx_command_expunge_done; @@ -3894,7 +4169,7 @@ imapx_job_delete_folder_start (CamelIMAPXServer *is, CamelIMAPXJob *job) job->folder = camel_store_get_folder(is->store, "INBOX", 0, job->ex); /* make sure to-be-deleted folder is not selected by selecting INBOX for this operation */ - ic = camel_imapx_command_new (is, "DELETE", "INBOX", "DELETE %s", encoded_fname); + ic = camel_imapx_command_new (is, "DELETE", job->folder, "DELETE %s", encoded_fname); ic->pri = job->pri; ic->job = job; ic->complete = imapx_command_delete_folder_done; @@ -3930,7 +4205,7 @@ imapx_job_rename_folder_start (CamelIMAPXServer *is, CamelIMAPXJob *job) en_ofname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, job->u.rename_folder.ofolder_name); en_nfname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, job->u.rename_folder.nfolder_name); - ic = camel_imapx_command_new (is, "RENAME", "INBOX", "RENAME %s %s", en_ofname, en_nfname); + ic = camel_imapx_command_new (is, "RENAME", job->folder, "RENAME %s %s", en_ofname, en_nfname); ic->pri = job->pri; ic->job = job; ic->complete = imapx_command_rename_folder_done; @@ -3961,10 +4236,7 @@ imapx_job_noop_start(CamelIMAPXServer *is, CamelIMAPXJob *job) { CamelIMAPXCommand *ic; - if (job->folder) - ic = camel_imapx_command_new (is, "NOOP", job->folder->full_name, "NOOP"); - else - ic = camel_imapx_command_new (is, "NOOP", NULL, "NOOP"); + ic = camel_imapx_command_new (is, "NOOP", job->folder, "NOOP"); ic->job = job; ic->complete = imapx_command_noop_done; @@ -3987,7 +4259,9 @@ static struct { { "\\DRAFT", CAMEL_MESSAGE_DRAFT }, { "\\FLAGGED", CAMEL_MESSAGE_FLAGGED }, { "\\SEEN", CAMEL_MESSAGE_SEEN }, - { "\\RECENT", CAMEL_IMAPX_MESSAGE_RECENT } + { "\\RECENT", CAMEL_IMAPX_MESSAGE_RECENT }, + { "JUNK", CAMEL_MESSAGE_JUNK }, + { "NOTJUNK", CAMEL_MESSAGE_NOTJUNK } }; /* @@ -4031,21 +4305,23 @@ imapx_command_sync_changes_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) gint i; for (i=0;i<job->u.sync_changes.changed_uids->len;i++) { - CamelIMAPXMessageInfo *info = (CamelIMAPXMessageInfo *) camel_folder_summary_uid (job->folder->summary, + CamelIMAPXMessageInfo *xinfo = (CamelIMAPXMessageInfo *) camel_folder_summary_uid (job->folder->summary, job->u.sync_changes.changed_uids->pdata[i]); - if (!info) + if (!xinfo) continue; - info->server_flags = ((CamelMessageInfoBase *)info)->flags & CAMEL_IMAPX_SERVER_FLAGS; - info->info.flags &= ~CAMEL_MESSAGE_FOLDER_FLAGGED; - info->info.dirty = TRUE; + xinfo->server_flags = ((CamelMessageInfoBase *)xinfo)->flags & CAMEL_IMAPX_SERVER_FLAGS; + xinfo->info.flags &= ~CAMEL_MESSAGE_FOLDER_FLAGGED; + xinfo->info.dirty = TRUE; + camel_flag_list_copy (&xinfo->server_user_flags, &xinfo->info.user_flags); camel_folder_summary_touch (job->folder->summary); - camel_message_info_free (info); - - /* FIXME: move over user flags too */ + camel_message_info_free (xinfo); } + /* Apply the changes to server-side unread count; it won't tell + us of these changes, of course. */ + ((CamelIMAPXFolder *)job->folder)->unread_on_server += job->u.sync_changes.unread_change; } if (job->commands == 0) { @@ -4111,7 +4387,7 @@ imapx_job_sync_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) if ( (on && (((flags ^ sflags) & flags) & flag)) || (!on && (((flags ^ sflags) & ~flags) & flag))) { if (ic == NULL) { - ic = camel_imapx_command_new(is, "STORE", job->folder->full_name, "UID STORE "); + ic = camel_imapx_command_new(is, "STORE", job->folder, "UID STORE "); ic->complete = imapx_command_sync_changes_done; ic->job = job; ic->pri = job->pri; @@ -4124,6 +4400,14 @@ imapx_job_sync_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) imapx_command_queue(is, ic); ic = NULL; } + if (flag == CAMEL_MESSAGE_SEEN) { + /* Remember how the server's unread count will change if this + command succeeds */ + if (on) + job->u.sync_changes.unread_change--; + else + job->u.sync_changes.unread_change++; + } camel_message_info_free (info); } } @@ -4139,7 +4423,7 @@ imapx_job_sync_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) CamelIMAPXMessageInfo *info = c->infos->pdata[i]; if (ic == NULL) { - ic = camel_imapx_command_new(is, "STORE", job->folder->full_name, "UID STORE "); + ic = camel_imapx_command_new(is, "STORE", job->folder, "UID STORE "); ic->complete = imapx_command_sync_changes_done; ic->job = job; ic->pri = job->pri; @@ -4224,7 +4508,7 @@ imapx_parser_thread (gpointer d) CamelOperation *op; op = camel_operation_new (NULL, NULL); - op = camel_operation_register (op); + camel_operation_register (op); is->op = op; while (!camel_exception_is_set (&ex) && is->stream) { @@ -4271,7 +4555,7 @@ imapx_parser_thread (gpointer d) errno = EINTR; } - if (camel_application_is_exiting || is->parser_quit) { + if (is->parser_quit) { camel_exception_setv (&ex, CAMEL_EXCEPTION_USER_CANCEL, "Operation Cancelled: %s", g_strerror(errno)); break; } @@ -4290,11 +4574,11 @@ imapx_parser_thread (gpointer d) } } - imapx_disconnect (is); - cancel_all_jobs (is, &ex); + QUEUE_LOCK(is); + is->state = IMAPX_SHUTDOWN; + QUEUE_UNLOCK(is); - if (imapx_idle_supported (is)) - imapx_exit_idle (is); + cancel_all_jobs (is, &ex); camel_exception_clear (&ex); @@ -4348,11 +4632,30 @@ imapx_server_init(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass) static void imapx_server_finalise(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass) { + e(printf("imapx_server_finalise\n")); + + QUEUE_LOCK(is); + is->state = IMAPX_SHUTDOWN; + QUEUE_UNLOCK(is); + + is->parser_quit = TRUE; + if (is->op) + camel_operation_cancel (is->op); + + if (is->parser_thread) + g_thread_join (is->parser_thread); + + if (is->cinfo && imapx_idle_supported (is)) + imapx_exit_idle (is); + + imapx_disconnect (is); + g_static_rec_mutex_free(&is->queue_lock); g_static_rec_mutex_free (&is->ostream_lock); g_hash_table_destroy (is->uid_eflags); camel_folder_change_info_free (is->changes); + } CamelType @@ -4409,11 +4712,6 @@ imapx_disconnect (CamelIMAPXServer *is) is->select_folder = NULL; } - if (is->select) { - g_free(is->select); - is->select = NULL; - } - if (is->select_pending) { camel_object_unref(is->select_pending); is->select_pending = NULL; @@ -4433,39 +4731,23 @@ imapx_disconnect (CamelIMAPXServer *is) /* Client commands */ gboolean -camel_imapx_server_connect (CamelIMAPXServer *is, gboolean connect, CamelException *ex) +camel_imapx_server_connect (CamelIMAPXServer *is, CamelException *ex) { - gboolean ret = FALSE; - - CAMEL_SERVICE_REC_LOCK (is->store, connect_lock); - if (connect) { - if (is->state >= IMAPX_INITIALISED) { - ret = TRUE; - goto exit; - } + if (is->state == IMAPX_SHUTDOWN) + return FALSE; - g_static_rec_mutex_lock (&is->ostream_lock); - imapx_reconnect (is, ex); - g_static_rec_mutex_unlock (&is->ostream_lock); + if (is->state >= IMAPX_INITIALISED) + return TRUE; - if (camel_exception_is_set (ex)) { - ret = FALSE; - goto exit; - } + g_static_rec_mutex_lock (&is->ostream_lock); + imapx_reconnect (is, ex); + g_static_rec_mutex_unlock (&is->ostream_lock); - is->parser_thread = g_thread_create((GThreadFunc) imapx_parser_thread, is, TRUE, NULL); - ret = TRUE; - } else { - is->parser_quit = TRUE; - camel_operation_cancel (is->op); - if (is->parser_thread) - g_thread_join (is->parser_thread); - ret = TRUE; - } + if (camel_exception_is_set (ex)) + return FALSE; -exit: - CAMEL_SERVICE_REC_UNLOCK (is->store, connect_lock); - return ret; + is->parser_thread = g_thread_create((GThreadFunc) imapx_parser_thread, is, TRUE, NULL); + return TRUE; } static CamelStream * @@ -4488,7 +4770,7 @@ imapx_server_get_message (CamelIMAPXServer *is, CamelFolder *folder, CamelOperat QUEUE_LOCK (is); - if ((job = imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_GET_MESSAGE, uid))) { + if ((job = imapx_is_job_in_queue (is, folder, IMAPX_JOB_GET_MESSAGE, uid))) { flag = g_hash_table_lookup (is->uid_eflags, uid); if (pri > job->pri) @@ -4697,7 +4979,7 @@ camel_imapx_server_refresh_info (CamelIMAPXServer *is, CamelFolder *folder, Came QUEUE_LOCK (is); - if (imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_REFRESH_INFO, NULL)) { + if (imapx_is_job_in_queue (is, folder, IMAPX_JOB_REFRESH_INFO, NULL)) { QUEUE_UNLOCK (is); return; } @@ -4869,7 +5151,7 @@ imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, gint pri, C QUEUE_LOCK (is); - if ((job = imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_SYNC_CHANGES, NULL))) { + if ((job = imapx_is_job_in_queue (is, folder, IMAPX_JOB_SYNC_CHANGES, NULL))) { if (pri > job->pri) job->pri = pri; @@ -4921,7 +5203,7 @@ camel_imapx_server_expunge(CamelIMAPXServer *is, CamelFolder *folder, CamelExcep /* Do we really care to wait for this one to finish? */ QUEUE_LOCK (is); - if (imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_EXPUNGE, NULL)) { + if (imapx_is_job_in_queue (is, folder, IMAPX_JOB_EXPUNGE, NULL)) { QUEUE_UNLOCK (is); return; } diff --git a/camel/providers/imapx/camel-imapx-server.h b/camel/providers/imapx/camel-imapx-server.h index 22bd7da7a..6b3934815 100644 --- a/camel/providers/imapx/camel-imapx-server.h +++ b/camel/providers/imapx/camel-imapx-server.h @@ -1,11 +1,9 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Copyright (C) 2005 Novell Inc. + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * Authors: - * Michael Zucchi <notzed@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -13,10 +11,10 @@ * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef _CAMEL_IMAPX_SERVER_H @@ -74,7 +72,6 @@ struct _CamelIMAPXServer { /* info on currently selected folder */ struct _CamelFolder *select_folder; - gchar *select; struct _CamelFolderChangeInfo *changes; struct _CamelFolder *select_pending; guint32 permanentflags; @@ -102,6 +99,8 @@ struct _CamelIMAPXServer { struct _CamelIMAPXIdle *idle; gboolean use_idle; + gboolean use_qresync; + /* used for storing eflags to syncronize duplicate get_message requests */ GHashTable *uid_eflags; }; @@ -115,7 +114,7 @@ struct _CamelIMAPXServerClass { CamelType camel_imapx_server_get_type (void); CamelIMAPXServer *camel_imapx_server_new(struct _CamelStore *store, struct _CamelURL *url); -gboolean camel_imapx_server_connect(CamelIMAPXServer *is, gint state, CamelException *ex); +gboolean camel_imapx_server_connect(CamelIMAPXServer *is, CamelException *ex); gboolean imapx_connect_to_server (CamelIMAPXServer *is, CamelException *ex); GPtrArray *camel_imapx_server_list(CamelIMAPXServer *is, const gchar *top, guint32 flags, const gchar *ext, CamelException *ex); diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c index 5d12bd2a6..cb9823d56 100644 --- a/camel/providers/imapx/camel-imapx-store.c +++ b/camel/providers/imapx/camel-imapx-store.c @@ -1,24 +1,23 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-imap-store.c : class for a imap store */ - /* * Authors: Michael Zucchi <notzed@ximian.com> * - * Copyright (C) 2000-2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program 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. + * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -124,6 +123,9 @@ imapx_parse_receiving_options (CamelIMAPXStore *istore, CamelURL *url) if (camel_url_get_param (url, "use_idle")) istore->rec_options |= IMAPX_USE_IDLE; + + if (camel_url_get_param (url, "use_qresync")) + istore->rec_options |= IMAPX_USE_QRESYNC; } static void @@ -204,16 +206,53 @@ imapx_get_name (CamelService *service, gboolean brief) service->url->user, service->url->host); } +CamelIMAPXServer * +camel_imapx_store_get_server(CamelIMAPXStore *store, CamelException *ex) +{ + CamelIMAPXServer *server = NULL; + + if (camel_operation_cancel_check(NULL)) { + camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, + _("Operation cancelled")); + return NULL; + } + CAMEL_SERVICE_REC_LOCK (store, connect_lock); + + if (store->server && camel_imapx_server_connect(store->server, ex)) { + camel_object_ref(store->server); + server = store->server; + } else { + if (store->server) { + camel_object_unref(store->server); + store->server = NULL; + } + + server = camel_imapx_server_new(CAMEL_STORE(store), CAMEL_SERVICE(store)->url); + if (camel_imapx_server_connect(server, ex)) { + store->server = server; + camel_object_ref(server); + } else { + camel_object_unref(server); + server = NULL; + } + } + CAMEL_SERVICE_REC_UNLOCK (store, connect_lock); + return server; +} + static gboolean imapx_connect (CamelService *service, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)service; + CamelIMAPXServer *server; - /* We never really are 'connected' or 'disconnected' */ - if (istore->server == NULL) - istore->server = camel_imapx_server_new((CamelStore *)istore, service->url); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_object_unref(server); + return TRUE; + } - return camel_imapx_server_connect (istore->server, TRUE, ex); + return FALSE; } static gboolean @@ -223,8 +262,14 @@ imapx_disconnect (CamelService *service, gboolean clean, CamelException *ex) CAMEL_SERVICE_CLASS (parent_class)->disconnect (service, clean, ex); - if (istore->server) - camel_imapx_server_connect(istore->server, FALSE, ex); + CAMEL_SERVICE_REC_LOCK (service, connect_lock); + + if (istore->server) { + camel_object_unref(istore->server); + istore->server = NULL; + } + + CAMEL_SERVICE_REC_UNLOCK (service, connect_lock); return TRUE; } @@ -267,12 +312,16 @@ static void imapx_noop (CamelStore *store, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_noop (istore->server, NULL, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_noop (server, NULL, ex); + camel_object_unref(server); + } } static guint @@ -528,12 +577,17 @@ static void imapx_subscribe_folder (CamelStore *store, const gchar *folder_name, gboolean emit_signal, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_manage_subscription (istore->server, folder_name, TRUE, ex); + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return; + + camel_imapx_server_manage_subscription (server, folder_name, TRUE, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) imapx_mark_folder_subscribed (istore, folder_name, emit_signal, ex); @@ -543,12 +597,17 @@ static void imapx_unsubscribe_folder (CamelStore *store, const gchar *folder_name, gboolean emit_signal, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_manage_subscription (istore->server, folder_name, FALSE, ex); + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return; + + camel_imapx_server_manage_subscription (server, folder_name, FALSE, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) imapx_unmark_folder_subscribed (istore, folder_name, emit_signal, ex); @@ -614,15 +673,19 @@ static void imapx_delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) { camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, _("You must be working online to complete this operation")); return; } + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_delete_folder (istore->server, folder_name, ex); + camel_imapx_server_delete_folder (server, folder_name, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) imapx_delete_folder_from_cache (istore, folder_name, ex); @@ -665,6 +728,7 @@ static void imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; gchar *oldpath, *newpath, *storage_path; if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) { @@ -676,8 +740,11 @@ imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, Came if (istore->rec_options & IMAPX_SUBSCRIPTIONS) imapx_unsubscribe_folder (store, old, FALSE, ex); - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_rename_folder (istore->server, old, new, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_rename_folder (server, old, new, ex); + camel_object_unref(server); + } if (camel_exception_is_set (ex)) { imapx_subscribe_folder (store, old, FALSE, ex); @@ -711,6 +778,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f CamelStoreInfo *si; CamelIMAPXStoreNamespace *ns; CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; gchar *real_name, *full_name, *parent_real; CamelFolderInfo *fi = NULL; gchar dir_sep; @@ -721,7 +789,8 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f return NULL; } - if (!(istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))) + server = camel_imapx_store_get_server(istore, ex); + if (!server) return NULL; if (!parent_name) @@ -737,6 +806,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH, _("The folder name \"%s\" is invalid because it contains the character \"%c\""), folder_name, dir_sep); + camel_object_unref(server); return NULL; } @@ -744,6 +814,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f if (parent_real == NULL) { camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE, _("Unknown parent folder: %s"), parent_name); + camel_object_unref(server); return NULL; } @@ -751,6 +822,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f if (si && si->flags & CAMEL_STORE_INFO_FOLDER_NOINFERIORS) { camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE, _("The parent folder is not allowed to contain subfolders")); + camel_object_unref(server); return NULL; } @@ -761,7 +833,8 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f full_name = imapx_concat (istore, parent_real, real_name); g_free(real_name); - camel_imapx_server_create_folder (istore->server, full_name, ex); + camel_imapx_server_create_folder (server, full_name, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) { CamelIMAPXStoreInfo *si; @@ -886,7 +959,7 @@ get_folder_info_offline (CamelStore *store, const gchar *top, } static void -add_folders_to_summary (CamelIMAPXStore *istore, GPtrArray *folders, GHashTable *table, gboolean subscribed) +add_folders_to_summary (CamelIMAPXStore *istore, CamelIMAPXServer *server, GPtrArray *folders, GHashTable *table, gboolean subscribed) { gint i = 0; @@ -909,8 +982,10 @@ add_folders_to_summary (CamelIMAPXStore *istore, GPtrArray *folders, GHashTable } si = camel_imapx_store_summary_add_from_full (istore->summary, li->name, li->separator); - if (!si) + if (!si) { + camel_object_unref(server); continue; + } new_flags = (si->info.flags & (CAMEL_STORE_INFO_FOLDER_SUBSCRIBED | CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW)) | (li->flags & ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED); @@ -969,15 +1044,16 @@ imapx_get_folders_free(gpointer k, gpointer v, gpointer d) } static void -fetch_folders_for_pattern (CamelIMAPXStore *istore, const gchar *pattern, guint32 flags, const gchar *ext, GHashTable *table, CamelException *ex) +fetch_folders_for_pattern (CamelIMAPXStore *istore, CamelIMAPXServer *server, const gchar *pattern, guint32 flags, + const gchar *ext, GHashTable *table, CamelException *ex) { GPtrArray *folders = NULL; - folders = camel_imapx_server_list (istore->server, pattern, flags, ext, ex); + folders = camel_imapx_server_list (server, pattern, flags, ext, ex); if (camel_exception_is_set (ex)) return; - add_folders_to_summary (istore, folders, table, (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED)); + add_folders_to_summary (istore, server, folders, table, (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED)); g_ptr_array_foreach (folders, free_list, folders); g_ptr_array_free (folders, TRUE); @@ -1004,9 +1080,14 @@ get_namespaces (CamelIMAPXStore *istore) static GHashTable * fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gboolean sync, CamelException *ex) { + CamelIMAPXServer *server; GHashTable *folders = NULL; GSList *namespaces = NULL, *l; + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return NULL; + folders = g_hash_table_new (folder_hash, folder_eq); namespaces = get_namespaces (istore); @@ -1030,11 +1111,11 @@ fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gbo if (sync) flags |= CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST; - if (istore->server->cinfo->capa & IMAPX_CAPABILITY_LIST_EXTENDED) + if (server->cinfo->capa & IMAPX_CAPABILITY_LIST_EXTENDED) list_ext = "RETURN (SUBSCRIBED)"; flags |= CAMEL_STORE_FOLDER_INFO_RECURSIVE; - fetch_folders_for_pattern (istore, pat, flags, list_ext, folders, ex); + fetch_folders_for_pattern (istore, server, pat, flags, list_ext, folders, ex); if (camel_exception_is_set (ex)) { g_free (pat); goto exception; @@ -1043,7 +1124,7 @@ fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gbo /* If the server doesn't support LIST-EXTENDED then we have to issue LSUB to list the subscribed folders separately */ flags |= CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; - fetch_folders_for_pattern (istore, pat, flags, NULL, folders, ex); + fetch_folders_for_pattern (istore, server, pat, flags, NULL, folders, ex); if (camel_exception_is_set (ex)) { g_free (pat); goto exception; @@ -1052,15 +1133,17 @@ fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gbo g_free (pat); if (pattern) - return folders; + goto out; ns = ns->next; } } - + out: + camel_object_unref(server); return folders; exception: + camel_object_unref(server); g_hash_table_destroy (folders); return NULL; } diff --git a/camel/providers/imapx/camel-imapx-store.h b/camel/providers/imapx/camel-imapx-store.h index fa08ab9e2..93ea68666 100644 --- a/camel/providers/imapx/camel-imapx-store.h +++ b/camel/providers/imapx/camel-imapx-store.h @@ -4,21 +4,21 @@ /* * Authors: Michael Zucchi <notzed@ximian.com> * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program 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. + * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef CAMEL_IMAPX_STORE_H @@ -47,6 +47,7 @@ extern "C" { #define IMAPX_SUBSCRIPTIONS (1 << 5) #define IMAPX_CHECK_LSUB (1 << 6) #define IMAPX_USE_IDLE (1 << 7) +#define IMAPX_USE_QRESYNC (1 << 8) typedef struct { CamelOfflineStore parent_object; @@ -79,6 +80,7 @@ typedef struct { /* Standard Camel function */ CamelType camel_imapx_store_get_type (void); +struct _CamelIMAPXServer *camel_imapx_store_get_server(CamelIMAPXStore *store, CamelException *ex); #ifdef __cplusplus } diff --git a/camel/providers/imapx/camel-imapx-stream.c b/camel/providers/imapx/camel-imapx-stream.c index 2cb68ca03..6fe0fd37a 100644 --- a/camel/providers/imapx/camel-imapx-stream.c +++ b/camel/providers/imapx/camel-imapx-stream.c @@ -3,21 +3,21 @@ * Author: * Michael Zucchi <notzed@ximian.com> * - * Copyright 1999, 2000 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program 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. + * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H diff --git a/camel/providers/imapx/camel-imapx-stream.h b/camel/providers/imapx/camel-imapx-stream.h index 27138c2ee..5568c3a73 100644 --- a/camel/providers/imapx/camel-imapx-stream.h +++ b/camel/providers/imapx/camel-imapx-stream.h @@ -3,8 +3,10 @@ * * Authors: Michael Zucchi <notzed@ximian.com> * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -12,10 +14,10 @@ * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef _CAMEL_IMAPX_STREAM_H diff --git a/camel/providers/imapx/camel-imapx-summary.c b/camel/providers/imapx/camel-imapx-summary.c index b000c138a..5c6b717ce 100644 --- a/camel/providers/imapx/camel-imapx-summary.c +++ b/camel/providers/imapx/camel-imapx-summary.c @@ -40,10 +40,10 @@ #include "camel-imapx-summary.h" //#include "camel-imap-utils.h" -#define CAMEL_IMAPX_SUMMARY_VERSION (3) +#define CAMEL_IMAPX_SUMMARY_VERSION (4) -#define EXTRACT_FIRST_DIGIT(val) val=strtoul (part, &part, 10); -#define EXTRACT_DIGIT(val) if (*part) part++; val=strtoul (part, &part, 10); +#define EXTRACT_FIRST_DIGIT(val) val=strtoull (part, &part, 10); +#define EXTRACT_DIGIT(val) if (*part) part++; val=strtoull (part, &part, 10); static gint summary_header_load (CamelFolderSummary *, FILE *); static gint summary_header_save (CamelFolderSummary *, FILE *); @@ -239,8 +239,15 @@ summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir) EXTRACT_DIGIT (ims->validity) } + if (ims->version >= 4) { + if (part) + EXTRACT_DIGIT (ims->uidnext); + if (part) + EXTRACT_DIGIT (ims->modseq); + } + if (ims->version > CAMEL_IMAPX_SUMMARY_VERSION) { - g_warning("Unkown summary version\n"); + g_warning("Unknown summary version\n"); errno = EINVAL; return -1; } @@ -252,13 +259,19 @@ static gint summary_header_load (CamelFolderSummary *s, FILE *in) { CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY (s); + guint32 validity; + gint ret; if (camel_imapx_summary_parent->summary_header_load (s, in) == -1) return -1; /* Legacy version */ - if (s->version == 0x30c) - return camel_file_util_decode_uint32(in, &ims->validity); + if (s->version == 0x30c) { + ret = camel_file_util_decode_uint32(in, &validity); + if (!ret) + ims->validity = validity; + return ret; + } /* Version 1 */ if (camel_file_util_decode_fixed_int32(in, (gint32 *) &ims->version) == -1) @@ -272,11 +285,14 @@ summary_header_load (CamelFolderSummary *s, FILE *in) return -1; } - if (camel_file_util_decode_fixed_int32(in, (gint32 *) &ims->validity) == -1) + if (camel_file_util_decode_fixed_int32(in, (gint32 *) &validity) == -1) return -1; + ims->validity = validity; - if (ims->version > CAMEL_IMAPX_SUMMARY_VERSION) { - g_warning("Unkown summary version\n"); + /* This is only used for migration; will never be asked to load newer + versions of the store format */ + if (ims->version > 3) { + g_warning("Unknown summary version\n"); errno = EINVAL; return -1; } @@ -293,22 +309,17 @@ summary_header_to_db (CamelFolderSummary *s, CamelException *ex) fir = camel_imapx_summary_parent->summary_header_to_db (s, ex); if (!fir) return NULL; - fir->bdata = g_strdup_printf ("%d %u", CAMEL_IMAPX_SUMMARY_VERSION, ims->validity); - + fir->bdata = g_strdup_printf ("%d %llu %u %llu", CAMEL_IMAPX_SUMMARY_VERSION, + (unsigned long long)ims->validity, ims->uidnext, + (unsigned long long)ims->modseq); return fir; } static gint summary_header_save (CamelFolderSummary *s, FILE *out) { - CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY(s); - - if (camel_imapx_summary_parent->summary_header_save (s, out) == -1) - return -1; - - camel_file_util_encode_fixed_int32(out, CAMEL_IMAPX_SUMMARY_VERSION); - - return camel_file_util_encode_fixed_int32(out, ims->validity); + g_warning("imapx %s called; should never happen!\n", __func__); + return -1; } static CamelMessageInfo * diff --git a/camel/providers/imapx/camel-imapx-summary.h b/camel/providers/imapx/camel-imapx-summary.h index 0dee06faf..0d641eead 100644 --- a/camel/providers/imapx/camel-imapx-summary.h +++ b/camel/providers/imapx/camel-imapx-summary.h @@ -35,6 +35,8 @@ CAMEL_MESSAGE_DELETED | \ CAMEL_MESSAGE_DRAFT | \ CAMEL_MESSAGE_FLAGGED | \ + CAMEL_MESSAGE_JUNK | \ + CAMEL_MESSAGE_NOTJUNK | \ CAMEL_MESSAGE_SEEN) G_BEGIN_DECLS @@ -58,8 +60,8 @@ struct _CamelIMAPXSummary { CamelFolderSummary parent; guint32 version; - guint32 validity; guint32 uidnext; + guint64 validity; guint64 modseq; }; diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c index 274736d58..aab048c1d 100644 --- a/camel/providers/imapx/camel-imapx-utils.c +++ b/camel/providers/imapx/camel-imapx-utils.c @@ -1,3 +1,21 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program 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 Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include <ctype.h> #include <errno.h> @@ -75,6 +93,8 @@ static struct { { "\\FLAGGED", CAMEL_MESSAGE_FLAGGED }, { "\\SEEN", CAMEL_MESSAGE_SEEN }, { "\\RECENT", CAMEL_IMAPX_MESSAGE_RECENT }, + { "JUNK", CAMEL_MESSAGE_JUNK }, + { "NOTJUNK", CAMEL_MESSAGE_NOTJUNK }, { "\\*", CAMEL_MESSAGE_USER } }; @@ -87,7 +107,7 @@ imapx_parse_flags(CamelIMAPXStream *stream, guint32 *flagsp, CamelFlag **user_fl { gint tok, i; guint len; - guchar *token, *p, c; + guchar *token; guint32 flags = 0; *flagsp = flags; @@ -96,13 +116,11 @@ imapx_parse_flags(CamelIMAPXStream *stream, guint32 *flagsp, CamelFlag **user_fl if (tok == '(') { do { tok = camel_imapx_stream_token(stream, &token, &len, ex); - if (tok == IMAPX_TOK_TOKEN) { - p = token; - // FIXME: ascii_toupper - while ((c=*p)) - *p++ = toupper(c); + if (tok == IMAPX_TOK_TOKEN || tok == IMAPX_TOK_INT) { + gchar *upper = g_ascii_strup ((gchar *) token, len); + for (i = 0; i < G_N_ELEMENTS (flag_table); i++) - if (!strcmp((gchar *)token, flag_table[i].name)) { + if (!strcmp(upper, flag_table[i].name)) { flags |= flag_table[i].flag; goto found; } @@ -114,6 +132,7 @@ imapx_parse_flags(CamelIMAPXStream *stream, guint32 *flagsp, CamelFlag **user_fl } found: tok = tok; /* fixes stupid warning */ + g_free (upper); } else if (tok != ')') { camel_exception_set (ex, 1, "expecting flag"); return; @@ -219,12 +238,14 @@ imapx_update_user_flags (CamelMessageInfo *info, CamelFlag *server_user_flags) { gboolean changed = FALSE; CamelMessageInfoBase *binfo = (CamelMessageInfoBase *) info; + CamelIMAPXMessageInfo *xinfo = (CamelIMAPXMessageInfo *) info; gboolean set_cal = FALSE; if (camel_flag_get (&binfo->user_flags, "$has_cal")) set_cal = TRUE; changed = camel_flag_list_copy(&binfo->user_flags, &server_user_flags); + camel_flag_list_copy (&xinfo->server_user_flags, &server_user_flags); /* reset the calendar flag if it was set in messageinfo before */ if (set_cal) @@ -234,9 +255,10 @@ imapx_update_user_flags (CamelMessageInfo *info, CamelFlag *server_user_flags) } gboolean -imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder) +imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder, gboolean unsolicited) { gboolean changed = FALSE; + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)folder; CamelIMAPXMessageInfo *xinfo = (CamelIMAPXMessageInfo *) info; if (server_flags != xinfo->server_flags) @@ -266,8 +288,11 @@ imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, C deleted == 1 ? "deleted" : ( deleted == -1 ? "undeleted" : ""), junk == 1 ? "junk" : ( junk == -1 ? "unjunked" : ""))); - if (read) + if (read) { folder->summary->unread_count -= read; + if (unsolicited) + ifolder->unread_on_server -= read; + } if (deleted) folder->summary->deleted_count += deleted; if (junk) @@ -339,9 +364,10 @@ imapx_set_message_info_flags_for_new_message (CamelMessageInfo *info, guint32 se } void -imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder) +imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder, gboolean unsolicited) { CamelMessageInfoBase *dinfo = (CamelMessageInfoBase *) info; + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)folder; gint unread=0, deleted=0, junk=0; guint32 flags; @@ -355,9 +381,11 @@ imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *f if (flags & CAMEL_MESSAGE_JUNK) junk = 1; - if (unread) + if (unread) { folder->summary->unread_count--; - + if (unsolicited) + ifolder->unread_on_server--; + } if (deleted) folder->summary->deleted_count--; if (junk) @@ -1721,7 +1749,7 @@ imapx_parse_status(CamelIMAPXStream *is, CamelException *ex) /* ignore anything we dont know about */ do { tok = camel_imapx_stream_token(is, &token, &len, ex); - if (tok == '\n') { + if (tok == '\n' || tok < 0) { camel_exception_set (ex, 1, "server response truncated"); imapx_free_status(sinfo); return NULL; diff --git a/camel/providers/imapx/camel-imapx-utils.h b/camel/providers/imapx/camel-imapx-utils.h index 277ec7ffd..ec22116b1 100644 --- a/camel/providers/imapx/camel-imapx-utils.h +++ b/camel/providers/imapx/camel-imapx-utils.h @@ -1,3 +1,21 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program 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 Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef _CAMEL_IMAPX_UTILS_H #define _CAMEL_IMAPX_UTILS_H @@ -69,10 +87,10 @@ enum { GPtrArray *imapx_parse_uids (struct _CamelIMAPXStream *is, CamelException *ex); void imapx_parse_flags(struct _CamelIMAPXStream *stream, guint32 *flagsp, struct _CamelFlag **user_flagsp, CamelException *ex); void imapx_write_flags(CamelStream *stream, guint32 flags, struct _CamelFlag *user_flags, CamelException *ex); -gboolean imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder); +gboolean imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder, gboolean unsolicited); void imapx_set_message_info_flags_for_new_message (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder); -void imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder); +void imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder, gboolean unsolicited); void imapx_update_store_summary (CamelFolder *folder); /* ********************************************************************** */ diff --git a/camel/providers/imapx/camel-imapx-view-summary.c b/camel/providers/imapx/camel-imapx-view-summary.c index 20d01f27f..342cda145 100644 --- a/camel/providers/imapx/camel-imapx-view-summary.c +++ b/camel/providers/imapx/camel-imapx-view-summary.c @@ -1,11 +1,9 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- * - * Copyright (C) 2005 Novell Inc. + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * Authors: Michael Zucchi <notzed@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -13,10 +11,10 @@ * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H diff --git a/camel/providers/imapx/camel-imapx-view-summary.h b/camel/providers/imapx/camel-imapx-view-summary.h index 6a4307fe6..d2022c35e 100644 --- a/camel/providers/imapx/camel-imapx-view-summary.h +++ b/camel/providers/imapx/camel-imapx-view-summary.h @@ -1,10 +1,10 @@ /* - * Copyright (C) 2000 Ximian Inc. - * * Authors: Michael Zucchi <notzed@ximian.com> * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -12,10 +12,10 @@ * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef _CAMEL_IMAPX_VIEW_SUMMARY_H diff --git a/camel/providers/imapx/test-imapx.c b/camel/providers/imapx/test-imapx.c index 2f139d766..1c3af52ce 100644 --- a/camel/providers/imapx/test-imapx.c +++ b/camel/providers/imapx/test-imapx.c @@ -1,3 +1,22 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program 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 Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #include <glib.h> #include "camel-imapx-store.h" #include "camel-imapx-folder.h" diff --git a/configure.ac b/configure.ac index 062c0c4c8..f64867512 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ dnl Evolution-Data-Server version m4_define([eds_major_version], [2]) m4_define([eds_minor_version], [30]) -m4_define([eds_micro_version], [3]) +m4_define([eds_micro_version], [4]) m4_define([eds_version], [eds_major_version.eds_minor_version.eds_micro_version]) @@ -933,6 +933,9 @@ fi AM_CONDITIONAL(ENABLE_IPv6, [test "x$enable_ipv6" = "xyes"]) +AC_CHECK_HEADER([wspiapi.h], + [AC_DEFINE([HAVE_WSPIAPI_H], 1, [Have <wspiapi.h>])],,) + dnl ****************************** dnl Calendar support dnl ****************************** @@ -6,24 +6,23 @@ # Christian Kintner <mail@christian-kintner.de>, 2006. # Andre Klapper <ak-47@gmx.net>, 2007-2009. # Mario Blättermann <mariobl@gnome.org>, 2009, 2010. -# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2010. # # Based on German Evolution translation. # Copyright on Evolution translation is held by its translators. +# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2010. # msgid "" msgstr "" "Project-Id-Version: evolution-data-server\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=evolution-data-server&component=general\n" -"POT-Creation-Date: 2010-02-20 15:05+0000\n" -"PO-Revision-Date: 2010-02-20 16:08+0100\n" -"Last-Translator: Mario Blättermann <mariobl@gnome.org>\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-09-16 21:52+0200\n" +"PO-Revision-Date: 2010-09-16 21:53+0200\n" +"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n" "Language-Team: Deutsch <gnome-de@gnome.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../addressbook/backends/file/e-book-backend-file.c:560 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2330 @@ -35,13 +34,13 @@ msgstr "Ladevorgang …" #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2261 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2283 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2328 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4551 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4553 #: ../addressbook/backends/vcf/e-book-backend-vcf.c:476 msgid "Searching..." msgstr "Suchvorgang …" #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2696 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4715 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4717 #, c-format msgid "Downloading contacts (%d)... " msgstr "Kontakte werden heruntergeladen (%d) …" @@ -53,39 +52,39 @@ msgstr "Kontakte werden heruntergeladen (%d) …" msgid "Updating contacts cache (%d)... " msgstr "Zwischenspeicher für Kontakte wird aktualisiert (%d) …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:816 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:818 msgid "Using Distinguished Name (DN)" msgstr "Eindeutiger Name (EN) wird verwendet" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:819 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:821 msgid "Using Email Address" msgstr "E-Mail-Adresse wird verwendet" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1096 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1098 msgid "Reconnecting to LDAP server..." msgstr "Verbindung mit LDAP-Server wird erneut hergestellt …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1738 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1740 msgid "Adding contact to LDAP server..." msgstr "Kontakt wird zu LDAP-Server hinzugefügt …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1872 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1874 msgid "Removing contact from LDAP server..." msgstr "Kontakt wird von LDAP-Server entfernt …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2309 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2311 msgid "Modifying contact from LDAP server..." msgstr "Kontakt auf LDAP-Server wird verändert …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4412 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4414 msgid "Receiving LDAP search results..." msgstr "LDAP-Suchergebnisse werden empfangen …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4573 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4575 msgid "Error performing search" msgstr "Fehler beim Ausführen der Suche" -#: ../addressbook/libebook/e-book.c:2149 +#: ../addressbook/libebook/e-book.c:2152 #, c-format msgid "%s: there was no source for uid `%s' stored in gconf." msgstr "%s: Es gab keine in GConf gespeicherte Quelle der Benutzerkennung »%s«." @@ -542,7 +541,7 @@ msgstr "Geburtsdatum" #: ../addressbook/libebook/e-contact.c:262 #: ../calendar/backends/contacts/e-cal-backend-contacts.c:715 -#: ../libedataserver/e-categories.c:45 +#: ../libedataserver/e-categories.c:42 msgid "Anniversary" msgstr "Jahrestag" @@ -620,20 +619,20 @@ msgstr "Liste angezeigter Skype-Namen" msgid "SIP address" msgstr "SIP-Adresse" -#: ../addressbook/libebook/e-contact.c:1513 +#: ../addressbook/libebook/e-contact.c:1515 #: ../addressbook/libebook/e-destination.c:739 msgid "Unnamed List" msgstr "Namenlose Liste" -#: ../addressbook/libedata-book/e-data-book-factory.c:290 +#: ../addressbook/libedata-book/e-data-book-factory.c:301 #, c-format msgid "Empty URI" msgstr "Leere Adresse" -#: ../addressbook/libedata-book/e-data-book-factory.c:305 -#: ../addressbook/libedata-book/e-data-book-factory.c:332 -#: ../calendar/libedata-cal/e-data-cal-factory.c:323 -#: ../calendar/libedata-cal/e-data-cal-factory.c:332 +#: ../addressbook/libedata-book/e-data-book-factory.c:316 +#: ../addressbook/libedata-book/e-data-book-factory.c:343 +#: ../calendar/libedata-cal/e-data-cal-factory.c:335 +#: ../calendar/libedata-cal/e-data-cal-factory.c:344 #, c-format msgid "Invalid source" msgstr "Ungültige Quelle" @@ -674,7 +673,7 @@ msgid "Cannot remove contacts" msgstr "Kontakte können nicht entfernt werden" #: ../addressbook/libedata-book/e-data-book.c:569 -#: ../calendar/libedata-cal/e-cal-backend-util.c:139 +#: ../calendar/libedata-cal/e-cal-backend-util.c:141 msgid "Invalid query" msgstr "Ungültige Abfrage" @@ -687,7 +686,7 @@ msgid "Cannot complete operation" msgstr "Vorgang kann nicht abgeschlossen werden" #: ../calendar/backends/contacts/e-cal-backend-contacts.c:717 -#: ../libedataserver/e-categories.c:46 +#: ../libedataserver/e-categories.c:43 msgid "Birthday" msgstr "Geburtstag" @@ -718,51 +717,51 @@ msgstr "Thread zum Abrufen von Änderungen konnte nicht angelegt werden" #: ../calendar/backends/google/e-cal-backend-google-utils.c:374 #: ../calendar/backends/google/e-cal-backend-google.c:1144 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1081 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1382 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1087 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1385 #: ../calendar/backends/http/e-cal-backend-http.c:678 #: ../calendar/backends/weather/e-cal-backend-weather.c:492 msgid "Could not create cache file" msgstr "Datei zum Zwischenspeichern konnte nicht angelegt werden" #: ../calendar/backends/google/e-cal-backend-google-utils.c:387 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1094 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1100 msgid "Could not create thread for populating cache" msgstr "Thread zum Belegen des Zwischenspeichers konnte nicht angelegt werden" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1082 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2122 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1118 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2116 msgid "Reply Requested: by " msgstr "Antwort erbeten: durch " -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1087 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2127 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1123 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2121 msgid "Reply Requested: When convenient" msgstr "Antwort erbeten: Wenn es passt" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:283 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:293 #, c-format msgid "Loading %s items" msgstr "%s-Elemente werden geladen" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:919 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:926 msgid "Calendar" msgstr "Kalender" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:977 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:984 msgid "Invalid server URI" msgstr "Ungültige Server-URI" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:996 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1005 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1099 -#: ../calendar/libecal/e-cal.c:4020 -#: ../calendar/libedata-cal/e-cal-backend-util.c:117 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1335 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1371 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1386 -#: ../camel/providers/groupwise/camel-groupwise-store.c:598 -#: ../camel/providers/groupwise/camel-groupwise-store.c:773 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1003 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1012 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1105 +#: ../calendar/libecal/e-cal.c:4026 +#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1334 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1370 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1385 +#: ../camel/providers/groupwise/camel-groupwise-store.c:591 +#: ../camel/providers/groupwise/camel-groupwise-store.c:766 #: ../camel/providers/groupwise/camel-groupwise-transport.c:154 #: ../camel/providers/groupwise/camel-groupwise-transport.c:181 msgid "Authentication failed" @@ -969,7 +968,7 @@ msgstr "Niedrig" msgid "Undefined" msgstr "Nicht festgelegt" -#: ../calendar/libecal/e-cal.c:1173 ../libedataserverui/e-book-auth-util.c:199 +#: ../calendar/libecal/e-cal.c:1179 ../libedataserverui/e-book-auth-util.c:199 #, c-format msgid "Enter password for %s (user %s)" msgstr "Geben Sie das Passwort für %s ein (Benutzer %s)" @@ -978,93 +977,94 @@ msgstr "Geben Sie das Passwort für %s ein (Benutzer %s)" #. This password prompt will be prompted rarely. Since the key that is passed to #. the auth_func corresponds to the parent user. #. -#: ../calendar/libecal/e-cal.c:1187 +#: ../calendar/libecal/e-cal.c:1193 #, c-format msgid "Enter password for %s to enable proxy for user %s" msgstr "" -"Geben Sie das Passwort für %s ein, um die Stellvertretung für den Benutzer %s " -"zu aktivieren" +"Geben Sie das Passwort für %s ein, um die Stellvertretung für den Benutzer %" +"s zu aktivieren" -#: ../calendar/libecal/e-cal.c:3992 +#: ../calendar/libecal/e-cal.c:3998 msgid "Invalid argument" msgstr "Argument ungültig" -#: ../calendar/libecal/e-cal.c:3994 +#: ../calendar/libecal/e-cal.c:4000 msgid "Backend is busy" msgstr "Backend belegt" -#: ../calendar/libecal/e-cal.c:3996 -#: ../calendar/libedata-cal/e-cal-backend-util.c:105 +#: ../calendar/libecal/e-cal.c:4002 +#: ../calendar/libedata-cal/e-cal-backend-util.c:107 msgid "Repository is offline" msgstr "Repository offline" # CHECK -#: ../calendar/libecal/e-cal.c:3998 -#: ../calendar/libedata-cal/e-cal-backend-util.c:129 +#: ../calendar/libecal/e-cal.c:4004 +#: ../calendar/libedata-cal/e-cal-backend-util.c:131 msgid "No such calendar" msgstr "Kein derartiger Kalender" -#: ../calendar/libecal/e-cal.c:4000 -#: ../calendar/libedata-cal/e-cal-backend-util.c:111 +#: ../calendar/libecal/e-cal.c:4006 +#: ../calendar/libedata-cal/e-cal-backend-util.c:113 #: ../servers/groupwise/e-gw-connection.c:235 msgid "Object not found" msgstr "Objekt nicht gefunden" -#: ../calendar/libecal/e-cal.c:4002 -#: ../calendar/libedata-cal/e-cal-backend-util.c:113 +#: ../calendar/libecal/e-cal.c:4008 +#: ../calendar/libedata-cal/e-cal-backend-util.c:115 #: ../servers/groupwise/e-gw-connection.c:229 msgid "Invalid object" msgstr "Objekt ungültig" -#: ../calendar/libecal/e-cal.c:4004 +#: ../calendar/libecal/e-cal.c:4010 msgid "URI not loaded" msgstr "URI nicht geladen" -#: ../calendar/libecal/e-cal.c:4006 +#: ../calendar/libecal/e-cal.c:4012 msgid "URI already loaded" msgstr "URI bereits geladen" -#: ../calendar/libecal/e-cal.c:4008 -#: ../calendar/libedata-cal/e-cal-backend-util.c:107 +#: ../calendar/libecal/e-cal.c:4014 +#: ../calendar/libedata-cal/e-cal-backend-util.c:109 msgid "Permission denied" msgstr "Erlaubnis verweigert" -#: ../calendar/libecal/e-cal.c:4010 -#: ../calendar/libedata-cal/e-cal-backend-util.c:131 +#: ../calendar/libecal/e-cal.c:4016 +#: ../calendar/libedata-cal/e-cal-backend-util.c:133 #: ../servers/groupwise/e-gw-connection.c:237 msgid "Unknown User" msgstr "Unbekannter Benutzer" -#: ../calendar/libecal/e-cal.c:4012 -#: ../calendar/libedata-cal/e-cal-backend-util.c:115 +#: ../calendar/libecal/e-cal.c:4018 +#: ../calendar/libedata-cal/e-cal-backend-util.c:117 msgid "Object ID already exists" msgstr "Objektkennung existiert bereits" -#: ../calendar/libecal/e-cal.c:4014 +#: ../calendar/libecal/e-cal.c:4020 msgid "Protocol not supported" msgstr "Protokoll nicht unterstützt" -#: ../calendar/libecal/e-cal.c:4016 +#: ../calendar/libecal/e-cal.c:4022 msgid "Operation has been canceled" msgstr "Aktion wurde abgebrochen" -#: ../calendar/libecal/e-cal.c:4018 -#: ../calendar/libedata-cal/e-cal-backend-util.c:143 +#: ../calendar/libecal/e-cal.c:4024 +#: ../calendar/libedata-cal/e-cal-backend-util.c:145 msgid "Could not cancel operation" msgstr "Aktion konnte nicht abgebrochen werden" -#: ../calendar/libecal/e-cal.c:4022 -#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../calendar/libecal/e-cal.c:4028 +#: ../calendar/libedata-cal/e-cal-backend-util.c:121 #: ../camel/providers/smtp/camel-smtp-transport.c:217 msgid "Authentication required" msgstr "Legitimation erforderlich" -#: ../calendar/libecal/e-cal.c:4024 +#: ../calendar/libecal/e-cal.c:4030 msgid "A CORBA exception has occurred" msgstr "Es ist eine CORBA-Exception aufgetreten" -#: ../calendar/libecal/e-cal.c:4026 -#: ../calendar/libedata-cal/e-cal-backend-util.c:146 +#: ../calendar/libecal/e-cal.c:4032 +#: ../calendar/libedata-cal/e-cal-backend-util.c:148 +#: ../camel/camel-net-utils.c:527 #: ../camel/providers/groupwise/camel-groupwise-transport.c:214 #: ../camel/providers/imap/camel-imap-command.c:432 #: ../camel/providers/imap/camel-imap-store.c:741 @@ -1075,13 +1075,13 @@ msgstr "Es ist eine CORBA-Exception aufgetreten" #: ../camel/providers/imap4/camel-imap4-store.c:311 #: ../camel/providers/imap4/camel-imap4-store.c:818 #: ../camel/providers/imap4/camel-imap4-store.c:1574 -#: ../camel/providers/pop3/camel-pop3-store.c:582 +#: ../camel/providers/pop3/camel-pop3-store.c:584 #: ../servers/groupwise/e-gw-connection.c:243 msgid "Unknown error" msgstr "Unbekannter Fehler" -#: ../calendar/libecal/e-cal.c:4028 -#: ../calendar/libedata-cal/e-cal-backend-util.c:103 +#: ../calendar/libecal/e-cal.c:4034 +#: ../calendar/libedata-cal/e-cal-backend-util.c:105 msgid "No error" msgstr "Kein Fehler" @@ -1174,178 +1174,178 @@ msgstr "»%s« erwartet mindestens ein Argument" #: ../calendar/libedata-cal/e-cal-backend-sexp.c:941 #, c-format msgid "" -"\"%s\" expects all arguments to be strings or one and only one argument to be " -"a boolean false (#f)" +"\"%s\" expects all arguments to be strings or one and only one argument to " +"be a boolean false (#f)" msgstr "" -"»%s« erwartet als Argumente Zeichenketten, oder aber ein einziges Argument mit " -"dem Wahrheitswert »falsch« (#f)" +"»%s« erwartet als Argumente Zeichenketten, oder aber ein einziges Argument " +"mit dem Wahrheitswert »falsch« (#f)" -#: ../calendar/libedata-cal/e-cal-backend-util.c:109 +#: ../calendar/libedata-cal/e-cal-backend-util.c:111 msgid "Invalid range" msgstr "Ungültiger Bereich" -#: ../calendar/libedata-cal/e-cal-backend-util.c:121 +#: ../calendar/libedata-cal/e-cal-backend-util.c:123 msgid "Unsupported field" msgstr "Nicht unterstütztes Feld" -#: ../calendar/libedata-cal/e-cal-backend-util.c:123 +#: ../calendar/libedata-cal/e-cal-backend-util.c:125 msgid "Unsupported method" msgstr "Nicht unterstützte Methode" -#: ../calendar/libedata-cal/e-cal-backend-util.c:125 +#: ../calendar/libedata-cal/e-cal-backend-util.c:127 msgid "Unsupported authentication method" msgstr "Nicht unterstützte Legitimationsmethode" -#: ../calendar/libedata-cal/e-cal-backend-util.c:127 +#: ../calendar/libedata-cal/e-cal-backend-util.c:129 msgid "TLS not available" msgstr "TLS nicht verfügbar" -#: ../calendar/libedata-cal/e-cal-backend-util.c:133 +#: ../calendar/libedata-cal/e-cal-backend-util.c:135 msgid "Offline mode unavailable" msgstr "Offline-Modus nicht verfügbar" -#: ../calendar/libedata-cal/e-cal-backend-util.c:135 +#: ../calendar/libedata-cal/e-cal-backend-util.c:137 msgid "Search size limit exceeded" msgstr "Suchgröße überschritten" -#: ../calendar/libedata-cal/e-cal-backend-util.c:137 +#: ../calendar/libedata-cal/e-cal-backend-util.c:139 msgid "Search time limit exceeded" msgstr "Suchzeit überschritten" -#: ../calendar/libedata-cal/e-cal-backend-util.c:141 +#: ../calendar/libedata-cal/e-cal-backend-util.c:143 msgid "Query refused" msgstr "Abfrage verweigert" -#: ../calendar/libedata-cal/e-cal-backend-util.c:148 +#: ../calendar/libedata-cal/e-cal-backend-util.c:150 msgid "Invalid server version" msgstr "Ungültige Server-Version" -#: ../calendar/libedata-cal/e-data-cal.c:491 +#: ../calendar/libedata-cal/e-data-cal.c:501 #, c-format msgid "Cannot retrieve calendar address" msgstr "Kalenderadresse kann nicht ermittelt werden" -#: ../calendar/libedata-cal/e-data-cal.c:509 +#: ../calendar/libedata-cal/e-data-cal.c:519 #, c-format msgid "Cannot retrieve calendar alarm e-mail address" msgstr "Die E-Mail-Adresse des Kalenderalarms kann nicht ermittelt werden" -#: ../calendar/libedata-cal/e-data-cal.c:527 +#: ../calendar/libedata-cal/e-data-cal.c:537 #, c-format msgid "Cannot retrieve calendar's ldap attribute" msgstr "LDAP-Attribut des Kalenders kann nicht ermittelt werden" -#: ../calendar/libedata-cal/e-data-cal.c:545 +#: ../calendar/libedata-cal/e-data-cal.c:555 #, c-format msgid "Cannot retrieve calendar scheduling information" msgstr "Plandaten des Kalenders können nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:562 +#: ../calendar/libedata-cal/e-data-cal.c:572 #, c-format msgid "Cannot open calendar" msgstr "Kalender kann nicht geöffnet werden" -#: ../calendar/libedata-cal/e-data-cal.c:579 +#: ../calendar/libedata-cal/e-data-cal.c:591 #, c-format msgid "Cannot refresh calendar" msgstr "Kalender kann nicht aufgefrischt werden" -#: ../calendar/libedata-cal/e-data-cal.c:596 +#: ../calendar/libedata-cal/e-data-cal.c:608 #, c-format msgid "Cannot remove calendar" msgstr "Kalender kann nicht entfernt werden" -#: ../calendar/libedata-cal/e-data-cal.c:615 +#: ../calendar/libedata-cal/e-data-cal.c:627 #, c-format msgid "Cannot create calendar object" msgstr "Kalenderobjekt kann nicht angelegt werden" -#: ../calendar/libedata-cal/e-data-cal.c:637 +#: ../calendar/libedata-cal/e-data-cal.c:649 #, c-format msgid "Cannot modify calendar object" msgstr "Kalenderobjekt kann nicht verändert werden" -#: ../calendar/libedata-cal/e-data-cal.c:661 +#: ../calendar/libedata-cal/e-data-cal.c:673 #, c-format msgid "Cannot remove calendar object" msgstr "Kalenderobjekt kann nicht entfernt werden" -#: ../calendar/libedata-cal/e-data-cal.c:680 +#: ../calendar/libedata-cal/e-data-cal.c:692 #, c-format msgid "Cannot receive calendar objects" msgstr "Kalenderobjekte können nicht empfangen werden" -#: ../calendar/libedata-cal/e-data-cal.c:697 +#: ../calendar/libedata-cal/e-data-cal.c:709 #, c-format msgid "Cannot discard calendar alarm" msgstr "Kalenderalarm kann nicht verworfen werden" -#: ../calendar/libedata-cal/e-data-cal.c:716 +#: ../calendar/libedata-cal/e-data-cal.c:728 #, c-format msgid "Cannot send calendar objects" msgstr "Kalenderobjekte können nicht gesendet werden" -#: ../calendar/libedata-cal/e-data-cal.c:751 +#: ../calendar/libedata-cal/e-data-cal.c:763 #, c-format msgid "Cannot retrieve default calendar object path" msgstr "Objektpfad des voreingestellten Kalenders kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:769 +#: ../calendar/libedata-cal/e-data-cal.c:781 #, c-format msgid "Cannot retrieve calendar object path" msgstr "Objektpfad des Kalenders kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:787 +#: ../calendar/libedata-cal/e-data-cal.c:799 #, c-format msgid "Cannot retrieve calendar object list" msgstr "Liste der Kalenderobjekte kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:825 +#: ../calendar/libedata-cal/e-data-cal.c:837 #, c-format msgid "Could not retrieve attachment list" msgstr "Liste der Anhänge kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:847 +#: ../calendar/libedata-cal/e-data-cal.c:859 #, c-format msgid "Could not complete calendar query" msgstr "Kalenderanfrage konnte nicht beendet werden" -#: ../calendar/libedata-cal/e-data-cal.c:865 +#: ../calendar/libedata-cal/e-data-cal.c:877 #, c-format msgid "Could not retrieve calendar time zone" msgstr "Zeitzone des Kalenders konnte nicht beendet werden" -#: ../calendar/libedata-cal/e-data-cal.c:883 +#: ../calendar/libedata-cal/e-data-cal.c:895 #, c-format msgid "Could not add calendar time zone" msgstr "Zeitzone des Kalenders konnte nicht hinzugefügt werden" -#: ../calendar/libedata-cal/e-data-cal.c:900 +#: ../calendar/libedata-cal/e-data-cal.c:912 #, c-format msgid "Could not set default calendar time zone" msgstr "Voreingestellte Zeitzone des Kalenders konnte nicht eingestellt werden" -#: ../calendar/libedata-cal/e-data-cal.c:921 +#: ../calendar/libedata-cal/e-data-cal.c:933 #, c-format msgid "Cannot retrieve calendar changes" msgstr "Kalenderänderungen können nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:971 +#: ../calendar/libedata-cal/e-data-cal.c:983 #, c-format msgid "Cannot retrieve calendar free/busy list" msgstr "Verfügbarkeitsliste des Kalenders kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal-factory.c:339 +#: ../calendar/libedata-cal/e-data-cal-factory.c:351 #, c-format msgid "Invalid URI" msgstr "Ungültige Adresse" -#: ../calendar/libedata-cal/e-data-cal-factory.c:350 +#: ../calendar/libedata-cal/e-data-cal-factory.c:362 #, c-format msgid "No backend factory for '%s' of '%s'" msgstr "Keine Backend-Factory für »%s« von »%s«" -#: ../calendar/libedata-cal/e-data-cal-factory.c:390 +#: ../calendar/libedata-cal/e-data-cal-factory.c:402 #, c-format msgid "Could not instantiate backend" msgstr "Backend-Instanz konnte nicht angelegt werden" @@ -1394,12 +1394,12 @@ msgstr "Sie dürfen keine Schlüssel mit dieser Verschlüsselung exportieren" msgid "Unable to create cache path" msgstr "Cache-Pfad konnte nicht angelegt werden" -#: ../camel/camel-data-cache.c:401 +#: ../camel/camel-data-cache.c:403 #, c-format msgid "Could not remove cache entry: %s: %s" msgstr "Cache-Eintrag konnte nicht entfernt werden: %s: %s" -#: ../camel/camel-db.c:411 +#: ../camel/camel-db.c:459 msgid "Insufficient memory" msgstr "Nicht ausreichender Speicher" @@ -1434,7 +1434,7 @@ msgstr "Neu abgleichen mit dem Server" msgid "Copy folder content locally for offline operation" msgstr "Den Ordnerinhalt lokal zum Arbeiten im Offline-Modus kopieren" -#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:107 +#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:106 msgid "Downloading new messages for offline mode" msgstr "Neue Nachrichten werden für Offline-Modus abgerufen" @@ -1444,11 +1444,15 @@ msgid "Preparing folder '%s' for offline" msgstr "Ordner »%s« wird für den Offline-Modus vorbereitet" #: ../camel/camel-disco-store.c:400 -#: ../camel/providers/groupwise/camel-groupwise-store.c:223 +#: ../camel/providers/groupwise/camel-groupwise-store.c:216 #: ../camel/providers/imap/camel-imap-store.c:1001 #: ../camel/providers/imap/camel-imap-store.c:1843 -#: ../camel/providers/imap/camel-imap-store.c:2259 -#: ../camel/providers/imap/camel-imap-store.c:3068 +#: ../camel/providers/imap/camel-imap-store.c:2280 +#: ../camel/providers/imap/camel-imap-store.c:3089 +#: ../camel/providers/imapx/camel-imapx-store.c:169 +#: ../camel/providers/imapx/camel-imapx-store.c:675 +#: ../camel/providers/imapx/camel-imapx-store.c:731 +#: ../camel/providers/imapx/camel-imapx-store.c:783 msgid "You must be working online to complete this operation" msgstr "Sie müssen online arbeiten, um diesen Vorgang abzuschließen" @@ -1538,8 +1542,8 @@ msgstr "Ungültige Argumente bei (user-tag)" msgid "Error executing filter search: %s: %s" msgstr "Fehler beim Ausführen einer Filtersuche: %s: %s" -#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:453 -#: ../camel/camel-folder-search.c:608 +#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:455 +#: ../camel/camel-folder-search.c:610 #, c-format msgid "" "Cannot parse search expression: %s:\n" @@ -1548,8 +1552,8 @@ msgstr "" "Syntax des Suchausdrucks konnte nicht analysiert werden: %s:\n" "%s" -#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:463 -#: ../camel/camel-folder-search.c:618 +#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:465 +#: ../camel/camel-folder-search.c:620 #, c-format msgid "" "Error executing search expression: %s:\n" @@ -1558,69 +1562,69 @@ msgstr "" "Fehler beim Ausführen eines Suchausdrucks: %s:\n" "%s" -#: ../camel/camel-folder-search.c:810 ../camel/camel-folder-search.c:852 +#: ../camel/camel-folder-search.c:812 ../camel/camel-folder-search.c:854 #, c-format msgid "(%s) requires a single bool result" msgstr "(%s) erfordert einen einzelnen Boole'schen Wert als Ergebnis" -#: ../camel/camel-folder-search.c:905 +#: ../camel/camel-folder-search.c:907 #, c-format msgid "(%s) not allowed inside %s" msgstr "(%s) nicht erlaubt innerhalb von %s" -#: ../camel/camel-folder-search.c:911 ../camel/camel-folder-search.c:918 +#: ../camel/camel-folder-search.c:913 ../camel/camel-folder-search.c:920 #, c-format msgid "(%s) requires a match type string" msgstr "(%s) erfordert den Treffertyp Zeichenkette" -#: ../camel/camel-folder-search.c:945 +#: ../camel/camel-folder-search.c:947 #, c-format msgid "(%s) expects an array result" msgstr "(%s) erwartet ein Array-Ergebnis" -#: ../camel/camel-folder-search.c:954 +#: ../camel/camel-folder-search.c:956 #, c-format msgid "(%s) requires the folder set" msgstr "(%s) erfordert, dass der Ordner festgelegt ist" -#: ../camel/camel-folder.c:676 +#: ../camel/camel-folder.c:690 #, c-format msgid "Unsupported operation: append message: for %s" msgstr "Nicht unterstützter Vorgang: Nachricht anhängen: für %s" -#: ../camel/camel-folder.c:1381 +#: ../camel/camel-folder.c:1401 #, c-format msgid "Unsupported operation: search by expression: for %s" msgstr "Nicht unterstützter Vorgang: Suche nach Ausdruck: für %s" -#: ../camel/camel-folder.c:1422 +#: ../camel/camel-folder.c:1442 #, c-format msgid "Unsupported operation: count by expression: for %s" msgstr "Nicht unterstützter Vorgang: Anzahl nach Ausdruck: für %s" -#: ../camel/camel-folder.c:1461 +#: ../camel/camel-folder.c:1483 #, c-format msgid "Unsupported operation: search by UIDs: for %s" msgstr "Nicht unterstützter Vorgang: Suche nach UIDs: für %s" -#: ../camel/camel-folder.c:1574 +#: ../camel/camel-folder.c:1596 #: ../camel/providers/local/camel-maildir-folder.c:387 msgid "Moving messages" msgstr "Nachrichten werden verschoben" -#: ../camel/camel-folder.c:1574 +#: ../camel/camel-folder.c:1596 msgid "Copying messages" msgstr "Nachrichten werden kopiert" -#: ../camel/camel-folder.c:1915 +#: ../camel/camel-folder.c:1945 msgid "Learning junk" msgstr "Werbemüll wird erlernt" -#: ../camel/camel-folder.c:1933 +#: ../camel/camel-folder.c:1963 msgid "Learning non-junk" msgstr "»Kein Werbemüll« wird gelernt" -#: ../camel/camel-folder.c:1953 +#: ../camel/camel-folder.c:1983 msgid "Filtering new message(s)" msgstr "Neue Nachricht(en) wird/werden gefiltert" @@ -1669,7 +1673,7 @@ msgstr "" msgid "Unexpected request from GnuPG for '%s'" msgstr "Unerwartete Anfrage von GnuPG für »%s«" -#: ../camel/camel-gpg-context.c:867 ../camel/camel-gpg-context.c:1113 +#: ../camel/camel-gpg-context.c:867 ../camel/camel-gpg-context.c:1111 #: ../camel/providers/nntp/camel-nntp-store.c:1313 msgid "Canceled." msgstr "Abgesagt." @@ -1692,22 +1696,22 @@ msgstr "" "angegeben." #. always called on an i/o error -#: ../camel/camel-gpg-context.c:1262 ../camel/camel-gpg-context.c:1387 -#: ../camel/camel-gpg-context.c:1953 ../camel/camel-gpg-context.c:1998 +#: ../camel/camel-gpg-context.c:1260 ../camel/camel-gpg-context.c:1385 +#: ../camel/camel-gpg-context.c:1959 ../camel/camel-gpg-context.c:2006 #, c-format msgid "Failed to execute gpg: %s" msgstr "gpg konnte nicht ausgeführt werden: %s" -#: ../camel/camel-gpg-context.c:1355 ../camel/camel-smime-context.c:605 +#: ../camel/camel-gpg-context.c:1353 ../camel/camel-smime-context.c:605 #, c-format msgid "Could not generate signing data: %s" msgstr "Signaturdaten konnten nicht erzeugt werden: %s" #: ../camel/camel-gpg-context.c:1402 ../camel/camel-gpg-context.c:1630 -#: ../camel/camel-gpg-context.c:1646 ../camel/camel-gpg-context.c:1728 -#: ../camel/camel-gpg-context.c:1743 ../camel/camel-gpg-context.c:1859 -#: ../camel/camel-gpg-context.c:1874 ../camel/camel-gpg-context.c:1969 -#: ../camel/camel-gpg-context.c:2014 +#: ../camel/camel-gpg-context.c:1648 ../camel/camel-gpg-context.c:1730 +#: ../camel/camel-gpg-context.c:1747 ../camel/camel-gpg-context.c:1863 +#: ../camel/camel-gpg-context.c:1880 ../camel/camel-gpg-context.c:1977 +#: ../camel/camel-gpg-context.c:2024 msgid "Failed to execute gpg." msgstr "gpg konnte nicht ausgeführt werden." @@ -1727,34 +1731,34 @@ msgstr "" "Die Nachrichtensignatur konnte nicht verifiziert werden: Temporäre Datei " "konnte nicht erstellt werden: %s" -#: ../camel/camel-gpg-context.c:1711 +#: ../camel/camel-gpg-context.c:1713 #, c-format msgid "Could not generate encrypting data: %s" msgstr "Verschlüsselungsdaten konnten nicht erzeugt werden: %s" -#: ../camel/camel-gpg-context.c:1761 +#: ../camel/camel-gpg-context.c:1765 msgid "This is a digitally encrypted message part" msgstr "Dies ist ein digital verschlüsselter Nachrichtenteil" -#: ../camel/camel-gpg-context.c:1814 ../camel/camel-gpg-context.c:1822 -#: ../camel/camel-gpg-context.c:1841 +#: ../camel/camel-gpg-context.c:1818 ../camel/camel-gpg-context.c:1826 +#: ../camel/camel-gpg-context.c:1845 msgid "Cannot decrypt message: Incorrect message format" msgstr "" "Nachricht konnte nicht entschlüsselt werden: Nachrichtenformat fehlerhaft" -#: ../camel/camel-gpg-context.c:1831 +#: ../camel/camel-gpg-context.c:1835 msgid "Failed to decrypt MIME part: protocol error" msgstr "MIME-Teil konnte nicht entschlüsselt werden: Protokollfehler" -#: ../camel/camel-gpg-context.c:1909 ../camel/camel-smime-context.c:1205 +#: ../camel/camel-gpg-context.c:1915 ../camel/camel-smime-context.c:1204 msgid "Encrypted content" msgstr "Verschlüsselter Inhalt" -#: ../camel/camel-gpg-context.c:1930 +#: ../camel/camel-gpg-context.c:1936 msgid "Unable to parse message content" msgstr "Syntax des Nachrichteninhalts konnte nicht analysiert werden" -#: ../camel/camel-gpg-context.c:1954 ../camel/camel-gpg-context.c:1999 +#: ../camel/camel-gpg-context.c:1960 ../camel/camel-gpg-context.c:2007 #: ../camel/providers/imap4/camel-imap4-utils.c:614 #: ../camel/providers/smtp/camel-smtp-transport.c:165 #: ../camel/providers/smtp/camel-smtp-transport.c:220 @@ -1861,45 +1865,45 @@ msgstr "Fehler beim Kopieren der temporären E-Mail-Datei: %s" msgid "parse error" msgstr "Fehler bei der Syntaxanalyse" -#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:674 -#: ../camel/camel-net-utils.c:805 -#: ../camel/providers/pop3/camel-pop3-store.c:476 -#: ../camel/providers/pop3/camel-pop3-store.c:576 +#: ../camel/camel-net-utils.c:507 ../camel/camel-net-utils.c:682 +#: ../camel/camel-net-utils.c:821 +#: ../camel/providers/pop3/camel-pop3-store.c:478 +#: ../camel/providers/pop3/camel-pop3-store.c:578 msgid "Canceled" msgstr "Abgesagt" -#: ../camel/camel-net-utils.c:521 +#: ../camel/camel-net-utils.c:527 msgid "cannot create thread" msgstr "Thread konnte nicht erstellt werden" -#: ../camel/camel-net-utils.c:678 +#: ../camel/camel-net-utils.c:686 #, c-format msgid "Resolving: %s" msgstr "%s wird aufgelöst" -#: ../camel/camel-net-utils.c:700 +#: ../camel/camel-net-utils.c:708 msgid "Host lookup failed" msgstr "Finden eines Rechners gescheitert" -#: ../camel/camel-net-utils.c:702 +#: ../camel/camel-net-utils.c:710 #, c-format msgid "Host lookup failed: %s: %s" msgstr "Finden eines Rechners gescheitert: %s: %s" -#: ../camel/camel-net-utils.c:809 +#: ../camel/camel-net-utils.c:825 msgid "Resolving address" msgstr "Adresse wird aufgelöst" -#: ../camel/camel-net-utils.c:829 +#: ../camel/camel-net-utils.c:845 msgid "Name lookup failed" msgstr "Namenssuche fehlgeschlagen" -#: ../camel/camel-net-utils.c:832 +#: ../camel/camel-net-utils.c:848 #, c-format msgid "Name lookup failed: %s" msgstr "Namenssuche fehlgeschlagen: %s" -#: ../camel/camel-offline-folder.c:249 +#: ../camel/camel-offline-folder.c:247 #, c-format msgid "Syncing messages in folder '%s' to disk" msgstr "Nachrichten im Ordner »%s« werden auf Festplatte abgeglichen" @@ -1998,8 +2002,8 @@ msgstr "DIGEST-MD5" #: ../camel/camel-sasl-digest-md5.c:50 msgid "" -"This option will connect to the server using a secure DIGEST-MD5 password, if " -"the server supports it." +"This option will connect to the server using a secure DIGEST-MD5 password, " +"if the server supports it." msgstr "" "Dies stellt eine Verbindung mit dem SMTP-Server her und verwendet dazu ein " "sicheres DIGEST-MD5-Passwort, falls der Server dies unterstützt." @@ -2014,7 +2018,8 @@ msgstr "Server-Herausforderung ungültig\n" #: ../camel/camel-sasl-digest-md5.c:859 msgid "Server challenge contained invalid \"Quality of Protection\" token" -msgstr "Server-Herausforderung enthielt ungültiges »Quality-of-Protection«-Token" +msgstr "" +"Server-Herausforderung enthielt ungültiges »Quality-of-Protection«-Token" #: ../camel/camel-sasl-digest-md5.c:889 msgid "Server response did not contain authorization data" @@ -2029,17 +2034,17 @@ msgid "Server response does not match" msgstr "Antwort des Servers passt nicht" # CHECK -#: ../camel/camel-sasl-gssapi.c:72 +#: ../camel/camel-sasl-gssapi.c:78 msgid "GSSAPI" msgstr "GSSAPI" -#: ../camel/camel-sasl-gssapi.c:74 +#: ../camel/camel-sasl-gssapi.c:80 msgid "This option will connect to the server using Kerberos 5 authentication." msgstr "" -"Dies stellt eine Verbindung mit dem Server her und verwendet zur Legitimation " -"Kerberos 5" +"Dies stellt eine Verbindung mit dem Server her und verwendet zur " +"Legitimation Kerberos 5" -#: ../camel/camel-sasl-gssapi.c:168 +#: ../camel/camel-sasl-gssapi.c:174 msgid "" "The specified mechanism is not supported by the provided credential, or is " "unrecognized by the implementation." @@ -2047,12 +2052,12 @@ msgstr "" "Der angegebene Mechanismus wird vom übergebenen Berechtigungsnachweis nicht " "unterstützt oder wird von der Implementierung nicht erkannt." -#: ../camel/camel-sasl-gssapi.c:173 +#: ../camel/camel-sasl-gssapi.c:179 msgid "The provided target_name parameter was ill-formed." msgstr "" "Der übergebene Parameter »target_name« liegt in fehlerhafter Formatierung vor." -#: ../camel/camel-sasl-gssapi.c:176 +#: ../camel/camel-sasl-gssapi.c:182 msgid "" "The provided target_name parameter contained an invalid or unsupported type " "of name." @@ -2060,7 +2065,7 @@ msgstr "" "Der übergebene Parameter »target_name« enthält einen ungültigen oder nicht " "unterstützten Namenstyp " -#: ../camel/camel-sasl-gssapi.c:180 +#: ../camel/camel-sasl-gssapi.c:186 msgid "" "The input_token contains different channel bindings to those specified via " "the input_chan_bindings parameter." @@ -2068,7 +2073,7 @@ msgstr "" "Das Eingabe-Token »input_token« enthält andere Kanalbindungen als die vom " "Parameter »input_chan_bindings« angegebenen." -#: ../camel/camel-sasl-gssapi.c:185 +#: ../camel/camel-sasl-gssapi.c:191 msgid "" "The input_token contains an invalid signature, or a signature that could not " "be verified." @@ -2077,7 +2082,7 @@ msgstr "" "verifizierbare Signatur." # CHECK -#: ../camel/camel-sasl-gssapi.c:189 +#: ../camel/camel-sasl-gssapi.c:195 msgid "" "The supplied credentials were not valid for context initiation, or the " "credential handle did not reference any credentials." @@ -2086,35 +2091,35 @@ msgstr "" "Kontextes gültig oder der Berechtigungsnachweis-Handle hat auf keine " "Berechtigungsnachweise Bezug genommen." -#: ../camel/camel-sasl-gssapi.c:194 +#: ../camel/camel-sasl-gssapi.c:200 msgid "The supplied context handle did not refer to a valid context." msgstr "Der übergebene Kontext-Handle führte zu keinem gültigen Kontext." -#: ../camel/camel-sasl-gssapi.c:197 +#: ../camel/camel-sasl-gssapi.c:203 msgid "The consistency checks performed on the input_token failed." msgstr "" "Die für das Eingabe-Token »input_token« durchgeführten Konsistenzprüfungen " "schlugen fehl." -#: ../camel/camel-sasl-gssapi.c:200 +#: ../camel/camel-sasl-gssapi.c:206 msgid "The consistency checks performed on the credential failed." msgstr "" "Die für den Berechtigungsnachweis durchgeführten Konsistenzüberprüfungen " "schlugen fehl." -#: ../camel/camel-sasl-gssapi.c:203 +#: ../camel/camel-sasl-gssapi.c:209 msgid "The referenced credentials have expired." msgstr "" "Die Berechtigungsnachweise, auf die Bezug genommen wurde, sind nicht mehr " "gültig." -#: ../camel/camel-sasl-gssapi.c:209 ../camel/camel-sasl-gssapi.c:316 -#: ../camel/camel-sasl-gssapi.c:358 ../camel/camel-sasl-gssapi.c:373 +#: ../camel/camel-sasl-gssapi.c:215 ../camel/camel-sasl-gssapi.c:322 +#: ../camel/camel-sasl-gssapi.c:364 ../camel/camel-sasl-gssapi.c:379 #: ../camel/providers/imap/camel-imap-store.c:1272 msgid "Bad authentication response from server." msgstr "Fehlerhafte Legitimationsantwort vom Server." -#: ../camel/camel-sasl-gssapi.c:383 +#: ../camel/camel-sasl-gssapi.c:389 msgid "Unsupported security layer." msgstr "Nicht unterstützte Sicherheitsebene." @@ -2197,12 +2202,12 @@ msgstr "" "Ordner %s konnte nicht angelegt werden:\n" "%s" -#: ../camel/camel-session.c:477 +#: ../camel/camel-session.c:484 #, c-format msgid "Please enter the %s password for %s on host %s." msgstr "Bitte geben Sie das %s-Passwort für %s auf dem Rechner %s ein." -#: ../camel/camel-session.c:815 +#: ../camel/camel-session.c:832 msgid "Camel session doesn't support forwarding of a message." msgstr "Die Camel-Sitzung unterstützt die Weiterleitung einer Nachricht nicht." @@ -2268,7 +2273,7 @@ msgstr "Verschlüsselungskontext konnte nicht angelegt werden" msgid "Failed to add data to CMS encoder" msgstr "Daten konnten nicht zu CMS-Kodierer hinzugefügt werden" -#: ../camel/camel-smime-context.c:627 ../camel/camel-smime-context.c:1101 +#: ../camel/camel-smime-context.c:627 ../camel/camel-smime-context.c:1100 msgid "Failed to encode data" msgstr "Datenverschlüsselung gescheitert" @@ -2353,7 +2358,7 @@ msgstr "Signatur-Digest konnte nicht gefunden werden" msgid "Signer: %s <%s>: %s\n" msgstr "Unterzeichner: %s <%s>: %s\n" -#: ../camel/camel-smime-context.c:960 ../camel/camel-smime-context.c:1184 +#: ../camel/camel-smime-context.c:960 ../camel/camel-smime-context.c:1183 msgid "Decoder failed" msgstr "Dekodiervorgang gescheitert" @@ -2394,19 +2399,19 @@ msgstr "CMS-Empfängerinformationen konnten nicht angelegt werden" msgid "Cannot add CMS Recipient information" msgstr "CMS-Empfängerinformationen konnten nicht hinzugefügt werden" -#: ../camel/camel-smime-context.c:1095 +#: ../camel/camel-smime-context.c:1094 msgid "Failed to add data to encoder" msgstr "Hinzufügen von Daten zum Kodierer gescheitert" -#: ../camel/camel-smime-context.c:1191 +#: ../camel/camel-smime-context.c:1190 msgid "S/MIME Decrypt: No encrypted content found" msgstr "S/MIME-Entschlüsselung: Kein entschlüsselter Inhalt gefunden" -#: ../camel/camel-smime-context.c:1219 +#: ../camel/camel-smime-context.c:1218 msgid "import keys: unimplemented" msgstr "Schlüssel importieren: Nicht implementiert" -#: ../camel/camel-smime-context.c:1227 +#: ../camel/camel-smime-context.c:1226 msgid "export keys: unimplemented" msgstr "Schlüssel exportieren: Nicht implementiert" @@ -2595,9 +2600,9 @@ msgstr "Nachricht existiert nicht" #: ../camel/providers/nntp/camel-nntp-folder.c:248 #: ../camel/providers/nntp/camel-nntp-folder.c:408 #: ../camel/providers/pop3/camel-pop3-folder.c:268 -#: ../camel/providers/pop3/camel-pop3-folder.c:578 -#: ../camel/providers/pop3/camel-pop3-folder.c:639 -#: ../camel/providers/pop3/camel-pop3-folder.c:657 +#: ../camel/providers/pop3/camel-pop3-folder.c:587 +#: ../camel/providers/pop3/camel-pop3-folder.c:648 +#: ../camel/providers/pop3/camel-pop3-folder.c:666 msgid "User canceled" msgstr "Benutzer hat abgebrochen" @@ -2608,62 +2613,62 @@ msgstr "Benutzer hat abgebrochen" #: ../camel/providers/nntp/camel-nntp-folder.c:175 #: ../camel/providers/nntp/camel-nntp-folder.c:250 #: ../camel/providers/pop3/camel-pop3-folder.c:388 -#: ../camel/providers/pop3/camel-pop3-folder.c:581 -#: ../camel/providers/pop3/camel-pop3-folder.c:642 -#: ../camel/providers/pop3/camel-pop3-folder.c:649 -#: ../camel/providers/pop3/camel-pop3-folder.c:660 +#: ../camel/providers/pop3/camel-pop3-folder.c:590 +#: ../camel/providers/pop3/camel-pop3-folder.c:651 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 +#: ../camel/providers/pop3/camel-pop3-folder.c:669 #, c-format msgid "Cannot get message %s: %s" msgstr "Nachricht %s konnte nicht abgerufen werden: %s" #: ../camel/providers/groupwise/camel-groupwise-folder.c:173 #: ../camel/providers/groupwise/camel-groupwise-folder.c:181 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2507 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2501 #: ../camel/providers/imap4/camel-imap4-folder.c:837 msgid "This message is not available in offline mode." msgstr "Diese Nachricht ist im Offline-Modus nicht verfügbar." #: ../camel/providers/groupwise/camel-groupwise-folder.c:195 #: ../camel/providers/groupwise/camel-groupwise-folder.c:202 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2010 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2061 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2004 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2055 msgid "Could not get message" msgstr "Abrufen der Nachricht gescheitert" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:983 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:982 #: ../camel/providers/imap/camel-imap-folder.c:295 #, c-format msgid "Could not load summary for %s" msgstr "Zusammenfassung für %s konnte nicht geladen werden" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1056 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1055 #, c-format msgid "Checking for deleted messages %s" msgstr "Auf gelöschte Nachrichten überprüfen in %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1331 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1330 msgid "Trash Folder Full. Please Empty." msgstr "Bitte leeren Sie den Müll, er ist voll." -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1565 -#: ../camel/providers/groupwise/camel-groupwise-store.c:633 -#: ../camel/providers/groupwise/camel-groupwise-store.c:763 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1559 +#: ../camel/providers/groupwise/camel-groupwise-store.c:626 +#: ../camel/providers/groupwise/camel-groupwise-store.c:756 #: ../camel/providers/imap/camel-imap-folder.c:3429 #: ../camel/providers/imap/camel-imap-folder.c:3505 -#: ../camel/providers/imapx/camel-imapx-server.c:2728 -#: ../camel/providers/imapx/camel-imapx-server.c:2813 +#: ../camel/providers/imapx/camel-imapx-server.c:3649 +#: ../camel/providers/imapx/camel-imapx-server.c:3768 #, c-format msgid "Fetching summary information for new messages in %s" msgstr "" "Zusammenfassende Informationen für neue Nachrichten in %s werden abgerufen" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2361 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2404 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2355 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2398 #, c-format msgid "Cannot append message to folder '%s': %s" msgstr "Nachricht konnte nicht an Ordner »%s« angehängt werden: %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2392 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2386 #, c-format msgid "Cannot create message: %s" msgstr "Nachricht konnte nicht angelegt werden: %s" @@ -2695,14 +2700,14 @@ msgstr "Nach neuen E-Mails sehen" #: ../camel/providers/hula/camel-hula-provider.c:50 #: ../camel/providers/imap/camel-imap-provider.c:46 #: ../camel/providers/imap4/camel-imap4-provider.c:40 -#: ../camel/providers/imapx/camel-imapx-provider.c:48 +#: ../camel/providers/imapx/camel-imapx-provider.c:51 msgid "C_heck for new messages in all folders" msgstr "In allen Ordnern nach neuen E-Mails se_hen" #: ../camel/providers/groupwise/camel-groupwise-provider.c:59 #: ../camel/providers/imap/camel-imap-provider.c:68 #: ../camel/providers/imap4/camel-imap4-provider.c:51 -#: ../camel/providers/imapx/camel-imapx-provider.c:72 +#: ../camel/providers/imapx/camel-imapx-provider.c:79 #: ../camel/providers/local/camel-local-provider.c:46 #: ../camel/providers/local/camel-local-provider.c:86 #: ../camel/providers/local/camel-local-provider.c:106 @@ -2719,7 +2724,7 @@ msgstr "Neue Nachrichten auf _unerwünschten Inhalt prüfen" #: ../camel/providers/groupwise/camel-groupwise-provider.c:65 #: ../camel/providers/imap/camel-imap-provider.c:74 -#: ../camel/providers/imapx/camel-imapx-provider.c:78 +#: ../camel/providers/imapx/camel-imapx-provider.c:85 msgid "Only check for Junk messages in the IN_BOX folder" msgstr "A_usschließlich den Eingangsordner auf unerwünschte Nachrichten prüfen" @@ -2748,7 +2753,7 @@ msgstr "Für den Zugriff auf Novell GroupWise-Server" #: ../camel/providers/hula/camel-hula-provider.c:93 #: ../camel/providers/imap/camel-imap-provider.c:100 #: ../camel/providers/imap4/camel-imap4-provider.c:83 -#: ../camel/providers/imapx/camel-imapx-provider.c:104 +#: ../camel/providers/imapx/camel-imapx-provider.c:111 #: ../camel/providers/nntp/camel-nntp-provider.c:74 #: ../camel/providers/pop3/camel-pop3-provider.c:74 msgid "Password" @@ -2765,48 +2770,50 @@ msgstr "" msgid "Host or user not available in url" msgstr "Rechner oder Benutzer in der URL nicht verfügbar" -#: ../camel/providers/groupwise/camel-groupwise-store.c:204 +#: ../camel/providers/groupwise/camel-groupwise-store.c:197 #: ../camel/providers/imap/camel-imap-store.c:1356 +#: ../camel/providers/imapx/camel-imapx-server.c:2919 msgid "You did not enter a password." msgstr "Sie haben kein Passwort eingegeben." -#: ../camel/providers/groupwise/camel-groupwise-store.c:319 +#: ../camel/providers/groupwise/camel-groupwise-store.c:312 msgid "Some features may not work correctly with your current server version" msgstr "" "Einige Funktionen werden mit Ihrer momentanen Server-Version möglicherweise " "nicht einwandfrei arbeiten." -#: ../camel/providers/groupwise/camel-groupwise-store.c:540 +#: ../camel/providers/groupwise/camel-groupwise-store.c:533 #: ../camel/providers/imap/camel-imap-store.c:1879 #: ../camel/providers/imap/camel-imap-store.c:2077 -#: ../camel/providers/imapx/camel-imapx-store.c:297 +#: ../camel/providers/imapx/camel-imapx-store.c:375 #, c-format msgid "No such folder %s" msgstr "Ordner »%s« nicht vorhanden" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1266 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1201 msgid "Cannot create GroupWise folders in offline mode." msgstr "GroupWise-Ordner können im Offline-Modus nicht angelegt werden." -#: ../camel/providers/groupwise/camel-groupwise-store.c:1280 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1215 #: ../camel/providers/imap/camel-imap-store.c:1954 -#: ../camel/providers/imap/camel-imap-store.c:2334 +#: ../camel/providers/imap/camel-imap-store.c:2355 +#: ../camel/providers/imapx/camel-imapx-store.c:819 msgid "The parent folder is not allowed to contain subfolders" msgstr "Der Elternordner darf keine Unterordner enthalten" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1359 -#: ../camel/providers/groupwise/camel-groupwise-store.c:1382 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1294 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1317 #, c-format msgid "Cannot rename GroupWise folder '%s' to '%s'" msgstr "GroupWise-Ordner »%s« konnte nicht in »%s« umbenannt werden" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1414 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1349 #: ../camel/providers/groupwise/camel-groupwise-transport.c:120 #, c-format msgid "GroupWise server %s" msgstr "GroupWise-Server %s" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1416 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1351 #, c-format msgid "GroupWise service for %s on %s" msgstr "GroupWise-Dienst für %s auf %s" @@ -2823,8 +2830,8 @@ msgstr "Nachricht wird verschickt" #: ../camel/providers/groupwise/camel-groupwise-transport.c:212 msgid "" "You have exceeded this account's storage limit. Your messages are queued in " -"your Outbox. Resend by pressing Send/Receive after deleting/archiving some of " -"your mail.\n" +"your Outbox. Resend by pressing Send/Receive after deleting/archiving some " +"of your mail.\n" msgstr "" "Sie haben das Speicherplatzlimit für dieses Konto überschritten. Ihre " "Nachrichten sind im Ausgang abgelegt. Senden Sie diese erneut durch drücken " @@ -2839,32 +2846,32 @@ msgstr "Nachricht konnte nicht verschickt werden: %s" #: ../camel/providers/hula/camel-hula-provider.c:48 #: ../camel/providers/imap/camel-imap-provider.c:44 -#: ../camel/providers/imapx/camel-imapx-provider.c:44 +#: ../camel/providers/imapx/camel-imapx-provider.c:43 msgid "Checking for New Mail" msgstr "Nach neuen E-Mails sehen" #: ../camel/providers/hula/camel-hula-provider.c:53 #: ../camel/providers/imap/camel-imap-provider.c:52 -#: ../camel/providers/imapx/camel-imapx-provider.c:54 +#: ../camel/providers/imapx/camel-imapx-provider.c:57 msgid "Connection to Server" msgstr "Server-Verbindung" #: ../camel/providers/hula/camel-hula-provider.c:55 #: ../camel/providers/imap/camel-imap-provider.c:54 -#: ../camel/providers/imapx/camel-imapx-provider.c:56 +#: ../camel/providers/imapx/camel-imapx-provider.c:59 msgid "_Use custom command to connect to server" msgstr "_Benutzerdefinierten Befehl für die Server-Verbindung verwenden" #: ../camel/providers/hula/camel-hula-provider.c:57 #: ../camel/providers/imap/camel-imap-provider.c:56 -#: ../camel/providers/imapx/camel-imapx-provider.c:58 +#: ../camel/providers/imapx/camel-imapx-provider.c:61 msgid "Command:" msgstr "Befehl:" #: ../camel/providers/hula/camel-hula-provider.c:60 #: ../camel/providers/imap/camel-imap-provider.c:60 #: ../camel/providers/imap4/camel-imap4-provider.c:43 -#: ../camel/providers/imapx/camel-imapx-provider.c:64 +#: ../camel/providers/imapx/camel-imapx-provider.c:69 #: ../camel/providers/nntp/camel-nntp-provider.c:44 msgid "Folders" msgstr "Ordner" @@ -2872,14 +2879,14 @@ msgstr "Ordner" #: ../camel/providers/hula/camel-hula-provider.c:62 #: ../camel/providers/imap/camel-imap-provider.c:62 #: ../camel/providers/imap4/camel-imap4-provider.c:45 -#: ../camel/providers/imapx/camel-imapx-provider.c:66 +#: ../camel/providers/imapx/camel-imapx-provider.c:71 msgid "_Show only subscribed folders" msgstr "Nur abonnierte Ordner an_zeigen" #: ../camel/providers/hula/camel-hula-provider.c:64 #: ../camel/providers/imap/camel-imap-provider.c:64 #: ../camel/providers/imap4/camel-imap4-provider.c:47 -#: ../camel/providers/imapx/camel-imapx-provider.c:68 +#: ../camel/providers/imapx/camel-imapx-provider.c:74 msgid "O_verride server-supplied folder namespace" msgstr "Über vom Server vorgegebenen Ordner-Namensraum hin_wegsetzen" @@ -2914,12 +2921,12 @@ msgstr "Kein Eingangsdatenstrom" #: ../camel/providers/imap/camel-imap-command.c:229 #: ../camel/providers/imap/camel-imap-command.c:278 #: ../camel/providers/imap/camel-imap-command.c:492 -#: ../camel/providers/imap/camel-imap-store.c:3105 +#: ../camel/providers/imap/camel-imap-store.c:3126 msgid "Operation cancelled" msgstr "Vorgang abgebrochen" #: ../camel/providers/imap/camel-imap-command.c:331 -#: ../camel/providers/imap/camel-imap-store.c:3110 +#: ../camel/providers/imap/camel-imap-store.c:3131 #, c-format msgid "Server unexpectedly disconnected: %s" msgstr "Server-Verbindung unerwartet getrennt: %s" @@ -2970,7 +2977,7 @@ msgstr "Ordner %s konnte nicht angelegt werden: %s" #. Check UIDs and flags of all messages we already know of. #: ../camel/providers/imap/camel-imap-folder.c:918 -#: ../camel/providers/imapx/camel-imapx-server.c:2758 +#: ../camel/providers/imapx/camel-imapx-server.c:3686 #, c-format msgid "Scanning for changed messages in %s" msgstr "Geänderte Nachrichten werden in %s gesucht" @@ -2994,11 +3001,13 @@ msgid "Unable to retrieve message: %s" msgstr "Nachricht konnte nicht abgerufen werden: %s" #: ../camel/providers/imap/camel-imap-folder.c:2912 +#: ../camel/providers/imapx/camel-imapx-server.c:4800 #, c-format msgid "Cannot get message with message ID %s: %s" msgstr "Nachricht mit Kennung %s konnte nicht abgerufen werden: %s" #: ../camel/providers/imap/camel-imap-folder.c:2913 +#: ../camel/providers/imapx/camel-imapx-server.c:4801 msgid "No such message available." msgstr "Nachricht nicht verfügbar." @@ -3043,30 +3052,30 @@ msgid "Failed to cache %s: %s" msgstr "%s konnte nicht in den Zwischenspeicher geladen werden: %s" #: ../camel/providers/imap/camel-imap-provider.c:48 -#: ../camel/providers/imapx/camel-imapx-provider.c:50 +#: ../camel/providers/imapx/camel-imapx-provider.c:53 msgid "Ch_eck for new messages in subscribed folders" msgstr "In abonnierten Ordnern nach neuen E-Mails se_hen" #: ../camel/providers/imap/camel-imap-provider.c:66 #: ../camel/providers/imap4/camel-imap4-provider.c:49 -#: ../camel/providers/imapx/camel-imapx-provider.c:70 +#: ../camel/providers/imapx/camel-imapx-provider.c:76 msgid "Namespace:" msgstr "Namensraum:" #: ../camel/providers/imap/camel-imap-provider.c:70 #: ../camel/providers/imap4/camel-imap4-provider.c:53 -#: ../camel/providers/imapx/camel-imapx-provider.c:74 +#: ../camel/providers/imapx/camel-imapx-provider.c:81 msgid "_Apply filters to new messages in INBOX on this server" msgstr "Filter auf neue Nachrichten in INBOX dieses Servers _anwenden" #: ../camel/providers/imap/camel-imap-provider.c:72 -#: ../camel/providers/imapx/camel-imapx-provider.c:76 +#: ../camel/providers/imapx/camel-imapx-provider.c:83 msgid "Check new messages for Jun_k contents" msgstr "Neue Nachrichten auf _unerwünschten Inhalt prüfen" #: ../camel/providers/imap/camel-imap-provider.c:76 #: ../camel/providers/imap4/camel-imap4-provider.c:59 -#: ../camel/providers/imapx/camel-imapx-provider.c:80 +#: ../camel/providers/imapx/camel-imapx-provider.c:87 msgid "Automatically synchroni_ze remote mail locally" msgstr "Entfernte E-Mails automatisch lokal a_bgleichen" @@ -3075,12 +3084,12 @@ msgid "IMAP" msgstr "IMAP" #: ../camel/providers/imap/camel-imap-provider.c:85 -#: ../camel/providers/imapx/camel-imapx-provider.c:90 +#: ../camel/providers/imapx/camel-imapx-provider.c:97 msgid "For reading and storing mail on IMAP servers." msgstr "Zum Lesen und Speichern von E-Mails auf IMAP-Servern." #: ../camel/providers/imap/camel-imap-provider.c:102 -#: ../camel/providers/imapx/camel-imapx-provider.c:106 +#: ../camel/providers/imapx/camel-imapx-provider.c:113 msgid "This option will connect to the IMAP server using a plaintext password." msgstr "" "Dies stellt unter Verwendung eines unverschlüsselten Passworts eine " @@ -3088,14 +3097,14 @@ msgstr "" #: ../camel/providers/imap/camel-imap-store.c:435 #: ../camel/providers/imap4/camel-imap4-store.c:210 -#: ../camel/providers/imapx/camel-imapx-store.c:167 +#: ../camel/providers/imapx/camel-imapx-store.c:203 #, c-format msgid "IMAP server %s" msgstr "IMAP-Server %s" #: ../camel/providers/imap/camel-imap-store.c:437 #: ../camel/providers/imap4/camel-imap4-store.c:212 -#: ../camel/providers/imapx/camel-imapx-store.c:169 +#: ../camel/providers/imapx/camel-imapx-store.c:205 #, c-format msgid "IMAP service for %s on %s" msgstr "IMAP-Dienst für %s auf %s" @@ -3124,7 +3133,8 @@ msgstr "SSL nicht verfügbar" #: ../camel/providers/imap/camel-imap-store.c:578 #: ../camel/providers/imap/camel-imap-store.c:860 -#: ../camel/providers/imapx/camel-imapx-server.c:2017 +#: ../camel/providers/imapx/camel-imapx-server.c:2613 +#: ../camel/providers/imapx/camel-imapx-server.c:2711 msgid "Connection cancelled" msgstr "Verbindung abgebrochen" @@ -3135,20 +3145,20 @@ msgstr "Verbindung abgebrochen" #: ../camel/providers/imap4/camel-imap4-store.c:310 #: ../camel/providers/imap4/camel-imap4-store.c:325 #: ../camel/providers/imap4/camel-imap4-store.c:334 -#: ../camel/providers/imapx/camel-imapx-server.c:2057 -#: ../camel/providers/imapx/camel-imapx-server.c:2071 +#: ../camel/providers/imapx/camel-imapx-server.c:2782 +#: ../camel/providers/imapx/camel-imapx-server.c:2813 #, c-format msgid "Failed to connect to IMAP server %s in secure mode: %s" msgstr "Verbindung mit IMAP-Server %s im sicheren Modus ist gescheitert: %s" #: ../camel/providers/imap/camel-imap-store.c:690 -#: ../camel/providers/imapx/camel-imapx-server.c:2058 +#: ../camel/providers/imapx/camel-imapx-server.c:2783 #: ../camel/providers/smtp/camel-smtp-transport.c:332 msgid "STARTTLS not supported" msgstr "STARTTLS nicht unterstützt" #: ../camel/providers/imap/camel-imap-store.c:709 -#: ../camel/providers/imapx/camel-imapx-server.c:2072 +#: ../camel/providers/imapx/camel-imapx-server.c:2814 msgid "SSL negotiations failed" msgstr "SSL-»Verhandlungen« gescheitert" @@ -3159,17 +3169,18 @@ msgid "SSL is not available in this build" msgstr "SSL ist in diesem Build nicht verfügbar" #: ../camel/providers/imap/camel-imap-store.c:863 +#: ../camel/providers/imapx/camel-imapx-server.c:2616 #, c-format msgid "Could not connect with command \"%s\": %s" msgstr "Verbindung mit Befehl »%s« konnte nicht hergestellt werden: %s" #. create a dummy "." parent inbox, use to scan, then put back at the top level #: ../camel/providers/imap/camel-imap-store.c:1051 -#: ../camel/providers/imap/camel-imap-store.c:2430 +#: ../camel/providers/imap/camel-imap-store.c:2451 #: ../camel/providers/imap4/camel-imap4-store-summary.c:356 #: ../camel/providers/imap4/camel-imap4-store.c:1403 -#: ../camel/providers/imapx/camel-imapx-store.c:349 -#: ../camel/providers/imapx/camel-imapx-store.c:578 +#: ../camel/providers/imapx/camel-imapx-store.c:427 +#: ../camel/providers/imapx/camel-imapx-store.c:1000 #: ../camel/providers/local/camel-maildir-folder.c:81 #: ../camel/providers/local/camel-maildir-store.c:219 #: ../camel/providers/local/camel-maildir-store.c:291 @@ -3180,17 +3191,20 @@ msgid "Inbox" msgstr "Eingang" #: ../camel/providers/imap/camel-imap-store.c:1303 +#: ../camel/providers/imapx/camel-imapx-server.c:2878 #, c-format msgid "IMAP server %s does not support requested authentication type %s" msgstr "IMAP-Server %s unterstützt den verlangten Legitimationstyp %s nicht." #: ../camel/providers/imap/camel-imap-store.c:1313 +#: ../camel/providers/imapx/camel-imapx-server.c:2889 #: ../camel/providers/smtp/camel-smtp-transport.c:506 #, c-format msgid "No support for authentication type %s" msgstr "Keine Unterstützung für Legitimationstyp %s" #: ../camel/providers/imap/camel-imap-store.c:1387 +#: ../camel/providers/imapx/camel-imapx-server.c:2958 #, c-format msgid "" "Unable to authenticate to IMAP server.\n" @@ -3202,8 +3216,9 @@ msgstr "" "\n" #: ../camel/providers/imap/camel-imap-store.c:1891 -#: ../camel/providers/imap/camel-imap-store.c:2272 +#: ../camel/providers/imap/camel-imap-store.c:2293 #: ../camel/providers/imap4/camel-imap4-store.c:954 +#: ../camel/providers/imapx/camel-imapx-store.c:802 #, c-format msgid "" "The folder name \"%s\" is invalid because it contains the character \"%c\"" @@ -3217,12 +3232,13 @@ msgstr "Der Ordnername »%s« ist ungültig, da er das Zeichen »%c« enthält" msgid "Cannot create folder '%s': folder exists." msgstr "Ordner »%s« konnte nicht angelegt werden: Ordner existiert." -#: ../camel/providers/imap/camel-imap-store.c:2283 +#: ../camel/providers/imap/camel-imap-store.c:2304 +#: ../camel/providers/imapx/camel-imapx-store.c:811 #, c-format msgid "Unknown parent folder: %s" msgstr "Unbekannter Elternerdner: %s" -#: ../camel/providers/imap/camel-imap-store.c:3107 +#: ../camel/providers/imap/camel-imap-store.c:3128 msgid "Server unexpectedly disconnected" msgstr "Server-Verbindung wurde unerwartet getrennt" @@ -3285,7 +3301,8 @@ msgstr "" #: ../camel/providers/imap4/camel-imap4-folder.c:89 msgid "Expire cached messages older than X seconds" -msgstr "Zwischengespeicherte Nachrichten löschen, die älter als X Sekunden sind" +msgstr "" +"Zwischengespeicherte Nachrichten löschen, die älter als X Sekunden sind" #: ../camel/providers/imap4/camel-imap4-folder.c:427 #, c-format @@ -3325,7 +3342,8 @@ msgstr "" #, c-format msgid "Cannot get message %s from folder '%s': Bad command" msgstr "" -"Nachricht %s konnte nicht aus Ordner »%s« abgerufen werden: Fehlerhafter Befehl" +"Nachricht %s konnte nicht aus Ordner »%s« abgerufen werden: Fehlerhafter " +"Befehl" #: ../camel/providers/imap4/camel-imap4-folder.c:940 #, c-format @@ -3415,7 +3433,7 @@ msgstr "" "unterstützt STARTTLS nicht" #: ../camel/providers/imap4/camel-imap4-store.c:326 -#: ../camel/providers/pop3/camel-pop3-store.c:275 +#: ../camel/providers/pop3/camel-pop3-store.c:276 msgid "TLS negotiations failed" msgstr "TLS-»Verhandlungen« gescheitert" @@ -3448,8 +3466,8 @@ msgstr "" #, c-format msgid "Cannot get LIST information for '%s' on IMAP server %s: %s" msgstr "" -"LIST-Informationen für »%s« auf IMAP-Server %s konnten nicht abgerufen werden: " -"%s" +"LIST-Informationen für »%s« auf IMAP-Server %s konnten nicht abgerufen " +"werden: %s" #: ../camel/providers/imap4/camel-imap4-store.c:818 #: ../camel/providers/imap4/camel-imap4-store.c:1574 @@ -3571,38 +3589,33 @@ msgstr "Keine Daten" msgid "IMAP server %s unexpectedly disconnected: %s" msgstr "Verbindung mit IMAP-Server %s unerwartet getrennt: %s" -#: ../camel/providers/imapx/camel-imapx-folder.c:84 +#: ../camel/providers/imapx/camel-imapx-folder.c:86 #, c-format msgid "Could not create folder summary for %s" msgstr "Zusammenfassung für %s konnte nicht erstellt werden" -#: ../camel/providers/imapx/camel-imapx-folder.c:92 +#: ../camel/providers/imapx/camel-imapx-folder.c:94 #, c-format msgid "Could not create cache for %s" msgstr "Zwischenspeicher konnte nicht für »%s« angelegt werden" -#: ../camel/providers/imapx/camel-imapx-provider.c:46 +#: ../camel/providers/imapx/camel-imapx-provider.c:49 msgid "Use I_dle if the server supports it" msgstr "»Untätig« verwen_den, falls der Server es unterstützt" -#: ../camel/providers/imapx/camel-imapx-provider.c:60 +#: ../camel/providers/imapx/camel-imapx-provider.c:64 msgid "Numbe_r of cached connections to use" msgstr "Anzahl de_r zu verwendenden zwischengespeicherten Verbindungen" -#: ../camel/providers/imapx/camel-imapx-provider.c:88 +#: ../camel/providers/imapx/camel-imapx-provider.c:95 msgid "IMAP+" msgstr "IMAP+" -#: ../camel/providers/imapx/camel-imapx-server.c:2020 +#: ../camel/providers/imapx/camel-imapx-server.c:2714 #, c-format msgid "Could not connect to %s (port %s): %s" msgstr "Verbindung mit %s (Port %s) gescheitert: %s" -#: ../camel/providers/imapx/camel-imapx-server.c:2100 -#, c-format -msgid "%sPlease enter the IMAP password for %s@%s" -msgstr "%s Bitte geben Sie das IMAP-Passwort für %s@%s ein" - #: ../camel/providers/local/camel-local-folder.c:178 msgid "Index message body data" msgstr "Rumpfdaten der Nachricht indizieren" @@ -3677,7 +3690,7 @@ msgid "" "For reading and storing local mail in external standard mbox spool files.\n" "May also be used to read a tree of Elm, Pine, or Mutt style folders." msgstr "" -"Zum Lesen und Speichern von lokaler E-Mails in externen Standard-mbox-" +"Zum Lesen und Speichern von lokalen E-Mails in externen Standard-mbox-" "Spooldateien.\n" "Kann außerdem zum Einlesen eines Baums mit Elm-, Pine- oder Mutt-Ordnern " "verwendet werden." @@ -3740,7 +3753,8 @@ msgstr "Ordner-Metadatei »%s« konnte nicht gelöscht werden: %s" #: ../camel/providers/local/camel-local-summary.c:515 msgid "Unable to add message to summary: unknown reason" msgstr "" -"Nachricht konnte nicht zur Zusammenfassung hinzugefügt werden: Grund unbekannt" +"Nachricht konnte nicht zur Zusammenfassung hinzugefügt werden: Grund " +"unbekannt" #: ../camel/providers/local/camel-maildir-folder.c:230 msgid "Maildir append message canceled" @@ -3840,9 +3854,9 @@ msgid "Checking for new messages" msgstr "Nach neuen Nachrichten sehen" #: ../camel/providers/local/camel-maildir-summary.c:724 -#: ../camel/providers/local/camel-mbox-summary.c:526 -#: ../camel/providers/local/camel-mbox-summary.c:722 -#: ../camel/providers/local/camel-mbox-summary.c:842 +#: ../camel/providers/local/camel-mbox-summary.c:529 +#: ../camel/providers/local/camel-mbox-summary.c:725 +#: ../camel/providers/local/camel-mbox-summary.c:845 #: ../camel/providers/local/camel-spool-summary.c:150 msgid "Storing folder" msgstr "Ordner wird gespeichert" @@ -3941,80 +3955,80 @@ msgstr "»%s« konnte nicht umbenannt werden: »%s«: %s" msgid "Could not rename '%s' to %s: %s" msgstr "%s konnte nicht in %s umbenannt werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:532 +#: ../camel/providers/local/camel-mbox-summary.c:535 #, c-format msgid "Could not open folder: %s: %s" msgstr "Ordner konnte nicht geöffnet werden: %s: %s" -#: ../camel/providers/local/camel-mbox-summary.c:582 +#: ../camel/providers/local/camel-mbox-summary.c:585 #, c-format msgid "Fatal mail parser error near position %ld in folder %s" msgstr "" "Schwerwiegender Fehler beim Analysieren der E-Mail-Syntax nahe Position %ld " "in Ordner %s" -#: ../camel/providers/local/camel-mbox-summary.c:659 +#: ../camel/providers/local/camel-mbox-summary.c:662 #, c-format msgid "Cannot check folder: %s: %s" msgstr "Ordner konnte nicht geprüft werden: %s: %s" -#: ../camel/providers/local/camel-mbox-summary.c:727 -#: ../camel/providers/local/camel-mbox-summary.c:847 +#: ../camel/providers/local/camel-mbox-summary.c:730 +#: ../camel/providers/local/camel-mbox-summary.c:850 #: ../camel/providers/local/camel-spool-summary.c:155 #, c-format msgid "Could not open file: %s: %s" msgstr "Datei konnte nicht geöffnet werden: %s: %s" -#: ../camel/providers/local/camel-mbox-summary.c:739 +#: ../camel/providers/local/camel-mbox-summary.c:742 #: ../camel/providers/local/camel-spool-summary.c:168 #, c-format msgid "Cannot open temporary mailbox: %s" msgstr "Temporäres Postfach konnte nicht angelegt werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:752 -#: ../camel/providers/local/camel-mbox-summary.c:957 +#: ../camel/providers/local/camel-mbox-summary.c:755 +#: ../camel/providers/local/camel-mbox-summary.c:961 #, c-format msgid "Could not close source folder %s: %s" msgstr "Quellordner %s konnte nicht geschlossen werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:761 +#: ../camel/providers/local/camel-mbox-summary.c:764 #, c-format msgid "Could not close temporary folder: %s" msgstr "Temporärer Ordner konnte nicht geschlossen werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:776 +#: ../camel/providers/local/camel-mbox-summary.c:779 #, c-format msgid "Could not rename folder: %s" msgstr "Ordner konnte nicht umbenannt werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:858 -#: ../camel/providers/local/camel-mbox-summary.c:1084 +#: ../camel/providers/local/camel-mbox-summary.c:861 +#: ../camel/providers/local/camel-mbox-summary.c:1090 #, c-format msgid "Could not store folder: %s" msgstr "Ordner konnte nicht gespeichert werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:897 -#: ../camel/providers/local/camel-mbox-summary.c:905 -#: ../camel/providers/local/camel-mbox-summary.c:1114 -#: ../camel/providers/local/camel-mbox-summary.c:1122 +#: ../camel/providers/local/camel-mbox-summary.c:901 +#: ../camel/providers/local/camel-mbox-summary.c:909 +#: ../camel/providers/local/camel-mbox-summary.c:1121 +#: ../camel/providers/local/camel-mbox-summary.c:1129 msgid "Summary and folder mismatch, even after a sync" msgstr "" "Zusammenfassung und Ordner stimmen nicht überein, sogar nach einem " "Datenabgleich" -#: ../camel/providers/local/camel-mbox-summary.c:1047 +#: ../camel/providers/local/camel-mbox-summary.c:1053 #: ../camel/providers/local/camel-spool-summary.c:334 #, c-format msgid "Unknown error: %s" msgstr "Unbekannter Fehler: %s" -#: ../camel/providers/local/camel-mbox-summary.c:1190 -#: ../camel/providers/local/camel-mbox-summary.c:1216 +#: ../camel/providers/local/camel-mbox-summary.c:1197 +#: ../camel/providers/local/camel-mbox-summary.c:1223 #, c-format msgid "Writing to temporary mailbox failed: %s" msgstr "Fehler beim Schreiben in temporäres Postfach: %s" -#: ../camel/providers/local/camel-mbox-summary.c:1207 +#: ../camel/providers/local/camel-mbox-summary.c:1214 #, c-format msgid "Writing to temporary mailbox failed: %s: %s" msgstr "Fehler beim Schreiben in temporäres Postfach %s: %s" @@ -4175,7 +4189,8 @@ msgstr "" #: ../camel/providers/nntp/camel-nntp-provider.c:76 msgid "" -"This option will authenticate with the NNTP server using a plaintext password." +"This option will authenticate with the NNTP server using a plaintext " +"password." msgstr "" "Dies führt die Legitimation am NNTP-Server mit einem unverschlüsselten " "Passwort durch." @@ -4225,7 +4240,8 @@ msgstr "Sie können diese Newsgroup nicht abonnieren, da sie nicht existiert." #: ../camel/providers/nntp/camel-nntp-store.c:970 msgid "You cannot create a folder in a News store: subscribe instead." msgstr "" -"Sie können in Newsgroups keine Ordner anlegen: Abonnieren Sie sie stattdessen." +"Sie können in Newsgroups keine Ordner anlegen: Abonnieren Sie sie " +"stattdessen." #: ../camel/providers/nntp/camel-nntp-store.c:978 msgid "You cannot rename a folder in a News store." @@ -4262,26 +4278,26 @@ msgid "No such folder: %s" msgstr "Ordner existiert nicht: %s" #: ../camel/providers/nntp/camel-nntp-summary.c:272 -#: ../camel/providers/nntp/camel-nntp-summary.c:370 +#: ../camel/providers/nntp/camel-nntp-summary.c:373 #, c-format msgid "%s: Scanning new messages" msgstr "%s: neue Nachrichten werden eingelesen" -#: ../camel/providers/nntp/camel-nntp-summary.c:279 +#: ../camel/providers/nntp/camel-nntp-summary.c:282 #, c-format msgid "Unexpected server response from xover: %s" msgstr "Unerwartete Server-Antwort von xover: %s" -#: ../camel/providers/nntp/camel-nntp-summary.c:384 +#: ../camel/providers/nntp/camel-nntp-summary.c:387 #, c-format msgid "Unexpected server response from head: %s" msgstr "Unerwartete Server-Antwort von head: %s" -#: ../camel/providers/nntp/camel-nntp-summary.c:420 +#: ../camel/providers/nntp/camel-nntp-summary.c:423 msgid "Use cancel" msgstr "Abbrechen verwenden" -#: ../camel/providers/nntp/camel-nntp-summary.c:422 +#: ../camel/providers/nntp/camel-nntp-summary.c:425 #, c-format msgid "Operation failed: %s" msgstr "Vorgang gescheitert: %s" @@ -4303,20 +4319,20 @@ msgstr "Alte Nachrichten werden gelöscht" msgid "Expunging deleted messages" msgstr "Gelöschte Nachrichten werden ausgeräumt" -#: ../camel/providers/pop3/camel-pop3-folder.c:530 -#: ../camel/providers/pop3/camel-pop3-folder.c:552 +#: ../camel/providers/pop3/camel-pop3-folder.c:539 +#: ../camel/providers/pop3/camel-pop3-folder.c:561 #, c-format msgid "No message with UID %s" msgstr "Keine Nachricht mit der Kennung %s" #. Sigh, most of the crap in this function is so that the cancel button #. returns the proper exception code. Sigh. -#: ../camel/providers/pop3/camel-pop3-folder.c:559 +#: ../camel/providers/pop3/camel-pop3-folder.c:568 #, c-format msgid "Retrieving POP message %d" msgstr "POP-Nachricht %d wird abgerufen" -#: ../camel/providers/pop3/camel-pop3-folder.c:649 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 msgid "Unknown reason" msgstr "Unbekannter Grund" @@ -4357,8 +4373,8 @@ msgstr "" #: ../camel/providers/pop3/camel-pop3-provider.c:86 msgid "" "This option will connect to the POP server using an encrypted password via " -"the APOP protocol. This may not work for all users even on servers that claim " -"to support it." +"the APOP protocol. This may not work for all users even on servers that " +"claim to support it." msgstr "" "Dies stellt unter Verwendung eines verschlüsselten Passworts eine Verbindung " "mit dem POP-Server über das APO-Protokoll her. Das funktioniert " @@ -4371,8 +4387,8 @@ msgid "Failed to read a valid greeting from POP server %s" msgstr "Es konnte keine gültige Begrüßung durch POP-Server %s gelesen werden" #: ../camel/providers/pop3/camel-pop3-store.c:246 -#: ../camel/providers/pop3/camel-pop3-store.c:274 -#: ../camel/providers/pop3/camel-pop3-store.c:280 +#: ../camel/providers/pop3/camel-pop3-store.c:275 +#: ../camel/providers/pop3/camel-pop3-store.c:281 #, c-format msgid "Failed to connect to POP server %s in secure mode: %s" msgstr "" @@ -4383,24 +4399,25 @@ msgstr "" msgid "STLS not supported by server" msgstr "STLS wird vom Server nicht unterstützt" -#: ../camel/providers/pop3/camel-pop3-store.c:262 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:263 #, c-format msgid "Failed to connect to POP server %s in secure mode%s" msgstr "" "Verbindung mit POP-Server %s konnte im sicheren Modus nicht hergestellt " "werden %s" -#: ../camel/providers/pop3/camel-pop3-store.c:281 +#: ../camel/providers/pop3/camel-pop3-store.c:282 msgid "TLS is not available in this build" msgstr "TLS ist in diesem Build nicht verfügbar" -#: ../camel/providers/pop3/camel-pop3-store.c:387 +#: ../camel/providers/pop3/camel-pop3-store.c:388 #, c-format msgid "Could not connect to POP server %s" msgstr "Verbindung mit POP-Server %s konnte nicht hergestellt werden" -#: ../camel/providers/pop3/camel-pop3-store.c:428 -#: ../camel/providers/pop3/camel-pop3-store.c:565 +#: ../camel/providers/pop3/camel-pop3-store.c:429 +#: ../camel/providers/pop3/camel-pop3-store.c:567 #, c-format msgid "" "Unable to connect to POP server %s: No support for requested authentication " @@ -4409,22 +4426,23 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden: Der " "erforderliche Legitimationsmechanismus wird nicht unterstützt." -#: ../camel/providers/pop3/camel-pop3-store.c:446 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:448 #, c-format msgid "SASL '%s' Login failed for POP server %s%s" msgstr "SASL »%s«-Anmeldung an POP-Server %s gescheitert %s" -#: ../camel/providers/pop3/camel-pop3-store.c:460 +#: ../camel/providers/pop3/camel-pop3-store.c:462 #, c-format msgid "Cannot login to POP server %s: SASL Protocol error" msgstr "Anmeldung an POP-Server %s gescheitert: SASL-Protokollfehler" -#: ../camel/providers/pop3/camel-pop3-store.c:479 +#: ../camel/providers/pop3/camel-pop3-store.c:481 #, c-format msgid "Failed to authenticate on POP server %s: %s" msgstr "Legitimation am POP-Server %s gescheitert: %s" -#: ../camel/providers/pop3/camel-pop3-store.c:538 +#: ../camel/providers/pop3/camel-pop3-store.c:540 #, c-format msgid "" "Unable to connect to POP server %s:\tInvalid APOP ID received. Impersonation " @@ -4434,7 +4452,7 @@ msgstr "" "Kennung erhalten. Es könnte sich um einen sogenannten »Man in the Middle«-" "Angriff handeln. Bitte kontaktieren Sie Ihren System-Administrator." -#: ../camel/providers/pop3/camel-pop3-store.c:579 +#: ../camel/providers/pop3/camel-pop3-store.c:581 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4443,7 +4461,8 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden.\n" "Fehler beim Übermitteln des Passworts: %s" -#: ../camel/providers/pop3/camel-pop3-store.c:588 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:591 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4452,7 +4471,8 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden.\n" "Fehler beim Übermitteln des Benutzernamens %s" -#: ../camel/providers/pop3/camel-pop3-store.c:597 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:601 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4461,7 +4481,7 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden.\n" "Fehler beim Übermitteln des Passworts %s" -#: ../camel/providers/pop3/camel-pop3-store.c:703 +#: ../camel/providers/pop3/camel-pop3-store.c:707 #, c-format msgid "No such folder '%s'." msgstr "Ordner »%s« existiert nicht." @@ -4676,7 +4696,8 @@ msgstr "Nachricht konnte nicht verschickt werden: Dienst nicht verbunden." #: ../camel/providers/smtp/camel-smtp-transport.c:726 msgid "Cannot send message: sender address not valid." -msgstr "Nachricht konnte nicht verschickt werden: Absenderadresse nicht gültig." +msgstr "" +"Nachricht konnte nicht verschickt werden: Absenderadresse nicht gültig." #: ../camel/providers/smtp/camel-smtp-transport.c:730 msgid "Sending message" @@ -4778,85 +4799,85 @@ msgstr "QUIT-Befehl gescheitert: %s" msgid "QUIT command failed" msgstr "QUIT-Befehl gescheitert" -#: ../libedataserver/e-categories.c:47 +#: ../libedataserver/e-categories.c:44 msgid "Business" msgstr "Geschäftlich" -#: ../libedataserver/e-categories.c:48 +#: ../libedataserver/e-categories.c:45 msgid "Competition" msgstr "Konkurrenz" -#: ../libedataserver/e-categories.c:49 +#: ../libedataserver/e-categories.c:46 msgid "Favorites" msgstr "Favoriten" -#: ../libedataserver/e-categories.c:50 +#: ../libedataserver/e-categories.c:47 msgid "Gifts" msgstr "Geschenke" -#: ../libedataserver/e-categories.c:51 +#: ../libedataserver/e-categories.c:48 msgid "Goals/Objectives" msgstr "Ziele/Zielsetzungen" -#: ../libedataserver/e-categories.c:52 +#: ../libedataserver/e-categories.c:49 msgid "Holiday" msgstr "Urlaub" -#: ../libedataserver/e-categories.c:53 +#: ../libedataserver/e-categories.c:50 msgid "Holiday Cards" msgstr "Urlaubskarten" #. important people (e.g. new business partners) -#: ../libedataserver/e-categories.c:55 +#: ../libedataserver/e-categories.c:52 msgid "Hot Contacts" msgstr "Heiße Kontakte" -#: ../libedataserver/e-categories.c:56 +#: ../libedataserver/e-categories.c:53 msgid "Ideas" msgstr "Ideen" -#: ../libedataserver/e-categories.c:57 +#: ../libedataserver/e-categories.c:54 msgid "International" msgstr "International" -#: ../libedataserver/e-categories.c:58 +#: ../libedataserver/e-categories.c:55 msgid "Key Customer" msgstr "Schlüssel-Kunde" -#: ../libedataserver/e-categories.c:59 +#: ../libedataserver/e-categories.c:56 msgid "Miscellaneous" msgstr "Allgemeines" -#: ../libedataserver/e-categories.c:60 +#: ../libedataserver/e-categories.c:57 msgid "Personal" msgstr "Persönlich" -#: ../libedataserver/e-categories.c:61 +#: ../libedataserver/e-categories.c:58 msgid "Phone Calls" msgstr "Anrufe" #. Translators: "Status" is a category name; it can mean anything user wants to -#: ../libedataserver/e-categories.c:63 +#: ../libedataserver/e-categories.c:60 msgid "Status" msgstr "Status" -#: ../libedataserver/e-categories.c:64 +#: ../libedataserver/e-categories.c:61 msgid "Strategies" msgstr "Strategien" -#: ../libedataserver/e-categories.c:65 +#: ../libedataserver/e-categories.c:62 msgid "Suppliers" msgstr "Lieferanten" -#: ../libedataserver/e-categories.c:66 +#: ../libedataserver/e-categories.c:63 msgid "Time & Expenses" msgstr "Zeit und Ausgaben" -#: ../libedataserver/e-categories.c:67 +#: ../libedataserver/e-categories.c:64 msgid "VIP" msgstr "VIP" -#: ../libedataserver/e-categories.c:68 +#: ../libedataserver/e-categories.c:65 msgid "Waiting" msgstr "Wartend" @@ -4864,7 +4885,7 @@ msgstr "Wartend" #. in 12-hour format. #. strftime format of a weekday, a date and a #. time, in 12-hour format. -#: ../libedataserver/e-time-utils.c:1633 ../libedataserver/e-time-utils.c:1898 +#: ../libedataserver/e-time-utils.c:1635 ../libedataserver/e-time-utils.c:1902 msgid "%a %m/%d/%Y %I:%M:%S %p" msgstr "%a, %d.%m.%Y %I:%M:%S %p" @@ -4872,7 +4893,7 @@ msgstr "%a, %d.%m.%Y %I:%M:%S %p" #. in 24-hour format. #. strftime format of a weekday, a date and a #. time, in 24-hour format. -#: ../libedataserver/e-time-utils.c:1638 ../libedataserver/e-time-utils.c:1889 +#: ../libedataserver/e-time-utils.c:1640 ../libedataserver/e-time-utils.c:1893 msgid "%a %m/%d/%Y %H:%M:%S" msgstr "%a, %d. %m %Y %k:%M:%S" @@ -4880,7 +4901,7 @@ msgstr "%a, %d. %m %Y %k:%M:%S" #. in 12-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 12-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1643 ../libedataserver/e-time-utils.c:1894 +#: ../libedataserver/e-time-utils.c:1645 ../libedataserver/e-time-utils.c:1898 msgid "%a %m/%d/%Y %I:%M %p" msgstr "%a, %d.%m.%Y, %I:%M %p" @@ -4888,78 +4909,78 @@ msgstr "%a, %d.%m.%Y, %I:%M %p" #. in 24-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 24-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1648 ../libedataserver/e-time-utils.c:1885 +#: ../libedataserver/e-time-utils.c:1650 ../libedataserver/e-time-utils.c:1889 msgid "%a %m/%d/%Y %H:%M" msgstr "%a, %d.%m.%Y, %k:%M" #. strptime format of a weekday, a date and a time, #. in 12-hour format, without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1653 +#: ../libedataserver/e-time-utils.c:1655 msgid "%a %m/%d/%Y %I %p" msgstr "%a, %d.%m.%Y %I %p" #. strptime format of a weekday, a date and a time, #. in 24-hour format, without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1658 +#: ../libedataserver/e-time-utils.c:1660 msgid "%a %m/%d/%Y %H" msgstr "%a, %d.%m.%Y %k" #. strptime format of a weekday and a date. #. strftime format of a weekday and a date. -#: ../libedataserver/e-time-utils.c:1661 ../libedataserver/e-time-utils.c:1761 -#: ../libedataserver/e-time-utils.c:1880 +#: ../libedataserver/e-time-utils.c:1663 ../libedataserver/e-time-utils.c:1765 +#: ../libedataserver/e-time-utils.c:1884 msgid "%a %m/%d/%Y" msgstr "%a, %d.%m.%Y" #. strptime format of a date and a time, in 12-hour format. -#: ../libedataserver/e-time-utils.c:1668 +#: ../libedataserver/e-time-utils.c:1670 msgid "%m/%d/%Y %I:%M:%S %p" msgstr "%d.%m.%Y %I:%M:%S %p" #. strptime format of a date and a time, in 24-hour format. -#: ../libedataserver/e-time-utils.c:1672 +#: ../libedataserver/e-time-utils.c:1674 msgid "%m/%d/%Y %H:%M:%S" msgstr "%d.%m.%Y %k:%M:%S" #. strptime format of a date and a time, in 12-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1677 +#: ../libedataserver/e-time-utils.c:1679 msgid "%m/%d/%Y %I:%M %p" msgstr "%d.%m.%Y / %I:%M %p" #. strptime format of a date and a time, in 24-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1682 +#: ../libedataserver/e-time-utils.c:1684 msgid "%m/%d/%Y %H:%M" msgstr "%d.%m.%Y %k:%M" #. strptime format of a date and a time, in 12-hour format, #. without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1687 +#: ../libedataserver/e-time-utils.c:1689 msgid "%m/%d/%Y %I %p" msgstr "%d.%m.%Y %I %p" #. strptime format of a date and a time, in 24-hour format, #. without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1692 +#: ../libedataserver/e-time-utils.c:1694 msgid "%m/%d/%Y %H" msgstr "%d.%m.%Y %k" #. strptime format of a weekday and a date. #. This is the preferred date format for the locale. -#: ../libedataserver/e-time-utils.c:1695 ../libedataserver/e-time-utils.c:1764 +#: ../libedataserver/e-time-utils.c:1697 ../libedataserver/e-time-utils.c:1768 msgid "%m/%d/%Y" msgstr "%d.%m.%Y" #. strptime format for a time of day, in 12-hour format. #. strftime format of a time in 12-hour format. -#: ../libedataserver/e-time-utils.c:1822 ../libedataserver/e-time-utils.c:1942 +#: ../libedataserver/e-time-utils.c:1826 ../libedataserver/e-time-utils.c:1946 msgid "%I:%M:%S %p" msgstr "%I:%M:%S %p" #. strptime format for a time of day, in 24-hour format. #. strftime format of a time in 24-hour format. -#: ../libedataserver/e-time-utils.c:1826 ../libedataserver/e-time-utils.c:1934 +#: ../libedataserver/e-time-utils.c:1830 ../libedataserver/e-time-utils.c:1938 msgid "%H:%M:%S" msgstr "%k:%M:%S" @@ -4967,24 +4988,24 @@ msgstr "%k:%M:%S" #. in 12-hour format. #. strftime format of a time in 12-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1831 ../libedataserver/e-time-utils.c:1939 +#: ../libedataserver/e-time-utils.c:1835 ../libedataserver/e-time-utils.c:1943 msgid "%I:%M %p" msgstr "%I:%M %p" #. strptime format for time of day, without seconds 24-hour format. #. strftime format of a time in 24-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1835 ../libedataserver/e-time-utils.c:1931 +#: ../libedataserver/e-time-utils.c:1839 ../libedataserver/e-time-utils.c:1935 msgid "%H:%M" msgstr "%k:%M" #. strptime format for time of day, without seconds 24-hour format, and no colon. -#: ../libedataserver/e-time-utils.c:1838 +#: ../libedataserver/e-time-utils.c:1842 msgid "%H%M" msgstr "%k%M" #. strptime format for hour and AM/PM, 12-hour format. -#: ../libedataserver/e-time-utils.c:1842 +#: ../libedataserver/e-time-utils.c:1846 msgid "%I %p" msgstr "%I %p" @@ -5007,7 +5028,8 @@ msgstr "_Kein Bild" #: ../libedataserverui/e-categories-dialog.c:372 #, c-format msgid "" -"There is already a category '%s' in the configuration. Please use another name" +"There is already a category '%s' in the configuration. Please use another " +"name" msgstr "" "Es gibt bereits eine Kategorie »%s« in dieser Konfiguration. Bitte einen " "anderen Namen verwenden." @@ -5061,19 +5083,19 @@ msgstr "Farbinformation" msgid "The color to render" msgstr "Die darzustellende Farbe" -#: ../libedataserverui/e-name-selector-dialog.c:292 +#: ../libedataserverui/e-name-selector-dialog.c:300 msgid "Select Contacts from Address Book" msgstr "Kontakte aus dem Adressbuch wählen" -#: ../libedataserverui/e-name-selector-dialog.c:587 +#: ../libedataserverui/e-name-selector-dialog.c:639 msgid "_Add" msgstr "_Hinzufügen" -#: ../libedataserverui/e-name-selector-dialog.c:612 +#: ../libedataserverui/e-name-selector-dialog.c:643 msgid "_Remove" msgstr "_Entfernen" -#: ../libedataserverui/e-name-selector-dialog.c:789 +#: ../libedataserverui/e-name-selector-dialog.c:828 #: ../libedataserverui/e-name-selector-dialog.ui.h:6 msgid "Any Category" msgstr "Jede Kategorie" @@ -5115,58 +5137,58 @@ msgid "_Search:" msgstr "_Suchen:" #. To Translators: This would be similiar to "Expand MyList Inline" where MyList is a Contact List -#: ../libedataserverui/e-name-selector-entry.c:2508 +#: ../libedataserverui/e-name-selector-entry.c:2511 #, c-format msgid "E_xpand %s Inline" msgstr "%s aus_klappen" #. Copy Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2523 +#: ../libedataserverui/e-name-selector-entry.c:2526 #, c-format msgid "Cop_y %s" msgstr "%s _kopieren" #. Cut Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2533 +#: ../libedataserverui/e-name-selector-entry.c:2536 #, c-format msgid "C_ut %s" msgstr "%s ausschnei_den" #. Edit Contact item -#: ../libedataserverui/e-name-selector-entry.c:2550 +#: ../libedataserverui/e-name-selector-entry.c:2553 #, c-format msgid "_Edit %s" msgstr "%s _bearbeiten" -#: ../libedataserverui/e-name-selector-list.c:469 +#: ../libedataserverui/e-name-selector-list.c:479 #, c-format msgid "_Delete %s" msgstr "%s _löschen" -#: ../libedataserverui/e-passwords.c:234 +#: ../libedataserverui/e-passwords.c:240 #, c-format msgid "Keyring key is unusable: no user or host name" msgstr "" "Schlüssel des Schlüsselbundes kann nicht genutzt werden: Kein Benutzer- oder " "Servername" -#: ../libedataserverui/e-passwords.c:1093 +#: ../libedataserverui/e-passwords.c:1099 msgid "You have the Caps Lock key on." msgstr "Die Umschalttaste ist aktiviert." -#: ../libedataserverui/e-passwords.c:1215 +#: ../libedataserverui/e-passwords.c:1221 msgid "_Remember this passphrase" msgstr "An dieses Passwort _erinnern" -#: ../libedataserverui/e-passwords.c:1216 +#: ../libedataserverui/e-passwords.c:1222 msgid "_Remember this passphrase for the remainder of this session" msgstr "Für den Rest dieser Sitzung an dieses Passwort _erinnern" -#: ../libedataserverui/e-passwords.c:1221 +#: ../libedataserverui/e-passwords.c:1227 msgid "_Remember this password" msgstr "An dieses Passwort _erinnern" -#: ../libedataserverui/e-passwords.c:1222 +#: ../libedataserverui/e-passwords.c:1228 msgid "_Remember this password for the remainder of this session" msgstr "Für den Rest dieser Sitzung an dieses Passwort _erinnern" @@ -5176,7 +5198,7 @@ msgstr "Für den Rest dieser Sitzung an dieses Passwort _erinnern" msgid "Select destination" msgstr "Ziel wählen" -#: ../libedataserverui/e-source-selector-dialog.c:156 +#: ../libedataserverui/e-source-selector-dialog.c:172 msgid "_Destination" msgstr "_Ziel" @@ -5196,6 +5218,12 @@ msgstr "Server liefert keine Antwort" msgid "Bad parameter" msgstr "Fehlerhafter Parameter" +#~ msgid "Use _Quick Resync if the server supports it" +#~ msgstr "»_Schnelles Abgleichen« verwenden, falls es der Server unterstützt" + +#~ msgid "%sPlease enter the IMAP password for %s@%s" +#~ msgstr "%s Bitte geben Sie das IMAP-Passwort für %s@%s ein" + #~ msgid "" #~ "Experimental IMAP 4(.1) client\n" #~ "This is untested and unsupported code, you want to use plain imap " @@ -5272,11 +5300,13 @@ msgstr "Fehlerhafter Parameter" #~ msgid "Unable to decrypt Certificate Revocation List signature" #~ msgstr "" -#~ "Die Signatur der Zertifikatrücknahmeliste konnte nicht entschlüsselt werden" +#~ "Die Signatur der Zertifikatrücknahmeliste konnte nicht entschlüsselt " +#~ "werden" #~ msgid "Unable to decode issuer's public key" #~ msgstr "" -#~ "Der öffentliche Schlüssel des Ausstellers konnte nicht entschlüsselt werden" +#~ "Der öffentliche Schlüssel des Ausstellers konnte nicht entschlüsselt " +#~ "werden" #~ msgid "Certificate signature failure" #~ msgstr "Zertifikatsignatur fehlerhaft" diff --git a/po/zh_CN.po b/po/zh_CN.po index ac607f84e..c37b3c5b3 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -10,14 +10,16 @@ # Partly comes from Sun_l10n group, 2003. # Yang Zhang <zyangmath@gmail.com>, 2008. # Aron Xu <happyaron.xu@gmail.com>, 2009. +# Yinghua Wang <wantinghard@gmail.com>, 2010 # msgid "" msgstr "" "Project-Id-Version: evolution-data-server master\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-30 13:09+0800\n" -"PO-Revision-Date: 2008-08-30 13:21+0800\n" -"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=evolution-data-server&component=Misc.\n" +"POT-Creation-Date: 2010-09-01 00:36+0000\n" +"PO-Revision-Date: 2010-08-10 10:04+0800\n" +"Last-Translator: Yinghua Wang <wantinghard@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,16 +35,16 @@ msgstr "正在载入..." #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2261 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2283 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2328 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4510 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4553 #: ../addressbook/backends/vcf/e-book-backend-vcf.c:476 msgid "Searching..." msgstr "正在搜索..." #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2696 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4674 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4717 #, c-format msgid "Downloading contacts (%d)... " -msgstr "正在下载联系人(%d 位)..." +msgstr "正在下载联系人(%d)..." #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2845 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:3029 @@ -51,867 +53,921 @@ msgstr "正在下载联系人(%d 位)..." msgid "Updating contacts cache (%d)... " msgstr "正在更新联系人缓存(%d)..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:788 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:818 msgid "Using Distinguished Name (DN)" msgstr "使用已识别的姓名 (DN)" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:791 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:821 msgid "Using Email Address" msgstr "使用电子邮件地址" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1067 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1098 msgid "Reconnecting to LDAP server..." msgstr "正在重新连接 LDAP 服务器..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1711 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1740 msgid "Adding contact to LDAP server..." msgstr "正在将联系人添加到 LDAP 服务器..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1845 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1874 msgid "Removing contact from LDAP server..." msgstr "正在从 LDAP 服务器删除联系人..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2282 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2311 msgid "Modifying contact from LDAP server..." msgstr "正在修改 LDAP 服务器上的联系人..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4371 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4414 msgid "Receiving LDAP search results..." msgstr "正在接收 LDAP 的搜索结果..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4532 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4575 msgid "Error performing search" msgstr "执行搜索错误" -#: ../addressbook/libebook/e-book.c:1837 -#, c-format -msgid "%s: there was no self contact UID stored in gconf" -msgstr "%s:gconf 中没有存储自身联系人的 UID" - -#: ../addressbook/libebook/e-book.c:1967 +#: ../addressbook/libebook/e-book.c:2152 #, c-format msgid "%s: there was no source for uid `%s' stored in gconf." msgstr "%s:gconf 中没有存储 uid“%s”的源。" #. Dummy row as EContactField starts from 1 -#: ../addressbook/libebook/e-contact.c:113 +#: ../addressbook/libebook/e-contact.c:115 msgid "Unique ID" msgstr "唯一的 ID" -#: ../addressbook/libebook/e-contact.c:114 +#: ../addressbook/libebook/e-contact.c:116 msgid "File Under" msgstr "存档于" #. URI of the book to which the contact belongs to -#: ../addressbook/libebook/e-contact.c:116 +#: ../addressbook/libebook/e-contact.c:118 msgid "Book URI" -msgstr "订阅 URI" +msgstr "地址簿 URI" #. Name fields #. FN isn't really a structured field - we use a getter/setter #. so we can set the N property (since evo 1.4 works fine with #. vcards that don't even have a N attribute. *sigh*) -#: ../addressbook/libebook/e-contact.c:122 +#: ../addressbook/libebook/e-contact.c:124 msgid "Full Name" msgstr "全名" -#: ../addressbook/libebook/e-contact.c:123 +#: ../addressbook/libebook/e-contact.c:125 msgid "Given Name" msgstr "名" -#: ../addressbook/libebook/e-contact.c:124 +#: ../addressbook/libebook/e-contact.c:126 msgid "Family Name" msgstr "姓" -#: ../addressbook/libebook/e-contact.c:125 +#: ../addressbook/libebook/e-contact.c:127 msgid "Nickname" msgstr "昵称" #. Email fields -#: ../addressbook/libebook/e-contact.c:128 +#: ../addressbook/libebook/e-contact.c:130 msgid "Email 1" msgstr "电子邮件 1" -#: ../addressbook/libebook/e-contact.c:129 +#: ../addressbook/libebook/e-contact.c:131 msgid "Email 2" msgstr "电子邮件 2" -#: ../addressbook/libebook/e-contact.c:130 +#: ../addressbook/libebook/e-contact.c:132 msgid "Email 3" msgstr "电子邮件 3" -#: ../addressbook/libebook/e-contact.c:131 +#: ../addressbook/libebook/e-contact.c:133 msgid "Email 4" msgstr "电子邮件 4" -#: ../addressbook/libebook/e-contact.c:133 +#: ../addressbook/libebook/e-contact.c:135 msgid "Mailer" msgstr "邮件程序" #. Address Labels -#: ../addressbook/libebook/e-contact.c:136 +#: ../addressbook/libebook/e-contact.c:138 msgid "Home Address Label" msgstr "家庭地址标签" -#: ../addressbook/libebook/e-contact.c:137 +#: ../addressbook/libebook/e-contact.c:139 msgid "Work Address Label" msgstr "工作地址标签" -#: ../addressbook/libebook/e-contact.c:138 +#: ../addressbook/libebook/e-contact.c:140 msgid "Other Address Label" msgstr "其它地址标签" #. Phone fields -#: ../addressbook/libebook/e-contact.c:141 +#: ../addressbook/libebook/e-contact.c:143 msgid "Assistant Phone" msgstr "助手电话" -#: ../addressbook/libebook/e-contact.c:142 +#: ../addressbook/libebook/e-contact.c:144 msgid "Business Phone" msgstr "商务电话" -#: ../addressbook/libebook/e-contact.c:143 +#: ../addressbook/libebook/e-contact.c:145 msgid "Business Phone 2" msgstr "商务电话 2" -#: ../addressbook/libebook/e-contact.c:144 +#: ../addressbook/libebook/e-contact.c:146 msgid "Business Fax" msgstr "商务传真" -#: ../addressbook/libebook/e-contact.c:145 +#: ../addressbook/libebook/e-contact.c:147 msgid "Callback Phone" msgstr "回拨电话" -#: ../addressbook/libebook/e-contact.c:146 +#: ../addressbook/libebook/e-contact.c:148 msgid "Car Phone" msgstr "车载电话" -#: ../addressbook/libebook/e-contact.c:147 +#: ../addressbook/libebook/e-contact.c:149 msgid "Company Phone" msgstr "公司电话" -#: ../addressbook/libebook/e-contact.c:148 +#: ../addressbook/libebook/e-contact.c:150 msgid "Home Phone" msgstr "家庭电话" -#: ../addressbook/libebook/e-contact.c:149 +#: ../addressbook/libebook/e-contact.c:151 msgid "Home Phone 2" msgstr "家庭电话 2" -#: ../addressbook/libebook/e-contact.c:150 +#: ../addressbook/libebook/e-contact.c:152 msgid "Home Fax" msgstr "家庭传真" -#: ../addressbook/libebook/e-contact.c:151 +#: ../addressbook/libebook/e-contact.c:153 msgid "ISDN" msgstr "ISDN" -#: ../addressbook/libebook/e-contact.c:152 +#: ../addressbook/libebook/e-contact.c:154 msgid "Mobile Phone" msgstr "移动电话" -#: ../addressbook/libebook/e-contact.c:153 +#: ../addressbook/libebook/e-contact.c:155 msgid "Other Phone" msgstr "其它电话" -#: ../addressbook/libebook/e-contact.c:154 +#: ../addressbook/libebook/e-contact.c:156 msgid "Other Fax" msgstr "其它传真" -#: ../addressbook/libebook/e-contact.c:155 +#: ../addressbook/libebook/e-contact.c:157 msgid "Pager" msgstr "寻呼机" -#: ../addressbook/libebook/e-contact.c:156 +#: ../addressbook/libebook/e-contact.c:158 msgid "Primary Phone" msgstr "主要电话" -#: ../addressbook/libebook/e-contact.c:157 +#: ../addressbook/libebook/e-contact.c:159 msgid "Radio" msgstr "收音机" -#: ../addressbook/libebook/e-contact.c:158 +#: ../addressbook/libebook/e-contact.c:160 msgid "Telex" msgstr "电传" #. To translators: TTY is Teletypewriter -#: ../addressbook/libebook/e-contact.c:160 +#: ../addressbook/libebook/e-contact.c:162 msgid "TTY" msgstr "TTY" #. Organizational fields -#: ../addressbook/libebook/e-contact.c:163 +#: ../addressbook/libebook/e-contact.c:165 msgid "Organization" msgstr "组织" -#: ../addressbook/libebook/e-contact.c:164 +#: ../addressbook/libebook/e-contact.c:166 msgid "Organizational Unit" msgstr "组织单元" -#: ../addressbook/libebook/e-contact.c:165 +#: ../addressbook/libebook/e-contact.c:167 msgid "Office" msgstr "办公室" -#: ../addressbook/libebook/e-contact.c:166 +#: ../addressbook/libebook/e-contact.c:168 msgid "Title" msgstr "头衔" -#: ../addressbook/libebook/e-contact.c:167 +#: ../addressbook/libebook/e-contact.c:169 msgid "Role" msgstr "角色" -#: ../addressbook/libebook/e-contact.c:168 +#: ../addressbook/libebook/e-contact.c:170 msgid "Manager" msgstr "经理" -#: ../addressbook/libebook/e-contact.c:169 +#: ../addressbook/libebook/e-contact.c:171 msgid "Assistant" msgstr "助手" #. Web fields -#: ../addressbook/libebook/e-contact.c:172 +#: ../addressbook/libebook/e-contact.c:174 msgid "Homepage URL" msgstr "个人主页 URL" -#: ../addressbook/libebook/e-contact.c:173 +#: ../addressbook/libebook/e-contact.c:175 msgid "Weblog URL" msgstr "网络日记 URL" #. Contact categories -#: ../addressbook/libebook/e-contact.c:176 -#: ../libedataserverui/e-categories-dialog.c:632 +#: ../addressbook/libebook/e-contact.c:178 +#: ../libedataserverui/e-categories-dialog.c:671 msgid "Categories" msgstr "类别" #. Collaboration fields -#: ../addressbook/libebook/e-contact.c:179 +#: ../addressbook/libebook/e-contact.c:181 msgid "Calendar URI" msgstr "日历 URI" -#: ../addressbook/libebook/e-contact.c:180 +#: ../addressbook/libebook/e-contact.c:182 msgid "Free/Busy URL" msgstr "空闲/繁忙 URL" -#: ../addressbook/libebook/e-contact.c:181 +#: ../addressbook/libebook/e-contact.c:183 msgid "ICS Calendar" msgstr "ICS 日历" -#: ../addressbook/libebook/e-contact.c:182 +#: ../addressbook/libebook/e-contact.c:184 msgid "Video Conferencing URL" msgstr "视频会议 URL" #. Misc fields -#: ../addressbook/libebook/e-contact.c:185 +#: ../addressbook/libebook/e-contact.c:187 msgid "Spouse's Name" msgstr "配偶姓名" -#: ../addressbook/libebook/e-contact.c:186 +#: ../addressbook/libebook/e-contact.c:188 msgid "Note" msgstr "注释" #. Instant messaging fields -#: ../addressbook/libebook/e-contact.c:189 +#: ../addressbook/libebook/e-contact.c:191 msgid "AIM Home Screen Name 1" msgstr "AIM 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:190 +#: ../addressbook/libebook/e-contact.c:192 msgid "AIM Home Screen Name 2" msgstr "AIM 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:191 +#: ../addressbook/libebook/e-contact.c:193 msgid "AIM Home Screen Name 3" msgstr "AIM 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:192 +#: ../addressbook/libebook/e-contact.c:194 msgid "AIM Work Screen Name 1" msgstr "AIM 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:193 +#: ../addressbook/libebook/e-contact.c:195 msgid "AIM Work Screen Name 2" msgstr "AIM 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:194 +#: ../addressbook/libebook/e-contact.c:196 msgid "AIM Work Screen Name 3" msgstr "AIM 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:195 +#: ../addressbook/libebook/e-contact.c:197 msgid "GroupWise Home Screen Name 1" msgstr "GroupWise 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:196 +#: ../addressbook/libebook/e-contact.c:198 msgid "GroupWise Home Screen Name 2" msgstr "GroupWise 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:197 +#: ../addressbook/libebook/e-contact.c:199 msgid "GroupWise Home Screen Name 3" msgstr "GroupWise 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:198 +#: ../addressbook/libebook/e-contact.c:200 msgid "GroupWise Work Screen Name 1" msgstr "GroupWise 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:199 +#: ../addressbook/libebook/e-contact.c:201 msgid "GroupWise Work Screen Name 2" msgstr "GroupWise 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:200 +#: ../addressbook/libebook/e-contact.c:202 msgid "GroupWise Work Screen Name 3" msgstr "GroupWise 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:201 +#: ../addressbook/libebook/e-contact.c:203 msgid "Jabber Home Id 1" msgstr "Jabber 家庭 Id 1" -#: ../addressbook/libebook/e-contact.c:202 +#: ../addressbook/libebook/e-contact.c:204 msgid "Jabber Home Id 2" msgstr "Jabber 家庭 Id 2" -#: ../addressbook/libebook/e-contact.c:203 +#: ../addressbook/libebook/e-contact.c:205 msgid "Jabber Home Id 3" msgstr "Jabber 家庭 Id 3" -#: ../addressbook/libebook/e-contact.c:204 +#: ../addressbook/libebook/e-contact.c:206 msgid "Jabber Work Id 1" msgstr "Jabber 工作 Id 1" -#: ../addressbook/libebook/e-contact.c:205 +#: ../addressbook/libebook/e-contact.c:207 msgid "Jabber Work Id 2" msgstr "Jabber 工作 Id 2" -#: ../addressbook/libebook/e-contact.c:206 +#: ../addressbook/libebook/e-contact.c:208 msgid "Jabber Work Id 3" msgstr "Jabber 工作 Id 3" -#: ../addressbook/libebook/e-contact.c:207 +#: ../addressbook/libebook/e-contact.c:209 msgid "Yahoo! Home Screen Name 1" msgstr "Yahoo! 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:208 +#: ../addressbook/libebook/e-contact.c:210 msgid "Yahoo! Home Screen Name 2" msgstr "Yahoo! 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:209 +#: ../addressbook/libebook/e-contact.c:211 msgid "Yahoo! Home Screen Name 3" msgstr "Yahoo! 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:210 +#: ../addressbook/libebook/e-contact.c:212 msgid "Yahoo! Work Screen Name 1" msgstr "Yahoo! 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:211 +#: ../addressbook/libebook/e-contact.c:213 msgid "Yahoo! Work Screen Name 2" msgstr "Yahoo! 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:212 +#: ../addressbook/libebook/e-contact.c:214 msgid "Yahoo! Work Screen Name 3" msgstr "Yahoo! 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:213 +#: ../addressbook/libebook/e-contact.c:215 msgid "MSN Home Screen Name 1" msgstr "MSN 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:214 +#: ../addressbook/libebook/e-contact.c:216 msgid "MSN Home Screen Name 2" msgstr "MSN 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:215 +#: ../addressbook/libebook/e-contact.c:217 msgid "MSN Home Screen Name 3" msgstr "MSN 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:216 +#: ../addressbook/libebook/e-contact.c:218 msgid "MSN Work Screen Name 1" msgstr "MSN 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:217 +#: ../addressbook/libebook/e-contact.c:219 msgid "MSN Work Screen Name 2" msgstr "MSN 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:218 +#: ../addressbook/libebook/e-contact.c:220 msgid "MSN Work Screen Name 3" msgstr "MSN 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:219 +#: ../addressbook/libebook/e-contact.c:221 msgid "ICQ Home Id 1" msgstr "ICQ 家庭 Id 1" -#: ../addressbook/libebook/e-contact.c:220 +#: ../addressbook/libebook/e-contact.c:222 msgid "ICQ Home Id 2" msgstr "ICQ 家庭 Id 2" -#: ../addressbook/libebook/e-contact.c:221 +#: ../addressbook/libebook/e-contact.c:223 msgid "ICQ Home Id 3" msgstr "ICQ 家庭 Id 3" -#: ../addressbook/libebook/e-contact.c:222 +#: ../addressbook/libebook/e-contact.c:224 msgid "ICQ Work Id 1" msgstr "ICQ 工作 Id 1" -#: ../addressbook/libebook/e-contact.c:223 +#: ../addressbook/libebook/e-contact.c:225 msgid "ICQ Work Id 2" msgstr "ICQ 工作 Id 2" -#: ../addressbook/libebook/e-contact.c:224 +#: ../addressbook/libebook/e-contact.c:226 msgid "ICQ Work Id 3" msgstr "ICQ 工作 Id 3" #. Last modified time -#: ../addressbook/libebook/e-contact.c:227 +#: ../addressbook/libebook/e-contact.c:229 msgid "Last Revision" msgstr "上次修订" -#: ../addressbook/libebook/e-contact.c:228 +#: ../addressbook/libebook/e-contact.c:230 msgid "Name or Org" msgstr "名称或组织" #. Address fields -#: ../addressbook/libebook/e-contact.c:231 +#: ../addressbook/libebook/e-contact.c:233 msgid "Address List" msgstr "地址列表" -#: ../addressbook/libebook/e-contact.c:232 +#: ../addressbook/libebook/e-contact.c:234 msgid "Home Address" msgstr "家庭地址" -#: ../addressbook/libebook/e-contact.c:233 +#: ../addressbook/libebook/e-contact.c:235 msgid "Work Address" msgstr "办公地址" -#: ../addressbook/libebook/e-contact.c:234 +#: ../addressbook/libebook/e-contact.c:236 msgid "Other Address" msgstr "其它地址" #. Contact categories -#: ../addressbook/libebook/e-contact.c:237 +#: ../addressbook/libebook/e-contact.c:239 msgid "Category List" msgstr "类别列表" #. Photo/Logo -#: ../addressbook/libebook/e-contact.c:240 +#: ../addressbook/libebook/e-contact.c:242 msgid "Photo" msgstr "照片" -#: ../addressbook/libebook/e-contact.c:241 +#: ../addressbook/libebook/e-contact.c:243 msgid "Logo" msgstr "标志" -#: ../addressbook/libebook/e-contact.c:243 +#: ../addressbook/libebook/e-contact.c:245 msgid "Name" msgstr "姓名" -#: ../addressbook/libebook/e-contact.c:244 +#: ../addressbook/libebook/e-contact.c:246 msgid "Email List" msgstr "邮件列表" #. Instant messaging fields -#: ../addressbook/libebook/e-contact.c:247 +#: ../addressbook/libebook/e-contact.c:249 msgid "AIM Screen Name List" msgstr "AIM 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:248 +#: ../addressbook/libebook/e-contact.c:250 msgid "GroupWise Id List" msgstr "GroupWise Id 列表" -#: ../addressbook/libebook/e-contact.c:249 +#: ../addressbook/libebook/e-contact.c:251 msgid "Jabber Id List" msgstr "Jabber Id 列表" -#: ../addressbook/libebook/e-contact.c:250 +#: ../addressbook/libebook/e-contact.c:252 msgid "Yahoo! Screen Name List" msgstr "Yahoo! 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:251 +#: ../addressbook/libebook/e-contact.c:253 msgid "MSN Screen Name List" msgstr "MSN 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:252 +#: ../addressbook/libebook/e-contact.c:254 msgid "ICQ Id List" msgstr "ICQ Id 列表" -#: ../addressbook/libebook/e-contact.c:254 +#: ../addressbook/libebook/e-contact.c:256 msgid "Wants HTML Mail" msgstr "想要 HTML 邮件" -#: ../addressbook/libebook/e-contact.c:256 +#: ../addressbook/libebook/e-contact.c:258 msgid "List" msgstr "列表" -#: ../addressbook/libebook/e-contact.c:257 +#: ../addressbook/libebook/e-contact.c:259 msgid "List Show Addresses" msgstr "列表显示地址" -#: ../addressbook/libebook/e-contact.c:259 +#: ../addressbook/libebook/e-contact.c:261 msgid "Birth Date" msgstr "生日" -#: ../addressbook/libebook/e-contact.c:260 -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:647 -#: ../libedataserver/e-categories.c:45 +#: ../addressbook/libebook/e-contact.c:262 +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:715 +#: ../libedataserver/e-categories.c:42 msgid "Anniversary" msgstr "周年纪念日" #. Security fields -#: ../addressbook/libebook/e-contact.c:263 +#: ../addressbook/libebook/e-contact.c:265 msgid "X.509 Certificate" msgstr "X.509 证书" -#: ../addressbook/libebook/e-contact.c:265 +#: ../addressbook/libebook/e-contact.c:267 msgid "Gadu-Gadu Home Id 1" msgstr "Gadu-Gadu 家庭 Id 1" -#: ../addressbook/libebook/e-contact.c:266 +#: ../addressbook/libebook/e-contact.c:268 msgid "Gadu-Gadu Home Id 2" msgstr "Gadu-Gadu 家庭 Id 2" -#: ../addressbook/libebook/e-contact.c:267 +#: ../addressbook/libebook/e-contact.c:269 msgid "Gadu-Gadu Home Id 3" msgstr "Gadu-Gadu 家庭 Id 3" -#: ../addressbook/libebook/e-contact.c:268 +#: ../addressbook/libebook/e-contact.c:270 msgid "Gadu-Gadu Work Id 1" msgstr "Gadu-Gadu 工作 Id 1" -#: ../addressbook/libebook/e-contact.c:269 +#: ../addressbook/libebook/e-contact.c:271 msgid "Gadu-Gadu Work Id 2" msgstr "Gadu-Gadu 工作 Id 2" -#: ../addressbook/libebook/e-contact.c:270 +#: ../addressbook/libebook/e-contact.c:272 msgid "Gadu-Gadu Work Id 3" msgstr "Gadu-Gadu 工作 Id 3" -#: ../addressbook/libebook/e-contact.c:271 +#: ../addressbook/libebook/e-contact.c:273 msgid "Gadu-Gadu Id List" msgstr "Gadu-Gadu ID 列表" #. Geo information -#: ../addressbook/libebook/e-contact.c:274 +#: ../addressbook/libebook/e-contact.c:276 msgid "Geographic Information" msgstr "地理信息" -#: ../addressbook/libebook/e-contact.c:276 +#: ../addressbook/libebook/e-contact.c:278 msgid "Telephone" msgstr "电话" -#: ../addressbook/libebook/e-contact.c:278 +#: ../addressbook/libebook/e-contact.c:280 msgid "Skype Home Name 1" msgstr "Skype 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:279 +#: ../addressbook/libebook/e-contact.c:281 msgid "Skype Home Name 2" msgstr "Skype 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:280 +#: ../addressbook/libebook/e-contact.c:282 msgid "Skype Home Name 3" msgstr "Skype 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:281 +#: ../addressbook/libebook/e-contact.c:283 msgid "Skype Work Name 1" msgstr "Skype 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:282 +#: ../addressbook/libebook/e-contact.c:284 msgid "Skype Work Name 2" msgstr "Skype 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:283 +#: ../addressbook/libebook/e-contact.c:285 msgid "Skype Work Name 3" msgstr "Skype 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:284 +#: ../addressbook/libebook/e-contact.c:286 msgid "Skype Name List" msgstr "Skype 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:286 -#, fuzzy +#: ../addressbook/libebook/e-contact.c:288 msgid "SIP address" -msgstr "家庭地址" +msgstr "SIP 地址" -#: ../addressbook/libebook/e-contact.c:1535 -#: ../addressbook/libebook/e-destination.c:761 +#: ../addressbook/libebook/e-contact.c:1515 +#: ../addressbook/libebook/e-destination.c:739 msgid "Unnamed List" msgstr "未命名的列表" -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:649 -#: ../libedataserver/e-categories.c:46 +#: ../addressbook/libedata-book/e-data-book-factory.c:290 +#, c-format +msgid "Empty URI" +msgstr "空 URI" + +#: ../addressbook/libedata-book/e-data-book-factory.c:305 +#: ../addressbook/libedata-book/e-data-book-factory.c:332 +#: ../calendar/libedata-cal/e-data-cal-factory.c:324 +#: ../calendar/libedata-cal/e-data-cal-factory.c:333 +#, c-format +msgid "Invalid source" +msgstr "无效来源。" + +#: ../addressbook/libedata-book/e-data-book.c:301 +msgid "Cannot open book" +msgstr "无法打开地址簿" + +#: ../addressbook/libedata-book/e-data-book.c:319 +msgid "Cannot remove book" +msgstr "无法移除地址簿" + +#: ../addressbook/libedata-book/e-data-book.c:331 +#: ../addressbook/libedata-book/e-data-book.c:346 +msgid "Cannot get contact" +msgstr "无法获取联系人" + +#: ../addressbook/libedata-book/e-data-book.c:358 +msgid "Empty query" +msgstr "空查询" + +#: ../addressbook/libedata-book/e-data-book.c:402 +msgid "Cannot authenticate user" +msgstr "无法认证用户" + +#: ../addressbook/libedata-book/e-data-book.c:414 +#: ../addressbook/libedata-book/e-data-book.c:429 +msgid "Cannot add contact" +msgstr "无法添加联系人" + +#: ../addressbook/libedata-book/e-data-book.c:444 +#: ../addressbook/libedata-book/e-data-book.c:459 +msgid "Cannot modify contact" +msgstr "无法修改联系人" + +#: ../addressbook/libedata-book/e-data-book.c:494 +msgid "Cannot remove contacts" +msgstr "无法删除联系人" + +#: ../addressbook/libedata-book/e-data-book.c:569 +#: ../calendar/libedata-cal/e-cal-backend-util.c:141 +msgid "Invalid query" +msgstr "无效的查询" + +#: ../addressbook/libedata-book/e-data-book.c:598 +msgid "Cannot get changes" +msgstr "无法获取更改" + +#: ../addressbook/libedata-book/e-data-book.c:699 +msgid "Cannot complete operation" +msgstr "无法完成操作" + +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:717 +#: ../libedataserver/e-categories.c:43 msgid "Birthday" msgstr "生日" -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:678 +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:746 #, c-format msgid "Birthday: %s" msgstr "生日:%s" -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:702 +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:770 #, c-format msgid "Anniversary: %s" msgstr "周年:%s" -#: ../calendar/backends/file/e-cal-backend-file.c:234 +#: ../calendar/backends/file/e-cal-backend-file.c:236 msgid "Cannot save calendar data: Malformed URI." msgstr "无法保存日历数据:URI 格式错误。" -#: ../calendar/backends/file/e-cal-backend-file.c:241 -#: ../calendar/backends/file/e-cal-backend-file.c:247 +#: ../calendar/backends/file/e-cal-backend-file.c:243 +#: ../calendar/backends/file/e-cal-backend-file.c:249 msgid "Cannot save calendar data" msgstr "无法保存日历数据" -#: ../calendar/backends/google/e-cal-backend-google-utils.c:344 +#: ../calendar/backends/google/e-cal-backend-google-utils.c:342 msgid "Could not create thread for getting deltas" msgstr "无法为获得差异创建线索" -#: ../calendar/backends/google/e-cal-backend-google-utils.c:376 -#: ../calendar/backends/google/e-cal-backend-google.c:1189 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1080 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1381 -#: ../calendar/backends/http/e-cal-backend-http.c:673 -#: ../calendar/backends/weather/e-cal-backend-weather.c:486 +#: ../calendar/backends/google/e-cal-backend-google-utils.c:374 +#: ../calendar/backends/google/e-cal-backend-google.c:1144 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1087 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1385 +#: ../calendar/backends/http/e-cal-backend-http.c:678 +#: ../calendar/backends/weather/e-cal-backend-weather.c:492 msgid "Could not create cache file" msgstr "无法创建缓存文件" -#: ../calendar/backends/google/e-cal-backend-google-utils.c:389 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1093 +#: ../calendar/backends/google/e-cal-backend-google-utils.c:387 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1100 msgid "Could not create thread for populating cache" msgstr "无法创建增殖缓存创建线索" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1082 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2078 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1118 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2116 msgid "Reply Requested: by " msgstr "请求回复:由" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1087 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2083 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1123 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2121 msgid "Reply Requested: When convenient" msgstr "请求回复:方便时" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:281 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:293 #, c-format msgid "Loading %s items" -msgstr "装入 %s 项" +msgstr "载入 %s 项" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:918 -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:260 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:926 msgid "Calendar" msgstr "日历" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:976 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:984 msgid "Invalid server URI" msgstr "无效的服务器 URI" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:995 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1004 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1098 -#: ../calendar/libecal/e-cal.c:5117 -#: ../calendar/libedata-cal/e-cal-backend-util.c:117 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1291 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1327 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1342 -#: ../camel/providers/groupwise/camel-groupwise-store.c:598 -#: ../camel/providers/groupwise/camel-groupwise-store.c:773 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1003 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1012 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1105 +#: ../calendar/libecal/e-cal.c:4026 +#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1334 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1370 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1385 +#: ../camel/providers/groupwise/camel-groupwise-store.c:591 +#: ../camel/providers/groupwise/camel-groupwise-store.c:766 #: ../camel/providers/groupwise/camel-groupwise-transport.c:154 #: ../camel/providers/groupwise/camel-groupwise-transport.c:181 msgid "Authentication failed" msgstr "认证失败" -#: ../calendar/backends/http/e-cal-backend-http.c:330 +#: ../calendar/backends/http/e-cal-backend-http.c:335 msgid "Redirected to Invalid URI" msgstr "已重定向到无效 URI" -#: ../calendar/backends/http/e-cal-backend-http.c:353 +#: ../calendar/backends/http/e-cal-backend-http.c:358 msgid "Bad file format." msgstr "无效的文件格式。" -#: ../calendar/backends/http/e-cal-backend-http.c:360 +#: ../calendar/backends/http/e-cal-backend-http.c:365 msgid "Not a calendar." msgstr "不是日历。" -#: ../calendar/backends/weather/e-cal-backend-weather.c:150 +#: ../calendar/backends/weather/e-cal-backend-weather.c:152 msgid "Could not retrieve weather data" msgstr "无法获取天气数据" -#: ../calendar/backends/weather/e-cal-backend-weather.c:247 +#: ../calendar/backends/weather/e-cal-backend-weather.c:251 msgid "Weather: Fog" msgstr "天气:雾" -#: ../calendar/backends/weather/e-cal-backend-weather.c:248 -msgid "Weather: Cloudy" -msgstr "天气:多云" - -#: ../calendar/backends/weather/e-cal-backend-weather.c:249 +#: ../calendar/backends/weather/e-cal-backend-weather.c:252 msgid "Weather: Cloudy Night" msgstr "天气:多云夜晚" -#: ../calendar/backends/weather/e-cal-backend-weather.c:250 +#: ../calendar/backends/weather/e-cal-backend-weather.c:253 +msgid "Weather: Cloudy" +msgstr "天气:多云" + +#: ../calendar/backends/weather/e-cal-backend-weather.c:254 msgid "Weather: Overcast" msgstr "天气:阴天" -#: ../calendar/backends/weather/e-cal-backend-weather.c:251 +#: ../calendar/backends/weather/e-cal-backend-weather.c:255 msgid "Weather: Showers" msgstr "天气:阵雨" -#: ../calendar/backends/weather/e-cal-backend-weather.c:252 +#: ../calendar/backends/weather/e-cal-backend-weather.c:256 msgid "Weather: Snow" msgstr "天气:雪" -#: ../calendar/backends/weather/e-cal-backend-weather.c:253 -msgid "Weather: Sunny" -msgstr "天气:晴" - -#: ../calendar/backends/weather/e-cal-backend-weather.c:254 +#: ../calendar/backends/weather/e-cal-backend-weather.c:257 msgid "Weather: Clear Night" msgstr "天气:晴朗夜晚" -#: ../calendar/backends/weather/e-cal-backend-weather.c:255 +#: ../calendar/backends/weather/e-cal-backend-weather.c:258 +msgid "Weather: Sunny" +msgstr "天气:晴" + +#: ../calendar/backends/weather/e-cal-backend-weather.c:259 msgid "Weather: Thunderstorms" msgstr "天气:暴风雨" -#: ../calendar/backends/weather/e-cal-backend-weather.c:400 +#: ../calendar/backends/weather/e-cal-backend-weather.c:405 msgid "Forecast" msgstr "天气预报" -#: ../calendar/libecal/e-cal-component.c:1320 +#: ../calendar/libecal/e-cal-component.c:1286 msgid "Untitled appointment" msgstr "无标题约会" -#: ../calendar/libecal/e-cal-recur.c:3945 +#: ../calendar/libecal/e-cal-recur.c:3951 msgid "1st" msgstr "1日" -#: ../calendar/libecal/e-cal-recur.c:3946 +#: ../calendar/libecal/e-cal-recur.c:3952 msgid "2nd" msgstr "2日" -#: ../calendar/libecal/e-cal-recur.c:3947 +#: ../calendar/libecal/e-cal-recur.c:3953 msgid "3rd" msgstr "3日" -#: ../calendar/libecal/e-cal-recur.c:3948 +#: ../calendar/libecal/e-cal-recur.c:3954 msgid "4th" msgstr "4日" -#: ../calendar/libecal/e-cal-recur.c:3949 +#: ../calendar/libecal/e-cal-recur.c:3955 msgid "5th" msgstr "5日" -#: ../calendar/libecal/e-cal-recur.c:3950 +#: ../calendar/libecal/e-cal-recur.c:3956 msgid "6th" msgstr "6日" -#: ../calendar/libecal/e-cal-recur.c:3951 +#: ../calendar/libecal/e-cal-recur.c:3957 msgid "7th" msgstr "7日" -#: ../calendar/libecal/e-cal-recur.c:3952 +#: ../calendar/libecal/e-cal-recur.c:3958 msgid "8th" msgstr "8日" -#: ../calendar/libecal/e-cal-recur.c:3953 +#: ../calendar/libecal/e-cal-recur.c:3959 msgid "9th" msgstr "9日" -#: ../calendar/libecal/e-cal-recur.c:3954 +#: ../calendar/libecal/e-cal-recur.c:3960 msgid "10th" msgstr "10日" -#: ../calendar/libecal/e-cal-recur.c:3955 +#: ../calendar/libecal/e-cal-recur.c:3961 msgid "11th" msgstr "11日" -#: ../calendar/libecal/e-cal-recur.c:3956 +#: ../calendar/libecal/e-cal-recur.c:3962 msgid "12th" msgstr "12日" -#: ../calendar/libecal/e-cal-recur.c:3957 +#: ../calendar/libecal/e-cal-recur.c:3963 msgid "13th" msgstr "13日" -#: ../calendar/libecal/e-cal-recur.c:3958 +#: ../calendar/libecal/e-cal-recur.c:3964 msgid "14th" msgstr "14日" -#: ../calendar/libecal/e-cal-recur.c:3959 +#: ../calendar/libecal/e-cal-recur.c:3965 msgid "15th" msgstr "15日" -#: ../calendar/libecal/e-cal-recur.c:3960 +#: ../calendar/libecal/e-cal-recur.c:3966 msgid "16th" msgstr "16日" -#: ../calendar/libecal/e-cal-recur.c:3961 +#: ../calendar/libecal/e-cal-recur.c:3967 msgid "17th" msgstr "17日" -#: ../calendar/libecal/e-cal-recur.c:3962 +#: ../calendar/libecal/e-cal-recur.c:3968 msgid "18th" msgstr "18八日" -#: ../calendar/libecal/e-cal-recur.c:3963 +#: ../calendar/libecal/e-cal-recur.c:3969 msgid "19th" msgstr "19日" -#: ../calendar/libecal/e-cal-recur.c:3964 +#: ../calendar/libecal/e-cal-recur.c:3970 msgid "20th" msgstr "20日" -#: ../calendar/libecal/e-cal-recur.c:3965 +#: ../calendar/libecal/e-cal-recur.c:3971 msgid "21st" msgstr "21日" -#: ../calendar/libecal/e-cal-recur.c:3966 +#: ../calendar/libecal/e-cal-recur.c:3972 msgid "22nd" msgstr "22日" -#: ../calendar/libecal/e-cal-recur.c:3967 +#: ../calendar/libecal/e-cal-recur.c:3973 msgid "23rd" msgstr "23日" -#: ../calendar/libecal/e-cal-recur.c:3968 +#: ../calendar/libecal/e-cal-recur.c:3974 msgid "24th" msgstr "24日" -#: ../calendar/libecal/e-cal-recur.c:3969 +#: ../calendar/libecal/e-cal-recur.c:3975 msgid "25th" msgstr "25日" -#: ../calendar/libecal/e-cal-recur.c:3970 +#: ../calendar/libecal/e-cal-recur.c:3976 msgid "26th" msgstr "26日" -#: ../calendar/libecal/e-cal-recur.c:3971 +#: ../calendar/libecal/e-cal-recur.c:3977 msgid "27th" msgstr "27日" -#: ../calendar/libecal/e-cal-recur.c:3972 +#: ../calendar/libecal/e-cal-recur.c:3978 msgid "28th" msgstr "28日" -#: ../calendar/libecal/e-cal-recur.c:3973 +#: ../calendar/libecal/e-cal-recur.c:3979 msgid "29th" msgstr "29日" -#: ../calendar/libecal/e-cal-recur.c:3974 +#: ../calendar/libecal/e-cal-recur.c:3980 msgid "30th" msgstr "30日" -#: ../calendar/libecal/e-cal-recur.c:3975 +#: ../calendar/libecal/e-cal-recur.c:3981 msgid "31st" msgstr "31日" -#: ../calendar/libecal/e-cal-util.c:685 ../calendar/libecal/e-cal-util.c:712 +#: ../calendar/libecal/e-cal-util.c:688 ../calendar/libecal/e-cal-util.c:715 msgid "High" msgstr "高" -#: ../calendar/libecal/e-cal-util.c:687 ../calendar/libecal/e-cal-util.c:714 +#: ../calendar/libecal/e-cal-util.c:690 ../calendar/libecal/e-cal-util.c:717 msgid "Normal" msgstr "中" -#: ../calendar/libecal/e-cal-util.c:689 ../calendar/libecal/e-cal-util.c:716 +#: ../calendar/libecal/e-cal-util.c:692 ../calendar/libecal/e-cal-util.c:719 msgid "Low" msgstr "低" #. An empty string is the same as 'None'. -#: ../calendar/libecal/e-cal-util.c:710 +#: ../calendar/libecal/e-cal-util.c:713 msgid "Undefined" msgstr "未定义" -#: ../calendar/libecal/e-cal.c:1693 ../libedataserverui/e-book-auth-util.c:199 +#: ../calendar/libecal/e-cal.c:1179 ../libedataserverui/e-book-auth-util.c:199 #, c-format msgid "Enter password for %s (user %s)" msgstr "为 %s 输入密码 (用户 %s)" @@ -920,94 +976,94 @@ msgstr "为 %s 输入密码 (用户 %s)" #. This password prompt will be prompted rarely. Since the key that is passed to #. the auth_func corresponds to the parent user. #. -#: ../calendar/libecal/e-cal.c:1707 +#: ../calendar/libecal/e-cal.c:1193 #, c-format msgid "Enter password for %s to enable proxy for user %s" msgstr "输入 %s 的密码,以便为用户 %s 启用代理服务器" -#: ../calendar/libecal/e-cal.c:5089 +#: ../calendar/libecal/e-cal.c:3998 msgid "Invalid argument" msgstr "无效参数" -#: ../calendar/libecal/e-cal.c:5091 +#: ../calendar/libecal/e-cal.c:4000 msgid "Backend is busy" msgstr "后台繁忙" -#: ../calendar/libecal/e-cal.c:5093 -#: ../calendar/libedata-cal/e-cal-backend-util.c:105 +#: ../calendar/libecal/e-cal.c:4002 +#: ../calendar/libedata-cal/e-cal-backend-util.c:107 msgid "Repository is offline" msgstr "仓库离线" -#: ../calendar/libecal/e-cal.c:5095 -#: ../calendar/libedata-cal/e-cal-backend-util.c:129 +#: ../calendar/libecal/e-cal.c:4004 +#: ../calendar/libedata-cal/e-cal-backend-util.c:131 msgid "No such calendar" msgstr "没有这样的日历" -#: ../calendar/libecal/e-cal.c:5097 -#: ../calendar/libedata-cal/e-cal-backend-util.c:111 -#: ../servers/groupwise/e-gw-connection.c:233 +#: ../calendar/libecal/e-cal.c:4006 +#: ../calendar/libedata-cal/e-cal-backend-util.c:113 +#: ../servers/groupwise/e-gw-connection.c:235 msgid "Object not found" msgstr "找不到对象" -#: ../calendar/libecal/e-cal.c:5099 -#: ../calendar/libedata-cal/e-cal-backend-util.c:113 -#: ../servers/groupwise/e-gw-connection.c:227 +#: ../calendar/libecal/e-cal.c:4008 +#: ../calendar/libedata-cal/e-cal-backend-util.c:115 +#: ../servers/groupwise/e-gw-connection.c:229 msgid "Invalid object" msgstr "无效对象" -#: ../calendar/libecal/e-cal.c:5101 +#: ../calendar/libecal/e-cal.c:4010 msgid "URI not loaded" -msgstr "URI 未装入" +msgstr "URI 未载入" -#: ../calendar/libecal/e-cal.c:5103 +#: ../calendar/libecal/e-cal.c:4012 msgid "URI already loaded" msgstr "URI 已经载入" -#: ../calendar/libecal/e-cal.c:5105 -#: ../calendar/libedata-cal/e-cal-backend-util.c:107 -#: ../servers/exchange/storage/e-storage.c:573 +#: ../calendar/libecal/e-cal.c:4014 +#: ../calendar/libedata-cal/e-cal-backend-util.c:109 msgid "Permission denied" msgstr "没有权限" -#: ../calendar/libecal/e-cal.c:5107 -#: ../calendar/libedata-cal/e-cal-backend-util.c:131 -#: ../servers/groupwise/e-gw-connection.c:235 +#: ../calendar/libecal/e-cal.c:4016 +#: ../calendar/libedata-cal/e-cal-backend-util.c:133 +#: ../servers/groupwise/e-gw-connection.c:237 msgid "Unknown User" msgstr "未知用户" -#: ../calendar/libecal/e-cal.c:5109 -#: ../calendar/libedata-cal/e-cal-backend-util.c:115 +#: ../calendar/libecal/e-cal.c:4018 +#: ../calendar/libedata-cal/e-cal-backend-util.c:117 msgid "Object ID already exists" msgstr "对象 ID 已经存在" -#: ../calendar/libecal/e-cal.c:5111 +#: ../calendar/libecal/e-cal.c:4020 msgid "Protocol not supported" msgstr "不支持的协议" -#: ../calendar/libecal/e-cal.c:5113 +#: ../calendar/libecal/e-cal.c:4022 msgid "Operation has been canceled" msgstr "操作已取消" -#: ../calendar/libecal/e-cal.c:5115 -#: ../calendar/libedata-cal/e-cal-backend-util.c:143 +#: ../calendar/libecal/e-cal.c:4024 +#: ../calendar/libedata-cal/e-cal-backend-util.c:145 msgid "Could not cancel operation" msgstr "无法取消操作" -#: ../calendar/libecal/e-cal.c:5119 -#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../calendar/libecal/e-cal.c:4028 +#: ../calendar/libedata-cal/e-cal-backend-util.c:121 #: ../camel/providers/smtp/camel-smtp-transport.c:217 msgid "Authentication required" msgstr "必须认证" -#: ../calendar/libecal/e-cal.c:5121 +#: ../calendar/libecal/e-cal.c:4030 msgid "A CORBA exception has occurred" msgstr "发生了 CORBA 异常" -#: ../calendar/libecal/e-cal.c:5123 -#: ../calendar/libedata-cal/e-cal-backend-util.c:146 +#: ../calendar/libecal/e-cal.c:4032 +#: ../calendar/libedata-cal/e-cal-backend-util.c:148 +#: ../camel/camel-net-utils.c:523 #: ../camel/providers/groupwise/camel-groupwise-transport.c:214 #: ../camel/providers/imap/camel-imap-command.c:432 -#: ../camel/providers/imap/camel-imap-store.c:743 +#: ../camel/providers/imap/camel-imap-store.c:741 #: ../camel/providers/imap4/camel-imap4-engine.c:1547 #: ../camel/providers/imap4/camel-imap4-engine.c:1585 #: ../camel/providers/imap4/camel-imap4-engine.c:1629 @@ -1015,91 +1071,87 @@ msgstr "发生了 CORBA 异常" #: ../camel/providers/imap4/camel-imap4-store.c:311 #: ../camel/providers/imap4/camel-imap4-store.c:818 #: ../camel/providers/imap4/camel-imap4-store.c:1574 -#: ../camel/providers/pop3/camel-pop3-store.c:552 -#: ../camel/providers/pop3/camel-pop3-store.c:559 -#: ../camel/providers/pop3/camel-pop3-store.c:565 -#: ../servers/exchange/storage/e-storage.c:587 -#: ../servers/groupwise/e-gw-connection.c:241 +#: ../camel/providers/pop3/camel-pop3-store.c:584 +#: ../servers/groupwise/e-gw-connection.c:243 msgid "Unknown error" msgstr "未知的错误" -#: ../calendar/libecal/e-cal.c:5125 -#: ../calendar/libedata-cal/e-cal-backend-util.c:103 -#: ../servers/exchange/storage/e-storage.c:555 +#: ../calendar/libecal/e-cal.c:4034 +#: ../calendar/libedata-cal/e-cal-backend-util.c:105 msgid "No error" msgstr "无错误" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:67 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:674 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:693 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:802 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:830 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1023 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1050 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:69 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:676 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:695 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:804 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:832 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1025 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1052 #, c-format msgid "\"%s\" expects no arguments" msgstr "“%s”不需要参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:100 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:210 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:252 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:288 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1088 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:102 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:212 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:254 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:290 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1090 #, c-format msgid "\"%s\" expects one argument" msgstr "“%s”需要一个参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:106 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:113 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:294 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:735 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:108 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:115 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:296 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:737 #, c-format msgid "\"%s\" expects the first argument to be a string" msgstr "“%s”需要第一个参数是字符串" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:121 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:123 #, c-format msgid "\"%s\" expects the first argument to be an ISO 8601 date/time string" msgstr "“%s”的第一个参数必须是 ISO 8601 日期/时间字符串" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:160 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:361 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:413 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:729 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:862 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:162 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:363 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:415 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:731 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:864 #, c-format msgid "\"%s\" expects two arguments" msgstr "“%s”需要两个参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:166 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:216 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:258 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:367 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:419 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:868 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1094 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:168 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:218 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:260 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:369 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:421 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:870 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1096 #, c-format msgid "\"%s\" expects the first argument to be a time_t" msgstr "“%s”的第一个参数应该是 time_t" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:174 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:176 #, c-format msgid "\"%s\" expects the second argument to be an integer" msgstr "“%s”的第二个参数应该是整数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:375 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:428 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:876 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:377 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:430 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:878 #, c-format msgid "\"%s\" expects the second argument to be a time_t" msgstr "“%s”的第一个参数应该是 time_t" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:743 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:745 #, c-format msgid "\"%s\" expects the second argument to be a string" msgstr "“%s”的第二个参数应该是字符串" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:773 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:775 #, c-format msgid "" "\"%s\" expects the first argument to be either \"any\", \"summary\", or " @@ -1110,62 +1162,188 @@ msgstr "" "是“any”、“summary”、“description”、“location”、“attendee”、“organizer”、“classification”之" "一" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:925 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:927 #, c-format msgid "\"%s\" expects at least one argument" msgstr "“%s”至少需要一个参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:939 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:941 #, c-format msgid "" "\"%s\" expects all arguments to be strings or one and only one argument to " "be a boolean false (#f)" msgstr "“%s”的所有参数都应该为字符串或者它唯一的参数为布尔假 (#f)" -#: ../calendar/libedata-cal/e-cal-backend-util.c:109 +#: ../calendar/libedata-cal/e-cal-backend-util.c:111 msgid "Invalid range" msgstr "无效范围" -#: ../calendar/libedata-cal/e-cal-backend-util.c:121 +#: ../calendar/libedata-cal/e-cal-backend-util.c:123 msgid "Unsupported field" msgstr "不支持的域" -#: ../calendar/libedata-cal/e-cal-backend-util.c:123 +#: ../calendar/libedata-cal/e-cal-backend-util.c:125 msgid "Unsupported method" msgstr "不支持的方式" -#: ../calendar/libedata-cal/e-cal-backend-util.c:125 +#: ../calendar/libedata-cal/e-cal-backend-util.c:127 msgid "Unsupported authentication method" msgstr "不支持的身份验证方式" -#: ../calendar/libedata-cal/e-cal-backend-util.c:127 +#: ../calendar/libedata-cal/e-cal-backend-util.c:129 msgid "TLS not available" msgstr "TLS 不可用" -#: ../calendar/libedata-cal/e-cal-backend-util.c:133 +#: ../calendar/libedata-cal/e-cal-backend-util.c:135 msgid "Offline mode unavailable" msgstr "离线模式不可用" -#: ../calendar/libedata-cal/e-cal-backend-util.c:135 +#: ../calendar/libedata-cal/e-cal-backend-util.c:137 msgid "Search size limit exceeded" msgstr "超过搜索大小限制" -#: ../calendar/libedata-cal/e-cal-backend-util.c:137 +#: ../calendar/libedata-cal/e-cal-backend-util.c:139 msgid "Search time limit exceeded" msgstr "超过搜索时间限制" -#: ../calendar/libedata-cal/e-cal-backend-util.c:139 -msgid "Invalid query" -msgstr "无效的查询" - -#: ../calendar/libedata-cal/e-cal-backend-util.c:141 +#: ../calendar/libedata-cal/e-cal-backend-util.c:143 msgid "Query refused" msgstr "查询被拒绝" -#: ../calendar/libedata-cal/e-cal-backend-util.c:148 +#: ../calendar/libedata-cal/e-cal-backend-util.c:150 msgid "Invalid server version" msgstr "无效的服务器版本" +#: ../calendar/libedata-cal/e-data-cal.c:501 +#, c-format +msgid "Cannot retrieve calendar address" +msgstr "无法获取日历地址" + +#: ../calendar/libedata-cal/e-data-cal.c:519 +#, c-format +msgid "Cannot retrieve calendar alarm e-mail address" +msgstr "无法获取日历提醒电子邮件地址" + +#: ../calendar/libedata-cal/e-data-cal.c:537 +#, c-format +msgid "Cannot retrieve calendar's ldap attribute" +msgstr "无法获取日历的 ldap 属性" + +#: ../calendar/libedata-cal/e-data-cal.c:555 +#, c-format +msgid "Cannot retrieve calendar scheduling information" +msgstr "无法获取日历的日程信息" + +#: ../calendar/libedata-cal/e-data-cal.c:572 +#, c-format +msgid "Cannot open calendar" +msgstr "无法打开日历" + +#: ../calendar/libedata-cal/e-data-cal.c:591 +#, c-format +msgid "Cannot refresh calendar" +msgstr "无法刷新日历" + +#: ../calendar/libedata-cal/e-data-cal.c:608 +#, c-format +msgid "Cannot remove calendar" +msgstr "无法删除日历" + +#: ../calendar/libedata-cal/e-data-cal.c:627 +#, c-format +msgid "Cannot create calendar object" +msgstr "无法创建日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:649 +#, c-format +msgid "Cannot modify calendar object" +msgstr "无法修改日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:673 +#, c-format +msgid "Cannot remove calendar object" +msgstr "无法删除日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:692 +#, c-format +msgid "Cannot receive calendar objects" +msgstr "无法获取日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:709 +#, c-format +msgid "Cannot discard calendar alarm" +msgstr "无法忽略日历提醒" + +#: ../calendar/libedata-cal/e-data-cal.c:728 +#, c-format +msgid "Cannot send calendar objects" +msgstr "无法发送日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:763 +#, c-format +msgid "Cannot retrieve default calendar object path" +msgstr "无法获取日历对象的默认路径" + +#: ../calendar/libedata-cal/e-data-cal.c:781 +#, c-format +msgid "Cannot retrieve calendar object path" +msgstr "无法获取日历对象路径" + +#: ../calendar/libedata-cal/e-data-cal.c:799 +#, c-format +msgid "Cannot retrieve calendar object list" +msgstr "无法获取日历对象列表" + +#: ../calendar/libedata-cal/e-data-cal.c:837 +#, c-format +msgid "Could not retrieve attachment list" +msgstr "无法获取附件列表" + +#: ../calendar/libedata-cal/e-data-cal.c:859 +#, c-format +msgid "Could not complete calendar query" +msgstr "无法完成日历查询" + +#: ../calendar/libedata-cal/e-data-cal.c:877 +#, c-format +msgid "Could not retrieve calendar time zone" +msgstr "无法获取日历时区" + +#: ../calendar/libedata-cal/e-data-cal.c:895 +#, c-format +msgid "Could not add calendar time zone" +msgstr "无法添加日历时区" + +#: ../calendar/libedata-cal/e-data-cal.c:912 +#, c-format +msgid "Could not set default calendar time zone" +msgstr "无法设置默认日历时区" + +#: ../calendar/libedata-cal/e-data-cal.c:933 +#, c-format +msgid "Cannot retrieve calendar changes" +msgstr "无法获取日历更改" + +#: ../calendar/libedata-cal/e-data-cal.c:983 +#, c-format +msgid "Cannot retrieve calendar free/busy list" +msgstr "无法获取日历空闲/繁忙列表" + +#: ../calendar/libedata-cal/e-data-cal-factory.c:340 +#, c-format +msgid "Invalid URI" +msgstr "无效的 URI" + +#: ../calendar/libedata-cal/e-data-cal-factory.c:351 +#, fuzzy, c-format +msgid "No backend factory for '%s' of '%s'" +msgstr "无对应 '%2$s' 的 '%1$s' 的后端工厂" + +#: ../calendar/libedata-cal/e-data-cal-factory.c:391 +#, c-format +msgid "Could not instantiate backend" +msgstr "无法实例化后端" + #: ../camel/camel-cipher-context.c:102 msgid "Signing is not supported by this cipher" msgstr "该密码不支持签名" @@ -1206,16 +1384,16 @@ msgstr "您不能用此密码导入密钥" msgid "You may not export keys with this cipher" msgstr "您不能用此密码导出密钥" -#: ../camel/camel-data-cache.c:136 +#: ../camel/camel-data-cache.c:135 msgid "Unable to create cache path" msgstr "无法创建缓冲路径" -#: ../camel/camel-data-cache.c:402 +#: ../camel/camel-data-cache.c:403 #, c-format msgid "Could not remove cache entry: %s: %s" msgstr "无法删除缓冲条目:%s:%s" -#: ../camel/camel-db.c:412 +#: ../camel/camel-db.c:459 msgid "Insufficient memory" msgstr "内存不足" @@ -1250,7 +1428,7 @@ msgstr "重新与服务器同步" msgid "Copy folder content locally for offline operation" msgstr "将文件夹内容复制到本地以进行脱机操作" -#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:107 +#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:106 msgid "Downloading new messages for offline mode" msgstr "下载新信件以进行脱机操作" @@ -1260,11 +1438,15 @@ msgid "Preparing folder '%s' for offline" msgstr "准备脱机文件夹“%s”" #: ../camel/camel-disco-store.c:400 -#: ../camel/providers/groupwise/camel-groupwise-store.c:223 -#: ../camel/providers/imap/camel-imap-store.c:1003 -#: ../camel/providers/imap/camel-imap-store.c:1813 -#: ../camel/providers/imap/camel-imap-store.c:2229 -#: ../camel/providers/imap/camel-imap-store.c:3014 +#: ../camel/providers/groupwise/camel-groupwise-store.c:216 +#: ../camel/providers/imap/camel-imap-store.c:1001 +#: ../camel/providers/imap/camel-imap-store.c:1843 +#: ../camel/providers/imap/camel-imap-store.c:2280 +#: ../camel/providers/imap/camel-imap-store.c:3089 +#: ../camel/providers/imapx/camel-imapx-store.c:170 +#: ../camel/providers/imapx/camel-imapx-store.c:676 +#: ../camel/providers/imapx/camel-imapx-store.c:732 +#: ../camel/providers/imapx/camel-imapx-store.c:784 msgid "You must be working online to complete this operation" msgstr "您必须在线工作以便完成该操作" @@ -1354,8 +1536,8 @@ msgstr "(user-tag)参数无效" msgid "Error executing filter search: %s: %s" msgstr "执行过滤规则搜索错误:%s:%s" -#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:453 -#: ../camel/camel-folder-search.c:608 +#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:455 +#: ../camel/camel-folder-search.c:610 #, c-format msgid "" "Cannot parse search expression: %s:\n" @@ -1364,8 +1546,8 @@ msgstr "" "无法解析搜索表达式:%s:\n" "%s" -#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:463 -#: ../camel/camel-folder-search.c:618 +#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:465 +#: ../camel/camel-folder-search.c:620 #, c-format msgid "" "Error executing search expression: %s:\n" @@ -1374,72 +1556,73 @@ msgstr "" "执行搜索表达式错误:%s:\n" "%s" -#: ../camel/camel-folder-search.c:810 ../camel/camel-folder-search.c:852 +#: ../camel/camel-folder-search.c:812 ../camel/camel-folder-search.c:854 #, c-format msgid "(%s) requires a single bool result" msgstr "(%s) 需要一个布尔结果" -#: ../camel/camel-folder-search.c:905 +#: ../camel/camel-folder-search.c:907 #, c-format msgid "(%s) not allowed inside %s" msgstr "(%s) 不允许在 %s 中使用" -#: ../camel/camel-folder-search.c:911 ../camel/camel-folder-search.c:918 +#: ../camel/camel-folder-search.c:913 ../camel/camel-folder-search.c:920 #, c-format msgid "(%s) requires a match type string" msgstr "(%s) 需要一个匹配类型字符串" -#: ../camel/camel-folder-search.c:945 +#: ../camel/camel-folder-search.c:947 #, c-format msgid "(%s) expects an array result" msgstr "(%s) 需要一个数组结果" -#: ../camel/camel-folder-search.c:954 +#: ../camel/camel-folder-search.c:956 #, c-format msgid "(%s) requires the folder set" msgstr "(%s) 需要文件夹集" -#: ../camel/camel-folder.c:683 +#: ../camel/camel-folder.c:690 #, c-format msgid "Unsupported operation: append message: for %s" msgstr "不支持的操作:附加信件:为 %s" -#: ../camel/camel-folder.c:1388 +#: ../camel/camel-folder.c:1401 #, c-format msgid "Unsupported operation: search by expression: for %s" msgstr "不支持的操作:按表达式搜索:搜索 %s" -#: ../camel/camel-folder.c:1429 +#: ../camel/camel-folder.c:1442 #, fuzzy, c-format msgid "Unsupported operation: count by expression: for %s" -msgstr "不支持的操作:按表达式搜索:搜索 %s" +msgstr "不支持的操作:按表达式计数:针对 %s" -#: ../camel/camel-folder.c:1468 +#: ../camel/camel-folder.c:1483 #, c-format msgid "Unsupported operation: search by UIDs: for %s" msgstr "不支持的操作:按 UID 搜索:搜索 %s" -#: ../camel/camel-folder.c:1581 +#: ../camel/camel-folder.c:1596 +#: ../camel/providers/local/camel-maildir-folder.c:387 msgid "Moving messages" msgstr "移动信件" -#: ../camel/camel-folder.c:1581 +#: ../camel/camel-folder.c:1596 msgid "Copying messages" msgstr "复制信件" -#: ../camel/camel-folder.c:1922 +#: ../camel/camel-folder.c:1945 msgid "Learning junk" msgstr "学习垃圾邮件" -#: ../camel/camel-folder.c:1939 +#: ../camel/camel-folder.c:1963 msgid "Learning non-junk" msgstr "学习非垃圾邮件" -#: ../camel/camel-folder.c:1958 +#: ../camel/camel-folder.c:1983 msgid "Filtering new message(s)" msgstr "过滤新信件" -#: ../camel/camel-gpg-context.c:752 +#: ../camel/camel-gpg-context.c:760 #, c-format msgid "" "Unexpected GnuPG status message encountered:\n" @@ -1450,15 +1633,15 @@ msgstr "" "\n" "%s" -#: ../camel/camel-gpg-context.c:767 +#: ../camel/camel-gpg-context.c:775 msgid "Failed to parse gpg userid hint." msgstr "解析 gpg userid 提示失败。" -#: ../camel/camel-gpg-context.c:791 ../camel/camel-gpg-context.c:805 +#: ../camel/camel-gpg-context.c:799 ../camel/camel-gpg-context.c:813 msgid "Failed to parse gpg passphrase request." msgstr "解析 gpg 密码句请求失败。" -#: ../camel/camel-gpg-context.c:825 +#: ../camel/camel-gpg-context.c:833 #, c-format msgid "" "You need a PIN to unlock the key for your\n" @@ -1467,7 +1650,7 @@ msgstr "" "您需要一个 PIN 用来解锁您的智能卡:\n" "“%s”" -#: ../camel/camel-gpg-context.c:829 +#: ../camel/camel-gpg-context.c:837 #, c-format msgid "" "You need a passphrase to unlock the key for\n" @@ -1476,93 +1659,88 @@ msgstr "" "您需要一个密码句用来解锁以下用户:\n" "“%s”" -#: ../camel/camel-gpg-context.c:834 +#: ../camel/camel-gpg-context.c:842 #, c-format msgid "Unexpected request from GnuPG for '%s'" msgstr "GnuPG 对“%s”的意外响应" -#: ../camel/camel-gpg-context.c:859 ../camel/camel-gpg-context.c:1068 +#: ../camel/camel-gpg-context.c:867 ../camel/camel-gpg-context.c:1111 #: ../camel/providers/nntp/camel-nntp-store.c:1313 msgid "Canceled." msgstr "已取消。" -#: ../camel/camel-gpg-context.c:873 +#: ../camel/camel-gpg-context.c:881 msgid "Failed to unlock secret key: 3 bad passphrases given." msgstr "解锁密钥失败:给出了 3 个错误的密码句。" -#: ../camel/camel-gpg-context.c:881 +#: ../camel/camel-gpg-context.c:889 #, c-format msgid "Unexpected response from GnuPG: %s" msgstr "来自 GnuPG 的意外应答:%s" -#: ../camel/camel-gpg-context.c:944 +#: ../camel/camel-gpg-context.c:988 msgid "Failed to encrypt: No valid recipients specified." msgstr "加密失败:没有指定有效的收件人。" #. always called on an i/o error -#: ../camel/camel-gpg-context.c:1206 ../camel/camel-gpg-context.c:1331 -#: ../camel/camel-gpg-context.c:1853 ../camel/camel-gpg-context.c:1898 +#: ../camel/camel-gpg-context.c:1260 ../camel/camel-gpg-context.c:1385 +#: ../camel/camel-gpg-context.c:1959 ../camel/camel-gpg-context.c:2006 #, c-format msgid "Failed to execute gpg: %s" msgstr "执行 gpg 失败:%s" -#: ../camel/camel-gpg-context.c:1299 ../camel/camel-smime-context.c:602 +#: ../camel/camel-gpg-context.c:1353 ../camel/camel-smime-context.c:605 #, c-format msgid "Could not generate signing data: %s" msgstr "无法生成签名数据:%s" -#: ../camel/camel-gpg-context.c:1346 ../camel/camel-gpg-context.c:1547 -#: ../camel/camel-gpg-context.c:1563 ../camel/camel-gpg-context.c:1643 -#: ../camel/camel-gpg-context.c:1658 ../camel/camel-gpg-context.c:1774 -#: ../camel/camel-gpg-context.c:1789 ../camel/camel-gpg-context.c:1869 -#: ../camel/camel-gpg-context.c:1914 +#: ../camel/camel-gpg-context.c:1402 ../camel/camel-gpg-context.c:1630 +#: ../camel/camel-gpg-context.c:1648 ../camel/camel-gpg-context.c:1730 +#: ../camel/camel-gpg-context.c:1747 ../camel/camel-gpg-context.c:1863 +#: ../camel/camel-gpg-context.c:1880 ../camel/camel-gpg-context.c:1977 +#: ../camel/camel-gpg-context.c:2024 msgid "Failed to execute gpg." msgstr "执行 gpg 失败。" -#: ../camel/camel-gpg-context.c:1365 -msgid "This is a digitally signed message part" -msgstr "这是信件的数字签名部分" - -#: ../camel/camel-gpg-context.c:1451 ../camel/camel-gpg-context.c:1457 -#: ../camel/camel-gpg-context.c:1463 ../camel/camel-gpg-context.c:1478 -#: ../camel/camel-smime-context.c:910 ../camel/camel-smime-context.c:921 -#: ../camel/camel-smime-context.c:928 +#: ../camel/camel-gpg-context.c:1534 ../camel/camel-gpg-context.c:1540 +#: ../camel/camel-gpg-context.c:1546 ../camel/camel-gpg-context.c:1561 +#: ../camel/camel-smime-context.c:929 ../camel/camel-smime-context.c:940 +#: ../camel/camel-smime-context.c:947 msgid "Cannot verify message signature: Incorrect message format" msgstr "无法校验信件签名:信件格式不对" -#: ../camel/camel-gpg-context.c:1517 +#: ../camel/camel-gpg-context.c:1600 #, c-format msgid "Cannot verify message signature: could not create temp file: %s" msgstr "无法校验信件签名:无法创建临时文件:%s" -#: ../camel/camel-gpg-context.c:1626 +#: ../camel/camel-gpg-context.c:1713 #, c-format msgid "Could not generate encrypting data: %s" msgstr "无法生成加密数据:%s" -#: ../camel/camel-gpg-context.c:1676 +#: ../camel/camel-gpg-context.c:1765 msgid "This is a digitally encrypted message part" msgstr "这是信件的数字加密部分" -#: ../camel/camel-gpg-context.c:1729 ../camel/camel-gpg-context.c:1737 -#: ../camel/camel-gpg-context.c:1756 +#: ../camel/camel-gpg-context.c:1818 ../camel/camel-gpg-context.c:1826 +#: ../camel/camel-gpg-context.c:1845 msgid "Cannot decrypt message: Incorrect message format" msgstr "无法解密信件:信件格式不对" -#: ../camel/camel-gpg-context.c:1746 +#: ../camel/camel-gpg-context.c:1835 msgid "Failed to decrypt MIME part: protocol error" msgstr "解密 MIME 部分失败:协议错误" -#: ../camel/camel-gpg-context.c:1811 ../camel/camel-smime-context.c:1186 +#: ../camel/camel-gpg-context.c:1915 ../camel/camel-smime-context.c:1204 msgid "Encrypted content" msgstr "加密内容" -#: ../camel/camel-gpg-context.c:1830 +#: ../camel/camel-gpg-context.c:1936 msgid "Unable to parse message content" msgstr "无法分析信件内容" -#: ../camel/camel-gpg-context.c:1854 ../camel/camel-gpg-context.c:1899 -#: ../camel/camel-tcp-stream-openssl.c:627 +#: ../camel/camel-gpg-context.c:1960 ../camel/camel-gpg-context.c:2007 #: ../camel/providers/imap4/camel-imap4-utils.c:614 #: ../camel/providers/smtp/camel-smtp-transport.c:165 #: ../camel/providers/smtp/camel-smtp-transport.c:220 @@ -1667,45 +1845,45 @@ msgstr "复制邮件临时文件错误:%s" msgid "parse error" msgstr "解析错误" -#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:674 -#: ../camel/camel-net-utils.c:806 -#: ../camel/providers/pop3/camel-pop3-store.c:446 -#: ../camel/providers/pop3/camel-pop3-store.c:546 +#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:678 +#: ../camel/camel-net-utils.c:817 +#: ../camel/providers/pop3/camel-pop3-store.c:478 +#: ../camel/providers/pop3/camel-pop3-store.c:578 msgid "Canceled" msgstr "已取消" -#: ../camel/camel-net-utils.c:522 +#: ../camel/camel-net-utils.c:523 msgid "cannot create thread" msgstr "无法创建线索" -#: ../camel/camel-net-utils.c:678 +#: ../camel/camel-net-utils.c:682 #, c-format msgid "Resolving: %s" msgstr "解析:%s" -#: ../camel/camel-net-utils.c:700 +#: ../camel/camel-net-utils.c:704 msgid "Host lookup failed" msgstr "主机查阅失败" -#: ../camel/camel-net-utils.c:702 +#: ../camel/camel-net-utils.c:706 #, c-format msgid "Host lookup failed: %s: %s" msgstr "主机查阅失败:%s:%s" -#: ../camel/camel-net-utils.c:810 +#: ../camel/camel-net-utils.c:821 msgid "Resolving address" msgstr "解析地址" -#: ../camel/camel-net-utils.c:830 +#: ../camel/camel-net-utils.c:841 msgid "Name lookup failed" msgstr "名称查阅失败" -#: ../camel/camel-net-utils.c:833 +#: ../camel/camel-net-utils.c:844 #, c-format msgid "Name lookup failed: %s" msgstr "名称查阅失败:%s" -#: ../camel/camel-offline-folder.c:249 +#: ../camel/camel-offline-folder.c:247 #, c-format msgid "Syncing messages in folder '%s' to disk" msgstr "正在将文件夹“%s”中的信件同步到磁盘" @@ -1726,19 +1904,19 @@ msgstr "关于将读入邮件作为对另一组文件夹的查询" #: ../camel/camel-provider.c:184 #, c-format msgid "Could not load %s: Module loading not supported on this system." -msgstr "无法装入 %s:本系统不支持模块装入。" +msgstr "无法载入 %s:本系统不支持模块载入。" #: ../camel/camel-provider.c:193 #, c-format msgid "Could not load %s: %s" -msgstr "无法装入 %s:%s" +msgstr "无法载入 %s:%s" #: ../camel/camel-provider.c:201 #, c-format msgid "Could not load %s: No initialization code in module." -msgstr "无法装入 %s:模块中没有初始化代码。" +msgstr "无法载入 %s:模块中没有初始化代码。" -#: ../camel/camel-provider.c:379 ../camel/camel-session.c:182 +#: ../camel/camel-provider.c:379 ../camel/camel-session.c:180 #, c-format msgid "No provider available for protocol '%s'" msgstr "协议“%s”没有可用的提供者" @@ -1826,93 +2004,75 @@ msgstr "服务器应达含有不完整的认证数据" msgid "Server response does not match" msgstr "服务器应答不匹配" -#: ../camel/camel-sasl-gssapi.c:63 +#: ../camel/camel-sasl-gssapi.c:78 msgid "GSSAPI" msgstr "GSSAPI" -#: ../camel/camel-sasl-gssapi.c:65 +#: ../camel/camel-sasl-gssapi.c:80 msgid "This option will connect to the server using Kerberos 5 authentication." msgstr "该选项将用 Kerberos 5 认证连接到服务器。" -#: ../camel/camel-sasl-gssapi.c:159 +#: ../camel/camel-sasl-gssapi.c:174 msgid "" "The specified mechanism is not supported by the provided credential, or is " "unrecognized by the implementation." msgstr "所提供的证书不支持指定的机制,或者无法被实现所识别。" -#: ../camel/camel-sasl-gssapi.c:164 +#: ../camel/camel-sasl-gssapi.c:179 msgid "The provided target_name parameter was ill-formed." msgstr "提供的 target_name 参数格式不对。" -#: ../camel/camel-sasl-gssapi.c:167 +#: ../camel/camel-sasl-gssapi.c:182 msgid "" "The provided target_name parameter contained an invalid or unsupported type " "of name." msgstr "提供的 target_name 参数包含无效或不支持的名称类型。" -#: ../camel/camel-sasl-gssapi.c:171 +#: ../camel/camel-sasl-gssapi.c:186 msgid "" "The input_token contains different channel bindings to those specified via " "the input_chan_bindings parameter." msgstr "" "input_token 包含的通道绑定与通过 input_chan_bindings 参数指定的通道不同。" -#: ../camel/camel-sasl-gssapi.c:176 +#: ../camel/camel-sasl-gssapi.c:191 msgid "" "The input_token contains an invalid signature, or a signature that could not " "be verified." msgstr "input_token 包含无效的签名,或者无法验证签名。" -#: ../camel/camel-sasl-gssapi.c:180 +#: ../camel/camel-sasl-gssapi.c:195 msgid "" "The supplied credentials were not valid for context initiation, or the " "credential handle did not reference any credentials." msgstr "提供的证书由于上下文的原因无效,或者证书句柄没有引用证书。" -#: ../camel/camel-sasl-gssapi.c:185 +#: ../camel/camel-sasl-gssapi.c:200 msgid "The supplied context handle did not refer to a valid context." msgstr "提供的上下文句柄所引用的上下文无效。" -#: ../camel/camel-sasl-gssapi.c:188 +#: ../camel/camel-sasl-gssapi.c:203 msgid "The consistency checks performed on the input_token failed." msgstr "对 input_token 执行完整性检查失败。" -#: ../camel/camel-sasl-gssapi.c:191 +#: ../camel/camel-sasl-gssapi.c:206 msgid "The consistency checks performed on the credential failed." msgstr "对证书执行完整性检查失败。" -#: ../camel/camel-sasl-gssapi.c:194 +#: ../camel/camel-sasl-gssapi.c:209 msgid "The referenced credentials have expired." msgstr "引用的证书已过期。" -#: ../camel/camel-sasl-gssapi.c:200 ../camel/camel-sasl-gssapi.c:248 -#: ../camel/camel-sasl-gssapi.c:284 ../camel/camel-sasl-gssapi.c:299 -#: ../camel/camel-sasl-kerberos4.c:230 -#: ../camel/providers/imap/camel-imap-store.c:1274 +#: ../camel/camel-sasl-gssapi.c:215 ../camel/camel-sasl-gssapi.c:322 +#: ../camel/camel-sasl-gssapi.c:364 ../camel/camel-sasl-gssapi.c:379 +#: ../camel/providers/imap/camel-imap-store.c:1272 msgid "Bad authentication response from server." msgstr "来自服务器的无效认证应答。" -#: ../camel/camel-sasl-gssapi.c:309 +#: ../camel/camel-sasl-gssapi.c:389 msgid "Unsupported security layer." msgstr "不支持的安全层。" -#: ../camel/camel-sasl-kerberos4.c:47 -msgid "Kerberos 4" -msgstr "Kerberos 4" - -#: ../camel/camel-sasl-kerberos4.c:49 -msgid "This option will connect to the server using Kerberos 4 authentication." -msgstr "该选项将用 Kerberos 4 认证连接到服务器。" - -#: ../camel/camel-sasl-kerberos4.c:173 -#, c-format -msgid "" -"Could not get Kerberos ticket:\n" -"%s" -msgstr "" -"无法获取 Kerberos 标签:\n" -"%s" - #: ../camel/camel-sasl-login.c:36 msgid "Login" msgstr "Login" @@ -1959,7 +2119,7 @@ msgstr "以未知的传输进行 SMTP 之前的 POP 授权" msgid "POP Before SMTP auth using a non-pop source" msgstr "以非 pop 源进行 SMTP 之前的 POP 授权" -#: ../camel/camel-search-private.c:149 +#: ../camel/camel-search-private.c:147 #, c-format msgid "Regular expression compilation failed: %s: %s" msgstr "常规表达式编译失败:%s:%s" @@ -1979,7 +2139,7 @@ msgstr "URL“%s”需要主机组件" msgid "URL '%s' needs a path component" msgstr "URL“%s”需要路径组件" -#: ../camel/camel-session.c:307 +#: ../camel/camel-session.c:305 #, c-format msgid "" "Could not create directory %s:\n" @@ -1988,209 +2148,209 @@ msgstr "" "无法创建目录 %s:\n" "%s" -#: ../camel/camel-session.c:479 +#: ../camel/camel-session.c:484 #, c-format msgid "Please enter the %s password for %s on host %s." msgstr "请输入 %2$s@%3$s 的 %1$s 密码" -#: ../camel/camel-session.c:817 +#: ../camel/camel-session.c:832 msgid "Camel session doesn't support forwarding of a message." -msgstr "" +msgstr "Camel 会话不支持信件转发。" -#: ../camel/camel-smime-context.c:444 ../camel/camel-smime-context.c:993 +#: ../camel/camel-smime-context.c:447 ../camel/camel-smime-context.c:1012 #, c-format msgid "Cannot find certificate for '%s'" msgstr "无法找到‘%s’的证书" -#: ../camel/camel-smime-context.c:450 +#: ../camel/camel-smime-context.c:453 msgid "Cannot create CMS message" msgstr "无法创建 CMS 信件" -#: ../camel/camel-smime-context.c:455 +#: ../camel/camel-smime-context.c:458 msgid "Cannot create CMS signed data" msgstr "无法创建 CMS 签名数据" -#: ../camel/camel-smime-context.c:461 +#: ../camel/camel-smime-context.c:464 msgid "Cannot attach CMS signed data" msgstr "无法附加 CMS 签名数据" -#: ../camel/camel-smime-context.c:468 +#: ../camel/camel-smime-context.c:471 msgid "Cannot attach CMS data" msgstr "无法附加 CMS 数据" -#: ../camel/camel-smime-context.c:474 +#: ../camel/camel-smime-context.c:477 msgid "Cannot create CMS Signer information" msgstr "无法创建 CMS 签名者信息" -#: ../camel/camel-smime-context.c:480 +#: ../camel/camel-smime-context.c:483 msgid "Cannot find certificate chain" msgstr "找不到证书链" -#: ../camel/camel-smime-context.c:486 +#: ../camel/camel-smime-context.c:489 msgid "Cannot add CMS Signing time" msgstr "无法添加 CMS 签名时间" -#: ../camel/camel-smime-context.c:508 ../camel/camel-smime-context.c:520 +#: ../camel/camel-smime-context.c:511 ../camel/camel-smime-context.c:523 #, c-format msgid "Encryption certificate for '%s' does not exist" msgstr "“%s”的加密证书不存在" -#: ../camel/camel-smime-context.c:527 +#: ../camel/camel-smime-context.c:530 msgid "Cannot add SMIMEEncKeyPrefs attribute" msgstr "无法添加 SMIMEEncKeyPrefs 属性" -#: ../camel/camel-smime-context.c:532 +#: ../camel/camel-smime-context.c:535 msgid "Cannot add MS SMIMEEncKeyPrefs attribute" msgstr "无法添加 MS SMIMEEncKeyPrefs 属性" -#: ../camel/camel-smime-context.c:537 +#: ../camel/camel-smime-context.c:540 msgid "Cannot add encryption certificate" msgstr "无法添加加密证书" -#: ../camel/camel-smime-context.c:543 +#: ../camel/camel-smime-context.c:546 msgid "Cannot add CMS Signer information" msgstr "无法添加 CMS 签名者信息" -#: ../camel/camel-smime-context.c:613 ../camel/camel-smime-context.c:1065 +#: ../camel/camel-smime-context.c:616 ../camel/camel-smime-context.c:1084 msgid "Cannot create encoder context" msgstr "无法创建编码器上下文" -#: ../camel/camel-smime-context.c:619 +#: ../camel/camel-smime-context.c:622 msgid "Failed to add data to CMS encoder" msgstr "将数据添加到 CMS 编码器失败" -#: ../camel/camel-smime-context.c:624 ../camel/camel-smime-context.c:1082 +#: ../camel/camel-smime-context.c:627 ../camel/camel-smime-context.c:1100 msgid "Failed to encode data" msgstr "编码数据失败" -#: ../camel/camel-smime-context.c:697 +#: ../camel/camel-smime-context.c:700 msgid "Unverified" msgstr "未校验" -#: ../camel/camel-smime-context.c:699 +#: ../camel/camel-smime-context.c:702 msgid "Good signature" msgstr "完好签名" -#: ../camel/camel-smime-context.c:701 +#: ../camel/camel-smime-context.c:704 msgid "Bad signature" msgstr "无效签名" -#: ../camel/camel-smime-context.c:703 +#: ../camel/camel-smime-context.c:706 msgid "Content tampered with or altered in transit" msgstr "内容在传送过程中被篡改" -#: ../camel/camel-smime-context.c:705 +#: ../camel/camel-smime-context.c:708 msgid "Signing certificate not found" msgstr "签名证书找不到" -#: ../camel/camel-smime-context.c:707 +#: ../camel/camel-smime-context.c:710 msgid "Signing certificate not trusted" msgstr "签名证书不可信" -#: ../camel/camel-smime-context.c:709 +#: ../camel/camel-smime-context.c:712 msgid "Signature algorithm unknown" msgstr "签名算法未知" -#: ../camel/camel-smime-context.c:711 +#: ../camel/camel-smime-context.c:714 msgid "Signature algorithm unsupported" msgstr "签名算法不支持" -#: ../camel/camel-smime-context.c:713 +#: ../camel/camel-smime-context.c:716 msgid "Malformed signature" msgstr "签名格式不对" -#: ../camel/camel-smime-context.c:715 +#: ../camel/camel-smime-context.c:718 msgid "Processing error" msgstr "处理错误" -#: ../camel/camel-smime-context.c:753 +#: ../camel/camel-smime-context.c:772 msgid "No signed data in signature" msgstr "签名中没有签名数据" -#: ../camel/camel-smime-context.c:758 +#: ../camel/camel-smime-context.c:777 msgid "Digests missing from enveloped data" msgstr "信封数据缺少摘要" -#: ../camel/camel-smime-context.c:771 ../camel/camel-smime-context.c:781 +#: ../camel/camel-smime-context.c:790 ../camel/camel-smime-context.c:800 msgid "Cannot calculate digests" msgstr "无法计算摘要" -#: ../camel/camel-smime-context.c:788 ../camel/camel-smime-context.c:792 +#: ../camel/camel-smime-context.c:807 ../camel/camel-smime-context.c:811 msgid "Cannot set message digests" msgstr "无法设置信件摘要" -#: ../camel/camel-smime-context.c:802 ../camel/camel-smime-context.c:807 +#: ../camel/camel-smime-context.c:821 ../camel/camel-smime-context.c:826 msgid "Certificate import failed" msgstr "证书导入失败" -#: ../camel/camel-smime-context.c:817 +#: ../camel/camel-smime-context.c:836 #, c-format msgid "Certificate is the only message, cannot verify certificates" msgstr "只有证书的信件,无法校验证书" -#: ../camel/camel-smime-context.c:820 +#: ../camel/camel-smime-context.c:839 #, c-format msgid "Certificate is the only message, certificates imported and verified" msgstr "只有证书的信件,证书已导入并校验" -#: ../camel/camel-smime-context.c:824 +#: ../camel/camel-smime-context.c:843 msgid "Cannot find signature digests" msgstr "找不到签名摘要" -#: ../camel/camel-smime-context.c:840 +#: ../camel/camel-smime-context.c:859 #, c-format msgid "Signer: %s <%s>: %s\n" msgstr "签名者:%s <%s>:%s\n" -#: ../camel/camel-smime-context.c:941 ../camel/camel-smime-context.c:1165 +#: ../camel/camel-smime-context.c:960 ../camel/camel-smime-context.c:1183 msgid "Decoder failed" msgstr "解码器失败" -#: ../camel/camel-smime-context.c:1000 +#: ../camel/camel-smime-context.c:1019 msgid "Cannot find common bulk encryption algorithm" msgstr "找不到公共批量加密算法" -#: ../camel/camel-smime-context.c:1008 +#: ../camel/camel-smime-context.c:1027 msgid "Cannot allocate slot for encryption bulk key" msgstr "无法为加密批量密钥分配密钥槽" -#: ../camel/camel-smime-context.c:1019 +#: ../camel/camel-smime-context.c:1038 msgid "Cannot create CMS Message" msgstr "无法创建 CMS 信件" -#: ../camel/camel-smime-context.c:1025 +#: ../camel/camel-smime-context.c:1044 msgid "Cannot create CMS Enveloped data" msgstr "无法创建 CMS 信封数据" -#: ../camel/camel-smime-context.c:1031 +#: ../camel/camel-smime-context.c:1050 msgid "Cannot attach CMS Enveloped data" msgstr "无法附加 CMS 信封数据" -#: ../camel/camel-smime-context.c:1037 +#: ../camel/camel-smime-context.c:1056 msgid "Cannot attach CMS data object" msgstr "无法附加 CMS 数据对象" -#: ../camel/camel-smime-context.c:1046 +#: ../camel/camel-smime-context.c:1065 msgid "Cannot create CMS Recipient information" msgstr "无法创建 CMS 收件人信息" -#: ../camel/camel-smime-context.c:1051 +#: ../camel/camel-smime-context.c:1070 msgid "Cannot add CMS Recipient information" msgstr "无法添加 CMS 收件人信息" -#: ../camel/camel-smime-context.c:1076 +#: ../camel/camel-smime-context.c:1094 msgid "Failed to add data to encoder" msgstr "将数据添加到编码器失败" -#: ../camel/camel-smime-context.c:1172 +#: ../camel/camel-smime-context.c:1190 msgid "S/MIME Decrypt: No encrypted content found" msgstr "S/MIME 解密:没有找到加密内容" -#: ../camel/camel-smime-context.c:1200 +#: ../camel/camel-smime-context.c:1218 msgid "import keys: unimplemented" msgstr "导入密钥:尚未实现" -#: ../camel/camel-smime-context.c:1208 +#: ../camel/camel-smime-context.c:1226 msgid "export keys: unimplemented" msgstr "导出密钥:尚未实现" @@ -2235,126 +2395,7 @@ msgstr "回收站" msgid "Junk" msgstr "垃圾" -#: ../camel/camel-tcp-stream-openssl.c:564 -msgid "Unable to get issuer's certificate" -msgstr "无法获取发行者的证书" - -#: ../camel/camel-tcp-stream-openssl.c:566 -msgid "Unable to get Certificate Revocation List" -msgstr "无法获取证书吊销列表签名" - -#: ../camel/camel-tcp-stream-openssl.c:568 -msgid "Unable to decrypt certificate signature" -msgstr "无法解密认证签名" - -#: ../camel/camel-tcp-stream-openssl.c:570 -msgid "Unable to decrypt Certificate Revocation List signature" -msgstr "无法解密证书吊销列表签名" - -#: ../camel/camel-tcp-stream-openssl.c:572 -msgid "Unable to decode issuer's public key" -msgstr "无法对发行者的公钥进行解码" - -#: ../camel/camel-tcp-stream-openssl.c:574 -msgid "Certificate signature failure" -msgstr "证书签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:576 -msgid "Certificate Revocation List signature failure" -msgstr "证书吊销列表签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:578 -msgid "Certificate not yet valid" -msgstr "证书未生效" - -#: ../camel/camel-tcp-stream-openssl.c:580 -msgid "Certificate has expired" -msgstr "证书已过期" - -#: ../camel/camel-tcp-stream-openssl.c:582 -#, fuzzy -msgid "Certificate Revocation List (CRL) not yet valid" -msgstr "证书吊销列表签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:584 -#, fuzzy -msgid "Certificate Revocation List (CRL) has expired" -msgstr "证书吊销列表签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:589 -#, fuzzy -msgid "Error in Certificate Revocation List (CRL)" -msgstr "无法获取证书吊销列表签名" - -#: ../camel/camel-tcp-stream-openssl.c:591 -msgid "Out of memory" -msgstr "内存耗尽" - -#: ../camel/camel-tcp-stream-openssl.c:593 -msgid "Zero-depth self-signed certificate" -msgstr "零深度自签名证书" - -#: ../camel/camel-tcp-stream-openssl.c:595 -msgid "Self-signed certificate in chain" -msgstr "链中的自签名证书" - -#: ../camel/camel-tcp-stream-openssl.c:597 -msgid "Unable to get issuer's certificate locally" -msgstr "无法在本地获取发行者的证书" - -#: ../camel/camel-tcp-stream-openssl.c:599 -msgid "Unable to verify leaf signature" -msgstr "无法校验叶子签名" - -#: ../camel/camel-tcp-stream-openssl.c:601 -msgid "Certificate chain too long" -msgstr "证书链过长" - -#: ../camel/camel-tcp-stream-openssl.c:603 -msgid "Certificate Revoked" -msgstr "证书已撤销" - -#: ../camel/camel-tcp-stream-openssl.c:605 -msgid "Invalid Certificate Authority (CA)" -msgstr "无效的证书颁发机构(CA)" - -#: ../camel/camel-tcp-stream-openssl.c:607 -msgid "Path length exceeded" -msgstr "超长的路径长度" - -#: ../camel/camel-tcp-stream-openssl.c:609 -msgid "Invalid purpose" -msgstr "无效目的" - -#: ../camel/camel-tcp-stream-openssl.c:611 -msgid "Certificate untrusted" -msgstr "不信任的证书" - -#: ../camel/camel-tcp-stream-openssl.c:613 -msgid "Certificate rejected" -msgstr "已拒绝的证书" - -#: ../camel/camel-tcp-stream-openssl.c:616 -msgid "Subject/Issuer mismatch" -msgstr "主题/发行者不匹配" - -#: ../camel/camel-tcp-stream-openssl.c:618 -msgid "AKID/SKID mismatch" -msgstr "AKID/SKID 不匹配" - -#: ../camel/camel-tcp-stream-openssl.c:620 -msgid "AKID/Issuer serial mismatch" -msgstr "AKID/发行者序列号不匹配" - -#: ../camel/camel-tcp-stream-openssl.c:622 -msgid "Key usage does not support certificate signing" -msgstr "密钥不支持证书签名" - -#: ../camel/camel-tcp-stream-openssl.c:625 -msgid "Error in application verification" -msgstr "应用程序验证错误" - -#: ../camel/camel-tcp-stream-openssl.c:692 ../camel/camel-tcp-stream-ssl.c:873 +#: ../camel/camel-tcp-stream-ssl.c:870 #, c-format msgid "" "Issuer: %s\n" @@ -2367,35 +2408,16 @@ msgstr "" "指纹: %s\n" "签名: %s" -#: ../camel/camel-tcp-stream-openssl.c:698 ../camel/camel-tcp-stream-ssl.c:879 +#: ../camel/camel-tcp-stream-ssl.c:876 msgid "GOOD" msgstr "好" -#: ../camel/camel-tcp-stream-openssl.c:698 ../camel/camel-tcp-stream-ssl.c:879 +#: ../camel/camel-tcp-stream-ssl.c:876 msgid "BAD" msgstr "坏" -#: ../camel/camel-tcp-stream-openssl.c:700 -#, c-format -msgid "" -"Bad certificate from %s:\n" -"\n" -"%s\n" -"\n" -"%s\n" -"\n" -"Do you wish to accept anyway?" -msgstr "" -"来自 %s 的错误证书:\n" -"\n" -"%s\n" -"\n" -"%s\n" -"\n" -"您仍然希望接受吗?" - #. construct our user prompt -#: ../camel/camel-tcp-stream-ssl.c:883 +#: ../camel/camel-tcp-stream-ssl.c:880 #, c-format msgid "" "SSL Certificate check for %s:\n" @@ -2410,7 +2432,7 @@ msgstr "" "\n" "您希望接受吗?" -#: ../camel/camel-tcp-stream-ssl.c:927 +#: ../camel/camel-tcp-stream-ssl.c:924 #, c-format msgid "" "Certificate problem: %s\n" @@ -2419,7 +2441,7 @@ msgstr "" "证书问题:%s\n" "发行者:%s" -#: ../camel/camel-tcp-stream-ssl.c:979 +#: ../camel/camel-tcp-stream-ssl.c:976 #, c-format msgid "" "Bad certificate domain: %s\n" @@ -2428,7 +2450,7 @@ msgstr "" "无效的证书域名:%s\n" "发行者:%s" -#: ../camel/camel-tcp-stream-ssl.c:997 +#: ../camel/camel-tcp-stream-ssl.c:994 #, c-format msgid "" "Certificate expired: %s\n" @@ -2437,7 +2459,7 @@ msgstr "" "证书过期:%s\n" "发行者:%s" -#: ../camel/camel-tcp-stream-ssl.c:1014 +#: ../camel/camel-tcp-stream-ssl.c:1011 #, c-format msgid "" "Certificate revocation list expired: %s\n" @@ -2451,17 +2473,18 @@ msgstr "" msgid "Could not parse URL '%s'" msgstr "无法解析 URL“%s”" -#: ../camel/camel-vee-folder.c:580 -#, c-format +#: ../camel/camel-vee-folder.c:577 +#, fuzzy, c-format +#| msgid "Error storing '%s': " msgid "Error storing '%s': %s" -msgstr "存储“%s”错误:%s" +msgstr "存储“%s”出错:" -#: ../camel/camel-vee-folder.c:657 +#: ../camel/camel-vee-folder.c:654 #, c-format msgid "No such message %s in %s" msgstr "在 %2$s 中没有信件 %1$s" -#: ../camel/camel-vee-folder.c:816 ../camel/camel-vee-folder.c:822 +#: ../camel/camel-vee-folder.c:813 ../camel/camel-vee-folder.c:819 msgid "Cannot copy or move messages into a Virtual Folder" msgstr "无法将信件移动或复制到虚拟文件夹中" @@ -2488,7 +2511,7 @@ msgstr "无法将信件复制到回收站文件夹" msgid "Cannot copy messages to the Junk folder" msgstr "无法将信件复制到垃圾邮件文件夹" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:136 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:137 #, c-format msgid "" "Cannot get message: %s\n" @@ -2497,87 +2520,90 @@ msgstr "" "无法获取信件:%s\n" " %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:136 -#: ../camel/providers/local/camel-maildir-folder.c:262 -#: ../camel/providers/local/camel-maildir-folder.c:291 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:137 +#: ../camel/providers/local/camel-maildir-folder.c:264 +#: ../camel/providers/local/camel-maildir-folder.c:293 +#: ../camel/providers/local/camel-maildir-folder.c:401 #: ../camel/providers/local/camel-mbox-folder.c:363 #: ../camel/providers/local/camel-mbox-folder.c:414 #: ../camel/providers/local/camel-mh-folder.c:226 msgid "No such message" msgstr "没有该信件" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:148 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:149 #: ../camel/providers/imap4/camel-imap4-folder.c:814 -#: ../camel/providers/nntp/camel-nntp-folder.c:175 -#: ../camel/providers/nntp/camel-nntp-folder.c:250 -#: ../camel/providers/nntp/camel-nntp-folder.c:410 +#: ../camel/providers/nntp/camel-nntp-folder.c:173 +#: ../camel/providers/nntp/camel-nntp-folder.c:248 +#: ../camel/providers/nntp/camel-nntp-folder.c:408 #: ../camel/providers/pop3/camel-pop3-folder.c:268 -#: ../camel/providers/pop3/camel-pop3-folder.c:578 -#: ../camel/providers/pop3/camel-pop3-folder.c:639 -#: ../camel/providers/pop3/camel-pop3-folder.c:657 +#: ../camel/providers/pop3/camel-pop3-folder.c:587 +#: ../camel/providers/pop3/camel-pop3-folder.c:648 +#: ../camel/providers/pop3/camel-pop3-folder.c:666 msgid "User canceled" msgstr "用户已取消" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:155 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:156 #: ../camel/providers/imap4/camel-imap4-folder.c:819 +#: ../camel/providers/nntp/camel-nntp-folder.c:164 #: ../camel/providers/nntp/camel-nntp-folder.c:166 -#: ../camel/providers/nntp/camel-nntp-folder.c:168 -#: ../camel/providers/nntp/camel-nntp-folder.c:177 -#: ../camel/providers/nntp/camel-nntp-folder.c:252 +#: ../camel/providers/nntp/camel-nntp-folder.c:175 +#: ../camel/providers/nntp/camel-nntp-folder.c:250 #: ../camel/providers/pop3/camel-pop3-folder.c:388 -#: ../camel/providers/pop3/camel-pop3-folder.c:581 -#: ../camel/providers/pop3/camel-pop3-folder.c:642 -#: ../camel/providers/pop3/camel-pop3-folder.c:649 -#: ../camel/providers/pop3/camel-pop3-folder.c:660 +#: ../camel/providers/pop3/camel-pop3-folder.c:590 +#: ../camel/providers/pop3/camel-pop3-folder.c:651 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 +#: ../camel/providers/pop3/camel-pop3-folder.c:669 #, c-format msgid "Cannot get message %s: %s" msgstr "无法获取信件 %s:%s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:172 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:180 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2463 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:173 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:181 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2501 #: ../camel/providers/imap4/camel-imap4-folder.c:837 msgid "This message is not available in offline mode." msgstr "该信件无法在脱机模式中使用。" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:194 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:201 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1966 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2017 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:195 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:202 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2004 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2055 msgid "Could not get message" msgstr "无法获得信件" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:939 -#: ../camel/providers/imap/camel-imap-folder.c:296 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:982 +#: ../camel/providers/imap/camel-imap-folder.c:295 #, c-format msgid "Could not load summary for %s" -msgstr "无法为 %s 装入概要" +msgstr "无法为 %s 载入概要" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1012 -#, fuzzy, c-format +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1055 +#, c-format msgid "Checking for deleted messages %s" -msgstr "检查新信件" +msgstr "检查已删除的新建 %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1287 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1330 msgid "Trash Folder Full. Please Empty." msgstr "回收站文件夹已满。请清空。" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1521 -#: ../camel/providers/groupwise/camel-groupwise-store.c:633 -#: ../camel/providers/groupwise/camel-groupwise-store.c:763 -#: ../camel/providers/imap/camel-imap-folder.c:3421 -#: ../camel/providers/imap/camel-imap-folder.c:3497 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1559 +#: ../camel/providers/groupwise/camel-groupwise-store.c:626 +#: ../camel/providers/groupwise/camel-groupwise-store.c:756 +#: ../camel/providers/imap/camel-imap-folder.c:3429 +#: ../camel/providers/imap/camel-imap-folder.c:3505 +#: ../camel/providers/imapx/camel-imapx-server.c:3631 +#: ../camel/providers/imapx/camel-imapx-server.c:3750 #, c-format msgid "Fetching summary information for new messages in %s" msgstr "从 %s 中的新信件中获取概要信息" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2317 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2360 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2355 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2398 #, c-format msgid "Cannot append message to folder '%s': %s" msgstr "无法将信件追加到文件夹“%s”:%s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2348 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2386 #, c-format msgid "Cannot create message: %s" msgstr "无法创建信件:%s" @@ -2607,12 +2633,14 @@ msgstr "检查新邮件" #: ../camel/providers/hula/camel-hula-provider.c:50 #: ../camel/providers/imap/camel-imap-provider.c:46 #: ../camel/providers/imap4/camel-imap4-provider.c:40 +#: ../camel/providers/imapx/camel-imapx-provider.c:52 msgid "C_heck for new messages in all folders" msgstr "在所有文件夹中检查新信件(_H)" #: ../camel/providers/groupwise/camel-groupwise-provider.c:59 #: ../camel/providers/imap/camel-imap-provider.c:68 #: ../camel/providers/imap4/camel-imap4-provider.c:51 +#: ../camel/providers/imapx/camel-imapx-provider.c:80 #: ../camel/providers/local/camel-local-provider.c:46 #: ../camel/providers/local/camel-local-provider.c:86 #: ../camel/providers/local/camel-local-provider.c:106 @@ -2629,6 +2657,7 @@ msgstr "检查新信件的垃圾内容(_U)" #: ../camel/providers/groupwise/camel-groupwise-provider.c:65 #: ../camel/providers/imap/camel-imap-provider.c:74 +#: ../camel/providers/imapx/camel-imapx-provider.c:86 msgid "Only check for Junk messages in the IN_BOX folder" msgstr "仅在收件箱中检查垃圾邮件(_B)" @@ -2641,9 +2670,8 @@ msgid "SOAP Settings" msgstr "SOAP 设置" #: ../camel/providers/groupwise/camel-groupwise-provider.c:75 -#, fuzzy msgid "Post Office Agent SOAP _Port:" -msgstr "邮局代理 SOAP 端口:" +msgstr "邮局代理 SOAP 端口(_P):" #: ../camel/providers/groupwise/camel-groupwise-provider.c:87 msgid "Novell GroupWise" @@ -2657,7 +2685,7 @@ msgstr "访问 Novell GroupWise 服务器" #: ../camel/providers/hula/camel-hula-provider.c:93 #: ../camel/providers/imap/camel-imap-provider.c:100 #: ../camel/providers/imap4/camel-imap4-provider.c:83 -#: ../camel/providers/imapp/camel-imapp-provider.c:67 +#: ../camel/providers/imapx/camel-imapx-provider.c:112 #: ../camel/providers/nntp/camel-nntp-provider.c:74 #: ../camel/providers/pop3/camel-pop3-provider.c:74 msgid "Password" @@ -2672,45 +2700,48 @@ msgstr "该选项将使用纯文本密码连接到 GroupWise 服务器。" msgid "Host or user not available in url" msgstr "URL 中的主机或用户不可用" -#: ../camel/providers/groupwise/camel-groupwise-store.c:204 -#: ../camel/providers/imap/camel-imap-store.c:1358 +#: ../camel/providers/groupwise/camel-groupwise-store.c:197 +#: ../camel/providers/imap/camel-imap-store.c:1356 +#: ../camel/providers/imapx/camel-imapx-server.c:2901 msgid "You did not enter a password." msgstr "您没有输入密码。" -#: ../camel/providers/groupwise/camel-groupwise-store.c:319 +#: ../camel/providers/groupwise/camel-groupwise-store.c:312 msgid "Some features may not work correctly with your current server version" msgstr "某些特性可能无法与您目前的服务器版本共同工作" -#: ../camel/providers/groupwise/camel-groupwise-store.c:540 -#: ../camel/providers/imap/camel-imap-store.c:1849 -#: ../camel/providers/imap/camel-imap-store.c:2047 +#: ../camel/providers/groupwise/camel-groupwise-store.c:533 +#: ../camel/providers/imap/camel-imap-store.c:1879 +#: ../camel/providers/imap/camel-imap-store.c:2077 +#: ../camel/providers/imapx/camel-imapx-store.c:376 #, c-format msgid "No such folder %s" msgstr "没有文件夹 %s" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1266 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1201 msgid "Cannot create GroupWise folders in offline mode." msgstr "无法在脱机模式下创建 GroupWise 文件夹。" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1280 -#: ../camel/providers/imap/camel-imap-store.c:1924 -#: ../camel/providers/imap/camel-imap-store.c:2304 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1215 +#: ../camel/providers/imap/camel-imap-store.c:1954 +#: ../camel/providers/imap/camel-imap-store.c:2355 +#: ../camel/providers/imapx/camel-imapx-store.c:820 msgid "The parent folder is not allowed to contain subfolders" msgstr "父文件夹不允许含有子文件夹" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1359 -#: ../camel/providers/groupwise/camel-groupwise-store.c:1382 -#, fuzzy, c-format +#: ../camel/providers/groupwise/camel-groupwise-store.c:1294 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1317 +#, c-format msgid "Cannot rename GroupWise folder '%s' to '%s'" msgstr "无法将 GroupWise 文件夹“%s”重命名为“%s”" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1414 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1349 #: ../camel/providers/groupwise/camel-groupwise-transport.c:120 #, c-format msgid "GroupWise server %s" msgstr "GroupWise 服务器 %s" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1416 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1351 #, c-format msgid "GroupWise service for %s on %s" msgstr "%2$s 为 %1$s 提供的 GroupWise 服务" @@ -2741,27 +2772,32 @@ msgstr "无法发送信件:%s" #: ../camel/providers/hula/camel-hula-provider.c:48 #: ../camel/providers/imap/camel-imap-provider.c:44 +#: ../camel/providers/imapx/camel-imapx-provider.c:44 msgid "Checking for New Mail" msgstr "检查新邮件" #: ../camel/providers/hula/camel-hula-provider.c:53 #: ../camel/providers/imap/camel-imap-provider.c:52 +#: ../camel/providers/imapx/camel-imapx-provider.c:58 msgid "Connection to Server" msgstr "连接服务器" #: ../camel/providers/hula/camel-hula-provider.c:55 #: ../camel/providers/imap/camel-imap-provider.c:54 +#: ../camel/providers/imapx/camel-imapx-provider.c:60 msgid "_Use custom command to connect to server" msgstr "使用自定义命令连接到服务器(_U)" #: ../camel/providers/hula/camel-hula-provider.c:57 #: ../camel/providers/imap/camel-imap-provider.c:56 +#: ../camel/providers/imapx/camel-imapx-provider.c:62 msgid "Command:" msgstr "命令:" #: ../camel/providers/hula/camel-hula-provider.c:60 #: ../camel/providers/imap/camel-imap-provider.c:60 #: ../camel/providers/imap4/camel-imap4-provider.c:43 +#: ../camel/providers/imapx/camel-imapx-provider.c:70 #: ../camel/providers/nntp/camel-nntp-provider.c:44 msgid "Folders" msgstr "文件夹" @@ -2769,12 +2805,14 @@ msgstr "文件夹" #: ../camel/providers/hula/camel-hula-provider.c:62 #: ../camel/providers/imap/camel-imap-provider.c:62 #: ../camel/providers/imap4/camel-imap4-provider.c:45 +#: ../camel/providers/imapx/camel-imapx-provider.c:72 msgid "_Show only subscribed folders" msgstr "只显示订阅了的文件夹(_S)" #: ../camel/providers/hula/camel-hula-provider.c:64 #: ../camel/providers/imap/camel-imap-provider.c:64 #: ../camel/providers/imap4/camel-imap4-provider.c:47 +#: ../camel/providers/imapx/camel-imapx-provider.c:75 msgid "O_verride server-supplied folder namespace" msgstr "覆盖服务器提供的文件夹命名空间(_V)" @@ -2807,12 +2845,12 @@ msgstr "没有输入流" #: ../camel/providers/imap/camel-imap-command.c:229 #: ../camel/providers/imap/camel-imap-command.c:278 #: ../camel/providers/imap/camel-imap-command.c:492 -#: ../camel/providers/imap/camel-imap-store.c:3051 +#: ../camel/providers/imap/camel-imap-store.c:3126 msgid "Operation cancelled" msgstr "操作已取消" #: ../camel/providers/imap/camel-imap-command.c:331 -#: ../camel/providers/imap/camel-imap-store.c:3056 +#: ../camel/providers/imap/camel-imap-store.c:3131 #, c-format msgid "Server unexpectedly disconnected: %s" msgstr "服务器意外地中止了连接:%s" @@ -2852,65 +2890,68 @@ msgstr "IMAP 服务器应答不含有 %s 信息" msgid "Unexpected OK response from IMAP server: %s" msgstr "来自 IMAP 服务器意外的 OK 应答:%s" -#: ../camel/providers/imap/camel-imap-folder.c:91 +#: ../camel/providers/imap/camel-imap-folder.c:90 msgid "Always check for new mail in this folder" msgstr "总是检查此文件夹中的新邮件(_B)" -#: ../camel/providers/imap/camel-imap-folder.c:277 +#: ../camel/providers/imap/camel-imap-folder.c:276 #, c-format msgid "Could not create directory %s: %s" msgstr "无法创建目录 %s:%s" #. Check UIDs and flags of all messages we already know of. -#: ../camel/providers/imap/camel-imap-folder.c:919 +#: ../camel/providers/imap/camel-imap-folder.c:918 +#: ../camel/providers/imapx/camel-imapx-server.c:3668 #, c-format msgid "Scanning for changed messages in %s" msgstr "扫描 %s 中更改了的信件" -#: ../camel/providers/imap/camel-imap-folder.c:1987 +#: ../camel/providers/imap/camel-imap-folder.c:1986 #, c-format msgid "Unexpected response status '%s' after APPEND command" msgstr "APPEND 命令后返回了未知的响应状态“%s”" -#: ../camel/providers/imap/camel-imap-folder.c:2002 +#: ../camel/providers/imap/camel-imap-folder.c:2001 msgid "No response on continuation after APPEND command" msgstr "APPEND 命令后续无响应" -#: ../camel/providers/imap/camel-imap-folder.c:2047 +#: ../camel/providers/imap/camel-imap-folder.c:2046 msgid "Unknown error occurred during APPEND command!" msgstr "在 APPEND 命令时发生了错误!" -#: ../camel/providers/imap/camel-imap-folder.c:2878 +#: ../camel/providers/imap/camel-imap-folder.c:2877 #, c-format msgid "Unable to retrieve message: %s" msgstr "无法获取信件:%s" -#: ../camel/providers/imap/camel-imap-folder.c:2913 +#: ../camel/providers/imap/camel-imap-folder.c:2912 +#: ../camel/providers/imapx/camel-imapx-server.c:4782 #, c-format msgid "Cannot get message with message ID %s: %s" msgstr "无法获取信件 ID %s:%s" -#: ../camel/providers/imap/camel-imap-folder.c:2914 +#: ../camel/providers/imap/camel-imap-folder.c:2913 +#: ../camel/providers/imapx/camel-imapx-server.c:4783 msgid "No such message available." msgstr "没有该信件。" -#: ../camel/providers/imap/camel-imap-folder.c:2975 -#: ../camel/providers/imap/camel-imap-folder.c:3808 -#: ../camel/providers/nntp/camel-nntp-folder.c:238 +#: ../camel/providers/imap/camel-imap-folder.c:2974 +#: ../camel/providers/imap/camel-imap-folder.c:3819 +#: ../camel/providers/nntp/camel-nntp-folder.c:236 msgid "This message is not currently available" msgstr "该信件目前不可用" -#: ../camel/providers/imap/camel-imap-folder.c:3624 +#: ../camel/providers/imap/camel-imap-folder.c:3632 #, c-format msgid "Incomplete server response: no information provided for message %d" msgstr "不完整的服务器响应:没有为第%d封信提供信息" -#: ../camel/providers/imap/camel-imap-folder.c:3632 +#: ../camel/providers/imap/camel-imap-folder.c:3640 #, c-format msgid "Incomplete server response: no UID provided for message %d" msgstr "不完整的服务器响应:没有为第%d封信提供 UID" -#: ../camel/providers/imap/camel-imap-folder.c:3846 +#: ../camel/providers/imap/camel-imap-folder.c:3857 msgid "Could not find message body in FETCH response." msgstr "无法在 FETCH 应答中找到信体。" @@ -2918,7 +2959,7 @@ msgstr "无法在 FETCH 应答中找到信体。" #: ../camel/providers/imap/camel-imap-message-cache.c:244 #, c-format msgid "Could not open cache directory: %s" -msgstr "无法打开缓冲器目录:%s" +msgstr "无法打开缓存目录:%s" #: ../camel/providers/imap/camel-imap-message-cache.c:330 #: ../camel/providers/imap/camel-imap-message-cache.c:387 @@ -2934,25 +2975,30 @@ msgid "Failed to cache %s: %s" msgstr "缓存 %s 失败:%s" #: ../camel/providers/imap/camel-imap-provider.c:48 +#: ../camel/providers/imapx/camel-imapx-provider.c:54 msgid "Ch_eck for new messages in subscribed folders" msgstr "在订阅的文件夹中检查新信件(_E)" #: ../camel/providers/imap/camel-imap-provider.c:66 #: ../camel/providers/imap4/camel-imap4-provider.c:49 +#: ../camel/providers/imapx/camel-imapx-provider.c:77 msgid "Namespace:" msgstr "命名空间:" #: ../camel/providers/imap/camel-imap-provider.c:70 #: ../camel/providers/imap4/camel-imap4-provider.c:53 +#: ../camel/providers/imapx/camel-imapx-provider.c:82 msgid "_Apply filters to new messages in INBOX on this server" msgstr "应用过滤规则到本服务器上收件箱中的新信件(_A)" #: ../camel/providers/imap/camel-imap-provider.c:72 +#: ../camel/providers/imapx/camel-imapx-provider.c:84 msgid "Check new messages for Jun_k contents" msgstr "检查新信件的垃圾内容(_K)" #: ../camel/providers/imap/camel-imap-provider.c:76 #: ../camel/providers/imap4/camel-imap4-provider.c:59 +#: ../camel/providers/imapx/camel-imapx-provider.c:88 msgid "Automatically synchroni_ze remote mail locally" msgstr "自动将远程邮件同步到本地(_Z)" @@ -2961,111 +3007,125 @@ msgid "IMAP" msgstr "IMAP" #: ../camel/providers/imap/camel-imap-provider.c:85 +#: ../camel/providers/imapx/camel-imapx-provider.c:98 msgid "For reading and storing mail on IMAP servers." msgstr "IMAP 服务器上的邮件的读写。" #: ../camel/providers/imap/camel-imap-provider.c:102 -#: ../camel/providers/imapp/camel-imapp-provider.c:69 +#: ../camel/providers/imapx/camel-imapx-provider.c:114 msgid "This option will connect to the IMAP server using a plaintext password." msgstr "该选项将使用纯文本密码连接到 IMAP 服务器。" -#: ../camel/providers/imap/camel-imap-store.c:437 +#: ../camel/providers/imap/camel-imap-store.c:435 #: ../camel/providers/imap4/camel-imap4-store.c:210 +#: ../camel/providers/imapx/camel-imapx-store.c:204 #, c-format msgid "IMAP server %s" msgstr "IMAP 服务器 %s" -#: ../camel/providers/imap/camel-imap-store.c:439 +#: ../camel/providers/imap/camel-imap-store.c:437 #: ../camel/providers/imap4/camel-imap4-store.c:212 +#: ../camel/providers/imapx/camel-imapx-store.c:206 #, c-format msgid "IMAP service for %s on %s" msgstr "%2$s 为 %1$s 提供的 IMAP 服务" -#: ../camel/providers/imap/camel-imap-store.c:568 -#: ../camel/providers/imap/camel-imap-store.c:583 +#: ../camel/providers/imap/camel-imap-store.c:566 +#: ../camel/providers/imap/camel-imap-store.c:581 #: ../camel/providers/imap4/camel-imap4-store.c:247 #: ../camel/providers/imap4/camel-imap4-store.c:262 #: ../camel/providers/nntp/camel-nntp-store.c:182 #: ../camel/providers/nntp/camel-nntp-store.c:197 -#: ../camel/providers/pop3/camel-pop3-store.c:170 -#: ../camel/providers/pop3/camel-pop3-store.c:184 +#: ../camel/providers/pop3/camel-pop3-store.c:192 +#: ../camel/providers/pop3/camel-pop3-store.c:206 #: ../camel/providers/smtp/camel-smtp-transport.c:259 #: ../camel/providers/smtp/camel-smtp-transport.c:274 #, c-format msgid "Could not connect to %s: %s" msgstr "无法连接到 %s:%s" -#: ../camel/providers/imap/camel-imap-store.c:569 +#: ../camel/providers/imap/camel-imap-store.c:567 #: ../camel/providers/imap4/camel-imap4-store.c:248 #: ../camel/providers/nntp/camel-nntp-store.c:183 -#: ../camel/providers/pop3/camel-pop3-store.c:171 +#: ../camel/providers/pop3/camel-pop3-store.c:193 #: ../camel/providers/smtp/camel-smtp-transport.c:260 msgid "SSL unavailable" msgstr "SSL 不可用" -#: ../camel/providers/imap/camel-imap-store.c:580 -#: ../camel/providers/imap/camel-imap-store.c:862 +#: ../camel/providers/imap/camel-imap-store.c:578 +#: ../camel/providers/imap/camel-imap-store.c:860 +#: ../camel/providers/imapx/camel-imapx-server.c:2595 +#: ../camel/providers/imapx/camel-imapx-server.c:2693 msgid "Connection cancelled" msgstr "连接已取消" -#: ../camel/providers/imap/camel-imap-store.c:691 -#: ../camel/providers/imap/camel-imap-store.c:710 -#: ../camel/providers/imap/camel-imap-store.c:716 -#: ../camel/providers/imap/camel-imap-store.c:742 +#: ../camel/providers/imap/camel-imap-store.c:689 +#: ../camel/providers/imap/camel-imap-store.c:708 +#: ../camel/providers/imap/camel-imap-store.c:714 +#: ../camel/providers/imap/camel-imap-store.c:740 #: ../camel/providers/imap4/camel-imap4-store.c:310 #: ../camel/providers/imap4/camel-imap4-store.c:325 #: ../camel/providers/imap4/camel-imap4-store.c:334 +#: ../camel/providers/imapx/camel-imapx-server.c:2764 +#: ../camel/providers/imapx/camel-imapx-server.c:2795 #, c-format msgid "Failed to connect to IMAP server %s in secure mode: %s" msgstr "以安全模式连接到 IMAP 服务器 %s 失败:%s" -#: ../camel/providers/imap/camel-imap-store.c:692 +#: ../camel/providers/imap/camel-imap-store.c:690 +#: ../camel/providers/imapx/camel-imapx-server.c:2765 #: ../camel/providers/smtp/camel-smtp-transport.c:332 msgid "STARTTLS not supported" msgstr "不支持 STARTTLS" -#: ../camel/providers/imap/camel-imap-store.c:711 +#: ../camel/providers/imap/camel-imap-store.c:709 +#: ../camel/providers/imapx/camel-imapx-server.c:2796 msgid "SSL negotiations failed" msgstr "SSL 协商失败" -#: ../camel/providers/imap/camel-imap-store.c:717 +#: ../camel/providers/imap/camel-imap-store.c:715 #: ../camel/providers/imap4/camel-imap4-store.c:335 #: ../camel/providers/smtp/camel-smtp-transport.c:371 msgid "SSL is not available in this build" msgstr "本次编译中未包含 SSL" -#: ../camel/providers/imap/camel-imap-store.c:865 +#: ../camel/providers/imap/camel-imap-store.c:863 +#: ../camel/providers/imapx/camel-imapx-server.c:2598 #, c-format msgid "Could not connect with command \"%s\": %s" msgstr "无法使用命令“%s”连接:%s" #. create a dummy "." parent inbox, use to scan, then put back at the top level -#: ../camel/providers/imap/camel-imap-store.c:1053 -#: ../camel/providers/imap/camel-imap-store.c:2400 +#: ../camel/providers/imap/camel-imap-store.c:1051 +#: ../camel/providers/imap/camel-imap-store.c:2451 #: ../camel/providers/imap4/camel-imap4-store-summary.c:356 #: ../camel/providers/imap4/camel-imap4-store.c:1403 -#: ../camel/providers/local/camel-maildir-folder.c:80 +#: ../camel/providers/imapx/camel-imapx-store.c:428 +#: ../camel/providers/imapx/camel-imapx-store.c:1001 +#: ../camel/providers/local/camel-maildir-folder.c:81 #: ../camel/providers/local/camel-maildir-store.c:219 #: ../camel/providers/local/camel-maildir-store.c:291 #: ../camel/providers/local/camel-maildir-store.c:517 #: ../camel/providers/local/camel-maildir-store.c:530 -#: ../camel/providers/local/camel-spool-store.c:463 -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:264 +#: ../camel/providers/local/camel-spool-store.c:461 msgid "Inbox" msgstr "收件箱" -#: ../camel/providers/imap/camel-imap-store.c:1305 +#: ../camel/providers/imap/camel-imap-store.c:1303 +#: ../camel/providers/imapx/camel-imapx-server.c:2860 #, c-format msgid "IMAP server %s does not support requested authentication type %s" msgstr "IMAP 服务器 %s 不支持要求的验证类型 %s" -#: ../camel/providers/imap/camel-imap-store.c:1315 +#: ../camel/providers/imap/camel-imap-store.c:1313 +#: ../camel/providers/imapx/camel-imapx-server.c:2871 #: ../camel/providers/smtp/camel-smtp-transport.c:506 #, c-format msgid "No support for authentication type %s" msgstr "不支持验证类型 %s" -#: ../camel/providers/imap/camel-imap-store.c:1389 +#: ../camel/providers/imap/camel-imap-store.c:1387 +#: ../camel/providers/imapx/camel-imapx-server.c:2940 #, c-format msgid "" "Unable to authenticate to IMAP server.\n" @@ -3076,31 +3136,32 @@ msgstr "" "%s\n" "\n" -#: ../camel/providers/imap/camel-imap-store.c:1861 -#: ../camel/providers/imap/camel-imap-store.c:2242 +#: ../camel/providers/imap/camel-imap-store.c:1891 +#: ../camel/providers/imap/camel-imap-store.c:2293 #: ../camel/providers/imap4/camel-imap4-store.c:954 +#: ../camel/providers/imapx/camel-imapx-store.c:803 #, c-format msgid "" "The folder name \"%s\" is invalid because it contains the character \"%c\"" msgstr "文件夹名“%s”无效,原因是其中含有字符“%c”" -#: ../camel/providers/imap/camel-imap-store.c:1978 +#: ../camel/providers/imap/camel-imap-store.c:2008 #: ../camel/providers/local/camel-maildir-store.c:192 -#: ../camel/providers/local/camel-mbox-store.c:204 +#: ../camel/providers/local/camel-mbox-store.c:202 #: ../camel/providers/local/camel-mh-store.c:249 #, c-format msgid "Cannot create folder '%s': folder exists." msgstr "无法创建文件夹“%s”:文件夹已存在。" -#: ../camel/providers/imap/camel-imap-store.c:2253 +#: ../camel/providers/imap/camel-imap-store.c:2304 +#: ../camel/providers/imapx/camel-imapx-store.c:812 #, c-format msgid "Unknown parent folder: %s" msgstr "未知的父文件夹:%s" -#: ../camel/providers/imap/camel-imap-store.c:3053 -#, fuzzy +#: ../camel/providers/imap/camel-imap-store.c:3128 msgid "Server unexpectedly disconnected" -msgstr "服务器意外地中止了连接:%s" +msgstr "服务器意外断开 " #: ../camel/providers/imap4/camel-imap4-command.c:572 #: ../camel/providers/imap4/camel-imap4-command.c:579 @@ -3251,10 +3312,9 @@ msgid "" msgstr "该选项将使用纯文本密码连接到 IMAPv4rev1 服务器。" #: ../camel/providers/imap4/camel-imap4-store.c:259 -#: ../camel/providers/imapp/camel-imapp-store.c:249 #: ../camel/providers/nntp/camel-nntp-store.c:194 #: ../camel/providers/nntp/camel-nntp-store.c:213 -#: ../camel/providers/pop3/camel-pop3-store.c:181 +#: ../camel/providers/pop3/camel-pop3-store.c:203 #: ../camel/providers/smtp/camel-smtp-transport.c:271 msgid "Connection canceled" msgstr "连接已取消" @@ -3267,7 +3327,7 @@ msgid "" msgstr "以安全模式连接到 IMAP 服务器 %s 失败:服务器不支持 STARTTLS" #: ../camel/providers/imap4/camel-imap4-store.c:326 -#: ../camel/providers/pop3/camel-pop3-store.c:249 +#: ../camel/providers/pop3/camel-pop3-store.c:276 msgid "TLS negotiations failed" msgstr "TLS 协商失败" @@ -3412,37 +3472,33 @@ msgstr "无数据" msgid "IMAP server %s unexpectedly disconnected: %s" msgstr "IMAP4 服务器 %s 意外断开连接:%s" -#: ../camel/providers/imapp/camel-imapp-provider.c:41 -#: ../camel/providers/pop3/camel-pop3-provider.c:43 -msgid "Message storage" -msgstr "信件存储" +#: ../camel/providers/imapx/camel-imapx-folder.c:87 +#, c-format +msgid "Could not create folder summary for %s" +msgstr "无法为 %s 创建文件夹概要" + +#: ../camel/providers/imapx/camel-imapx-folder.c:95 +#, c-format +msgid "Could not create cache for %s" +msgstr "无法为 %s 创建缓存文件" + +#: ../camel/providers/imapx/camel-imapx-provider.c:50 +msgid "Use I_dle if the server supports it" +msgstr "若服务器支持,使用 I_dle" + +#: ../camel/providers/imapx/camel-imapx-provider.c:65 +msgid "Numbe_r of cached connections to use" +msgstr "要使用的缓存连接数(_R)" -#: ../camel/providers/imapp/camel-imapp-provider.c:49 +#: ../camel/providers/imapx/camel-imapx-provider.c:96 msgid "IMAP+" msgstr "IMAP+" -#: ../camel/providers/imapp/camel-imapp-provider.c:51 -msgid "" -"Experimental IMAP 4(.1) client\n" -"This is untested and unsupported code, you want to use plain imap instead.\n" -"\n" -" !!! DO NOT USE THIS FOR PRODUCTION EMAIL !!!\n" -msgstr "" -"试验性 IMAP 4(.1) 客户端\n" -"此功能是未测试的代码,不被支持,您应该换用纯 IMAP。\n" -"\n" -" !!! 不要对重要邮件使用此功能 !!!\n" - -#: ../camel/providers/imapp/camel-imapp-store.c:252 +#: ../camel/providers/imapx/camel-imapx-server.c:2696 #, c-format msgid "Could not connect to %s (port %s): %s" msgstr "无法连接到 %s(端口 %s):%s" -#: ../camel/providers/imapp/camel-imapp-store.c:348 -#, c-format -msgid "Could not connect to POP server on %s" -msgstr "无法连接到 %s 上的 POP 服务器" - #: ../camel/providers/local/camel-local-folder.c:178 msgid "Index message body data" msgstr "索引信体数据" @@ -3456,9 +3512,9 @@ msgstr "~%s (%s)" #. /var/spool/mail relative path + protocol #: ../camel/providers/local/camel-local-folder.c:399 #: ../camel/providers/local/camel-local-folder.c:402 -#, fuzzy, c-format +#, c-format msgid "mailbox: %s (%s)" -msgstr "邮件箱:%s (%s)" +msgstr "邮箱:%s (%s)" #. a full path + protocol #: ../camel/providers/local/camel-local-folder.c:406 @@ -3524,53 +3580,53 @@ msgstr "" msgid "Standard Unix mbox spool directory" msgstr "标准 Unix mbox spool 目录" -#: ../camel/providers/local/camel-local-store.c:165 -#: ../camel/providers/local/camel-local-store.c:276 -#: ../camel/providers/local/camel-mbox-store.c:359 -#: ../camel/providers/local/camel-spool-store.c:128 +#: ../camel/providers/local/camel-local-store.c:163 +#: ../camel/providers/local/camel-local-store.c:274 +#: ../camel/providers/local/camel-mbox-store.c:357 +#: ../camel/providers/local/camel-spool-store.c:126 #, c-format msgid "Store root %s is not an absolute path" msgstr "存储根目录 %s 不是绝对路径" -#: ../camel/providers/local/camel-local-store.c:172 +#: ../camel/providers/local/camel-local-store.c:170 #, c-format msgid "Store root %s is not a regular directory" msgstr "存储根目录 %s 不是普通目录" -#: ../camel/providers/local/camel-local-store.c:181 -#: ../camel/providers/local/camel-local-store.c:189 -#: ../camel/providers/local/camel-local-store.c:287 +#: ../camel/providers/local/camel-local-store.c:179 +#: ../camel/providers/local/camel-local-store.c:187 +#: ../camel/providers/local/camel-local-store.c:285 #, c-format msgid "Cannot get folder: %s: %s" msgstr "无法获取文件夹:%s:%s" -#: ../camel/providers/local/camel-local-store.c:201 +#: ../camel/providers/local/camel-local-store.c:199 msgid "Local stores do not have an inbox" msgstr "本地存储没有收件箱" -#: ../camel/providers/local/camel-local-store.c:247 +#: ../camel/providers/local/camel-local-store.c:245 #, c-format msgid "Local mail file %s" msgstr "本地邮件文件 %s" -#: ../camel/providers/local/camel-local-store.c:342 +#: ../camel/providers/local/camel-local-store.c:340 #, c-format msgid "Could not rename folder %s to %s: %s" msgstr "无法将文件夹 %s 改名为 %s:%s" -#: ../camel/providers/local/camel-local-store.c:410 +#: ../camel/providers/local/camel-local-store.c:408 #, c-format msgid "Could not rename '%s': %s" msgstr "无法重命名“%s”:%s" -#: ../camel/providers/local/camel-local-store.c:435 -#: ../camel/providers/local/camel-mbox-store.c:300 +#: ../camel/providers/local/camel-local-store.c:433 +#: ../camel/providers/local/camel-mbox-store.c:298 #, c-format msgid "Could not delete folder index file '%s': %s" msgstr "无法删除文件夹索引文件“%s”:%s" -#: ../camel/providers/local/camel-local-store.c:458 -#: ../camel/providers/local/camel-mbox-store.c:324 +#: ../camel/providers/local/camel-local-store.c:456 +#: ../camel/providers/local/camel-mbox-store.c:322 #, c-format msgid "Could not delete folder meta file '%s': %s" msgstr "无法删除文件夹元文件“%s”:%s" @@ -3579,19 +3635,20 @@ msgstr "无法删除文件夹元文件“%s”:%s" msgid "Unable to add message to summary: unknown reason" msgstr "无法将信件添加到概要中:未知的原因" -#: ../camel/providers/local/camel-maildir-folder.c:228 +#: ../camel/providers/local/camel-maildir-folder.c:230 msgid "Maildir append message canceled" msgstr "邮件目录附加消息已取消" -#: ../camel/providers/local/camel-maildir-folder.c:231 +#: ../camel/providers/local/camel-maildir-folder.c:233 #, c-format msgid "Cannot append message to maildir folder: %s: %s" msgstr "无法将信件附加到邮件目录文件夹:%s:%s" -#: ../camel/providers/local/camel-maildir-folder.c:261 -#: ../camel/providers/local/camel-maildir-folder.c:290 -#: ../camel/providers/local/camel-maildir-folder.c:304 -#: ../camel/providers/local/camel-maildir-folder.c:312 +#: ../camel/providers/local/camel-maildir-folder.c:263 +#: ../camel/providers/local/camel-maildir-folder.c:292 +#: ../camel/providers/local/camel-maildir-folder.c:306 +#: ../camel/providers/local/camel-maildir-folder.c:314 +#: ../camel/providers/local/camel-maildir-folder.c:400 #: ../camel/providers/local/camel-mbox-folder.c:362 #: ../camel/providers/local/camel-mbox-folder.c:413 #: ../camel/providers/local/camel-mbox-folder.c:434 @@ -3608,27 +3665,31 @@ msgstr "" "无法从文件夹 %2$s 获取信件:%1$s\n" " %3$s" -#: ../camel/providers/local/camel-maildir-folder.c:313 +#: ../camel/providers/local/camel-maildir-folder.c:315 msgid "Invalid message contents" msgstr "无效的信件内容" +#: ../camel/providers/local/camel-maildir-folder.c:418 +msgid "Cannot transfer message to destination folder" +msgstr "无法将信件转移到目标文件夹" + #: ../camel/providers/local/camel-maildir-store.c:148 #: ../camel/providers/local/camel-maildir-store.c:173 -#: ../camel/providers/local/camel-mbox-store.c:176 -#: ../camel/providers/local/camel-mbox-store.c:188 +#: ../camel/providers/local/camel-mbox-store.c:174 +#: ../camel/providers/local/camel-mbox-store.c:186 #, c-format msgid "Cannot create folder '%s': %s" msgstr "无法创建文件夹“%s”:%s" #: ../camel/providers/local/camel-maildir-store.c:161 -#: ../camel/providers/local/camel-mbox-store.c:147 +#: ../camel/providers/local/camel-mbox-store.c:145 #: ../camel/providers/local/camel-mh-store.c:217 #, c-format msgid "Cannot get folder '%s': %s" msgstr "无法获取文件夹“%s”:%s" #: ../camel/providers/local/camel-maildir-store.c:165 -#: ../camel/providers/local/camel-mbox-store.c:155 +#: ../camel/providers/local/camel-mbox-store.c:153 #: ../camel/providers/local/camel-mh-store.c:224 #, c-format msgid "Cannot get folder '%s': folder does not exist." @@ -3651,30 +3712,30 @@ msgid "not a maildir directory" msgstr "不是 maildir 目录" #: ../camel/providers/local/camel-maildir-store.c:440 -#: ../camel/providers/local/camel-spool-store.c:330 -#: ../camel/providers/local/camel-spool-store.c:344 +#: ../camel/providers/local/camel-spool-store.c:328 +#: ../camel/providers/local/camel-spool-store.c:342 #, c-format msgid "Could not scan folder '%s': %s" msgstr "无法扫描文件夹“%s”:%s" -#: ../camel/providers/local/camel-maildir-summary.c:437 -#: ../camel/providers/local/camel-maildir-summary.c:556 +#: ../camel/providers/local/camel-maildir-summary.c:432 +#: ../camel/providers/local/camel-maildir-summary.c:551 #, c-format msgid "Cannot open maildir directory path: %s: %s" msgstr "无法打开邮件目录路径:%s:%s" -#: ../camel/providers/local/camel-maildir-summary.c:549 +#: ../camel/providers/local/camel-maildir-summary.c:544 msgid "Checking folder consistency" msgstr "检查文件夹一致性" -#: ../camel/providers/local/camel-maildir-summary.c:658 +#: ../camel/providers/local/camel-maildir-summary.c:637 msgid "Checking for new messages" msgstr "检查新信件" -#: ../camel/providers/local/camel-maildir-summary.c:748 -#: ../camel/providers/local/camel-mbox-summary.c:526 -#: ../camel/providers/local/camel-mbox-summary.c:722 -#: ../camel/providers/local/camel-mbox-summary.c:842 +#: ../camel/providers/local/camel-maildir-summary.c:724 +#: ../camel/providers/local/camel-mbox-summary.c:529 +#: ../camel/providers/local/camel-mbox-summary.c:725 +#: ../camel/providers/local/camel-mbox-summary.c:845 #: ../camel/providers/local/camel-spool-summary.c:150 msgid "Storing folder" msgstr "存储文件夹" @@ -3708,19 +3769,19 @@ msgstr "文件夹好像已经被不可恢复地破坏了。" msgid "Message construction failed." msgstr "信件构建失败。" -#: ../camel/providers/local/camel-mbox-store.c:166 -#: ../camel/providers/local/camel-mbox-store.c:365 +#: ../camel/providers/local/camel-mbox-store.c:164 +#: ../camel/providers/local/camel-mbox-store.c:363 msgid "Cannot create a folder by this name." msgstr "无法以此名称创建文件夹。" -#: ../camel/providers/local/camel-mbox-store.c:198 +#: ../camel/providers/local/camel-mbox-store.c:196 #, c-format msgid "Cannot get folder '%s': not a regular file." msgstr "无法获取文件夹“%s”:不是普通文件" -#: ../camel/providers/local/camel-mbox-store.c:228 -#: ../camel/providers/local/camel-mbox-store.c:239 -#: ../camel/providers/local/camel-mbox-store.c:262 +#: ../camel/providers/local/camel-mbox-store.c:226 +#: ../camel/providers/local/camel-mbox-store.c:237 +#: ../camel/providers/local/camel-mbox-store.c:260 #, c-format msgid "" "Could not delete folder '%s':\n" @@ -3729,120 +3790,120 @@ msgstr "" "无法删除文件夹“%s”:\n" "%s" -#: ../camel/providers/local/camel-mbox-store.c:247 +#: ../camel/providers/local/camel-mbox-store.c:245 #, c-format msgid "'%s' is not a regular file." msgstr "“%s”并不是普通文件。" -#: ../camel/providers/local/camel-mbox-store.c:254 +#: ../camel/providers/local/camel-mbox-store.c:252 #, c-format msgid "Folder '%s' is not empty. Not deleted." msgstr "文件夹“%s”非空。没有删除。" -#: ../camel/providers/local/camel-mbox-store.c:276 -#: ../camel/providers/local/camel-mbox-store.c:288 +#: ../camel/providers/local/camel-mbox-store.c:274 +#: ../camel/providers/local/camel-mbox-store.c:286 #, c-format msgid "Could not delete folder summary file '%s': %s" msgstr "无法删除文件夹概要文件“%s”:%s" -#: ../camel/providers/local/camel-mbox-store.c:378 +#: ../camel/providers/local/camel-mbox-store.c:376 #, c-format msgid "Cannot create directory '%s': %s." msgstr "无法创建目录“%s”:%s" -#: ../camel/providers/local/camel-mbox-store.c:392 +#: ../camel/providers/local/camel-mbox-store.c:390 #, c-format msgid "Cannot create folder: %s: %s" msgstr "无法创建文件夹:%s:%s" -#: ../camel/providers/local/camel-mbox-store.c:394 +#: ../camel/providers/local/camel-mbox-store.c:392 msgid "Folder already exists" msgstr "文件夹已经存在" -#: ../camel/providers/local/camel-mbox-store.c:485 +#: ../camel/providers/local/camel-mbox-store.c:483 msgid "The new folder name is illegal." msgstr "指定的文件夹名称不合法。" -#: ../camel/providers/local/camel-mbox-store.c:498 +#: ../camel/providers/local/camel-mbox-store.c:496 #, c-format msgid "Could not rename '%s': '%s': %s" msgstr "无法重命名“%s”:“%s”:%s" -#: ../camel/providers/local/camel-mbox-store.c:579 +#: ../camel/providers/local/camel-mbox-store.c:577 #, c-format msgid "Could not rename '%s' to %s: %s" msgstr "无法将“%s”重命名为 %s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:532 +#: ../camel/providers/local/camel-mbox-summary.c:535 #, c-format msgid "Could not open folder: %s: %s" msgstr "无法打开文件夹:%s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:582 +#: ../camel/providers/local/camel-mbox-summary.c:585 #, c-format msgid "Fatal mail parser error near position %ld in folder %s" msgstr "在文件夹 %2$s 中邻近 %1$ld 的位置出现致命的解析错误" -#: ../camel/providers/local/camel-mbox-summary.c:659 +#: ../camel/providers/local/camel-mbox-summary.c:662 #, c-format msgid "Cannot check folder: %s: %s" msgstr "无法检查文件夹:%s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:727 -#: ../camel/providers/local/camel-mbox-summary.c:847 +#: ../camel/providers/local/camel-mbox-summary.c:730 +#: ../camel/providers/local/camel-mbox-summary.c:850 #: ../camel/providers/local/camel-spool-summary.c:155 #, c-format msgid "Could not open file: %s: %s" msgstr "无法打开文件:%s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:739 +#: ../camel/providers/local/camel-mbox-summary.c:742 #: ../camel/providers/local/camel-spool-summary.c:168 #, c-format msgid "Cannot open temporary mailbox: %s" msgstr "无法打开临时邮件箱:%s" -#: ../camel/providers/local/camel-mbox-summary.c:752 -#: ../camel/providers/local/camel-mbox-summary.c:956 +#: ../camel/providers/local/camel-mbox-summary.c:755 +#: ../camel/providers/local/camel-mbox-summary.c:961 #, c-format msgid "Could not close source folder %s: %s" msgstr "无法关闭来源文件夹 %s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:761 +#: ../camel/providers/local/camel-mbox-summary.c:764 #, c-format msgid "Could not close temporary folder: %s" msgstr "无法关闭临时文件夹:%s" -#: ../camel/providers/local/camel-mbox-summary.c:776 +#: ../camel/providers/local/camel-mbox-summary.c:779 #, c-format msgid "Could not rename folder: %s" msgstr "无法重命名文件夹:%s" -#: ../camel/providers/local/camel-mbox-summary.c:858 -#: ../camel/providers/local/camel-mbox-summary.c:1083 +#: ../camel/providers/local/camel-mbox-summary.c:861 +#: ../camel/providers/local/camel-mbox-summary.c:1090 #, c-format msgid "Could not store folder: %s" msgstr "无法存储文件夹:%s" -#: ../camel/providers/local/camel-mbox-summary.c:897 -#: ../camel/providers/local/camel-mbox-summary.c:905 -#: ../camel/providers/local/camel-mbox-summary.c:1113 +#: ../camel/providers/local/camel-mbox-summary.c:901 +#: ../camel/providers/local/camel-mbox-summary.c:909 #: ../camel/providers/local/camel-mbox-summary.c:1121 +#: ../camel/providers/local/camel-mbox-summary.c:1129 msgid "Summary and folder mismatch, even after a sync" msgstr "即使同步后,概要和文件夹仍然不匹配" -#: ../camel/providers/local/camel-mbox-summary.c:1046 +#: ../camel/providers/local/camel-mbox-summary.c:1053 #: ../camel/providers/local/camel-spool-summary.c:334 #, c-format msgid "Unknown error: %s" msgstr "未知的错误:%s" -#: ../camel/providers/local/camel-mbox-summary.c:1189 -#: ../camel/providers/local/camel-mbox-summary.c:1215 +#: ../camel/providers/local/camel-mbox-summary.c:1197 +#: ../camel/providers/local/camel-mbox-summary.c:1223 #, c-format msgid "Writing to temporary mailbox failed: %s" msgstr "写入临时 mailbox 失败:%s" -#: ../camel/providers/local/camel-mbox-summary.c:1206 +#: ../camel/providers/local/camel-mbox-summary.c:1214 #, c-format msgid "Writing to temporary mailbox failed: %s: %s" msgstr "写入临时 mailbox 失败:%s:%s" @@ -3871,22 +3932,22 @@ msgstr "无法获取文件夹“%s”:不是目录。" msgid "Cannot open MH directory path: %s: %s" msgstr "无法打开 MH 目录:%s:%s" -#: ../camel/providers/local/camel-spool-store.c:134 +#: ../camel/providers/local/camel-spool-store.c:132 #, c-format msgid "Spool '%s' cannot be opened: %s" msgstr "无法打开脱机文件“%s”:%s" -#: ../camel/providers/local/camel-spool-store.c:146 +#: ../camel/providers/local/camel-spool-store.c:144 #, c-format msgid "Spool '%s' is not a regular file or directory" msgstr "脱机文件“%s”不是普通文件或目录" -#: ../camel/providers/local/camel-spool-store.c:165 +#: ../camel/providers/local/camel-spool-store.c:163 #, c-format msgid "Folder '%s/%s' does not exist." msgstr "文件夹“%s/%s”不存在。" -#: ../camel/providers/local/camel-spool-store.c:175 +#: ../camel/providers/local/camel-spool-store.c:173 #, c-format msgid "" "Could not open folder '%s':\n" @@ -3895,12 +3956,12 @@ msgstr "" "无法打开文件夹“%s”:\n" "%s" -#: ../camel/providers/local/camel-spool-store.c:179 +#: ../camel/providers/local/camel-spool-store.c:177 #, c-format msgid "Folder '%s' does not exist." msgstr "文件夹“%s”不存在。" -#: ../camel/providers/local/camel-spool-store.c:184 +#: ../camel/providers/local/camel-spool-store.c:182 #, c-format msgid "" "Could not create folder '%s':\n" @@ -3909,30 +3970,30 @@ msgstr "" "无法创建文件夹“%s”:\n" "%s" -#: ../camel/providers/local/camel-spool-store.c:192 +#: ../camel/providers/local/camel-spool-store.c:190 #, c-format msgid "'%s' is not a mailbox file." msgstr "“%s”不是邮件箱文件。" -#: ../camel/providers/local/camel-spool-store.c:209 +#: ../camel/providers/local/camel-spool-store.c:207 msgid "Store does not support an INBOX" msgstr "存储并不支持收件箱" -#: ../camel/providers/local/camel-spool-store.c:221 +#: ../camel/providers/local/camel-spool-store.c:219 #, c-format msgid "Spool mail file %s" msgstr "脱机邮件文件 %s" -#: ../camel/providers/local/camel-spool-store.c:221 +#: ../camel/providers/local/camel-spool-store.c:219 #, c-format msgid "Spool folder tree %s" msgstr "脱机文件夹树 %s" -#: ../camel/providers/local/camel-spool-store.c:229 +#: ../camel/providers/local/camel-spool-store.c:227 msgid "Spool folders cannot be renamed" msgstr "脱机文件夹无法改名" -#: ../camel/providers/local/camel-spool-store.c:237 +#: ../camel/providers/local/camel-spool-store.c:235 msgid "Spool folders cannot be deleted" msgstr "脱机文件夹无法删除" @@ -3959,26 +4020,26 @@ msgstr "" "无法同步脱机文件夹 %s:%s\n" "文件夹可能已损坏,副本保存在“%s”" -#: ../camel/providers/nntp/camel-nntp-folder.c:137 -#: ../camel/providers/nntp/camel-nntp-folder.c:194 -#: ../camel/providers/nntp/camel-nntp-folder.c:226 +#: ../camel/providers/nntp/camel-nntp-folder.c:135 +#: ../camel/providers/nntp/camel-nntp-folder.c:192 +#: ../camel/providers/nntp/camel-nntp-folder.c:224 #, c-format msgid "Internal error: UID in invalid format: %s" msgstr "内部错误:UID 的格式无效:%s" -#: ../camel/providers/nntp/camel-nntp-folder.c:367 -#: ../camel/providers/nntp/camel-nntp-folder.c:370 +#: ../camel/providers/nntp/camel-nntp-folder.c:365 +#: ../camel/providers/nntp/camel-nntp-folder.c:368 +#: ../camel/providers/nntp/camel-nntp-folder.c:410 #: ../camel/providers/nntp/camel-nntp-folder.c:412 -#: ../camel/providers/nntp/camel-nntp-folder.c:414 #, c-format msgid "Posting failed: %s" msgstr "发表失败:%s" -#: ../camel/providers/nntp/camel-nntp-folder.c:432 +#: ../camel/providers/nntp/camel-nntp-folder.c:430 msgid "You cannot post NNTP messages while working offline!" msgstr "您离线时无法投递 NNTP 信件!" -#: ../camel/providers/nntp/camel-nntp-folder.c:443 +#: ../camel/providers/nntp/camel-nntp-folder.c:441 msgid "You cannot copy messages from a NNTP folder!" msgstr "您无法从 NNTP 文件夹复制信件!" @@ -4087,26 +4148,26 @@ msgid "No such folder: %s" msgstr "没有文件夹:%s" #: ../camel/providers/nntp/camel-nntp-summary.c:272 -#: ../camel/providers/nntp/camel-nntp-summary.c:370 +#: ../camel/providers/nntp/camel-nntp-summary.c:373 #, c-format msgid "%s: Scanning new messages" msgstr "%s:正在扫描新信件" -#: ../camel/providers/nntp/camel-nntp-summary.c:279 +#: ../camel/providers/nntp/camel-nntp-summary.c:282 #, c-format msgid "Unexpected server response from xover: %s" msgstr "来自 xover 的意外服务器应答:%s" -#: ../camel/providers/nntp/camel-nntp-summary.c:384 +#: ../camel/providers/nntp/camel-nntp-summary.c:387 #, c-format msgid "Unexpected server response from head: %s" msgstr "来自 head 的意外服务器应答:%s" -#: ../camel/providers/nntp/camel-nntp-summary.c:420 +#: ../camel/providers/nntp/camel-nntp-summary.c:423 msgid "Use cancel" msgstr "使用取消" -#: ../camel/providers/nntp/camel-nntp-summary.c:422 +#: ../camel/providers/nntp/camel-nntp-summary.c:425 #, c-format msgid "Operation failed: %s" msgstr "操作失败:%s" @@ -4128,23 +4189,27 @@ msgstr "销毁旧信件" msgid "Expunging deleted messages" msgstr "彻底销毁已删除的信件" -#: ../camel/providers/pop3/camel-pop3-folder.c:530 -#: ../camel/providers/pop3/camel-pop3-folder.c:552 +#: ../camel/providers/pop3/camel-pop3-folder.c:539 +#: ../camel/providers/pop3/camel-pop3-folder.c:561 #, c-format msgid "No message with UID %s" msgstr "没有 UID 为 %s 的信件" #. Sigh, most of the crap in this function is so that the cancel button #. returns the proper exception code. Sigh. -#: ../camel/providers/pop3/camel-pop3-folder.c:559 +#: ../camel/providers/pop3/camel-pop3-folder.c:568 #, c-format msgid "Retrieving POP message %d" msgstr "正在获取 POP 信件 %d" -#: ../camel/providers/pop3/camel-pop3-folder.c:649 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 msgid "Unknown reason" msgstr "未知原因" +#: ../camel/providers/pop3/camel-pop3-provider.c:43 +msgid "Message storage" +msgstr "信件存储" + #: ../camel/providers/pop3/camel-pop3-provider.c:45 msgid "_Leave messages on server" msgstr "在服务器上保留信件(_L)" @@ -4183,56 +4248,62 @@ msgstr "" "该选项使 Evolution 在连接到 POP 服务器时使用 APOP 协议。即使是声称支持这一功" "能的服务器,也不一定能使所有用户工作。" -#: ../camel/providers/pop3/camel-pop3-store.c:207 +#: ../camel/providers/pop3/camel-pop3-store.c:229 #, c-format msgid "Failed to read a valid greeting from POP server %s" msgstr "从 POP 服务器 %s 读取欢迎词失败" -#: ../camel/providers/pop3/camel-pop3-store.c:224 -#: ../camel/providers/pop3/camel-pop3-store.c:238 -#: ../camel/providers/pop3/camel-pop3-store.c:248 -#: ../camel/providers/pop3/camel-pop3-store.c:254 +#: ../camel/providers/pop3/camel-pop3-store.c:246 +#: ../camel/providers/pop3/camel-pop3-store.c:275 +#: ../camel/providers/pop3/camel-pop3-store.c:281 #, c-format msgid "Failed to connect to POP server %s in secure mode: %s" msgstr "以安全模式连接到 POP 服务器 %s 失败:%s" -#: ../camel/providers/pop3/camel-pop3-store.c:225 +#: ../camel/providers/pop3/camel-pop3-store.c:247 msgid "STLS not supported by server" msgstr "服务器不支持 STLS" -#: ../camel/providers/pop3/camel-pop3-store.c:255 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:263 +#, c-format +msgid "Failed to connect to POP server %s in secure mode%s" +msgstr "以安全模式连接到 POP 服务器 %s 失败:%s" + +#: ../camel/providers/pop3/camel-pop3-store.c:282 msgid "TLS is not available in this build" msgstr "本次编译中未包含 TLS" -#: ../camel/providers/pop3/camel-pop3-store.c:361 +#: ../camel/providers/pop3/camel-pop3-store.c:388 #, c-format msgid "Could not connect to POP server %s" msgstr "无法连接到 POP 服务器 %s" -#: ../camel/providers/pop3/camel-pop3-store.c:402 -#: ../camel/providers/pop3/camel-pop3-store.c:535 +#: ../camel/providers/pop3/camel-pop3-store.c:429 +#: ../camel/providers/pop3/camel-pop3-store.c:567 #, c-format msgid "" "Unable to connect to POP server %s: No support for requested authentication " "mechanism." msgstr "无法连接到 POP 服务器 %s:不支持请求认证机制。" -#: ../camel/providers/pop3/camel-pop3-store.c:418 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:448 #, c-format -msgid "SASL '%s' Login failed for POP server %s: %s" -msgstr "使用 SASL“%s”登录 POP 服务器 %s 失败:%s" +msgid "SASL '%s' Login failed for POP server %s%s" +msgstr "使用 SASL“%s”登录 POP 服务器 %s 失败%s" -#: ../camel/providers/pop3/camel-pop3-store.c:430 +#: ../camel/providers/pop3/camel-pop3-store.c:462 #, c-format msgid "Cannot login to POP server %s: SASL Protocol error" msgstr "无法登录到 POP 服务器 %s:SASL 协议错误" -#: ../camel/providers/pop3/camel-pop3-store.c:449 +#: ../camel/providers/pop3/camel-pop3-store.c:481 #, c-format msgid "Failed to authenticate on POP server %s: %s" msgstr "认证到 POP 服务器 %s 失败:%s" -#: ../camel/providers/pop3/camel-pop3-store.c:508 +#: ../camel/providers/pop3/camel-pop3-store.c:540 #, c-format msgid "" "Unable to connect to POP server %s:\tInvalid APOP ID received. Impersonation " @@ -4241,8 +4312,7 @@ msgstr "" "无法连接到 POP 服务器 %s:\t接收到非法的 APOP ID。可能是冒名攻击。请联系您的" "管理员。" -#: ../camel/providers/pop3/camel-pop3-store.c:549 -#: ../camel/providers/pop3/camel-pop3-store.c:562 +#: ../camel/providers/pop3/camel-pop3-store.c:581 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4251,16 +4321,27 @@ msgstr "" "无法连接到 POP 服务器 %s。\n" "发送密码错误:%s" -#: ../camel/providers/pop3/camel-pop3-store.c:556 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:591 #, c-format msgid "" "Unable to connect to POP server %s.\n" -"Error sending username: %s" +"Error sending username%s" msgstr "" "无法连接到 POP 服务器 %s。\n" -"发送用户名错误:%s" +"发送用户名错误%s" -#: ../camel/providers/pop3/camel-pop3-store.c:669 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:601 +#, c-format +msgid "" +"Unable to connect to POP server %s.\n" +"Error sending password%s" +msgstr "" +"无法连接到 POP 服务器 %s。\n" +"发送密码错误:%s" + +#: ../camel/providers/pop3/camel-pop3-store.c:707 #, c-format msgid "No such folder '%s'." msgstr "没有文件夹“%s”。" @@ -4569,85 +4650,85 @@ msgstr "QUIT 命令失败:%s" msgid "QUIT command failed" msgstr "QUIT 命令失败" -#: ../libedataserver/e-categories.c:47 +#: ../libedataserver/e-categories.c:44 msgid "Business" msgstr "商务" -#: ../libedataserver/e-categories.c:48 +#: ../libedataserver/e-categories.c:45 msgid "Competition" msgstr "完成" -#: ../libedataserver/e-categories.c:49 +#: ../libedataserver/e-categories.c:46 msgid "Favorites" msgstr "最爱" -#: ../libedataserver/e-categories.c:50 +#: ../libedataserver/e-categories.c:47 msgid "Gifts" msgstr "礼物" -#: ../libedataserver/e-categories.c:51 +#: ../libedataserver/e-categories.c:48 msgid "Goals/Objectives" msgstr "目标" -#: ../libedataserver/e-categories.c:52 +#: ../libedataserver/e-categories.c:49 msgid "Holiday" msgstr "假日" -#: ../libedataserver/e-categories.c:53 +#: ../libedataserver/e-categories.c:50 msgid "Holiday Cards" msgstr "假日卡" #. important people (e.g. new business partners) -#: ../libedataserver/e-categories.c:55 +#: ../libedataserver/e-categories.c:52 msgid "Hot Contacts" msgstr "亲密联系人" -#: ../libedataserver/e-categories.c:56 +#: ../libedataserver/e-categories.c:53 msgid "Ideas" msgstr "想法" -#: ../libedataserver/e-categories.c:57 +#: ../libedataserver/e-categories.c:54 msgid "International" msgstr "国际" -#: ../libedataserver/e-categories.c:58 +#: ../libedataserver/e-categories.c:55 msgid "Key Customer" msgstr "关键客户" -#: ../libedataserver/e-categories.c:59 +#: ../libedataserver/e-categories.c:56 msgid "Miscellaneous" msgstr "杂类" -#: ../libedataserver/e-categories.c:60 +#: ../libedataserver/e-categories.c:57 msgid "Personal" msgstr "个人" -#: ../libedataserver/e-categories.c:61 +#: ../libedataserver/e-categories.c:58 msgid "Phone Calls" msgstr "通电话" #. Translators: "Status" is a category name; it can mean anything user wants to -#: ../libedataserver/e-categories.c:63 +#: ../libedataserver/e-categories.c:60 msgid "Status" msgstr "状态" -#: ../libedataserver/e-categories.c:64 +#: ../libedataserver/e-categories.c:61 msgid "Strategies" msgstr "策略" -#: ../libedataserver/e-categories.c:65 +#: ../libedataserver/e-categories.c:62 msgid "Suppliers" msgstr "供应商" -#: ../libedataserver/e-categories.c:66 +#: ../libedataserver/e-categories.c:63 msgid "Time & Expenses" msgstr "时间和花费" -#: ../libedataserver/e-categories.c:67 +#: ../libedataserver/e-categories.c:64 msgid "VIP" msgstr "VIP" -#: ../libedataserver/e-categories.c:68 +#: ../libedataserver/e-categories.c:65 msgid "Waiting" msgstr "等候" @@ -4655,7 +4736,7 @@ msgstr "等候" #. in 12-hour format. #. strftime format of a weekday, a date and a #. time, in 12-hour format. -#: ../libedataserver/e-time-utils.c:1635 ../libedataserver/e-time-utils.c:1900 +#: ../libedataserver/e-time-utils.c:1635 ../libedataserver/e-time-utils.c:1902 msgid "%a %m/%d/%Y %I:%M:%S %p" msgstr "%Y-%m-%d %A%p%I:%M:%S" @@ -4663,7 +4744,7 @@ msgstr "%Y-%m-%d %A%p%I:%M:%S" #. in 24-hour format. #. strftime format of a weekday, a date and a #. time, in 24-hour format. -#: ../libedataserver/e-time-utils.c:1640 ../libedataserver/e-time-utils.c:1891 +#: ../libedataserver/e-time-utils.c:1640 ../libedataserver/e-time-utils.c:1893 msgid "%a %m/%d/%Y %H:%M:%S" msgstr "%Y-%m-%d %A %H:%M:%S" @@ -4671,7 +4752,7 @@ msgstr "%Y-%m-%d %A %H:%M:%S" #. in 12-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 12-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1645 ../libedataserver/e-time-utils.c:1896 +#: ../libedataserver/e-time-utils.c:1645 ../libedataserver/e-time-utils.c:1898 msgid "%a %m/%d/%Y %I:%M %p" msgstr "%Y-%m-%d %A%p%I:%M" @@ -4679,7 +4760,7 @@ msgstr "%Y-%m-%d %A%p%I:%M" #. in 24-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 24-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1650 ../libedataserver/e-time-utils.c:1887 +#: ../libedataserver/e-time-utils.c:1650 ../libedataserver/e-time-utils.c:1889 msgid "%a %m/%d/%Y %H:%M" msgstr "%Y-%m-%d %A %H:%M" @@ -4697,8 +4778,8 @@ msgstr "%Y-%m-%d %A %H" #. strptime format of a weekday and a date. #. strftime format of a weekday and a date. -#: ../libedataserver/e-time-utils.c:1663 ../libedataserver/e-time-utils.c:1763 -#: ../libedataserver/e-time-utils.c:1882 +#: ../libedataserver/e-time-utils.c:1663 ../libedataserver/e-time-utils.c:1765 +#: ../libedataserver/e-time-utils.c:1884 msgid "%a %m/%d/%Y" msgstr "%Y-%m-%d %A" @@ -4738,19 +4819,19 @@ msgstr "%Y-%m-%d %H" #. strptime format of a weekday and a date. #. This is the preferred date format for the locale. -#: ../libedataserver/e-time-utils.c:1697 ../libedataserver/e-time-utils.c:1766 +#: ../libedataserver/e-time-utils.c:1697 ../libedataserver/e-time-utils.c:1768 msgid "%m/%d/%Y" msgstr "%Y-%m-%d" #. strptime format for a time of day, in 12-hour format. #. strftime format of a time in 12-hour format. -#: ../libedataserver/e-time-utils.c:1824 ../libedataserver/e-time-utils.c:1944 +#: ../libedataserver/e-time-utils.c:1826 ../libedataserver/e-time-utils.c:1946 msgid "%I:%M:%S %p" msgstr "%p%I:%M:%S" #. strptime format for a time of day, in 24-hour format. #. strftime format of a time in 24-hour format. -#: ../libedataserver/e-time-utils.c:1828 ../libedataserver/e-time-utils.c:1936 +#: ../libedataserver/e-time-utils.c:1830 ../libedataserver/e-time-utils.c:1938 msgid "%H:%M:%S" msgstr "%H:%M:%S" @@ -4758,24 +4839,24 @@ msgstr "%H:%M:%S" #. in 12-hour format. #. strftime format of a time in 12-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1833 ../libedataserver/e-time-utils.c:1941 +#: ../libedataserver/e-time-utils.c:1835 ../libedataserver/e-time-utils.c:1943 msgid "%I:%M %p" msgstr "%p%I:%M" #. strptime format for time of day, without seconds 24-hour format. #. strftime format of a time in 24-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1837 ../libedataserver/e-time-utils.c:1933 +#: ../libedataserver/e-time-utils.c:1839 ../libedataserver/e-time-utils.c:1935 msgid "%H:%M" msgstr "%H:%M" #. strptime format for time of day, without seconds 24-hour format, and no colon. -#: ../libedataserver/e-time-utils.c:1840 +#: ../libedataserver/e-time-utils.c:1842 msgid "%H%M" msgstr "%H%M" #. strptime format for hour and AM/PM, 12-hour format. -#: ../libedataserver/e-time-utils.c:1844 +#: ../libedataserver/e-time-utils.c:1846 msgid "%I %p" msgstr "%p%I" @@ -4787,57 +4868,61 @@ msgstr "匿名访问 LDAP 服务器" msgid "Failed to authenticate.\n" msgstr "身份验证失败。\n" -#: ../libedataserverui/e-categories-dialog.c:338 +#: ../libedataserverui/e-categories-dialog.c:145 +msgid "Category Icon" +msgstr "类别图标" + +#: ../libedataserverui/e-categories-dialog.c:151 +msgid "_No Image" +msgstr "无图像(_N)" + +#: ../libedataserverui/e-categories-dialog.c:372 #, c-format msgid "" "There is already a category '%s' in the configuration. Please use another " "name" msgstr "配置中已经有类别“%s”了。请使用另外一个名称" -#: ../libedataserverui/e-categories-dialog.c:641 +#: ../libedataserverui/e-categories-dialog.c:680 msgid "Icon" msgstr "图标" -#: ../libedataserverui/e-categories-dialog.c:646 +#: ../libedataserverui/e-categories-dialog.c:685 msgid "Category" msgstr "类别" #: ../libedataserverui/e-categories-dialog.ui.h:1 -msgid "Category Icon" -msgstr "类别图标" - -#: ../libedataserverui/e-categories-dialog.ui.h:2 msgid "Category Properties" msgstr "类别属性" -#: ../libedataserverui/e-categories-dialog.ui.h:3 +#: ../libedataserverui/e-categories-dialog.ui.h:2 msgid "Category _Icon" msgstr "类别图标(_I)" -#: ../libedataserverui/e-categories-dialog.ui.h:4 +#: ../libedataserverui/e-categories-dialog.ui.h:3 msgid "Category _Name" msgstr "类别名称(_N)" -#: ../libedataserverui/e-categories-dialog.ui.h:5 -msgid "Item(s) belong to these _categories:" -msgstr "项目属于这些类别(_C):" +#: ../libedataserverui/e-categories-dialog.ui.h:4 +msgid "Item(s) _belong to these categories:" +msgstr "项目属于这些类别(_B):" -#: ../libedataserverui/e-categories-dialog.ui.h:6 +#: ../libedataserverui/e-categories-dialog.ui.h:5 msgid "_Available Categories:" msgstr "可用类别(_A):" -#: ../libedataserverui/e-categories-dialog.ui.h:7 +#: ../libedataserverui/e-categories-dialog.ui.h:6 msgid "_Edit" msgstr "编辑(_E)" -#: ../libedataserverui/e-categories-dialog.ui.h:8 +#: ../libedataserverui/e-categories-dialog.ui.h:7 msgid "categories" msgstr "类别" -#: ../libedataserverui/e-category-completion.c:290 -#, fuzzy, c-format +#: ../libedataserverui/e-category-completion.c:292 +#, c-format msgid "Create category \"%s\"" -msgstr "类别列表" +msgstr "创建类别“%s”" #: ../libedataserverui/e-cell-renderer-color.c:222 msgid "Color Info" @@ -4847,19 +4932,19 @@ msgstr "颜色信息" msgid "The color to render" msgstr "用于渲染的颜色" -#: ../libedataserverui/e-name-selector-dialog.c:292 +#: ../libedataserverui/e-name-selector-dialog.c:300 msgid "Select Contacts from Address Book" msgstr "从地址簿中选择联系人" -#: ../libedataserverui/e-name-selector-dialog.c:579 +#: ../libedataserverui/e-name-selector-dialog.c:639 msgid "_Add" msgstr "添加(_A)" -#: ../libedataserverui/e-name-selector-dialog.c:604 +#: ../libedataserverui/e-name-selector-dialog.c:643 msgid "_Remove" msgstr "删除(_R)" -#: ../libedataserverui/e-name-selector-dialog.c:781 +#: ../libedataserverui/e-name-selector-dialog.c:828 #: ../libedataserverui/e-name-selector-dialog.ui.h:6 msgid "Any Category" msgstr "任何类别" @@ -4889,7 +4974,6 @@ msgid "Cate_gory:" msgstr "类别(_G):" #: ../libedataserverui/e-name-selector-dialog.ui.h:8 -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:261 msgid "Contacts" msgstr "联系人" @@ -4902,56 +4986,56 @@ msgid "_Search:" msgstr "搜索(_S):" #. To Translators: This would be similiar to "Expand MyList Inline" where MyList is a Contact List -#: ../libedataserverui/e-name-selector-entry.c:2455 +#: ../libedataserverui/e-name-selector-entry.c:2511 #, c-format msgid "E_xpand %s Inline" msgstr "嵌入式展开 %s(_X)" #. Copy Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2470 +#: ../libedataserverui/e-name-selector-entry.c:2526 #, c-format msgid "Cop_y %s" msgstr "复制 %s(_Y)" #. Cut Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2480 +#: ../libedataserverui/e-name-selector-entry.c:2536 #, c-format msgid "C_ut %s" msgstr "剪切 %s(_U)" #. Edit Contact item -#: ../libedataserverui/e-name-selector-entry.c:2497 +#: ../libedataserverui/e-name-selector-entry.c:2553 #, c-format msgid "_Edit %s" msgstr "编辑 %s(_E)" -#: ../libedataserverui/e-name-selector-list.c:469 +#: ../libedataserverui/e-name-selector-list.c:479 #, c-format msgid "_Delete %s" msgstr "删除 %s(_D)" -#: ../libedataserverui/e-passwords.c:234 +#: ../libedataserverui/e-passwords.c:240 #, c-format msgid "Keyring key is unusable: no user or host name" msgstr "密钥环不可用:没有用户或主机名" -#: ../libedataserverui/e-passwords.c:1093 +#: ../libedataserverui/e-passwords.c:1099 msgid "You have the Caps Lock key on." msgstr "您打开了 Caps Lock。" -#: ../libedataserverui/e-passwords.c:1215 +#: ../libedataserverui/e-passwords.c:1221 msgid "_Remember this passphrase" msgstr "记住此密码句(_R)" -#: ../libedataserverui/e-passwords.c:1216 +#: ../libedataserverui/e-passwords.c:1222 msgid "_Remember this passphrase for the remainder of this session" msgstr "本次会话记住此密码句(_R)" -#: ../libedataserverui/e-passwords.c:1221 +#: ../libedataserverui/e-passwords.c:1227 msgid "_Remember this password" msgstr "记住此密码(_R)" -#: ../libedataserverui/e-passwords.c:1222 +#: ../libedataserverui/e-passwords.c:1228 msgid "_Remember this password for the remainder of this session" msgstr "本次会话记住此密码(_R)" @@ -4960,203 +5044,293 @@ msgstr "本次会话记住此密码(_R)" msgid "Select destination" msgstr "选择目的地" -#: ../libedataserverui/e-source-selector-dialog.c:156 +#: ../libedataserverui/e-source-selector-dialog.c:172 msgid "_Destination" msgstr "目的(_D)" -#: ../servers/exchange/lib/e2k-autoconfig.c:1694 -#: ../servers/exchange/storage/exchange-account.c:954 -#, c-format -msgid "Enter password for %s" -msgstr "输入 %s 的密码" +#: ../servers/groupwise/e-gw-connection.c:227 +msgid "Invalid connection" +msgstr "无效连接" -#: ../servers/exchange/lib/e2k-autoconfig.c:1695 -#: ../servers/exchange/storage/exchange-account.c:959 -msgid "Enter password" -msgstr "输入密码" +#: ../servers/groupwise/e-gw-connection.c:231 +msgid "Invalid response from server" +msgstr "服务器的响应无效" -#. i18n: These are Outlook's words for the default roles in -#. the folder permissions dialog. -#: ../servers/exchange/lib/e2k-security-descriptor.c:844 -msgid "Owner" -msgstr "所有者" +#: ../servers/groupwise/e-gw-connection.c:233 +msgid "No response from the server" +msgstr "服务器的响应无效" -#: ../servers/exchange/lib/e2k-security-descriptor.c:854 -msgid "Publishing Editor" -msgstr "发布编辑器" +#: ../servers/groupwise/e-gw-connection.c:239 +msgid "Bad parameter" +msgstr "无效参数" -#: ../servers/exchange/lib/e2k-security-descriptor.c:862 -msgid "Editor" -msgstr "编辑器" +#~ msgid "%s: there was no self contact UID stored in gconf" +#~ msgstr "%s:gconf 中没有存储自身联系人的 UID" -#: ../servers/exchange/lib/e2k-security-descriptor.c:869 -msgid "Publishing Author" -msgstr "发布作者" +#~ msgid "This is a digitally signed message part" +#~ msgstr "这是信件的数字签名部分" -#: ../servers/exchange/lib/e2k-security-descriptor.c:875 -msgid "Author" -msgstr "作者" +#~ msgid "Kerberos 4" +#~ msgstr "Kerberos 4" -#: ../servers/exchange/lib/e2k-security-descriptor.c:880 -msgid "Non-editing Author" -msgstr "非编辑作者" +#~ msgid "" +#~ "This option will connect to the server using Kerberos 4 authentication." +#~ msgstr "该选项将用 Kerberos 4 认证连接到服务器。" -#: ../servers/exchange/lib/e2k-security-descriptor.c:884 -msgid "Reviewer" -msgstr "复查者" +#~ msgid "" +#~ "Could not get Kerberos ticket:\n" +#~ "%s" +#~ msgstr "" +#~ "无法获取 Kerberos 标签:\n" +#~ "%s" -#: ../servers/exchange/lib/e2k-security-descriptor.c:886 -msgid "Contributor" -msgstr "贡献者" +#~ msgid "Unable to get issuer's certificate" +#~ msgstr "无法获取发行者的证书" -#: ../servers/exchange/lib/e2k-security-descriptor.c:888 -msgid "None" -msgstr "无" +#~ msgid "Unable to get Certificate Revocation List" +#~ msgstr "无法获取证书吊销列表签名" -#: ../servers/exchange/lib/e2k-security-descriptor.c:903 -msgid "Custom" -msgstr "自定义" +#~ msgid "Unable to decrypt certificate signature" +#~ msgstr "无法解密认证签名" -#: ../servers/exchange/storage/e-storage.c:557 -msgid "Generic error" -msgstr "常规错误" +#~ msgid "Unable to decrypt Certificate Revocation List signature" +#~ msgstr "无法解密证书吊销列表签名" -#: ../servers/exchange/storage/e-storage.c:559 -msgid "A folder with the same name already exists" -msgstr "已经存在同名文件夹" +#~ msgid "Unable to decode issuer's public key" +#~ msgstr "无法对发行者的公钥进行解码" -#: ../servers/exchange/storage/e-storage.c:561 -msgid "The specified folder type is not valid" -msgstr "指定的文件类型无效" +#~ msgid "Certificate signature failure" +#~ msgstr "证书签名失败" -#: ../servers/exchange/storage/e-storage.c:563 -msgid "I/O error" -msgstr "I/O 错误" +#~ msgid "Certificate Revocation List signature failure" +#~ msgstr "证书吊销列表签名失败" -#: ../servers/exchange/storage/e-storage.c:565 -msgid "Not enough space to create the folder" -msgstr "没有足够的空间创建文件夹" +#~ msgid "Certificate not yet valid" +#~ msgstr "证书未生效" -#: ../servers/exchange/storage/e-storage.c:567 -msgid "The folder is not empty" -msgstr "文件夹为空" +#~ msgid "Certificate has expired" +#~ msgstr "证书已过期" -#: ../servers/exchange/storage/e-storage.c:569 -msgid "The specified folder was not found" -msgstr "指定的文件未找到" +#, fuzzy +#~ msgid "Certificate Revocation List (CRL) not yet valid" +#~ msgstr "证书吊销列表签名失败" -#: ../servers/exchange/storage/e-storage.c:571 -msgid "Function not implemented in this storage" -msgstr "功能未在此存储中实现" +#, fuzzy +#~ msgid "Certificate Revocation List (CRL) has expired" +#~ msgstr "证书吊销列表签名失败" -#: ../servers/exchange/storage/e-storage.c:575 -msgid "Operation not supported" -msgstr "操作不支持" +#, fuzzy +#~ msgid "Error in Certificate Revocation List (CRL)" +#~ msgstr "无法获取证书吊销列表签名" -#: ../servers/exchange/storage/e-storage.c:577 -msgid "The specified type is not supported in this storage" -msgstr "此存储不支持指定类型" +#~ msgid "Out of memory" +#~ msgstr "内存耗尽" -#: ../servers/exchange/storage/e-storage.c:579 -msgid "The specified folder cannot be modified or removed" -msgstr "无法修改或删除指定的文件夹" +#~ msgid "Zero-depth self-signed certificate" +#~ msgstr "零深度自签名证书" -#: ../servers/exchange/storage/e-storage.c:581 -msgid "Cannot make a folder a child of one of its descendants" -msgstr "无法将文件夹变成其子文件夹的子文件夹" +#~ msgid "Self-signed certificate in chain" +#~ msgstr "链中的自签名证书" -#: ../servers/exchange/storage/e-storage.c:583 -msgid "Cannot create a folder with that name" -msgstr "无法以此名称创建文件夹" +#~ msgid "Unable to get issuer's certificate locally" +#~ msgstr "无法在本地获取发行者的证书" -#: ../servers/exchange/storage/e-storage.c:585 -msgid "This operation cannot be performed in off-line mode" -msgstr "该信件无法在脱机模式中使用" +#~ msgid "Unable to verify leaf signature" +#~ msgstr "无法校验叶子签名" -#. i18n: This is the title of an "other user's folders" -#. hierarchy. Eg, "John Doe's Folders". -#: ../servers/exchange/storage/exchange-account.c:639 -#, c-format -msgid "%s's Folders" -msgstr "%s 的文件夹" +#~ msgid "Certificate chain too long" +#~ msgstr "证书链过长" -#: ../servers/exchange/storage/exchange-account.c:1259 -msgid "Personal Folders" -msgstr "个人文件夹" +#~ msgid "Certificate Revoked" +#~ msgstr "证书已撤销" -#: ../servers/exchange/storage/exchange-account.c:1274 -msgid "Favorite Public Folders" -msgstr "收藏的公开文件夹" +#~ msgid "Invalid Certificate Authority (CA)" +#~ msgstr "无效的证书颁发机构(CA)" -#. i18n: Outlookism -#: ../servers/exchange/storage/exchange-account.c:1291 -msgid "All Public Folders" -msgstr "全部公开文件夹" +#~ msgid "Path length exceeded" +#~ msgstr "超长的路径长度" -#. i18n: Outlookism -#: ../servers/exchange/storage/exchange-account.c:1305 -msgid "Global Address List" -msgstr "全局地址列表" +#~ msgid "Invalid purpose" +#~ msgstr "无效目的" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:262 -msgid "Deleted Items" -msgstr "已删项" +#~ msgid "Certificate untrusted" +#~ msgstr "不信任的证书" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:263 -msgid "Drafts" -msgstr "草稿" +#~ msgid "Certificate rejected" +#~ msgstr "已拒绝的证书" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:265 -msgid "Journal" -msgstr "日记" +#~ msgid "Subject/Issuer mismatch" +#~ msgstr "主题/发行者不匹配" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:266 -msgid "Notes" -msgstr "备忘" +#~ msgid "AKID/SKID mismatch" +#~ msgstr "AKID/SKID 不匹配" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:267 -msgid "Outbox" -msgstr "发件箱" +#~ msgid "AKID/Issuer serial mismatch" +#~ msgstr "AKID/发行者序列号不匹配" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:268 -msgid "Sent Items" -msgstr "已发项" +#~ msgid "Key usage does not support certificate signing" +#~ msgstr "密钥不支持证书签名" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:269 -msgid "Tasks" -msgstr "任务" +#~ msgid "Error in application verification" +#~ msgstr "应用程序验证错误" -#: ../servers/groupwise/e-gw-connection.c:225 -msgid "Invalid connection" -msgstr "无效连接" +#~ msgid "" +#~ "Bad certificate from %s:\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "Do you wish to accept anyway?" +#~ msgstr "" +#~ "来自 %s 的错误证书:\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "您仍然希望接受吗?" -#: ../servers/groupwise/e-gw-connection.c:229 -msgid "Invalid response from server" -msgstr "服务器的响应无效" +#~ msgid "" +#~ "Experimental IMAP 4(.1) client\n" +#~ "This is untested and unsupported code, you want to use plain imap " +#~ "instead.\n" +#~ "\n" +#~ " !!! DO NOT USE THIS FOR PRODUCTION EMAIL !!!\n" +#~ msgstr "" +#~ "试验性 IMAP 4(.1) 客户端\n" +#~ "此功能是未测试的代码,不被支持,您应该换用纯 IMAP。\n" +#~ "\n" +#~ " !!! 不要对重要邮件使用此功能 !!!\n" -#: ../servers/groupwise/e-gw-connection.c:231 -msgid "No response from the server" -msgstr "服务器的响应无效" +#~ msgid "Could not connect to POP server on %s" +#~ msgstr "无法连接到 %s 上的 POP 服务器" -#: ../servers/groupwise/e-gw-connection.c:237 -msgid "Bad parameter" -msgstr "无效参数" +#~ msgid "Enter password for %s" +#~ msgstr "输入 %s 的密码" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:1 -msgid "Evolution Addressbook file backend" -msgstr "Evolution 地址簿文件后端" +#~ msgid "Enter password" +#~ msgstr "输入密码" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:2 -msgid "Evolution Calendar file and webcal backend" -msgstr "Evolution 日历文件和 Webcal 后端" +#~ msgid "Owner" +#~ msgstr "所有者" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:3 -msgid "Evolution Data Server interface check service" -msgstr "Evolution 数据服务器接口检查服务" +#~ msgid "Publishing Editor" +#~ msgstr "发布编辑器" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:4 -msgid "Evolution Data Server logging service" -msgstr "Evolution 数据服务器日志服务" +#~ msgid "Editor" +#~ msgstr "编辑器" + +#~ msgid "Publishing Author" +#~ msgstr "发布作者" + +#~ msgid "Author" +#~ msgstr "作者" + +#~ msgid "Non-editing Author" +#~ msgstr "非编辑作者" + +#~ msgid "Reviewer" +#~ msgstr "复查者" + +#~ msgid "Contributor" +#~ msgstr "贡献者" + +#~ msgid "None" +#~ msgstr "无" + +#~ msgid "Custom" +#~ msgstr "自定义" + +#~ msgid "Generic error" +#~ msgstr "常规错误" + +#~ msgid "A folder with the same name already exists" +#~ msgstr "已经存在同名文件夹" + +#~ msgid "The specified folder type is not valid" +#~ msgstr "指定的文件类型无效" + +#~ msgid "I/O error" +#~ msgstr "I/O 错误" + +#~ msgid "Not enough space to create the folder" +#~ msgstr "没有足够的空间创建文件夹" + +#~ msgid "The folder is not empty" +#~ msgstr "文件夹为空" + +#~ msgid "The specified folder was not found" +#~ msgstr "指定的文件未找到" + +#~ msgid "Function not implemented in this storage" +#~ msgstr "功能未在此存储中实现" + +#~ msgid "Operation not supported" +#~ msgstr "操作不支持" + +#~ msgid "The specified type is not supported in this storage" +#~ msgstr "此存储不支持指定类型" + +#~ msgid "The specified folder cannot be modified or removed" +#~ msgstr "无法修改或删除指定的文件夹" + +#~ msgid "Cannot make a folder a child of one of its descendants" +#~ msgstr "无法将文件夹变成其子文件夹的子文件夹" + +#~ msgid "Cannot create a folder with that name" +#~ msgstr "无法以此名称创建文件夹" + +#~ msgid "This operation cannot be performed in off-line mode" +#~ msgstr "该信件无法在脱机模式中使用" + +#~ msgid "%s's Folders" +#~ msgstr "%s 的文件夹" + +#~ msgid "Personal Folders" +#~ msgstr "个人文件夹" + +#~ msgid "Favorite Public Folders" +#~ msgstr "收藏的公开文件夹" + +#~ msgid "All Public Folders" +#~ msgstr "全部公开文件夹" + +#~ msgid "Global Address List" +#~ msgstr "全局地址列表" + +#~ msgid "Deleted Items" +#~ msgstr "已删项" + +#~ msgid "Drafts" +#~ msgstr "草稿" + +#~ msgid "Journal" +#~ msgstr "日记" + +#~ msgid "Notes" +#~ msgstr "备忘" + +#~ msgid "Outbox" +#~ msgstr "发件箱" + +#~ msgid "Sent Items" +#~ msgstr "已发项" + +#~ msgid "Tasks" +#~ msgstr "任务" + +#~ msgid "Evolution Addressbook file backend" +#~ msgstr "Evolution 地址簿文件后端" + +#~ msgid "Evolution Calendar file and webcal backend" +#~ msgstr "Evolution 日历文件和 Webcal 后端" + +#~ msgid "Evolution Data Server interface check service" +#~ msgstr "Evolution 数据服务器接口检查服务" + +#~ msgid "Evolution Data Server logging service" +#~ msgstr "Evolution 数据服务器日志服务" #~ msgid "\"%s\" on book before \"%s\"" #~ msgstr "“%2$s”前的“%1$s”" @@ -5179,9 +5353,6 @@ msgstr "Evolution 数据服务器日志服务" #~ msgid "%s: canceled" #~ msgstr "%s:已取消" -#~ msgid "%s: Invalid source." -#~ msgstr "%s:无效来源。" - #~ msgid "%s: no factories available for URI `%s'" #~ msgstr "%s:对于 URI“%s”没有可用的工厂" |