diff options
43 files changed, 1840 insertions, 876 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dcfd9ed..3091d7b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,10 +18,10 @@ include(CheckCSourceRuns) include(CMakeMacroLibtoolFile) project(tigervnc) -set(VERSION 1.3.80) +set(VERSION 1.4.80) # The RC version must always be four comma-separated numbers -set(RCVERSION 1,3,80,0) +set(RCVERSION 1,4,80,0) # Installation paths set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin") @@ -321,6 +321,12 @@ else() set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h) endif() check_function_exists(inet_aton HAVE_INET_ATON) +# This might give a false positive on Windows as it is also guarded by +# a version check that we do not satisfy (requires Vista, but we target +# Windows 2000). +if(NOT WIN32) +check_function_exists(inet_pton HAVE_INET_PTON) +endif() check_function_exists(getaddrinfo HAVE_GETADDRINFO) set(CMAKE_EXTRA_INCLUDE_FILES) set(CMAKE_REQUIRED_LIBRARIES) diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx index d9e9376a..f2d76bfa 100644 --- a/common/network/TcpSocket.cxx +++ b/common/network/TcpSocket.cxx @@ -239,27 +239,66 @@ int TcpSocket::getMyPort() { } char* TcpSocket::getPeerAddress() { - struct sockaddr_in info; - struct in_addr addr; - socklen_t info_size = sizeof(info); + vnc_sockaddr_t sa; + socklen_t sa_size = sizeof(sa); + + if (getpeername(getFd(), &sa.u.sa, &sa_size) != 0) { + vlog.error("unable to get peer name for socket"); + return rfb::strDup(""); + } + +#if defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON) + if (sa.u.sa.sa_family == AF_INET6) { + char buffer[INET6_ADDRSTRLEN + 2]; + const char *name; + + buffer[0] = '['; + + name = inet_ntop(sa.u.sa.sa_family, &sa.u.sin6.sin6_addr, + buffer + 1, sizeof(buffer) - 2); + if (name == NULL) { + vlog.error("unable to convert peer name to a string"); + return rfb::strDup(""); + } - getpeername(getFd(), (struct sockaddr *)&info, &info_size); - memcpy(&addr, &info.sin_addr, sizeof(addr)); + strcat(buffer, "]"); + + return rfb::strDup(buffer); + } +#endif + + if (sa.u.sa.sa_family == AF_INET) { + char *name; + + name = inet_ntoa(sa.u.sin.sin_addr); + if (name == NULL) { + vlog.error("unable to convert peer name to a string"); + return rfb::strDup(""); + } - char* name = inet_ntoa(addr); - if (name) { return rfb::strDup(name); - } else { - return rfb::strDup(""); } + + vlog.error("unknown address family for socket"); + return rfb::strDup(""); } int TcpSocket::getPeerPort() { - struct sockaddr_in info; - socklen_t info_size = sizeof(info); + vnc_sockaddr_t sa; + socklen_t sa_size = sizeof(sa); + + getpeername(getFd(), &sa.u.sa, &sa_size); - getpeername(getFd(), (struct sockaddr *)&info, &info_size); - return ntohs(info.sin_port); + switch (sa.u.sa.sa_family) { +#ifdef HAVE_GETADDRINFO + case AF_INET6: + return ntohs(sa.u.sin6.sin6_port); +#endif /* HAVE_GETADDRINFO */ + case AF_INET: + return ntohs(sa.u.sin.sin_port); + default: + return 0; + } } char* TcpSocket::getPeerEndpoint() { @@ -293,7 +332,11 @@ bool TcpSocket::sameMachine() { &myaddr.u.sin6.sin6_addr); #endif - return (peeraddr.u.sin.sin_addr.s_addr == myaddr.u.sin.sin_addr.s_addr); + if (peeraddr.u.sa.sa_family == AF_INET) + return (peeraddr.u.sin.sin_addr.s_addr == myaddr.u.sin.sin_addr.s_addr); + + // No idea what this is. Assume we're on different machines. + return false; } void TcpSocket::shutdown() @@ -326,27 +369,126 @@ bool TcpSocket::cork(int sock, bool enable) { bool TcpSocket::isSocket(int sock) { - struct sockaddr_in info; - socklen_t info_size = sizeof(info); - return getsockname(sock, (struct sockaddr *)&info, &info_size) >= 0; + vnc_sockaddr_t sa; + socklen_t sa_size = sizeof(sa); + return getsockname(sock, &sa.u.sa, &sa_size) >= 0; } bool TcpSocket::isConnected(int sock) { - struct sockaddr_in info; - socklen_t info_size = sizeof(info); - return getpeername(sock, (struct sockaddr *)&info, &info_size) >= 0; + vnc_sockaddr_t sa; + socklen_t sa_size = sizeof(sa); + return getpeername(sock, &sa.u.sa, &sa_size) >= 0; } int TcpSocket::getSockPort(int sock) { - struct sockaddr_in info; - socklen_t info_size = sizeof(info); - if (getsockname(sock, (struct sockaddr *)&info, &info_size) < 0) + vnc_sockaddr_t sa; + socklen_t sa_size = sizeof(sa); + if (getsockname(sock, &sa.u.sa, &sa_size) < 0) return 0; - return ntohs(info.sin_port); + + switch (sa.u.sa.sa_family) { +#ifdef HAVE_GETADDRINFO + case AF_INET6: + return ntohs(sa.u.sin6.sin6_port); +#endif /* HAVE_GETADDRINFO */ + + default: + return ntohs(sa.u.sin.sin_port); + } } +static int bindIPv6 (const char *listenaddr, + int port, + bool localhostOnly) +{ +#ifdef HAVE_GETADDRINFO + struct sockaddr_in6 addr6; + socklen_t sa_len; + int fd; + + if ((fd = socket(AF_INET6, SOCK_STREAM, 0)) < 0) + return -1; + +#ifdef IPV6_V6ONLY + // - We made an IPv6-capable socket, and we need it to do IPv4 too + int opt = 0; + setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&opt, sizeof(opt)); +#else + vlog.error("IPV6_V6ONLY support is missing. " + "IPv4 clients may not be able to connect."); +#endif + + memset(&addr6, 0, (sa_len = sizeof(addr6))); + addr6.sin6_family = AF_INET6; + addr6.sin6_port = htons(port); + + if (localhostOnly) + addr6.sin6_addr = in6addr_loopback; + else if (listenaddr != NULL) { +#ifdef HAVE_INET_PTON + if (inet_pton(AF_INET6, listenaddr, &addr6.sin6_addr) != 1) { + closesocket(fd); + return -1; + } +#else + // Unable to parse without inet_pton + closesocket(fd); + return -1; +#endif + } + + if (bind(fd, (struct sockaddr *) &addr6, sa_len) == -1) { + closesocket(fd); + return -1; + } + + return fd; +#else + return -1; +#endif /* HAVE_GETADDRINFO */ +} + +static int bindIPv4 (const char *listenaddr, + int port, + bool localhostOnly) +{ + struct sockaddr_in addr; + socklen_t sa_len; + int fd; + + if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + return -1; + + memset(&addr, 0, (sa_len = sizeof(addr))); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + + if (localhostOnly) + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + else if (listenaddr != NULL) { +#ifdef HAVE_INET_ATON + if (inet_aton(listenaddr, &addr.sin_addr) == 0) +#else + /* Some systems (e.g. Windows) do not have inet_aton, sigh */ + if ((addr.sin_addr.s_addr = inet_addr(listenaddr)) == INADDR_NONE) +#endif + { + closesocket(fd); + throw Exception("invalid network interface address: %s", listenaddr); + } + } else + /* Bind to 0.0.0.0 by default. */ + addr.sin_addr.s_addr = htonl(INADDR_ANY); + + if (bind(fd, (struct sockaddr *) &addr, sa_len) == -1) { + closesocket(fd); + return -1; + } + + return fd; +} TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly, int sock, bool close_) : closeFd(close_) @@ -357,8 +499,9 @@ TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly, } initSockets(); - if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) - throw SocketException("unable to create listening socket", errorNumber); + if ((fd = bindIPv6 (listenaddr, port, localhostOnly)) < 0) + if ((fd = bindIPv4 (listenaddr, port, localhostOnly)) < 0) + throw SocketException("unable to create listening socket", errorNumber); #ifndef WIN32 // - By default, close the socket on exec() @@ -373,34 +516,6 @@ TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly, } #endif - // - Bind it to the desired port - struct sockaddr_in addr; - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - - if (localhostOnly) { - addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - } else if (listenaddr != NULL) { -#ifdef HAVE_INET_ATON - if (inet_aton(listenaddr, &addr.sin_addr) == 0) -#else - /* Some systems (e.g. Windows) do not have inet_aton, sigh */ - if ((addr.sin_addr.s_addr = inet_addr(listenaddr)) == INADDR_NONE) -#endif - { - closesocket(fd); - throw Exception("invalid network interface address: %s", listenaddr); - } - } else - addr.sin_addr.s_addr = htonl(INADDR_ANY); /* Bind to 0.0.0.0 by default. */ - - addr.sin_port = htons(port); - if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - int e = errorNumber; - closesocket(fd); - throw SocketException("unable to bind listening socket", e); - } - // - Set it to be a listening socket if (listen(fd, 5) < 0) { int e = errorNumber; @@ -449,6 +564,30 @@ TcpListener::accept() { } void TcpListener::getMyAddresses(std::list<char*>* result) { +#if defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON) + vnc_sockaddr_t sa; + struct addrinfo *ai, *current, hints; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_canonname = NULL; + hints.ai_addr = NULL; + hints.ai_next = NULL; + + if ((getaddrinfo(NULL, NULL, &hints, &ai)) != 0) + return; + + for (current= ai; current != NULL; current = current->ai_next) { + if (current->ai_family != AF_INET && current->ai_family != AF_INET6) + continue; + + char *addr = new char[INET6_ADDRSTRLEN]; + inet_ntop(current->ai_family, current->ai_addr, addr, INET6_ADDRSTRLEN); + result->push_back(addr); + } + freeaddrinfo(ai); +#else const hostent* addrs = gethostbyname(0); if (addrs == 0) throw rdr::SystemException("gethostbyname", errorNumber); @@ -460,6 +599,7 @@ void TcpListener::getMyAddresses(std::list<char*>* result) { strcpy(addr, addrC); result->push_back(addr); } +#endif /* defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON) */ } int TcpListener::getMyPort() { @@ -493,6 +633,15 @@ bool TcpFilter::verifyConnection(Socket* s) { rfb::CharArray name; +#ifdef HAVE_GETADDRINFO + vnc_sockaddr_t sa; + socklen_t sa_size = sizeof(sa); + if (getpeername(s->getFd(), &sa.u.sa, &sa_size) != 0 || + sa.u.sa.sa_family != AF_INET) + /* Matching only works for IPv4 */ + return false; +#endif /* HAVE_GETADDRINFO */ + name.buf = s->getPeerAddress(); std::list<TcpFilter::Pattern>::iterator i; for (i=filter.begin(); i!=filter.end(); i++) { diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx index 1695c3a6..e0a23b5a 100644 --- a/common/rfb/CConnection.cxx +++ b/common/rfb/CConnection.cxx @@ -181,7 +181,7 @@ void CConnection::processSecurityTypesMsg() if (secType != secTypeInvalid) { os->writeU8(secType); os->flush(); - vlog.debug("Choosing security type %s(%d)",secTypeName(secType),secType); + vlog.info("Choosing security type %s(%d)",secTypeName(secType),secType); } } diff --git a/common/rfb/CSecurityVeNCrypt.cxx b/common/rfb/CSecurityVeNCrypt.cxx index 77eeef9a..a15da4a6 100644 --- a/common/rfb/CSecurityVeNCrypt.cxx +++ b/common/rfb/CSecurityVeNCrypt.cxx @@ -164,7 +164,7 @@ bool CSecurityVeNCrypt::processMsg(CConnection* cc) break; } - vlog.debug("Choosing security type %s (%d)", secTypeName(chosenType), + vlog.info("Choosing security type %s (%d)", secTypeName(chosenType), chosenType); /* Set up the stack according to the chosen type: */ diff --git a/common/rfb/SConnection.cxx b/common/rfb/SConnection.cxx index eeaeafe4..99a4850c 100644 --- a/common/rfb/SConnection.cxx +++ b/common/rfb/SConnection.cxx @@ -28,6 +28,7 @@ #include <rfb/ServerCore.h> #include <rfb/encodings.h> #include <rfb/EncodeManager.h> +#include <rfb/SSecurity.h> #include <rfb/LogWriter.h> @@ -36,13 +37,15 @@ using namespace rfb; static LogWriter vlog("SConnection"); // AccessRights values -const SConnection::AccessRights SConnection::AccessView = 0x0001; -const SConnection::AccessRights SConnection::AccessKeyEvents = 0x0002; -const SConnection::AccessRights SConnection::AccessPtrEvents = 0x0004; -const SConnection::AccessRights SConnection::AccessCutText = 0x0008; -const SConnection::AccessRights SConnection::AccessDefault = 0x03ff; -const SConnection::AccessRights SConnection::AccessNoQuery = 0x0400; -const SConnection::AccessRights SConnection::AccessFull = 0xffff; +const SConnection::AccessRights SConnection::AccessView = 0x0001; +const SConnection::AccessRights SConnection::AccessKeyEvents = 0x0002; +const SConnection::AccessRights SConnection::AccessPtrEvents = 0x0004; +const SConnection::AccessRights SConnection::AccessCutText = 0x0008; +const SConnection::AccessRights SConnection::AccessSetDesktopSize = 0x0010; +const SConnection::AccessRights SConnection::AccessNonShared = 0x0020; +const SConnection::AccessRights SConnection::AccessDefault = 0x03ff; +const SConnection::AccessRights SConnection::AccessNoQuery = 0x0400; +const SConnection::AccessRights SConnection::AccessFull = 0xffff; SConnection::SConnection(bool reverseConnection_) @@ -223,6 +226,7 @@ void SConnection::processSecurityMsg() if (done) { state_ = RFBSTATE_QUERYING; queryConnection(ssecurity->getUserName()); + setAccessRights(ssecurity->getAccessRights()); } } catch (AuthFailureException& e) { vlog.error("AuthFailureException: %s", e.str()); diff --git a/common/rfb/SConnection.h b/common/rfb/SConnection.h index 7718f4c1..005a7a85 100644 --- a/common/rfb/SConnection.h +++ b/common/rfb/SConnection.h @@ -28,7 +28,6 @@ #include <rdr/OutStream.h> #include <rfb/SMsgHandler.h> #include <rfb/SecurityServer.h> -#include <rfb/SSecurity.h> namespace rfb { @@ -123,13 +122,15 @@ namespace rfb { // is up to the derived class. typedef rdr::U16 AccessRights; - static const AccessRights AccessView; // View display contents - static const AccessRights AccessKeyEvents; // Send key events - static const AccessRights AccessPtrEvents; // Send pointer events - static const AccessRights AccessCutText; // Send/receive clipboard events - static const AccessRights AccessDefault; // The default rights, INCLUDING FUTURE ONES - static const AccessRights AccessNoQuery; // Connect without local user accepting - static const AccessRights AccessFull; // All of the available AND FUTURE rights + static const AccessRights AccessView; // View display contents + static const AccessRights AccessKeyEvents; // Send key events + static const AccessRights AccessPtrEvents; // Send pointer events + static const AccessRights AccessCutText; // Send/receive clipboard events + static const AccessRights AccessSetDesktopSize; // Change desktop size + static const AccessRights AccessNonShared; // Exclusive access to the server + static const AccessRights AccessDefault; // The default rights, INCLUDING FUTURE ONES + static const AccessRights AccessNoQuery; // Connect without local user accepting + static const AccessRights AccessFull; // All of the available AND FUTURE rights virtual void setAccessRights(AccessRights ar) = 0; // Other methods diff --git a/common/rfb/SSecurity.h b/common/rfb/SSecurity.h index afc744e4..6da63c3c 100644 --- a/common/rfb/SSecurity.h +++ b/common/rfb/SSecurity.h @@ -44,13 +44,12 @@ #define __RFB_SSECURITY_H__ #include <rdr/types.h> +#include <rfb/SConnection.h> #include <rfb/util.h> #include <list> namespace rfb { - class SConnection; - class SSecurity { public: virtual ~SSecurity() {} @@ -63,6 +62,8 @@ namespace rfb { // necessary. Null may be returned to indicate that there is no user name // for this security type. virtual const char* getUserName() const = 0; + + virtual SConnection::AccessRights getAccessRights() const { return SConnection::AccessDefault; } }; } diff --git a/common/rfb/SSecurityStack.cxx b/common/rfb/SSecurityStack.cxx index 9ddc9f2f..478ce4f6 100644 --- a/common/rfb/SSecurityStack.cxx +++ b/common/rfb/SSecurityStack.cxx @@ -65,3 +65,20 @@ const char* SSecurityStack::getUserName() const return c; } + +SConnection::AccessRights SSecurityStack::getAccessRights() const +{ + SConnection::AccessRights accessRights; + + if (!state0 && !state1) + return SSecurity::getAccessRights(); + + accessRights = SConnection::AccessFull; + + if (state0) + accessRights &= state0->getAccessRights(); + if (state1) + accessRights &= state1->getAccessRights(); + + return accessRights; +} diff --git a/common/rfb/SSecurityStack.h b/common/rfb/SSecurityStack.h index c80a3b9f..dd743d28 100644 --- a/common/rfb/SSecurityStack.h +++ b/common/rfb/SSecurityStack.h @@ -31,6 +31,7 @@ namespace rfb { virtual bool processMsg(SConnection* cc); virtual int getType() const { return type; }; virtual const char* getUserName() const; + virtual SConnection::AccessRights getAccessRights() const; protected: short state; SSecurity* state0; diff --git a/common/rfb/SSecurityVeNCrypt.cxx b/common/rfb/SSecurityVeNCrypt.cxx index 9e4260f4..7c137498 100644 --- a/common/rfb/SSecurityVeNCrypt.cxx +++ b/common/rfb/SSecurityVeNCrypt.cxx @@ -157,7 +157,7 @@ bool SSecurityVeNCrypt::processMsg(SConnection* sc) if (!haveChosenType) chosenType = secTypeInvalid; - vlog.debug("Choosing security type %s (%d)", secTypeName(chosenType), + vlog.info("Client requests security type %s (%d)", secTypeName(chosenType), chosenType); /* Set up the stack according to the chosen type */ @@ -171,3 +171,16 @@ bool SSecurityVeNCrypt::processMsg(SConnection* sc) return ssecurity->processMsg(sc); } +const char* SSecurityVeNCrypt::getUserName() const +{ + if (ssecurity == NULL) + return NULL; + return ssecurity->getUserName(); +} + +SConnection::AccessRights SSecurityVeNCrypt::getAccessRights() const +{ + if (ssecurity == NULL) + return SSecurity::getAccessRights(); + return ssecurity->getAccessRights(); +} diff --git a/common/rfb/SSecurityVeNCrypt.h b/common/rfb/SSecurityVeNCrypt.h index 849a702f..f9c753f0 100644 --- a/common/rfb/SSecurityVeNCrypt.h +++ b/common/rfb/SSecurityVeNCrypt.h @@ -39,8 +39,9 @@ namespace rfb { SSecurityVeNCrypt(SecurityServer *sec); ~SSecurityVeNCrypt(); virtual bool processMsg(SConnection* sc);// { return true; } - virtual int getType() const { return secTypeVeNCrypt; } - virtual const char* getUserName() const { return NULL; } + virtual int getType() const { return chosenType; } + virtual const char* getUserName() const; + virtual SConnection::AccessRights getAccessRights() const; protected: SSecurity *ssecurity; diff --git a/common/rfb/SSecurityVncAuth.cxx b/common/rfb/SSecurityVncAuth.cxx index ca81bf33..05488f67 100644 --- a/common/rfb/SSecurityVncAuth.cxx +++ b/common/rfb/SSecurityVncAuth.cxx @@ -49,10 +49,27 @@ VncAuthPasswdParameter SSecurityVncAuth::vncAuthPasswd "access the server", &SSecurityVncAuth::vncAuthPasswdFile); SSecurityVncAuth::SSecurityVncAuth(void) - : sentChallenge(false), responsePos(0), pg(&vncAuthPasswd) + : sentChallenge(false), responsePos(0), pg(&vncAuthPasswd), accessRights(0) { } +bool SSecurityVncAuth::verifyResponse(const PlainPasswd &password) +{ + rdr::U8 expectedResponse[vncAuthChallengeSize]; + + // Calculate the expected response + rdr::U8 key[8]; + int pwdLen = strlen(password.buf); + for (int i=0; i<8; i++) + key[i] = i<pwdLen ? password.buf[i] : 0; + deskey(key, EN0); + for (int j = 0; j < vncAuthChallengeSize; j += 8) + des(challenge+j, expectedResponse+j); + + // Check the actual response + return memcmp(response, expectedResponse, vncAuthChallengeSize) == 0; +} + bool SSecurityVncAuth::processMsg(SConnection* sc) { rdr::InStream* is = sc->getInStream(); @@ -72,25 +89,23 @@ bool SSecurityVncAuth::processMsg(SConnection* sc) if (responsePos < vncAuthChallengeSize) return false; - PlainPasswd passwd(pg->getVncAuthPasswd()); + PlainPasswd passwd, passwdReadOnly; + pg->getVncAuthPasswd(&passwd, &passwdReadOnly); if (!passwd.buf) throw AuthFailureException("No password configured for VNC Auth"); - // Calculate the expected response - rdr::U8 key[8]; - int pwdLen = strlen(passwd.buf); - for (int i=0; i<8; i++) - key[i] = i<pwdLen ? passwd.buf[i] : 0; - deskey(key, EN0); - for (int j = 0; j < vncAuthChallengeSize; j += 8) - des(challenge+j, challenge+j); + if (verifyResponse(passwd)) { + accessRights = SConnection::AccessDefault; + return true; + } - // Check the actual response - if (memcmp(challenge, response, vncAuthChallengeSize) != 0) - throw AuthFailureException(); + if (passwdReadOnly.buf && verifyResponse(passwdReadOnly)) { + accessRights = SConnection::AccessView; + return true; + } - return true; + throw AuthFailureException(); } VncAuthPasswdParameter::VncAuthPasswdParameter(const char* name, @@ -99,8 +114,8 @@ VncAuthPasswdParameter::VncAuthPasswdParameter(const char* name, : BinaryParameter(name, desc, 0, 0, ConfServer), passwdFile(passwdFile_) { } -char* VncAuthPasswdParameter::getVncAuthPasswd() { - ObfuscatedPasswd obfuscated; +void VncAuthPasswdParameter::getVncAuthPasswd(PlainPasswd *password, PlainPasswd *readOnlyPassword) { + ObfuscatedPasswd obfuscated, obfuscatedReadOnly; getData((void**)&obfuscated.buf, &obfuscated.length); if (obfuscated.length == 0) { @@ -108,18 +123,20 @@ char* VncAuthPasswdParameter::getVncAuthPasswd() { CharArray fname(passwdFile->getData()); if (!fname.buf[0]) { vlog.info("neither %s nor %s params set", getName(), passwdFile->getName()); - return 0; + return; } FILE* fp = fopen(fname.buf, "r"); if (!fp) { vlog.error("opening password file '%s' failed",fname.buf); - return 0; + return; } vlog.debug("reading password file"); - obfuscated.buf = new char[128]; - obfuscated.length = fread(obfuscated.buf, 1, 128, fp); + obfuscated.buf = new char[8]; + obfuscated.length = fread(obfuscated.buf, 1, 8, fp); + obfuscatedReadOnly.buf = new char[8]; + obfuscatedReadOnly.length = fread(obfuscatedReadOnly.buf, 1, 8, fp); fclose(fp); } else { vlog.info("%s parameter not set", getName()); @@ -127,10 +144,11 @@ char* VncAuthPasswdParameter::getVncAuthPasswd() { } try { - PlainPasswd password(obfuscated); - return password.takeBuf(); + PlainPasswd plainPassword(obfuscated); + password->replaceBuf(plainPassword.takeBuf()); + PlainPasswd plainPasswordReadOnly(obfuscatedReadOnly); + readOnlyPassword->replaceBuf(plainPasswordReadOnly.takeBuf()); } catch (...) { - return 0; } } diff --git a/common/rfb/SSecurityVncAuth.h b/common/rfb/SSecurityVncAuth.h index 8a2d0f62..e9f379ba 100644 --- a/common/rfb/SSecurityVncAuth.h +++ b/common/rfb/SSecurityVncAuth.h @@ -25,6 +25,7 @@ #define __RFB_SSECURITYVNCAUTH_H__ #include <rfb/Configuration.h> +#include <rfb/Password.h> #include <rfb/SSecurity.h> #include <rfb/Security.h> #include <rdr/types.h> @@ -33,15 +34,15 @@ namespace rfb { class VncAuthPasswdGetter { public: - // getPasswd() returns a string or null if unsuccessful. The - // SSecurityVncAuth object delete[]s the string when done. - virtual char* getVncAuthPasswd()=0; + // getVncAuthPasswd() fills buffer of given password and readOnlyPassword. + // If there was no read only password in the file, readOnlyPassword buffer is null. + virtual void getVncAuthPasswd(PlainPasswd *password, PlainPasswd *readOnlyPassword)=0; }; class VncAuthPasswdParameter : public VncAuthPasswdGetter, BinaryParameter { public: VncAuthPasswdParameter(const char* name, const char* desc, StringParameter* passwdFile_); - virtual char* getVncAuthPasswd(); + virtual void getVncAuthPasswd(PlainPasswd *password, PlainPasswd *readOnlyPassword); protected: StringParameter* passwdFile; }; @@ -52,15 +53,18 @@ namespace rfb { virtual bool processMsg(SConnection* sc); virtual int getType() const {return secTypeVncAuth;} virtual const char* getUserName() const {return 0;} + virtual SConnection::AccessRights getAccessRights() const { return accessRights; } static StringParameter vncAuthPasswdFile; static VncAuthPasswdParameter vncAuthPasswd; private: + bool verifyResponse(const PlainPasswd &password); enum {vncAuthChallengeSize = 16}; rdr::U8 challenge[vncAuthChallengeSize]; rdr::U8 response[vncAuthChallengeSize]; bool sentChallenge; int responsePos; VncAuthPasswdGetter* pg; + SConnection::AccessRights accessRights; }; } #endif diff --git a/common/rfb/Security.h b/common/rfb/Security.h index 196eb429..85bc325a 100644 --- a/common/rfb/Security.h +++ b/common/rfb/Security.h @@ -25,7 +25,6 @@ #include <rdr/types.h> #include <rfb/Configuration.h> #include <rfb/CSecurity.h> -#include <rfb/SSecurity.h> #include <list> diff --git a/common/rfb/SecurityServer.cxx b/common/rfb/SecurityServer.cxx index 5bd7b2c9..e0aee137 100644 --- a/common/rfb/SecurityServer.cxx +++ b/common/rfb/SecurityServer.cxx @@ -43,7 +43,7 @@ StringParameter SecurityServer::secTypes #endif ")", #ifdef HAVE_GNUTLS - "VncAuth,TLSVnc", + "TLSVnc,VncAuth", #else "VncAuth", #endif diff --git a/common/rfb/SecurityServer.h b/common/rfb/SecurityServer.h index 0986619a..019d67fc 100644 --- a/common/rfb/SecurityServer.h +++ b/common/rfb/SecurityServer.h @@ -22,9 +22,10 @@ #include <rfb/Configuration.h> #include <rfb/Security.h> -#include <rfb/SSecurity.h> namespace rfb { + + class SSecurity; class SecurityServer : public Security { public: diff --git a/common/rfb/ServerCore.cxx b/common/rfb/ServerCore.cxx index ae2fd247..b11a352a 100644 --- a/common/rfb/ServerCore.cxx +++ b/common/rfb/ServerCore.cxx @@ -89,6 +89,10 @@ rfb::BoolParameter rfb::Server::sendCutText ("SendCutText", "Send clipboard changes to clients.", true); +rfb::BoolParameter rfb::Server::acceptSetDesktopSize +("AcceptSetDesktopSize", + "Accept set desktop size events from clients.", + true); rfb::BoolParameter rfb::Server::queryConnect ("QueryConnect", "Prompt the local user to accept or reject incoming connections.", diff --git a/common/rfb/ServerCore.h b/common/rfb/ServerCore.h index e12a8bc8..5fc996ff 100644 --- a/common/rfb/ServerCore.h +++ b/common/rfb/ServerCore.h @@ -46,6 +46,7 @@ namespace rfb { static BoolParameter acceptPointerEvents; static BoolParameter acceptCutText; static BoolParameter sendCutText; + static BoolParameter acceptSetDesktopSize; static BoolParameter queryConnect; }; diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx index 618048a5..e30b4f42 100644 --- a/common/rfb/VNCSConnectionST.cxx +++ b/common/rfb/VNCSConnectionST.cxx @@ -445,9 +445,10 @@ void VNCSConnectionST::clientInit(bool shared) { lastEventTime = time(0); if (rfb::Server::alwaysShared || reverseConnection) shared = true; + if (!(accessRights & AccessNonShared)) shared = true; if (rfb::Server::neverShared) shared = false; if (!shared) { - if (rfb::Server::disconnectClients) { + if (rfb::Server::disconnectClients && (accessRights & AccessNonShared)) { // - Close all the other connected clients vlog.debug("non-shared connection - closing clients"); server->closeClients("Non-shared connection requested", getSock()); @@ -584,6 +585,9 @@ void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height, { unsigned int result; + if (!(accessRights & AccessSetDesktopSize)) return; + if (!rfb::Server::acceptSetDesktopSize) return; + // Don't bother the desktop with an invalid configuration if (!layout.validate(fb_width, fb_height)) { writer()->writeExtendedDesktopSize(reasonClient, resultInvalid, diff --git a/config.h.in b/config.h.in index a50e723d..490d7f6d 100644 --- a/config.h.in +++ b/config.h.in @@ -2,6 +2,7 @@ #define PACKAGE_VERSION "@VERSION@" #cmakedefine HAVE_INET_ATON +#cmakedefine HAVE_INET_PTON #cmakedefine HAVE_GETADDRINFO #cmakedefine HAVE_GNUTLS_SET_GLOBAL_ERRNO #cmakedefine HAVE_GNUTLS_SET_ERRNO diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index c98c69c0..bf1cffb5 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8) project(tigervnc-java Java) if(NOT VERSION) - set(VERSION 1.3.80) + set(VERSION 1.4.80) endif() find_package(Java) diff --git a/java/com/tigervnc/network/SSLEngineManager.java b/java/com/tigervnc/network/SSLEngineManager.java index cb1f7c42..c0110995 100644 --- a/java/com/tigervnc/network/SSLEngineManager.java +++ b/java/com/tigervnc/network/SSLEngineManager.java @@ -41,14 +41,14 @@ public class SSLEngineManager { private ByteBuffer peerNetData; private Executor executor; - private FdInStream inStream; - private FdOutStream outStream; + private FdInStream in; + private FdOutStream os; - public SSLEngineManager(SSLEngine sslEngine, FdInStream is, - FdOutStream os) throws IOException { + public SSLEngineManager(SSLEngine sslEngine, FdInStream is_, + FdOutStream os_) throws IOException { - inStream = is; - outStream = os; + in = is_; + os = os_; engine = sslEngine; executor = Executors.newSingleThreadExecutor(); @@ -56,7 +56,8 @@ public class SSLEngineManager { pktBufSize = engine.getSession().getPacketBufferSize(); appBufSize = engine.getSession().getApplicationBufferSize(); - myAppData = ByteBuffer.allocate(appBufSize); + myAppData = + ByteBuffer.allocate(Math.max(appBufSize, os.getBufSize())); myNetData = ByteBuffer.allocate(pktBufSize); peerAppData = ByteBuffer.allocate(appBufSize); peerNetData = ByteBuffer.allocate(pktBufSize); @@ -80,13 +81,14 @@ public class SSLEngineManager { SSLEngineResult res = engine.unwrap(peerNetData, peerAppData); peerNetData.compact(); hs = res.getHandshakeStatus(); + // Check status switch (res.getStatus()) { case BUFFER_UNDERFLOW: - int len = Math.min(peerNetData.remaining(), inStream.getBufSize()); - int m = inStream.check(1, len, false); - byte[] buf = new byte[m]; - inStream.readBytes(buf, 0, m); - peerNetData.put(buf, 0, m); + int max = Math.min(peerNetData.remaining(), in.getBufSize()); + int m = in.check(1, max, true); + int pos = peerNetData.position(); + in.readBytes(peerNetData.array(), pos, m); + peerNetData.position(pos+m); peerNetData.flip(); peerNetData.compact(); break; @@ -102,7 +104,7 @@ public class SSLEngineManager { } break; - case NEED_WRAP : + case NEED_WRAP: // Empty the local network packet buffer. myNetData.clear(); @@ -112,20 +114,17 @@ public class SSLEngineManager { // Check status switch (res.getStatus()) { - case OK : + case OK: myAppData.compact(); myNetData.flip(); - int n = myNetData.remaining(); - byte[] b = new byte[n]; - myNetData.get(b); + os.writeBytes(myNetData.array(), 0, myNetData.remaining()); + os.flush(); myNetData.clear(); - outStream.writeBytes(b, 0, n); - outStream.flush(); break; case BUFFER_OVERFLOW: // FIXME: How much larger should the buffer be? - // fallthrough + break; case CLOSED: engine.closeOutbound(); @@ -133,7 +132,8 @@ public class SSLEngineManager { } break; - case NEED_TASK : + + case NEED_TASK: // Handle blocking tasks executeTasks(); break; @@ -151,29 +151,28 @@ public class SSLEngineManager { public int read(byte[] data, int dataPtr, int length) throws IOException { // Read SSL/TLS encoded data from peer - int len = Math.min(pktBufSize,inStream.getBufSize()); - int bytesRead = inStream.check(1,len,false); - byte[] buf = new byte[bytesRead]; - inStream.readBytes(buf, 0, bytesRead); - if (peerNetData.remaining() < bytesRead) { - peerNetData.flip(); - ByteBuffer b = ByteBuffer.allocate(peerNetData.remaining() + bytesRead); - b.put(peerNetData); - peerNetData = b; - } - peerNetData.put(buf); + int bytesRead = 0; peerNetData.flip(); SSLEngineResult res = engine.unwrap(peerNetData, peerAppData); peerNetData.compact(); switch (res.getStatus()) { case OK : + bytesRead = Math.min(length, res.bytesProduced()); peerAppData.flip(); - peerAppData.get(data, dataPtr, res.bytesProduced()); + peerAppData.get(data, dataPtr, bytesRead); peerAppData.compact(); break; case BUFFER_UNDERFLOW: - // normal (need more net data) + // need more net data + int pos = peerNetData.position(); + // attempt to drain the underlying buffer first + int need = peerNetData.remaining(); + int avail = in.check(1, in.getBufSize(), false); + if (avail < need) + avail = in.check(1, Math.min(need, in.getBufSize()), true); + in.readBytes(peerNetData.array(), pos, Math.min(need, avail)); + peerNetData.position(pos+Math.min(need, avail)); break; case CLOSED: @@ -181,24 +180,28 @@ public class SSLEngineManager { break; } - return res.bytesProduced(); + return bytesRead; } public int write(byte[] data, int dataPtr, int length) throws IOException { int n = 0; - // FIXME: resize myAppData if necessary myAppData.put(data, dataPtr, length); myAppData.flip(); while (myAppData.hasRemaining()) { SSLEngineResult res = engine.wrap(myAppData, myNetData); n += res.bytesConsumed(); switch (res.getStatus()) { + case OK: + break; + case BUFFER_OVERFLOW: - ByteBuffer b = ByteBuffer.allocate(myNetData.capacity() + myAppData.remaining()); + // Make room in the buffer by flushing the outstream myNetData.flip(); - b.put(myNetData); - myNetData = b; + os.writeBytes(myNetData.array(), 0, myNetData.remaining()); + os.flush(); + myNetData.clear(); break; + case CLOSED: engine.closeOutbound(); break; @@ -206,12 +209,9 @@ public class SSLEngineManager { } myAppData.clear(); myNetData.flip(); - int len = myNetData.remaining(); - byte[] buf = new byte[len]; - myNetData.get(buf); + os.writeBytes(myNetData.array(), 0, myNetData.remaining()); + os.flush(); myNetData.clear(); - outStream.writeBytes(buf, 0, len); - outStream.flush(); return n; } diff --git a/java/com/tigervnc/network/Socket.java b/java/com/tigervnc/network/Socket.java index bcc920de..651dc05a 100644 --- a/java/com/tigervnc/network/Socket.java +++ b/java/com/tigervnc/network/Socket.java @@ -58,7 +58,6 @@ abstract public class Socket { // Is the remote end on the same machine? abstract public boolean sameMachine(); - // Was there a "?" in the ConnectionFilter used to accept this Socket? public void setRequiresQuery() {queryConnection = true;} public final boolean requiresQuery() {return queryConnection;} @@ -78,29 +77,3 @@ abstract public class Socket { boolean isShutdown_; boolean queryConnection; } - -/* -abstract class ConnectionFilter { - public abstract boolean verifyConnection(Socket s); -}; - -abstract class SocketListener { - public SocketListener() { - fd = null; filter = null; - } - - // shutdown() stops the socket from accepting further connections - public abstract void shutdown(); - - // accept() returns a new Socket object if there is a connection - // attempt in progress AND if the connection passes the filter - // if one is installed. Otherwise, returns 0. - public abstract Socket accept(); - - // setFilter() applies the specified filter to all new connections - public void setFilter(ConnectionFilter f) {filter = f;} - //public SocketDescriptor getFd() {return fd;} - protected FileDescriptor fd; - protected ConnectionFilter filter; -}; -*/ diff --git a/java/com/tigervnc/network/SocketListener.java b/java/com/tigervnc/network/SocketListener.java index a1b2c122..a1f5ea1b 100644 --- a/java/com/tigervnc/network/SocketListener.java +++ b/java/com/tigervnc/network/SocketListener.java @@ -29,18 +29,15 @@ abstract public class SocketListener { public SocketListener() {} // shutdown() stops the socket from accepting further connections - abstract public void shutdown(); + abstract public void shutdown() throws Exception; // accept() returns a new Socket object if there is a connection // attempt in progress AND if the connection passes the filter // if one is installed. Otherwise, returns 0. abstract public Socket accept(); - // setFilter() applies the specified filter to all new connections - //public void setFilter(ConnectionFilter* f) {filter = f;} public FileDescriptor getFd() {return fd;} protected FileDescriptor fd; - //protected ConnectionFilter* filter; } diff --git a/java/com/tigervnc/network/TcpListener.java b/java/com/tigervnc/network/TcpListener.java index bab9e4c5..45ee8a4d 100644 --- a/java/com/tigervnc/network/TcpListener.java +++ b/java/com/tigervnc/network/TcpListener.java @@ -84,12 +84,21 @@ public class TcpListener extends SocketListener { this(listenaddr, port, false, null, true); } -// TcpListener::~TcpListener() { -// if (closeFd) closesocket(fd); -// } + protected void finalize() throws Exception { + if (closeFd) + try { + ((SocketDescriptor)getFd()).close(); + } catch (IOException e) { + throw new Exception(e.getMessage()); + } + } - public void shutdown() { - //shutdown(getFd(), 2); + public void shutdown() throws Exception { + try { + ((SocketDescriptor)getFd()).shutdown(); + } catch (IOException e) { + throw new Exception(e.getMessage()); + } } public TcpSocket accept() { @@ -132,32 +141,12 @@ public class TcpListener extends SocketListener { } fd.setChannel(new_sock); TcpSocket s = new TcpSocket(fd); - //if (filter && !filter->verifyConnection(s)) { - // delete s; - // return 0; - //} return s; } -/* -void TcpListener::getMyAddresses(std::list<char*>* result) { - const hostent* addrs = gethostbyname(0); - if (addrs == 0) - throw rdr::SystemException("gethostbyname", errorNumber); - if (addrs->h_addrtype != AF_INET) - throw rdr::Exception("getMyAddresses: bad family"); - for (int i=0; addrs->h_addr_list[i] != 0; i++) { - const char* addrC = inet_ntoa(*((struct in_addr*)addrs->h_addr_list[i])); - char* addr = new char[strlen(addrC)+1]; - strcpy(addr, addrC); - result->push_back(addr); + public int getMyPort() { + return ((SocketDescriptor)getFd()).socket().getLocalPort(); } -} - */ - - //public int getMyPort() { - // return TcpSocket.getSockPort(); - //} private boolean closeFd; private ServerSocketChannel channel; diff --git a/java/com/tigervnc/network/TcpSocket.java b/java/com/tigervnc/network/TcpSocket.java index 051a9d82..43787e4d 100644 --- a/java/com/tigervnc/network/TcpSocket.java +++ b/java/com/tigervnc/network/TcpSocket.java @@ -113,8 +113,7 @@ public class TcpSocket extends Socket { } public int getMyPort() { - SocketAddress address = ((SocketDescriptor)getFd()).socket().getLocalSocketAddress(); - return ((InetSocketAddress)address).getPort(); + return getSockPort(); } public String getPeerAddress() { @@ -184,7 +183,7 @@ public class TcpSocket extends Socket { } public int getSockPort() { - return ((InetSocketAddress)((SocketDescriptor)getFd()).socket().getRemoteSocketAddress()).getPort(); + return ((SocketDescriptor)getFd()).socket().getLocalPort(); } /* Tunnelling support. */ diff --git a/java/com/tigervnc/vncviewer/ClipboardDialog.java b/java/com/tigervnc/vncviewer/ClipboardDialog.java index d4cde6e1..e7aa7e96 100644 --- a/java/com/tigervnc/vncviewer/ClipboardDialog.java +++ b/java/com/tigervnc/vncviewer/ClipboardDialog.java @@ -1,5 +1,5 @@ /* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. - * Copyright (C) 2011 Brian P. Hinz + * Copyright (C) 2011-2014 Brian P. Hinz * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,27 +21,91 @@ package com.tigervnc.vncviewer; import java.awt.*; import java.awt.event.*; -import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.*; +import java.io.*; +import java.nio.*; import javax.swing.*; import javax.swing.border.*; +import javax.swing.text.*; + import com.tigervnc.rfb.LogWriter; class ClipboardDialog extends Dialog implements ActionListener { + private class VncTransferHandler extends TransferHandler { + // Custom TransferHandler designed to limit the size of outbound + // clipboard transfers to VncViewer.maxCutText.getValue() bytes. + private LogWriter vlog = new LogWriter("VncTransferHandler"); + + public void exportToClipboard(JComponent c, Clipboard clip, int a) + throws IllegalStateException { + if (!(c instanceof JTextComponent)) return; + StringSelection selection = + new StringSelection(((JTextComponent)c).getText()); + clip.setContents(selection, null); + } + + public boolean importData(JComponent c, Transferable t) { + if (canImport(c, t.getTransferDataFlavors())) { + try { + DataFlavor VncFlavor = null; + for (DataFlavor f : t.getTransferDataFlavors()) + if (f.isFlavorTextType() && f.isRepresentationClassInputStream()) + VncFlavor = f; + if (VncFlavor == null) return false; + Reader reader = (Reader)VncFlavor.getReaderForText(t); + CharBuffer cbuf = + CharBuffer.allocate(VncViewer.maxCutText.getValue()); + cbuf.limit(reader.read(cbuf.array(), 0, cbuf.length())); + reader.close(); + if (c instanceof JTextComponent) + ((JTextComponent)c).setText(cbuf.toString()); + return true; + } catch (OutOfMemoryError oome) { + vlog.error("ERROR: Too much data on local clipboard!"); + } catch (UnsupportedFlavorException ufe) { + // Skip import + vlog.info(ufe.toString()); + } catch (IOException ioe) { + // Skip import + vlog.info(ioe.toString()); + } + } + return false; + } + + public boolean canImport(JComponent c, DataFlavor[] flavors) { + for (DataFlavor f : flavors) + if (f.isFlavorTextType() && f.isRepresentationClassReader()) + return true; + return false; + } + } + public ClipboardDialog(CConn cc_) { super(false); + setTitle("VNC Clipboard Viewer"); + setPreferredSize(new Dimension(640, 480)); + addWindowFocusListener(new WindowAdapter() { + // Necessary to ensure that updates from the system clipboard + // still occur when the ClipboardDialog has the focus. + public void WindowGainedFocus(WindowEvent e) { + clientCutText(); + } + }); cc = cc_; - setTitle("VNC clipboard"); - JPanel pt = new JPanel(); - textArea = new JTextArea(5,50); - textArea.setBorder(BorderFactory.createLineBorder(Color.gray)); - textArea.setLineWrap(true); + textArea = new JTextArea(); + textArea.setTransferHandler(new VncTransferHandler()); + // If the textArea can receive the focus, then text within the textArea + // can be selected. On platforms that don't support separate selection + // and clipboard buffers, this triggers a replacement of the textAra's + // contents with the selected text. + textArea.setFocusable(false); + textArea.setLineWrap(false); textArea.setWrapStyleWord(true); JScrollPane sp = new JScrollPane(textArea); - pt.add(sp, BorderLayout.CENTER); - getContentPane().add("North", pt); - + getContentPane().add(sp, BorderLayout.CENTER); + // button panel placed below the scrollpane JPanel pb = new JPanel(); clearButton = new JButton("Clear"); pb.add(clearButton); @@ -53,40 +117,22 @@ class ClipboardDialog extends Dialog implements ActionListener { pb.add(cancelButton); cancelButton.addActionListener(this); getContentPane().add("South", pb); - pack(); } - public boolean compareContentsTo(String str) { - return str.equals(textArea.getText()); - - } - - public void setContents(String str) { + public void serverCutText(String str, int len) { textArea.setText(str); + textArea.copy(); } - public String getContents() { - return textArea.getText(); - } - - public void serverCutText(String str, int len) { - setContents(str); - SecurityManager sm = System.getSecurityManager(); - try { - if (sm != null) sm.checkSystemClipboardAccess(); - Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); - if (cb != null) { - StringSelection ss = new StringSelection(str); - try { - cb.setContents(ss, null); - } catch(Exception e) { - vlog.debug(e.getMessage()); - } - } - } catch(SecurityException e) { - vlog.debug("Cannot access the system clipboard: "+e.getMessage()); - } + public void clientCutText() { + int hc = textArea.getText().hashCode(); + textArea.paste(); + textArea.setCaretPosition(0); + String text = textArea.getText(); + if (cc.viewer.sendClipboard.getValue()) + if (hc != text.hashCode()) + cc.writeClientCutText(text, text.length()); } public void setSendingEnabled(boolean b) { @@ -98,7 +144,8 @@ class ClipboardDialog extends Dialog implements ActionListener { if (s instanceof JButton && (JButton)s == clearButton) { serverCutText(new String(""), 0); } else if (s instanceof JButton && (JButton)s == sendButton) { - cc.writeClientCutText(textArea.getText(), textArea.getText().length()); + String text = textArea.getText(); + cc.writeClientCutText(text, text.length()); endDialog(); } else if (s instanceof JButton && (JButton)s == cancelButton) { endDialog(); diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java index e78ee277..10d158c4 100644 --- a/java/com/tigervnc/vncviewer/DesktopWindow.java +++ b/java/com/tigervnc/vncviewer/DesktopWindow.java @@ -85,7 +85,7 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener, addKeyListener(this); addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { - checkClipboard(); + cc.clipboardDialog.clientCutText(); } public void focusLost(FocusEvent e) { cc.releaseDownKeys(); @@ -359,36 +359,6 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener, g2.dispose(); } - public synchronized void checkClipboard() { - SecurityManager sm = System.getSecurityManager(); - try { - if (sm != null) sm.checkSystemClipboardAccess(); - Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); - if (cb != null) { - Transferable t = cb.getContents(null); - if (t == null) return; - DataFlavor flavor = - DataFlavor.selectBestTextFlavor(t.getTransferDataFlavors()); - if (flavor == null) return; - BufferedReader br = new BufferedReader(flavor.getReaderForText(t)); - CharBuffer cbuf = - CharBuffer.allocate(VncViewer.maxCutText.getValue()); - br.read(cbuf); - cbuf.flip(); - String newContents = cbuf.toString(); - if (!cc.clipboardDialog.compareContentsTo(newContents)) { - cc.clipboardDialog.setContents(newContents); - if (cc.viewer.sendClipboard.getValue()) - cc.writeClientCutText(newContents, newContents.length()); - } - br.close(); - System.gc(); - } - } catch(java.lang.Exception e) { - vlog.debug("Exception getting clipboard data: " + e.getMessage()); - } - } - // Mouse-Motion callback function private void mouseMotionCB(MouseEvent e) { if (!cc.viewer.viewOnly.getValue() && diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java index 0df39c87..1e0f2230 100644 --- a/java/com/tigervnc/vncviewer/VncViewer.java +++ b/java/com/tigervnc/vncviewer/VncViewer.java @@ -457,7 +457,7 @@ public class VncViewer extends javax.swing.JApplet while (true) { Socket new_sock = listener.accept(); if (new_sock != null) - newViewer(this, new_sock); + newViewer(this, new_sock, true); } } diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt index 793089ca..513cfcc8 100644 --- a/po/CMakeLists.txt +++ b/po/CMakeLists.txt @@ -1,7 +1,7 @@ # Gettext support - mostly borrowed from the Licq project set(po_FILES - de es fr it nl pl pt_BR ru sk sv tr + de es fr it nl pl pt_BR ru sk sv tr uk ) if (NOT GETTEXT_MSGMERGE_EXECUTABLE AND NOT GETTEXT_MSGFMT_EXECUTABLE) @@ -25,8 +25,9 @@ if (GETTEXT_XGETTEXT_EXECUTABLE) --keyword=N_ "--copyright-holder=TigerVNC Team and many others \(see README.txt\)" --msgid-bugs-address=tigervnc-devel@googlegroups.com - --sort-output + --sort-by-file --add-location + --add-comments ${po_source} COMMENT "Updating tigervnc.pot" VERBATIM @@ -40,7 +41,7 @@ foreach(lang ${po_FILES}) # Update po files after pot file add_custom_command(TARGET translations_update POST_BUILD COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none - --sort-output ${po} ${CMAKE_CURRENT_SOURCE_DIR}/tigervnc.pot + --sort-by-file ${po} ${CMAKE_CURRENT_SOURCE_DIR}/tigervnc.pot COMMENT "Updating ${lang}.po" ) @@ -1,52 +1,57 @@ -# Copyright (C) 2011 TigerVNC Team +# German translation of tigervnc. +# Copyright (C) 2014 the TigerVNC Team (msgids) +# This file is distributed under the same license as the tigervnc package. +# Klaus Franken <Klaus.Franken@StrukturPunkt.de>, 2005. +# Mario Blättermann <mario.blaettermann@gmail.com>, 2014. msgid "" msgstr "" -"Project-Id-Version: TigerVNC 0.0.91\n" +"Project-Id-Version: tigervnc 1.3.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2014-09-22 11:15+0000\n" -"PO-Revision-Date: 2005-03-01 20:41+0100\n" -"Last-Translator: Klaus Franken <Klaus.Franken@StrukturPunkt.de>\n" -"Language-Team: German\n" -"Language: \n" +"POT-Creation-Date: 2014-11-19 12:46+0000\n" +"PO-Revision-Date: 2014-11-28 21:47+0100\n" +"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" +"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" +"Language: de\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.4\n" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" -msgstr "" +msgstr "(Server-Vorgabe %s)" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227 msgid "About" -msgstr "Über" +msgstr "Info" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103 msgid "About TigerVNC Viewer" -msgstr "Über TigerVNC-Viewer" +msgstr "Info zu TigerVNC-Betrachter" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097 msgid "About TigerVNC viewer..." -msgstr "Über TigerVNC-Viewer..." +msgstr "Info zu TigerVNC-Betrachter …" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86 msgid "About..." -msgstr "Über..." +msgstr "Info …" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704 msgid "Accept clipboard from server" -msgstr "Akzeptiere Zwischenablage vom Server" +msgstr "Zwischenablage vom Server akzeptieren" #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327 msgid "Adjusting window size to avoid accidental full screen request" -msgstr "" +msgstr "Fenstergröße anpassen, um zufällige Vollbild-Anforderung zu vermeiden" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563 msgid "Allow JPEG compression:" -msgstr "Erlaube JPEG-Kompression:" +msgstr "JPEG-Kompression erlauben:" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081 msgid "Alt" msgstr "Alt" @@ -65,11 +70,11 @@ msgstr "Automatisch auswählen" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651 #, c-format msgid "Bad Name/Value pair on line: %d in file: %s" -msgstr "" +msgstr "Falsches Name/Wert-Paar in Zeile: %d in Datei: %s" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:92 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91 msgid "BitBlt failed" -msgstr "" +msgstr "BitBlt fehlgeschlagen" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:91 #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:221 @@ -79,7 +84,7 @@ msgstr "Abbrechen" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116 msgid "CleanupSignalHandler called" -msgstr "" +msgstr "CleanupSignalHandler aufgerufen" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222 msgid "Close" @@ -87,103 +92,107 @@ msgstr "Schließen" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499 msgid "Color level" -msgstr "Farblevel" +msgstr "Farbstufe" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421 -#, fuzzy msgid "Compression" -msgstr "individueller Kompressionslevel:" +msgstr "Kompression" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96 msgid "Connect" msgstr "Verbinden" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1085 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096 msgid "Connection info..." -msgstr "Verbindungsinformationen..." +msgstr "Verbindungsinformationen …" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362 #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404 #, c-format -msgid "" -"Could not convert the parameter-name %s to wchar_t* when reading from the " -"Registry, the buffersize is to small." -msgstr "" +msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small." +msgstr "Der Parametername %s konnte beim Lesen der Registrierungsdatenbank nicht in wchar_t* umgewandelt werden, die Größe des Puffers ist zu gering." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302 #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340 #, c-format -msgid "" -"Could not convert the parameter-name %s to wchar_t* when writing to the " -"Registry, the buffersize is to small." -msgstr "" +msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small." +msgstr "Der Parametername %s konnte beim Schreiben in die Registrierungsdatenbank nicht in wchar_t* umgewandelt werden, die Größe des Puffers ist zu gering." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:318 #, c-format -msgid "" -"Could not convert the parameter-value %s to wchar_t* when writing to the " -"Registry, the buffersize is to small." -msgstr "" +msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small." +msgstr "Der Parameterwert %s konnte beim Schreiben in die Registrierungsdatenbank nicht in wchar_t* umgewandelt werden, die Größe des Puffers ist zu gering." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:381 #, c-format -msgid "" -"Could not convert the parameter-value for %s to utf8 char* when reading from " -"the Registry, the buffer dest is to small." -msgstr "" +msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small." +msgstr "Der Parameterwert für %s konnte beim Lesen der Registrierungsdatenbank nicht in UTF-8 umgewandelt werden, die Größe des Puffers ist zu gering." #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256 #, c-format msgid "Could not create VNC home directory: %s." -msgstr "VNC-Benutzerverzeichnis %s konnte nicht erstellt werden" +msgstr "VNC-Benutzerverzeichnis konnte nicht erstellt werden: %s." #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251 msgid "Could not create VNC home directory: can't obtain home directory path." -msgstr "" -"VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf " -"Benutzerverzeichnispfad kann nicht zugegriffen werden." +msgstr "VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf Benutzerverzeichnispfad kann nicht zugegriffen werden." + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58 +msgid "Could not create framebuffer bitmap" +msgstr "Framebuffer-Bitmap konnte nicht erstellt werden" + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52 +msgid "Could not create framebuffer device" +msgstr "Framebuffer-Gerät konnte nicht erstellt werden" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107 +msgid "Could not create framebuffer image" +msgstr "Framebuffer-Image konnte nicht erstellt werden" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310 #, c-format msgid "Could not encode the parameter-value %s when writing to the Registry." -msgstr "" +msgstr "Der Parameterwert %s konnte beim Schreiben in die Registrierungsdatenbank nicht kodiert werden." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:613 #, c-format -msgid "" -"Could not read the line(%d) in the configuration file,the buffersize is to " -"small." -msgstr "" +msgid "Could not read the line(%d) in the configuration file,the buffersize is to small." +msgstr "Die Zeile(%d) in der Konfigurationsdatei konnte nicht gelesen werden, die Puffergröße ist zu gering." + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68 +msgid "Couldn't find suitable pixmap format" +msgstr "Es konnte kein geeignetes Pixmap-Format gefunden werden" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:80 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79 msgid "CreateCompatibleDC failed" -msgstr "" +msgstr "CreateCompatibleDC fehlgeschlagen" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1068 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079 msgid "Ctrl" msgstr "Strg" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550 msgid "Custom compression level:" -msgstr "individueller Kompressionslevel:" +msgstr "Individuelle Kompressionsstufe:" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:283 -msgid "" -"Decoding: The size of the buffer dest is to small, it needs to be 1 byte " -"bigger." -msgstr "" +msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger." +msgstr "Dekodierung: Das Puffer-Ziel ist zu klein, es muss 1 Byte größer sein." #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172 #, c-format msgid "Desktop name: %.80s" -msgstr "" +msgstr "Desktop-Name: %.80s" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1088 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099 msgid "Dismiss menu" msgstr "Menü verlassen" +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59 +msgid "Display lacks pixmap format for default depth" +msgstr "Anzeige hat kein Pixmap-Format für die vorgegebene Tiefe" + #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778 -#, fuzzy msgid "Enable full-screen mode over all monitors" msgstr "Vollbildmodus für alle Monitore aktivieren" @@ -193,24 +202,18 @@ msgstr "Fortlaufende Aktualisierungen aktivieren" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:200 #, c-format -msgid "" -"Encoding backslash: The size of the buffer dest is to small, it needs to be " -"more than %d bytes bigger." -msgstr "" +msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +msgstr "Kodierung des Rückschrägstrichs: Das Puffer-Ziel ist zu klein, es muss %d Bytes größer sein." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:214 #, c-format -msgid "" -"Encoding escape sequence: The size of the buffer dest is to small, it needs " -"to be more than %d bytes bigger." -msgstr "" +msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +msgstr "Kodierung der Escape-Sequenz: Das Puffer-Ziel ist zu klein, es muss %d Bytes größer sein." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:234 #, c-format -msgid "" -"Encoding normal character: The size of the buffer dest is to small, it needs " -"to be more than %d bytes bigger." -msgstr "" +msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +msgstr "Kodierung des gewöhnlichen Zeichens: Das Puffer-Ziel ist zu klein, es muss %d Bytes größer sein." #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595 msgid "Encryption" @@ -219,88 +222,65 @@ msgstr "Verschlüsselung" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503 #, c-format msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" -msgstr "" +msgstr "Fehler(%d) beim Schließen des Schlüssels: Software\\TigerVNC\\vncviewer" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:455 #, c-format msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" -msgstr "" +msgstr "Fehler(%d) beim Schließen des Schlüssels: Software\\TigerVNC\\vncviewer" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:434 #, c-format msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer" -msgstr "" +msgstr "Fehler(%d) beim Erstellen des Schlüssels: Software\\TigerVNC\\vncviewer" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:471 #, c-format msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer" -msgstr "" +msgstr "Fehler(%d) beim Öffnen des Schlüssels: Software\\TigerVNC\\vncviewer" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:373 #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:415 #, c-format msgid "Error(%d) reading %s from Registry." -msgstr "" +msgstr "Fehler(%d) beim Lesen von %s aus der Registrierungsdatenbank." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:348 #, c-format msgid "Error(%d) writing %d(REG_DWORD) to Registry." -msgstr "" +msgstr "Fehler(%d) beim Schreiben von %d(REG_DWORD) in die Registrierungsdatenbank." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:326 #, c-format msgid "Error(%d) writing %s(REG_SZ) to Registry." -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:50 -#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 -msgid "Error: Not enough memory for framebuffer" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:69 -msgid "Error: couldn't find suitable pixmap format" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:60 -msgid "Error: display lacks pixmap format for default depth" -msgstr "" +msgstr "Fehler(%d) beim Schreiben von %s(REG_SZ) in die Registrierungsdatenbank." -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:78 -msgid "Error: only true colour displays supported" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1056 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067 msgid "Exit viewer" -msgstr "Viewer beenden" +msgstr "Betrachter beenden" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588 -#, fuzzy msgid "Failed to read configuration file, can't obtain home directory path." -msgstr "" -"VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf " -"Benutzerverzeichnispfad kann nicht zugegriffen werden." +msgstr "Konfigurationsdatei konnte nicht gelesen werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602 #, c-format msgid "Failed to read configuration file, can't open %s" -msgstr "" +msgstr "Konfigurationsdatei kann nicht gelesen werden, %s lässt sich nicht öffnen" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621 #, c-format msgid "Failed to read line %d in file %s" -msgstr "" +msgstr "Zeile %d in Datei %s konnte nicht gelesen werden" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528 -#, fuzzy msgid "Failed to write configuration file, can't obtain home directory path." -msgstr "" -"VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf " -"Benutzerverzeichnispfad kann nicht zugegriffen werden." +msgstr "Konfigurationsdatei konnte nicht geschrieben werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542 #, c-format msgid "Failed to write configuration file, can't open %s" -msgstr "" +msgstr "Konfigurationsdatei kann nicht geschrieben werden, %s lässt sich nicht öffnen" #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:526 #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:538 @@ -316,14 +296,13 @@ msgstr "Fehler beim Erkennen der Maus" msgid "Full (all available colors)" msgstr "Voll (alle verfügbaren Farben)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1059 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 msgid "Full screen" msgstr "Vollbildmodus" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770 -#, fuzzy msgid "Full-screen mode" -msgstr "Vollbild-Modus" +msgstr "Vollbildmodus" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230 msgid "Hide" @@ -331,43 +310,42 @@ msgstr "Verbergen" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:238 msgid "Hide Others" -msgstr "Andere Verbergen" +msgstr "Andere verbergen" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177 #, c-format msgid "Host: %.80s port: %d" -msgstr "" +msgstr "Rechner: %.80s Port: %d" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690 -#, fuzzy msgid "Input" -msgstr "Eingaben:" +msgstr "Eingabe" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510 msgid "Internal FLTK error. Exiting." -msgstr "Interner FLTK-Fehler. Beenden." +msgstr "Interner FLTK-Fehler. Abbruch." #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384 msgid "Invalid SetColourMapEntries from server!" -msgstr "" +msgstr "Ungültige SetColourMapEntries vom Server!" #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:106 msgid "Invalid geometry specified!" -msgstr "" +msgstr "Unzulässige Geometrie wurde angegeben!" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708 #, c-format msgid "Invalid parameter name on line: %d in file: %s" -msgstr "" +msgstr "Ungültiger Parametername in Zeile: %d in Datei: %s" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:797 +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805 msgid "Invalid screen layout computed for resize request!" -msgstr "" +msgstr "Ungültige Bildschirmanordnung wurde für die Größenänderungsanforderung ermittelt!" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204 -#, fuzzy, c-format +#, c-format msgid "Last used encoding: %s" -msgstr "%s Verschlüsselung wird verwendet" +msgstr "Zuletzt verwendete Zeichenkodierung: %s" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:631 #, c-format @@ -376,16 +354,19 @@ msgid "" "must contain the TigerVNC configuration file identifier string:\n" "\"%s\"" msgstr "" +"Zeile 1 in Datei %s\n" +"muss den Dateibezeichner der TigerVNC-Konfigurationsdatei enthalten:\n" +"»%s«" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" -msgstr "" +msgstr "Geschätzte Verbindungsgeschwindigkeit: %d kbit/s" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:478 #, c-format msgid "Listening on port %d\n" -msgstr "" +msgstr "Am Port %d wird gelauscht\n" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:69 msgid "Load..." @@ -397,55 +378,54 @@ msgstr "Niedrig (64 Farben)" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519 msgid "Medium (256 colors)" -msgstr "Medium (256 Farben)" +msgstr "Mittel (256 Farben)" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725 -#, fuzzy msgid "Menu key" -msgstr "Taste für Kontextmenü" +msgstr "Menü-Taste" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Sonstiges" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1026 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037 #, c-format msgid "Multiple characters given for key code %d (0x%04x): '%s'" -msgstr "Mehrere Zeichen für Schlüsselcode %d (0x%04x) eingegeben: '%s'" +msgstr "Mehrere Zeichen für Schlüsselcode %d (0x%04x) eingegeben: »%s«" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218 msgid "No" msgstr "Nein" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:688 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691 #, c-format msgid "No scan code for extended virtual key 0x%02x" -msgstr "" +msgstr "Kein Scan-Code für erweiterte virtuelle Taste 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:690 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693 #, c-format msgid "No scan code for virtual key 0x%02x" -msgstr "" +msgstr "Kein Scan-Code für virtuelle Taste 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:701 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710 #, c-format msgid "No symbol for extended virtual key 0x%02x" -msgstr "" +msgstr "Kein Symbol für erweiterte virtuelle Taste 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:765 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776 #, c-format msgid "No symbol for key code %d (in the current state)" -msgstr "" +msgstr "Kein Symbol für Tastencode %d (im aktuellen Zustand)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:739 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" -msgstr "" +msgstr "Kein Symbol für Tastencode 0x%02x (im aktuellen Zustand)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:703 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712 #, c-format msgid "No symbol for virtual key 0x%02x" -msgstr "" +msgstr "Kein Symbol für virtuelle Taste 0x%02x" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:606 #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:659 @@ -453,28 +433,38 @@ msgstr "" msgid "None" msgstr "Keine" +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:48 +#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:111 +msgid "Not enough memory for framebuffer" +msgstr "Nicht genügend Speicher für Framebuffer" + #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220 #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88 msgid "OK" -msgstr "Ok" +msgstr "OK" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77 +msgid "Only true colour displays supported" +msgstr "Nur True-Color-Anzeigen werden unterstützt" #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74 msgid "Opening password file failed" msgstr "Öffnen der Passwortdatei fehlgeschlagen" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1084 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095 #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64 msgid "Options..." -msgstr "Optionen..." +msgstr "Optionen …" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463 #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464 msgid "Parameters -listen and -via are incompatible" -msgstr "" +msgstr "Die Parameter -listen und -via schließen sich gegenseitig aus" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722 msgid "Pass system keys directly to server (full screen)" -msgstr "" +msgstr "Systemtasten direkt an den Server übergeben (Vollbild)" #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:87 #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:102 @@ -483,16 +473,16 @@ msgstr "Passwort:" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625 msgid "Path to X509 CA certificate" -msgstr "Pfad zum X509 CA Zertifikat" +msgstr "Pfad zum X509-CA-Zertifikat" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632 msgid "Path to X509 CRL file" -msgstr "Pfad zur X509 CRL Datei" +msgstr "Pfad zur X509-CRL-Datei" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188 -#, fuzzy, c-format +#, c-format msgid "Pixel format: %s" -msgstr "Pixelformat %s wird verwendet" +msgstr "Pixelformat: %s" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449 msgid "Preferred encoding" @@ -501,37 +491,36 @@ msgstr "Bevorzugte Kodierung" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" -msgstr "" +msgstr "Protokollversion: %d.%d" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233 msgid "Quit" msgstr "Beenden" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1082 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093 msgid "Refresh screen" -msgstr "Bildschirm auffrischen" +msgstr "Bildschirm aktualisieren" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199 -#, fuzzy, c-format +#, c-format msgid "Requested encoding: %s" -msgstr "Bevorzugte Kodierung" +msgstr "Angeforderte Zeichenkodierung: %s" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749 -#, fuzzy msgid "Resize remote session on connect" -msgstr "Remote-Session an das lokale Fenster anpassen" +msgstr "Ferne Sitzung beim Verbinden an das lokale Fenster anpassen" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762 msgid "Resize remote session to the local window" -msgstr "Remote-Session an das lokale Fenster anpassen" +msgstr "Ferne Sitzung an das lokale Fenster anpassen" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1062 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073 msgid "Resize window to session" -msgstr "Fenster an Session anpassen" +msgstr "Fenster an Sitzung anpassen" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74 msgid "Save As..." -msgstr "Speichern unter..." +msgstr "Speichern unter …" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:741 msgid "Screen" @@ -544,29 +533,28 @@ msgstr "Sicherheit" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" -msgstr "" +msgstr "Sicherheitsmethode: %s" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:83 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82 msgid "SelectObject failed" -msgstr "" +msgstr "SelectObject fehlgeschlagen" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1075 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 #, c-format msgid "Send %s" -msgstr "Sende %s" +msgstr "%s senden" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1080 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091 msgid "Send Ctrl-Alt-Del" -msgstr "Sende Strg-Alt-Del" +msgstr "Strg-Alt-Del senden" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710 msgid "Send clipboard to server" -msgstr "Sende Zwischenablage zum Server" +msgstr "Zwischenablage zum Server senden" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716 -#, fuzzy msgid "Send primary selection and cut buffer as clipboard" -msgstr "Sende primary selection & cut buffer als Zwischenablage" +msgstr "Primäre Auswahl und Ausschneidepuffer als Zwischenablage senden" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237 msgid "Services" @@ -583,16 +571,16 @@ msgstr "Gemeinsamer Zugriff (andere VNC-Viewer nicht trennen)" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239 msgid "Show All" -msgstr "Alle Zeigen" +msgstr "Alle zeigen" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" -msgstr "Zeige Punkt wenn kein Cursor" +msgstr "Punkt zeigen, wenn kein Cursor" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182 #, c-format msgid "Size: %d x %d" -msgstr "" +msgstr "Größe: %d x %d" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665 msgid "Standard VNC (insecure without encryption)" @@ -612,72 +600,76 @@ msgstr "TLS mit anonymen Zertifikaten" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:701 #, c-format msgid "The parameterArray contains a object of a invalid type at line %d." -msgstr "" +msgstr "Das ParameterArray enthält ein Objekt ungültigen Typs in Zeile %d." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:664 #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:680 #, c-format msgid "The value of the parameter %s on line %d in file %s is invalid." -msgstr "" +msgstr "Der Wert des Parameters %s in Zeile %d in Datei %s ist ungültig." #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:539 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" -msgstr "Durchsatz %d kbit/s - Ändern der Qualität auf %d" +msgstr "Durchsatz %d kbit/s - Qualität wird auf %d geändert" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:561 #, c-format msgid "Throughput %d kbit/s - full color is now %s" -msgstr "Durchsatz %d kbit/s - Full Color jetzt %s" +msgstr "Durchsatz %d kbit/s - Vollfarbmodus ist jetzt %s" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210 msgid "TigerVNC Viewer" -msgstr "TigerVNC-Viewer" +msgstr "TigerVNC-Betrachter" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80 -#, fuzzy, c-format +#, c-format msgid "" "TigerVNC Viewer %d-bit v%s\n" "Built on: %s\n" "Copyright (C) 1999-%d TigerVNC Team and many others (see README.txt)\n" "See http://www.tigervnc.org for information on TigerVNC." msgstr "" -"TigerVNC-Viewer version %s (%s)\n" -"%s\n" -"Copyright (C) 1999-2011 TigerVNC Team and many others (see README.txt)\n" +"TigerVNC-Betrachter (%d-bit) Version %s\n" +"Erstellt auf: %s\n" +"Copyright (C) 1999-%d TigerVNC Team und viele andere (siehe README.txt)\n" "Copyright (C) 2005 Klaus Franken, StrukturPunkt\n" "Siehe http://www.tigervnc.org für Informationen über TigerVNC." -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1004 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456 +#, c-format +msgid "Unable to create platform specific framebuffer: %s" +msgstr "Plattformspezifischer Framebuffer konnte nicht erstellt werden: %s" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015 #, c-format msgid "Unknown FLTK key code %d (0x%04x)" msgstr "Unbekannter FLTK-Tastencode %d (0x%04x)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:878 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889 #, c-format msgid "Unknown decimal separator: '%s'" -msgstr "Unbekanntes Dezimaltrennzeichen:'%s'" +msgstr "Unbekanntes Dezimaltrennzeichen: »%s«" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271 -#, fuzzy, c-format +#, c-format msgid "Unknown escape sequence at character %d" -msgstr "Unbekanntes Dezimaltrennzeichen:'%s'" +msgstr "Unbekannte Escape-Sequenz bei Zeichen %d" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430 #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437 -#, fuzzy msgid "Unknown rect encoding" -msgstr "%s Verschlüsselung wird verwendet" +msgstr "Unbekannte rect-Kodierung" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429 #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436 #, c-format msgid "Unknown rect encoding %d" -msgstr "" +msgstr "Unbekannte rect-Kodierung %d" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671 msgid "Username and password (insecure without encryption)" -msgstr "Benutzername und Passwort (unsicher ohne VerschlÃŒsselung)" +msgstr "Benutzername und Passwort (unsicher ohne Verschlüsselung)" #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99 msgid "Username:" @@ -686,34 +678,38 @@ msgstr "Benutzername:" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573 #, c-format msgid "Using %s encoding" -msgstr "%s Verschlüsselung wird verwendet" +msgstr "%s-Verschlüsselung wird verwendet" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:80 +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79 #, c-format msgid "Using default colormap and visual, %sdepth %d." -msgstr "" +msgstr "Vorgegebene Farbzuweisung und Anzeige wird verwendet, %sTiefe %d." #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620 #, c-format msgid "Using pixel format %s" msgstr "Pixelformat %s wird verwendet" +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457 +msgid "Using platform independent framebuffer" +msgstr "Plattformunabhängiger Framebuffer wird verwendet" + #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42 msgid "VNC Viewer: Connection Details" -msgstr "VNC-Viewer: Verbindungsdetails" +msgstr "VNC-Betrachter: Verbindungsdetails" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57 msgid "VNC Viewer: Connection Options" -msgstr "VNC-Viewer: Verbindungsoptionen" +msgstr "VNC-Betrachter: Verbindungsoptionen" #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86 #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96 msgid "VNC authentication" msgstr "VNC-Autorisierung" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1176 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187 msgid "VNC connection info" -msgstr "VNC Verbindungsinformation" +msgstr "VNC-Verbindungsinformation" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49 #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54 @@ -725,9 +721,8 @@ msgid "Very low (8 colors)" msgstr "Sehr gering (8 Farben)" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698 -#, fuzzy msgid "View only (ignore mouse and keyboard)" -msgstr "nur Ansicht (ignoriere Maus und Tastatur)" +msgstr "Nur Ansicht (Maus und Tastatur ignorieren)" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219 msgid "Yes" @@ -736,7 +731,7 @@ msgstr "Ja" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111 #, c-format msgid "connected to host %s port %d" -msgstr "verbunden mit Host %s Port %d" +msgstr "verbunden mit Rechner %s, Port %d" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563 msgid "disabled" @@ -748,35 +743,12 @@ msgstr "aktiviert" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556 msgid "level (1=fast, 6=best [4-6 are rarely useful])" -msgstr "Level (1=schnell, 9=beste) [4-6 sind selten sinnvoll]" +msgstr "Stufe (1=schnell, 9=beste) [4-6 sind selten sinnvoll]" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569 msgid "quality (0=poor, 9=best)" msgstr "Qualität (0=schlechte, 9=beste)" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:63 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62 msgid "unable to create DIB section" -msgstr "" - -#~ msgid "" -#~ "Desktop name: %.80s\n" -#~ "Host: %.80s port: %d\n" -#~ "Size: %d x %d\n" -#~ "Pixel format: %s\n" -#~ "(server default %s)\n" -#~ "Requested encoding: %s\n" -#~ "Last used encoding: %s\n" -#~ "Line speed estimate: %d kbit/s\n" -#~ "Protocol version: %d.%d\n" -#~ "Security method: %s\n" -#~ msgstr "" -#~ "Desktopname: %.80s\n" -#~ "Host: %.80s port: %d\n" -#~ "Größe: %d x %d\n" -#~ "Pixelformat: %s\n" -#~ "(Server Standard %s)\n" -#~ "gewünschte Kodierung: %s\n" -#~ "letzte benutzte Kodierung: %s\n" -#~ "Leitungsgeschwindigkeit (geschätzt): %d kbit/s\n" -#~ "Protokollversion: %d.%d\n" -#~ "Sicherheitsmethode: %s\n" +msgstr "DIB-Abschnitt konnte nicht erstellt werden" @@ -1,50 +1,59 @@ -# Copyright (C) TigerVNC Team +# Dutch translations for TigerVNC. +# Copyright (C) the TigerVNC Team (msgids) +# This file is distributed under the same license as the tigervnc package. +# +# Benno Schulenberg <benno@vertaalt.nl>, 2014. msgid "" msgstr "" -"Project-Id-Version: TigerVNC 1.3.80\n" +"Project-Id-Version: tigervnc 1.3.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2014-09-22 11:15+0000\n" +"POT-Creation-Date: 2014-11-19 12:46+0000\n" +"PO-Revision-Date: 2014-11-22 12:02+0100\n" +"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" +"Language-Team: Dutch <vertaling@vrijschrift.org>\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" -msgstr "" +msgstr "(serverstandaard is %s)" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227 msgid "About" -msgstr "Over" +msgstr "Info" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103 msgid "About TigerVNC Viewer" -msgstr "" +msgstr "Info over TigerVNC-viewer" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097 msgid "About TigerVNC viewer..." -msgstr "" +msgstr "Info over TigerVNC-viewer..." #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86 msgid "About..." -msgstr "Over..." +msgstr "Info..." #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704 msgid "Accept clipboard from server" -msgstr "" +msgstr "Klembord van server accepteren" #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327 msgid "Adjusting window size to avoid accidental full screen request" -msgstr "" +msgstr "Venstergrootte wordt aangepast om onbedoeld volledigschermverzoek te vermijden" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563 msgid "Allow JPEG compression:" -msgstr "JPEG compressie toestaan:" +msgstr "JPEG-compressie toestaan:" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081 msgid "Alt" -msgstr "" +msgstr "Alt" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:648 msgid "Authentication" @@ -52,7 +61,7 @@ msgstr "Authenticatie" #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:89 msgid "Authentication cancelled" -msgstr "Authenticatie geannuleerd" +msgstr "Authenticatie is geannuleerd" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:437 msgid "Auto select" @@ -61,11 +70,11 @@ msgstr "Automatisch selecteren" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651 #, c-format msgid "Bad Name/Value pair on line: %d in file: %s" -msgstr "" +msgstr "Ongeldig naam-waardepaar op regel %d in bestand %s" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:92 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91 msgid "BitBlt failed" -msgstr "" +msgstr "### BitBlt is mislukt" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:91 #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:221 @@ -75,7 +84,7 @@ msgstr "Annuleren" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116 msgid "CleanupSignalHandler called" -msgstr "" +msgstr "### CleanupSignalHandler is aangeroepen" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222 msgid "Close" @@ -83,105 +92,109 @@ msgstr "Sluiten" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499 msgid "Color level" -msgstr "Kleur diepte" +msgstr "Kleurdiepte" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421 -#, fuzzy msgid "Compression" -msgstr "SSH compressie" +msgstr "Compressie" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96 msgid "Connect" msgstr "Verbinden" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1085 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096 msgid "Connection info..." -msgstr "Connectie info..." +msgstr "Verbindingsinfo..." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362 #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404 #, c-format -msgid "" -"Could not convert the parameter-name %s to wchar_t* when reading from the " -"Registry, the buffersize is to small." +msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302 #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340 #, c-format -msgid "" -"Could not convert the parameter-name %s to wchar_t* when writing to the " -"Registry, the buffersize is to small." +msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:318 #, c-format -msgid "" -"Could not convert the parameter-value %s to wchar_t* when writing to the " -"Registry, the buffersize is to small." +msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:381 #, c-format -msgid "" -"Could not convert the parameter-value for %s to utf8 char* when reading from " -"the Registry, the buffer dest is to small." +msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256 #, c-format msgid "Could not create VNC home directory: %s." -msgstr "Kon de directory VNC home: %s niet aanmaken" +msgstr "Kan de VNC-thuismap niet aanmaken: %s." #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251 msgid "Could not create VNC home directory: can't obtain home directory path." -msgstr "" -"Kon de directory VNC home niet aanmaken: kan geen informatie vinden over " -"home directory pad." +msgstr "Kan de VNC-thuismap niet aanmaken: kan pad van thuismap niet verkrijgen." + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58 +msgid "Could not create framebuffer bitmap" +msgstr "Kan framebuffer-bitkaart niet aanmaken" + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52 +msgid "Could not create framebuffer device" +msgstr "Kan framebuffer-apparaat niet aanmaken" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107 +msgid "Could not create framebuffer image" +msgstr "Kan framebuffer-afbeelding niet aanmaken" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310 #, c-format msgid "Could not encode the parameter-value %s when writing to the Registry." -msgstr "" +msgstr "Kan parameterwaarde %s niet coderen tijdens schrijven naar de Registry." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:613 #, c-format -msgid "" -"Could not read the line(%d) in the configuration file,the buffersize is to " -"small." +msgid "Could not read the line(%d) in the configuration file,the buffersize is to small." msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:80 -msgid "CreateCompatibleDC failed" +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68 +msgid "Couldn't find suitable pixmap format" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1068 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79 +msgid "CreateCompatibleDC failed" +msgstr "### CreateCompatibleDC is mislukt" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079 msgid "Ctrl" -msgstr "" +msgstr "Ctrl" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550 msgid "Custom compression level:" -msgstr "Handmatige compressie niveau's:" +msgstr "Aangepast compressieniveau:" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:283 -msgid "" -"Decoding: The size of the buffer dest is to small, it needs to be 1 byte " -"bigger." +msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172 #, c-format msgid "Desktop name: %.80s" -msgstr "" +msgstr "Bureaubladnaam: %.80s" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1088 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099 msgid "Dismiss menu" msgstr "Menu verlaten" +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59 +msgid "Display lacks pixmap format for default depth" +msgstr "" + #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778 -#, fuzzy msgid "Enable full-screen mode over all monitors" -msgstr "Activeer volledige full screen modus voor alle beeldschermen" +msgstr "Volledigscherm-modus over alle beeldschermen inschakelen" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:469 msgid "Enabling continuous updates" @@ -189,28 +202,22 @@ msgstr "Continue updates inschakelen" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:200 #, c-format -msgid "" -"Encoding backslash: The size of the buffer dest is to small, it needs to be " -"more than %d bytes bigger." +msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:214 #, c-format -msgid "" -"Encoding escape sequence: The size of the buffer dest is to small, it needs " -"to be more than %d bytes bigger." +msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:234 #, c-format -msgid "" -"Encoding normal character: The size of the buffer dest is to small, it needs " -"to be more than %d bytes bigger." +msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595 msgid "Encryption" -msgstr "Encryptie" +msgstr "Versleuteling" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503 #, c-format @@ -248,78 +255,54 @@ msgstr "" msgid "Error(%d) writing %s(REG_SZ) to Registry." msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:50 -#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 -msgid "Error: Not enough memory for framebuffer" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:69 -msgid "Error: couldn't find suitable pixmap format" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:60 -msgid "Error: display lacks pixmap format for default depth" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:78 -msgid "Error: only true colour displays supported" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1056 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067 msgid "Exit viewer" -msgstr "" +msgstr "Viewer verlaten" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588 -#, fuzzy msgid "Failed to read configuration file, can't obtain home directory path." -msgstr "" -"Kon de directory VNC home niet aanmaken: kan geen informatie vinden over " -"home directory pad." +msgstr "Lezen van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602 #, c-format msgid "Failed to read configuration file, can't open %s" -msgstr "" +msgstr "Lezen van configuratiebestand is mislukt; kan %s niet openen" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621 #, c-format msgid "Failed to read line %d in file %s" -msgstr "" +msgstr "Lezen van regel %d in bestand %s is mislukt" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528 -#, fuzzy msgid "Failed to write configuration file, can't obtain home directory path." -msgstr "" -"Kon de directory VNC home niet aanmaken: kan geen informatie vinden over " -"home directory pad." +msgstr "Schrijven van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen." #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542 #, c-format msgid "Failed to write configuration file, can't open %s" -msgstr "" +msgstr "Schrijven van configuratiebestand is mislukt; kan %s niet openen" #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:526 #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:538 #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:551 msgid "Failure grabbing keyboard" -msgstr "Mislukt toetsenbord te pakken" +msgstr "Het pakken van het toetsenbord is mislukt" #: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:563 msgid "Failure grabbing mouse" -msgstr "Fout bij muis ophalen" +msgstr "Het pakken van de muis is mislukt" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:512 msgid "Full (all available colors)" msgstr "Alles (alle beschikbare kleuren)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1059 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 msgid "Full screen" msgstr "Volledig scherm" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770 -#, fuzzy msgid "Full-screen mode" -msgstr "Volledig scherm modus" +msgstr "Volledigscherm-modus" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230 msgid "Hide" @@ -332,15 +315,15 @@ msgstr "Andere verbergen" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177 #, c-format msgid "Host: %.80s port: %d" -msgstr "" +msgstr "Host: %.80s poort: %d" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690 msgid "Input" -msgstr "" +msgstr "Invoer" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510 msgid "Internal FLTK error. Exiting." -msgstr "Interne FLTK fout. Bezig met afsluiten" +msgstr "Interne FLTK-fout. Bezig met afsluiten." #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384 msgid "Invalid SetColourMapEntries from server!" @@ -353,16 +336,16 @@ msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708 #, c-format msgid "Invalid parameter name on line: %d in file: %s" -msgstr "" +msgstr "Ongeldige parameternaam op regel %d in bestand %s" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:797 +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805 msgid "Invalid screen layout computed for resize request!" msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204 -#, fuzzy, c-format +#, c-format msgid "Last used encoding: %s" -msgstr "encoding %s wordt nu gebruikt" +msgstr "Laatst gebruikte codering: %s" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:631 #, c-format @@ -388,59 +371,58 @@ msgstr "Laden..." #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:526 msgid "Low (64 colors)" -msgstr "Laag (64 kleuren)" +msgstr "laag (64 kleuren)" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519 msgid "Medium (256 colors)" -msgstr "Medium (256 kleuren)" +msgstr "medium (256 kleuren)" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725 -#, fuzzy msgid "Menu key" -msgstr "Popup menutoets" +msgstr "Menutoets" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Overige" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1026 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037 #, c-format msgid "Multiple characters given for key code %d (0x%04x): '%s'" -msgstr "Meerdere karakters opgegeven voor toetscode %d (0x%04x): '%s'" +msgstr "Meerdere tekens opgegeven voor toetscode %d (0x%04x): '%s'" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218 msgid "No" msgstr "Nee" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:688 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691 #, c-format msgid "No scan code for extended virtual key 0x%02x" -msgstr "" +msgstr "Geen scancode voor uitgebreide virtuele toets 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:690 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693 #, c-format msgid "No scan code for virtual key 0x%02x" -msgstr "" +msgstr "Geen scancode voor virtuele toets 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:701 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710 #, c-format msgid "No symbol for extended virtual key 0x%02x" -msgstr "" +msgstr "Geen symbool voor uitgebreide virtuele toets 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:765 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776 #, c-format msgid "No symbol for key code %d (in the current state)" -msgstr "" +msgstr "Geen symbool voor toetscode %d (in de huidige toestand)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:739 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" -msgstr "" +msgstr "Geen symbool voor toetscode 0x%02x (in de huidige toestand)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:703 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712 #, c-format msgid "No symbol for virtual key 0x%02x" -msgstr "" +msgstr "Geen symbool voor virtuele toets 0x%02x" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:606 #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:659 @@ -448,24 +430,35 @@ msgstr "" msgid "None" msgstr "Geen" +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:48 +#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:111 +msgid "Not enough memory for framebuffer" +msgstr "Onvoldoende geheugen beschikbaar voor framebuffer" + #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220 #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88 msgid "OK" msgstr "OK" +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77 +msgid "Only true colour displays supported" +msgstr "" + #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74 msgid "Opening password file failed" -msgstr "Openen van het wachtwoord bestand mislukt" +msgstr "Openen van wachtwoordbestand is mislukt" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1084 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095 #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64 msgid "Options..." msgstr "Opties..." #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463 #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464 +#, fuzzy msgid "Parameters -listen and -via are incompatible" -msgstr "" +msgstr "de opties '-listen' en '-via' gaan niet samen" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722 msgid "Pass system keys directly to server (full screen)" @@ -478,51 +471,50 @@ msgstr "Wachtwoord:" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625 msgid "Path to X509 CA certificate" -msgstr "Pad naar X509 CA certificaat" +msgstr "Pad naar X509 CA-certificaat" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632 msgid "Path to X509 CRL file" -msgstr "Pad naar X509 CRL bestand" +msgstr "Pad naar X509 CRL-bestand" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188 -#, fuzzy, c-format +#, c-format msgid "Pixel format: %s" -msgstr "Pixel formaat %s wordt nu gebruikt" +msgstr "Pixel-indeling: %s" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449 msgid "Preferred encoding" -msgstr "Aanbevolen codering" +msgstr "Voorkeurscodering" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" -msgstr "" +msgstr "Protocolversie: %d.%d" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233 msgid "Quit" msgstr "Afsluiten" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1082 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093 msgid "Refresh screen" -msgstr "" +msgstr "Scherm verversen" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199 -#, fuzzy, c-format +#, c-format msgid "Requested encoding: %s" -msgstr "Aanbevolen codering" +msgstr "Gevraagde codering: %s" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749 -#, fuzzy msgid "Resize remote session on connect" -msgstr "Wijzig externe sessie naar het lokale venster" +msgstr "Grootte van gindse sessie aanpassen bij verbinden" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762 msgid "Resize remote session to the local window" -msgstr "Wijzig externe sessie naar het lokale venster" +msgstr "Gindse sessie aan het lokale venster aanpassen" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1062 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073 msgid "Resize window to session" -msgstr "Wijzig venster naar sessie" +msgstr "Venster aan sessie aanpassen" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74 msgid "Save As..." @@ -539,37 +531,37 @@ msgstr "Beveiliging" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" -msgstr "" +msgstr "Beveiligingsmethode: %s" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:83 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82 msgid "SelectObject failed" -msgstr "" +msgstr "### SelectObject is mislukt" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1075 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 #, c-format msgid "Send %s" -msgstr "Stuur %s" +msgstr "%s zenden" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1080 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091 msgid "Send Ctrl-Alt-Del" -msgstr "Stuur Ctrl-Alt-Del" +msgstr "Ctrl-Alt-Del zenden" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710 msgid "Send clipboard to server" -msgstr "" +msgstr "Klembord naar server zenden" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716 msgid "Send primary selection and cut buffer as clipboard" -msgstr "" +msgstr "Hoofdselectie en knipbuffer als klembord verzenden" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237 msgid "Services" -msgstr "Services" +msgstr "Diensten" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" -msgstr "SetDesktopSize mislukt: %d" +msgstr "### SetDesktopSize is mislukt: %d" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" @@ -577,24 +569,24 @@ msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239 msgid "Show All" -msgstr "Alles alten zien" +msgstr "Alles tonen" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" -msgstr "" +msgstr "Punt tonen als er geen cursor is" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182 #, c-format msgid "Size: %d x %d" -msgstr "" +msgstr "Grootte: %d x %d" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665 msgid "Standard VNC (insecure without encryption)" -msgstr "Standaard VNC (onveilig zonder encryptie)" +msgstr "Standaard VNC (onveilig zonder versleuteling)" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:618 msgid "TLS with X509 certificates" -msgstr "TLS met X509 certificaten" +msgstr "TLS met X509-certificaten" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:612 msgid "TLS with anonymous certificates" @@ -626,7 +618,7 @@ msgstr "Throughput %d kbit/s - volledige kleuren is nu %s" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210 msgid "TigerVNC Viewer" -msgstr "" +msgstr "TigerVNC-viewer" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80 #, c-format @@ -637,36 +629,40 @@ msgid "" "See http://www.tigervnc.org for information on TigerVNC." msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1004 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456 +#, c-format +msgid "Unable to create platform specific framebuffer: %s" +msgstr "" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015 #, c-format msgid "Unknown FLTK key code %d (0x%04x)" -msgstr "Onbekende FLTK toetscode %d (0x%04x)" +msgstr "Onbekende FLTK-toetscode %d (0x%04x)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:878 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889 #, c-format msgid "Unknown decimal separator: '%s'" msgstr "Onbekend decimaal scheidingsteken: '%s'" #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271 -#, fuzzy, c-format +#, c-format msgid "Unknown escape sequence at character %d" -msgstr "Onbekend decimaal scheidingsteken: '%s'" +msgstr "Onbekende stuurcodereeks bij teken %d" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430 #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437 -#, fuzzy msgid "Unknown rect encoding" -msgstr "encoding %s wordt nu gebruikt" +msgstr "Onbekende rect-codering" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429 #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436 #, c-format msgid "Unknown rect encoding %d" -msgstr "" +msgstr "Onbekende rect-codering %d" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671 msgid "Username and password (insecure without encryption)" -msgstr "Gebruikersnaam en wachtwoord (onveilig zonder encryptie)" +msgstr "Gebruikersnaam en wachtwoord (onveilig zonder versleuteling)" #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99 msgid "Username:" @@ -675,9 +671,10 @@ msgstr "Gebruikersnaam:" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573 #, c-format msgid "Using %s encoding" -msgstr "encoding %s wordt nu gebruikt" +msgstr "Codering %s wordt gebruikt" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:80 +# FIXME: what is filled in for %s? +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79 #, c-format msgid "Using default colormap and visual, %sdepth %d." msgstr "" @@ -685,39 +682,41 @@ msgstr "" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620 #, c-format msgid "Using pixel format %s" -msgstr "Pixel formaat %s wordt nu gebruikt" +msgstr "Pixel-indeling %s wordt gebruikt" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457 +msgid "Using platform independent framebuffer" +msgstr "Platform-onafhankelijk framebuffer wordt gebruikt" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42 msgid "VNC Viewer: Connection Details" -msgstr "VNC Viewer: Connectie Details" +msgstr "VNC-viewer: Verbindingsdetails" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57 -#, fuzzy msgid "VNC Viewer: Connection Options" -msgstr "VNC Viewer: Connectie Details" +msgstr "VNC-viewer: Verbindingsopties" #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86 #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96 msgid "VNC authentication" -msgstr "VNC authenticatie" +msgstr "VNC-authenticatie" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1176 -#, fuzzy +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187 msgid "VNC connection info" -msgstr "Connectie info..." +msgstr "VNC-verbindingsinfo" #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49 #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54 msgid "VNC server:" -msgstr "VNC server:" +msgstr "VNC-server:" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:533 msgid "Very low (8 colors)" -msgstr "Heel laag (8 kleuren)" +msgstr "heel laag (8 kleuren)" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698 msgid "View only (ignore mouse and keyboard)" -msgstr "" +msgstr "Alleen kijken (muis en toetsenbord negeren)" #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219 msgid "Yes" @@ -726,7 +725,7 @@ msgstr "Ja" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111 #, c-format msgid "connected to host %s port %d" -msgstr "Verbinden met host %s poort %d" +msgstr "verbonden met host %s poort %d" #: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563 msgid "disabled" @@ -738,15 +737,15 @@ msgstr "ingeschakeld" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556 msgid "level (1=fast, 6=best [4-6 are rarely useful])" -msgstr "level (1=snel, 6=best [4-6 zijn zelden bruikbaar])" +msgstr "niveau (1=snel, 6=best [4-6 zijn zelden nuttig])" #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569 msgid "quality (0=poor, 9=best)" msgstr "kwaliteit (0=slecht, 9=best)" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:63 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62 msgid "unable to create DIB section" -msgstr "" +msgstr "kan geen DIB-sectie aanmaken" #, fuzzy #~ msgid "" diff --git a/po/tigervnc.pot b/po/tigervnc.pot index 5df36392..5a918040 100644 --- a/po/tigervnc.pot +++ b/po/tigervnc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2014-09-22 11:15+0000\n" +"POT-Creation-Date: 2014-11-19 12:46+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -30,7 +30,7 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097 msgid "About TigerVNC viewer..." msgstr "" @@ -50,7 +50,7 @@ msgstr "" msgid "Allow JPEG compression:" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081 msgid "Alt" msgstr "" @@ -71,7 +71,7 @@ msgstr "" msgid "Bad Name/Value pair on line: %d in file: %s" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:92 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91 msgid "BitBlt failed" msgstr "" @@ -101,7 +101,7 @@ msgstr "" msgid "Connect" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1085 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096 msgid "Connection info..." msgstr "" @@ -144,6 +144,18 @@ msgstr "" msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "" +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58 +msgid "Could not create framebuffer bitmap" +msgstr "" + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52 +msgid "Could not create framebuffer device" +msgstr "" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107 +msgid "Could not create framebuffer image" +msgstr "" + #: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310 #, c-format msgid "Could not encode the parameter-value %s when writing to the Registry." @@ -156,11 +168,15 @@ msgid "" "small." msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:80 +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68 +msgid "Couldn't find suitable pixmap format" +msgstr "" + +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79 msgid "CreateCompatibleDC failed" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1068 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079 msgid "Ctrl" msgstr "" @@ -179,10 +195,14 @@ msgstr "" msgid "Desktop name: %.80s" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1088 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099 msgid "Dismiss menu" msgstr "" +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59 +msgid "Display lacks pixmap format for default depth" +msgstr "" + #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778 msgid "Enable full-screen mode over all monitors" msgstr "" @@ -252,24 +272,7 @@ msgstr "" msgid "Error(%d) writing %s(REG_SZ) to Registry." msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:50 -#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 -msgid "Error: Not enough memory for framebuffer" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:69 -msgid "Error: couldn't find suitable pixmap format" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:60 -msgid "Error: display lacks pixmap format for default depth" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:78 -msgid "Error: only true colour displays supported" -msgstr "" - -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1056 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067 msgid "Exit viewer" msgstr "" @@ -310,7 +313,7 @@ msgstr "" msgid "Full (all available colors)" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1059 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 msgid "Full screen" msgstr "" @@ -352,7 +355,7 @@ msgstr "" msgid "Invalid parameter name on line: %d in file: %s" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:797 +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805 msgid "Invalid screen layout computed for resize request!" msgstr "" @@ -399,7 +402,7 @@ msgstr "" msgid "Misc." msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1026 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037 #, c-format msgid "Multiple characters given for key code %d (0x%04x): '%s'" msgstr "" @@ -408,32 +411,32 @@ msgstr "" msgid "No" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:688 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:690 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:701 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:765 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:739 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:703 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "" @@ -444,16 +447,26 @@ msgstr "" msgid "None" msgstr "" +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:48 +#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:111 +msgid "Not enough memory for framebuffer" +msgstr "" + #: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220 #: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88 msgid "OK" msgstr "" +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77 +msgid "Only true colour displays supported" +msgstr "" + #: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74 msgid "Opening password file failed" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1084 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095 #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64 msgid "Options..." msgstr "" @@ -498,7 +511,7 @@ msgstr "" msgid "Quit" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1082 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093 msgid "Refresh screen" msgstr "" @@ -515,7 +528,7 @@ msgstr "" msgid "Resize remote session to the local window" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1062 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073 msgid "Resize window to session" msgstr "" @@ -536,16 +549,16 @@ msgstr "" msgid "Security method: %s" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:83 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82 msgid "SelectObject failed" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1075 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 #, c-format msgid "Send %s" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1080 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091 msgid "Send Ctrl-Alt-Del" msgstr "" @@ -632,12 +645,17 @@ msgid "" "See http://www.tigervnc.org for information on TigerVNC." msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1004 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456 +#, c-format +msgid "Unable to create platform specific framebuffer: %s" +msgstr "" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015 #, c-format msgid "Unknown FLTK key code %d (0x%04x)" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:878 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889 #, c-format msgid "Unknown decimal separator: '%s'" msgstr "" @@ -671,7 +689,7 @@ msgstr "" msgid "Using %s encoding" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:80 +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79 #, c-format msgid "Using default colormap and visual, %sdepth %d." msgstr "" @@ -681,6 +699,10 @@ msgstr "" msgid "Using pixel format %s" msgstr "" +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457 +msgid "Using platform independent framebuffer" +msgstr "" + #: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42 msgid "VNC Viewer: Connection Details" msgstr "" @@ -694,7 +716,7 @@ msgstr "" msgid "VNC authentication" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1176 +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187 msgid "VNC connection info" msgstr "" @@ -736,6 +758,6 @@ msgstr "" msgid "quality (0=poor, 9=best)" msgstr "" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:63 +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62 msgid "unable to create DIB section" msgstr "" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 00000000..731859fe --- /dev/null +++ b/po/uk.po @@ -0,0 +1,753 @@ +# Ukrainian translation of tigervnc +# Copyright (C) 2014 the TigerVNC Team (msgids) +# This file is distributed under the same license as the tigervnc package. +# +# Yuri Chornoivan <yurchor@ukr.net>, 2014. +msgid "" +msgstr "" +"Project-Id-Version: tigervnc 1.3.90\n" +"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" +"POT-Creation-Date: 2014-11-19 12:46+0000\n" +"PO-Revision-Date: 2014-11-22 10:05+0200\n" +"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 1.5\n" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194 +#, c-format +msgid "(server default %s)" +msgstr "(типовий для сервера %s)" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227 +msgid "About" +msgstr "Про програму" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103 +msgid "About TigerVNC Viewer" +msgstr "Про засіб перегляду TigerVNC" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097 +msgid "About TigerVNC viewer..." +msgstr "Про засіб перегляду TigerVNC…" + +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86 +msgid "About..." +msgstr "Про програму…" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704 +msgid "Accept clipboard from server" +msgstr "Приймати вміст буфера з сервера" + +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327 +msgid "Adjusting window size to avoid accidental full screen request" +msgstr "Коригувати розміри вікна, щоб уникнути випадкового запиту щодо переходу у повноекранний режим" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563 +msgid "Allow JPEG compression:" +msgstr "Дозволити стискання JPEG:" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081 +msgid "Alt" +msgstr "Alt" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:648 +msgid "Authentication" +msgstr "Розпізнавання" + +#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:89 +msgid "Authentication cancelled" +msgstr "Розпізнавання скасовано" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:437 +msgid "Auto select" +msgstr "Автовибір" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651 +#, c-format +msgid "Bad Name/Value pair on line: %d in file: %s" +msgstr "Помилкова пара назва/значення у рядку %d файла %s" + +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91 +msgid "BitBlt failed" +msgstr "Помилка BitBlt" + +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:91 +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:221 +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:83 +msgid "Cancel" +msgstr "Скасувати" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116 +msgid "CleanupSignalHandler called" +msgstr "Викликано CleanupSignalHandler" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222 +msgid "Close" +msgstr "Закрити" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499 +msgid "Color level" +msgstr "Рівень відтворення кольору" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421 +msgid "Compression" +msgstr "Стискання" + +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96 +msgid "Connect" +msgstr "З'єднатися" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096 +msgid "Connection info..." +msgstr "Дані щодо з’єднання…" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362 +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404 +#, c-format +msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small." +msgstr "Не вдалося перетворити назву параметра %s на wchar_t* під час читання даних з реєстру. Розмір буфера є надто малим." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302 +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340 +#, c-format +msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small." +msgstr "Не вдалося перетворити назву параметра %s на wchar_t* під час запису даних до реєстру. Розмір буфера є надто малим." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:318 +#, c-format +msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small." +msgstr "Не вдалося перетворити значення параметра %s на wchar_t* під час запису даних до реєстру. Розмір буфера є надто малим." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:381 +#, c-format +msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small." +msgstr "Не вдалося перетворити значення параметра %s на utf8 char* під час читання з реєстру. Буфер призначення є надто малим." + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256 +#, c-format +msgid "Could not create VNC home directory: %s." +msgstr "Не вдалося створити домашній каталог VNC: %s." + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251 +msgid "Could not create VNC home directory: can't obtain home directory path." +msgstr "Не вдалося створити домашній каталог VNC: не вдалося отримати шлях до домашнього каталогу." + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58 +msgid "Could not create framebuffer bitmap" +msgstr "Не вдалося створити растрові дані буфера кадрів" + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52 +msgid "Could not create framebuffer device" +msgstr "Не вдалося створити пристрій буфера кадрів" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107 +msgid "Could not create framebuffer image" +msgstr "Не вдалося створити зображення буфера кадрів" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310 +#, c-format +msgid "Could not encode the parameter-value %s when writing to the Registry." +msgstr "Не вдалося виконати кодування значення параметра %s під час запису до реєстру." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:613 +#, c-format +msgid "Could not read the line(%d) in the configuration file,the buffersize is to small." +msgstr "Не вдалося прочитати рядок %d у файлі налаштувань. Розмір буфера є надто малим." + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68 +msgid "Couldn't find suitable pixmap format" +msgstr "Не вдалося визначити відповідний формат зображення" + +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79 +msgid "CreateCompatibleDC failed" +msgstr "Помилка CreateCompatibleDC" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079 +msgid "Ctrl" +msgstr "Ctrl" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550 +msgid "Custom compression level:" +msgstr "Нетиповий рівень стискання:" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:283 +msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger." +msgstr "Декодування: розмір буфера призначення є надто малим. Його слід збільшити на 1 байт." + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172 +#, c-format +msgid "Desktop name: %.80s" +msgstr "Назва робочої станції: %.80s" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099 +msgid "Dismiss menu" +msgstr "Закрити меню" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59 +msgid "Display lacks pixmap format for default depth" +msgstr "Для дисплея не вказано формат у пікселях для типової глибини" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778 +msgid "Enable full-screen mode over all monitors" +msgstr "Увімкнути повноекранний режим на усіх моніторах" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:469 +msgid "Enabling continuous updates" +msgstr "Увімкнути неперервне оновлення" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:200 +#, c-format +msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +msgstr "Кодування зворотної похилої риски: розмір буфера призначення є надто малим. Його слід збільшити на понад %d байтів." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:214 +#, c-format +msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +msgstr "Кодування екранованої послідовності: розмір буфера призначення є надто малим. Його слід збільшити на понад %d байтів." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:234 +#, c-format +msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +msgstr "Кодування звичайного символу: розмір буфера призначення є надто малим. Його слід збільшити на понад %d байтів." + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595 +msgid "Encryption" +msgstr "Шифрування" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503 +#, c-format +msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" +msgstr "Помилка (%d) закриття ключа: Software\\TigerVNC\\vncviewer" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:455 +#, c-format +msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" +msgstr "Помилка (%d) закриття ключа: Software\\TigerVNC\\vncviewer" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:434 +#, c-format +msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer" +msgstr "Помилка (%d) під час створення ключа: Software\\TigerVNC\\vncviewer" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:471 +#, c-format +msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer" +msgstr "Помилка (%d) під час відкриття ключа: Software\\TigerVNC\\vncviewer" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:373 +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:415 +#, c-format +msgid "Error(%d) reading %s from Registry." +msgstr "Помилка (%d) під час читання %s з реєстру." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:348 +#, c-format +msgid "Error(%d) writing %d(REG_DWORD) to Registry." +msgstr "Помилка (%d) під час запису %d(REG_DWORD) до реєстру." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:326 +#, c-format +msgid "Error(%d) writing %s(REG_SZ) to Registry." +msgstr "Помилка (%d) під час запису %s(REG_SZ) до реєстру." + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067 +msgid "Exit viewer" +msgstr "Вийти із засобу перегляду" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588 +msgid "Failed to read configuration file, can't obtain home directory path." +msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602 +#, c-format +msgid "Failed to read configuration file, can't open %s" +msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося відкрити %s" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621 +#, c-format +msgid "Failed to read line %d in file %s" +msgstr "Не вдалося прочитати рядок %d у файлі %s" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528 +msgid "Failed to write configuration file, can't obtain home directory path." +msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542 +#, c-format +msgid "Failed to write configuration file, can't open %s" +msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося відкрити %s" + +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:526 +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:538 +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:551 +msgid "Failure grabbing keyboard" +msgstr "Помилка під час спроби перехопити клавіатуру" + +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:563 +msgid "Failure grabbing mouse" +msgstr "Помилка під час спроби перехопити мишу" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:512 +msgid "Full (all available colors)" +msgstr "Повністю (усі доступні кольори)" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 +msgid "Full screen" +msgstr "На весь екран" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770 +msgid "Full-screen mode" +msgstr "Повноекранний режим" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230 +msgid "Hide" +msgstr "Сховати" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:238 +msgid "Hide Others" +msgstr "Сховати решту" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177 +#, c-format +msgid "Host: %.80s port: %d" +msgstr "Вузол: %.80s порт: %d" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690 +msgid "Input" +msgstr "Введення" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510 +msgid "Internal FLTK error. Exiting." +msgstr "Внутрішня помилка FLTK. Завершуємо роботу." + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384 +msgid "Invalid SetColourMapEntries from server!" +msgstr "Некоректне значення SetColourMapEntries від сервера!" + +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:106 +msgid "Invalid geometry specified!" +msgstr "Вказано некоректні геометричні параметри!" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708 +#, c-format +msgid "Invalid parameter name on line: %d in file: %s" +msgstr "Некоректна назва параметра у рядку %d файла %s" + +#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805 +msgid "Invalid screen layout computed for resize request!" +msgstr "Результати обчислення компонування вікна для запиту щодо зміни розмірів є некоректними!" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204 +#, c-format +msgid "Last used encoding: %s" +msgstr "Останнє використане кодування: %s" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:631 +#, c-format +msgid "" +"Line 1 in file %s\n" +"must contain the TigerVNC configuration file identifier string:\n" +"\"%s\"" +msgstr "" +"Рядок 1 у файлі %s\n" +"має містити рядок ідентифікатор файла налаштувань TigerVNC:\n" +"«%s»" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:209 +#, c-format +msgid "Line speed estimate: %d kbit/s" +msgstr "Оцінка швидкості лінії: %d кбіт/с" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:478 +#, c-format +msgid "Listening on port %d\n" +msgstr "Очікуємо на дані на порту %d\n" + +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:69 +msgid "Load..." +msgstr "Завантажити…" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:526 +msgid "Low (64 colors)" +msgstr "Низький (64 кольори)" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519 +msgid "Medium (256 colors)" +msgstr "Середній (256 кольори)" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725 +msgid "Menu key" +msgstr "Клавіша меню" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791 +msgid "Misc." +msgstr "Інше" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037 +#, c-format +msgid "Multiple characters given for key code %d (0x%04x): '%s'" +msgstr "З клавішею з кодом %d (0x%04x) пов’язано декілька символів: «%s»" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218 +msgid "No" +msgstr "Ні" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691 +#, c-format +msgid "No scan code for extended virtual key 0x%02x" +msgstr "Немає коду сканування для віртуальної клавіші розширення 0x%02x" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693 +#, c-format +msgid "No scan code for virtual key 0x%02x" +msgstr "Немає коду сканування для віртуальної клавіші 0x%02x" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710 +#, c-format +msgid "No symbol for extended virtual key 0x%02x" +msgstr "Немає символу для віртуальної клавіші розширення 0x%02x" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776 +#, c-format +msgid "No symbol for key code %d (in the current state)" +msgstr "Немає символу для клавіші з кодом %d (у поточному стані)" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750 +#, c-format +msgid "No symbol for key code 0x%02x (in the current state)" +msgstr "Немає символу для клавіші з кодом 0x%02x (у поточному стані)" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712 +#, c-format +msgid "No symbol for virtual key 0x%02x" +msgstr "Немає символу для віртуальної клавіші 0x%02x" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:606 +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:659 +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:727 +msgid "None" +msgstr "Немає" + +#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:48 +#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:111 +msgid "Not enough memory for framebuffer" +msgstr "Недостатньо пам’яті для буфера кадрів" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220 +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88 +msgid "OK" +msgstr "Гаразд" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77 +msgid "Only true colour displays supported" +msgstr "Передбачено підтримку лише дисплеїв з True Color" + +#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74 +msgid "Opening password file failed" +msgstr "Спроба відкриття файла паролів зазнала невдачі" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095 +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64 +msgid "Options..." +msgstr "Параметри…" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463 +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464 +msgid "Parameters -listen and -via are incompatible" +msgstr "Параметри -listen і -via є несумісними" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722 +msgid "Pass system keys directly to server (full screen)" +msgstr "Передавати натискання системних клавіш безпосередньо до сервера (повноекранний режим)" + +#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:87 +#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:102 +msgid "Password:" +msgstr "Пароль:" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625 +msgid "Path to X509 CA certificate" +msgstr "Шлях до сертифіката CA X509" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632 +msgid "Path to X509 CRL file" +msgstr "Шлях до файла CRL X509" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188 +#, c-format +msgid "Pixel format: %s" +msgstr "Формат у пікселях: %s" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449 +msgid "Preferred encoding" +msgstr "Бажане кодування" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214 +#, c-format +msgid "Protocol version: %d.%d" +msgstr "Версія протоколу: %d.%d" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233 +msgid "Quit" +msgstr "Вийти" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093 +msgid "Refresh screen" +msgstr "Оновити вміст екрана" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199 +#, c-format +msgid "Requested encoding: %s" +msgstr "Запит щодо кодування: %s" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749 +msgid "Resize remote session on connect" +msgstr "Змінювати розміри віддаленого сеансу під час з’єднання" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762 +msgid "Resize remote session to the local window" +msgstr "Змінювати розміри віддаленого сеансу відповідно до локального вікна" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073 +msgid "Resize window to session" +msgstr "Змінити розміри вікна відповідно до сеансу" + +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74 +msgid "Save As..." +msgstr "Зберегти як…" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:741 +msgid "Screen" +msgstr "Екран" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:580 +msgid "Security" +msgstr "Захист" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219 +#, c-format +msgid "Security method: %s" +msgstr "Метод захисту: %s" + +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82 +msgid "SelectObject failed" +msgstr "Помилка SelectObject" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 +#, c-format +msgid "Send %s" +msgstr "Надіслати %s" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091 +msgid "Send Ctrl-Alt-Del" +msgstr "Надіслати Ctrl-Alt-Del" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710 +msgid "Send clipboard to server" +msgstr "Надіслати вміст буфера обміну до сервера" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716 +msgid "Send primary selection and cut buffer as clipboard" +msgstr "Надіслати основне позначене і вирізати буфер до буфера обміну" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237 +msgid "Services" +msgstr "Служби" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:319 +#, c-format +msgid "SetDesktopSize failed: %d" +msgstr "Помилка SetDesktopSize: %d" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:799 +msgid "Shared (don't disconnect other viewers)" +msgstr "Спільний (не від’єднувати інші засоби перегляду)" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239 +msgid "Show All" +msgstr "Показати всі" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805 +msgid "Show dot when no cursor" +msgstr "Показувати крапку, якщо немає курсора" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182 +#, c-format +msgid "Size: %d x %d" +msgstr "Розмір: %d x %d" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665 +msgid "Standard VNC (insecure without encryption)" +msgstr "Стандартний VNC (без захисту і шифрування)" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:618 +msgid "TLS with X509 certificates" +msgstr "TLS з сертифікатами X509" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:612 +msgid "TLS with anonymous certificates" +msgstr "TLS із анонімними сертифікатами" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:448 +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:497 +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:561 +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:701 +#, c-format +msgid "The parameterArray contains a object of a invalid type at line %d." +msgstr "Змінна parameterArray містить об’єкт некоректного типу у рядку %d." + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:664 +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:680 +#, c-format +msgid "The value of the parameter %s on line %d in file %s is invalid." +msgstr "Значення параметра %s у рядку %d файла %s є некоректним." + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:539 +#, c-format +msgid "Throughput %d kbit/s - changing to quality %d" +msgstr "Пропускна здатність %d кбіт/с — змінюємо якість на %d" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:561 +#, c-format +msgid "Throughput %d kbit/s - full color is now %s" +msgstr "Пропускна здатність %d кбіт/с — змінюємо колірність на %s" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210 +msgid "TigerVNC Viewer" +msgstr "Засіб перегляду TigerVNC" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80 +#, c-format +msgid "" +"TigerVNC Viewer %d-bit v%s\n" +"Built on: %s\n" +"Copyright (C) 1999-%d TigerVNC Team and many others (see README.txt)\n" +"See http://www.tigervnc.org for information on TigerVNC." +msgstr "" +"Засіб перегляду TigerVNC, %d-бітовий, v%s\n" +"Зібрано: %s\n" +"Авторські права належать команді TigerVNC та багатьом іншим (див. файл README.txt), 1999–%d\n" +"Докладніший опис TigerVNC можна знайти на http://www.tigervnc.org." + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456 +#, c-format +msgid "Unable to create platform specific framebuffer: %s" +msgstr "Не вдалося створити специфічний для платформи буфер кадрів: %s" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015 +#, c-format +msgid "Unknown FLTK key code %d (0x%04x)" +msgstr "Невідомий код клавіші FLTK, %d (0x%04x)" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889 +#, c-format +msgid "Unknown decimal separator: '%s'" +msgstr "Невідомий десятковий роздільник: «%s»" + +#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271 +#, c-format +msgid "Unknown escape sequence at character %d" +msgstr "Невідома послідовність екранування на позиції %d" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430 +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437 +msgid "Unknown rect encoding" +msgstr "Невідоме кодування rect" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429 +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436 +#, c-format +msgid "Unknown rect encoding %d" +msgstr "Невідоме кодування rect, %d" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671 +msgid "Username and password (insecure without encryption)" +msgstr "Ім’я користувача і пароль (без захисту і шифрування)" + +#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99 +msgid "Username:" +msgstr "Користувач:" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573 +#, c-format +msgid "Using %s encoding" +msgstr "Використовуємо кодування %s" + +#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79 +#, c-format +msgid "Using default colormap and visual, %sdepth %d." +msgstr "Використовуємо типову карту кольорів і відтворення, %sглибина %d." + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620 +#, c-format +msgid "Using pixel format %s" +msgstr "Використовуємо формат у пікселях %s" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457 +msgid "Using platform independent framebuffer" +msgstr "Використовуємо незалежний від платформи буфер кадрів" + +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42 +msgid "VNC Viewer: Connection Details" +msgstr "Засіб перегляду VNC: подробиці з’єднання" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57 +msgid "VNC Viewer: Connection Options" +msgstr "Засіб перегляду VNC: параметри з’єднання" + +#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86 +#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96 +msgid "VNC authentication" +msgstr "Розпізнавання VNC" + +#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187 +msgid "VNC connection info" +msgstr "Дані щодо з’єднання VNC" + +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49 +#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54 +msgid "VNC server:" +msgstr "Сервер VNC:" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:533 +msgid "Very low (8 colors)" +msgstr "Дуже низький (8 кольорів)" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698 +msgid "View only (ignore mouse and keyboard)" +msgstr "Лише перегляд (ігнорувати сигнали від миші і клавіатури)" + +#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219 +msgid "Yes" +msgstr "Так" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111 +#, c-format +msgid "connected to host %s port %d" +msgstr "з’єднано з вузлом %s, порт %d" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563 +msgid "disabled" +msgstr "вимкнено" + +#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563 +msgid "enabled" +msgstr "увімкнено" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556 +msgid "level (1=fast, 6=best [4-6 are rarely useful])" +msgstr "рівень (1=швидко, 6=найякісніше [4-6 використовувати не варто])" + +#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569 +msgid "quality (0=poor, 9=best)" +msgstr "якість (0=найгірша, 9=найкраща)" + +#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62 +msgid "unable to create DIB section" +msgstr "не вдалося створити розділ DIB" diff --git a/unix/vncpasswd/vncpasswd.cxx b/unix/vncpasswd/vncpasswd.cxx index 7ba0b225..16c925ee 100644 --- a/unix/vncpasswd/vncpasswd.cxx +++ b/unix/vncpasswd/vncpasswd.cxx @@ -81,6 +81,36 @@ static int encrypt_pipe() { else return 1; } +static ObfuscatedPasswd* readpassword() { + while (true) { + PlainPasswd passwd(getpassword("Password:")); + if (!passwd.buf) { + perror("getpassword error"); + exit(1); + } + if (strlen(passwd.buf) < 6) { + if (strlen(passwd.buf) == 0) { + fprintf(stderr,"Password not changed\n"); + exit(1); + } + fprintf(stderr,"Password must be at least 6 characters - try again\n"); + continue; + } + + PlainPasswd passwd2(getpassword("Verify:")); + if (!passwd2.buf) { + perror("getpass error"); + exit(1); + } + if (strcmp(passwd.buf, passwd2.buf) != 0) { + fprintf(stderr,"Passwords don't match - try again\n"); + continue; + } + + return new ObfuscatedPasswd(passwd); + } +} + int main(int argc, char** argv) { prog = argv[0]; @@ -113,28 +143,13 @@ int main(int argc, char** argv) } while (true) { - PlainPasswd passwd(getpassword("Password:")); - if (!passwd.buf) { - perror("getpassword error"); - exit(1); - } - if (strlen(passwd.buf) < 6) { - if (strlen(passwd.buf) == 0) { - fprintf(stderr,"Password not changed\n"); - exit(1); - } - fprintf(stderr,"Password must be at least 6 characters - try again\n"); - continue; - } + ObfuscatedPasswd* obfuscated = readpassword(); + ObfuscatedPasswd* obfuscatedReadOnly = 0; - PlainPasswd passwd2(getpassword("Verify:")); - if (!passwd2.buf) { - perror("getpass error"); - exit(1); - } - if (strcmp(passwd.buf, passwd2.buf) != 0) { - fprintf(stderr,"Passwords don't match - try again\n"); - continue; + fprintf(stderr, "Would you like to enter a view-only password (y/n)? "); + char yesno[3]; + if (fgets(yesno, 3, stdin) != NULL && (yesno[0] == 'y' || yesno[0] == 'Y')) { + obfuscatedReadOnly = readpassword(); } FILE* fp = fopen(fname,"w"); @@ -144,13 +159,18 @@ int main(int argc, char** argv) } chmod(fname, S_IRUSR|S_IWUSR); - ObfuscatedPasswd obfuscated(passwd); - - if (fwrite(obfuscated.buf, obfuscated.length, 1, fp) != 1) { + if (fwrite(obfuscated->buf, obfuscated->length, 1, fp) != 1) { fprintf(stderr,"Writing to %s failed\n",fname); exit(1); } + if (obfuscatedReadOnly) { + if (fwrite(obfuscatedReadOnly->buf, obfuscatedReadOnly->length, 1, fp) != 1) { + fprintf(stderr,"Writing to %s failed\n",fname); + exit(1); + } + } + fclose(fp); return 0; diff --git a/unix/xserver/hw/vnc/xvnc.cc b/unix/xserver/hw/vnc/xvnc.cc index 2ef888dd..0fd7b0cb 100644 --- a/unix/xserver/hw/vnc/xvnc.cc +++ b/unix/xserver/hw/vnc/xvnc.cc @@ -98,7 +98,7 @@ extern "C" { #define Xfree free #endif -#define XVNCVERSION "TigerVNC 1.3.80" +#define XVNCVERSION "TigerVNC 1.4.80" #define XVNCCOPYRIGHT ("Copyright (C) 1999-2013 TigerVNC Team and many others (see README.txt)\n" \ "See http://www.tigervnc.org for information on TigerVNC.\n") diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx index 23f07b4d..cf4f31b9 100644 --- a/vncviewer/CConn.cxx +++ b/vncviewer/CConn.cxx @@ -183,12 +183,15 @@ const char *CConn::connectionInfo() strcat(infoText, scratch); strcat(infoText, "\n"); + // TRANSLATORS: Will be filled in with a string describing the + // protocol pixel format in a fairly language neutral way cp.pf().print(pfStr, 100); snprintf(scratch, sizeof(scratch), _("Pixel format: %s"), pfStr); strcat(infoText, scratch); strcat(infoText, "\n"); + // TRANSLATORS: Similar to the earlier "Pixel format" string serverPF.print(pfStr, 100); snprintf(scratch, sizeof(scratch), _("(server default %s)"), pfStr); @@ -426,15 +429,16 @@ void CConn::dataRect(const Rect& r, int encoding) lastServerEncoding = encoding; if (!Decoder::supported(encoding)) { - vlog.error(_("Unknown rect encoding %d"), encoding); - throw Exception(_("Unknown rect encoding")); + // TRANSLATORS: Refers to a VNC protocol encoding type + vlog.error(_("Unknown encoding %d"), encoding); + throw Exception(_("Unknown encoding")); } if (!decoders[encoding]) { decoders[encoding] = Decoder::createDecoder(encoding, this); if (!decoders[encoding]) { - vlog.error(_("Unknown rect encoding %d"), encoding); - throw Exception(_("Unknown rect encoding")); + vlog.error(_("Unknown encoding %d"), encoding); + throw Exception(_("Unknown encoding")); } } decoders[encoding]->readRect(r, desktop->getFramebuffer()); diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx index 3579618e..423d2df3 100644 --- a/vncviewer/DesktopWindow.cxx +++ b/vncviewer/DesktopWindow.cxx @@ -658,12 +658,20 @@ void DesktopWindow::maximizeWindow() void DesktopWindow::handleDesktopSize() { - int width, height; + if (desktopSize.hasBeenSet()) { + int width, height; - if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2) - return; + // An explicit size has been requested + + if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2) + return; - remoteResize(width, height); + remoteResize(width, height); + } else if (::remoteResize) { + // No explicit size, but remote resizing is on so make sure it + // matches whatever size the window ended up being + remoteResize(w(), h()); + } } diff --git a/vncviewer/FLTKPixelBuffer.cxx b/vncviewer/FLTKPixelBuffer.cxx index 1eafe103..ab116d1a 100644 --- a/vncviewer/FLTKPixelBuffer.cxx +++ b/vncviewer/FLTKPixelBuffer.cxx @@ -30,7 +30,7 @@ FLTKPixelBuffer::FLTKPixelBuffer(int width, int height) : { data = new rdr::U8[width * height * format.bpp/8]; if (data == NULL) - throw rfb::Exception(_("Error: Not enough memory for framebuffer")); + throw rfb::Exception(_("Not enough memory for framebuffer")); } FLTKPixelBuffer::~FLTKPixelBuffer() diff --git a/vncviewer/X11PixelBuffer.cxx b/vncviewer/X11PixelBuffer.cxx index a7794277..7e89a60b 100644 --- a/vncviewer/X11PixelBuffer.cxx +++ b/vncviewer/X11PixelBuffer.cxx @@ -56,6 +56,8 @@ static PixelFormat display_pf() if (format[i].depth == fl_visual->depth) break; if (i == nformats) + // TRANSLATORS: "pixmap" is an X11 concept and may not be suitable + // to translate. throw rfb::Exception(_("Display lacks pixmap format for default depth")); switch (format[i].bits_per_pixel) { @@ -65,6 +67,8 @@ static PixelFormat display_pf() bpp = format[i].bits_per_pixel; break; default: + // TRANSLATORS: "pixmap" is an X11 concept and may not be suitable + // to translate. throw rfb::Exception(_("Couldn't find suitable pixmap format")); } @@ -76,9 +80,7 @@ static PixelFormat display_pf() if (!trueColour) throw rfb::Exception(_("Only true colour displays supported")); - vlog.info(_("Using default colormap and visual, %sdepth %d."), - (fl_visual->c_class == TrueColor) ? "TrueColor, " : - ((fl_visual->c_class == PseudoColor) ? "PseudoColor, " : ""), + vlog.info(_("Using default colormap and visual, TrueColor, depth %d."), fl_visual->depth); redShift = ffs(fl_visual->red_mask) - 1; diff --git a/vncviewer/parameters.cxx b/vncviewer/parameters.cxx index 9a164813..c975e99a 100644 --- a/vncviewer/parameters.cxx +++ b/vncviewer/parameters.cxx @@ -43,6 +43,7 @@ #include <stdio.h> #include <string.h> #include <limits.h> +#include <errno.h> #include "i18n.h" @@ -142,9 +143,9 @@ BoolParameter fullscreenSystemKeys("FullscreenSystemKeys", StringParameter via("via", "Gateway to tunnel via", ""); #endif -const char* IDENTIFIER_STRING = "TigerVNC Configuration file Version 1.0"; +static const char* IDENTIFIER_STRING = "TigerVNC Configuration file Version 1.0"; -VoidParameter* parameterArray[] = { +static VoidParameter* parameterArray[] = { #ifdef HAVE_GNUTLS &CSecurityTLS::X509CA, &CSecurityTLS::X509CRL, @@ -184,7 +185,7 @@ static struct { } replaceMap[] = {'\n', 'n', '\r', 'r'}; -bool encodeValue(const char* val, char* dest, size_t destSize) { +static bool encodeValue(const char* val, char* dest, size_t destSize) { bool normalCharacter = true; size_t pos = 0; @@ -196,12 +197,8 @@ bool encodeValue(const char* val, char* dest, size_t destSize) { strncpy(dest+pos, "\\\\", 2); pos++; - if (pos >= destSize) { - vlog.error(_("Encoding backslash: The size of the buffer dest " - "is to small, it needs to be more than %d bytes bigger."), - (destSize - 1 - i)); + if (pos >= destSize) return false; - } } else { @@ -210,12 +207,8 @@ bool encodeValue(const char* val, char* dest, size_t destSize) { if (val[i] == replaceMap[j].first) { dest[pos] = '\\'; pos++; - if (pos >= destSize) { - vlog.error(_("Encoding escape sequence: The size of the buffer " - "dest is to small, it needs to be more than %d bytes " - "bigger."), (destSize - 1 - i)); + if (pos >= destSize) return false; - } dest[pos] = replaceMap[j].second; normalCharacter = false; @@ -230,13 +223,8 @@ bool encodeValue(const char* val, char* dest, size_t destSize) { normalCharacter = true; // Reset for next loop pos++; - if (pos >= destSize) { - vlog.error(_("Encoding normal character: The size of the buffer dest " - "is to small, it needs to be more than %d bytes bigger."), - (destSize - 1 - i)); + if (pos >= destSize) return false; - } - } dest[pos] = '\0'; @@ -244,7 +232,7 @@ bool encodeValue(const char* val, char* dest, size_t destSize) { } -bool decodeValue(const char* val, char* dest, size_t destSize) { +static bool decodeValue(const char* val, char* dest, size_t destSize) { size_t pos = 0; bool escapedCharacter = false; @@ -268,7 +256,6 @@ bool decodeValue(const char* val, char* dest, size_t destSize) { dest[pos] = val[i]; i++; } else { - vlog.error(_("Unknown escape sequence at character %d"), i); return false; } } @@ -280,8 +267,6 @@ bool decodeValue(const char* val, char* dest, size_t destSize) { escapedCharacter = false; // Reset for next loop pos++; if (pos >= destSize) { - vlog.error(_("Decoding: The size of the buffer dest is to small, " - "it needs to be 1 byte bigger.")); return false; } } @@ -292,44 +277,40 @@ bool decodeValue(const char* val, char* dest, size_t destSize) { #ifdef _WIN32 -void setKeyString(const char *_name, const char *_value, HKEY* hKey) { +static void setKeyString(const char *_name, const char *_value, HKEY* hKey) { const DWORD buffersize = 256; wchar_t name[buffersize]; unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize); if (size >= buffersize) { - vlog.error(_("Could not convert the parameter-name %s to wchar_t* when " - "writing to the Registry, the buffersize is to small."), - _name); + vlog.error(_("The name of the parameter %s was too large to write to the registry"), _name); return; } char encodingBuffer[buffersize]; if (!encodeValue(_value, encodingBuffer, buffersize)) { - vlog.error(_("Could not encode the parameter-value %s when " - "writing to the Registry."), _value); + vlog.error(_("The parameter %s was too large to write to the registry"), _name); return; } wchar_t value[buffersize]; size = fl_utf8towc(encodingBuffer, strlen(encodingBuffer)+1, value, buffersize); if (size >= buffersize) { - vlog.error(_("Could not convert the parameter-value %s to wchar_t* when " - "writing to the Registry, the buffersize is to small."), - _value); + vlog.error(_("The parameter %s was too large to write to the registry"), _name); return; } LONG res = RegSetValueExW(*hKey, name, 0, REG_SZ, (BYTE*)&value, (wcslen(value)+1)*2); if (res != ERROR_SUCCESS) { - vlog.error(_("Error(%d) writing %s(REG_SZ) to Registry."), res, _value); + vlog.error(_("Failed to write parameter %s of type %s to the registry: %d"), + _name, "REG_SZ", res); return; } } -void setKeyInt(const char *_name, const int _value, HKEY* hKey) { +static void setKeyInt(const char *_name, const int _value, HKEY* hKey) { const DWORD buffersize = 256; wchar_t name[buffersize]; @@ -337,21 +318,20 @@ void setKeyInt(const char *_name, const int _value, HKEY* hKey) { unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize); if (size >= buffersize) { - vlog.error(_("Could not convert the parameter-name %s to wchar_t* when " - "writing to the Registry, the buffersize is to small."), - _name); + vlog.error(_("The name of the parameter %s was too large to write to the registry"), _name); return; } LONG res = RegSetValueExW(*hKey, name, 0, REG_DWORD, (BYTE*)&value, sizeof(DWORD)); if (res != ERROR_SUCCESS) { - vlog.error(_("Error(%d) writing %d(REG_DWORD) to Registry."), res, _value); + vlog.error(_("Failed to write parameter %s of type %s to the registry: %d"), + _name, "REG_DWORD", res); return; } } -bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) { +static bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) { DWORD buffersize = 256; WCHAR value[destSize]; @@ -359,9 +339,7 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) { unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize); if (size >= buffersize) { - vlog.error(_("Could not convert the parameter-name %s to wchar_t* when " - "reading from the Registry, the buffersize is to small."), - _name); + vlog.error(_("The name of the parameter %s was too large to read from the registry"), _name); return false; } @@ -370,7 +348,8 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) { if (res == ERROR_FILE_NOT_FOUND) { // The value does not exist, defaults will be used. } else { - vlog.error(_("Error(%d) reading %s from Registry."), res, _name); + vlog.error(_("Failed to read parameter %s from the registry: %d"), + _name, res); } return false; } @@ -378,9 +357,7 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) { char utf8val[destSize]; size = fl_utf8fromwc(utf8val, sizeof(utf8val), value, wcslen(value)+1); if (size >= sizeof(utf8val)) { - vlog.error(_("Could not convert the parameter-value for %s to utf8 " - "char* when reading from the Registry, the buffer dest is " - "to small."), _name); + vlog.error(_("The parameter %s was too large to read from the registry"), _name); return false; } const char *ret = utf8val; @@ -392,7 +369,7 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) { } -bool getKeyInt(const char* _name, int* dest, HKEY* hKey) { +static bool getKeyInt(const char* _name, int* dest, HKEY* hKey) { const DWORD buffersize = 256; DWORD dwordsize = sizeof(DWORD); @@ -401,9 +378,7 @@ bool getKeyInt(const char* _name, int* dest, HKEY* hKey) { unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize); if (size >= buffersize) { - vlog.error(_("Could not convert the parameter-name %s to wchar_t* when " - "reading from the Registry, the buffersize is to small."), - _name); + vlog.error(_("The name of the parameter %s was too large to read from the registry"), _name); return false; } @@ -412,7 +387,8 @@ bool getKeyInt(const char* _name, int* dest, HKEY* hKey) { if (res == ERROR_FILE_NOT_FOUND) { // The value does not exist, defaults will be used. } else { - vlog.error(_("Error(%d) reading %s from Registry."), res, _name); + vlog.error(_("Failed to read parameter %s from the registry: %d"), + _name, res); } return false; } @@ -422,7 +398,7 @@ bool getKeyInt(const char* _name, int* dest, HKEY* hKey) { } -void saveToReg(const char* servername) { +static void saveToReg(const char* servername) { HKEY hKey; @@ -431,7 +407,7 @@ void saveToReg(const char* servername) { REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); if (res != ERROR_SUCCESS) { - vlog.error(_("Error(%d) creating key: Software\\TigerVNC\\vncviewer"), res); + vlog.error(_("Failed to create registry key: %d"), res); return; } @@ -445,19 +421,19 @@ void saveToReg(const char* servername) { } else if (dynamic_cast<BoolParameter*>(parameterArray[i]) != NULL) { setKeyInt(parameterArray[i]->getName(), (int)*(BoolParameter*)parameterArray[i], &hKey); } else { - vlog.info(_("The parameterArray contains a object of a invalid type " - "at line %d."), i); + vlog.error(_("Unknown parameter type for parameter %s"), + parameterArray[i]->getName()); } } res = RegCloseKey(hKey); if (res != ERROR_SUCCESS) { - vlog.error(_("Error(%d) closing key: Software\\TigerVNC\\vncviewer"), res); + vlog.error(_("Failed to close registry key: %d"), res); } } -char* loadFromReg() { +static char* loadFromReg() { HKEY hKey; @@ -468,7 +444,7 @@ char* loadFromReg() { if (res == ERROR_FILE_NOT_FOUND) { // The key does not exist, defaults will be used. } else { - vlog.error(_("Error(%d) opening key: Software\\TigerVNC\\vncviewer"), res); + vlog.error(_("Failed to open registry key: %d"), res); } return NULL; } @@ -494,13 +470,14 @@ char* loadFromReg() { if (getKeyInt(parameterArray[i]->getName(), &intValue, &hKey)) ((BoolParameter*)parameterArray[i])->setParam(intValue); } else { - vlog.info(_("The parameterArray contains a object of a invalid type at line %d."), i); + vlog.error(_("Unknown parameter type for parameter %s"), + parameterArray[i]->getName()); } } res = RegCloseKey(hKey); if (res != ERROR_SUCCESS){ - vlog.error(_("Error(%d) closing key: Software\\TigerVNC\\vncviewer"), res); + vlog.error(_("Failed to close registry key: %d"), res); } return servername; @@ -539,7 +516,8 @@ void saveViewerParameters(const char *filename, const char *servername) { FILE* f = fopen(filepath, "w+"); if (!f) { snprintf(write_error, sizeof(write_error), - _("Failed to write configuration file, can't open %s"), filepath); + _("Failed to write configuration file, can't open %s: %s"), + filepath, strerror(errno)); throw Exception(write_error); } @@ -558,8 +536,8 @@ void saveViewerParameters(const char *filename, const char *servername) { } else if (dynamic_cast<BoolParameter*>(parameterArray[i]) != NULL) { fprintf(f, "%s=%d\n", ((BoolParameter*)parameterArray[i])->getName(), (int)*(BoolParameter*)parameterArray[i]); } else { - vlog.info(_("The parameterArray contains a object of a invalid type " - "at line %d."), i); + vlog.error(_("Unknown parameter type for parameter %s"), + parameterArray[i]->getName()); } } fclose(f); @@ -599,7 +577,8 @@ char* loadViewerParameters(const char *filename) { if (!filename) return NULL; // Use defaults. snprintf(readError, sizeof(readError), - _("Failed to read configuration file, can't open %s"), filepath); + _("Failed to read configuration file, can't open %s: %s"), + filepath, strerror(errno)); throw Exception(readError); } @@ -610,15 +589,17 @@ char* loadViewerParameters(const char *filename) { lineNr++; if (!fgets(line, sizeof(line), f)) { if (line[sizeof(line) -1] != '\0') { - vlog.error(_("Could not read the line(%d) in the configuration file," - "the buffersize is to small."), lineNr); - return NULL; + snprintf(readError, sizeof(readError), + _("Failed to read line %d in file %s: %s"), + lineNr, filepath, _("Line too long")); + throw Exception(readError); } if (feof(f)) break; snprintf(readError, sizeof(readError), - _("Failed to read line %d in file %s"), lineNr, filepath); + _("Failed to read line %d in file %s: %s"), + lineNr, filepath, strerror(errno)); throw Exception(readError); } @@ -628,9 +609,8 @@ char* loadViewerParameters(const char *filename) { continue; } else { snprintf(readError, sizeof(readError), - _("Line 1 in file %s\nmust contain the TigerVNC " - "configuration file identifier string:\n" - "\"%s\""), filepath, IDENTIFIER_STRING); + _("Configuration file %s is in an invalid format"), + filepath); throw Exception(readError); } } @@ -648,8 +628,8 @@ char* loadViewerParameters(const char *filename) { // Find the parameter value char *value = strchr(line, '='); if (value == NULL) { - vlog.info(_("Bad Name/Value pair on line: %d in file: %s"), - lineNr, filepath); + vlog.error(_("Failed to read line %d in file %s: %s"), + lineNr, filepath, _("Invalid format")); continue; } *value = '\0'; // line only contains the parameter name below. @@ -661,8 +641,8 @@ char* loadViewerParameters(const char *filename) { if (strcasecmp(line, "ServerName") == 0) { if(!decodeValue(value, decodingBuffer, sizeof(decodingBuffer))) { - vlog.info(_("The value of the parameter %s on line %d in file %s " - "is invalid."), line, lineNr, filepath); + vlog.error(_("Failed to read line %d in file %s: %s"), + lineNr, filepath, _("Invalid format or too large value")); continue; } snprintf(servername, sizeof(decodingBuffer), "%s", decodingBuffer); @@ -677,8 +657,8 @@ char* loadViewerParameters(const char *filename) { if (strcasecmp(line, ((StringParameter*)parameterArray[i])->getName()) == 0) { if(!decodeValue(value, decodingBuffer, sizeof(decodingBuffer))) { - vlog.info(_("The value of the parameter %s on line %d in file %s " - "is invalid."), line, lineNr, filepath); + vlog.error(_("Failed to read line %d in file %s: %s"), + lineNr, filepath, _("Invalid format or too large value")); continue; } ((StringParameter*)parameterArray[i])->setParam(decodingBuffer); @@ -698,15 +678,15 @@ char* loadViewerParameters(const char *filename) { } } else { - vlog.info(_("The parameterArray contains a object of a invalid type " - "at line %d."), lineNr); + vlog.error(_("Unknown parameter type for parameter %s"), + parameterArray[i]->getName()); } } } if (invalidParameterName) - vlog.info(_("Invalid parameter name on line: %d in file: %s"), - lineNr, filepath); + vlog.info(_("Unknown parameter %s on line %d in file %s"), + line, lineNr, filepath); } fclose(f); f=0; diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx index cf52de5b..7fb712ab 100644 --- a/vncviewer/vncviewer.cxx +++ b/vncviewer/vncviewer.cxx @@ -113,7 +113,7 @@ static void CleanupSignalHandler(int sig) { // CleanupSignalHandler allows C++ object cleanup to happen because it calls // exit() rather than the default which is to abort. - vlog.info(_("CleanupSignalHandler called")); + vlog.info(_("Termination signal %d has been received. TigerVNC Viewer will now exit."), sig); exit(1); } @@ -460,6 +460,8 @@ int main(int argc, char** argv) #ifndef WIN32 /* Specifying -via and -listen together is nonsense */ if (listenMode && strlen(via.getValueStr()) > 0) { + // TRANSLATORS: "Parameters" are command line arguments, or settings + // from a file or the Windows registry. vlog.error(_("Parameters -listen and -via are incompatible")); fl_alert(_("Parameters -listen and -via are incompatible")); exit_vncviewer(); diff --git a/win/vncconfig/Authentication.h b/win/vncconfig/Authentication.h index 534646c5..c2aba91e 100644 --- a/win/vncconfig/Authentication.h +++ b/win/vncconfig/Authentication.h @@ -92,7 +92,8 @@ namespace rfb { static bool haveVncPassword() { - PlainPasswd password(SSecurityVncAuth::vncAuthPasswd.getVncAuthPasswd()); + PlainPasswd password, passwordReadOnly; + SSecurityVncAuth::vncAuthPasswd.getVncAuthPasswd(&password, &passwordReadOnly); return password.buf && strlen(password.buf) != 0; } |