diff options
author | Felix Geyer <debfx-pkg@fobos.de> | 2009-08-07 22:19:59 +0200 |
---|---|---|
committer | Felix Geyer <debfx-pkg@fobos.de> | 2009-08-07 22:19:59 +0200 |
commit | fd321f7f2afeecd1066ed399b8c33aed3964b228 (patch) | |
tree | e7ece73572e464e47857a6b4c40b7b6b082c28f0 | |
parent | 29554628c63e586eb33ca746e8bdfadcc285b43d (diff) | |
download | virtualbox-fd321f7f2afeecd1066ed399b8c33aed3964b228.tar.gz |
Imported Upstream version 3.0.4-dfsgupstream/3.0.4-dfsg
118 files changed, 7253 insertions, 8718 deletions
diff --git a/Config.kmk b/Config.kmk index 6ee57e295..8ca2034dd 100644 --- a/Config.kmk +++ b/Config.kmk @@ -150,7 +150,7 @@ VBOX_VERSION_MINOR = 0 # This is the current build number. It should be increased every time we publish a # new build. The define is available in every source file. Only even build numbers # will be published, odd numbers are set during development. -VBOX_VERSION_BUILD = 2 +VBOX_VERSION_BUILD = 4 # Full version string (may include more than just x.y.z, but no spaces or other problematic chars). VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) # Force the additions.sh script to get an exact additions build when we're doing the release. @@ -3783,7 +3783,7 @@ endif SVN ?= svn$(HOSTSUFF_EXE) VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk ifndef VBOX_SVN_REV - VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 49928 $ ) + VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 50677 $ ) VBOX_SVN_DEP := $(wildcard $(PATH_ROOT)/.svn/entries) ifeq ($(which $(SVN)),) VBOX_SVN_DEP := diff --git a/include/VBox/HostServices/VBoxCrOpenGLSvc.h b/include/VBox/HostServices/VBoxCrOpenGLSvc.h index 7e8648f7e..0ec2244cb 100644 --- a/include/VBox/HostServices/VBoxCrOpenGLSvc.h +++ b/include/VBox/HostServices/VBoxCrOpenGLSvc.h @@ -42,6 +42,7 @@ #define SHCRGL_GUEST_FN_WRITE (2) #define SHCRGL_GUEST_FN_READ (3) #define SHCRGL_GUEST_FN_WRITE_READ (4) +#define SHCRGL_GUEST_FN_SET_VERSION (6) /* Parameters count */ #define SHCRGL_CPARMS_SET_FRAMEBUFFER (1) @@ -49,6 +50,7 @@ #define SHCRGL_CPARMS_WRITE (1) #define SHCRGL_CPARMS_READ (2) #define SHCRGL_CPARMS_WRITE_READ (3) +#define SHCRGL_CPARMS_SET_VERSION (2) /** * SHCRGL_GUEST_FN_WRITE @@ -104,4 +106,21 @@ typedef struct } CRVBOXHGCMWRITEREAD; +/** GUEST_FN_SET_VERSION Parameters structure. */ +typedef struct +{ + VBoxGuestHGCMCallInfo hdr; + + /** 32bit, in + * Major version + */ + HGCMFunctionParameter vMajor; + + /** 32bit, in + * Minor version + */ + HGCMFunctionParameter vMinor; + +} CRVBOXHGCMSETVERSION; + #endif diff --git a/include/VBox/mm.h b/include/VBox/mm.h index 45b7e2602..371896bd0 100644 --- a/include/VBox/mm.h +++ b/include/VBox/mm.h @@ -262,6 +262,13 @@ VMMR3DECL(void) MMR3ReleaseOwnedLocks(PVM pVM); * @ingroup grp_mm_r3 * @{ */ VMMR3DECL(int) MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv); +VMMR3DECL(int) MMR3HyperAllocOnceNoRelEx(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, uint32_t fFlags, void **ppv); +/** @name MMR3HyperAllocOnceNoRelEx flags + * @{ */ +/** Must have kernel mapping. + * If not specified, the R0 pointer may point to the user process mapping. */ +#define MMHYPER_AONR_FLAGS_KERNEL_MAPPING RT_BIT(0) +/** @} */ VMMR3DECL(int) MMR3HyperSetGuard(PVM pVM, void *pvStart, size_t cb, bool fSet); VMMR3DECL(int) MMR3HyperMapHCPhys(PVM pVM, void *pvR3, RTR0PTR pvR0, RTHCPHYS HCPhys, size_t cb, const char *pszDesc, PRTGCPTR pGCPtr); VMMR3DECL(int) MMR3HyperMapGCPhys(PVM pVM, RTGCPHYS GCPhys, size_t cb, const char *pszDesc, PRTGCPTR pGCPtr); diff --git a/include/VBox/shflsvc.h b/include/VBox/shflsvc.h index bc1e653a8..a9e501be7 100644 --- a/include/VBox/shflsvc.h +++ b/include/VBox/shflsvc.h @@ -138,19 +138,22 @@ typedef uint64_t SHFLHANDLE; /** Hardcoded maximum number of shared folder mapping available to the guest. */ #define SHFL_MAX_MAPPINGS (64) -/** Shared Folders strings. They can be either UTF8 or Unicode. - * @{ +/** @name Shared Folders strings. They can be either UTF-8 or UTF-16. + * @{ */ +/** + * Shared folder string buffer structure. + */ typedef struct _SHFLSTRING { - /** Size of string String buffer in bytes. */ + /** Size of the String member in bytes. */ uint16_t u16Size; /** Length of string without trailing nul in bytes. */ uint16_t u16Length; - /** UTF8 or Unicode16 string. Nul terminated. */ + /** UTF-8 or UTF-16 string. Nul terminated. */ union { uint8_t utf8[1]; @@ -158,15 +161,18 @@ typedef struct _SHFLSTRING } String; } SHFLSTRING; +/** Pointer to a shared folder string buffer. */ typedef SHFLSTRING *PSHFLSTRING; +/** Pointer to a const shared folder string buffer. */ +typedef const SHFLSTRING *PCSHFLSTRING; /** Calculate size of the string. */ -DECLINLINE(uint32_t) ShflStringSizeOfBuffer (PSHFLSTRING pString) +DECLINLINE(uint32_t) ShflStringSizeOfBuffer (PCSHFLSTRING pString) { return pString? sizeof (SHFLSTRING) - sizeof (pString->String) + pString->u16Size: 0; } -DECLINLINE(uint32_t) ShflStringLength (PSHFLSTRING pString) +DECLINLINE(uint32_t) ShflStringLength (PCSHFLSTRING pString) { return pString? pString->u16Length: 0; } @@ -190,6 +196,42 @@ DECLINLINE(PSHFLSTRING) ShflStringInitBuffer(void *pvBuffer, uint32_t u32Size) return pString; } +/** + * Validates a HGCM string parameter. + * + * @returns true if valid, false if not. + * + * @param pString The string buffer pointer. + * @param cbBuf The buffer size from the parameter. + */ +DECLINLINE(bool) ShflStringIsValid(PCSHFLSTRING pString, uint32_t cbBuf) +{ + if (RT_UNLIKELY(cbBuf <= RT_UOFFSETOF(SHFLSTRING, String))) + return false; + if (RT_UNLIKELY((uint32_t)pString->u16Size + RT_UOFFSETOF(SHFLSTRING, String) > cbBuf)) + return false; + if (RT_UNLIKELY(pString->u16Length >= pString->u16Size)) + return false; + return true; +} + +/** + * Validates an optional HGCM string parameter. + * + * @returns true if valid, false if not. + * + * @param pString The string buffer pointer. Can be NULL. + * @param cbBuf The buffer size from the parameter. + */ +DECLINLINE(bool) ShflStringIsValidOrNull(PCSHFLSTRING pString, uint32_t cbBuf) +{ + if (pString) + return ShflStringIsValid(pString, cbBuf); + if (RT_UNLIKELY(cbBuf > 0)) + return false; + return true; +} + /** @} */ diff --git a/include/iprt/log.h b/include/iprt/log.h index e05546f62..4de32dbe4 100644 --- a/include/iprt/log.h +++ b/include/iprt/log.h @@ -922,6 +922,17 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup, c */ #define LogRelFlow(a) LogRelIt(LOG_REL_INSTANCE, RTLOGGRPFLAGS_FLOW, LOG_GROUP, a) +/** @def LogRelFlowFunc + * Release logging. Macro to log the execution flow inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a Log message in format <tt>("string\n" [, args])</tt>. + */ +# define LogRelFlowFunc(a) \ + do { LogRelFlow((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRelFlow(a); } while (0) + /** @def LogRelFunc * Release logging. Prepends the given log message with the function name * followed by a semicolon and space. diff --git a/src/VBox/Additions/common/VBoxService/Makefile.kmk b/src/VBox/Additions/common/VBoxService/Makefile.kmk index 98efa22b7..f65426258 100644 --- a/src/VBox/Additions/common/VBoxService/Makefile.kmk +++ b/src/VBox/Additions/common/VBoxService/Makefile.kmk @@ -75,6 +75,10 @@ VBoxServiceNT_TEMPLATE = VBOXGUESTR3EXE VBoxServiceNT_EXTENDS = VBoxService VBoxServiceNT_DEFS.win = _WIN32_WINNT=0x0400 _UNICODE UNICODE TARGET_NT4 +#VBoxServiceVMInfo.cpp uses VBOX_SVN_REV. +VBoxServiceVMInfo.cpp_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) +VBoxServiceVMInfo.cpp_DEPS = $(VBOX_SVN_REV_KMK) + # # The icon is configurable. # diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp index 1bb9d4aa6..c61cc971e 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp @@ -51,6 +51,7 @@ #include <iprt/system.h> #include <iprt/time.h> #include <iprt/assert.h> +#include <VBox/version.h> #include <VBox/VBoxGuest.h> #include "VBoxServiceInternal.h" #include "VBoxServiceUtils.h" @@ -66,7 +67,7 @@ static RTSEMEVENTMULTI g_VMInfoEvent = NIL_RTSEMEVENTMULTI; /** The guest property service client ID. */ static uint32_t g_VMInfoGuestPropSvcClientID = 0; /** Number of logged in users in OS. */ -static uint32_t g_VMInfoLoggedInUsers = 0; +static uint32_t g_VMInfoLoggedInUsers = UINT32_MAX; #ifdef RT_OS_WINDOWS /** Function prototypes for dynamic loading. */ fnWTSGetActiveConsoleSessionId g_pfnWTSGetActiveConsoleSessionId = NULL; @@ -173,7 +174,12 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown) rc = VboxServiceWinGetAddsVersion(g_VMInfoGuestPropSvcClientID); rc = VboxServiceWinGetComponentVersions(g_VMInfoGuestPropSvcClientID); #else - /** @todo */ + /* VboxServiceGetAddsVersion !RT_OS_WINDOWS */ + VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, "GuestAdd/Version", VBOX_VERSION_STRING); + + char szRevision[32] = {0}; + RTStrPrintf(szRevision, sizeof(szRevision), "%lu", VBOX_SVN_REV); + VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, "GuestAdd/Revision", szRevision); #endif /* Now enter the loop retrieving runtime data continuously. */ @@ -228,7 +234,7 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown) ::LocalFree (pLuid); ::LsaFreeReturnBuffer(pSessions); - #endif /* TARGET_NT4 */ + #endif /* TARGET_NT4 */ #else utmp* ut_user; rc = utmpname(UTMP_FILE); @@ -256,15 +262,15 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown) VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, "GuestInfo/OS/LoggedInUsersList", (uiUserCount > 0) ? szUserList : NULL); VboxServiceWritePropInt(g_VMInfoGuestPropSvcClientID, "GuestInfo/OS/LoggedInUsers", uiUserCount); - if (g_VMInfoLoggedInUsers != uiUserCount || g_VMInfoLoggedInUsers == INT32_MAX) + if (g_VMInfoLoggedInUsers != uiUserCount || g_VMInfoLoggedInUsers == UINT32_MAX) { /* Update this property ONLY if there is a real change from no users to * users or vice versa. The only exception is that the initialization - * of a_pCtx->cUsers forces an update, but only once. This ensures - * consistent property settings even if the VM aborted previously. */ + * forces an update, but only once. This ensures consistent property + * settings even if the VM aborted previously. */ if (uiUserCount == 0) VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, "GuestInfo/OS/NoLoggedInUsers", "true"); - else if (g_VMInfoLoggedInUsers == 0 || uiUserCount == INT32_MAX) + else if (g_VMInfoLoggedInUsers == 0) VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, "GuestInfo/OS/NoLoggedInUsers", "false"); } g_VMInfoLoggedInUsers = uiUserCount; diff --git a/src/VBox/Additions/common/crOpenGL/stub.c b/src/VBox/Additions/common/crOpenGL/stub.c index 717513f7e..dedf49387 100644 --- a/src/VBox/Additions/common/crOpenGL/stub.c +++ b/src/VBox/Additions/common/crOpenGL/stub.c @@ -349,9 +349,6 @@ LRESULT CALLBACK stubCBWindowMessageHookProc(int nCode, WPARAM wParam, LPARAM lP if (nCode>=0 && pMsgInfo) { -#ifdef CHROMIUM_THREADSAFE - crLockMutex(&stub.mutex); -#endif switch (pMsgInfo->message) { case WM_MOVING: @@ -377,9 +374,6 @@ LRESULT CALLBACK stubCBWindowMessageHookProc(int nCode, WPARAM wParam, LPARAM lP break; } } -#ifdef CHROMIUM_THREADSAFE - crUnlockMutex(&stub.mutex); -#endif } return CallNextHookEx(stub.hMessageHook, nCode, wParam, lParam); diff --git a/src/VBox/Additions/common/crOpenGL/wgl.c b/src/VBox/Additions/common/crOpenGL/wgl.c index f5580861b..d0587f5b5 100644 --- a/src/VBox/Additions/common/crOpenGL/wgl.c +++ b/src/VBox/Additions/common/crOpenGL/wgl.c @@ -696,12 +696,15 @@ BOOL WINAPI wglGetPixelFormatAttribfvEXT_prox return 1; } -const GLubyte * WINAPI wglGetExtensionsStringEXT_prox( HDC hdc ) -{ - static GLubyte *retval = "WGL_EXT_pixel_format WGL_ARB_pixel_format WGL_ARB_multisample"; - - (void) hdc; +static GLubyte *gsz_wgl_extensions = "WGL_EXT_pixel_format WGL_ARB_pixel_format WGL_ARB_multisample"; - return retval; +const GLubyte * WINAPI wglGetExtensionsStringEXT_prox() +{ + return gsz_wgl_extensions; } +const GLubyte * WINAPI wglGetExtensionsStringARB_prox(HDC hdc) +{ + (void) hdc; + return gsz_wgl_extensions; +} diff --git a/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py b/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py index b2617fd02..67d91119f 100644 --- a/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py +++ b/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py @@ -91,7 +91,8 @@ print """ { NULL, NULL } }; -extern const GLubyte * WINAPI wglGetExtensionsStringEXT_prox( HDC hdc ); +extern const GLubyte * WINAPI wglGetExtensionsStringEXT_prox(void); +extern const GLubyte * WINAPI wglGetExtensionsStringARB_prox(HDC hdc); extern BOOL WINAPI wglChoosePixelFormatEXT_prox(HDC hdc, const int *piAttributes, const FLOAT *pfAttributes, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); extern BOOL WINAPI wglGetPixelFormatAttribivEXT_prox(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *pValues); extern BOOL WINAPI wglGetPixelFormatAttribfvEXT_prox(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, float *pValues); @@ -100,6 +101,7 @@ CR_PROC CR_APIENTRY crGetProcAddress( const char *name ) { int i; wglGetExtensionsStringEXTFunc_t wglGetExtensionsStringEXT = wglGetExtensionsStringEXT_prox; + wglGetExtensionsStringARBFunc_t wglGetExtensionsStringARB = wglGetExtensionsStringARB_prox; wglChoosePixelFormatEXTFunc_t wglChoosePixelFormatEXT = wglChoosePixelFormatEXT_prox; wglGetPixelFormatAttribivEXTFunc_t wglGetPixelFormatAttribivEXT = wglGetPixelFormatAttribivEXT_prox; wglGetPixelFormatAttribfvEXTFunc_t wglGetPixelFormatAttribfvEXT = wglGetPixelFormatAttribfvEXT_prox; @@ -114,7 +116,7 @@ CR_PROC CR_APIENTRY crGetProcAddress( const char *name ) } if (!crStrcmp( name, "wglGetExtensionsStringEXT" )) return (CR_PROC) wglGetExtensionsStringEXT; - if (!crStrcmp( name, "wglGetExtensionsStringARB" )) return (CR_PROC) wglGetExtensionsStringEXT; + if (!crStrcmp( name, "wglGetExtensionsStringARB" )) return (CR_PROC) wglGetExtensionsStringARB; if (!crStrcmp( name, "wglChoosePixelFormatEXT" )) return (CR_PROC) wglChoosePixelFormatEXT; if (!crStrcmp( name, "wglGetPixelFormatAttribivEXT" )) return (CR_PROC) wglGetPixelFormatAttribivEXT; diff --git a/src/VBox/Additions/linux/installer/autorun.sh b/src/VBox/Additions/linux/installer/autorun.sh index bcd978c22..6d5aa48c4 100755 --- a/src/VBox/Additions/linux/installer/autorun.sh +++ b/src/VBox/Additions/linux/installer/autorun.sh @@ -89,29 +89,28 @@ idepend=quit rdepend=quit space=quit mail= -" >> /tmp/vbox.autoinstall +" > /tmp/vbox.autoinstall # check gnome-terminal, use it if it exists. if test -f "/usr/bin/gnome-terminal"; then # use su/pfexec if test -z "$subin"; then - /usr/bin/gnome-terminal --title "Installing VirtualBox Additions" --command "/bin/sh -c '$pfexecbin $pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest; /bin/echo press ENTER to close this window; /bin/read'" + /usr/bin/gnome-terminal --title "Installing VirtualBox Additions" --command "/bin/sh -c '$pfexecbin $pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest; /bin/echo press ENTER to close this window; /bin/read; /bin/rm -f /tmp/vbox.autoinstall'" else - /usr/bin/gnome-terminal --title "Installing VirtualBox Additions: Root password required." --command "/bin/sh -c '$subin - root -c \"$pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest\"; /bin/echo press ENTER to close this window; /bin/read'" + /usr/bin/gnome-terminal --title "Installing VirtualBox Additions: Root password required." --command "/bin/sh -c '$subin - root -c \"$pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest\"; /bin/echo press ENTER to close this window; /bin/read; /bin/rm -f /tmp/vbox.autoinstall'" fi elif test -f "/usr/X11/bin/xterm"; then # use xterm if test -z "$subin"; then - /usr/X11/bin/xterm -title "Installing VirtualBox Additions" -e "$pfexecbin $pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest; /bin/echo press ENTER to close this window; /bin/read" + /usr/X11/bin/xterm -title "Installing VirtualBox Additions" -e "$pfexecbin $pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest; /bin/echo press ENTER to close this window; /bin/read; /bin/rm -f /tmp/vbox.autoinstall" else - /usr/X11/bin/xterm -title "Installing VirtualBox Additions: Root password required." -e "$subin - root -c \"$pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest\"; /bin/echo press ENTER to close this window; /bin/read" + /usr/X11/bin/xterm -title "Installing VirtualBox Additions: Root password required." -e "$subin - root -c \"$pkgaddbin -G -d $installfile -n -a /tmp/vbox.autoinstall SUNWvboxguest\"; /bin/echo press ENTER to close this window; /bin/read; /bin/rm -f /tmp/vbox.autoinstall" fi else echo "No suitable terminal not found. -- install additions using pkgadd -d." + rm -f /tmp/vbox.autoinstall fi - # remove temporary autoinstall file - rm -f /tmp/vbox.autoinstall exit 0 fi diff --git a/src/VBox/Additions/x11/VBoxClient/clipboard.cpp b/src/VBox/Additions/x11/VBoxClient/clipboard.cpp index 525bc1acb..51aba5f06 100644 --- a/src/VBox/Additions/x11/VBoxClient/clipboard.cpp +++ b/src/VBox/Additions/x11/VBoxClient/clipboard.cpp @@ -69,9 +69,9 @@ static VBOXCLIPBOARDCONTEXT g_ctx; static int vboxClipboardSendData(uint32_t u32Format, void *pv, uint32_t cb) { int rc; - LogFlowFunc(("u32Format=%d, pv=%p, cb=%d\n", u32Format, pv, cb)); + LogRelFlowFunc(("u32Format=%d, pv=%p, cb=%d\n", u32Format, pv, cb)); rc = VbglR3ClipboardWriteData(g_ctx.client, u32Format, pv, cb); - LogFlowFunc(("rc=%Rrc\n", rc)); + LogRelFlowFunc(("rc=%Rrc\n", rc)); return rc; } @@ -94,7 +94,7 @@ int ClipRequestDataForX11(VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Format, void *pv = RTMemAlloc(cb); *ppv = 0; - LogFlowFunc(("u32Format=%u\n", u32Format)); + LogRelFlowFunc(("u32Format=%u\n", u32Format)); if (RT_UNLIKELY(!pv)) rc = VERR_NO_MEMORY; if (RT_SUCCESS(rc)) @@ -127,9 +127,9 @@ int ClipRequestDataForX11(VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Format, if (pv != NULL) RTMemFree(pv); } - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); if (RT_SUCCESS(rc)) - LogFlow((" *pcb=%d\n", *pcb)); + LogRelFlow((" *pcb=%d\n", *pcb)); return rc; } @@ -150,9 +150,9 @@ struct _CLIPREADCBREQ void ClipReportX11Formats(VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Formats) { int rc; - LogFlowFunc(("u32Formats=%d\n", u32Formats)); + LogRelFlowFunc(("u32Formats=%d\n", u32Formats)); rc = VbglR3ClipboardReportFormats(g_ctx.client, u32Formats); - LogFlowFunc(("rc=%Rrc\n", rc)); + LogRelFlowFunc(("rc=%Rrc\n", rc)); } /** This is called by the backend to tell us that a request for data from @@ -184,7 +184,7 @@ void ClipCompleteDataRequestFromX11(VBOXCLIPBOARDCONTEXT *pCtx, int rc, int vboxClipboardConnect(void) { int rc = VINF_SUCCESS; - LogFlowFunc(("\n")); + LogRelFlowFunc(("\n")); /* Sanity */ AssertReturn(g_ctx.client == 0, VERR_WRONG_ORDER); @@ -207,7 +207,7 @@ int vboxClipboardConnect(void) if (RT_FAILURE(rc) && g_ctx.pBackend) ClipDestructX11(g_ctx.pBackend); - LogFlowFunc(("g_ctx.client=%u rc=%Rrc\n", g_ctx.client, rc)); + LogRelFlowFunc(("g_ctx.client=%u rc=%Rrc\n", g_ctx.client, rc)); return rc; } @@ -217,7 +217,7 @@ int vboxClipboardConnect(void) int vboxClipboardMain(void) { int rc; - LogFlowFunc(("Starting guest clipboard service\n")); + LogRelFlowFunc(("Starting guest clipboard service\n")); bool fExiting = false; while (!fExiting) @@ -235,7 +235,7 @@ int vboxClipboardMain(void) * Save the information so that it is available for * future requests from guest applications. */ - LogFlowFunc(("VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS fFormats=%x\n", fFormats)); + LogRelFlowFunc(("VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS fFormats=%x\n", fFormats)); ClipAnnounceFormatToX11(g_ctx.pBackend, fFormats); break; } @@ -243,7 +243,7 @@ int vboxClipboardMain(void) case VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA: { /* The host needs data in the specified format. */ - LogFlowFunc(("VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA fFormats=%x\n", fFormats)); + LogRelFlowFunc(("VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA fFormats=%x\n", fFormats)); CLIPREADCBREQ *pReq; pReq = (CLIPREADCBREQ *)RTMemAllocZ(sizeof(*pReq)); if (!pReq) @@ -263,7 +263,7 @@ int vboxClipboardMain(void) case VBOX_SHARED_CLIPBOARD_HOST_MSG_QUIT: { /* The host is terminating. */ - LogFlowFunc(("VBOX_SHARED_CLIPBOARD_HOST_MSG_QUIT\n")); + LogRelFlowFunc(("VBOX_SHARED_CLIPBOARD_HOST_MSG_QUIT\n")); if (RT_SUCCESS(ClipStopX11(g_ctx.pBackend))) ClipDestructX11(g_ctx.pBackend); fExiting = true; @@ -271,13 +271,13 @@ int vboxClipboardMain(void) } default: - Log(("Unsupported message from host!!!\n")); + LogRel2(("Unsupported message from host!!!\n")); } } - LogFlow(("processed host event rc = %d\n", rc)); + LogRelFlow(("processed host event rc = %d\n", rc)); } - LogFlowFunc(("rc=%d\n", rc)); + LogRelFlowFunc(("rc=%d\n", rc)); return rc; } @@ -294,7 +294,7 @@ public: if (RT_SUCCESS(rc)) rc = vboxClipboardMain(); if (RT_FAILURE(rc)) - LogFunc(("guest clipboard service terminated annormally: return code %Rrc\n", rc)); + LogRelFunc(("guest clipboard service terminated annormally: return code %Rrc\n", rc)); return rc; } virtual void cleanup() diff --git a/src/VBox/Additions/x11/VBoxClient/main.cpp b/src/VBox/Additions/x11/VBoxClient/main.cpp index 7fd968740..b4fa5d524 100644 --- a/src/VBox/Additions/x11/VBoxClient/main.cpp +++ b/src/VBox/Additions/x11/VBoxClient/main.cpp @@ -87,22 +87,8 @@ int vboxClientXLibErrorHandler(Display *pDisplay, XErrorEvent *pError) { char errorText[1024]; - if (pError->error_code == BadAtom) - { - /* This can be triggered in debug builds if a guest application passes a bad atom - in its list of supported clipboard formats. As such it is harmless. */ - Log(("VBoxClient: ignoring BadAtom error and returning\n")); - return 0; - } - if (pError->error_code == BadWindow) - { - /* This can be triggered if a guest application destroys a window before we notice. */ - Log(("VBoxClient: ignoring BadWindow error and returning\n")); - return 0; - } XGetErrorText(pDisplay, pError->error_code, errorText, sizeof(errorText)); - LogRel(("VBoxClient: an X Window protocol error occurred: %s (error code %d). Request code: %d, minor code: %d, serial number: %d\n", errorText, pError->error_code, pError->request_code, pError->minor_code, pError->serial)); - VBoxClient::CleanUp(); + LogRelFlow(("VBoxClient: an X Window protocol error occurred: %s (error code %d). Request code: %d, minor code: %d, serial number: %d\n", errorText, pError->error_code, pError->request_code, pError->minor_code, pError->serial)); return 0; /* We should never reach this. */ } diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp b/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp index e88e477ce..94174f010 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp +++ b/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp @@ -151,6 +151,7 @@ void VBoxGuestSeamlessX11::rebuildWindowTree(void) LogFlowThisFunc(("called\n")); freeWindowTree(); addClients(DefaultRootWindow(mDisplay.get())); + mChanged = true; } @@ -198,17 +199,23 @@ void VBoxGuestSeamlessX11::addClientWindow(const Window hWin) } if (fAddWin && (winAttrib.map_state == IsUnmapped)) fAddWin = false; - if (fAddWin && (XFetchName(mDisplay, hClient, &pszWinName) != 0) && (pszWinName != NULL)) - XFree(pszWinName); - else - /* kwin sometimes creates temporary fullscreen windows with no name. */ + XSizeHints dummyHints; + long dummyLong; + if (fAddWin && (!XGetWMNormalHints(mDisplay, hClient, &dummyHints, + &dummyLong))) + { + LogFlowFunc(("window %lu, client window %lu has no size hints\n", + hWin, hClient)); fAddWin = false; + } if (fAddWin) { VBoxGuestX11Pointer<XRectangle> rects; int cRects = 0, iOrdering; bool hasShape = false; + LogFlowFunc(("adding window %lu, client window %lu\n", hWin, + hClient)); if (mSupportsShape) { XShapeSelectInput(mDisplay, hWin, ShapeNotifyMask); @@ -287,7 +294,9 @@ void VBoxGuestSeamlessX11::nextEvent(void) LogFlowThisFunc(("\n")); /* Start by sending information about the current window setup to the host. We do this here because we want to send all such information from a single thread. */ - mObserver->notify(); + if (mChanged) + mObserver->notify(); + mChanged = false; XNextEvent(mDisplay, &event); switch (event.type) { @@ -325,13 +334,12 @@ void VBoxGuestSeamlessX11::doConfigureEvent(Window hWin) { XWindowAttributes winAttrib; - if (XGetWindowAttributes(mDisplay, hWin, &winAttrib)) - { - iter->second->mX = winAttrib.x; - iter->second->mY = winAttrib.y; - iter->second->mWidth = winAttrib.width; - iter->second->mHeight = winAttrib.height; - } + if (!XGetWindowAttributes(mDisplay, hWin, &winAttrib)) + return; + iter->second->mX = winAttrib.x; + iter->second->mY = winAttrib.y; + iter->second->mWidth = winAttrib.width; + iter->second->mHeight = winAttrib.height; if (iter->second->mhasShape) { VBoxGuestX11Pointer<XRectangle> rects; @@ -339,9 +347,12 @@ void VBoxGuestSeamlessX11::doConfigureEvent(Window hWin) rects = XShapeGetRectangles(mDisplay, hWin, ShapeBounding, &cRects, &iOrdering); + if (rects.get() == NULL) + cRects = 0; iter->second->mcRects = cRects; iter->second->mapRects = rects; } + mChanged = true; } LogFlowThisFunc(("returning\n")); } @@ -360,6 +371,7 @@ void VBoxGuestSeamlessX11::doMapEvent(Window hWin) if (mGuestWindows.end() == iter) { addClientWindow(hWin); + mChanged = true; } LogFlowThisFunc(("returning\n")); } @@ -383,9 +395,12 @@ void VBoxGuestSeamlessX11::doShapeEvent(Window hWin) rects = XShapeGetRectangles(mDisplay, hWin, ShapeBounding, &cRects, &iOrdering); + if (rects.get() == NULL) + cRects = 0; iter->second->mhasShape = true; iter->second->mcRects = cRects; iter->second->mapRects = rects; + mChanged = true; } LogFlowThisFunc(("returning\n")); } @@ -404,6 +419,7 @@ void VBoxGuestSeamlessX11::doUnmapEvent(Window hWin) if (mGuestWindows.end() != iter) { mGuestWindows.removeWindow(iter); + mChanged = true; } LogFlowThisFunc(("returning\n")); } diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-x11.h b/src/VBox/Additions/x11/VBoxClient/seamless-x11.h index 5ed8dcae0..399adba4a 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-x11.h +++ b/src/VBox/Additions/x11/VBoxClient/seamless-x11.h @@ -288,6 +288,8 @@ private: bool mSupportsShape; /** Is seamles mode currently enabled? */ bool mEnabled; + /** Have there been changes since the last time we sent a notification? */ + bool mChanged; // Private methods diff --git a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp index c4de3bbff..b0ee8e6d7 100644 --- a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp +++ b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp @@ -219,6 +219,16 @@ Status XFetchName(Display *display, Window w, char **window_name_return) return 0; } +extern "C" Status XGetWMNormalHints(Display *display, Window w, + XSizeHints *hints_return, + long *supplied_return); + +Status XGetWMNormalHints(Display *display, Window w, + XSizeHints *hints_return, long *supplied_return) +{ + return 1; +} + static void smlsSetWindowAttributes(XWindowAttributes *pAttribs, Window *pWindows, unsigned cAttribs, const char **paNames) diff --git a/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c b/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c index 71aa71fdc..e3fc6d7d5 100644 --- a/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c +++ b/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c @@ -65,7 +65,8 @@ VBoxReadInput(InputInfoPtr pInfo) /* The first test here is a workaround for an apparant bug in Xorg Server 1.5 */ if ( miPointerGetScreen(pInfo->dev) != NULL - && RT_SUCCESS(VbglR3GetMouseStatus(&fFeatures, &cx, &cy))) + && RT_SUCCESS(VbglR3GetMouseStatus(&fFeatures, &cx, &cy)) + && (fFeatures & VBOXGUEST_MOUSE_HOST_CAN_ABSOLUTE)) /* send absolute movement */ xf86PostMotionEvent(pInfo->dev, 1, 0, 2, cx, cy); } @@ -232,6 +233,8 @@ VBoxPlug(pointer module, int *errmin) { xf86AddInputDriver(&VBOXMOUSE, module, 0); + xf86Msg(X_CONFIG, "Load address of symbol \"VBOXMOUSE\" is %p\n", + (void *)&VBOXMOUSE); return module; } diff --git a/src/VBox/Additions/x11/vboxvideo/vboxutils.c b/src/VBox/Additions/x11/vboxvideo/vboxutils.c index feab6da41..fd9bcc5b8 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxutils.c +++ b/src/VBox/Additions/x11/vboxvideo/vboxutils.c @@ -140,9 +140,13 @@ vbox_host_uses_hwcursor(ScrnInfoPtr pScrn) * to draw the pointer. */ if (rc) { + if (fFeatures & VBOXGUEST_MOUSE_GUEST_CAN_ABSOLUTE) + /* Assume this will never be unloaded as long as the X session is + * running. */ + pVBox->mouseDriverLoaded = TRUE; if ( (fFeatures & VBOXGUEST_MOUSE_HOST_CANNOT_HWPOINTER) - || !(fFeatures & VBOXGUEST_MOUSE_GUEST_CAN_ABSOLUTE) - ||!(fFeatures & VBOXGUEST_MOUSE_HOST_CAN_ABSOLUTE) + || !pVBox->mouseDriverLoaded + || !(fFeatures & VBOXGUEST_MOUSE_HOST_CAN_ABSOLUTE) ) rc = FALSE; } diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h index 2a0dd1c59..8202316f4 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h @@ -213,6 +213,8 @@ typedef struct _VBOXRec size_t pointerSize; Bool useDevice; Bool forceSWCursor; + /** Do we know that the guest mouse driver was loaded successfully? */ + Bool mouseDriverLoaded; /** Are we currently switched to a virtual terminal? If so, it is not * safe to touch the hardware. */ Bool vtSwitch; diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo_15.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo_15.c index cd0b5c23a..b84c4688c 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo_15.c +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo_15.c @@ -144,7 +144,7 @@ static PciChipsets VBOXPCIchipsets[] = { * this DriverRec be an upper-case version of the driver name. */ -_X_EXPORT DriverRec VBOXDRV = { +_X_EXPORT DriverRec VBOXVIDEO = { VBOX_VERSION, VBOX_DRIVER_NAME, VBOXIdentify, @@ -205,15 +205,9 @@ VBOXCrtcResize(ScrnInfoPtr scrn, int width, int height) Bool rc = TRUE; TRACE_LOG("width=%d, height=%d\n", width, height); - /* We only support horizontal resolutions which are a multiple of 8. Round down if - necessary. */ - if (width % 8 != 0) - { - xf86DrvMsg(scrn->scrnIndex, X_WARNING, - "VirtualBox only supports virtual screen widths which are a multiple of 8. Rounding down from %d to %d\n", - width, width - (width % 8)); - width = width - (width % 8); - } + /* We only support horizontal resolutions which are a multiple of 8. + * Round up if necessary. */ + width = (width + 7) & ~7; if (width * height * bpp / 8 >= scrn->videoRam * 1024) { xf86DrvMsg(scrn->scrnIndex, X_ERROR, @@ -580,10 +574,12 @@ vboxSetup(pointer Module, pointer Options, int *ErrorMajor, int *ErrorMinor) { Initialised = TRUE; #ifdef PCIACCESS - xf86AddDriver(&VBOXDRV, Module, HaveDriverFuncs); + xf86AddDriver(&VBOXVIDEO, Module, HaveDriverFuncs); #else - xf86AddDriver(&VBOXDRV, Module, 0); + xf86AddDriver(&VBOXVIDEO, Module, 0); #endif + xf86Msg(X_CONFIG, "Load address of symbol \"VBOXVIDEO\" is %p\n", + (void *)&VBOXVIDEO); LoaderRefSymLists(fbSymbols, shadowfbSymbols, vbeSymbols, @@ -853,30 +849,8 @@ VBOXPreInit(ScrnInfoPtr pScrn, int flags) /* Set up our single virtual output. */ output = xf86OutputCreate(pScrn, &VBOXOutputFuncs, "VBOX1"); - /* Set a sane minimum mode size and the maximum allowed by the available VRAM */ - { -#if 0 - unsigned maxSize, trySize = 512; - - do { - maxSize = trySize; - trySize += 128; - } while (trySize * trySize * pScrn->bitsPerPixel / 8 < pScrn->videoRam * 1024); -#else - unsigned maxSize = 32000; -#endif - - xf86CrtcSetSizeRange(pScrn, 64, 64, maxSize, maxSize); - - /* I don't know exactly what these are for (and they are only used in a couple - of places in the X server code), but due to a bug in RandR 1.2 they place - an upper limit on possible resolutions. To add to the fun, they get set - automatically if we don't do it ourselves. */ - pScrn->display->virtualX = maxSize; - pScrn->display->virtualY = maxSize; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "The maximum supported resolution is currently %dx%d\n", maxSize, maxSize); - } + /* Set a sane minimum and maximum mode size */ + xf86CrtcSetSizeRange(pScrn, 64, 64, 32000, 32000); /* We are not interested in the monitor section in the configuration file. */ xf86OutputUseScreenMonitor(output, FALSE); @@ -990,6 +964,7 @@ VBOXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) return (FALSE); /* Needed before we initialise DRI. */ + pScrn->virtualX = (pScrn->virtualX + 7) & ~7; pScrn->displayWidth = pScrn->virtualX; #ifdef VBOX_DRI @@ -1261,7 +1236,8 @@ VBOXSetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode) Bool rc = TRUE; int bpp = pScrn->depth == 24 ? 32 : 16; - TRACE_LOG("HDisplay=%d, VDisplay=%d\n", pMode->HDisplay, pMode->VDisplay); + TRACE_LOG("HDisplay=%d, VDisplay=%d, displayWidth=%d\n", + pMode->HDisplay, pMode->VDisplay, pScrn->displayWidth); pVBox = VBOXGetRec(pScrn); /* Don't fiddle with the hardware if we are switched * to a virtual terminal. */ diff --git a/src/VBox/Devices/Audio/solaudio.c b/src/VBox/Devices/Audio/solaudio.c index 350fbab32..629b1a281 100644 --- a/src/VBox/Devices/Audio/solaudio.c +++ b/src/VBox/Devices/Audio/solaudio.c @@ -32,7 +32,6 @@ #include <sys/mixer.h> #define LOG_GROUP LOG_GROUP_DEV_AUDIO -#define LOG_ENABLED #include <VBox/log.h> #include <iprt/env.h> diff --git a/src/VBox/Devices/Network/slirp/ip_icmp.c b/src/VBox/Devices/Network/slirp/ip_icmp.c index 0db2842cc..12b5d8e16 100644 --- a/src/VBox/Devices/Network/slirp/ip_icmp.c +++ b/src/VBox/Devices/Network/slirp/ip_icmp.c @@ -530,7 +530,7 @@ void icmp_error(PNATState pData, struct mbuf *msrc, u_char type, u_char code, in int new_m_size; m->m_data += if_maxlinkhdr; new_m_size = sizeof(struct ip) + ICMP_MINLEN + msrc->m_len + ICMP_MAXDATALEN; - if (new_m_size>m->m_size) + if (new_m_size > m->m_size) m_inc(m, new_m_size); } diff --git a/src/VBox/Devices/Network/slirp/libalias/alias_db.c b/src/VBox/Devices/Network/slirp/libalias/alias_db.c index f5ba53598..38a251cf3 100644 --- a/src/VBox/Devices/Network/slirp/libalias/alias_db.c +++ b/src/VBox/Devices/Network/slirp/libalias/alias_db.c @@ -328,8 +328,14 @@ struct alias_link { /* Main data structure */ #define LINK_PARTIALLY_SPECIFIED 0x03 /* logical-or of first two bits */ #define LINK_UNFIREWALLED 0x08 +#ifndef VBOX int timestamp; /* Time link was last accessed */ int expire_time; /* Expire time for link */ +#else + unsigned int timestamp; /* Time link was last accessed */ + unsigned int expire_time; /* Expire time for link */ +#endif + #ifndef NO_USE_SOCKETS # ifndef VBOX /* @@ -755,9 +761,13 @@ GetSocket(struct libalias *la, u_short port_net, int *sockfd, int link_type) so->s = sock; fd_nonblock(so->s); #endif + memset(&sock_addr, 0, sizeof(struct sockaddr_in)); sock_addr.sin_family = AF_INET; sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); - sock_addr.sin_port = port_net; + sock_addr.sin_port = htons(port_net); +#ifdef RT_OS_DARWIN + sock_addr.sin_len = sizeof(struct sockaddr_in); +#endif err = bind(sock, (struct sockaddr *)&sock_addr, @@ -925,7 +935,12 @@ IncrementalCleanup(struct libalias *la) LIBALIAS_LOCK_ASSERT(la); LIST_FOREACH_SAFE(lnk, &la->linkTableOut[la->cleanupIndex++], list_out, lnk_tmp) { +#ifndef VBOX if (la->timeStamp - lnk->timestamp > lnk->expire_time) +#else + /* libalias counts time in seconds while slirp in millis */ + if (la->timeStamp - lnk->timestamp > (1000 * lnk->expire_time)) +#endif DeleteLink(lnk); } @@ -2289,7 +2304,11 @@ HouseKeeping(struct libalias *la) #endif /* Compute number of spokes (output table link chains) to cover */ +#ifndef VBOX n = LINK_TABLE_OUT_SIZE * (la->timeStamp - la->lastCleanupTime); +#else + n = LINK_TABLE_OUT_SIZE * ((la->timeStamp - la->lastCleanupTime)/1000); +#endif n /= ALIAS_CLEANUP_INTERVAL_SECS; /* Handle different cases */ diff --git a/src/VBox/Devices/Network/slirp/libalias/alias_ftp.c b/src/VBox/Devices/Network/slirp/libalias/alias_ftp.c index 948ddddd7..f70a95e90 100644 --- a/src/VBox/Devices/Network/slirp/libalias/alias_ftp.c +++ b/src/VBox/Devices/Network/slirp/libalias/alias_ftp.c @@ -149,21 +149,21 @@ static struct proto_handler handlers[2]; static int mod_handler(module_t mod, int type, void *data) #else -static int ftp_alias_handler(int type); +static int ftp_alias_handler(PNATState pData, int type); int -ftp_alias_load(void) +ftp_alias_load(PNATState pData) { - return ftp_alias_handler(MOD_LOAD); + return ftp_alias_handler(pData, MOD_LOAD); } int -ftp_alias_unload(void) +ftp_alias_unload(PNATState pData) { - return ftp_alias_handler(MOD_UNLOAD); + return ftp_alias_handler(pData, MOD_UNLOAD); } static int -ftp_alias_handler(int type) +ftp_alias_handler(PNATState pData, int type) #endif { int error; @@ -179,11 +179,19 @@ ftp_alias_handler(int type) switch (type) { case MOD_LOAD: error = 0; +#ifdef VBOX + LibAliasAttachHandlers(pData, handlers); +#else LibAliasAttachHandlers(handlers); +#endif break; case MOD_UNLOAD: error = 0; +#ifdef VBOX + LibAliasDetachHandlers(pData, handlers); +#else LibAliasDetachHandlers(handlers); +#endif break; default: error = EINVAL; diff --git a/src/VBox/Devices/Network/slirp/libalias/alias_local.h b/src/VBox/Devices/Network/slirp/libalias/alias_local.h index cc43da8c1..22477c865 100644 --- a/src/VBox/Devices/Network/slirp/libalias/alias_local.h +++ b/src/VBox/Devices/Network/slirp/libalias/alias_local.h @@ -106,12 +106,16 @@ struct libalias { int cleanupIndex; /* Index to chain of link table */ /* being inspected for old links */ - +#ifndef VBOX int timeStamp; /* System time in seconds for */ /* current packet */ int lastCleanupTime; /* Last time * IncrementalCleanup() */ +#else + unsigned int timeStamp; /* System time in seconds for */ + unsigned int lastCleanupTime; /* Last time */ +#endif /* was called */ int deleteAllLinks; /* If equal to zero, DeleteLink() */ diff --git a/src/VBox/Devices/Network/slirp/libalias/alias_mod.c b/src/VBox/Devices/Network/slirp/libalias/alias_mod.c index 63a70afc4..8676a133c 100644 --- a/src/VBox/Devices/Network/slirp/libalias/alias_mod.c +++ b/src/VBox/Devices/Network/slirp/libalias/alias_mod.c @@ -51,14 +51,14 @@ __FBSDID("$FreeBSD: src/sys/netinet/libalias/alias_mod.c,v 1.3.8.1 2009/04/15 03 #include "alias_local.h" #include "alias_mod.h" #endif + +/* Protocol and userland module handlers chains. */ +LIST_HEAD(handler_chain, proto_handler) handler_chain = LIST_HEAD_INITIALIZER(foo); #else /* !VBOX */ # include <slirp.h> # include "alias_local.h" # include "alias_mod.h" #endif /* VBOX */ - -/* Protocol and userland module handlers chains. */ -LIST_HEAD(handler_chain, proto_handler) handler_chain = LIST_HEAD_INITIALIZER(foo); #ifdef _KERNEL struct rwlock handler_rw; #endif @@ -137,7 +137,11 @@ handler_chain_destroy(void) } static int +#ifdef VBOX +_attach_handler(PNATState pData, struct proto_handler *p) +#else _attach_handler(struct proto_handler *p) +#endif { struct proto_handler *b = NULL; @@ -161,7 +165,11 @@ _attach_handler(struct proto_handler *p) } static int +#ifdef VBOX +_detach_handler(PNATState pData, struct proto_handler *p) +#else _detach_handler(struct proto_handler *p) +#endif { struct proto_handler *b, *b_tmp;; @@ -176,7 +184,11 @@ _detach_handler(struct proto_handler *p) } int +#ifdef VBOX +LibAliasAttachHandlers(PNATState pData, struct proto_handler *_p) +#else LibAliasAttachHandlers(struct proto_handler *_p) +#endif { int i, error = -1; @@ -184,7 +196,11 @@ LibAliasAttachHandlers(struct proto_handler *_p) for (i=0; 1; i++) { if (*((int *)&_p[i]) == EOH) break; +#ifdef VBOX + error = _attach_handler(pData, &_p[i]); +#else error = _attach_handler(&_p[i]); +#endif if (error != 0) break; } @@ -193,7 +209,11 @@ LibAliasAttachHandlers(struct proto_handler *_p) } int +#ifdef VBOX +LibAliasDetachHandlers(PNATState pData, struct proto_handler *_p) +#else LibAliasDetachHandlers(struct proto_handler *_p) +#endif { int i, error = -1; @@ -201,7 +221,11 @@ LibAliasDetachHandlers(struct proto_handler *_p) for (i=0; 1; i++) { if (*((int *)&_p[i]) == EOH) break; +#ifdef VBOX + error = _detach_handler(pData, &_p[i]); +#else error = _detach_handler(&_p[i]); +#endif if (error != 0) break; } @@ -210,12 +234,20 @@ LibAliasDetachHandlers(struct proto_handler *_p) } int +#ifdef VBOX +detach_handler(PNATState pData, struct proto_handler *_p) +#else detach_handler(struct proto_handler *_p) +#endif { int error = -1; LIBALIAS_WLOCK(); +#ifdef VBOX + error = _detach_handler(pData, _p); +#else error = _detach_handler(_p); +#endif LIBALIAS_WUNLOCK(); return (error); } @@ -224,6 +256,9 @@ int find_handler(int8_t dir, int8_t proto, struct libalias *la, struct ip *pip, struct alias_data *ad) { +#ifdef VBOX + PNATState pData = la->pData; +#endif struct proto_handler *p; int error = ENOENT; @@ -241,7 +276,11 @@ find_handler(int8_t dir, int8_t proto, struct libalias *la, struct ip *pip, } struct proto_handler * +#ifdef VBOX +first_handler(PNATState pData) +#else first_handler(void) +#endif { return (LIST_FIRST(&handler_chain)); diff --git a/src/VBox/Devices/Network/slirp/libalias/alias_mod.h b/src/VBox/Devices/Network/slirp/libalias/alias_mod.h index 6049273af..9ee40fa03 100644 --- a/src/VBox/Devices/Network/slirp/libalias/alias_mod.h +++ b/src/VBox/Devices/Network/slirp/libalias/alias_mod.h @@ -115,12 +115,19 @@ struct dll { void handler_chain_init(void); void handler_chain_destroy(void); +#ifdef VBOX +int LibAliasAttachHandlers(PNATState pData, struct proto_handler *); +int LibAliasDetachHandlers(PNATState pData, struct proto_handler *); +int detach_handler(PNATState pData, struct proto_handler *); +struct proto_handler *first_handler(PNATState pData); +#else int LibAliasAttachHandlers(struct proto_handler *); int LibAliasDetachHandlers(struct proto_handler *); int detach_handler(struct proto_handler *); -int find_handler(int8_t, int8_t, struct libalias *, - struct ip *, struct alias_data *); struct proto_handler *first_handler(void); +#endif +int find_handler(int8_t, int8_t, struct libalias *, + struct ip *, struct alias_data *); /* Functions used with dll module. */ diff --git a/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c b/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c index 7ee6d1064..73161b3e8 100644 --- a/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c +++ b/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c @@ -168,21 +168,21 @@ static struct proto_handler handlers[4]; static int mod_handler(module_t mod, int type, void *data) #else /*!VBOX*/ -static int nbt_alias_handler(int type); +static int nbt_alias_handler(PNATState pData, int type); int -nbt_alias_load() +nbt_alias_load(PNATState pData) { - return nbt_alias_handler(MOD_LOAD); + return nbt_alias_handler(pData, MOD_LOAD); } int -nbt_alias_unload() +nbt_alias_unload(PNATState pData) { - return nbt_alias_handler(MOD_UNLOAD); + return nbt_alias_handler(pData, MOD_UNLOAD); } static int -nbt_alias_handler(int type) +nbt_alias_handler(PNATState pData, int type) #endif /*VBOX*/ { int error; @@ -214,11 +214,19 @@ nbt_alias_handler(int type) switch (type) { case MOD_LOAD: error = 0; +#ifdef VBOX + LibAliasAttachHandlers(pData, handlers); +#else LibAliasAttachHandlers(handlers); +#endif break; case MOD_UNLOAD: error = 0; +#ifdef VBOX + LibAliasDetachHandlers(pData, handlers); +#else LibAliasDetachHandlers(handlers); +#endif break; default: error = EINVAL; diff --git a/src/VBox/Devices/Network/slirp/slirp.c b/src/VBox/Devices/Network/slirp/slirp.c index 3f3ba26b6..32f5405e6 100644 --- a/src/VBox/Devices/Network/slirp/slirp.c +++ b/src/VBox/Devices/Network/slirp/slirp.c @@ -556,8 +556,8 @@ int slirp_init(PNATState *ppData, uint32_t u32NetAddr, uint32_t u32Netmask, flags = LibAliasSetMode(pData->proxy_alias, flags, ~0); proxy_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS); LibAliasSetAddress(pData->proxy_alias, proxy_addr); - ftp_alias_load(); - nbt_alias_load(); + ftp_alias_load(pData); + nbt_alias_load(pData); } #endif @@ -656,9 +656,8 @@ void slirp_term(PNATState pData) slirp_link_down(pData); slirp_release_dns_list(pData); -#ifdef RT_OS_WINDOWS - WSACleanup(); -#endif + ftp_alias_unload(pData); + nbt_alias_unload(pData); #ifdef VBOX_WITH_SLIRP_ALIAS while(!LIST_EMPTY(&instancehead)) { struct libalias *la = LIST_FIRST(&instancehead); @@ -666,6 +665,9 @@ void slirp_term(PNATState pData) LibAliasUninit(la); } #endif +#ifdef RT_OS_WINDOWS + WSACleanup(); +#endif #ifdef LOG_ENABLED Log(("\n" "NAT statistics\n" diff --git a/src/VBox/Devices/Network/slirp/slirp.h b/src/VBox/Devices/Network/slirp/slirp.h index 377845db4..4ab2d44a5 100644 --- a/src/VBox/Devices/Network/slirp/slirp.h +++ b/src/VBox/Devices/Network/slirp/slirp.h @@ -367,17 +367,17 @@ AssertCompileSize(struct ethhdr, 14); # define strncasecmp RTStrNICmp +# ifdef DEBUG # define LIBALIAS_DEBUG - # ifdef fprintf -# undef fprintf -# endif /*fprintf*/ +# undef fprintf +# endif # ifdef fflush -# undef fflush -# endif /*fflush*/ +# undef fflush +# endif # ifdef printf -# undef printf -# endif /*printf*/ +# undef printf +# endif #define fflush(x) do{}while(0) # define fprintf vbox_slirp_fprintf # define printf vbox_slirp_printf @@ -403,13 +403,14 @@ static void vbox_slirp_fprintf(void *ignored, char *format, ...) vbox_slirp_printV(format, args); va_end(args); } +# endif /* DEBUG */ #endif /*VBOX_WITH_SLIRP_ALIAS && VBOX_SLIRP_ALIAS*/ #ifdef VBOX_WITH_SLIRP_ALIAS -int ftp_alias_load(void); -int ftp_alias_unload(void); -int nbt_alias_load(void); -int nbt_alias_unload(void); +int ftp_alias_load(PNATState); +int ftp_alias_unload(PNATState); +int nbt_alias_load(PNATState); +int nbt_alias_unload(PNATState); #endif /*VBOX_WITH_SLIRP_ALIAS*/ #endif diff --git a/src/VBox/Devices/Network/slirp/slirp_state.h b/src/VBox/Devices/Network/slirp/slirp_state.h index 353881f53..7a420413f 100644 --- a/src/VBox/Devices/Network/slirp/slirp_state.h +++ b/src/VBox/Devices/Network/slirp/slirp_state.h @@ -228,6 +228,7 @@ typedef struct NATState #ifdef VBOX_WITH_SLIRP_ALIAS LIST_HEAD(RT_NOTHING, libalias) instancehead; struct libalias *proxy_alias; + LIST_HEAD(handler_chain, proto_handler) handler_chain; #endif #define PROFILE_COUNTER(name, dsc) STAMPROFILE Stat ## name @@ -314,6 +315,8 @@ typedef struct NATState #define our_addr pData->our_addr #ifndef VBOX_SLIRP_ALIAS # define alias_addr pData->alias_addr +#else +# define handler_chain pData->handler_chain #endif #define special_addr pData->special_addr #define dns_addr pData->dns_addr diff --git a/src/VBox/Devices/PC/DevACPI.cpp b/src/VBox/Devices/PC/DevACPI.cpp index 6b15b9ace..40b0cc5ac 100644 --- a/src/VBox/Devices/PC/DevACPI.cpp +++ b/src/VBox/Devices/PC/DevACPI.cpp @@ -704,6 +704,7 @@ static void acpiSetupFADT(ACPIState *s, RTGCPHYS32 addr_acpi1, RTGCPHYS32 addr_a /* Now the ACPI 1.0 version. */ fadt.header.u32Length = ACPITBLFADT_VERSION1_SIZE; fadt.u8IntModel = INT_MODEL_DUAL_PIC; + fadt.header.u8Checksum = 0; /* Must be zeroed before recalculating checksum! */ fadt.header.u8Checksum = acpiChecksum((uint8_t *)&fadt, ACPITBLFADT_VERSION1_SIZE); acpiPhyscpy(s, addr_acpi1, &fadt, ACPITBLFADT_VERSION1_SIZE); } diff --git a/src/VBox/Devices/Storage/DevAHCI.cpp b/src/VBox/Devices/Storage/DevAHCI.cpp index 071afbcdc..e9571b342 100644 --- a/src/VBox/Devices/Storage/DevAHCI.cpp +++ b/src/VBox/Devices/Storage/DevAHCI.cpp @@ -293,7 +293,7 @@ typedef struct AHCIPort /** FIS Base Address upper bits. */ uint32_t regFBU; /** Interrupt Status. */ - uint32_t regIS; + volatile uint32_t regIS; /** Interrupt Enable. */ uint32_t regIE; /** Command. */ @@ -1028,12 +1028,17 @@ static int PortSActive_r(PAHCI ahci, PAHCIPort pAhciPort, uint32_t iReg, uint32_ static int PortSError_w(PAHCI ahci, PAHCIPort pAhciPort, uint32_t iReg, uint32_t u32Value) { ahciLog(("%s: write u32Value=%#010x\n", __FUNCTION__, u32Value)); - pAhciPort->regSERR &= ~u32Value; - if (u32Value & AHCI_PORT_SERR_X) + + if ( (u32Value & AHCI_PORT_SERR_X) + && (pAhciPort->regSERR & AHCI_PORT_SERR_X)) { + ASMAtomicAndU32(&pAhciPort->regIS, ~AHCI_PORT_IS_PCS); pAhciPort->regTFD |= ATA_STAT_ERR; pAhciPort->regTFD &= ~(ATA_STAT_DRQ | ATA_STAT_BUSY); } + + pAhciPort->regSERR &= ~u32Value; + return VINF_SUCCESS; } @@ -1097,14 +1102,14 @@ static int PortSControl_w(PAHCI ahci, PAHCIPort pAhciPort, uint32_t iReg, uint32 } /* We received a COMINIT from the device. Tell the guest. */ - pAhciPort->regIS |= AHCI_PORT_IS_PCS; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_PCS); pAhciPort->regSERR |= AHCI_PORT_SERR_X; pAhciPort->regTFD |= ATA_STAT_BUSY; if ((pAhciPort->regCMD & AHCI_PORT_CMD_FRE) && (!pAhciPort->fFirstD2HFisSend)) { ahciPostFirstD2HFisIntoMemory(pAhciPort); - pAhciPort->regIS |= AHCI_PORT_IS_DHRS; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_DHRS); if (pAhciPort->regIE & AHCI_PORT_IE_DHRE) ahciHbaSetInterrupt(pAhciPort->CTX_SUFF(pAhci), pAhciPort->iLUN); @@ -1246,7 +1251,7 @@ static int PortCmd_w(PAHCI ahci, PAHCIPort pAhciPort, uint32_t iReg, uint32_t u3 return VINF_IOM_HC_MMIO_WRITE; #else ahciPostFirstD2HFisIntoMemory(pAhciPort); - pAhciPort->regIS |= AHCI_PORT_IS_DHRS; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_DHRS); if (pAhciPort->regIE & AHCI_PORT_IE_DHRE) ahciHbaSetInterrupt(pAhciPort->CTX_SUFF(pAhci), pAhciPort->iLUN); @@ -1363,10 +1368,8 @@ static int PortIntrSts_r(PAHCI ahci, PAHCIPort pAhciPort, uint32_t iReg, uint32_ static int PortIntrSts_w(PAHCI ahci, PAHCIPort pAhciPort, uint32_t iReg, uint32_t u32Value) { ahciLog(("%s: write u32Value=%#010x\n", __FUNCTION__, u32Value)); - pAhciPort->regIS &= ~u32Value; + ASMAtomicAndU32(&pAhciPort->regIS, ~(u32Value & AHCI_PORT_IS_READONLY)); - if (u32Value & AHCI_PORT_IS_PCS) - pAhciPort->regSERR &= ~AHCI_PORT_SERR_X; return VINF_SUCCESS; } @@ -1501,10 +1504,36 @@ static int HbaInterruptStatus_w(PAHCI ahci, uint32_t iReg, uint32_t u32Value) * an interrupt and the guest has cleared all set interrupt * notification bits. */ + bool fClear = true; ahci->regHbaIs &= ~(u32Value); - if ((!ahci->u32PortsInterrupted) && (!ahci->regHbaIs)) + fClear = (!ahci->u32PortsInterrupted) && (!ahci->regHbaIs); + if (fClear) + { + unsigned i = 0; + + /* Check if the cleared ports have a interrupt status bit set. */ + while (u32Value > 0) + { + if (u32Value & 0x01) + { + PAHCIPort pAhciPort = &ahci->ahciPort[i]; + + if (pAhciPort->regIE & pAhciPort->regIS) + { + Log(("%s: Interrupt status of port %u set -> Set interrupt again\n", __FUNCTION__, i)); + ASMAtomicOrU32(&ahci->u32PortsInterrupted, 1 << i); + fClear = false; + break; + } + } + u32Value = u32Value >> 1; + i++; + } + } + + if (fClear) ahciHbaClearInterrupt(ahci); else { @@ -1760,8 +1789,6 @@ static void ahciPortSwReset(PAHCIPort pAhciPort) pAhciPort->regIS = 0; pAhciPort->regIE = 0; pAhciPort->regCMD = AHCI_PORT_CMD_CPD | /* Cold presence detection */ - AHCI_PORT_CMD_ISP | /* Interlock switch attached (for hotplug) */ - AHCI_PORT_CMD_HPCP | /* Hotplug capable port */ AHCI_PORT_CMD_SUD | /* Device has spun up. */ AHCI_PORT_CMD_POD; /* Port is powered on. */ pAhciPort->regTFD = (1 << 8) | ATA_STAT_SEEK | ATA_STAT_WRERR; @@ -1790,8 +1817,6 @@ static void ahciPortSwReset(PAHCIPort pAhciPort) { pAhciPort->regCMD |= AHCI_PORT_CMD_CPS; /* Indicate that there is a device on that port */ /* We received a COMINIT signal */ - pAhciPort->regSERR |= AHCI_PORT_SERR_X; - pAhciPort->regIS |= AHCI_PORT_IS_PCS; pAhciPort->regTFD |= ATA_STAT_BUSY; if (pAhciPort->fPoweredOn) @@ -1863,7 +1888,7 @@ static void ahciHBAReset(PAHCI pThis) AssertMsgFailed(("%s: Failed to stop timer!\n", __FUNCTION__)); } - /** Reset every port */ + /* Reset every port */ for (i = 0; i < pThis->cPortsImpl; i++) { PAHCIPort pAhciPort = &pThis->ahciPort[i]; @@ -1872,12 +1897,11 @@ static void ahciHBAReset(PAHCI pThis) ahciPortSwReset(pAhciPort); } - /** Init Global registers */ + /* Init Global registers */ pThis->regHbaCap = AHCI_HBA_CAP_ISS_SHIFT(AHCI_HBA_CAP_ISS_GEN2) | AHCI_HBA_CAP_S64A | /* 64bit addressing supported */ AHCI_HBA_CAP_SAM | /* AHCI mode only */ AHCI_HBA_CAP_SNCQ | /* Support native command queuing */ - AHCI_HBA_CAP_SIS | /* Interlock switch for hotplug operations */ AHCI_HBA_CAP_SSS | /* Staggered spin up */ AHCI_HBA_CAP_CCCS | /* Support command completion coalescing */ AHCI_HBA_CAP_NCS_SET(AHCI_NR_COMMAND_SLOTS) | /* Number of command slots we support */ @@ -1895,7 +1919,7 @@ static void ahciHBAReset(PAHCI pThis) pThis->f64BitAddr = false; pThis->u32PortsInterrupted = 0; pThis->f8ByteMMIO4BytesWrittenSuccessfully = false; - /** Clear the HBA Reset bit */ + /* Clear the HBA Reset bit */ pThis->regHbaCtrl &= ~AHCI_HBA_CTRL_HR; } @@ -3821,14 +3845,14 @@ static void ahciSendD2HFis(PAHCIPort pAhciPort, PAHCIPORTTASKSTATE pAhciPortTask if (pAhciPortTaskState->uATARegStatus & ATA_STAT_ERR) { /* Error bit is set. */ - pAhciPort->regIS |= AHCI_PORT_IS_TFES; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_TFES); if (pAhciPort->regIE & AHCI_PORT_IE_TFEE) fAssertIntr = true; } if (fInterrupt) { - pAhciPort->regIS |= AHCI_PORT_IS_DHRS; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_DHRS); /* Check if we should assert an interrupt */ if (pAhciPort->regIE & AHCI_PORT_IE_DHRE) fAssertIntr = true; @@ -3872,14 +3896,14 @@ static void ahciSendSDBFis(PAHCIPort pAhciPort, uint32_t uFinishedTasks, PAHCIPO if (pAhciPortTaskState->uATARegStatus & ATA_STAT_ERR) { /* Error bit is set. */ - pAhciPort->regIS |= AHCI_PORT_IS_TFES; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_TFES); if (pAhciPort->regIE & AHCI_PORT_IE_TFEE) fAssertIntr = true; } if (fInterrupt) { - pAhciPort->regIS |= AHCI_PORT_IS_SDBS; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_SDBS); /* Check if we should assert an interrupt */ if (pAhciPort->regIE & AHCI_PORT_IE_SDBE) fAssertIntr = true; @@ -4942,6 +4966,24 @@ static void ahciPortTaskGetCommandFis(PAHCIPort pAhciPort, PAHCIPORTTASKSTATE pA #ifdef DEBUG /* Print some infos about the FIS. */ ahciDumpFisInfo(pAhciPort, &pAhciPortTaskState->cmdFis[0]); + + /* Print the PRDT */ + RTGCPHYS GCPhysAddrPRDTLEntryStart = AHCI_RTGCPHYS_FROM_U32(pAhciPortTaskState->cmdHdr.u32CmdTblAddrUp, pAhciPortTaskState->cmdHdr.u32CmdTblAddr) + AHCI_CMDHDR_PRDT_OFFSET; + + ahciLog(("PRDT address %RGp number of entries %u\n", GCPhysAddrPRDTLEntryStart, AHCI_CMDHDR_PRDTL_ENTRIES(pAhciPortTaskState->cmdHdr.u32DescInf))); + + for (unsigned i = 0; i < AHCI_CMDHDR_PRDTL_ENTRIES(pAhciPortTaskState->cmdHdr.u32DescInf); i++) + { + SGLEntry SGEntry; + + ahciLog(("Entry %u at address %RGp\n", i, GCPhysAddrPRDTLEntryStart)); + PDMDevHlpPhysRead(pAhciPort->CTX_SUFF(pDevIns), GCPhysAddrPRDTLEntryStart, &SGEntry, sizeof(SGLEntry)); + + RTGCPHYS GCPhysDataAddr = AHCI_RTGCPHYS_FROM_U32(SGEntry.u32DBAUp, SGEntry.u32DBA); + ahciLog(("GCPhysAddr=%RGp Size=%u\n", GCPhysDataAddr, SGEntry.u32DescInf & SGLENTRY_DESCINF_DBC)); + + GCPhysAddrPRDTLEntryStart += sizeof(SGLEntry); + } #endif } @@ -5179,11 +5221,12 @@ static DECLCALLBACK(int) ahciAsyncIOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread) } while (true); } - ahciLog(("%s: Processing requests\n", __FUNCTION__)); ASMAtomicXchgBool(&pAhciPort->fNotificationSend, false); uint32_t cTasksToProcess = ASMAtomicXchgU32(&pAhciPort->uActTasksActive, 0); + ahciLog(("%s: Processing %u requests\n", __FUNCTION__, cTasksToProcess)); + /* Process commands. */ while ( (cTasksToProcess > 0) && RT_LIKELY(!pAhciPort->fPortReset)) @@ -5350,6 +5393,8 @@ static DECLCALLBACK(int) ahciAsyncIOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread) pAhciPort->uActReadPos %= RT_ELEMENTS(pAhciPort->ahciIOTasks); ahciLog(("%s: After uActReadPos=%u\n", __FUNCTION__, pAhciPort->uActReadPos)); cTasksToProcess--; + if (!cTasksToProcess) + cTasksToProcess = ASMAtomicXchgU32(&pAhciPort->uActTasksActive, 0); } if (uQueuedTasksFinished && RT_LIKELY(!pAhciPort->fPortReset)) @@ -5417,7 +5462,7 @@ static DECLCALLBACK(void) ahciMountNotify(PPDMIMOUNTNOTIFY pInterface) * Initialize registers */ pAhciPort->regCMD |= AHCI_PORT_CMD_CPS; - pAhciPort->regIS |= AHCI_PORT_IS_CPDS | AHCI_PORT_IS_PRCS; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_CPDS | AHCI_PORT_IS_PRCS); pAhciPort->regSERR |= AHCI_PORT_SERR_N; if (pAhciPort->regIE & AHCI_PORT_IE_CPDE) ahciHbaSetInterrupt(pAhciPort->CTX_SUFF(pAhci), pAhciPort->iLUN); @@ -5439,7 +5484,7 @@ static DECLCALLBACK(void) ahciUnmountNotify(PPDMIMOUNTNOTIFY pInterface) */ pAhciPort->regSSTS = 0; pAhciPort->regCMD &= ~AHCI_PORT_CMD_CPS; - pAhciPort->regIS |= AHCI_PORT_IS_CPDS | AHCI_PORT_IS_PRCS; + ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_CPDS | AHCI_PORT_IS_PRCS); pAhciPort->regSERR |= AHCI_PORT_SERR_N; if (pAhciPort->regIE & AHCI_PORT_IE_CPDE) ahciHbaSetInterrupt(pAhciPort->CTX_SUFF(pAhci), pAhciPort->iLUN); @@ -5852,7 +5897,7 @@ static DECLCALLBACK(int) ahciLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle, SSMR3GetU32(pSSMHandle, &pAhci->ahciPort[i].regFBU); SSMR3GetGCPhys(pSSMHandle, (RTGCPHYS *)&pAhci->ahciPort[i].GCPhysAddrClb); SSMR3GetGCPhys(pSSMHandle, (RTGCPHYS *)&pAhci->ahciPort[i].GCPhysAddrFb); - SSMR3GetU32(pSSMHandle, &pAhci->ahciPort[i].regIS); + SSMR3GetU32(pSSMHandle, (uint32_t *)&pAhci->ahciPort[i].regIS); SSMR3GetU32(pSSMHandle, &pAhci->ahciPort[i].regIE); SSMR3GetU32(pSSMHandle, &pAhci->ahciPort[i].regCMD); SSMR3GetU32(pSSMHandle, &pAhci->ahciPort[i].regTFD); diff --git a/src/VBox/Devices/Storage/ISCSIHDDCore.cpp b/src/VBox/Devices/Storage/ISCSIHDDCore.cpp index c8d769fa6..ff5302e46 100644 --- a/src/VBox/Devices/Storage/ISCSIHDDCore.cpp +++ b/src/VBox/Devices/Storage/ISCSIHDDCore.cpp @@ -107,8 +107,11 @@ typedef enum SCSIDEVTYPE #define SCSI_DEVTYPE_MASK 0x1f +/** Maximum PDU payload size we can handle in one piece. */ +#define ISCSI_PDU_SIZE_MAX _256K + /** Maximum PDU size we can handle in one piece. */ -#define ISCSI_RECV_PDU_BUFFER_SIZE (65536 + ISCSI_BHS_SIZE) +#define ISCSI_RECV_PDU_BUFFER_SIZE (ISCSI_PDU_SIZE_MAX + ISCSI_BHS_SIZE) /** Version of the iSCSI standard which this initiator driver can handle. */ @@ -887,6 +890,8 @@ restart: transit = true; break; case 0x0100: /* login operational negotiation, step 0: set parameters. */ + char szMaxPDU[16]; + RTStrPrintf(szMaxPDU, sizeof(szMaxPDU), "%u", ISCSI_PDU_SIZE_MAX); rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "HeaderDigest", "None", 0); if (RT_FAILURE(rc)) goto out; @@ -902,13 +907,13 @@ restart: rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "ImmediateData", "Yes", 0); if (RT_FAILURE(rc)) goto out; - rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "MaxRecvDataSegmentLength", "65536", 0); + rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "MaxRecvDataSegmentLength", szMaxPDU, 0); if (RT_FAILURE(rc)) goto out; - rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "MaxBurstLength", "262144", 0); + rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "MaxBurstLength", szMaxPDU, 0); if (RT_FAILURE(rc)) goto out; - rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "FirstBurstLength", "65536", 0); + rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "FirstBurstLength", szMaxPDU, 0); if (RT_FAILURE(rc)) goto out; rc = iscsiTextAddKeyValue(bBuf, sizeof(bBuf), &cbBuf, "DefaultTime2Wait", "0", 0); @@ -2757,6 +2762,11 @@ static int iscsiRead(void *pBackendData, uint64_t uOffset, void *pvBuf, goto out; } + /* + * Clip read size to a value which is supported by many targets. + */ + cbToRead = RT_MIN(cbToRead, ISCSI_PDU_SIZE_MAX); + lba = uOffset / pImage->cbSector; tls = (uint16_t)(cbToRead / pImage->cbSector); SCSIREQ sr; @@ -2786,7 +2796,12 @@ static int iscsiRead(void *pBackendData, uint64_t uOffset, void *pvBuf, rc = iscsiCommand(pImage, &sr); if (RT_FAILURE(rc)) + { AssertMsgFailed(("iscsiCommand(%s, %#llx) -> %Rrc\n", pImage->pszTargetName, uOffset, rc)); + *pcbActuallyRead = 0; + } + else + *pcbActuallyRead = cbToRead; out: LogFlowFunc(("returns %Rrc\n", rc)); @@ -2821,6 +2836,11 @@ static int iscsiWrite(void *pBackendData, uint64_t uOffset, const void *pvBuf, *pcbPreRead = 0; *pcbPostRead = 0; + /* + * Clip write size to a value which is supported by many targets. + */ + cbToWrite = RT_MIN(cbToWrite, ISCSI_PDU_SIZE_MAX); + lba = uOffset / pImage->cbSector; tls = (uint16_t)(cbToWrite / pImage->cbSector); SCSIREQ sr; diff --git a/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp b/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp index 3cf0c998a..96f66942f 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp @@ -869,6 +869,9 @@ static int CmdCreateRawVMDK(int argc, char **argv, ComPtr<IVirtualBox> aVirtualB if (!pszPartitions && pszMBRFilename) return errorSyntax(USAGE_CREATERAWVMDK, "The parameter -mbr is only valid when the parameter -partitions is also present"); +#ifdef RT_OS_DARWIN + fRelative = true; +#endif /* RT_OS_DARWIN */ RTFILE RawFile; int vrc = RTFileOpen(&RawFile, rawdisk.raw(), RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE); if (RT_FAILURE(vrc)) @@ -1118,6 +1121,20 @@ static int CmdCreateRawVMDK(int argc, char **argv, ComPtr<IVirtualBox> aVirtualB RawDescriptor.pPartitions[i].pszRawDevice = pszRawName; RawDescriptor.pPartitions[i].uPartitionStartOffset = 0; RawDescriptor.pPartitions[i].uPartitionStart = partitions.aPartitions[i].uStart * 512; +#elif defined(RT_OS_DARWIN) + /* Refer to the correct partition and use offset 0. */ + char *pszRawName; + vrc = RTStrAPrintf(&pszRawName, "%ss%u", rawdisk.raw(), + partitions.aPartitions[i].uIndex); + if (RT_FAILURE(vrc)) + { + RTPrintf("Error creating reference to individual partition %u, rc=%Rrc\n", + partitions.aPartitions[i].uIndex, vrc); + goto out; + } + RawDescriptor.pPartitions[i].pszRawDevice = pszRawName; + RawDescriptor.pPartitions[i].uPartitionStartOffset = 0; + RawDescriptor.pPartitions[i].uPartitionStart = partitions.aPartitions[i].uStart * 512; #else /** @todo not implemented yet for Windows host. Treat just * like not specified (this code is actually never reached). */ diff --git a/src/VBox/Frontends/VBoxShell/vboxshell.py b/src/VBox/Frontends/VBoxShell/vboxshell.py index 3b51e98a4..c478daa80 100755 --- a/src/VBox/Frontends/VBoxShell/vboxshell.py +++ b/src/VBox/Frontends/VBoxShell/vboxshell.py @@ -28,15 +28,17 @@ import os,sys import traceback +import shlex +import time -# Simple implementation of IConsoleCallback, one can use it as skeleton +# Simple implementation of IConsoleCallback, one can use it as skeleton # for custom implementations class GuestMonitor: def __init__(self, mach): self.mach = mach def onMousePointerShapeChange(self, visible, alpha, xHot, yHot, width, height, shape): - print "%s: onMousePointerShapeChange: visible=%d" %(self.mach.name, visible) + print "%s: onMousePointerShapeChange: visible=%d" %(self.mach.name, visible) def onMouseCapabilityChange(self, supportsAbsolute, needsHostCursor): print "%s: onMouseCapabilityChange: needsHostCursor=%d" %(self.mach.name, needsHostCursor) @@ -99,10 +101,10 @@ class VBoxMonitor: def onMachineDataChange(self,id): print "onMachineDataChange: %s" %(id) - + def onExtraDataCanChange(self, id, key, value): print "onExtraDataCanChange: %s %s=>%s" %(id, key, value) - return True, "" + return True, "" def onExtraDataChange(self, id, key, value): print "onExtraDataChange: %s %s=>%s" %(id, key, value) @@ -126,7 +128,7 @@ class VBoxMonitor: print "onSnapshotChange: %s %s" %(mach, id) def onGuestPropertyChange(self, id, name, newValue, flags): - print "onGuestPropertyChange: %s: %s=%s" %(id, name, newValue) + print "onGuestPropertyChange: %s: %s=%s" %(id, name, newValue) g_hasreadline = 1 try: @@ -201,16 +203,17 @@ def autoCompletion(commands, ctx): g_verbose = True def split_no_quotes(s): - return s.split() + return shlex.split(s) def createVm(ctx,name,kind,base): mgr = ctx['mgr'] vb = ctx['vb'] - mach = vb.createMachine(name, kind, base, - "00000000-0000-0000-0000-000000000000") + mach = vb.createMachine(name, kind, base, "") mach.saveSettings() print "created machine with UUID",mach.id vb.registerMachine(mach) + # update cache + getMachines(ctx, True) def removeVm(ctx,mach): mgr = ctx['mgr'] @@ -218,13 +221,18 @@ def removeVm(ctx,mach): id = mach.id print "removing machine ",mach.name,"with UUID",id session = ctx['global'].openMachineSession(id) - mach=session.machine - for d in mach.getHardDiskAttachments(): - mach.detachHardDisk(d.controller, d.port, d.device) + try: + mach = session.Machine + for d in ctx['global'].getArray(mach, 'hardDiskAttachments'): + mach.detachHardDisk(d.controller, d.port, d.device) + except: + traceback.print_exc() ctx['global'].closeMachineSession(session) mach = vb.unregisterMachine(id) if mach: mach.deleteSettings() + # update cache + getMachines(ctx, True) def startVm(ctx,mach,type): mgr = ctx['mgr'] @@ -255,8 +263,13 @@ def startVm(ctx,mach,type): if not ctx['remote']: print session.QueryErrorObject(rc) -def getMachines(ctx): - return ctx['global'].getArray(ctx['vb'], 'machines') +def getMachines(ctx, invalidate = False): + if ctx['vb'] is not None: + if ctx['_machlist'] is None or invalidate: + ctx['_machlist'] = ctx['global'].getArray(ctx['vb'], 'machines') + return ctx['_machlist'] + else: + return [] def asState(var): if var: @@ -274,7 +287,6 @@ def guestExec(ctx, machine, console, cmds): exec cmds def monitorGuest(ctx, machine, console, dur): - import time cb = ctx['global'].createCallback('IConsoleCallback', GuestMonitor, machine) console.registerCallback(cb) if dur == -1: @@ -286,12 +298,11 @@ def monitorGuest(ctx, machine, console, dur): ctx['global'].waitForEvents(500) # We need to catch all exceptions here, otherwise callback will never be unregistered except: - pass + pass console.unregisterCallback(cb) def monitorVbox(ctx, dur): - import time vbox = ctx['vb'] cb = ctx['global'].createCallback('IVirtualBoxCallback', VBoxMonitor, vbox) vbox.registerCallback(cb) @@ -328,14 +339,15 @@ def cmdExistingVm(ctx,mach,cmd,args): if ctx['remote'] and cmd == 'stats2': print 'Trying to use local only functionality, ignored' return - console=session.console - ops={'pause' : lambda: console.pause(), - 'resume': lambda: console.resume(), - 'powerdown': lambda: console.powerDown(), - 'powerbutton': lambda: console.powerButton(), - 'stats': lambda: guestStats(ctx, mach), - 'guest': lambda: guestExec(ctx, mach, console, args), - 'monitorGuest': lambda: monitorGuest(ctx, mach, console, args) + console=session.console + ops={'pause': lambda: console.pause(), + 'resume': lambda: console.resume(), + 'powerdown': lambda: console.powerDown(), + 'powerbutton': lambda: console.powerButton(), + 'stats': lambda: guestStats(ctx, mach), + 'guest': lambda: guestExec(ctx, mach, console, args), + 'monitorGuest': lambda: monitorGuest(ctx, mach, console, args), + 'save': lambda: console.saveState().waitForCompletion(-1) } try: ops[cmd]() @@ -346,7 +358,6 @@ def cmdExistingVm(ctx,mach,cmd,args): session.close() -# can cache known machines, if needed def machById(ctx,id): mach = None for m in getMachines(ctx): @@ -387,12 +398,29 @@ def helpCmd(ctx, args): return 0 def listCmd(ctx, args): - for m in getMachines(ctx): + for m in getMachines(ctx, True): print "Machine '%s' [%s], state=%s" %(m.name,m.id,m.sessionState) return 0 +def getControllerType(type): + if type == 0: + return "Null" + elif type == 1: + return "LsiLogic" + elif type == 2: + return "BusLogic" + elif type == 3: + return "IntelAhci" + elif type == 4: + return "PIIX3" + elif type == 5: + return "PIIX4" + elif type == 6: + return "ICH6" + else: + return "Unknown" + def infoCmd(ctx,args): - import time if (len(args) < 2): print "usage: info [vmname|uuid]" return 0 @@ -401,24 +429,76 @@ def infoCmd(ctx,args): return 0 os = ctx['vb'].getGuestOSType(mach.OSTypeId) print " One can use setvar <mach> <var> <value> to change variable, using name in []." - print " Name [name]: ",mach.name - print " ID [n/a]: ",mach.id - print " OS Type [n/a]: ",os.description - print " CPUs [CPUCount]: %d" %(mach.CPUCount) - print " RAM [memorySize]: %dM" %(mach.memorySize) - print " VRAM [VRAMSize]: %dM" %(mach.VRAMSize) - print " Monitors [monitorCount]: %d" %(mach.monitorCount) - print " Clipboard mode [clipboardMode]: %d" %(mach.clipboardMode) - print " Machine status [n/a]: " ,mach.sessionState + print " Name [name]: %s" %(mach.name) + print " ID [n/a]: %s" %(mach.id) + print " OS Type [n/a]: %s" %(os.description) + print + print " CPUs [CPUCount]: %d" %(mach.CPUCount) + print " RAM [memorySize]: %dM" %(mach.memorySize) + print " VRAM [VRAMSize]: %dM" %(mach.VRAMSize) + print " Monitors [monitorCount]: %d" %(mach.monitorCount) + print + print " Clipboard mode [clipboardMode]: %d" %(mach.clipboardMode) + print " Machine status [n/a]: %d" % (mach.sessionState) + print bios = mach.BIOSSettings print " ACPI [BIOSSettings.ACPIEnabled]: %s" %(asState(bios.ACPIEnabled)) print " APIC [BIOSSettings.IOAPICEnabled]: %s" %(asState(bios.IOAPICEnabled)) - print " PAE [PAEEnabled]: %s" %(asState(mach.PAEEnabled)) - print " Hardware virtualization [HWVirtExEnabled]: ",asState(mach.HWVirtExEnabled) - print " VPID support [HWVirtExVPIDEnabled]: ",asState(mach.HWVirtExVPIDEnabled) - print " Hardware 3d acceleration[accelerate3DEnabled]: ",asState(mach.accelerate3DEnabled) - print " Nested paging [HWVirtExNestedPagingEnabled]: ",asState(mach.HWVirtExNestedPagingEnabled) - print " Last changed [n/a]: ",time.asctime(time.localtime(mach.lastStateChange/1000)) + print " PAE [PAEEnabled]: %s" %(asState(int(mach.PAEEnabled))) + print " Hardware virtualization [HWVirtExEnabled]: " + asState(mach.HWVirtExEnabled) + print " VPID support [HWVirtExVPIDEnabled]: " + asState(mach.HWVirtExVPIDEnabled) + print " Hardware 3d acceleration[accelerate3DEnabled]: " + asState(mach.accelerate3DEnabled) + print " Nested paging [HWVirtExNestedPagingEnabled]: " + asState(mach.HWVirtExNestedPagingEnabled) + print " Last changed [n/a]: " + time.asctime(time.localtime(long(mach.lastStateChange)/1000)) + print " VRDP server [VRDPServer.enabled]: %s" %(asState(mach.VRDPServer.enabled)) + + controllers = ctx['global'].getArray(mach, 'storageControllers') + if controllers: + print + print " Controllers:" + for controller in controllers: + print " %s %s bus: %d" % (controller.name, getControllerType(controller.controllerType), controller.bus) + + disks = ctx['global'].getArray(mach, 'hardDiskAttachments') + if disks: + print + print " Hard disk(s):" + for disk in disks: + print " Controller: %s port: %d device: %d:" % (disk.controller, disk.port, disk.device) + hd = disk.hardDisk + print " id: %s" %(hd.id) + print " location: %s" %(hd.location) + print " name: %s" %(hd.name) + print " format: %s" %(hd.format) + print + + dvd = mach.DVDDrive + if dvd.getHostDrive(): + hdvd = dvd.getHostDrive() + print " DVD:" + print " Host disk: %s" %(hdvd.name) + print + + if dvd.getImage(): + vdvd = dvd.getImage() + print " DVD:" + print " Image at: %s" %(vdvd.location) + print " Size: %s" %(vdvd.size) + print + + floppy = mach.floppyDrive + if floppy.getHostDrive(): + hfloppy = floppy.getHostDrive() + print " Floppy:" + print " Host disk: %s" %(hfloppy.name) + print + + if floppy.getImage(): + vfloppy = floppy.getImage() + print " Floppy:" + print " Image at: %s" %(vfloppy.location) + print " Size: %s" %(vfloppy.size) + print return 0 @@ -486,6 +566,13 @@ def resumeCmd(ctx, args): cmdExistingVm(ctx, mach, 'resume', '') return 0 +def saveCmd(ctx, args): + mach = argsToMach(ctx,args) + if mach == None: + return 0 + cmdExistingVm(ctx, mach, 'save', '') + return 0 + def statsCmd(ctx, args): mach = argsToMach(ctx,args) if mach == None: @@ -527,7 +614,11 @@ def setvarCmd(ctx, args): def quitCmd(ctx, args): return 1 -def aliasesCmd(ctx, args): +def aliasCmd(ctx, args): + if (len(args) == 3): + aliases[args[1]] = args[2] + return 0 + for (k,v) in aliases.items(): print "'%s' is an alias for '%s'" %(k,v) return 0 @@ -537,6 +628,22 @@ def verboseCmd(ctx, args): g_verbose = not g_verbose return 0 +def getUSBStateString(state): + if state == 0: + return "NotSupported" + elif state == 1: + return "Unavailable" + elif state == 2: + return "Busy" + elif state == 3: + return "Available" + elif state == 4: + return "Held" + elif state == 5: + return "Captured" + else: + return "Unknown" + def hostCmd(ctx, args): host = ctx['vb'].host cnt = host.processorCount @@ -544,13 +651,31 @@ def hostCmd(ctx, args): for i in range(0,cnt): print "Processor #%d speed: %dMHz" %(i,host.getProcessorSpeed(i)) + print "RAM: %dM (free %dM)" %(host.memorySize, host.memoryAvailable) + print "OS: %s (%s)" %(host.operatingSystem, host.OSVersion) + if host.Acceleration3DAvailable: + print "3D acceleration available" + else: + print "3D acceleration NOT available" + + print "Network interfaces:" + for ni in ctx['global'].getArray(host, 'networkInterfaces'): + print " %s (%s)" %(ni.name, ni.IPAddress) + + print "DVD drives:" + for dd in ctx['global'].getArray(host, 'DVDDrives'): + print " %s - %s" %(dd.name, dd.description) + + print "USB devices:" + for ud in ctx['global'].getArray(host, 'USBDevices'): + print " %s (vendorId=%d productId=%d serial=%s) %s" %(ud.product, ud.vendorId, ud.productId, ud.serialNumber, getUSBStateString(ud.state)) + if ctx['perf']: for metric in ctx['perf'].query(["*"], [host]): print metric['name'], metric['values_as_string'] return 0 - def monitorGuestCmd(ctx, args): if (len(args) < 2): print "usage: monitorGuest name (duration)" @@ -585,8 +710,8 @@ def getAdapterType(ctx, type): elif (type == ctx['global'].constants.NetworkAdapterType_Null): return None else: - raise Exception("Unknown adapter type: "+type) - + raise Exception("Unknown adapter type: "+type) + def portForwardCmd(ctx, args): if (len(args) != 5): @@ -608,14 +733,14 @@ def portForwardCmd(ctx, args): profile_name = proto+"_"+str(hostPort)+"_"+str(guestPort) config = "VBoxInternal/Devices/" + adapterType + "/" config = config + str(adapter.slot) +"/LUN#0/Config/" + profile_name - + mach.setExtraData(config + "/Protocol", proto) mach.setExtraData(config + "/HostPort", str(hostPort)) mach.setExtraData(config + "/GuestPort", str(guestPort)) mach.saveSettings() session.close() - + return 0 @@ -660,13 +785,110 @@ def reloadExtCmd(ctx, args): autoCompletion(commands, ctx) return 0 + +def runScriptCmd(ctx, args): + if (len(args) != 2): + print "usage: runScript <script>" + return 0 + try: + lf = open(args[1], 'r') + except IOError,e: + print "cannot open:",args[1], ":",e + return 0 + + try: + for line in lf: + done = runCommand(ctx, line) + if done != 0: break + except Exception,e: + print "error:",e + if g_verbose: + traceback.print_exc() + lf.close() + return 0 + +def sleepCmd(ctx, args): + if (len(args) != 2): + print "usage: sleep <secs>" + return 0 + + try: + time.sleep(float(args[1])) + except: + # to allow sleep interrupt + pass + return 0 + + +def shellCmd(ctx, args): + if (len(args) < 2): + print "usage: shell <commands>" + return 0 + cmd = ' '.join(args[1:]) + try: + os.system(cmd) + except KeyboardInterrupt: + # to allow shell command interruption + pass + return 0 + + +def connectCmd(ctx, args): + if (len(args) > 4): + print "usage: connect [url] [username] [passwd]" + return 0 + + if ctx['vb'] is not None: + print "Already connected, disconnect first..." + return 0 + + if (len(args) > 1): + url = args[1] + else: + url = None + + if (len(args) > 2): + user = args[2] + else: + user = "" + + if (len(args) > 3): + passwd = args[3] + else: + passwd = "" + + vbox = ctx['global'].platform.connect(url, user, passwd) + ctx['vb'] = vbox + print "Running VirtualBox version %s" %(vbox.version) + ctx['perf'] = ctx['global'].getPerfCollector(ctx['vb']) + return 0 + +def disconnectCmd(ctx, args): + if (len(args) != 1): + print "usage: disconnect" + return 0 + + if ctx['vb'] is None: + print "Not connected yet." + return 0 + + try: + ctx['global'].platform.disconnect() + except: + ctx['vb'] = None + raise + + ctx['vb'] = None + return 0 + aliases = {'s':'start', 'i':'info', 'l':'list', 'h':'help', - 'a':'aliases', + 'a':'alias', 'q':'quit', 'exit':'quit', - 'v':'verbose'} + 'v':'verbose', + '!':'shell'} commands = {'help':['Prints help information', helpCmd, 0], 'start':['Start virtual machine by name or uuid', startCmd, 0], @@ -674,29 +896,30 @@ commands = {'help':['Prints help information', helpCmd, 0], 'remove':['Remove virtual machine', removeCmd, 0], 'pause':['Pause virtual machine', pauseCmd, 0], 'resume':['Resume virtual machine', resumeCmd, 0], + 'save':['Save execution state of virtual machine', saveCmd, 0], 'stats':['Stats for virtual machine', statsCmd, 0], 'powerdown':['Power down virtual machine', powerdownCmd, 0], 'powerbutton':['Effectively press power button', powerbuttonCmd, 0], 'list':['Shows known virtual machines', listCmd, 0], 'info':['Shows info on machine', infoCmd, 0], - 'aliases':['Shows aliases', aliasesCmd, 0], + 'alias':['Control aliases', aliasCmd, 0], 'verbose':['Toggle verbosity', verboseCmd, 0], 'setvar':['Set VMs variable: setvar Fedora BIOSSettings.ACPIEnabled True', setvarCmd, 0], - 'eval':['Evaluate arbitrary Python construction: eval for m in getMachines(ctx): print m.name,"has",m.memorySize,"M"', evalCmd, 0], + 'eval':['Evaluate arbitrary Python construction: eval \'for m in getMachines(ctx): print m.name,"has",m.memorySize,"M"\'', evalCmd, 0], 'quit':['Exits', quitCmd, 0], 'host':['Show host information', hostCmd, 0], - 'guest':['Execute command for guest: guest Win32 console.mouse.putMouseEvent(20, 20, 0, 0)', guestCmd, 0], + 'guest':['Execute command for guest: guest Win32 \'console.mouse.putMouseEvent(20, 20, 0, 0)\'', guestCmd, 0], 'monitorGuest':['Monitor what happens with the guest for some time: monitorGuest Win32 10', monitorGuestCmd, 0], 'monitorVbox':['Monitor what happens with Virtual Box for some time: monitorVbox 10', monitorVboxCmd, 0], 'portForward':['Setup permanent port forwarding for a VM, takes adapter number host port and guest port: portForward Win32 0 8080 80', portForwardCmd, 0], 'showLog':['Show log file of the VM, : showLog Win32', showLogCmd, 0], 'reloadExt':['Reload custom extensions: reloadExt', reloadExtCmd, 0], + 'runScript':['Run VBox script: runScript script.vbox', runScriptCmd, 0], + 'sleep':['Sleep for specified number of seconds: sleep 3.14159', sleepCmd, 0], + 'shell':['Execute external shell command: shell "ls /etc/rc*"', shellCmd, 0] } -def runCommand(ctx, cmd): - if len(cmd) == 0: return 0 - args = split_no_quotes(cmd) - if len(args) == 0: return 0 +def runCommandArgs(ctx, args): c = args[0] if aliases.get(c, None) != None: c = aliases[c] @@ -706,6 +929,13 @@ def runCommand(ctx, cmd): return 0 return ci[1](ctx, args) + +def runCommand(ctx, cmd): + if len(cmd) == 0: return 0 + args = split_no_quotes(cmd) + if len(args) == 0: return 0 + return runCommandArgs(ctx, args) + # # To write your own custom commands to vboxshell, create # file ~/.VirtualBox/shellext.py with content like @@ -721,7 +951,7 @@ def runCommand(ctx, cmd): # This file also will be read automatically on startup. # def checkUserExtensions(ctx, cmds, folder): - name = os.path.join(folder, "shellext.py") + name = os.path.join(str(folder), "shellext.py") if not os.path.isfile(name): return d = {} @@ -736,11 +966,21 @@ def checkUserExtensions(ctx, cmds, folder): traceback.print_exc() def interpret(ctx): + if ctx['remote']: + commands['connect'] = ["Connect to remote VBox instance", connectCmd, 0] + commands['disconnect'] = ["Disconnect from remote VBox instance", disconnectCmd, 0] + vbox = ctx['vb'] - print "Running VirtualBox version %s" %(vbox.version) - ctx['perf'] = ctx['global'].getPerfCollector(ctx['vb']) - checkUserExtensions(ctx, commands, vbox.homeFolder) + if vbox is not None: + print "Running VirtualBox version %s" %(vbox.version) + ctx['perf'] = ctx['global'].getPerfCollector(ctx['vb']) + home = vbox.homeFolder + else: + ctx['perf'] = None + home = os.path.join(os.path.expanduser("~"), ".VirtualBox") + + checkUserExtensions(ctx, commands, home) autoCompletion(commands, ctx) @@ -774,22 +1014,41 @@ def interpret(ctx): except: pass +def runCommandCb(ctx, cmd, args): + args.insert(0, cmd) + return runCommandArgs(ctx, args) -from vboxapi import VirtualBoxManager - -def main(argv): +def main(argv): style = None - if len(argv) > 1: - if argv[1] == "-w": + autopath = False + argv.pop(0) + while len(argv) > 0: + if argv[0] == "-w": style = "WEBSERVICE" - + if argv[0] == "-a": + autopath = True + argv.pop(0) + + if autopath: + cwd = os.getcwd() + vpp = os.environ.get("VBOX_PROGRAM_PATH") + if vpp is None and (os.path.isfile(os.path.join(cwd, "VirtualBox")) or os.path.isfile(os.path.join(cwd, "VirtualBox.exe"))) : + vpp = cwd + print "Autodetected VBOX_PROGRAM_PATH as",vpp + os.environ["VBOX_PROGRAM_PATH"] = cwd + sys.path.append(os.path.join(vpp, "sdk", "installer")) + + from vboxapi import VirtualBoxManager g_virtualBoxManager = VirtualBoxManager(style, None) ctx = {'global':g_virtualBoxManager, 'mgr':g_virtualBoxManager.mgr, - 'vb':g_virtualBoxManager.vbox, + 'vb':g_virtualBoxManager.vbox, 'ifaces':g_virtualBoxManager.constants, - 'remote':g_virtualBoxManager.remote, - 'type':g_virtualBoxManager.type + 'remote':g_virtualBoxManager.remote, + 'type':g_virtualBoxManager.type, + 'run': lambda cmd,args: runCommandCb(ctx, cmd, args), + 'machById': lambda id: machById(ctx,id), + '_machlist':None } interpret(ctx) g_virtualBoxManager.deinit() diff --git a/src/VBox/Frontends/VirtualBox/include/VBoxConsoleView.h b/src/VBox/Frontends/VirtualBox/include/VBoxConsoleView.h index 3c0eac970..27c014464 100644 --- a/src/VBox/Frontends/VirtualBox/include/VBoxConsoleView.h +++ b/src/VBox/Frontends/VirtualBox/include/VBoxConsoleView.h @@ -88,6 +88,9 @@ public: bool isMouseAbsolute() const { return mMouseAbsolute; } + bool shouldHideHostPointer() const + { return mMouseCaptured || (mMouseAbsolute && mHideHostPointer); } + void setAutoresizeGuest (bool on); void onFullscreenChange (bool on); diff --git a/src/VBox/Frontends/VirtualBox/include/VBoxConsoleWnd.h b/src/VBox/Frontends/VirtualBox/include/VBoxConsoleWnd.h index f37786fd9..5ae74d40a 100644 --- a/src/VBox/Frontends/VirtualBox/include/VBoxConsoleWnd.h +++ b/src/VBox/Frontends/VirtualBox/include/VBoxConsoleWnd.h @@ -36,6 +36,7 @@ #include <QColor> #include <QDialog> #include <QMenu> +#include <QPointer> #ifdef VBOX_WITH_DEBUGGER_GUI # include <VBox/dbggui.h> @@ -376,7 +377,7 @@ private: bool mIsGraphicsSupported : 1; bool mIsWaitingModeResize : 1; bool was_max : 1; - QObjectList hidden_children; + QList < QPointer <QWidget> > mHiddenChildren; int console_style; QPalette mErasePalette; diff --git a/src/VBox/Frontends/VirtualBox/include/VBoxDefs.h b/src/VBox/Frontends/VirtualBox/include/VBoxDefs.h index 7c239abe4..75362b8b3 100644 --- a/src/VBox/Frontends/VirtualBox/include/VBoxDefs.h +++ b/src/VBox/Frontends/VirtualBox/include/VBoxDefs.h @@ -150,6 +150,7 @@ struct VBoxDefs static const char* GUI_FirstRun; static const char* GUI_SaveMountedAtRuntime; static const char* GUI_ShowMiniToolBar; + static const char* GUI_MiniToolBarAlignment; static const char* GUI_MiniToolBarAutoHide; static const char* GUI_LastCloseAction; static const char* GUI_SuppressMessages; diff --git a/src/VBox/Frontends/VirtualBox/include/VBoxProblemReporter.h b/src/VBox/Frontends/VirtualBox/include/VBoxProblemReporter.h index 48a836b80..a6f0fdc23 100644 --- a/src/VBox/Frontends/VirtualBox/include/VBoxProblemReporter.h +++ b/src/VBox/Frontends/VirtualBox/include/VBoxProblemReporter.h @@ -262,6 +262,7 @@ public: VBoxDefs::MediaType aType, const QString &aLocation); void cannotCloseMedium (QWidget *aParent, const VBoxMedium &aMedium, const COMResult &aResult); + void cannotEjectDrive(); void cannotOpenSession (const CSession &session); void cannotOpenSession (const CVirtualBox &vbox, const CMachine &machine, diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts index 7085de3ef..3e2dca281 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts @@ -5090,6 +5090,14 @@ p, li {white-space: pre-wrap; } <translation>Falls aktiviert wird die Mini-Toolbar im Vollbildmodus und im nahtlosen Modus gezeigt.</translation> </message> <message> + <source>If checked, show the Mini ToolBar at the top of the screen, rather than in it's default position at the bottom of the screen.</source> + <translation>Falls aktiviert wird die Mini-Toolbar am oberen Bildschirmrand gezeigt</translation> + </message> + <message> + <source>Show At &Top Of Screen</source> + <translation>Zeige am oberen Bildschirmrand</translation> + </message> + <message> <source>Show In &Fullscreen/Seamless</source> <translation>Zeige im &Fullscreen/Seamless-Modus</translation> </message> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts index 4b11c0656..72f184ed6 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts @@ -1,6269 +1,4873 @@ -<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0"> -<context> +<TS> + <context> <name>@@@</name> <message> - <source>English</source> - <comment>Native language name</comment> - <translation>អង់គ្លេស</translation> + <source>English</source> + <comment>Native language name</comment> + <translation>ខ្មែរ</translation> </message> <message> - <source>--</source> - <comment>Native language country name (empty if this language is for all countries)</comment> - <translation>--</translation> + <source>--</source> + <comment>Native language country name (empty if this language is for all countries)</comment> + <translation>--</translation> </message> <message> - <source>English</source> - <comment>Language name, in English</comment> - <translation>អង់គ្លេស</translation> + <source>English</source> + <comment>Language name, in English</comment> + <translation>Khmer</translation> </message> <message> - <source>--</source> - <comment>Language country name, in English (empty if native country name is empty)</comment> - <translation>--</translation> + <source>--</source> + <comment>Language country name, in English (empty if native country name is empty)</comment> + <translation>--</translation> </message> <message> - <source>Sun Microsystems, Inc.</source> - <comment>Comma-separated list of translators</comment> - <translation>Khoem Sokhem</translation> + <source>Sun Microsystems, Inc.</source> + <comment>Comma-separated list of translators</comment> + <translation>Sun Microsystems, Inc.</translation> </message> -</context> -<context> + </context> + <context> <name>AttachmentsModel</name> <message> - <source>Double-click to add a new attachment</source> - <translation>ចុចទ្វេដងដើម្បីបន្ថែមឯកសារភ្ជាប់ថ្មី</translation> + <source>Double-click to add a new attachment</source> + <translation>ចុចទ្វេដងដើម្បីបន្ថែមឯកសារភ្ជាប់ថ្មី</translation> </message> <message> - <source>Hard Disk</source> - <translation>ថាសរឹង</translation> + <source>Hard Disk</source> + <translation>ថាសរឹង</translation> </message> <message> - <source>Slot</source> - <translation>រន្ធ</translation> + <source>Slot</source> + <translation>រន្ធ</translation> </message> -</context> -<context> + </context> + <context> <name>QApplication</name> <message> - <source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source> - <translation>អាចប្រតិបត្តិបាន <b>%1</b> ទាមទារ Qt %2.x រកឃើញ Qt %3 ។</translation> + <source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source> + <translation>អាចប្រតិបត្តិបាន <b>%1</b> ទាមទារ Qt %2.x រកឃើញ Qt %3 ។</translation> </message> <message> - <source>Incompatible Qt Library Error</source> - <translation>កំហុសបណ្ណាល័យ Qt មិនឆបគ្នា</translation> + <source>Incompatible Qt Library Error</source> + <translation>កំហុសបណ្ណាល័យ Qt មិនឆបគ្នា</translation> </message> <message> - <source>VirtualBox - Error In %1</source> - <translation>VirtualBox - កំហុសនៅក្នុង %1</translation> + <source>VirtualBox - Error In %1</source> + <translation>VirtualBox - កំហុសនៅក្នុង %1</translation> </message> <message> - <source><html><b>%1 (rc=%2)</b><br/><br/></source> - <translation><html><b>%1 (rc=%2)</b><br/><br/></translation> + <source><html><b>%1 (rc=%2)</b><br/><br/></source> + <translation><html><b>%1 (rc=%2)</b><br/><br/></translation> </message> <message> - <source>It may help to reinstall VirtualBox.</source> - <translation>វាអាចជួយឲ្យដំឡើង VirtualBox ឡើងវិញ ។</translation> + <source>It may help to reinstall VirtualBox.</source> + <translation>វាអាចជួយឲ្យដំឡើង VirtualBox ឡើងវិញ ។</translation> </message> - <message> - <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Re-setup the kernel module by executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Make sure the kernel module has been loaded successfully.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>VirtualBox - Runtime Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><b>Cannot access the kernel driver!</b><br/><br/></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Kernel driver not accessible</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unknown %2 error during initialization of the Runtime</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The VirtualBox kernel modules do not fit to this version of VirtualBox. The installation of VirtualBox was apparently not successful. It may help to completely uninstall and re-install VirtualBox.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The VirtualBox kernel modules do not fit to this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>should fix that problem. Make sure that you don't mix the OSE version and the PUEL version of VirtualBox.</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>QIArrowSplitter</name> - <message> - <source>&Back</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Next</source> - <translation type="unfinished">បន្ទាប់</translation> - </message> -</context> -<context> - <name>QIFileDialog</name> - <message> - <source>Select a directory</source> - <translation type="unfinished">ជ្រើសថត</translation> - </message> - <message> - <source>Select a file</source> - <translation type="unfinished">ជ្រើសឯកសារ</translation> - </message> -</context> -<context> + </context> + <context> <name>QIHelpButton</name> <message> - <source>&Help</source> - <translation>ជំនួយ</translation> + <source>&Help</source> + <translation>ជំនួយ</translation> </message> -</context> -<context> + </context> + <context> <name>QIHotKeyEdit</name> <message> - <source>Left </source> - <translation>ឆ្វេង </translation> + <source>Left </source> + <translation>ឆ្វេង </translation> </message> <message> - <source>Right </source> - <translation>ស្ដាំ </translation> + <source>Right </source> + <translation>ស្ដាំ </translation> </message> <message> - <source>Left Shift</source> - <translation>ប្ដូរ(Shift) ឆ្វេង</translation> + <source>Left Shift</source> + <translation>ប្ដូរ(Shift) ឆ្វេង</translation> </message> <message> - <source>Right Shift</source> - <translation>ប្ដូរ(Shift) ស្ដាំ</translation> + <source>Right Shift</source> + <translation>ប្ដូរ(Shift) ស្ដាំ</translation> </message> <message> - <source>Left Ctrl</source> - <translation>បញ្ជា (Ctrl) ឆ្វេង</translation> + <source>Left Ctrl</source> + <translation>បញ្ជា (Ctrl) ឆ្វេង</translation> </message> <message> - <source>Right Ctrl</source> - <translation>បញ្ជា(Ctrl) ស្ដាំ</translation> + <source>Right Ctrl</source> + <translation>បញ្ជា(Ctrl) ស្ដាំ</translation> </message> <message> - <source>Left Alt</source> - <translation>ជំនួស(Alt) ឆ្វេង</translation> + <source>Left Alt</source> + <translation>ជំនួស(Alt) ឆ្វេង</translation> </message> <message> - <source>Right Alt</source> - <translation>ជំនួស(Alt) ស្ដាំ</translation> + <source>Right Alt</source> + <translation>ជំនួស(Alt) ស្ដាំ</translation> </message> <message> - <source>Left WinKey</source> - <translation>គ្រាប់ចុច(Win) ឆ្វេង</translation> + <source>Left WinKey</source> + <translation>គ្រាប់ចុច(Win) ឆ្វេង</translation> </message> <message> - <source>Right WinKey</source> - <translation>គ្រាប់ចុច(Win) ស្ដាំ</translation> + <source>Right WinKey</source> + <translation>គ្រាប់ចុច(Win) ស្ដាំ</translation> </message> <message> - <source>Menu key</source> - <translation>គ្រាប់ចុចម៉ឺនុយ</translation> + <source>Menu key</source> + <translation>គ្រាប់ចុចម៉ឺនុយ</translation> </message> <message> - <source>Alt Gr</source> - <translation>Alt Gr</translation> + <source>Alt Gr</source> + <translation>Alt Gr</translation> </message> <message> - <source>Caps Lock</source> - <translation>ប្ដូរជាប់(Caps Lock)</translation> + <source>Caps Lock</source> + <translation>ប្ដូរជាប់(Caps Lock)</translation> </message> <message> - <source>Scroll Lock</source> - <translation>Scroll Lock</translation> + <source>Scroll Lock</source> + <translation>Scroll Lock</translation> </message> <message> - <source><key_%1></source> - <translation><key_%1></translation> + <source><key_%1></source> + <translation><key_%1></translation> </message> <message> - <source>Pause</source> - <translation>ផ្អាក</translation> + <source>Pause</source> + <translation>ផ្អាក</translation> </message> <message> - <source>Print Screen</source> - <translation>បោះពុម្ពអេក្រង់</translation> + <source>Print Screen</source> + <translation>បោះពុម្ពអេក្រង់</translation> </message> <message> - <source>F1</source> - <translation>F1</translation> + <source>F1</source> + <translation>F1</translation> </message> <message> - <source>F2</source> - <translation>F2</translation> + <source>F2</source> + <translation>F2</translation> </message> <message> - <source>F3</source> - <translation>F3</translation> + <source>F3</source> + <translation>F3</translation> </message> <message> - <source>F4</source> - <translation>F4</translation> + <source>F4</source> + <translation>F4</translation> </message> <message> - <source>F5</source> - <translation>F5</translation> + <source>F5</source> + <translation>F5</translation> </message> <message> - <source>F6</source> - <translation>F6</translation> + <source>F6</source> + <translation>F6</translation> </message> <message> - <source>F7</source> - <translation>F7</translation> + <source>F7</source> + <translation>F7</translation> </message> <message> - <source>F8</source> - <translation>F8</translation> + <source>F8</source> + <translation>F8</translation> </message> <message> - <source>F9</source> - <translation>F9</translation> + <source>F9</source> + <translation>F9</translation> </message> <message> - <source>F10</source> - <translation>F10</translation> + <source>F10</source> + <translation>F10</translation> </message> <message> - <source>F11</source> - <translation>F11</translation> + <source>F11</source> + <translation>F11</translation> </message> <message> - <source>F12</source> - <translation>F12</translation> + <source>F12</source> + <translation>F12</translation> </message> <message> - <source>F13</source> - <translation>F13</translation> + <source>F13</source> + <translation>F13</translation> </message> <message> - <source>F14</source> - <translation>F14</translation> + <source>F14</source> + <translation>F14</translation> </message> <message> - <source>F15</source> - <translation>F15</translation> + <source>F15</source> + <translation>F15</translation> </message> <message> - <source>F16</source> - <translation>F16</translation> + <source>F16</source> + <translation>F16</translation> </message> <message> - <source>F17</source> - <translation>F17</translation> + <source>F17</source> + <translation>F17</translation> </message> <message> - <source>F18</source> - <translation>F18</translation> + <source>F18</source> + <translation>F18</translation> </message> <message> - <source>F19</source> - <translation>F19</translation> + <source>F19</source> + <translation>F19</translation> </message> <message> - <source>F20</source> - <translation>F20</translation> + <source>F20</source> + <translation>F20</translation> </message> <message> - <source>F21</source> - <translation>F21</translation> + <source>F21</source> + <translation>F21</translation> </message> <message> - <source>F22</source> - <translation>F22</translation> + <source>F22</source> + <translation>F22</translation> </message> <message> - <source>F23</source> - <translation>F23</translation> + <source>F23</source> + <translation>F23</translation> </message> <message> - <source>F24</source> - <translation>F24</translation> + <source>F24</source> + <translation>F24</translation> </message> <message> - <source>Num Lock</source> - <translation>ប្ដូរជាប់ (Num Lock)</translation> + <source>Num Lock</source> + <translation>ប្ដូរជាប់ (Num Lock)</translation> </message> <message> - <source>Forward</source> - <translation>បញ្ជូនបន្ត</translation> + <source>Forward</source> + <translation>បញ្ជូនបន្ត</translation> </message> <message> - <source>Back</source> - <translation>ថយក្រោយ</translation> + <source>Back</source> + <translation>ថយក្រោយ</translation> </message> -</context> -<context> + </context> + <context> <name>QIHttp</name> <message> - <source>Connection timed out</source> - <translation>អស់ពេលតភ្ជាប់</translation> + <source>Connection timed out</source> + <translation>អស់ពេលតភ្ជាប់</translation> </message> <message> - <source>Could not locate the file on the server (response: %1)</source> - <translation>មិនអាចបម្រុងទុកឯកសារនៅលើម៉ាស៊ីនបម្រើ (ឆ្លើយតប ៖ %1)</translation> + <source>Could not locate the file on the server (response: %1)</source> + <translation>មិនអាចបម្រុងទុកឯកសារនៅលើម៉ាស៊ីនបម្រើ (ឆ្លើយតប ៖ %1)</translation> </message> -</context> -<context> + </context> + <context> <name>QILabelPrivate</name> <message> - <source>&Copy</source> - <translation>ចម្លង</translation> + <source>&Copy</source> + <translation>ចម្លង</translation> </message> -</context> -<context> + </context> + <context> <name>QIMessageBox</name> <message> - <source>OK</source> - <translation>យល់ព្រម</translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>Yes</source> - <translation>បាទ/ចាស</translation> + <source>Yes</source> + <translation>បាទ/ចាស</translation> </message> <message> - <source>No</source> - <translation>ទេ</translation> + <source>No</source> + <translation>ទេ</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>Ignore</source> - <translation>មិនអើពើ</translation> + <source>Ignore</source> + <translation>មិនអើពើ</translation> </message> - <message> - <source>&Details</source> - <translation type="unfinished">សេចក្ដីលម្អិត</translation> - </message> - <message> - <source>&Details (%1 of %2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QIWidgetValidator</name> <message> - <source>not complete</source> - <comment>value state</comment> - <translation>មិនបញ្ចប់</translation> + <source>not complete</source> + <comment>value state</comment> + <translation>មិនបញ្ចប់</translation> </message> <message> - <source>invalid</source> - <comment>value state</comment> - <translation>មិនត្រឹមត្រូវ</translation> + <source>invalid</source> + <comment>value state</comment> + <translation>មិនត្រឹមត្រូវ</translation> </message> <message> - <source><qt>Value of the <b>%1</b> field on the <b>%2</b> page is %3.</qt></source> - <translation><qt>តម្លៃរបស់វាល <b>%1</b> នៅលើទំព័រ <b>%2</b> គឺ %3 ។</qt></translation> + <source><qt>Value of the <b>%1</b> field on the <b>%2</b> page is %3.</qt></source> + <translation><qt>តម្លៃរបស់វាល <b>%1</b> នៅលើទំព័រ <b>%2</b> គឺ %3 ។</qt></translation> </message> <message> - <source><qt>One of the values on the <b>%1</b> page is %2.</qt></source> - <translation><qt>តម្លៃមួយក្នុងចំណោមតម្លៃនៅលើទំព័រ <b>%1</b> គឺ %2 ។</qt></translation> + <source><qt>One of the values on the <b>%1</b> page is %2.</qt></source> + <translation><qt>តម្លៃមួយក្នុងចំណោមតម្លៃនៅលើទំព័រ <b>%1</b> គឺ %2 ។</qt></translation> </message> -</context> -<context> + </context> + <context> <name>VBoxAboutDlg</name> <message> - <source>VirtualBox - About</source> - <translation>VirtualBox - អំពី</translation> + <source>VirtualBox - About</source> + <translation>VirtualBox - អំពី</translation> </message> <message> - <source>VirtualBox Graphical User Interface</source> - <translation>ចំណុចប្រទាក់អ្នកប្រើក្រាហ្វិករបស់ VirtualBox</translation> + <source>VirtualBox Graphical User Interface</source> + <translation>ចំណុចប្រទាក់អ្នកប្រើក្រាហ្វិករបស់ VirtualBox</translation> </message> <message> - <source>Version %1</source> - <translation>កំណែ %1</translation> + <source>Version %1</source> + <translation>កំណែ %1</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxAddNIDialog</name> <message> - <source>Add Host Interface</source> - <translation type="obsolete">បន្ថែមចំណុចប្រទាក់ម៉ាស៊ីន</translation> + <source>Add Host Interface</source> + <translation>បន្ថែមចំណុចប្រទាក់ម៉ាស៊ីន</translation> </message> <message> - <source>Interface Name</source> - <translation type="obsolete">ឈ្មោះចំណុចប្រទាក់</translation> + <source>Interface Name</source> + <translation>ឈ្មោះចំណុចប្រទាក់</translation> </message> <message> - <source>Descriptive name of the new network interface</source> - <translation type="obsolete">ឈ្មោះសេចក្ដីពិពណ៌នារបស់ចំណុចប្រទាក់បណ្ដាញថ្មី</translation> + <source>Descriptive name of the new network interface</source> + <translation>ឈ្មោះសេចក្ដីពិពណ៌នារបស់ចំណុចប្រទាក់បណ្ដាញថ្មី</translation> </message> <message> - <source>&OK</source> - <translation type="obsolete">យល់ព្រម</translation> + <source>&OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>Cancel</source> - <translation type="obsolete">បោះពុម្ព</translation> + <source>Cancel</source> + <translation>បោះពុម្ព</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxAdditionsDownloader</name> <message> - <source>Cancel</source> - <translation>បោះពុម្ព</translation> - </message> - <message> - <source>Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr></source> - <translation>កំពុងទាញយករូបភាពស៊ីឌីបន្ថែមភ្ញៀវរបស់ VirtualBox ពី <nobr><b>%1</b>...</nobr></translation> - </message> - <message> - <source>Cancel the VirtualBox Guest Additions CD image download</source> - <translation>បោះបង់ការទាញយករូបភាពស៊ីឌីបន្ថែមភ្ញៀវ VirtualBox</translation> - </message> - <message> - <source><p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p></source> - <translation><p>បានបរាជ័យក្នុងការរក្សាទុកឯកសារដែលបានទាញយកជា <nobr><b>%1</b> ។</nobr></p></translation> - </message> - <message> - <source>Select folder to save Guest Additions image to</source> - <translation>ជ្រើសថតដើម្បីរក្សាទុករូបភាពបន្ថែមភ្ញៀវទៅកាន់</translation> - </message> -</context> -<context> - <name>VBoxApplianceEditorWgt</name> - <message> - <source>Virtual System %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Name</source> - <translation type="unfinished">ឈ្មោះ</translation> - </message> - <message> - <source>Product</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Product-URL</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Vendor</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Vendor-URL</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Version</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Description</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>License</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Guest OS Type</source> - <translation type="unfinished">ប្រភេទប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ</translation> - </message> - <message> - <source>CPU</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>RAM</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Hard Disk Controller IDE</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Hard Disk Controller SATA</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Hard Disk Controller SCSI</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>DVD</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Floppy</source> - <translation type="unfinished">ថាសទន់</translation> - </message> - <message> - <source>Network Adapter</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>USB Controller</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Sound Card</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Virtual Disk Image</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unknown Hardware Item</source> - <translation type="unfinished"></translation> + <source>Cancel</source> + <translation>បោះពុម្ព</translation> </message> <message> - <source>MB</source> - <translation type="unfinished">មេកាបៃ</translation> + <source>Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr></source> + <translation>កំពុងទាញយករូបភាពស៊ីឌីបន្ថែមភ្ញៀវរបស់ VirtualBox ពី <nobr><b>%1</b>...</nobr></translation> </message> <message> - <source><b>Original Value:</b> %1</source> - <translation type="unfinished"></translation> + <source>Cancel the VirtualBox Guest Additions CD image download</source> + <translation>បោះបង់ការទាញយករូបភាពស៊ីឌីបន្ថែមភ្ញៀវ VirtualBox</translation> </message> <message> - <source>Configuration</source> - <translation type="unfinished"></translation> + <source><p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p></source> + <translation><p>បានបរាជ័យក្នុងការរក្សាទុកឯកសារដែលបានទាញយកជា <nobr><b>%1</b> ។</nobr></p></translation> </message> <message> - <source>Warnings:</source> - <translation type="unfinished"></translation> + <source>Select folder to save Guest Additions image to</source> + <translation>ជ្រើសថតដើម្បីរក្សាទុករូបភាពបន្ថែមភ្ញៀវទៅកាន់</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxCloseVMDlg</name> <message> - <source>Close Virtual Machine</source> - <translation>បិទម៉ាស៊ីននិម្មិត</translation> + <source>Close Virtual Machine</source> + <translation>បិទម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>You want to:</source> - <translation>អ្នកចង់ ៖</translation> + <source>You want to:</source> + <translation>អ្នកចង់ ៖</translation> </message> <message> - <source>&Save the machine state</source> - <translation>រក្សាទុកស្ថានភាពម៉ាស៊ីន</translation> + <source>&Save the machine state</source> + <translation>រក្សាទុកស្ថានភាពម៉ាស៊ីន</translation> </message> <message> - <source>&Power off the machine</source> - <translation>បិទម៉ាស៊ីន</translation> + <source>&Power off the machine</source> + <translation>បិទម៉ាស៊ីន</translation> </message> <message> - <source>&Revert to the current snapshot</source> - <translation>ដាក់បញ្ច្រាសរូបថតបច្ចុប្បន្ន</translation> + <source>&Revert to the current snapshot</source> + <translation>ដាក់បញ្ច្រាសរូបថតបច្ចុប្បន្ន</translation> </message> <message> - <source>Revert the machine state to the state stored in the current snapshot</source> - <translation>ដាក់បញ្ច្រាសស្ថានភាពម៉ាស៊ីនទៅស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> + <source>Revert the machine state to the state stored in the current snapshot</source> + <translation>ដាក់បញ្ច្រាសស្ថានភាពម៉ាស៊ីនទៅស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> </message> <message> - <source>S&end the shutdown signal</source> - <translation>ផ្ញើសញ្ញាបិទ</translation> + <source>S&end the shutdown signal</source> + <translation>ផ្ញើសញ្ញាបិទ</translation> </message> <message> - <source><p>When checked, the machine state will be restored from the state stored in the current snapshot right after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and go back to the current snapshot.</p></source> - <translation><p>នៅពេលគូសធីក ស្ថានភាពម៉ាស៊ីននឹងត្រូវបានស្ដារពីស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្នខាងស្ដាំបន្ទាប់ពីបិទ ។ វាមានប្រយោជន៍ប្រសិនបើអ្នកប្រាកដថា អ្នកចង់បោះបង់លទ្ធផលនៃសម័យចុងក្រោយរបស់អ្នក ហើយត្រឡប់ទៅរូបថតបច្ចុប្បន្ន ។</p></translation> + <source><p>When checked, the machine state will be restored from the state stored in the current snapshot right after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and go back to the current snapshot.</p></source> + <translation><p>នៅពេលគូសធីក ស្ថានភាពម៉ាស៊ីននឹងត្រូវបានស្ដារពីស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្នខាងស្ដាំបន្ទាប់ពីបិទ ។ វាមានប្រយោជន៍ប្រសិនបើអ្នកប្រាកដថា អ្នកចង់បោះបង់លទ្ធផលនៃសម័យចុងក្រោយរបស់អ្នក ហើយត្រឡប់ទៅរូបថតបច្ចុប្បន្ន ។</p></translation> </message> <message> - <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the virtual machine.</p></source> - <translation><p>រក្សាទុកស្ថានភាពប្រតិបត្តិបច្ចុប្បន្នរបស់ម៉ាស៊ីននិម្មិត ទៅថាសរឹងហ្វីស៊ីខលរបស់ម៉ាស៊ីន ។</p><p>ពេលចាប់ផ្ដើមម៉ាស៊ីននេះលើកក្រោយ វានឹងត្រូវបានស្ដារពីស្ថានភាពដែលបានរក្សាទុក និងបន្តប្រតិបត្តិការពីកន្លែងដដែលដែលអ្នកបានរក្សាទុកវា ដែលនឹងអនុញ្ញាតឲ្យអ្នកបន្តការងាររបស់អ្នកបានភ្លាមៗ ។</p><p>ចំណាំថា ការរក្សាទុកស្ថានភាពរបស់ម៉ាស៊ីនអាចចំណាយពេលយូ ដោយអាស្រ័យលើប្រភេទប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ និងទំហំសតិដែលអ្នកបានផ្ដល់ឲ្យម៉ាស៊ីននិម្មិត ។</p></translation> + <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the virtual machine.</p></source> + <translation><p>រក្សាទុកស្ថានភាពប្រតិបត្តិបច្ចុប្បន្នរបស់ម៉ាស៊ីននិម្មិត ទៅថាសរឹងហ្វីស៊ីខលរបស់ម៉ាស៊ីន ។</p><p>ពេលចាប់ផ្ដើមម៉ាស៊ីននេះលើកក្រោយ វានឹងត្រូវបានស្ដារពីស្ថានភាពដែលបានរក្សាទុក និងបន្តប្រតិបត្តិការពីកន្លែងដដែលដែលអ្នកបានរក្សាទុកវា ដែលនឹងអនុញ្ញាតឲ្យអ្នកបន្តការងាររបស់អ្នកបានភ្លាមៗ ។</p><p>ចំណាំថា ការរក្សាទុកស្ថានភាពរបស់ម៉ាស៊ីនអាចចំណាយពេលយូ ដោយអាស្រ័យលើប្រភេទប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ និងទំហំសតិដែលអ្នកបានផ្ដល់ឲ្យម៉ាស៊ីននិម្មិត ។</p></translation> </message> <message> - <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> - <translation><p>ផ្ញើព្រឹត្តិការចុចប៊ូតុងថាមពល ACPI ទៅកាន់ម៉ាស៊ីននិម្មិត ។</p><p>ជាធម្មតា ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវរត់ខាងក្នុងម៉ាស៊ីននិម្មិត នឹងរកឃើញព្រឹត្តិការនេះ ហើយអនុវត្តនីតិវិធីបិទការជម្រះ ។ នេះជាមធ្យោបាយដែលបានផ្ដល់អនុសាសន៍ ឲ្យបិទម៉ាស៊ីននិម្មិត ពីព្រោះកម្មវិធីទាំងអស់ដែលកំពុងរត់ខាងក្នុងនឹងមានឱកាសរក្សាទុកស្ថានភាព និងទិន្នន័យរបស់វា ។</p><p>ប្រសិនបើម៉ាស៊ីនមិនឆ្លើយតបនឹងសកម្មភាពនេះទេ ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវអាចត្រូវបានកំណត់រចនាសម្ព័ន្ធខុស ឬមិនយល់ព្រឹត្តិការណ៍ប៊ូតុងថាមពល ACPI ទាល់តែសោះ ។ ក្នុងករណីនេះ អ្នកគួរជ្រើសសកម្មភាព <b>បិទម៉ាស៊ីន</b> ដើម្បីបញ្ឈប់ការប្រតិបត្តិរបស់ម៉ាស៊ីននិម្មិត ។</p></translation> + <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> + <translation><p>ផ្ញើព្រឹត្តិការចុចប៊ូតុងថាមពល ACPI ទៅកាន់ម៉ាស៊ីននិម្មិត ។</p><p>ជាធម្មតា ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវរត់ខាងក្នុងម៉ាស៊ីននិម្មិត នឹងរកឃើញព្រឹត្តិការនេះ ហើយអនុវត្តនីតិវិធីបិទការជម្រះ ។ នេះជាមធ្យោបាយដែលបានផ្ដល់អនុសាសន៍ ឲ្យបិទម៉ាស៊ីននិម្មិត ពីព្រោះកម្មវិធីទាំងអស់ដែលកំពុងរត់ខាងក្នុងនឹងមានឱកាសរក្សាទុកស្ថានភាព និងទិន្នន័យរបស់វា ។</p><p>ប្រសិនបើម៉ាស៊ីនមិនឆ្លើយតបនឹងសកម្មភាពនេះទេ ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវអាចត្រូវបានកំណត់រចនាសម្ព័ន្ធខុស ឬមិនយល់ព្រឹត្តិការណ៍ប៊ូតុងថាមពល ACPI ទាល់តែសោះ ។ ក្នុងករណីនេះ អ្នកគួរជ្រើសសកម្មភាព <b>បិទម៉ាស៊ីន</b> ដើម្បីបញ្ឈប់ការប្រតិបត្តិរបស់ម៉ាស៊ីននិម្មិត ។</p></translation> </message> <message> - <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source> - <translation><p>បិទម៉ាស៊ីននិម្មិត ។</p><p>ចំណាំថា សកម្មភាពនេះនឹងបញ្ឈប់ការប្រតិបត្តិរបស់ម៉ាស៊ីនភ្លាមៗតែម្ដង ដូច្នេះប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវកំពុងរត់ខាងក្នុងវានឹងមិនអាចអនុវត្តនីតិវិធីបិទការជម្រះដែលអាចបណ្ដាលឲ្យ <i>បាត់បង់ទិន្នន័យ</i> ខាងក្នុងម៉ាស៊ីននិម្មិតបានទេ ។ ការជ្រើសសកម្មភាពនេះត្រូវបានផ្ដល់អនុសាសន៍តែក្នុងករណីដែលម៉ាស៊ីននិមន្មិតមិនឆ្លើយតបនឹងសកម្មភាព <b>ផ្ញើសញ្ញាបិទ</b> តែប៉ុណ្ណោះ ។</p></translation> + <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source> + <translation><p>បិទម៉ាស៊ីននិម្មិត ។</p><p>ចំណាំថា សកម្មភាពនេះនឹងបញ្ឈប់ការប្រតិបត្តិរបស់ម៉ាស៊ីនភ្លាមៗតែម្ដង ដូច្នេះប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវកំពុងរត់ខាងក្នុងវានឹងមិនអាចអនុវត្តនីតិវិធីបិទការជម្រះដែលអាចបណ្ដាលឲ្យ <i>បាត់បង់ទិន្នន័យ</i> ខាងក្នុងម៉ាស៊ីននិម្មិតបានទេ ។ ការជ្រើសសកម្មភាពនេះត្រូវបានផ្ដល់អនុសាសន៍តែក្នុងករណីដែលម៉ាស៊ីននិមន្មិតមិនឆ្លើយតបនឹងសកម្មភាព <b>ផ្ញើសញ្ញាបិទ</b> តែប៉ុណ្ណោះ ។</p></translation> </message> -</context> -<context> + </context> + <context> <name>VBoxConsoleWnd</name> <message> - <source>VirtualBox OSE</source> - <translation>VirtualBox OSE</translation> - </message> - <message> - <source>&Fullscreen Mode</source> - <translation>របៀបពេញអេក្រង់</translation> + <source>VirtualBox OSE</source> + <translation>VirtualBox OSE</translation> </message> <message> - <source>Switch to fullscreen mode</source> - <translation>ប្ដូរទៅរបៀបពេញអេក្រង់</translation> + <source>&Fullscreen Mode</source> + <translation>របៀបពេញអេក្រង់</translation> </message> <message> - <source>Mouse Integration</source> - <comment>enable/disable...</comment> - <translation>ការបញ្ចូលកណ្ដុរ</translation> + <source>Switch to fullscreen mode</source> + <translation>ប្ដូរទៅរបៀបពេញអេក្រង់</translation> </message> <message> - <source>Auto-resize Guest Display</source> - <comment>enable/disable...</comment> - <translation>បង្ហាញភ្ញៀវផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិ</translation> + <source>Mouse Integration</source> + <comment>enable/disable...</comment> + <translation>ការបញ្ចូលកណ្ដុរ</translation> </message> <message> - <source>Auto-resize &Guest Display</source> - <translation>បង្ហាញភ្ញៀវផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិ</translation> + <source>Auto-resize Guest Display</source> + <comment>enable/disable...</comment> + <translation>បង្ហាញភ្ញៀវផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិ</translation> </message> <message> - <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source> - <translation>បង្ហាញភ្ញៀវផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិ នៅពេលបង្អួចត្រូវបានផ្លាស់ប្ដូរ (ត្រូវការភ្ញៀវបន្ថែម)</translation> + <source>Auto-resize &Guest Display</source> + <translation>បង្ហាញភ្ញៀវផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិ</translation> </message> <message> - <source>&Adjust Window Size</source> - <translation>លៃតម្រូវទំហំបង្អួច</translation> + <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source> + <translation>បង្ហាញភ្ញៀវផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិ នៅពេលបង្អួចត្រូវបានផ្លាស់ប្ដូរ (ត្រូវការភ្ញៀវបន្ថែម)</translation> </message> <message> - <source>Adjust window size and position to best fit the guest display</source> - <translation>លៃតម្រូវទំហំបង្អួច និងទីតាំងទៅសមបំផុតនឹងការបង្ហាញភ្ញៀវ</translation> + <source>&Adjust Window Size</source> + <translation>លៃតម្រូវទំហំបង្អួច</translation> </message> <message> - <source>&Insert Ctrl-Alt-Del</source> - <translation>បញ្ជាន់ (Insert) បញ្ជា(Ctrl)-ជំនួស(Alt)-លុប(Del)</translation> + <source>Adjust window size and position to best fit the guest display</source> + <translation>លៃតម្រូវទំហំបង្អួច និងទីតាំងទៅសមបំផុតនឹងការបង្ហាញភ្ញៀវ</translation> </message> <message> - <source>Send the Ctrl-Alt-Del sequence to the virtual machine</source> - <translation>ផ្ញើលំដាប់បញ្ជា(Ctrl)-ជំនួស(Alt)-លុប(Del) ទៅកាន់ម៉ាស៊ីននិម្មិត</translation> + <source>&Insert Ctrl-Alt-Del</source> + <translation>បញ្ជាន់ (Insert) បញ្ជា(Ctrl)-ជំនួស(Alt)-លុប(Del)</translation> </message> <message> - <source>&Insert Ctrl-Alt-Backspace</source> - <translation>បញ្ជាន់(Insert) បញ្ជា(Ctrl)-ជំនួស(Alt)-លុបថយក្រោយ(Backspace)</translation> + <source>Send the Ctrl-Alt-Del sequence to the virtual machine</source> + <translation>ផ្ញើលំដាប់បញ្ជា(Ctrl)-ជំនួស(Alt)-លុប(Del) ទៅកាន់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Send the Ctrl-Alt-Backspace sequence to the virtual machine</source> - <translation>ផ្ញើលំដាប់បញ្ជា(Ctrl)-ជំនួស(Alt)-លុបថយក្រោយ(Backspace) ទៅកាន់ម៉ាស៊ីននិម្មិត</translation> + <source>&Insert Ctrl-Alt-Backspace</source> + <translation>បញ្ជាន់(Insert) បញ្ជា(Ctrl)-ជំនួស(Alt)-លុបថយក្រោយ(Backspace)</translation> </message> <message> - <source>&Reset</source> - <translation>កំណត់ឡើងវិញ</translation> + <source>Send the Ctrl-Alt-Backspace sequence to the virtual machine</source> + <translation>ផ្ញើលំដាប់បញ្ជា(Ctrl)-ជំនួស(Alt)-លុបថយក្រោយ(Backspace) ទៅកាន់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Reset the virtual machine</source> - <translation>កំណត់ម៉ាស៊ីននិម្មិតឡើងវិញ</translation> + <source>&Reset</source> + <translation>កំណត់ឡើងវិញ</translation> </message> <message> - <source>ACPI S&hutdown</source> - <translation>បិទ ACPI</translation> + <source>Reset the virtual machine</source> + <translation>កំណត់ម៉ាស៊ីននិម្មិតឡើងវិញ</translation> </message> <message> - <source>Send the ACPI Power Button press event to the virtual machine</source> - <translation>ផ្ញើព្រឹត្តិការណ៍ចុចប៊ូតុងថាមពល ACPI ទៅកាន់ម៉ាស៊ីននិម្មិត</translation> + <source>ACPI S&hutdown</source> + <translation>បិទ ACPI</translation> </message> <message> - <source>&Close...</source> - <translation>បិទ...</translation> + <source>Send the ACPI Power Button press event to the virtual machine</source> + <translation>ផ្ញើព្រឹត្តិការណ៍ចុចប៊ូតុងថាមពល ACPI ទៅកាន់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Close the virtual machine</source> - <translation>បិទម៉ាស៊ីននិម្មិត</translation> + <source>&Close...</source> + <translation>បិទ...</translation> </message> <message> - <source>Take &Snapshot...</source> - <translation>យករូបថត...</translation> + <source>Close the virtual machine</source> + <translation>បិទម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Take a snapshot of the virtual machine</source> - <translation>យករូបថតរបស់ម៉ាស៊ីននិម្មិត</translation> + <source>Take &Snapshot...</source> + <translation>យករូបថត...</translation> </message> <message> - <source>&Floppy Image...</source> - <translation>រូបភាពថាសទន់...</translation> + <source>Take a snapshot of the virtual machine</source> + <translation>យករូបថតរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Mount a floppy image file</source> - <translation>ម៉ោនឯកសាររូបភាពថាសទន់</translation> + <source>&Floppy Image...</source> + <translation>រូបភាពថាសទន់...</translation> </message> <message> - <source>Unmount F&loppy</source> - <translation>អាន់ម៉ោនថាសទន់</translation> + <source>Mount a floppy image file</source> + <translation>ម៉ោនឯកសាររូបភាពថាសទន់</translation> </message> <message> - <source>Unmount the currently mounted floppy media</source> - <translation>អាន់ម៉ោនមេឌៀថាសទាន់ដែលបានម៉ោនបច្ចុប្បន្ន</translation> + <source>Unmount F&loppy</source> + <translation>អាន់ម៉ោនថាសទន់</translation> </message> <message> - <source>&CD/DVD-ROM Image...</source> - <translation>រូបភាពស៊ីឌី/ឌីវីឌីរ៉ូម...</translation> + <source>Unmount the currently mounted floppy media</source> + <translation>អាន់ម៉ោនមេឌៀថាសទាន់ដែលបានម៉ោនបច្ចុប្បន្ន</translation> </message> <message> - <source>Mount a CD/DVD-ROM image file</source> - <translation>ម៉ោនឯកសាររូបភាពស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>&CD/DVD-ROM Image...</source> + <translation>រូបភាពស៊ីឌី/ឌីវីឌីរ៉ូម...</translation> </message> <message> - <source>Unmount C&D/DVD-ROM</source> - <translation>អាន់ម៉ោនស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>Mount a CD/DVD-ROM image file</source> + <translation>ម៉ោនឯកសាររូបភាពស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>Unmount the currently mounted CD/DVD-ROM media</source> - <translation>អាន់ម៉ោនមេឌៀស៊ីឌី/ឌីវីឌីរ៉ូមដែលបានម៉ោនបច្ចុប្បន្ន</translation> + <source>Unmount C&D/DVD-ROM</source> + <translation>អាន់ម៉ោនស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>Remote Dis&play</source> - <translation>ការបង្ហាញពីចម្ងាយ</translation> + <source>Unmount the currently mounted CD/DVD-ROM media</source> + <translation>អាន់ម៉ោនមេឌៀស៊ីឌី/ឌីវីឌីរ៉ូមដែលបានម៉ោនបច្ចុប្បន្ន</translation> </message> <message> - <source>Enable or disable remote desktop (RDP) connections to this machine</source> - <translation>បើក ឬបិទការតភ្ជាប់ផ្ទៃតុពីចម្ងាយ (RDP) ទៅកាន់ម៉ាស៊ីននេះ</translation> + <source>Remote Dis&play</source> + <translation>ការបង្ហាញពីចម្ងាយ</translation> </message> <message> - <source>&Shared Folders...</source> - <translation>ថតដែលបានចែករំលែក...</translation> + <source>Enable or disable remote desktop (RDP) connections to this machine</source> + <translation>បើក ឬបិទការតភ្ជាប់ផ្ទៃតុពីចម្ងាយ (RDP) ទៅកាន់ម៉ាស៊ីននេះ</translation> </message> <message> - <source>Open the dialog to operate on shared folders</source> - <translation>បើកប្រអប់ដើម្បីប្រតិបត្តិលើថតដែលបានចែករំលែក</translation> + <source>&Shared Folders...</source> + <translation>ថតដែលបានចែករំលែក...</translation> </message> <message> - <source>&Install Guest Additions...</source> - <translation>ដំឡើងការបន្ថែមភ្ញៀវ...</translation> + <source>Open the dialog to operate on shared folders</source> + <translation>បើកប្រអប់ដើម្បីប្រតិបត្តិលើថតដែលបានចែករំលែក</translation> </message> <message> - <source>Mount the Guest Additions installation image</source> - <translation>ម៉ោនរូបភាពដំឡើងបន្ថែមភ្ញៀវ</translation> + <source>&Install Guest Additions...</source> + <translation>ដំឡើងការបន្ថែមភ្ញៀវ...</translation> </message> <message> - <source>Mount &Floppy</source> - <translation>ម៉ោនថាសទន់</translation> + <source>Mount the Guest Additions installation image</source> + <translation>ម៉ោនរូបភាពដំឡើងបន្ថែមភ្ញៀវ</translation> </message> <message> - <source>Mount &CD/DVD-ROM</source> - <translation>ម៉ោនស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>Mount &Floppy</source> + <translation>ម៉ោនថាសទន់</translation> </message> <message> - <source>&USB Devices</source> - <translation>ឧបករណ៍ USB</translation> + <source>Mount &CD/DVD-ROM</source> + <translation>ម៉ោនស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>&Devices</source> - <translation>ឧបករណ៍</translation> + <source>&USB Devices</source> + <translation>ឧបករណ៍ USB</translation> </message> <message> - <source>De&bug</source> - <translation>បំបាត់កំហុស</translation> + <source>&Devices</source> + <translation>ឧបករណ៍</translation> </message> <message> - <source>&Help</source> - <translation>ជំនួយ</translation> + <source>De&bug</source> + <translation>បំបាត់កំហុស</translation> </message> <message> - <source><hr>VRDP Server is listening on port %1</source> - <translation><hr>ម៉ាស៊ីនបម្រើ VRDP កំពុងស្ដាប់ច្រក %1</translation> + <source>&Help</source> + <translation>ជំនួយ</translation> </message> <message> - <source>&Pause</source> - <translation>ផ្អាក</translation> + <source><hr>VRDP Server is listening on port %1</source> + <translation><hr>ម៉ាស៊ីនបម្រើ VRDP កំពុងស្ដាប់ច្រក %1</translation> </message> <message> - <source>Suspend the execution of the virtual machine</source> - <translation>ផ្អាកការប្រតិបត្តិរបស់ម៉ាស៊ីននិម្មិត</translation> + <source>&Pause</source> + <translation>ផ្អាក</translation> </message> <message> - <source>R&esume</source> - <translation>បន្ត</translation> + <source>Suspend the execution of the virtual machine</source> + <translation>ផ្អាកការប្រតិបត្តិរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Resume the execution of the virtual machine</source> - <translation>បន្តប្រតិបត្តិរបស់ម៉ាស៊ីននិម្មិត</translation> + <source>R&esume</source> + <translation>បន្ត</translation> </message> <message> - <source>Disable &Mouse Integration</source> - <translation>បិទការរួមបញ្ចូលកណ្ដុរ</translation> + <source>Resume the execution of the virtual machine</source> + <translation>បន្តប្រតិបត្តិរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Temporarily disable host mouse pointer integration</source> - <translation>បិទការរួមបញ្ចូលព្រួញកណ្ដុររបស់ម៉ាស៊ីនជាបណ្ដោះអាសន្ន</translation> + <source>Disable &Mouse Integration</source> + <translation>បិទការរួមបញ្ចូលកណ្ដុរ</translation> </message> <message> - <source>Enable &Mouse Integration</source> - <translation>បើកការរួមបញ្ចូលកណ្ដុរ</translation> + <source>Temporarily disable host mouse pointer integration</source> + <translation>បិទការរួមបញ្ចូលព្រួញកណ្ដុររបស់ម៉ាស៊ីនជាបណ្ដោះអាសន្ន</translation> </message> <message> - <source>Enable temporarily disabled host mouse pointer integration</source> - <translation>បើកការរួមបញ្ចូលព្រួញកណ្ដុររបស់ម៉ាស៊ីនដែលបានបិទជាបណ្ដោះអាសន្ន</translation> + <source>Enable &Mouse Integration</source> + <translation>បើកការរួមបញ្ចូលកណ្ដុរ</translation> </message> <message> - <source>Snapshot %1</source> - <translation>រូបថត %1</translation> + <source>Enable temporarily disabled host mouse pointer integration</source> + <translation>បើកការរួមបញ្ចូលព្រួញកណ្ដុររបស់ម៉ាស៊ីនដែលបានបិទជាបណ្ដោះអាសន្ន</translation> </message> <message> - <source>Host Drive </source> - <translation>ដ្រាយម៉ាស៊ីន</translation> + <source>Snapshot %1</source> + <translation>រូបថត %1</translation> </message> <message> - <source>&Machine</source> - <translation>ម៉ាស៊ីន</translation> + <source>Host Drive </source> + <translation>ដ្រាយម៉ាស៊ីន</translation> </message> <message> - <source>&Network Adapters</source> - <translation>អាដាប់ទ័របណ្ដាញ</translation> + <source>&Machine</source> + <translation>ម៉ាស៊ីន</translation> </message> <message> - <source>Adapter %1</source> - <comment>network</comment> - <translation>អាដាប់ទ័រ %1</translation> + <source>&Network Adapters</source> + <translation>អាដាប់ទ័របណ្ដាញ</translation> </message> <message> - <source>Mount the selected physical drive of the host PC</source> - <comment>Floppy tip</comment> - <translation>ម៉ោនដ្រាយហ្វីស៊ីខលដែលជ្រើសរបស់ម៉ាស៊ីន</translation> + <source>Adapter %1</source> + <comment>network</comment> + <translation>អាដាប់ទ័រ %1</translation> </message> <message> - <source>Mount the selected physical drive of the host PC</source> - <comment>CD/DVD tip</comment> - <translation>ម៉ោនដ្រាយហ្វីស៊ីខលដែលបានជ្រើសរបស់ម៉ាស៊ីន</translation> + <source>Mount the selected physical drive of the host PC</source> + <comment>Floppy tip</comment> + <translation>ម៉ោនដ្រាយហ្វីស៊ីខលដែលជ្រើសរបស់ម៉ាស៊ីន</translation> </message> <message> - <source>Disconnect the cable from the selected virtual network adapter</source> - <translation>ផ្ដាច់ខ្សែពីអាដាប់ទ័របណ្ដាញនិម្មិតដែលបានជ្រើស</translation> + <source>Mount the selected physical drive of the host PC</source> + <comment>CD/DVD tip</comment> + <translation>ម៉ោនដ្រាយហ្វីស៊ីខលដែលបានជ្រើសរបស់ម៉ាស៊ីន</translation> </message> <message> - <source>Connect the cable to the selected virtual network adapter</source> - <translation>តភ្ជាប់ខ្សែទៅកាន់អាដាប់ទ័របណ្ដាញនិម្មិតដែលបានជ្រើស</translation> + <source>Disconnect the cable from the selected virtual network adapter</source> + <translation>ផ្ដាច់ខ្សែពីអាដាប់ទ័របណ្ដាញនិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>Seam&less Mode</source> - <translation>របៀបគ្មានថ្នេរ</translation> + <source>Connect the cable to the selected virtual network adapter</source> + <translation>តភ្ជាប់ខ្សែទៅកាន់អាដាប់ទ័របណ្ដាញនិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>Switch to seamless desktop integration mode</source> - <translation>ប្ដូរទៅរបៀបបញ្ចូលផ្ទៃតុគ្មានថ្នេរ</translation> + <source>Seam&less Mode</source> + <translation>របៀបគ្មានថ្នេរ</translation> </message> <message> - <source><qt><nobr>Indicates the activity of the floppy media:</nobr>%1</qt></source> - <comment>Floppy tooltip</comment> - <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់មេឌៀថាសទន់ ៖</nobr>%1</qt></translation> + <source>Switch to seamless desktop integration mode</source> + <translation>ប្ដូរទៅរបៀបបញ្ចូលផ្ទៃតុគ្មានថ្នេរ</translation> </message> <message> - <source><br><nobr><b>Host Drive</b>: %1</nobr></source> - <comment>Floppy tooltip</comment> - <translation><br><nobr><b>ដ្រាយម៉ាស៊ីន</b> ៖ %1</nobr></translation> + <source><qt><nobr>Indicates the activity of the floppy media:</nobr>%1</qt></source> + <comment>Floppy tooltip</comment> + <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់មេឌៀថាសទន់ ៖</nobr>%1</qt></translation> </message> <message> - <source><br><nobr><b>Image</b>: %1</nobr></source> - <comment>Floppy tooltip</comment> - <translation><br><nobr><b>រូបភាព</b> ៖ %1</nobr></translation> + <source><br><nobr><b>Host Drive</b>: %1</nobr></source> + <comment>Floppy tooltip</comment> + <translation><br><nobr><b>ដ្រាយម៉ាស៊ីន</b> ៖ %1</nobr></translation> </message> <message> - <source><br><nobr><b>No media mounted</b></nobr></source> - <comment>Floppy tooltip</comment> - <translation><br><nobr><b>គ្មានមេឌៀបានម៉ោនទេ</b></nobr></translation> + <source><br><nobr><b>Image</b>: %1</nobr></source> + <comment>Floppy tooltip</comment> + <translation><br><nobr><b>រូបភាព</b> ៖ %1</nobr></translation> </message> <message> - <source><qt><nobr>Indicates the activity of the CD/DVD-ROM media:</nobr>%1</qt></source> - <comment>DVD-ROM tooltip</comment> - <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់មេឌៀស៊ីឌី/ឌីវីឌីរ៉ូម ៖</nobr>%1</qt></translation> + <source><br><nobr><b>No media mounted</b></nobr></source> + <comment>Floppy tooltip</comment> + <translation><br><nobr><b>គ្មានមេឌៀបានម៉ោនទេ</b></nobr></translation> </message> <message> - <source><br><nobr><b>Host Drive</b>: %1</nobr></source> - <comment>DVD-ROM tooltip</comment> - <translation><br><nobr><b>ដ្រាយម៉ាស៊ីន</b> ៖ %1</nobr></translation> + <source><qt><nobr>Indicates the activity of the CD/DVD-ROM media:</nobr>%1</qt></source> + <comment>DVD-ROM tooltip</comment> + <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់មេឌៀស៊ីឌី/ឌីវីឌីរ៉ូម ៖</nobr>%1</qt></translation> </message> <message> - <source><br><nobr><b>Image</b>: %1</nobr></source> - <comment>DVD-ROM tooltip</comment> - <translation><br><nobr><b>រូបភាព</b> ៖ %1</nobr></translation> + <source><br><nobr><b>Host Drive</b>: %1</nobr></source> + <comment>DVD-ROM tooltip</comment> + <translation><br><nobr><b>ដ្រាយម៉ាស៊ីន</b> ៖ %1</nobr></translation> </message> <message> - <source><br><nobr><b>No media mounted</b></nobr></source> - <comment>DVD-ROM tooltip</comment> - <translation><br><nobr><b>គ្មានមេឌៀបានម៉ោនទេ</b></nobr></translation> + <source><br><nobr><b>Image</b>: %1</nobr></source> + <comment>DVD-ROM tooltip</comment> + <translation><br><nobr><b>រូបភាព</b> ៖ %1</nobr></translation> </message> <message> - <source><qt><nobr>Indicates the activity of virtual hard disks:</nobr>%1</qt></source> - <comment>HDD tooltip</comment> - <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ថាសរឹងនិម្មិត ៖</nobr>%1</qt></translation> + <source><br><nobr><b>No media mounted</b></nobr></source> + <comment>DVD-ROM tooltip</comment> + <translation><br><nobr><b>គ្មានមេឌៀបានម៉ោនទេ</b></nobr></translation> </message> <message> - <source><br><nobr><b>No hard disks attached</b></nobr></source> - <comment>HDD tooltip</comment> - <translation><br><nobr><b>គ្មានថាសរឹងបានភ្ជាប់ទេ</b></nobr></translation> + <source><qt><nobr>Indicates the activity of virtual hard disks:</nobr>%1</qt></source> + <comment>HDD tooltip</comment> + <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ថាសរឹងនិម្មិត ៖</nobr>%1</qt></translation> </message> <message> - <source><qt><nobr>Indicates the activity of the network interfaces:</nobr>%1</qt></source> - <comment>Network adapters tooltip</comment> - <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ចំណុចប្រទាក់បណ្ដាញ ៖</nobr>%1</qt></translation> + <source><br><nobr><b>No hard disks attached</b></nobr></source> + <comment>HDD tooltip</comment> + <translation><br><nobr><b>គ្មានថាសរឹងបានភ្ជាប់ទេ</b></nobr></translation> </message> <message> - <source><br><nobr><b>Adapter %1 (%2)</b>: cable %3</nobr></source> - <comment>Network adapters tooltip</comment> - <translation><br><nobr><b>អាដាប់ទ័រ %1 (%2)</b> ៖ ខ្សែ %3</nobr></translation> + <source><qt><nobr>Indicates the activity of the network interfaces:</nobr>%1</qt></source> + <comment>Network adapters tooltip</comment> + <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ចំណុចប្រទាក់បណ្ដាញ ៖</nobr>%1</qt></translation> </message> <message> - <source>connected</source> - <comment>Network adapters tooltip</comment> - <translation>បានតភ្ជាប់</translation> + <source><br><nobr><b>Adapter %1 (%2)</b>: cable %3</nobr></source> + <comment>Network adapters tooltip</comment> + <translation><br><nobr><b>អាដាប់ទ័រ %1 (%2)</b> ៖ ខ្សែ %3</nobr></translation> </message> <message> - <source>disconnected</source> - <comment>Network adapters tooltip</comment> - <translation>បានផ្ដាច់</translation> + <source>connected</source> + <comment>Network adapters tooltip</comment> + <translation>បានតភ្ជាប់</translation> </message> <message> - <source><br><nobr><b>All network adapters are disabled</b></nobr></source> - <comment>Network adapters tooltip</comment> - <translation><br><nobr><b>អាដាប់ទ័របណ្ដាញទាំងអស់ត្រូវបានបិទ</b></nobr></translation> + <source>disconnected</source> + <comment>Network adapters tooltip</comment> + <translation>បានផ្ដាច់</translation> </message> <message> - <source><qt><nobr>Indicates the activity of the attached USB devices:</nobr>%1</qt></source> - <comment>USB device tooltip</comment> - <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ឧបករណ៍ USB ដែលបានផ្ដាច់ ៖</nobr>%1</qt></translation> + <source><br><nobr><b>All network adapters are disabled</b></nobr></source> + <comment>Network adapters tooltip</comment> + <translation><br><nobr><b>អាដាប់ទ័របណ្ដាញទាំងអស់ត្រូវបានបិទ</b></nobr></translation> </message> <message> - <source><br><nobr><b>No USB devices attached</b></nobr></source> - <comment>USB device tooltip</comment> - <translation><br><nobr><b>គ្មានឧបករណ៍ USB បានផ្ដាច់</b></nobr></translation> + <source><qt><nobr>Indicates the activity of the attached USB devices:</nobr>%1</qt></source> + <comment>USB device tooltip</comment> + <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ឧបករណ៍ USB ដែលបានផ្ដាច់ ៖</nobr>%1</qt></translation> </message> <message> - <source><br><nobr><b>USB Controller is disabled</b></nobr></source> - <comment>USB device tooltip</comment> - <translation><br><nobr><b>វត្ថុបញ្ជា USB ត្រូវបានបិទ</b></nobr></translation> + <source><br><nobr><b>No USB devices attached</b></nobr></source> + <comment>USB device tooltip</comment> + <translation><br><nobr><b>គ្មានឧបករណ៍ USB បានផ្ដាច់</b></nobr></translation> </message> <message> - <source><qt><nobr>Indicates the activity of shared folders:</nobr>%1</qt></source> - <comment>Shared folders tooltip</comment> - <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ថតដែលបានចែករំលែក ៖</nobr>%1</qt></translation> + <source><br><nobr><b>USB Controller is disabled</b></nobr></source> + <comment>USB device tooltip</comment> + <translation><br><nobr><b>វត្ថុបញ្ជា USB ត្រូវបានបិទ</b></nobr></translation> </message> <message> - <source><br><nobr><b>No shared folders</b></nobr></source> - <comment>Shared folders tooltip</comment> - <translation><br><nobr><b>គ្មានថតបានចែករំលែកទេ</b></nobr></translation> + <source><qt><nobr>Indicates the activity of shared folders:</nobr>%1</qt></source> + <comment>Shared folders tooltip</comment> + <translation><qt><nobr>បង្ហាញសកម្មភាពរបស់ថតដែលបានចែករំលែក ៖</nobr>%1</qt></translation> </message> <message> - <source>Session I&nformation Dialog</source> - <translation>ប្រអប់ព័ត៌មានសម័យ</translation> + <source><br><nobr><b>No shared folders</b></nobr></source> + <comment>Shared folders tooltip</comment> + <translation><br><nobr><b>គ្មានថតបានចែករំលែកទេ</b></nobr></translation> </message> <message> - <source>Show Session Information Dialog</source> - <translation>បង្ហាញប្រអប់ព័ត៌មានសម័យ</translation> + <source>Sun xVM VirtualBox</source> + <translation>Sun xVM VirtualBox</translation> </message> <message> - <source>&Statistics...</source> - <comment>debug action</comment> - <translation>ស្ថិតិ...</translation> + <source>Session I&nformation Dialog</source> + <translation>ប្រអប់ព័ត៌មានសម័យ</translation> </message> <message> - <source>&Command Line...</source> - <comment>debug action</comment> - <translation>បន្ទាត់ពាក្យបញ្ជា...</translation> + <source>Show Session Information Dialog</source> + <translation>បង្ហាញប្រអប់ព័ត៌មានសម័យ</translation> </message> <message> - <source>Indicates whether the guest display auto-resize function is On (<img src=:/auto_resize_on_16px.png/>) or Off (<img src=:/auto_resize_off_16px.png/>). Note that this function requires Guest Additions to be installed in the guest OS.</source> - <translation>បង្ហាញថាតើការបង្ហាញម៉ាស៊ីនភ្ញៀវមុខងារផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិបើក (<img src=:/auto_resize_on_16px.png/>) ឬបិទ (<img src=:/auto_resize_off_16px.png/>) ។ ចំណាំថា មុខងារនេះត្រូវការការបន្ថែមភ្ញៀវដើម្បីដំឡើងនៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> + <source>&Statistics...</source> + <comment>debug action</comment> + <translation>ស្ថិតិ...</translation> </message> <message> - <source>Indicates whether the host mouse pointer is captured by the guest OS:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;pointer is not captured</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;pointer is captured</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;mouse integration (MI) is On</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI is Off, pointer is captured</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI is Off, pointer is not captured</nobr><br>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source> - <translation>បង្ហាញថាតើទស្សន៍ទ្រនិចកណ្ដុររបស់ម៉ាស៊ីនត្រូវបានចាប់យកដោយប្រព័ន្ធប្រតបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវដែរឬទេ ៖<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;ទស្សន៍ទ្រនិចមិនត្រូវបានចាប់យកទេ</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;ទស្សន៍ទ្រនិចត្រូវបានចាប់យក</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;ការរួមបញ្ចូលកណ្ដុរ (MI) គឺបានបើក</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI បានបិទ, ទស្សន៍ទ្រនិចត្រូវបានចាប់យក</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI បានបិទ, ទស្សន៍ទ្រនិចមិនត្រូវបានចាប់យកទេ</nobr><br>ចំណាំថា លក្ខណៈពិសេសរួមបញ្ចូលកណ្ដុរតម្រូវឲ្យដំឡើងផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវនៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> + <source>&Command Line...</source> + <comment>debug action</comment> + <translation>បន្ទាត់ពាក្យបញ្ជា...</translation> </message> <message> - <source>Indicates whether the keyboard is captured by the guest OS (<img src=:/hostkey_captured_16px.png/>) or not (<img src=:/hostkey_16px.png/>).</source> - <translation>បង្ហាញថាតើក្ដារចុចត្រូវបានចាប់យកដោយប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ (<img src=:/hostkey_captured_16px.png/>) ឬមិនមែន (<img src=:/hostkey_16px.png/>) ។</translation> + <source>Indicates whether the guest display auto-resize function is On (<img src=:/auto_resize_on_16px.png/>) or Off (<img src=:/auto_resize_off_16px.png/>). Note that this function requires Guest Additions to be installed in the guest OS.</source> + <translation>បង្ហាញថាតើការបង្ហាញម៉ាស៊ីនភ្ញៀវមុខងារផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិបើក (<img src=:/auto_resize_on_16px.png/>) ឬបិទ (<img src=:/auto_resize_off_16px.png/>) ។ ចំណាំថា មុខងារនេះត្រូវការការបន្ថែមភ្ញៀវដើម្បីដំឡើងនៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> </message> <message> - <source>Indicates whether the Remote Display (VRDP Server) is enabled (<img src=:/vrdp_16px.png/>) or not (<img src=:/vrdp_disabled_16px.png/>).</source> - <translation>បង្ហាញថាតើការបង្ហាញពីចម្ងាយ (ម៉ាស៊ីនបម្រើ VRDP) ត្រូវបានបើក (<img src=:/vrdp_16px.png/>) ឬអត់ (<img src=:/vrdp_disabled_16px.png/>) ។</translation> + <source>Indicates whether the host mouse pointer is captured by the guest OS:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;pointer is not captured</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;pointer is captured</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;mouse integration (MI) is On</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI is Off, pointer is captured</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI is Off, pointer is not captured</nobr><br>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source> + <translation>បង្ហាញថាតើទស្សន៍ទ្រនិចកណ្ដុររបស់ម៉ាស៊ីនត្រូវបានចាប់យកដោយប្រព័ន្ធប្រតបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវដែរឬទេ ៖<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;ទស្សន៍ទ្រនិចមិនត្រូវបានចាប់យកទេ</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;ទស្សន៍ទ្រនិចត្រូវបានចាប់យក</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;ការរួមបញ្ចូលកណ្ដុរ (MI) គឺបានបើក</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI បានបិទ, ទស្សន៍ទ្រនិចត្រូវបានចាប់យក</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI បានបិទ, ទស្សន៍ទ្រនិចមិនត្រូវបានចាប់យកទេ</nobr><br>ចំណាំថា លក្ខណៈពិសេសរួមបញ្ចូលកណ្ដុរតម្រូវឲ្យដំឡើងផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវនៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> </message> <message> - <source>&Logging...</source> - <comment>debug action</comment> - <translation>កំពុងធ្វើកំណត់ហេតុ...</translation> + <source>Indicates whether the keyboard is captured by the guest OS (<img src=:/hostkey_captured_16px.png/>) or not (<img src=:/hostkey_16px.png/>).</source> + <translation>បង្ហាញថាតើក្ដារចុចត្រូវបានចាប់យកដោយប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ (<img src=:/hostkey_captured_16px.png/>) ឬមិនមែន (<img src=:/hostkey_16px.png/>) ។</translation> </message> <message> - <source>Shows the currently assigned Host key.<br>This key, when pressed alone, toggles the keyboard and mouse capture state. It can also be used in combination with other keys to quickly perform actions from the main menu.</source> - <translation>បង្ហាញគ្រាប់ចុចម៉ាស៊ីនដែលបានផ្ដល់បច្ចុប្បន្ន ។<br>គ្រាប់ចុចនេះ នៅពេលចុចយូរ បិទ/បើកក្ដារចុច ហើយស្ថានភាពចាប់យកកណ្ដុរ ។ វាអាចត្រូវបានប្រើក្នុងបន្សំជាមួយគ្រាប់ចុចផ្សេង ដើម្បីអនុវត្តសកម្មភាពយ៉ាងលឿន ពីម៉ឺនុយចម្បង ។</translation> + <source>Indicates whether the Remote Display (VRDP Server) is enabled (<img src=:/vrdp_16px.png/>) or not (<img src=:/vrdp_disabled_16px.png/>).</source> + <translation>បង្ហាញថាតើការបង្ហាញពីចម្ងាយ (ម៉ាស៊ីនបម្រើ VRDP) ត្រូវបានបើក (<img src=:/vrdp_16px.png/>) ឬអត់ (<img src=:/vrdp_disabled_16px.png/>) ។</translation> </message> <message> - <source>Sun VirtualBox</source> - <translation type="unfinished"></translation> + <source>&Logging...</source> + <comment>debug action</comment> + <translation>កំពុងធ្វើកំណត់ហេតុ...</translation> </message> <message> - <source>Indicates the status of the hardware virtualization features used by this virtual machine:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></source> - <comment>Virtualization Stuff LED</comment> - <translation type="unfinished"></translation> + <source>Shows the currently assigned Host key.<br>This key, when pressed alone, toggles the keyboard and mouse capture state. It can also be used in combination with other keys to quickly perform actions from the main menu.</source> + <translation>បង្ហាញគ្រាប់ចុចម៉ាស៊ីនដែលបានផ្ដល់បច្ចុប្បន្ន ។<br>គ្រាប់ចុចនេះ នៅពេលចុចយូរ បិទ/បើកក្ដារចុច ហើយស្ថានភាពចាប់យកកណ្ដុរ ។ វាអាចត្រូវបានប្រើក្នុងបន្សំជាមួយគ្រាប់ចុចផ្សេង ដើម្បីអនុវត្តសកម្មភាពយ៉ាងលឿន ពីម៉ឺនុយចម្បង ។</translation> </message> - <message> - <source><br><nobr><b>%1:</b>&nbsp;%2</nobr></source> - <comment>Virtualization Stuff LED</comment> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxDownloaderWgt</name> <message> - <source>The download process has been cancelled by the user.</source> - <translation>ដំណើរការទាញយកត្រូវបានបោះបង់ដោយអ្នកប្រើ ។</translation> - </message> -</context> -<context> - <name>VBoxEmptyFileSelector</name> - <message> - <source>&Choose...</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>VBoxExportApplianceWzd</name> - <message> - <source>Select a file to export into</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Open Virtualization Format (%1)</source> - <translation type="unfinished"></translation> + <source>The download process has been cancelled by the user.</source> + <translation>ដំណើរការទាញយកត្រូវបានបោះបង់ដោយអ្នកប្រើ ។</translation> </message> - <message> - <source>Appliance</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Exporting Appliance ...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Appliance Export Wizard</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Welcome to the Appliance Export Wizard!</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This wizard will guide you through the process of exporting an appliance. </p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Use the <span style=" font-weight:600;">Next</span> button to go the next page of the wizard and the <span style=" font-weight:600;">Back</span> button to return to the previous page.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please select the virtual machines that should be exported to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></body></html></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>< &Back</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Next ></source> - <translation type="unfinished">បន្ទាប់ ></translation> - </message> - <message> - <source>Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Appliance Export Settings</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Here you can change additional configuration values of the selected virtual machines. You can modify most of the shown properties by double-clicking on the items.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Restore Defaults</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Write legacy OVF 0.9</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Export ></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Please choose a filename to export the OVF in.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Please complete the additionally fields like the username, password and the bucket. Finally you have to provide a filename for the OVF target.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Please complete the additionally fields like the username, password, hostname and the bucket. Finally you have to provide a filename for the OVF target.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Checking files ...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Removing files ...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Please specify the target for the OVF export. You can choose between a local file system export, the uploading of the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Local Filesystem </source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Sun &Cloud</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Simple Storage System (S3)</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Username:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Password:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&File:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Bucket:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Hostname:</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxFilePathSelectorWidget</name> <message> - <source><reset to default></source> - <translation><កំណត់ទៅលំនាំដើមឡើងវិញ></translation> + <source><reset to default></source> + <translation><កំណត់ទៅលំនាំដើមឡើងវិញ></translation> </message> <message> - <source>The actual default path value will be displayed after accepting the changes and opening this dialog again.</source> - <translation>តម្លៃផ្លូវលំនាំដើមពិតប្រាកដនឹងត្រូវបានបង្ហាញបន្ទាប់ពីទទួលការផ្លាស់ប្ដូរ និងបើកប្រអប់នេះម្ដងទៀត ។</translation> + <source>The actual default path value will be displayed after accepting the changes and opening this dialog again.</source> + <translation>តម្លៃផ្លូវលំនាំដើមពិតប្រាកដនឹងត្រូវបានបង្ហាញបន្ទាប់ពីទទួលការផ្លាស់ប្ដូរ និងបើកប្រអប់នេះម្ដងទៀត ។</translation> </message> <message> - <source><not selected></source> - <translation><មិនបានជ្រើស></translation> + <source><not selected></source> + <translation><មិនបានជ្រើស></translation> </message> <message> - <source>Please use the <b>Other...</b> item from the drop-down list to select a desired path.</source> - <translation>សូមប្រើធាតុ <b>ផ្សេងៗ...</b> ពីបញ្ជីទម្លាក់ចុះដើម្បីជ្រើសផ្លូវដែលចង់បាន ។</translation> + <source>Please use the <b>Other...</b> item from the drop-down list to select a desired path.</source> + <translation>សូមប្រើធាតុ <b>ផ្សេងៗ...</b> ពីបញ្ជីទម្លាក់ចុះដើម្បីជ្រើសផ្លូវដែលចង់បាន ។</translation> </message> <message> - <source>Other...</source> - <translation>ផ្សេងៗ...</translation> + <source>Other...</source> + <translation>ផ្សេងៗ...</translation> </message> <message> - <source>Reset</source> - <translation>កំណត់ឡើងវិញ</translation> + <source>Reset</source> + <translation>កំណត់ឡើងវិញ</translation> </message> <message> - <source>Opens a dialog to select a different folder.</source> - <translation>បើកប្រអប់ ដើម្បីជ្រើសថតផ្សេង ។</translation> + <source>Opens a dialog to select a different folder.</source> + <translation>បើកប្រអប់ ដើម្បីជ្រើសថតផ្សេង ។</translation> </message> <message> - <source>Resets the folder path to the default value.</source> - <translation>កំណត់ផ្លូវថតទៅតម្លៃលំនាំដើមឡើងវិញ ។</translation> + <source>Resets the folder path to the default value.</source> + <translation>កំណត់ផ្លូវថតទៅតម្លៃលំនាំដើមឡើងវិញ ។</translation> </message> <message> - <source>Opens a dialog to select a different file.</source> - <translation>បើកប្រអប់ដើម្បីជ្រើសឯកសារផ្សេង ។</translation> + <source>Opens a dialog to select a different file.</source> + <translation>បើកប្រអប់ដើម្បីជ្រើសឯកសារផ្សេង ។</translation> </message> <message> - <source>Resets the file path to the default value.</source> - <translation>កំណត់ផ្លូវឯកសារទៅតម្លៃលំនាំដើមឡើងវិញ ។</translation> + <source>Resets the file path to the default value.</source> + <translation>កំណត់ផ្លូវឯកសារទៅតម្លៃលំនាំដើមឡើងវិញ ។</translation> </message> <message> - <source>&Copy</source> - <translation>ចម្លង</translation> + <source>&Copy</source> + <translation>ចម្លង</translation> </message> <message> - <source>Please type the desired folder path here.</source> - <translation>សូមវាយផ្លូវថតដែលចង់បាននៅទីនេះ ។</translation> + <source>Please type the desired folder path here.</source> + <translation>សូមវាយផ្លូវថតដែលចង់បាននៅទីនេះ ។</translation> </message> <message> - <source>Please type the desired file path here.</source> - <translation>សូមវាយផ្លូវឯកសារដែលចង់បាននៅទីនេះ ។</translation> + <source>Please type the desired file path here.</source> + <translation>សូមវាយផ្លូវឯកសារដែលចង់បាននៅទីនេះ ។</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxGLSettingsDlg</name> <message> - <source>General</source> - <translation>ទូទៅ</translation> + <source>General</source> + <translation>ទូទៅ</translation> </message> <message> - <source>Input</source> - <translation>បញ្ចូល</translation> + <source>Input</source> + <translation>បញ្ចូល</translation> </message> <message> - <source>Update</source> - <translation>ធ្វើឲ្យទាន់សម័យ</translation> + <source>Update</source> + <translation>ធ្វើឲ្យទាន់សម័យ</translation> </message> <message> - <source>Language</source> - <translation>ភាសា</translation> + <source>Language</source> + <translation>ភាសា</translation> </message> <message> - <source>USB</source> - <translation>USB</translation> + <source>USB</source> + <translation>USB</translation> </message> <message> - <source>VirtualBox - %1</source> - <translation>VirtualBox - %1</translation> + <source>VirtualBox - %1</source> + <translation>VirtualBox - %1</translation> </message> - <message> - <source>Network</source> - <translation type="unfinished">បណ្ដាញ</translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxGLSettingsGeneral</name> <message> - <source>Displays the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines.</source> - <translation>បង្ហាញផ្លូវទៅកាន់ថតម៉ាស៊ីននិម្មិតលំនាំដើម ។ ថតនេះត្រូវបានប្រើ ប្រសិនបើមិនបានបញ្ជាក់ជាក់លាក់ទេ នៅពេលបង្កើតម៉ាស៊ីននិម្មិតថ្មី ។</translation> - </message> - <message> - <source>Displays the path to the library that provides authentication for Remote Display (VRDP) clients.</source> - <translation>បង្ហាញផ្លូវទៅបណ្ណាល័យ ដែលផ្ដល់នូវការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវសម្រាប់ម៉ាស៊ីនភ្ញៀវបង្ហាញពីចម្ងាយ (VRDP) ។</translation> - </message> - <message> - <source>Default &Hard Disk Folder:</source> - <translation>ថតថាសរឹងលំនាំដើម ៖</translation> + <source>Displays the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines.</source> + <translation>បង្ហាញផ្លូវទៅកាន់ថតម៉ាស៊ីននិម្មិតលំនាំដើម ។ ថតនេះត្រូវបានប្រើ ប្រសិនបើមិនបានបញ្ជាក់ជាក់លាក់ទេ នៅពេលបង្កើតម៉ាស៊ីននិម្មិតថ្មី ។</translation> </message> <message> - <source>Default &Machine Folder:</source> - <translation>ថតម៉ាស៊ីនលំនាំដើម ៖</translation> + <source>Displays the path to the library that provides authentication for Remote Display (VRDP) clients.</source> + <translation>បង្ហាញផ្លូវទៅបណ្ណាល័យ ដែលផ្ដល់នូវការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវសម្រាប់ម៉ាស៊ីនភ្ញៀវបង្ហាញពីចម្ងាយ (VRDP) ។</translation> </message> <message> - <source>V&RDP Authentication Library:</source> - <translation>បណ្ណាល័យការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ VRDP ៖</translation> + <source>Default &Hard Disk Folder:</source> + <translation>ថតថាសរឹងលំនាំដើម ៖</translation> </message> <message> - <source>Displays the path to the default hard disk folder. This folder is used, if not explicitly specified otherwise, when adding existing or creating new virtual hard disks.</source> - <translation>បង្ហាញផ្លូវទៅកាន់ថតថាសរឹងលំនាំដើម ។ ថតនេះត្រូវបានប្រើ ប្រសិនបើគ្មានការកំណត់ជាក់លាក់ នៅពេលបន្ថែមថាសរឹងនិម្មិតថ្មី ឬមានស្រាប់ ។</translation> + <source>Default &Machine Folder:</source> + <translation>ថតម៉ាស៊ីនលំនាំដើម ៖</translation> </message> <message> - <source>When checked, the application will provide an icon with the context menu in the system tray.</source> - <translation>នៅពេលបានគូសធីក កម្មវិធីនឹងផ្ដល់នូវរូបតំណាងដែលមានម៉ឺនុយបរិបទនៅក្នុងថាសប្រព័ន្ធ ។</translation> + <source>V&RDP Authentication Library:</source> + <translation>បណ្ណាល័យការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ VRDP ៖</translation> </message> <message> - <source>&Show System Tray Icon</source> - <translation>បង្ហាញរូបតំណាងថាសប្រព័ន្ធ</translation> + <source>Displays the path to the default hard disk folder. This folder is used, if not explicitly specified otherwise, when adding existing or creating new virtual hard disks.</source> + <translation>បង្ហាញផ្លូវទៅកាន់ថតថាសរឹងលំនាំដើម ។ ថតនេះត្រូវបានប្រើ ប្រសិនបើគ្មានការកំណត់ជាក់លាក់ នៅពេលបន្ថែមថាសរឹងនិម្មិតថ្មី ឬមានស្រាប់ ។</translation> </message> <message> - <source>When checked, the Dock Icon will reflect the VM window content in realtime.</source> - <translation type="unfinished"></translation> + <source>When checked, the application will provide an icon with the context menu in the system tray.</source> + <translation>នៅពេលបានគូសធីក កម្មវិធីនឹងផ្ដល់នូវរូបតំណាងដែលមានម៉ឺនុយបរិបទនៅក្នុងថាសប្រព័ន្ធ ។</translation> </message> <message> - <source>&Dock Icon Realtime Preview</source> - <translation type="unfinished"></translation> + <source>&Show System Tray Icon</source> + <translation>បង្ហាញរូបតំណាងថាសប្រព័ន្ធ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxGLSettingsInput</name> <message> - <source>Host &Key:</source> - <translation>គ្រាប់ចុចម៉ាស៊ីន ៖</translation> + <source>Host &Key:</source> + <translation>គ្រាប់ចុចម៉ាស៊ីន ៖</translation> </message> <message> - <source>Displays the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used as a Host Key.</source> - <translation>បង្ហាញគ្រាប់ចុចដែលបានប្រើជាគ្រាប់ចុចម៉ាស៊ីននៅក្នុងបង្អួច VM ។ ធ្វើឲ្យវាលធាតុសកម្ម ហើយចុចគ្រាប់ចុចម៉ាស៊ីនថ្មី ។ ចំណាំថាលេខ ចលនាទស្សន៍ទ្រនិច និងគ្រាប់ចុចកែសម្រួលមិនអាចត្រូវបានប្រើជាគ្រាប់ចុចម៉ាស៊ីនទេ ។</translation> + <source>Displays the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used as a Host Key.</source> + <translation>បង្ហាញគ្រាប់ចុចដែលបានប្រើជាគ្រាប់ចុចម៉ាស៊ីននៅក្នុងបង្អួច VM ។ ធ្វើឲ្យវាលធាតុសកម្ម ហើយចុចគ្រាប់ចុចម៉ាស៊ីនថ្មី ។ ចំណាំថាលេខ ចលនាទស្សន៍ទ្រនិច និងគ្រាប់ចុចកែសម្រួលមិនអាចត្រូវបានប្រើជាគ្រាប់ចុចម៉ាស៊ីនទេ ។</translation> </message> <message> - <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source> - <translation>នៅពេលបានគូសធីក ក្ដារចុចត្រូវបានចាប់យកដោយស្វ័យប្រវត្តិរាល់ពេលដែលបង្អួច VM ត្រូវបានធ្វើឲ្យសកម្ម ។ នៅពេលក្ដារចុចត្រូវបានចាប់យក keystrokes (រួមមានប្រព័ន្ធមួយ ដូចជា ជំនួស(Alt)-ថេប(Tab)) ត្រូវបានបញ្ជូនទៅកាន់ VM ។</translation> + <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source> + <translation>នៅពេលបានគូសធីក ក្ដារចុចត្រូវបានចាប់យកដោយស្វ័យប្រវត្តិរាល់ពេលដែលបង្អួច VM ត្រូវបានធ្វើឲ្យសកម្ម ។ នៅពេលក្ដារចុចត្រូវបានចាប់យក keystrokes (រួមមានប្រព័ន្ធមួយ ដូចជា ជំនួស(Alt)-ថេប(Tab)) ត្រូវបានបញ្ជូនទៅកាន់ VM ។</translation> </message> <message> - <source>&Auto Capture Keyboard</source> - <translation>ចាប់យកក្ដារចុចដោយស្វ័យប្រវត្តិ</translation> + <source>&Auto Capture Keyboard</source> + <translation>ចាប់យកក្ដារចុចដោយស្វ័យប្រវត្តិ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxGLSettingsLanguage</name> <message> - <source> (built-in)</source> - <comment>Language</comment> - <translation> (ជាប់)</translation> - </message> - <message> - <source><unavailable></source> - <comment>Language</comment> - <translation><មិនអាចប្រើបាន></translation> - </message> - <message> - <source><unknown></source> - <comment>Author(s)</comment> - <translation><មិនស្គាល់></translation> - </message> - <message> - <source>Default</source> - <comment>Language</comment> - <translation>លំនាំដើម</translation> - </message> - <message> - <source>Language:</source> - <translation>ភាសា ៖</translation> - </message> - <message> - <source>&Interface Language:</source> - <translation>ភាសាចំណុចប្រទាក់ ៖</translation> - </message> - <message> - <source>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</source> - <translation>រាយភាសាចំណុចប្រទាក់អ្នកប្រើដែលអាចប្រើបាន ។ ភាសាដែលមានប្រសិទ្ធភាពត្រូវបានសរសេរ <b>ដិត</b> ។ ជ្រើស <i>លំនាំដើម</i> ដើម្បីកំណត់ភាសាលំនាំដើមរបស់ប្រព័ន្ធឡើងវិញ ។</translation> - </message> - <message> - <source>Name</source> - <translation>ឈ្មោះ</translation> - </message> - <message> - <source>Id</source> - <translation>លេខសម្គាល់</translation> - </message> - <message> - <source>Language</source> - <translation>ភាសា</translation> - </message> - <message> - <source>Author</source> - <translation>យុថ្កា</translation> - </message> - <message> - <source>Author(s):</source> - <translation>យុថ្កា ៖</translation> - </message> -</context> -<context> - <name>VBoxGLSettingsNetwork</name> - <message> - <source>%1 network</source> - <comment><adapter name> network</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>host IPv4 address of <b>%1</b> is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>host IPv4 network mask of <b>%1</b> is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>host IPv6 address of <b>%1</b> is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>DHCP server address of <b>%1</b> is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>DHCP server network mask of <b>%1</b> is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>DHCP lower address bound of <b>%1</b> is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>DHCP upper address bound of <b>%1</b> is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Adapter</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Automatically configured</source> - <comment>interface</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Manually configured</source> - <comment>interface</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>IPv4 Address</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Not set</source> - <comment>address</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>IPv4 Network Mask</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Not set</source> - <comment>mask</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>IPv6 Address</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>IPv6 Network Mask Length</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Not set</source> - <comment>length</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>DHCP Server</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Enabled</source> - <comment>server</comment> - <translation type="unfinished">បានបើក</translation> - </message> - <message> - <source>Disabled</source> - <comment>server</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Address</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Network Mask</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Lower Bound</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Not set</source> - <comment>bound</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Upper Bound</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Add host-only network</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Remove host-only network</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Edit host-only network</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Performing</source> - <comment>creating/removing host-only network</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Host-only Networks:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Lists all available host-only networks.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Name</source> - <translation type="unfinished">ឈ្មោះ</translation> + <source> (built-in)</source> + <comment>Language</comment> + <translation> (ជាប់)</translation> </message> -</context> -<context> - <name>VBoxGLSettingsNetworkDetails</name> <message> - <source>Host-only Network Details</source> - <translation type="unfinished"></translation> + <source><unavailable></source> + <comment>Language</comment> + <translation><មិនអាចប្រើបាន></translation> </message> <message> - <source>&Adapter</source> - <translation type="unfinished"></translation> + <source><unknown></source> + <comment>Author(s)</comment> + <translation><មិនស្គាល់></translation> </message> <message> - <source>Manual &Configuration</source> - <translation type="unfinished"></translation> + <source>Default</source> + <comment>Language</comment> + <translation>លំនាំដើម</translation> </message> <message> - <source>Use manual configuration for this host-only network adapter.</source> - <translation type="unfinished"></translation> + <source>Language:</source> + <translation>ភាសា ៖</translation> </message> <message> - <source>&IPv4 Address:</source> - <translation type="unfinished"></translation> + <source>&Interface Language:</source> + <translation>ភាសាចំណុចប្រទាក់ ៖</translation> </message> <message> - <source>Displays the host IPv4 address for this adapter.</source> - <translation type="unfinished"></translation> + <source>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</source> + <translation>រាយភាសាចំណុចប្រទាក់អ្នកប្រើដែលអាចប្រើបាន ។ ភាសាដែលមានប្រសិទ្ធភាពត្រូវបានសរសេរ <b>ដិត</b> ។ ជ្រើស <i>លំនាំដើម</i> ដើម្បីកំណត់ភាសាលំនាំដើមរបស់ប្រព័ន្ធឡើងវិញ ។</translation> </message> <message> - <source>IPv4 Network &Mask:</source> - <translation type="unfinished"></translation> + <source>Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Displays the host IPv4 network mask for this adapter.</source> - <translation type="unfinished"></translation> + <source>Id</source> + <translation>លេខសម្គាល់</translation> </message> <message> - <source>I&Pv6 Address:</source> - <translation type="unfinished"></translation> + <source>Language</source> + <translation>ភាសា</translation> </message> <message> - <source>Displays the host IPv6 address for this adapter if IPv6 is supported.</source> - <translation type="unfinished"></translation> + <source>Author</source> + <translation>អ្នកបកប្រែ</translation> </message> <message> - <source>IPv6 Network Mask &Length:</source> - <translation type="unfinished"></translation> + <source>Author(s):</source> + <translation>យុថ្កា ៖</translation> </message> - <message> - <source>Displays the host IPv6 network mask prefix length for this adapter if IPv6 is supported.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&DHCP Server</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Enable Server</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Indicates whether the DHCP Server is enabled on machine startup or not.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Server Add&ress:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Displays the address of the DHCP server servicing the network associated with this host-only adapter.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Server &Mask:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Displays the network mask of the DHCP server servicing the network associated with this host-only adapter.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Lower Address Bound:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Displays the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Upper Address Bound:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Displays the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxGLSettingsUpdate</name> <message> - <source>When checked, the application will periodically connect to the VirtualBox website and check whether a new VirtualBox version is available.</source> - <translation>នៅពេលបានគូសធីក កម្មវិធីនឹងតភ្ជាប់ទៅកាន់តំបន់បណ្ដាញ VirtualBox តាមកាលកំណត់ ហើយពិនិត្យមើលថាតើមានកំណែ VirtualBox ដែរឬទេ ។</translation> + <source>When checked, the application will periodically connect to the VirtualBox website and check whether a new VirtualBox version is available.</source> + <translation>នៅពេលបានគូសធីក កម្មវិធីនឹងតភ្ជាប់ទៅកាន់តំបន់បណ្ដាញ VirtualBox តាមកាលកំណត់ ហើយពិនិត្យមើលថាតើមានកំណែ VirtualBox ដែរឬទេ ។</translation> </message> <message> - <source>&Check for updates</source> - <translation>ពិនិត្យមើលភាពទាន់សម័យ</translation> + <source>&Check for updates</source> + <translation>ពិនិត្យមើលភាពទាន់សម័យ</translation> </message> <message> - <source>&Once per:</source> - <translation>ម្ដងក្នុង ៖</translation> + <source>&Once per:</source> + <translation>ម្ដងក្នុង ៖</translation> </message> <message> - <source>Specifies how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source> - <translation>បញ្ជាក់វិធីដែលកំណែថ្មីពិនិត្យមើលគួរត្រូវបានអនុវត្ត ។ ចំណាំថា ប្រសិនបើង្នកចង់បញ្ចប់ បិទការពិនិត្យនេះ គ្រាន់តែជម្រះប្រអប់គូសធីកខាងលើ ។</translation> + <source>Specifies how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source> + <translation>បញ្ជាក់វិធីដែលកំណែថ្មីពិនិត្យមើលគួរត្រូវបានអនុវត្ត ។ ចំណាំថា ប្រសិនបើង្នកចង់បញ្ចប់ បិទការពិនិត្យនេះ គ្រាន់តែជម្រះប្រអប់គូសធីកខាងលើ ។</translation> </message> <message> - <source>Next Check:</source> - <translation>ការពិនិត្យមើលបន្ទាប់ ៖</translation> + <source>Next Check:</source> + <translation>ការពិនិត្យមើលបន្ទាប់ ៖</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxGlobal</name> <message> - <source>Unknown device %1:%2</source> - <comment>USB device details</comment> - <translation>មិនស្គាល់ឧបករណ៍ %1 ៖ %2</translation> - </message> - <message> - <source><nobr>Vendor ID: %1</nobr><br><nobr>Product ID: %2</nobr><br><nobr>Revision: %3</nobr></source> - <comment>USB device tooltip</comment> - <translation><nobr>លេខសម្គាល់អ្នកលក់ ៖ %1</nobr><br><nobr>លេខសម្គាល់អ្នកផលិត ៖ %2</nobr><br><nobr>ការពិនិត្យឡើងវិញ ៖ %3</nobr></translation> - </message> - <message> - <source><br><nobr>Serial No. %1</nobr></source> - <comment>USB device tooltip</comment> - <translation><br><nobr>លេខស៊េរី %1</nobr></translation> - </message> - <message> - <source><br><nobr>State: %1</nobr></source> - <comment>USB device tooltip</comment> - <translation><br><nobr>ស្ថានភាព ៖ %1</nobr></translation> - </message> - <message> - <source>Name</source> - <comment>details report</comment> - <translation>ឈ្មោះ</translation> - </message> - <message> - <source>OS Type</source> - <comment>details report</comment> - <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> - </message> - <message> - <source>Base Memory</source> - <comment>details report</comment> - <translation>សតិមូលដ្ឋាន</translation> + <source>Unknown device %1:%2</source> + <comment>USB device details</comment> + <translation>មិនស្គាល់ឧបករណ៍ %1 ៖ %2</translation> </message> <message> - <source><nobr>%3 MB</nobr></source> - <comment>details report</comment> - <translation type="obsolete"><nobr>%3 មេកាបៃ</nobr></translation> + <source><nobr>Vendor ID: %1</nobr><br><nobr>Product ID: %2</nobr><br><nobr>Revision: %3</nobr></source> + <comment>USB device tooltip</comment> + <translation><nobr>លេខសម្គាល់អ្នកលក់ ៖ %1</nobr><br><nobr>លេខសម្គាល់អ្នកផលិត ៖ %2</nobr><br><nobr>ការពិនិត្យឡើងវិញ ៖ %3</nobr></translation> </message> <message> - <source>General</source> - <comment>details report</comment> - <translation>ទូទៅ</translation> + <source><br><nobr>Serial No. %1</nobr></source> + <comment>USB device tooltip</comment> + <translation><br><nobr>លេខស៊េរី %1</nobr></translation> </message> <message> - <source>Video Memory</source> - <comment>details report</comment> - <translation>សតិវីដេអូ</translation> + <source><br><nobr>State: %1</nobr></source> + <comment>USB device tooltip</comment> + <translation><br><nobr>ស្ថានភាព ៖ %1</nobr></translation> </message> <message> - <source><nobr>%4 MB</nobr></source> - <comment>details report</comment> - <translation type="obsolete"><nobr>%4 មេកាបៃ</nobr></translation> + <source>Name</source> + <comment>details report</comment> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Boot Order</source> - <comment>details report</comment> - <translation>លំដាប់ចាប់ផ្ដើម</translation> + <source>OS Type</source> + <comment>details report</comment> + <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> </message> <message> - <source>ACPI</source> - <comment>details report</comment> - <translation>ACPI</translation> + <source>Base Memory</source> + <comment>details report</comment> + <translation>សតិមូលដ្ឋាន</translation> </message> <message> - <source>IO APIC</source> - <comment>details report</comment> - <translation>IO APIC</translation> + <source><nobr>%3 MB</nobr></source> + <comment>details report</comment> + <translation><nobr>%3 មេកាបៃ</nobr></translation> </message> <message> - <source>Not Attached</source> - <comment>details report (HDDs)</comment> - <translation>មិនបានភ្ជាប់</translation> + <source>General</source> + <comment>details report</comment> + <translation>ទូទៅ</translation> </message> <message> - <source>Hard Disks</source> - <comment>details report</comment> - <translation>ថាសរឹង</translation> + <source>Video Memory</source> + <comment>details report</comment> + <translation>សតិវីដេអូ</translation> </message> <message> - <source>Enabled</source> - <comment>details report (ACPI)</comment> - <translation>បានបើក</translation> + <source><nobr>%4 MB</nobr></source> + <comment>details report</comment> + <translation><nobr>%4 មេកាបៃ</nobr></translation> </message> <message> - <source>Disabled</source> - <comment>details report (ACPI)</comment> - <translation>បានបិទ</translation> + <source>Boot Order</source> + <comment>details report</comment> + <translation>លំដាប់ចាប់ផ្ដើម</translation> </message> <message> - <source>Enabled</source> - <comment>details report (IO APIC)</comment> - <translation>បានបើក</translation> + <source>ACPI</source> + <comment>details report</comment> + <translation>ACPI</translation> </message> <message> - <source>Disabled</source> - <comment>details report (IO APIC)</comment> - <translation>បានបិទ</translation> + <source>IO APIC</source> + <comment>details report</comment> + <translation>IO APIC</translation> </message> <message> - <source>Not mounted</source> - <comment>details report (floppy)</comment> - <translation>មិនបានម៉ោនទេ</translation> + <source>Not Attached</source> + <comment>details report (HDDs)</comment> + <translation>មិនបានភ្ជាប់</translation> </message> <message> - <source>Image</source> - <comment>details report (floppy)</comment> - <translation>រូបភាព</translation> + <source>Hard Disks</source> + <comment>details report</comment> + <translation>ថាសរឹង</translation> </message> <message> - <source>Host Drive</source> - <comment>details report (floppy)</comment> - <translation>ដ្រាយម៉ាស៊ីន</translation> + <source>Enabled</source> + <comment>details report (ACPI)</comment> + <translation>បានបើក</translation> </message> <message> - <source>Floppy</source> - <comment>details report</comment> - <translation>ថាសទន់</translation> + <source>Disabled</source> + <comment>details report (ACPI)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Not mounted</source> - <comment>details report (DVD)</comment> - <translation>មិនបានម៉ោនទេ</translation> + <source>Enabled</source> + <comment>details report (IO APIC)</comment> + <translation>បានបើក</translation> </message> <message> - <source>Image</source> - <comment>details report (DVD)</comment> - <translation>រូបភាព</translation> + <source>Disabled</source> + <comment>details report (IO APIC)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Host Drive</source> - <comment>details report (DVD)</comment> - <translation>ដ្រាយម៉ាស៊ីន</translation> + <source>Not mounted</source> + <comment>details report (floppy)</comment> + <translation>មិនបានម៉ោនទេ</translation> </message> <message> - <source>CD/DVD-ROM</source> - <comment>details report</comment> - <translation>ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>Image</source> + <comment>details report (floppy)</comment> + <translation>រូបភាព</translation> </message> <message> - <source>Disabled</source> - <comment>details report (audio)</comment> - <translation>បានបិទ</translation> + <source>Host Drive</source> + <comment>details report (floppy)</comment> + <translation>ដ្រាយម៉ាស៊ីន</translation> </message> <message> - <source>Audio</source> - <comment>details report</comment> - <translation>អូឌីយ៉ូ</translation> + <source>Floppy</source> + <comment>details report</comment> + <translation>ថាសទន់</translation> </message> <message> - <source>Adapter %1</source> - <comment>details report (network)</comment> - <translation>អាដាប់ទ័រ %1</translation> + <source>Not mounted</source> + <comment>details report (DVD)</comment> + <translation>មិនបានម៉ោនទេ</translation> </message> <message> - <source>Disabled</source> - <comment>details report (network)</comment> - <translation>បានបិទ</translation> + <source>Image</source> + <comment>details report (DVD)</comment> + <translation>រូបភាព</translation> </message> <message> - <source>Network</source> - <comment>details report</comment> - <translation>បណ្ដាញ</translation> + <source>Host Drive</source> + <comment>details report (DVD)</comment> + <translation>ដ្រាយម៉ាស៊ីន</translation> </message> <message> - <source>Device Filters</source> - <comment>details report (USB)</comment> - <translation>តម្រងឧបករណ៍</translation> + <source>CD/DVD-ROM</source> + <comment>details report</comment> + <translation>ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>%1 (%2 active)</source> - <comment>details report (USB)</comment> - <translation>%1 (%2 សកម្មភាព)</translation> + <source>Disabled</source> + <comment>details report (audio)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Disabled</source> - <comment>details report (USB)</comment> - <translation>បានបិទ</translation> + <source>Audio</source> + <comment>details report</comment> + <translation>អូឌីយ៉ូ</translation> </message> <message> - <source>VRDP Server Port</source> - <comment>details report (VRDP)</comment> - <translation type="obsolete">ច្រកម៉ាស៊ីនបម្រើ VRDP</translation> + <source>Adapter %1</source> + <comment>details report (network)</comment> + <translation>អាដាប់ទ័រ %1</translation> </message> <message> - <source>%1</source> - <comment>details report (VRDP)</comment> - <translation type="obsolete">%1</translation> + <source>Disabled</source> + <comment>details report (network)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Disabled</source> - <comment>details report (VRDP)</comment> - <translation type="obsolete">បានបិទ</translation> + <source>Network</source> + <comment>details report</comment> + <translation>បណ្ដាញ</translation> </message> <message> - <source>Remote Display</source> - <comment>details report</comment> - <translation type="obsolete">បង្ហាញពីចម្ងាយ</translation> + <source>Device Filters</source> + <comment>details report (USB)</comment> + <translation>តម្រងឧបករណ៍</translation> </message> <message> - <source>Opening URLs is not implemented yet.</source> - <translation type="obsolete">បើក URLs ដែលមិនត្រូវបានអនុវត្តនៅឡើយទេ ។</translation> + <source>%1 (%2 active)</source> + <comment>details report (USB)</comment> + <translation>%1 (%2 សកម្មភាព)</translation> </message> <message> - <source>Powered Off</source> - <comment>MachineState</comment> - <translation>បិទ</translation> + <source>Disabled</source> + <comment>details report (USB)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Saved</source> - <comment>MachineState</comment> - <translation>បានរក្សាទុក</translation> + <source>VRDP Server Port</source> + <comment>details report (VRDP)</comment> + <translation>ច្រកម៉ាស៊ីនបម្រើ VRDP</translation> </message> <message> - <source>Aborted</source> - <comment>MachineState</comment> - <translation>បានបោះបង់</translation> + <source>%1</source> + <comment>details report (VRDP)</comment> + <translation>%1</translation> </message> <message> - <source>Running</source> - <comment>MachineState</comment> - <translation>រត់</translation> + <source>Disabled</source> + <comment>details report (VRDP)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Paused</source> - <comment>MachineState</comment> - <translation>បានផ្អាក</translation> + <source>Remote Display</source> + <comment>details report</comment> + <translation>បង្ហាញពីចម្ងាយ</translation> </message> <message> - <source>Starting</source> - <comment>MachineState</comment> - <translation>ចាប់ផ្ដើម</translation> + <source>Opening URLs is not implemented yet.</source> + <translation>បើក URLs ដែលមិនត្រូវបានអនុវត្តនៅឡើយទេ ។</translation> </message> <message> - <source>Stopping</source> - <comment>MachineState</comment> - <translation>បញ្ឈប់</translation> + <source>Powered Off</source> + <comment>MachineState</comment> + <translation>បិទ</translation> </message> <message> - <source>Saving</source> - <comment>MachineState</comment> - <translation>រក្សាទុក</translation> + <source>Saved</source> + <comment>MachineState</comment> + <translation>បានរក្សាទុក</translation> </message> <message> - <source>Restoring</source> - <comment>MachineState</comment> - <translation>ស្ដារឡើងវិញ</translation> + <source>Aborted</source> + <comment>MachineState</comment> + <translation>បានបោះបង់</translation> </message> <message> - <source>Discarding</source> - <comment>MachineState</comment> - <translation>បដិសេធ</translation> + <source>Running</source> + <comment>MachineState</comment> + <translation>រត់</translation> </message> <message> - <source>Closed</source> - <comment>SessionState</comment> - <translation>បានបិទ</translation> + <source>Paused</source> + <comment>MachineState</comment> + <translation>បានផ្អាក</translation> </message> <message> - <source>Open</source> - <comment>SessionState</comment> - <translation>បើក</translation> + <source>Starting</source> + <comment>MachineState</comment> + <translation>ចាប់ផ្ដើម</translation> </message> <message> - <source>Spawning</source> - <comment>SessionState</comment> - <translation>ការព្រមានសារឥតបានការ</translation> + <source>Stopping</source> + <comment>MachineState</comment> + <translation>បញ្ឈប់</translation> </message> <message> - <source>Closing</source> - <comment>SessionState</comment> - <translation>បិទ</translation> + <source>Saving</source> + <comment>MachineState</comment> + <translation>រក្សាទុក</translation> </message> <message> - <source>None</source> - <comment>DeviceType</comment> - <translation>គ្មាន</translation> + <source>Restoring</source> + <comment>MachineState</comment> + <translation>ស្ដារឡើងវិញ</translation> </message> <message> - <source>Floppy</source> - <comment>DeviceType</comment> - <translation>ថាសទន់</translation> + <source>Discarding</source> + <comment>MachineState</comment> + <translation>បដិសេធ</translation> </message> <message> - <source>CD/DVD-ROM</source> - <comment>DeviceType</comment> - <translation>ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>Closed</source> + <comment>SessionState</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Hard Disk</source> - <comment>DeviceType</comment> - <translation>ថាសរឹង</translation> + <source>Open</source> + <comment>SessionState</comment> + <translation>បើក</translation> </message> <message> - <source>Network</source> - <comment>DeviceType</comment> - <translation>បណ្ដាញ</translation> + <source>Spawning</source> + <comment>SessionState</comment> + <translation>ការព្រមានសារឥតបានការ</translation> </message> <message> - <source>Normal</source> - <comment>DiskType</comment> - <translation>ធម្មតា</translation> + <source>Closing</source> + <comment>SessionState</comment> + <translation>បិទ</translation> </message> <message> - <source>Immutable</source> - <comment>DiskType</comment> - <translation>មិនអាចផ្លាស់ប្ដូរបាន</translation> + <source>None</source> + <comment>DeviceType</comment> + <translation>គ្មាន</translation> </message> <message> - <source>Writethrough</source> - <comment>DiskType</comment> - <translation>សរសរកាត់</translation> + <source>Floppy</source> + <comment>DeviceType</comment> + <translation>ថាសទន់</translation> </message> <message> - <source>Null</source> - <comment>VRDPAuthType</comment> - <translation>គ្មាន</translation> + <source>CD/DVD-ROM</source> + <comment>DeviceType</comment> + <translation>ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>External</source> - <comment>VRDPAuthType</comment> - <translation>ខាងក្រៅ</translation> + <source>Hard Disk</source> + <comment>DeviceType</comment> + <translation>ថាសរឹង</translation> </message> <message> - <source>Guest</source> - <comment>VRDPAuthType</comment> - <translation>ម៉ាស៊ីនភ្ញៀវ</translation> + <source>Network</source> + <comment>DeviceType</comment> + <translation>បណ្ដាញ</translation> </message> <message> - <source>Ignore</source> - <comment>USBFilterActionType</comment> - <translation>មិនអើពើ</translation> + <source>Normal</source> + <comment>DiskType</comment> + <translation>ធម្មតា</translation> </message> <message> - <source>Hold</source> - <comment>USBFilterActionType</comment> - <translation>កាន់</translation> + <source>Immutable</source> + <comment>DiskType</comment> + <translation>មិនអាចផ្លាស់ប្ដូរបាន</translation> </message> <message> - <source>Null Audio Driver</source> - <comment>AudioDriverType</comment> - <translation>គ្មានកម្មវិធីបញ្ជាអូឌីយ៉ូទេ</translation> + <source>Writethrough</source> + <comment>DiskType</comment> + <translation>សរសរកាត់</translation> </message> <message> - <source>Windows Multimedia</source> - <comment>AudioDriverType</comment> - <translation>ពហុមេឌៀវីនដូ</translation> + <source>Null</source> + <comment>VRDPAuthType</comment> + <translation>គ្មាន</translation> </message> <message> - <source>OSS Audio Driver</source> - <comment>AudioDriverType</comment> - <translation>កម្មវិធីបញ្ជាអូឌីយ៉ូ OSS</translation> + <source>External</source> + <comment>VRDPAuthType</comment> + <translation>ខាងក្រៅ</translation> </message> <message> - <source>ALSA Audio Driver</source> - <comment>AudioDriverType</comment> - <translation>កម្មវិធីបញ្ជាអូឌីយ៉ូ ALSA</translation> + <source>Guest</source> + <comment>VRDPAuthType</comment> + <translation>ម៉ាស៊ីនភ្ញៀវ</translation> </message> <message> - <source>Windows DirectSound</source> - <comment>AudioDriverType</comment> - <translation>DirectSound វីនដូ</translation> + <source>Ignore</source> + <comment>USBFilterActionType</comment> + <translation>មិនអើពើ</translation> </message> <message> - <source>CoreAudio</source> - <comment>AudioDriverType</comment> - <translation>CoreAudio</translation> + <source>Hold</source> + <comment>USBFilterActionType</comment> + <translation>កាន់</translation> </message> <message> - <source>Not attached</source> - <comment>NetworkAttachmentType</comment> - <translation>មិនបានភ្ជាប់</translation> + <source>Null Audio Driver</source> + <comment>AudioDriverType</comment> + <translation>គ្មានកម្មវិធីបញ្ជាអូឌីយ៉ូទេ</translation> </message> <message> - <source>NAT</source> - <comment>NetworkAttachmentType</comment> - <translation>NAT</translation> + <source>Windows Multimedia</source> + <comment>AudioDriverType</comment> + <translation>ពហុមេឌៀវីនដូ</translation> </message> <message> - <source>Host Interface</source> - <comment>NetworkAttachmentType</comment> - <translation type="obsolete">ចំណុចប្រទាក់ម៉ាស៊ីន</translation> + <source>OSS Audio Driver</source> + <comment>AudioDriverType</comment> + <translation>កម្មវិធីបញ្ជាអូឌីយ៉ូ OSS</translation> </message> <message> - <source>Internal Network</source> - <comment>NetworkAttachmentType</comment> - <translation>បណ្ដាញអ៊ីនធឺណិត</translation> + <source>ALSA Audio Driver</source> + <comment>AudioDriverType</comment> + <translation>កម្មវិធីបញ្ជាអូឌីយ៉ូ ALSA</translation> </message> <message> - <source>Not supported</source> - <comment>USBDeviceState</comment> - <translation>មិនបានគាំទ្រទេ</translation> + <source>Windows DirectSound</source> + <comment>AudioDriverType</comment> + <translation>DirectSound វីនដូ</translation> </message> <message> - <source>Unavailable</source> - <comment>USBDeviceState</comment> - <translation>មិនអាចប្រើបាន</translation> + <source>CoreAudio</source> + <comment>AudioDriverType</comment> + <translation>CoreAudio</translation> </message> <message> - <source>Busy</source> - <comment>USBDeviceState</comment> - <translation>រវល់</translation> + <source>Not attached</source> + <comment>NetworkAttachmentType</comment> + <translation>មិនបានភ្ជាប់</translation> </message> <message> - <source>Available</source> - <comment>USBDeviceState</comment> - <translation>អាចប្រើបាន</translation> + <source>NAT</source> + <comment>NetworkAttachmentType</comment> + <translation>NAT</translation> </message> <message> - <source>Held</source> - <comment>USBDeviceState</comment> - <translation>កាន់</translation> + <source>Host Interface</source> + <comment>NetworkAttachmentType</comment> + <translation>ចំណុចប្រទាក់ម៉ាស៊ីន</translation> </message> <message> - <source>Captured</source> - <comment>USBDeviceState</comment> - <translation>បានចាប់យក</translation> + <source>Internal Network</source> + <comment>NetworkAttachmentType</comment> + <translation>បណ្ដាញអ៊ីនធឺណិត</translation> </message> <message> - <source>Disabled</source> - <comment>ClipboardType</comment> - <translation>បានបិទ</translation> + <source>Not supported</source> + <comment>USBDeviceState</comment> + <translation>មិនបានគាំទ្រទេ</translation> </message> <message> - <source>Host To Guest</source> - <comment>ClipboardType</comment> - <translation>ម៉ាស៊ីនទៅកាន់ម៉ាស៊ីនភ្ញៀវ</translation> + <source>Unavailable</source> + <comment>USBDeviceState</comment> + <translation>មិនអាចប្រើបាន</translation> </message> <message> - <source>Guest To Host</source> - <comment>ClipboardType</comment> - <translation>ម៉ាស៊ីនភ្ញៀវទៅកាន់ម៉ាស៊ីន</translation> + <source>Busy</source> + <comment>USBDeviceState</comment> + <translation>រវល់</translation> </message> <message> - <source>Bidirectional</source> - <comment>ClipboardType</comment> - <translation>ទ្វេទិស</translation> + <source>Available</source> + <comment>USBDeviceState</comment> + <translation>អាចប្រើបាន</translation> </message> <message> - <source>Select a directory</source> - <translation type="obsolete">ជ្រើសថត</translation> + <source>Held</source> + <comment>USBDeviceState</comment> + <translation>កាន់</translation> </message> <message> - <source>Select a file</source> - <translation type="obsolete">ជ្រើសឯកសារ</translation> + <source>Captured</source> + <comment>USBDeviceState</comment> + <translation>បានចាប់យក</translation> </message> <message> - <source>Port %1</source> - <comment>details report (serial ports)</comment> - <translation>ច្រក %1</translation> + <source>Disabled</source> + <comment>ClipboardType</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Disabled</source> - <comment>details report (serial ports)</comment> - <translation>បានបិទ</translation> + <source>Host To Guest</source> + <comment>ClipboardType</comment> + <translation>ម៉ាស៊ីនទៅកាន់ម៉ាស៊ីនភ្ញៀវ</translation> </message> <message> - <source>Serial Ports</source> - <comment>details report</comment> - <translation>ច្រកស៊េរី</translation> + <source>Guest To Host</source> + <comment>ClipboardType</comment> + <translation>ម៉ាស៊ីនភ្ញៀវទៅកាន់ម៉ាស៊ីន</translation> </message> <message> - <source>USB</source> - <comment>details report</comment> - <translation>USB</translation> + <source>Bidirectional</source> + <comment>ClipboardType</comment> + <translation>ទ្វេទិស</translation> </message> <message> - <source>Shared Folders</source> - <comment>details report (shared folders)</comment> - <translation>ថតដែលបានចែករំលែក</translation> + <source>Select a directory</source> + <translation>ជ្រើសថត</translation> </message> <message> - <source>%1</source> - <comment>details report (shadef folders)</comment> - <translation type="obsolete">%1</translation> + <source>Select a file</source> + <translation>ជ្រើសឯកសារ</translation> </message> <message> - <source>None</source> - <comment>details report (shared folders)</comment> - <translation>គ្មាន</translation> + <source>Port %1</source> + <comment>details report (serial ports)</comment> + <translation>ច្រក %1</translation> </message> <message> - <source>Shared Folders</source> - <comment>details report</comment> - <translation>ថតដែលបានចែករំលែក</translation> + <source>Disabled</source> + <comment>details report (serial ports)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Stuck</source> - <comment>MachineState</comment> - <translation>គាំង</translation> + <source>Serial Ports</source> + <comment>details report</comment> + <translation>ច្រកស៊េរី</translation> </message> <message> - <source>Disconnected</source> - <comment>PortMode</comment> - <translation>បានផ្ដាច់</translation> + <source>USB</source> + <comment>details report</comment> + <translation>USB</translation> </message> <message> - <source>Host Pipe</source> - <comment>PortMode</comment> - <translation>បំពង់ម៉ាស៊ីន</translation> + <source>Shared Folders</source> + <comment>details report (shared folders)</comment> + <translation>ថតដែលបានចែករំលែក</translation> </message> <message> - <source>Host Device</source> - <comment>PortMode</comment> - <translation>ឧបករណ៍ម៉ាស៊ីន</translation> + <source>%1</source> + <comment>details report (shadef folders)</comment> + <translation>%1</translation> </message> <message> - <source>User-defined</source> - <comment>serial port</comment> - <translation>កំណត់ដោយអ្នកប្រើ</translation> + <source>None</source> + <comment>details report (shared folders)</comment> + <translation>គ្មាន</translation> </message> <message> - <source>VT-x/AMD-V</source> - <comment>details report</comment> - <translation>VT-x/AMD-V</translation> + <source>Shared Folders</source> + <comment>details report</comment> + <translation>ថតដែលបានចែករំលែក</translation> </message> <message> - <source>PAE/NX</source> - <comment>details report</comment> - <translation>PAE/NX</translation> + <source>Stuck</source> + <comment>MachineState</comment> + <translation>គាំង</translation> </message> <message> - <source>Enabled</source> - <comment>details report (VT-x/AMD-V)</comment> - <translation>បានបើក</translation> + <source>Disconnected</source> + <comment>PortMode</comment> + <translation>បានផ្ដាច់</translation> </message> <message> - <source>Disabled</source> - <comment>details report (VT-x/AMD-V)</comment> - <translation>បានបិទ</translation> + <source>Host Pipe</source> + <comment>PortMode</comment> + <translation>បំពង់ម៉ាស៊ីន</translation> </message> <message> - <source>Enabled</source> - <comment>details report (PAE/NX)</comment> - <translation>បានបើក</translation> + <source>Host Device</source> + <comment>PortMode</comment> + <translation>ឧបករណ៍ម៉ាស៊ីន</translation> </message> <message> - <source>Disabled</source> - <comment>details report (PAE/NX)</comment> - <translation>បានបិទ</translation> + <source>User-defined</source> + <comment>serial port</comment> + <translation>កំណត់ដោយអ្នកប្រើ</translation> </message> <message> - <source>Host Driver</source> - <comment>details report (audio)</comment> - <translation>កម្មវិធីបញ្ជាម៉ាស៊ីន</translation> + <source>VT-x/AMD-V</source> + <comment>details report</comment> + <translation>VT-x/AMD-V</translation> </message> <message> - <source>Controller</source> - <comment>details report (audio)</comment> - <translation>វត្ថុបញ្ជា</translation> + <source>PAE/NX</source> + <comment>details report</comment> + <translation>PAE/NX</translation> </message> <message> - <source>Port %1</source> - <comment>details report (parallel ports)</comment> - <translation>ច្រក %1</translation> + <source>Enabled</source> + <comment>details report (VT-x/AMD-V)</comment> + <translation>បានបើក</translation> </message> <message> - <source>Disabled</source> - <comment>details report (parallel ports)</comment> - <translation>បានបិទ</translation> + <source>Disabled</source> + <comment>details report (VT-x/AMD-V)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Parallel Ports</source> - <comment>details report</comment> - <translation>ច្រកប៉ារ៉ាឡែល</translation> + <source>Enabled</source> + <comment>details report (PAE/NX)</comment> + <translation>បានបើក</translation> </message> <message> - <source>USB</source> - <comment>DeviceType</comment> - <translation>USB</translation> + <source>Disabled</source> + <comment>details report (PAE/NX)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Shared Folder</source> - <comment>DeviceType</comment> - <translation>ថតដែលបានចែករំលែក</translation> + <source>Host Driver</source> + <comment>details report (audio)</comment> + <translation>កម្មវិធីបញ្ជាម៉ាស៊ីន</translation> </message> <message> - <source>IDE</source> - <comment>StorageBus</comment> - <translation>IDE</translation> + <source>Controller</source> + <comment>details report (audio)</comment> + <translation>វត្ថុបញ្ជា</translation> </message> <message> - <source>SATA</source> - <comment>StorageBus</comment> - <translation>SATA</translation> + <source>Port %1</source> + <comment>details report (parallel ports)</comment> + <translation>ច្រក %1</translation> </message> <message> - <source>Primary</source> - <comment>StorageBusChannel</comment> - <translation>ចម្បង</translation> + <source>Disabled</source> + <comment>details report (parallel ports)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Secondary</source> - <comment>StorageBusChannel</comment> - <translation>រង</translation> + <source>Parallel Ports</source> + <comment>details report</comment> + <translation>ច្រកប៉ារ៉ាឡែល</translation> </message> <message> - <source>Master</source> - <comment>StorageBusDevice</comment> - <translation>មេ</translation> + <source>USB</source> + <comment>DeviceType</comment> + <translation>USB</translation> </message> <message> - <source>Slave</source> - <comment>StorageBusDevice</comment> - <translation>កូនចៅ</translation> + <source>Shared Folder</source> + <comment>DeviceType</comment> + <translation>ថតដែលបានចែករំលែក</translation> </message> <message> - <source>Port %1</source> - <comment>StorageBusChannel</comment> - <translation>ច្រក %1</translation> + <source>IDE</source> + <comment>StorageBus</comment> + <translation>IDE</translation> </message> <message> - <source>Solaris Audio</source> - <comment>AudioDriverType</comment> - <translation>អូឌីយ៉ូ Solaris</translation> + <source>SATA</source> + <comment>StorageBus</comment> + <translation>SATA</translation> </message> <message> - <source>PulseAudio</source> - <comment>AudioDriverType</comment> - <translation>PulseAudio</translation> + <source>Primary</source> + <comment>StorageBusChannel</comment> + <translation>ចម្បង</translation> </message> <message> - <source>ICH AC97</source> - <comment>AudioControllerType</comment> - <translation>ICH AC97</translation> + <source>Secondary</source> + <comment>StorageBusChannel</comment> + <translation>រង</translation> </message> <message> - <source>SoundBlaster 16</source> - <comment>AudioControllerType</comment> - <translation>SoundBlaster 16</translation> + <source>Master</source> + <comment>StorageBusDevice</comment> + <translation>មេ</translation> </message> <message> - <source>PCnet-PCI II (Am79C970A)</source> - <comment>NetworkAdapterType</comment> - <translation>PCnet-PCI II (Am79C970A)</translation> + <source>Slave</source> + <comment>StorageBusDevice</comment> + <translation>កូនចៅ</translation> </message> <message> - <source>PCnet-FAST III (Am79C973)</source> - <comment>NetworkAdapterType</comment> - <translation>PCnet-FAST III (Am79C973)</translation> + <source>Port %1</source> + <comment>StorageBusChannel</comment> + <translation>ច្រក %1</translation> </message> <message> - <source>Intel PRO/1000 MT Desktop (82540EM)</source> - <comment>NetworkAdapterType</comment> - <translation>Intel PRO/1000 MT Desktop (82540EM)</translation> + <source>Solaris Audio</source> + <comment>AudioDriverType</comment> + <translation>អូឌីយ៉ូ Solaris</translation> </message> <message> - <source>PIIX3</source> - <comment>IDEControllerType</comment> - <translation type="obsolete">PIIX3</translation> + <source>PulseAudio</source> + <comment>AudioDriverType</comment> + <translation>PulseAudio</translation> </message> <message> - <source>PIIX4</source> - <comment>IDEControllerType</comment> - <translation type="obsolete">PIIX4</translation> + <source>ICH AC97</source> + <comment>AudioControllerType</comment> + <translation>ICH AC97</translation> </message> <message> - <source>Intel PRO/1000 T Server (82543GC)</source> - <comment>NetworkAdapterType</comment> - <translation>Intel PRO/1000 T Server (82543GC)</translation> + <source>SoundBlaster 16</source> + <comment>AudioControllerType</comment> + <translation>SoundBlaster 16</translation> </message> <message> - <source><nobr>Vendor ID: %1</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>លេខសម្គាល់អ្នកលក់ ៖ %1</nobr></translation> + <source>PCnet-PCI II (Am79C970A)</source> + <comment>NetworkAdapterType</comment> + <translation>PCnet-PCI II (Am79C970A)</translation> </message> <message> - <source><nobr>Product ID: %2</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>លេខសម្គាល់ផលិតផល ៖ %2</nobr></translation> + <source>PCnet-FAST III (Am79C973)</source> + <comment>NetworkAdapterType</comment> + <translation>PCnet-FAST III (Am79C973)</translation> </message> <message> - <source><nobr>Revision: %3</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>ការពិនិត្យឡើងវិញ ៖ %3</nobr></translation> + <source>Intel PRO/1000 MT Desktop (82540EM)</source> + <comment>NetworkAdapterType</comment> + <translation>Intel PRO/1000 MT Desktop (82540EM)</translation> </message> <message> - <source><nobr>Product: %4</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>ផលិតផល ៖ %4</nobr></translation> + <source>PIIX3</source> + <comment>IDEControllerType</comment> + <translation>PIIX3</translation> </message> <message> - <source><nobr>Manufacturer: %5</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>ក្រុមហ៊ុនផលិត ៖ %5</nobr></translation> + <source>PIIX4</source> + <comment>IDEControllerType</comment> + <translation>PIIX4</translation> </message> <message> - <source><nobr>Serial No.: %1</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>លេខស៊េរី ៖ %1</nobr></translation> + <source>Intel PRO/1000 T Server (82543GC)</source> + <comment>NetworkAdapterType</comment> + <translation>Intel PRO/1000 T Server (82543GC)</translation> </message> <message> - <source><nobr>Port: %1</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>ច្រក ៖ %1</nobr></translation> + <source><nobr>Vendor ID: %1</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>លេខសម្គាល់អ្នកលក់ ៖ %1</nobr></translation> </message> <message> - <source><nobr>State: %1</nobr></source> - <comment>USB filter tooltip</comment> - <translation><nobr>ស្ថានភាព ៖ %1</nobr></translation> + <source><nobr>Product ID: %2</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>លេខសម្គាល់ផលិតផល ៖ %2</nobr></translation> </message> <message> - <source>host interface, %1</source> - <comment>details report (network)</comment> - <translation type="obsolete">ចំណុចប្រទាក់ម៉ាស៊ីន %1</translation> + <source><nobr>Revision: %3</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>ការពិនិត្យឡើងវិញ ៖ %3</nobr></translation> </message> <message> - <source>internal network, '%1'</source> - <comment>details report (network)</comment> - <translation type="obsolete">បណ្ដាញខាងក្នុង '%1'</translation> + <source><nobr>Product: %4</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>ផលិតផល ៖ %4</nobr></translation> </message> <message> - <source>Adapter %1</source> - <comment>network</comment> - <translation>អាដាប់ទ័រ %1</translation> + <source><nobr>Manufacturer: %5</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>ក្រុមហ៊ុនផលិត ៖ %5</nobr></translation> </message> <message> - <source><br><nobr>Type&nbsp;(Format):&nbsp;&nbsp;%2&nbsp;(%3)</nobr></source> - <comment>hard disk</comment> - <translation><br><nobr>ប្រភេទ&nbsp;(ទ្រង់ទ្រាយ) ៖&nbsp;&nbsp;%2&nbsp;(%3)</nobr></translation> + <source><nobr>Serial No.: %1</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>លេខស៊េរី ៖ %1</nobr></translation> </message> <message> - <source><br><nobr>Attached to:&nbsp;&nbsp;%1</nobr></source> - <comment>medium</comment> - <translation><br><nobr>បានភ្ជាប់ទៅកាន់ ៖&nbsp;&nbsp;%1</nobr></translation> + <source><nobr>Port: %1</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>ច្រក ៖ %1</nobr></translation> </message> <message> - <source><i>Not&nbsp;Attached</i></source> - <comment>medium</comment> - <translation><i>មិនបានភ្ជាប់ទេ</i></translation> + <source><nobr>State: %1</nobr></source> + <comment>USB filter tooltip</comment> + <translation><nobr>ស្ថានភាព ៖ %1</nobr></translation> </message> <message> - <source><br><i>Checking accessibility...</i></source> - <comment>medium</comment> - <translation><br><i>កំពុងពិនិត្យមើលភាពចូលដំណើរការបាន...</i></translation> + <source>host interface, %1</source> + <comment>details report (network)</comment> + <translation>ចំណុចប្រទាក់ម៉ាស៊ីន %1</translation> </message> <message> - <source><hr>Failed to check media accessibility.<br>%1.</source> - <comment>medium</comment> - <translation><hr>បានបរាជ័យក្នុងការពិនិត្យមើលភាពអាចចូលដំណើរការបាន ។<br>%1 ។</translation> + <source>internal network, '%1'</source> + <comment>details report (network)</comment> + <translation>បណ្ដាញខាងក្នុង '%1'</translation> </message> <message> - <source><hr><img src=%1/>&nbsp;Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source> - <comment>medium</comment> - <translation><hr><img src=%1/>&nbsp;ការភ្ជាប់ថាសរឹងនេះនឹងត្រូវបានអនុវត្តដោយប្រយោលដោយប្រើថាសរឹងផ្សេងដែលបានបង្កើត ។</translation> + <source>Adapter %1</source> + <comment>network</comment> + <translation>អាដាប់ទ័រ %1</translation> </message> <message> - <source>Checking...</source> - <comment>medium</comment> - <translation>កំពុងពិនិត្យមើល...</translation> + <source><br><nobr>Type&nbsp;(Format):&nbsp;&nbsp;%2&nbsp;(%3)</nobr></source> + <comment>hard disk</comment> + <translation><br><nobr>ប្រភេទ&nbsp;(ទ្រង់ទ្រាយ) ៖&nbsp;&nbsp;%2&nbsp;(%3)</nobr></translation> </message> <message> - <source>Inaccessible</source> - <comment>medium</comment> - <translation>មិនអាចចូលដំណើរការបាន</translation> + <source><br><nobr>Attached to:&nbsp;&nbsp;%1</nobr></source> + <comment>medium</comment> + <translation><br><nobr>បានភ្ជាប់ទៅកាន់ ៖&nbsp;&nbsp;%1</nobr></translation> </message> <message> - <source><hr>Some of the media in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these media.</source> - <translation><hr>មេឌៀមួយចំនួននៅក្នុងថាសរឹងមិនអាចដំណើរការបានទេ ។ សូមប្រើកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិតនៅក្នុងរបៀប <b>បង្ហាញថាសរឹងផ្សេងៗ</b> ដើម្បីពិនិត្យមើលមេឌៀទាំងនោះ ។</translation> + <source><i>Not&nbsp;Attached</i></source> + <comment>medium</comment> + <translation><i>មិនបានភ្ជាប់ទេ</i></translation> </message> <message> - <source>%1<hr>This base hard disk is indirectly attached using the following differencing hard disk:<br>%2%3</source> - <translation>%1<hr>ថាសរឹងមូលដ្ឋាននេះត្រូវបានភ្ជាប់ដោយប្រយោល ដោយប្រើថាសរឹងផ្សេងៗដូចខាងក្រោម ៖<br>%2%3</translation> + <source><br><i>Checking accessibility...</i></source> + <comment>medium</comment> + <translation><br><i>កំពុងពិនិត្យមើលភាពចូលដំណើរការបាន...</i></translation> </message> <message> - <source>3D Acceleration</source> - <comment>details report</comment> - <translation>បង្កើនល្បឿនត្រីមាត្រ</translation> + <source><hr>Failed to check media accessibility.<br>%1.</source> + <comment>medium</comment> + <translation><hr>បានបរាជ័យក្នុងការពិនិត្យមើលភាពអាចចូលដំណើរការបាន ។<br>%1 ។</translation> </message> <message> - <source>Enabled</source> - <comment>details report (3D Acceleration)</comment> - <translation>បានបើក</translation> + <source><hr><img src=%1/>&nbsp;Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source> + <comment>medium</comment> + <translation><hr><img src=%1/>&nbsp;ការភ្ជាប់ថាសរឹងនេះនឹងត្រូវបានអនុវត្តដោយប្រយោលដោយប្រើថាសរឹងផ្សេងដែលបានបង្កើត ។</translation> </message> <message> - <source>Disabled</source> - <comment>details report (3D Acceleration)</comment> - <translation>បានបិទ</translation> + <source>Checking...</source> + <comment>medium</comment> + <translation>កំពុងពិនិត្យមើល...</translation> </message> <message> - <source>Setting Up</source> - <comment>MachineState</comment> - <translation>រៀបចំ</translation> + <source>Inaccessible</source> + <comment>medium</comment> + <translation>មិនអាចចូលដំណើរការបាន</translation> </message> <message> - <source>Differencing</source> - <comment>DiskType</comment> - <translation>ភាពខុសគ្នា</translation> + <source><hr>Some of the media in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these media.</source> + <translation><hr>មេឌៀមួយចំនួននៅក្នុងថាសរឹងមិនអាចដំណើរការបានទេ ។ សូមប្រើកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិតនៅក្នុងរបៀប <b>បង្ហាញថាសរឹងផ្សេងៗ</b> ដើម្បីពិនិត្យមើលមេឌៀទាំងនោះ ។</translation> </message> <message> - <source>Nested Paging</source> - <comment>details report</comment> - <translation type="unfinished">ភេយីងខាងក្នុង</translation> + <source>%1<hr>This base hard disk is indirectly attached using the following differencing hard disk:<br>%2%3</source> + <translation>%1<hr>ថាសរឹងមូលដ្ឋាននេះត្រូវបានភ្ជាប់ដោយប្រយោល ដោយប្រើថាសរឹងផ្សេងៗដូចខាងក្រោម ៖<br>%2%3</translation> </message> <message> - <source>Enabled</source> - <comment>details report (Nested Paging)</comment> - <translation type="unfinished">បានបើក</translation> + <source>3D Acceleration</source> + <comment>details report</comment> + <translation>បង្កើនល្បឿនត្រីមាត្រ</translation> </message> <message> - <source>Disabled</source> - <comment>details report (Nested Paging)</comment> - <translation type="unfinished"></translation> + <source>Enabled</source> + <comment>details report (3D Acceleration)</comment> + <translation>បានបើក</translation> </message> <message> - <source>Bridged adapter, %1</source> - <comment>details report (network)</comment> - <translation type="unfinished"></translation> + <source>Disabled</source> + <comment>details report (3D Acceleration)</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Internal network, '%1'</source> - <comment>details report (network)</comment> - <translation type="unfinished"></translation> + <source>Setting Up</source> + <comment>MachineState</comment> + <translation>រៀបចំ</translation> </message> <message> - <source>Host-only adapter, '%1'</source> - <comment>details report (network)</comment> - <translation type="unfinished"></translation> + <source>Differencing</source> + <comment>DiskType</comment> + <translation>ភាពខុសគ្នា</translation> </message> - <message> - <source>SCSI</source> - <comment>StorageBus</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Intel PRO/1000 MT Server (82545EM)</source> - <comment>NetworkAdapterType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Bridged Adapter</source> - <comment>NetworkAttachmentType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Host-only Adapter</source> - <comment>NetworkAttachmentType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>PIIX3</source> - <comment>StorageControllerType</comment> - <translation type="unfinished">PIIX3</translation> - </message> - <message> - <source>PIIX4</source> - <comment>StorageControllerType</comment> - <translation type="unfinished">PIIX4</translation> - </message> - <message> - <source>ICH6</source> - <comment>StorageControllerType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>AHCI</source> - <comment>StorageControllerType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Lsilogic</source> - <comment>StorageControllerType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>BusLogic</source> - <comment>StorageControllerType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source><nobr>%1 MB</nobr></source> - <comment>details report</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Processor(s)</source> - <comment>details report</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source><nobr>%1</nobr></source> - <comment>details report</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>System</source> - <comment>details report</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Remote Display Server Port</source> - <comment>details report (VRDP Server)</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Remote Display Server</source> - <comment>details report (VRDP Server)</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Disabled</source> - <comment>details report (VRDP Server)</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Display</source> - <comment>details report</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Raw File</source> - <comment>PortMode</comment> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxGlobalSettings</name> <message> - <source>'%1 (0x%2)' is an invalid host key code.</source> - <translation>'%1 (0x%2)' គឺជាកូដគ្រាប់ចុចម៉ាស៊ីនមិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>The value '%1' of the key '%2' doesn't match the regexp constraint '%3'.</source> - <translation>តម្លៃ '%1' នៃសោ '%2' មិនផ្គូផ្គងកម្រិត regexp '%3' ។</translation> - </message> - <message> - <source>Cannot delete the key '%1'.</source> - <translation>មិនអាចលុបគ្រាប់ចុច '%1' បានទេ ។</translation> - </message> -</context> -<context> - <name>VBoxImportApplianceWgt</name> - <message> - <source>Importing Appliance ...</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>VBoxImportApplianceWzd</name> - <message> - <source>Select an appliance to import</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Open Virtualization Format (%1)</source> - <translation type="unfinished"></translation> + <source>'%1 (0x%2)' is an invalid host key code.</source> + <translation>'%1 (0x%2)' គឺជាកូដគ្រាប់ចុចម៉ាស៊ីនមិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>Appliance Import Wizard</source> - <translation type="unfinished"></translation> + <source>The value '%1' of the key '%2' doesn't match the regexp constraint '%3'.</source> + <translation>តម្លៃ '%1' នៃសោ '%2' មិនផ្គូផ្គងកម្រិត regexp '%3' ។</translation> </message> <message> - <source>Welcome to the Appliance Import Wizard!</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This wizard will guide you through importing an appliance. </p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Use the <span style=" font-weight:600;">Next</span> button to go the next page of the wizard and the <span style=" font-weight:600;">Back</span> button to return to the previous page.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In order to import an appliance, you have to select a file describing the appliance first. Currently VirtualBox supports the Open Virtualization Format (OVF). To continue, select the file to import below:</p></body></html></source> - <translation type="unfinished"></translation> + <source>Cannot delete the key '%1'.</source> + <translation>មិនអាចលុបគ្រាប់ចុច '%1' បានទេ ។</translation> </message> - <message> - <source>< &Back</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Next ></source> - <translation type="unfinished">បន្ទាប់ ></translation> - </message> - <message> - <source>Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Appliance Import Settings</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>These are the virtual machines as described in the appliance with their suggested mappings for importing into VirtualBox. You can change many of the shown properties by double-clicking on the items and disable others by using the check boxes below.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Restore Defaults</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Import ></source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>VBoxImportLicenseViewer</name> - <message> - <source><b>The virtual system "%1" requires that you agree to the terms and conditions of the software license agreement shown below.</b><br /><br />Click <b>Agree</b> to continue or click <b>Disagree</b> to cancel the import.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Software License Agreement</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Disagree</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Agree</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Print...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Save...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Text (*.txt)</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Save license to file...</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxLicenseViewer</name> <message> - <source>VirtualBox License</source> - <translation>អាជ្ញាបណ្ណ VirtualBox</translation> + <source>VirtualBox License</source> + <translation>អាជ្ញាបណ្ណ VirtualBox</translation> </message> <message> - <source>I &Agree</source> - <translation>ខ្ញុំយល់ព្រម</translation> + <source>I &Agree</source> + <translation>ខ្ញុំយល់ព្រម</translation> </message> <message> - <source>I &Disagree</source> - <translation>ខ្ញុំមិនយល់ព្រមទេ</translation> + <source>I &Disagree</source> + <translation>ខ្ញុំមិនយល់ព្រមទេ</translation> </message> -</context> -<context> - <name>VBoxLineTextEdit</name> - <message> - <source>&Edit</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxLogSearchPanel</name> <message> - <source>Close the search panel</source> - <translation>បិទបន្ទះស្វែងរក</translation> + <source>Close the search panel</source> + <translation>បិទបន្ទះស្វែងរក</translation> </message> <message> - <source>Find </source> - <translation>រក</translation> + <source>Find </source> + <translation>រក</translation> </message> <message> - <source>Enter a search string here</source> - <translation>បញ្ចូលខ្សែអក្សរស្វែងរកនៅទីនេះ</translation> + <source>Enter a search string here</source> + <translation>បញ្ចូលខ្សែអក្សរស្វែងរកនៅទីនេះ</translation> </message> <message> - <source>&Previous</source> - <translation>មុន</translation> + <source>&Previous</source> + <translation>មុន</translation> </message> <message> - <source>Search for the previous occurrence of the string</source> - <translation>ស្វែងរកការកើតឡើងមុនរបស់ខ្សែអក្សរ</translation> + <source>Search for the previous occurrence of the string</source> + <translation>ស្វែងរកការកើតឡើងមុនរបស់ខ្សែអក្សរ</translation> </message> <message> - <source>&Next</source> - <translation>បន្ទាប់</translation> + <source>&Next</source> + <translation>បន្ទាប់</translation> </message> <message> - <source>Search for the next occurrence of the string</source> - <translation>ស្វែងរកការកើតឡើងបន្ទាប់របស់ខ្សែអក្សរ</translation> + <source>Search for the next occurrence of the string</source> + <translation>ស្វែងរកការកើតឡើងបន្ទាប់របស់ខ្សែអក្សរ</translation> </message> <message> - <source>C&ase Sensitive</source> - <translation>ប្រកាន់អក្សរតូចធំ</translation> + <source>C&ase Sensitive</source> + <translation>ប្រកាន់អក្សរតូចធំ</translation> </message> <message> - <source>Perform case sensitive search (when checked)</source> - <translation>អនុវត្តការស្វែងរកប្រកាន់អក្សរតូចធំ (នៅពេលគូសធីក)</translation> + <source>Perform case sensitive search (when checked)</source> + <translation>អនុវត្តការស្វែងរកប្រកាន់អក្សរតូចធំ (នៅពេលគូសធីក)</translation> </message> <message> - <source>String not found</source> - <translation>រកមិនឃើញខ្សែអក្សរ</translation> + <source>String not found</source> + <translation>រកមិនឃើញខ្សែអក្សរ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxMediaComboBox</name> <message> - <source>No media available. Use the Virtual Media Manager to add media of the corresponding type.</source> - <translation>រកមិនឃើញមេឌៀ ។ ប្រើកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ដើម្បីបន្ថែមមេឌៀប្រភេទដែលទាក់ទង ។</translation> + <source>No media available. Use the Virtual Media Manager to add media of the corresponding type.</source> + <translation>រកមិនឃើញមេឌៀ ។ ប្រើកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ដើម្បីបន្ថែមមេឌៀប្រភេទដែលទាក់ទង ។</translation> </message> <message> - <source><no media></source> - <translation><គ្មានមេឌៀ></translation> + <source><no media></source> + <translation><គ្មានមេឌៀ></translation> </message> -</context> -<context> + </context> + <context> <name>VBoxMediaManagerDlg</name> <message> - <source>&Actions</source> - <translation>សកម្មភាព</translation> + <source>&Actions</source> + <translation>សកម្មភាព</translation> </message> <message> - <source>&New...</source> - <translation>ថ្មី...</translation> + <source>&New...</source> + <translation>ថ្មី...</translation> </message> <message> - <source>&Add...</source> - <translation>បន្ថែម...</translation> + <source>&Add...</source> + <translation>បន្ថែម...</translation> </message> <message> - <source>R&emove</source> - <translation>យកចេញ</translation> + <source>R&emove</source> + <translation>យកចេញ</translation> </message> <message> - <source>Re&lease</source> - <translation>ចេញផ្សាយ</translation> + <source>Re&lease</source> + <translation>ចេញផ្សាយ</translation> </message> <message> - <source>Re&fresh</source> - <translation>ធ្វើឲ្យស្រស់</translation> + <source>Re&fresh</source> + <translation>ធ្វើឲ្យស្រស់</translation> </message> <message> - <source>Create a new virtual hard disk</source> - <translation>បង្កើតថាសរឹងនិម្មិតថ្មី</translation> + <source>Create a new virtual hard disk</source> + <translation>បង្កើតថាសរឹងនិម្មិតថ្មី</translation> </message> <message> - <source>Add an existing medium</source> - <translation>បន្ថែមឧបករណ៍ដែលមានស្រាប់</translation> + <source>Add an existing medium</source> + <translation>បន្ថែមឧបករណ៍ដែលមានស្រាប់</translation> </message> <message> - <source>Remove the selected medium</source> - <translation>យកឧបករណ៍ផ្ទុកដែលបានជ្រើស</translation> + <source>Remove the selected medium</source> + <translation>យកឧបករណ៍ផ្ទុកដែលបានជ្រើស</translation> </message> <message> - <source>Release the selected medium by detaching it from the machines</source> - <translation>ចេញផ្សាយឧបករណ៍ផ្ទុកដែលបានជ្រើស ដោយផ្ដាច់វាពីម៉ាស៊ីន</translation> + <source>Release the selected medium by detaching it from the machines</source> + <translation>ចេញផ្សាយឧបករណ៍ផ្ទុកដែលបានជ្រើស ដោយផ្ដាច់វាពីម៉ាស៊ីន</translation> </message> <message> - <source>Refresh the media list</source> - <translation>ធ្វើឲ្យបញ្ជីមេឌៀស្រស់</translation> + <source>Refresh the media list</source> + <translation>ធ្វើឲ្យបញ្ជីមេឌៀស្រស់</translation> </message> <message> - <source>Location</source> - <translation>ទីតាំង</translation> + <source>Location</source> + <translation>ទីតាំង</translation> </message> <message> - <source>Type (Format)</source> - <translation>ប្រភេទ (ទ្រង់ទ្រាយ)</translation> + <source>Type (Format)</source> + <translation>ប្រភេទ (ទ្រង់ទ្រាយ)</translation> </message> <message> - <source>Attached to</source> - <translation>បានភ្ជាប់ទៅកាន់</translation> + <source>Attached to</source> + <translation>បានភ្ជាប់ទៅកាន់</translation> </message> <message> - <source>Checking accessibility</source> - <translation>ពិនិត្យមើលភាពអាចដំណើរការបានទេ</translation> + <source>Checking accessibility</source> + <translation>ពិនិត្យមើលភាពអាចដំណើរការបានទេ</translation> </message> <message> - <source>&Select</source> - <translation>ជ្រើស</translation> + <source>&Select</source> + <translation>ជ្រើស</translation> </message> <message> - <source>All hard disk images (%1)</source> - <translation>រូបភាពថាសរឹងទាំងអស់ (%1)</translation> + <source>All hard disk images (%1)</source> + <translation>រូបភាពថាសរឹងទាំងអស់ (%1)</translation> </message> <message> - <source>All files (*)</source> - <translation>ឯកសារទាំងអស់ (*)</translation> + <source>All files (*)</source> + <translation>ឯកសារទាំងអស់ (*)</translation> </message> <message> - <source>Select a hard disk image file</source> - <translation>ជ្រើសឯកសាររូបភាពថាសរឹង</translation> + <source>Select a hard disk image file</source> + <translation>ជ្រើសឯកសាររូបភាពថាសរឹង</translation> </message> <message> - <source>CD/DVD-ROM images (*.iso);;All files (*)</source> - <translation>រូបភាពស៊ីឌី/ឌីវីឌីរ៉ូម (*.iso);; ឯកសារទាំងអស់ (*)</translation> + <source>CD/DVD-ROM images (*.iso);;All files (*)</source> + <translation>រូបភាពស៊ីឌី/ឌីវីឌីរ៉ូម (*.iso);; ឯកសារទាំងអស់ (*)</translation> </message> <message> - <source>Select a CD/DVD-ROM disk image file</source> - <translation>ជ្រើសឯកសាររូបភាពថាសស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>Select a CD/DVD-ROM disk image file</source> + <translation>ជ្រើសឯកសាររូបភាពថាសស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>Floppy images (*.img);;All files (*)</source> - <translation>រូបភាពថាសទន់ (*.img);; ឯកសារទាំងអស់ (*)</translation> + <source>Floppy images (*.img);;All files (*)</source> + <translation>រូបភាពថាសទន់ (*.img);; ឯកសារទាំងអស់ (*)</translation> </message> <message> - <source>Select a floppy disk image file</source> - <translation>ជ្រើសឯកសាររូបភាពថាសទន់</translation> + <source>Select a floppy disk image file</source> + <translation>ជ្រើសឯកសាររូបភាពថាសទន់</translation> </message> <message> - <source><i>Not&nbsp;Attached</i></source> - <translation><i>មិនបានភ្ជាប់</i></translation> + <source><i>Not&nbsp;Attached</i></source> + <translation><i>មិនបានភ្ជាប់</i></translation> </message> <message> - <source>--</source> - <comment>no info</comment> - <translation>--</translation> + <source>--</source> + <comment>no info</comment> + <translation>--</translation> </message> <message> - <source>Virtual Media Manager</source> - <translation>កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត</translation> + <source>Virtual Media Manager</source> + <translation>កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត</translation> </message> <message> - <source>Hard &Disks</source> - <translation>ថាសរឹង</translation> + <source>Hard &Disks</source> + <translation>ថាសរឹង</translation> </message> <message> - <source>Name</source> - <translation>ឈ្មោះ</translation> + <source>Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Virtual Size</source> - <translation>ទំហំនិម្មិត</translation> + <source>Virtual Size</source> + <translation>ទំហំនិម្មិត</translation> </message> <message> - <source>Actual Size</source> - <translation>ទំហំពិតប្រាកដ</translation> + <source>Actual Size</source> + <translation>ទំហំពិតប្រាកដ</translation> </message> <message> - <source>&CD/DVD Images</source> - <translation>រូបភាពស៊ីឌី/ឌីវីឌី</translation> + <source>&CD/DVD Images</source> + <translation>រូបភាពស៊ីឌី/ឌីវីឌី</translation> </message> <message> - <source>Size</source> - <translation>ទំហំ</translation> + <source>Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>&Floppy Images</source> - <translation>រូបភាពថាសទន់</translation> + <source>&Floppy Images</source> + <translation>រូបភាពថាសទន់</translation> </message> -</context> -<context> - <name>VBoxMiniToolBar</name> - <message> - <source>Always show the toolbar</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Exit Full Screen or Seamless Mode</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Close VM</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxNIList</name> <message> - <source>VirtualBox Host Interface %1</source> - <translation type="obsolete">ចំណុចប្រទាក់ម៉ាស៊ីន VirtualBox %1</translation> + <source>VirtualBox Host Interface %1</source> + <translation>ចំណុចប្រទាក់ម៉ាស៊ីន VirtualBox %1</translation> </message> <message> - <source><p>Do you want to remove the selected host network interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> This interface may be in use by one or more network adapters of this or another VM. After it is removed, these adapters will no longer work until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation type="obsolete"><p>តើអ្នកចង់យកចំណុចប្រទាក់បណ្ដាញម៉ាស៊ីនដែលបានជ្រើសចេញពី <nobr><b>%1</b>ឬ?</nobr></p><p><b>ចំណាំ ៖</b> ចំណុចប្រទាក់នេះអាចកំពុងប្រើដោយអាដាប់ទ័របណ្ដាញមួយ ឬច្រើន VM នេះ ឬផ្សេងទៀត ។ បន្ទាប់ពីបានយកចេញហើយ អាដាប់ទ័រទាំងនេះនឹងមិនដំណើរការទៀតទេរហូតដល់អ្នកកែការកំណត់របស់ពួកវាដោយជ្រើសឈ្មោះចំណុចប្រទាក់ផ្សេង ឬប្រភេទភ្ជាប់អាដាប់ទ័រផ្សេង ។</p></translation> + <source><p>Do you want to remove the selected host network interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> This interface may be in use by one or more network adapters of this or another VM. After it is removed, these adapters will no longer work until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> + <translation><p>តើអ្នកចង់យកចំណុចប្រទាក់បណ្ដាញម៉ាស៊ីនដែលបានជ្រើសចេញពី <nobr><b>%1</b>ឬ?</nobr></p><p><b>ចំណាំ ៖</b> ចំណុចប្រទាក់នេះអាចកំពុងប្រើដោយអាដាប់ទ័របណ្ដាញមួយ ឬច្រើន VM នេះ ឬផ្សេងទៀត ។ បន្ទាប់ពីបានយកចេញហើយ អាដាប់ទ័រទាំងនេះនឹងមិនដំណើរការទៀតទេរហូតដល់អ្នកកែការកំណត់របស់ពួកវាដោយជ្រើសឈ្មោះចំណុចប្រទាក់ផ្សេង ឬប្រភេទភ្ជាប់អាដាប់ទ័រផ្សេង ។</p></translation> </message> <message> - <source>Host &Interfaces</source> - <translation type="obsolete">ចំណុចប្រទាក់ម៉ាស៊ីន</translation> + <source>Host &Interfaces</source> + <translation>ចំណុចប្រទាក់ម៉ាស៊ីន</translation> </message> <message> - <source>Lists all available host interfaces.</source> - <translation type="obsolete">រាយចំណុចប្រទាក់ម៉ាស៊ីនដែលអាចប្រើបានទាំងអស់ ។</translation> + <source>Lists all available host interfaces.</source> + <translation>រាយចំណុចប្រទាក់ម៉ាស៊ីនដែលអាចប្រើបានទាំងអស់ ។</translation> </message> <message> - <source>A&dd New Host Interface</source> - <translation type="obsolete">បន្ថែមចំណុចប្រទាក់ម៉ាស៊ីនថ្មី</translation> + <source>A&dd New Host Interface</source> + <translation>បន្ថែមចំណុចប្រទាក់ម៉ាស៊ីនថ្មី</translation> </message> <message> - <source>&Remove Selected Host Interface</source> - <translation type="obsolete">យកចំណុចប្រទាក់ម៉ាស៊ីនដែលបានជ្រើស</translation> + <source>&Remove Selected Host Interface</source> + <translation>យកចំណុចប្រទាក់ម៉ាស៊ីនដែលបានជ្រើស</translation> </message> <message> - <source>Adds a new host interface.</source> - <translation type="obsolete">បន្ថែមចំណុចប្រទាក់ម៉ាស៊ីនថ្មី ។</translation> + <source>Adds a new host interface.</source> + <translation>បន្ថែមចំណុចប្រទាក់ម៉ាស៊ីនថ្មី ។</translation> </message> <message> - <source>Removes the selected host interface.</source> - <translation type="obsolete">យកចំណុចប្រទាក់ម៉ាស៊ីនដែលបានជ្រើស ។</translation> + <source>Removes the selected host interface.</source> + <translation>យកចំណុចប្រទាក់ម៉ាស៊ីនដែលបានជ្រើស ។</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxNewHDWzd</name> <message> - <source>Create New Virtual Disk</source> - <translation>បង្កើតថាសនិម្មិតថ្មី</translation> + <source>Create New Virtual Disk</source> + <translation>បង្កើតថាសនិម្មិតថ្មី</translation> </message> <message> - <source>Welcome to the Create New Virtual Disk Wizard!</source> - <translation>សូមស្វាគមន៍មកកាន់អ្នកជំនួយការបង្កើតថាសនិម្មិតថ្មី !</translation> + <source>Welcome to the Create New Virtual Disk Wizard!</source> + <translation>សូមស្វាគមន៍មកកាន់អ្នកជំនួយការបង្កើតថាសនិម្មិតថ្មី !</translation> </message> <message> - <source>Virtual Disk Location and Size</source> - <translation>ទីតាំង និងទំហំថាសនិម្មិត</translation> + <source>Virtual Disk Location and Size</source> + <translation>ទីតាំង និងទំហំថាសនិម្មិត</translation> </message> <message> - <source>Summary</source> - <translation>សេចក្ដីសង្ខេប</translation> + <source>Summary</source> + <translation>សេចក្ដីសង្ខេប</translation> </message> <message> - <source><nobr>%1 Bytes</nobr></source> - <translation><nobr>%1 បៃ</nobr></translation> + <source><nobr>%1 Bytes</nobr></source> + <translation><nobr>%1 បៃ</nobr></translation> </message> <message> - <source>Hard disk images (*.vdi)</source> - <translation>រូបភាពថាសរឹង (*.vdi)</translation> + <source>Hard disk images (*.vdi)</source> + <translation>រូបភាពថាសរឹង (*.vdi)</translation> </message> <message> - <source>Select a file for the new hard disk image file</source> - <translation>ជ្រើសឯកសារសម្រាប់ឯកសាររូបភាពថាសរឹង</translation> + <source>Select a file for the new hard disk image file</source> + <translation>ជ្រើសឯកសារសម្រាប់ឯកសាររូបភាពថាសរឹង</translation> </message> <message> - <source>< &Back</source> - <translation>< ថយក្រោយ</translation> + <source>< &Back</source> + <translation>< ថយក្រោយ</translation> </message> <message> - <source>&Next ></source> - <translation>បន្ទាប់ ></translation> + <source>&Next ></source> + <translation>បន្ទាប់ ></translation> </message> <message> - <source>&Finish</source> - <translation>បញ្ចប់</translation> + <source>&Finish</source> + <translation>បញ្ចប់</translation> </message> <message> - <source>Type</source> - <comment>summary</comment> - <translation>ប្រភេទ</translation> + <source>Type</source> + <comment>summary</comment> + <translation>ប្រភេទ</translation> </message> <message> - <source>Location</source> - <comment>summary</comment> - <translation>ទីតាំង</translation> + <source>Location</source> + <comment>summary</comment> + <translation>ទីតាំង</translation> </message> <message> - <source>Size</source> - <comment>summary</comment> - <translation>ទំហំ</translation> + <source>Size</source> + <comment>summary</comment> + <translation>ទំហំ</translation> </message> <message> - <source>Bytes</source> - <comment>summary</comment> - <translation>បៃ</translation> + <source>Bytes</source> + <comment>summary</comment> + <translation>បៃ</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source><p>This wizard will help you to create a new virtual hard disk for your virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> - <translation><p>អ្នកជំនួយការនេះជួយអ្នកក្នុងការបង្កើតថាសរឹងនិម្មិតសម្រាប់ម៉ាស៊ីននិម្មិតរបស់អ្នក ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅកាន់ទំព័របន្ទាប់របស់អ្នកជំនួយការ ប៊ូតុង<b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។</p></translation> + <source><p>This wizard will help you to create a new virtual hard disk for your virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> + <translation><p>អ្នកជំនួយការនេះជួយអ្នកក្នុងការបង្កើតថាសរឹងនិម្មិតសម្រាប់ម៉ាស៊ីននិម្មិតរបស់អ្នក ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅកាន់ទំព័របន្ទាប់របស់អ្នកជំនួយការ ប៊ូតុង<b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។</p></translation> </message> <message> - <source>Hard Disk Storage Type</source> - <translation>ប្រភេទផ្ទុករបស់ថាសរឹង</translation> + <source>Hard Disk Storage Type</source> + <translation>ប្រភេទផ្ទុករបស់ថាសរឹង</translation> </message> <message> - <source><p>Select the type of virtual hard disk you want to create.</p><p>A <b>dynamically expanding storage</b> initially occupies a very small amount of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p><p>A <b>fixed-size storage</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk. The creation of a fixed-size storage may take a long time depending on the storage size and the write performance of your harddisk.</p></source> - <translation><p>ជ្រើសប្រភេទថាសរឹងនិម្មិតដែលអ្នកចង់បង្កើត ។</p><p> <b>ការផ្ទុកពង្រីកជាថាមវន្ត</b> ដំបូងគ្រប់គ្រងរាល់ទំហំតូចៗរបស់ចន្លោះនៅក្នុងថាសរឹងហ្វីស៊ីខលរបស់អ្នក ។ វានឹងពង្រីកដោយថាមវន្ត (ដល់ទំហំដែលបានបញ្ជាក់) ជាការអះអាងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</p><p> <b>ការផ្ទុកទំហំថេរ</b> មិនរីកចំរើនទេ ។ វាត្រូវបានផ្ទុកនៅក្នុងឯកសាររបស់ទំហំប្រហែល ជាទំហំរបស់ថាសរឹងនិម្មិត ។ ការបង្កើតការផ្ទុកទំហំថេរ អាចចំណាយពេលយូរ ដោយអាស្រ័យលើទំហំផ្ទុក និងសរសេរការអនុវត្តនៃថាសរឹងរបស់អ្នក ។</p></translation> + <source><p>Select the type of virtual hard disk you want to create.</p><p>A <b>dynamically expanding storage</b> initially occupies a very small amount of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p><p>A <b>fixed-size storage</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk. The creation of a fixed-size storage may take a long time depending on the storage size and the write performance of your harddisk.</p></source> + <translation><p>ជ្រើសប្រភេទថាសរឹងនិម្មិតដែលអ្នកចង់បង្កើត ។</p><p> <b>ការផ្ទុកពង្រីកជាថាមវន្ត</b> ដំបូងគ្រប់គ្រងរាល់ទំហំតូចៗរបស់ចន្លោះនៅក្នុងថាសរឹងហ្វីស៊ីខលរបស់អ្នក ។ វានឹងពង្រីកដោយថាមវន្ត (ដល់ទំហំដែលបានបញ្ជាក់) ជាការអះអាងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</p><p> <b>ការផ្ទុកទំហំថេរ</b> មិនរីកចំរើនទេ ។ វាត្រូវបានផ្ទុកនៅក្នុងឯកសាររបស់ទំហំប្រហែល ជាទំហំរបស់ថាសរឹងនិម្មិត ។ ការបង្កើតការផ្ទុកទំហំថេរ អាចចំណាយពេលយូរ ដោយអាស្រ័យលើទំហំផ្ទុក និងសរសេរការអនុវត្តនៃថាសរឹងរបស់អ្នក ។</p></translation> </message> <message> - <source>Storage Type</source> - <translation>ប្រភេទផ្ទុក</translation> + <source>Storage Type</source> + <translation>ប្រភេទផ្ទុក</translation> </message> <message> - <source>&Dynamically expanding storage</source> - <translation>ពង្រីកការផ្ទុកថាមវន្ត</translation> + <source>&Dynamically expanding storage</source> + <translation>ពង្រីកការផ្ទុកថាមវន្ត</translation> </message> <message> - <source>&Fixed-size storage</source> - <translation>ការផ្ទុកទំហំថេរ</translation> + <source>&Fixed-size storage</source> + <translation>ការផ្ទុកទំហំថេរ</translation> </message> <message> - <source><p>Press the <b>Select</b> button to select the location of a file to store the hard disk data or type a file name in the entry field.</p></source> - <translation><p>ចុចប៊ូតុង <b>ជ្រើស</b> ដើម្បីជ្រើសទីតាំងរបស់ឯកសារដើម្បីផ្ទុកថាសរឹង ឬប្រភេទឈ្មោះឯកសារនៅក្នុងវាលធាតុ ។</p></translation> + <source><p>Press the <b>Select</b> button to select the location of a file to store the hard disk data or type a file name in the entry field.</p></source> + <translation><p>ចុចប៊ូតុង <b>ជ្រើស</b> ដើម្បីជ្រើសទីតាំងរបស់ឯកសារដើម្បីផ្ទុកថាសរឹង ឬប្រភេទឈ្មោះឯកសារនៅក្នុងវាលធាតុ ។</p></translation> </message> <message> - <source>&Location</source> - <translation>ទីតាំង</translation> + <source>&Location</source> + <translation>ទីតាំង</translation> </message> <message> - <source><p>Select the size of the virtual hard disk in megabytes. This size will be reported to the Guest OS as the maximum size of this hard disk.</p></source> - <translation><p>ជ្រើសទំហំថាសរឹងនិម្មិតគិតជាមេកាបៃ ។ ទំហំនេះនឹងត្រូវបានរាយការណ៍ទៅកាន់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវតាមទំហំអតិបរមារបស់ថាសរឹងនេះ ។</p></translation> + <source><p>Select the size of the virtual hard disk in megabytes. This size will be reported to the Guest OS as the maximum size of this hard disk.</p></source> + <translation><p>ជ្រើសទំហំថាសរឹងនិម្មិតគិតជាមេកាបៃ ។ ទំហំនេះនឹងត្រូវបានរាយការណ៍ទៅកាន់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវតាមទំហំអតិបរមារបស់ថាសរឹងនេះ ។</p></translation> </message> <message> - <source>&Size</source> - <translation>ទំហំ</translation> + <source>&Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>You are going to create a new virtual hard disk with the following parameters:</source> - <translation>អ្នកនឹងបង្កើតថាសរឹងនិម្មិតថ្មីដោយមានប៉ារ៉ាម៉ែត្រដូចខាងក្រោម ៖</translation> + <source>You are going to create a new virtual hard disk with the following parameters:</source> + <translation>អ្នកនឹងបង្កើតថាសរឹងនិម្មិតថ្មីដោយមានប៉ារ៉ាម៉ែត្រដូចខាងក្រោម ៖</translation> </message> <message> - <source>If the above settings are correct, press the <b>Finish</b> button. Once you press it, a new hard disk will be created.</source> - <translation>ប្រសិនបើការកំណត់ខាងលើត្រឹមត្រូវ ចុចប៊ូតុង <b>បញ្ចប់</b> ។ នៅពេលអ្នកចុចវា ថាសរឹងថ្មីនឹងត្រូវបានបង្កើតឡើង ។</translation> + <source>If the above settings are correct, press the <b>Finish</b> button. Once you press it, a new hard disk will be created.</source> + <translation>ប្រសិនបើការកំណត់ខាងលើត្រឹមត្រូវ ចុចប៊ូតុង <b>បញ្ចប់</b> ។ នៅពេលអ្នកចុចវា ថាសរឹងថ្មីនឹងត្រូវបានបង្កើតឡើង ។</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxNewVMWzd</name> <message> - <source>Create New Virtual Machine</source> - <translation>បង្កើតម៉ាស៊ីននិម្មិតថ្មី</translation> - </message> - <message> - <source>Welcome to the New Virtual Machine Wizard!</source> - <translation>សូមស្វាគមន៍មកកាន់អ្នកជំនួយការម៉ាស៊ីននិម្មិតថ្មី !</translation> + <source>Create New Virtual Machine</source> + <translation>បង្កើតម៉ាស៊ីននិម្មិតថ្មី</translation> </message> <message> - <source>N&ame</source> - <translation>ឈ្មោះ</translation> + <source>Welcome to the New Virtual Machine Wizard!</source> + <translation>សូមស្វាគមន៍មកកាន់អ្នកជំនួយការម៉ាស៊ីននិម្មិតថ្មី !</translation> </message> <message> - <source>OS &Type</source> - <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> + <source>N&ame</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>VM Name and OS Type</source> - <translation>ឈ្មោះរបស់ VM និងប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> + <source>OS &Type</source> + <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> </message> <message> - <source><p>Select the amount of base memory (RAM) in megabytes to be allocated to the virtual machine.</p></source> - <translation><p>ជ្រើសចំនួនសតិ (RAM) មូលដ្ឋានគិតជាមេកាបៃ ដែលត្រូវបម្រុងទុកសម្រាប់ម៉ាស៊ីននិម្មិត ។</p></translation> + <source>VM Name and OS Type</source> + <translation>ឈ្មោះរបស់ VM និងប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> </message> <message> - <source>Base &Memory Size</source> - <translation>ទំហំសតិមូលដ្ឋាន</translation> + <source><p>Select the amount of base memory (RAM) in megabytes to be allocated to the virtual machine.</p></source> + <translation><p>ជ្រើសចំនួនសតិ (RAM) មូលដ្ឋានគិតជាមេកាបៃ ដែលត្រូវបម្រុងទុកសម្រាប់ម៉ាស៊ីននិម្មិត ។</p></translation> </message> <message> - <source>MB</source> - <translation>មេកាបៃ</translation> + <source>Base &Memory Size</source> + <translation>ទំហំសតិមូលដ្ឋាន</translation> </message> <message> - <source>Memory</source> - <translation>សតិ</translation> + <source>MB</source> + <translation>មេកាបៃ</translation> </message> <message> - <source>N&ew...</source> - <translation type="obsolete">ថ្មី...</translation> + <source>Memory</source> + <translation>សតិ</translation> </message> <message> - <source>E&xisting...</source> - <translation type="obsolete">មានស្រាប់...</translation> + <source>N&ew...</source> + <translation>ថ្មី...</translation> </message> <message> - <source>Virtual Hard Disk</source> - <translation>ថាសរឹងនិម្មិត</translation> + <source>E&xisting...</source> + <translation>មានស្រាប់...</translation> </message> <message> - <source>Summary</source> - <translation>សេចក្ដីសង្ខេប</translation> + <source>Virtual Hard Disk</source> + <translation>ថាសរឹងនិម្មិត</translation> </message> <message> - <source>The recommended base memory size is <b>%1</b> MB.</source> - <translation>ទំហំសតិមូលដ្ឋានដែលបានផ្ដល់អនុសាសន៍គឺ <b>%1</b> មេកាបៃ ។</translation> + <source>Summary</source> + <translation>សេចក្ដីសង្ខេប</translation> </message> <message> - <source>The recommended size of the boot hard disk is <b>%1</b> MB.</source> - <translation>ទំហំដែលបានផ្ដល់អនុសាសន៍របស់ថាសរឹងចាប់ផ្ដើមគឺ <b>%1</b> មេកាបៃ ។</translation> + <source>The recommended base memory size is <b>%1</b> MB.</source> + <translation>ទំហំសតិមូលដ្ឋានដែលបានផ្ដល់អនុសាសន៍គឺ <b>%1</b> មេកាបៃ ។</translation> </message> <message> - <source><p>This wizard will guide you through the steps that are necessary to create a new virtual machine for VirtualBox.</p><p>Use the <b>Next</b> button to go the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> - <translation><p>អ្នកជំនួយការនេះនឹងនាំអ្នកតាមជំហានដែលចាំបាច់ដើម្បីបង្កើតម៉ាស៊ីននិម្មិតថ្មីសម្រាប់ VirtualBox ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅកាន់ទំព័របន្ទាប់របស់អ្នកជំនួយការ ហើយប៊ូតុង <b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។</p></translation> + <source>The recommended size of the boot hard disk is <b>%1</b> MB.</source> + <translation>ទំហំដែលបានផ្ដល់អនុសាសន៍របស់ថាសរឹងចាប់ផ្ដើមគឺ <b>%1</b> មេកាបៃ ។</translation> </message> <message> - <source>< &Back</source> - <translation><ថយក្រោយ</translation> + <source><p>This wizard will guide you through the steps that are necessary to create a new virtual machine for VirtualBox.</p><p>Use the <b>Next</b> button to go the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> + <translation><p>អ្នកជំនួយការនេះនឹងនាំអ្នកតាមជំហានដែលចាំបាច់ដើម្បីបង្កើតម៉ាស៊ីននិម្មិតថ្មីសម្រាប់ VirtualBox ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅកាន់ទំព័របន្ទាប់របស់អ្នកជំនួយការ ហើយប៊ូតុង <b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។</p></translation> </message> <message> - <source>&Next ></source> - <translation>បន្ទាប់ ></translation> + <source>< &Back</source> + <translation><ថយក្រោយ</translation> </message> <message> - <source><p>Enter a name for the new virtual machine and select the type of the guest operating system you plan to install onto the virtual machine.</p><p>The name of the virtual machine usually indicates its software and hardware configuration. It will be used by all VirtualBox components to identify your virtual machine.</p></source> - <translation><p>បញ្ចូលឈ្មោះឲ្យម៉ាស៊ីននិម្មតិថ្មី ហើយជ្រើសប្រភេទប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ ដែលអ្នកចង់ដំឡើងក្នុងម៉ាស៊ីននិម្មិត ។ </p><p>ឈ្មោះរបស់ម៉ាស៊ីននិម្មិតតាមធម្មតាបង្ហាញការកំណត់រចនាសម្ព័ន្ធផ្នែករឹង និងផ្នែកទន់របស់វា ។ វានឹងត្រូវបានប្រើដោយសមាសធាតុ VirtualBox ដើម្បីបញ្ជាក់អត្តសញ្ញាណម៉ាស៊ីននិម្មិតរបស់អ្នក ។</p></translation> + <source>&Next ></source> + <translation>បន្ទាប់ ></translation> </message> <message> - <source><p>You are going to create a new virtual machine with the following parameters:</p></source> - <translation><p>អ្នករៀបនឹងបង្កើតម៉ាស៊ីននិម្មិតថ្មីដែលមានប៉ារ៉ាម៉ែត្រដូចខាងក្រោម ៖</p></translation> + <source><p>Enter a name for the new virtual machine and select the type of the guest operating system you plan to install onto the virtual machine.</p><p>The name of the virtual machine usually indicates its software and hardware configuration. It will be used by all VirtualBox components to identify your virtual machine.</p></source> + <translation><p>បញ្ចូលឈ្មោះឲ្យម៉ាស៊ីននិម្មតិថ្មី ហើយជ្រើសប្រភេទប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ ដែលអ្នកចង់ដំឡើងក្នុងម៉ាស៊ីននិម្មិត ។ </p><p>ឈ្មោះរបស់ម៉ាស៊ីននិម្មិតតាមធម្មតាបង្ហាញការកំណត់រចនាសម្ព័ន្ធផ្នែករឹង និងផ្នែកទន់របស់វា ។ វានឹងត្រូវបានប្រើដោយសមាសធាតុ VirtualBox ដើម្បីបញ្ជាក់អត្តសញ្ញាណម៉ាស៊ីននិម្មិតរបស់អ្នក ។</p></translation> </message> <message> - <source><p>If the above is correct press the <b>Finish</b> button. Once you press it, a new virtual machine will be created. </p><p>Note that you can alter these and all other setting of the created virtual machine at any time using the <b>Settings</b> dialog accessible through the menu of the main window.</p></source> - <translation><p>ប្រសិនបើខាងលើត្រឹមត្រូវហើយ ចុចប៊ូតុង <b>បញ្ចប់</b> ។ នៅពេលអ្នកចុចវា ម៉ាស៊ីននិម្មិតថ្មីនឹងត្រូវបានបង្កើតឡើង ។ </p><p>ចំណាំថា អ្នកអាចត្រងការកំណត់ទាំងនេះ និងការកំណត់ផ្សេងៗរបស់ម៉ាស៊ីននិម្មិតដែលបានបង្កើតនៅពេលដែលប្រើប្រអប់ <b>ការកំណត់</b> ដែលអាចចូលដំណើរការបានតាមរយៈម៉ឺនុយរបស់បង្អួចមេ ។</p></translation> + <source><p>You are going to create a new virtual machine with the following parameters:</p></source> + <translation><p>អ្នករៀបនឹងបង្កើតម៉ាស៊ីននិម្មិតថ្មីដែលមានប៉ារ៉ាម៉ែត្រដូចខាងក្រោម ៖</p></translation> </message> <message> - <source>&Finish</source> - <translation>បញ្ចប់</translation> + <source><p>If the above is correct press the <b>Finish</b> button. Once you press it, a new virtual machine will be created. </p><p>Note that you can alter these and all other setting of the created virtual machine at any time using the <b>Settings</b> dialog accessible through the menu of the main window.</p></source> + <translation><p>ប្រសិនបើខាងលើត្រឹមត្រូវហើយ ចុចប៊ូតុង <b>បញ្ចប់</b> ។ នៅពេលអ្នកចុចវា ម៉ាស៊ីននិម្មិតថ្មីនឹងត្រូវបានបង្កើតឡើង ។ </p><p>ចំណាំថា អ្នកអាចត្រងការកំណត់ទាំងនេះ និងការកំណត់ផ្សេងៗរបស់ម៉ាស៊ីននិម្មិតដែលបានបង្កើតនៅពេលដែលប្រើប្រអប់ <b>ការកំណត់</b> ដែលអាចចូលដំណើរការបានតាមរយៈម៉ឺនុយរបស់បង្អួចមេ ។</p></translation> </message> <message> - <source>MB</source> - <comment>megabytes</comment> - <translation>មេកាបៃ</translation> + <source>&Finish</source> + <translation>បញ្ចប់</translation> </message> <message> - <source>Name</source> - <comment>summary</comment> - <translation>ឈ្មោះ</translation> + <source>MB</source> + <comment>megabytes</comment> + <translation>មេកាបៃ</translation> </message> <message> - <source>OS Type</source> - <comment>summary</comment> - <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> + <source>Name</source> + <comment>summary</comment> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Base Memory</source> - <comment>summary</comment> - <translation>សតិមូលដ្ឋាន</translation> + <source>OS Type</source> + <comment>summary</comment> + <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការ</translation> </message> <message> - <source>Boot Hard Disk</source> - <comment>summary</comment> - <translation>ថាសរឹងចាប់ផ្ដើម</translation> + <source>Base Memory</source> + <comment>summary</comment> + <translation>សតិមូលដ្ឋាន</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Boot Hard Disk</source> + <comment>summary</comment> + <translation>ថាសរឹងចាប់ផ្ដើម</translation> </message> <message> - <source><p>Select a hard disk image to be used as the boot hard disk of the virtual machine. You can either create a new hard disk using the <b>New</b> button or select an existing hard disk image from the drop-down list or by pressing the <b>Existing</b> button (to invoke the Virtual Media Manager dialog).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation><p>ជ្រើសរូបភាពថាសរឹងត្រូវប្រើជាថាសរឹងចាប់ផ្ដើមរបស់ម៉ាស៊ីននិម្មិត ។ អ្នកអាចបង្កើតថាសរឹងថ្មីដោយប្រើប៊ូតុង <b>ថ្មី</b> ឬជ្រើសរូបភាពថាសរឹងដែលមានស្រាប់ពីបញ្ជីទម្លាក់ចុះ ឬដោយចុចប៊ូតុង <b>មានស្រាប់</b> (ដើម្បីដកហូតប្រអប់កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត) ។</p><p>ប្រសិនបើអ្នកត្រូវការរៀបចំថាសរឹងដែលស្មុគស្មាញ អ្នកក៏អាចរំលងជំហាននេះ ហើយភ្ជាប់ថាសរឹងពេលក្រោយដោយប្រើប្រអប់កំណត់របស់ VM ។</p></translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>Boot Hard &Disk (Primary Master)</source> - <translation>ថាសរឹងចាប់ផ្ដើម (Primary Master)</translation> + <source><p>Select a hard disk image to be used as the boot hard disk of the virtual machine. You can either create a new hard disk using the <b>New</b> button or select an existing hard disk image from the drop-down list or by pressing the <b>Existing</b> button (to invoke the Virtual Media Manager dialog).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> + <translation><p>ជ្រើសរូបភាពថាសរឹងត្រូវប្រើជាថាសរឹងចាប់ផ្ដើមរបស់ម៉ាស៊ីននិម្មិត ។ អ្នកអាចបង្កើតថាសរឹងថ្មីដោយប្រើប៊ូតុង <b>ថ្មី</b> ឬជ្រើសរូបភាពថាសរឹងដែលមានស្រាប់ពីបញ្ជីទម្លាក់ចុះ ឬដោយចុចប៊ូតុង <b>មានស្រាប់</b> (ដើម្បីដកហូតប្រអប់កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត) ។</p><p>ប្រសិនបើអ្នកត្រូវការរៀបចំថាសរឹងដែលស្មុគស្មាញ អ្នកក៏អាចរំលងជំហាននេះ ហើយភ្ជាប់ថាសរឹងពេលក្រោយដោយប្រើប្រអប់កំណត់របស់ VM ។</p></translation> </message> <message> - <source>&Create new hard disk</source> - <translation type="unfinished"></translation> + <source>Boot Hard &Disk (Primary Master)</source> + <translation>ថាសរឹងចាប់ផ្ដើម (Primary Master)</translation> </message> - <message> - <source>&Use existing hard disk</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxOSTypeSelectorWidget</name> <message> - <source>Operating &System:</source> - <translation>ប្រព័ន្ធប្រតិបត្តិការ ៖</translation> + <source>Operating &System:</source> + <translation>ប្រព័ន្ធប្រតិបត្តិការ ៖</translation> </message> <message> - <source>Displays the operating system family that you plan to install into this virtual machine.</source> - <translation>បង្ហាញក្រុមគ្រួសារប្រព័ន្ធប្រតិបត្តិការដែលអ្នកមានគម្រោងដំឡើងក្នុងម៉ាស៊ីននិម្មិតនេះ ។</translation> + <source>Displays the operating system family that you plan to install into this virtual machine.</source> + <translation>បង្ហាញក្រុមគ្រួសារប្រព័ន្ធប្រតិបត្តិការដែលអ្នកមានគម្រោងដំឡើងក្នុងម៉ាស៊ីននិម្មិតនេះ ។</translation> </message> <message> - <source>V&ersion:</source> - <translation type="obsolete">កំណែ ៖</translation> + <source>V&ersion:</source> + <translation>កំណែ ៖</translation> </message> <message> - <source>Displays the operating system type that you plan to install into this virtual machine (called a guest operating system).</source> - <translation>បង្ហាញប្រភេទប្រព័ន្ធប្រតិបត្តិការដែលអ្នកមានគម្រោងដំឡើងម៉ាស៊ីននិម្មិតនេះ (បានហៅប្រព័ន្ធប្រតិបត្តិរបស់ម៉ាស៊ីនភ្ញៀវ) ។</translation> + <source>Displays the operating system type that you plan to install into this virtual machine (called a guest operating system).</source> + <translation>បង្ហាញប្រភេទប្រព័ន្ធប្រតិបត្តិការដែលអ្នកមានគម្រោងដំឡើងម៉ាស៊ីននិម្មិតនេះ (បានហៅប្រព័ន្ធប្រតិបត្តិរបស់ម៉ាស៊ីនភ្ញៀវ) ។</translation> </message> - <message> - <source>&Version:</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxProblemReporter</name> <message> - <source>VirtualBox - Information</source> - <comment>msg box title</comment> - <translation>VirtualBox - ព័ត៌មាន</translation> - </message> - <message> - <source>VirtualBox - Question</source> - <comment>msg box title</comment> - <translation>VirtualBox - សំណួរ</translation> - </message> - <message> - <source>VirtualBox - Warning</source> - <comment>msg box title</comment> - <translation>VirtualBox - ការព្រមាន</translation> - </message> - <message> - <source>VirtualBox - Error</source> - <comment>msg box title</comment> - <translation>VirtualBox - កំហុស</translation> - </message> - <message> - <source>VirtualBox - Critical Error</source> - <comment>msg box title</comment> - <translation>VirtualBox - កំហុសធ្ងន់ធ្ងរ</translation> - </message> - <message> - <source>Do not show this message again</source> - <comment>msg box flag</comment> - <translation>កុំបង្ហាញសារនេះម្ដងទៀត</translation> - </message> - <message> - <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source> - <translation>បានបរាជ័យក្នុងការបើក <tt>%1</tt> ។ ប្រាកដថាបរិស្ថានផ្ទៃតុរបស់អ្នកអាចគ្រប់គ្រង URLs នៃប្រភេទនេះយ៉ាងត្រឹមត្រូវ ។</translation> - </message> - <message> - <source><p>Failed to initialize COM or to find the VirtualBox COM server. Most likely, the VirtualBox server is not running or failed to start.</p><p>The application will now terminate.</p></source> - <translation><p>បានបរាជ័យក្នុងការចាប់ផ្ដើម COM ឬរកម៉ាស៊ីនបម្រើ VirtualBox COM ។ ភាគច្រើនម៉ាស៊ីនបម្រើ VirtualBox មិនរត់ ឬបរាជ័យក្នុងការចាប់ផ្ដើម ។</p><p>កម្មវិធីនឹងបិទឥឡូវ ។</p></translation> - </message> - <message> - <source><p>Failed to create the VirtualBox COM object.</p><p>The application will now terminate.</p></source> - <translation><p>បានបរាជ័យក្នុងការបង្កើតវត្ថុ VirtualBox COM ។</p><p>កម្មវិធីនឹងបិទឥឡូវនេះ ។</p></translation> - </message> - <message> - <source>Failed to set global VirtualBox properties.</source> - <translation>បានបរាជ័យក្នុងការកំណត់លក្ខណៈសម្បត្តិរបស់ VirtualBox ។</translation> - </message> - <message> - <source>Failed to access the USB subsystem.</source> - <translation>បានបរាជ័យក្នុងការចូលដំណើរការប្រព័ន្ធរងរបស់ USB ។</translation> - </message> - <message> - <source>Failed to create a new virtual machine.</source> - <translation>បានបរាជ័យក្នុងការបង្កើតម៉ាស៊ីននិម្មិតថ្មី ។</translation> - </message> - <message> - <source>Failed to create a new virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបង្កើតម៉ាស៊ីននិម្មិតថ្មី <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to apply the settings to the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការអនុវត្តការកំណត់ទៅកាន់ម៉ាស៊ីននិម្មិតថ្មី <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to start the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការចាប់ផ្ដើមម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការផ្អាកប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to resume the execution of the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបន្តប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to save the state of the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការរក្សាទុកស្ថានភាពរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to create a snapshot of the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបង្កើតរូបថតអេក្រង់របស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to stop the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបញ្ឈប់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to remove the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការយកម៉ាស៊ីននិម្មិតចេញ <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to discard the saved state of the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបោះបង់ស្ថានភាពរបស់ម៉ាស៊ីននិម្មិតដែលបានរក្សាទុក <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to discard the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source> - <translation>បានបរាជ័យក្នុងការបោះបង់រូបថត <b>%1</b> របស់ម៉ាស៊ីននិម្មិត <b>%2</b> ។</translation> - </message> - <message> - <source>Failed to discard the current state of the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបោះបង់ស្ថានភាពបច្ចុប្បន្នរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>Failed to discard the current snapshot and the current state of the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបោះបង់រូបថតអេក្រង់ និងស្ថានភាពបច្ចុប្បន្នរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> - </message> - <message> - <source>There is no virtual machine named <b>%1</b>.</source> - <translation>គ្មានម៉ាស៊ីននិម្មិតដែលមានឈ្មោះ <b>%1</b> នោះទេ ។</translation> - </message> - <message> - <source><p>Are you sure you want to permanently delete the virtual machine <b>%1</b>?</p><p>This operation cannot be undone.</p></source> - <translation><p>តើអ្នកប្រាកដជាចង់លុបម៉ាស៊ីននិម្មិត <b>%1</b> ជាអចិន្ត្រៃយ៍ឬ ?</p><p>ប្រតិបត្តិការនេះមិនអាចត្រូវបានធ្វើវិញទេ ។</p></translation> + <source>VirtualBox - Information</source> + <comment>msg box title</comment> + <translation>VirtualBox - ព័ត៌មាន</translation> </message> <message> - <source><p>Are you sure you want to unregister the inaccessible virtual machine <b>%1</b>?</p><p>You will no longer be able to register it back from GUI.</p></source> - <translation><p>តើអ្នកប្រាកដជាចង់លុបឈ្មោះម៉ាស៊ីននិម្មិត <b>%1</b>ដែលមិនអាចចូលដំណើរការបានដែរឬទេ?</p><p>អ្នកនឹងមិនអាចចុះឈ្មោះវាបានទៀតទេពី GUI ។</p></translation> + <source>VirtualBox - Question</source> + <comment>msg box title</comment> + <translation>VirtualBox - សំណួរ</translation> </message> <message> - <source><p>Are you sure you want to discard the saved state of the virtual machine <b>%1</b>?</p><p>This operation is equivalent to resetting or powering off the machine without doing a proper shutdown by means of the guest OS.</p></source> - <translation><p>តើអ្នកប្រាកដជាចង់បោះបង់ស្ថានភាពដែលបានរក្សាទុករបស់ម៉ាស៊ីននិម្មិត <b>%1</b>ដែរឬទេ ?</p><p>ប្រតិបត្តិការនេះមិនស្មើនឹងការកំណត់ឡើងវិញ ឬបិទម៉ាស៊ីនដោយមិនបានចុចប៊ូតុងដោយសមរម្យតាមប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</p></translation> + <source>VirtualBox - Warning</source> + <comment>msg box title</comment> + <translation>VirtualBox - ការព្រមាន</translation> </message> <message> - <source>Failed to create a new session.</source> - <translation>បានបរាជ័យក្នុងការបង្កើតសម័យថ្មី ។</translation> + <source>VirtualBox - Error</source> + <comment>msg box title</comment> + <translation>VirtualBox - កំហុស</translation> </message> <message> - <source>Failed to open a session for the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការបើកសម័យសម្រាប់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> + <source>VirtualBox - Critical Error</source> + <comment>msg box title</comment> + <translation>VirtualBox - កំហុសធ្ងន់ធ្ងរ</translation> </message> <message> - <source>Failed to create the host network interface <b>%1</b>.</source> - <translation type="obsolete">បានបរាជ័យក្នុងការបង្កើតចំណុចប្រទាក់បណ្ដាញ <b>%1</b> ។</translation> + <source>Do not show this message again</source> + <comment>msg box flag</comment> + <translation>កុំបង្ហាញសារនេះម្ដងទៀត</translation> </message> <message> - <source>Failed to remove the host network interface <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការយកចំណុចប្រទាក់បណ្ដាញម៉ាស៊ីន <b>%1</b> ចេញ ។</translation> + <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source> + <translation>បានបរាជ័យក្នុងការបើក <tt>%1</tt> ។ ប្រាកដថាបរិស្ថានផ្ទៃតុរបស់អ្នកអាចគ្រប់គ្រង URLs នៃប្រភេទនេះយ៉ាងត្រឹមត្រូវ ។</translation> </message> <message> - <source>Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.</source> - <translation>បានបរាជ័យក្នុងការភ្ជាប់ឧបករណ៍ USB <b>%1</b> ទៅម៉ាស៊ីននិម្មិត <b>%2</b> ។</translation> + <source><p>Failed to initialize COM or to find the VirtualBox COM server. Most likely, the VirtualBox server is not running or failed to start.</p><p>The application will now terminate.</p></source> + <translation><p>បានបរាជ័យក្នុងការចាប់ផ្ដើម COM ឬរកម៉ាស៊ីនបម្រើ VirtualBox COM ។ ភាគច្រើនម៉ាស៊ីនបម្រើ VirtualBox មិនរត់ ឬបរាជ័យក្នុងការចាប់ផ្ដើម ។</p><p>កម្មវិធីនឹងបិទឥឡូវ ។</p></translation> </message> <message> - <source>Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.</source> - <translation>បានបរាជ័យក្នុងការផ្ដាច់ឧបករណ៍ USB <b>%1</b> ពីម៉ាស៊ីននិម្មិត <b>%2</b> ។</translation> + <source><p>Failed to create the VirtualBox COM object.</p><p>The application will now terminate.</p></source> + <translation><p>បានបរាជ័យក្នុងការបង្កើតវត្ថុ VirtualBox COM ។</p><p>កម្មវិធីនឹងបិទឥឡូវនេះ ។</p></translation> </message> <message> - <source>Failed to create a shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.</source> - <translation>បានបរាជ័យក្នុងការបង្កើតថត <b>%1</b> (ចង្អុលទៅ <nobr><b>%2</b></nobr>) សម្រាប់ម៉ាស៊ីននិម្មិត <b>%3</b> ។</translation> + <source>Failed to set global VirtualBox properties.</source> + <translation>បានបរាជ័យក្នុងការកំណត់លក្ខណៈសម្បត្តិរបស់ VirtualBox ។</translation> </message> <message> - <source>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</source> - <translation>បានបរាជ័យក្នុងការយកថតដែលបានចែករំលែកចេញ <b>%1</b> (ចង្អុលទៅ <nobr><b>%2</b></nobr>) ពីម៉ាស៊ីននិម្មិត <b>%3</b> ។</translation> + <source>Failed to access the USB subsystem.</source> + <translation>បានបរាជ័យក្នុងការចូលដំណើរការប្រព័ន្ធរងរបស់ USB ។</translation> </message> <message> - <source><p>The Virtual Machine reports that the guest OS does not support <b>mouse pointer integration</b> in the current video mode. You need to capture the mouse (by clicking over the VM display or pressing the host key) in order to use the mouse inside the guest OS.</p></source> - <translation><p>ម៉ាស៊ីននិម្មិតរាយការណ៍ថាប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវមិនគាំទ្រទេ ។ <b>ការរួមបញ្ចូលទ្រនិចកណ្ដុរ</b> នៅក្នុងរបៀបវីដេអូបច្ចុប្បន្ន ។ អ្នកត្រូវតែចាប់យកកណ្ដុរ (ដោយចុចលើការបង្ហាញ VM ឬចុចគ្រាប់ចុចលើម៉ាស៊ីន) ដើម្បីប្រើកណ្ដុរខាងក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</p></translation> + <source>Failed to create a new virtual machine.</source> + <translation>បានបរាជ័យក្នុងការបង្កើតម៉ាស៊ីននិម្មិតថ្មី ។</translation> </message> <message> - <source><p>The Virtual Machine is currently in the <b>Paused</b> state and therefore does not accept any keyboard or mouse input. If you want to continue to work inside the VM, you need to resume it by selecting the corresponding action from the menu bar.</p></source> - <translation><p>ម៉ាស៊ីននិម្មិតបច្ចុប្បន្នស្ថិតក្នុងស្ថានភាព <b>បានផ្អាក</b> ហើយដូច្នេះមិនទទួលក្ដារចុច ឬកណ្ដុរណាមួយ ។ ប្រសិនបើអ្នកចង់បន្តដំណើរការខាងក្នុង VM អ្នកត្រូវតែបន្តវា ដោយជ្រើសសកម្មភាពដែលទាក់ទងពីរបារម៉ឺនុយ ។</p></translation> + <source>Failed to create a new virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបង្កើតម៉ាស៊ីននិម្មិតថ្មី <b>%1</b> ។</translation> </message> <message> - <source><p>Cannot run VirtualBox in <i>VM Selector</i> mode due to local restrictions.</p><p>The application will now terminate.</p></source> - <translation><p>មិនអាចរត់ VirtualBox នៅក្នុងរបៀប <i>កម្មវិធីជ្រើស VM</i> ដោយសារតែការដាក់កម្រិតមូលដ្ឋាន ។</p><p>កម្មវិធីនឹងបញ្ចប់ឥឡូវ ។</p></translation> + <source>Failed to apply the settings to the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការអនុវត្តការកំណត់ទៅកាន់ម៉ាស៊ីននិម្មិតថ្មី <b>%1</b> ។</translation> </message> <message> - <source><nobr>Fatal Error</nobr></source> - <comment>runtime error info</comment> - <translation><nobr>កំហុសធ្ងន់ធ្ងរ</nobr></translation> + <source>Failed to start the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការចាប់ផ្ដើមម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source><nobr>Non-Fatal Error</nobr></source> - <comment>runtime error info</comment> - <translation><nobr>មិនមែនកំហុសធ្ងន់ធ្ងរ</nobr></translation> + <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការផ្អាកប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source><nobr>Warning</nobr></source> - <comment>runtime error info</comment> - <translation><nobr>ការព្រមាន</nobr></translation> + <source>Failed to resume the execution of the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបន្តប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source><nobr>Error ID: </nobr></source> - <comment>runtime error info</comment> - <translation><nobr>លេខសម្គាល់កំហុស ៖</nobr></translation> + <source>Failed to save the state of the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការរក្សាទុកស្ថានភាពរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source>Severity: </source> - <comment>runtime error info</comment> - <translation>ភាពម៉ឺងម៉ាត់ ៖</translation> + <source>Failed to create a snapshot of the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបង្កើតរូបថតអេក្រង់របស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source><p>A fatal error has occurred during virtual machine execution! The virtual machine will be powered off. It is suggested to use the clipboard to copy the following error message for further examination:</p></source> - <translation><p>កំហុសធ្ងន់ធ្ងរមានកើតឡើងកំឡុងពេលប្រតិបត្តិម៉ាស៊ីននិម្មិត ! ម៉ាស៊ីននិម្មិតនឹងត្រូវបានបិទ ។ វាត្រូវបានស្នើឲ្យប្រើក្ដារតម្បៀតខ្ទាស់ដើម្បីចម្លងសារកំហុសដើម្បីពិនិត្យមើលបន្ថែមទេ ៖</p></translation> + <source>Failed to stop the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបញ្ឈប់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source><p>An error has occurred during virtual machine execution! The error details are shown below. You can try to correct the described error and resume the virtual machine execution.</p></source> - <translation><p>កំហុសបានកើតឡើងកំឡុងពេលប្រតិបត្តិម៉ាស៊ីននិម្មិត ! សេចក្ដីលម្អិតកំហុសត្រូវបានបង្ហាញខាងក្រោម ។ អ្នកអាចព្យាយាមកែកំហុសដែលពិពណ៌នា ហើយបន្តប្រតិបត្តិម៉ាស៊ីននិម្មិត ។</p></translation> + <source>Failed to remove the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការយកម៉ាស៊ីននិម្មិតចេញ <b>%1</b> ។</translation> </message> <message> - <source><p>The virtual machine execution may run into an error condition as described below. You may ignore this message, but it is suggested to perform an appropriate action to make sure the described error will not happen.</p></source> - <translation><p>ការប្រតិបត្តិម៉ាស៊ីននិម្មិតអាចរត់ក្នុងលក្ខខណ្ឌមានកំហុសដូចបានពិពណ៌នាខាងក្រោម ។ អ្នកអាចមិនអើពើសារនេះបាន ប៉ុន្តែវាត្រូវបានស្នើឲ្យអនុវត្តសកម្មភាពដែលសមរម្យ ដើម្បីប្រាកដថាសារដែលបានពិពណ៌នាមិនកើតឡើងទេ ។</p></translation> + <source>Failed to discard the saved state of the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបោះបង់ស្ថានភាពរបស់ម៉ាស៊ីននិម្មិតដែលបានរក្សាទុក <b>%1</b> ។</translation> </message> <message> - <source>Result&nbsp;Code: </source> - <comment>error info</comment> - <translation>កូដ&nbsp;លទ្ធផល ៖</translation> + <source>Failed to discard the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source> + <translation>បានបរាជ័យក្នុងការបោះបង់រូបថត <b>%1</b> របស់ម៉ាស៊ីននិម្មិត <b>%2</b> ។</translation> </message> <message> - <source>Component: </source> - <comment>error info</comment> - <translation>សមាសភាគ ៖</translation> + <source>Failed to discard the current state of the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបោះបង់ស្ថានភាពបច្ចុប្បន្នរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source>Interface: </source> - <comment>error info</comment> - <translation>ចំណុចប្រទាក់ ៖</translation> + <source>Failed to discard the current snapshot and the current state of the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបោះបង់រូបថតអេក្រង់ និងស្ថានភាពបច្ចុប្បន្នរបស់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source>Callee: </source> - <comment>error info</comment> - <translation>Callee ៖ </translation> + <source>There is no virtual machine named <b>%1</b>.</source> + <translation>គ្មានម៉ាស៊ីននិម្មិតដែលមានឈ្មោះ <b>%1</b> នោះទេ ។</translation> </message> <message> - <source>Callee&nbsp;RC: </source> - <comment>error info</comment> - <translation>Callee&nbsp;RC ៖ </translation> + <source><p>Are you sure you want to permanently delete the virtual machine <b>%1</b>?</p><p>This operation cannot be undone.</p></source> + <translation><p>តើអ្នកប្រាកដជាចង់លុបម៉ាស៊ីននិម្មិត <b>%1</b> ជាអចិន្ត្រៃយ៍ឬ ?</p><p>ប្រតិបត្តិការនេះមិនអាចត្រូវបានធ្វើវិញទេ ។</p></translation> </message> <message> - <source><p>Could not find a language file for the language <b>%1</b> in the directory <b><nobr>%2</nobr></b>.</p><p>The language will be temporarily reset to the system default language. Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> - <translation><p>រកមិនឃើញឯកសារភាសាសម្រាប់ភាសា <b>%1</b> នៅក្នុង <b><nobr>%2</nobr></b>ទេ ។</p><p>ភាសានឹងត្រូវបានកំណត់ឡើងវិញជាបណ្ដោះអាសន្នទៅភាសាលំនាំដើមរបស់ប្រព័ន្ធ ។ សូមចូលទៅប្រអប់ <b>ចំណូលចិត្ត</b> ដែលអ្នកអាចបើកពីម៉ឺនុយ <b>ឯកសារ</b> នៃបង្អួច VirtualBox មេ ហើយជ្រើសភាសាមួយក្នុងចំណោមភាសាដែលមាននៅលើទំព័រ <b>ភាសា</b> ។</p></translation> + <source><p>Are you sure you want to unregister the inaccessible virtual machine <b>%1</b>?</p><p>You will no longer be able to register it back from GUI.</p></source> + <translation><p>តើអ្នកប្រាកដជាចង់លុបឈ្មោះម៉ាស៊ីននិម្មិត <b>%1</b>ដែលមិនអាចចូលដំណើរការបានដែរឬទេ?</p><p>អ្នកនឹងមិនអាចចុះឈ្មោះវាបានទៀតទេពី GUI ។</p></translation> </message> <message> - <source><p>Could not load the language file <b><nobr>%1</nobr></b>. <p>The language will be temporarily reset to English (built-in). Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> - <translation><p>មិនអាចផ្ទុកឯកសារភាសា <b><nobr>%1</nobr></b> បានទេ ។ <p>ភាសានឹងត្រូវបានកំណត់ទៅជាភាសាអង់គ្លេសជាបណ្ដោះអាសន្ន ។ សូមចូលទៅប្រអប់ <b>ចំណូលចិត្ត</b> ដែលអ្នកអាចបើកពីម៉ឺនុយ <b>ឯកសារ</b> នៃបង្អួច VirtualBox មេ ហើយជ្រើសភាសាមួយក្នុងចំណោមភាសាដែលមានស្រាប់នៅលើទំព័រ <b>ភាសា</b> ។</p></translation> + <source><p>Are you sure you want to discard the saved state of the virtual machine <b>%1</b>?</p><p>This operation is equivalent to resetting or powering off the machine without doing a proper shutdown by means of the guest OS.</p></source> + <translation><p>តើអ្នកប្រាកដជាចង់បោះបង់ស្ថានភាពដែលបានរក្សាទុករបស់ម៉ាស៊ីននិម្មិត <b>%1</b>ដែរឬទេ ?</p><p>ប្រតិបត្តិការនេះមិនស្មើនឹងការកំណត់ឡើងវិញ ឬបិទម៉ាស៊ីនដោយមិនបានចុចប៊ូតុងដោយសមរម្យតាមប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</p></translation> </message> <message> - <source><p>VirtualBox Guest Additions installed in the Guest OS are too old: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) will most likely stop working properly.</p><p>Please update Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation><p>ផ្នែកបន្ថែមភាសាភ្ញៀវរបស់ VirtualBox បានដំឡើងនៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវចាស់ពេក ៖ កំណែដែលបានដំឡើងគឺ %1 កំណែដែលរំពឹងទុកគឺ %2 ។ លក្ខណៈពិសេសមួយចំនួនត្រូវការផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ (ការរួមបញ្ចូលកណ្ដុរ បង្ហាញការផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិរបស់ម៉ាស៊ីនភ្ញៀវ) នឹងបញ្ឈប់ដំណើរការយ៉ាងត្រឹមត្រូវ ។</p><p>សូមធ្វើឲ្យផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវទាន់សម័យទៅកំណែបច្ចុប្បន្ន ដោយជ្រើស <b>ដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ</b> ពីម៉ឺនុយ <b>ឧបករណ៍</b> ។</p></translation> + <source>Failed to create a new session.</source> + <translation>បានបរាជ័យក្នុងការបង្កើតសម័យថ្មី ។</translation> </message> <message> - <source><p>VirtualBox Guest Additions installed in the Guest OS are outdated: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) may not work as expected.</p><p>It is recommended to update Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation><p>ផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ VirtualBox បានដំឡើងនៅក្នុងប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវគឺហួសសម័យហើយ ៖ កំណែដែលបានដំឡើងគឺ %1 កំណែដែលរំពឹងទុកគឺ %2 ។ លក្ខណៈពិសេសមួយចំនួនដែលត្រូវការផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ (ការរួមបញ្ចូលកណ្ដុរ បង្ហាញការផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិរបស់ម៉ាស៊ីនភ្ញៀវ) មិនអាចដំណើរការដូចដែលបានរំពឹងទុកទេ ។</p><p>វាត្រូវបានផ្ដល់អនុសាសន៍ឲ្យធ្វើឲ្យផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវទាន់សម័យទៅកណែបច្ចុប្បន្ន ដោយជ្រើស <b>ដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ</b> ពីម៉ឺនុយ <b>ឧបករណ៍</b> ។</p></translation> + <source>Failed to open a session for the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបើកសម័យសម្រាប់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source><p>VirtualBox Guest Additions installed in the Guest OS are too recent for this version of VirtualBox: the installed version is %1, the expected version is %2.</p><p>Using a newer version of Additions with an older version of VirtualBox is not supported. Please install the current version of Guest Additions by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation><p>ផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox នៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវថ្មីពេកសម្រាប់កំណែរបស់ VirtualBox ៖ កំណែដែលបានដំឡើងគឺ %1 កំណែដែលរំពឹងទុកគឺ %2 ។</p><p>ការប្រើកំណែថ្មីរបស់បន្ថែមផ្នែកបន្ថែមជាងកំណែចាស់របស់ VirtualBox មិនត្រូវបានគាំទ្រទេ ។ សូមដំឡើងកំណែបច្ចុប្បន្នរបស់ផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ ដោយជ្រើស<b>ដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ</b> ពីម៉ឺនុយ <b>ឧបករណ៍</b> ។</p></translation> + <source>Failed to create the host network interface <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការបង្កើតចំណុចប្រទាក់បណ្ដាញ <b>%1</b> ។</translation> </message> <message> - <source>Failed to change the snapshot folder path of the virtual machine <b>%1<b> to <nobr><b>%2</b></nobr>.</source> - <translation>បានបរាជ័យក្នុងការផ្លាស់ប្ដូរផ្លូវថតរូបថតរបស់ម៉ាស៊ីននិម្មិត <b>%1<b> ទៅ <nobr><b>%2</b></nobr> ។</translation> + <source>Failed to remove the host network interface <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការយកចំណុចប្រទាក់បណ្ដាញម៉ាស៊ីន <b>%1</b> ចេញ ។</translation> </message> <message> - <source><p>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p><p>Please close all programs in the guest OS that may be using this shared folder and try again.</p></source> - <translation><p>បានបរាជ័យក្នុងការយកថតដែលបានចែករំលែក <b>%1</b> ចេញ (ចង្អុលទៅ <nobr><b>%2</b></nobr>) ពីម៉ាស៊ីននិម្មិត <b>%3</b> ។</p><p>សូមបិទកម្មវិធីទាំងអស់នៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវដែលអាចកំពុងប្រើថតដែលបានចែករំលែកនេះ ហើយព្យាយាមម្ដងទៀត ។</p></translation> + <source>Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.</source> + <translation>បានបរាជ័យក្នុងការភ្ជាប់ឧបករណ៍ USB <b>%1</b> ទៅម៉ាស៊ីននិម្មិត <b>%2</b> ។</translation> </message> <message> - <source><p>Could not find the VirtualBox Guest Additions CD image file <nobr><b>%1</b></nobr> or <nobr><b>%2</b>.</nobr></p><p>Do you want to download this CD image from the Internet?</p></source> - <translation><p>មិនអាចរកឯកសាររូបភាពស៊ីឌីបន្ថែមម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox <nobr><b>%1</b></nobr> ឬ <nobr><b>%2</b> ។</nobr></p><p>តើអ្នកចង់ទាញយករូបភាពស៊ីឌីពីអ៊ីនធឺណិតដែរឬទេ ?</p></translation> + <source>Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.</source> + <translation>បានបរាជ័យក្នុងការផ្ដាច់ឧបករណ៍ USB <b>%1</b> ពីម៉ាស៊ីននិម្មិត <b>%2</b> ។</translation> </message> <message> - <source><p>Failed to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> - <translation><p>បានបរាជ័យក្នុងការទាញយករូបភាពស៊ីឌីបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox ពី <nobr><a href="%1">%2</a> ។</nobr></p><p>%3</p></translation> + <source>Failed to create a shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.</source> + <translation>បានបរាជ័យក្នុងការបង្កើតថត <b>%1</b> (ចង្អុលទៅ <nobr><b>%2</b></nobr>) សម្រាប់ម៉ាស៊ីននិម្មិត <b>%3</b> ។</translation> </message> <message> - <source><p>Are you sure you want to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> - <translation><p>តើអ្នកប្រាកដជាចង់ទាញយករូបភាពស៊ីឌីបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox ពី <nobr><a href="%1">%2</a></nobr> (ទំហំ %3 បៃ) ដែរឬទេ?</p></translation> + <source>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</source> + <translation>បានបរាជ័យក្នុងការយកថតដែលបានចែករំលែកចេញ <b>%1</b> (ចង្អុលទៅ <nobr><b>%2</b></nobr>) ពីម៉ាស៊ីននិម្មិត <b>%3</b> ។</translation> </message> <message> - <source><p>The VirtualBox Guest Additions CD image has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p><p>Do you want to register this CD image and mount it on the virtual CD/DVD drive?</p></source> - <translation><p>រូបភាពស៊ីឌីផ្នែកនែកបន្ថែមម៉ាស៊ីនភ្ញៀវ VirtualBត្រូវបានទាញយកដោយជោគជ័យពីr<nobr><a href="%1">%2</a></nobr>bហើយបានរក្សាទុកក្នុងមូលដ្ឋានជា as <nobr><b>%3</b> ។</nobr></p><p>តើអ្នកចង់ចុះឈ្មោះរូបភាពស៊ីឌីនេះ ហើយម៉ោនវានៅលើដ្រាយស៊ីឌី/ឌីវីឌីនិម្មិតដែរឬទេ ?ve?</p></translation> + <source><p>The Virtual Machine reports that the guest OS does not support <b>mouse pointer integration</b> in the current video mode. You need to capture the mouse (by clicking over the VM display or pressing the host key) in order to use the mouse inside the guest OS.</p></source> + <translation><p>ម៉ាស៊ីននិម្មិតរាយការណ៍ថាប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវមិនគាំទ្រទេ ។ <b>ការរួមបញ្ចូលទ្រនិចកណ្ដុរ</b> នៅក្នុងរបៀបវីដេអូបច្ចុប្បន្ន ។ អ្នកត្រូវតែចាប់យកកណ្ដុរ (ដោយចុចលើការបង្ហាញ VM ឬចុចគ្រាប់ចុចលើម៉ាស៊ីន) ដើម្បីប្រើកណ្ដុរខាងក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</p></translation> </message> <message> - <source><p>The virtual machine window is optimized to work in <b>%1&nbsp;bit</b> color mode but the color quality of the virtual display is currently set to <b>%2&nbsp;bit</b>.</p><p>Please open the display properties dialog of the guest OS and select a <b>%3&nbsp;bit</b> color mode, if it is available, for best possible performance of the virtual video subsystem.</p><p><b>Note</b>. Some operating systems, like OS/2, may actually work in 32&nbsp;bit mode but report it as 24&nbsp;bit (16 million colors). You may try to select a different color quality to see if this message disappears or you can simply disable the message now if you are sure the required color quality (%4&nbsp;bit) is not available in the given guest OS.</p></source> - <translation><p>បង្អួចម៉ាស៊ីននិម្មិតត្រូវបានធ្វើឲ្យប្រសើរដើម្បីធ្វើការក្នុងរបៀបពណ៌ <b>%1&nbsp;ប៊ីត</b> ប៉ុន្តែគុណភាពពណ៌នៃការបង្ហាញនិម្មិតបច្ចុប្បន្នត្រូវបានកំណត់ទៅ <b>%2&nbsp;ប៊ីត</b> ។</p><p>សូមបើកប្រអប់លក្ខណៈសម្បត្តិបង្ហាញរបស់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ហើយជ្រើសរបៀបពណ៌ <b>%3&nbsp;ប៊ីត</b> ប្រសិនបើមាន សម្រាប់ការអនុវត្តដ៏ល្អបំផុតរបស់ប្រព័ន្ធរងវីដែអូនិម្មិត ។</p><p><b>ចំណាំ</b> ។ ប្រព័ន្ធប្រតិបត្តិការមួយចំនួន ដូចជា OS/2 អាចដំណើរការយ៉ាងពិតប្រាកដនៅក្នុងរបៀប ៣២&nbsp;ប៊ីត ប៉ុន្តែរាយការណ៍ជា ២៤&nbsp;ប៊ីត (១៦ លានពណ៌) ។ អ្នកអាចព្យាយាមជ្រើសគុណភាពពណ៌ផ្សេងដើម្បីមើលថាតើសារនេះមិនបង្ហាញ ឬអ្នកអាចបិទសារយ៉ាងសាមញ្ញ ឥឡូវប្រសិនបើអ្នកប្រាកដគុណភាពពណ៌ដែលត្រូវការ (%4&nbsp;ប៊ីត) មិនអាចប្រើបាននៅក្នុងប្រព័ន្ធ ប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវដែលបានផ្ដល់ឲ្យទេ ។</p></translation> + <source><p>The Virtual Machine is currently in the <b>Paused</b> state and therefore does not accept any keyboard or mouse input. If you want to continue to work inside the VM, you need to resume it by selecting the corresponding action from the menu bar.</p></source> + <translation><p>ម៉ាស៊ីននិម្មិតបច្ចុប្បន្នស្ថិតក្នុងស្ថានភាព <b>បានផ្អាក</b> ហើយដូច្នេះមិនទទួលក្ដារចុច ឬកណ្ដុរណាមួយ ។ ប្រសិនបើអ្នកចង់បន្តដំណើរការខាងក្នុង VM អ្នកត្រូវតែបន្តវា ដោយជ្រើសសកម្មភាពដែលទាក់ទងពីរបារម៉ឺនុយ ។</p></translation> </message> <message> - <source><p>You didn't attach a hard disk to the new virtual machine. The machine will not be able to boot unless you attach a hard disk with a guest operating system or some other bootable media to it later using the machine settings dialog or the First Run Wizard.</p><p>Do you want to continue?</p></source> - <translation><p>អ្នកមិនបានភ្ជាប់ថាសរឹងទៅកាន់ម៉ាស៊ីននិម្មិតថ្មីទេ ។ ម៉ាស៊ីននឹងមិនអាចចាប់ផ្ដើមបានទេ លុះត្រាតែអ្នកភ្ជាប់ថាសរឹងជាមួយប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ ឬមេឌៀចាប់ផ្ដើមផ្សេងៗមួយចំនួនទៀតទៅវា ពេលក្រោយប្រើប្រអប់កំណត់ម៉ាស៊ីន ឬរត់អ្នកជំនួយការសិន ។</p><p>តើអ្នកចង់បន្តដែរឬទេ ?</p></translation> + <source><p>Cannot run VirtualBox in <i>VM Selector</i> mode due to local restrictions.</p><p>The application will now terminate.</p></source> + <translation><p>មិនអាចរត់ VirtualBox នៅក្នុងរបៀប <i>កម្មវិធីជ្រើស VM</i> ដោយសារតែការដាក់កម្រិតមូលដ្ឋាន ។</p><p>កម្មវិធីនឹងបញ្ចប់ឥឡូវ ។</p></translation> </message> <message> - <source>Failed to find license files in <nobr><b>%1</b></nobr>.</source> - <translation>បានបរាជ័យយក្នុងការរកឯកសារអាជ្ញាបណ្ណនៅក្នុង <nobr><b>%1</b></nobr> ។</translation> + <source><nobr>Fatal Error</nobr></source> + <comment>runtime error info</comment> + <translation><nobr>កំហុសធ្ងន់ធ្ងរ</nobr></translation> </message> <message> - <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source> - <translation>បានបរាជ័យក្នុងការបើកឯកសារអាជ្ញាប័ណ្ណ <nobr><b>%1</b></nobr> ។ ពិនិត្យមើលសិទ្ធិរបស់ឯកសារ ។</translation> + <source><nobr>Non-Fatal Error</nobr></source> + <comment>runtime error info</comment> + <translation><nobr>មិនមែនកំហុសធ្ងន់ធ្ងរ</nobr></translation> </message> <message> - <source>Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការផ្ញើការចុចប៊ូតុងថាមពល ACPI ទៅកាន់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> + <source><nobr>Warning</nobr></source> + <comment>runtime error info</comment> + <translation><nobr>ការព្រមាន</nobr></translation> </message> <message> - <source><p>Congratulations! You have been successfully registered as a user of VirtualBox.</p><p>Thank you for finding time to fill out the registration form!</p></source> - <translation><p>សូមអបអរសាទរ ! អ្នកបានចុះឈ្មោះជាអ្នកប្រើ VirtualBox ដោយជោគជ័យហើយ ។ </p><p>សូមអរគុណចំពោះការចំណាយពេលវេលាបំពេញសំណុំបែបបទចុះឈ្មោះ !</p></translation> + <source><nobr>Error ID: </nobr></source> + <comment>runtime error info</comment> + <translation><nobr>លេខសម្គាល់កំហុស ៖</nobr></translation> </message> <message> - <source><p>Failed to register the VirtualBox product</p><p>%1</p></source> - <translation type="obsolete"><p>បានបរាជ័យក្នុងការចុះឈ្មោះផលិតផល VirtualBox</p><p>%1</p></translation> + <source>Severity: </source> + <comment>runtime error info</comment> + <translation>ភាពម៉ឺងម៉ាត់ ៖</translation> </message> <message> - <source><p>Failed to save the global VirtualBox settings to <b><nobr>%1</nobr></b>.</p></source> - <translation><p>បានបរាជ័យក្នុងការរក្សាទុកការកំណត់ VirtualBox សកលទៅកាន់ <b><nobr>%1</nobr></b> ។</p></translation> + <source><p>A fatal error has occurred during virtual machine execution! The virtual machine will be powered off. It is suggested to use the clipboard to copy the following error message for further examination:</p></source> + <translation><p>កំហុសធ្ងន់ធ្ងរមានកើតឡើងកំឡុងពេលប្រតិបត្តិម៉ាស៊ីននិម្មិត ! ម៉ាស៊ីននិម្មិតនឹងត្រូវបានបិទ ។ វាត្រូវបានស្នើឲ្យប្រើក្ដារតម្បៀតខ្ទាស់ដើម្បីចម្លងសារកំហុសដើម្បីពិនិត្យមើលបន្ថែមទេ ៖</p></translation> </message> <message> - <source><p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source> - <translation><p>បានបរាជ័យក្នុងការផ្ទុកការកំណត់រចនាសម្ព័ន្ធចំណុចប្រទាក់អ្នកប្រើសកលពី <b><nobr>%1</nobr></b> ។</p><p>កម្មវិធីនឹងបិទឥឡូវ ។</p></translation> + <source><p>An error has occurred during virtual machine execution! The error details are shown below. You can try to correct the described error and resume the virtual machine execution.</p></source> + <translation><p>កំហុសបានកើតឡើងកំឡុងពេលប្រតិបត្តិម៉ាស៊ីននិម្មិត ! សេចក្ដីលម្អិតកំហុសត្រូវបានបង្ហាញខាងក្រោម ។ អ្នកអាចព្យាយាមកែកំហុសដែលពិពណ៌នា ហើយបន្តប្រតិបត្តិម៉ាស៊ីននិម្មិត ។</p></translation> </message> <message> - <source><p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source> - <translation><p>បានបរាជ័យក្នុងការរក្សាទុកការកំណត់រចនាសម្ព័ន្ធចំណុចប្រទាក់អ្នកប្រើសកលទៅ<b><nobr>%1</nobr></b> ។</p><p>កម្មវិធីនឹងបិទឥឡូវ ។</p></translation> + <source><p>The virtual machine execution may run into an error condition as described below. You may ignore this message, but it is suggested to perform an appropriate action to make sure the described error will not happen.</p></source> + <translation><p>ការប្រតិបត្តិម៉ាស៊ីននិម្មិតអាចរត់ក្នុងលក្ខខណ្ឌមានកំហុសដូចបានពិពណ៌នាខាងក្រោម ។ អ្នកអាចមិនអើពើសារនេះបាន ប៉ុន្តែវាត្រូវបានស្នើឲ្យអនុវត្តសកម្មភាពដែលសមរម្យ ដើម្បីប្រាកដថាសារដែលបានពិពណ៌នាមិនកើតឡើងទេ ។</p></translation> </message> <message> - <source>Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.</source> - <translation>បានបរាជ័យក្នុងការរក្សាទុកការកំណត់របស់ម៉ាស៊ីននិម្មិត <b>%1</b> ទៅ<b><nobr>%2</nobr></b> ។</translation> + <source>Result&nbsp;Code: </source> + <comment>error info</comment> + <translation>កូដ&nbsp;លទ្ធផល ៖</translation> </message> <message> - <source>Failed to load the settings of the virtual machine <b>%1</b> from <b><nobr>%2</nobr></b>.</source> - <translation>បានបរាជ័យក្នុងការផ្ទុកការកំណត់របស់ម៉ាស៊ីននិម្មិត <b>%1</b> ពី <b><nobr>%2</nobr></b> ។</translation> + <source>Component: </source> + <comment>error info</comment> + <translation>សមាសភាគ ៖</translation> </message> <message> - <source>Delete</source> - <comment>machine</comment> - <translation>លុប</translation> + <source>Interface: </source> + <comment>error info</comment> + <translation>ចំណុចប្រទាក់ ៖</translation> </message> <message> - <source>Unregister</source> - <comment>machine</comment> - <translation>មិនចុះឈ្មោះ</translation> + <source>Callee: </source> + <comment>error info</comment> + <translation>Callee ៖ </translation> </message> <message> - <source>Discard</source> - <comment>saved state</comment> - <translation>បោះបង់</translation> + <source>Callee&nbsp;RC: </source> + <comment>error info</comment> + <translation>Callee&nbsp;RC ៖ </translation> </message> <message> - <source><p>There are hard disks attached to SATA ports of this virtual machine. If you disable the SATA controller, all these hard disks will be automatically detached.</p><p>Are you sure that you want to disable the SATA controller?</p></source> - <translation type="obsolete"><p>មានថាសរឹងបានតភ្ជាប់ទៅច្រក SATA របស់ម៉ាស៊ីននិម្មិតនេះ ។ ប្រសិនបើអ្នកបិទវត្ថុបញ្ជា SATA ថាសរឹងទាំងនេះនឹងត្រូវបានផ្ដាច់ដោយស្វ័យប្រវត្តិ ។</p><p>តើអ្នកប្រាកដជាចង់បិទវត្ថុបញ្ជា SATA ដែរឬទេ ?</p></translation> + <source><p>Could not find a language file for the language <b>%1</b> in the directory <b><nobr>%2</nobr></b>.</p><p>The language will be temporarily reset to the system default language. Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> + <translation><p>រកមិនឃើញឯកសារភាសាសម្រាប់ភាសា <b>%1</b> នៅក្នុង <b><nobr>%2</nobr></b>ទេ ។</p><p>ភាសានឹងត្រូវបានកំណត់ឡើងវិញជាបណ្ដោះអាសន្នទៅភាសាលំនាំដើមរបស់ប្រព័ន្ធ ។ សូមចូលទៅប្រអប់ <b>ចំណូលចិត្ត</b> ដែលអ្នកអាចបើកពីម៉ឺនុយ <b>ឯកសារ</b> នៃបង្អួច VirtualBox មេ ហើយជ្រើសភាសាមួយក្នុងចំណោមភាសាដែលមាននៅលើទំព័រ <b>ភាសា</b> ។</p></translation> </message> <message> - <source>Disable</source> - <comment>hard disk</comment> - <translation>បានបិទ</translation> + <source><p>Could not load the language file <b><nobr>%1</nobr></b>. <p>The language will be temporarily reset to English (built-in). Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> + <translation><p>មិនអាចផ្ទុកឯកសារភាសា <b><nobr>%1</nobr></b> បានទេ ។ <p>ភាសានឹងត្រូវបានកំណត់ទៅជាភាសាអង់គ្លេសជាបណ្ដោះអាសន្ន ។ សូមចូលទៅប្រអប់ <b>ចំណូលចិត្ត</b> ដែលអ្នកអាចបើកពីម៉ឺនុយ <b>ឯកសារ</b> នៃបង្អួច VirtualBox មេ ហើយជ្រើសភាសាមួយក្នុងចំណោមភាសាដែលមានស្រាប់នៅលើទំព័រ <b>ភាសា</b> ។</p></translation> </message> <message> - <source>Download</source> - <comment>additions</comment> - <translation>ទាញយក</translation> + <source><p>VirtualBox Guest Additions installed in the Guest OS are too old: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) will most likely stop working properly.</p><p>Please update Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> + <translation><p>ផ្នែកបន្ថែមភាសាភ្ញៀវរបស់ VirtualBox បានដំឡើងនៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវចាស់ពេក ៖ កំណែដែលបានដំឡើងគឺ %1 កំណែដែលរំពឹងទុកគឺ %2 ។ លក្ខណៈពិសេសមួយចំនួនត្រូវការផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ (ការរួមបញ្ចូលកណ្ដុរ បង្ហាញការផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិរបស់ម៉ាស៊ីនភ្ញៀវ) នឹងបញ្ឈប់ដំណើរការយ៉ាងត្រឹមត្រូវ ។</p><p>សូមធ្វើឲ្យផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវទាន់សម័យទៅកំណែបច្ចុប្បន្ន ដោយជ្រើស <b>ដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ</b> ពីម៉ឺនុយ <b>ឧបករណ៍</b> ។</p></translation> </message> <message> - <source>Mount</source> - <comment>additions</comment> - <translation>ម៉ោន</translation> + <source><p>VirtualBox Guest Additions installed in the Guest OS are outdated: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) may not work as expected.</p><p>It is recommended to update Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> + <translation><p>ផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ VirtualBox បានដំឡើងនៅក្នុងប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវគឺហួសសម័យហើយ ៖ កំណែដែលបានដំឡើងគឺ %1 កំណែដែលរំពឹងទុកគឺ %2 ។ លក្ខណៈពិសេសមួយចំនួនដែលត្រូវការផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ (ការរួមបញ្ចូលកណ្ដុរ បង្ហាញការផ្លាស់ប្ដូរទំហំដោយស្វ័យប្រវត្តិរបស់ម៉ាស៊ីនភ្ញៀវ) មិនអាចដំណើរការដូចដែលបានរំពឹងទុកទេ ។</p><p>វាត្រូវបានផ្ដល់អនុសាសន៍ឲ្យធ្វើឲ្យផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវទាន់សម័យទៅកណែបច្ចុប្បន្ន ដោយជ្រើស <b>ដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ</b> ពីម៉ឺនុយ <b>ឧបករណ៍</b> ។</p></translation> </message> <message> - <source><p>The host key is currently defined as <b>%1</b>.</p></source> - <comment>additional message box paragraph</comment> - <translation><p>គ្រាប់ចុចម៉ាស៊ីនបច្ចុប្បន្នត្រូវបានកំណត់ជា <b>%1</b> ។</p></translation> + <source><p>VirtualBox Guest Additions installed in the Guest OS are too recent for this version of VirtualBox: the installed version is %1, the expected version is %2.</p><p>Using a newer version of Additions with an older version of VirtualBox is not supported. Please install the current version of Guest Additions by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> + <translation><p>ផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox នៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវថ្មីពេកសម្រាប់កំណែរបស់ VirtualBox ៖ កំណែដែលបានដំឡើងគឺ %1 កំណែដែលរំពឹងទុកគឺ %2 ។</p><p>ការប្រើកំណែថ្មីរបស់បន្ថែមផ្នែកបន្ថែមជាងកំណែចាស់របស់ VirtualBox មិនត្រូវបានគាំទ្រទេ ។ សូមដំឡើងកំណែបច្ចុប្បន្នរបស់ផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ ដោយជ្រើស<b>ដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវ</b> ពីម៉ឺនុយ <b>ឧបករណ៍</b> ។</p></translation> </message> <message> - <source>Capture</source> - <comment>do input capture</comment> - <translation>ចាប់យក</translation> + <source>Failed to change the snapshot folder path of the virtual machine <b>%1<b> to <nobr><b>%2</b></nobr>.</source> + <translation>បានបរាជ័យក្នុងការផ្លាស់ប្ដូរផ្លូវថតរូបថតរបស់ម៉ាស៊ីននិម្មិត <b>%1<b> ទៅ <nobr><b>%2</b></nobr> ។</translation> </message> <message> - <source>Check</source> - <comment>inaccessible media message box</comment> - <translation>ពិនិត្យមើល</translation> + <source><p>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p><p>Please close all programs in the guest OS that may be using this shared folder and try again.</p></source> + <translation><p>បានបរាជ័យក្នុងការយកថតដែលបានចែករំលែក <b>%1</b> ចេញ (ចង្អុលទៅ <nobr><b>%2</b></nobr>) ពីម៉ាស៊ីននិម្មិត <b>%3</b> ។</p><p>សូមបិទកម្មវិធីទាំងអស់នៅក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវដែលអាចកំពុងប្រើថតដែលបានចែករំលែកនេះ ហើយព្យាយាមម្ដងទៀត ។</p></translation> </message> <message> - <source>&Backup</source> - <comment>warnAboutAutoConvertedSettings message box</comment> - <translation>បម្រុងទុក</translation> + <source><p>Could not find the VirtualBox Guest Additions CD image file <nobr><b>%1</b></nobr> or <nobr><b>%2</b>.</nobr></p><p>Do you want to download this CD image from the Internet?</p></source> + <translation><p>មិនអាចរកឯកសាររូបភាពស៊ីឌីបន្ថែមម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox <nobr><b>%1</b></nobr> ឬ <nobr><b>%2</b> ។</nobr></p><p>តើអ្នកចង់ទាញយករូបភាពស៊ីឌីពីអ៊ីនធឺណិតដែរឬទេ ?</p></translation> </message> <message> - <source>Switch</source> - <comment>fullscreen</comment> - <translation>ប្ដូរ</translation> + <source><p>Failed to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> + <translation><p>បានបរាជ័យក្នុងការទាញយករូបភាពស៊ីឌីបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox ពី <nobr><a href="%1">%2</a> ។</nobr></p><p>%3</p></translation> </message> <message> - <source>Switch</source> - <comment>seamless</comment> - <translation>ប្ដូរ</translation> + <source><p>Are you sure you want to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> + <translation><p>តើអ្នកប្រាកដជាចង់ទាញយករូបភាពស៊ីឌីបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវរបស់ VirtualBox ពី <nobr><a href="%1">%2</a></nobr> (ទំហំ %3 បៃ) ដែរឬទេ?</p></translation> </message> <message> - <source><p>Do you really want to reset the virtual machine?</p><p>When the machine is reset, unsaved data of all applications running inside it will be lost.</p></source> - <translation><p>តើអ្នកពិតជាចង់កំណត់ម៉ាស៊ីននិម្មិតឡើងវិញដែរឬទេ ?</p><p>នៅពេលម៉ាស៊ីនត្រូវបានកំណត់ឡើងវិញ ទិន្នន័យរបស់កម្មវិធីដែលមិនបានរក្សាទុកទាំងអស់ដែលកំពុងរត់វានឹងត្រូវបានបាត់បង់ ។</p></translation> + <source><p>The VirtualBox Guest Additions CD image has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p><p>Do you want to register this CD image and mount it on the virtual CD/DVD drive?</p></source> + <translation><p>រូបភាពស៊ីឌីផ្នែកនែកបន្ថែមម៉ាស៊ីនភ្ញៀវ VirtualBត្រូវបានទាញយកដោយជោគជ័យពីr<nobr><a href="%1">%2</a></nobr>bហើយបានរក្សាទុកក្នុងមូលដ្ឋានជា as <nobr><b>%3</b> ។</nobr></p><p>តើអ្នកចង់ចុះឈ្មោះរូបភាពស៊ីឌីនេះ ហើយម៉ោនវានៅលើដ្រាយស៊ីឌី/ឌីវីឌីនិម្មិតដែរឬទេ ?ve?</p></translation> </message> <message> - <source>Reset</source> - <comment>machine</comment> - <translation>កំណត់ឡើងវិញ</translation> + <source><p>The virtual machine window is optimized to work in <b>%1&nbsp;bit</b> color mode but the color quality of the virtual display is currently set to <b>%2&nbsp;bit</b>.</p><p>Please open the display properties dialog of the guest OS and select a <b>%3&nbsp;bit</b> color mode, if it is available, for best possible performance of the virtual video subsystem.</p><p><b>Note</b>. Some operating systems, like OS/2, may actually work in 32&nbsp;bit mode but report it as 24&nbsp;bit (16 million colors). You may try to select a different color quality to see if this message disappears or you can simply disable the message now if you are sure the required color quality (%4&nbsp;bit) is not available in the given guest OS.</p></source> + <translation><p>បង្អួចម៉ាស៊ីននិម្មិតត្រូវបានធ្វើឲ្យប្រសើរដើម្បីធ្វើការក្នុងរបៀបពណ៌ <b>%1&nbsp;ប៊ីត</b> ប៉ុន្តែគុណភាពពណ៌នៃការបង្ហាញនិម្មិតបច្ចុប្បន្នត្រូវបានកំណត់ទៅ <b>%2&nbsp;ប៊ីត</b> ។</p><p>សូមបើកប្រអប់លក្ខណៈសម្បត្តិបង្ហាញរបស់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ហើយជ្រើសរបៀបពណ៌ <b>%3&nbsp;ប៊ីត</b> ប្រសិនបើមាន សម្រាប់ការអនុវត្តដ៏ល្អបំផុតរបស់ប្រព័ន្ធរងវីដែអូនិម្មិត ។</p><p><b>ចំណាំ</b> ។ ប្រព័ន្ធប្រតិបត្តិការមួយចំនួន ដូចជា OS/2 អាចដំណើរការយ៉ាងពិតប្រាកដនៅក្នុងរបៀប ៣២&nbsp;ប៊ីត ប៉ុន្តែរាយការណ៍ជា ២៤&nbsp;ប៊ីត (១៦ លានពណ៌) ។ អ្នកអាចព្យាយាមជ្រើសគុណភាពពណ៌ផ្សេងដើម្បីមើលថាតើសារនេះមិនបង្ហាញ ឬអ្នកអាចបិទសារយ៉ាងសាមញ្ញ ឥឡូវប្រសិនបើអ្នកប្រាកដគុណភាពពណ៌ដែលត្រូវការ (%4&nbsp;ប៊ីត) មិនអាចប្រើបាននៅក្នុងប្រព័ន្ធ ប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវដែលបានផ្ដល់ឲ្យទេ ។</p></translation> </message> <message> - <source>Continue</source> - <comment>no hard disk attached</comment> - <translation>បន្ត</translation> + <source><p>You didn't attach a hard disk to the new virtual machine. The machine will not be able to boot unless you attach a hard disk with a guest operating system or some other bootable media to it later using the machine settings dialog or the First Run Wizard.</p><p>Do you want to continue?</p></source> + <translation><p>អ្នកមិនបានភ្ជាប់ថាសរឹងទៅកាន់ម៉ាស៊ីននិម្មិតថ្មីទេ ។ ម៉ាស៊ីននឹងមិនអាចចាប់ផ្ដើមបានទេ លុះត្រាតែអ្នកភ្ជាប់ថាសរឹងជាមួយប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ ឬមេឌៀចាប់ផ្ដើមផ្សេងៗមួយចំនួនទៀតទៅវា ពេលក្រោយប្រើប្រអប់កំណត់ម៉ាស៊ីន ឬរត់អ្នកជំនួយការសិន ។</p><p>តើអ្នកចង់បន្តដែរឬទេ ?</p></translation> </message> <message> - <source>Go Back</source> - <comment>no hard disk attached</comment> - <translation>ទៅក្រោយ</translation> + <source>Failed to find license files in <nobr><b>%1</b></nobr>.</source> + <translation>បានបរាជ័យយក្នុងការរកឯកសារអាជ្ញាបណ្ណនៅក្នុង <nobr><b>%1</b></nobr> ។</translation> </message> <message> - <source>Failed to copy file <b><nobr>%1</nobr></b> to <b><nobr>%2</nobr></b> (%3).</source> - <translation>បានបរាជ័យក្នុងការចម្លងឯកសារ <b><nobr>%1</nobr></b> ទៅ <b><nobr>%2</nobr></b> (%3) ។</translation> + <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source> + <translation>បានបរាជ័យក្នុងការបើកឯកសារអាជ្ញាប័ណ្ណ <nobr><b>%1</b></nobr> ។ ពិនិត្យមើលសិទ្ធិរបស់ឯកសារ ។</translation> </message> <message> - <source>&Create</source> - <comment>hard disk</comment> - <translation>បង្កើត</translation> + <source>Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការផ្ញើការចុចប៊ូតុងថាមពល ACPI ទៅកាន់ម៉ាស៊ីននិម្មិត <b>%1</b> ។</translation> </message> <message> - <source>Select</source> - <comment>hard disk</comment> - <translation>ជ្រើស</translation> + <source><p>Congratulations! You have been successfully registered as a user of VirtualBox.</p><p>Thank you for finding time to fill out the registration form!</p></source> + <translation><p>សូមអបអរសាទរ ! អ្នកបានចុះឈ្មោះជាអ្នកប្រើ VirtualBox ដោយជោគជ័យហើយ ។ </p><p>សូមអរគុណចំពោះការចំណាយពេលវេលាបំពេញសំណុំបែបបទចុះឈ្មោះ !</p></translation> </message> <message> - <source><p>Could not enter seamless mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p></source> - <translation><p>មិនអាចចូលរបៀបគ្មានថេរ ដោយសារតែសតិវីដេអូម៉ាស៊ីនភ្ញៀវមិនគ្រប់គ្រាន់ ។</p><p>អ្នកគួរកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីននិម្មិតយ៉ាងហោចណាស់មានសតិវីដេអូ <b>%1</b> ។</p></translation> + <source><p>Failed to register the VirtualBox product</p><p>%1</p></source> + <translation><p>បានបរាជ័យក្នុងការចុះឈ្មោះផលិតផល VirtualBox</p><p>%1</p></translation> </message> <message> - <source><p>Could not switch the guest display to fullscreen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to fullscreen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source> - <translation><p>មិនអាចប្ដូរការបង្ហាញរបស់ម៉ាស៊ីនភ្ញៀវទៅរបៀបពេញអេក្រង់បានទេ ដោយសារតែសតិវីដេអូរបស់ម៉ាស៊ីនភ្ញៀវមិនគ្រប់គ្រាន់ ។</p><p>អ្នកគួរកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីននិម្មិតឲ្យមានសតិយ៉ាងហោចណាស់ <b>%1</b> នៃសតិវីដេអូ ។</p><p>ចុច <b>មិនអើពើ</b> ដើម្បីប្ដូរទៅរបៀបពេញអេក្រង់ ឬបើមិនដូច្នេះទេចុច <b>បោះបង់</b> ដើម្បីបោះបង់ប្រតិបត្តិការ ។</p></translation> + <source><p>Failed to save the global VirtualBox settings to <b><nobr>%1</nobr></b>.</p></source> + <translation><p>បានបរាជ័យក្នុងការរក្សាទុកការកំណត់ VirtualBox សកលទៅកាន់ <b><nobr>%1</nobr></b> ។</p></translation> </message> <message> - <source>You have already installed the latest VirtualBox version. Please repeat the version check later.</source> - <translation>អ្នកបានដំឡើងកំណែ VirtualBox ចុងក្រោយបំផុតរួចហើយ ។ សូមពិនិត្យមើលកំណែពេលក្រោយ ។</translation> + <source><p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source> + <translation><p>បានបរាជ័យក្នុងការផ្ទុកការកំណត់រចនាសម្ព័ន្ធចំណុចប្រទាក់អ្នកប្រើសកលពី <b><nobr>%1</nobr></b> ។</p><p>កម្មវិធីនឹងបិទឥឡូវ ។</p></translation> </message> <message> - <source><p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer integration is not currently supported by the guest OS) and the keyboard, which will make them unavailable to other applications running on your host machine.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation><p>អ្នកបាន <b>ចុចកណ្ដុរ</b> ខាងក្នុងការបង្ហាញរបស់ម៉ាស៊ីននិម្មិត ឬបានចុច <b>គ្រាប់ចុច host</b> ។ វានឹងធ្វើឲ្យម៉ាស៊ីននិម្មិត <b>ចាប់យក</b> ទស្សន៍ទ្រនិចកណ្ដុររបស់ម៉ាស៊ីន (តែក្នុងករណីដែលការរួមបញ្ចូលទស្សន៍ទ្រនិចបច្ចុប្បន្នមិនត្រូវបានគាំទ្រដោយប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវទេ ។) ហើយនឹងក្ដារចុច ដែលនឹងធ្វើឲ្យកម្មវិធីផ្សេងៗដែលកំពុងរត់ក្នុងម៉ាស៊ីនរបស់មិនអាចប្រើបានទេ ។</p><p>អ្នកអាចចុច <b>គ្រាប់ចុច host</b> នៅពេលណាមួយដើម្បី <b>មិនចាប់យក</b> ក្ដារចុច និងកណ្ដុរ (ប្រសិនបើត្រូវបានចាប់យក) ហើយត្រឡប់ទៅប្រតិបត្តិការធម្មតាវិញ ។ បច្ចុប្បន្នបានផ្ដល់គ្រាប់ចុច host ត្រូវបានបង្ហាញនៅក្នុងរបារស្ថានភាពនៅផ្នែកខាងក្រោមរបស់បង្អួចម៉ាស៊ីននិម្មិត នៅជាប់នឹងរូបតំណាង&nbsp;<img src=:/hostkey_16px.png/>&nbsp; ។ រូបតំណាងនេះ រួមជាមួយនឹងរូបតំណាងកណ្ដុរដែលនៅជាប់នោះ បង្ហាញនូវក្ដារចុច និងស្ថានភាពចាប់យកកណ្ដុរបច្ចុប្បន្ន ។</p></translation> + <source><p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source> + <translation><p>បានបរាជ័យក្នុងការរក្សាទុកការកំណត់រចនាសម្ព័ន្ធចំណុចប្រទាក់អ្នកប្រើសកលទៅ<b><nobr>%1</nobr></b> ។</p><p>កម្មវិធីនឹងបិទឥឡូវ ។</p></translation> </message> <message> - <source><p>You have the <b>Auto capture keyboard</b> option turned on. This will cause the Virtual Machine to automatically <b>capture</b> the keyboard every time the VM window is activated and make it unavailable to other applications running on your host machine: when the keyboard is captured, all keystrokes (including system ones like Alt-Tab) will be directed to the VM.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation><p>អ្នកបានបើកជម្រើស <b>ចាប់យកក្ដារចុចដោយស្វ័យប្រវត្តិ</b> ។ វានឹងធ្វើឲ្យម៉ាស៊ីននិម្មិត <b>ចាប់យក</b> ក្ដារចុចដោយស្វ័យប្រវត្តិរាល់ពេលដែលបង្អួច VM ត្រូវបានធ្វើឲ្យសកម្ម ហើយធ្វើឲ្យវាមិនអាចប្រើបានចំពោះកម្មវិធីផ្សេងៗដែលកំពុងរត់ក្នុងម៉ាស៊ីនរបស់អ្នក ៖ នៅពេលក្ដារចុចត្រូវបានចាប់យក keystrokes ទាំង អស់ (រួមមានប្រព័ន្ធមួយដូចជា ជំនួស(Alt)-ថេប(Tab)) នឹងត្រូវបញ្ជូនបន្តទៅ VM ។</p><p>អ្នកអាចចុច <b>គ្រាប់ចុច host</b> នៅពេលណាមួយទៅ <b>មិនចាប់យក</b> ក្ដារចុច និងកណ្ដុរ (ប្រសិនបើត្រូវបានចាប់យក) និងត្រឡប់ពួកវាទៅប្រតិបត្តិការធម្មតាវិញ ។ បច្ចុប្បន្នបានផ្ដល់គ្រាប់ចុច host ត្រូវបានបង្ហាញនៅលើរបារស្ថានភាពនៅផ្នែកខាងក្រោមរបស់បង្អួចនិម្មិត នៅជាប់នឹងរូបតំណាង&nbsp;<img src=:/hostkey_16px.png/>&nbsp; ។ រូបតំណាងនេះ រួមជាមួយនឹងរូបតំណាងកណ្ដុរនៅជាប់គ្នានោះ បង្ហាញក្ដារចុច និងស្ថានភាពចាប់យកកណ្ដុរបច្ចុប្បន្ន ។</p></translation> + <source>Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.</source> + <translation>បានបរាជ័យក្នុងការរក្សាទុកការកំណត់របស់ម៉ាស៊ីននិម្មិត <b>%1</b> ទៅ<b><nobr>%2</nobr></b> ។</translation> </message> <message> - <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the status bar will look like&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;to inform you that mouse pointer integration is supported by the guest OS and is currently turned on.</p><p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. You can always disable it for the current session (and enable it again) by selecting the corresponding action from the menu bar.</p></source> - <translation><p>ម៉ាស៊ីននិម្មិតរាយការណ៍ថាប្រព័ន្ធប្រតិបត្តិការគាំទ្រ <b>ការរួមបញ្ចូលទស្សន៍ទ្រនិចកណ្ដុរ</b> ។ នេះមានន័យថា អ្នកមិនចាំបាច់ <i>ចាប់យក</i> ទស្សន៍ទ្រនិចកណ្ដុរ ដើម្បីអាចប្រើវានៅក្នុងប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវបានទេ -- សកម្មភាពកណ្ដុរទាំងអស់ដែលអ្នកអនុវត្តនៅពេលទស្សន៍ទ្រនិចកណ្ដុរនៅលើការបង្ហាញរបស់ម៉ាស៊ីននិម្មិត ត្រូវបានបញ្ជូនដោយផ្ទាល់ទៅប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។ ប្រសិនបើកណ្ដុរបច្ចុប្បន្នត្រូវបានចាប់យក វានឹងមិនត្រូវបានចាប់យកដោយស្វ័យប្រវត្តិទេ ។</p><p>រូបតំណាងកណ្ដុរនៅលើរបារស្ថានភាពនឹងមានរូបរាងដូចជា&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;ដើម្បីប្រាប់អ្នកថា ការរួមបញ្ចូលទស្សន៍ទ្រនិចកណ្ដុរត្រូវបានគាំទ្រដោយប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ និងបច្ចុប្បន្នត្រូវបានបើក ។</p><p><b>ចំណាំ</b> ៖ កម្មវិធីមួយចំនួនអាចមានឥរិយាបទមិនត្រឹមត្រូវនៅក្នុងរបៀបរួមបញ្ចូលទស្សន៍ទ្រនិចកណ្ដុរ ។ អ្នកអាចបិទវាជានិច្ចសម្រាប់សម័យបច្ចុប្បន្ន (ហើយបើកវាម្ដងទៀត) ដោយជ្រើសសកម្មភាពដែលទាក់ទងពីរបារម៉ឺនុយ ។</p></translation> + <source>Failed to load the settings of the virtual machine <b>%1</b> from <b><nobr>%2</nobr></b>.</source> + <translation>បានបរាជ័យក្នុងការផ្ទុកការកំណត់របស់ម៉ាស៊ីននិម្មិត <b>%1</b> ពី <b><nobr>%2</nobr></b> ។</translation> </message> <message> - <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation><p>បង្អួចម៉ាស៊ីននិម្មិតនឹងត្រូវបានប្ដូរទៅរបៀប <b>ពេញអេក្រង់</b> ឥឡូវ ។ អ្នកអាចត្រឡប់ក្រោយទៅរបៀបបង្អួច នៅពេលណាមួយ ដោយចុច <b>%1</b> ។ ចំណាំថា គ្រាប់ចុច <i>ម៉ាស៊ីន</i> បច្ចុប្បន្នត្រូវបានកំណត់ជា <b>%2</b> ។</p><p>ចំណាំថា របារម៉ឺនុយមេត្រូវបានលាក់ក្នុងរបៀបពេញអេក្រង់ ។ អ្នកអាចចូលដំណើរការវាដោយចុច <b>ម៉ាស៊ីន(Host)+ដើម(Home)</b>.</p></translation> + <source>Delete</source> + <comment>machine</comment> + <translation>លុប</translation> </message> <message> - <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation><p>បង្អួចម៉ាស៊ីននិម្មិតនឹងត្រូវបានប្ដូរទៅរបៀប <b>គ្មានថ្នេរ</b> ឥឡូវ ។ អ្នកអាចត្រឡប់ទៅរបៀបបង្អួចនៅពេលណាមួយដោយចុច <b>%1</b> ។ ចំណាំថា គ្រាប់ចុច <i>Host</i> បច្ចុប្បន្នត្រូវបានកំណត់ជា <b>%2</b> ។</p><p>ចំណាំថា របារម៉ឺនុយមេត្រូវបានលាក់នៅក្នុងរបៀបគ្មានថ្នេរ ។ អ្នកអាចចូលដំណើរការវា ដោយចុច <b>Host+ដើម(Home)</b> ។</p></translation> + <source>Unregister</source> + <comment>machine</comment> + <translation>មិនចុះឈ្មោះ</translation> </message> <message> - <source>&Contents...</source> - <translation>មាតិកា</translation> + <source>Discard</source> + <comment>saved state</comment> + <translation>បោះបង់</translation> </message> <message> - <source>Show the online help contents</source> - <translation>បង្ហាញមាតិកាជំនួយលើបណ្ដាញ</translation> + <source><p>There are hard disks attached to SATA ports of this virtual machine. If you disable the SATA controller, all these hard disks will be automatically detached.</p><p>Are you sure that you want to disable the SATA controller?</p></source> + <translation><p>មានថាសរឹងបានតភ្ជាប់ទៅច្រក SATA របស់ម៉ាស៊ីននិម្មិតនេះ ។ ប្រសិនបើអ្នកបិទវត្ថុបញ្ជា SATA ថាសរឹងទាំងនេះនឹងត្រូវបានផ្ដាច់ដោយស្វ័យប្រវត្តិ ។</p><p>តើអ្នកប្រាកដជាចង់បិទវត្ថុបញ្ជា SATA ដែរឬទេ ?</p></translation> </message> <message> - <source>&VirtualBox Web Site...</source> - <translation>តំបន់បណ្ដាញ VirtualBox...</translation> + <source>Disable</source> + <comment>hard disk</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Open the browser and go to the VirtualBox product web site</source> - <translation>បើកកម្មវិធីរុករក ហើយទៅកាន់តំបន់បណ្ដាញផលិតផលរបស់ VirtualBox</translation> + <source>Download</source> + <comment>additions</comment> + <translation>ទាញយក</translation> </message> <message> - <source>&Reset All Warnings</source> - <translation>កំណត់ការព្រមានទាំងអស់</translation> + <source>Mount</source> + <comment>additions</comment> + <translation>ម៉ោន</translation> </message> <message> - <source>Cause all suppressed warnings and messages to be shown again</source> - <translation>ធ្វើឲ្យការព្រមានទាំងអស់ដែលបានបង្ហាប់ ហើយសារត្រូវបានបង្ហាញម្ដងទៀត</translation> + <source><p>The host key is currently defined as <b>%1</b>.</p></source> + <comment>additional message box paragraph</comment> + <translation><p>គ្រាប់ចុចម៉ាស៊ីនបច្ចុប្បន្នត្រូវបានកំណត់ជា <b>%1</b> ។</p></translation> </message> <message> - <source>R&egister VirtualBox...</source> - <translation>ចុះឈ្មោះ VirtualBox...</translation> + <source>Capture</source> + <comment>do input capture</comment> + <translation>ចាប់យក</translation> </message> <message> - <source>Open VirtualBox registration form</source> - <translation>បើកសំណុំបែបបទចុះឈ្មោះរបស់ VirtualBox</translation> + <source>Check</source> + <comment>inaccessible media message box</comment> + <translation>ពិនិត្យមើល</translation> </message> <message> - <source>C&heck for Updates...</source> - <translation>ពិនិត្យមើលភាពទាន់សម័យ...</translation> + <source>&Backup</source> + <comment>warnAboutAutoConvertedSettings message box</comment> + <translation>បម្រុងទុក</translation> </message> <message> - <source>Check for a new VirtualBox version</source> - <translation>ពិនិត្យមើលកំណែរបស់ VirtualBox ថ្មី</translation> + <source>Switch</source> + <comment>fullscreen</comment> + <translation>ប្ដូរ</translation> </message> <message> - <source>&About VirtualBox...</source> - <translation>អំពី VirtualBox...</translation> + <source>Switch</source> + <comment>seamless</comment> + <translation>ប្ដូរ</translation> </message> <message> - <source>Show a dialog with product information</source> - <translation>បង្ហាញប្រអប់ដែលមានព័ត៌មានផលិតផល</translation> + <source><p>Do you really want to reset the virtual machine?</p><p>When the machine is reset, unsaved data of all applications running inside it will be lost.</p></source> + <translation><p>តើអ្នកពិតជាចង់កំណត់ម៉ាស៊ីននិម្មិតឡើងវិញដែរឬទេ ?</p><p>នៅពេលម៉ាស៊ីនត្រូវបានកំណត់ឡើងវិញ ទិន្នន័យរបស់កម្មវិធីដែលមិនបានរក្សាទុកទាំងអស់ដែលកំពុងរត់វានឹងត្រូវបានបាត់បង់ ។</p></translation> </message> <message> - <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version from this direct link:</p><p><a href=%2>%3</a></p></source> - <translation><p>កំណែថ្មីរបស់ VirtualBox ត្រូវបានចេញផ្សាយ ! គឺកំណែ <b>%1</b> ដែលអាចរកបាននៅ <a href="http://www.virtualbox.org/">virtualbox.org</a> ។</p><p>អ្នកអាចទាញយកកំណែនេះពីតំណនេះដោយផ្ទាល់ ៖</p><p><a href=%2>%3</a></p></translation> + <source>Reset</source> + <comment>machine</comment> + <translation>កំណត់ឡើងវិញ</translation> </message> <message> - <source><p>Are you sure you want to release the %1 <nobr><b>%2</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%3</b>.</p></source> - <translation><p>តើអ្នកប្រាកដជាចង់ចេញផ្សាយ %1 <nobr><b>%2</b></nobr>?</p><p>វានឹងផ្ដាច់វាពីម៉ាស៊ីននិម្មិតដូចខាងក្រោម ៖ <b>%3</b> ។</p></translation> + <source>Continue</source> + <comment>no hard disk attached</comment> + <translation>បន្ត</translation> </message> <message> - <source>Release</source> - <comment>detach medium</comment> - <translation>ចេញផ្សាយ</translation> + <source>Go Back</source> + <comment>no hard disk attached</comment> + <translation>ទៅក្រោយ</translation> </message> <message> - <source><p>Are you sure you want to remove the %1 <nobr><b>%2</b></nobr> from the list of known media?</p></source> - <translation><p>តើអ្នកប្រាកដជាចង់យក %1 <nobr><b>%2</b></nobr> ចេញពីមេឌៀដែលបានស្គាល់ដែរឬទេ ?</p></translation> + <source>Failed to copy file <b><nobr>%1</nobr></b> to <b><nobr>%2</nobr></b> (%3).</source> + <translation>បានបរាជ័យក្នុងការចម្លងឯកសារ <b><nobr>%1</nobr></b> ទៅ <b><nobr>%2</nobr></b> (%3) ។</translation> </message> <message> - <source>Note that this hard disk is inaccessible so that its storage unit cannot be deleted right now.</source> - <translation>ចំណាំថា ថាសរឹងនេះមិនអាចចូលដំណើរការបានទេ ដូច្នេះឯកតាផ្ទុករបស់វាមិនអាចត្រូវបានលុបឥឡូវទេ ។</translation> + <source>&Create</source> + <comment>hard disk</comment> + <translation>បង្កើត</translation> </message> <message> - <source>The next dialog will let you choose whether you also want to delete the storage unit of this hard disk or keep it for later usage.</source> - <translation>ប្រអប់បន្ទាប់នឹងអនុញ្ញាតឲ្យអ្នកជ្រើសថាតើ អ្នកចង់លុបឯកតាផ្ទុករបស់ថាសរឹងនេះ ឬទុកវាសម្រាប់ប្រើពេលក្រោយ ។</translation> + <source>Select</source> + <comment>hard disk</comment> + <translation>ជ្រើស</translation> </message> <message> - <source><p>Note that the storage unit of this medium will not be deleted and therefore it will be possible to add it to the list later again.</p></source> - <translation><p>ចំណាំថា ឯកតាផ្ទុករបស់ឧបករណ៍ផ្ទុកនេះនឹងមិនត្រូវបានលុបទេ ហើយដូច្នេះវានឹងអាចបន្ថែមទៅកាន់បញ្ជីពេលក្រោយម្ដងទៀត ។</p></translation> + <source><p>Could not enter seamless mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p></source> + <translation><p>មិនអាចចូលរបៀបគ្មានថេរ ដោយសារតែសតិវីដេអូម៉ាស៊ីនភ្ញៀវមិនគ្រប់គ្រាន់ ។</p><p>អ្នកគួរកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីននិម្មិតយ៉ាងហោចណាស់មានសតិវីដេអូ <b>%1</b> ។</p></translation> </message> <message> - <source>Remove</source> - <comment>medium</comment> - <translation>យកចេញ</translation> + <source><p>Could not switch the guest display to fullscreen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to fullscreen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source> + <translation><p>មិនអាចប្ដូរការបង្ហាញរបស់ម៉ាស៊ីនភ្ញៀវទៅរបៀបពេញអេក្រង់បានទេ ដោយសារតែសតិវីដេអូរបស់ម៉ាស៊ីនភ្ញៀវមិនគ្រប់គ្រាន់ ។</p><p>អ្នកគួរកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីននិម្មិតឲ្យមានសតិយ៉ាងហោចណាស់ <b>%1</b> នៃសតិវីដេអូ ។</p><p>ចុច <b>មិនអើពើ</b> ដើម្បីប្ដូរទៅរបៀបពេញអេក្រង់ ឬបើមិនដូច្នេះទេចុច <b>បោះបង់</b> ដើម្បីបោះបង់ប្រតិបត្តិការ ។</p></translation> </message> <message> - <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source> - <translation><p>មានឯកតាផ្ទុករបស់ថាសរឹងនៅទីតាំង <b>%1</b> រួចហើយ ។ អ្នកមិនអាចបង្កើតថាសរឹងនិម្មិតថ្មីបានទេ ដែលប្រើទីតាំងនេះ ពីព្រោះវាអាចត្រូវបានប្រើដោយថាសរឹងនិម្មិតផ្សេង ។</p><p>សូមបញ្ជាក់ទីតាំងផ្សេង ។</p></translation> + <source>You have already installed the latest VirtualBox version. Please repeat the version check later.</source> + <translation>អ្នកបានដំឡើងកំណែ VirtualBox ចុងក្រោយបំផុតរួចហើយ ។ សូមពិនិត្យមើលកំណែពេលក្រោយ ។</translation> </message> <message> - <source><p>Do you want to delete the storage unit of the hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which makes it possible to add this hard disk to the list later again.</p></source> - <translation><p>តើអ្នកចង់លុបឯកតាផ្ទុករបស់ថាសរឹង <nobr><b>%1</b></nobr>ដែរឬទេ?</p><p>ប្រសិនបើអ្នកជ្រើស <b>លុប</b> បន្ទាប់មកឯកតាផ្ទុកដែលបានបញ្ជាក់នឹងត្រូវបានលុបជាអចិន្ត្រៃយ៍ ។ ប្រតិបត្តិការនេះ <b>មិនអាចត្រូវបានធ្វើវិញបានទេ</b> ។</p><p>ប្រសិនបើអ្នកជ្រើស <b>រក្សាទុក</b> បន្ទាប់មកថាសរឹងនឹងត្រូវបានយកចេញតែពីបញ្ជីរបស់ថាសរឹងដែលស្គាល់ប៉ុណ្ណោះ ប៉ុន្តែឯកតាផ្ទុកនឹងមិនត្រូវបានប៉ះពាល់ទេ ដែលធ្វើឲ្យវាអាចបន្ថែមថាសរឹងនេះទៅកាន់បញ្ជីពេលក្រោយម្ដងទៀតបាន ។</p></translation> + <source><p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer integration is not currently supported by the guest OS) and the keyboard, which will make them unavailable to other applications running on your host machine.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> + <translation><p>អ្នកបាន <b>ចុចកណ្ដុរ</b> ខាងក្នុងការបង្ហាញរបស់ម៉ាស៊ីននិម្មិត ឬបានចុច <b>គ្រាប់ចុច host</b> ។ វានឹងធ្វើឲ្យម៉ាស៊ីននិម្មិត <b>ចាប់យក</b> ទស្សន៍ទ្រនិចកណ្ដុររបស់ម៉ាស៊ីន (តែក្នុងករណីដែលការរួមបញ្ចូលទស្សន៍ទ្រនិចបច្ចុប្បន្នមិនត្រូវបានគាំទ្រដោយប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវទេ ។) ហើយនឹងក្ដារចុច ដែលនឹងធ្វើឲ្យកម្មវិធីផ្សេងៗដែលកំពុងរត់ក្នុងម៉ាស៊ីនរបស់មិនអាចប្រើបានទេ ។</p><p>អ្នកអាចចុច <b>គ្រាប់ចុច host</b> នៅពេលណាមួយដើម្បី <b>មិនចាប់យក</b> ក្ដារចុច និងកណ្ដុរ (ប្រសិនបើត្រូវបានចាប់យក) ហើយត្រឡប់ទៅប្រតិបត្តិការធម្មតាវិញ ។ បច្ចុប្បន្នបានផ្ដល់គ្រាប់ចុច host ត្រូវបានបង្ហាញនៅក្នុងរបារស្ថានភាពនៅផ្នែកខាងក្រោមរបស់បង្អួចម៉ាស៊ីននិម្មិត នៅជាប់នឹងរូបតំណាង&nbsp;<img src=:/hostkey_16px.png/>&nbsp; ។ រូបតំណាងនេះ រួមជាមួយនឹងរូបតំណាងកណ្ដុរដែលនៅជាប់នោះ បង្ហាញនូវក្ដារចុច និងស្ថានភាពចាប់យកកណ្ដុរបច្ចុប្បន្ន ។</p></translation> </message> <message> - <source>Delete</source> - <comment>hard disk storage</comment> - <translation>លុប</translation> + <source><p>You have the <b>Auto capture keyboard</b> option turned on. This will cause the Virtual Machine to automatically <b>capture</b> the keyboard every time the VM window is activated and make it unavailable to other applications running on your host machine: when the keyboard is captured, all keystrokes (including system ones like Alt-Tab) will be directed to the VM.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> + <translation><p>អ្នកបានបើកជម្រើស <b>ចាប់យកក្ដារចុចដោយស្វ័យប្រវត្តិ</b> ។ វានឹងធ្វើឲ្យម៉ាស៊ីននិម្មិត <b>ចាប់យក</b> ក្ដារចុចដោយស្វ័យប្រវត្តិរាល់ពេលដែលបង្អួច VM ត្រូវបានធ្វើឲ្យសកម្ម ហើយធ្វើឲ្យវាមិនអាចប្រើបានចំពោះកម្មវិធីផ្សេងៗដែលកំពុងរត់ក្នុងម៉ាស៊ីនរបស់អ្នក ៖ នៅពេលក្ដារចុចត្រូវបានចាប់យក keystrokes ទាំង អស់ (រួមមានប្រព័ន្ធមួយដូចជា ជំនួស(Alt)-ថេប(Tab)) នឹងត្រូវបញ្ជូនបន្តទៅ VM ។</p><p>អ្នកអាចចុច <b>គ្រាប់ចុច host</b> នៅពេលណាមួយទៅ <b>មិនចាប់យក</b> ក្ដារចុច និងកណ្ដុរ (ប្រសិនបើត្រូវបានចាប់យក) និងត្រឡប់ពួកវាទៅប្រតិបត្តិការធម្មតាវិញ ។ បច្ចុប្បន្នបានផ្ដល់គ្រាប់ចុច host ត្រូវបានបង្ហាញនៅលើរបារស្ថានភាពនៅផ្នែកខាងក្រោមរបស់បង្អួចនិម្មិត នៅជាប់នឹងរូបតំណាង&nbsp;<img src=:/hostkey_16px.png/>&nbsp; ។ រូបតំណាងនេះ រួមជាមួយនឹងរូបតំណាងកណ្ដុរនៅជាប់គ្នានោះ បង្ហាញក្ដារចុច និងស្ថានភាពចាប់យកកណ្ដុរបច្ចុប្បន្ន ។</p></translation> </message> <message> - <source>Keep</source> - <comment>hard disk storage</comment> - <translation>រក្សាទុក</translation> + <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the status bar will look like&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;to inform you that mouse pointer integration is supported by the guest OS and is currently turned on.</p><p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. You can always disable it for the current session (and enable it again) by selecting the corresponding action from the menu bar.</p></source> + <translation><p>ម៉ាស៊ីននិម្មិតរាយការណ៍ថាប្រព័ន្ធប្រតិបត្តិការគាំទ្រ <b>ការរួមបញ្ចូលទស្សន៍ទ្រនិចកណ្ដុរ</b> ។ នេះមានន័យថា អ្នកមិនចាំបាច់ <i>ចាប់យក</i> ទស្សន៍ទ្រនិចកណ្ដុរ ដើម្បីអាចប្រើវានៅក្នុងប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវបានទេ -- សកម្មភាពកណ្ដុរទាំងអស់ដែលអ្នកអនុវត្តនៅពេលទស្សន៍ទ្រនិចកណ្ដុរនៅលើការបង្ហាញរបស់ម៉ាស៊ីននិម្មិត ត្រូវបានបញ្ជូនដោយផ្ទាល់ទៅប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។ ប្រសិនបើកណ្ដុរបច្ចុប្បន្នត្រូវបានចាប់យក វានឹងមិនត្រូវបានចាប់យកដោយស្វ័យប្រវត្តិទេ ។</p><p>រូបតំណាងកណ្ដុរនៅលើរបារស្ថានភាពនឹងមានរូបរាងដូចជា&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;ដើម្បីប្រាប់អ្នកថា ការរួមបញ្ចូលទស្សន៍ទ្រនិចកណ្ដុរត្រូវបានគាំទ្រដោយប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ និងបច្ចុប្បន្នត្រូវបានបើក ។</p><p><b>ចំណាំ</b> ៖ កម្មវិធីមួយចំនួនអាចមានឥរិយាបទមិនត្រឹមត្រូវនៅក្នុងរបៀបរួមបញ្ចូលទស្សន៍ទ្រនិចកណ្ដុរ ។ អ្នកអាចបិទវាជានិច្ចសម្រាប់សម័យបច្ចុប្បន្ន (ហើយបើកវាម្ដងទៀត) ដោយជ្រើសសកម្មភាពដែលទាក់ទងពីរបារម៉ឺនុយ ។</p></translation> </message> <message> - <source>Failed to delete the storage unit of the hard disk <b>%1</b>.</source> - <translation>បានបរាជ័យក្នុងការលុបការផ្ទុករបស់ថាសរឹង <b>%1</b> ។</translation> + <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> + <translation><p>បង្អួចម៉ាស៊ីននិម្មិតនឹងត្រូវបានប្ដូរទៅរបៀប <b>ពេញអេក្រង់</b> ឥឡូវ ។ អ្នកអាចត្រឡប់ក្រោយទៅរបៀបបង្អួច នៅពេលណាមួយ ដោយចុច <b>%1</b> ។ ចំណាំថា គ្រាប់ចុច <i>ម៉ាស៊ីន</i> បច្ចុប្បន្នត្រូវបានកំណត់ជា <b>%2</b> ។</p><p>ចំណាំថា របារម៉ឺនុយមេត្រូវបានលាក់ក្នុងរបៀបពេញអេក្រង់ ។ អ្នកអាចចូលដំណើរការវាដោយចុច <b>ម៉ាស៊ីន(Host)+ដើម(Home)</b>.</p></translation> </message> <message> - <source><p>There are no unused hard disks available for the newly created attachment.</p><p>Press the <b>Create</b> button to start the <i>New Virtual Disk</i> wizard and create a new hard disk, or press the <b>Select</b> button to open the <i>Virtual Media Manager</i> and select what to do.</p></source> - <translation><p>មិនមានថាសរឹងដែលមិនបានប្រើទេ សម្រាប់ការភ្ជាប់ដែលបានបង្កើតថ្មីៗ ។</p><p>ចុចប៊ូតុង <b>បង្កើត</b> ដើម្បីចាប់ផ្ដើមអ្នកជំនួយការ <i>ថាសនិម្មិតថ្មី</i> ហើយបង្កើតថាសរឹងថ្មី ឬចុចប៊ូតុង <b>ជ្រើស</b> ដើម្បីបើក <i>កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត</i> ហើយជ្រើសអ្វីត្រូវធ្វើ ។</p></translation> + <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> + <translation><p>បង្អួចម៉ាស៊ីននិម្មិតនឹងត្រូវបានប្ដូរទៅរបៀប <b>គ្មានថ្នេរ</b> ឥឡូវ ។ អ្នកអាចត្រឡប់ទៅរបៀបបង្អួចនៅពេលណាមួយដោយចុច <b>%1</b> ។ ចំណាំថា គ្រាប់ចុច <i>Host</i> បច្ចុប្បន្នត្រូវបានកំណត់ជា <b>%2</b> ។</p><p>ចំណាំថា របារម៉ឺនុយមេត្រូវបានលាក់នៅក្នុងរបៀបគ្មានថ្នេរ ។ អ្នកអាចចូលដំណើរការវា ដោយចុច <b>Host+ដើម(Home)</b> ។</p></translation> </message> <message> - <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source> - <translation>បានបរាជ័យក្នុងការបង្កើតការផ្ទុកថាសរឹង <nobr><b>%1</b> ។</nobr></translation> + <source>&Contents...</source> + <translation>មាតិកា</translation> </message> <message> - <source>Failed to attach the hard disk <nobr><b>%1</b></nobr> to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>បានបរាជ័យក្នុងការភ្ជាប់ <nobr><b>%1</b></nobr> ទៅរន្ធ <i>%2</i> របស់ម៉ាស៊ីន <b>%3</b> ។</translation> + <source>Show the online help contents</source> + <translation>បង្ហាញមាតិកាជំនួយលើបណ្ដាញ</translation> </message> <message> - <source>Failed to detach the hard disk <nobr><b>%1</b></nobr> from the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>បានបរាជ័យក្នុងការផ្ដាច់ថាសរឹង <nobr><b>%1</b></nobr> ពីរន្ធ <i>%2</i> របស់ម៉ាស៊ីន <b>%3</b> ។</translation> + <source>&VirtualBox Web Site...</source> + <translation>តំបន់បណ្ដាញ VirtualBox...</translation> </message> <message> - <source>Failed to mount the %1 <nobr><b>%2</b></nobr> to the machine <b>%3</b>.</source> - <translation>បានបរាជ័យក្នុងការម៉ោន %1 <nobr><b>%2</b></nobr> ទៅម៉ាស៊ីន <b>%3</b> ។</translation> + <source>Open the browser and go to the VirtualBox product web site</source> + <translation>បើកកម្មវិធីរុករក ហើយទៅកាន់តំបន់បណ្ដាញផលិតផលរបស់ VirtualBox</translation> </message> <message> - <source>Failed to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>.</source> - <translation>បានបរាជ័យក្នុងការអាន់ម៉ោន %1 <nobr><b>%2</b></nobr> ពីម៉ាស៊ីន <b>%3</b> ។</translation> + <source>&Reset All Warnings</source> + <translation>កំណត់ការព្រមានទាំងអស់</translation> </message> <message> - <source>Failed to open the %1 <nobr><b>%2</b></nobr>.</source> - <translation>បានបរាជ័យក្នុងការបើក %1 <nobr><b>%2</b></nobr> ។</translation> + <source>Cause all suppressed warnings and messages to be shown again</source> + <translation>ធ្វើឲ្យការព្រមានទាំងអស់ដែលបានបង្ហាប់ ហើយសារត្រូវបានបង្ហាញម្ដងទៀត</translation> </message> <message> - <source>Failed to close the %1 <nobr><b>%2</b></nobr>.</source> - <translation>បានបរាជ័យក្នុងការបិទ %1 <nobr><b>%2</b></nobr> ។</translation> + <source>R&egister VirtualBox...</source> + <translation>ចុះឈ្មោះ VirtualBox...</translation> </message> <message> - <source>Failed to get the accessibility state of the medium <nobr><b>%1</b></nobr>.</source> - <translation>បានបរាជ័យក្នុងការចូលដំណើរការស្ថានភាពរបស់ឧបករណ៍ផ្ទុក <nobr><b>%1</b></nobr> ។</translation> + <source>Open VirtualBox registration form</source> + <translation>បើកសំណុំបែបបទចុះឈ្មោះរបស់ VirtualBox</translation> </message> <message> - <source><p>Failed to connect to the VirtualBox online registration service due to the following error:</p><p><b>%1</b></p></source> - <translation><p>បានបរាជ័យក្នុងការតភ្ជាប់ទៅកាន់សេវាចុះឈ្មោះលើបណ្ដាញរបស់ VirtualBox ដោយសារតែកំហុសដូចខាងក្រោម ៖</p><p><b>%1</b></p></translation> + <source>C&heck for Updates...</source> + <translation>ពិនិត្យមើលភាពទាន់សម័យ...</translation> </message> <message> - <source><p>Unable to obtain the new version information due to the following error:</p><p><b>%1</b></p></source> - <translation><p>មិនអាចទទួលយកព័ត៌មានកំណែថ្មីបានទេ ដោយសារតែកំហុសដូចខាងក្រោម ៖</p><p><b>%1</b></p></translation> + <source>Check for a new VirtualBox version</source> + <translation>ពិនិត្យមើលកំណែរបស់ VirtualBox ថ្មី</translation> </message> <message> - <source><p>One or more virtual hard disks, CD/DVD or floppy media are not currently accessible. As a result, you will not be able to operate virtual machines that use these media until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source> - <translation><p>ថាសរឹងនិម្មិតមួយ ឬច្រើន ស៊ីឌី/ឌីវីឌី ឬមេឌៀថាសទន់បច្ចុប្បន្នមិនអាចចូលដំណើរការបានទេ ។ ជាលទ្ធផល អ្នកនឹងមិនអាចប្រតិបត្តិម៉ាស៊ីននិម្មិត ដែលប្រើមេឌៀនេះបានទេ រហូតដល់ពួកវាអាចចូលដំណើរការបាននៅពេលក្រោយ ។</p><p>ចុច <b>ពិនិត្យមើល</b> ដើម្បីប្រើបង្អួចកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ហើយមើលអ្វីដែលមេឌៀមិនអាចចូលដំណើរការបាន ឬចុច <b>មិនអើពើ</b> ដើម្បីមិនអើពើនឹងសារនេះ ។</p></translation> + <source>&About VirtualBox...</source> + <translation>អំពី VirtualBox...</translation> </message> <message> - <source><p>Your existing VirtualBox settings files were automatically converted from the old format to a new format necessary for the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>More</b> if you want to get more information about what files were converted and access additional actions.</p><p>Press <b>Exit</b> to terminate the VirtualBox application without saving the results of the conversion to disk.</p></source> - <translation><p>ឯកសារកំណត់របស់ VirtualBox ដែលមានស្រាប់របស់អ្នកត្រូវបានបម្លែងដោយស្វ័យប្រវត្តិពីទ្រង់ទ្រាយចាស់ទៅទ្រង់ទ្រាយថ្មីដែលចាំបាច់សម្រាប់កំណែថ្មីរបស់ VirtualBox ។</p><p>ចុច <b>យល់ព្រម</b> ដើម្បីចាប់ផ្ដើម VirtualBox ឥឡូវ ឬចុច <b>ផ្សេងទៀត</b> ប្រសិនបើអ្នកចង់យកព័ត៌មានបន្ថែមទៀតពីឯកសារដែលត្រូវបានបម្លែង និងចូលដំណើរការសកម្មភាពបន្ថែម ។</p><p>ចុច <b>ចេញ</b> ដើម្បីចេញពីកម្មវិធី VirtualBox ដោយមិនរក្សាទុកលទ្ធផលនៃការបម្លែងទៅកាន់ថាសរឹង ។</p></translation> + <source>Show a dialog with product information</source> + <translation>បង្ហាញប្រអប់ដែលមានព័ត៌មានផលិតផល</translation> </message> <message> - <source>&More</source> - <comment>warnAboutAutoConvertedSettings message box</comment> - <translation>ផ្សេងៗទៀត</translation> + <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version from this direct link:</p><p><a href=%2>%3</a></p></source> + <translation><p>កំណែថ្មីរបស់ VirtualBox ត្រូវបានចេញផ្សាយ ! គឺកំណែ <b>%1</b> ដែលអាចរកបាននៅ <a href="http://www.virtualbox.org/">virtualbox.org</a> ។</p><p>អ្នកអាចទាញយកកំណែនេះពីតំណនេះដោយផ្ទាល់ ៖</p><p><a href=%2>%3</a></p></translation> </message> <message> - <source>E&xit</source> - <comment>warnAboutAutoConvertedSettings message box</comment> - <translation>ចេញ</translation> + <source><p>Are you sure you want to release the %1 <nobr><b>%2</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%3</b>.</p></source> + <translation><p>តើអ្នកប្រាកដជាចង់ចេញផ្សាយ %1 <nobr><b>%2</b></nobr>?</p><p>វានឹងផ្ដាច់វាពីម៉ាស៊ីននិម្មិតដូចខាងក្រោម ៖ <b>%3</b> ។</p></translation> </message> <message> - <source><p>The following VirtualBox settings files have been automatically converted to the new settings file format version <b>%1</b>.</p><p>However, the results of the conversion were not saved back to disk yet. Please press:</p><ul><li><b>Backup</b> to create backup copies of the settings files in the old format before saving them in the new format;</li><li><b>Overwrite</b> to save all auto-converted files without creating backup copies (it will not be possible to use these settings files with an older version of VirtualBox afterwards);</li>%2</ul><p>It is recommended to always select <b>Backup</b> because in this case it will be possible to go back to the previous version of VirtualBox (if necessary) without losing your current settings. See the VirtualBox Manual for more information about downgrading.</p></source> - <translation><p>ឯកសារកំណត់ VirtualBox ដូចខាងក្រោមត្រូវបានបម្លែងទៅទ្រង់ទ្រាយឯកសារថ្មីកំណែ <b>%1</b> ដោយស្វ័យប្រវត្តិ ។.</p><p>ទោះជាយ៉ាងណាក៏ដោយ លទ្ធផលនៃការបម្លែងមិនត្រូវបានរក្សាទុកទៅថាសវិញទេ ។ សូមចុច ៖</p><ul><li><b>បម្រុងទុក</b> ដើម្បីបង្កើតច្បាប់ចម្លងបម្រុងនៃឯកសារការកំណត់នៅក្នុងទ្រង់ទ្រាយចាស់ៗមុននឹងរក្សាទុកវានៅក្នុងទ្រង់ទ្រាយថ្មី</li><li><b>បដិសេធ</b> ដើម្បីរក្សាទុកឯកសារដែលបានបម្លែងដោយស្វ័យប្រវត្តិដោយមិនបង្កើតច្បាប់ចម្លងបម្រុងទុកទេ (វានឹងមិនអាចប្រើឯកសារកំណត់ទាំងនេះជាមួយនឹងកំណែចាស់ៗរបស់ VirtualBox បានទេ)</li>%2</ul><p>វាត្រូវបានផ្ដល់អនុសាសន៍ឲ្យជ្រើស <b>បម្រុងទុក</b> ជានិច្ច ពីព្រោះក្នុងករណីនេះវានឹងមិនអាចត្រឡប់ក្រោយទៅកំណែមុនរបស់ VirtualBox (ប្រសិនបើចាំចាប់) ដោយមិនបាត់បង់ការកំណត់បច្ចុប្បន្នរបស់អ្នកទេ ។ សូមមើលសៀវដៅ VirtualBox សម្រាប់សេចក្ដីលម្អិតអំពីការធ្វើឲ្យប្រសើរឡើង ។</p></translation> + <source>Release</source> + <comment>detach medium</comment> + <translation>ចេញផ្សាយ</translation> </message> <message> - <source><li><b>Exit</b> to terminate VirtualBox without saving the results of the conversion to disk.</li></source> - <translation><li><b>ចេញ</b> ដើម្បីបញ្ចប់ VirtualBox ដោយមិនរក្សាទុកលទ្ធផលនៃការបម្លែងថាស ។</li></translation> + <source><p>Are you sure you want to remove the %1 <nobr><b>%2</b></nobr> from the list of known media?</p></source> + <translation><p>តើអ្នកប្រាកដជាចង់យក %1 <nobr><b>%2</b></nobr> ចេញពីមេឌៀដែលបានស្គាល់ដែរឬទេ ?</p></translation> </message> <message> - <source>O&verwrite</source> - <comment>warnAboutAutoConvertedSettings message box</comment> - <translation>បដិសេធ</translation> + <source>Note that this hard disk is inaccessible so that its storage unit cannot be deleted right now.</source> + <translation>ចំណាំថា ថាសរឹងនេះមិនអាចចូលដំណើរការបានទេ ដូច្នេះឯកតាផ្ទុករបស់វាមិនអាចត្រូវបានលុបឥឡូវទេ ។</translation> </message> <message> - <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nobr> directory, as well as a description of what you were doing when this error happened. Note that you can also access the above files by selecting <b>Show Log</b> from the <b>Machine</b> menu of the main VirtualBox window.</p><p>Press <b>OK</b> if you want to power off the machine or press <b>Ignore</b> if you want to leave it as is for debugging. Please note that debugging requires special knowledge and tools, so it is recommended to press <b>OK</b> now.</p></source> - <translation><p>កំហុសធ្ងន់ធ្ងរបានកើតឡើងខណៈពេលកំពុងរត់ម៉ាស៊ីននិម្មិត ហើយការប្រតិបត្តិម៉ាស៊ីនត្រូវបានបញ្ឈប់ ។</p><p>ចំពោះជំនួយ សូមមើលផ្នែកសហគមន៍នៅលើ <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> ឬកិច្ចសន្យាគាំទ្ររបស់អ្នក ។ សូមផ្ដល់នូវខ្លឹមសាររបស់ឯកសារកំណត់ហេតុ <tt>VBox.log</tt> ហើយនឹងឯកសាររូបភាព <tt>VBox.png</tt> ដែលអ្នកអាចរកបាននៅក្នុងថត <nobr><b>%1</b></nobr> ព្រមទាំងសេចក្ដីពិពណ៌នានូវអ្វីដែលអ្នកកំពុងធ្វើ នៅពេលកំហុសកើតឡើង ។ ចំណាំថា អ្នកក៏អាចចូលដំណើរការឯកសារខាងលើ ដោយជ្រើស <b>បង្ហាញកំណត់ហេតុ</b> ពីម៉ឺនុយ <b>ម៉ាស៊ីន</b> របស់បង្អួច VirtualBox មេ ។</p><p>ចុច <b>យល់ព្រម</b> ប្រសិនបើអ្នកចង់បិទម៉ាស៊ីន ឬចុច <b>មិនអើពើ</b> ប្រសិនបើអ្នកទុកវាសម្រាប់បំបាត់កំហុស ។ សូមចំណាំថាការបំបាត់កំហុសទាមទារចំណេះដឹង និងកម្មវិធីពិសេស ដូច្នេះត្រូវបានផ្ដល់អនុសាសន៍ឲ្យចុច <b>យល់ព្រម</b> ឥឡូវ ។</p></translation> + <source>The next dialog will let you choose whether you also want to delete the storage unit of this hard disk or keep it for later usage.</source> + <translation>ប្រអប់បន្ទាប់នឹងអនុញ្ញាតឲ្យអ្នកជ្រើសថាតើ អ្នកចង់លុបឯកតាផ្ទុករបស់ថាសរឹងនេះ ឬទុកវាសម្រាប់ប្រើពេលក្រោយ ។</translation> </message> <message> - <source>hard disk</source> - <comment>failed to close ...</comment> - <translation>ថាសរឹង</translation> + <source><p>Note that the storage unit of this medium will not be deleted and therefore it will be possible to add it to the list later again.</p></source> + <translation><p>ចំណាំថា ឯកតាផ្ទុករបស់ឧបករណ៍ផ្ទុកនេះនឹងមិនត្រូវបានលុបទេ ហើយដូច្នេះវានឹងអាចបន្ថែមទៅកាន់បញ្ជីពេលក្រោយម្ដងទៀត ។</p></translation> </message> <message> - <source>CD/DVD image</source> - <comment>failed to close ...</comment> - <translation>រូបភាពស៊ីឌី/ឌីវីឌី</translation> + <source>Remove</source> + <comment>medium</comment> + <translation>យកចេញ</translation> </message> <message> - <source>floppy image</source> - <comment>failed to close ...</comment> - <translation>រូបភាពថាសទន់</translation> + <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source> + <translation><p>មានឯកតាផ្ទុករបស់ថាសរឹងនៅទីតាំង <b>%1</b> រួចហើយ ។ អ្នកមិនអាចបង្កើតថាសរឹងនិម្មិតថ្មីបានទេ ដែលប្រើទីតាំងនេះ ពីព្រោះវាអាចត្រូវបានប្រើដោយថាសរឹងនិម្មិតផ្សេង ។</p><p>សូមបញ្ជាក់ទីតាំងផ្សេង ។</p></translation> </message> <message> - <source>The following files already exist:<br /><br />%1<br /><br />Are you sure you want to replace them? Replacing them will overwrite their contents.</source> - <translation type="unfinished"></translation> + <source><p>Do you want to delete the storage unit of the hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which makes it possible to add this hard disk to the list later again.</p></source> + <translation><p>តើអ្នកចង់លុបឯកតាផ្ទុករបស់ថាសរឹង <nobr><b>%1</b></nobr>ដែរឬទេ?</p><p>ប្រសិនបើអ្នកជ្រើស <b>លុប</b> បន្ទាប់មកឯកតាផ្ទុកដែលបានបញ្ជាក់នឹងត្រូវបានលុបជាអចិន្ត្រៃយ៍ ។ ប្រតិបត្តិការនេះ <b>មិនអាចត្រូវបានធ្វើវិញបានទេ</b> ។</p><p>ប្រសិនបើអ្នកជ្រើស <b>រក្សាទុក</b> បន្ទាប់មកថាសរឹងនឹងត្រូវបានយកចេញតែពីបញ្ជីរបស់ថាសរឹងដែលស្គាល់ប៉ុណ្ណោះ ប៉ុន្តែឯកតាផ្ទុកនឹងមិនត្រូវបានប៉ះពាល់ទេ ដែលធ្វើឲ្យវាអាចបន្ថែមថាសរឹងនេះទៅកាន់បញ្ជីពេលក្រោយម្ដងទៀតបាន ។</p></translation> </message> <message> - <source>Failed to remove the file <b>%1</b>.<br /><br />Please try to remove the file yourself and try again.</source> - <translation type="unfinished"></translation> + <source>Delete</source> + <comment>hard disk storage</comment> + <translation>លុប</translation> </message> <message> - <source>You are running a prerelease version of VirtualBox. This version is not suitable for production use.</source> - <translation type="unfinished"></translation> + <source>Keep</source> + <comment>hard disk storage</comment> + <translation>រក្សាទុក</translation> </message> <message> - <source>Could not access USB on the host system, because neither the USB file system (usbfs) nor the DBus and hal services are currently available. If you wish to use host USB devices inside guest systems, you must correct this and restart VirtualBox.</source> - <translation type="unfinished"></translation> + <source>Failed to delete the storage unit of the hard disk <b>%1</b>.</source> + <translation>បានបរាជ័យក្នុងការលុបការផ្ទុករបស់ថាសរឹង <b>%1</b> ។</translation> </message> <message> - <source>You are trying to shut down the guest with the ACPI power button. This is currently not possible because the guest does not use the ACPI subsystem.</source> - <translation type="unfinished"></translation> + <source><p>There are no unused hard disks available for the newly created attachment.</p><p>Press the <b>Create</b> button to start the <i>New Virtual Disk</i> wizard and create a new hard disk, or press the <b>Select</b> button to open the <i>Virtual Media Manager</i> and select what to do.</p></source> + <translation><p>មិនមានថាសរឹងដែលមិនបានប្រើទេ សម្រាប់ការភ្ជាប់ដែលបានបង្កើតថ្មីៗ ។</p><p>ចុចប៊ូតុង <b>បង្កើត</b> ដើម្បីចាប់ផ្ដើមអ្នកជំនួយការ <i>ថាសនិម្មិតថ្មី</i> ហើយបង្កើតថាសរឹងថ្មី ឬចុចប៊ូតុង <b>ជ្រើស</b> ដើម្បីបើក <i>កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត</i> ហើយជ្រើសអ្វីត្រូវធ្វើ ។</p></translation> </message> <message> - <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source> - <translation type="unfinished"></translation> + <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source> + <translation>បានបរាជ័យក្នុងការបង្កើតការផ្ទុកថាសរឹង <nobr><b>%1</b> ។</nobr></translation> </message> <message> - <source>Close VM</source> - <translation type="unfinished"></translation> + <source>Failed to attach the hard disk <nobr><b>%1</b></nobr> to the slot <i>%2</i> of the machine <b>%3</b>.</source> + <translation>បានបរាជ័យក្នុងការភ្ជាប់ <nobr><b>%1</b></nobr> ទៅរន្ធ <i>%2</i> របស់ម៉ាស៊ីន <b>%3</b> ។</translation> </message> <message> - <source>Continue</source> - <translation type="unfinished">បន្ត</translation> + <source>Failed to detach the hard disk <nobr><b>%1</b></nobr> from the slot <i>%2</i> of the machine <b>%3</b>.</source> + <translation>បានបរាជ័យក្នុងការផ្ដាច់ថាសរឹង <nobr><b>%1</b></nobr> ពីរន្ធ <i>%2</i> របស់ម៉ាស៊ីន <b>%3</b> ។</translation> </message> <message> - <source><p>Are you sure you wish to delete the selected snapshot and saved state?</p></source> - <translation type="unfinished"></translation> + <source>Failed to mount the %1 <nobr><b>%2</b></nobr> to the machine <b>%3</b>.</source> + <translation>បានបរាជ័យក្នុងការម៉ោន %1 <nobr><b>%2</b></nobr> ទៅម៉ាស៊ីន <b>%3</b> ។</translation> </message> <message> - <source>Discard</source> - <translation type="unfinished">បោះបង់</translation> + <source>Failed to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>.</source> + <translation>បានបរាជ័យក្នុងការអាន់ម៉ោន %1 <nobr><b>%2</b></nobr> ពីម៉ាស៊ីន <b>%3</b> ។</translation> </message> <message> - <source>Cancel</source> - <translation type="unfinished"></translation> + <source>Failed to open the %1 <nobr><b>%2</b></nobr>.</source> + <translation>បានបរាជ័យក្នុងការបើក %1 <nobr><b>%2</b></nobr> ។</translation> </message> <message> - <source><p>There are hard disks attached to ports of the additional controller. If you disable the additional controller, all these hard disks will be automatically detached.</p><p>Are you sure you want to disable the additional controller?</p></source> - <translation type="unfinished"></translation> + <source>Failed to close the %1 <nobr><b>%2</b></nobr>.</source> + <translation>បានបរាជ័យក្នុងការបិទ %1 <nobr><b>%2</b></nobr> ។</translation> </message> <message> - <source><p>There are hard disks attached to ports of the additional controller. If you change the additional controller, all these hard disks will be automatically detached.</p><p>Are you sure you want to change the additional controller?</p></source> - <translation type="unfinished"></translation> + <source>Failed to get the accessibility state of the medium <nobr><b>%1</b></nobr>.</source> + <translation>បានបរាជ័យក្នុងការចូលដំណើរការស្ថានភាពរបស់ឧបករណ៍ផ្ទុក <nobr><b>%1</b></nobr> ។</translation> </message> <message> - <source>Change</source> - <comment>hard disk</comment> - <translation type="unfinished"></translation> + <source><p>Failed to connect to the VirtualBox online registration service due to the following error:</p><p><b>%1</b></p></source> + <translation><p>បានបរាជ័យក្នុងការតភ្ជាប់ទៅកាន់សេវាចុះឈ្មោះលើបណ្ដាញរបស់ VirtualBox ដោយសារតែកំហុសដូចខាងក្រោម ៖</p><p><b>%1</b></p></translation> </message> <message> - <source><p>Deleting this host-only network will lead to the deleting of the host-only interface this network is based on. Do you want to remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> this interface may be in use by one or more virtual network adapters belonging to one of your VMs. After it is removed, these adapters will no longer be usable until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation type="unfinished"></translation> + <source><p>Unable to obtain the new version information due to the following error:</p><p><b>%1</b></p></source> + <translation><p>មិនអាចទទួលយកព័ត៌មានកំណែថ្មីបានទេ ដោយសារតែកំហុសដូចខាងក្រោម ៖</p><p><b>%1</b></p></translation> </message> <message> - <source>Failed to create the host-only network interface.</source> - <translation type="unfinished"></translation> + <source><p>One or more virtual hard disks, CD/DVD or floppy media are not currently accessible. As a result, you will not be able to operate virtual machines that use these media until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source> + <translation><p>ថាសរឹងនិម្មិតមួយ ឬច្រើន ស៊ីឌី/ឌីវីឌី ឬមេឌៀថាសទន់បច្ចុប្បន្នមិនអាចចូលដំណើរការបានទេ ។ ជាលទ្ធផល អ្នកនឹងមិនអាចប្រតិបត្តិម៉ាស៊ីននិម្មិត ដែលប្រើមេឌៀនេះបានទេ រហូតដល់ពួកវាអាចចូលដំណើរការបាននៅពេលក្រោយ ។</p><p>ចុច <b>ពិនិត្យមើល</b> ដើម្បីប្រើបង្អួចកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ហើយមើលអ្វីដែលមេឌៀមិនអាចចូលដំណើរការបាន ឬចុច <b>មិនអើពើ</b> ដើម្បីមិនអើពើនឹងសារនេះ ។</p></translation> </message> <message> - <source><p>Your existing VirtualBox settings files will be automatically converted from the old format to a new format necessary for the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>Exit</b> if you want to terminate the VirtualBox application without any further actions.</p></source> - <translation type="unfinished"></translation> + <source><p>Your existing VirtualBox settings files were automatically converted from the old format to a new format necessary for the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>More</b> if you want to get more information about what files were converted and access additional actions.</p><p>Press <b>Exit</b> to terminate the VirtualBox application without saving the results of the conversion to disk.</p></source> + <translation><p>ឯកសារកំណត់របស់ VirtualBox ដែលមានស្រាប់របស់អ្នកត្រូវបានបម្លែងដោយស្វ័យប្រវត្តិពីទ្រង់ទ្រាយចាស់ទៅទ្រង់ទ្រាយថ្មីដែលចាំបាច់សម្រាប់កំណែថ្មីរបស់ VirtualBox ។</p><p>ចុច <b>យល់ព្រម</b> ដើម្បីចាប់ផ្ដើម VirtualBox ឥឡូវ ឬចុច <b>ផ្សេងទៀត</b> ប្រសិនបើអ្នកចង់យកព័ត៌មានបន្ថែមទៀតពីឯកសារដែលត្រូវបានបម្លែង និងចូលដំណើរការសកម្មភាពបន្ថែម ។</p><p>ចុច <b>ចេញ</b> ដើម្បីចេញពីកម្មវិធី VirtualBox ដោយមិនរក្សាទុកលទ្ធផលនៃការបម្លែងទៅកាន់ថាសរឹង ។</p></translation> </message> <message> - <source>Failed to open appliance.</source> - <translation type="unfinished"></translation> + <source>&More</source> + <comment>warnAboutAutoConvertedSettings message box</comment> + <translation>ផ្សេងៗទៀត</translation> </message> <message> - <source>Failed to open/interpret appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <source>E&xit</source> + <comment>warnAboutAutoConvertedSettings message box</comment> + <translation>ចេញ</translation> </message> <message> - <source>Failed to import appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <source><p>The following VirtualBox settings files have been automatically converted to the new settings file format version <b>%1</b>.</p><p>However, the results of the conversion were not saved back to disk yet. Please press:</p><ul><li><b>Backup</b> to create backup copies of the settings files in the old format before saving them in the new format;</li><li><b>Overwrite</b> to save all auto-converted files without creating backup copies (it will not be possible to use these settings files with an older version of VirtualBox afterwards);</li>%2</ul><p>It is recommended to always select <b>Backup</b> because in this case it will be possible to go back to the previous version of VirtualBox (if necessary) without losing your current settings. See the VirtualBox Manual for more information about downgrading.</p></source> + <translation><p>ឯកសារកំណត់ VirtualBox ដូចខាងក្រោមត្រូវបានបម្លែងទៅទ្រង់ទ្រាយឯកសារថ្មីកំណែ <b>%1</b> ដោយស្វ័យប្រវត្តិ ។.</p><p>ទោះជាយ៉ាងណាក៏ដោយ លទ្ធផលនៃការបម្លែងមិនត្រូវបានរក្សាទុកទៅថាសវិញទេ ។ សូមចុច ៖</p><ul><li><b>បម្រុងទុក</b> ដើម្បីបង្កើតច្បាប់ចម្លងបម្រុងនៃឯកសារការកំណត់នៅក្នុងទ្រង់ទ្រាយចាស់ៗមុននឹងរក្សាទុកវានៅក្នុងទ្រង់ទ្រាយថ្មី</li><li><b>បដិសេធ</b> ដើម្បីរក្សាទុកឯកសារដែលបានបម្លែងដោយស្វ័យប្រវត្តិដោយមិនបង្កើតច្បាប់ចម្លងបម្រុងទុកទេ (វានឹងមិនអាចប្រើឯកសារកំណត់ទាំងនេះជាមួយនឹងកំណែចាស់ៗរបស់ VirtualBox បានទេ)</li>%2</ul><p>វាត្រូវបានផ្ដល់អនុសាសន៍ឲ្យជ្រើស <b>បម្រុងទុក</b> ជានិច្ច ពីព្រោះក្នុងករណីនេះវានឹងមិនអាចត្រឡប់ក្រោយទៅកំណែមុនរបស់ VirtualBox (ប្រសិនបើចាំចាប់) ដោយមិនបាត់បង់ការកំណត់បច្ចុប្បន្នរបស់អ្នកទេ ។ សូមមើលសៀវដៅ VirtualBox សម្រាប់សេចក្ដីលម្អិតអំពីការធ្វើឲ្យប្រសើរឡើង ។</p></translation> </message> <message> - <source>Failed to create appliance.</source> - <translation type="unfinished"></translation> + <source><li><b>Exit</b> to terminate VirtualBox without saving the results of the conversion to disk.</li></source> + <translation><li><b>ចេញ</b> ដើម្បីបញ្ចប់ VirtualBox ដោយមិនរក្សាទុកលទ្ធផលនៃការបម្លែងថាស ។</li></translation> </message> <message> - <source>Failed to prepare the export of the appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <source>O&verwrite</source> + <comment>warnAboutAutoConvertedSettings message box</comment> + <translation>បដិសេធ</translation> </message> <message> - <source>Failed to create an appliance.</source> - <translation type="unfinished"></translation> + <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nobr> directory, as well as a description of what you were doing when this error happened. Note that you can also access the above files by selecting <b>Show Log</b> from the <b>Machine</b> menu of the main VirtualBox window.</p><p>Press <b>OK</b> if you want to power off the machine or press <b>Ignore</b> if you want to leave it as is for debugging. Please note that debugging requires special knowledge and tools, so it is recommended to press <b>OK</b> now.</p></source> + <translation><p>កំហុសធ្ងន់ធ្ងរបានកើតឡើងខណៈពេលកំពុងរត់ម៉ាស៊ីននិម្មិត ហើយការប្រតិបត្តិម៉ាស៊ីនត្រូវបានបញ្ឈប់ ។</p><p>ចំពោះជំនួយ សូមមើលផ្នែកសហគមន៍នៅលើ <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> ឬកិច្ចសន្យាគាំទ្ររបស់អ្នក ។ សូមផ្ដល់នូវខ្លឹមសាររបស់ឯកសារកំណត់ហេតុ <tt>VBox.log</tt> ហើយនឹងឯកសាររូបភាព <tt>VBox.png</tt> ដែលអ្នកអាចរកបាននៅក្នុងថត <nobr><b>%1</b></nobr> ព្រមទាំងសេចក្ដីពិពណ៌នានូវអ្វីដែលអ្នកកំពុងធ្វើ នៅពេលកំហុសកើតឡើង ។ ចំណាំថា អ្នកក៏អាចចូលដំណើរការឯកសារខាងលើ ដោយជ្រើស <b>បង្ហាញកំណត់ហេតុ</b> ពីម៉ឺនុយ <b>ម៉ាស៊ីន</b> របស់បង្អួច VirtualBox មេ ។</p><p>ចុច <b>យល់ព្រម</b> ប្រសិនបើអ្នកចង់បិទម៉ាស៊ីន ឬចុច <b>មិនអើពើ</b> ប្រសិនបើអ្នកទុកវាសម្រាប់បំបាត់កំហុស ។ សូមចំណាំថាការបំបាត់កំហុសទាមទារចំណេះដឹង និងកម្មវិធីពិសេស ដូច្នេះត្រូវបានផ្ដល់អនុសាសន៍ឲ្យចុច <b>យល់ព្រម</b> ឥឡូវ ។</p></translation> </message> <message> - <source>Failed to export appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <source>hard disk</source> + <comment>failed to close ...</comment> + <translation>ថាសរឹង</translation> </message> <message> - <source>A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />Replacing it will overwrite its contents.</source> - <translation type="unfinished"></translation> + <source>CD/DVD image</source> + <comment>failed to close ...</comment> + <translation>រូបភាពស៊ីឌី/ឌីវីឌី</translation> </message> <message> - <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Certain guests (e.g. OS/2 and QNX) require this feature.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source> - <translation type="unfinished"></translation> + <source>floppy image</source> + <comment>failed to close ...</comment> + <translation>រូបភាពថាសទន់</translation> </message> - <message> - <source><p>Invalid e-mail address or password specified.</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>Failed to register the VirtualBox product.</p><p>%1</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Failed to check files.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Failed to remove file.</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>VBoxProgressDialog</name> - <message> - <source>Time remaining: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxRegistrationDlg</name> <message> - <source>VirtualBox Registration Dialog</source> - <translation>ប្រអប់ចុះឈ្មោះ VirtualBox</translation> - </message> - <message> - <source>&Name</source> - <translation type="obsolete">ឈ្មោះ</translation> - </message> - <message> - <source>Enter your full name using Latin characters.</source> - <translation>បញ្ចូលឈ្មោះពេញ ដោយប្រើតួអក្សរឡាតាំង ។</translation> - </message> - <message> - <source>&E-mail</source> - <translation type="obsolete">អ៊ីមែល</translation> - </message> - <message> - <source>Enter your valid e-mail address.</source> - <translation>បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលត្រឹមត្រូវរបស់អ្នក ។</translation> - </message> - <message> - <source>&Please do not use this information to contact me</source> - <translation type="obsolete">សូមកុំប្រើព័ត៌មាននេះដើម្បីទាក់ទងខ្ញុំ</translation> + <source>VirtualBox Registration Dialog</source> + <translation>ប្រអប់ចុះឈ្មោះ VirtualBox</translation> </message> <message> - <source>Welcome to the VirtualBox Registration Form!</source> - <translation>សូមស្វាគមន៍មកកាន់សំណុំបែបបទចុះឈ្មោះរបស់ VirtualBox !</translation> + <source>&Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Could not perform connection handshake.</source> - <translation>មិនអាចអនុវត្តការតភ្ជាប់ចាប់ដៃបានទេ ។</translation> + <source>Enter your full name using Latin characters.</source> + <translation>បញ្ចូលឈ្មោះពេញ ដោយប្រើតួអក្សរឡាតាំង ។</translation> </message> <message> - <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Enter your full name using Latin characters and your e-mail address to the fields below. Please note that Sun Microsystems will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, Sun Microsystems will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> - <translation type="obsolete"><p>សូមបំពេញសំណុំបែបបទចុះឈ្មោះនេះ ដើម្បីអនុញ្ញាតឲ្យយើងដឹងថា អ្នកប្រើ VirtualBox និងជាជម្រើសត្រូវជូនដំណឹងអ្នកអំពីព័ត៌មាន និងភាពទាន់សម័យរបស់ VirtualBox ។</p><p>បញ្ចូលឈ្មោះពេញលេញរបស់អ្នកដោយប្រើតួអក្សរឡាតាំង ហើយអាសយដ្ឋានអ៊ីមែលរបស់អ្នកក្នុងវាលខាងក្រោម ។ សូមចំណាំថា Sun Microsystems នឹងប្រើព័ត៌មាននេះដើម្បីប្រមូលតែស្ថិតិប្រើផលិតផល ហើយផ្ញើព្រឹត្តិបត្រ VirtualBox ឲ្យអ្នក ។ ជាទូទៅ Sun Microsystems នឹងមិនចម្លងទិន្នន័យរបស់អ្នកទៅភាគីទីបីបានទេ ។ ព័ត៌មានលម្អិតអំពីវិធីដែលយើងប្រើទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នក អាចរកបាននៅក្នុងផ្នែក <b>គោលនយោបាយឯកជន</b> របស់សៀវភៅដៃ VirtualBox ឬនៅលើទំព័រ <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>គោលនយោបាយឯកជន</a> របស់តំបន់បណ្ដាញ VirtualBox ។</p></translation> + <source>&E-mail</source> + <translation>អ៊ីមែល</translation> </message> <message> - <source>Check this box if you do not want to receive mail from Sun Microsystems at the e-mail address specified above.</source> - <translation type="obsolete">គូសធីកប្រអប់នេះ ប្រសិនបើអ្នកមិនចង់ទទួលសំបុត្រពី Sun Microsystems តាមអាសយដ្ឋានអ៊ីមែលដែលបានបញ្ជាក់ខាងលើ ។</translation> + <source>Enter your valid e-mail address.</source> + <translation>បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលត្រឹមត្រូវរបស់អ្នក ។</translation> </message> <message> - <source>C&onfirm</source> - <translation type="obsolete">អះអាង</translation> + <source>&Please do not use this information to contact me</source> + <translation>សូមកុំប្រើព័ត៌មាននេះដើម្បីទាក់ទងខ្ញុំ</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Welcome to the VirtualBox Registration Form!</source> + <translation>សូមស្វាគមន៍មកកាន់សំណុំបែបបទចុះឈ្មោះរបស់ VirtualBox !</translation> </message> <message> - <source>Select Country/Territory</source> - <translation type="unfinished"></translation> + <source>Could not perform connection handshake.</source> + <translation>មិនអាចអនុវត្តការតភ្ជាប់ចាប់ដៃបានទេ ។</translation> </message> <message> - <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Please use the Latin characters to fill the fields below. Please note that Sun Microsystems will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, Sun Microsystems will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> - <translation type="unfinished"></translation> + <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Enter your full name using Latin characters and your e-mail address to the fields below. Please note that Sun Microsystems will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, Sun Microsystems will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> + <translation><p>សូមបំពេញសំណុំបែបបទចុះឈ្មោះនេះ ដើម្បីអនុញ្ញាតឲ្យយើងដឹងថា អ្នកប្រើ VirtualBox និងជាជម្រើសត្រូវជូនដំណឹងអ្នកអំពីព័ត៌មាន និងភាពទាន់សម័យរបស់ VirtualBox ។</p><p>បញ្ចូលឈ្មោះពេញលេញរបស់អ្នកដោយប្រើតួអក្សរឡាតាំង ហើយអាសយដ្ឋានអ៊ីមែលរបស់អ្នកក្នុងវាលខាងក្រោម ។ សូមចំណាំថា Sun Microsystems នឹងប្រើព័ត៌មាននេះដើម្បីប្រមូលតែស្ថិតិប្រើផលិតផល ហើយផ្ញើព្រឹត្តិបត្រ VirtualBox ឲ្យអ្នក ។ ជាទូទៅ Sun Microsystems នឹងមិនចម្លងទិន្នន័យរបស់អ្នកទៅភាគីទីបីបានទេ ។ ព័ត៌មានលម្អិតអំពីវិធីដែលយើងប្រើទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នក អាចរកបាននៅក្នុងផ្នែក <b>គោលនយោបាយឯកជន</b> របស់សៀវភៅដៃ VirtualBox ឬនៅលើទំព័រ <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>គោលនយោបាយឯកជន</a> របស់តំបន់បណ្ដាញ VirtualBox ។</p></translation> </message> <message> - <source>I &have a Sun Online account already:</source> - <translation type="unfinished"></translation> + <source>Check this box if you do not want to receive mail from Sun Microsystems at the e-mail address specified above.</source> + <translation>គូសធីកប្រអប់នេះ ប្រសិនបើអ្នកមិនចង់ទទួលសំបុត្រពី Sun Microsystems តាមអាសយដ្ឋានអ៊ីមែលដែលបានបញ្ជាក់ខាងលើ ។</translation> </message> <message> - <source>&E-mail:</source> - <translation type="unfinished"></translation> + <source>C&onfirm</source> + <translation>អះអាង</translation> </message> <message> - <source>&Password:</source> - <translation type="unfinished"></translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> - <message> - <source>I &would like to register creating a new Sun Online account:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&First Name:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Last Name:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Company:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Co&untry:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>E-&mail:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>P&assword:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Co&nfirm Password:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Register</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxSFDialog</name> <message> - <source>Shared Folders</source> - <translation>ថតដែលបានចែករំលែក</translation> + <source>Shared Folders</source> + <translation>ថតដែលបានចែករំលែក</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxSelectorWnd</name> <message> - <source>VirtualBox OSE</source> - <translation>VirtualBox OSE</translation> - </message> - <message> - <source>&Details</source> - <translation>សេចក្ដីលម្អិត</translation> + <source>VirtualBox OSE</source> + <translation>VirtualBox OSE</translation> </message> <message> - <source>&Preferences...</source> - <comment>global settings</comment> - <translation>ចំណូលចិត្ត...</translation> + <source>&Details</source> + <translation>សេចក្ដីលម្អិត</translation> </message> <message> - <source>Display the global settings dialog</source> - <translation>បង្ហាញប្រអប់កំណត់សកល</translation> + <source>&Preferences...</source> + <comment>global settings</comment> + <translation>ចំណូលចិត្ត...</translation> </message> <message> - <source>E&xit</source> - <translation>ចេញ</translation> + <source>Display the global settings dialog</source> + <translation>បង្ហាញប្រអប់កំណត់សកល</translation> </message> <message> - <source>Close application</source> - <translation>បិទកម្មវិធី</translation> + <source>E&xit</source> + <translation>ចេញ</translation> </message> <message> - <source>&New...</source> - <translation>ថ្មី...</translation> + <source>Close application</source> + <translation>បិទកម្មវិធី</translation> </message> <message> - <source>Create a new virtual machine</source> - <translation>បង្កើតម៉ាស៊ីននិម្មិតថ្មី</translation> + <source>&New...</source> + <translation>ថ្មី...</translation> </message> <message> - <source>&Settings...</source> - <translation>ការកំណត់...</translation> + <source>Create a new virtual machine</source> + <translation>បង្កើតម៉ាស៊ីននិម្មិតថ្មី</translation> </message> <message> - <source>Configure the selected virtual machine</source> - <translation>កំណត់រចនាសម្ព័ន្ធម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>&Settings...</source> + <translation>ការកំណត់...</translation> </message> <message> - <source>&Delete</source> - <translation>លុប</translation> + <source>Configure the selected virtual machine</source> + <translation>កំណត់រចនាសម្ព័ន្ធម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>Delete the selected virtual machine</source> - <translation>លុបម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>&Delete</source> + <translation>លុប</translation> </message> <message> - <source>D&iscard</source> - <translation>បោះបង់</translation> + <source>Delete the selected virtual machine</source> + <translation>លុបម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>Discard the saved state of the selected virtual machine</source> - <translation>បោះបង់ស្ថានភាពរបស់ម៉ាស៊ីននិម្មិតដែលជ្រើសដែលបានរក្សាទុក</translation> + <source>D&iscard</source> + <translation>បោះបង់</translation> </message> <message> - <source>&Refresh</source> - <translation type="obsolete">ធ្វើឲ្យស្រស់</translation> + <source>Discard the saved state of the selected virtual machine</source> + <translation>បោះបង់ស្ថានភាពរបស់ម៉ាស៊ីននិម្មិតដែលជ្រើសដែលបានរក្សាទុក</translation> </message> <message> - <source>Refresh the accessibility state of the selected virtual machine</source> - <translation>ធ្វើឲ្យស្ថានភាពចូលដំណើរការស្រស់របស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>&Refresh</source> + <translation>ធ្វើឲ្យស្រស់</translation> </message> <message> - <source>&File</source> - <translation>ឯកសារ</translation> + <source>Refresh the accessibility state of the selected virtual machine</source> + <translation>ធ្វើឲ្យស្ថានភាពចូលដំណើរការស្រស់របស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>&Help</source> - <translation>ជំនួយ</translation> + <source>&File</source> + <translation>ឯកសារ</translation> </message> <message> - <source>&Snapshots</source> - <translation>រូបថត</translation> + <source>&Help</source> + <translation>ជំនួយ</translation> </message> <message> - <source>D&escription</source> - <translation>សេចក្ដីពិពណ៌នា</translation> + <source>&Snapshots</source> + <translation>រូបថត</translation> </message> <message> - <source>D&escription *</source> - <translation>សេចក្ដីពិពណ៌នា *</translation> + <source>D&escription</source> + <translation>សេចក្ដីពិពណ៌នា</translation> </message> <message> - <source>S&how</source> - <translation>បង្ហាញ</translation> + <source>D&escription *</source> + <translation>សេចក្ដីពិពណ៌នា *</translation> </message> <message> - <source>Switch to the window of the selected virtual machine</source> - <translation>ប្ដូរទៅបង្អួចរបស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>S&how</source> + <translation>បង្ហាញ</translation> </message> <message> - <source>S&tart</source> - <translation>ចាប់ផ្ដើម</translation> + <source>Switch to the window of the selected virtual machine</source> + <translation>ប្ដូរទៅបង្អួចរបស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>Start the selected virtual machine</source> - <translation>ចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>S&tart</source> + <translation>ចាប់ផ្ដើម</translation> </message> <message> - <source>&Machine</source> - <translation>ម៉ាស៊ីន</translation> + <source>Start the selected virtual machine</source> + <translation>ចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>Show &Log...</source> - <translation>បង្ហាញកំណត់ហេតុ...</translation> + <source>&Machine</source> + <translation>ម៉ាស៊ីន</translation> </message> <message> - <source>Show the log files of the selected virtual machine</source> - <translation>បង្ហាញឯកសារកំណត់ហេតុរបស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>Show &Log...</source> + <translation>បង្ហាញកំណត់ហេតុ...</translation> </message> <message> - <source>R&esume</source> - <translation>បន្ត</translation> + <source>Show the log files of the selected virtual machine</source> + <translation>បង្ហាញឯកសារកំណត់ហេតុរបស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>Resume the execution of the virtual machine</source> - <translation>បន្តប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> + <source>Sun xVM VirtualBox</source> + <translation>Sun xVM VirtualBox</translation> </message> <message> - <source>&Pause</source> - <translation>ផ្អាក</translation> + <source>R&esume</source> + <translation>បន្ត</translation> </message> <message> - <source>Suspend the execution of the virtual machine</source> - <translation>ផ្អាកប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> + <source>Resume the execution of the virtual machine</source> + <translation>បន្តប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is intended to display a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> - <translation><h3>សូមស្វាគមន៍មកកាន់ VirtualBox!</h3><p>ផ្នែកដែលនៅសល់របស់បង្អួចនេះមានបំណងបង្ហាញបញ្ជីម៉ាស៊ីននិម្មិតនៅលើកុំព្យូទ័ររបស់អ្នក ។ បញ្ជីទទេឥឡូវ ពីព្រោះអ្នកមិនបានបង្កើតម៉ាស៊ីននិម្មិតណាមួយនៅឡើយទេ ។<img src=:/welcome.png align=right/></p><p>ដើម្បីបង្កើតម៉ាស៊ីននិម្មិតថ្មី ចុចប៊ុតុង <b>ថ្មី</b> នៅក្នុងរបារឧបករណ៍មេ ដែលមានទីតាំងនៅផ្នែកខាងលើរបស់បង្អួច ។</p><p>អ្នកអាចចុចគ្រាប់ចុច <b>%1</b> ដើម្បីរកជំនួយ ឬទស្សនាតំប់បណ្ដាញ <a href=http://www.virtualbox.org>www.virtualbox.org</a> សម្រាប់រកព័ត៌មានដែលថ្មីៗបំផុត ។</p></translation> + <source>&Pause</source> + <translation>ផ្អាក</translation> </message> <message> - <source>&Virtual Media Manager...</source> - <translation>កម្មវិធីគ្រប់គ្រងម៉ាស៊ីននិម្មិត...</translation> + <source>Suspend the execution of the virtual machine</source> + <translation>ផ្អាកប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Display the Virtual Media Manager dialog</source> - <translation>បង្ហាញប្រអប់កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត</translation> + <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is intended to display a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>F1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> + <translation><h3>សូមស្វាគមន៍មកកាន់ VirtualBox!</h3><p>ផ្នែកដែលនៅសល់របស់បង្អួចនេះមានបំណងបង្ហាញបញ្ជីម៉ាស៊ីននិម្មិតនៅលើកុំព្យូទ័ររបស់អ្នក ។ បញ្ជីទទេឥឡូវ ពីព្រោះអ្នកមិនបានបង្កើតម៉ាស៊ីននិម្មិតណាមួយនៅឡើយទេ ។<img src=:/welcome.png align=right/></p><p>ដើម្បីបង្កើតម៉ាស៊ីននិម្មិតថ្មី ចុចប៊ុតុង <b>ថ្មី</b> នៅក្នុងរបារឧបករណ៍មេ ដែលមានទីតាំងនៅផ្នែកខាងលើរបស់បង្អួច ។</p><p>អ្នកអាចចុចគ្រាប់ចុច <b>F1</b> ដើម្បីរកជំនួយ ឬទស្សនាតំប់បណ្ដាញ <a href=http://www.virtualbox.org>www.virtualbox.org</a> សម្រាប់រកព័ត៌មានដែលថ្មីៗបំផុត ។</p></translation> </message> <message> - <source>Log</source> - <comment>icon text</comment> - <translation>កំណត់ហេតុ</translation> + <source>&Virtual Media Manager...</source> + <translation>កម្មវិធីគ្រប់គ្រងម៉ាស៊ីននិម្មិត...</translation> </message> <message> - <source>Sun VirtualBox</source> - <translation type="unfinished"></translation> + <source>Display the Virtual Media Manager dialog</source> + <translation>បង្ហាញប្រអប់កម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត</translation> </message> <message> - <source>&Import Appliance...</source> - <translation type="unfinished"></translation> + <source>Log</source> + <comment>icon text</comment> + <translation>កំណត់ហេតុ</translation> </message> - <message> - <source>Import an appliance into VirtualBox</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Export Appliance...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Export an appliance out of VM's from VirtualBox</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Re&fresh</source> - <translation type="unfinished">ធ្វើឲ្យស្រស់</translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxSettingsDialog</name> <message> - <source><i>Select a settings category from the list on the left side and move the mouse over a settings item to get more information</i>.</source> - <translation><i>ជ្រើសប្រភេទការកំណត់ពីបញ្ជីនៅខាងផ្នែកខាងឆ្វេង ហើយផ្លាស់ទីកណ្ដុរលើធាតុកំណត់ដើម្បីទទួលយកព័ត៌មានបន្ថែម</i> ។</translation> - </message> - <message> - <source>Invalid settings detected</source> - <translation>បានរកឃើញការកំណត់ដែលមិនត្រឹមត្រូវ</translation> + <source><i>Select a settings category from the list on the left side and move the mouse over a settings item to get more information</i>.</source> + <translation><i>ជ្រើសប្រភេទការកំណត់ពីបញ្ជីនៅខាងផ្នែកខាងឆ្វេង ហើយផ្លាស់ទីកណ្ដុរលើធាតុកំណត់ដើម្បីទទួលយកព័ត៌មានបន្ថែម</i> ។</translation> </message> <message> - <source>Settings</source> - <translation>កំណត់</translation> + <source>Invalid settings detected</source> + <translation>បានរកឃើញការកំណត់ដែលមិនត្រឹមត្រូវ</translation> </message> <message> - <source>Non-optimal settings detected</source> - <translation>បានរកឃើញការកំណត់ដែលមិនប្រសើរ</translation> + <source>Settings</source> + <translation>កំណត់</translation> </message> <message> - <source>On the <b>%1</b> page, %2</source> - <translation type="unfinished">នៅលើទំព័រ <b>%1</b> %2</translation> + <source>Non-optimal settings detected</source> + <translation>បានរកឃើញការកំណត់ដែលមិនប្រសើរ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxSnapshotDetailsDlg</name> <message> - <source>VBoxSnapshotDetailsDlg</source> - <translation>VBoxSnapshotDetailsDlg</translation> + <source>VBoxSnapshotDetailsDlg</source> + <translation>VBoxSnapshotDetailsDlg</translation> </message> <message> - <source>&Name</source> - <translation>ឈ្មោះ</translation> + <source>&Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>&Description</source> - <translation>សេចក្ដីពិពណ៌នា</translation> + <source>&Description</source> + <translation>សេចក្ដីពិពណ៌នា</translation> </message> <message> - <source>&Machine Details</source> - <translation>សេចក្ដីលម្អិតរបស់ម៉ាស៊ីន</translation> + <source>&Machine Details</source> + <translation>សេចក្ដីលម្អិតរបស់ម៉ាស៊ីន</translation> </message> <message> - <source>Details of %1 (%2)</source> - <translation>សេចក្ដីលម្អិតរបស់ %1 (%2)</translation> + <source>Details of %1 (%2)</source> + <translation>សេចក្ដីលម្អិតរបស់ %1 (%2)</translation> </message> <message> - <source>Snapshot Details</source> - <translation>សេចក្ដីលម្អិតរបស់រូបថត</translation> + <source>Snapshot Details</source> + <translation>សេចក្ដីលម្អិតរបស់រូបថត</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxSnapshotsWgt</name> <message> - <source>[snapshot]</source> - <translation>[រូបថត]</translation> + <source>[snapshot]</source> + <translation>[រូបថត]</translation> </message> <message> - <source>VBoxSnapshotsWgt</source> - <translation>VBoxSnapshotsWgt</translation> + <source>VBoxSnapshotsWgt</source> + <translation>VBoxSnapshotsWgt</translation> </message> <message> - <source>Current State (changed)</source> - <comment>Current State (Modified)</comment> - <translation>ស្ថានភាពបច្ចុប្បន្ន (បានផ្លាស់ប្ដូរ)</translation> + <source>Current State (changed)</source> + <comment>Current State (Modified)</comment> + <translation>ស្ថានភាពបច្ចុប្បន្ន (បានផ្លាស់ប្ដូរ)</translation> </message> <message> - <source>Current State</source> - <comment>Current State (Unmodified)</comment> - <translation>ស្ថានភាពបច្ចុប្បន្ន</translation> + <source>Current State</source> + <comment>Current State (Unmodified)</comment> + <translation>ស្ថានភាពបច្ចុប្បន្ន</translation> </message> <message> - <source>The current state differs from the state stored in the current snapshot</source> - <translation>ស្ថានភាពបច្ចុប្បន្នខុសពីស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> + <source>The current state differs from the state stored in the current snapshot</source> + <translation>ស្ថានភាពបច្ចុប្បន្នខុសពីស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> </message> <message> - <source>The current state is identical to the state stored in the current snapshot</source> - <translation>ស្ថានភាពបច្ចុប្បន្នគឺដូចគ្នានឹងស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> + <source>The current state is identical to the state stored in the current snapshot</source> + <translation>ស្ថានភាពបច្ចុប្បន្នគឺដូចគ្នានឹងស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> </message> <message> - <source> (current, </source> - <comment>Snapshot details</comment> - <translation> (បច្ចុប្បន្ន </translation> + <source> (current, </source> + <comment>Snapshot details</comment> + <translation> (បច្ចុប្បន្ន </translation> </message> <message> - <source>online)</source> - <comment>Snapshot details</comment> - <translation>លើបណ្ដាញ)</translation> + <source>online)</source> + <comment>Snapshot details</comment> + <translation>លើបណ្ដាញ)</translation> </message> <message> - <source>offline)</source> - <comment>Snapshot details</comment> - <translation>ក្រៅបណ្ដាញ)</translation> + <source>offline)</source> + <comment>Snapshot details</comment> + <translation>ក្រៅបណ្ដាញ)</translation> </message> <message> - <source>Taken at %1</source> - <comment>Snapshot (time)</comment> - <translation>បានថតនៅ %1</translation> + <source>Taken at %1</source> + <comment>Snapshot (time)</comment> + <translation>បានថតនៅ %1</translation> </message> <message> - <source>Taken on %1</source> - <comment>Snapshot (date + time)</comment> - <translation>បានថតនៅថ្ងៃទី %1</translation> + <source>Taken on %1</source> + <comment>Snapshot (date + time)</comment> + <translation>បានថតនៅថ្ងៃទី %1</translation> </message> <message> - <source>%1 since %2</source> - <comment>Current State (time or date + time)</comment> - <translation>%1 តាំងពី %2</translation> + <source>%1 since %2</source> + <comment>Current State (time or date + time)</comment> + <translation>%1 តាំងពី %2</translation> </message> <message> - <source>Snapshot %1</source> - <translation>រូបថត %1</translation> + <source>Snapshot %1</source> + <translation>រូបថត %1</translation> </message> <message> - <source>&Discard Snapshot</source> - <translation>បោះបង់រូបថត</translation> + <source>&Discard Snapshot</source> + <translation>បោះបង់រូបថត</translation> </message> <message> - <source>Take &Snapshot</source> - <translation>យករូបថត</translation> + <source>Take &Snapshot</source> + <translation>យករូបថត</translation> </message> <message> - <source>&Revert to Current Snapshot</source> - <translation>ត្រឡប់ទៅរូបថតបច្ចុប្បន្ន</translation> + <source>&Revert to Current Snapshot</source> + <translation>ត្រឡប់ទៅរូបថតបច្ចុប្បន្ន</translation> </message> <message> - <source>D&iscard Current Snapshot and State</source> - <translation>បោះបង់ស្ថានភាព និងរូបថតបច្ចុប្បន្ន</translation> + <source>D&iscard Current Snapshot and State</source> + <translation>បោះបង់ស្ថានភាព និងរូបថតបច្ចុប្បន្ន</translation> </message> <message> - <source>S&how Details</source> - <translation>បង្ហាញសេចក្ដីលម្អិត</translation> + <source>S&how Details</source> + <translation>បង្ហាញសេចក្ដីលម្អិត</translation> </message> <message> - <source>Discard the selected snapshot of the virtual machine</source> + <source>Discard the selected snapshot of the virtual machine</source> + <translation>បោះបង់រូបថតដែលបានជ្រើសរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Take a snapshot of the current virtual machine state</source> - <translation>យករូបថតរបស់ស្ថានភាពម៉ាស៊ីននិម្មិតបច្ចុប្បន្ន</translation> + <source>Take a snapshot of the current virtual machine state</source> + <translation>យករូបថតរបស់ស្ថានភាពម៉ាស៊ីននិម្មិតបច្ចុប្បន្ន</translation> </message> <message> - <source>Restore the virtual machine state from the state stored in the current snapshot</source> - <translation>ស្ដារស្ថានភាពម៉ាស៊ីននិម្មិតពីស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> + <source>Restore the virtual machine state from the state stored in the current snapshot</source> + <translation>ស្ដារស្ថានភាពម៉ាស៊ីននិម្មិតពីស្ថានភាពដែលបានទុកនៅក្នុងរូបថតបច្ចុប្បន្ន</translation> </message> <message> - <source>Discard the current snapshot and revert the machine to the state it had before the snapshot was taken</source> - <translation>បោះបង់រូបថតបច្ចុប្បន្ន និងត្រឡប់ម៉ាស៊ីនទៅស្ថានភាពដែលវាមុននឹងថតរូប</translation> + <source>Discard the current snapshot and revert the machine to the state it had before the snapshot was taken</source> + <translation>បោះបង់រូបថតបច្ចុប្បន្ន និងត្រឡប់ម៉ាស៊ីនទៅស្ថានភាពដែលវាមុននឹងថតរូប</translation> </message> <message> - <source>Show details of the selected snapshot</source> - <translation>បង្ហាញសេចក្ដីលម្អិតរបស់រូបថតដែលបានជ្រើស</translation> + <source>Show details of the selected snapshot</source> + <translation>បង្ហាញសេចក្ដីលម្អិតរបស់រូបថតដែលបានជ្រើស</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxSwitchMenu</name> <message> - <source>Disable</source> - <translation>បិទ</translation> + <source>Disable</source> + <translation>បិទ</translation> </message> <message> - <source>Enable</source> - <translation>បើក</translation> + <source>Enable</source> + <translation>បើក</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxTakeSnapshotDlg</name> <message> - <source>Take Snapshot of Virtual Machine</source> - <translation>យករូបថតរបស់ម៉ាស៊ីននិម្មិត</translation> - </message> - <message> - <source>Snapshot &Name</source> - <translation>ឈ្មោះរូបថត</translation> - </message> - <message> - <source>Snapshot &Description</source> - <translation>សេចក្ដីពិពណ៌នារូបថត</translation> - </message> -</context> -<context> - <name>VBoxTextEditor</name> - <message> - <source>Edit text</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Replace...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Replaces the current text with the content of a given file.</source> - <translation type="unfinished"></translation> + <source>Take Snapshot of Virtual Machine</source> + <translation>យករូបថតរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>Text (*.txt);;All (*.*)</source> - <translation type="unfinished"></translation> + <source>Snapshot &Name</source> + <translation>ឈ្មោះរូបថត</translation> </message> <message> - <source>Select a file to open...</source> - <translation type="unfinished"></translation> + <source>Snapshot &Description</source> + <translation>សេចក្ដីពិពណ៌នារូបថត</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxTrayIcon</name> <message> - <source>Show Selector Window</source> - <translation>បង្ហាញបង្អួចកម្មវិធីជ្រើស</translation> + <source>Show Selector Window</source> + <translation>បង្ហាញបង្អួចកម្មវិធីជ្រើស</translation> </message> <message> - <source>Show the selector window assigned to this menu</source> - <translation>បង្ហាញបង្អួចកម្មវិធីជ្រើសដែលបានផ្ដល់ទៅម៉ឺនុយនេះ</translation> + <source>Show the selector window assigned to this menu</source> + <translation>បង្ហាញបង្អួចកម្មវិធីជ្រើសដែលបានផ្ដល់ទៅម៉ឺនុយនេះ</translation> </message> <message> - <source>Hide Tray Icon</source> - <translation>លាក់រូបតំណាងថាសប្រព័ន្ធ</translation> + <source>Hide Tray Icon</source> + <translation>លាក់រូបតំណាងថាសប្រព័ន្ធ</translation> </message> <message> - <source>Remove this icon from the system tray</source> - <translation>យករូបតំណាងនេះចេញពីថាសប្រព័ន្ធ</translation> + <source>Remove this icon from the system tray</source> + <translation>យករូបតំណាងនេះចេញពីថាសប្រព័ន្ធ</translation> </message> <message> - <source>&Other Machines...</source> - <comment>tray menu</comment> - <translation>ម៉ាស៊ីនផ្សេងៗ...</translation> + <source>&Other Machines...</source> + <comment>tray menu</comment> + <translation>ម៉ាស៊ីនផ្សេងៗ...</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxUSBMenu</name> <message> - <source><no available devices></source> - <comment>USB devices</comment> - <translation><មិនមានឧបករណ៍ទេ></translation> + <source><no available devices></source> + <comment>USB devices</comment> + <translation><មិនមានឧបករណ៍ទេ></translation> </message> <message> - <source>No supported devices connected to the host PC</source> - <comment>USB device tooltip</comment> - <translation>គ្មានឧបករណ៍ដែលបានគាំទ្រទេ បានភ្ជាប់ទៅកាន់ម៉ាស៊ីនទេ</translation> + <source>No supported devices connected to the host PC</source> + <comment>USB device tooltip</comment> + <translation>គ្មានឧបករណ៍ដែលបានគាំទ្រទេ បានភ្ជាប់ទៅកាន់ម៉ាស៊ីនទេ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxUpdateDlg</name> <message> - <source>1 day</source> - <translation>១ ថ្ងៃ</translation> + <source>1 day</source> + <translation>១ ថ្ងៃ</translation> </message> <message> - <source>2 days</source> - <translation>២ ថ្ងៃ</translation> + <source>2 days</source> + <translation>២ ថ្ងៃ</translation> </message> <message> - <source>3 days</source> - <translation>៣ ថ្ងៃ</translation> + <source>3 days</source> + <translation>៣ ថ្ងៃ</translation> </message> <message> - <source>4 days</source> - <translation>៤ ថ្ងៃ</translation> + <source>4 days</source> + <translation>៤ ថ្ងៃ</translation> </message> <message> - <source>5 days</source> - <translation>៥ ថ្ងៃ</translation> + <source>5 days</source> + <translation>៥ ថ្ងៃ</translation> </message> <message> - <source>6 days</source> - <translation>៦ ថ្ងៃ</translation> + <source>6 days</source> + <translation>៦ ថ្ងៃ</translation> </message> <message> - <source>1 week</source> - <translation>១ សប្ដាហ៍</translation> + <source>1 week</source> + <translation>១ សប្ដាហ៍</translation> </message> <message> - <source>2 weeks</source> - <translation>២ សប្ដាហ៍</translation> + <source>2 weeks</source> + <translation>២ សប្ដាហ៍</translation> </message> <message> - <source>3 weeks</source> - <translation>៣ សប្ដាហ៍</translation> + <source>3 weeks</source> + <translation>៣ សប្ដាហ៍</translation> </message> <message> - <source>1 month</source> - <translation>១ ខែ</translation> + <source>1 month</source> + <translation>១ ខែ</translation> </message> <message> - <source>Never</source> - <translation>កុំ</translation> + <source>Never</source> + <translation>កុំ</translation> </message> <message> - <source>Chec&k</source> - <translation>ពិនិត្យមើល</translation> + <source>Chec&k</source> + <translation>ពិនិត្យមើល</translation> </message> <message> - <source>&Close</source> - <translation>បិទ</translation> + <source>&Close</source> + <translation>បិទ</translation> </message> <message> - <source>VirtualBox Update Wizard</source> - <translation>អ្នកជំនួយការធ្វើឲ្យទាន់សម័យរបស់ VirtualBox</translation> + <source>VirtualBox Update Wizard</source> + <translation>អ្នកជំនួយការធ្វើឲ្យទាន់សម័យរបស់ VirtualBox</translation> </message> <message> - <source>Check for Updates</source> - <translation>ពិនិត្យមើលភាពទាន់សម័យ</translation> + <source>Check for Updates</source> + <translation>ពិនិត្យមើលភាពទាន់សម័យ</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>Summary</source> - <translation>សេចក្ដីសង្ខេប</translation> + <source>Summary</source> + <translation>សេចក្ដីសង្ខេប</translation> </message> <message> - <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version from this direct link:</p><p><a href=%2>%3</a></p></source> - <translation><p>កំណែថ្មីរបស់ VirtualBox ត្រូវបានចេញផ្សាយហើយ ! គឺកំណែ <b>%1</b> ដែលអាចរកបាននៅ <a href="http://www.virtualbox.org/">virtualbox.org</a>។</p><p>អ្នកអាចទាញយកកំណែនេះដោយផ្ទាល់ពីតំណ ៖</p><p><a href=%2>%3</a></p></translation> + <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version from this direct link:</p><p><a href=%2>%3</a></p></source> + <translation><p>កំណែថ្មីរបស់ VirtualBox ត្រូវបានចេញផ្សាយហើយ ! គឺកំណែ <b>%1</b> ដែលអាចរកបាននៅ <a href="http://www.virtualbox.org/">virtualbox.org</a>។</p><p>អ្នកអាចទាញយកកំណែនេះដោយផ្ទាល់ពីតំណ ៖</p><p><a href=%2>%3</a></p></translation> </message> <message> - <source><p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p></source> - <translation><p>មិនអាចយកព័ត៌មានកំណែថ្មីបានទេ ដោយសារតែកំហុសបណ្ដាញដូចខាងក្រោម ៖</p><p><b>%1</b></p></translation> + <source><p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p></source> + <translation><p>មិនអាចយកព័ត៌មានកំណែថ្មីបានទេ ដោយសារតែកំហុសបណ្ដាញដូចខាងក្រោម ៖</p><p><b>%1</b></p></translation> </message> <message> - <source>You have already installed the latest VirtualBox version. Please repeat the version check later.</source> - <translation>អ្នកបានដំឡើងកំណែរបស់ VirtualBox ចុងក្រោយរួចហើយ ។ សូមធ្វើការពិនិត្យពេលក្រោយម្ដងទៀត ។</translation> + <source>You have already installed the latest VirtualBox version. Please repeat the version check later.</source> + <translation>អ្នកបានដំឡើងកំណែរបស់ VirtualBox ចុងក្រោយរួចហើយ ។ សូមធ្វើការពិនិត្យពេលក្រោយម្ដងទៀត ។</translation> </message> <message> - <source><p>This wizard will connect to the VirtualBox web-site and check if a newer version of VirtualBox is available.</p><p>Use the <b>Check</b> button to check for a new version now or the <b>Cancel</b> button if you do not want to perform this check.</p><p>You can run this wizard at any time by choosing <b>Check for Updates...</b> from the <b>Help</b> menu.</p></source> - <translation><p>អ្នកជំនួយការនេះនឹងតភ្ជាប់ទៅកាន់តំបន់បណ្ដាញរបស់ VirtualBox ហើយពិនិត្យមើលប្រសិនបើមានកំណែថ្មីរបស់ VirtualBox ។</p><p>ប្រើប៊ូតុង <b>ពិនិត្យមើល</b> ដើម្បីពិនិត្យមើលកំណែថ្មីឥឡូវ ឬប៊ូតុង <b>បោះបង់</b> ប្រសិនបើអ្នកមិនចង់អនុវត្តការត្រួតពិនិត្យនេះទេ ។</p><p>អ្នកអាចរត់អ្នកជំនួយការនេះនៅពេលណាមួយ ដោយជ្រើស <b>ពិនិត្យរកមើលភាពទាន់សម័យ...</b> ពីម៉ឺនុយ <b>ជំនួយ</b> ។</p></translation> + <source><p>This wizard will connect to the VirtualBox web-site and check if a newer version of VirtualBox is available.</p><p>Use the <b>Check</b> button to check for a new version now or the <b>Cancel</b> button if you do not want to perform this check.</p><p>You can run this wizard at any time by choosing <b>Check for Updates...</b> from the <b>Help</b> menu.</p></source> + <translation><p>អ្នកជំនួយការនេះនឹងតភ្ជាប់ទៅកាន់តំបន់បណ្ដាញរបស់ VirtualBox ហើយពិនិត្យមើលប្រសិនបើមានកំណែថ្មីរបស់ VirtualBox ។</p><p>ប្រើប៊ូតុង <b>ពិនិត្យមើល</b> ដើម្បីពិនិត្យមើលកំណែថ្មីឥឡូវ ឬប៊ូតុង <b>បោះបង់</b> ប្រសិនបើអ្នកមិនចង់អនុវត្តការត្រួតពិនិត្យនេះទេ ។</p><p>អ្នកអាចរត់អ្នកជំនួយការនេះនៅពេលណាមួយ ដោយជ្រើស <b>ពិនិត្យរកមើលភាពទាន់សម័យ...</b> ពីម៉ឺនុយ <b>ជំនួយ</b> ។</p></translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMDescriptionPage</name> <message> - <source>No description. Press the Edit button below to add it.</source> - <translation>គ្មានសេចក្ដីពិពណ៌នាទេ ។ ចុចប៊ុតុង កែសម្រួលខាងក្រោមដើម្បីបន្ថែមវា ។</translation> + <source>No description. Press the Edit button below to add it.</source> + <translation>គ្មានសេចក្ដីពិពណ៌នាទេ ។ ចុចប៊ុតុង កែសម្រួលខាងក្រោមដើម្បីបន្ថែមវា ។</translation> </message> <message> - <source>Edit</source> - <translation>កែសម្រួល</translation> + <source>Edit</source> + <translation>កែសម្រួល</translation> </message> <message> - <source>Edit (Ctrl+E)</source> - <translation>កែសម្រួល (បញ្ជា(Ctrl)+E)</translation> + <source>Edit (Ctrl+E)</source> + <translation>កែសម្រួល (បញ្ជា(Ctrl)+E)</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMDetailsView</name> <message> - <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> - <translation>ម៉ាស៊ីននិម្មិតដែលបានជ្រើស <i>មិនអាចចូលដំណើរការបានទេ</i> ។ សូមពិនិត្យមើលសារកំហុសដែលបានបង្ហាញខាងក្រោម ហើយចុចប៊ូតុង <b>ធ្វើឲ្យស្រស់</b> ប្រសិនបើអ្នកចង់ធ្វើការពិនិត្យការចូលដំណើរការឡើងវិញ ៖</translation> + <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> + <translation>ម៉ាស៊ីននិម្មិតដែលបានជ្រើស <i>មិនអាចចូលដំណើរការបានទេ</i> ។ សូមពិនិត្យមើលសារកំហុសដែលបានបង្ហាញខាងក្រោម ហើយចុចប៊ូតុង <b>ធ្វើឲ្យស្រស់</b> ប្រសិនបើអ្នកចង់ធ្វើការពិនិត្យការចូលដំណើរការឡើងវិញ ៖</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMFirstRunWzd</name> <message> - <source>First Run Wizard</source> - <translation>អ្នកជំនួយការរត់ដំបូង</translation> + <source>First Run Wizard</source> + <translation>អ្នកជំនួយការរត់ដំបូង</translation> </message> <message> - <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for installing an operating system of your choice onto this virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel execution of this wizard.</p></source> - <translation><p>អ្នកបានចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលបានបង្កើតថ្មីៗពេលដំបូងបាន ។ អ្នកជំនួយការនេះនឹងជួយអ្នកឲ្យអនុវត្តជំហានដែលចាំបាច់សម្រាប់ដំឡើងប្រព័ន្ធប្រតិបត្តិការនៃជម្រើសរបស់អ្នកក្នុងម៉ាស៊ីននិម្មិតនេះ ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅកាន់ទំព័របន្ទាប់របស់អ្នកជំនួយការ ហើយប៊ូតុង <b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។ អ្នកក៏អាចចុច <b>បោះបង់</b> ប្រសិនបើអ្នកចង់បោះបង់ប្រតិបត្តិការរបស់អ្នកជំនួយការនេះ ។</p></translation> + <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for installing an operating system of your choice onto this virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel execution of this wizard.</p></source> + <translation><p>អ្នកបានចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលបានបង្កើតថ្មីៗពេលដំបូងបាន ។ អ្នកជំនួយការនេះនឹងជួយអ្នកឲ្យអនុវត្តជំហានដែលចាំបាច់សម្រាប់ដំឡើងប្រព័ន្ធប្រតិបត្តិការនៃជម្រើសរបស់អ្នកក្នុងម៉ាស៊ីននិម្មិតនេះ ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅកាន់ទំព័របន្ទាប់របស់អ្នកជំនួយការ ហើយប៊ូតុង <b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។ អ្នកក៏អាចចុច <b>បោះបង់</b> ប្រសិនបើអ្នកចង់បោះបង់ប្រតិបត្តិការរបស់អ្នកជំនួយការនេះ ។</p></translation> </message> <message> - <source>Welcome to the First Run Wizard!</source> - <translation>សូមស្វាគមន៍មកកាន់អ្នកជំនួយការដំបូង !</translation> + <source>Welcome to the First Run Wizard!</source> + <translation>សូមស្វាគមន៍មកកាន់អ្នកជំនួយការដំបូង !</translation> </message> <message> - <source><p>Select the type of the media you would like to use for installation purposes below.</p></source> - <translation><p>ជ្រើសប្រភេទមេឌៀដែលអ្នកចង់ប្រើសម្រាប់ដំឡើងខាងក្រោម ។</p></translation> + <source><p>Select the type of the media you would like to use for installation purposes below.</p></source> + <translation><p>ជ្រើសប្រភេទមេឌៀដែលអ្នកចង់ប្រើសម្រាប់ដំឡើងខាងក្រោម ។</p></translation> </message> <message> - <source>Media Type</source> - <translation>ប្រភេទមេឌៀ</translation> + <source>Media Type</source> + <translation>ប្រភេទមេឌៀ</translation> </message> <message> - <source>&CD/DVD-ROM Device</source> - <translation>ឧបករណ៍ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>&CD/DVD-ROM Device</source> + <translation>ឧបករណ៍ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>&Floppy Device</source> - <translation>ឧបករណ៍ថាសទន់</translation> + <source>&Floppy Device</source> + <translation>ឧបករណ៍ថាសទន់</translation> </message> <message> - <source><p>Select the media which contains the setup program of the operating system you want to install. This media must be bootable, otherwise the setup program will not be able to start.</p></source> - <translation><p>ជ្រើសមេឌៀដែលមានកម្មវិធីរៀបចំរបស់ប្រព័ន្ធប្រតិបត្តិការដែលអ្នកចង់ដំឡើង ។ មេឌៀនេះត្រូវតែអាចចាប់ផ្ដើមបាន បើមិនដូច្នេះទេ កម្មវិធីរៀបចំនឹងមិនអាចចាប់ផ្ដើមបានទេ ។</p></translation> + <source><p>Select the media which contains the setup program of the operating system you want to install. This media must be bootable, otherwise the setup program will not be able to start.</p></source> + <translation><p>ជ្រើសមេឌៀដែលមានកម្មវិធីរៀបចំរបស់ប្រព័ន្ធប្រតិបត្តិការដែលអ្នកចង់ដំឡើង ។ មេឌៀនេះត្រូវតែអាចចាប់ផ្ដើមបាន បើមិនដូច្នេះទេ កម្មវិធីរៀបចំនឹងមិនអាចចាប់ផ្ដើមបានទេ ។</p></translation> </message> <message> - <source>Media Source</source> - <translation>ប្រភពមេឌៀ</translation> + <source>Media Source</source> + <translation>ប្រភពមេឌៀ</translation> </message> <message> - <source>&Host Drive</source> - <translation>ដ្រាយម៉ាស៊ីន</translation> + <source>&Host Drive</source> + <translation>ដ្រាយម៉ាស៊ីន</translation> </message> <message> - <source>&Image File</source> - <translation>ឯកសាររូបភាព</translation> + <source>&Image File</source> + <translation>ឯកសាររូបភាព</translation> </message> <message> - <source>Select Installation Media</source> - <translation>ជ្រើសមេឌៀដំឡើង</translation> + <source>Select Installation Media</source> + <translation>ជ្រើសមេឌៀដំឡើង</translation> </message> <message> - <source><p>You have selected the following media to boot from:</p></source> - <translation><p>អ្នកបានជ្រើសមេឌៀដូចខាងក្រោមដើម្បីចាប់ផ្ដើម ៖</p></translation> + <source><p>You have selected the following media to boot from:</p></source> + <translation><p>អ្នកបានជ្រើសមេឌៀដូចខាងក្រោមដើម្បីចាប់ផ្ដើម ៖</p></translation> </message> <message> - <source>Summary</source> - <translation>សេចក្ដីសង្ខេប</translation> + <source>Summary</source> + <translation>សេចក្ដីសង្ខេប</translation> </message> <message> - <source>CD/DVD-ROM Device</source> - <translation>ឧបករណ៍ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>CD/DVD-ROM Device</source> + <translation>ឧបករណ៍ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>Floppy Device</source> - <translation>ឧបករណ៍ថាសទន់</translation> + <source>Floppy Device</source> + <translation>ឧបករណ៍ថាសទន់</translation> </message> <message> - <source>Host Drive %1</source> - <translation>ដ្រាយម៉ាស៊ីន %1</translation> + <source>Host Drive %1</source> + <translation>ដ្រាយម៉ាស៊ីន %1</translation> </message> <message> - <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for booting an operating system of your choice on the virtual machine.</p><p>Note that you will not be able to install an operating system into this virtual machine right now because you did not attach any hard disk to it. If this is not what you want, you can cancel execution of this wizard, select <b>Settings</b> from the <b>Machine</b> menu of the main VirtualBox window to access the settings dialog of this machine and change the hard disk configuration.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel execution of this wizard.</p></source> - <translation><p>អ្នកបានចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលទើបបានបង្កើតថ្មីជាលើកដំបូង ។ អ្នកជំនួយការនេះនឹងជួយអ្នកក្នុងការអនុវត្តជំហានដែលចាំបាច់សម្រាប់ចាប់ផ្ដើមប្រព័ន្ធប្រតិបត្តិការជាជម្រើសរបស់អ្នកនៅលើម៉ាស៊ីននិម្មិត ។</p><p>ចំណាំថា អ្នកនឹងមិនអាចដំឡើងប្រព័ន្ធប្រតិបត្តិការក្នុងម៉ាស៊ីននិម្មិតឥឡូវបានទេ ពីព្រោះអ្នកមិនបានភ្ជាប់ថាសរឹង ។ ប្រសិនបើនេះមិនមែនជាអ្វីដែលអ្នកចង់បានទេ អ្នកអាចបោះបង់ប្រតិបត្តិការនៃអ្នកជំនួយការនេះបាន ដោយជ្រើស <b>ការកំណត់</b> ពីម៉ឺនុយ <b>ម៉ាស៊ីន</b> របស់បង្អួច VirtualBox មេ ដើម្បីចូលដំណើរការប្រអប់កំណត់របស់ម៉ាស៊ីននេះ ហើយផ្លាស់ប្ដូរការកំណត់រចនាសម្ព័ន្ធថាសរឹង ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅទំព័របន្ទាប់របស់អ្នកជំនួយការ ហើយប៊ូតុង <b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។ អ្នកក៏អាចចុច <b>បោះបង់</b> ប្រសិនបើអ្នកបោះបង់ប្រត្តិការអ្នកជំនួយការនេះ ។</p></translation> + <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for booting an operating system of your choice on the virtual machine.</p><p>Note that you will not be able to install an operating system into this virtual machine right now because you did not attach any hard disk to it. If this is not what you want, you can cancel execution of this wizard, select <b>Settings</b> from the <b>Machine</b> menu of the main VirtualBox window to access the settings dialog of this machine and change the hard disk configuration.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel execution of this wizard.</p></source> + <translation><p>អ្នកបានចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលទើបបានបង្កើតថ្មីជាលើកដំបូង ។ អ្នកជំនួយការនេះនឹងជួយអ្នកក្នុងការអនុវត្តជំហានដែលចាំបាច់សម្រាប់ចាប់ផ្ដើមប្រព័ន្ធប្រតិបត្តិការជាជម្រើសរបស់អ្នកនៅលើម៉ាស៊ីននិម្មិត ។</p><p>ចំណាំថា អ្នកនឹងមិនអាចដំឡើងប្រព័ន្ធប្រតិបត្តិការក្នុងម៉ាស៊ីននិម្មិតឥឡូវបានទេ ពីព្រោះអ្នកមិនបានភ្ជាប់ថាសរឹង ។ ប្រសិនបើនេះមិនមែនជាអ្វីដែលអ្នកចង់បានទេ អ្នកអាចបោះបង់ប្រតិបត្តិការនៃអ្នកជំនួយការនេះបាន ដោយជ្រើស <b>ការកំណត់</b> ពីម៉ឺនុយ <b>ម៉ាស៊ីន</b> របស់បង្អួច VirtualBox មេ ដើម្បីចូលដំណើរការប្រអប់កំណត់របស់ម៉ាស៊ីននេះ ហើយផ្លាស់ប្ដូរការកំណត់រចនាសម្ព័ន្ធថាសរឹង ។</p><p>ប្រើប៊ូតុង <b>បន្ទាប់</b> ដើម្បីទៅទំព័របន្ទាប់របស់អ្នកជំនួយការ ហើយប៊ូតុង <b>ថយក្រោយ</b> ដើម្បីត្រឡប់ទៅទំព័រមុន ។ អ្នកក៏អាចចុច <b>បោះបង់</b> ប្រសិនបើអ្នកបោះបង់ប្រត្តិការអ្នកជំនួយការនេះ ។</p></translation> </message> <message> - <source><p>Select the type of the media you would like to use for booting an operating system.</p></source> - <translation><p>ជ្រើសប្រភេទមេឌៀដែលអ្នកចង់ប្រើដើម្បីចាប់ផ្ដើមប្រព័ន្ធប្រតិបត្តិការ ។</p></translation> + <source><p>Select the type of the media you would like to use for booting an operating system.</p></source> + <translation><p>ជ្រើសប្រភេទមេឌៀដែលអ្នកចង់ប្រើដើម្បីចាប់ផ្ដើមប្រព័ន្ធប្រតិបត្តិការ ។</p></translation> </message> <message> - <source><p>Select the media that contains the operating system you want to work with. This media must be bootable, otherwise the operating system will not be able to start.</p></source> - <translation><p>ជ្រើសមេឌៀដែលមានប្រព័ន្ធប្រតិបត្តិការដែលអ្នកចង់ធ្វើការជាមួយ ។ មេឌៀនេះត្រូវទេអាចចាប់ផ្ដើមបាន បើមិនដូច្នេះទេ ប្រព័ន្ធប្រតិបត្តិការមិនអាចចាប់ផ្ដើមបានទេ ។</p></translation> + <source><p>Select the media that contains the operating system you want to work with. This media must be bootable, otherwise the operating system will not be able to start.</p></source> + <translation><p>ជ្រើសមេឌៀដែលមានប្រព័ន្ធប្រតិបត្តិការដែលអ្នកចង់ធ្វើការជាមួយ ។ មេឌៀនេះត្រូវទេអាចចាប់ផ្ដើមបាន បើមិនដូច្នេះទេ ប្រព័ន្ធប្រតិបត្តិការមិនអាចចាប់ផ្ដើមបានទេ ។</p></translation> </message> <message> - <source><p>You have selected the following media to boot an operating system from:</p></source> - <translation><p>អ្នកបានជ្រើសមេឌៀដូចខាងក្រោមដើម្បីចាប់ផ្ដើមប្រព័ន្ធប្រតិបត្តិការ ៖</p></translation> + <source><p>You have selected the following media to boot an operating system from:</p></source> + <translation><p>អ្នកបានជ្រើសមេឌៀដូចខាងក្រោមដើម្បីចាប់ផ្ដើមប្រព័ន្ធប្រតិបត្តិការ ៖</p></translation> </message> <message> - <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be mounted on the virtual machine and the machine will start execution.</p></source> - <translation><p>ប្រសិនបើខាងលើត្រឹមត្រូវហើយ ចុចប៊ូតុង <b>បញ្ចប់</b> ។ នៅពេលអ្នកចុចវា មេឌៀដែលបានជ្រើសនឹងត្រូវបានម៉ោនលើម៉ាស៊ីននិម្មិត ហើយម៉ាស៊ីននឹងចាប់ផ្ដើមប្រតិបត្តិ ។</p></translation> + <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be mounted on the virtual machine and the machine will start execution.</p></source> + <translation><p>ប្រសិនបើខាងលើត្រឹមត្រូវហើយ ចុចប៊ូតុង <b>បញ្ចប់</b> ។ នៅពេលអ្នកចុចវា មេឌៀដែលបានជ្រើសនឹងត្រូវបានម៉ោនលើម៉ាស៊ីននិម្មិត ហើយម៉ាស៊ីននឹងចាប់ផ្ដើមប្រតិបត្តិ ។</p></translation> </message> <message> - <source>< &Back</source> - <translation>< ថយក្រោយ</translation> + <source>< &Back</source> + <translation>< ថយក្រោយ</translation> </message> <message> - <source>&Next ></source> - <translation>បន្ទាប់ ></translation> + <source>&Next ></source> + <translation>បន្ទាប់ ></translation> </message> <message> - <source><html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <source><html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If the above is correct, press the <span style=" font-weight:600;">Finish</span> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <span style=" font-weight:600;">Unmount...</span> action in the <span style=" font-weight:600;">Devices</span> menu<span style=" font-weight:600;">.</span></p></body></html></source> - <translation><html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If the above is correct, press the <span style=" font-weight:600;">Finish</span> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <span style=" font-weight:600;">Unmount...</span> action in the <span style=" font-weight:600;">Devices</span> menu<span style=" font-weight:600;">.</span></p></body></html></source> + <translation><html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ប្រសិនបើអ្វីនៅខាងលើត្រឹមត្រូវ ចុចប៊ូតុង <span style=" font-weight:600;">បញ្ចប់</span> ។ នៅពេលអ្នកចុចវា មេឌៀដែលបានជ្រើសនឹងត្រូវបានម៉ោននៅលើម៉ាស៊ីននិម្មិតជាបណ្ដោះអាសន្ន ហើយម៉ាស៊ីននឹងចាប់ផ្ដើមប្រតិបត្តិ ។</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">សូមចំណាំថា នៅពេលអ្នកបិទម៉ាស៊ីននិម្មិត មេឌៀដែលបានបញ្ជាក់នឹងត្រូវបានអាន់ម៉ោនដោយស្វ័យប្រវត្តិ ហើយឧបករណ៍ចាប់ផ្ដើមនឹងកំណត់ថយទៅថាសរឹងដំបូងវិញ ។</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ដោយអាស្រ័យលើប្រភេទកម្មវិធី អ្នកត្រូវអាន់ម៉ោន (ច្រានចេញ) មេឌៀដោយដៃ បន្ទាប់ពីកម្មវិធីរៀបចំចាប់ផ្ដើមម៉ាស៊ីននិម្មិតឡើងវិញ ដើម្បីការពារដំណើរការដំឡើងពីការចាប់ផ្ដើមម្ដងទៀត ។ អ្នកអាចធ្វើវាដោយជ្រើសសកម្មភាព <span style=" font-weight:600;">អាន់ម៉ោន...</span> ដែលទាក់ទងនៅម៉ឺនុយ <span style=" font-weight:600;">ឧករណ៍</span> <span style=" font-weight:600;"> ។</span></p></body></html></translation> +</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ប្រសិនបើអ្វីនៅខាងលើត្រឹមត្រូវ ចុចប៊ូតុង <span style=" font-weight:600;">បញ្ចប់</span> ។ នៅពេលអ្នកចុចវា មេឌៀដែលបានជ្រើសនឹងត្រូវបានម៉ោននៅលើម៉ាស៊ីននិម្មិតជាបណ្ដោះអាសន្ន ហើយម៉ាស៊ីននឹងចាប់ផ្ដើមប្រតិបត្តិ ។</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">សូមចំណាំថា នៅពេលអ្នកបិទម៉ាស៊ីននិម្មិត មេឌៀដែលបានបញ្ជាក់នឹងត្រូវបានអាន់ម៉ោនដោយស្វ័យប្រវត្តិ ហើយឧបករណ៍ចាប់ផ្ដើមនឹងកំណត់ថយទៅថាសរឹងដំបូងវិញ ។</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ដោយអាស្រ័យលើប្រភេទកម្មវិធី អ្នកត្រូវអាន់ម៉ោន (ច្រានចេញ) មេឌៀដោយដៃ បន្ទាប់ពីកម្មវិធីរៀបចំចាប់ផ្ដើមម៉ាស៊ីននិម្មិតឡើងវិញ ដើម្បីការពារដំណើរការដំឡើងពីការចាប់ផ្ដើមម្ដងទៀត ។ អ្នកអាចធ្វើវាដោយជ្រើសសកម្មភាព <span style=" font-weight:600;">អាន់ម៉ោន...</span> ដែលទាក់ទងនៅម៉ឺនុយ <span style=" font-weight:600;">ឧករណ៍</span> <span style=" font-weight:600;"> ។</span></p></body></html></translation> </message> <message> - <source>&Finish</source> - <translation>បញ្ចប់</translation> + <source>&Finish</source> + <translation>បញ្ចប់</translation> </message> <message> - <source>Type</source> - <comment>summary</comment> - <translation>ប្រភេទ</translation> + <source>Type</source> + <comment>summary</comment> + <translation>ប្រភេទ</translation> </message> <message> - <source>Source</source> - <comment>summary</comment> - <translation>ប្រភព</translation> + <source>Source</source> + <comment>summary</comment> + <translation>ប្រភព</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMInformationDlg</name> <message> - <source>%1 - Session Information</source> - <translation>%1 - ព័ត៌មានសម័យ</translation> + <source>%1 - Session Information</source> + <translation>%1 - ព័ត៌មានសម័យ</translation> </message> <message> - <source>&Details</source> - <translation>សេចក្ដីលម្អិត</translation> + <source>&Details</source> + <translation>សេចក្ដីលម្អិត</translation> </message> <message> - <source>&Runtime</source> - <translation>ពេលវេលារត់</translation> + <source>&Runtime</source> + <translation>ពេលវេលារត់</translation> </message> <message> - <source>DMA Transfers</source> - <translation>ការផ្ទេរ DMA</translation> + <source>DMA Transfers</source> + <translation>ការផ្ទេរ DMA</translation> </message> <message> - <source>PIO Transfers</source> - <translation>ការផ្ទេរ PIO</translation> + <source>PIO Transfers</source> + <translation>ការផ្ទេរ PIO</translation> </message> <message> - <source>Data Read</source> - <translation>អានទិន្នន័យ</translation> + <source>Data Read</source> + <translation>អានទិន្នន័យ</translation> </message> <message> - <source>Data Written</source> - <translation>សរសេរទិន្នន័យ</translation> + <source>Data Written</source> + <translation>សរសេរទិន្នន័យ</translation> </message> <message> - <source>Data Transmitted</source> - <translation>បានផ្ទេរទិន្នន័យ</translation> + <source>Data Transmitted</source> + <translation>បានផ្ទេរទិន្នន័យ</translation> </message> <message> - <source>Data Received</source> - <translation>បានទទួលទិន្នន័យ</translation> + <source>Data Received</source> + <translation>បានទទួលទិន្នន័យ</translation> </message> <message> - <source>Runtime Attributes</source> - <translation>គុណលក្ខណៈពេលវេលារត់</translation> + <source>Runtime Attributes</source> + <translation>គុណលក្ខណៈពេលវេលារត់</translation> </message> <message> - <source>Screen Resolution</source> - <translation>គុណភាពបង្ហាញរបស់អេក្រង់</translation> + <source>Screen Resolution</source> + <translation>គុណភាពបង្ហាញរបស់អេក្រង់</translation> </message> <message> - <source>CD/DVD-ROM Statistics</source> - <translation>ស្ថិតិស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>CD/DVD-ROM Statistics</source> + <translation>ស្ថិតិស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>Network Adapter Statistics</source> - <translation>ស្ថិតិអាដាប់ទ័របណ្ដាញ</translation> + <source>Network Adapter Statistics</source> + <translation>ស្ថិតិអាដាប់ទ័របណ្ដាញ</translation> </message> <message> - <source>Version %1.%2</source> - <comment>guest additions</comment> - <translation>កំណែ %1.%2</translation> + <source>Version %1.%2</source> + <comment>guest additions</comment> + <translation>កំណែ %1.%2</translation> </message> <message> - <source>Not Detected</source> - <comment>guest additions</comment> - <translation>រកមិនឃើញ</translation> + <source>Not Detected</source> + <comment>guest additions</comment> + <translation>រកមិនឃើញ</translation> </message> <message> - <source>Not Detected</source> - <comment>guest os type</comment> - <translation>រកមិនឃើញ</translation> + <source>Not Detected</source> + <comment>guest os type</comment> + <translation>រកមិនឃើញ</translation> </message> <message> - <source>Guest Additions</source> - <translation>ការបន្ថែមម៉ាស៊ីនភ្ញៀវ</translation> + <source>Guest Additions</source> + <translation>ការបន្ថែមម៉ាស៊ីនភ្ញៀវ</translation> </message> <message> - <source>Guest OS Type</source> - <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ</translation> + <source>Guest OS Type</source> + <translation>ប្រភេទប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ</translation> </message> <message> - <source>Hard Disk Statistics</source> - <translation>ស្ថិតិថាសរឹង</translation> + <source>Hard Disk Statistics</source> + <translation>ស្ថិតិថាសរឹង</translation> </message> <message> - <source>No Hard Disks</source> - <translation>គ្មានថាសរឹងទេ</translation> + <source>No Hard Disks</source> + <translation>គ្មានថាសរឹងទេ</translation> </message> <message> - <source>No Network Adapters</source> - <translation>គ្មានអាដាប់ទ័របណ្ដាញទេ</translation> + <source>No Network Adapters</source> + <translation>គ្មានអាដាប់ទ័របណ្ដាញទេ</translation> </message> <message> - <source>Enabled</source> - <comment>nested paging</comment> - <translation>បានបើក</translation> + <source>Enabled</source> + <comment>nested paging</comment> + <translation>បានបើក</translation> </message> <message> - <source>Disabled</source> - <comment>nested paging</comment> - <translation>បានបិទ</translation> + <source>Disabled</source> + <comment>nested paging</comment> + <translation>បានបិទ</translation> </message> <message> - <source>Nested Paging</source> - <translation>ភេយីងខាងក្នុង</translation> + <source>Nested Paging</source> + <translation>ភេយីងខាងក្នុង</translation> </message> <message> - <source>VBoxVMInformationDlg</source> - <translation>VBoxVMInformationDlg</translation> + <source>VBoxVMInformationDlg</source> + <translation>VBoxVMInformationDlg</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMListView</name> <message> - <source>Inaccessible</source> - <translation>មិនអាចចូលដំណើរការបាន</translation> + <source>Inaccessible</source> + <translation>មិនអាចចូលដំណើរការបាន</translation> </message> <message> - <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source> - <comment>VM tooltip (name, last state change, session state)</comment> - <translation><nobr>%1<br></nobr><nobr>%2 តាំងពី %3</nobr><br><nobr>សម័យ %4</nobr></translation> + <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source> + <comment>VM tooltip (name, last state change, session state)</comment> + <translation><nobr>%1<br></nobr><nobr>%2 តាំងពី %3</nobr><br><nobr>សម័យ %4</nobr></translation> </message> <message> - <source><nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr></source> - <comment>Inaccessible VM tooltip (name, last state change)</comment> - <translation><nobr><b>%1</b><br></nobr><nobr>មិនអាចចូលដំណើរការបានតាំងពីរ %2</nobr></translation> + <source><nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr></source> + <comment>Inaccessible VM tooltip (name, last state change)</comment> + <translation><nobr><b>%1</b><br></nobr><nobr>មិនអាចចូលដំណើរការបានតាំងពីរ %2</nobr></translation> </message> <message> - <source>S&how</source> - <translation>បង្ហាញ</translation> + <source>S&how</source> + <translation>បង្ហាញ</translation> </message> <message> - <source>Switch to the window of the selected virtual machine</source> - <translation>ប្ដូរទៅបង្អួចរបស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>Switch to the window of the selected virtual machine</source> + <translation>ប្ដូរទៅបង្អួចរបស់ម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>S&tart</source> - <translation>ចាប់ផ្ដើម</translation> + <source>S&tart</source> + <translation>ចាប់ផ្ដើម</translation> </message> <message> - <source>Start the selected virtual machine</source> - <translation>ចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> + <source>Start the selected virtual machine</source> + <translation>ចាប់ផ្ដើមម៉ាស៊ីននិម្មិតដែលបានជ្រើស</translation> </message> <message> - <source>R&esume</source> - <translation>បន្ត</translation> + <source>R&esume</source> + <translation>បន្ត</translation> </message> <message> - <source>Resume the execution of the virtual machine</source> - <translation>បន្តប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> + <source>Resume the execution of the virtual machine</source> + <translation>បន្តប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> </message> <message> - <source>&Pause</source> - <translation>ផ្អាក</translation> + <source>&Pause</source> + <translation>ផ្អាក</translation> </message> <message> - <source>Suspend the execution of the virtual machine</source> - <translation>ផ្អាកប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> + <source>Suspend the execution of the virtual machine</source> + <translation>ផ្អាកប្រតិបត្តិការរបស់ម៉ាស៊ីននិម្មិត</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMLogViewer</name> <message> - <source>Log Viewer</source> - <translation>កម្មវិធីមើលកំណត់ហេតុ</translation> + <source>Log Viewer</source> + <translation>កម្មវិធីមើលកំណត់ហេតុ</translation> </message> <message> - <source>&Save</source> - <translation>រក្សាទុក</translation> + <source>&Save</source> + <translation>រក្សាទុក</translation> </message> <message> - <source>&Refresh</source> - <translation>ធ្វើឲ្យស្រស់</translation> + <source>&Refresh</source> + <translation>ធ្វើឲ្យស្រស់</translation> </message> <message> - <source>%1 - VirtualBox Log Viewer</source> - <translation>%1 - កម្មវិធីមើលកំណត់ហេតុរបស់ VirtualBox</translation> + <source>%1 - VirtualBox Log Viewer</source> + <translation>%1 - កម្មវិធីមើលកំណត់ហេតុរបស់ VirtualBox</translation> </message> <message> - <source><p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p></source> - <translation><p>រកមិនឃើញកំណត់ហេតុទេ ។ ចុចប៊ូតុង <b>ធ្វើឲ្យស្រស់</b> ដើម្បីវិភាគថតកំណត់ហេតុម្ដងទៀត <nobr><b>%1</b></nobr> ។</p></translation> + <source><p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p></source> + <translation><p>រកមិនឃើញកំណត់ហេតុទេ ។ ចុចប៊ូតុង <b>ធ្វើឲ្យស្រស់</b> ដើម្បីវិភាគថតកំណត់ហេតុម្ដងទៀត <nobr><b>%1</b></nobr> ។</p></translation> </message> <message> - <source>Save VirtualBox Log As</source> - <translation>រក្សាទុកកំណត់ហេតុ VirtualBox ជា</translation> + <source>Save VirtualBox Log As</source> + <translation>រក្សាទុកកំណត់ហេតុ VirtualBox ជា</translation> </message> <message> - <source>&Find</source> - <translation>រក</translation> + <source>&Find</source> + <translation>រក</translation> </message> <message> - <source>Close</source> - <translation>បិទ</translation> + <source>Close</source> + <translation>បិទ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsAudio</name> <message> - <source>When checked, the virtual PCI audio card is plugged into the virtual machine that uses the specified driver to communicate to the host audio card.</source> - <translation>នៅពេលបានគូសធីក កាតអូឌីយ៉ូ PCI និម្មិតនៅក្នុងម៉ាស៊ីននិម្មិត ដែលប្រើកម្មវិធីបញ្ជាដែលបានបញ្ជាក់ទាក់ទងទៅកាតអូឌីយ៉ូរបស់ម៉ាស៊ីន ។</translation> + <source>When checked, the virtual PCI audio card is plugged into the virtual machine that uses the specified driver to communicate to the host audio card.</source> + <translation>នៅពេលបានគូសធីក កាតអូឌីយ៉ូ PCI និម្មិតនៅក្នុងម៉ាស៊ីននិម្មិត ដែលប្រើកម្មវិធីបញ្ជាដែលបានបញ្ជាក់ទាក់ទងទៅកាតអូឌីយ៉ូរបស់ម៉ាស៊ីន ។</translation> </message> <message> - <source>Enable &Audio</source> - <translation>បើកអូឌីយ៉ូ</translation> + <source>Enable &Audio</source> + <translation>បើកអូឌីយ៉ូ</translation> </message> <message> - <source>Host Audio &Driver:</source> - <translation>កម្មវិធីបញ្ជាអូឌីយ៉ូរបស់ម៉ាស៊ីន ៖</translation> + <source>Host Audio &Driver:</source> + <translation>កម្មវិធីបញ្ជាអូឌីយ៉ូរបស់ម៉ាស៊ីន ៖</translation> </message> <message> - <source>Controls the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source> - <translation>ត្រួតពិនិត្យកម្មវិធីបញ្ជាលទ្ធផលអូឌីយ៉ូ ។ <b>គ្មានកម្មវិធីបញ្ជាអូឌីយ៉ូ</b> ធ្វើឲ្យម៉ាស៊ីនភ្ញៀវឃើញកាតអូឌីយ៉ូ ទោះជាយ៉ាងណារាល់ពេលចូលដំណើរការវានឹងត្រូវបានមិនអើពើ ។</translation> + <source>Controls the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source> + <translation>ត្រួតពិនិត្យកម្មវិធីបញ្ជាលទ្ធផលអូឌីយ៉ូ ។ <b>គ្មានកម្មវិធីបញ្ជាអូឌីយ៉ូ</b> ធ្វើឲ្យម៉ាស៊ីនភ្ញៀវឃើញកាតអូឌីយ៉ូ ទោះជាយ៉ាងណារាល់ពេលចូលដំណើរការវានឹងត្រូវបានមិនអើពើ ។</translation> </message> <message> - <source>Audio &Controller:</source> - <translation>វត្ថុបញ្ជាអូឌីយ៉ូ ៖</translation> + <source>Audio &Controller:</source> + <translation>វត្ថុបញ្ជាអូឌីយ៉ូ ៖</translation> </message> <message> - <source>Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine.</source> - <translation>ជ្រើសប្រភេទកាតសំឡេងនិម្មិត ។ ដោយអាស្រ័យលើតម្លៃនេះ VirtualBox នឹងផ្ដល់នូវផ្នែករឹងអូឌីយ៉ូផ្សេងៗគ្នាដល់ម៉ាស៊ីននិម្មិត ។</translation> + <source>Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine.</source> + <translation>ជ្រើសប្រភេទកាតសំឡេងនិម្មិត ។ ដោយអាស្រ័យលើតម្លៃនេះ VirtualBox នឹងផ្ដល់នូវផ្នែករឹងអូឌីយ៉ូផ្សេងៗគ្នាដល់ម៉ាស៊ីននិម្មិត ។</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsCD</name> <message> - <source>Host CD/DVD drive is not selected</source> - <translation>ដ្រាយស៊ីឌី/ឌីវីឌីរបស់ម៉ាស៊ីនមិនត្រូវបានជ្រើសទេ</translation> + <source>Host CD/DVD drive is not selected</source> + <translation>ដ្រាយស៊ីឌី/ឌីវីឌីរបស់ម៉ាស៊ីនមិនត្រូវបានជ្រើសទេ</translation> </message> <message> - <source>CD/DVD image file is not selected</source> - <translation>ឯកសាររូបភាពស៊ីឌី/ឌីវីឌីមិនត្រូវបានជ្រើសទេ</translation> + <source>CD/DVD image file is not selected</source> + <translation>ឯកសាររូបភាពស៊ីឌី/ឌីវីឌីមិនត្រូវបានជ្រើសទេ</translation> </message> <message> - <source>When checked, mounts the specified media to the CD/DVD drive of the virtual machine. Note that the CD/DVD drive is always connected to the Secondary Master IDE controller of the machine.</source> - <translation>នៅពេលបានគូសធីក ចំនួនមេឌៀដែលបានបញ្ជាក់ទៅដ្រាយស៊ីឌី/ឌីវីឌីរបស់ម៉ាស៊ីននិម្មិត ។ ចំណាំថា ដ្រាយស៊ីឌី/ឌីវីឌីត្រូវបានតភ្ជាប់ជានិច្ចទៅកាន់ឧបករណ៍បញ្ជា IDE មេទីពីររបស់ម៉ាស៊ីន ។</translation> + <source>When checked, mounts the specified media to the CD/DVD drive of the virtual machine. Note that the CD/DVD drive is always connected to the Secondary Master IDE controller of the machine.</source> + <translation>នៅពេលបានគូសធីក ចំនួនមេឌៀដែលបានបញ្ជាក់ទៅដ្រាយស៊ីឌី/ឌីវីឌីរបស់ម៉ាស៊ីននិម្មិត ។ ចំណាំថា ដ្រាយស៊ីឌី/ឌីវីឌីត្រូវបានតភ្ជាប់ជានិច្ចទៅកាន់ឧបករណ៍បញ្ជា IDE មេទីពីររបស់ម៉ាស៊ីន ។</translation> </message> <message> - <source>&Mount CD/DVD Drive</source> - <translation>ម៉ោនដ្រាយស៊ីឌី/ឌីវីឌី</translation> + <source>&Mount CD/DVD Drive</source> + <translation>ម៉ោនដ្រាយស៊ីឌី/ឌីវីឌី</translation> </message> <message> - <source>Mounts the specified CD/DVD drive to the virtual CD/DVD drive.</source> - <translation>ម៉ោនដ្រាយស៊ីឌី/ឌីវីឌីដែលបានបញ្ជាក់ទៅដ្រាយស៊ីឌី/ឌីវីឌីនិម្មិត ។</translation> + <source>Mounts the specified CD/DVD drive to the virtual CD/DVD drive.</source> + <translation>ម៉ោនដ្រាយស៊ីឌី/ឌីវីឌីដែលបានបញ្ជាក់ទៅដ្រាយស៊ីឌី/ឌីវីឌីនិម្មិត ។</translation> </message> <message> - <source>Host CD/DVD &Drive</source> - <translation>ដ្រាយស៊ីឌី/ឌីវីឌីម៉ាស៊ីន</translation> + <source>Host CD/DVD &Drive</source> + <translation>ដ្រាយស៊ីឌី/ឌីវីឌីម៉ាស៊ីន</translation> </message> <message> - <source>Lists host CD/DVD drives available to mount to the virtual machine.</source> - <translation>រាយដ្រាយស៊ីឌី/ឌីវីឌីម៉ាស៊ីនដែលមានដើម្បីម៉ោនទៅកាន់ម៉ាស៊ីននិម្មិត ។</translation> + <source>Lists host CD/DVD drives available to mount to the virtual machine.</source> + <translation>រាយដ្រាយស៊ីឌី/ឌីវីឌីម៉ាស៊ីនដែលមានដើម្បីម៉ោនទៅកាន់ម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>When checked, allows the guest to send ATAPI commands directly to the host drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source> - <translation>នៅពេលបានគូសធីក អនុញ្ញាតឲ្យម៉ាស៊ីនភ្ញៀវផ្ញើពាក្យបញ្ជា ATAPI ទៅដ្រាយម៉ាស៊ីនដែលធ្វើឲ្យវាអាចប្រើកម្មវិធីសរសេរស៊ីឌី/ឌីវីឌីទៅខាងក្នុងម៉ាស៊ីន VM ។ ចំណាំថា ការសរសេរស៊ីឌីអូឌីយ៉ូខាងក្នុង VM មិនត្រូវបានគាំទ្រនៅឡើយទេ ។</translation> + <source>When checked, allows the guest to send ATAPI commands directly to the host drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source> + <translation>នៅពេលបានគូសធីក អនុញ្ញាតឲ្យម៉ាស៊ីនភ្ញៀវផ្ញើពាក្យបញ្ជា ATAPI ទៅដ្រាយម៉ាស៊ីនដែលធ្វើឲ្យវាអាចប្រើកម្មវិធីសរសេរស៊ីឌី/ឌីវីឌីទៅខាងក្នុងម៉ាស៊ីន VM ។ ចំណាំថា ការសរសេរស៊ីឌីអូឌីយ៉ូខាងក្នុង VM មិនត្រូវបានគាំទ្រនៅឡើយទេ ។</translation> </message> <message> - <source>Enable &Passthrough</source> - <translation>បើកការពិនិត្យឆ្លង</translation> + <source>Enable &Passthrough</source> + <translation>បើកការពិនិត្យឆ្លង</translation> </message> <message> - <source>Mounts the specified CD/DVD image to the virtual CD/DVD drive.</source> - <translation>ម៉ោនរូបភាពស៊ីឌី/ឌីវីឌីដែលបានបញ្ជាក់ទៅដ្រាយស៊ីឌី/ឌីវីឌីនិម្មិត ។</translation> + <source>Mounts the specified CD/DVD image to the virtual CD/DVD drive.</source> + <translation>ម៉ោនរូបភាពស៊ីឌី/ឌីវីឌីដែលបានបញ្ជាក់ទៅដ្រាយស៊ីឌី/ឌីវីឌីនិម្មិត ។</translation> </message> <message> - <source>&ISO Image File</source> - <translation>ឯកសាររូបភាពអាយអេសអូ</translation> + <source>&ISO Image File</source> + <translation>ឯកសាររូបភាពអាយអេសអូ</translation> </message> <message> - <source>Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image.</source> - <translation>បង្ហាញឯកសាររូបភាពដើម្បីម៉ោនទៅដ្រាយស៊ីឌី/ឌីវិឌីនិម្មិត ហើយអនុញ្ញាតឲ្យអ្នកជ្រើសរូបភាពផ្សេងយ៉ាងលឿន ។</translation> + <source>Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image.</source> + <translation>បង្ហាញឯកសាររូបភាពដើម្បីម៉ោនទៅដ្រាយស៊ីឌី/ឌីវិឌីនិម្មិត ហើយអនុញ្ញាតឲ្យអ្នកជ្រើសរូបភាពផ្សេងយ៉ាងលឿន ។</translation> </message> <message> - <source>Invokes the Virtual Media Manager to select a CD/DVD image to mount.</source> - <translation>ដកហូតកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិតដើម្បីជ្រើសរូបភាពស៊ីឌី/ឌីវីឌីដើម្បីម៉ោន ។</translation> + <source>Invokes the Virtual Media Manager to select a CD/DVD image to mount.</source> + <translation>ដកហូតកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិតដើម្បីជ្រើសរូបភាពស៊ីឌី/ឌីវីឌីដើម្បីម៉ោន ។</translation> </message> -</context> -<context> - <name>VBoxVMSettingsDisplay</name> - <message> - <source>you have assigned less than <b>%1</b> for video memory which is the minimum amount required to switch the virtual machine to fullscreen or seamless mode.</source> - <translation type="unfinished">អ្នកបានផ្ដល់សតិវីដេអូតិចជាង <b>%1</b> សម្រាប់សតិវីដេអូដែលជាចំនួនអប្បបរមាដែលបានទាមទារឲ្យប្ដូរម៉ាស៊ីននិម្មិតទៅរបៀបពេញអេក្រង់ ឬគ្មានថ្នេរ ។</translation> - </message> - <message> - <source><qt>%1&nbsp;MB</qt></source> - <translation type="unfinished"><qt>%1&nbsp;មេកាបៃ</qt></translation> - </message> - <message> - <source>&Video</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Video &Memory:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Controls the amount of video memory provided to the virtual machine.</source> - <translation type="unfinished">ត្រួតពិនិត្យចំនួនសតិវីឌីអូសរុបដែលបានផ្ដល់ឲ្យម៉ាស៊ីននិម្មិត ។</translation> - </message> - <message> - <source>MB</source> - <translation type="unfinished">មេកាបៃ</translation> - </message> - <message> - <source>Extended Features:</source> - <translation type="unfinished">លក្ខណៈសម្បត្តិដែលបានពង្រីក ៖</translation> - </message> - <message> - <source>When checked, the virtual machine will get access to the 3D graphics capabilities available on the host.</source> - <translation type="unfinished">នៅពេលបានគូសធីគ ម៉ាស៊ីននិម្មិតនឹងចូលដំណើរការសមត្ថភាពក្រាហ្វិកត្រីមាត្រដែលមាននៅលើម៉ាស៊ីន ។</translation> - </message> - <message> - <source>Enable &3D Acceleration</source> - <translation type="unfinished">បើកការបង្កើនល្បឿនត្រីមាត្រ</translation> - </message> - <message> - <source>&Remote Display</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source> - <translation type="unfinished">នៅពេលបានគូសធីក VM នឹងដើរតួជាម៉ាស៊ីនបម្រើពិធីការផ្ទៃតុពីចម្ងាយ (RDP) ដោយអនុញ្ញាតឲ្យម៉ាស៊ីនភ្ញៀវពីចម្ងាយតភ្ជាប់ ហើយប្រតិបត្តិ VM (នៅពេលកំពុងរត់) ដោយប្រើម៉ាស៊ីនភ្ញៀវ RDP ស្តង់ដារ ។</translation> - </message> - <message> - <source>&Enable Server</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Server &Port:</source> - <translation type="unfinished">ច្រកម៉ាស៊ីនបម្រើ ៖</translation> - </message> - <message> - <source>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</source> - <translation type="unfinished">បង្ហាញលេខច្រកម៉ាស៊ីនបម្រើ VRDP ។ អ្នកអាចបញ្ជាក់ <tt>0</tt> (សូន្យ) ដើម្បីកំណត់ច្រកទៅតម្លៃលំនាំដើមឡើងវិញ ។</translation> - </message> - <message> - <source>Authentication &Method:</source> - <translation type="unfinished">វិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖</translation> - </message> - <message> - <source>Defines the VRDP authentication method.</source> - <translation type="unfinished">កំណត់វិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ VRDP ។</translation> - </message> - <message> - <source>Authentication &Timeout:</source> - <translation type="unfinished">អស់ពេលផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖</translation> - </message> - <message> - <source>Specifies the timeout for guest authentication, in milliseconds.</source> - <translation type="unfinished">បញ្ជាក់ការអស់ពេលវេលាសម្រាប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ម៉ាស៊ីនភ្ញៀវ គិតជាមិល្លីវិនាទី ។</translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsDlg</name> <message> - <source>General</source> - <translation>ទូទៅ</translation> + <source>General</source> + <translation>ទូទៅ</translation> </message> <message> - <source>Storage</source> - <translation>ការផ្ទុក</translation> + <source>Storage</source> + <translation>ការផ្ទុក</translation> </message> <message> - <source>Hard Disks</source> - <translation>ថាសរឹង</translation> + <source>Hard Disks</source> + <translation>ថាសរឹង</translation> </message> <message> - <source>CD/DVD-ROM</source> - <translation>ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> + <source>CD/DVD-ROM</source> + <translation>ស៊ីឌី/ឌីវីឌីរ៉ូម</translation> </message> <message> - <source>Floppy</source> - <translation>ថាសទន់</translation> + <source>Floppy</source> + <translation>ថាសទន់</translation> </message> <message> - <source>Audio</source> - <translation>អូឌីយ៉ូ</translation> + <source>Audio</source> + <translation>អូឌីយ៉ូ</translation> </message> <message> - <source>Network</source> - <translation>បណ្ដាញ</translation> + <source>Network</source> + <translation>បណ្ដាញ</translation> </message> <message> - <source>Ports</source> - <translation>ច្រក</translation> + <source>Ports</source> + <translation>ច្រក</translation> </message> <message> - <source>Serial Ports</source> - <translation>ច្រកស៊េរៀល</translation> + <source>Serial Ports</source> + <translation>ច្រកស៊េរៀល</translation> </message> <message> - <source>Parallel Ports</source> - <translation>ច្រកស្រប</translation> + <source>Parallel Ports</source> + <translation>ច្រកស្រប</translation> </message> <message> - <source>USB</source> - <translation>USB</translation> + <source>USB</source> + <translation>USB</translation> </message> <message> - <source>Shared Folders</source> - <translation>ថតដែលបានចែករំលែក</translation> + <source>Shared Folders</source> + <translation>ថតដែលបានចែករំលែក</translation> </message> <message> - <source>Remote Display</source> - <translation type="obsolete">ការបង្ហាញពីចម្ងាយ</translation> + <source>Remote Display</source> + <translation>ការបង្ហាញពីចម្ងាយ</translation> </message> <message> - <source>%1 - %2</source> - <translation>%1 - %2</translation> + <source>%1 - %2</source> + <translation>%1 - %2</translation> </message> <message> - <source>On the <b>%1</b> page, %2</source> - <translation type="obsolete">នៅលើទំព័រ <b>%1</b> %2</translation> + <source>On the <b>%1</b> page, %2</source> + <translation>នៅលើទំព័រ <b>%1</b> %2</translation> </message> - <message> - <source>System</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Display</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>you have selected a 64-bit guest OS type for this VM. As such guests require hardware virtualization (VT-x/AMD-V), this feature will be enabled automatically.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>you have selected a 64-bit guest OS type for this VM. VirtualBox does not currently support more than one virtual CPU for 64-bit guests executed on 32-bit hosts.</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsFD</name> <message> - <source>Host floppy drive is not selected</source> - <translation>ដ្រាយថាសទន់របស់ម៉ាស៊ីនមិនត្រូវបានជ្រើសទេ</translation> + <source>Host floppy drive is not selected</source> + <translation>ដ្រាយថាសទន់របស់ម៉ាស៊ីនមិនត្រូវបានជ្រើសទេ</translation> </message> <message> - <source>Floppy image file is not selected</source> - <translation>ឯកសាររូបភាពថាសទន់មិនត្រូវបានជ្រើសទេ</translation> + <source>Floppy image file is not selected</source> + <translation>ឯកសាររូបភាពថាសទន់មិនត្រូវបានជ្រើសទេ</translation> </message> <message> - <source>When checked, mounts the specified media to the Floppy drive of the virtual machine.</source> - <translation>នៅពេលបានគូសធីក ម៉ោនមេឌៀដែលបានបញ្ជាក់ទៅដ្រាយថាសទន់របស់ម៉ាស៊ីននិម្មិត ។</translation> + <source>When checked, mounts the specified media to the Floppy drive of the virtual machine.</source> + <translation>នៅពេលបានគូសធីក ម៉ោនមេឌៀដែលបានបញ្ជាក់ទៅដ្រាយថាសទន់របស់ម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>&Mount Floppy Drive</source> - <translation>ម៉ោនដ្រាយថាសទន់</translation> + <source>&Mount Floppy Drive</source> + <translation>ម៉ោនដ្រាយថាសទន់</translation> </message> <message> - <source>Mounts the specified host Floppy drive to the virtual Floppy drive.</source> - <translation>ម៉ោនដ្រាយថាសទន់របស់ម៉ាស៊ីនដែលបានបញ្ជាក់ទៅដ្រាយថាសទន់និម្មិត ។</translation> + <source>Mounts the specified host Floppy drive to the virtual Floppy drive.</source> + <translation>ម៉ោនដ្រាយថាសទន់របស់ម៉ាស៊ីនដែលបានបញ្ជាក់ទៅដ្រាយថាសទន់និម្មិត ។</translation> </message> <message> - <source>Host Floppy &Drive</source> - <translation>ដ្រាយថាសទន់របស់ម៉ាស៊ីន</translation> + <source>Host Floppy &Drive</source> + <translation>ដ្រាយថាសទន់របស់ម៉ាស៊ីន</translation> </message> <message> - <source>Lists host Floppy drives available to mount to the virtual machine.</source> - <translation>រាយដ្រាយថាសទន់ម៉ាស៊ីនដែលអាចម៉ោនទៅម៉ាស៊ីននិម្មិតបាន ។</translation> + <source>Lists host Floppy drives available to mount to the virtual machine.</source> + <translation>រាយដ្រាយថាសទន់ម៉ាស៊ីនដែលអាចម៉ោនទៅម៉ាស៊ីននិម្មិតបាន ។</translation> </message> <message> - <source>Mounts the specified Floppy image to the virtual Floppy drive.</source> - <translation>ម៉ោនរូបភាពថាសទន់ដែលបានបញ្ជាក់ទៅដ្រាយថាសទន់និម្មិត ។</translation> + <source>Mounts the specified Floppy image to the virtual Floppy drive.</source> + <translation>ម៉ោនរូបភាពថាសទន់ដែលបានបញ្ជាក់ទៅដ្រាយថាសទន់និម្មិត ។</translation> </message> <message> - <source>&Image File</source> - <translation>ឯកសាររូបភាព</translation> + <source>&Image File</source> + <translation>ឯកសាររូបភាព</translation> </message> <message> - <source>Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image.</source> - <translation>បង្ហាញឯកសាររូបភាពដើម្បីម៉ោនទៅកាន់ដ្រាយថាសទន់និម្មិត ហើយអនុញ្ញាតឲ្យជ្រើសរូបភាពផ្សេងៗយ៉ាងលឿន ។</translation> + <source>Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image.</source> + <translation>បង្ហាញឯកសាររូបភាពដើម្បីម៉ោនទៅកាន់ដ្រាយថាសទន់និម្មិត ហើយអនុញ្ញាតឲ្យជ្រើសរូបភាពផ្សេងៗយ៉ាងលឿន ។</translation> </message> <message> - <source>Invokes the Virtual Media Manager to select a Floppy image to mount.</source> - <translation>ដកហូតកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ដើម្បីជ្រើសរូបភាពថាសទន់ដើម្បីម៉ោន ។</translation> + <source>Invokes the Virtual Media Manager to select a Floppy image to mount.</source> + <translation>ដកហូតកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ដើម្បីជ្រើសរូបភាពថាសទន់ដើម្បីម៉ោន ។</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsGeneral</name> <message> - <source><qt>%1&nbsp;MB</qt></source> - <translation type="obsolete"><qt>%1&nbsp;មេកាបៃ</qt></translation> - </message> - <message> - <source>Displays the path where snapshots of this virtual machine will be stored. Note that snapshots can take quite a lot of disk space.</source> - <translation>បង្ហាញផ្លូវដែលរូបថតរបស់ម៉ាស៊ីននិម្មិតនេះនឹងត្រូវបានផ្ទុក ។ ចំណាំថា រូបថតអាចចាប់យកទំហំថាសជាច្រើនយ៉ាងស្ងៀវស្ងាត់ ។</translation> - </message> - <message> - <source>&Basic</source> - <translation>មូលដ្ឋាន</translation> - </message> - <message> - <source>Identification</source> - <translation type="obsolete">ការកំណត់អត្តសញ្ញាណ</translation> - </message> - <message> - <source>&Name:</source> - <translation>ឈ្មោះ ៖</translation> - </message> - <message> - <source>Displays the name of the virtual machine.</source> - <translation>បង្ហាញឈ្មោះរបស់ម៉ាស៊ីននិម្មិត ។</translation> + <source><qt>%1&nbsp;MB</qt></source> + <translation><qt>%1&nbsp;មេកាបៃ</qt></translation> </message> <message> - <source>Base &Memory Size</source> - <translation type="obsolete">ទំហំសតិមូលដ្ឋាន</translation> + <source>Displays the path where snapshots of this virtual machine will be stored. Note that snapshots can take quite a lot of disk space.</source> + <translation>បង្ហាញផ្លូវដែលរូបថតរបស់ម៉ាស៊ីននិម្មិតនេះនឹងត្រូវបានផ្ទុក ។ ចំណាំថា រូបថតអាចចាប់យកទំហំថាសជាច្រើនយ៉ាងស្ងៀវស្ងាត់ ។</translation> </message> <message> - <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source> - <translation type="obsolete">ត្រួតពិនិត្យចំនួនសតិដែលបានផ្ដល់ទៅម៉ាស៊ីននិម្មិត ។ ប្រសិនបើអ្នកផ្ដល់ច្រើនពេក ម៉ាស៊ីនមិនអាចចាប់ផ្ដើមបានទេ ។</translation> + <source>&Basic</source> + <translation>មូលដ្ឋាន</translation> </message> <message> - <source><</source> - <translation type="obsolete"><</translation> + <source>Identification</source> + <translation>ការកំណត់អត្តសញ្ញាណ</translation> </message> <message> - <source>></source> - <translation type="obsolete">></translation> + <source>&Name:</source> + <translation>ឈ្មោះ ៖</translation> </message> <message> - <source>MB</source> - <translation type="obsolete">មេកាបៃ</translation> + <source>Displays the name of the virtual machine.</source> + <translation>បង្ហាញឈ្មោះរបស់ម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>&Video Memory Size</source> - <translation type="obsolete">ទំហំសតិវីដេអូ</translation> + <source>Base &Memory Size</source> + <translation>ទំហំសតិមូលដ្ឋាន</translation> </message> <message> - <source>Controls the amount of video memory provided to the virtual machine.</source> - <translation type="obsolete">ត្រួតពិនិត្យចំនួនសតិវីឌីអូសរុបដែលបានផ្ដល់ឲ្យម៉ាស៊ីននិម្មិត ។</translation> + <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source> + <translation>ត្រួតពិនិត្យចំនួនសតិដែលបានផ្ដល់ទៅម៉ាស៊ីននិម្មិត ។ ប្រសិនបើអ្នកផ្ដល់ច្រើនពេក ម៉ាស៊ីនមិនអាចចាប់ផ្ដើមបានទេ ។</translation> </message> <message> - <source>&Advanced</source> - <translation>កម្រិតខ្ពស់</translation> + <source><</source> + <translation><</translation> </message> <message> - <source>Boo&t Order:</source> - <translation type="obsolete">លំដាប់ចាប់ផ្ដើម ៖</translation> + <source>></source> + <translation>></translation> </message> <message> - <source>Defines the boot device order. Use checkboxes to the left to enable or disable individual boot devices. Move items up and down to change the device order.</source> - <translation type="obsolete">កំណត់លំដាប់ឧបករណ៍ចាប់ផ្ដើម ។ ប្រើប្រអប់គូសធីកនៅខាងឆ្វេងដើម្បីបើក ឬបិទឧបករណ៍ចាប់ផ្ដើមនីមួយៗ ។ ផ្លាស់ទីធាតុឡើងលើ និងចុះក្រោមដើម្បីផ្លាស់ប្ដូរលំដាប់ឧបករណ៍ ។</translation> + <source>MB</source> + <translation>មេកាបៃ</translation> </message> <message> - <source>[device]</source> - <translation type="obsolete">[ឧបករណ៍]</translation> + <source>&Video Memory Size</source> + <translation>ទំហំសតិវីដេអូ</translation> </message> <message> - <source>Move Up (Ctrl-Up)</source> - <translation type="obsolete">ផ្លាស់ទីឡើងលើ (បញ្ជា(Ctrl)-Up)</translation> + <source>Controls the amount of video memory provided to the virtual machine.</source> + <translation>ត្រួតពិនិត្យចំនួនសតិវីឌីអូសរុបដែលបានផ្ដល់ឲ្យម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>Moves the selected boot device up.</source> - <translation type="obsolete">ផ្លាស់ទីឧបករណ៍ចាប់ផ្ដើមដែលបានជ្រើសឡើងលើ ។</translation> + <source>&Advanced</source> + <translation>កម្រិតខ្ពស់</translation> </message> <message> - <source>Move Down (Ctrl-Down)</source> - <translation type="obsolete">ផ្លាស់ទីចុះក្រោម (បញ្ជា(Ctrl)-Down)</translation> + <source>Boo&t Order:</source> + <translation>លំដាប់ចាប់ផ្ដើម ៖</translation> </message> <message> - <source>Moves the selected boot device down.</source> - <translation type="obsolete">ផ្លាស់ទីឧបករណ៍ចាប់ផ្ដើមដែលបានជ្រើសចុះក្រោម ។</translation> + <source>Defines the boot device order. Use checkboxes to the left to enable or disable individual boot devices. Move items up and down to change the device order.</source> + <translation>កំណត់លំដាប់ឧបករណ៍ចាប់ផ្ដើម ។ ប្រើប្រអប់គូសធីកនៅខាងឆ្វេងដើម្បីបើក ឬបិទឧបករណ៍ចាប់ផ្ដើមនីមួយៗ ។ ផ្លាស់ទីធាតុឡើងលើ និងចុះក្រោមដើម្បីផ្លាស់ប្ដូរលំដាប់ឧបករណ៍ ។</translation> </message> <message> - <source>Extended Features:</source> - <translation type="obsolete">លក្ខណៈសម្បត្តិដែលបានពង្រីក ៖</translation> + <source>[device]</source> + <translation>[ឧបករណ៍]</translation> </message> <message> - <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation type="obsolete">នៅពេលបានគូសធីក ម៉ាស៊ីននិម្មិតនឹងគាំទ្រការកំណត់រចនាសម្ព័ន្ធកម្រិតខ្ពស់ និងចំណុចប្រទាក់គ្រប់គ្រងថាមពល (ACPI) ។ <b>ចំណាំ ៖</b> កុំបិទលក្ខណៈពិសេសនេះ បន្ទាប់ពីបានដំឡើងប្រព័ន្ធប្រតិបត្តិការវីនដូរបស់ម៉ាស៊ីនភ្ញៀវ !</translation> + <source>Move Up (Ctrl-Up)</source> + <translation>ផ្លាស់ទីឡើងលើ (បញ្ជា(Ctrl)-Up)</translation> </message> <message> - <source>Enable A&CPI</source> - <translation type="obsolete">បើក ACPI</translation> + <source>Moves the selected boot device up.</source> + <translation>ផ្លាស់ទីឧបករណ៍ចាប់ផ្ដើមដែលបានជ្រើសឡើងលើ ។</translation> </message> <message> - <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease the VM performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation type="obsolete">នៅពេលបានគូសធីក ម៉ាស៊ីននិម្មិតនឹងគាំទ្រ Input Output APIC (IO APIC) ដែលអាចបន្ថយការអនុវត្តរបស់ VM តិចតួច ។ <b>ចំណាំ ៖</b> កុំបិទលក្ខណៈពិសេសនេះបន្ទាប់ពីដំឡើងប្រព័ន្ធប្រតិបត្តិការវីនដូរបស់ម៉ាស៊ីនភ្ញៀវ !</translation> + <source>Move Down (Ctrl-Down)</source> + <translation>ផ្លាស់ទីចុះក្រោម (បញ្ជា(Ctrl)-Down)</translation> </message> <message> - <source>Enable IO A&PIC</source> - <translation type="obsolete">បើក IO APIC</translation> + <source>Moves the selected boot device down.</source> + <translation>ផ្លាស់ទីឧបករណ៍ចាប់ផ្ដើមដែលបានជ្រើសចុះក្រោម ។</translation> </message> <message> - <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> - <translation type="obsolete">នៅពេលបានគូសធីគ ម៉ាស៊ីននិម្មិតនឹងព្យាយាមប្រាកដថាផ្នែកបន្ថែមនិម្មិតផ្នែករឹងរបស់ស៊ីភីយូរបស់ម៉ាស៊ីនដូចជា Intel VT-x និង AMD-V ។</translation> + <source>Extended Features:</source> + <translation>លក្ខណៈសម្បត្តិដែលបានពង្រីក ៖</translation> </message> <message> - <source>Enable &VT-x/AMD-V</source> - <translation type="obsolete">បើក VT-x/AMD-V</translation> + <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> + <translation>នៅពេលបានគូសធីក ម៉ាស៊ីននិម្មិតនឹងគាំទ្រការកំណត់រចនាសម្ព័ន្ធកម្រិតខ្ពស់ និងចំណុចប្រទាក់គ្រប់គ្រងថាមពល (ACPI) ។ <b>ចំណាំ ៖</b> កុំបិទលក្ខណៈពិសេសនេះ បន្ទាប់ពីបានដំឡើងប្រព័ន្ធប្រតិបត្តិការវីនដូរបស់ម៉ាស៊ីនភ្ញៀវ !</translation> </message> <message> - <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source> - <translation type="obsolete">នៅពេលបានគូសធីក លក្ខណៈពិសេសរបស់ Physical Address Extension (PAE) នៃស៊ីភីយូរបស់ម៉ាស៊ីននឹងត្រូវបានបង្ហាញដល់ម៉ាស៊ីននិម្មិត ។</translation> + <source>Enable A&CPI</source> + <translation>បើក ACPI</translation> </message> <message> - <source>Enable PA&E/NX</source> - <translation type="obsolete">បើក PAE/NX</translation> + <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease the VM performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> + <translation>នៅពេលបានគូសធីក ម៉ាស៊ីននិម្មិតនឹងគាំទ្រ Input Output APIC (IO APIC) ដែលអាចបន្ថយការអនុវត្តរបស់ VM តិចតួច ។ <b>ចំណាំ ៖</b> កុំបិទលក្ខណៈពិសេសនេះបន្ទាប់ពីដំឡើងប្រព័ន្ធប្រតិបត្តិការវីនដូរបស់ម៉ាស៊ីនភ្ញៀវ !</translation> </message> <message> - <source>&Shared Clipboard:</source> - <translation>ក្ដារតម្បៀតខ្ទាស់ដែលបានចែករំលែក ៖</translation> + <source>Enable IO A&PIC</source> + <translation>បើក IO APIC</translation> </message> <message> - <source>Defines the mode of sharing the clipboard between the guest and the host OS. Note that this feature requires Guest Additions to be installed in the guest OS.</source> - <translation>កំណត់របៀបចែករំលែកក្ដារតម្បៀតខ្ទាស់រវាងប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ និងរបស់ម៉ាស៊ីន ។ ចំណាំថា លក្ខណៈពិសេសនេះតម្រូវឲ្យដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីន ។</translation> + <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> + <translation>នៅពេលបានគូសធីគ ម៉ាស៊ីននិម្មិតនឹងព្យាយាមប្រាកដថាផ្នែកបន្ថែមនិម្មិតផ្នែករឹងរបស់ស៊ីភីយូរបស់ម៉ាស៊ីនដូចជា Intel VT-x និង AMD-V ។</translation> </message> <message> - <source>Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS.</source> - <translation type="obsolete">កំណត់ប្រភេទឧបករណ៍បញ្ជា IDE និម្មិត ។ ដោយអាស្រ័យលើតម្លៃនេះ VirtualBox នឹងផ្ដល់នូវឧបករណ៍ផ្នែករឹង IDE ផ្សេងៗគ្នាដល់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> + <source>Enable &VT-x/AMD-V</source> + <translation>បើក VT-x/AMD-V</translation> </message> <message> - <source>&IDE Controller Type:</source> - <translation type="obsolete">ប្រភេទវត្ថុបញ្ជា IDE ៖</translation> + <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source> + <translation>នៅពេលបានគូសធីក លក្ខណៈពិសេសរបស់ Physical Address Extension (PAE) នៃស៊ីភីយូរបស់ម៉ាស៊ីននឹងត្រូវបានបង្ហាញដល់ម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>S&napshot Folder:</source> - <translation>ថតរូបថត ៖</translation> + <source>Enable PA&E/NX</source> + <translation>បើក PAE/NX</translation> </message> <message> - <source>&Description</source> - <translation>សេចក្ដីពិពណ៌នា</translation> + <source>&Shared Clipboard:</source> + <translation>ក្ដារតម្បៀតខ្ទាស់ដែលបានចែករំលែក ៖</translation> </message> <message> - <source>Displays the description of the virtual machine. The description field is useful for commenting configuration details of the installed guest OS.</source> - <translation>បង្ហាញសេចក្ដីពិពណ៌នារបស់ម៉ាស៊ីននិម្មិត ។ វាលសេចក្ដីពិពន៌នាមានប្រយោជន៍សម្រាប់ផ្ដល់យោបល់អំពីសេចក្ដីលម្អិតកំណត់រចនាសម្ព័ន្ធរបស់ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវដែលបានដំឡើង ។</translation> + <source>Defines the mode of sharing the clipboard between the guest and the host OS. Note that this feature requires Guest Additions to be installed in the guest OS.</source> + <translation>កំណត់របៀបចែករំលែកក្ដារតម្បៀតខ្ទាស់រវាងប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវ និងរបស់ម៉ាស៊ីន ។ ចំណាំថា លក្ខណៈពិសេសនេះតម្រូវឲ្យដំឡើងផ្នែកបន្ថែមម៉ាស៊ីនភ្ញៀវក្នុងប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីន ។</translation> </message> <message> - <source>&Other</source> - <translation type="obsolete">ផ្សេងៗ</translation> + <source>Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS.</source> + <translation>កំណត់ប្រភេទឧបករណ៍បញ្ជា IDE និម្មិត ។ ដោយអាស្រ័យលើតម្លៃនេះ VirtualBox នឹងផ្ដល់នូវឧបករណ៍ផ្នែករឹង IDE ផ្សេងៗគ្នាដល់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> </message> <message> - <source>If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs.</source> - <translation>ប្រសិនបើបានគូសធីក ការផ្លាស់ប្ដូរទៅមេឌៀថាសទន់ ឬស៊ីឌី/ឌីវីឌីដែលបានម៉ោន បាន អនុវត្តកំឡុងពេលប្រតិបត្តិការម៉ាស៊ីន នឹងត្រូវបានរក្សាទុកក្នុងឯកសារកំណត់ ដើម្បីបម្រុងទុកនូវការកំណត់រចនាសម្ព័ន្ធរបស់មេឌៀដែលបានម៉ោនចន្លោះពេលរត់ ។</translation> + <source>&IDE Controller Type:</source> + <translation>ប្រភេទវត្ថុបញ្ជា IDE ៖</translation> </message> <message> - <source>&Remember Mounted Media</source> - <translation type="obsolete">មេឌៀដែលបានម៉ោនសមាជិក</translation> + <source>S&napshot Folder:</source> + <translation>ថតរូបថត ៖</translation> </message> <message> - <source>Runtime:</source> - <translation type="obsolete">ពេលវេលារត់៖</translation> + <source>&Description</source> + <translation>សេចក្ដីពិពណ៌នា</translation> </message> <message> - <source>you have assigned more than <b>75%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> - <translation type="obsolete">អ្នកបានផ្ដល់សតិកុំព្យូទ័រច្រើនជាង <b>75%</b> នៃកុំព្យូទ័ររបស់ (<b>%1</b>) ដល់ម៉ាស៊ីននិម្មមិត ។ គ្មានសតិនៅសល់គ្រប់គ្រាន់សម្រាប់ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនរបស់អ្នកទេ ។ សូមជ្រើសចំនួនសតិតូចជាងនេះ ។</translation> + <source>Displays the description of the virtual machine. The description field is useful for commenting configuration details of the installed guest OS.</source> + <translation>បង្ហាញសេចក្ដីពិពណ៌នារបស់ម៉ាស៊ីននិម្មិត ។ វាលសេចក្ដីពិពន៌នាមានប្រយោជន៍សម្រាប់ផ្ដល់យោបល់អំពីសេចក្ដីលម្អិតកំណត់រចនាសម្ព័ន្ធរបស់ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនភ្ញៀវដែលបានដំឡើង ។</translation> </message> <message> - <source>you have assigned more than <b>50%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory might be left for your host operating system. Continue at your own risk.</source> - <translation type="obsolete">អ្នកបានផ្ដល់សិតកុំព្យូទ័រច្រើនជាង <b>50%</b> នៃសតិកុំព្យូទ័ររបស់អ្នក (<b>%1</b>) ដល់ម៉ាស៊ីននិម្មិត ។ គ្មានសតិគ្រប់គ្រាន់នៅសល់សម្រាប់ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនរបស់អ្នកទេ ។ បន្តទាំងគ្រោះថ្នាក់ឬ ?</translation> + <source>&Other</source> + <translation>ផ្សេងៗ</translation> </message> <message> - <source>you have assigned less than <b>%1</b> for video memory which is the minimum amount required to switch the virtual machine to fullscreen or seamless mode.</source> - <translation type="obsolete">អ្នកបានផ្ដល់សតិវីដេអូតិចជាង <b>%1</b> សម្រាប់សតិវីដេអូដែលជាចំនួនអប្បបរមាដែលបានទាមទារឲ្យប្ដូរម៉ាស៊ីននិម្មិតទៅរបៀបពេញអេក្រង់ ឬគ្មានថ្នេរ ។</translation> + <source>If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs.</source> + <translation>ប្រសិនបើបានគូសធីក ការផ្លាស់ប្ដូរទៅមេឌៀថាសទន់ ឬស៊ីឌី/ឌីវីឌីដែលបានម៉ោន បាន អនុវត្តកំឡុងពេលប្រតិបត្តិការម៉ាស៊ីន នឹងត្រូវបានរក្សាទុកក្នុងឯកសារកំណត់ ដើម្បីបម្រុងទុកនូវការកំណត់រចនាសម្ព័ន្ធរបស់មេឌៀដែលបានម៉ោនចន្លោះពេលរត់ ។</translation> </message> <message> - <source>When checked, the virtual machine will get access to the 3D graphics capabilities available on the host.</source> - <translation type="obsolete">នៅពេលបានគូសធីគ ម៉ាស៊ីននិម្មិតនឹងចូលដំណើរការសមត្ថភាពក្រាហ្វិកត្រីមាត្រដែលមាននៅលើម៉ាស៊ីន ។</translation> + <source>&Remember Mounted Media</source> + <translation>មេឌៀដែលបានម៉ោនសមាជិក</translation> </message> <message> - <source>Enable &3D Acceleration</source> - <translation type="obsolete">បើកការបង្កើនល្បឿនត្រីមាត្រ</translation> + <source>Runtime:</source> + <translation>ពេលវេលារត់៖</translation> </message> <message> - <source>Removable Media:</source> - <translation type="unfinished"></translation> + <source>you have assigned more than <b>75%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> + <translation>អ្នកបានផ្ដល់សតិកុំព្យូទ័រច្រើនជាង <b>75%</b> នៃកុំព្យូទ័ររបស់ (<b>%1</b>) ដល់ម៉ាស៊ីននិម្មមិត ។ គ្មានសតិនៅសល់គ្រប់គ្រាន់សម្រាប់ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនរបស់អ្នកទេ ។ សូមជ្រើសចំនួនសតិតូចជាងនេះ ។</translation> </message> <message> - <source>&Remember Runtime Changes</source> - <translation type="unfinished"></translation> + <source>you have assigned more than <b>50%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory might be left for your host operating system. Continue at your own risk.</source> + <translation>អ្នកបានផ្ដល់សិតកុំព្យូទ័រច្រើនជាង <b>50%</b> នៃសតិកុំព្យូទ័ររបស់អ្នក (<b>%1</b>) ដល់ម៉ាស៊ីននិម្មិត ។ គ្មានសតិគ្រប់គ្រាន់នៅសល់សម្រាប់ប្រព័ន្ធប្រតិបត្តិការម៉ាស៊ីនរបស់អ្នកទេ ។ បន្តទាំងគ្រោះថ្នាក់ឬ ?</translation> </message> <message> - <source>Mini ToolBar:</source> - <translation type="unfinished"></translation> + <source>you have assigned less than <b>%1</b> for video memory which is the minimum amount required to switch the virtual machine to fullscreen or seamless mode.</source> + <translation>អ្នកបានផ្ដល់សតិវីដេអូតិចជាង <b>%1</b> សម្រាប់សតិវីដេអូដែលជាចំនួនអប្បបរមាដែលបានទាមទារឲ្យប្ដូរម៉ាស៊ីននិម្មិតទៅរបៀបពេញអេក្រង់ ឬគ្មានថ្នេរ ។</translation> </message> <message> - <source>If checked, show the Mini ToolBar in Fullscreen and Seamless modes.</source> - <translation type="unfinished"></translation> + <source>When checked, the virtual machine will get access to the 3D graphics capabilities available on the host.</source> + <translation>នៅពេលបានគូសធីគ ម៉ាស៊ីននិម្មិតនឹងចូលដំណើរការសមត្ថភាពក្រាហ្វិកត្រីមាត្រដែលមាននៅលើម៉ាស៊ីន ។</translation> </message> <message> - <source>Show In &Fullscreen/Seamless</source> - <translation type="unfinished"></translation> + <source>Enable &3D Acceleration</source> + <translation>បើកការបង្កើនល្បឿនត្រីមាត្រ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsHD</name> <message> - <source>No hard disk is selected for <i>%1</i></source> - <translation>គ្មានថាសរឹងត្រូវបានជ្រើសសម្រាប់ <i>%1</i> នោះទេ</translation> - </message> - <message> - <source><i>%1</i> uses the hard disk that is already attached to <i>%2</i></source> - <translation><i>%1</i> ប្រើថាសរឹងដែលត្រូវបានភ្ជាប់ទៅ កាន់ <i>%2</i> រួចហើយ</translation> - </message> - <message> - <source>&Add Attachment</source> - <translation>បន្ថែមការភ្ជាប់</translation> - </message> - <message> - <source>&Remove Attachment</source> - <translation>យកការភ្ជាប់ចេញ</translation> - </message> - <message> - <source>&Select Hard Disk</source> - <translation>ជ្រើសថាសរឹងថ្មី</translation> + <source>No hard disk is selected for <i>%1</i></source> + <translation>គ្មានថាសរឹងត្រូវបានជ្រើសសម្រាប់ <i>%1</i> នោះទេ</translation> </message> <message> - <source>Adds a new hard disk attachment.</source> - <translation>បន្ថែមការភ្ជាប់ថាសរឹងថ្មី ។</translation> + <source><i>%1</i> uses the hard disk that is already attached to <i>%2</i></source> + <translation><i>%1</i> ប្រើថាសរឹងដែលត្រូវបានភ្ជាប់ទៅ កាន់ <i>%2</i> រួចហើយ</translation> </message> <message> - <source>Removes the highlighted hard disk attachment.</source> - <translation>យកការភ្ជាប់ថាសរឹងដែលបានបន្លិចចេញ ។</translation> + <source>&Add Attachment</source> + <translation>បន្ថែមការភ្ជាប់</translation> </message> <message> - <source>When checked, enables the virtual SATA controller of this machine. Note that you cannot attach hard disks to SATA ports when the virtual SATA controller is disabled.</source> - <translation type="obsolete">នៅពេលបានគូសធីក បើកឧបករណ៍ត្រួតពិនិត្យ SATA និម្មិតរបស់ម៉ាស៊ីននេះ ។ ចំណាំថា អ្នកមិនអាចភ្ជាប់ថាសរឹងទៅច្រក SATA បានទេ នៅពេលដែលបិទឧបករណ៍ត្រួតពិនិត្យ SATA និម្មិត ។</translation> + <source>&Remove Attachment</source> + <translation>យកការភ្ជាប់ចេញ</translation> </message> <message> - <source>&Enable SATA Controller</source> - <translation type="obsolete">បើកឧបករណ៍ត្រួតពិនិត្យ SATA</translation> + <source>&Select Hard Disk</source> + <translation>ជ្រើសថាសរឹងថ្មី</translation> </message> <message> - <source>&Attachments</source> - <translation>ការភ្ជាប់</translation> + <source>Adds a new hard disk attachment.</source> + <translation>បន្ថែមការភ្ជាប់ថាសរឹងថ្មី ។</translation> </message> <message> - <source>Lists all hard disks attached to this machine. Use a mouse click or the <tt>Space</tt> key on the highlighted item to activate the drop-down list and choose the desired value. Use the context menu or buttons to the right to add or remove hard disk attachments.</source> - <translation>រាយថាសរឹងទាំងអស់ដែលបានភ្ជាប់ទៅម៉ាស៊ីននេះ ។ ប្រើការចុចកណ្ដុរឬគ្រាប់ចុច <tt>ចន្លោះមិនឃើញ (Space)</tt> នៅលើធាតុដែលបានបន្លិច ដើម្បីធ្វើឲ្យបញ្ជីទម្លាក់ចុះសកម្ម ហើយជ្រើសតម្លៃដែលចង់បាន ។ ប្រើម៉ឺនុយបរិបទ ឬប៊ូតុងនៅខាងស្ដាំ ដើម្បីបន្ថែម ឬយកការភ្ជាប់ថាសរឹងចេញ ។</translation> + <source>Removes the highlighted hard disk attachment.</source> + <translation>យកការភ្ជាប់ថាសរឹងដែលបានបន្លិចចេញ ។</translation> </message> <message> - <source>Invokes the Virtual Media Manager to select a hard disk to attach to the currently highlighted slot.</source> - <translation>ដកហូតកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ដើម្បីជ្រើសថាសរឹង ត្រូវភ្ជាប់ទៅរន្ធដែលបានបន្លិចបច្ចុប្បន្ន ។</translation> + <source>When checked, enables the virtual SATA controller of this machine. Note that you cannot attach hard disks to SATA ports when the virtual SATA controller is disabled.</source> + <translation>នៅពេលបានគូសធីក បើកឧបករណ៍ត្រួតពិនិត្យ SATA និម្មិតរបស់ម៉ាស៊ីននេះ ។ ចំណាំថា អ្នកមិនអាចភ្ជាប់ថាសរឹងទៅច្រក SATA បានទេ នៅពេលដែលបិទឧបករណ៍ត្រួតពិនិត្យ SATA និម្មិត ។</translation> </message> <message> - <source>If checked, it will show differencing hard disks actually attached to the slots instead of their base hard disks (shown in case of indirect attachments) and will also let attach other differencing hard disks explicitly. Check this only if you need a complex hard disk setup.</source> - <translation>ប្រសិនបើបានគូសធីគ វានឹងបង្ហាញថាសរឹងផ្សេងៗដែលបានភ្ជាប់ទៅរន្ធជំនួសឲ្យថាសរឹងមូលដ្ឋានរបស់ពួកវា (បង្ហាញតែក្នុងករណីដែលមានការភ្ជាប់ដោយប្រយោលប៉ុណ្ណោះ) ហើយនឹងអនុញ្ញាតឲ្យភ្ជាប់ថាសរឹងផ្សេងៗផងដែរ ។ គូសធីកតែក្នុងករណីដែលអ្នកត្រូវការការរៀបចំថាសរឹងស្មុគស្មាញប៉ុណ្ណោះ ។</translation> + <source>&Enable SATA Controller</source> + <translation>បើកឧបករណ៍ត្រួតពិនិត្យ SATA</translation> </message> <message> - <source>&Show Differencing Hard Disks</source> - <translation>បង្ហាញថាសរឹងផ្សេងៗគ្នា</translation> + <source>&Attachments</source> + <translation>ការភ្ជាប់</translation> </message> <message> - <source>When checked, enables an additional virtual controller (either SATA or SCSI) of this machine.</source> - <translation type="unfinished"></translation> + <source>Lists all hard disks attached to this machine. Use a mouse click or the <tt>Space</tt> key on the highlighted item to activate the drop-down list and choose the desired value. Use the context menu or buttons to the right to add or remove hard disk attachments.</source> + <translation>រាយថាសរឹងទាំងអស់ដែលបានភ្ជាប់ទៅម៉ាស៊ីននេះ ។ ប្រើការចុចកណ្ដុរឬគ្រាប់ចុច <tt>ចន្លោះមិនឃើញ (Space)</tt> នៅលើធាតុដែលបានបន្លិច ដើម្បីធ្វើឲ្យបញ្ជីទម្លាក់ចុះសកម្ម ហើយជ្រើសតម្លៃដែលចង់បាន ។ ប្រើម៉ឺនុយបរិបទ ឬប៊ូតុងនៅខាងស្ដាំ ដើម្បីបន្ថែម ឬយកការភ្ជាប់ថាសរឹងចេញ ។</translation> </message> <message> - <source>&Enable Additional Controller</source> - <translation type="unfinished"></translation> + <source>Invokes the Virtual Media Manager to select a hard disk to attach to the currently highlighted slot.</source> + <translation>ដកហូតកម្មវិធីគ្រប់គ្រងមេឌៀនិម្មិត ដើម្បីជ្រើសថាសរឹង ត្រូវភ្ជាប់ទៅរន្ធដែលបានបន្លិចបច្ចុប្បន្ន ។</translation> </message> <message> - <source>IDE &Controller Type</source> - <translation type="unfinished"></translation> + <source>If checked, it will show differencing hard disks actually attached to the slots instead of their base hard disks (shown in case of indirect attachments) and will also let attach other differencing hard disks explicitly. Check this only if you need a complex hard disk setup.</source> + <translation>ប្រសិនបើបានគូសធីគ វានឹងបង្ហាញថាសរឹងផ្សេងៗដែលបានភ្ជាប់ទៅរន្ធជំនួសឲ្យថាសរឹងមូលដ្ឋានរបស់ពួកវា (បង្ហាញតែក្នុងករណីដែលមានការភ្ជាប់ដោយប្រយោលប៉ុណ្ណោះ) ហើយនឹងអនុញ្ញាតឲ្យភ្ជាប់ថាសរឹងផ្សេងៗផងដែរ ។ គូសធីកតែក្នុងករណីដែលអ្នកត្រូវការការរៀបចំថាសរឹងស្មុគស្មាញប៉ុណ្ណោះ ។</translation> </message> <message> - <source>Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS.</source> - <translation type="unfinished">កំណត់ប្រភេទឧបករណ៍បញ្ជា IDE និម្មិត ។ ដោយអាស្រ័យលើតម្លៃនេះ VirtualBox នឹងផ្ដល់នូវឧបករណ៍ផ្នែករឹង IDE ផ្សេងៗគ្នាដល់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> + <source>&Show Differencing Hard Disks</source> + <translation>បង្ហាញថាសរឹងផ្សេងៗគ្នា</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsNetwork</name> <message> - <source>Select TAP setup application</source> - <translation type="obsolete">ជ្រើសកម្មវិធីរៀបចំ TAP</translation> - </message> - <message> - <source>Select TAP terminate application</source> - <translation type="obsolete">ជ្រើសកម្មវិធីបញ្ចប់ TAP</translation> - </message> - <message> - <source>When checked, plugs this virtual network adapter into the virtual machine.</source> - <translation>នៅពេលគូសធីក ដោតអាដាប់ទ័របណ្ដាញនិម្មិតទៅក្នុងម៉ាស៊ីននកម្មិត ។</translation> - </message> - <message> - <source>&Enable Network Adapter</source> - <translation>បើកអាដាប់ទ័របណ្ដាញ</translation> - </message> - <message> - <source>A&dapter Type:</source> - <translation type="obsolete">ប្រភេទអាដាប់ទ័រ ៖</translation> - </message> - <message> - <source>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</source> - <translation>ជ្រើសប្រភេទអាដាប់ទ័របណ្ដាញនិម្មិត ។ អាស្រ័យលើតម្លៃនេះ VirtualBox នឹងផ្ដល់នូវផ្នែករឹងបណ្ដាញផ្សេងទៅឲ្យម៉ាស៊ីននិម្មិត ។</translation> - </message> - <message> - <source>&Attached to:</source> - <translation>បានភ្ជាប់ទៅ ៖</translation> - </message> - <message> - <source>Controls how this virtual adapter is attached to the real network of the Host OS.</source> - <translation>ត្រួតពិនិត្យវិធីដែលអាដាប់ទ័រនិម្មិតនេះត្រូវបានភ្ជាប់ទៅបណ្ដាញពិតប្រាកដរបស់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីន ។</translation> - </message> - <message> - <source>&Network Name:</source> - <translation type="obsolete">ឈ្មោះបណ្ដាញ ៖</translation> - </message> - <message> - <source>Displays the name of the internal network selected for this adapter.</source> - <translation type="obsolete">បង្ហាញឈ្មោះរបស់បណ្ដាញខាងក្នុងដែលបានជ្រើសសម្រាប់អាដាប់ទ័រនេះ ។</translation> - </message> - <message> - <source>&MAC Address:</source> - <translation type="obsolete">អាសយដ្ឋាន MAC ៖</translation> - </message> - <message> - <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> - <translation type="obsolete">បង្ហាញអាសយដ្ឋាន MAC របស់អាដាប់ទ័រនេះ ។ វាមានតួអក្សរយ៉ាងជាក់លាក់ចំនួន ១២ ដែលបានជ្រើសពី {0-9,A-F} ។ ចំណាំថាតួអក្សរទីពីរត្រូវតែជាតួលេខគូ ។</translation> + <source>Select TAP setup application</source> + <translation>ជ្រើសកម្មវិធីរៀបចំ TAP</translation> </message> <message> - <source>Generates a new random MAC address.</source> - <translation type="obsolete">បង្កើតអាសយដ្ឋាន MAC ចៃដន្យថ្មី ។</translation> + <source>Select TAP terminate application</source> + <translation>ជ្រើសកម្មវិធីបញ្ចប់ TAP</translation> </message> <message> - <source>&Generate</source> - <translation type="obsolete">បង្កើត</translation> + <source>When checked, plugs this virtual network adapter into the virtual machine.</source> + <translation>នៅពេលគូសធីក ដោតអាដាប់ទ័របណ្ដាញនិម្មិតទៅក្នុងម៉ាស៊ីននកម្មិត ។</translation> </message> <message> - <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source> - <translation type="obsolete">បង្ហាញថាតើខ្សែបណ្ដាញនិម្មិតត្រូវបានដោតនៅពេលម៉ាស៊ីនចាប់ផ្ដើម ឬក៏អត់ ។</translation> + <source>&Enable Network Adapter</source> + <translation>បើកអាដាប់ទ័របណ្ដាញ</translation> </message> <message> - <source>Ca&ble Connected</source> - <translation type="obsolete">បានតភ្ជាប់ខ្សែ</translation> + <source>A&dapter Type:</source> + <translation>ប្រភេទអាដាប់ទ័រ ៖</translation> </message> <message> - <source>&Interface Name:</source> - <translation type="obsolete">ឈ្មោះចំណុចប្រទាក់ ៖</translation> + <source>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</source> + <translation>ជ្រើសប្រភេទអាដាប់ទ័របណ្ដាញនិម្មិត ។ អាស្រ័យលើតម្លៃនេះ VirtualBox នឹងផ្ដល់នូវផ្នែករឹងបណ្ដាញផ្សេងទៅឲ្យម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>Displays the TAP interface name.</source> - <translation type="obsolete">បង្ហាញឈ្មោះចំណុចប្រទាក់ TAP ។</translation> + <source>&Attached to:</source> + <translation>បានភ្ជាប់ទៅ ៖</translation> </message> <message> - <source>&Setup Application:</source> - <translation type="obsolete">រៀបចំកម្មវិធី ៖</translation> + <source>Controls the way how this virtual adapter is attached to the real network of the Host OS.</source> + <translation>ត្រួតពិនិត្យវិធីដែលអាដាប់ទ័រនិម្មិតនេះត្រូវបានភ្ជាប់ទៅបណ្ដាញពិតប្រាកដរបស់ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីន ។</translation> </message> <message> - <source>Displays the command executed to set up the TAP interface.</source> - <translation type="obsolete">បង្ហាញពាក្យបញ្ជាបានប្រតិបត្តិដើម្បីរៀបចំចំណុចប្រទាក់ TAP ។</translation> + <source>&Network Name:</source> + <translation>ឈ្មោះបណ្ដាញ ៖</translation> </message> <message> - <source>Selects the setup application.</source> - <translation type="obsolete">ជ្រើសការរៀបចំកម្មវិធី ។</translation> + <source>Displays the name of the internal network selected for this adapter.</source> + <translation>បង្ហាញឈ្មោះរបស់បណ្ដាញខាងក្នុងដែលបានជ្រើសសម្រាប់អាដាប់ទ័រនេះ ។</translation> </message> <message> - <source>&Terminate Application:</source> - <translation type="obsolete">បញ្ចប់កម្មវិធី ៖</translation> + <source>&MAC Address:</source> + <translation>អាសយដ្ឋាន MAC ៖</translation> </message> <message> - <source>Displays the command executed to terminate the TAP interface.</source> - <translation type="obsolete">បង្ហាញពាក្យបញ្ជាដែលបានប្រតិបត្តិដើម្បីបញ្ចប់ចំណុចប្រទាក់ TAP ។</translation> + <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> + <translation>បង្ហាញអាសយដ្ឋាន MAC របស់អាដាប់ទ័រនេះ ។ វាមានតួអក្សរយ៉ាងជាក់លាក់ចំនួន ១២ ដែលបានជ្រើសពី {0-9,A-F} ។ ចំណាំថាតួអក្សរទីពីរត្រូវតែជាតួលេខគូ ។</translation> </message> <message> - <source>Selects the terminate application.</source> - <translation type="obsolete">ជ្រើសកម្មវិធីបញ្ចប់ ។</translation> + <source>Generates a new random MAC address.</source> + <translation>បង្កើតអាសយដ្ឋាន MAC ចៃដន្យថ្មី ។</translation> </message> <message> - <source>Host Interface Settings</source> - <translation type="obsolete">ការកំណត់ចំណុចប្រទាក់ម៉ាស៊ីន</translation> + <source>&Generate</source> + <translation>បង្កើត</translation> </message> <message> - <source>no bridged network adapter is selected</source> - <translation type="unfinished"></translation> + <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source> + <translation>បង្ហាញថាតើខ្សែបណ្ដាញនិម្មិតត្រូវបានដោតនៅពេលម៉ាស៊ីនចាប់ផ្ដើម ឬក៏អត់ ។</translation> </message> <message> - <source>no internal network name is specified</source> - <translation type="unfinished"></translation> + <source>Ca&ble Connected</source> + <translation>បានតភ្ជាប់ខ្សែ</translation> </message> <message> - <source>no host-only network adapter is selected</source> - <translation type="unfinished"></translation> + <source>&Interface Name:</source> + <translation>ឈ្មោះចំណុចប្រទាក់ ៖</translation> </message> <message> - <source>Not selected</source> - <comment>network adapter name</comment> - <translation type="unfinished"></translation> + <source>Displays the TAP interface name.</source> + <translation>បង្ហាញឈ្មោះចំណុចប្រទាក់ TAP ។</translation> </message> <message> - <source>Adapter &Type:</source> - <translation type="unfinished"></translation> + <source>&Setup Application:</source> + <translation>រៀបចំកម្មវិធី ៖</translation> </message> <message> - <source>Open additional options dialog for current attachment type.</source> - <translation type="unfinished"></translation> + <source>Displays the command executed to set up the TAP interface.</source> + <translation>បង្ហាញពាក្យបញ្ជាបានប្រតិបត្តិដើម្បីរៀបចំចំណុចប្រទាក់ TAP ។</translation> </message> <message> - <source>&Name:</source> - <translation type="unfinished">ឈ្មោះ ៖</translation> + <source>Selects the setup application.</source> + <translation>ជ្រើសការរៀបចំកម្មវិធី ។</translation> </message> <message> - <source>Selects the name of the network adapter if attachment type is equivalent to <b>Bridged Adapter</b> or <b>Host-only Adapter</b> and the name of the internal network if attachment type is equivalent to <b>Internal Network</b>.</source> - <translation type="unfinished"></translation> + <source>&Terminate Application:</source> + <translation>បញ្ចប់កម្មវិធី ៖</translation> </message> -</context> -<context> - <name>VBoxVMSettingsNetworkDetails</name> <message> - <source>Additional Options</source> - <translation type="unfinished"></translation> + <source>Displays the command executed to terminate the TAP interface.</source> + <translation>បង្ហាញពាក្យបញ្ជាដែលបានប្រតិបត្តិដើម្បីបញ្ចប់ចំណុចប្រទាក់ TAP ។</translation> </message> <message> - <source>Guest &MAC Address:</source> - <translation type="unfinished"></translation> + <source>Selects the terminate application.</source> + <translation>ជ្រើសកម្មវិធីបញ្ចប់ ។</translation> </message> <message> - <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> - <translation type="unfinished">បង្ហាញអាសយដ្ឋាន MAC របស់អាដាប់ទ័រនេះ ។ វាមានតួអក្សរយ៉ាងជាក់លាក់ចំនួន ១២ ដែលបានជ្រើសពី {0-9,A-F} ។ ចំណាំថាតួអក្សរទីពីរត្រូវតែជាតួលេខគូ ។</translation> + <source>Host Interface Settings</source> + <translation>ការកំណត់ចំណុចប្រទាក់ម៉ាស៊ីន</translation> </message> - <message> - <source>Generates a new random MAC address.</source> - <translation type="unfinished">បង្កើតអាសយដ្ឋាន MAC ចៃដន្យថ្មី ។</translation> - </message> - <message> - <source>&Cable connected</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source> - <translation type="unfinished">បង្ហាញថាតើខ្សែបណ្ដាញនិម្មិតត្រូវបានដោតនៅពេលម៉ាស៊ីនចាប់ផ្ដើម ឬក៏អត់ ។</translation> - </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsNetworkPage</name> <message> - <source>No host network interface is selected</source> - <translation type="obsolete">គ្មានចំណុចប្រទាក់បណ្ដាញម៉ាស៊ីនបានជ្រើសទេ</translation> + <source>No host network interface is selected</source> + <translation>គ្មានចំណុចប្រទាក់បណ្ដាញម៉ាស៊ីនបានជ្រើសទេ</translation> </message> <message> - <source>Internal network name is not set</source> - <translation type="obsolete">ឈ្មោះបណ្ដាញខាងក្នុងមិនត្រូវបានកំណត់តែ</translation> + <source>Internal network name is not set</source> + <translation>ឈ្មោះបណ្ដាញខាងក្នុងមិនត្រូវបានកំណត់តែ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsParallel</name> <message> - <source>Port %1</source> - <comment>parallel ports</comment> - <translation>ច្រក %1</translation> + <source>Port %1</source> + <comment>parallel ports</comment> + <translation>ច្រក %1</translation> </message> <message> - <source>When checked, enables the given parallel port of the virtual machine.</source> - <translation>នៅពេលបានគូសធីក បើកច្រកប៉ារ៉ាឡែលរបស់ម៉ាស៊ីននិម្មិត ។</translation> + <source>When checked, enables the given parallel port of the virtual machine.</source> + <translation>នៅពេលបានគូសធីក បើកច្រកប៉ារ៉ាឡែលរបស់ម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>&Enable Parallel Port</source> - <translation>បើកច្រកស្រប</translation> + <source>&Enable Parallel Port</source> + <translation>បើកច្រកស្រប</translation> </message> <message> - <source>Port &Number:</source> - <translation>លេខច្រក ៖</translation> + <source>Port &Number:</source> + <translation>លេខច្រក ៖</translation> </message> <message> - <source>Displays the parallel port number. You can choose one of the standard parallel ports or select <b>User-defined</b> and specify port parameters manually.</source> - <translation>បង្ហាញលេចច្រកប៉ារ៉ាឡែល ។ អ្នកអាចជ្រើសច្រកមួយក្នុងចំណោមច្រកប៉ារ៉ាឡែលជាច្រើន ឬជ្រើស <b>កំណត់ដោយអ្នកប្រើ</b> ហើយបញ្ញាក់ប៉ារ៉ាម៉ែត្រច្រកដោយដៃ ។</translation> + <source>Displays the parallel port number. You can choose one of the standard parallel ports or select <b>User-defined</b> and specify port parameters manually.</source> + <translation>បង្ហាញលេចច្រកប៉ារ៉ាឡែល ។ អ្នកអាចជ្រើសច្រកមួយក្នុងចំណោមច្រកប៉ារ៉ាឡែលជាច្រើន ឬជ្រើស <b>កំណត់ដោយអ្នកប្រើ</b> ហើយបញ្ញាក់ប៉ារ៉ាម៉ែត្រច្រកដោយដៃ ។</translation> </message> <message> - <source>&IRQ:</source> - <translation>IRQ ៖</translation> + <source>&IRQ:</source> + <translation>IRQ ៖</translation> </message> <message> - <source>Displays the IRQ number of this parallel port. Valid values are integer numbers in range from <tt>0</tt> to <tt>255</tt>. Values greater than <tt>15</tt> may be used only if the <b>IO APIC</b> is enabled for this virtual machine.</source> - <translation>បង្ហាញលេខ IRQ របសច្រកប៉ារ៉ាឡែលនេះ ។ តម្លៃត្រឹមត្រូវជាចំនួនគត់ដែលស្ថិតក្នុងជួរពី <tt>0</tt> ដល់ <tt>២៥៥</tt> ។ តម្លៃធំជាង <tt>១៥</tt> អាចត្រូវបានប្រើតែក្នុងករណីដែល <b>IO APIC</b> ត្រូវបានបើកសម្រាប់ម៉ាស៊ីននិម្មិតនេះប៉ុណ្ណោះ ។</translation> + <source>Displays the IRQ number of this parallel port. Valid values are integer numbers in range from <tt>0</tt> to <tt>255</tt>. Values greater than <tt>15</tt> may be used only if the <b>IO APIC</b> is enabled for this virtual machine.</source> + <translation>បង្ហាញលេខ IRQ របសច្រកប៉ារ៉ាឡែលនេះ ។ តម្លៃត្រឹមត្រូវជាចំនួនគត់ដែលស្ថិតក្នុងជួរពី <tt>0</tt> ដល់ <tt>២៥៥</tt> ។ តម្លៃធំជាង <tt>១៥</tt> អាចត្រូវបានប្រើតែក្នុងករណីដែល <b>IO APIC</b> ត្រូវបានបើកសម្រាប់ម៉ាស៊ីននិម្មិតនេះប៉ុណ្ណោះ ។</translation> </message> <message> - <source>I/O Po&rt:</source> - <translation>ច្រក I/O ៖</translation> + <source>I/O Po&rt:</source> + <translation>ច្រក I/O ៖</translation> </message> <message> - <source>Displays the base I/O port address of this parallel port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source> - <translation>បង្ហាញអាសយដ្ឋានច្រក I/O មូលដ្ឋាន ។ តម្លៃដែលត្រឹមត្រូវគឺធំជាងចំនួនដែលស្ថិតក្នុងជួរពី <tt>0</tt>ដល់<tt>0xFFFF</tt> ។</translation> + <source>Displays the base I/O port address of this parallel port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source> + <translation>បង្ហាញអាសយដ្ឋានច្រក I/O មូលដ្ឋាន ។ តម្លៃដែលត្រឹមត្រូវគឺធំជាងចំនួនដែលស្ថិតក្នុងជួរពី <tt>0</tt>ដល់<tt>0xFFFF</tt> ។</translation> </message> <message> - <source>Port &Path:</source> - <translation>ផ្លូវច្រក ៖</translation> + <source>Port &Path:</source> + <translation>ផ្លូវច្រក ៖</translation> </message> <message> - <source>Displays the host parallel device name.</source> - <translation>បង្ហាញឈ្មោះឧបករណ៍ស្របគ្នារបស់ម៉ាស៊ីន ។</translation> + <source>Displays the host parallel device name.</source> + <translation>បង្ហាញឈ្មោះឧបករណ៍ស្របគ្នារបស់ម៉ាស៊ីន ។</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsParallelPage</name> <message> - <source>Duplicate port number is selected </source> - <translation>បានជ្រើសលេខច្រកស្ទួន</translation> + <source>Duplicate port number is selected </source> + <translation>បានជ្រើសលេខច្រកស្ទួន</translation> </message> <message> - <source>Port path is not specified </source> - <translation>មិនបានបញ្ជាក់ផ្លូវច្រកទេ</translation> + <source>Port path is not specified </source> + <translation>មិនបានបញ្ជាក់ផ្លូវច្រកទេ</translation> </message> <message> - <source>Duplicate port path is entered </source> - <translation>បានបញ្ចូលផ្លូវច្រកស្ទួន</translation> + <source>Duplicate port path is entered </source> + <translation>បានបញ្ចូលផ្លូវច្រកស្ទួន</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsSF</name> <message> - <source>&Add New Shared Folder</source> - <translation>បន្ថែមថតដែលបានចែកចរំលែកថ្មី</translation> + <source>&Add New Shared Folder</source> + <translation>បន្ថែមថតដែលបានចែកចរំលែកថ្មី</translation> </message> <message> - <source>&Edit Selected Shared Folder</source> - <translation>កែសម្រួលថតដែលបានចែករំលែកដែលបានជ្រើស</translation> + <source>&Edit Selected Shared Folder</source> + <translation>កែសម្រួលថតដែលបានចែករំលែកដែលបានជ្រើស</translation> </message> <message> - <source>&Remove Selected Shared Folder</source> - <translation>យកថតដែលបានចែករំលែកដែលបានជ្រើស</translation> + <source>&Remove Selected Shared Folder</source> + <translation>យកថតដែលបានចែករំលែកដែលបានជ្រើស</translation> </message> <message> - <source>Adds a new shared folder definition.</source> - <translation>បន្ថែមការកំណត់ថតដែលបានចែករំលែកថ្មី ។</translation> + <source>Adds a new shared folder definition.</source> + <translation>បន្ថែមការកំណត់ថតដែលបានចែករំលែកថ្មី ។</translation> </message> <message> - <source>Edits the selected shared folder definition.</source> - <translation>កែសម្រួលការកំណត់ថតដែលបានចែករំលែកដែលបានជ្រើស ។</translation> + <source>Edits the selected shared folder definition.</source> + <translation>កែសម្រួលការកំណត់ថតដែលបានចែករំលែកដែលបានជ្រើស ។</translation> </message> <message> - <source>Removes the selected shared folder definition.</source> - <translation>យកការកំណត់ថតដែលបានចែករំលែកដែលបានជ្រើសចេញ</translation> + <source>Removes the selected shared folder definition.</source> + <translation>យកការកំណត់ថតដែលបានចែករំលែកដែលបានជ្រើសចេញ</translation> </message> <message> - <source> Machine Folders</source> - <translation> ថតម៉ាស៊ីន</translation> + <source> Machine Folders</source> + <translation> ថតម៉ាស៊ីន</translation> </message> <message> - <source> Transient Folders</source> - <translation> ថតបណ្ដោះអាសន្ន</translation> + <source> Transient Folders</source> + <translation> ថតបណ្ដោះអាសន្ន</translation> </message> <message> - <source>Full</source> - <translation>ពេញលេញ</translation> + <source>Full</source> + <translation>ពេញលេញ</translation> </message> <message> - <source>Read-only</source> - <translation>បានតែអាន</translation> + <source>Read-only</source> + <translation>បានតែអាន</translation> </message> <message> - <source>Lists all shared folders accessible to this machine. Use 'net use x: \\vboxsvr\share' to access a shared folder named <i>share</i> from a DOS-like OS, or 'mount -t vboxsf share mount_point' to access it from a Linux OS. This feature requires Guest Additions.</source> - <translation>រាយថតដែលបានចែករំលែកទាំងអស់ដែលអាចចូលដំណើរការបានទៅម៉ាស៊ីននេះ ។ ប្រើ 'net ប្រើ x: \\vboxsvr\share' ដើម្បីចូលដំណើរការថតដែលបានចែករំលែកដែលមានឈ្មោះ <i>ចែករំលែក</i> ពីប្រព័ន្ធប្រតិបត្តិការដូចនឹង DOS ដែរ ឬ 'mount -t vboxsf share mount_point' ដើម្បីចូលដំណើរការវាពីប្រព័ន្ធប្រតិបត្តិការលីនុច ។ លក្ខណៈពិសេសនេះត្រូវការផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> + <source>Lists all shared folders accessible to this machine. Use 'net use x: \\vboxsvr\share' to access a shared folder named <i>share</i> from a DOS-like OS, or 'mount -t vboxsf share mount_point' to access it from a Linux OS. This feature requires Guest Additions.</source> + <translation>រាយថតដែលបានចែករំលែកទាំងអស់ដែលអាចចូលដំណើរការបានទៅម៉ាស៊ីននេះ ។ ប្រើ 'net ប្រើ x: \\vboxsvr\share' ដើម្បីចូលដំណើរការថតដែលបានចែករំលែកដែលមានឈ្មោះ <i>ចែករំលែក</i> ពីប្រព័ន្ធប្រតិបត្តិការដូចនឹង DOS ដែរ ឬ 'mount -t vboxsf share mount_point' ដើម្បីចូលដំណើរការវាពីប្រព័ន្ធប្រតិបត្តិការលីនុច ។ លក្ខណៈពិសេសនេះត្រូវការផ្នែកបន្ថែមរបស់ម៉ាស៊ីនភ្ញៀវ ។</translation> </message> <message> - <source>Name</source> - <translation>ឈ្មោះ</translation> + <source>Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Path</source> - <translation>ផ្លូវ</translation> + <source>Path</source> + <translation>ផ្លូវ</translation> </message> <message> - <source>Access</source> - <translation>ចូលដំណើរការ</translation> + <source>Access</source> + <translation>ចូលដំណើរការ</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsSFDetails</name> <message> - <source>Add Share</source> - <translation>បន្ថែមការចែករំលែក</translation> + <source>Add Share</source> + <translation>បន្ថែមការចែករំលែក</translation> </message> <message> - <source>Edit Share</source> - <translation>កែសម្រួលការចែករំលែក</translation> + <source>Edit Share</source> + <translation>កែសម្រួលការចែករំលែក</translation> </message> <message> - <source>Dialog</source> - <translation>ប្រអប់</translation> + <source>Dialog</source> + <translation>ប្រអប់</translation> </message> <message> - <source>Folder Path:</source> - <translation>ផ្លូវថត ៖</translation> + <source>Folder Path:</source> + <translation>ផ្លូវថត ៖</translation> </message> <message> - <source>Folder Name:</source> - <translation>ឈ្មោះថត ៖</translation> + <source>Folder Name:</source> + <translation>ឈ្មោះថត ៖</translation> </message> <message> - <source>Displays the name of the shared folder (as it will be seen by the guest OS).</source> - <translation>បង្ហាញឈ្មោះរបស់ថតដែលបានចែករំលែក (ព្រោះថាវានឹងត្រូវបានឃើញដោយប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ) ។</translation> + <source>Displays the name of the shared folder (as it will be seen by the guest OS).</source> + <translation>បង្ហាញឈ្មោះរបស់ថតដែលបានចែករំលែក (ព្រោះថាវានឹងត្រូវបានឃើញដោយប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវ) ។</translation> </message> <message> - <source>When checked, the guest OS will not be able to write to the specified shared folder.</source> - <translation>នៅពេលបានគូសធីក ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវមិនអាចសរសេរទៅកានថតដែលបានចែករំលែកដែលបានបញ្ជាក់ទេ ។</translation> + <source>When checked, the guest OS will not be able to write to the specified shared folder.</source> + <translation>នៅពេលបានគូសធីក ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវមិនអាចសរសេរទៅកានថតដែលបានចែករំលែកដែលបានបញ្ជាក់ទេ ។</translation> </message> <message> - <source>&Read-only</source> - <translation>បានតែអាន</translation> + <source>&Read-only</source> + <translation>បានតែអាន</translation> </message> <message> - <source>&Make Permanent</source> - <translation>ធ្វើឲ្យអចិន្ត្រៃយ៍</translation> + <source>&Make Permanent</source> + <translation>ធ្វើឲ្យអចិន្ត្រៃយ៍</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsSerial</name> <message> - <source>Port %1</source> - <comment>serial ports</comment> - <translation>ច្រក %1</translation> - </message> - <message> - <source>When checked, enables the given serial port of the virtual machine.</source> - <translation>នៅពេលគូសធីក បើកច្រកស៊េរីដែលបានផ្ដល់របស់ម៉ាស៊ីននិម្មិត ។</translation> + <source>Port %1</source> + <comment>serial ports</comment> + <translation>ច្រក %1</translation> </message> <message> - <source>&Enable Serial Port</source> - <translation>បើកច្រកស៊េរី</translation> + <source>When checked, enables the given serial port of the virtual machine.</source> + <translation>នៅពេលគូសធីក បើកច្រកស៊េរីដែលបានផ្ដល់របស់ម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>Port &Number:</source> - <translation>លេខច្រក ៖</translation> + <source>&Enable Serial Port</source> + <translation>បើកច្រកស៊េរី</translation> </message> <message> - <source>Displays the serial port number. You can choose one of the standard serial ports or select <b>User-defined</b> and specify port parameters manually.</source> - <translation>បង្ហាញលេខច្រកស៊េរៀល ។ អ្នកអាចជ្រើសច្រកស៊េរៀលស្តង់ដារមួយក្នុងចំណោមច្រកជាច្រើន ឬជ្រើស <b>កំណត់ដោយអ្នកប្រើ</b> ហើយបញ្ជាក់ប៉ារ៉ាម៉ែត្រច្រកដោយដៃ ។</translation> + <source>Port &Number:</source> + <translation>លេខច្រក ៖</translation> </message> <message> - <source>&IRQ:</source> - <translation>IRQ ៖</translation> + <source>Displays the serial port number. You can choose one of the standard serial ports or select <b>User-defined</b> and specify port parameters manually.</source> + <translation>បង្ហាញលេខច្រកស៊េរៀល ។ អ្នកអាចជ្រើសច្រកស៊េរៀលស្តង់ដារមួយក្នុងចំណោមច្រកជាច្រើន ឬជ្រើស <b>កំណត់ដោយអ្នកប្រើ</b> ហើយបញ្ជាក់ប៉ារ៉ាម៉ែត្រច្រកដោយដៃ ។</translation> </message> <message> - <source>Displays the IRQ number of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>255</tt>. Values greater than <tt>15</tt> may be used only if the <b>IO APIC</b> is enabled for this virtual machine.</source> - <translation>បង្ហាញលេខ IRQ របស់ច្រកស៊េរៀលនេះ ។ តម្លៃដែលត្រឹមត្រូវគឺជាចំនួនគត់ដែលស្ថិតនៅក្នុងចន្លោះពី <tt>0</tt> ដល់ <tt>២៥៥</tt> ។ តម្លៃធំជាង <tt>១៥</tt> អាចត្រូវបានប្រើតែក្នុងករណីដែល <b>IO APIC</b> ត្រូវបានបើកសម្រាប់ម៉ាស៊ីននិម្មិត ។</translation> + <source>&IRQ:</source> + <translation>IRQ ៖</translation> </message> <message> - <source>I/O Po&rt:</source> - <translation>ច្រក I/O ៖</translation> + <source>Displays the IRQ number of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>255</tt>. Values greater than <tt>15</tt> may be used only if the <b>IO APIC</b> is enabled for this virtual machine.</source> + <translation>បង្ហាញលេខ IRQ របស់ច្រកស៊េរៀលនេះ ។ តម្លៃដែលត្រឹមត្រូវគឺជាចំនួនគត់ដែលស្ថិតនៅក្នុងចន្លោះពី <tt>0</tt> ដល់ <tt>២៥៥</tt> ។ តម្លៃធំជាង <tt>១៥</tt> អាចត្រូវបានប្រើតែក្នុងករណីដែល <b>IO APIC</b> ត្រូវបានបើកសម្រាប់ម៉ាស៊ីននិម្មិត ។</translation> </message> <message> - <source>Displays the base I/O port address of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source> - <translation>បង្ហាញអាសយដ្ឋានច្រក I/O មូលដ្ឋានរបស់ច្រកស៊េរៀលនេះ ។ តម្លៃដែលត្រឹមត្រូវគឺជាចំនួនដែលស្ថិតក្នុងចន្លោះពី <tt>0</tt> ដល់<tt>0xFFFF</tt> ។</translation> + <source>I/O Po&rt:</source> + <translation>ច្រក I/O ៖</translation> </message> <message> - <source>Port &Mode:</source> - <translation>របៀបច្រក ៖</translation> + <source>Displays the base I/O port address of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source> + <translation>បង្ហាញអាសយដ្ឋានច្រក I/O មូលដ្ឋានរបស់ច្រកស៊េរៀលនេះ ។ តម្លៃដែលត្រឹមត្រូវគឺជាចំនួនដែលស្ថិតក្នុងចន្លោះពី <tt>0</tt> ដល់<tt>0xFFFF</tt> ។</translation> </message> <message> - <source>Controls the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source> - <translation>ពិនិត្យមើលរបៀបដំណើរការរបស់ច្រកស៊េរៀល ។ ប្រសិនបើអ្នកជ្រើស <b>បានផ្ដាច់</b> ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវរកឃើញច្រកស៊េរៀល ប៉ុន្តែនឹងមិនអាចប្រតិបត្តិវាបានទេ ។</translation> + <source>Port &Mode:</source> + <translation>របៀបច្រក ៖</translation> </message> <message> - <source>If checked, the pipe specified in the <b>Port Path</b> field will be created by the virtual machine when it starts. Otherwise, the virtual machine will try to use the existing pipe.</source> - <translation>ប្រសិនបើបានគូសធីក បំពង់បានបញ្ជាក់នៅក្នុងវាល <b>ផ្លូវច្រក</b> នឹងត្រូវបានបង្កើតដោយម៉ាស៊ីននិម្មិត នៅពេលវាចាប់ផ្ដើម ។ បើមិនដូច្នេះទេ ម៉ាស៊ីននិម្មិតនឹងព្យាយាមប្រើបំពង់ដែលបានស្រាប់ ។</translation> + <source>Controls the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source> + <translation>ពិនិត្យមើលរបៀបដំណើរការរបស់ច្រកស៊េរៀល ។ ប្រសិនបើអ្នកជ្រើស <b>បានផ្ដាច់</b> ប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីនភ្ញៀវរកឃើញច្រកស៊េរៀល ប៉ុន្តែនឹងមិនអាចប្រតិបត្តិវាបានទេ ។</translation> </message> <message> - <source>&Create Pipe</source> - <translation>បង្កើតបំពង់</translation> + <source>If checked, the pipe specified in the <b>Port Path</b> field will be created by the virtual machine when it starts. Otherwise, the virtual machine will try to use the existing pipe.</source> + <translation>ប្រសិនបើបានគូសធីក បំពង់បានបញ្ជាក់នៅក្នុងវាល <b>ផ្លូវច្រក</b> នឹងត្រូវបានបង្កើតដោយម៉ាស៊ីននិម្មិត នៅពេលវាចាប់ផ្ដើម ។ បើមិនដូច្នេះទេ ម៉ាស៊ីននិម្មិតនឹងព្យាយាមប្រើបំពង់ដែលបានស្រាប់ ។</translation> </message> <message> - <source>Port &Path:</source> - <translation type="obsolete">ផ្លូវច្រក ៖</translation> + <source>&Create Pipe</source> + <translation>បង្កើតបំពង់</translation> </message> <message> - <source>Displays the path to the serial port's pipe on the host when the port works in <b>Host Pipe</b> mode, or the host serial device name when the port works in <b>Host Device</b> mode.</source> - <translation>បង្ហាញផ្លូវទៅកាន់ច្រកស៊េរៀលនៅលើម៉ាស៊ីន នៅពេលច្រកដំណើការក្នុងរបៀប <b>បំពង់ម៉ាស៊ីន</b> ឬឈ្មោះឧបករណ៍ស៊េរៀលនៅពេលច្រកដំណើរការក្នុងរបៀប <b>ឧបករណ៍ម៉ាស៊ីន</b> ។</translation> + <source>Port &Path:</source> + <translation>ផ្លូវច្រក ៖</translation> </message> <message> - <source>Port/File &Path:</source> - <translation type="unfinished"></translation> + <source>Displays the path to the serial port's pipe on the host when the port works in <b>Host Pipe</b> mode, or the host serial device name when the port works in <b>Host Device</b> mode.</source> + <translation>បង្ហាញផ្លូវទៅកាន់ច្រកស៊េរៀលនៅលើម៉ាស៊ីន នៅពេលច្រកដំណើការក្នុងរបៀប <b>បំពង់ម៉ាស៊ីន</b> ឬឈ្មោះឧបករណ៍ស៊េរៀលនៅពេលច្រកដំណើរការក្នុងរបៀប <b>ឧបករណ៍ម៉ាស៊ីន</b> ។</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsSerialPage</name> <message> - <source>Duplicate port number is selected </source> - <translation>បានជ្រើសលេខច្រកស្ទួន</translation> - </message> - <message> - <source>Port path is not specified </source> - <translation>មិនបានបញ្ជាក់ផ្លូវច្រកស្ទួនទេ</translation> - </message> - <message> - <source>Duplicate port path is entered </source> - <translation>បានបញ្ចូលផ្លូវច្រកស្ទួន</translation> - </message> -</context> -<context> - <name>VBoxVMSettingsSystem</name> - <message> - <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory might be left for your host operating system. Continue at your own risk.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>for performance reasons, the number of virtual CPUs attached to the virtual machine may not be more than twice the number of physical CPUs on the host (<b>%1</b>). Please reduce the number of virtual CPUs.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>you have assigned more virtual CPUs to the virtual machine than the number of physical CPUs on your host system (<b>%1</b>). This is likely to degrade the performance of your virtual machine. Please consider reducing the number of virtual CPUs.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>you have assigned more than one virtual CPU to this VM. This will not work unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>you have assigned more than one virtual CPU to this VM. This will not work unless hardware virtualization (VT-x/AMD-V) is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><qt>%1&nbsp;MB</qt></source> - <translation type="unfinished"><qt>%1&nbsp;មេកាបៃ</qt></translation> - </message> - <message> - <source><qt>%1&nbsp;CPU</qt></source> - <comment>%1 is 1 for now</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source><qt>%1&nbsp;CPUs</qt></source> - <comment>%1 is 32 for now</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Motherboard</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Base &Memory:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source> - <translation type="unfinished">ត្រួតពិនិត្យចំនួនសតិដែលបានផ្ដល់ទៅម៉ាស៊ីននិម្មិត ។ ប្រសិនបើអ្នកផ្ដល់ច្រើនពេក ម៉ាស៊ីនមិនអាចចាប់ផ្ដើមបានទេ ។</translation> - </message> - <message> - <source>MB</source> - <translation type="unfinished">មេកាបៃ</translation> - </message> - <message> - <source>&Boot Order:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Defines the boot device order. Use checkboxes to the left to enable or disable individual boot devices. Move items up and down to change the device order.</source> - <translation type="unfinished">កំណត់លំដាប់ឧបករណ៍ចាប់ផ្ដើម ។ ប្រើប្រអប់គូសធីកនៅខាងឆ្វេងដើម្បីបើក ឬបិទឧបករណ៍ចាប់ផ្ដើមនីមួយៗ ។ ផ្លាស់ទីធាតុឡើងលើ និងចុះក្រោមដើម្បីផ្លាស់ប្ដូរលំដាប់ឧបករណ៍ ។</translation> - </message> - <message> - <source>Move Down (Ctrl-Down)</source> - <translation type="unfinished">ផ្លាស់ទីចុះក្រោម (បញ្ជា(Ctrl)-Down)</translation> - </message> - <message> - <source>Moves the selected boot device down.</source> - <translation type="unfinished">ផ្លាស់ទីឧបករណ៍ចាប់ផ្ដើមដែលបានជ្រើសចុះក្រោម ។</translation> - </message> - <message> - <source>Move Up (Ctrl-Up)</source> - <translation type="unfinished">ផ្លាស់ទីឡើងលើ (បញ្ជា(Ctrl)-Up)</translation> - </message> - <message> - <source>Moves the selected boot device up.</source> - <translation type="unfinished">ផ្លាស់ទីឧបករណ៍ចាប់ផ្ដើមដែលបានជ្រើសឡើងលើ ។</translation> - </message> - <message> - <source>Extended Features:</source> - <translation type="unfinished">លក្ខណៈសម្បត្តិដែលបានពង្រីក ៖</translation> - </message> - <message> - <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation type="unfinished">នៅពេលបានគូសធីក ម៉ាស៊ីននិម្មិតនឹងគាំទ្រការកំណត់រចនាសម្ព័ន្ធកម្រិតខ្ពស់ និងចំណុចប្រទាក់គ្រប់គ្រងថាមពល (ACPI) ។ <b>ចំណាំ ៖</b> កុំបិទលក្ខណៈពិសេសនេះ បន្ទាប់ពីបានដំឡើងប្រព័ន្ធប្រតិបត្តិការវីនដូរបស់ម៉ាស៊ីនភ្ញៀវ !</translation> - </message> - <message> - <source>Enable &ACPI</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease the VM performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation type="unfinished">នៅពេលបានគូសធីក ម៉ាស៊ីននិម្មិតនឹងគាំទ្រ Input Output APIC (IO APIC) ដែលអាចបន្ថយការអនុវត្តរបស់ VM តិចតួច ។ <b>ចំណាំ ៖</b> កុំបិទលក្ខណៈពិសេសនេះបន្ទាប់ពីដំឡើងប្រព័ន្ធប្រតិបត្តិការវីនដូរបស់ម៉ាស៊ីនភ្ញៀវ !</translation> - </message> - <message> - <source>Enable &IO APIC</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Processor</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Processor(s):</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Controls the number of virtual CPUs in the virtual machine.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source> - <translation type="unfinished">នៅពេលបានគូសធីក លក្ខណៈពិសេសរបស់ Physical Address Extension (PAE) នៃស៊ីភីយូរបស់ម៉ាស៊ីននឹងត្រូវបានបង្ហាញដល់ម៉ាស៊ីននិម្មិត ។</translation> - </message> - <message> - <source>Enable PA&E/NX</source> - <translation type="unfinished">បើក PAE/NX</translation> - </message> - <message> - <source>Acce&leration</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Hardware Virtualization:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> - <translation type="unfinished">នៅពេលបានគូសធីគ ម៉ាស៊ីននិម្មិតនឹងព្យាយាមប្រាកដថាផ្នែកបន្ថែមនិម្មិតផ្នែករឹងរបស់ស៊ីភីយូរបស់ម៉ាស៊ីនដូចជា Intel VT-x និង AMD-V ។</translation> - </message> - <message> - <source>Enable &VT-x/AMD-V</source> - <translation type="unfinished">បើក VT-x/AMD-V</translation> + <source>Duplicate port number is selected </source> + <translation>បានជ្រើសលេខច្រកស្ទួន</translation> </message> <message> - <source>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</source> - <translation type="unfinished"></translation> + <source>Port path is not specified </source> + <translation>មិនបានបញ្ជាក់ផ្លូវច្រកស្ទួនទេ</translation> </message> <message> - <source>Enable Nested Pa&ging</source> - <translation type="unfinished"></translation> + <source>Duplicate port path is entered </source> + <translation>បានបញ្ចូលផ្លូវច្រកស្ទួន</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsUSB</name> <message> - <source>&Add Empty Filter</source> - <translation>បន្ថែមតម្រងទទេ</translation> + <source>&Add Empty Filter</source> + <translation>បន្ថែមតម្រងទទេ</translation> </message> <message> - <source>A&dd Filter From Device</source> - <translation>បន្ថែមតម្រងពីឧបករណ៍</translation> + <source>A&dd Filter From Device</source> + <translation>បន្ថែមតម្រងពីឧបករណ៍</translation> </message> <message> - <source>&Edit Filter</source> - <translation>កែសម្រួលតម្រង</translation> + <source>&Edit Filter</source> + <translation>កែសម្រួលតម្រង</translation> </message> <message> - <source>&Remove Filter</source> - <translation>យកតម្រងចេញ</translation> + <source>&Remove Filter</source> + <translation>យកតម្រងចេញ</translation> </message> <message> - <source>&Move Filter Up</source> - <translation>ផ្លាស់ទីតម្រងឡើងលើ</translation> + <source>&Move Filter Up</source> + <translation>ផ្លាស់ទីតម្រងឡើងលើ</translation> </message> <message> - <source>M&ove Filter Down</source> - <translation>ផ្លាស់ទីតម្រងចុះក្រោម</translation> + <source>M&ove Filter Down</source> + <translation>ផ្លាស់ទីតម្រងចុះក្រោម</translation> </message> <message> - <source>Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source> - <translation>បន្ថែមតម្រង USB ថ្មីដែលមានវាលទាំងអស់ ដោយដំបូងកំណត់ខ្សែអក្សរទៅទទេ ។ ចំណាំថា តម្រងបែបនេះនឹងផ្គូផ្គងឧបករណ៍ USB ដែលបានភ្ជាប់ ។</translation> + <source>Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source> + <translation>បន្ថែមតម្រង USB ថ្មីដែលមានវាលទាំងអស់ ដោយដំបូងកំណត់ខ្សែអក្សរទៅទទេ ។ ចំណាំថា តម្រងបែបនេះនឹងផ្គូផ្គងឧបករណ៍ USB ដែលបានភ្ជាប់ ។</translation> </message> <message> - <source>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source> - <translation>បន្ថែមតម្រង USB ថ្មីដែលមានវាលទាំងអស់កំណត់ទៅតម្លៃរបស់ឧបករណ៍ USB ដែលជ្រើសដែលបានភ្ជាប់ទៅ នឹងម៉ាស៊ីន ។</translation> + <source>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source> + <translation>បន្ថែមតម្រង USB ថ្មីដែលមានវាលទាំងអស់កំណត់ទៅតម្លៃរបស់ឧបករណ៍ USB ដែលជ្រើសដែលបានភ្ជាប់ទៅ នឹងម៉ាស៊ីន ។</translation> </message> <message> - <source>Edits the selected USB filter.</source> - <translation>កែសម្រួលតម្រង USB ដែលបានជ្រើស ។</translation> + <source>Edits the selected USB filter.</source> + <translation>កែសម្រួលតម្រង USB ដែលបានជ្រើស ។</translation> </message> <message> - <source>Removes the selected USB filter.</source> - <translation>យកតម្រង USB ដែលបានជ្រើសចេញ ។</translation> + <source>Removes the selected USB filter.</source> + <translation>យកតម្រង USB ដែលបានជ្រើសចេញ ។</translation> </message> <message> - <source>Moves the selected USB filter up.</source> - <translation>ផ្លាស់ទីតម្រង USB ដែលបានជ្រើសឡើងវលើ ។</translation> + <source>Moves the selected USB filter up.</source> + <translation>ផ្លាស់ទីតម្រង USB ដែលបានជ្រើសឡើងវលើ ។</translation> </message> <message> - <source>Moves the selected USB filter down.</source> - <translation>ផ្លាស់ទីតម្រង USB ដែលបានជ្រើសចុះក្រោម ។</translation> + <source>Moves the selected USB filter down.</source> + <translation>ផ្លាស់ទីតម្រង USB ដែលបានជ្រើសចុះក្រោម ។</translation> </message> <message> - <source>New Filter %1</source> - <comment>usb</comment> - <translation>តម្រងថ្មី %1</translation> + <source>New Filter %1</source> + <comment>usb</comment> + <translation>តម្រងថ្មី %1</translation> </message> <message> - <source>When checked, enables the virtual USB controller of this machine.</source> - <translation>នៅពេលបានគូសធីក បើកឧបករណ៍ត្រួតពិនិត្យ USB និម្មិតរបស់ម៉ាស៊ីននេះ ។</translation> + <source>When checked, enables the virtual USB controller of this machine.</source> + <translation>នៅពេលបានគូសធីក បើកឧបករណ៍ត្រួតពិនិត្យ USB និម្មិតរបស់ម៉ាស៊ីននេះ ។</translation> </message> <message> - <source>Enable &USB Controller</source> - <translation>បើកវត្ថុបញ្ជា USB</translation> + <source>Enable &USB Controller</source> + <translation>បើកវត្ថុបញ្ជា USB</translation> </message> <message> - <source>When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source> - <translation>នៅពេលបានគូសធីក បើកឧបករណ៍ត្រួតពិនិត្យ USB EHCI និម្មិតរបស់ម៉ាស៊ីននេះ ។ ឧបករណ៍បញ្ជា USB EHCI ផ្ដល់នូវការគាំទ្រ USB 2.0 ។</translation> + <source>When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source> + <translation>នៅពេលបានគូសធីក បើកឧបករណ៍ត្រួតពិនិត្យ USB EHCI និម្មិតរបស់ម៉ាស៊ីននេះ ។ ឧបករណ៍បញ្ជា USB EHCI ផ្ដល់នូវការគាំទ្រ USB 2.0 ។</translation> </message> <message> - <source>Enable USB 2.0 (E&HCI) Controller</source> - <translation>បើកវត្ថុបញ្ជា USB 2.0 (E&HCI)</translation> + <source>Enable USB 2.0 (E&HCI) Controller</source> + <translation>បើកវត្ថុបញ្ជា USB 2.0 (E&HCI)</translation> </message> <message> - <source>USB Device &Filters</source> - <translation>តម្រងឧបករណ៍ USB</translation> + <source>USB Device &Filters</source> + <translation>តម្រងឧបករណ៍ USB</translation> </message> <message> - <source>Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not. Use the context menu or buttons to the right to add or remove USB filters.</source> - <translation>រាយតម្រង USB ទាំងអស់របស់ម៉ាស៊ីននេះ ។ ប្រអប់ធីកនៅខាងឆ្វេងកំណត់ថាតើតម្រងជាក់លាក់ត្រូវបើក ឬក៏អត់ ។ ប្រើម៉ឺនុយបរិបទ ឬប៊ូតុងនៅខាងស្ដាំដើម្បីបន្ថែម ឬយកតម្រង USB ចេញ ។</translation> + <source>Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not. Use the context menu or buttons to the right to add or remove USB filters.</source> + <translation>រាយតម្រង USB ទាំងអស់របស់ម៉ាស៊ីននេះ ។ ប្រអប់ធីកនៅខាងឆ្វេងកំណត់ថាតើតម្រងជាក់លាក់ត្រូវបើក ឬក៏អត់ ។ ប្រើម៉ឺនុយបរិបទ ឬប៊ូតុងនៅខាងស្ដាំដើម្បីបន្ថែម ឬយកតម្រង USB ចេញ ។</translation> </message> <message> - <source>[filter]</source> - <translation>[តម្រង]</translation> + <source>[filter]</source> + <translation>[តម្រង]</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsUSBFilterDetails</name> <message> - <source>Any</source> - <comment>remote</comment> - <translation>ណាមួយ</translation> + <source>Any</source> + <comment>remote</comment> + <translation>ណាមួយ</translation> </message> <message> - <source>Yes</source> - <comment>remote</comment> - <translation>បាទ/ចាស</translation> + <source>Yes</source> + <comment>remote</comment> + <translation>បាទ/ចាស</translation> </message> <message> - <source>No</source> - <comment>remote</comment> - <translation>ទេ</translation> + <source>No</source> + <comment>remote</comment> + <translation>ទេ</translation> </message> <message> - <source>&Name:</source> - <translation>ឈ្មោះ ៖</translation> + <source>&Name:</source> + <translation>ឈ្មោះ ៖</translation> </message> <message> - <source>Displays the filter name.</source> - <translation>បង្ហាញឈ្មោះតម្រង ។</translation> + <source>Displays the filter name.</source> + <translation>បង្ហាញឈ្មោះតម្រង ។</translation> </message> <message> - <source>&Vendor ID:</source> - <translation>លេខសម្គាល់អ្នកលក់ ៖</translation> + <source>&Vendor ID:</source> + <translation>លេខសម្គាល់អ្នកលក់ ៖</translation> </message> <message> - <source>Defines the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source> - <translation>កំណត់តម្រងលេខសម្គាល់អ្នកលក់ ។ ទ្រង់ទ្រាយខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> គឺ <tt>XXXX</tt> ដែល <tt>X</tt> ជាគោលដប់ប្រាំមួយ ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> + <source>Defines the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source> + <translation>កំណត់តម្រងលេខសម្គាល់អ្នកលក់ ។ ទ្រង់ទ្រាយខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> គឺ <tt>XXXX</tt> ដែល <tt>X</tt> ជាគោលដប់ប្រាំមួយ ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> </message> <message> - <source>&Product ID:</source> - <translation>លេខសម្គាល់ផលិតផល ៖</translation> + <source>&Product ID:</source> + <translation>លេខសម្គាល់ផលិតផល ៖</translation> </message> <message> - <source>Defines the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source> - <translation>កំណត់តម្រងលេខសម្គាល់ផលិតផល ។ ទ្រង់ទ្រាយខ្សែអក្សរ<i>ផ្គូផ្គងជាក់លាក់</i> គឺ<tt>XXXX</tt> ដែល <tt>X</tt> គឺជាគោលដប់ប្រាំមួយ ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> + <source>Defines the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source> + <translation>កំណត់តម្រងលេខសម្គាល់ផលិតផល ។ ទ្រង់ទ្រាយខ្សែអក្សរ<i>ផ្គូផ្គងជាក់លាក់</i> គឺ<tt>XXXX</tt> ដែល <tt>X</tt> គឺជាគោលដប់ប្រាំមួយ ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> </message> <message> - <source>&Revision:</source> - <translation>ការពិនិត្យឡើងវិញ ៖</translation> + <source>&Revision:</source> + <translation>ការពិនិត្យឡើងវិញ ៖</translation> </message> <message> - <source>Defines the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source> - <translation>កំណត់ការពិនិត្យតម្រងលេខឡើងវិញ ។ ទ្រង់ទ្រាយខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> គឺ<tt>IIFF</tt> ដែល <tt>I</tt> ជាចំនួនគោលដប់របស់ផ្នែកចំនួនគត់ ហើយ <tt>F</tt> គឺជាចំនួនគោលដប់របស់ផ្នែកប្រភាគ ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> + <source>Defines the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source> + <translation>កំណត់ការពិនិត្យតម្រងលេខឡើងវិញ ។ ទ្រង់ទ្រាយខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> គឺ<tt>IIFF</tt> ដែល <tt>I</tt> ជាចំនួនគោលដប់របស់ផ្នែកចំនួនគត់ ហើយ <tt>F</tt> គឺជាចំនួនគោលដប់របស់ផ្នែកប្រភាគ ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> </message> <message> - <source>&Manufacturer:</source> - <translation>អ្នកបង្កើត ៖</translation> + <source>&Manufacturer:</source> + <translation>អ្នកបង្កើត ៖</translation> </message> <message> - <source>Defines the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source> - <translation>កំណត់តម្រងអ្នកផលិតជាខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> + <source>Defines the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source> + <translation>កំណត់តម្រងអ្នកផលិតជាខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> </message> <message> - <source>Pro&duct:</source> - <translation>ផលិតផល ៖</translation> + <source>Pro&duct:</source> + <translation>ផលិតផល ៖</translation> </message> <message> - <source>Defines the product name filter as an <i>exact match</i> string. An empty string will match any value.</source> - <translation>កំណត់តម្រងឈ្មោះផលិតផលជាខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> + <source>Defines the product name filter as an <i>exact match</i> string. An empty string will match any value.</source> + <translation>កំណត់តម្រងឈ្មោះផលិតផលជាខ្សែអក្សរ <i>ផ្គូផ្គងជាក់លាក់</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> </message> <message> - <source>&Serial No.:</source> - <translation>លេខស៊េរី ៖</translation> + <source>&Serial No.:</source> + <translation>លេខស៊េរី ៖</translation> </message> <message> - <source>Defines the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source> - <translation>កំណត់តម្រងលេខស៊េរីជាខ្សែអក្សរ <i>ការផ្គូផ្គងជាក់លាក់</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> + <source>Defines the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source> + <translation>កំណត់តម្រងលេខស៊េរីជាខ្សែអក្សរ <i>ការផ្គូផ្គងជាក់លាក់</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> </message> <message> - <source>Por&t:</source> - <translation>ច្រក ៖</translation> + <source>Por&t:</source> + <translation>ច្រក ៖</translation> </message> <message> - <source>Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source> - <translation>កំណត់តម្រងច្រក USB ម៉ាស៊ីណជាខ្សែអក្សរ <i>ផ្គូផ្គងពិតប្រាកដ</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> + <source>Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source> + <translation>កំណត់តម្រងច្រក USB ម៉ាស៊ីណជាខ្សែអក្សរ <i>ផ្គូផ្គងពិតប្រាកដ</i> ។ ខ្សែអក្សរទទេនឹងផ្គូផ្គងតម្លៃណាមួយ ។</translation> </message> <message> - <source>R&emote:</source> - <translation>ពីចម្ងាយ ៖</translation> + <source>R&emote:</source> + <translation>ពីចម្ងាយ ៖</translation> </message> <message> - <source>Defines whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source> - <translation>កំណត់ថាតើតម្រងនេះអនុវត្តទៅកាន់ឧបករណ៍ USB ដែលបានភ្ជាប់ទៅកុំព្យូទ័រដែរឬទេ (<i>គ្មានទេ</i>) ទៅកាន់កុំព្យូទ័រភ្ញៀវរបស់ VRDP (<i>បាទ/ចាស</i>) ឬទាំងពីរ (<i>ណាមួយ</i>) ។</translation> + <source>Defines whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source> + <translation>កំណត់ថាតើតម្រងនេះអនុវត្តទៅកាន់ឧបករណ៍ USB ដែលបានភ្ជាប់ទៅកុំព្យូទ័រដែរឬទេ (<i>គ្មានទេ</i>) ទៅកាន់កុំព្យូទ័រភ្ញៀវរបស់ VRDP (<i>បាទ/ចាស</i>) ឬទាំងពីរ (<i>ណាមួយ</i>) ។</translation> </message> <message> - <source>&Action:</source> - <translation>សកម្មភាព ៖</translation> + <source>&Action:</source> + <translation>សកម្មភាព ៖</translation> </message> <message> - <source>Defines an action performed by the host computer when a matching device is attached: give it up to the host OS (<i>Ignore</i>) or grab it for later usage by virtual machines (<i>Hold</i>).</source> - <translation>កំណត់សកម្មភាពដែលបានអនុវត្តដោយកុំព្យូទ័រ នៅពេលផ្គូផ្គងឧបករណ៍ដែលត្រូវបានភ្ជាប់ ៖ ផ្ដល់វាទៅប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីន (<i>មិនអើពើ</i>) ឬចាប់យកវាសម្រាប់ប្រើពេលក្រោយ ដោយម៉ាស៊ីននិម្មិត <i>រង់ចាំ</i>) ។</translation> + <source>Defines an action performed by the host computer when a matching device is attached: give it up to the host OS (<i>Ignore</i>) or grab it for later usage by virtual machines (<i>Hold</i>).</source> + <translation>កំណត់សកម្មភាពដែលបានអនុវត្តដោយកុំព្យូទ័រ នៅពេលផ្គូផ្គងឧបករណ៍ដែលត្រូវបានភ្ជាប់ ៖ ផ្ដល់វាទៅប្រព័ន្ធប្រតិបត្តិការរបស់ម៉ាស៊ីន (<i>មិនអើពើ</i>) ឬចាប់យកវាសម្រាប់ប្រើពេលក្រោយ ដោយម៉ាស៊ីននិម្មិត <i>រង់ចាំ</i>) ។</translation> </message> <message> - <source>USB Filter Details</source> - <translation>សេចក្ដីលម្អិតតម្រង USB</translation> + <source>USB Filter Details</source> + <translation>សេចក្ដីលម្អិតតម្រង USB</translation> </message> -</context> -<context> + </context> + <context> <name>VBoxVMSettingsVRDP</name> <message> - <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source> - <translation type="obsolete">នៅពេលបានគូសធីក VM នឹងដើរតួជាម៉ាស៊ីនបម្រើពិធីការផ្ទៃតុពីចម្ងាយ (RDP) ដោយអនុញ្ញាតឲ្យម៉ាស៊ីនភ្ញៀវពីចម្ងាយតភ្ជាប់ ហើយប្រតិបត្តិ VM (នៅពេលកំពុងរត់) ដោយប្រើម៉ាស៊ីនភ្ញៀវ RDP ស្តង់ដារ ។</translation> + <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source> + <translation>នៅពេលបានគូសធីក VM នឹងដើរតួជាម៉ាស៊ីនបម្រើពិធីការផ្ទៃតុពីចម្ងាយ (RDP) ដោយអនុញ្ញាតឲ្យម៉ាស៊ីនភ្ញៀវពីចម្ងាយតភ្ជាប់ ហើយប្រតិបត្តិ VM (នៅពេលកំពុងរត់) ដោយប្រើម៉ាស៊ីនភ្ញៀវ RDP ស្តង់ដារ ។</translation> </message> <message> - <source>&Enable VRDP Server</source> - <translation type="obsolete">បើកម៉ាស៊ីនបម្រើ VRDP</translation> + <source>&Enable VRDP Server</source> + <translation>បើកម៉ាស៊ីនបម្រើ VRDP</translation> </message> <message> - <source>Server &Port:</source> - <translation type="obsolete">ច្រកម៉ាស៊ីនបម្រើ ៖</translation> + <source>Server &Port:</source> + <translation>ច្រកម៉ាស៊ីនបម្រើ ៖</translation> </message> <message> - <source>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</source> - <translation type="obsolete">បង្ហាញលេខច្រកម៉ាស៊ីនបម្រើ VRDP ។ អ្នកអាចបញ្ជាក់ <tt>0</tt> (សូន្យ) ដើម្បីកំណត់ច្រកទៅតម្លៃលំនាំដើមឡើងវិញ ។</translation> + <source>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</source> + <translation>បង្ហាញលេខច្រកម៉ាស៊ីនបម្រើ VRDP ។ អ្នកអាចបញ្ជាក់ <tt>0</tt> (សូន្យ) ដើម្បីកំណត់ច្រកទៅតម្លៃលំនាំដើមឡើងវិញ ។</translation> </message> <message> - <source>Authentication &Method:</source> - <translation type="obsolete">វិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖</translation> + <source>Authentication &Method:</source> + <translation>វិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖</translation> </message> <message> - <source>Defines the VRDP authentication method.</source> - <translation type="obsolete">កំណត់វិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ VRDP ។</translation> + <source>Defines the VRDP authentication method.</source> + <translation>កំណត់វិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ VRDP ។</translation> </message> <message> - <source>Authentication &Timeout:</source> - <translation type="obsolete">អស់ពេលផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖</translation> + <source>Authentication &Timeout:</source> + <translation>អស់ពេលផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖</translation> </message> <message> - <source>Specifies the timeout for guest authentication, in milliseconds.</source> - <translation type="obsolete">បញ្ជាក់ការអស់ពេលវេលាសម្រាប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ម៉ាស៊ីនភ្ញៀវ គិតជាមិល្លីវិនាទី ។</translation> + <source>Specifies the timeout for guest authentication, in milliseconds.</source> + <translation>បញ្ជាក់ការអស់ពេលវេលាសម្រាប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ម៉ាស៊ីនភ្ញៀវ គិតជាមិល្លីវិនាទី ។</translation> </message> -</context> + </context> </TS> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts index dc820d283..991e0e2c5 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS><TS version="1.1" language="uk_UA"> +<!DOCTYPE TS> +<TS version="2.0" language="uk_UA"> <context> <name>@@@</name> <message> @@ -30,7 +31,7 @@ <location filename="../src/VBoxGlobal.cpp" line="2650"/> <source>Sun Microsystems, Inc.</source> <comment>Comma-separated list of translators</comment> - <translation>Daniel Korostil</translation> + <translation>Daniel Korostil.</translation> </message> </context> <context> @@ -81,7 +82,7 @@ <message> <location filename="../src/main.cpp" line="72"/> <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root.</source> - <translation>Ця помилка означає, що драйвер ядра не зміг виділити достатньо пам'яті або не вдалось виконати відображення деякої операції.<br/><br/>Це є відомі проблеми з версією ядра 2.6.29. Якщо ви запускаєте саме це ядро, будь ласка, редагуйте /usr/src/vboxdrv-*/Makefile і ввімкніть <i>VBOX_USE_INSERT_PAGE = 1</i>. Після чого, перекомпілюйте модуль ядра, виконавши з-під адміністратора<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>.</translation> + <translation>Ця помилка означає, що драйвер ядра не зміг виділити достатньо пам'яті або не вдалось виконати відображення деякої операції.<br/><br/>Це відомі проблеми з версією ядра 2.6.29. Якщо ви запускаєте саме це ядро, будь ласка, редагуйте /usr/src/vboxdrv-*/Makefile і ввімкніть <i>VBOX_USE_INSERT_PAGE = 1</i>. Після чого, перекомпілюйте модуль ядра, виконавши з-під адміністратора<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>.</translation> </message> <message> <location filename="../src/main.cpp" line="82"/> @@ -386,7 +387,7 @@ <message> <location filename="../include/QIHttp.h" line="91"/> <source>Connection timed out</source> - <translation>Час очікування підключення вичерпався</translation> + <translation>Час очікування під'єднання вичерпався</translation> </message> <message> <location filename="../include/QIHttp.h" line="94"/> @@ -486,27 +487,27 @@ <context> <name>VBoxAddNIDialog</name> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxAboutDlg.cpp" line="0"/> <source>Add Host Interface</source> <translation type="obsolete">Додати головний інтерфейс</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxAboutDlg.cpp" line="0"/> <source>Interface Name</source> <translation type="obsolete">Назва інтерфейсу</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxAboutDlg.cpp" line="0"/> <source>Descriptive name of the new network interface</source> <translation type="obsolete">Описова назва нового мережевого інтерфейсу</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxAboutDlg.cpp" line="0"/> <source>&OK</source> <translation type="obsolete">&Гаразд</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxAboutDlg.cpp" line="0"/> <source>Cancel</source> <translation type="obsolete">Скасувати</translation> </message> @@ -682,7 +683,7 @@ <message> <location filename="../ui/VBoxCloseVMDlg.ui" line="79"/> <source>You want to:</source> - <translation>Ви хочете:</translation> + <translation>Ви бажаєте:</translation> </message> <message> <location filename="../ui/VBoxCloseVMDlg.ui" line="107"/> @@ -712,7 +713,7 @@ <message> <location filename="../ui/VBoxCloseVMDlg.ui" line="207"/> <source><p>When checked, the machine state will be restored from the state stored in the current snapshot right after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and go back to the current snapshot.</p></source> - <translation><p>Якщо цей пункт буде позначено, стан машини буде відновлено до стану, який збережено в поточному знімку, відразу після її вимикання. Це може бути корисним, якщо ви впевнені, що хочете відкинути результати останнього сеансу і вернутись до поточного знімку.</p></translation> + <translation><p>Якщо це відмічено, стан машини буде відновлено до стану, який збережено в поточному знімку, відразу після її вимкнення. Це може бути корисним, якщо ви впевнені, що бажаєте відкинути результати останнього сеансу і вернутись до поточного знімку.</p></translation> </message> <message> <location filename="../ui/VBoxCloseVMDlg.ui" line="104"/> @@ -722,7 +723,7 @@ <message> <location filename="../ui/VBoxCloseVMDlg.ui" line="130"/> <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> - <translation><p>Відсилає ACPI-сигнал натиснення кнопки живлення у віртуальній машині.</p><p>Зазвичай, гостьова операційна система, яка виконується всередині віртуальної машини, визначить цей сигнал і виконає процес нормального завершення роботи. Цей варіант є рекомендованим шляхом вимкнення віртуальної машини, бо всі запущені програми всередині гостьової операційної системи зможуть зберегти свої дані та стан.</p><p>Якщо машина ніяк не реагує на ці дії, тоді гостьова операційна система може бути неправильно налаштована, або вона взагалі не розпізнає ACPI-сигнал живлення. У такому випадку, ви повинні вибрати дію <b>Вимкнути машину</b> для зупинення виконання віртуальної машини.</p></translation> + <translation><p>Відсилає сигнал ACPI натиснення кнопки живлення у віртуальній машині.</p><p>Зазвичай, гостьова операційна система, яка виконується всередині віртуальної машини, визначить цей сигнал і виконає процес нормального завершення роботи. Цей варіант є рекомендованим шляхом вимкнення віртуальної машини, бо всі запущені програми всередині гостьової операційної системи зможуть зберегти свої дані та стан.</p><p>Якщо машина ніяк не реагує на ці дії, тоді гостьова операційна система може бути неправильно налаштована, або вона взагалі не розпізнає сигнал ACPI живлення. У такому випадку, ви повинні вибрати дію <b>Вимкнути машину</b> для зупинення виконання віртуальної машини.</p></translation> </message> <message> <location filename="../ui/VBoxCloseVMDlg.ui" line="156"/> @@ -745,7 +746,7 @@ <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1657"/> <source>Switch to fullscreen mode</source> - <translation>перемкнути у повноекранний режим</translation> + <translation>Перемкнути у повноекранний режим</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1663"/> @@ -877,7 +878,7 @@ <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1729"/> <source>Unmount the currently mounted CD/DVD-ROM media</source> - <translation>Демонтувати вже змонтований CD/DVD-ROM</translation> + <translation>Демонтувати вже змонтований носій CD/DVD-ROM</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1733"/> @@ -887,7 +888,7 @@ <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1735"/> <source>Enable or disable remote desktop (RDP) connections to this machine</source> - <translation>Дозволити або заборонити підключення віддаленої стільниці (RDP) до цієї машини</translation> + <translation>Дозволити або заборонити під'єднання віддаленої стільниці (RDP) до цієї машини</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1737"/> @@ -902,7 +903,7 @@ <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1741"/> <source>&Install Guest Additions...</source> - <translation>Вс&тановіть гостьові доповнення...</translation> + <translation>Вс&тановити гостьові доповнення...</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1744"/> @@ -932,7 +933,7 @@ <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1780"/> <source>De&bug</source> - <translation>&Налагодження</translation> + <translation>&Зневадження</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1782"/> @@ -1130,7 +1131,7 @@ <location filename="../src/VBoxConsoleWnd.cpp" line="1996"/> <source><br><nobr><b>All network adapters are disabled</b></nobr></source> <comment>Network adapters tooltip</comment> - <translation><br><nobr><b>Всі мережеві адаптери вимукнуті</b></nobr></translation> + <translation><br><nobr><b>Всі мережеві адаптери вимкнуті</b></nobr></translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="2008"/> @@ -1142,7 +1143,7 @@ <location filename="../src/VBoxConsoleWnd.cpp" line="2026"/> <source><br><nobr><b>No USB devices attached</b></nobr></source> <comment>USB device tooltip</comment> - <translation><br><nobr><b>Жодного пристрою USB не під’єднано</b></nobr></translation> + <translation><br><nobr><b>Жодного пристрою USB не під'єднано</b></nobr></translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="2033"/> @@ -1163,19 +1164,19 @@ <translation><br><nobr><b>Немає спільних тек</b></nobr></translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxConsoleWnd.cpp" line="0"/> <source>Sun xVM VirtualBox</source> <translation type="obsolete">Sun xVM VirtualBox</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1708"/> <source>Session I&nformation Dialog</source> - <translation>&Інформація про сесію</translation> + <translation>&Інформація про сеанс</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1710"/> <source>Show Session Information Dialog</source> - <translation>Показувати інформацію про сесію</translation> + <translation>Показати інформацію про сеанс</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="1750"/> @@ -1279,12 +1280,12 @@ <message> <location filename="../src/VBoxExportApplianceWzd.cpp" line="134"/> <source>Please complete the additionally fields like the username, password and the bucket. Finally you have to provide a filename for the OVF target.</source> - <translation type="unfinished"></translation> + <translation>Будь ласка, заповніть додаткові поля такі, як ім'я користувача, пароль і крилата діжка. Наостанок, ви маєте надати назву файлові для цілі OVF.</translation> </message> <message> <location filename="../src/VBoxExportApplianceWzd.cpp" line="135"/> <source>Please complete the additionally fields like the username, password, hostname and the bucket. Finally you have to provide a filename for the OVF target.</source> - <translation type="unfinished"></translation> + <translation>Будь ласка, заповніть додаткові поля такі, як ім'я користувача, пароль, назва вузла і крилата діжка. Наостанок, ви маєте надати назву файлові для цілі OVF.</translation> </message> <message> <location filename="../src/VBoxExportApplianceWzd.cpp" line="208"/> @@ -1299,17 +1300,17 @@ <message> <location filename="../src/VBoxExportApplianceWzd.cpp" line="388"/> <source>Exporting Appliance ...</source> - <translation type="unfinished"></translation> + <translation>Експорт образа віртуальної машини ...</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="31"/> <source>Appliance Export Wizard</source> - <translation type="unfinished"></translation> + <translation>Майстер експорту образа віртуальної машини</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="55"/> <source>Welcome to the Appliance Export Wizard!</source> - <translation type="unfinished"></translation> + <translation>Ласкаво просимо до майстера експорту образа віртуальної машини!</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="105"/> @@ -1320,7 +1321,13 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This wizard will guide you through the process of exporting an appliance. </p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Use the <span style=" font-weight:600;">Next</span> button to go the next page of the wizard and the <span style=" font-weight:600;">Back</span> button to return to the previous page.</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please select the virtual machines that should be exported to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></body></html></source> - <translation type="unfinished"></translation> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Цей майстер допоможе вам з експортом образа віртуальної машини. </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Натисніть кнопку <span style=" font-weight:600;">Далі</span>, щоб перейти до наступної сторінки майстра і <span style=" font-weight:600;">Назад</span>, щоб повернутись до попередньої сторінки.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Будь ласка, виберіть віртуальні машини, які слід експортувати в образ віртуальної машини. Ви можете вибрати більше одного. Будь ласка, майте на увазі, що ті віртуальні машини потрібно вимкнути перед експортом.</p></body></html></translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="722"/> @@ -1340,77 +1347,77 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="545"/> <source>Appliance Export Settings</source> - <translation type="unfinished"></translation> + <translation>Налаштування експорту образів віртуальної машини</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="252"/> <source>Here you can change additional configuration values of the selected virtual machines. You can modify most of the shown properties by double-clicking on the items.</source> - <translation type="unfinished"></translation> + <translation>Тут ви можете змінити додаткові значення налаштування вибраної віртуальної машини. Ви можете змінити більшість показаних властивостей подвійним клацом по пунктах.</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="298"/> <source>Restore Defaults</source> - <translation type="unfinished">Відновити до типових</translation> + <translation>Відновити до типових</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="419"/> <source>Please specify the target for the OVF export. You can choose between a local file system export, the uploading of the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation type="unfinished"></translation> + <translation>Будь ласка, вкажіть ціль експорту OVF. Ви можете вибрати між експортом локальної файлової системи і завантаженням OVF на хмарні служби Sun або на сервер зберігання S3.</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="431"/> <source>&Local Filesystem </source> - <translation type="unfinished"></translation> + <translation>&Локальна файлова система </translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="441"/> <source>Sun &Cloud</source> - <translation type="unfinished"></translation> + <translation>&Хмаринки Sun</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="448"/> <source>&Simple Storage System (S3)</source> - <translation type="unfinished"></translation> + <translation>&Проста система зберігання (S3)</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="604"/> <source>&Username:</source> - <translation type="unfinished"></translation> + <translation>&Ім'я користувача:</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="617"/> <source>&Password:</source> - <translation type="unfinished">&Пароль:</translation> + <translation>&Пароль:</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="637"/> <source>&File:</source> - <translation type="unfinished"></translation> + <translation>&Файл:</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="650"/> <source>&Bucket:</source> - <translation type="unfinished"></translation> + <translation>&Крилата діжка:</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="660"/> <source>&Hostname:</source> - <translation type="unfinished"></translation> + <translation>&Назва вузла:</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="675"/> <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source> - <translation type="unfinished"></translation> + <translation>Записати в форматі OVF 0.9 для сумісності з іншими продуктами віртуалізації.</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="678"/> <source>&Write legacy OVF 0.9</source> - <translation type="unfinished"></translation> + <translation>&Записати в OVF 0.9</translation> </message> <message> <location filename="../ui/VBoxExportApplianceWzd.ui" line="729"/> <source>&Export ></source> - <translation type="unfinished"></translation> + <translation>&Експорт ></translation> </message> </context> <context> @@ -1486,7 +1493,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="165"/> <source>General</source> - <translation>Загальні</translation> + <translation>Загально</translation> </message> <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="168"/> @@ -1554,7 +1561,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxGLSettingsGeneral.ui" line="128"/> <source>When checked, the application will provide an icon with the context menu in the system tray.</source> - <translation>Якщо цей пункт буде позначено, програма забезпечуватиме піктограму з контекстним меню в системному лотку.</translation> + <translation>Якщо це відмічено, програма забезпечуватиме піктограму з контекстним меню в системному лотку.</translation> </message> <message> <location filename="../ui/VBoxGLSettingsGeneral.ui" line="131"/> @@ -1634,7 +1641,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxGLSettingsLanguage.ui" line="87"/> <source>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</source> - <translation>Показує список всіх доступних користувацьких інтерфейсів мови.Чинна мова записана <b>грубим шрифтом</b>. Виберіть <i>Типова</i>, щоб повернутися до типової для системи мови.</translation> + <translation>Показує список усіх доступних мов користувацького інтерфейсу. Чинна мова записана <b>грубим шрифтом</b>. Виберіть <i>Типова</i>, щоб повернутися до типової для системи мови.</translation> </message> <message> <location filename="../ui/VBoxGLSettingsLanguage.ui" line="94"/> @@ -1963,7 +1970,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxGLSettingsUpdate.ui" line="45"/> <source>When checked, the application will periodically connect to the VirtualBox website and check whether a new VirtualBox version is available.</source> - <translation>Якщо це відмічено, програма періодично підключатиметься до веб-сайта VirtualBox і перевірятиме доступність нових версій VirtualBox.</translation> + <translation>Якщо це відмічено, програма періодично буде під'єднуватись до сайта VirtualBox і перевірятиме доступність нових версій VirtualBox.</translation> </message> <message> <location filename="../ui/VBoxGLSettingsUpdate.ui" line="48"/> @@ -1978,7 +1985,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxGLSettingsUpdate.ui" line="103"/> <source>Specifies how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source> - <translation>Визначає як часто слід здійснювати перевірку нової версії. Майте на увазі, якщо ви бажаєте повністю відмовитись від перевірки, просто зніміть мітку.</translation> + <translation>Визначає, як часто слід здійснювати перевірку нової версії. Майте на увазі, якщо ви бажаєте повністю відмовитись від перевірки, просто зніміть мітку.</translation> </message> <message> <location filename="../ui/VBoxGLSettingsUpdate.ui" line="129"/> @@ -2004,7 +2011,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxGlobal.cpp" line="1334"/> <source><br><nobr>Serial No. %1</nobr></source> <comment>USB device tooltip</comment> - <translation><br><nobr>Серійний Номер %1</nobr></translation> + <translation><br><nobr>Серійний номер %1</nobr></translation> </message> <message> <location filename="../src/VBoxGlobal.cpp" line="1341"/> @@ -2031,7 +2038,7 @@ p, li { white-space: pre-wrap; } <translation>Основна пам'ять</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source><nobr>%3 MB</nobr></source> <comment>details report</comment> <translation type="obsolete"><nobr>%3 МБ.</nobr></translation> @@ -2040,7 +2047,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxGlobal.cpp" line="1443"/> <source>General</source> <comment>details report</comment> - <translation>Загальні</translation> + <translation>Загально</translation> </message> <message> <location filename="../src/VBoxGlobal.cpp" line="1532"/> @@ -2049,7 +2056,7 @@ p, li { white-space: pre-wrap; } <translation>Відеопам'ять</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source><nobr>%4 MB</nobr></source> <comment>details report</comment> <translation type="obsolete"><nobr>%4 МБ.</nobr></translation> @@ -2205,31 +2212,31 @@ p, li { white-space: pre-wrap; } <translation>Вимкнутий</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>VRDP Server Port</source> <comment>details report (VRDP)</comment> <translation type="obsolete">Порт сервера VRDP</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>%1</source> <comment>details report (VRDP)</comment> <translation type="obsolete">%1</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>Disabled</source> <comment>details report (VRDP)</comment> <translation type="obsolete">Вимкнутий</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>Remote Display</source> <comment>details report</comment> <translation type="obsolete">Віддалена стільниця</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>Opening URLs is not implemented yet.</source> <translation type="obsolete">Відкриття URL ще не здійснено.</translation> </message> @@ -2444,7 +2451,7 @@ p, li { white-space: pre-wrap; } <translation>NAT</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>Host Interface</source> <comment>NetworkAttachmentType</comment> <translation type="obsolete">Головний інтерфейс</translation> @@ -2516,12 +2523,12 @@ p, li { white-space: pre-wrap; } <translation>Двонапрямний</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>Select a directory</source> <translation type="obsolete">Виберіть теку</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>Select a file</source> <translation type="obsolete">Виберіть файл</translation> </message> @@ -2556,7 +2563,7 @@ p, li { white-space: pre-wrap; } <translation>Спільна теки</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>%1</source> <comment>details report (shadef folders)</comment> <translation type="obsolete">%1</translation> @@ -2583,7 +2590,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxGlobal.cpp" line="2705"/> <source>Disconnected</source> <comment>PortMode</comment> - <translation>Відключений</translation> + <translation>Від'єднаний</translation> </message> <message> <location filename="../src/VBoxGlobal.cpp" line="2706"/> @@ -2766,13 +2773,13 @@ p, li { white-space: pre-wrap; } <translation>Intel PRO/1000 MT Desktop (82540EM)</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>PIIX3</source> <comment>IDEControllerType</comment> <translation type="obsolete">PIIX3</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>PIIX4</source> <comment>IDEControllerType</comment> <translation type="obsolete">PIIX4</translation> @@ -2817,7 +2824,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxGlobal.cpp" line="1383"/> <source><nobr>Serial No.: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation><nobr>Серійний Номер: %1</nobr></translation> + <translation><nobr>Серійний номер: %1</nobr></translation> </message> <message> <location filename="../src/VBoxGlobal.cpp" line="1388"/> @@ -2832,13 +2839,13 @@ p, li { white-space: pre-wrap; } <translation><nobr>Стан: %1</nobr></translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>host interface, %1</source> <comment>details report (network)</comment> <translation type="obsolete">головний інтерфейс, %1</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxGlobal.cpp" line="0"/> <source>internal network, '%1'</source> <comment>details report (network)</comment> <translation type="obsolete">внутрішня мережа, '%1'</translation> @@ -2900,12 +2907,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxMedium.cpp" line="495"/> <source><hr>Some of the media in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these media.</source> - <translation><hr>Деякі з носіїв цієї низки жорстких дисків недоступні. Будь ласка, використайте Керування Віртуальними Носіями в режимі <b>Показати обчислення жорстких дисків</b>, щоб оглянути цей носій.</translation> + <translation><hr>Деякі з носіїв цієї низки жорстких дисків недоступні. Будь ласка, використайте керування віртуальними носіями в режимі <b>Показати обчислення жорстких дисків</b>, щоб оглянути цей носій.</translation> </message> <message> <location filename="../src/VBoxMedium.cpp" line="514"/> <source>%1<hr>This base hard disk is indirectly attached using the following differencing hard disk:<br>%2%3</source> - <translation>%1<hr>Цей жорсткий диск неявно під'єднаний, використовуючи наступне обчислення жорсткого диска:<br>%2%3</translation> + <translation>%1<hr>Цей жорсткий диск неявно під'єднаний, використовуючи таке обчислення жорсткого диска:<br>%2%3</translation> </message> <message> <location filename="../src/VBoxGlobal.cpp" line="1536"/> @@ -2983,7 +2990,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxGlobal.cpp" line="1546"/> <source>Remote Display Server Port</source> <comment>details report (VRDP Server)</comment> - <translation>Віддалений потр екрана сервера</translation> + <translation>Віддалений порт екрана сервера</translation> </message> <message> <location filename="../src/VBoxGlobal.cpp" line="1550"/> @@ -3316,7 +3323,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxMediaComboBox.cpp" line="262"/> <source>No media available. Use the Virtual Media Manager to add media of the corresponding type.</source> - <translation>Жодного доступного носія. Використайте Керування Віртуальними Носіями, щоб додати носія відповідного типу.</translation> + <translation>Жодного доступного носія. Використайте керування віртуальними носіями, щоб додати носія відповідного типу.</translation> </message> <message> <location filename="../src/VBoxMediaComboBox.cpp" line="263"/> @@ -3455,7 +3462,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxMediaManagerDlg.ui" line="36"/> <source>Virtual Media Manager</source> - <translation>Керування Віртуальними Носіями</translation> + <translation>Керування віртуальними носіями</translation> </message> <message> <location filename="../ui/VBoxMediaManagerDlg.ui" line="59"/> @@ -3514,42 +3521,42 @@ p, li { white-space: pre-wrap; } <context> <name>VBoxNIList</name> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source>VirtualBox Host Interface %1</source> <translation type="obsolete">Головний інтерфейс VirtualBox %1</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source><p>Do you want to remove the selected host network interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> This interface may be in use by one or more network adapters of this or another VM. After it is removed, these adapters will no longer work until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> <translation type="obsolete"><p>Чи ви бажаєте вилучити вибраний головний мережевий інтерфейс <nobr><b>%1</b>?</nobr></p><p><b>Майте на увазі:</b> Цей інтерфейс може використовуватись одним або більше мережевим адаптером на цій чи іншій віртуальній машині. Після вилучення, ці адаптери більше не працюватимуть поки ви не зміните їхні налаштування, вибравши будь-яку іншу назву інтерфейсу або інший тип під'єднання.</p></translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source>Host &Interfaces</source> <translation type="obsolete">&Головний інтерфейс</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source>Lists all available host interfaces.</source> <translation type="obsolete">Показує список всіх доступних головних інтерфейсів. </translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source>A&dd New Host Interface</source> <translation type="obsolete">&Додати новий головний інтерфейс</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source>&Remove Selected Host Interface</source> <translation type="obsolete">&Вилучити вибраний головний інтерфейс</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source>Adds a new host interface.</source> <translation type="obsolete">Додає новий головний інтерфейс.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxMiniToolBar.cpp" line="0"/> <source>Removes the selected host interface.</source> <translation type="obsolete">Вилучає вибраний головний інтерфейс.</translation> </message> @@ -3564,7 +3571,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewHDWzd.ui" line="63"/> <source>Welcome to the Create New Virtual Disk Wizard!</source> - <translation>Ласкаво просимо до Майстра Створення Нового Віртуального Диска!</translation> + <translation>Ласкаво просимо до майсетра створення нового віртуального диска!</translation> </message> <message> <location filename="../ui/VBoxNewHDWzd.ui" line="435"/> @@ -3584,7 +3591,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxNewHDWzd.cpp" line="274"/> <source>Hard disk images (*.vdi)</source> - <translation>Образ жорсткого диску (*.vdi)</translation> + <translation>Образ жорсткого диска (*.vdi)</translation> </message> <message> <location filename="../src/VBoxNewHDWzd.cpp" line="272"/> @@ -3638,7 +3645,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewHDWzd.ui" line="121"/> <source><p>This wizard will help you to create a new virtual hard disk for your virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> - <translation><p>Цей майстер допоможе створити новий віртуальний жорсткий диск для вашої віртуальної машини.</p><p>Натисніть кнопку <b>Далі</b>, щоб перейти до наступної сторінки майстра та кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки.</p></translation> + <translation><p>Цей майстер допоможе створити новий віртуальний жорсткий диск для вашої віртуальної машини.</p><p>Натисніть кнопку <b>Далі</b>, щоб перейти до наступної сторінки майстера та кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки.</p></translation> </message> <message> <location filename="../ui/VBoxNewHDWzd.ui" line="227"/> @@ -3648,7 +3655,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewHDWzd.ui" line="285"/> <source><p>Select the type of virtual hard disk you want to create.</p><p>A <b>dynamically expanding storage</b> initially occupies a very small amount of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p><p>A <b>fixed-size storage</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk. The creation of a fixed-size storage may take a long time depending on the storage size and the write performance of your harddisk.</p></source> - <translation><p>Виберіть тип віртуального жорсткого диска, який ви хочете створити.</p><p><b>Динамічно розширна пам'ять</b> початково займає дуже малу величину місця на фізичному жорсткому диску. Розмір буде динамічно зростати (до вказаного розміру) до тих пір, поки гостьова операційна система може використовувати дисковий простір.</p><p><b>Незмінної розмірності пам'ять</b> не збільшується. Він зберігається у файлі приблизно такого ж розміру, як розмір віртуального жорсткого диска. Створення незмінної розмірності пам'яті може забрати багато часу, який залежить від розміру пам'яті та швидкодії вашого жорсткого диска.</p></translation> + <translation><p>Виберіть тип віртуального жорсткого диска, який ви бажаєте створити.</p><p><b>Динамічно розширна пам'ять</b> початково займає дуже малу величину місця на фізичному жорсткому диску. Розмір буде динамічно зростати (до вказаного розміру) до тих пір, поки гостьова операційна система може використовувати дисковий простір.</p><p><b>Незмінної розмірності пам'ять</b> не збільшується. Він зберігається у файлі приблизно такого ж розміру, як розмір віртуального жорсткого диска. Створення незмінної розмірності пам'яті може забрати багато часу, який залежить від розміру пам'яті та швидкодії вашого жорсткого диска.</p></translation> </message> <message> <location filename="../ui/VBoxNewHDWzd.ui" line="304"/> @@ -3688,7 +3695,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewHDWzd.ui" line="793"/> <source>You are going to create a new virtual hard disk with the following parameters:</source> - <translation>Ви збираєтесь створити новий віртуальний жорсткий диск з наступними параметрами:</translation> + <translation>Ви збираєтесь створити новий віртуальний жорсткий диск з такими параметрами:</translation> </message> <message> <location filename="../ui/VBoxNewHDWzd.ui" line="843"/> @@ -3706,7 +3713,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewVMWzd.ui" line="63"/> <source>Welcome to the New Virtual Machine Wizard!</source> - <translation>Ласкаво просимо до Майстра Нової Віртуальної Машини!</translation> + <translation>Ласкаво просимо до майстера нової віртуальної машини!</translation> </message> <message> <location filename="../ui/VBoxNewVMWzd.ui" line="298"/> @@ -3726,7 +3733,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewVMWzd.ui" line="494"/> <source><p>Select the amount of base memory (RAM) in megabytes to be allocated to the virtual machine.</p></source> - <translation><p>Виберіть кількість основної пам'яті (RAM) в мегабайтах, яка буде виділена віртуальній машині.</p></translation> + <translation><p>Виберіть об'єм основної пам'яті (RAM) в мегабайтах, яка буде виділена віртуальній машині.</p></translation> </message> <message> <location filename="../ui/VBoxNewVMWzd.ui" line="532"/> @@ -3744,12 +3751,12 @@ p, li { white-space: pre-wrap; } <translation>Пам'ять</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxNewVMWzd.ui" line="0"/> <source>N&ew...</source> <translation type="obsolete">С&творити...</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxNewVMWzd.ui" line="0"/> <source>E&xisting...</source> <translation type="obsolete">&Існуючий...</translation> </message> @@ -3776,7 +3783,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewVMWzd.ui" line="121"/> <source><p>This wizard will guide you through the steps that are necessary to create a new virtual machine for VirtualBox.</p><p>Use the <b>Next</b> button to go the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> - <translation><p>Цей майстер допоможе вам зробити кроки, які необхідні для створення нової віртуальної машини для VirtualBox.</p><p>Натисніть кнопку <b>Наступний</b>, щоб перейти до наступної сторінки майстра, або кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки.</p></translation> + <translation><p>Цей майстер допоможе вам зробити кроки, які необхідні для створення нової віртуальної машини для VirtualBox.</p><p>Натисніть кнопку <b>Наступний</b>, щоб перейти до наступної сторінки майстера, або кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки.</p></translation> </message> <message> <location filename="../ui/VBoxNewVMWzd.ui" line="1113"/> @@ -3791,12 +3798,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxNewVMWzd.ui" line="282"/> <source><p>Enter a name for the new virtual machine and select the type of the guest operating system you plan to install onto the virtual machine.</p><p>The name of the virtual machine usually indicates its software and hardware configuration. It will be used by all VirtualBox components to identify your virtual machine.</p></source> - <translation><p>Введіть назву для нової віртуальної машини і виберіть тип гостьової операційної системи, яку ви плануєте встановити на цю віртуальну машину.</p><p>Назва віртуальної машини зазвичай показує її програмну та апаратну конфігурацію. Це буде використовуватися усіма компонентами VirtualBox для пізнавання вашої віртуальної машини.</p></translation> + <translation><p>Введіть назву для нової віртуальної машини і виберіть тип гостьової операційної системи, яку ви плануєте встановити на цю віртуальну машину.</p><p>Назва віртуальної машини зазвичай показує її програмні та апаратні налаштування. Це буде використовуватися усіма компонентами VirtualBox для пізнавання вашої віртуальної машини.</p></translation> </message> <message> <location filename="../ui/VBoxNewVMWzd.ui" line="1014"/> <source><p>You are going to create a new virtual machine with the following parameters:</p></source> - <translation><p>Ви збираєтесь створити віртуальну машину з наступними параметрами:</p></translation> + <translation><p>Ви збираєтесь створити віртуальну машину з такими параметрами:</p></translation> </message> <message> <location filename="../ui/VBoxNewVMWzd.ui" line="1061"/> @@ -3877,7 +3884,7 @@ p, li { white-space: pre-wrap; } <translation>Показує сімейство операційних систем, котру ви плануєте встановити на цю віртуальну машину.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxOSTypeSelectorWidget.cpp" line="0"/> <source>V&ersion:</source> <translation type="obsolete">&Версія:</translation> </message> @@ -3922,7 +3929,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxProblemReporter.cpp" line="175"/> <source>VirtualBox - Critical Error</source> <comment>msg box title</comment> - <translation>VirtualBox — Критична Помилка</translation> + <translation>VirtualBox — Критична помилка</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="199"/> @@ -3933,12 +3940,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="382"/> <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source> - <translation>Не вдалось відкрити <tt>%1</tt>. Переконайтесь, що середовище вашої стільниці може правильно оперувати з URL цього типу.</translation> + <translation>Не вдалось відкрити <tt>%1</tt>. Переконайтесь, що середовище вашої стільниці може правильно оперувати з посиланнями цього типу.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="433"/> <source><p>Failed to initialize COM or to find the VirtualBox COM server. Most likely, the VirtualBox server is not running or failed to start.</p><p>The application will now terminate.</p></source> - <translation><p>Не вдалося ініціювати COM або знайти сервер COM програми VirtualBox. Швидше за все, сервер VirtualBox не запускається або він не може запуститись.</p><p>Програма зараз завершить роботу.</p></translation> + <translation><p>Не вдалося запустити COM або знайти сервер COM програми VirtualBox. Швидше за все, сервер VirtualBox не запускається або він не може запуститись.</p><p>Програма зараз завершить роботу.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="441"/> @@ -3948,7 +3955,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="489"/> <source>Failed to set global VirtualBox properties.</source> - <translation>Не вдалось задати глобальні налаштування VirtualBox.</translation> + <translation>Не вдалось задати загальні налаштування VirtualBox.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="519"/> @@ -3998,7 +4005,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="726"/> <source>Failed to stop the virtual machine <b>%1</b>.</source> - <translation>Нес вдалось зупинити віртуальну машину <b>%1</b>.</translation> + <translation>Не вдалось зупинити віртуальну машину <b>%1</b>.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="738"/> @@ -4028,22 +4035,22 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="886"/> <source>There is no virtual machine named <b>%1</b>.</source> - <translation>Не названа віртуальна машина <b>%1</b>.</translation> + <translation>Нема віртуальної машини з назвою <b>%1</b>.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="934"/> <source><p>Are you sure you want to permanently delete the virtual machine <b>%1</b>?</p><p>This operation cannot be undone.</p></source> - <translation><p>Ви впевнені, що хочете хочете повністю вилучити віртуальну машину <b>%1</b>?</p><p>Цю операцію не можна скасувати.</p></translation> + <translation><p>Ви впевнені, що бажаєте повністю вилучити віртуальну машину <b>%1</b>?</p><p>Цю операцію не можна скасувати.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="947"/> <source><p>Are you sure you want to unregister the inaccessible virtual machine <b>%1</b>?</p><p>You will no longer be able to register it back from GUI.</p></source> - <translation><p>Ви впевнені, що хочете вилучити з реєстру недоступну віртуальну машину <b>%1</b>?</p><p>Ви більше не зможете зареєструвати її знову за допомогою GUI.</p></translation> + <translation><p>Ви впевнені, що бажаєте вилучити з реєстру недоступну віртуальну машину <b>%1</b>?</p><p>Ви більше не зможете зареєструвати її знову за допомогою GUI.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="963"/> <source><p>Are you sure you want to discard the saved state of the virtual machine <b>%1</b>?</p><p>This operation is equivalent to resetting or powering off the machine without doing a proper shutdown by means of the guest OS.</p></source> - <translation><p>Ви впевнені, що хочете відкинути збережений стан віртуальної машини <b>%1</b>?</p><p>Ця операція рівносильна перезавантаженню або вимкненню живлення машини без належного вимкнення за допомогою гостьової операційної системи.</p></translation> + <translation><p>Ви впевнені, що бажаєте відкинути збережений стан віртуальної машини <b>%1</b>?</p><p>Ця операція рівносильна перезавантаженню або вимкненню машини з живлення неналежним чином за допомогою гостьової операційної системи.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1211"/> @@ -4056,7 +4063,7 @@ p, li { white-space: pre-wrap; } <translation>Не вдалось відкрити сеанс для віртуальної машини <b>%1</b>.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxProblemReporter.cpp" line="0"/> <source>Failed to create the host network interface <b>%1</b>.</source> <translation type="obsolete">Не вдалось створити головний мережевий інтерфейс <b>%1</b>.</translation> </message> @@ -4088,7 +4095,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1699"/> <source><p>The Virtual Machine reports that the guest OS does not support <b>mouse pointer integration</b> in the current video mode. You need to capture the mouse (by clicking over the VM display or pressing the host key) in order to use the mouse inside the guest OS.</p></source> - <translation><p>Віртуальна машина повідомляє, що гостьова операційна система не підтримує <b>інтеграція курсора миші</b> в поточному відеорежимі. Вам потрібно захопити мишку (клацнувши на екран віртуальної машини або натиснувши головну клавішу), щоб використовувати мишку всередині гостьової операційної системи.</p></translation> + <translation><p>Віртуальна машина повідомляє, що гостьова операційна система не підтримує <b>інтеграцію курсора миші</b> в поточному відеорежимі. Вам потрібно захопити мишку (клацнувши на екран віртуальної машини або натиснувши головну клавішу), щоб використовувати мишку всередині гостьової операційної системи.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1718"/> @@ -4104,7 +4111,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxProblemReporter.cpp" line="2129"/> <source><nobr>Fatal Error</nobr></source> <comment>runtime error info</comment> - <translation><nobr>Невиправна Помилка</nobr></translation> + <translation><nobr>Невиправна помилка</nobr></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2135"/> @@ -4133,17 +4140,17 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="2174"/> <source><p>A fatal error has occurred during virtual machine execution! The virtual machine will be powered off. It is suggested to use the clipboard to copy the following error message for further examination:</p></source> - <translation><p>Невиправна помилка трапилась під час роботи віртуальної машини! Віртуальна машина буде вимкнута. Пропонується використати копіювання в буфер обміну для подальшого вивчення помилки:</p></translation> + <translation><p>Протягом роботи віртуальної машини трапилась невиправна помилка! Віртуальна машина буде вимкнуто. Пропонується використати копіювання в кишеню для подальшого вивчення помилки:</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2186"/> <source><p>An error has occurred during virtual machine execution! The error details are shown below. You can try to correct the described error and resume the virtual machine execution.</p></source> - <translation><p>Невиправна помилка трапилась під час роботи віртуальної машини! Подробиці про помилку показано нижче. Ви можете спробувати виправити описану помилку і відновити роботу віртуальної машини.</p></translation> + <translation><p>Протягом роботи віртуальної машини трапилась невиправна помилка! Подробиці про помилку показано нижче. Ви можете спробувати виправити описану помилку і відновити роботу віртуальної машини.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2196"/> <source><p>The virtual machine execution may run into an error condition as described below. You may ignore this message, but it is suggested to perform an appropriate action to make sure the described error will not happen.</p></source> - <translation><p>Робота віртуальної машини може запускатися з помилкою, котра описана нижче. Ви можете проігнорувати це повідомлення, але пропонується здійснити відповідну дію, щоб переконатися, що описана помилка не трапиться.</p></translation> + <translation><p>Робота віртуальної машини може запускатися з помилкою, яка описана нижче. Ви можете проігнорувати це повідомлення, але пропонується здійснити відповідну дію, щоб переконатися, що описана помилка не трапиться.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2309"/> @@ -4188,17 +4195,17 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1485"/> <source><p>VirtualBox Guest Additions installed in the Guest OS are too old: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) will most likely stop working properly.</p><p>Please update Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation><p>Гостьові доповнення VirtualBox, котрі встановлені в гостьовій операційній системі занадто старі: поточна версія — %1, потрібна версія — %2. Деякі властивості, котрі потребують гостьових доповнень (інтеграцію миші, авторозмір гостьового термінала тощо), найімовірніше не будуть працювати як слід.</p><p>Будь ласка, оновіть гостьові доповнення до поточної версії вибравши <b>Встановити гостьові доповнення</b> з меню <b>Пристрої</b>.</p></translation> + <translation><p>Гостьові доповнення VirtualBox, які встановлено в гостьовій операційній системі занадто старі: поточна версія — %1, потрібна версія — %2. Деякі властивості, які потребують гостьових доповнень (інтеграцію миші, авторозмір гостьового термінала тощо), найімовірніше не будуть працювати як слід.</p><p>Будь ласка, оновіть гостьові доповнення до поточної версії вибравши <b>Встановити гостьові доповнення</b> з меню <b>Пристрої</b>.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1501"/> <source><p>VirtualBox Guest Additions installed in the Guest OS are outdated: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) may not work as expected.</p><p>It is recommended to update Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation><p>Гостьові доповнення VirtualBox, котрі встановлені в гостьову операційну систему, застаріли: поточна версія — %1, потрібна версія — %2. Деякі властивості, котрі потребують гостьових доповнень (інтеграцію миші, авторозмір гостьового екрана тощо), не можуть працювати як потрібно.</p><p>Рекомендується оновити гостьові доповнення до поточної версії вибравши <b>Встановити гостьові доповнення</b> з меню <b>Пристрої</b>.</p></translation> + <translation><p>Гостьові доповнення VirtualBox, які встановлено в гостьову операційну систему, застаріли: поточна версія — %1, потрібна версія — %2. Деякі властивості, які потребують гостьових доповнень (інтеграцію миші, авторозмір гостьового екрана тощо), не можуть працювати як слід.</p><p>Рекомендується оновити гостьові доповнення до поточної версії вибравши <b>Встановити гостьові доповнення</b> з меню <b>Пристрої</b>.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1517"/> <source><p>VirtualBox Guest Additions installed in the Guest OS are too recent for this version of VirtualBox: the installed version is %1, the expected version is %2.</p><p>Using a newer version of Additions with an older version of VirtualBox is not supported. Please install the current version of Guest Additions by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation><p>Гостьові доповненя VirtualBox, які встановлені в гостьову операційну систему, — новіші ніж версія VirtualBox: Встановлена версія — %1, Потрібна версія — %2.</p><p>Не підтримується використання найновішої версії доповнень зі старішою версією. Будь ласка, встановіть поточну версію гостьових доповнень вибравши <b>Встановити гостьові доповнення</b> в меню <b>Пристрої</b>.</p></translation> + <translation><p>Гостьові доповненя VirtualBox, які встановлені в гостьову операційну систему, — новіші, ніж версія VirtualBox: Встановлена версія — %1, Потрібна версія — %2.</p><p>Не підтримується використання найновішої версії доповнень зі старішою версією. Будь ласка, встановіть поточну версію гостьових доповнень вибравши <b>Встановити гостьові доповнення</b> в меню <b>Пристрої</b>.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="793"/> @@ -4208,12 +4215,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1416"/> <source><p>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p><p>Please close all programs in the guest OS that may be using this shared folder and try again.</p></source> - <translation><p>Не вдалось вилучити спільну теку <b>%1</b> (що вказує на <nobr><b>%2</b></nobr>) з віртуальної машини <b>%3</b>.</p><p>Будь ласка, вимкніть всі програми в гостьовій операційній системі, котрі можуть використовувати спільну теку та спробуйте знову.</p></translation> + <translation><p>Не вдалось вилучити спільну теку <b>%1</b> (що вказує на <nobr><b>%2</b></nobr>) з віртуальної машини <b>%3</b>.</p><p>Будь ласка, вимкніть всі програми в гостьовій операційній системі, які можуть використовувати спільну теку та спробуйте знову.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1430"/> <source><p>Could not find the VirtualBox Guest Additions CD image file <nobr><b>%1</b></nobr> or <nobr><b>%2</b>.</nobr></p><p>Do you want to download this CD image from the Internet?</p></source> - <translation><p>Не вдалось знайти файл образа гостьових доповнень <nobr><b>%1</b></nobr> або <nobr><b>%2</b>.</nobr></p><p>Ви бажаєте звантажити образ з Інтернету?</p></translation> + <translation><p>Не вдалось знайти файл образа гостьових доповнень <nobr><b>%1</b></nobr> або <nobr><b>%2</b>.</nobr></p><p>Ви бажаєте звантажити образ з інтернету?</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1442"/> @@ -4261,7 +4268,7 @@ p, li { white-space: pre-wrap; } <translation><p>Вітаємо! Ви успішно зареєструвались як користувач VirtualBox.</p><p>Дякуємо вам, що знайшли час, щоб заповнити реєстраційну форму!</p></translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxProblemReporter.cpp" line="0"/> <source><p>Failed to register the VirtualBox product</p><p>%1</p></source> <translation type="obsolete"><p>Не вдалось зареєструвати VirtualBox</p><p>%1</p></translation> </message> @@ -4309,7 +4316,7 @@ p, li { white-space: pre-wrap; } <translation>Відкинути</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxProblemReporter.cpp" line="0"/> <source><p>There are hard disks attached to SATA ports of this virtual machine. If you disable the SATA controller, all these hard disks will be automatically detached.</p><p>Are you sure that you want to disable the SATA controller?</p></source> <translation type="obsolete"><p>До портів SATA цієї віртуальної машини під'єднані жорсткі диски. Якщо ви вимкнете контролер SATA, то всі ці жорсткі диски будуть автоматично від'єднані.</p><p>Ви впевнені, що бажаєте вимкнути контролер SATA?</p></translation> </message> @@ -4370,7 +4377,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1967"/> <source><p>Do you really want to reset the virtual machine?</p><p>When the machine is reset, unsaved data of all applications running inside it will be lost.</p></source> - <translation><p>Чи ви справді хочете перезавантажити віртуальну машину?</p><p>Під час перезавантаження машини відбудеться втрата даних усіх програм, які запущені всередині віртуальної машини.</p></translation> + <translation><p>Чи ви справді бажаєте перезавантажити віртуальну машину?</p><p>Під час перезавантаження машини відбудеться втрата даних усіх програм, які запущені всередині віртуальної машини.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1969"/> @@ -4425,17 +4432,17 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1611"/> <source><p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer integration is not currently supported by the guest OS) and the keyboard, which will make them unavailable to other applications running on your host machine.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation><p>Ви <b>клацнули мишкою</b> всередині екрана віртуальної машини або натиснули <b>головну клавішу</b>. Віртуальна машина <b>захопить</b> головний вказівник миші (Тільки якщо інтеграція вказівника миші зараз не підтримується гостьовою операційною системою) і клавіатуру, яка буде недоступною для інших програм, котрі запущені на вашій головній машині.</p><p>Ви можете натиснути <b>головну клавішу</b> в будь-який момент, щоб <b>відпустити</b> клавіатуру і мишку (якщо вони захоплені) та повернути назад. Поточна головна клавіша показується на панелі стану у вікні віртуальної машини, біля the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. Ця піктограма, знаходиться біля піктограми миші, показуючи поточний стан клавіатури і миші.</p></translation> + <translation><p>Ви <b>клацнули мишкою</b> всередині екрана віртуальної машини або натиснули <b>головну клавішу</b>. Віртуальна машина <b>захопить</b> головний вказівник миші (Тільки якщо інтеграція вказівника миші зараз не підтримується гостьовою операційною системою) і клавіатуру, яка буде недоступною для інших програм, які запущені на вашій головній машині.</p><p>Ви можете натиснути <b>головну клавішу</b> в будь-який момент, щоб <b>відпустити</b> клавіатуру і мишку (якщо вони захоплені) та повернути назад. Поточна головна клавіша показується на панелі стану у вікні віртуальної машини, біля the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. Ця піктограма, знаходиться біля піктограми миші, показуючи поточний стан клавіатури і миші.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1644"/> <source><p>You have the <b>Auto capture keyboard</b> option turned on. This will cause the Virtual Machine to automatically <b>capture</b> the keyboard every time the VM window is activated and make it unavailable to other applications running on your host machine: when the keyboard is captured, all keystrokes (including system ones like Alt-Tab) will be directed to the VM.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation><p>Ви вімкнули <b>Автозахоплення клавіатури</b>. Віртуальна машина автоматично <b>захоплюватиме</b> клавіатуру кожного разу, коли вікно віртуальної машини активне та робить його недоступним для інших програм, які запущено на вашій головній машині: коли клавіатура захоплена, будь-які натиснення клавіш (у тому ж числі такі системні, як Alt-Tab) будуть виконуватись всередині віртуальної машини.</p><p><p>Ви можете натиснути <b>головну клавішу</b> в будь-який момент, щоб <b>відпустити</b> клавіатуру і мишку (якщо вони захоплені) та повернути назад. Поточна головна клавіша показується на панелі стану у вікні віртуальної машини, біля the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. Ця піктограма, знаходиться біля піктограми миші, показуючи поточний стан клавіатури і миші.</p></translation> + <translation><p>Ви вімкнули <b>Автозахоплення клавіатури</b>. Віртуальна машина автоматично <b>захоплюватиме</b> клавіатуру кожного разу, коли вікно віртуальної машини активне та робить його недоступним для інших програм, які запущено на вашій головній машині: коли клавіатура захоплена, будь-які натиснення клавіш (у тому ж числі такі системні, як Alt-Tab) будуть виконуватись всередині віртуальної машини.</p><p><p>Ви можете натиснути <b>головну клавішу</b> в будь-який момент, щоб <b>відпустити</b> клавіатуру і мишку (якщо вони захоплені) та повернути назад. Поточна головна клавіша показується на панелі стану у вікні віртуальної машини, біля the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. Ця піктограма, знаходиться біля піктограми миші, показуючи поточний стан клавіатури і миші.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1689"/> <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the status bar will look like&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;to inform you that mouse pointer integration is supported by the guest OS and is currently turned on.</p><p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. You can always disable it for the current session (and enable it again) by selecting the corresponding action from the menu bar.</p></source> - <translation><p>Віртуальна машина повідомляє, що гостьова операційна система підтримує <b>інтеграцію вказівника миші</b>. Тобто вам не потрібно <i>захоплювати</i> вказівник миші, щоб використовувати його в гостьовій операційній системі — усі дії миші, які ви виконуєте, коли вказівник на екрані віртуальної машини, виконуються в гостьовій операційній системі. Якщо мишка вже захоплена, то вона автоматично відпуститься.</p><p>Піктограма миші на панелі стану буде вигляди як&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;, щоб повідомити, що ваша інтеграція вказівника миші підтримується гостьовою операційною системою і зараз увімкнута.</p><p><b>Note</b>: Деякі програми можуть поводитись неправильно в режимі інтеграції вказівника миші. Ви завжди можете вимкнути його на поточний сеанс (і ввімкнути знову) вибравши відповідну дію в панелі меню.</p></translation> + <translation><p>Віртуальна машина повідомляє, що гостьова операційна система підтримує <b>інтеграцію вказівника миші</b>. Тобто вам не потрібно <i>захоплювати</i> вказівник миші, щоб використовувати його в гостьовій операційній системі — усі дії миші, які ви виконуєте, коли вказівник на екрані віртуальної машини, виконуються в гостьовій операційній системі. Якщо мишка вже захоплена, то вона автоматично відпуститься.</p><p>Піктограма миші на панелі стану буде вигляди як&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;, щоб повідомити, що ваша інтеграція вказівника миші підтримується гостьовою операційною системою і зараз увімкнута.</p><p><b>Note</b>: Деякі програми можуть поводитись неправильно в режимі інтеграції вказівника миші. Ви завжди можете вимкнути його на поточний сеанс (і ввімкнути знову) вибравши відповідну дію в панелі меню.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1864"/> @@ -4450,7 +4457,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxHelpActions.cpp" line="103"/> <source>&Contents...</source> - <translation>&Зміст...</translation> + <translation>&Вміст...</translation> </message> <message> <location filename="../src/VBoxHelpActions.cpp" line="106"/> @@ -4460,12 +4467,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxHelpActions.cpp" line="108"/> <source>&VirtualBox Web Site...</source> - <translation>&Веб-сайт VirtualBox...</translation> + <translation>&Сайт VirtualBox...</translation> </message> <message> <location filename="../src/VBoxHelpActions.cpp" line="110"/> <source>Open the browser and go to the VirtualBox product web site</source> - <translation>Відкрити переглядач і перейти до веб-сайта продукції VirtualBox</translation> + <translation>Відкрити переглядач і перейти до сайта продукції VirtualBox</translation> </message> <message> <location filename="../src/VBoxHelpActions.cpp" line="112"/> @@ -4515,7 +4522,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="979"/> <source><p>Are you sure you want to release the %1 <nobr><b>%2</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%3</b>.</p></source> - <translation>Ви впевнені, що ви бажаєте відпустити %1 <nobr><b>%2</b></nobr>?</p><p>Це Буде від'єднано з наступних віртуальних машин: <b>%3</b>.</p></translation> + <translation>Ви впевнені, що ви бажаєте відпустити %1 <nobr><b>%2</b></nobr>?</p><p>Це буде від'єднано з таких віртуальних машин: <b>%3</b>.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="983"/> @@ -4531,7 +4538,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1002"/> <source>Note that this hard disk is inaccessible so that its storage unit cannot be deleted right now.</source> - <translation>Майте на увазі, цей жорсткий диск недоступний, тому його блок пам'яті не може бути розпізнаний зараз. </translation> + <translation>Майте на увазі, цей жорсткий диск недоступний, тому його блок пам'яті неможливо розпізнанати зараз.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1007"/> @@ -4557,7 +4564,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1045"/> <source><p>Do you want to delete the storage unit of the hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which makes it possible to add this hard disk to the list later again.</p></source> - <translation><p>Ви бажаєте вилучити блок пам'яті жорсткого диска <nobr><b>%1</b></nobr>?</p><p>Якщо ви виберете <b>Вилучити</b>, вказаний блок пам'яті буде безповоротно вилучений. Цю операцію <b>не можна скасувати</b>.</p><p>Якщо ви виберете <b>Затримати</b>, жорсткий диск буде вилучено лише зі списку жорстких дисків, але блок пам'яті залишиться недоторканим, що дозволить додати цей жорсткий диск до списку згодом.</p></translation> + <translation><p>Ви бажаєте вилучити блок пам'яті жорсткого диска <nobr><b>%1</b></nobr>?</p><p>Якщо ви виберете <b>Вилучити</b>, вказаний блок пам'яті буде безповоротно вилучено. Цю операцію <b>неможливо скасувати</b>.</p><p>Якщо ви виберете <b>Затримати</b>, жорсткий диск буде вилучено лише зі списку жорстких дисків, але блок пам'яті залишиться недоторканим, що дозволить додати цей жорсткий диск до списку згодом.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1050"/> @@ -4589,7 +4596,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1130"/> <source>Failed to attach the hard disk <nobr><b>%1</b></nobr> to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>Не вдалося з’єднати жорсткий диск <nobr><b>%1</b></nobr> зі слотом <i>%2</i> машини <b>%3</b>.</translation> + <translation>Не вдалося з'єднати жорсткий диск <nobr><b>%1</b></nobr> зі слотом <i>%2</i> машини <b>%3</b>.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1143"/> @@ -4639,7 +4646,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1794"/> <source><p>Your existing VirtualBox settings files were automatically converted from the old format to a new format necessary for the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>More</b> if you want to get more information about what files were converted and access additional actions.</p><p>Press <b>Exit</b> to terminate the VirtualBox application without saving the results of the conversion to disk.</p></source> - <translation><p>Ваші фали налаштувань VirtualBox були автоматично перетворені зі старого формату в новий, який необхідний для нової версії VirtualBox.</p><p>Натисніть <b>Гаразд</b>, щоб запустити VirtualBox зараз або натисніть <b>Детальніше</b>, якщо ви бажаєте отримати більше інформації про файли, котрі були перетворені і дозволити додаткові дії.</p><p>Натисніть <b>Вихід</b>, щоб вимкнути VirtualBox без збереження результатів перетворення на диск.</p></translation> + <translation><p>Ваші фали налаштувань VirtualBox були автоматично перетворені зі старого формату в новий, який необхідний для нової версії VirtualBox.</p><p>Натисніть <b>Гаразд</b>, щоб запустити VirtualBox зараз або натисніть <b>Детальніше</b>, якщо ви бажаєте отримати більше інформації про файли, які були перетворені і дозволити додаткові дії.</p><p>Натисніть <b>Вихід</b>, щоб вимкнути VirtualBox без збереження результатів перетворення на диск.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1800"/> @@ -4651,7 +4658,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxProblemReporter.cpp" line="1845"/> <source>E&xit</source> <comment>warnAboutAutoConvertedSettings message box</comment> - <translation>&Вихід</translation> + <translation>&Вийти</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1832"/> @@ -4661,7 +4668,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1835"/> <source><li><b>Exit</b> to terminate VirtualBox without saving the results of the conversion to disk.</li></source> - <translation><li><b>Вихід</b> завершує роботу VirtualBox без збереження підсумків перетворення на диск.</li></translation> + <translation><li><b>Вийти</b> завершує роботу VirtualBox без збереження підсумків перетворення на диск.</li></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1842"/> @@ -4672,7 +4679,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1951"/> <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nobr> directory, as well as a description of what you were doing when this error happened. Note that you can also access the above files by selecting <b>Show Log</b> from the <b>Machine</b> menu of the main VirtualBox window.</p><p>Press <b>OK</b> if you want to power off the machine or press <b>Ignore</b> if you want to leave it as is for debugging. Please note that debugging requires special knowledge and tools, so it is recommended to press <b>OK</b> now.</p></source> - <translation><p>Трапилась критична помилка під час роботи віртуальної машини і її виконання припинене.</p><p>Зверніться до спільноти за допомогою на сайті <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> або до вашої групи підтримки. Будь ласка, додайте свій журнал помилок <tt>VBox.log</tt> та зображення <tt>VBox.png</tt>, які ви можете знайти в теці <nobr><b>%1</b></nobr>, і також опис того, що ви робили, коли це трапилось. Майте на увазі, ви також можете отримати файл використавши <b>Показати журнал</b> в меню <b>Машина</b> головного вікна VirtualBox.</p><p>Натисніть <b>Гаразд</b>, якщо ви бажаєте вимкнути живлення машини, або натисніть <b>Ігнорувати</b>, якщо ви бажаєте покинути це для зневадження. Будь ласка, майте на увазі, зневадження потребує спеціальних знань та інструментів, тому рекомендується зараз натиснути <b>Гаразд</b>.</p></translation> + <translation><p>Трапилась критична помилка під час роботи віртуальної машини і її виконання припинено.</p><p>Зверніться до спільноти за допомогою на сайті <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> або до вашої групи підтримки. Будь ласка, додайте свій журнал помилок <tt>VBox.log</tt> та зображення <tt>VBox.png</tt>, які ви можете знайти в теці <nobr><b>%1</b></nobr>, і також опис того, що ви робили, коли це трапилось. Майте на увазі, ви також можете отримати файл використавши <b>Показати журнал</b> в меню <b>Машина</b> головного вікна VirtualBox.</p><p>Натисніть <b>Гаразд</b>, якщо ви бажаєте вимкнути живлення машини, або натисніть <b>Ігнорувати</b>, якщо ви бажаєте покинути це для зневадження. Будь ласка, майте на увазі, зневадження потребує спеціальних знань та інструментів, тому рекомендується зараз натиснути <b>Гаразд</b>.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2208"/> @@ -4684,7 +4691,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxProblemReporter.cpp" line="2210"/> <source>CD/DVD image</source> <comment>failed to close ...</comment> - <translation> образ CD/DVD</translation> + <translation>образ CD/DVD</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2212"/> @@ -4695,37 +4702,37 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="296"/> <source>A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />Replacing it will overwrite its contents.</source> - <translation type="unfinished"></translation> + <translation>Файл з назвою <b>%1</b> вже існує. Ви впевнені, що бажаєте його замінити?<br /><br />При заміні буде перезаписано його вміст.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="305"/> <source>The following files already exist:<br /><br />%1<br /><br />Are you sure you want to replace them? Replacing them will overwrite their contents.</source> - <translation type="unfinished"></translation> + <translation>Такі файли вже існують:<br /><br />%1<br /><br />Ви впевнені, що бажаєте замінити їх? При їх заміні буде перезаписано їх вміст.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="341"/> <source>Failed to remove the file <b>%1</b>.<br /><br />Please try to remove the file yourself and try again.</source> - <translation type="unfinished"></translation> + <translation>Не вдається вилучити файл <b>%1</b>.<br /><br />Будь ласка, спробуйте вилучити файл самостійно і спробувати знову.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="352"/> <source>You are running a prerelease version of VirtualBox. This version is not suitable for production use.</source> - <translation type="unfinished"></translation> + <translation>Ви запускаєте невипущену версію VirtualBox. Ця версія не підходить для повсякденного використання.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="512"/> <source>Could not access USB on the host system, because neither the USB file system (usbfs) nor the DBus and hal services are currently available. If you wish to use host USB devices inside guest systems, you must correct this and restart VirtualBox.</source> - <translation type="unfinished"></translation> + <translation>Нема доступу до USB на головній операційній системі, бо ані файлова система USB (usbfs), ані DBus і служби hal зараз недостуні. Якщо ви бажаєте використовувати головний пристрій USB всередині гостьової операційної системи, вам потрібно виправити це і перезавантажити VirtualBox.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="758"/> <source>You are trying to shut down the guest with the ACPI power button. This is currently not possible because the guest does not use the ACPI subsystem.</source> - <translation type="unfinished"></translation> + <translation>Ви намагаєтесь вимкнути гостьову систему з живлення. Це неможливо, оскільки гостьова операційна система не використовує підсистему ACPI.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="768"/> <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source> - <translation type="unfinished"></translation> + <translation><p>Увімкнуто апаратне прискорення VT-x/AMD-V, але воно нечинне. Вашій 64-бітній гостьовій операційній системі не вдасться виявити 64-бітний процесор і він не завантажиться.</p><p>Будь ласка, переконайтесь, що VT-x/AMD-V в BIOS ввімкнуто належним чином у вашій головній операційній системі.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="782"/> @@ -4740,12 +4747,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="780"/> <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Certain guests (e.g. OS/2 and QNX) require this feature.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source> - <translation type="unfinished"></translation> + <translation><p>Увімкнуто апаратне прискорення VT-x/AMD-V, але воно нечинне. Певна гостьова операційна система (наприклад,. OS/2 і QNX) потребує цю властивість.</p><p>Будь ласка, переконайтесь, що VT-x/AMD-V в BIOS ввімкнуто належним чином у вашій головній операційній системі.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="802"/> <source><p>Are you sure you wish to delete the selected snapshot and saved state?</p></source> - <translation type="unfinished"></translation> + <translation><p>Ви впевнені, що бажаєте вилучити вибраний знімок і збережений стан?</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="804"/> @@ -4760,12 +4767,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1076"/> <source><p>There are hard disks attached to ports of the additional controller. If you disable the additional controller, all these hard disks will be automatically detached.</p><p>Are you sure you want to disable the additional controller?</p></source> - <translation type="unfinished"></translation> + <translation><p>До додаткового контролера під'єднано жорсткі диски. Якщо ви вимкнули додатковий контролер, усі ті жорсткі диски автоматично під'єднаються.</p><p>Ви впевнені, що бажаєте вимкнути додатковий контролер?</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1088"/> <source><p>There are hard disks attached to ports of the additional controller. If you change the additional controller, all these hard disks will be automatically detached.</p><p>Are you sure you want to change the additional controller?</p></source> - <translation type="unfinished"></translation> + <translation><p>До додаткового контролера під'єднано жорсткі диски. Якщо ви зміните додатковий контролер, усі ті жорсткі диски автоматично від'єднаються.</p><p>Ви впевнені, що бажаєте змінити додатковий контролер?</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1090"/> @@ -4776,12 +4783,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1256"/> <source><p>Deleting this host-only network will lead to the deleting of the host-only interface this network is based on. Do you want to remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> this interface may be in use by one or more virtual network adapters belonging to one of your VMs. After it is removed, these adapters will no longer be usable until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation type="unfinished"></translation> + <translation><p>Вилучення цієї лише головної мережі спричинить вилучення лише головного інтерфейса цієї мережі, який базується на ній. Ви бажаєте вилучити (лише головної мережі) інтерфейс <nobr><b>%1</b>?</nobr></p><p><b>Майте на увазі:</b> цей інтерфейс можливо викристовувати одним або більше адаперами віртуальної мережі, яка належить до ваших віртуальних мереж. Після цього він вилучиться, ті адаптери більше не використовуватимуться, допоки ви не зміните їхні налаштування, вибравши іншу назву інтерфейса або інший тип під'єнання адаптера.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1274"/> <source>Failed to create the host-only network interface.</source> - <translation type="unfinished"></translation> + <translation>Не вдається створити лише головний мережевий інтерфейс.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="1553"/> @@ -4796,27 +4803,27 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="1770"/> <source><p>Your existing VirtualBox settings files will be automatically converted from the old format to a new format necessary for the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>Exit</b> if you want to terminate the VirtualBox application without any further actions.</p></source> - <translation type="unfinished"></translation> + <translation><p>Ваш існуючий файл налаштувань VirtualBox буде автоматично перетворено зі старого формату на необхідний для нової версії VirtualBox.</p><p>Натисніть <b>Гаразд</b>, щоб запустити VirtualBox зараз або натисніть <b>Вийти</b>, якщо ви бажаєте завершити роботу програми VirtualBox без будь-яких інших дій.</p></translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2006"/> <source>Failed to open appliance.</source> - <translation type="unfinished"></translation> + <translation>Не вдається створити образ віртуальної машини.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2022"/> <source>Failed to open/interpret appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Не вдається відкрити/розпізнати образ віртуальної машини <b>%1</b>.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2034"/> <source>Failed to import appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Не вдається імпортувати образ віртуальної машини <b>%1</b>.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2044"/> <source>Failed to check files.</source> - <translation>Не вдається первірити файли.</translation> + <translation>Не вдається перевірити файли.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2054"/> @@ -4826,22 +4833,22 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxProblemReporter.cpp" line="2064"/> <source>Failed to create appliance.</source> - <translation type="unfinished"></translation> + <translation>Не вдається створити образ віртуальної машини.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2089"/> <source>Failed to prepare the export of the appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Не вдається підготувати образ віртуальної машини <b>%1</b> до експорту.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2084"/> <source>Failed to create an appliance.</source> - <translation type="unfinished"></translation> + <translation>Не вдається створити образ віртуальної машини.</translation> </message> <message> <location filename="../src/VBoxProblemReporter.cpp" line="2100"/> <source>Failed to export appliance <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Не вдається експортувати образ віртуальної машини <b>%1</b>.</translation> </message> </context> <context> @@ -4860,7 +4867,7 @@ p, li { white-space: pre-wrap; } <translation>Діалог реєстрації VirtualBox</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxRegistrationDlg.ui" line="0"/> <source>&Name</source> <translation type="obsolete">&Назва</translation> </message> @@ -4870,7 +4877,7 @@ p, li { white-space: pre-wrap; } <translation>Введіть ваше повне ім'я, використовуючи лише латинські символи.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxRegistrationDlg.ui" line="0"/> <source>&E-mail</source> <translation type="obsolete">&Електронна пошта</translation> </message> @@ -4880,7 +4887,7 @@ p, li { white-space: pre-wrap; } <translation>Введіть дійсну адресу вашої електронної пошти.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxRegistrationDlg.ui" line="0"/> <source>&Please do not use this information to contact me</source> <translation type="obsolete">&Будь ласка, не використовуйте цю інформацію для контактування зі мною</translation> </message> @@ -4895,17 +4902,17 @@ p, li { white-space: pre-wrap; } <translation>Не вдалось здійснити встановлення зв'язку.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxRegistrationDlg.cpp" line="0"/> <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Enter your full name using Latin characters and your e-mail address to the fields below. Please note that Sun Microsystems will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, Sun Microsystems will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> <translation type="obsolete"><p>Будь ласка, заповніть реєстраційну форму, цим самим, ми будемо знати, що ви користуєтесь програмою VirtualBox і, за власним бажанням, отримаєте можливість бути в курсі новин і оновлень про VirtualBox.</p><p>Введіть ваше повне і'мя, користуючись латинськими символами, та адресу електронної пошти в нижніх полях. Будь ласка, майте на увазі, що ця інформація буде використовуватись лише для статистичних даних кількості користувачів і розсилці новин про VirtualBox. Власне, Sun Microsystems ніколи не буде надавати ваші дані третій стороні. Більш детальна інформація про те, як ми використовуємо ваші особисті дані, можна знайти в розділі <b>Privacy Policy</b> (Політика Конфіденційності) у документації програми або на сторінці <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> веб-сайта VirtualBox.</p></translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxRegistrationDlg.cpp" line="0"/> <source>Check this box if you do not want to receive mail from Sun Microsystems at the e-mail address specified above.</source> <translation type="obsolete">Відмітьте, якщо ви не хочете отримувати пошту від Sun Microsystems на задану адресу електронної пошти.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxRegistrationDlg.cpp" line="0"/> <source>C&onfirm</source> <translation type="obsolete">&Підтвердити</translation> </message> @@ -4922,12 +4929,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxRegistrationDlg.ui" line="108"/> <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Please use the Latin characters to fill the fields below. Please note that Sun Microsystems will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, Sun Microsystems will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> - <translation type="unfinished"></translation> + <translation><p>Будь ласка, заповніть цю реєстраційну форму, щоб ми знали, що ви використуєте VirtualBox, і, за вашим бажанням, ми триматимемо вас у курсі всіх новин і оновлень щодо VirtualBox.</p><p>Будь ласка, використовуйте латинські символи для заповнення полів нижче. Будь ласка, майте на увазі, Sun Microsystems використовуватиме цю інформацію лише для збору статистичної інформації та розсилки новин. Власне, Sun Microsystems ніколи не надасть ваших даних третій особі. Детальна інформація про використання ваших особистих даних можна знайти в довідці VirtualBox у розділі <b>Privacy Policy</b> або на <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> сторінці сайта VirtualBox.</p></translation> </message> <message> <location filename="../ui/VBoxRegistrationDlg.ui" line="125"/> <source>I &have a Sun Online account already:</source> - <translation>&Я вже маю зареєстрований профіль у Sun:</translation> + <translation>&Я вже маю зареєстрований акаунт у Sun:</translation> </message> <message> <location filename="../ui/VBoxRegistrationDlg.ui" line="151"/> @@ -4942,7 +4949,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxRegistrationDlg.ui" line="201"/> <source>I &would like to register creating a new Sun Online account:</source> - <translation type="unfinished"></translation> + <translation>Я &бажаю зареєструватись, створивши акаунт Sun:</translation> </message> <message> <location filename="../ui/VBoxRegistrationDlg.ui" line="224"/> @@ -5014,12 +5021,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1325"/> <source>Display the global settings dialog</source> - <translation>Показати діалог глобальних налаштувань</translation> + <translation>Показати діалог загальних налаштувань</translation> </message> <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1327"/> <source>E&xit</source> - <translation>Ви&хід</translation> + <translation>Ви&йти</translation> </message> <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1329"/> @@ -5029,7 +5036,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1331"/> <source>&New...</source> - <translation>&Новий...</translation> + <translation>&Нова...</translation> </message> <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1333"/> @@ -5059,7 +5066,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1349"/> <source>D&iscard</source> - <translation>Ві&дмовитись</translation> + <translation>Ві&дкинути</translation> </message> <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1351"/> @@ -5067,7 +5074,7 @@ p, li { white-space: pre-wrap; } <translation>Відкинути збережений стан вибраної віртуальної машини</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxSelectorWnd.cpp" line="0"/> <source>&Refresh</source> <translation type="obsolete">&Оновити</translation> </message> @@ -5137,7 +5144,7 @@ p, li { white-space: pre-wrap; } <translation>Показати файли журналу вибраної віртуальної машини</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxSelectorWnd.cpp" line="0"/> <source>Sun xVM VirtualBox</source> <translation type="obsolete">Sun xVM VirtualBox</translation> </message> @@ -5162,7 +5169,7 @@ p, li { white-space: pre-wrap; } <translation>Призупинити роботу віртуально машини</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxSelectorWnd.cpp" line="0"/> <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is intended to display a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>F1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> <translation type="obsolete"><h3>Ласкаво просимо до програми VirtualBox!</h3><p>Ліва частина цього вікна призначена для показу списку всіх віртуальних машин на вашому комп'ютері. Цей список зараз порожній, бо ви ще не створили жодної віртуальної машини.<img src=:/welcome.png align=right/></p><p>Щоб створити нову віртуальну машину, натисніть кнопку <b>Створити</b> на головній панелі інструментів, який знаходиться зверху вікна.</p><p>Ви можете натиснути клавішу <b>F1</b> для отримання миттєвої допомоги, або відвідайте <a href=http://www.virtualbox.org>www.virtualbox.org</a>, щоб дізнатися останню інформацію та новини.</p></translation> </message> @@ -5174,7 +5181,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1294"/> <source>Display the Virtual Media Manager dialog</source> - <translation>Показує діалог Керуванння Віртуального Носія</translation> + <translation>Показати діалог керуванння віртуального носія</translation> </message> <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1362"/> @@ -5215,7 +5222,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1518"/> <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is intended to display a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> - <translation type="unfinished"></translation> + <translation><h3>Ласкаво просимо до VirtualBox!</h3><p>У лівій частині цього вікна показується список віртуальних машин на вашому комп'ютері. Зараз список порожній, оскільки, поки що, ви не маєте створених віртуальних машин.<img src=:/welcome.png align=right/></p><p>Для того, щоб створити нову віртуальну машину, натисніть <b>Створити</b> в головному меню панелі інструментів , які знаходяться вверху вікна.</p><p>Ви можете натиснути <b>%1</b>, щоб отримати миттєву довідку, або відвідайте <a href=http://www.virtualbox.org>www.virtualbox.org</a> щодо останіх новин.</p></translation> </message> </context> <context> @@ -5223,7 +5230,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSettingsDialog.cpp" line="95"/> <source><i>Select a settings category from the list on the left side and move the mouse over a settings item to get more information</i>.</source> - <translation><i>Виберіть категорію налаштувань зі списку зліва та пересуньте мишку до пункту налаштувань, щоб отримати більше інформації</i>.</translation> + <translation><i>Виберіть категорію налаштувань зі списку зліва та пересуньте мишку до пункту налаштувань, щоб отримати детальнішу інформацію</i>.</translation> </message> <message> <location filename="../src/VBoxSettingsDialog.cpp" line="187"/> @@ -5243,7 +5250,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSettingsDialog.cpp" line="138"/> <source>On the <b>%1</b> page, %2</source> - <translation>На <b>%1</b> сторінці, %2</translation> + <translation>На <b>%1</b> сторінці, %2</translation> </message> </context> <context> @@ -5372,7 +5379,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSnapshotsWgt.cpp" line="687"/> <source>D&iscard Current Snapshot and State</source> - <translation>С&касувати поточний знімок та стан</translation> + <translation>Відкин&ути поточний знімок та стан</translation> </message> <message> <location filename="../src/VBoxSnapshotsWgt.cpp" line="688"/> @@ -5446,12 +5453,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxLineTextEdit.cpp" line="78"/> <source>&Replace...</source> - <translation>&Перемістити...</translation> + <translation>&Замінити...</translation> </message> <message> <location filename="../src/VBoxLineTextEdit.cpp" line="79"/> <source>Replaces the current text with the content of a given file.</source> - <translation>Переміщує поточний текст з контекстом певного файла.</translation> + <translation>Заміняє поточний текст з контекстом певного файла.</translation> </message> <message> <location filename="../src/VBoxLineTextEdit.cpp" line="84"/> @@ -5469,7 +5476,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1781"/> <source>Show Selector Window</source> - <translation>Показати Вікно Вибору</translation> + <translation>Показати вікно вибору</translation> </message> <message> <location filename="../src/VBoxSelectorWnd.cpp" line="1783"/> @@ -5578,7 +5585,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxUpdateDlg.cpp" line="374"/> <source>VirtualBox Update Wizard</source> - <translation>Майстер Оновлень VirtualBox</translation> + <translation>Майстер оновлень VirtualBox</translation> </message> <message> <location filename="../src/VBoxUpdateDlg.cpp" line="376"/> @@ -5603,7 +5610,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxUpdateDlg.cpp" line="399"/> <source><p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p></source> - <translation><p>Неможливо отримати інформацію про нову версію через наступну мережеву помилку:</p><p><b>%1</b></p></translation> + <translation><p>Неможливо отримати інформацію про нову версію через таку мережеву помилку:</p><p><b>%1</b></p></translation> </message> <message> <location filename="../src/VBoxUpdateDlg.cpp" line="402"/> @@ -5613,7 +5620,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxUpdateDlg.cpp" line="390"/> <source><p>This wizard will connect to the VirtualBox web-site and check if a newer version of VirtualBox is available.</p><p>Use the <b>Check</b> button to check for a new version now or the <b>Cancel</b> button if you do not want to perform this check.</p><p>You can run this wizard at any time by choosing <b>Check for Updates...</b> from the <b>Help</b> menu.</p></source> - <translation><p>Цей майстер пз’єднається з веб-сайтом VirtualBox і перевірить, чи доступна найновіша версія VirtualBox.</p><p>Використайте кнопку <b>Перевірити</b>, щоб перевірити на нову версію зараз або кнопку <b>Скасувати</b>, якщо ви не бажаєте здійснювати цю перевірку.</p><p>Ви можете запустити цього майстра в будь-який час вибираючи <b>Перевірити на оновлення...</b> з меню <b>Довідка</b>.</p></translation> + <translation><p>Цей майстер з'єднається з сайтом VirtualBox і перевірить, чи доступна найновіша версія VirtualBox.</p><p>Використайте кнопку <b>Перевірити</b>, щоб перевірити на нову версію зараз або кнопку <b>Скасувати</b>, якщо ви не бажаєте здійснювати цю перевірку.</p><p>Ви можете запустити цього майстра в будь-який час вибираючи <b>Перевірити на оновлення...</b> з меню <b>Довідка</b>.</p></translation> </message> </context> <context> @@ -5639,7 +5646,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSelectorWnd.cpp" line="193"/> <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> - <translation>Вибрана віртуальна машина <i>недоступна</i>. Будь ласка, перегляньте повідомлення про помилки, що показані нижче та натисніть <b>Оновити</b>, якщо ви хочете повторити перевірку доступності:</translation> + <translation>Вибрана віртуальна машина <i>недоступна</i>. Будь ласка, перегляньте повідомлення про помилки, що показані нижче та натисніть <b>Оновити</b>, якщо ви бажаєте повторити перевірку доступності:</translation> </message> </context> <context> @@ -5647,22 +5654,22 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="30"/> <source>First Run Wizard</source> - <translation>Перший Запуск Майстра</translation> + <translation>Майстер першого запуску</translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="121"/> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for installing an operating system of your choice onto this virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel execution of this wizard.</p></source> - <translation><p>Ви запустили новостворену віртуальну машину перший раз. Цей майстер допоможе вам виконати кроки, які необхідні для встановлення операційної системи на ваш вибір на цю віртуальну машину.</p><p>Натисніть кнопку <b>Далі</b>, щоб перейти до наступної сторінки майстра або кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки. Також ви можете натиснути кнопку <b>Скасувати</b>, якщо ви хочете скасувати виконання майстра.</p></translation> + <translation><p>Ви запустили новостворену віртуальну машину перший раз. Цей майстер допоможе вам виконати кроки, які необхідні для встановлення операційної системи на ваш вибір на цю віртуальну машину.</p><p>Натисніть кнопку <b>Далі</b>, щоб перейти до наступної сторінки майстера або кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки. Також ви можете натиснути кнопку <b>Скасувати</b>, якщо ви бажаєте скасувати виконання майстра.</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="63"/> <source>Welcome to the First Run Wizard!</source> - <translation>Ласкаво просимо до Першого Запуску Майстра!</translation> + <translation>Ласкаво просимо до майстера першого запуску!</translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="307"/> <source><p>Select the type of the media you would like to use for installation purposes below.</p></source> - <translation><p>Виберіть тип носія, який ви б хотіли використати для встановлення, нижче.</p></translation> + <translation><p>Виберіть тип носія, який ви бажаєте використати для встановлення, нижче.</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="348"/> @@ -5682,7 +5689,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="401"/> <source><p>Select the media which contains the setup program of the operating system you want to install. This media must be bootable, otherwise the setup program will not be able to start.</p></source> - <translation><p>Виберіть носій, який містить програму встановлення операційної системи, яку ви хочете встановити. Цей носій має бути завантажувальниим, інакше програма встановлення не зможе запуститися.</p></translation> + <translation><p>Виберіть носій, який містить програму встановлення операційної системи, яку ви бажаєте встановити. Цей носій має бути завантажувальним, інакше програма встановлення не зможе запуститися.</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="439"/> @@ -5707,7 +5714,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="651"/> <source><p>You have selected the following media to boot from:</p></source> - <translation><p>Ви вибрали наступний пристрій для завантаження:</p></translation> + <translation><p>Ви вибрали такий пристрій для завантаження:</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="593"/> @@ -5732,27 +5739,27 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="146"/> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for booting an operating system of your choice on the virtual machine.</p><p>Note that you will not be able to install an operating system into this virtual machine right now because you did not attach any hard disk to it. If this is not what you want, you can cancel execution of this wizard, select <b>Settings</b> from the <b>Machine</b> menu of the main VirtualBox window to access the settings dialog of this machine and change the hard disk configuration.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel execution of this wizard.</p></source> - <translation><p>Ви запустили нову віртуальну машину вперше. Цей майстер допоможе вам виконати кроки, необхідні для завантаження вами вибраної операційної системи на віртуальну машину.</p><p>Майте на увазі, ви не зможете встановити операційну систему на цю віртуальну машину зараз, бо ви не під'єднали до неї жодного жорсткого диска. Якщо це не те, що ви хочете, то ви можете скасувати виконання майстра, вибрати <b>Налаштування</b> з меню <b>Машина</b> головного вікна VirtualBox для відкриття діалогу налаштувань машини та змінити конфігурацію жорсткого диска.</p><p>Натисніть кнопку <b>Далі</b>, щоб перейти до наступної сторінки майстра, або кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки. Також ви можете натиснути кнопку <b>Скасувати</b>, якщо ви хочете скасувати виконання майстра.</p></translation> + <translation><p>Ви запустили нову віртуальну машину вперше. Цей майстер допоможе вам виконати кроки, необхідні для завантаження вами вибраної операційної системи на віртуальну машину.</p><p>Майте на увазі, ви не зможете встановити операційну систему на цю віртуальну машину зараз, бо ви не під'єднали до неї жодного жорсткого диска. Якщо це не те, що ви бажаєте, то ви можете скасувати виконання майстера, вибрати <b>Налаштування</b> з меню <b>Машина</b> головного вікна VirtualBox для відкриття діалогу налаштувань машини та змінити налаштування жорсткого диска.</p><p>Натисніть кнопку <b>Далі</b>, щоб перейти до наступної сторінки майстера, або кнопку <b>Назад</b>, щоб повернутись до попередньої сторінки. Також ви можете натиснути кнопку <b>Скасувати</b>, якщо ви бажаєте скасувати виконання майстра.</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="332"/> <source><p>Select the type of the media you would like to use for booting an operating system.</p></source> - <translation><p>Виберіть тип носія, який ви би хотіли використовувати для завантаження операційної системи.</p></translation> + <translation><p>Виберіть тип носія, який ви бажаєте використовувати для завантаження операційної системи.</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="423"/> <source><p>Select the media that contains the operating system you want to work with. This media must be bootable, otherwise the operating system will not be able to start.</p></source> - <translation><p>Виберіть носій, який містить операційну систему, з якою ви хочете працювати. Цей носій має бути завантажувальним, інакше операційна система не зможе запуститись.</p></translation> + <translation><p>Виберіть носій, який містить операційну систему, з якою ви бажаєте працювати. Цей носій має бути завантажувальним, інакше операційна система не зможе запуститись.</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="676"/> <source><p>You have selected the following media to boot an operating system from:</p></source> - <translation><p>Ви вибрали наступний пристрій для завантаження операційної системи:</p></translation> + <translation><p>Ви вибрали такий пристрій для завантаження операційної системи:</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="753"/> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be mounted on the virtual machine and the machine will start execution.</p></source> - <translation><p>Якщо вищевказана інформація правильна, натисніть кнопку <b>Закінчити</b>. Після цього вказаний носій буде змонтований до віртуальної машини і машина почне виконання процесу.</p></translation> + <translation><p>Якщо вищевказана інформація правильна, натисніть кнопку <b>Закінчити</b>. Після цього вказаний носій буде змонтований до віртуальної машини і вона почне виконання процесу.</p></translation> </message> <message> <location filename="../ui/VBoxVMFirstRunWzd.ui" line="805"/> @@ -5802,7 +5809,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMInformationDlg.cpp" line="166"/> <source>%1 - Session Information</source> - <translation>%1 — Інформація про Сесію</translation> + <translation>%1 — Інформація про сеанс</translation> </message> <message> <location filename="../ui/VBoxVMInformationDlg.ui" line="41"/> @@ -5852,7 +5859,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMInformationDlg.cpp" line="473"/> <source>Screen Resolution</source> - <translation>Розширення екрану</translation> + <translation>Розширення екрана</translation> </message> <message> <location filename="../src/VBoxVMInformationDlg.cpp" line="550"/> @@ -5874,7 +5881,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxVMInformationDlg.cpp" line="457"/> <source>Not Detected</source> <comment>guest additions</comment> - <translation>Не виявлені</translation> + <translation>Не виявлено</translation> </message> <message> <location filename="../src/VBoxVMInformationDlg.cpp" line="460"/> @@ -5905,7 +5912,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMInformationDlg.cpp" line="577"/> <source>No Network Adapters</source> - <translation>Нема жодного мережевого Адаптера</translation> + <translation>Нема жодного мережевого адаптера</translation> </message> <message> <location filename="../src/VBoxConsoleWnd.cpp" line="2119"/> @@ -5941,7 +5948,7 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxVMListView.cpp" line="173"/> <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source> <comment>VM tooltip (name, last state change, session state)</comment> - <translation><nobr>%1<br></nobr><nobr>%2 починаючи з %3</nobr><br><nobr>Сесія %4</nobr></translation> + <translation><nobr>%1<br></nobr><nobr>%2 починаючи з %3</nobr><br><nobr>Сеанс %4</nobr></translation> </message> <message> <location filename="../src/VBoxVMListView.cpp" line="184"/> @@ -6010,7 +6017,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMLogViewer.cpp" line="259"/> <source>%1 - VirtualBox Log Viewer</source> - <translation>%1 — Переглядач Журналу VirtualBox</translation> + <translation>%1 — Переглядач журналу VirtualBox</translation> </message> <message> <location filename="../src/VBoxVMLogViewer.cpp" line="191"/> @@ -6071,17 +6078,17 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsCD.cpp" line="173"/> <source>Host CD/DVD drive is not selected</source> - <translation>Головний носій CD/DVD не вибраний</translation> + <translation>Головний носій CD/DVD не вибрано</translation> </message> <message> <location filename="../src/VBoxVMSettingsCD.cpp" line="175"/> <source>CD/DVD image file is not selected</source> - <translation>Файл образа CD/DVD не вибраний</translation> + <translation>Файл образа CD/DVD не вибрано</translation> </message> <message> <location filename="../ui/VBoxVMSettingsCD.ui" line="33"/> <source>When checked, mounts the specified media to the CD/DVD drive of the virtual machine. Note that the CD/DVD drive is always connected to the Secondary Master IDE controller of the machine.</source> - <translation>Якщо це відмічено, змонтовує вказаний носій CD/DVD як носій віртуальної машини. Майте на увазі, носій CD/DVD завжди підключений до другого головного контролера машини.</translation> + <translation>Якщо це відмічено, змонтовує вказаний носій CD/DVD як носій віртуальної машини. Майте на увазі, носій CD/DVD завжди під'єднаний до другого головного контролера машини.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsCD.ui" line="36"/> @@ -6106,7 +6113,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsCD.ui" line="125"/> <source>When checked, allows the guest to send ATAPI commands directly to the host drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source> - <translation>Якщо це відмічено, дозволяє гостям надсилати команди ATAPI прямо в головну машину, котра дозволяє використовувати запис CD/DVD, з’єднаних з головною машиною. Майте на увазі, запис аудіо CD ще не підтримується.</translation> + <translation>Якщо це відмічено, дозволяє гостям надсилати команди ATAPI прямо в головну машину, котра дозволяє використовувати запис CD/DVD, з'єднаних з головною машиною. Майте на увазі, запис аудіо CD ще не підтримується.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsCD.ui" line="128"/> @@ -6131,7 +6138,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsCD.ui" line="155"/> <source>Invokes the Virtual Media Manager to select a CD/DVD image to mount.</source> - <translation>Викликає Керуванння Віртуальними Носіями, щоб вибрати образ CD/DVD для монтування.</translation> + <translation>Викликає керуванння віртуальними носіями, щоб вибрати образ CD/DVD для монтування.</translation> </message> </context> <context> @@ -6174,7 +6181,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsDisplay.ui" line="171"/> <source>When checked, the virtual machine will get access to the 3D graphics capabilities available on the host.</source> - <translation>Якщо це позначено, віртуальна машина отримає доступ до можливостей прискорення просторової графіки, доступних на вузлі.</translation> + <translation>Якщо це відмічено, віртуальна машина отримає доступ до можливостей прискорення просторової графіки, доступних на головній операційній системі.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsDisplay.ui" line="174"/> @@ -6209,7 +6216,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsDisplay.ui" line="280"/> <source>Authentication &Method:</source> - <translation>М&етод засвідчення:</translation> + <translation>&Спосіб засвідчення:</translation> </message> <message> <location filename="../ui/VBoxVMSettingsDisplay.ui" line="299"/> @@ -6232,7 +6239,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="455"/> <source>General</source> - <translation>Загальні</translation> + <translation>Загально</translation> </message> <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="464"/> @@ -6247,7 +6254,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="470"/> <source>CD/DVD-ROM</source> - <translation> CD/DVD-ROM</translation> + <translation>CD/DVD-ROM</translation> </message> <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="473"/> @@ -6290,7 +6297,7 @@ p, li { white-space: pre-wrap; } <translation>Спільна теки</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="0"/> <source>Remote Display</source> <translation type="obsolete">Віддалена стільниця</translation> </message> @@ -6300,7 +6307,7 @@ p, li { white-space: pre-wrap; } <translation>%1 — %2</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="0"/> <source>On the <b>%1</b> page, %2</source> <translation type="obsolete">На <b>%1</b> сторінці, %2</translation> </message> @@ -6317,7 +6324,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="543"/> <source>you have selected a 64-bit guest OS type for this VM. As such guests require hardware virtualization (VT-x/AMD-V), this feature will be enabled automatically.</source> - <translation>ви вибрали 64-ох бітну гостьову операційну систему для цієї віртуальної машини. необхідна віртуалізація (VT-x/AMD-V), ці властивості будуть автоматично ввімкнуті.</translation> + <translation>ви вибрали 64-ох бітну гостьову операційну систему, для цієї віртуальної машини. необхідна віртуалізація (VT-x/AMD-V), ці властивості будуть автоматично ввімкнуто.</translation> </message> <message> <location filename="../src/VBoxSettingsDialogSpecific.cpp" line="555"/> @@ -6330,12 +6337,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsFD.cpp" line="171"/> <source>Host floppy drive is not selected</source> - <translation>Головний носій дискет не вибраний</translation> + <translation>Головний носій дискет не вибрано</translation> </message> <message> <location filename="../src/VBoxVMSettingsFD.cpp" line="173"/> <source>Floppy image file is not selected</source> - <translation>Файл образа дискети не вибраний</translation> + <translation>Файл образа дискети не вибрано</translation> </message> <message> <location filename="../ui/VBoxVMSettingsFD.ui" line="33"/> @@ -6380,20 +6387,20 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsFD.ui" line="139"/> <source>Invokes the Virtual Media Manager to select a Floppy image to mount.</source> - <translation>Викликає Керуванння Віртуальними Носіями, щоб вибрати образ дискет для монтування.</translation> + <translation>Викликає керуванння віртуальними носіями, щоб вибрати образ дискет для монтування.</translation> </message> </context> <context> <name>VBoxVMSettingsGeneral</name> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsFD.ui" line="0"/> <source><qt>%1&nbsp;MB</qt></source> <translation type="obsolete"><qt>%1&nbsp;МБ</qt></translation> </message> <message> <location filename="../src/VBoxVMSettingsGeneral.cpp" line="154"/> <source>Displays the path where snapshots of this virtual machine will be stored. Note that snapshots can take quite a lot of disk space.</source> - <translation>Показує шлях, де будуть зберігатися знімки цієї машини.Майте на увазі, знімки можуть займати доволі чимало дискового простору.</translation> + <translation>Показує шлях, де будуть зберігатися знімки цієї машини. Майте на увазі, знімки можуть займати доволі чимало дискового простору.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsGeneral.ui" line="37"/> @@ -6401,7 +6408,7 @@ p, li { white-space: pre-wrap; } <translation>&Основний</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Identification</source> <translation type="obsolete">Розпізнавання</translation> </message> @@ -6416,37 +6423,37 @@ p, li { white-space: pre-wrap; } <translation>Показує назву віртуальної машини.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Base &Memory Size</source> <translation type="obsolete">Розмір &основної пам'яті</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source> <translation type="obsolete">Керує об'ємом пам'яті, яка забезпечує віртуальну машину. Якщо ви надали забагато, машина може не запуститись.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source><</source> <translation type="obsolete"><</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>></source> <translation type="obsolete">></translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>MB</source> <translation type="obsolete">МБ</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>&Video Memory Size</source> <translation type="obsolete">Розмір &відеопам'яті</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Controls the amount of video memory provided to the virtual machine.</source> <translation type="obsolete">Керує об'ємом відеопам'яті, котра забезпечує віртуальну машину.</translation> </message> @@ -6456,89 +6463,89 @@ p, li { white-space: pre-wrap; } <translation>&Вдосконалений</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Boo&t Order:</source> <translation type="obsolete">&Порядок завантаження:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Defines the boot device order. Use checkboxes to the left to enable or disable individual boot devices. Move items up and down to change the device order.</source> <translation type="obsolete">Описує порядок завантаження пристроїв. Використайте мітку, щоб ввімкнути або вимкнути конкретні пристрої, що завантажуються. Перемістіть пункти вверх і вниз, щоб змінити порядок завантаження.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>[device]</source> <translation type="obsolete">[пристрій]</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Move Up (Ctrl-Up)</source> <translation type="obsolete">Пересунути вище (Ctrl-Up)</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Moves the selected boot device up.</source> <translation type="obsolete">Пересуває вибраний пристрій завантаження вище.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Move Down (Ctrl-Down)</source> <translation type="obsolete">Пересунути нижче (Ctrl-Down)</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Moves the selected boot device down.</source> <translation type="obsolete">Пересуває вибраний пристрій завантаження нижче.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Extended Features:</source> <translation type="obsolete">Розширені властивості:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> <translation type="obsolete">Якщо це відмічено, віртуальна машина буде підтримувати вдосконалений інтерфейс конфігурації та керування живленням (ACPI). <b>Майте на увазі:</b> не блокуйте цю властивість після встановлення Windows гостьовою операційною системою!</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Enable A&CPI</source> <translation type="obsolete">Ввімкн&ути ACPI</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease the VM performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> <translation type="obsolete">Якщо це відмічено, віртуальна машина буде підтримувати покращений програмовний контролер переривань В/В (IO APIC), який може трохи понизити продуктивність віртуальної машини.<b>Майте на увазі:</b> не блокуйте цю властивість після встановлення Windows гостьовою операційною системою!</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Enable IO A&PIC</source> <translation type="obsolete">Вв&імкнути APIC В/В</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> <translation type="obsolete">Якщо це відмічено, віртуальна машина спробує використати розширення апаратної віртуалізації, такі як Intel VT-x та AMD-V, для процесора головного комп'ютера.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Enable &VT-x/AMD-V</source> <translation type="obsolete">Ввімкну&ти &VT-x/AMD-V</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source> <translation type="obsolete">Якщо позначити цей пункт, на віртуальній машині буде використано можливість розширення області фізичних адрес (PAE).</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Enable PA&E/NX</source> <translation type="obsolete">Ввімк&нути PAE/NX</translation> </message> <message> <location filename="../ui/VBoxVMSettingsGeneral.ui" line="130"/> <source>&Shared Clipboard:</source> - <translation>&Спільний буфер обміну:</translation> + <translation>&Спільна кишеня:</translation> </message> <message> <location filename="../ui/VBoxVMSettingsGeneral.ui" line="149"/> @@ -6546,12 +6553,12 @@ p, li { white-space: pre-wrap; } <translation>Описує режим розподіл буфера обміну між гостьової і головною операційною системою. Майте на увазі, ця властивість вимагає встановити гостьові доповнення в гостьову операційну систему.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS.</source> <translation type="obsolete">Описує тип віртуального контролера IDE. Залежно від значення, буде забезпечено відповідний віртуальний пристрій IDE в гостьову операційну систему.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>&IDE Controller Type:</source> <translation type="obsolete">Тип &контролера IDE:</translation> </message> @@ -6568,10 +6575,10 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsGeneral.ui" line="253"/> <source>Displays the description of the virtual machine. The description field is useful for commenting configuration details of the installed guest OS.</source> - <translation>Показує характеристику віртуальної машини. Поля опису є корисні для коментування деталей налаштування гостьової операційної системи, котра встановлена.</translation> + <translation>Показує характеристику віртуальної машини. Поля опису є корисні для коментування деталей налаштування гостьової операційної системи, котра встановлена.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>&Other</source> <translation type="obsolete">&Інші</translation> </message> @@ -6581,37 +6588,37 @@ p, li { white-space: pre-wrap; } <translation>Якщо це відмічено, будь-які зміни для носіїв CD/DVD або дискет, які змонтовані, виконані під час роботи машини будуть збережені в файл налаштувань в порядку збереження налаштувань носіїв, які змонтовані, перед запуском.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>&Remember Mounted Media</source> <translation type="obsolete">&Запам'ятовувати носії, які змонтовані</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Runtime:</source> <translation type="obsolete">Час роботи:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>you have assigned more than <b>75%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> <translation type="obsolete">ви вказали більше ніж <b>75%</b> пам'яті вашого комп'ютера (<b>%1</b>) у віртуальну машину. Це недостатньо пам'яті для вашої головної операційної системи. Будь ласка, виберіть менший об'єм.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>you have assigned more than <b>50%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory might be left for your host operating system. Continue at your own risk.</source> <translation type="obsolete">ви вказали більше ніж <b>50%</b> пам'яті вашого комп'ютера (<b>%1</b>) у віртуальну машину. Може бути недостатньо пам'яті для вашої головної операційної системи. Продовжуйте на власний ризик.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>you have assigned less than <b>%1</b> for video memory which is the minimum amount required to switch the virtual machine to fullscreen or seamless mode.</source> <translation type="obsolete">ви вказали менше ніж <b>%1</b> відеопам'яті, менше за мінімальний об’єм, потрібний для перемикання віртуальної машини у повноекранний або повноцінний режим. </translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>When checked, the virtual machine will get access to the 3D graphics capabilities available on the host.</source> <translation type="obsolete">Якщо позначити цей пункт, віртуальна машина отримає доступ до можливостей прискорення просторової графіки, доступних на вузлі.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsGeneral.ui" line="0"/> <source>Enable &3D Acceleration</source> <translation type="obsolete">&Ввімкнути 3D прискорення</translation> </message> @@ -6656,12 +6663,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsHD.cpp" line="854"/> <source>&Add Attachment</source> - <translation>&Додати підключення</translation> + <translation>&Додати під'єднання</translation> </message> <message> <location filename="../src/VBoxVMSettingsHD.cpp" line="855"/> <source>&Remove Attachment</source> - <translation>&Вилучити підключення</translation> + <translation>&Вилучити під'єднання</translation> </message> <message> <location filename="../src/VBoxVMSettingsHD.cpp" line="856"/> @@ -6671,37 +6678,37 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsHD.cpp" line="865"/> <source>Adds a new hard disk attachment.</source> - <translation>Додає нове підключення жорсткого диска.</translation> + <translation>Додає нове під'єднання жорсткого диска.</translation> </message> <message> <location filename="../src/VBoxVMSettingsHD.cpp" line="866"/> <source>Removes the highlighted hard disk attachment.</source> - <translation>Вилучає виділене підключення жорсткого диска.</translation> + <translation>Вилучає виділене під'єднання жорсткого диска.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxVMSettingsHD.cpp" line="0"/> <source>When checked, enables the virtual SATA controller of this machine. Note that you cannot attach hard disks to SATA ports when the virtual SATA controller is disabled.</source> <translation type="obsolete">Якщо це відмічено, ввімкнутий віртуальний контролер SATA цієї машини. Майте на увазі, ви не можете під'єднювати жорсткі диски до порту SATA, коли віртуальний контролер SATA вимкнутий.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../src/VBoxVMSettingsHD.cpp" line="0"/> <source>&Enable SATA Controller</source> <translation type="obsolete">Вв&імкнути контролер SATA</translation> </message> <message> <location filename="../ui/VBoxVMSettingsHD.ui" line="126"/> <source>&Attachments</source> - <translation>&Підключення</translation> + <translation>&Під'єднання</translation> </message> <message> <location filename="../ui/VBoxVMSettingsHD.ui" line="145"/> <source>Lists all hard disks attached to this machine. Use a mouse click or the <tt>Space</tt> key on the highlighted item to activate the drop-down list and choose the desired value. Use the context menu or buttons to the right to add or remove hard disk attachments.</source> - <translation>Показує список всіх жорстких дисків, наявних на цьому комп’ютері. Наведенням вказівника миші на вибраний пункт з наступним клацанням лівою кнопкою миші або натисканням клавіші <tt>Пробіл</tt> ви зможете відкрити спадний список і обрати бажане значення. Скористайтеся контекстним меню або кнопками, розташованими праворуч для додавання або вилучення жорстких дисків.</translation> + <translation>Показує список всіх жорстких дисків, наявних на цьому комп’ютері. Наведенням вказівника миші на вибраний пункт з таким клацанням лівою кнопкою миші або натисканням клавіші <tt>Пробіл</tt> ви зможете відкрити спадний список і вибрати бажане значення. Скористайтеся контекстним меню або кнопками, розташованими праворуч для додавання або вилучення жорстких дисків.</translation> </message> <message> <location filename="../src/VBoxVMSettingsHD.cpp" line="869"/> <source>Invokes the Virtual Media Manager to select a hard disk to attach to the currently highlighted slot.</source> - <translation>Відкриває вікно Керуванння Віртуальними Носіями для вибору жорсткого диска, який слід з’єднати з поточним вибраним слотом.</translation> + <translation>Відкриває вікно керуванння віртуальними носіями для вибору жорсткого диска, який слід з'єднати з вибраним слотом.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsHD.ui" line="176"/> @@ -6726,7 +6733,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsHD.ui" line="83"/> <source>When checked, enables an additional virtual controller (either SATA or SCSI) of this machine.</source> - <translation>Якщо це відмічено, вмикається додатковий віртуальний контролер цієї машини (або SATA, або SCSI).</translation> + <translation>Якщо це відмічено, вмикається додатковий віртуальний контролер цієї машини (SATA або SCSI).</translation> </message> <message> <location filename="../ui/VBoxVMSettingsHD.ui" line="86"/> @@ -6737,12 +6744,12 @@ p, li { white-space: pre-wrap; } <context> <name>VBoxVMSettingsNetwork</name> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsHD.ui" line="0"/> <source>Select TAP setup application</source> <translation type="obsolete">Вибрати програму встановлення TAP</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsHD.ui" line="0"/> <source>Select TAP terminate application</source> <translation type="obsolete">Вибрати програму завершення TAP</translation> </message> @@ -6757,14 +6764,14 @@ p, li { white-space: pre-wrap; } <translation>&Ввімкнути мережевий адаптер</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>A&dapter Type:</source> <translation type="obsolete">Тип &адаптера:</translation> </message> <message> <location filename="../ui/VBoxVMSettingsNetwork.ui" line="90"/> <source>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</source> - <translation>Вибирає тип віртуального мережевого адаптера. Залежно від значення, VirtualBox забезпечуватиме мережевий пристрій для віртуальної машини.</translation> + <translation>Вибирає тип віртуального мережевого адаптера. Залежно від значення, VirtualBox забезпечуватиме мережевий пристрій для віртуальної машини.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsNetwork.ui" line="97"/> @@ -6772,92 +6779,92 @@ p, li { white-space: pre-wrap; } <translation>&Під'єднаний до:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Controls the way how this virtual adapter is attached to the real network of the Host OS.</source> <translation type="obsolete">Контролює, як цей адаптер під'єднаний до справжньої мережі головної операційної системи.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>&Network Name:</source> <translation type="obsolete">&Назва мережі:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Displays the name of the internal network selected for this adapter.</source> <translation type="obsolete">Показує назву внутрішньої мережі, вибраної для цього адаптера.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>&MAC Address:</source> <translation type="obsolete">&Адреса MAC:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> <translation type="obsolete">Показує адресу MAC цього адаптера. Вона містить 12 символів вибраних з діапозону {0-9,A-F}. Майте на увазі, другий символ повиннен бути лише числом.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Generates a new random MAC address.</source> <translation type="obsolete">Створює нову випадкову MAC-адресу.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>&Generate</source> <translation type="obsolete">&Згенерувати</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source> <translation type="obsolete">Визначає, буде з’єднано віртуальний мережевий кабель під час запуску, чи ні.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Ca&ble Connected</source> <translation type="obsolete">Каб&бель з’єднано</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>&Interface Name:</source> <translation type="obsolete">Назва &інтерфейсу:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Displays the TAP interface name.</source> <translation type="obsolete">Показує назву інтерфейсу TAP.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>&Setup Application:</source> <translation type="obsolete">Програма вс&тановлення:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Displays the command executed to set up the TAP interface.</source> <translation type="obsolete">Показує команду, яку буде виконано для встановлення інтерфейсу TAP.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Selects the setup application.</source> <translation type="obsolete">Вказує програму встановлення.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>&Terminate Application:</source> <translation type="obsolete">Програма &завершення:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Displays the command executed to terminate the TAP interface.</source> <translation type="obsolete">Показує команду, яку буде виконано для завершення роботи інтерфейсу TAP.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Selects the terminate application.</source> <translation type="obsolete">Вказує програму завершення.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetwork.ui" line="0"/> <source>Host Interface Settings</source> <translation type="obsolete">Налаштування головного інтерфейсу</translation> </message> @@ -6890,12 +6897,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsNetwork.ui" line="110"/> <source>Controls how this virtual adapter is attached to the real network of the Host OS.</source> - <translation type="unfinished"></translation> + <translation>Котролює, як цей віртуальний адаптер під'єднаний до справжньої мережі головної операційної системи.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsNetwork.ui" line="117"/> <source>Open additional options dialog for current attachment type.</source> - <translation type="unfinished"></translation> + <translation>Відкрити діалог додаткових варіантів для поточноно типу під'єднання.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsNetwork.ui" line="127"/> @@ -6905,7 +6912,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsNetwork.ui" line="140"/> <source>Selects the name of the network adapter if attachment type is equivalent to <b>Bridged Adapter</b> or <b>Host-only Adapter</b> and the name of the internal network if attachment type is equivalent to <b>Internal Network</b>.</source> - <translation type="unfinished"></translation> + <translation>Вибирає назву мережевого адаптера, якщо тип під'єднання рівносильний до <b>проміжного адаптера</b> або <b>лише головного адаптера</b> і назву внутрьошньої мережі, якщо тип під'єднання рівносильний до <b>внутрьошньої мережі</b>.</translation> </message> </context> <context> @@ -6928,7 +6935,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsNetworkDetails.ui" line="62"/> <source>Generates a new random MAC address.</source> - <translation>Створює нову випадкову MAC-адресу.</translation> + <translation>Створює нову випадкову адресу MAC.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsNetworkDetails.ui" line="75"/> @@ -6944,12 +6951,12 @@ p, li { white-space: pre-wrap; } <context> <name>VBoxVMSettingsNetworkPage</name> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetworkDetails.ui" line="0"/> <source>No host network interface is selected</source> <translation type="obsolete">Нема жодного вибраного мережевого інтерфейсу</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsNetworkDetails.ui" line="0"/> <source>Internal network name is not set</source> <translation type="obsolete">Не встановлено назви внутрішньої мережі</translation> </message> @@ -7066,12 +7073,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsSF.cpp" line="252"/> <source> Machine Folders</source> - <translation>Теки машини</translation> + <translation> Теки машини</translation> </message> <message> <location filename="../src/VBoxVMSettingsSF.cpp" line="259"/> <source> Transient Folders</source> - <translation>Тимчасові теки</translation> + <translation> Тимчасові теки</translation> </message> <message> <location filename="../src/VBoxVMSettingsSF.cpp" line="359"/> @@ -7109,7 +7116,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsSFDetails.cpp" line="120"/> <source>Add Share</source> - <translation>Зробити спільну теку</translation> + <translation>Створити спільну теку</translation> </message> <message> <location filename="../src/VBoxVMSettingsSFDetails.cpp" line="123"/> @@ -7221,7 +7228,7 @@ p, li { white-space: pre-wrap; } <translation>&Створити канал</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsSerial.ui" line="0"/> <source>Port &Path:</source> <translation type="obsolete">&Шлях порту:</translation> </message> @@ -7259,32 +7266,32 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="352"/> <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> - <translation type="unfinished"></translation> + <translation>ви вказали більше, ніж <b>%1%</b> пам'яті вашого комп'ютера (<b>%2</b>) у віртуальній машині. Недостатньо пам'яті для вашої головної операційної системи. Будь ласка, виберіть менший об'єм.</translation> </message> <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="362"/> <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory might be left for your host operating system. Continue at your own risk.</source> - <translation type="unfinished"></translation> + <translation>ви вказали більше, ніж <b>%1%</b> пам'яті вашого комп'ютера (<b>%2</b>) у віртуальній машині. Недостатньо пам'яті для вашої головної операційної системи. Продовжуйте на власний ризик.</translation> </message> <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="375"/> <source>for performance reasons, the number of virtual CPUs attached to the virtual machine may not be more than twice the number of physical CPUs on the host (<b>%1</b>). Please reduce the number of virtual CPUs.</source> - <translation type="unfinished"></translation> + <translation>з точки зору швидкодії, число віртуальних процесорів, які під'єднані до машини, не можуть перевищувати більше двох фізичних процесорів на головному комп'ютері (<b>%1</b>).Будь ласка, зменшіть число віртуальних процесорів.</translation> </message> <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="385"/> <source>you have assigned more virtual CPUs to the virtual machine than the number of physical CPUs on your host system (<b>%1</b>). This is likely to degrade the performance of your virtual machine. Please consider reducing the number of virtual CPUs.</source> - <translation type="unfinished"></translation> + <translation>ви вказали більше віртуальних процесорів, ніж фізично на головному комп'ютері (<b>%1</b>). Імовірно це занизить швидкодію вашої віртуальної машини. Будь ласка, прийміть до уваги зниження числа віртуальних процесорів.</translation> </message> <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="396"/> <source>you have assigned more than one virtual CPU to this VM. This will not work unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished"></translation> + <translation>ви вказали більше, ніж один віртуальний процесор для цієї машини. Це також не працює, якщо не ввімкнено властивості IO-APIC. Це буде автоматично здійснено, коли ви дозволите налаштування віртуальної машини, натиснувши кнопку Гаразд.</translation> </message> <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="407"/> <source>you have assigned more than one virtual CPU to this VM. This will not work unless hardware virtualization (VT-x/AMD-V) is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished"></translation> + <translation>ви вказали більше, ніж один віртуальний процесор для цієї машини. Це також не працює, якщо не ввімкнено віртуалізацію апаратури (VT-x/AMD-V). Це буде автоматично здійснено, коли ви дозволите налаштування віртуальної машини, натиснувши кнопку Гаразд.</translation> </message> <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="458"/> @@ -7295,13 +7302,13 @@ p, li { white-space: pre-wrap; } <location filename="../src/VBoxVMSettingsSystem.cpp" line="461"/> <source><qt>%1&nbsp;CPU</qt></source> <comment>%1 is 1 for now</comment> - <translation type="unfinished"></translation> + <translation><qt>%1&nbsp;процесор</qt></translation> </message> <message> <location filename="../src/VBoxVMSettingsSystem.cpp" line="462"/> <source><qt>%1&nbsp;CPUs</qt></source> <comment>%1 is 32 for now</comment> - <translation type="unfinished"></translation> + <translation><qt>%1&nbsp;процесорів</qt></translation> </message> <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="37"/> @@ -7391,7 +7398,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="473"/> <source>Controls the number of virtual CPUs in the virtual machine.</source> - <translation type="unfinished"></translation> + <translation>Контролює числом віртуальних процесорів у віртуальній машині.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="496"/> @@ -7406,12 +7413,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="520"/> <source>Acce&leration</source> - <translation type="unfinished"></translation> + <translation>При&скорення</translation> </message> <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="526"/> <source>Hardware Virtualization:</source> - <translation type="unfinished"></translation> + <translation>Віртуалізація пристрою:</translation> </message> <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="539"/> @@ -7426,12 +7433,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="558"/> <source>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</source> - <translation type="unfinished"></translation> + <translation>Коли це відмічено, віртуальна машина спробує застосувати розширення вкладеного заміщення сторінок Intel VT-x і AMD-V.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsSystem.ui" line="561"/> <source>Enable Nested Pa&ging</source> - <translation type="unfinished"></translation> + <translation>Увімкнути вкла&дене заміщення сторінок</translation> </message> </context> <context> @@ -7469,17 +7476,17 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/VBoxVMSettingsUSB.cpp" line="262"/> <source>Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source> - <translation>Додає новий фільтр USB з порожніми початковими значеннями полів. Зауважте, що такий фільтр відповідатиме будь-якому з’єднаному пристрою USB.</translation> + <translation>Додає новий фільтр USB з порожніми початковими значеннями полів. Зауважте, що такий фільтр відповідатиме будь-якому з'єднаному пристрою USB.</translation> </message> <message> <location filename="../src/VBoxVMSettingsUSB.cpp" line="265"/> <source>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source> - <translation>Додає новий фільтр USB з початковими значеннями полів, обраним для пристрою USB, з’єднаного з комп’ютером-вузлом.</translation> + <translation>Додає новий фільтр USB з початковими значеннями полів, вибраним для пристрою USB, з'єднаного з головним комп'ютером.</translation> </message> <message> <location filename="../src/VBoxVMSettingsUSB.cpp" line="266"/> <source>Edits the selected USB filter.</source> - <translation>Відкриває вікно редагування параметрів вибраного фільтра USB.</translation> + <translation>Редагує вибраний фільтр USB.</translation> </message> <message> <location filename="../src/VBoxVMSettingsUSB.cpp" line="267"/> @@ -7505,7 +7512,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsUSB.ui" line="33"/> <source>When checked, enables the virtual USB controller of this machine.</source> - <translation>Якщо цей пункт буде позначено, буде увімкнено віртуальний контролер USB цього комп’ютера.</translation> + <translation>Якщо це відмічено, буде увімкнено віртуальний контролер USB цьієї машини.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSB.ui" line="36"/> @@ -7515,7 +7522,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsUSB.ui" line="77"/> <source>When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source> - <translation>Якщо позначити цей пункт, на цій машині буде увімкнено віртуальний EHCI USB-контролер. За допомогою EHCI USB-контролера забезпечується підтримка USB 2.0.</translation> + <translation>Якщо це відмічено, на цій машині буде увімкнено віртуальний контролер USB EHCI. Контролер USB EHCI забезпечує підтримку USB 2.0.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSB.ui" line="80"/> @@ -7530,7 +7537,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsUSB.ui" line="115"/> <source>Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not. Use the context menu or buttons to the right to add or remove USB filters.</source> - <translation>Показує список всіх фільтрів USB на цій машині. Пункт, розташований ліворуч визначає, буде увімкнуто пристрій чи ні. Для додавання або вилучення USB-фільтрів скористайтеся контекстним меню або кнопками, розташованими праворуч.</translation> + <translation>Показує список всіх фільтрів USB на цій машині. Мітка, розташована ліворуч визначає, чи буде увімкнуто пристрій, чи ні. Для додавання або вилучення фільтрів USB скористайтеся контекстним меню або кнопками, розташованими праворуч.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSB.ui" line="122"/> @@ -7571,32 +7578,32 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="62"/> <source>&Vendor ID:</source> - <translation>ID &Продавця:</translation> + <translation>ID &продавця:</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="75"/> <source>Defines the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source> - <translation>Описує фільтр по ID Продавця. Формат рядка <i>точна відповідність</i> — <tt>XXXX</tt>, де <tt>X</tt> — шістнадцяткова цифра. Порожній рядок відповідає будь-якому значенню.</translation> + <translation>Описує фільтр за ID продавця. Формат рядка <i>точна відповідність</i> — <tt>XXXX</tt>, де <tt>X</tt> — шістнадцяткова цифра. Порожній рядок відповідає будь-якому значенню.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="82"/> <source>&Product ID:</source> - <translation>ID П&родукту:</translation> + <translation>ID п&родукту:</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="95"/> <source>Defines the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source> - <translation>Описує фільтр по ID Продукту. Формат рядка <i>точна відповідність</i> — <tt>XXXX</tt>, де <tt>X</tt> — шістнадцяткова цифра. Порожній рядок відповідає будь-якому значенню.</translation> + <translation>Описує фільтр за ID продукту. Формат рядка <i>точна відповідність</i> — <tt>XXXX</tt>, де <tt>X</tt> — шістнадцяткова цифра. Порожній рядок відповідає будь-якому значенню.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="102"/> <source>&Revision:</source> - <translation>&Модифікація:</translation> + <translation>П&ерегляд:</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="115"/> <source>Defines the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source> - <translation>Описує номер модифікації фільтра. Формат рядка <i>точна відповідність</i> — <tt>IIFF</tt>, де <tt>I</tt> — десяткове число цілої частини та <tt>F</tt> — десяткове число дробової частини. Пустий рядок відповідає будь-якому значенню.</translation> + <translation>Описує номер перегляду фільтра. Формат рядка <i>точна відповідність</i> — <tt>IIFF</tt>, де <tt>I</tt> — десяткове число цілої частини та <tt>F</tt> — десяткове число дробової частини. Пустий рядок відповідає будь-якому значенню.</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="122"/> @@ -7646,7 +7653,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="221"/> <source>Defines whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source> - <translation>Описує, чи цей фільтр застосовується до пристроїв USB локально під'єднаних до головного комп'ютера (<i>Ні</i>), до комп'ютера клієнта VRDP (<i>Так</i>), або до (<i>Обох</i>).</translation> + <translation>Описує, чи цей фільтр застосовується до пристроїв USB локально під'єднаних до головного комп'ютера (<i>Ні</i>), чи до комп'ютера клієнта VRDP (<i>Так</i>), або до (<i>Обох</i>).</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="228"/> @@ -7656,7 +7663,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="247"/> <source>Defines an action performed by the host computer when a matching device is attached: give it up to the host OS (<i>Ignore</i>) or grab it for later usage by virtual machines (<i>Hold</i>).</source> - <translation>Описує дії, котрі виконуються головним комп'ютером, коли буде з’єднано відповідний пристрій: передати його основній операційній системі (<i>Ігнорувати</i>) або перехопити його для наступного використання у віртуальних машинах (<i>Захопити</i>).</translation> + <translation>Описує дії, котрі виконуються головним комп'ютером, коли буде з'єднано відповідний пристрій: передати його основній операційній системі (<i>Ігнорувати</i>) або перехопити його для наступного використання у віртуальних машинах (<i>Захопити</i>).</translation> </message> <message> <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="36"/> @@ -7667,42 +7674,42 @@ p, li { white-space: pre-wrap; } <context> <name>VBoxVMSettingsVRDP</name> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source> <translation type="obsolete">Якщо це відмічено, то віртуальна машина буде діяти відповідно як сервер віддаленої стільниці (RDP), дозволяючи віддаленим клієнтам з'єднатися та використовувати віртуальну машину (коли вона запущена) використовуючи стандартного клієнта RDP.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>&Enable VRDP Server</source> <translation type="obsolete">&Ввімкнути сервер VRDP</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>Server &Port:</source> <translation type="obsolete">&Порт сервера:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</source> <translation type="obsolete">Показує номер порту сервера VRDP. Ви можете вказати <tt>0</tt> (нуль), щоб скинути порт до типових значень.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>Authentication &Method:</source> <translation type="obsolete">М&етод засвідчення:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>Defines the VRDP authentication method.</source> <translation type="obsolete">Описує метод засвідчення VRDP.</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>Authentication &Timeout:</source> <translation type="obsolete">&Час очікування засвідчення:</translation> </message> <message> - <location filename="" line="0"/> + <location filename="../ui/VBoxVMSettingsUSBFilterDetails.ui" line="0"/> <source>Specifies the timeout for guest authentication, in milliseconds.</source> <translation type="obsolete">Показує час очікування засвідчення гостя, в мілісекундах.</translation> </message> diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_km_KH.ts b/src/VBox/Frontends/VirtualBox/nls/qt_km_KH.ts index e4225d962..5b67d69b2 100644 --- a/src/VBox/Frontends/VirtualBox/nls/qt_km_KH.ts +++ b/src/VBox/Frontends/VirtualBox/nls/qt_km_KH.ts @@ -1,5285 +1,3634 @@ -<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AudioOutput</name> +<TS> + <context> + <name>PPDOptionsModel</name> <message> - <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> - <translation type="unfinished"></translation> + <source>Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Revert back to device '%1'</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Phonon::</name> - <message> - <source>Notifications</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Music</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Video</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Communication</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Games</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Accessibility</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Phonon::Gstreamer::Backend</name> - <message> - <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. - Some video features have been disabled.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Warning: You do not seem to have the base GStreamer plugins installed. - All audio and video support has been disabled</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Phonon::Gstreamer::MediaObject</name> - <message> - <source>Cannot start playback. - -Check your Gstreamer installation and make sure you -have libgstreamer-plugins-base installed.</source> - <translation type="unfinished"></translation> - </message> - <message numerus="yes"> - <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source> - <translation type="unfinished"> - <numerusform></numerusform> - </translation> - </message> - <message> - <source>Could not open media source.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Invalid source type.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Could not locate media source.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Could not open audio device. The device is already in use.</source> - <translation type="unfinished"></translation> + <source>Value</source> + <translation>តម្លៃ</translation> </message> + </context> + <context> + <name>Q3Accel</name> <message> - <source>Could not decode media source.</source> - <translation type="unfinished"></translation> + <source>%1, %2 not defined</source> + <translation>មិនបានកំណត់ %1, %2</translation> </message> -</context> -<context> - <name>Phonon::VolumeSlider</name> <message> - <source>Volume: %1%</source> - <translation type="unfinished"></translation> + <source>Ambiguous %1 not handled</source> + <translation>មិនបានគ្រប់គ្រង %1 ពិតប្រាកដទេ</translation> </message> + </context> + <context> + <name>Q3DataTable</name> <message> - <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> - <translation type="unfinished"></translation> + <source>True</source> + <translation>ពិត</translation> </message> -</context> -<context> - <name>Q3Accel</name> <message> - <source>%1, %2 not defined</source> - <translation>មិនបានកំណត់ %1, %2</translation> + <source>False</source> + <translation>មិនពិតប្រាកដ</translation> </message> <message> - <source>Ambiguous %1 not handled</source> - <translation>មិនបានគ្រប់គ្រង %1 ពិតប្រាកដទេ</translation> + <source>Insert</source> + <translation>បញ្ចូល</translation> </message> -</context> -<context> - <name>Q3DataTable</name> <message> - <source>True</source> - <translation>ពិត</translation> + <source>Update</source> + <translation>ធ្វើឲ្យទាន់សម័យ</translation> </message> <message> - <source>False</source> - <translation>មិនពិតប្រាកដ</translation> + <source>Delete</source> + <translation>លុប</translation> </message> + </context> + <context> + <name>Q3FileDialog</name> <message> - <source>Insert</source> - <translation>បញ្ចូល</translation> + <source>Copy or Move a File</source> + <translation>ចម្លង ឬផ្លាស់ទីឯកសារ</translation> </message> <message> - <source>Update</source> - <translation>ធ្វើឲ្យទាន់សម័យ</translation> + <source>Read: %1</source> + <translation>អាន ៖ %1</translation> </message> <message> - <source>Delete</source> - <translation>លុប</translation> + <source>Write: %1</source> + <translation>សរសេរ ៖ %1</translation> </message> -</context> -<context> - <name>Q3FileDialog</name> <message> - <source>Copy or Move a File</source> - <translation>ចម្លង ឬផ្លាស់ទីឯកសារ</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>Read: %1</source> - <translation>អាន ៖ %1</translation> + <source>All Files (*)</source> + <translation>ឯកសារទាំងអស់ (*)</translation> </message> <message> - <source>Write: %1</source> - <translation>សរសេរ ៖ %1</translation> + <source>Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>All Files (*)</source> - <translation>ឯកសារទាំងអស់ (*)</translation> + <source>Type</source> + <translation>ប្រភេទ</translation> </message> <message> - <source>Name</source> - <translation>ឈ្មោះ</translation> + <source>Date</source> + <translation>កាលបរិច្ឆេទ</translation> </message> <message> - <source>Size</source> - <translation>ទំហំ</translation> + <source>Attributes</source> + <translation>គុណលក្ខណៈ</translation> </message> <message> - <source>Type</source> - <translation>ប្រភេទ</translation> + <source>&OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>Date</source> - <translation>កាលបរិច្ឆេទ</translation> + <source>Look &in:</source> + <translation>មើលក្នុង ៖</translation> </message> <message> - <source>Attributes</source> - <translation>គុណលក្ខណៈ</translation> + <source>File &name:</source> + <translation>ឈ្មោះឯកសារ ៖</translation> </message> <message> - <source>&OK</source> - <translation>យល់ព្រម</translation> + <source>File &type:</source> + <translation>ប្រភេទឯកសារ ៖</translation> </message> <message> - <source>Look &in:</source> - <translation>មើលក្នុង ៖</translation> + <source>Back</source> + <translation>ថយក្រោយ</translation> </message> <message> - <source>File &name:</source> - <translation>ឈ្មោះឯកសារ ៖</translation> + <source>One directory up</source> + <translation>មួយថតឡើងលើ</translation> </message> <message> - <source>File &type:</source> - <translation>ប្រភេទឯកសារ ៖</translation> + <source>Create New Folder</source> + <translation>បង្កើតថតថ្មី</translation> </message> <message> - <source>Back</source> - <translation>ថយក្រោយ</translation> + <source>List View</source> + <translation>ទិដ្ឋភាពបញ្ជី</translation> </message> <message> - <source>One directory up</source> - <translation>មួយថតឡើងលើ</translation> + <source>Detail View</source> + <translation>ទិដ្ឋភាពលម្អិត</translation> </message> <message> - <source>Create New Folder</source> - <translation>បង្កើតថតថ្មី</translation> + <source>Preview File Info</source> + <translation>ព័ត៌មានឯកសារមើលជាមុន</translation> </message> <message> - <source>List View</source> - <translation>ទិដ្ឋភាពបញ្ជី</translation> + <source>Preview File Contents</source> + <translation>មាតិកាឯកសារមើលជាមុន</translation> </message> <message> - <source>Detail View</source> - <translation>ទិដ្ឋភាពលម្អិត</translation> + <source>Read-write</source> + <translation>អាន-សរសេរ</translation> </message> <message> - <source>Preview File Info</source> - <translation>ព័ត៌មានឯកសារមើលជាមុន</translation> + <source>Read-only</source> + <translation>បានតែអាន</translation> </message> <message> - <source>Preview File Contents</source> - <translation>មាតិកាឯកសារមើលជាមុន</translation> + <source>Write-only</source> + <translation>បានតែសរសេរ</translation> </message> <message> - <source>Read-write</source> - <translation>អាន-សរសេរ</translation> + <source>Inaccessible</source> + <translation>មិនអាចចូលដំណើរការ</translation> </message> <message> - <source>Read-only</source> - <translation>បានតែអាន</translation> + <source>Symlink to File</source> + <translation>តំណនិមិត្តសញ្ញាទៅកាន់ឯកសារ</translation> </message> <message> - <source>Write-only</source> - <translation>បានតែសរសេរ</translation> + <source>Symlink to Directory</source> + <translation>តំណនិមិត្តសញ្ញាទៅកាន់ថត</translation> </message> <message> - <source>Inaccessible</source> - <translation>មិនអាចចូលដំណើរការ</translation> + <source>Symlink to Special</source> + <translation>តំណនិមិត្តសញ្ញាទៅកាន់ឯកសារពិសេស</translation> </message> <message> - <source>Symlink to File</source> - <translation>តំណនិមិត្តសញ្ញាទៅកាន់ឯកសារ</translation> + <source>File</source> + <translation>ឯកសារ</translation> </message> <message> - <source>Symlink to Directory</source> - <translation>តំណនិមិត្តសញ្ញាទៅកាន់ថត</translation> + <source>Dir</source> + <translation>ថត</translation> </message> <message> - <source>Symlink to Special</source> - <translation>តំណនិមិត្តសញ្ញាទៅកាន់ឯកសារពិសេស</translation> + <source>Special</source> + <translation>ពិសេស</translation> </message> <message> - <source>File</source> - <translation>ឯកសារ</translation> + <source>Open</source> + <translation>បើក</translation> </message> <message> - <source>Dir</source> - <translation>ថត</translation> + <source>Save As</source> + <translation>រក្សាទុកជា</translation> </message> <message> - <source>Special</source> - <translation>ពិសេស</translation> + <source>&Open</source> + <translation>បើក</translation> </message> <message> - <source>Open</source> - <translation>បើក</translation> + <source>&Save</source> + <translation>រក្សាទុក</translation> </message> <message> - <source>Save As</source> - <translation>រក្សាទុកជា</translation> + <source>&Rename</source> + <translation>ប្ដូរឈ្មោះ</translation> </message> <message> - <source>&Open</source> - <translation>បើក</translation> + <source>&Delete</source> + <translation>លុប</translation> </message> <message> - <source>&Save</source> - <translation>រក្សាទុក</translation> + <source>R&eload</source> + <translation>ផ្ទុកឡើងវិញ</translation> </message> <message> - <source>&Rename</source> - <translation>ប្ដូរឈ្មោះ</translation> + <source>Sort by &Name</source> + <translation>តម្រៀបតាមឈ្មោះ</translation> </message> <message> - <source>&Delete</source> - <translation>លុប</translation> + <source>Sort by &Size</source> + <translation>តម្រៀបតាមទំហំ</translation> </message> <message> - <source>R&eload</source> - <translation>ផ្ទុកឡើងវិញ</translation> + <source>Sort by &Date</source> + <translation>តម្រៀបតាមកាលបរិច្ឆេទ</translation> </message> <message> - <source>Sort by &Name</source> - <translation>តម្រៀបតាមឈ្មោះ</translation> + <source>&Unsorted</source> + <translation>មិនបានតម្រៀបទេ</translation> </message> <message> - <source>Sort by &Size</source> - <translation>តម្រៀបតាមទំហំ</translation> + <source>Sort</source> + <translation>តម្រៀប</translation> </message> <message> - <source>Sort by &Date</source> - <translation>តម្រៀបតាមកាលបរិច្ឆេទ</translation> + <source>Show &hidden files</source> + <translation>បង្ហាញឯកសារដែលលាក់</translation> </message> <message> - <source>&Unsorted</source> - <translation>មិនបានតម្រៀបទេ</translation> + <source>the file</source> + <translation>ឯកសារ</translation> </message> <message> - <source>Sort</source> - <translation>តម្រៀប</translation> + <source>the directory</source> + <translation>ថត</translation> </message> <message> - <source>Show &hidden files</source> - <translation>បង្ហាញឯកសារដែលលាក់</translation> + <source>the symlink</source> + <translation>តំណនិមិត្តសញ្ញា</translation> </message> <message> - <source>the file</source> - <translation>ឯកសារ</translation> + <source>Delete %1</source> + <translation>លុប %1</translation> </message> <message> - <source>the directory</source> - <translation>ថត</translation> + <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source> + <translation><qt>តើអ្នកប្រាកដជាចង់លុប %1 "%2" មែនឬ ?</qt></translation> </message> <message> - <source>the symlink</source> - <translation>តំណនិមិត្តសញ្ញា</translation> + <source>&Yes</source> + <translation>បាទ/ចាស</translation> </message> <message> - <source>Delete %1</source> - <translation>លុប %1</translation> + <source>&No</source> + <translation>ទេ</translation> </message> <message> - <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source> - <translation><qt>តើអ្នកប្រាកដជាចង់លុប %1 "%2" មែនឬ ?</qt></translation> + <source>New Folder 1</source> + <translation>ថតថ្មី ១</translation> </message> <message> - <source>&Yes</source> - <translation>បាទ/ចាស</translation> + <source>New Folder</source> + <translation>ថតថ្មី</translation> </message> <message> - <source>&No</source> - <translation>ទេ</translation> + <source>New Folder %1</source> + <translation>ថតថ្មី %1</translation> </message> <message> - <source>New Folder 1</source> - <translation>ថតថ្មី ១</translation> + <source>Find Directory</source> + <translation>រកថត</translation> </message> <message> - <source>New Folder</source> - <translation>ថតថ្មី</translation> + <source>Directories</source> + <translation>ថត</translation> </message> <message> - <source>New Folder %1</source> - <translation>ថតថ្មី %1</translation> + <source>Directory:</source> + <translation>ថត ៖</translation> </message> <message> - <source>Find Directory</source> - <translation>រកថត</translation> + <source>Error</source> + <translation>កំហុស</translation> </message> <message> - <source>Directories</source> - <translation>ថត</translation> + <source>%1 +File not found. +Check path and filename.</source> + <translation>%1 រកមិនឃើញទេ ។ សូមពិនិត្យមើលផ្លូវ និងឈ្មោះឯកសារ ។</translation> </message> <message> - <source>Directory:</source> - <translation>ថត ៖</translation> + <source>All Files (*.*)</source> + <translation>ឯកសារទាំងអស់ (*.*)</translation> </message> <message> - <source>Error</source> - <translation>កំហុស</translation> + <source>Open </source> + <translation>បើក</translation> </message> <message> - <source>%1 -File not found. -Check path and filename.</source> - <translation>%1 រកមិនឃើញទេ ។ សូមពិនិត្យមើលផ្លូវ និងឈ្មោះឯកសារ ។</translation> + <source>Select a Directory</source> + <translation>ជ្រើសថត</translation> </message> -</context> -<context> + </context> + <context> <name>Q3LocalFs</name> <message> - <source>Could not read directory + <source>Could not read directory %1</source> - <translation>មិនអាចអានថត + <translation>មិនអាចអានថត %1 បានទេ</translation> </message> <message> - <source>Could not create directory + <source>Could not create directory %1</source> - <translation>មិនអាចបង្កើតថត + <translation>មិនអាចបង្កើតថត %1 បានទេ</translation> </message> <message> - <source>Could not remove file or directory + <source>Could not remove file or directory %1</source> - <translation>មិនអាចយកឯកសារ ឬថតចេញទេ + <translation>មិនអាចយកឯកសារ ឬថតចេញទេ %1</translation> </message> <message> - <source>Could not rename + <source>Could not rename %1 to %2</source> - <translation>មិនអាចប្ដូរឈ្មោះ + <translation>មិនអាចប្ដូរឈ្មោះ %1 ទៅជា %2 បានទេ</translation> </message> <message> - <source>Could not open + <source>Could not open %1</source> - <translation>មិនអាចបើក + <translation>មិនអាចបើក %1 បានទេ</translation> </message> <message> - <source>Could not write + <source>Could not write %1</source> - <translation>មិនអាចសរសេរទៅកាន់ + <translation>មិនអាចសរសេរទៅកាន់ %1 បានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>Q3MainWindow</name> <message> - <source>Line up</source> - <translation>រៀបជាជួរ</translation> + <source>Line up</source> + <translation>រៀបជាជួរ</translation> </message> <message> - <source>Customize...</source> - <translation>ប្ដូរតាមបំណង...</translation> + <source>Customize...</source> + <translation>ប្ដូរតាមបំណង...</translation> </message> -</context> -<context> + </context> + <context> <name>Q3NetworkProtocol</name> <message> - <source>Operation stopped by the user</source> - <translation>ប្រតិបត្តិការបានបញ្ឈប់ដោយអ្នកប្រើ</translation> + <source>Operation stopped by the user</source> + <translation>ប្រតិបត្តិការបានបញ្ឈប់ដោយអ្នកប្រើ</translation> </message> -</context> -<context> + </context> + <context> <name>Q3ProgressDialog</name> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> -</context> -<context> + </context> + <context> <name>Q3TabDialog</name> <message> - <source>OK</source> - <translation>យល់ព្រម</translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>Apply</source> - <translation>អនុវត្ត</translation> + <source>Apply</source> + <translation>អនុវត្ត</translation> </message> <message> - <source>Help</source> - <translation>ជំនួយ</translation> + <source>Help</source> + <translation>ជំនួយ</translation> </message> <message> - <source>Defaults</source> - <translation>លំនាំដើម</translation> + <source>Defaults</source> + <translation>លំនាំដើម</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> -</context> -<context> + </context> + <context> <name>Q3TextEdit</name> <message> - <source>&Undo</source> - <translation>មិនធ្វើវិញ</translation> + <source>&Undo</source> + <translation>មិនធ្វើវិញ</translation> </message> <message> - <source>&Redo</source> - <translation>ធ្វើវិញ</translation> + <source>&Redo</source> + <translation>ធ្វើវិញ</translation> </message> <message> - <source>Cu&t</source> - <translation>កាត់</translation> + <source>Cu&t</source> + <translation>កាត់</translation> </message> <message> - <source>&Copy</source> - <translation>ចម្លង</translation> + <source>&Copy</source> + <translation>ចម្លង</translation> </message> <message> - <source>&Paste</source> - <translation>បិទភ្ជាប់</translation> + <source>&Paste</source> + <translation>បិទភ្ជាប់</translation> </message> <message> - <source>Clear</source> - <translation>ជម្រះ</translation> + <source>Clear</source> + <translation>ជម្រះ</translation> </message> <message> - <source>Select All</source> - <translation>ជ្រើសទាំងអស់</translation> + <source>Select All</source> + <translation>ជ្រើសទាំងអស់</translation> </message> -</context> -<context> + </context> + <context> <name>Q3TitleBar</name> <message> - <source>System</source> - <translation>ប្រព័ន្ធ</translation> + <source>System</source> + <translation>ប្រព័ន្ធ</translation> </message> <message> - <source>Restore up</source> - <translation>ស្ដារឡើងវិញទៅលើ</translation> + <source>Restore up</source> + <translation>ស្ដារឡើងវិញទៅលើ</translation> </message> <message> - <source>Minimize</source> - <translation>បង្រួមអប្បបរមា</translation> + <source>Minimize</source> + <translation>បង្រួមអប្បបរមា</translation> </message> <message> - <source>Restore down</source> - <translation>ស្ដារឡើងវិញចុះក្រោម</translation> + <source>Restore down</source> + <translation>ស្ដារឡើងវិញចុះក្រោម</translation> </message> <message> - <source>Maximize</source> - <translation>ពង្រីកអតិបរមា</translation> + <source>Maximize</source> + <translation>ពង្រីកអតិបរមា</translation> </message> <message> - <source>Close</source> - <translation>បិទ</translation> + <source>Close</source> + <translation>បិទ</translation> </message> <message> - <source>Contains commands to manipulate the window</source> - <translation>មានពាក្យបញ្ជាដើម្បីគណនាបង្អួច</translation> + <source>Contains commands to manipulate the window</source> + <translation>មានពាក្យបញ្ជាដើម្បីគណនាបង្អួច</translation> </message> <message> - <source>Puts a minimized back to normal</source> - <translation>ដាក់ការថយក្រោយដែលបានបង្រួមអប្បបរមាទៅធម្មតាវិញ</translation> + <source>Puts a minimized back to normal</source> + <translation>ដាក់ការថយក្រោយដែលបានបង្រួមអប្បបរមាទៅធម្មតាវិញ</translation> </message> <message> - <source>Moves the window out of the way</source> - <translation>ផ្លាស់ទីបង្អួចចេញពីផ្លូវ</translation> + <source>Moves the window out of the way</source> + <translation>ផ្លាស់ទីបង្អួចចេញពីផ្លូវ</translation> </message> <message> - <source>Puts a maximized window back to normal</source> - <translation>ដាក់បង្អួចថយក្រោយដែលបានបង្រួមអប្បបរមាទៅធម្មតាវិញ</translation> + <source>Puts a maximized window back to normal</source> + <translation>ដាក់បង្អួចថយក្រោយដែលបានបង្រួមអប្បបរមាទៅធម្មតាវិញ</translation> </message> <message> - <source>Makes the window full screen</source> - <translation>ធ្វើឲ្យបង្អួចពេញអេក្រង់</translation> + <source>Makes the window full screen</source> + <translation>ធ្វើឲ្យបង្អួចពេញអេក្រង់</translation> </message> <message> - <source>Closes the window</source> - <translation>បិទបង្អួច</translation> + <source>Closes the window</source> + <translation>បិទបង្អួច</translation> </message> <message> - <source>Displays the name of the window and contains controls to manipulate it</source> - <translation>បង្ហាញឈ្មោះបង្អួច និងមានវត្ថុបញ្ជាដើម្បីគណនាវាផងដែរ</translation> + <source>Displays the name of the window and contains controls to manipulate it</source> + <translation>បង្ហាញឈ្មោះបង្អួច និងមានវត្ថុបញ្ជាដើម្បីគណនាវាផងដែរ</translation> </message> -</context> -<context> + </context> + <context> <name>Q3ToolBar</name> <message> - <source>More...</source> - <translation>ច្រើនទៀត...</translation> + <source>More...</source> + <translation>ច្រើនទៀត...</translation> </message> -</context> -<context> + </context> + <context> <name>Q3UrlOperator</name> <message> - <source>The protocol `%1' is not supported</source> - <translation>ពិធីការ `%1' មិនត្រូវបានគាំទ្រទេ</translation> + <source>The protocol `%1' is not supported</source> + <translation>ពិធីការ `%1' មិនត្រូវបានគាំទ្រទេ</translation> </message> <message> - <source>The protocol `%1' does not support listing directories</source> - <translation>ពិធីការ `%1' មិនគាំទ្រថតដែលរាយទេ</translation> + <source>The protocol `%1' does not support listing directories</source> + <translation>ពិធីការ `%1' មិនគាំទ្រថតដែលរាយទេ</translation> </message> <message> - <source>The protocol `%1' does not support creating new directories</source> - <translation>ពិធីការ `%1' មិនគាំទ្រការបង្កើតថតថ្មីទេ</translation> + <source>The protocol `%1' does not support creating new directories</source> + <translation>ពិធីការ `%1' មិនគាំទ្រការបង្កើតថតថ្មីទេ</translation> </message> <message> - <source>The protocol `%1' does not support removing files or directories</source> - <translation>ពិធីការ `%1' មិនគាំទ្រការយកឯកសារ ឬថតចេញទេ</translation> + <source>The protocol `%1' does not support removing files or directories</source> + <translation>ពិធីការ `%1' មិនគាំទ្រការយកឯកសារ ឬថតចេញទេ</translation> </message> <message> - <source>The protocol `%1' does not support renaming files or directories</source> - <translation>ពិធីការ `%1' មិនគាំទ្រការប្ដូរឈ្មោះឯកសារ ឬថតទេ</translation> + <source>The protocol `%1' does not support renaming files or directories</source> + <translation>ពិធីការ `%1' មិនគាំទ្រការប្ដូរឈ្មោះឯកសារ ឬថតទេ</translation> </message> <message> - <source>The protocol `%1' does not support getting files</source> - <translation>ពិធីការ `%1' មិនគាំទ្រនឹងការទទួលឯកសារទេ</translation> + <source>The protocol `%1' does not support getting files</source> + <translation>ពិធីការ `%1' មិនគាំទ្រនឹងការទទួលឯកសារទេ</translation> </message> <message> - <source>The protocol `%1' does not support putting files</source> - <translation>ពិធីការ `%1' មិនគាំទ្រនឹងការដាក់ឯកសារទេ</translation> + <source>The protocol `%1' does not support putting files</source> + <translation>ពិធីការ `%1' មិនគាំទ្រនឹងការដាក់ឯកសារទេ</translation> </message> <message> - <source>The protocol `%1' does not support copying or moving files or directories</source> - <translation>ពិធីការ `%1' មិនគាំត្រនឹងការចម្លង ឬផ្លាស់ទីឯកសារ ឬថតទេ</translation> + <source>The protocol `%1' does not support copying or moving files or directories</source> + <translation>ពិធីការ `%1' មិនគាំត្រនឹងការចម្លង ឬផ្លាស់ទីឯកសារ ឬថតទេ</translation> </message> <message> - <source>(unknown)</source> - <translation>(មិនស្គាល់)</translation> + <source>(unknown)</source> + <translation>(មិនស្គាល់)</translation> </message> -</context> -<context> + </context> + <context> <name>Q3Wizard</name> <message> - <source>&Cancel</source> - <translation>បោះបង់</translation> + <source>&Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>< &Back</source> - <translation>< ថយក្រោយ</translation> + <source>< &Back</source> + <translation>< ថយក្រោយ</translation> </message> <message> - <source>&Next ></source> - <translation>បន្ទាប់ ></translation> + <source>&Next ></source> + <translation>បន្ទាប់ ></translation> </message> <message> - <source>&Finish</source> - <translation>បញ្ចប់</translation> + <source>&Finish</source> + <translation>បញ្ចប់</translation> </message> <message> - <source>&Help</source> - <translation>ជំនួយ</translation> + <source>&Help</source> + <translation>ជំនួយ</translation> </message> -</context> -<context> + </context> + <context> <name>QAbstractSocket</name> <message> - <source>Host not found</source> - <translation>រកមិនឃើញម៉ាស៊ីន</translation> + <source>Host not found</source> + <translation>រកមិនឃើញម៉ាស៊ីន</translation> </message> <message> - <source>Connection refused</source> - <translation>បានបដិសេធការតភ្ជាប់</translation> + <source>Connection refused</source> + <translation>បានបដិសេធការតភ្ជាប់</translation> </message> <message> - <source>Socket operation timed out</source> - <translation>អស់ពេលប្រតិបត្តិរន្ធ</translation> + <source>Socket operation timed out</source> + <translation>អស់ពេលប្រតិបត្តិរន្ធ</translation> </message> <message> - <source>Socket is not connected</source> - <translation>រន្ធមិនត្រូវបានតភ្ជាប់ទេ</translation> + <source>Socket is not connected</source> + <translation>រន្ធមិនត្រូវបានតភ្ជាប់ទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QAbstractSpinBox</name> <message> - <source>&Step up</source> - <translation>រៀបចំ</translation> + <source>&Step up</source> + <translation>រៀបចំ</translation> </message> <message> - <source>Step &down</source> - <translation>ជំហានចុះក្រោម</translation> + <source>Step &down</source> + <translation>ជំហានចុះក្រោម</translation> </message> <message> - <source>&Select All</source> - <translation>ជ្រើសទាំងអស់</translation> + <source>&Select All</source> + <translation>ជ្រើសទាំងអស់</translation> </message> -</context> -<context> + </context> + <context> <name>QApplication</name> <message> - <source>Activate</source> - <translation>ធ្វើឲ្យសកម្ម</translation> + <source>Activate</source> + <translation>ធ្វើឲ្យសកម្ម</translation> </message> <message> - <source>Executable '%1' requires Qt %2, found Qt %3.</source> - <translation>'%1' អាចប្រតិបត្តិបាន ទាមទារ Qt %2 រកឃើញ Qt %3 ។</translation> + <source>Executable '%1' requires Qt %2, found Qt %3.</source> + <translation>'%1' អាចប្រតិបត្តិបាន ទាមទារ Qt %2 រកឃើញ Qt %3 ។</translation> </message> <message> - <source>Incompatible Qt Library Error</source> - <translation>កំហុសបណ្ណាល័យ Qt ដែលមិនឆបគ្នា</translation> + <source>Incompatible Qt Library Error</source> + <translation>កំហុសបណ្ណាល័យ Qt ដែលមិនឆបគ្នា</translation> </message> <message> - <source>QT_LAYOUT_DIRECTION</source> - <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> - <translation>QT_LAYOUT_DIRECTION</translation> + <source>QT_LAYOUT_DIRECTION</source> + <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> + <translation>QT_LAYOUT_DIRECTION</translation> </message> <message> - <source>Activates the program's main window</source> - <translation>ធ្វើឲ្យបង្អួចមេរបស់កម្មវិធីសកម្ម</translation> - </message> -</context> -<context> - <name>QCheckBox</name> - <message> - <source>Uncheck</source> - <translation>មិនធូសធីគ</translation> + <source>Activates the program's main window</source> + <translation>ធ្វើឲ្យបង្អួចមេរបស់កម្មវិធីសកម្ម</translation> </message> + </context> + <context> + <name>QAxSelect</name> <message> - <source>Check</source> - <translation>ពិនិត្យមើល</translation> + <source>Select ActiveX Control</source> + <translation>ជ្រើសវត្ថុបញ្ជា ActiveX</translation> </message> <message> - <source>Toggle</source> - <translation>បិទ/បើក</translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> -</context> -<context> - <name>QColorDialog</name> <message> - <source>Hu&e:</source> - <translation>ភាពលាំៗនៃពណ៌ ៖</translation> + <source>&Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>&Sat:</source> - <translation>តិត្ថិភាព ៖</translation> + <source>COM &Object:</source> + <translation>វត្ថុ COM ៖</translation> </message> + </context> + <context> + <name>QCheckBox</name> <message> - <source>&Val:</source> - <translation>តម្លៃ ៖</translation> + <source>Uncheck</source> + <translation>មិនធូសធីគ</translation> </message> <message> - <source>&Red:</source> - <translation>ក្រហម ៖</translation> + <source>Check</source> + <translation>ពិនិត្យមើល</translation> </message> <message> - <source>&Green:</source> - <translation>បៃតង ៖</translation> + <source>Toggle</source> + <translation>បិទ/បើក</translation> </message> + </context> + <context> + <name>QColorDialog</name> <message> - <source>Bl&ue:</source> - <translation>ខៀវ ៖</translation> + <source>Hu&e:</source> + <translation>ភាពលាំៗនៃពណ៌ ៖</translation> </message> <message> - <source>A&lpha channel:</source> - <translation>ឆានែលអាល់ហ្វា ៖</translation> + <source>&Sat:</source> + <translation>តិត្ថិភាព ៖</translation> </message> <message> - <source>&Basic colors</source> - <translation>ពណ៌មូលដ្ឋាន</translation> + <source>&Val:</source> + <translation>តម្លៃ ៖</translation> </message> <message> - <source>&Custom colors</source> - <translation>ពណ៌ផ្ទាល់ខ្លួន</translation> + <source>&Red:</source> + <translation>ក្រហម ៖</translation> </message> <message> - <source>&Add to Custom Colors</source> - <translation>បន្ថែមពណ៌ផ្ទាល់ខ្លួន</translation> + <source>&Green:</source> + <translation>បៃតង ៖</translation> </message> <message> - <source>Select color</source> - <translation>ជ្រើសពណ៌</translation> + <source>Bl&ue:</source> + <translation>ខៀវ ៖</translation> </message> -</context> -<context> - <name>QComboBox</name> <message> - <source>Open</source> - <translation>បើក</translation> + <source>A&lpha channel:</source> + <translation>ឆានែលអាល់ហ្វា ៖</translation> </message> <message> - <source>False</source> - <translation>ខុស</translation> + <source>&Basic colors</source> + <translation>ពណ៌មូលដ្ឋាន</translation> </message> <message> - <source>True</source> - <translation>ត្រូវ</translation> + <source>&Custom colors</source> + <translation>ពណ៌ផ្ទាល់ខ្លួន</translation> </message> <message> - <source>Close</source> - <translation>បិទ</translation> + <source>&Define Custom Colors >></source> + <translation>កំណត់ពណ៌ផ្ទាល់ខ្លួន >></translation> </message> -</context> -<context> - <name>QCoreApplication</name> <message> - <source>%1: permission denied</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>%1: already exists</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>%1: doesn't exists</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>&Add to Custom Colors</source> + <translation>បន្ថែមពណ៌ផ្ទាល់ខ្លួន</translation> </message> <message> - <source>%1: out of resources</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>Select color</source> + <translation>ជ្រើសពណ៌</translation> </message> + </context> + <context> + <name>QComboBox</name> <message> - <source>%1: unknown error %2</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>Open</source> + <translation>បើក</translation> </message> <message> - <source>%1: key is empty</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>False</source> + <translation>ខុស</translation> </message> <message> - <source>%1: unable to make key</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>True</source> + <translation>ត្រូវ</translation> </message> <message> - <source>%1: ftok failed</source> - <comment>QSystemSemaphore</comment> - <translation type="unfinished"></translation> + <source>Close</source> + <translation>បិទ</translation> </message> -</context> -<context> + </context> + <context> <name>QDB2Driver</name> <message> - <source>Unable to connect</source> - <translation>មិនអាចតភ្ជាប់បានទេ</translation> + <source>Unable to connect</source> + <translation>មិនអាចតភ្ជាប់បានទេ</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>មិនអាចតភ្ជាប់ទៅកាក់ការបញ្ចូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to commit transaction</source> + <translation>មិនអាចតភ្ជាប់ទៅកាក់ការបញ្ចូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>មិនអាចជម្រះដំណើរការផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to rollback transaction</source> + <translation>មិនអាចជម្រះដំណើរការផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to set autocommit</source> - <translation>មិនអាចកំណត់ការបញ្ជូនដោយស្វ័យប្រវត្តិបានទេ</translation> + <source>Unable to set autocommit</source> + <translation>មិនអាចកំណត់ការបញ្ជូនដោយស្វ័យប្រវត្តិបានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QDB2Result</name> <message> - <source>Unable to execute statement</source> - <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការបានទេ</translation> + <source>Unable to execute statement</source> + <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការបានទេ</translation> </message> <message> - <source>Unable to prepare statement</source> - <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការបានទេ</translation> + <source>Unable to prepare statement</source> + <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការបានទេ</translation> </message> <message> - <source>Unable to bind variable</source> - <translation>មិនអាចចងអថេរបានទេ</translation> + <source>Unable to bind variable</source> + <translation>មិនអាចចងអថេរបានទេ</translation> </message> <message> - <source>Unable to fetch record %1</source> - <translation>មិនអាចទៅយកកំណត់ត្រា %1 បានទេ</translation> + <source>Unable to fetch record %1</source> + <translation>មិនអាចទៅយកកំណត់ត្រា %1 បានទេ</translation> </message> <message> - <source>Unable to fetch next</source> - <translation>មិនអាចទៅយកអ្វីនៅបន្ទាប់បានទេ</translation> + <source>Unable to fetch next</source> + <translation>មិនអាចទៅយកអ្វីនៅបន្ទាប់បានទេ</translation> </message> <message> - <source>Unable to fetch first</source> - <translation>មិនអាចទៅយកអ្វីដំបូងបានទេ</translation> + <source>Unable to fetch first</source> + <translation>មិនអាចទៅយកអ្វីដំបូងបានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QDateTimeEdit</name> <message> - <source>AM</source> - <translation>AM</translation> + <source>AM</source> + <translation>AM</translation> </message> <message> - <source>am</source> - <translation>am</translation> + <source>am</source> + <translation>am</translation> </message> <message> - <source>PM</source> - <translation>PM</translation> + <source>PM</source> + <translation>PM</translation> </message> <message> - <source>pm</source> - <translation>pm</translation> + <source>pm</source> + <translation>pm</translation> </message> -</context> -<context> + </context> + <context> <name>QDial</name> <message> - <source>QDial</source> - <translation>QDial</translation> + <source>QDial</source> + <translation>QDial</translation> </message> <message> - <source>SpeedoMeter</source> - <translation>SpeedoMeter</translation> + <source>SpeedoMeter</source> + <translation>SpeedoMeter</translation> </message> <message> - <source>SliderHandle</source> - <translation>SliderHandle</translation> + <source>SliderHandle</source> + <translation>SliderHandle</translation> </message> -</context> -<context> + </context> + <context> <name>QDialog</name> <message> - <source>What's This?</source> - <translation>តើនេះជាអ្វី ?</translation> - </message> - <message> - <source>Done</source> - <translation type="unfinished">ធ្វើរួច</translation> + <source>What's This?</source> + <translation>តើនេះជាអ្វី ?</translation> </message> -</context> -<context> + </context> + <context> <name>QDialogButtonBox</name> <message> - <source>OK</source> - <translation>យល់ព្រម</translation> - </message> - <message> - <source>Save</source> - <translation>រក្សាទុក</translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>Open</source> - <translation>បើក</translation> + <source>Save</source> + <translation>រក្សាទុក</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Open</source> + <translation>បើក</translation> </message> <message> - <source>Close</source> - <translation>បិទ</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>Apply</source> - <translation>អនុវត្ត</translation> + <source>Close</source> + <translation>បិទ</translation> </message> <message> - <source>Reset</source> - <translation>កំណត់ឡើងវិញ</translation> + <source>Apply</source> + <translation>អនុវត្ត</translation> </message> <message> - <source>Help</source> - <translation>ជំនួយ</translation> + <source>Reset</source> + <translation>កំណត់ឡើងវិញ</translation> </message> <message> - <source>Don't Save</source> - <translation>កុំរក្សាទុក</translation> + <source>Help</source> + <translation>ជំនួយ</translation> </message> <message> - <source>Discard</source> - <translation>បោះបង់</translation> + <source>Don't Save</source> + <translation>កុំរក្សាទុក</translation> </message> <message> - <source>&Yes</source> - <translation>បាទ/ចាស</translation> + <source>Discard</source> + <translation>បោះបង់</translation> </message> <message> - <source>Yes to &All</source> - <translation>បាទ/ចាសទៅទាំងអស់</translation> + <source>&Yes</source> + <translation>បាទ/ចាស</translation> </message> <message> - <source>&No</source> - <translation>ទេ</translation> + <source>Yes to &All</source> + <translation>បាទ/ចាសទៅទាំងអស់</translation> </message> <message> - <source>N&o to All</source> - <translation>ទេទៅទាំងអស់</translation> + <source>&No</source> + <translation>ទេ</translation> </message> <message> - <source>Save All</source> - <translation>រក្សាទុកទាំងអស់</translation> + <source>N&o to All</source> + <translation>ទេទៅទាំងអស់</translation> </message> <message> - <source>Abort</source> - <translation>បោះបង់</translation> + <source>Save All</source> + <translation>រក្សាទុកទាំងអស់</translation> </message> <message> - <source>Retry</source> - <translation>ព្យាយាមម្ដងទៀត</translation> + <source>Abort</source> + <translation>បោះបង់</translation> </message> <message> - <source>Ignore</source> - <translation>មិនអើពើ</translation> + <source>Retry</source> + <translation>ព្យាយាមម្ដងទៀត</translation> </message> <message> - <source>Restore Defaults</source> - <translation>ស្ដារលំនាំដើមឡើងវិញ</translation> + <source>Ignore</source> + <translation>មិនអើពើ</translation> </message> <message> - <source>Close without Saving</source> - <translation>បិទដោយមិនរក្សាទុក</translation> + <source>Restore Defaults</source> + <translation>ស្ដារលំនាំដើមឡើងវិញ</translation> </message> <message> - <source>&OK</source> - <translation type="unfinished">យល់ព្រម</translation> + <source>Close without Saving</source> + <translation>បិទដោយមិនរក្សាទុក</translation> </message> -</context> -<context> + </context> + <context> <name>QDirModel</name> <message> - <source>Name</source> - <translation>ឈ្មោះ</translation> + <source>Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Size</source> - <translation>ទំហំ</translation> + <source>Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>Kind</source> - <comment>Match OS X Finder</comment> - <translation>ប្រភេទ</translation> + <source>Kind</source> + <comment>Match OS X Finder</comment> + <translation>ប្រភេទ</translation> </message> <message> - <source>Type</source> - <comment>All other platforms</comment> - <translation>ប្រភេទ</translation> + <source>Type</source> + <comment>All other platforms</comment> + <translation>ប្រភេទ</translation> </message> <message> - <source>Date Modified</source> - <translation>កាលបរិច្ឆេទកែប្រែ</translation> + <source>Date Modified</source> + <translation>កាលបរិច្ឆេទកែប្រែ</translation> </message> -</context> -<context> + </context> + <context> <name>QDockWidget</name> <message> - <source>Close</source> - <translation>បិទ</translation> + <source>Close</source> + <translation>បិទ</translation> </message> <message> - <source>Dock</source> - <translation>ចូលផែ</translation> + <source>Dock</source> + <translation>ចូលផែ</translation> </message> <message> - <source>Float</source> - <translation>អណ្ដែត</translation> + <source>Float</source> + <translation>អណ្ដែត</translation> </message> -</context> -<context> + </context> + <context> <name>QDoubleSpinBox</name> <message> - <source>More</source> - <translation>ច្រើនជាង</translation> + <source>More</source> + <translation>ច្រើនជាង</translation> </message> <message> - <source>Less</source> - <translation>តិចជាង</translation> + <source>Less</source> + <translation>តិចជាង</translation> </message> -</context> -<context> + </context> + <context> <name>QErrorMessage</name> <message> - <source>Debug Message:</source> - <translation>សារបំបាត់កំហុស ៖</translation> + <source>Debug Message:</source> + <translation>សារបំបាត់កំហុស ៖</translation> </message> <message> - <source>Warning:</source> - <translation>ការព្រមាន ៖</translation> + <source>Warning:</source> + <translation>ការព្រមាន ៖</translation> </message> <message> - <source>Fatal Error:</source> - <translation>កំហុសធ្ងន់ធ្ងរ ៖</translation> + <source>Fatal Error:</source> + <translation>កំហុសធ្ងន់ធ្ងរ ៖</translation> </message> <message> - <source>&Show this message again</source> - <translation>បង្ហសារសារនេះម្ដងទៀត</translation> + <source>&Show this message again</source> + <translation>បង្ហសារសារនេះម្ដងទៀត</translation> </message> <message> - <source>&OK</source> - <translation>យល់ព្រម</translation> + <source>&OK</source> + <translation>យល់ព្រម</translation> </message> -</context> -<context> + </context> + <context> <name>QFileDialog</name> <message> - <source>All Files (*)</source> - <translation>ឯកសារទាំងអស់ (*)</translation> + <source>All Files (*)</source> + <translation>ឯកសារទាំងអស់ (*)</translation> </message> <message> - <source>Directories</source> - <translation>ថត</translation> + <source>Directories</source> + <translation>ថត</translation> </message> <message> - <source>&Open</source> - <translation>បើក</translation> + <source>&Open</source> + <translation>បើក</translation> </message> <message> - <source>&Save</source> - <translation>រក្សាទុក</translation> + <source>&Save</source> + <translation>រក្សាទុក</translation> </message> <message> - <source>Open</source> - <translation>បើក</translation> + <source>Open</source> + <translation>បើក</translation> </message> <message> - <source>%1 already exists. + <source>%1 already exists. Do you want to replace it?</source> - <translation>មាន %1 រួចហើយ ។ + <translation>មាន %1 រួចហើយ ។ តើអ្នកចង់ជំនួសវាទេ ?</translation> </message> <message> - <source>%1 + <source>%1 File not found. Please verify the correct file name was given.</source> - <translation>រកមិនឃើញឯកសារ %1 + <translation>រកមិនឃើញឯកសារ %1 ទេ ។សូមផ្ទៀងផ្ទាត់ឈ្មោះឯកសារដែលត្រឹមត្រូវត្រូវបានផ្ដល់ ។</translation> </message> <message> - <source>My Computer</source> - <translation>កុំព្យូទ័ររបស់ខ្ញុំ</translation> + <source>My Computer</source> + <translation>កុំព្យូទ័ររបស់ខ្ញុំ</translation> </message> <message> - <source>&Rename</source> - <translation>ប្ដូរឈ្មោះ</translation> + <source>&Rename</source> + <translation>ប្ដូរឈ្មោះ</translation> </message> <message> - <source>&Delete</source> - <translation>លុប</translation> + <source>&Delete</source> + <translation>លុប</translation> </message> <message> - <source>Show &hidden files</source> - <translation>បង្ហាញឯកសារដែលលាក់</translation> + <source>Show &hidden files</source> + <translation>បង្ហាញឯកសារដែលលាក់</translation> </message> <message> - <source>Back</source> - <translation>ថយក្រោយ</translation> + <source>Back</source> + <translation>ថយក្រោយ</translation> </message> <message> - <source>Parent Directory</source> - <translation>ថតមេ</translation> + <source>Parent Directory</source> + <translation>ថតមេ</translation> </message> <message> - <source>List View</source> - <translation>ទិដ្ឋភាពបញ្ជី</translation> + <source>List View</source> + <translation>ទិដ្ឋភាពបញ្ជី</translation> </message> <message> - <source>Detail View</source> - <translation>ទិដ្ឋភាពលម្អិត</translation> + <source>Detail View</source> + <translation>ទិដ្ឋភាពលម្អិត</translation> </message> <message> - <source>Files of type:</source> - <translation>ឯកសារប្រភេទ ៖</translation> + <source>Files of type:</source> + <translation>ឯកសារប្រភេទ ៖</translation> </message> <message> - <source>Directory:</source> - <translation>ថត ៖</translation> + <source>Directory:</source> + <translation>ថត ៖</translation> </message> <message> - <source>%1 + <source> +File not found. +Please verify the correct file name was given</source> + <translation> +រកមិនឃើញឯកសារ ។ +សូមផ្ទៀងផ្ទាត់ឈ្មោះឯកសារដែលត្រឹមត្រូវដែលត្រូវផ្ដល់</translation> + </message> + <message> + <source>%1 Directory not found. Please verify the correct directory name was given.</source> - <translation>រកមិនឃើញថត %1 ទេ ។ + <translation>រកមិនឃើញថត %1 ទេ ។ សូមផ្ទៀងផ្ទាត់ឈ្មោះថតដែលត្រឹមត្រូវដែលបានផ្ដល់ ។</translation> </message> <message> - <source>'%1' is write protected. + <source>'%1' is write protected. Do you want to delete it anyway?</source> - <translation>'%1' '%1' ការពារមិនឲ្យសរសេរចូល ។ + <translation>'%1' '%1' ការពារមិនឲ្យសរសេរចូល ។ បើអញ្ចឹង តើអ្នកចង់លុបវាដែរឬទេ ?</translation> </message> <message> - <source>Are sure you want to delete '%1'?</source> - <translation>តើអ្នកប្រាកដជាចង់លុប '%1'?</translation> - </message> - <message> - <source>Could not delete directory.</source> - <translation>មិនអាចលុបថតបានទេ ។</translation> - </message> - <message> - <source>Save As</source> - <translation>រក្សាទុកជា</translation> - </message> - <message> - <source>Drive</source> - <translation>ចូល</translation> - </message> - <message> - <source>File</source> - <translation>ឯកសារ</translation> - </message> - <message> - <source>Unknown</source> - <translation>មិនស្គាល់</translation> - </message> - <message> - <source>Find Directory</source> - <translation>រកថត</translation> - </message> - <message> - <source>Show </source> - <translation>បង្ហាញ </translation> - </message> - <message> - <source>Forward</source> - <translation>បញ្ជូនបន្ត</translation> - </message> - <message> - <source>New Folder</source> - <translation>ថតថ្មី</translation> - </message> - <message> - <source>&New Folder</source> - <translation>ថតថ្មី</translation> - </message> - <message> - <source>&Choose</source> - <translation>ជ្រើស</translation> - </message> - <message> - <source>Remove</source> - <translation>យកចេញ</translation> - </message> - <message> - <source>File &name:</source> - <translation>ឈ្មោះឯកសារ ៖</translation> - </message> - <message> - <source>Look in:</source> - <translation>រកក្នុង ៖</translation> - </message> - <message> - <source>Create New Folder</source> - <translation>បង្កើតថតថ្មី</translation> - </message> -</context> -<context> - <name>QFileSystemModel</name> - <message> - <source>Invalid filename</source> - <translation>ឈ្មោះឯកសារមិនត្រឹមត្រូវ</translation> - </message> - <message> - <source><b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.</source> - <translation><b>ឈ្មោះ "%1" មិនអាចត្រូវបានប្រើទេ ។</b><p>ព្យាយាមប្រើឈ្មោះផ្សេង ដែលមានតួអក្សរពីរបី ឬគ្មានសញ្ញាវណ្ណយុទ្ធ ។</translation> - </message> - <message> - <source>Name</source> - <translation>ឈ្មោះ</translation> - </message> - <message> - <source>Size</source> - <translation>ទំហំ</translation> - </message> - <message> - <source>Kind</source> - <comment>Match OS X Finder</comment> - <translation>ប្រភេទ</translation> - </message> - <message> - <source>Type</source> - <comment>All other platforms</comment> - <translation>ប្រភេទ</translation> - </message> - <message> - <source>Date Modified</source> - <translation>កាលបរិច្ឆេទបានកែប្រែ</translation> - </message> - <message> - <source>My Computer</source> - <translation>កុំព្យូទ័ររបស់ខ្ញុំ</translation> + <source>Are sure you want to delete '%1'?</source> + <translation>តើអ្នកប្រាកដជាចង់លុប '%1'?</translation> </message> <message> - <source>Computer</source> - <translation>កុំព្យូទ័រ</translation> + <source>Could not delete directory.</source> + <translation>មិនអាចលុបថតបានទេ ។</translation> </message> <message> - <source>%1 TB</source> - <translation>%1 តេរ៉ាបៃ</translation> + <source>All Files (*.*)</source> + <translation>ឯកសារទាំងអស់ (*.*)</translation> </message> <message> - <source>%1 GB</source> - <translation>%1 ជីកាបៃ</translation> + <source>Save As</source> + <translation>រក្សាទុកជា</translation> </message> <message> - <source>%1 MB</source> - <translation>%1 មេកាបៃ</translation> + <source>Drive</source> + <translation>ចូល</translation> </message> <message> - <source>%1 KB</source> - <translation>%1 គីឡូបៃ</translation> + <source>File</source> + <translation>ឯកសារ</translation> </message> <message> - <source>%1 bytes</source> - <translation>%1 បៃ</translation> + <source>Unknown</source> + <translation>មិនស្គាល់</translation> </message> -</context> -<context> - <name>QFontDatabase</name> <message> - <source>Normal</source> - <translation type="unfinished"></translation> + <source>Find Directory</source> + <translation>រកថត</translation> </message> <message> - <source>Bold</source> - <translation type="unfinished"></translation> + <source>Show </source> + <translation>បង្ហាញ </translation> </message> <message> - <source>Demi Bold</source> - <translation type="unfinished"></translation> + <source>Forward</source> + <translation>បញ្ជូនបន្ត</translation> </message> <message> - <source>Black</source> - <translation type="unfinished"></translation> + <source>New Folder</source> + <translation>ថតថ្មី</translation> </message> <message> - <source>Demi</source> - <translation type="unfinished"></translation> + <source>&New Folder</source> + <translation>ថតថ្មី</translation> </message> <message> - <source>Light</source> - <translation type="unfinished"></translation> + <source>&Choose</source> + <translation>ជ្រើស</translation> </message> <message> - <source>Italic</source> - <translation type="unfinished"></translation> + <source>Remove</source> + <translation>យកចេញ</translation> </message> <message> - <source>Oblique</source> - <translation type="unfinished"></translation> + <source>File &name:</source> + <translation>ឈ្មោះឯកសារ ៖</translation> </message> <message> - <source>Any</source> - <translation type="unfinished"></translation> + <source>Look in:</source> + <translation>រកក្នុង ៖</translation> </message> <message> - <source>Latin</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Greek</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Cyrillic</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Armenian</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Hebrew</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Arabic</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Syriac</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Thaana</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Devanagari</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Bengali</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Gurmukhi</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Gujarati</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Oriya</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Tamil</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Telugu</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Kannada</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Malayalam</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Sinhala</source> - <translation type="unfinished"></translation> + <source>Create New Folder</source> + <translation>បង្កើតថតថ្មី</translation> </message> + </context> + <context> + <name>QFileSystemModel</name> <message> - <source>Thai</source> - <translation type="unfinished"></translation> + <source>Invalid filename</source> + <translation>ឈ្មោះឯកសារមិនត្រឹមត្រូវ</translation> </message> <message> - <source>Lao</source> - <translation type="unfinished"></translation> + <source><b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.</source> + <translation><b>ឈ្មោះ "%1" មិនអាចត្រូវបានប្រើទេ ។</b><p>ព្យាយាមប្រើឈ្មោះផ្សេង ដែលមានតួអក្សរពីរបី ឬគ្មានសញ្ញាវណ្ណយុទ្ធ ។</translation> </message> <message> - <source>Tibetan</source> - <translation type="unfinished"></translation> + <source>Name</source> + <translation>ឈ្មោះ</translation> </message> <message> - <source>Myanmar</source> - <translation type="unfinished"></translation> + <source>Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>Georgian</source> - <translation type="unfinished"></translation> + <source>Kind</source> + <comment>Match OS X Finder</comment> + <translation>ប្រភេទ</translation> </message> <message> - <source>Khmer</source> - <translation type="unfinished"></translation> + <source>Type</source> + <comment>All other platforms</comment> + <translation>ប្រភេទ</translation> </message> <message> - <source>Simplified Chinese</source> - <translation type="unfinished"></translation> + <source>Date Modified</source> + <translation>កាលបរិច្ឆេទបានកែប្រែ</translation> </message> <message> - <source>Traditional Chinese</source> - <translation type="unfinished"></translation> + <source>My Computer</source> + <translation>កុំព្យូទ័ររបស់ខ្ញុំ</translation> </message> <message> - <source>Japanese</source> - <translation type="unfinished"></translation> + <source>Computer</source> + <translation>កុំព្យូទ័រ</translation> </message> <message> - <source>Korean</source> - <translation type="unfinished"></translation> + <source>%1 TB</source> + <translation>%1 តេរ៉ាបៃ</translation> </message> <message> - <source>Vietnamese</source> - <translation type="unfinished"></translation> + <source>%1 GB</source> + <translation>%1 ជីកាបៃ</translation> </message> <message> - <source>Symbol</source> - <translation type="unfinished"></translation> + <source>%1 MB</source> + <translation>%1 មេកាបៃ</translation> </message> <message> - <source>Ogham</source> - <translation type="unfinished"></translation> + <source>%1 KB</source> + <translation>%1 គីឡូបៃ</translation> </message> <message> - <source>Runic</source> - <translation type="unfinished"></translation> + <source>%1 bytes</source> + <translation>%1 បៃ</translation> </message> -</context> -<context> + </context> + <context> <name>QFontDialog</name> <message> - <source>&Font</source> - <translation>ពុម្ពអក្សរ</translation> + <source>&Font</source> + <translation>ពុម្ពអក្សរ</translation> </message> <message> - <source>Font st&yle</source> - <translation>រចនាប័ទ្មពុម្ពអក្សរ</translation> + <source>Font st&yle</source> + <translation>រចនាប័ទ្មពុម្ពអក្សរ</translation> </message> <message> - <source>&Size</source> - <translation>ទំហំ</translation> + <source>&Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>Effects</source> - <translation>បែបផែន</translation> + <source>Effects</source> + <translation>បែបផែន</translation> </message> <message> - <source>Stri&keout</source> - <translation>លុបចោល</translation> + <source>Stri&keout</source> + <translation>លុបចោល</translation> </message> <message> - <source>&Underline</source> - <translation>គូសបន្ទាត់ពីក្រោម</translation> + <source>&Underline</source> + <translation>គូសបន្ទាត់ពីក្រោម</translation> </message> <message> - <source>Sample</source> - <translation>គំរូ</translation> + <source>Sample</source> + <translation>គំរូ</translation> </message> <message> - <source>Wr&iting System</source> - <translation>ប្រព័ន្ធសរសេរ</translation> + <source>Wr&iting System</source> + <translation>ប្រព័ន្ធសរសេរ</translation> </message> <message> - <source>Select Font</source> - <translation>ជ្រើសពុម្ពអក្សរ</translation> + <source>Select Font</source> + <translation>ជ្រើសពុម្ពអក្សរ</translation> </message> -</context> -<context> + </context> + <context> <name>QFtp</name> <message> - <source>Not connected</source> - <translation>មិនបានតភ្ជាប់ទេ</translation> + <source>Not connected</source> + <translation>មិនបានតភ្ជាប់ទេ</translation> </message> <message> - <source>Host %1 not found</source> - <translation>រកមិនឃើញម៉ាស៊ីន %1 ទេ</translation> + <source>Host %1 not found</source> + <translation>រកមិនឃើញម៉ាស៊ីន %1 ទេ</translation> </message> <message> - <source>Connection refused to host %1</source> - <translation>ការតភ្ជាប់បានបដិសេធទៅម៉ាស៊ីន %1</translation> + <source>Connection refused to host %1</source> + <translation>ការតភ្ជាប់បានបដិសេធទៅម៉ាស៊ីន %1</translation> </message> <message> - <source>Connected to host %1</source> - <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន %1</translation> + <source>Connected to host %1</source> + <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន %1</translation> </message> <message> - <source>Connection refused for data connection</source> - <translation>ការតភ្ជាប់បានបដិសេធសម្រាប់ការតភ្ជាប់ទិន្នន័យ</translation> + <source>Connection refused for data connection</source> + <translation>ការតភ្ជាប់បានបដិសេធសម្រាប់ការតភ្ជាប់ទិន្នន័យ</translation> </message> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> <message> - <source>Connecting to host failed: + <source>Connecting to host failed: %1</source> - <translation>បានបរាជ័យក្នុងការតភ្ជាប់ទៅកាន់ ៖ + <translation>បានបរាជ័យក្នុងការតភ្ជាប់ទៅកាន់ ៖ %1</translation> </message> <message> - <source>Login failed: + <source>Login failed: %1</source> - <translation>បានបរាជ័យក្នុងការ ៖ + <translation>បានបរាជ័យក្នុងការ ៖ %1</translation> </message> <message> - <source>Listing directory failed: + <source>Listing directory failed: %1</source> - <translation>បានបរាជ័យក្នុងរកថត ៖ + <translation>បានបរាជ័យក្នុងរកថត ៖ %1</translation> </message> <message> - <source>Changing directory failed: + <source>Changing directory failed: %1</source> - <translation>បានបរាជ័យក្នុងការផ្លាស់ប្ដូរថត ៖ + <translation>បានបរាជ័យក្នុងការផ្លាស់ប្ដូរថត ៖ %1</translation> </message> <message> - <source>Downloading file failed: + <source>Downloading file failed: %1</source> - <translation>បានបរាជ័យក្នុងការទាញយកឯកសារ ៖ + <translation>បានបរាជ័យក្នុងការទាញយកឯកសារ ៖ %1</translation> </message> <message> - <source>Uploading file failed: + <source>Uploading file failed: %1</source> - <translation>បានបរាជ័យក្នុងការផ្ទុកឯកសារឡើង ៖ + <translation>បានបរាជ័យក្នុងការផ្ទុកឯកសារឡើង ៖ %1</translation> </message> <message> - <source>Removing file failed: + <source>Removing file failed: %1</source> - <translation>បានបរាជ័យក្នុងការយកឯកសារចេញ ៖ + <translation>បានបរាជ័យក្នុងការយកឯកសារចេញ ៖ %1</translation> </message> <message> - <source>Creating directory failed: + <source>Creating directory failed: %1</source> - <translation>បានបរាជ័យក្នុងការបង្កើតថត ៖ + <translation>បានបរាជ័យក្នុងការបង្កើតថត ៖ %1</translation> </message> <message> - <source>Removing directory failed: + <source>Removing directory failed: %1</source> - <translation>បានបរាជ័យក្នុងការយកថតចេញ ៖ + <translation>បានបរាជ័យក្នុងការយកថតចេញ ៖ %1</translation> </message> <message> - <source>Connection closed</source> - <translation>បានបិទការតភ្ជាប់</translation> + <source>Connection closed</source> + <translation>បានបិទការតភ្ជាប់</translation> </message> <message> - <source>Host %1 found</source> - <translation>រកឃើញម៉ាស៊ីន %1</translation> + <source>Host %1 found</source> + <translation>រកឃើញម៉ាស៊ីន %1</translation> </message> <message> - <source>Connection to %1 closed</source> - <translation>បានបិទការតភ្ជាប់ទៅកាន់ %1</translation> + <source>Connection to %1 closed</source> + <translation>បានបិទការតភ្ជាប់ទៅកាន់ %1</translation> </message> <message> - <source>Host found</source> - <translation>រកឃើញម៉ាស៊ីន</translation> + <source>Host found</source> + <translation>រកឃើញម៉ាស៊ីន</translation> </message> <message> - <source>Connected to host</source> - <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន</translation> + <source>Connected to host</source> + <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន</translation> </message> -</context> -<context> + </context> + <context> <name>QHostInfo</name> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> -</context> -<context> + </context> + <context> <name>QHostInfoAgent</name> <message> - <source>Host not found</source> - <translation>រកមិនឃើញកំហុស</translation> + <source>Host not found</source> + <translation>រកមិនឃើញកំហុស</translation> </message> <message> - <source>Unknown address type</source> - <translation>មិនស្គាល់ប្រភេទអាសយដ្ឋាន</translation> + <source>Unknown address type</source> + <translation>មិនស្គាល់ប្រភេទអាសយដ្ឋាន</translation> </message> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> -</context> -<context> + </context> + <context> <name>QHttp</name> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> - </message> - <message> - <source>Request aborted</source> - <translation>បានបោះបង់សំណើ</translation> - </message> - <message> - <source>No server set to connect to</source> - <translation>គ្មានម៉ាស៊ីនបម្រើបានកំណត់ដើម្បីតភ្ជាប់ទៅ</translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> <message> - <source>Wrong content length</source> - <translation>ប្រវែងមាតិកាមិនត្រឹមត្រូវ</translation> + <source>Request aborted</source> + <translation>បានបោះបង់សំណើ</translation> </message> <message> - <source>Server closed connection unexpectedly</source> - <translation>ម៉ាស៊ីនបម្រើបានបិទការតភ្ជាប់ដោយមិនរំពឹងទុក</translation> + <source>No server set to connect to</source> + <translation>គ្មានម៉ាស៊ីនបម្រើបានកំណត់ដើម្បីតភ្ជាប់ទៅ</translation> </message> <message> - <source>Connection refused</source> - <translation>បានបដិសេធការតភ្ជាប់</translation> + <source>Wrong content length</source> + <translation>ប្រវែងមាតិកាមិនត្រឹមត្រូវ</translation> </message> <message> - <source>Host %1 not found</source> - <translation>រកមិនឃើញម៉ាស៊ីន %1</translation> + <source>Server closed connection unexpectedly</source> + <translation>ម៉ាស៊ីនបម្រើបានបិទការតភ្ជាប់ដោយមិនរំពឹងទុក</translation> </message> <message> - <source>HTTP request failed</source> - <translation>បានបរាជ័យក្នុងការស្នើ HTTP</translation> + <source>Connection refused</source> + <translation>បានបដិសេធការតភ្ជាប់</translation> </message> <message> - <source>Invalid HTTP response header</source> - <translation>បឋមកថាការឆ្លើយតបរបស់ HTTP</translation> + <source>Host %1 not found</source> + <translation>រកមិនឃើញម៉ាស៊ីន %1</translation> </message> <message> - <source>Invalid HTTP chunked body</source> - <translation>តួ HTTP មិនត្រឹមត្រូវ</translation> + <source>HTTP request failed</source> + <translation>បានបរាជ័យក្នុងការស្នើ HTTP</translation> </message> <message> - <source>Host %1 found</source> - <translation>រកឃើញម៉ាស៊ីន %1</translation> + <source>Invalid HTTP response header</source> + <translation>បឋមកថាការឆ្លើយតបរបស់ HTTP</translation> </message> <message> - <source>Connected to host %1</source> - <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន %1</translation> + <source>Invalid HTTP chunked body</source> + <translation>តួ HTTP មិនត្រឹមត្រូវ</translation> </message> <message> - <source>Connection to %1 closed</source> - <translation>បានបិទការតភ្ជាប់ទៅកាន់ %1</translation> + <source>Host %1 found</source> + <translation>រកឃើញម៉ាស៊ីន %1</translation> </message> <message> - <source>Host found</source> - <translation>រកឃើញម៉ាស៊ីន</translation> + <source>Connected to host %1</source> + <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន %1</translation> </message> <message> - <source>Connected to host</source> - <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន</translation> + <source>Connection to %1 closed</source> + <translation>បានបិទការតភ្ជាប់ទៅកាន់ %1</translation> </message> <message> - <source>Connection closed</source> - <translation>បានបិទការតភ្ជាប់</translation> + <source>Host found</source> + <translation>រកឃើញម៉ាស៊ីន</translation> </message> <message> - <source>Proxy authentication required</source> - <translation>ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ប្រូកស៊ី</translation> + <source>Connected to host</source> + <translation>បានតភ្ជាប់ទៅកាន់ម៉ាស៊ីន</translation> </message> <message> - <source>Authentication required</source> - <translation>ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ</translation> + <source>Connection closed</source> + <translation>បានបិទការតភ្ជាប់</translation> </message> <message> - <source>HTTPS connection requested but SSL support not compiled in</source> - <translation type="unfinished"></translation> + <source>Proxy authentication required</source> + <translation>ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ប្រូកស៊ី</translation> </message> <message> - <source>Connection refused (or timed out)</source> - <translation type="unfinished"></translation> + <source>Authentication required</source> + <translation>ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ</translation> </message> - <message> - <source>Proxy requires authentication</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Host requires authentication</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Data corrupted</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unknown protocol specified</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>SSL handshake failed</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QHttpSocketEngine</name> <message> - <source>Authentication required</source> - <translation>ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ</translation> + <source>Authentication required</source> + <translation>ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ</translation> </message> -</context> -<context> + </context> + <context> <name>QIBaseDriver</name> <message> - <source>Error opening database</source> - <translation>កំហុសក្នុងការបើកមូលដ្ឋានទិន្នន័យ</translation> + <source>Error opening database</source> + <translation>កំហុសក្នុងការបើកមូលដ្ឋានទិន្នន័យ</translation> </message> <message> - <source>Could not start transaction</source> - <translation>មិនអាចចាប់ផ្ដើមដំណើរការផ្លាស់ប្ដូរ</translation> + <source>Could not start transaction</source> + <translation>មិនអាចចាប់ផ្ដើមដំណើរការផ្លាស់ប្ដូរ</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>មិនអាចបញ្ជូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to commit transaction</source> + <translation>មិនអាចបញ្ជូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>មិនអាចជម្រះដំណើរការផ្លាស់ប្ដូរ</translation> + <source>Unable to rollback transaction</source> + <translation>មិនអាចជម្រះដំណើរការផ្លាស់ប្ដូរ</translation> </message> -</context> -<context> + </context> + <context> <name>QIBaseResult</name> <message> - <source>Unable to create BLOB</source> - <translation>មិនអាចបង្កើតប្លុកបានទេ</translation> + <source>Unable to create BLOB</source> + <translation>មិនអាចបង្កើតប្លុកបានទេ</translation> </message> <message> - <source>Unable to write BLOB</source> - <translation>មិនអាចសរសេរប្លុកបានទេ</translation> + <source>Unable to write BLOB</source> + <translation>មិនអាចសរសេរប្លុកបានទេ</translation> </message> <message> - <source>Unable to open BLOB</source> - <translation>មិនអាចបើកប្លុកបានទេ</translation> + <source>Unable to open BLOB</source> + <translation>មិនអាចបើកប្លុកបានទេ</translation> </message> <message> - <source>Unable to read BLOB</source> - <translation>មិនអាចអានប្លុកបានទេ</translation> + <source>Unable to read BLOB</source> + <translation>មិនអាចអានប្លុកបានទេ</translation> </message> <message> - <source>Could not find array</source> - <translation>មិនអាចរកអារ៉េឃើញទេ</translation> + <source>Could not find array</source> + <translation>មិនអាចរកអារ៉េឃើញទេ</translation> </message> <message> - <source>Could not get array data</source> - <translation>មិនអាចយកទិន្នន័យអារ៉េបានទេ</translation> + <source>Could not get array data</source> + <translation>មិនអាចយកទិន្នន័យអារ៉េបានទេ</translation> </message> <message> - <source>Could not get query info</source> - <translation>មិនអាចយកព័ត៌មានសំណួរបានទេ</translation> + <source>Could not get query info</source> + <translation>មិនអាចយកព័ត៌មានសំណួរបានទេ</translation> </message> <message> - <source>Could not start transaction</source> - <translation>មិនអាចចាប់ផ្ដើមដំណើរការផ្លាស់ប្ដូរបានទេ</translation> + <source>Could not start transaction</source> + <translation>មិនអាចចាប់ផ្ដើមដំណើរការផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>មិនអាចបញ្ជូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to commit transaction</source> + <translation>មិនអាចបញ្ជូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Could not allocate statement</source> - <translation>មិនអាចបម្រុងទុកសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Could not allocate statement</source> + <translation>មិនអាចបម្រុងទុកសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Could not prepare statement</source> - <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍</translation> + <source>Could not prepare statement</source> + <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍</translation> </message> <message> - <source>Could not describe input statement</source> - <translation>មិនអាចពិពណ៌នាសេចក្ដីថ្លែងការណ៍បញ្ចូល</translation> + <source>Could not describe input statement</source> + <translation>មិនអាចពិពណ៌នាសេចក្ដីថ្លែងការណ៍បញ្ចូល</translation> </message> <message> - <source>Could not describe statement</source> - <translation>មិនអាចពិពណ៌នាសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Could not describe statement</source> + <translation>មិនអាចពិពណ៌នាសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to close statement</source> - <translation>មិនអាចបិទសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to close statement</source> + <translation>មិនអាចបិទសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to execute query</source> - <translation>មិនអាចប្រតិបត្តិសំណួរបានទេ</translation> + <source>Unable to execute query</source> + <translation>មិនអាចប្រតិបត្តិសំណួរបានទេ</translation> </message> <message> - <source>Could not fetch next item</source> - <translation>មិនអាចទៅយកធាតុបន្ទាប់បានទេ</translation> + <source>Could not fetch next item</source> + <translation>មិនអាចទៅយកធាតុបន្ទាប់បានទេ</translation> </message> <message> - <source>Could not get statement info</source> - <translation>មិនអាចយកព័ត៌មានសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Could not get statement info</source> + <translation>មិនអាចយកព័ត៌មានសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QIODevice</name> <message> - <source>Permission denied</source> - <translation>គ្មានសិទ្ធិ</translation> + <source>Permission denied</source> + <translation>គ្មានសិទ្ធិ</translation> </message> <message> - <source>Too many open files</source> - <translation>មានឯកសារបើកច្រើនពេក</translation> + <source>Too many open files</source> + <translation>មានឯកសារបើកច្រើនពេក</translation> </message> <message> - <source>No such file or directory</source> - <translation>គ្មានឯកសារ ឬថតបែបនេះទេ</translation> + <source>No such file or directory</source> + <translation>គ្មានឯកសារ ឬថតបែបនេះទេ</translation> </message> <message> - <source>No space left on device</source> - <translation>គ្មានទំហំនៅសល់នៅក្នុងឧបករណ៍នេះទេ</translation> + <source>No space left on device</source> + <translation>គ្មានទំហំនៅសល់នៅក្នុងឧបករណ៍នេះទេ</translation> </message> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> -</context> -<context> + </context> + <context> <name>QInputContext</name> <message> - <source>XIM</source> - <translation>XIM</translation> + <source>XIM</source> + <translation>XIM</translation> </message> <message> - <source>XIM input method</source> - <translation>វិធីសាស្ត្របញ្ចូល XIM</translation> + <source>XIM input method</source> + <translation>វិធីសាស្ត្របញ្ចូល XIM</translation> </message> <message> - <source>Windows input method</source> - <translation>វិធីសាស្ត្របញ្ចូលវីនដូ</translation> + <source>Windows input method</source> + <translation>វិធីសាស្ត្របញ្ចូលវីនដូ</translation> </message> <message> - <source>Mac OS X input method</source> - <translation>វិធីសាស្ត្របញ្ចូលរបស់ Mac OS X</translation> + <source>Mac OS X input method</source> + <translation>វិធីសាស្ត្របញ្ចូលរបស់ Mac OS X</translation> </message> -</context> -<context> + </context> + <context> <name>QLibrary</name> <message> - <source>QLibrary::load_sys: Cannot load %1 (%2)</source> - <translation>QLibrary::load_sys ៖ មិនអាចផ្ទុក %1 (%2) បានទេ</translation> + <source>QLibrary::load_sys: Cannot load %1 (%2)</source> + <translation>QLibrary::load_sys ៖ មិនអាចផ្ទុក %1 (%2) បានទេ</translation> </message> <message> - <source>QLibrary::unload_sys: Cannot unload %1 (%2)</source> - <translation>QLibrary::unload_sys ៖ មិនអាចមិនផ្ទុកបានទេ %1 (%2)</translation> + <source>QLibrary::unload_sys: Cannot unload %1 (%2)</source> + <translation>QLibrary::unload_sys ៖ មិនអាចមិនផ្ទុកបានទេ %1 (%2)</translation> </message> <message> - <source>QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3)</source> - <translation>QLibrary::resolve_sys: Symbol "%1" មិនបានកំណត់នៅក្នុង %2 (%3)</translation> + <source>QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3)</source> + <translation>QLibrary::resolve_sys: Symbol "%1" មិនបានកំណត់នៅក្នុង %2 (%3)</translation> </message> <message> - <source>Could not mmap '%1': %2</source> - <translation>មិនអាច mmap '%1' ៖ %2 បានទេ</translation> + <source>Could not mmap '%1': %2</source> + <translation>មិនអាច mmap '%1' ៖ %2 បានទេ</translation> </message> <message> - <source>Plugin verification data mismatch in '%1'</source> - <translation>ទិន្នន័យផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់កម្មវិធីជំនួយមិនផ្គូផ្គងនៅក្នុង '%1' ទេ</translation> + <source>Plugin verification data mismatch in '%1'</source> + <translation>ទិន្នន័យផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់កម្មវិធីជំនួយមិនផ្គូផ្គងនៅក្នុង '%1' ទេ</translation> </message> <message> - <source>Could not unmap '%1': %2</source> - <translation>មិនអាច unmap '%1': %2</translation> + <source>Could not unmap '%1': %2</source> + <translation>មិនអាច unmap '%1': %2</translation> </message> <message> - <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> - <translation>កម្មវិធីជំនួយ '%1' ប្រើបណ្ណាល័យ Qt មិនឆបគ្នា ។ (%2.%3.%4) [%5]</translation> + <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> + <translation>កម្មវិធីជំនួយ '%1' ប្រើបណ្ណាល័យ Qt មិនឆបគ្នា ។ (%2.%3.%4) [%5]</translation> </message> <message> - <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> - <translation>កម្មវិធីជំនួយ '%1' ប្រើបណ្ណាល័យ Qt មិនឆបគ្នា ។ សោស្ថាបនាដែលបានរំពឹងទុកគឺ "%2" បានទទួល "%3"</translation> + <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> + <translation>កម្មវិធីជំនួយ '%1' ប្រើបណ្ណាល័យ Qt មិនឆបគ្នា ។ សោស្ថាបនាដែលបានរំពឹងទុកគឺ "%2" បានទទួល "%3"</translation> </message> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> <message> - <source>The shared library was not found.</source> - <translation>រកមិនឃើញបណ្ណាល័យរួម ។</translation> + <source>The shared library was not found.</source> + <translation>រកមិនឃើញបណ្ណាល័យរួម ។</translation> </message> <message> - <source>The file '%1' is not a valid Qt plugin.</source> - <translation>ឯកសារ '%1' មិនមែនជាកម្មវិធី Qt ត្រឹមត្រូវទេ ។</translation> + <source>The file '%1' is not a valid Qt plugin.</source> + <translation>ឯកសារ '%1' មិនមែនជាកម្មវិធី Qt ត្រឹមត្រូវទេ ។</translation> </message> <message> - <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source> - <translation>កម្មវិធីជំនួយ '%1' ប្រើបណ្ណាល័យ Qt មិនឆបគ្នា ។ (មិនអាចបញ្ចូលបណ្ណាល័យបំបាត់កំហុស និងចេញផ្សាយបានទេ ។)</translation> + <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source> + <translation>កម្មវិធីជំនួយ '%1' ប្រើបណ្ណាល័យ Qt មិនឆបគ្នា ។ (មិនអាចបញ្ចូលបណ្ណាល័យបំបាត់កំហុស និងចេញផ្សាយបានទេ ។)</translation> </message> -</context> -<context> + </context> + <context> <name>QLineEdit</name> <message> - <source>&Undo</source> - <translation>មិនធ្វើវិញ</translation> - </message> - <message> - <source>&Redo</source> - <translation>ធ្វើវិញ</translation> + <source>&Undo</source> + <translation>មិនធ្វើវិញ</translation> </message> <message> - <source>Cu&t</source> - <translation>កាត់</translation> + <source>&Redo</source> + <translation>ធ្វើវិញ</translation> </message> <message> - <source>&Copy</source> - <translation>ចម្លង</translation> + <source>Cu&t</source> + <translation>កាត់</translation> </message> <message> - <source>&Paste</source> - <translation>បិទភ្ជាប់</translation> + <source>&Copy</source> + <translation>ចម្លង</translation> </message> <message> - <source>Delete</source> - <translation>លុប</translation> + <source>&Paste</source> + <translation>បិទភ្ជាប់</translation> </message> <message> - <source>Select All</source> - <translation>ជ្រើសទាំងអស់</translation> + <source>Delete</source> + <translation>លុប</translation> </message> -</context> -<context> - <name>QLocalServer</name> <message> - <source>%1: Name error</source> - <translation type="unfinished"></translation> + <source>Select All</source> + <translation>ជ្រើសទាំងអស់</translation> </message> - <message> - <source>%1: Permission denied</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Address in use</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Unknown error %2</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>QLocalSocket</name> - <message> - <source>%1: Connection refused</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Remote closed</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Invalid name</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Socket access error</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Socket resource error</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Socket operation timed out</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Datagram too large</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Connection error</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: The socket operation is not supported</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: Unknown error %2</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QMYSQLDriver</name> <message> - <source>Unable to open database '</source> - <translation>មិនអាចបើកមូលដ្ឋានទិន្នន័យបានទេ '</translation> + <source>Unable to open database '</source> + <translation>មិនអាចបើកមូលដ្ឋានទិន្នន័យបានទេ '</translation> </message> <message> - <source>Unable to connect</source> - <translation>មិនអាចតភ្ជាប់បានទេ</translation> + <source>Unable to connect</source> + <translation>មិនអាចតភ្ជាប់បានទេ</translation> </message> <message> - <source>Unable to begin transaction</source> - <translation>មិនអាចចាប់ផ្ដើមដំណើរការផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to begin transaction</source> + <translation>មិនអាចចាប់ផ្ដើមដំណើរការផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>មិនអាចបញ្ជូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to commit transaction</source> + <translation>មិនអាចបញ្ជូនដំណើរការផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរ</translation> + <source>Unable to rollback transaction</source> + <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរ</translation> </message> -</context> -<context> + </context> + <context> <name>QMYSQLResult</name> <message> - <source>Unable to fetch data</source> - <translation>មិនអាចទៅយកទិន្នន័យបានទេ</translation> - </message> - <message> - <source>Unable to execute query</source> - <translation>មិនអាចប្រតិបត្តិសំណួរបានទេ</translation> - </message> - <message> - <source>Unable to store result</source> - <translation>មិនអាចផ្ទុកលទ្ធផលបានទេ</translation> - </message> - <message> - <source>Unable to prepare statement</source> - <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to fetch data</source> + <translation>មិនអាចទៅយកទិន្នន័យបានទេ</translation> </message> <message> - <source>Unable to reset statement</source> - <translation>មិនអាចកំណត់សេចក្ដីថ្លែងការណ៍ឡើងវិញបានទេ</translation> + <source>Unable to execute query</source> + <translation>មិនអាចប្រតិបត្តិសំណួរបានទេ</translation> </message> <message> - <source>Unable to bind value</source> - <translation>មិនអាចចងតម្លៃបានទេ</translation> + <source>Unable to store result</source> + <translation>មិនអាចផ្ទុកលទ្ធផលបានទេ</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to prepare statement</source> + <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to bind outvalues</source> - <translation>មិនអាចចងតម្លៃខាងក្រៅបានទេ</translation> + <source>Unable to reset statement</source> + <translation>មិនអាចកំណត់សេចក្ដីថ្លែងការណ៍ឡើងវិញបានទេ</translation> </message> <message> - <source>Unable to store statement results</source> - <translation>មិនអាចផ្ទុកលទ្ធផលសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to bind value</source> + <translation>មិនអាចចងតម្លៃបានទេ</translation> </message> <message> - <source>Unable to execute next query</source> - <translation type="unfinished"></translation> + <source>Unable to execute statement</source> + <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to store next result</source> - <translation type="unfinished"></translation> + <source>Unable to bind outvalues</source> + <translation>មិនអាចចងតម្លៃខាងក្រៅបានទេ</translation> </message> -</context> -<context> - <name>QMdiArea</name> <message> - <source>(Untitled)</source> - <translation type="unfinished"></translation> + <source>Unable to store statement results</source> + <translation>មិនអាចផ្ទុកលទ្ធផលសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QMdiSubWindow</name> <message> - <source>%1 - [%2]</source> - <translation>%1 - [%2]</translation> - </message> - <message> - <source>Close</source> - <translation>បិទ</translation> - </message> - <message> - <source>Minimize</source> - <translation>បង្រួមអប្បបរមា</translation> - </message> - <message> - <source>Restore Down</source> - <translation>ស្ដារឡើងវិញចុះក្រោម</translation> + <source>%1 - [%2]</source> + <translation>%1 - [%2]</translation> </message> <message> - <source>&Restore</source> - <translation>ស្ដារឡើងវិញ</translation> + <source>Close</source> + <translation>បិទ</translation> </message> <message> - <source>&Move</source> - <translation>ផ្លាស់ទី</translation> + <source>Minimize</source> + <translation>បង្រួមអប្បបរមា</translation> </message> <message> - <source>&Size</source> - <translation>ទំហំ</translation> + <source>Restore Down</source> + <translation>ស្ដារឡើងវិញចុះក្រោម</translation> </message> <message> - <source>Mi&nimize</source> - <translation>បង្រួមអប្បបរមា</translation> + <source>&Restore</source> + <translation>ស្ដារឡើងវិញ</translation> </message> <message> - <source>Ma&ximize</source> - <translation>ពង្រីកអតិបរមា</translation> + <source>&Move</source> + <translation>ផ្លាស់ទី</translation> </message> <message> - <source>Stay on &Top</source> - <translation>នៅខាងលើ</translation> + <source>&Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>&Close</source> - <translation>បិទ</translation> + <source>Mi&nimize</source> + <translation>បង្រួមអប្បបរមា</translation> </message> <message> - <source>- [%1]</source> - <translation type="unfinished"></translation> + <source>Ma&ximize</source> + <translation>ពង្រីកអតិបរមា</translation> </message> <message> - <source>Maximize</source> - <translation type="unfinished">ពង្រីកអតិបរមា</translation> + <source>Stay on &Top</source> + <translation>នៅខាងលើ</translation> </message> <message> - <source>Unshade</source> - <translation type="unfinished"></translation> + <source>&Close</source> + <translation>បិទ</translation> </message> - <message> - <source>Shade</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Restore</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Help</source> - <translation type="unfinished">ជំនួយ</translation> - </message> - <message> - <source>Menu</source> - <translation type="unfinished">ម៉ឺនុយ</translation> - </message> -</context> -<context> + </context> + <context> <name>QMenu</name> <message> - <source>Close</source> - <translation>បិទ</translation> + <source>Close</source> + <translation>បិទ</translation> </message> <message> - <source>Open</source> - <translation>បើក</translation> + <source>Open</source> + <translation>បើក</translation> </message> <message> - <source>Execute</source> - <translation>ប្រតិបត្តិ</translation> + <source>Execute</source> + <translation>ប្រតិបត្តិ</translation> </message> -</context> -<context> - <name>QMessageBox</name> + </context> + <context> + <name>QMenuBar</name> <message> - <source>Help</source> - <translation>ជំនួយ</translation> + <source>About</source> + <translation>អំពី</translation> </message> <message> - <source>OK</source> - <translation>យល់ព្រម</translation> + <source>Config</source> + <translation>កំណត់រចនាសម្ព័ន្ធ</translation> </message> <message> - <source>About Qt</source> - <translation>អំពី Qt</translation> + <source>Preference</source> + <translation>ចំណូលចិត្ត</translation> </message> <message> - <source><p>This program uses Qt version %1.</p></source> - <translation><p>កម្មវិធីនេះប្រើកំណែ Qt %1 ។</p></translation> + <source>Options</source> + <translation>ជម្រើស</translation> </message> <message> - <source>Show Details...</source> - <translation>បង្ហាញសេចក្ដីលម្អិត...</translation> + <source>Setting</source> + <translation>ការកំណត់</translation> </message> <message> - <source>Hide Details...</source> - <translation>លាក់សេចក្ដីលម្អិត...</translation> + <source>Setup</source> + <translation>រៀបចំ</translation> </message> <message> - <source><p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> for an overview of Qt licensing.</p></source> - <translation><p>កម្មវិធីនេះប្រើកំណែកម្មវិធីប្រភពកូដចំហ Qt %1 ។</p><p>កំណែកម្មវិធីប្រភពកូដចំហ Qt សម្រាប់ការអភិវឌ្ឍកម្មវិធីប្រភពកូដចំហ ។ អ្នកត្រូវការអាជ្ញាប័ណ្ណ Qt ផ្នែកជំនួញសម្រាប់កម្មវិធីមានកម្មសិទ្ធិ (ប្រភពបិទ) ។</p><p>ចំពោះទិដ្ឋភាពទូទៅនៃអាជ្ញាប័ណ្ណរបស់ Qt សូមមើល <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> ។</p></translation> + <source>Quit</source> + <translation>ចេញ</translation> </message> <message> - <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> for more information.</p></source> - <translation type="unfinished"></translation> + <source>Exit</source> + <translation>ចេញ</translation> </message> -</context> -<context> - <name>QMultiInputContext</name> <message> - <source>Select IM</source> - <translation>ជ្រើស IM</translation> + <source>About %1</source> + <translation>អំពី %1</translation> </message> -</context> -<context> - <name>QMultiInputContextPlugin</name> <message> - <source>Multiple input method switcher</source> - <translation>កម្មវិធីប្ដូរវិធីសាស្ត្របញ្ចូលជាច្រើន</translation> + <source>About Qt</source> + <translation>អំពី Qt</translation> </message> <message> - <source>Multiple input method switcher that uses the context menu of the text widgets</source> - <translation>កម្មវិធីប្ដូរវិធីសាស្ត្រជាច្រើនដែលប្រើម៉ឺនុយបរិបទរបស់ធាតុក្រាហ្វិកអត្ថបទ</translation> + <source>Preferences</source> + <translation>ចំណូលចិត្ត</translation> </message> -</context> -<context> - <name>QNativeSocketEngine</name> <message> - <source>The remote host closed the connection</source> - <translation>បានបិទការតភ្ជាប់ម៉ាស៊ីនពីចម្ងាយ</translation> - </message> - <message> - <source>Network operation timed out</source> - <translation>អស់ពេលប្រតិបត្តិការបណ្ដាញ</translation> + <source>Quit %1</source> + <translation>ចេញ %1</translation> </message> + </context> + <context> + <name>QMessageBox</name> <message> - <source>Out of resources</source> - <translation>អស់ធនធាន</translation> + <source>Help</source> + <translation>ជំនួយ</translation> </message> <message> - <source>Unsupported socket operation</source> - <translation>ប្រតិបត្តិការរន្ធមិនបានគាំទ្រទេ</translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>Protocol type not supported</source> - <translation>ប្រភេទពិធីការមិនបានគាំទ្រទេ</translation> + <source>About Qt</source> + <translation>អំពី Qt</translation> </message> <message> - <source>Invalid socket descriptor</source> - <translation>អ្នកពិពណ៌នារន្ធមិនត្រឹមត្រូវ</translation> + <source><p>This program uses Qt version %1.</p></source> + <translation><p>កម្មវិធីនេះប្រើកំណែ Qt %1 ។</p></translation> </message> <message> - <source>Network unreachable</source> - <translation>មិនអាចចូលបណ្ដាញបានទេ</translation> + <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> for more information.</p></source> + <translation><h3>អំពី Qt</h3>%1<p>Qt គឺជាព័ត៌មានជំនួយ C++ សម្រាប់ការអភិវឌ្ឍកម្មវិធីសម្រាប់ប្រព័ន្ធប្រតិបត្តិការខុសគ្នា ។</p><p>Qt ផ្ដល់នូវភាពឆបគ្នាដែលបានប្រភពតែមួយដែលប្រើបានទាំង MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux និង Unix ផ្នែកជំនួញជាច្រើនទេ ។ Qt ក៏អាចប្រើបានសម្រាប់ឧបករណ៍ដែលបានបង្កប់ដូចជា Qtopia ។ </p><p>Qt គឺជាផលិតផលរបស់ Trolltech ចំពោះព័ត៌មានបន្ថែមសូមមើល <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> ។</p></translation> </message> <message> - <source>Permission denied</source> - <translation>គ្មានសិទ្ធិ</translation> + <source>Show Details...</source> + <translation>បង្ហាញសេចក្ដីលម្អិត...</translation> </message> <message> - <source>Connection timed out</source> - <translation>អស់ពេលក្នុងការតភ្ជាប់</translation> + <source>Hide Details...</source> + <translation>លាក់សេចក្ដីលម្អិត...</translation> </message> <message> - <source>Connection refused</source> - <translation>បានបដិសេធការតភ្ជាប់</translation> + <source><p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> for an overview of Qt licensing.</p></source> + <translation><p>កម្មវិធីនេះប្រើកំណែកម្មវិធីប្រភពកូដចំហ Qt %1 ។</p><p>កំណែកម្មវិធីប្រភពកូដចំហ Qt សម្រាប់ការអភិវឌ្ឍកម្មវិធីប្រភពកូដចំហ ។ អ្នកត្រូវការអាជ្ញាប័ណ្ណ Qt ផ្នែកជំនួញសម្រាប់កម្មវិធីមានកម្មសិទ្ធិ (ប្រភពបិទ) ។</p><p>ចំពោះទិដ្ឋភាពទូទៅនៃអាជ្ញាប័ណ្ណរបស់ Qt សូមមើល <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> ។</p></translation> </message> + </context> + <context> + <name>QMultiInputContext</name> <message> - <source>The bound address is already in use</source> - <translation>អាសយដ្ឋានដែលបានចងកំពុងប្រើរួចហើយ</translation> + <source>Select IM</source> + <translation>ជ្រើស IM</translation> </message> + </context> + <context> + <name>QMultiInputContextPlugin</name> <message> - <source>The address is not available</source> - <translation>អាសយដ្ឋានមិនអាចប្រើបានទេ</translation> + <source>Multiple input method switcher</source> + <translation>កម្មវិធីប្ដូរវិធីសាស្ត្របញ្ចូលជាច្រើន</translation> </message> <message> - <source>The address is protected</source> - <translation>អាសយដ្ឋានត្រូវបានការពារ</translation> + <source>Multiple input method switcher that uses the context menu of the text widgets</source> + <translation>កម្មវិធីប្ដូរវិធីសាស្ត្រជាច្រើនដែលប្រើម៉ឺនុយបរិបទរបស់ធាតុក្រាហ្វិកអត្ថបទ</translation> </message> + </context> + <context> + <name>QNativeSocketEngine</name> <message> - <source>Unable to send a message</source> - <translation>មិនអាចផ្ញើសារបានទេ</translation> + <source>The remote host closed the connection</source> + <translation>បានបិទការតភ្ជាប់ម៉ាស៊ីនពីចម្ងាយ</translation> </message> <message> - <source>Unable to receive a message</source> - <translation>មិនអាចទទួលសារបានទេ</translation> + <source>Network operation timed out</source> + <translation>អស់ពេលប្រតិបត្តិការបណ្ដាញ</translation> </message> <message> - <source>Unable to write</source> - <translation>មិនអាចសរសេរបានទេ</translation> + <source>Out of resources</source> + <translation>អស់ធនធាន</translation> </message> <message> - <source>Network error</source> - <translation>កំហុសបណ្ដាញ</translation> + <source>Unsupported socket operation</source> + <translation>ប្រតិបត្តិការរន្ធមិនបានគាំទ្រទេ</translation> </message> <message> - <source>Another socket is already listening on the same port</source> - <translation>រន្ធផ្សេងទៀតកំពុងស្ដាប់នៅលើច្រកដូចគ្នា</translation> + <source>Protocol type not supported</source> + <translation>ប្រភេទពិធីការមិនបានគាំទ្រទេ</translation> </message> <message> - <source>Unable to initialize non-blocking socket</source> - <translation>មិនអាចចាប់ផ្ដើមរន្ធដែលមិនទប់ស្កាត់បានទេ</translation> + <source>Invalid socket descriptor</source> + <translation>អ្នកពិពណ៌នារន្ធមិនត្រឹមត្រូវ</translation> </message> <message> - <source>Unable to initialize broadcast socket</source> - <translation>មិនអាចចាប់ផ្ដើមរន្ធប្រកាសបានទេ</translation> + <source>Network unreachable</source> + <translation>មិនអាចចូលបណ្ដាញបានទេ</translation> </message> <message> - <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> - <translation>ប៉ុនប៉ងប្រើរន្ធ IPv6 នៅលើវេទិកាដែលគ្មានការគាំទ្រ IPv6</translation> + <source>Permission denied</source> + <translation>គ្មានសិទ្ធិ</translation> </message> <message> - <source>Host unreachable</source> - <translation>មិនអាចចូលម៉ាស៊ីនបានទេ</translation> + <source>Connection timed out</source> + <translation>អស់ពេលក្នុងការតភ្ជាប់</translation> </message> <message> - <source>Datagram was too large to send</source> - <translation>ទិន្នន័យធំពេកមិនអាចផ្ញើបានទេ</translation> + <source>Connection refused</source> + <translation>បានបដិសេធការតភ្ជាប់</translation> </message> <message> - <source>Operation on non-socket</source> - <translation>ប្រតិបត្តិការមិននៅលើរន្ធ</translation> + <source>The bound address is already in use</source> + <translation>អាសយដ្ឋានដែលបានចងកំពុងប្រើរួចហើយ</translation> </message> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> + <source>The address is not available</source> + <translation>អាសយដ្ឋានមិនអាចប្រើបានទេ</translation> </message> <message> - <source>The proxy type is invalid for this operation</source> - <translation type="unfinished"></translation> + <source>The address is protected</source> + <translation>អាសយដ្ឋានត្រូវបានការពារ</translation> </message> -</context> -<context> - <name>QNetworkAccessFileBackend</name> <message> - <source>Request for opening non-local file %1</source> - <translation type="unfinished"></translation> + <source>Unable to send a message</source> + <translation>មិនអាចផ្ញើសារបានទេ</translation> </message> <message> - <source>Error opening %1: %2</source> - <translation type="unfinished"></translation> + <source>Unable to receive a message</source> + <translation>មិនអាចទទួលសារបានទេ</translation> </message> <message> - <source>Write error writing to %1: %2</source> - <translation type="unfinished"></translation> + <source>Unable to write</source> + <translation>មិនអាចសរសេរបានទេ</translation> </message> <message> - <source>Cannot open %1: Path is a directory</source> - <translation type="unfinished"></translation> + <source>Network error</source> + <translation>កំហុសបណ្ដាញ</translation> </message> <message> - <source>Read error reading from %1: %2</source> - <translation type="unfinished"></translation> + <source>Another socket is already listening on the same port</source> + <translation>រន្ធផ្សេងទៀតកំពុងស្ដាប់នៅលើច្រកដូចគ្នា</translation> </message> -</context> -<context> - <name>QNetworkAccessFtpBackend</name> <message> - <source>Cannot open %1: is a directory</source> - <translation type="unfinished"></translation> + <source>Unable to initialize non-blocking socket</source> + <translation>មិនអាចចាប់ផ្ដើមរន្ធដែលមិនទប់ស្កាត់បានទេ</translation> </message> <message> - <source>Logging in to %1 failed: authentication required</source> - <translation type="unfinished"></translation> + <source>Unable to initialize broadcast socket</source> + <translation>មិនអាចចាប់ផ្ដើមរន្ធប្រកាសបានទេ</translation> </message> <message> - <source>Error while downloading %1: %2</source> - <translation type="unfinished"></translation> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>ប៉ុនប៉ងប្រើរន្ធ IPv6 នៅលើវេទិកាដែលគ្មានការគាំទ្រ IPv6</translation> </message> <message> - <source>Error while uploading %1: %2</source> - <translation type="unfinished"></translation> + <source>Host unreachable</source> + <translation>មិនអាចចូលម៉ាស៊ីនបានទេ</translation> </message> -</context> -<context> - <name>QNetworkReply</name> <message> - <source>Error downloading %1 - server replied: %2</source> - <translation type="unfinished"></translation> + <source>Datagram was too large to send</source> + <translation>ទិន្នន័យធំពេកមិនអាចផ្ញើបានទេ</translation> </message> <message> - <source>Protocol "%1" is unknown</source> - <translation type="unfinished"></translation> + <source>Operation on non-socket</source> + <translation>ប្រតិបត្តិការមិននៅលើរន្ធ</translation> </message> -</context> -<context> - <name>QNetworkReplyImpl</name> <message> - <source>Operation canceled</source> - <translation type="unfinished"></translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> -</context> -<context> + </context> + <context> <name>QOCIDriver</name> <message> - <source>Unable to logon</source> - <translation>មិនអាចចូលបានទេ</translation> + <source>Unable to logon</source> + <translation>មិនអាចចូលបានទេ</translation> </message> <message> - <source>Unable to initialize</source> - <comment>QOCIDriver</comment> - <translation>មិនអាចចាប់ផ្ដើមបានទេ</translation> + <source>Unable to initialize</source> + <comment>QOCIDriver</comment> + <translation>មិនអាចចាប់ផ្ដើមបានទេ</translation> </message> - <message> - <source>Unable to begin transaction</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unable to commit transaction</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unable to rollback transaction</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QOCIResult</name> <message> - <source>Unable to bind column for batch execute</source> - <translation>មិនអាចចងជួរឈរសម្រាប់ប្រតិបត្តិបាច់បានទេ</translation> + <source>Unable to bind column for batch execute</source> + <translation>មិនអាចចងជួរឈរសម្រាប់ប្រតិបត្តិបាច់បានទេ</translation> </message> <message> - <source>Unable to execute batch statement</source> - <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បាច់បានទេ</translation> + <source>Unable to execute batch statement</source> + <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បាច់បានទេ</translation> </message> <message> - <source>Unable to goto next</source> - <translation>មិនអាចទៅកាន់បន្ទាប់បានទេ</translation> + <source>Unable to goto next</source> + <translation>មិនអាចទៅកាន់បន្ទាប់បានទេ</translation> </message> <message> - <source>Unable to alloc statement</source> - <translation>មិនអាចបម្រុងទុកសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to alloc statement</source> + <translation>មិនអាចបម្រុងទុកសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to prepare statement</source> - <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to prepare statement</source> + <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to bind value</source> - <translation>មិនអាចចងតម្លៃបានទេ</translation> + <source>Unable to bind value</source> + <translation>មិនអាចចងតម្លៃបានទេ</translation> </message> <message> - <source>Unable to execute select statement</source> - <translation>មិនអាចប្រតិបត្តិជ្រើសសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to execute select statement</source> + <translation>មិនអាចប្រតិបត្តិជ្រើសសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍</translation> + <source>Unable to execute statement</source> + <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍</translation> </message> -</context> -<context> + </context> + <context> <name>QODBCDriver</name> <message> - <source>Unable to connect</source> - <translation>មិនអាចតភ្ជាប់បានទេ</translation> + <source>Unable to connect</source> + <translation>មិនអាចតភ្ជាប់បានទេ</translation> </message> <message> - <source>Unable to connect - Driver doesn't support all needed functionality</source> - <translation>មិនអាចតភ្ជាប់បានទេ - កម្មវិធីបញ្ជាមិនគាំទ្រមុខងារដែលត្រូវការទាំងអស់ទេ</translation> + <source>Unable to connect - Driver doesn't support all needed functionality</source> + <translation>មិនអាចតភ្ជាប់បានទេ - កម្មវិធីបញ្ជាមិនគាំទ្រមុខងារដែលត្រូវការទាំងអស់ទេ</translation> </message> <message> - <source>Unable to disable autocommit</source> - <translation>មិនអាចបិទការបញ្ជូនដោយស្វ័យប្រវត្តិបានទេ</translation> + <source>Unable to disable autocommit</source> + <translation>មិនអាចបិទការបញ្ជូនដោយស្វ័យប្រវត្តិបានទេ</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to commit transaction</source> + <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to rollback transaction</source> + <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to enable autocommit</source> - <translation>មិនអាចបើកការបញ្ជូនដោយស្វ័យប្រវត្តិបានទេ</translation> + <source>Unable to enable autocommit</source> + <translation>មិនអាចបើកការបញ្ជូនដោយស្វ័យប្រវត្តិបានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QODBCResult</name> <message> - <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> - <translation>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' ជាគុណលក្ខណៈសេចក្ដីថ្លែងការណ៍ ។ សូមពិនិត្យមើលការកំណត់រចនាសម្ព័ន្ធកម្មវិធីបញ្ជានៃ ODBC របស់អ្នក</translation> - </message> - <message> - <source>Unable to execute statement</source> - <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> - </message> - <message> - <source>Unable to fetch next</source> - <translation>មិនអាចទៅយកបន្ទាប់បានទេ</translation> - </message> - <message> - <source>Unable to prepare statement</source> - <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍បានទេ</translation> - </message> - <message> - <source>Unable to bind variable</source> - <translation>មិនអាចចងអថេរបានទេ</translation> + <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> + <translation>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' ជាគុណលក្ខណៈសេចក្ដីថ្លែងការណ៍ ។ សូមពិនិត្យមើលការកំណត់រចនាសម្ព័ន្ធកម្មវិធីបញ្ជានៃ ODBC របស់អ្នក</translation> </message> <message> - <source>Unable to fetch last</source> - <translation type="unfinished"></translation> + <source>Unable to execute statement</source> + <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to fetch</source> - <translation type="unfinished"></translation> + <source>Unable to fetch next</source> + <translation>មិនអាចទៅយកបន្ទាប់បានទេ</translation> </message> <message> - <source>Unable to fetch first</source> - <translation type="unfinished">មិនអាចទៅយកអ្វីដំបូងបានទេ</translation> + <source>Unable to prepare statement</source> + <translation>មិនអាចរៀបចំសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to fetch previous</source> - <translation type="unfinished"></translation> + <source>Unable to bind variable</source> + <translation>មិនអាចចងអថេរបានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QObject</name> <message> - <source>Operation not supported on %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Invalid URI: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Write error writing to %1: %2</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Read error reading from %1: %2</source> - <translation type="unfinished"></translation> + <source>Home</source> + <translation>ផ្ទះ</translation> </message> - <message> - <source>Socket error on %1: %2</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Remote host closed the connection prematurely on %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Protocol error: packet of size 0 received</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>QPPDOptionsModel</name> - <message> - <source>Name</source> - <translation type="unfinished">ឈ្មោះ</translation> - </message> - <message> - <source>Value</source> - <translation type="unfinished">តម្លៃ</translation> - </message> -</context> -<context> + </context> + <context> <name>QPSQLDriver</name> <message> - <source>Unable to connect</source> - <translation>មិនអាចតភ្ជាប់បានទេ</translation> + <source>Unable to connect</source> + <translation>មិនអាចតភ្ជាប់បានទេ</translation> </message> <message> - <source>Could not begin transaction</source> - <translation>មិនអាចចាប់ផ្ដើមដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Could not begin transaction</source> + <translation>មិនអាចចាប់ផ្ដើមដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Could not commit transaction</source> - <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Could not commit transaction</source> + <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Could not rollback transaction</source> - <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Could not rollback transaction</source> + <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> - <message> - <source>Unable to subscribe</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unable to unsubscribe</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QPSQLResult</name> <message> - <source>Unable to create query</source> - <translation>មិនអាចបង្កើតសំណួរបានទេ</translation> - </message> - <message> - <source>Unable to prepare statement</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>QPageSetupWidget</name> - <message> - <source>Centimeters (cm)</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Millimeters (mm)</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Inches (in)</source> - <translation type="unfinished"></translation> + <source>Unable to create query</source> + <translation>មិនអាចបង្កើតសំណួរបានទេ</translation> </message> - <message> - <source>Points (pt)</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Paper</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Page size:</source> - <translation type="unfinished">ទំហំទំព័រ ៖</translation> - </message> - <message> - <source>Width:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Height:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Paper source:</source> - <translation type="unfinished">ប្រភពក្រដាស ៖</translation> - </message> - <message> - <source>Orientation</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Portrait</source> - <translation type="unfinished">បញ្ឈរ</translation> - </message> - <message> - <source>Landscape</source> - <translation type="unfinished">ផ្ដេក</translation> - </message> - <message> - <source>Reverse landscape</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Reverse portrait</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Margins</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>top margin</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>left margin</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>right margin</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>bottom margin</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QPluginLoader</name> <message> - <source>Unknown error</source> - <translation>មិនស្គាល់កំហុស</translation> + <source>Unknown error</source> + <translation>មិនស្គាល់កំហុស</translation> </message> <message> - <source>The plugin was not loaded.</source> - <translation>កម្មវិធីជំនួយមិនត្រូវបានផ្ទុកទេ ។</translation> + <source>The plugin was not loaded.</source> + <translation>កម្មវិធីជំនួយមិនត្រូវបានផ្ទុកទេ ។</translation> </message> -</context> -<context> + </context> + <context> <name>QPrintDialog</name> <message> - <source>locally connected</source> - <translation>បានតភ្ជាប់មូលដ្ឋាន</translation> + <source>locally connected</source> + <translation>បានតភ្ជាប់មូលដ្ឋាន</translation> </message> <message> - <source>Aliases: %1</source> - <translation>ឈ្មោះក្លែងក្លាយ ៖ %1</translation> + <source>Aliases: %1</source> + <translation>ឈ្មោះក្លែងក្លាយ ៖ %1</translation> </message> <message> - <source>unknown</source> - <translation>មិនស្គាល់</translation> + <source>unknown</source> + <translation>មិនស្គាល់</translation> </message> <message> - <source>Print To File ...</source> - <translation>បោះពុម្ពទៅឯកសារ...</translation> + <source>Portrait</source> + <translation>បញ្ឈរ</translation> </message> <message> - <source>File %1 is not writable. -Please choose a different file name.</source> - <translation>ឯកសារ %1 មិនអាចសរសេរបាន ។ -សូមជ្រើសឈ្មោះឯកសារផ្សេង ។</translation> + <source>Landscape</source> + <translation>ផ្ដេក</translation> </message> <message> - <source>%1 already exists. -Do you want to overwrite it?</source> - <translation>មាន %1 រួចហើយ ។ -តើអ្នកចង់សរសេរជាន់លើវាដែរឬទេ ?</translation> + <source>A0 (841 x 1189 mm)</source> + <translation>A0 (841 x 1189 mm)</translation> </message> <message> - <source>%1 is a directory. -Please choose a different file name.</source> - <translation>%1 គឺជាថត ។ -សូមជ្រើសឈ្មោះឯកសារផ្សេង ។</translation> + <source>A1 (594 x 841 mm)</source> + <translation>A1 (594 x 841 mm)</translation> </message> <message> - <source>A0</source> - <translation type="unfinished"></translation> + <source>A2 (420 x 594 mm)</source> + <translation>A2 (420 x 594 mm)</translation> </message> <message> - <source>A1</source> - <translation type="unfinished"></translation> + <source>A3 (297 x 420 mm)</source> + <translation>A3 (297 x 420 mm)</translation> </message> <message> - <source>A2</source> - <translation type="unfinished"></translation> + <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source> + <translation>A4 (210 x 297 mm, 8.26 x 11.7 inches)</translation> </message> <message> - <source>A3</source> - <translation type="unfinished"></translation> + <source>A5 (148 x 210 mm)</source> + <translation>A5 (148 x 210 mm)</translation> </message> <message> - <source>A4</source> - <translation type="unfinished"></translation> + <source>A6 (105 x 148 mm)</source> + <translation>A6 (105 x 148 mm)</translation> </message> <message> - <source>A5</source> - <translation type="unfinished"></translation> + <source>A7 (74 x 105 mm)</source> + <translation>A7 (74 x 105 mm)</translation> </message> <message> - <source>A6</source> - <translation type="unfinished"></translation> + <source>A8 (52 x 74 mm)</source> + <translation>A8 (52 x 74 mm)</translation> </message> <message> - <source>A7</source> - <translation type="unfinished"></translation> + <source>A9 (37 x 52 mm)</source> + <translation>A9 (37 x 52 mm)</translation> </message> <message> - <source>A8</source> - <translation type="unfinished"></translation> + <source>B0 (1000 x 1414 mm)</source> + <translation>B0 (1000 x 1414 mm)</translation> </message> <message> - <source>A9</source> - <translation type="unfinished"></translation> + <source>B1 (707 x 1000 mm)</source> + <translation>B1 (707 x 1000 mm)</translation> </message> <message> - <source>B0</source> - <translation type="unfinished"></translation> + <source>B2 (500 x 707 mm)</source> + <translation>B2 (500 x 707 mm)</translation> </message> <message> - <source>B1</source> - <translation type="unfinished"></translation> + <source>B3 (353 x 500 mm)</source> + <translation>B3 (353 x 500 mm)</translation> </message> <message> - <source>B2</source> - <translation type="unfinished"></translation> + <source>B4 (250 x 353 mm)</source> + <translation>B4 (250 x 353 mm)</translation> </message> <message> - <source>B3</source> - <translation type="unfinished"></translation> + <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source> + <translation>B5 (176 x 250 mm, 6.93 x 9.84 inches)</translation> </message> <message> - <source>B4</source> - <translation type="unfinished"></translation> + <source>B6 (125 x 176 mm)</source> + <translation>B6 (125 x 176 mm)</translation> </message> <message> - <source>B5</source> - <translation type="unfinished"></translation> + <source>B7 (88 x 125 mm)</source> + <translation>B7 (88 x 125 mm)</translation> </message> <message> - <source>B6</source> - <translation type="unfinished"></translation> + <source>B8 (62 x 88 mm)</source> + <translation>B8 (62 x 88 mm)</translation> </message> <message> - <source>B7</source> - <translation type="unfinished"></translation> + <source>B9 (44 x 62 mm)</source> + <translation>B9 (44 x 62 mm)</translation> </message> <message> - <source>B8</source> - <translation type="unfinished"></translation> + <source>B10 (31 x 44 mm)</source> + <translation>B10 (31 x 44 mm)</translation> </message> <message> - <source>B9</source> - <translation type="unfinished"></translation> + <source>C5E (163 x 229 mm)</source> + <translation>C5E (163 x 229 mm)</translation> </message> <message> - <source>B10</source> - <translation type="unfinished"></translation> + <source>DLE (110 x 220 mm)</source> + <translation>DLE (110 x 220 mm)</translation> </message> <message> - <source>C5E</source> - <translation type="unfinished"></translation> + <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source> + <translation>Executive (7.5 x 10 inches, 191 x 254 mm)</translation> </message> <message> - <source>DLE</source> - <translation type="unfinished"></translation> + <source>Folio (210 x 330 mm)</source> + <translation>Folio (210 x 330 mm)</translation> </message> <message> - <source>Executive</source> - <translation type="unfinished"></translation> + <source>Ledger (432 x 279 mm)</source> + <translation>Ledger (432 x 279 mm)</translation> </message> <message> - <source>Folio</source> - <translation type="unfinished"></translation> + <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source> + <translation>Legal (8.5 x 14 inches, 216 x 356 mm)</translation> </message> <message> - <source>Ledger</source> - <translation type="unfinished"></translation> + <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source> + <translation>Letter (8.5 x 11 inches, 216 x 279 mm)</translation> </message> <message> - <source>Legal</source> - <translation type="unfinished"></translation> + <source>Tabloid (279 x 432 mm)</source> + <translation>Tabloid (279 x 432 mm)</translation> </message> <message> - <source>Letter</source> - <translation type="unfinished"></translation> + <source>US Common #10 Envelope (105 x 241 mm)</source> + <translation>US Common #10 Envelope (105 x 241 mm)</translation> </message> <message> - <source>Tabloid</source> - <translation type="unfinished"></translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> <message> - <source>US Common #10 Envelope</source> - <translation type="unfinished"></translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>Custom</source> - <translation type="unfinished"></translation> + <source>Page size:</source> + <translation>ទំហំទំព័រ ៖</translation> </message> <message> - <source>&Options >></source> - <translation type="unfinished"></translation> + <source>Orientation:</source> + <translation>ទិស ៖</translation> </message> <message> - <source>&Print</source> - <translation type="unfinished"></translation> + <source>Paper source:</source> + <translation>ប្រភពក្រដាស ៖</translation> </message> <message> - <source>&Options <<</source> - <translation type="unfinished"></translation> + <source>Print</source> + <translation>បោះពុម្ព</translation> </message> <message> - <source>Print to File (PDF)</source> - <translation type="unfinished"></translation> + <source>File</source> + <translation>ឯកសារ</translation> </message> <message> - <source>Print to File (Postscript)</source> - <translation type="unfinished"></translation> + <source>Printer</source> + <translation>ម៉ាស៊ីនបោះពុម្ព</translation> </message> <message> - <source>Local file</source> - <translation type="unfinished"></translation> + <source>Print To File ...</source> + <translation>បោះពុម្ពទៅឯកសារ...</translation> </message> <message> - <source>Write %1 file</source> - <translation type="unfinished"></translation> + <source>Print dialog</source> + <translation>ប្រអប់បោះពុម្ព</translation> </message> -</context> -<context> - <name>QPrintPreviewDialog</name> <message> - <source>Page Setup</source> - <translation type="unfinished"></translation> + <source>Paper format</source> + <translation>ទ្រង់ទ្រាយក្រដាស</translation> </message> <message> - <source>Print Preview</source> - <translation type="unfinished"></translation> + <source>Size:</source> + <translation>ទំហំ ៖</translation> </message> <message> - <source>Next page</source> - <translation type="unfinished"></translation> + <source>Properties</source> + <translation>លក្ខណៈសម្បត្តិ</translation> </message> <message> - <source>Previous page</source> - <translation type="unfinished"></translation> + <source>Printer info:</source> + <translation>ព័ត៌មានរបស់ម៉ាស៊ីនបោះពុម្ព ៖</translation> </message> <message> - <source>First page</source> - <translation type="unfinished"></translation> + <source>Browse</source> + <translation>រកមើល</translation> </message> <message> - <source>Last page</source> - <translation type="unfinished"></translation> + <source>Print to file</source> + <translation>បោះពុម្ពទៅឯកសារ</translation> </message> <message> - <source>Fit width</source> - <translation type="unfinished"></translation> + <source>Print range</source> + <translation>ជួរបោះពុម្ព</translation> </message> <message> - <source>Fit page</source> - <translation type="unfinished"></translation> + <source>Print all</source> + <translation>បោះពុម្ពទាំងអស់</translation> </message> <message> - <source>Zoom in</source> - <translation type="unfinished"></translation> + <source>Pages from</source> + <translation>ទំព័រពី</translation> </message> <message> - <source>Zoom out</source> - <translation type="unfinished"></translation> + <source>to</source> + <translation>ដល់</translation> </message> <message> - <source>Portrait</source> - <translation type="unfinished">បញ្ឈរ</translation> + <source>Selection</source> + <translation>ជម្រើស</translation> </message> <message> - <source>Landscape</source> - <translation type="unfinished">ផ្ដេក</translation> + <source>Copies</source> + <translation>ច្បាប់ចម្លង</translation> </message> <message> - <source>Show single page</source> - <translation type="unfinished"></translation> + <source>Number of copies:</source> + <translation>ចំនួនច្បាប់ចម្លង ៖</translation> </message> <message> - <source>Show facing pages</source> - <translation type="unfinished"></translation> + <source>Collate</source> + <translation>តម្រៀបតាមលំដាប់</translation> </message> <message> - <source>Show overview of all pages</source> - <translation type="unfinished"></translation> + <source>Print last page first</source> + <translation>បោះពុម្ពទំព័រចុងក្រោយមុន</translation> </message> <message> - <source>Print</source> - <translation type="unfinished">បោះពុម្ព</translation> + <source>Other</source> + <translation>ផ្សេងៗទៀត</translation> </message> <message> - <source>Page setup</source> - <translation type="unfinished"></translation> + <source>Print in color if available</source> + <translation>បោះពុម្ពតែពណ៌ ប្រសិនបើមាន</translation> </message> <message> - <source>Close</source> - <translation type="unfinished">បិទ</translation> + <source>Double side printing</source> + <translation>បោះពុម្ពទាំងសងខាង</translation> </message> -</context> -<context> - <name>QPrintPropertiesWidget</name> <message> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Page</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Advanced</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>QPrintSettingsOutput</name> - <message> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Copies</source> - <translation type="unfinished">ច្បាប់ចម្លង</translation> - </message> - <message> - <source>Print range</source> - <translation type="unfinished">ជួរបោះពុម្ព</translation> - </message> - <message> - <source>Print all</source> - <translation type="unfinished">បោះពុម្ពទាំងអស់</translation> - </message> - <message> - <source>Pages from</source> - <translation type="unfinished">ទំព័រពី</translation> - </message> - <message> - <source>to</source> - <translation type="unfinished">ដល់</translation> - </message> - <message> - <source>Selection</source> - <translation type="unfinished">ជម្រើស</translation> - </message> - <message> - <source>Output Settings</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Copies:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Collate</source> - <translation type="unfinished">តម្រៀបតាមលំដាប់</translation> - </message> - <message> - <source>Reverse</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Options</source> - <translation type="unfinished">ជម្រើស</translation> - </message> - <message> - <source>Color Mode</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Color</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Grayscale</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Duplex Printing</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>None</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Long side</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Short side</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>QPrintWidget</name> - <message> - <source>Form</source> - <translation type="unfinished"></translation> + <source>File %1 is not writable. +Please choose a different file name.</source> + <translation>ឯកសារ %1 មិនអាចសរសេរបាន ។ +សូមជ្រើសឈ្មោះឯកសារផ្សេង ។</translation> </message> <message> - <source>Printer</source> - <translation type="unfinished">ម៉ាស៊ីនបោះពុម្ព</translation> + <source>%1 already exists. +Do you want to overwrite it?</source> + <translation>មាន %1 រួចហើយ ។ +តើអ្នកចង់សរសេរជាន់លើវាដែរឬទេ ?</translation> </message> <message> - <source>&Name:</source> - <translation type="unfinished"></translation> + <source>File exists</source> + <translation>មានឯកសាររួចហើយ</translation> </message> <message> - <source>P&roperties</source> - <translation type="unfinished"></translation> + <source><qt>Do you want to overwrite it?</qt></source> + <translation><qt>តើអ្នកចង់សរសេរជាន់លើវាដែរឬទេ ?</qt></translation> </message> <message> - <source>Location:</source> - <translation type="unfinished"></translation> + <source>Print selection</source> + <translation>បោះពុម្ពជម្រើស</translation> </message> <message> - <source>Preview</source> - <translation type="unfinished"></translation> + <source>%1 is a directory. +Please choose a different file name.</source> + <translation>%1 គឺជាថត ។ +សូមជ្រើសឈ្មោះឯកសារផ្សេង ។</translation> </message> + </context> + <context> + <name>QPrintPropertiesDialog</name> <message> - <source>Type:</source> - <translation type="unfinished"></translation> + <source>PPD Properties</source> + <translation>លក្ខណៈសម្បត្តិ PPD</translation> </message> <message> - <source>Output &file:</source> - <translation type="unfinished"></translation> + <source>Save</source> + <translation>រក្សាទុក</translation> </message> <message> - <source>...</source> - <translation type="unfinished"></translation> + <source>OK</source> + <translation>យល់ព្រម</translation> </message> -</context> -<context> + </context> + <context> <name>QProgressDialog</name> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> -</context> -<context> + </context> + <context> <name>QPushButton</name> <message> - <source>Open</source> - <translation>បើក</translation> + <source>Open</source> + <translation>បើក</translation> </message> -</context> -<context> + </context> + <context> <name>QRadioButton</name> <message> - <source>Check</source> - <translation>ពិនិត្យមើល</translation> + <source>Check</source> + <translation>ពិនិត្យមើល</translation> </message> -</context> -<context> + </context> + <context> <name>QRegExp</name> <message> - <source>no error occurred</source> - <translation>គ្មានកំហុសបានកើតឡើង</translation> + <source>no error occurred</source> + <translation>គ្មានកំហុសបានកើតឡើង</translation> </message> <message> - <source>disabled feature used</source> - <translation>លក្ខណៈពិសេសដែលបានប្រើដែលបានបិទ</translation> + <source>disabled feature used</source> + <translation>លក្ខណៈពិសេសដែលបានប្រើដែលបានបិទ</translation> </message> <message> - <source>bad char class syntax</source> - <translation>វាក្យសម្ព័ន្ធថ្នាក់តួអក្សរមិនល្អ</translation> + <source>bad char class syntax</source> + <translation>វាក្យសម្ព័ន្ធថ្នាក់តួអក្សរមិនល្អ</translation> </message> <message> - <source>bad lookahead syntax</source> - <translation>វាក្យសម្ព័ន្ធ lookahead មិនល្អ</translation> + <source>bad lookahead syntax</source> + <translation>វាក្យសម្ព័ន្ធ lookahead មិនល្អ</translation> </message> <message> - <source>bad repetition syntax</source> - <translation>វាក្យសម្ព័ន្ធធ្វើឡើងវិញមិនល្អ</translation> + <source>bad repetition syntax</source> + <translation>វាក្យសម្ព័ន្ធធ្វើឡើងវិញមិនល្អ</translation> </message> <message> - <source>invalid octal value</source> - <translation>តម្លៃគោលដប់មិនត្រឹមត្រូវ</translation> + <source>invalid octal value</source> + <translation>តម្លៃគោលដប់មិនត្រឹមត្រូវ</translation> </message> <message> - <source>missing left delim</source> - <translation>បាត់ delim ដែលនៅសល់</translation> + <source>missing left delim</source> + <translation>បាត់ delim ដែលនៅសល់</translation> </message> <message> - <source>unexpected end</source> - <translation>បញ្ចប់ដោយមិនរំពឹងទុក</translation> + <source>unexpected end</source> + <translation>បញ្ចប់ដោយមិនរំពឹងទុក</translation> </message> <message> - <source>met internal limit</source> - <translation>ដល់ដែនកំណត់ខាងក្នុង</translation> + <source>met internal limit</source> + <translation>ដល់ដែនកំណត់ខាងក្នុង</translation> </message> -</context> -<context> + </context> + <context> <name>QSQLite2Driver</name> <message> - <source>Error to open database</source> - <translation>កំហុសក្នុងការបើកមូលដ្ឋានទិន្នន័យ</translation> + <source>Error to open database</source> + <translation>កំហុសក្នុងការបើកមូលដ្ឋានទិន្នន័យ</translation> </message> <message> - <source>Unable to begin transaction</source> - <translation>មិនអាចចាប់ផ្ដើមដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to begin transaction</source> + <translation>មិនអាចចាប់ផ្ដើមដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរ</translation> + <source>Unable to commit transaction</source> + <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរ</translation> </message> <message> - <source>Unable to rollback Transaction</source> - <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to rollback Transaction</source> + <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QSQLite2Result</name> <message> - <source>Unable to fetch results</source> - <translation>មិនអាចទៅយកលទ្ធផលបានទេ</translation> + <source>Unable to fetch results</source> + <translation>មិនអាចទៅយកលទ្ធផលបានទេ</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to execute statement</source> + <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QSQLiteDriver</name> <message> - <source>Error opening database</source> - <translation>កំហុសក្នុងការបើកមូលដ្ឋានទិន្នន័យ</translation> + <source>Error opening database</source> + <translation>កំហុសក្នុងការបើកមូលដ្ឋានទិន្នន័យ</translation> </message> <message> - <source>Error closing database</source> - <translation>កំហុសក្នុងការបិទមូលដ្ឋានទិន្នន័យ</translation> + <source>Error closing database</source> + <translation>កំហុសក្នុងការបិទមូលដ្ឋានទិន្នន័យ</translation> </message> <message> - <source>Unable to begin transaction</source> - <translation>មិនអាចចាប់ផ្ដើមដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to begin transaction</source> + <translation>មិនអាចចាប់ផ្ដើមដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរបានទេ</translation> + <source>Unable to commit transaction</source> + <translation>មិនអាចបញ្ជូនដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation type="unfinished"></translation> + <source>Unable to roll back transaction</source> + <translation>មិនអាចជម្រះដំណើរផ្លាស់ប្ដូរបានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QSQLiteResult</name> <message> - <source>Unable to fetch row</source> - <translation>មិនអាចទៅយកឥឡូវបានទេ</translation> + <source>Unable to fetch row</source> + <translation>មិនអាចទៅយកឥឡូវបានទេ</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> + <source>Unable to execute statement</source> + <translation>មិនអាចប្រតិបត្តិសេចក្ដីថ្លែងការណ៍បានទេ</translation> </message> <message> - <source>Unable to reset statement</source> - <translation>មិនអាចកំណត់សេចក្ដីថ្លែងការណ៍ឡើងវិញបានទេ</translation> + <source>Unable to reset statement</source> + <translation>មិនអាចកំណត់សេចក្ដីថ្លែងការណ៍ឡើងវិញបានទេ</translation> </message> <message> - <source>Unable to bind parameters</source> - <translation>មិនអាចចងប៉ារ៉ាម៉ែត្របានទេ</translation> + <source>Unable to bind parameters</source> + <translation>មិនអាចចងប៉ារ៉ាម៉ែត្របានទេ</translation> </message> <message> - <source>Parameter count mismatch</source> - <translation>ចំនួនប៉ារ៉ាម៉ែត្រមិនផ្គូផ្គងទេ</translation> + <source>Parameter count mismatch</source> + <translation>ចំនួនប៉ារ៉ាម៉ែត្រមិនផ្គូផ្គងទេ</translation> </message> - <message> - <source>No query</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QScrollBar</name> <message> - <source>Scroll here</source> - <translation>រមូរនៅទីនេះ</translation> - </message> - <message> - <source>Left edge</source> - <translation>គែមឆ្វេង</translation> - </message> - <message> - <source>Top</source> - <translation>កំពូល</translation> - </message> - <message> - <source>Right edge</source> - <translation>គែមស្ដាំ</translation> - </message> - <message> - <source>Bottom</source> - <translation>បាត</translation> - </message> - <message> - <source>Page left</source> - <translation>ទំព័រឆ្វេង</translation> - </message> - <message> - <source>Page up</source> - <translation>ទំព័រលើ</translation> - </message> - <message> - <source>Page right</source> - <translation>ទំព័រស្ដាំ</translation> - </message> - <message> - <source>Page down</source> - <translation>ទំព័រក្រោម</translation> - </message> - <message> - <source>Scroll left</source> - <translation>រមូរឆ្វេង</translation> - </message> - <message> - <source>Scroll up</source> - <translation>រមូរឡើងលើ</translation> - </message> - <message> - <source>Scroll right</source> - <translation>រមូរទៅស្ដាំ</translation> - </message> - <message> - <source>Scroll down</source> - <translation>រមូរចុះក្រោម</translation> + <source>Scroll here</source> + <translation>រមូរនៅទីនេះ</translation> </message> <message> - <source>Line up</source> - <translation>បន្ទាត់ឡើងលើ</translation> + <source>Left edge</source> + <translation>គែមឆ្វេង</translation> </message> <message> - <source>Position</source> - <translation>ទីតាំង</translation> + <source>Top</source> + <translation>កំពូល</translation> </message> <message> - <source>Line down</source> - <translation>បន្ទាត់ចុះក្រោម</translation> + <source>Right edge</source> + <translation>គែមស្ដាំ</translation> </message> -</context> -<context> - <name>QSharedMemory</name> <message> - <source>%1: unable to set key on lock</source> - <translation type="unfinished"></translation> + <source>Bottom</source> + <translation>បាត</translation> </message> <message> - <source>%1: create size is less then 0</source> - <translation type="unfinished"></translation> + <source>Page left</source> + <translation>ទំព័រឆ្វេង</translation> </message> <message> - <source>%1: unable to lock</source> - <translation type="unfinished"></translation> + <source>Page up</source> + <translation>ទំព័រលើ</translation> </message> <message> - <source>%1: unable to unlock</source> - <translation type="unfinished"></translation> + <source>Page right</source> + <translation>ទំព័រស្ដាំ</translation> </message> <message> - <source>%1: permission denied</source> - <translation type="unfinished"></translation> + <source>Page down</source> + <translation>ទំព័រក្រោម</translation> </message> <message> - <source>%1: already exists</source> - <translation type="unfinished"></translation> + <source>Scroll left</source> + <translation>រមូរឆ្វេង</translation> </message> <message> - <source>%1: doesn't exists</source> - <translation type="unfinished"></translation> + <source>Scroll up</source> + <translation>រមូរឡើងលើ</translation> </message> <message> - <source>%1: out of resources</source> - <translation type="unfinished"></translation> + <source>Scroll right</source> + <translation>រមូរទៅស្ដាំ</translation> </message> <message> - <source>%1: unknown error %2</source> - <translation type="unfinished"></translation> + <source>Scroll down</source> + <translation>រមូរចុះក្រោម</translation> </message> <message> - <source>%1: key is empty</source> - <translation type="unfinished"></translation> + <source>Line up</source> + <translation>បន្ទាត់ឡើងលើ</translation> </message> <message> - <source>%1: unix key file doesn't exists</source> - <translation type="unfinished"></translation> + <source>Position</source> + <translation>ទីតាំង</translation> </message> <message> - <source>%1: ftok failed</source> - <translation type="unfinished"></translation> + <source>Line down</source> + <translation>បន្ទាត់ចុះក្រោម</translation> </message> - <message> - <source>%1: unable to make key</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: system-imposed size restrictions</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1: not attached</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QShortcut</name> <message> - <source>Space</source> - <translation>ចន្លោះ</translation> + <source>Space</source> + <translation>ចន្លោះ</translation> </message> <message> - <source>Esc</source> - <translation>គេច (Esc)</translation> + <source>Esc</source> + <translation>គេច (Esc)</translation> </message> <message> - <source>Tab</source> - <translation>ថេប (Tab)</translation> + <source>Tab</source> + <translation>ថេប (Tab)</translation> </message> <message> - <source>Backtab</source> - <translation>ថេបថយក្រោយ (Backtab)</translation> + <source>Backtab</source> + <translation>ថេបថយក្រោយ (Backtab)</translation> </message> <message> - <source>Backspace</source> - <translation>លុបថយក្រោយ (Backspace)</translation> + <source>Backspace</source> + <translation>លុបថយក្រោយ (Backspace)</translation> </message> <message> - <source>Return</source> - <translation>Return</translation> + <source>Return</source> + <translation>Return</translation> </message> <message> - <source>Enter</source> - <translation>បញ្ចូល (Enter)</translation> + <source>Enter</source> + <translation>បញ្ចូល (Enter)</translation> </message> <message> - <source>Ins</source> - <translation>បញ្ចូល (Ins)</translation> + <source>Ins</source> + <translation>បញ្ចូល (Ins)</translation> </message> <message> - <source>Del</source> - <translation>លុប (Del)</translation> + <source>Del</source> + <translation>លុប (Del)</translation> </message> <message> - <source>Pause</source> - <translation>ផ្អាក</translation> + <source>Pause</source> + <translation>ផ្អាក</translation> </message> <message> - <source>Print</source> - <translation>បោះពុម្ព</translation> + <source>Print</source> + <translation>បោះពុម្ព</translation> </message> <message> - <source>SysReq</source> - <translation>SysReq</translation> + <source>SysReq</source> + <translation>SysReq</translation> </message> <message> - <source>Home</source> - <translation>ដើម (Home)</translation> + <source>Home</source> + <translation>ដើម (Home)</translation> </message> <message> - <source>End</source> - <translation>ចុង (End)</translation> + <source>End</source> + <translation>ចុង (End)</translation> </message> <message> - <source>Left</source> - <translation>ឆ្វេង</translation> + <source>Left</source> + <translation>ឆ្វេង</translation> </message> <message> - <source>Up</source> - <translation>ឡើងលើ</translation> + <source>Up</source> + <translation>ឡើងលើ</translation> </message> <message> - <source>Right</source> - <translation>ស្ដាំ</translation> + <source>Right</source> + <translation>ស្ដាំ</translation> </message> <message> - <source>Down</source> - <translation>ក្រោម</translation> + <source>Down</source> + <translation>ក្រោម</translation> </message> <message> - <source>PgUp</source> - <translation>ទំព័រលើ (PgUp)</translation> + <source>PgUp</source> + <translation>ទំព័រលើ (PgUp)</translation> </message> <message> - <source>PgDown</source> - <translation>ទំព័រក្រោម (PgDown)</translation> + <source>PgDown</source> + <translation>ទំព័រក្រោម (PgDown)</translation> </message> <message> - <source>CapsLock</source> - <translation>ប្ដូរជាប់ (CapsLock)</translation> + <source>CapsLock</source> + <translation>ប្ដូរជាប់ (CapsLock)</translation> </message> <message> - <source>NumLock</source> - <translation>លេខ (NumLock)</translation> + <source>NumLock</source> + <translation>លេខ (NumLock)</translation> </message> <message> - <source>ScrollLock</source> - <translation>ScrollLock</translation> + <source>ScrollLock</source> + <translation>ScrollLock</translation> </message> <message> - <source>Menu</source> - <translation>ម៉ឺនុយ</translation> + <source>Menu</source> + <translation>ម៉ឺនុយ</translation> </message> <message> - <source>Help</source> - <translation>ជំនួយ</translation> + <source>Help</source> + <translation>ជំនួយ</translation> </message> <message> - <source>Back</source> - <translation>ថយក្រោយ</translation> + <source>Back</source> + <translation>ថយក្រោយ</translation> </message> <message> - <source>Forward</source> - <translation>ទៅមុខ</translation> + <source>Forward</source> + <translation>ទៅមុខ</translation> </message> <message> - <source>Stop</source> - <translation>បញ្ឈប់</translation> + <source>Stop</source> + <translation>បញ្ឈប់</translation> </message> <message> - <source>Refresh</source> - <translation>ធ្វើឲ្យស្រស់</translation> + <source>Refresh</source> + <translation>ធ្វើឲ្យស្រស់</translation> </message> <message> - <source>Volume Down</source> - <translation>បន្ថយកម្រិតសំឡេង</translation> + <source>Volume Down</source> + <translation>បន្ថយកម្រិតសំឡេង</translation> </message> <message> - <source>Volume Mute</source> - <translation>ស្ងាត់</translation> + <source>Volume Mute</source> + <translation>ស្ងាត់</translation> </message> <message> - <source>Volume Up</source> - <translation>បង្កើនកម្រិតសំឡេង</translation> + <source>Volume Up</source> + <translation>បង្កើនកម្រិតសំឡេង</translation> </message> <message> - <source>Bass Boost</source> - <translation>ការដំឡើងបាស</translation> + <source>Bass Boost</source> + <translation>ការដំឡើងបាស</translation> </message> <message> - <source>Bass Up</source> - <translation>បង្កើនបាស</translation> + <source>Bass Up</source> + <translation>បង្កើនបាស</translation> </message> <message> - <source>Bass Down</source> - <translation>បន្ថយបាស</translation> + <source>Bass Down</source> + <translation>បន្ថយបាស</translation> </message> <message> - <source>Treble Up</source> - <translation>បង្កើនសំឡេងបំពង</translation> + <source>Treble Up</source> + <translation>បង្កើនសំឡេងបំពង</translation> </message> <message> - <source>Treble Down</source> - <translation>បន្ថែមសំឡេងបំពង</translation> + <source>Treble Down</source> + <translation>បន្ថែមសំឡេងបំពង</translation> </message> <message> - <source>Media Play</source> - <translation>ចាក់មេឌៀ</translation> + <source>Media Play</source> + <translation>ចាក់មេឌៀ</translation> </message> <message> - <source>Media Stop</source> - <translation>បញ្ឈប់មេឌៀ</translation> + <source>Media Stop</source> + <translation>បញ្ឈប់មេឌៀ</translation> </message> <message> - <source>Media Previous</source> - <translation>មេឌៀមុន</translation> + <source>Media Previous</source> + <translation>មេឌៀមុន</translation> </message> <message> - <source>Media Next</source> - <translation>មេឌៀក្រោយ</translation> + <source>Media Next</source> + <translation>មេឌៀក្រោយ</translation> </message> <message> - <source>Media Record</source> - <translation>ថតមេឌៀ</translation> + <source>Media Record</source> + <translation>ថតមេឌៀ</translation> </message> <message> - <source>Favorites</source> - <translation>សំណព្វ</translation> + <source>Favorites</source> + <translation>សំណព្វ</translation> </message> <message> - <source>Search</source> - <translation>ស្វែងរក</translation> + <source>Search</source> + <translation>ស្វែងរក</translation> </message> <message> - <source>Standby</source> - <translation>រង់ចាំ</translation> + <source>Standby</source> + <translation>រង់ចាំ</translation> </message> <message> - <source>Open URL</source> - <translation>បើក URL</translation> + <source>Open URL</source> + <translation>បើក URL</translation> </message> <message> - <source>Launch Mail</source> - <translation>ចាប់ផ្ដើមសំបុត្រ</translation> + <source>Launch Mail</source> + <translation>ចាប់ផ្ដើមសំបុត្រ</translation> </message> <message> - <source>Launch Media</source> - <translation>ចាប់ផ្ដើមមេឌៀ</translation> + <source>Launch Media</source> + <translation>ចាប់ផ្ដើមមេឌៀ</translation> </message> <message> - <source>Launch (0)</source> - <translation>ចាប់ផ្ដើម (០)</translation> + <source>Launch (0)</source> + <translation>ចាប់ផ្ដើម (០)</translation> </message> <message> - <source>Launch (1)</source> - <translation>ចាប់ផ្ដើម (១)</translation> + <source>Launch (1)</source> + <translation>ចាប់ផ្ដើម (១)</translation> </message> <message> - <source>Launch (2)</source> - <translation>ចាប់ផ្ដើម (២)</translation> + <source>Launch (2)</source> + <translation>ចាប់ផ្ដើម (២)</translation> </message> <message> - <source>Launch (3)</source> - <translation>ចាប់ផ្ដើម (៣)</translation> + <source>Launch (3)</source> + <translation>ចាប់ផ្ដើម (៣)</translation> </message> <message> - <source>Launch (4)</source> - <translation>ចាប់ផ្ដើម (៤)</translation> + <source>Launch (4)</source> + <translation>ចាប់ផ្ដើម (៤)</translation> </message> <message> - <source>Launch (5)</source> - <translation>ចាប់ផ្ដើម (៥)</translation> + <source>Launch (5)</source> + <translation>ចាប់ផ្ដើម (៥)</translation> </message> <message> - <source>Launch (6)</source> - <translation>ចាប់ផ្ដើម (៦)</translation> + <source>Launch (6)</source> + <translation>ចាប់ផ្ដើម (៦)</translation> </message> <message> - <source>Launch (7)</source> - <translation>ចាប់ផ្ដើម (៧)</translation> + <source>Launch (7)</source> + <translation>ចាប់ផ្ដើម (៧)</translation> </message> <message> - <source>Launch (8)</source> - <translation>ចាប់ផ្ដើម (៨)</translation> + <source>Launch (8)</source> + <translation>ចាប់ផ្ដើម (៨)</translation> </message> <message> - <source>Launch (9)</source> - <translation>ចាប់ផ្ដើម (៩)</translation> + <source>Launch (9)</source> + <translation>ចាប់ផ្ដើម (៩)</translation> </message> <message> - <source>Launch (A)</source> - <translation>ចាប់ផ្ដើម (A)</translation> + <source>Launch (A)</source> + <translation>ចាប់ផ្ដើម (A)</translation> </message> <message> - <source>Launch (B)</source> - <translation>ចាប់ផ្ដើម (B)</translation> + <source>Launch (B)</source> + <translation>ចាប់ផ្ដើម (B)</translation> </message> <message> - <source>Launch (C)</source> - <translation>ចាប់ផ្ដើម (C)</translation> + <source>Launch (C)</source> + <translation>ចាប់ផ្ដើម (C)</translation> </message> <message> - <source>Launch (D)</source> - <translation>ចាប់ផ្ដើម (D)</translation> + <source>Launch (D)</source> + <translation>ចាប់ផ្ដើម (D)</translation> </message> <message> - <source>Launch (E)</source> - <translation>ចាប់ផ្ដើម (E)</translation> + <source>Launch (E)</source> + <translation>ចាប់ផ្ដើម (E)</translation> </message> <message> - <source>Launch (F)</source> - <translation>ចាប់ផ្ដើម (F)</translation> + <source>Launch (F)</source> + <translation>ចាប់ផ្ដើម (F)</translation> </message> <message> - <source>Print Screen</source> - <translation>បោះពុម្ពអេក្រង់</translation> + <source>Print Screen</source> + <translation>បោះពុម្ពអេក្រង់</translation> </message> <message> - <source>Page Up</source> - <translation>ទំព័រលើ</translation> + <source>Page Up</source> + <translation>ទំព័រលើ</translation> </message> <message> - <source>Page Down</source> - <translation>ទំព័រក្រោម</translation> + <source>Page Down</source> + <translation>ទំព័រក្រោម</translation> </message> <message> - <source>Caps Lock</source> - <translation>ប្ដូរជាប់</translation> + <source>Caps Lock</source> + <translation>ប្ដូរជាប់</translation> </message> <message> - <source>Num Lock</source> - <translation>លេខ</translation> + <source>Num Lock</source> + <translation>លេខ</translation> </message> <message> - <source>Number Lock</source> - <translation>លេខ</translation> + <source>Number Lock</source> + <translation>លេខ</translation> </message> <message> - <source>Scroll Lock</source> - <translation>Scroll Lock</translation> + <source>Scroll Lock</source> + <translation>Scroll Lock</translation> </message> <message> - <source>Insert</source> - <translation>បញ្ជាន់ (Insert)</translation> + <source>Insert</source> + <translation>បញ្ជាន់ (Insert)</translation> </message> <message> - <source>Delete</source> - <translation>លុប</translation> + <source>Delete</source> + <translation>លុប</translation> </message> <message> - <source>Escape</source> - <translation>គេច (Escape)</translation> + <source>Escape</source> + <translation>គេច (Escape)</translation> </message> <message> - <source>System Request</source> - <translation>សំណើប្រព័ន្ធ</translation> + <source>System Request</source> + <translation>សំណើប្រព័ន្ធ</translation> </message> <message> - <source>Select</source> - <translation>ជ្រើស</translation> + <source>Select</source> + <translation>ជ្រើស</translation> </message> <message> - <source>Yes</source> - <translation>បាទ/ចាស</translation> + <source>Yes</source> + <translation>បាទ/ចាស</translation> </message> <message> - <source>No</source> - <translation>ទេ</translation> + <source>No</source> + <translation>ទេ</translation> </message> <message> - <source>Context1</source> - <translation>បរិបទ ១</translation> + <source>Context1</source> + <translation>បរិបទ ១</translation> </message> <message> - <source>Context2</source> - <translation>បរិបទ ២</translation> + <source>Context2</source> + <translation>បរិបទ ២</translation> </message> <message> - <source>Context3</source> - <translation>បរិបទ ៣</translation> + <source>Context3</source> + <translation>បរិបទ ៣</translation> </message> <message> - <source>Context4</source> - <translation>បរិបទ ៤</translation> + <source>Context4</source> + <translation>បរិបទ ៤</translation> </message> <message> - <source>Call</source> - <translation>ហៅ</translation> + <source>Call</source> + <translation>ហៅ</translation> </message> <message> - <source>Hangup</source> - <translation>ព្យួរ</translation> + <source>Hangup</source> + <translation>ព្យួរ</translation> </message> <message> - <source>Flip</source> - <translation>ត្រឡប់</translation> + <source>Flip</source> + <translation>ត្រឡប់</translation> </message> <message> - <source>Ctrl</source> - <translation>បញ្ជា (Ctrl)</translation> + <source>Ctrl</source> + <translation>បញ្ជា (Ctrl)</translation> </message> <message> - <source>Shift</source> - <translation>ប្ដូរ (Shift)</translation> + <source>Shift</source> + <translation>ប្ដូរ (Shift)</translation> </message> <message> - <source>Alt</source> - <translation>ជំនួស (Alt)</translation> + <source>Alt</source> + <translation>ជំនួស (Alt)</translation> </message> <message> - <source>Meta</source> - <translation>មេតា</translation> + <source>Meta</source> + <translation>មេតា</translation> </message> <message> - <source>+</source> - <translation>+</translation> + <source>+</source> + <translation>+</translation> </message> <message> - <source>F%1</source> - <translation>F%1</translation> + <source>F%1</source> + <translation>F%1</translation> </message> <message> - <source>Home Page</source> - <translation>គេហទំព័រ</translation> + <source>Home Page</source> + <translation>គេហទំព័រ</translation> </message> -</context> -<context> + </context> + <context> <name>QSlider</name> <message> - <source>Page left</source> - <translation>ទំព័រឆ្វេង</translation> + <source>Page left</source> + <translation>ទំព័រឆ្វេង</translation> </message> <message> - <source>Page up</source> - <translation>ទំព័រលើ</translation> + <source>Page up</source> + <translation>ទំព័រលើ</translation> </message> <message> - <source>Position</source> - <translation>ទីតាំង</translation> + <source>Position</source> + <translation>ទីតាំង</translation> </message> <message> - <source>Page right</source> - <translation>ទំព័រស្ដាំ</translation> + <source>Page right</source> + <translation>ទំព័រស្ដាំ</translation> </message> <message> - <source>Page down</source> - <translation>ទំព័រក្រោម</translation> + <source>Page down</source> + <translation>ទំព័រក្រោម</translation> </message> -</context> -<context> + </context> + <context> <name>QSocks5SocketEngine</name> <message> - <source>Socks5 timeout error connecting to socks server</source> - <translation>កំហុសក្នុងការអស់ពេលរន្ធ ៥ ក្នុងការតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើរន្ធ</translation> + <source>Socks5 timeout error connecting to socks server</source> + <translation>កំហុសក្នុងការអស់ពេលរន្ធ ៥ ក្នុងការតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើរន្ធ</translation> </message> - <message> - <source>Network operation timed out</source> - <translation type="unfinished">អស់ពេលប្រតិបត្តិការបណ្ដាញ</translation> - </message> -</context> -<context> + </context> + <context> <name>QSpinBox</name> <message> - <source>More</source> - <translation>ច្រើនជាង</translation> + <source>More</source> + <translation>ច្រើនជាង</translation> </message> <message> - <source>Less</source> - <translation>តិចជាង</translation> + <source>Less</source> + <translation>តិចជាង</translation> </message> -</context> -<context> + </context> + <context> <name>QSql</name> <message> - <source>Delete</source> - <translation>លុប</translation> + <source>Delete</source> + <translation>លុប</translation> </message> <message> - <source>Delete this record?</source> - <translation>លុបកំណត់ត្រានេះឬ ?</translation> + <source>Delete this record?</source> + <translation>លុបកំណត់ត្រានេះឬ ?</translation> </message> <message> - <source>Yes</source> - <translation>បាទ/ចាស</translation> + <source>Yes</source> + <translation>បាទ/ចាស</translation> </message> <message> - <source>No</source> - <translation>ទេ</translation> + <source>No</source> + <translation>ទេ</translation> </message> <message> - <source>Insert</source> - <translation>បញ្ចូល</translation> + <source>Insert</source> + <translation>បញ្ចូល</translation> </message> <message> - <source>Update</source> - <translation>ធ្វើឲ្យទាន់សម័យ</translation> + <source>Update</source> + <translation>ធ្វើឲ្យទាន់សម័យ</translation> </message> <message> - <source>Save edits?</source> - <translation>រក្សាទុកការកែសម្រួល ?</translation> + <source>Save edits?</source> + <translation>រក្សាទុកការកែសម្រួល ?</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>Confirm</source> - <translation>អះអាង</translation> + <source>Confirm</source> + <translation>អះអាង</translation> </message> <message> - <source>Cancel your edits?</source> - <translation>បោះបង់ការកែសម្រួលរបស់អ្នកឬ ?</translation> + <source>Cancel your edits?</source> + <translation>បោះបង់ការកែសម្រួលរបស់អ្នកឬ ?</translation> </message> -</context> -<context> + </context> + <context> <name>QSslSocket</name> <message> - <source>Unable to write data: %1</source> - <translation>មិនអាចសរសេរទិន្នន័យ ៖ %1</translation> + <source>Unable to write data: %1</source> + <translation>មិនអាចសរសេរទិន្នន័យ ៖ %1</translation> </message> <message> - <source>Error while reading: %1</source> - <translation>កំហុសខណៈពេលអាន ៖ %1</translation> + <source>Error while reading: %1</source> + <translation>កំហុសខណៈពេលអាន ៖ %1</translation> </message> <message> - <source>Error during SSL handshake: %1</source> - <translation>កំហុសកំឡុងពេលភ្ជាប់ SSL ៖ %1</translation> + <source>Error during SSL handshake: %1</source> + <translation>កំហុសកំឡុងពេលភ្ជាប់ SSL ៖ %1</translation> </message> <message> - <source>Error creating SSL context (%1)</source> - <translation>កំហុសក្នុងការបង្កើតបរិបទ SSL (%1)</translation> + <source>Error creating SSL context (%1)</source> + <translation>កំហុសក្នុងការបង្កើតបរិបទ SSL (%1)</translation> </message> <message> - <source>Invalid or empty cipher list (%1)</source> - <translation>បញ្ជីអក្សរសម្ងាត់ទទេ ឬមិនត្រឹមត្រូវ (%1)</translation> + <source>Invalid or empty cipher list (%1)</source> + <translation>បញ្ជីអក្សរសម្ងាត់ទទេ ឬមិនត្រឹមត្រូវ (%1)</translation> </message> <message> - <source>Error creating SSL session, %1</source> - <translation>កំហុសក្នុងការបង្កើតសម័យ SSL %1</translation> + <source>Error creating SSL session, %1</source> + <translation>កំហុសក្នុងការបង្កើតសម័យ SSL %1</translation> </message> <message> - <source>Error creating SSL session: %1</source> - <translation>កំហុសក្នុងការបង្កើតសម័យ SSL ៖ %1</translation> + <source>Error creating SSL session: %1</source> + <translation>កំហុសក្នុងការបង្កើតសម័យ SSL ៖ %1</translation> </message> <message> - <source>Cannot provide a certificate with no key, %1</source> - <translation>មិនអាចផ្ដល់វិញ្ញាបនបត្រដែលគ្មានសោ %1 បានទេ</translation> + <source>Cannot provide a certificate with no key, %1</source> + <translation>មិនអាចផ្ដល់វិញ្ញាបនបត្រដែលគ្មានសោ %1 បានទេ</translation> </message> <message> - <source>Error loading local certificate, %1</source> - <translation>កំហុសក្នុងការផ្ទុកវិញ្ញាបនបត្រ %1</translation> + <source>Error loading local certificate, %1</source> + <translation>កំហុសក្នុងការផ្ទុកវិញ្ញាបនបត្រ %1</translation> </message> <message> - <source>Error loading private key, %1</source> - <translation>កំហុសក្នុងការផ្ទុកសោឯកជន %1</translation> + <source>Error loading private key, %1</source> + <translation>កំហុសក្នុងការផ្ទុកសោឯកជន %1</translation> </message> <message> - <source>Private key does not certificate public key, %1</source> - <translation type="unfinished"></translation> + <source>Private key do not certificate public key, %1</source> + <translation>សោឯកជនមិនមែនជាសោសាធារណៈរបស់វិញ្ញាបនបត្រ %1</translation> </message> -</context> -<context> + </context> + <context> <name>QTDSDriver</name> <message> - <source>Unable to open connection</source> - <translation>មិនអាចបើកការតភ្ជាប់បានទេ</translation> + <source>Unable to open connection</source> + <translation>មិនអាចបើកការតភ្ជាប់បានទេ</translation> </message> <message> - <source>Unable to use database</source> - <translation>មិនអាចប្រើមូលដ្ឋានទិន្នន័យបានទេ</translation> + <source>Unable to use database</source> + <translation>មិនអាចប្រើមូលដ្ឋានទិន្នន័យបានទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QTabBar</name> <message> - <source>Scroll Left</source> - <translation>រមូរទៅឆ្វេង</translation> + <source>Scroll Left</source> + <translation>រមូរទៅឆ្វេង</translation> + </message> + <message> + <source>Scroll Right</source> + <translation>រមូរទៅស្ដាំ</translation> </message> + </context> + <context> + <name>QTcpServer</name> <message> - <source>Scroll Right</source> - <translation>រមូរទៅស្ដាំ</translation> + <source>Socket operation unsupported</source> + <translation>មិនគាំទ្រប្រតិបត្តិការរន្ធទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QTextControl</name> <message> - <source>&Undo</source> - <translation>មិនធ្វើវិញ</translation> + <source>&Undo</source> + <translation>មិនធ្វើវិញ</translation> </message> <message> - <source>&Redo</source> - <translation>ធ្វើវិញ</translation> + <source>&Redo</source> + <translation>ធ្វើវិញ</translation> </message> <message> - <source>Cu&t</source> - <translation>កាត់</translation> + <source>Cu&t</source> + <translation>កាត់</translation> </message> <message> - <source>&Copy</source> - <translation>ចម្លង</translation> + <source>&Copy</source> + <translation>ចម្លង</translation> </message> <message> - <source>Copy &Link Location</source> - <translation>ចម្លងទីតាំងតំណ</translation> + <source>Copy &Link Location</source> + <translation>ចម្លងទីតាំងតំណ</translation> </message> <message> - <source>&Paste</source> - <translation>បិទភ្ជាប់</translation> + <source>&Paste</source> + <translation>បិទភ្ជាប់</translation> </message> <message> - <source>Delete</source> - <translation>លុប</translation> + <source>Delete</source> + <translation>លុប</translation> </message> <message> - <source>Select All</source> - <translation>ជ្រើសទាំងអស់</translation> + <source>Select All</source> + <translation>ជ្រើសទាំងអស់</translation> </message> -</context> -<context> + </context> + <context> <name>QToolButton</name> <message> - <source>Press</source> - <translation>ចុច</translation> + <source>Press</source> + <translation>ចុច</translation> </message> <message> - <source>Open</source> - <translation>បើក</translation> + <source>Open</source> + <translation>បើក</translation> </message> -</context> -<context> + </context> + <context> <name>QUdpSocket</name> <message> - <source>This platform does not support IPv6</source> - <translation>វេទិកានេះមិនគាំទ្រ IPv6 នោះទេ</translation> + <source>This platform does not support IPv6</source> + <translation>វេទិកានេះមិនគាំទ្រ IPv6 នោះទេ</translation> </message> -</context> -<context> + </context> + <context> <name>QUndoGroup</name> <message> - <source>Undo</source> - <translation>មិនធ្វើវិញ</translation> + <source>Undo</source> + <translation>មិនធ្វើវិញ</translation> </message> <message> - <source>Redo</source> - <translation>ធ្វើវិញ</translation> + <source>Redo</source> + <translation>ធ្វើវិញ</translation> </message> -</context> -<context> + </context> + <context> <name>QUndoModel</name> <message> - <source><empty></source> - <translation><ទទេ></translation> + <source><empty></source> + <translation><ទទេ></translation> </message> -</context> -<context> + </context> + <context> <name>QUndoStack</name> <message> - <source>Undo</source> - <translation>មិនធ្វើវិញ</translation> + <source>Undo</source> + <translation>មិនធ្វើវិញ</translation> </message> <message> - <source>Redo</source> - <translation>ធ្វើវិញ</translation> + <source>Redo</source> + <translation>ធ្វើវិញ</translation> </message> -</context> -<context> + </context> + <context> <name>QUnicodeControlCharacterMenu</name> <message> - <source>LRM Left-to-right mark</source> - <translation>សញ្ញាពីឆ្វេងទៅស្ដាំ LRM</translation> - </message> - <message> - <source>RLM Right-to-left mark</source> - <translation>សញ្ញាសម្គាល់ពីស្ដាំទៅឆ្វេង</translation> - </message> - <message> - <source>ZWJ Zero width joiner</source> - <translation>ZWJ (Zero width joiner)</translation> - </message> - <message> - <source>ZWNJ Zero width non-joiner</source> - <translation>ZWNJ (Zero width non-joiner)</translation> - </message> - <message> - <source>ZWSP Zero width space</source> - <translation>ZWSP (Zero width space)</translation> - </message> - <message> - <source>LRE Start of left-to-right embedding</source> - <translation>LRE ចាប់ផ្ដើមបង្កើតពីឆ្វេងទៅស្ដាំ</translation> - </message> - <message> - <source>RLE Start of right-to-left embedding</source> - <translation>RLE ចាប់ផ្ដើមបង្កប់ពីស្ដាំទៅឆ្វេង</translation> - </message> - <message> - <source>LRO Start of left-to-right override</source> - <translation>LRO ចាប់ផ្ដើមបដិសេធពីឆ្វេងទៅស្ដាំ</translation> - </message> - <message> - <source>RLO Start of right-to-left override</source> - <translation>RLO ចាប់ផ្ដើមបដិសេធពីស្ដាំទៅឆ្វេង</translation> - </message> - <message> - <source>PDF Pop directional formatting</source> - <translation>PDF (Pop directional formatting)</translation> - </message> - <message> - <source>Insert Unicode control character</source> - <translation>បញ្ចូលតួអក្សរបញ្ជាយូនីកូដ</translation> - </message> -</context> -<context> - <name>QWebFrame</name> - <message> - <source>Request cancelled</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Request blocked</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Cannot show URL</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Frame load interruped by policy change</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Cannot show mimetype</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>File does not exist</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>QWebPage</name> - <message> - <source>Bad HTTP request</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Submit</source> - <comment>default label for Submit buttons in forms on web pages</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Submit</source> - <comment>Submit (input element) alt text for <input> elements with no alt, title, or value</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Reset</source> - <comment>default label for Reset buttons in forms on web pages</comment> - <translation type="unfinished">កំណត់ឡើងវិញ</translation> - </message> - <message> - <source>This is a searchable index. Enter search keywords: </source> - <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Choose File</source> - <comment>title for file button used in HTML forms</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>No file selected</source> - <comment>text to display in file button used in HTML forms when no file is selected</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Open in New Window</source> - <comment>Open in New Window context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Save Link...</source> - <comment>Download Linked File context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Copy Link</source> - <comment>Copy Link context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Open Image</source> - <comment>Open Image in New Window context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Save Image</source> - <comment>Download Image context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Copy Image</source> - <comment>Copy Link context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Open Frame</source> - <comment>Open Frame in New Window context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Copy</source> - <comment>Copy context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Go Back</source> - <comment>Back context menu item</comment> - <translation type="unfinished">ទៅក្រោយ</translation> - </message> - <message> - <source>Go Forward</source> - <comment>Forward context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Stop</source> - <comment>Stop context menu item</comment> - <translation type="unfinished">បញ្ឈប់</translation> - </message> - <message> - <source>Reload</source> - <comment>Reload context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Cut</source> - <comment>Cut context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Paste</source> - <comment>Paste context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>No Guesses Found</source> - <comment>No Guesses Found context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Ignore</source> - <comment>Ignore Spelling context menu item</comment> - <translation type="unfinished">មិនអើពើ</translation> + <source>LRM Left-to-right mark</source> + <translation>សញ្ញាពីឆ្វេងទៅស្ដាំ LRM</translation> </message> <message> - <source>Add To Dictionary</source> - <comment>Learn Spelling context menu item</comment> - <translation type="unfinished"></translation> + <source>RLM Right-to-left mark</source> + <translation>សញ្ញាសម្គាល់ពីស្ដាំទៅឆ្វេង</translation> </message> <message> - <source>Search The Web</source> - <comment>Search The Web context menu item</comment> - <translation type="unfinished"></translation> + <source>ZWJ Zero width joiner</source> + <translation>ZWJ (Zero width joiner)</translation> </message> <message> - <source>Look Up In Dictionary</source> - <comment>Look Up in Dictionary context menu item</comment> - <translation type="unfinished"></translation> + <source>ZWNJ Zero width non-joiner</source> + <translation>ZWNJ (Zero width non-joiner)</translation> </message> <message> - <source>Open Link</source> - <comment>Open Link context menu item</comment> - <translation type="unfinished"></translation> + <source>ZWSP Zero width space</source> + <translation>ZWSP (Zero width space)</translation> </message> <message> - <source>Ignore</source> - <comment>Ignore Grammar context menu item</comment> - <translation type="unfinished">មិនអើពើ</translation> + <source>LRE Start of left-to-right embedding</source> + <translation>LRE ចាប់ផ្ដើមបង្កើតពីឆ្វេងទៅស្ដាំ</translation> </message> <message> - <source>Spelling</source> - <comment>Spelling and Grammar context sub-menu item</comment> - <translation type="unfinished"></translation> + <source>RLE Start of right-to-left embedding</source> + <translation>RLE ចាប់ផ្ដើមបង្កប់ពីស្ដាំទៅឆ្វេង</translation> </message> <message> - <source>Show Spelling and Grammar</source> - <comment>menu item title</comment> - <translation type="unfinished"></translation> + <source>LRO Start of left-to-right override</source> + <translation>LRO ចាប់ផ្ដើមបដិសេធពីឆ្វេងទៅស្ដាំ</translation> </message> <message> - <source>Hide Spelling and Grammar</source> - <comment>menu item title</comment> - <translation type="unfinished"></translation> + <source>RLO Start of right-to-left override</source> + <translation>RLO ចាប់ផ្ដើមបដិសេធពីស្ដាំទៅឆ្វេង</translation> </message> <message> - <source>Check Spelling</source> - <comment>Check spelling context menu item</comment> - <translation type="unfinished"></translation> + <source>PDF Pop directional formatting</source> + <translation>PDF (Pop directional formatting)</translation> </message> <message> - <source>Check Spelling While Typing</source> - <comment>Check spelling while typing context menu item</comment> - <translation type="unfinished"></translation> + <source>Insert Unicode control character</source> + <translation>បញ្ចូលតួអក្សរបញ្ជាយូនីកូដ</translation> </message> - <message> - <source>Check Grammar With Spelling</source> - <comment>Check grammar with spelling context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Fonts</source> - <comment>Font context sub-menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Bold</source> - <comment>Bold context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Italic</source> - <comment>Italic context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Underline</source> - <comment>Underline context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Outline</source> - <comment>Outline context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Direction</source> - <comment>Writing direction context sub-menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Default</source> - <comment>Default writing direction context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>LTR</source> - <comment>Left to Right context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>RTL</source> - <comment>Right to Left context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Inspect</source> - <comment>Inspect Element context menu item</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>No recent searches</source> - <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Recent searches</source> - <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Clear recent searches</source> - <comment>menu item in Recent Searches menu that empties menu's contents</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unknown</source> - <comment>Unknown filesize FTP directory listing item</comment> - <translation type="unfinished">មិនស្គាល់</translation> - </message> - <message> - <source>%1 (%2x%3 pixels)</source> - <comment>Title string for images</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Web Inspector - %2</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> + </context> + <context> <name>QWhatsThisAction</name> <message> - <source>What's This?</source> - <translation>តើនេះជាអ្វី ?</translation> + <source>What's This?</source> + <translation>តើនេះជាអ្វី ?</translation> </message> -</context> -<context> + </context> + <context> <name>QWidget</name> <message> - <source>*</source> - <translation>*</translation> + <source>*</source> + <translation>*</translation> </message> -</context> -<context> + </context> + <context> <name>QWizard</name> <message> - <source>Go Back</source> - <translation>ទៅក្រោយ</translation> - </message> - <message> - <source>Continue</source> - <translation>បន្ត</translation> - </message> - <message> - <source>Commit</source> - <translation>បញ្ជូន</translation> + <source>Go Back</source> + <translation>ទៅក្រោយ</translation> </message> <message> - <source>Done</source> - <translation>ធ្វើរួច</translation> + <source>Continue</source> + <translation>បន្ត</translation> </message> <message> - <source>Quit</source> - <translation>ចេញ</translation> + <source>Commit</source> + <translation>បញ្ជូន</translation> </message> <message> - <source>Help</source> - <translation>ជំនួយ</translation> + <source>Done</source> + <translation>ធ្វើរួច</translation> </message> <message> - <source>< &Back</source> - <translation><ថយក្រោយ</translation> + <source>Quit</source> + <translation>ចេញ</translation> </message> <message> - <source>&Finish</source> - <translation>បញ្ចប់</translation> + <source>Help</source> + <translation>ជំនួយ</translation> </message> <message> - <source>Cancel</source> - <translation>បោះបង់</translation> + <source>< &Back</source> + <translation><ថយក្រោយ</translation> </message> <message> - <source>&Help</source> - <translation>ជំនួយ</translation> + <source>&Finish</source> + <translation>បញ្ចប់</translation> </message> <message> - <source>&Next</source> - <translation type="unfinished"></translation> + <source>Cancel</source> + <translation>បោះបង់</translation> </message> <message> - <source>&Next ></source> - <translation type="unfinished">បន្ទាប់ ></translation> + <source>&Help</source> + <translation>ជំនួយ</translation> </message> -</context> -<context> + </context> + <context> <name>QWorkspace</name> <message> - <source>&Restore</source> - <translation>ស្ដារឡើងវិញ</translation> + <source>&Restore</source> + <translation>ស្ដារឡើងវិញ</translation> </message> <message> - <source>&Move</source> - <translation>ផ្លាស់ទី</translation> + <source>&Move</source> + <translation>ផ្លាស់ទី</translation> </message> <message> - <source>&Size</source> - <translation>ទំហំ</translation> + <source>&Size</source> + <translation>ទំហំ</translation> </message> <message> - <source>Mi&nimize</source> - <translation>បង្រួមអប្បបរមា</translation> + <source>Mi&nimize</source> + <translation>បង្រួមអប្បបរមា</translation> </message> <message> - <source>Ma&ximize</source> - <translation>ពង្រីកអតិបរមា</translation> + <source>Ma&ximize</source> + <translation>ពង្រីកអតិបរមា</translation> </message> <message> - <source>&Close</source> - <translation>បិទ</translation> + <source>&Close</source> + <translation>បិទ</translation> </message> <message> - <source>Stay on &Top</source> - <translation>នៅកំពូល</translation> + <source>Stay on &Top</source> + <translation>នៅកំពូល</translation> </message> <message> - <source>Sh&ade</source> - <translation>ស្រមោល</translation> + <source>Sh&ade</source> + <translation>ស្រមោល</translation> </message> <message> - <source>%1 - [%2]</source> - <translation>%1 - [%2]</translation> + <source>%1 - [%2]</source> + <translation>%1 - [%2]</translation> </message> <message> - <source>Minimize</source> - <translation>បង្រួមអប្បបរមា</translation> + <source>Minimize</source> + <translation>បង្រួមអប្បបរមា</translation> </message> <message> - <source>Restore Down</source> - <translation>ស្ដារចុះក្រោមឡើងវិញ</translation> + <source>Restore Down</source> + <translation>ស្ដារចុះក្រោមឡើងវិញ</translation> </message> <message> - <source>Close</source> - <translation>បិទ</translation> + <source>Close</source> + <translation>បិទ</translation> </message> <message> - <source>&Unshade</source> - <translation>មិនដាក់ស្រមោល</translation> + <source>&Unshade</source> + <translation>មិនដាក់ស្រមោល</translation> </message> -</context> -<context> + </context> + <context> <name>QXml</name> <message> - <source>no error occurred</source> - <translation>គ្មានកំហុសបានកើតឡើងទេ</translation> + <source>no error occurred</source> + <translation>គ្មានកំហុសបានកើតឡើងទេ</translation> </message> <message> - <source>error triggered by consumer</source> - <translation>កំហុសបានកេះដោយអ្នកប្រើប្រាស់</translation> + <source>error triggered by consumer</source> + <translation>កំហុសបានកេះដោយអ្នកប្រើប្រាស់</translation> </message> <message> - <source>unexpected end of file</source> - <translation>ចុងឯកសារដែលមិនបានរំពឹងទុក</translation> + <source>unexpected end of file</source> + <translation>ចុងឯកសារដែលមិនបានរំពឹងទុក</translation> </message> <message> - <source>more than one document type definition</source> - <translation>មានការកំណត់ប្រភេទឯកសារច្រើនជាងមួយ</translation> + <source>more than one document type definition</source> + <translation>មានការកំណត់ប្រភេទឯកសារច្រើនជាងមួយ</translation> </message> <message> - <source>error occurred while parsing element</source> - <translation>កំហុសបានកើតឡើងខណៈពេលញែកធាតុ</translation> + <source>error occurred while parsing element</source> + <translation>កំហុសបានកើតឡើងខណៈពេលញែកធាតុ</translation> </message> <message> - <source>tag mismatch</source> - <translation>មិនផ្គូផ្គងស្លាក</translation> + <source>tag mismatch</source> + <translation>មិនផ្គូផ្គងស្លាក</translation> </message> <message> - <source>error occurred while parsing content</source> - <translation>កំហុសបានកើតឡើងខណៈពេលញែកមាតិកា</translation> + <source>error occurred while parsing content</source> + <translation>កំហុសបានកើតឡើងខណៈពេលញែកមាតិកា</translation> </message> <message> - <source>unexpected character</source> - <translation>តួអក្សរដែលមិនបានរំពឹងទុក</translation> + <source>unexpected character</source> + <translation>តួអក្សរដែលមិនបានរំពឹងទុក</translation> </message> <message> - <source>invalid name for processing instruction</source> - <translation>ឈ្មោះមិនត្រឹមត្រូវសម្រាប់ដំណើរការសេចក្ដីណែនាំ</translation> + <source>invalid name for processing instruction</source> + <translation>ឈ្មោះមិនត្រឹមត្រូវសម្រាប់ដំណើរការសេចក្ដីណែនាំ</translation> </message> <message> - <source>version expected while reading the XML declaration</source> - <translation>កំណែបានរំពឹងទុកខណៈពេលអានការប្រកាស XML</translation> + <source>version expected while reading the XML declaration</source> + <translation>កំណែបានរំពឹងទុកខណៈពេលអានការប្រកាស XML</translation> </message> <message> - <source>wrong value for standalone declaration</source> - <translation>តម្លៃមិនត្រឹមត្រូវសម្រាប់ការប្រកាសតែម្នាក់ឯង</translation> + <source>wrong value for standalone declaration</source> + <translation>តម្លៃមិនត្រឹមត្រូវសម្រាប់ការប្រកាសតែម្នាក់ឯង</translation> </message> <message> - <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> - <translation>ការប្រកាសអ៊ីនកូដ ឬការប្រកាសតែឯងបានរំពឹងទុកខណៈពេលអានការប្រកាស XML</translation> + <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> + <translation>ការប្រកាសអ៊ីនកូដ ឬការប្រកាសតែឯងបានរំពឹងទុកខណៈពេលអានការប្រកាស XML</translation> </message> <message> - <source>standalone declaration expected while reading the XML declaration</source> - <translation>ការប្រកាសតែឯងបានរំពឹងទុកខណៈពេលអានការប្រកាស XML</translation> + <source>standalone declaration expected while reading the XML declaration</source> + <translation>ការប្រកាសតែឯងបានរំពឹងទុកខណៈពេលអានការប្រកាស XML</translation> </message> <message> - <source>error occurred while parsing document type definition</source> - <translation>កំហុសបានកើតឡើងខណៈពេលញែកការកំណត់ប្រភេទឯកសារ</translation> + <source>error occurred while parsing document type definition</source> + <translation>កំហុសបានកើតឡើងខណៈពេលញែកការកំណត់ប្រភេទឯកសារ</translation> </message> <message> - <source>letter is expected</source> - <translation>អក្សរត្រូវបានរំពឹងទុក</translation> + <source>letter is expected</source> + <translation>អក្សរត្រូវបានរំពឹងទុក</translation> </message> <message> - <source>error occurred while parsing comment</source> - <translation>កំហុសបានកើតឡើងខណៈពេលញែកមតិយោបល់</translation> + <source>error occurred while parsing comment</source> + <translation>កំហុសបានកើតឡើងខណៈពេលញែកមតិយោបល់</translation> </message> <message> - <source>error occurred while parsing reference</source> - <translation>កំហុសបានកើតឡើងខណៈពេលញែកសេចក្ដីយោង</translation> + <source>error occurred while parsing reference</source> + <translation>កំហុសបានកើតឡើងខណៈពេលញែកសេចក្ដីយោង</translation> </message> <message> - <source>internal general entity reference not allowed in DTD</source> - <translation>មិនអនុញ្ញាតធាតុទូទៅខាងក្នុងនៅក្នុង DTD ទេ</translation> + <source>internal general entity reference not allowed in DTD</source> + <translation>មិនអនុញ្ញាតធាតុទូទៅខាងក្នុងនៅក្នុង DTD ទេ</translation> </message> <message> - <source>external parsed general entity reference not allowed in attribute value</source> - <translation>សេចក្ដីយោងធាតុទូទៅបានញែកខាងក្រៅ មិនអនុញ្ញាតនៅក្នុងតម្លៃគុណលក្ខណៈ</translation> + <source>external parsed general entity reference not allowed in attribute value</source> + <translation>សេចក្ដីយោងធាតុទូទៅបានញែកខាងក្រៅ មិនអនុញ្ញាតនៅក្នុងតម្លៃគុណលក្ខណៈ</translation> </message> <message> - <source>external parsed general entity reference not allowed in DTD</source> - <translation>សេចក្ដីយោងធាតុទូទៅបានញែកខាងក្រៅមិនអនុញ្ញាតនៅក្នុង DTD នោះទេ</translation> + <source>external parsed general entity reference not allowed in DTD</source> + <translation>សេចក្ដីយោងធាតុទូទៅបានញែកខាងក្រៅមិនអនុញ្ញាតនៅក្នុង DTD នោះទេ</translation> </message> <message> - <source>unparsed entity reference in wrong context</source> - <translation>សេចក្ដីយោងធាតុដែលមិនបានញែកនៅក្នុងបរិបទមិនត្រឹមត្រូវ</translation> + <source>unparsed entity reference in wrong context</source> + <translation>សេចក្ដីយោងធាតុដែលមិនបានញែកនៅក្នុងបរិបទមិនត្រឹមត្រូវ</translation> </message> <message> - <source>recursive entities</source> - <translation>ការហៅធាតុឡើងវិញ</translation> + <source>recursive entities</source> + <translation>ការហៅធាតុឡើងវិញ</translation> </message> <message> - <source>error in the text declaration of an external entity</source> - <translation>កំហុសនៅក្នុងការប្រកាសអត្ថបទរបស់ធាតុខាងក្រៅ</translation> + <source>error in the text declaration of an external entity</source> + <translation>កំហុសនៅក្នុងការប្រកាសអត្ថបទរបស់ធាតុខាងក្រៅ</translation> </message> -</context> -<context> + </context> + <context> <name>QXmlStream</name> <message> - <source>Extra content at end of document.</source> - <translation>បរិបទបន្ថែមនៅចុងឯកសារ .</translation> - </message> - <message> - <source>Invalid entity value.</source> - <translation>តម្លៃធាតុមិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Invalid XML character.</source> - <translation>តួអក្សរ XML មិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Sequence ']]>' not allowed in content.</source> - <translation>លំដាប់ ']]>' មិនបានអនុញ្ញាតនៅក្នុងមាតិកាទេ ។</translation> - </message> - <message> - <source>Namespace prefix '%1' not declared</source> - <translation>បុព្វបទចន្លោះឈ្មោះ '%1' មិនបានប្រកាសទេ</translation> - </message> - <message> - <source>Attribute redefined.</source> - <translation>បានកំណត់គុណលក្ខណៈឡើងវិញ ។</translation> - </message> - <message> - <source>Unexpected character '%1' in public id literal.</source> - <translation>តួអក្សរដែលមិនបានរំពឹងទុក '%1' នៅក្នុងលេខសម្គាល់សាធារណៈត្រង់ៗ ។</translation> - </message> - <message> - <source>Invalid XML version string.</source> - <translation>ខ្សែអក្សរកំណែ XML មិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Unsupported XML version.</source> - <translation>មិនគាំទ្រកំណែ XML នោះទេ ។</translation> - </message> - <message> - <source>%1 is an invalid encoding name.</source> - <translation>%1 គឺជាឈ្មោះអ៊ីនកូដមិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Encoding %1 is unsupported</source> - <translation>ការអ៊ីនកូដ %1 មិនត្រូវបានគាំទ្រទេ</translation> - </message> - <message> - <source>Standalone accepts only yes or no.</source> - <translation>ព្រមទទួលយកតែឯងប្រសិនបើ បាទ/ចាស ឬទេ ។</translation> - </message> - <message> - <source>Invalid attribute in XML declaration.</source> - <translation>គុណលក្ខណៈមិនត្រឹមត្រូវនៅក្នុងការប្រកាស XML ។</translation> - </message> - <message> - <source>Premature end of document.</source> - <translation>មុនដល់ចុងឯកសារ ។</translation> - </message> - <message> - <source>Invalid document.</source> - <translation>ឯកសារមិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Expected </source> - <translation>បានរំពឹងទុក </translation> - </message> - <message> - <source>, but got '</source> - <translation> ប៉ុន្តែបានទទួល '</translation> - </message> - <message> - <source>Unexpected '</source> - <translation>មិនរំពឹងទុក '</translation> - </message> - <message> - <source>Expected character data.</source> - <translation>ទិន្នន័យតួអក្សរមិនរំពឹងទុក ។</translation> - </message> - <message> - <source>Recursive entity detected.</source> - <translation>បានលុបធាតុម្ដងទៀង ។</translation> - </message> - <message> - <source>Start tag expected.</source> - <translation>ចាប់ផ្ដើមស្លាកដែលរំពឹងទុក ។</translation> - </message> - <message> - <source>XML declaration not at start of document.</source> - <translation>ការប្រកាស XML មិននៅដើមឯកសារទេ ។</translation> - </message> - <message> - <source>NDATA in parameter entity declaration.</source> - <translation>ការប្រកាសធាតុប៉ារ៉ាម៉ែត្រនៅក្នុង NDATA ។</translation> - </message> - <message> - <source>%1 is an invalid processing instruction name.</source> - <translation>%1 មិនមែនជាឈ្មោះសេចក្ដីណែនាំដំណើរការត្រឹមត្រូវទេ ។</translation> - </message> - <message> - <source>Invalid processing instruction name.</source> - <translation>ឈ្មោះសេចក្ដីណែនាំដំណើរការមិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Illegal namespace declaration.</source> - <translation>ការប្រកាសចន្លោះឈ្មោះមិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Invalid XML name.</source> - <translation>ឈ្មោះ XML មិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>Opening and ending tag mismatch.</source> - <translation>ការបើក និងបិទស្លាកមិនផ្គូផ្គងគ្នាទេ ។</translation> - </message> - <message> - <source>Reference to unparsed entity '%1'.</source> - <translation>សេចក្ដីយោងទៅកាន់ធាតុដែលមិនបានញែក '%1' ។</translation> - </message> - <message> - <source>Entity '%1' not declared.</source> - <translation>ធាតុ '%1' មិនបានប្រកាសទេ ។</translation> - </message> - <message> - <source>Reference to external entity '%1' in attribute value.</source> - <translation>សេចក្ដីយោងទៅកាន់ធាតុខាងក្រៅ '%1' នៅក្នុងតម្លៃគុណលក្ខណៈ ។</translation> - </message> - <message> - <source>Invalid character reference.</source> - <translation>សេចក្ដីយោងតួអក្សរមិនត្រឹមត្រូវទេ ។</translation> - </message> - <message> - <source>Encountered incorrectly encoded content.</source> - <translation>បានជួបមាតិកាដែលបានអ៊ីនកូដមិនត្រឹមត្រូវ ។</translation> - </message> - <message> - <source>The standalone pseudo attribute must appear after the encoding.</source> - <translation>គុណលក្ខណៈ pseudo តែឯងត្រូវតែបង្ហាញបន្ទាប់ពីការអ៊ីនកូដ ។</translation> - </message> - <message> - <source>%1 is an invalid PUBLIC identifier.</source> - <translation>%1 គឺជាឧបករណ៍កំណត់អត្តសញ្ញាណ PUBLIC មិនត្រឹមត្រូវទេ ។</translation> - </message> -</context> -<context> - <name>QtXmlPatterns</name> - <message> - <source>An %1-attribute with value %2 has already been declared.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>An %1-attribute must have a valid %2 as value, which %3 isn't.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Network timeout.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Element %1 can't be serialized because it appears outside the document element.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Attribute %1 can't be serialized because it appears at the top level.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Year %1 is invalid because it begins with %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Day %1 is outside the range %2..%3.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Month %1 is outside the range %2..%3.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Overflow: Can't represent date %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Day %1 is invalid for month %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Time %1:%2:%3.%4 is invalid.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Overflow: Date can't be represented.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>At least one component must be present.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>At least one time component must appear after the %1-delimiter.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No operand in an integer division, %1, can be %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The first operand in an integer division, %1, cannot be infinity (%2).</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The second operand in a division, %1, cannot be zero (%2).</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is not a valid value of type %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>When casting to %1 from %2, the source value cannot be %3.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Integer division (%1) by zero (%2) is undefined.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Division (%1) by zero (%2) is undefined.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Modulus division (%1) by zero (%2) is undefined.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A value of type %1 cannot have an Effective Boolean Value.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Value %1 of type %2 exceeds maximum (%3).</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Value %1 of type %2 is below minimum (%3).</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is not valid as a value of type %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Operator %1 cannot be used on type %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The namespace URI in the name for a computed attribute cannot be %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Type error in cast, expected %1, received %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No casting is possible with %1 as the target type.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>It is not possible to cast from %1 to %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>It's not possible to cast the value %1 of type %2 to %3</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Failure when casting from %1 to %2: %3</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A comment cannot contain %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A comment cannot end with a %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No comparisons can be done involving the type %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Operator %1 is not available between atomic values of type %2 and %3.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A library module cannot be evaluated directly. It must be imported from a main module.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A positional predicate must evaluate to a single numeric value.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The data of a processing instruction cannot contain the string %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No namespace binding exists for the prefix %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No namespace binding exists for the prefix %1 in %2</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is an invalid %2</source> - <translation type="unfinished"></translation> - </message> - <message numerus="yes"> - <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> - <translation type="unfinished"> - <numerusform></numerusform> - </translation> - </message> - <message numerus="yes"> - <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source> - <translation type="unfinished"> - <numerusform></numerusform> - </translation> - </message> - <message> - <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is not a valid XML 1.0 character.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The first argument to %1 cannot be of type %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 was called.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 matches newline characters</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 and %2 match the start and end of a line.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Matches are case insensitive</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Whitespace characters are removed, except when they appear in character classes</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is an invalid regular expression pattern: %2</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>It will not be possible to retrieve %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The default collection is undefined</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 cannot be retrieved</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is not a whole number of minutes.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Required cardinality is %1; got cardinality %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The item %1 did not match the required type %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is an unknown schema type.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Only one %1 declaration can occur in the query prolog.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The initialization of variable %1 depends on itself</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No variable by name %1 exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The variable %1 is unused</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No function with signature %1 is available</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A default namespace declaration must occur before function, variable, and option declarations.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Namespace declarations must occur before function, variable, and option declarations.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Module imports must occur before function, variable, and option declarations.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>It is not possible to redeclare prefix %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Only the prefix %1 can be declared to bind the namespace %2. By default, it is already bound to the prefix %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Prefix %1 is already declared in the prolog.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The name of an option must have a prefix. There is no default namespace for options.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The target namespace of a %1 cannot be empty.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The module import feature is not supported</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A variable by name %1 has already been declared in the prolog.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No value is available for the external variable by name %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>A function already exists with the signature %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>An argument by name %1 has already been declared. Every argument name must be unique.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The %1-axis is unsupported in XQuery</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is not a valid numeric literal.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No function by name %1 is available.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>%1 is an invalid namespace URI.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>It is not possible to bind to the prefix %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Two namespace declaration attributes have the same name: %1.</source> - <translation type="unfinished"></translation> + <source>Extra content at end of document.</source> + <translation>បរិបទបន្ថែមនៅចុងឯកសារ .</translation> </message> <message> - <source>The namespace URI must be a constant and cannot use enclosed expressions.</source> - <translation type="unfinished"></translation> + <source>Invalid entity value.</source> + <translation>តម្លៃធាតុមិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>An attribute by name %1 has already appeared on this element.</source> - <translation type="unfinished"></translation> + <source>Invalid XML character.</source> + <translation>តួអក្សរ XML មិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> - <translation type="unfinished"></translation> + <source>Sequence ']]>' not allowed in content.</source> + <translation>លំដាប់ ']]>' មិនបានអនុញ្ញាតនៅក្នុងមាតិកាទេ ។</translation> </message> <message> - <source>The name %1 does not refer to any schema type.</source> - <translation type="unfinished"></translation> + <source>Namespace prefix '%1' not declared</source> + <translation>បុព្វបទចន្លោះឈ្មោះ '%1' មិនបានប្រកាសទេ</translation> </message> <message> - <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source> - <translation type="unfinished"></translation> + <source>Attribute redefined.</source> + <translation>បានកំណត់គុណលក្ខណៈឡើងវិញ ។</translation> </message> <message> - <source>%1 is not an atomic type. Casting is only possible to atomic types.</source> - <translation type="unfinished"></translation> + <source>Unexpected character '%1' in public id literal.</source> + <translation>តួអក្សរដែលមិនបានរំពឹងទុក '%1' នៅក្នុងលេខសម្គាល់សាធារណៈត្រង់ៗ ។</translation> </message> <message> - <source>%1 is not a valid name for a processing-instruction. Therefore this name test will never match.</source> - <translation type="unfinished"></translation> + <source>Invalid XML version string.</source> + <translation>ខ្សែអក្សរកំណែ XML មិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> - <translation type="unfinished"></translation> + <source>Unsupported XML version.</source> + <translation>មិនគាំទ្រកំណែ XML នោះទេ ។</translation> </message> <message> - <source>The name of an extension expression must be in a namespace.</source> - <translation type="unfinished"></translation> + <source>%1 is an invalid encoding name.</source> + <translation>%1 គឺជាឈ្មោះអ៊ីនកូដមិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>empty</source> - <translation type="unfinished"></translation> + <source>Encoding %1 is unsupported</source> + <translation>ការអ៊ីនកូដ %1 មិនត្រូវបានគាំទ្រទេ</translation> </message> <message> - <source>zero or one</source> - <translation type="unfinished"></translation> + <source>Invalid XML encoding name.</source> + <translation>ឈ្មោះអ៊ីនកូដ XML មិនត្រឹមត្រូវទេ ។</translation> </message> <message> - <source>exactly one</source> - <translation type="unfinished"></translation> + <source>Standalone accepts only yes or no.</source> + <translation>ព្រមទទួលយកតែឯងប្រសិនបើ បាទ/ចាស ឬទេ ។</translation> </message> <message> - <source>one or more</source> - <translation type="unfinished"></translation> + <source>Invalid attribute in XML declaration.</source> + <translation>គុណលក្ខណៈមិនត្រឹមត្រូវនៅក្នុងការប្រកាស XML ។</translation> </message> <message> - <source>zero or more</source> - <translation type="unfinished"></translation> + <source>Premature end of document.</source> + <translation>មុនដល់ចុងឯកសារ ។</translation> </message> <message> - <source>Required type is %1, but %2 was found.</source> - <translation type="unfinished"></translation> + <source>Invalid document.</source> + <translation>ឯកសារមិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>Promoting %1 to %2 may cause loss of precision.</source> - <translation type="unfinished"></translation> + <source>Expected </source> + <translation>បានរំពឹងទុក </translation> </message> <message> - <source>The focus is undefined.</source> - <translation type="unfinished"></translation> + <source>, but got '</source> + <translation> ប៉ុន្តែបានទទួល '</translation> </message> <message> - <source>It's not possible to add attributes after any other kind of node.</source> - <translation type="unfinished"></translation> + <source>Unexpected '</source> + <translation>មិនរំពឹងទុក '</translation> </message> <message> - <source>An attribute by name %1 has already been created.</source> - <translation type="unfinished"></translation> + <source>Expected character data.</source> + <translation>ទិន្នន័យតួអក្សរមិនរំពឹងទុក ។</translation> </message> <message> - <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source> - <translation type="unfinished"></translation> + <source>Recursive entity detected.</source> + <translation>បានលុបធាតុម្ដងទៀង ។</translation> </message> -</context> -<context> - <name>VolumeSlider</name> <message> - <source>Muted</source> - <translation type="unfinished"></translation> + <source>Start tag expected.</source> + <translation>ចាប់ផ្ដើមស្លាកដែលរំពឹងទុក ។</translation> </message> <message> - <source>Volume: %1%</source> - <translation type="unfinished"></translation> + <source>XML declaration not at start of document.</source> + <translation>ការប្រកាស XML មិននៅដើមឯកសារទេ ។</translation> </message> -</context> -<context> - <name>WebCore::PlatformScrollbar</name> <message> - <source>Scroll here</source> - <translation type="unfinished">រមូរនៅទីនេះ</translation> + <source>NDATA in parameter entity declaration.</source> + <translation>ការប្រកាសធាតុប៉ារ៉ាម៉ែត្រនៅក្នុង NDATA ។</translation> </message> <message> - <source>Left edge</source> - <translation type="unfinished">គែមឆ្វេង</translation> + <source>%1 is an invalid processing instruction name.</source> + <translation>%1 មិនមែនជាឈ្មោះសេចក្ដីណែនាំដំណើរការត្រឹមត្រូវទេ ។</translation> </message> <message> - <source>Top</source> - <translation type="unfinished">កំពូល</translation> + <source>Invalid processing instruction name.</source> + <translation>ឈ្មោះសេចក្ដីណែនាំដំណើរការមិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>Right edge</source> - <translation type="unfinished">គែមស្ដាំ</translation> + <source>Illegal namespace declaration.</source> + <translation>ការប្រកាសចន្លោះឈ្មោះមិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>Bottom</source> - <translation type="unfinished">បាត</translation> + <source>Invalid XML name.</source> + <translation>ឈ្មោះ XML មិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>Page left</source> - <translation type="unfinished">ទំព័រឆ្វេង</translation> + <source>Opening and ending tag mismatch.</source> + <translation>ការបើក និងបិទស្លាកមិនផ្គូផ្គងគ្នាទេ ។</translation> </message> <message> - <source>Page up</source> - <translation type="unfinished">ទំព័រលើ</translation> + <source>Reference to unparsed entity '%1'.</source> + <translation>សេចក្ដីយោងទៅកាន់ធាតុដែលមិនបានញែក '%1' ។</translation> </message> <message> - <source>Page right</source> - <translation type="unfinished">ទំព័រស្ដាំ</translation> + <source>Entity '%1' not declared.</source> + <translation>ធាតុ '%1' មិនបានប្រកាសទេ ។</translation> </message> <message> - <source>Page down</source> - <translation type="unfinished">ទំព័រក្រោម</translation> + <source>Reference to external entity '%1' in attribute value.</source> + <translation>សេចក្ដីយោងទៅកាន់ធាតុខាងក្រៅ '%1' នៅក្នុងតម្លៃគុណលក្ខណៈ ។</translation> </message> <message> - <source>Scroll left</source> - <translation type="unfinished">រមូរឆ្វេង</translation> + <source>Invalid character reference.</source> + <translation>សេចក្ដីយោងតួអក្សរមិនត្រឹមត្រូវទេ ។</translation> </message> <message> - <source>Scroll up</source> - <translation type="unfinished">រមូរឡើងលើ</translation> + <source>Encountered incorrectly encoded content.</source> + <translation>បានជួបមាតិកាដែលបានអ៊ីនកូដមិនត្រឹមត្រូវ ។</translation> </message> <message> - <source>Scroll right</source> - <translation type="unfinished">រមូរទៅស្ដាំ</translation> + <source>The standalone pseudo attribute must appear after the encoding.</source> + <translation>គុណលក្ខណៈ pseudo តែឯងត្រូវតែបង្ហាញបន្ទាប់ពីការអ៊ីនកូដ ។</translation> </message> <message> - <source>Scroll down</source> - <translation type="unfinished">រមូរចុះក្រោម</translation> + <source>%1 is an invalid PUBLIC identifier.</source> + <translation>%1 គឺជាឧបករណ៍កំណត់អត្តសញ្ញាណ PUBLIC មិនត្រឹមត្រូវទេ ។</translation> </message> -</context> + </context> </TS> diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp index 6ee1670b3..2eb82e73c 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp @@ -746,7 +746,8 @@ VBoxConsoleView::VBoxConsoleView (VBoxConsoleWnd *mainWnd, #endif , mDesktopGeo (DesktopGeo_Invalid) , mPassCAD (false) - , mHideHostPointer (false) + /* Don't show a hardware pointer until we have one to show */ + , mHideHostPointer (true) { Assert (!mConsole.isNull() && !mConsole.GetDisplay().isNull() && @@ -1144,16 +1145,17 @@ void VBoxConsoleView::setMouseIntegrationEnabled (bool enabled) * mode until it's shape is set to the guest cursor shape in * OnMousePointerShapeChange event handler. * - * This is necessary to avoid double-cursor issue when both the - * guest and the host cursors are displayed in one place one-above-one. + * This is necessary to avoid double-cursor issues where both the + * guest and the host cursors are displayed in one place, one above the + * other. * - * This is a workaround because the correct decision is to notify + * This is a workaround because the correct decision would be to notify * the Guest Additions about we are entering the mouse integration * mode. The GuestOS should hide it's cursor to allow using of * host cursor for the guest's manipulation. * - * This notification is not possible right now due to there is - * no the required API. */ + * This notification is not always possible though, as not all guests + * support switching to a hardware pointer on demand. */ if (enabled) viewport()->setCursor (QCursor (Qt::BlankCursor)); @@ -1247,18 +1249,18 @@ bool VBoxConsoleView::event (QEvent *e) * http://trolltech.com/developer/task-tracker/index_html?id=206165&method=entry * for details. */ QCursor cursor; - if (!mHideHostPointer) - cursor = viewport()->cursor(); - else + if (shouldHideHostPointer()) cursor = QCursor (Qt::BlankCursor); + else + cursor = viewport()->cursor(); mFrameBuf->resizeEvent (re); viewport()->setCursor (cursor); #else mFrameBuf->resizeEvent (re); - if (!mHideHostPointer) - viewport()->unsetCursor(); - else + if (shouldHideHostPointer()) viewport()->setCursor (QCursor (Qt::BlankCursor)); + else + viewport()->unsetCursor(); #endif /* This event appears in case of guest video was changed @@ -3144,13 +3146,12 @@ bool VBoxConsoleView::mouseEvent (int aType, const QPoint &aPos, const QPoint &a QPoint cpnt = viewportToContents (aPos); if (cpnt.x() < 0) cpnt.setX (0); - else if (cpnt.x() >= cw) cpnt.setX (cw - 1); + else if (cpnt.x() > cw) cpnt.setX (cw); if (cpnt.y() < 0) cpnt.setY (0); - else if (cpnt.y() >= ch) cpnt.setY (ch - 1); + else if (cpnt.y() > ch) cpnt.setY (ch); CMouse mouse = mConsole.GetMouse(); - mouse.PutMouseEventAbsolute (cpnt.x() + 1, cpnt.y() + 1, - wheel, state); + mouse.PutMouseEventAbsolute (cpnt.x(), cpnt.y(), wheel, state); return true; /* stop further event handling */ } else diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp index 0b67e3cf0..37aee1d4d 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp @@ -813,9 +813,10 @@ bool VBoxConsoleWnd::openView (const CSession &session) /* Mini toolbar */ bool isActive = !(cmachine.GetExtraData (VBoxDefs::GUI_ShowMiniToolBar) == "no"); + bool isAtTop = (cmachine.GetExtraData (VBoxDefs::GUI_MiniToolBarAlignment) == "top"); bool isAutoHide = !(cmachine.GetExtraData (VBoxDefs::GUI_MiniToolBarAutoHide) == "off"); QList <QMenu*> menus (QList <QMenu*> () << mMiniVMMenu << mDevicesMenu); - mMiniToolBar = new VBoxMiniToolBar (centralWidget(), VBoxMiniToolBar::AlignBottom, + mMiniToolBar = new VBoxMiniToolBar (centralWidget(), isAtTop ? VBoxMiniToolBar::AlignTop : VBoxMiniToolBar::AlignBottom, isActive, isAutoHide); *mMiniToolBar << menus; connect (mMiniToolBar, SIGNAL (exitAction()), this, SLOT (mtExitMode())); @@ -2258,7 +2259,7 @@ bool VBoxConsoleWnd::toggleFullscreenMode (bool aOn, bool aSeamless) } AssertReturn (console, false); - AssertReturn ((hidden_children.isEmpty() == aOn), false); + AssertReturn ((mHiddenChildren.empty() == aOn), false); AssertReturn ((aSeamless && mIsSeamless != aOn) || (!aSeamless && mIsFullscreen != aOn), false); if (aOn) @@ -2374,7 +2375,7 @@ bool VBoxConsoleWnd::toggleFullscreenMode (bool aOn, bool aSeamless) if (!w->isHidden()) { w->hide(); - hidden_children.append (w); + mHiddenChildren.append (w); } } } @@ -2427,9 +2428,9 @@ bool VBoxConsoleWnd::toggleFullscreenMode (bool aOn, bool aSeamless) console->setVerticalScrollBarPolicy (Qt::ScrollBarAsNeeded); /* Show everything hidden when going fullscreen. */ - foreach (QObject *obj, hidden_children) - ((QWidget *) obj)->show(); - hidden_children.clear(); + foreach (QPointer <QWidget> child, mHiddenChildren) + if (child) child->show(); + mHiddenChildren.clear(); } /* Set flag for waiting host resize if it awaited during mode entering */ @@ -2843,6 +2844,19 @@ void VBoxConsoleWnd::devicesUnmountFloppy() vboxProblem().cannotSaveMachineSettings (m); } } + + if (drv.GetState() != KDriveState_NotMounted) + { + /* Looks like Main make no force unmounting here + * but IFloppyDrive::Unmount() is called synchronously. + * Also Main performs rollback for this procedure if + * it was failed by some reason - for example if the + * guest OS locked IFloppyDrive preventing image from + * unmounting - so no way to know the error was really + * occured. Thats why we just checking the drive state + * and warn a user about problem if present. */ + vboxProblem().cannotEjectDrive(); + } } void VBoxConsoleWnd::devicesMountDVDImage() @@ -2892,6 +2906,19 @@ void VBoxConsoleWnd::devicesUnmountDVD() vboxProblem().cannotSaveMachineSettings (m); } } + + if (drv.GetState() != KDriveState_NotMounted) + { + /* Looks like Main make no force unmounting here + * but IDVDDrive::Unmount() is called synchronously. + * Also Main performs rollback for this procedure if + * it was failed by some reason - for example if the + * guest OS locked IDVDDrive preventing image from + * unmounting - so no way to know the error was really + * occured. Thats why we just checking the drive state + * and warn a user about problem if present. */ + vboxProblem().cannotEjectDrive(); + } } void VBoxConsoleWnd::devicesSwitchVrdp (bool aOn) diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxDefs.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxDefs.cpp index f395aec9c..b0f55472a 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxDefs.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxDefs.cpp @@ -32,6 +32,7 @@ const char* VBoxDefs::GUI_AutoresizeGuest = "GUI/AutoresizeGuest"; const char* VBoxDefs::GUI_FirstRun = "GUI/FirstRun"; const char* VBoxDefs::GUI_SaveMountedAtRuntime = "GUI/SaveMountedAtRuntime"; const char* VBoxDefs::GUI_ShowMiniToolBar = "GUI/ShowMiniToolBar"; +const char* VBoxDefs::GUI_MiniToolBarAlignment = "GUI/MiniToolBarAlignment"; const char* VBoxDefs::GUI_MiniToolBarAutoHide = "GUI/MiniToolBarAutoHide"; const char* VBoxDefs::GUI_LastCloseAction = "GUI/LastCloseAction"; const char* VBoxDefs::GUI_SuppressMessages = "GUI/SuppressMessages"; diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxFilePathSelectorWidget.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxFilePathSelectorWidget.cpp index db1f60bfa..aea9418e6 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxFilePathSelectorWidget.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxFilePathSelectorWidget.cpp @@ -657,11 +657,12 @@ bool VBoxEmptyFileSelector::isChooserVisible() const void VBoxEmptyFileSelector::setPath (const QString& aPath) { + QString tmpPath = QDir::toNativeSeparators (aPath); if (mLabel) - mLabel->setText (QString ("<compact elipsis=\"start\">%1</compact>").arg (aPath)); + mLabel->setText (QString ("<compact elipsis=\"start\">%1</compact>").arg (tmpPath)); else if (mLineEdit) - mLineEdit->setText (aPath); - textChanged(aPath); + mLineEdit->setText (tmpPath); + textChanged(tmpPath); } QString VBoxEmptyFileSelector::path() const diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxMiniToolBar.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxMiniToolBar.cpp index 4b92f4a01..59f07dbd1 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxMiniToolBar.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxMiniToolBar.cpp @@ -215,12 +215,14 @@ void VBoxMiniToolBar::timerEvent (QTimerEvent *aEvent) { if (aEvent->timerId() == mScrollTimer.timerId()) { + QRect screen = mSeamless ? QApplication::desktop()->availableGeometry (window()) : + QApplication::desktop()->screenGeometry (window()); switch (mAlignment) { case AlignTop: { - if (((mPositionY == 0) && mSlideToScreen) || - ((mPositionY == - height() + 1) && !mSlideToScreen)) + if (((mPositionY == screen.y()) && mSlideToScreen) || + ((mPositionY == screen.y() - height() + 1) && !mSlideToScreen)) { mScrollTimer.stop(); if (mHideAfterSlide) @@ -235,10 +237,8 @@ void VBoxMiniToolBar::timerEvent (QTimerEvent *aEvent) } case AlignBottom: { - QRect screen = mSeamless ? QApplication::desktop()->availableGeometry (this) : - QApplication::desktop()->screenGeometry (this); - if (((mPositionY == screen.height() - height()) && mSlideToScreen) || - ((mPositionY == screen.height() - 1) && !mSlideToScreen)) + if (((mPositionY == screen.y() + screen.height() - height()) && mSlideToScreen) || + ((mPositionY == screen.y() + screen.height() - 1) && !mSlideToScreen)) { mScrollTimer.stop(); if (mHideAfterSlide) @@ -307,8 +307,10 @@ void VBoxMiniToolBar::showEvent (QShowEvent *aEvent) void VBoxMiniToolBar::paintEvent (QPaintEvent *aEvent) { - QPainter painter (this); + QPainter painter; + painter.begin (this); painter.fillRect (aEvent->rect(), palette().brush (QPalette::Window)); + painter.end (); VBoxToolBar::paintEvent (aEvent); } @@ -376,19 +378,19 @@ void VBoxMiniToolBar::recreateMask() void VBoxMiniToolBar::moveToBase() { - QRect screen = mSeamless ? QApplication::desktop()->availableGeometry (this) : - QApplication::desktop()->screenGeometry (this); - mPositionX = screen.width() / 2 - width() / 2; + QRect screen = mSeamless ? QApplication::desktop()->availableGeometry (window()) : + QApplication::desktop()->screenGeometry (window()); + mPositionX = screen.x() + screen.width() / 2 - width() / 2; switch (mAlignment) { case AlignTop: { - mPositionY = - height() + 1; + mPositionY = screen.y() - height() + 1; break; } case AlignBottom: { - mPositionY = screen.height() - 1; + mPositionY = screen.y() + screen.height() - 1; break; } default: @@ -403,9 +405,9 @@ void VBoxMiniToolBar::moveToBase() QPoint VBoxMiniToolBar::mapFromScreen (const QPoint &aPoint) { QPoint globalPosition = parentWidget()->mapFromGlobal (aPoint); - QRect fullArea = QApplication::desktop()->screenGeometry (this); - QRect realArea = mSeamless ? QApplication::desktop()->availableGeometry (this) : - QApplication::desktop()->screenGeometry (this); + QRect fullArea = QApplication::desktop()->screenGeometry (window()); + QRect realArea = mSeamless ? QApplication::desktop()->availableGeometry (window()) : + QApplication::desktop()->screenGeometry (window()); QPoint shiftToReal (realArea.topLeft() - fullArea.topLeft()); return globalPosition + shiftToReal; } diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxProblemReporter.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxProblemReporter.cpp index f50033686..b952b344a 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxProblemReporter.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxProblemReporter.cpp @@ -1201,6 +1201,14 @@ void VBoxProblemReporter::cannotCloseMedium ( formatErrorInfo (aResult)); } +void VBoxProblemReporter::cannotEjectDrive() +{ + message (mainWindowShown(), Warning, + tr ("Failed to eject the disk from the virtual drive. " + "The drive may be locked by the guest operating system. " + "Please check this and try again.")); +} + void VBoxProblemReporter::cannotOpenSession (const CSession &session) { Assert (session.isNull()); diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp index 82fe551b0..3997dc4e5 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp @@ -73,6 +73,11 @@ void VBoxVMSettingsGeneral::getFrom (const CMachine &aMachine) QString showMiniToolBar = mMachine.GetExtraData (VBoxDefs::GUI_ShowMiniToolBar); mCbShowToolBar->setChecked (showMiniToolBar != "no"); + /* Show Mini ToolBar at top */ + QString miniToolBarAlignment = mMachine.GetExtraData (VBoxDefs::GUI_MiniToolBarAlignment); + mCbToolBarAlignment->setChecked (miniToolBarAlignment == "top"); + mCbToolBarAlignment->setEnabled (mCbShowToolBar->isChecked()); + /* Snapshot folder */ mPsSnapshot->setPath (aMachine.GetSnapshotFolder()); mPsSnapshot->setHomeDir (QFileInfo (mMachine.GetSettingsFilePath()).absolutePath()); @@ -104,6 +109,10 @@ void VBoxVMSettingsGeneral::putBackTo() mMachine.SetExtraData (VBoxDefs::GUI_ShowMiniToolBar, mCbShowToolBar->isChecked() ? "yes" : "no"); + /* Show Mini ToolBar at top */ + mMachine.SetExtraData (VBoxDefs::GUI_MiniToolBarAlignment, + mCbToolBarAlignment->isChecked() ? "top" : "bottom"); + /* Saved state folder */ if (mPsSnapshot->isModified()) { diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSFDetails.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSFDetails.cpp index 15b099398..a3af2a0b5 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSFDetails.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSFDetails.cpp @@ -146,6 +146,16 @@ void VBoxVMSettingsSFDetails::onSelectPath() return; QString folderName (mPsPath->path()); +#if defined (Q_OS_WIN) || defined (Q_OS_OS2) + if (folderName[0].isLetter() && folderName[1] == ':' && folderName[2] == 0) + { + /* VBoxFilePathSelectorWidget returns root path as 'X:', which is invalid path. + * Append the trailing backslash to get a valid root path 'X:\'. + */ + folderName += "\\"; + mPsPath->setPath(folderName); + } +#endif QDir folder (folderName); if (!folder.isRoot()) /* Processing non-root folder */ diff --git a/src/VBox/Frontends/VirtualBox/src/main.cpp b/src/VBox/Frontends/VirtualBox/src/main.cpp index 957ea2f3c..0185e0501 100644 --- a/src/VBox/Frontends/VirtualBox/src/main.cpp +++ b/src/VBox/Frontends/VirtualBox/src/main.cpp @@ -45,6 +45,10 @@ #include <QLocale> #include <QTranslator> +#ifdef Q_WS_X11 +# include <X11/Xlib.h> +#endif + #include <iprt/err.h> #include <iprt/initterm.h> #include <iprt/process.h> @@ -327,36 +331,44 @@ extern "C" DECLEXPORT(int) TrustedMain (int argc, char **argv, char ** /*envp*/) /* scope the QIApplication variable */ { #ifdef Q_WS_X11 - /* There are some buggy/strange driver/compiz combinations which lead - * to transparent backgrounds on ARGB visuals. Try to fix it by not - * allowing an ARGB visual with the help of the Xlib. After that we - * restore the original environment, so that others like the OpenGL - * service will proper work. */ - char *pchOldVar = NULL; - bool fHackARGB = !RTEnvExist ("VBOX_NO_ARGB_VISUALS_HACK") && VBoxGlobal::qtRTVersion() >= 0x040500; - if (fHackARGB) - { - const char *pchVar = RTEnvGet ("XLIB_SKIP_ARGB_VISUALS"); - if (pchVar) - pchOldVar = RTStrDup (pchVar); - RTEnvSet ("XLIB_SKIP_ARGB_VISUALS", "1"); - } - /* Now create the application object */ - QIApplication a (argc, argv); - /* Restore previous environment */ - if (fHackARGB) + /* Qt has a complex algorithm for selecting the right visual which + * doesn't always seem to work. So we naively choose a visual - the + * default one - ourselves and pass that to Qt. This means that we + * also have to open the display ourselves. + * We check the Qt parameter list and handle Qt's -display argument + * ourselves, since we open the display connection. We also check the + * to see if the user has passed Qt's -visual parameter, and if so we + * assume that the user wants Qt to handle visual selection after all, + * and don't supply a visual. */ + char *pszDisplay = NULL; + bool useDefaultVisual = true; + for (int i = 0; i < argc; ++i) { - if (pchOldVar) + if (!::strcmp(argv[i], "-display") && (i + 1 < argc)) + /* What if it isn't? Rely on QApplication to complain? */ { - RTEnvSet ("XLIB_SKIP_ARGB_VISUALS", pchOldVar); - RTStrFree (pchOldVar); + pszDisplay = argv[i + 1]; + ++i; } - else - RTEnvUnset ("XLIB_SKIP_ARGB_VISUALS"); + else if (!::strcmp(argv[i], "-visual")) + useDefaultVisual = false; + } + Display *pDisplay = XOpenDisplay(pszDisplay); + if (!pDisplay) + { + RTPrintf(pszDisplay ? "Failed to open the X11 display \"%s\"!\n" + : "Failed to open the X11 display!\n", + pszDisplay); + return 0; } -#else /* defined(Q_WS_X11) && (QT_VERSION >= 0x040500) */ + Visual *pVisual = useDefaultVisual + ? DefaultVisual(pDisplay, DefaultScreen(pDisplay)) + : NULL; + /* Now create the application object */ + QIApplication a (pDisplay, argc, argv, (Qt::HANDLE) pVisual); +#else /* Q_WS_X11 */ QIApplication a (argc, argv); -#endif /* defined(Q_WS_X11) && (QT_VERSION >= 0x040500) */ +#endif /* Q_WS_X11 */ /* Qt4.3 version has the QProcess bug which freezing the application * for 30 seconds. This bug is internally used at initialization of diff --git a/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsGeneral.ui b/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsGeneral.ui index c78917c00..c6cfc70d3 100644 --- a/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsGeneral.ui +++ b/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsGeneral.ui @@ -221,6 +221,25 @@ </property> </widget> </item> + <item row="4" column="1" > + <widget class="QCheckBox" name="mCbToolBarAlignment" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="whatsThis" > + <string>If checked, show the Mini ToolBar at the top of the screen, rather than in it's default position at the bottom of the screen.</string> + </property> + <property name="text" > + <string>Show At &Top Of Screen</string> + </property> + <property name="checked" > + <bool>false</bool> + </property> + </widget> + </item> </layout> </widget> </item> @@ -277,5 +296,22 @@ </customwidget> </customwidgets> <resources/> - <connections/> + <connections> + <connection> + <sender>mCbShowToolBar</sender> + <signal>toggled(bool)</signal> + <receiver>mCbToolBarAlignment</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>195</x> + <y>50</y> + </hint> + <hint type="destinationlabel"> + <x>196</x> + <y>72</y> + </hint> + </hints> + </connection> + </connections> </ui> diff --git a/src/VBox/GuestHost/OpenGL/include/cr_net.h b/src/VBox/GuestHost/OpenGL/include/cr_net.h index 27e818a34..1a9aefef7 100644 --- a/src/VBox/GuestHost/OpenGL/include/cr_net.h +++ b/src/VBox/GuestHost/OpenGL/include/cr_net.h @@ -226,6 +226,8 @@ struct CRConnection { * is blocked by another client, which has send us glBegin call and we're waiting to recieve glEnd. */ uint8_t allow_redir_ptr; + + uint32_t vMajor, vMinor; /*Protocol version*/ }; diff --git a/src/VBox/GuestHost/OpenGL/include/cr_protocol.h b/src/VBox/GuestHost/OpenGL/include/cr_protocol.h index 3ce36221e..f564d31a1 100644 --- a/src/VBox/GuestHost/OpenGL/include/cr_protocol.h +++ b/src/VBox/GuestHost/OpenGL/include/cr_protocol.h @@ -13,6 +13,11 @@ extern "C" { #endif +/*For now guest is allowed to connect host opengl service if protocol version matches exactly*/ +/*Note: that after any change to this file, or glapi_parser\apispec.txt version should be changed*/ +#define CR_PROTOCOL_VERSION_MAJOR 1 +#define CR_PROTOCOL_VERSION_MINOR 1 + typedef enum { /* first message types is 'wGL\001', so we can immediately recognize bad message types */ diff --git a/src/VBox/GuestHost/OpenGL/include/cr_server.h b/src/VBox/GuestHost/OpenGL/include/cr_server.h index cfa89c634..028f5a29e 100644 --- a/src/VBox/GuestHost/OpenGL/include/cr_server.h +++ b/src/VBox/GuestHost/OpenGL/include/cr_server.h @@ -212,10 +212,11 @@ extern DECLEXPORT(void) crServerSetPort(int port); extern DECLEXPORT(GLboolean) crVBoxServerInit(void); extern DECLEXPORT(void) crVBoxServerTearDown(void); -extern DECLEXPORT(void) crVBoxServerAddClient(uint32_t u32ClientID); +extern DECLEXPORT(int32_t) crVBoxServerAddClient(uint32_t u32ClientID); extern DECLEXPORT(void) crVBoxServerRemoveClient(uint32_t u32ClientID); -extern DECLEXPORT(void) crVBoxServerClientWrite(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t cbBuffer); +extern DECLEXPORT(int32_t) crVBoxServerClientWrite(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t cbBuffer); extern DECLEXPORT(int32_t) crVBoxServerClientRead(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t *pcbBuffer); +extern DECLEXPORT(int32_t) crVBoxServerClientSetVersion(uint32_t u32ClientID, uint32_t vMajor, uint32_t vMinor); extern DECLEXPORT(int32_t) crVBoxServerSaveState(PSSMHANDLE pSSM); extern DECLEXPORT(int32_t) crVBoxServerLoadState(PSSMHANDLE pSSM); diff --git a/src/VBox/GuestHost/OpenGL/include/cr_spu.h b/src/VBox/GuestHost/OpenGL/include/cr_spu.h index d212f4ffd..d6fa0054a 100644 --- a/src/VBox/GuestHost/OpenGL/include/cr_spu.h +++ b/src/VBox/GuestHost/OpenGL/include/cr_spu.h @@ -145,7 +145,8 @@ typedef BOOL (WGL_APIENTRY *wglChoosePixelFormatEXTFunc_t)(HDC, const int *, con typedef BOOL (WGL_APIENTRY *wglGetPixelFormatAttribivEXTFunc_t)(HDC, int, int, UINT, int *, int *); typedef BOOL (WGL_APIENTRY *wglGetPixelFormatAttribfvEXTFunc_t)(HDC, int, int, UINT, int *, float *); typedef const GLubyte *(WGL_APIENTRY *glGetStringFunc_t)( GLenum ); -typedef const GLubyte *(WGL_APIENTRY *wglGetExtensionsStringEXTFunc_t)( HDC ); +typedef const GLubyte *(WGL_APIENTRY *wglGetExtensionsStringEXTFunc_t)(); +typedef const GLubyte *(WGL_APIENTRY *wglGetExtensionsStringARBFunc_t)(HDC); /*@}*/ #elif defined(DARWIN) /** diff --git a/src/VBox/GuestHost/OpenGL/util/hash.c b/src/VBox/GuestHost/OpenGL/util/hash.c index 097060260..df1da2092 100644 --- a/src/VBox/GuestHost/OpenGL/util/hash.c +++ b/src/VBox/GuestHost/OpenGL/util/hash.c @@ -315,6 +315,7 @@ CRHashTable *crAllocHashtable( void ) void crFreeHashtable( CRHashTable *hash, CRHashtableCallback deleteFunc ) { int i; + CRHashNode *entry, *next; if ( !hash) return; @@ -324,16 +325,21 @@ void crFreeHashtable( CRHashTable *hash, CRHashtableCallback deleteFunc ) for ( i = 0; i < CR_NUM_BUCKETS; i++ ) { - if ( hash->buckets[i] ) + entry = hash->buckets[i]; + while (entry) { - if (hash->buckets[i]->data && deleteFunc) { - /* Clear the key in case crHashtableDelete() is called - * from this callback. - */ - hash->buckets[i]->key = 0; - (*deleteFunc)( hash->buckets[i]->data ); + next = entry->next; + /* Clear the key in case crHashtableDelete() is called + * from this callback. + */ + entry->key = 0; + if (deleteFunc && entry->data) + { + (*deleteFunc)(entry->data); } - crFree( hash->buckets[i] ); + crFree(entry); + entry = next; + } } crFreeHashIdPool( hash->idPool ); diff --git a/src/VBox/GuestHost/OpenGL/util/net.c b/src/VBox/GuestHost/OpenGL/util/net.c index c3270954e..a460dc2d1 100644 --- a/src/VBox/GuestHost/OpenGL/util/net.c +++ b/src/VBox/GuestHost/OpenGL/util/net.c @@ -277,6 +277,7 @@ crNetConnectToServer( const char *server, unsigned short default_port, #ifdef CHROMIUM_THREADSAFE crFreeMutex( &conn->messageList.lock ); #endif + conn->Disconnect(conn); crFree( conn ); return NULL; } diff --git a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c index 0ac2e605e..fc261b33b 100644 --- a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c +++ b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c @@ -666,6 +666,36 @@ static void crVBoxHGCMAccept( CRConnection *conn, const char *hostname, unsigned #endif } +static int crVBoxHGCMSetVersion(CRConnection *conn, unsigned int vMajor, unsigned int vMinor) +{ + CRVBOXHGCMSETVERSION parms; + int rc; + + parms.hdr.result = VINF_SUCCESS; + parms.hdr.u32ClientID = conn->u32ClientID; + parms.hdr.u32Function = SHCRGL_GUEST_FN_SET_VERSION; + parms.hdr.cParms = SHCRGL_CPARMS_SET_VERSION; + + parms.vMajor.type = VMMDevHGCMParmType_32bit; + parms.vMajor.u.value32 = CR_PROTOCOL_VERSION_MAJOR; + parms.vMinor.type = VMMDevHGCMParmType_32bit; + parms.vMinor.u.value32 = CR_PROTOCOL_VERSION_MINOR; + + rc = crVBoxHGCMCall(&parms, sizeof(parms)); + + if (RT_FAILURE(rc) || RT_FAILURE(parms.hdr.result)) + { + crWarning("Host doesn't accept our version %d.%d. Make sure you have appropriate additions installed!", + parms.vMajor.u.value32, parms.vMinor.u.value32); + return FALSE; + } + + conn->vMajor = CR_PROTOCOL_VERSION_MAJOR; + conn->vMinor = CR_PROTOCOL_VERSION_MINOR; + + return TRUE; +} + /** * The function that actually connects. This should only be called by clients, * guests in vbox case. @@ -739,6 +769,8 @@ static int crVBoxHGCMDoConnect( CRConnection *conn ) { conn->u32ClientID = info.u32ClientID; crDebug("HGCM connect was successful: client id =0x%x\n", conn->u32ClientID); + + return crVBoxHGCMSetVersion(conn, CR_PROTOCOL_VERSION_MAJOR, CR_PROTOCOL_VERSION_MINOR); } else { diff --git a/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp b/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp index b2cf313e0..4a571be23 100644 --- a/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp +++ b/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp @@ -402,7 +402,7 @@ static void clipGetFormatsFromTargets(CLIPBACKEND *pCtx, Atom *pTargets, { char *pszName = XGetAtomName(XtDisplay(pCtx->widget), pTargets[i]); - Log2(("%s: found target %s\n", __PRETTY_FUNCTION__, pszName)); + LogRel2(("%s: found target %s\n", __PRETTY_FUNCTION__, pszName)); XFree(pszName); } #endif @@ -424,7 +424,7 @@ static void clipUpdateX11Targets(CLIPBACKEND *pCtx, Atom *pTargets, { bool changed = false; - Log3 (("%s: called\n", __PRETTY_FUNCTION__)); + LogRel3 (("%s: called\n", __PRETTY_FUNCTION__)); if (pCtx->fOwnsClipboard) /* VBox raced us and we lost. So we don't want to report anything. */ return; @@ -501,11 +501,11 @@ void clipSchedulePoller(CLIPBACKEND *pCtx, void clipPollX11CBFormats(XtPointer pUserData, XtIntervalId * /* hTimerId */) { CLIPBACKEND *pCtx = (CLIPBACKEND *)pUserData; - Log3 (("%s: called\n", __PRETTY_FUNCTION__)); + LogRel3 (("%s: called\n", __PRETTY_FUNCTION__)); /* Get the current clipboard contents if we don't own it ourselves */ if (!pCtx->fOwnsClipboard) { - Log3 (("%s: requesting the targets that the X11 clipboard offers\n", + LogRel3 (("%s: requesting the targets that the X11 clipboard offers\n", __PRETTY_FUNCTION__)); XtGetSelectionValue(pCtx->widget, clipGetAtom(pCtx->widget, "CLIPBOARD"), @@ -694,7 +694,7 @@ void ClipDestructX11(CLIPBACKEND *pCtx) int ClipStartX11(CLIPBACKEND *pCtx) { int rc = VINF_SUCCESS; - LogFlowFunc(("\n")); + LogRelFlowFunc(("\n")); /* * Immediately return if we are not connected to the X server. */ @@ -756,7 +756,7 @@ int ClipStopX11(CLIPBACKEND *pCtx) else LogRelFunc(("rc=%Rrc\n", rc)); clipUninit(pCtx); - LogFlowFunc(("returning %Rrc.\n", rc)); + LogRelFlowFunc(("returning %Rrc.\n", rc)); return rc; } @@ -781,7 +781,7 @@ static int clipCreateX11Targets(CLIPBACKEND *pCtx, Atom *atomTypeReturn, Atom *atomTargets = (Atom *)XtMalloc( (MAX_CLIP_X11_FORMATS + 3) * sizeof(Atom)); unsigned cTargets = 0; - LogFlowFunc (("called\n")); + LogRelFlowFunc (("called\n")); CLIPX11FORMAT format = NIL_CLIPX11FORMAT; do { @@ -811,7 +811,7 @@ static int clipReadVBoxClipboard(CLIPBACKEND *pCtx, uint32_t u32Format, void **ppv, uint32_t *pcb) { int rc = VINF_SUCCESS; - LogFlowFunc(("pCtx=%p, u32Format=%02X, ppv=%p, pcb=%p\n", pCtx, + LogRelFlowFunc(("pCtx=%p, u32Format=%02X, ppv=%p, pcb=%p\n", pCtx, u32Format, ppv, pcb)); if (u32Format == VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT) { @@ -830,9 +830,9 @@ static int clipReadVBoxClipboard(CLIPBACKEND *pCtx, uint32_t u32Format, else rc = ClipRequestDataForX11(pCtx->pFrontend, u32Format, ppv, pcb); - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); if (RT_SUCCESS(rc)) - LogFlowFunc(("*ppv=%.*ls, *pcb=%u\n", *pcb, *ppv, *pcb)); + LogRelFlowFunc(("*ppv=%.*ls, *pcb=%u\n", *pcb, *ppv, *pcb)); return rc; } @@ -875,7 +875,7 @@ static int clipWinTxtToUtf8(PRTUTF16 pwszSrc, size_t cbSrc, char *pszBuf, size_t cwSrc = cbSrc / 2, cwTmp = 0, cbDest = 0; int rc = VINF_SUCCESS; - LogFlowFunc (("pwszSrc=%.*ls, cbSrc=%u\n", cbSrc, pwszSrc, cbSrc)); + LogRelFlowFunc (("pwszSrc=%.*ls, cbSrc=%u\n", cbSrc, pwszSrc, cbSrc)); /* How long will the converted text be? */ AssertPtr(pwszSrc); AssertPtr(pszBuf); @@ -896,9 +896,9 @@ static int clipWinTxtToUtf8(PRTUTF16 pwszSrc, size_t cbSrc, char *pszBuf, RTMemFree(reinterpret_cast<void *>(pwszTmp)); if (pcbActual) *pcbActual = cbDest + 1; - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); if (RT_SUCCESS(rc)) - LogFlowFunc (("converted string is %.*s. Returning.\n", cbDest, + LogRelFlowFunc (("converted string is %.*s. Returning.\n", cbDest, pszBuf)); return rc; } @@ -983,7 +983,7 @@ static int clipWinTxtToCTextForX11CB(Display *pDisplay, PRTUTF16 pwszSrc, XTextProperty property; int rc = VINF_SUCCESS, xrc = 0; - LogFlowFunc(("pwszSrc=%.*ls, cbSrc=%u\n", cbSrc / 2, pwszSrc, cbSrc)); + LogRelFlowFunc(("pwszSrc=%.*ls, cbSrc=%u\n", cbSrc / 2, pwszSrc, cbSrc)); AssertPtrReturn(pDisplay, false); AssertPtrReturn(pwszSrc, false); rc = clipWinTxtBufSizeForUtf8(pwszSrc, cbSrc / 2, &cbTmp); @@ -1014,9 +1014,9 @@ static int clipWinTxtToCTextForX11CB(Display *pDisplay, PRTUTF16 pwszSrc, *pValReturn = reinterpret_cast<XtPointer>(property.value); *pcLenReturn = property.nitems + 1; *piFormatReturn = property.format; - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); if (RT_SUCCESS(rc)) - LogFlowFunc (("converted string is %s\n", property.value)); + LogRelFlowFunc (("converted string is %s\n", property.value)); return rc; } @@ -1082,7 +1082,7 @@ static Boolean clipXtConvertSelectionProc(Widget widget, Atom *atomSelection, CLIPBACKEND *pCtx = clipLookupContext(widget); int rc = VINF_SUCCESS; - LogFlowFunc(("\n")); + LogRelFlowFunc(("\n")); if ( !pCtx->fOwnsClipboard /* Drop requests we receive too late. */ || !clipIsSupportedSelectionType(pCtx->widget, *atomSelection)) return false; @@ -1092,7 +1092,7 @@ static Boolean clipXtConvertSelectionProc(Widget widget, Atom *atomSelection, else rc = clipConvertVBoxCBForX11(pCtx, atomTarget, atomTypeReturn, pValReturn, pcLenReturn, piFormatReturn); - LogFlowFunc(("returning, internal status code %Rrc\n", rc)); + LogRelFlowFunc(("returning, internal status code %Rrc\n", rc)); return RT_SUCCESS(rc); } @@ -1101,7 +1101,7 @@ static Boolean clipXtConvertSelectionProc(Widget widget, Atom *atomSelection, */ static void clipReleaseCB(CLIPBACKEND *pCtx) { - LogFlowFunc (("\n")); + LogRelFlowFunc (("\n")); /* The formats should be set to the right values as soon as we start * polling */ clipReportEmptyX11CB(pCtx); @@ -1117,7 +1117,7 @@ static void clipReleaseCB(CLIPBACKEND *pCtx) static void clipXtLoseSelectionProc(Widget widget, Atom *) { CLIPBACKEND *pCtx = clipLookupContext(widget); - LogFlowFunc (("\n")); + LogRelFlowFunc (("\n")); clipReleaseCB(pCtx); } @@ -1174,11 +1174,11 @@ static void clipNewVBoxFormatsWorker(XtPointer pUserData, CLIPBACKEND *pCtx = pFormats->pCtx; uint32_t u32Formats = pFormats->formats; RTMemFree(pFormats); - LogFlowFunc (("u32Formats=%d\n", u32Formats)); + LogRelFlowFunc (("u32Formats=%d\n", u32Formats)); clipInvalidateVBoxCBCache(pCtx); clipGrabX11CB(pCtx, u32Formats); clipResetX11Formats(pCtx); - LogFlowFunc(("returning\n")); + LogRelFlowFunc(("returning\n")); } /** @@ -1221,7 +1221,7 @@ void ClipAnnounceFormatToX11(CLIPBACKEND *pCtx, static int clipUtf16ToWinTxt(RTUTF16 *pwcSrc, size_t cwcSrc, PRTUTF16 *ppwszDest, uint32_t *pcbDest) { - LogFlowFunc(("pwcSrc=%p, cwcSrc=%u, ppwszDest=%p\n", pwcSrc, cwcSrc, + LogRelFlowFunc(("pwcSrc=%p, cwcSrc=%u, ppwszDest=%p\n", pwcSrc, cwcSrc, ppwszDest)); AssertPtrReturn(pwcSrc, VERR_INVALID_POINTER); AssertPtrReturn(ppwszDest, VERR_INVALID_POINTER); @@ -1241,16 +1241,16 @@ static int clipUtf16ToWinTxt(RTUTF16 *pwcSrc, size_t cwcSrc, cwcDest); if (RT_SUCCESS(rc)) { - LogFlowFunc (("converted string is %.*ls\n", cwcDest, pwszDest)); + LogRelFlowFunc (("converted string is %.*ls\n", cwcDest, pwszDest)); *ppwszDest = pwszDest; if (pcbDest) *pcbDest = cwcDest * 2; } else RTMemFree(pwszDest); - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); if (pcbDest) - LogFlowFunc(("*pcbDest=%u\n", *pcbDest)); + LogRelFlowFunc(("*pcbDest=%u\n", *pcbDest)); return rc; } @@ -1268,7 +1268,7 @@ static int clipUtf16ToWinTxt(RTUTF16 *pwcSrc, size_t cwcSrc, static int clipUtf8ToWinTxt(const char *pcSrc, unsigned cbSrc, PRTUTF16 *ppwszDest, uint32_t *pcbDest) { - LogFlowFunc(("pcSrc=%p, cbSrc=%u, ppwszDest=%p\n", pcSrc, cbSrc, + LogRelFlowFunc(("pcSrc=%p, cbSrc=%u, ppwszDest=%p\n", pcSrc, cbSrc, ppwszDest)); AssertPtrReturn(pcSrc, VERR_INVALID_POINTER); AssertPtrReturn(ppwszDest, VERR_INVALID_POINTER); @@ -1281,9 +1281,9 @@ static int clipUtf8ToWinTxt(const char *pcSrc, unsigned cbSrc, if (RT_SUCCESS(rc)) rc = clipUtf16ToWinTxt(pwcTmp, cwcTmp, ppwszDest, pcbDest); RTUtf16Free(pwcTmp); - LogFlowFunc(("Returning %Rrc\n", rc)); + LogRelFlowFunc(("Returning %Rrc\n", rc)); if (pcbDest) - LogFlowFunc(("*pcbDest=%u\n", *pcbDest)); + LogRelFlowFunc(("*pcbDest=%u\n", *pcbDest)); return rc; } @@ -1304,7 +1304,7 @@ static int clipCTextToWinTxt(Widget widget, unsigned char *pcSrc, unsigned cbSrc, PRTUTF16 *ppwszDest, uint32_t *pcbDest) { - LogFlowFunc(("widget=%p, pcSrc=%p, cbSrc=%u, ppwszDest=%p\n", widget, + LogRelFlowFunc(("widget=%p, pcSrc=%p, cbSrc=%u, ppwszDest=%p\n", widget, pcSrc, cbSrc, ppwszDest)); AssertReturn(widget, VERR_INVALID_PARAMETER); AssertPtrReturn(pcSrc, VERR_INVALID_POINTER); @@ -1352,9 +1352,9 @@ static int clipCTextToWinTxt(Widget widget, unsigned char *pcSrc, if (ppcTmp != NULL) XFreeStringList(ppcTmp); RTStrFree(pszTmp); - LogFlowFunc(("Returning %Rrc\n", rc)); + LogRelFlowFunc(("Returning %Rrc\n", rc)); if (pcbDest) - LogFlowFunc(("*pcbDest=%u\n", *pcbDest)); + LogRelFlowFunc(("*pcbDest=%u\n", *pcbDest)); return rc; } @@ -1372,7 +1372,7 @@ static int clipCTextToWinTxt(Widget widget, unsigned char *pcSrc, static int clipLatin1ToWinTxt(char *pcSrc, unsigned cbSrc, PRTUTF16 *ppwszDest, uint32_t *pcbDest) { - LogFlowFunc (("pcSrc=%.*s, cbSrc=%u, ppwszDest=%p\n", cbSrc, + LogRelFlowFunc (("pcSrc=%.*s, cbSrc=%u, ppwszDest=%p\n", cbSrc, (char *) pcSrc, cbSrc, ppwszDest)); AssertPtrReturn(pcSrc, VERR_INVALID_POINTER); AssertPtrReturn(ppwszDest, VERR_INVALID_POINTER); @@ -1407,15 +1407,15 @@ static int clipLatin1ToWinTxt(char *pcSrc, unsigned cbSrc, ++j; } pwszDest[cwcDest - 1] = '\0'; /* Make sure we are zero-terminated. */ - LogFlowFunc (("converted text is %.*ls\n", cwcDest, pwszDest)); + LogRelFlowFunc (("converted text is %.*ls\n", cwcDest, pwszDest)); } if (RT_SUCCESS(rc)) *ppwszDest = pwszDest; else RTMemFree(pwszDest); - LogFlowFunc(("Returning %Rrc\n", rc)); + LogRelFlowFunc(("Returning %Rrc\n", rc)); if (pcbDest) - LogFlowFunc(("*pcbDest=%u\n", *pcbDest)); + LogRelFlowFunc(("*pcbDest=%u\n", *pcbDest)); return rc; } @@ -1447,7 +1447,7 @@ static void clipConvertX11CB(Widget widget, XtPointer pClientData, int *piFormat) { CLIPREADX11CBREQ *pReq = (CLIPREADX11CBREQ *) pClientData; - LogFlowFunc(("pReq->mFormat=%02X, pReq->mTextFormat=%u, pReq->mCtx=%p\n", + LogRelFlowFunc(("pReq->mFormat=%02X, pReq->mTextFormat=%u, pReq->mCtx=%p\n", pReq->mFormat, pReq->mTextFormat, pReq->mCtx)); AssertPtr(pReq->mCtx); Assert(pReq->mFormat != 0); /* sanity */ @@ -1503,7 +1503,7 @@ static void clipConvertX11CB(Widget widget, XtPointer pClientData, clipReportFormatsToVBox(pCtx); // else // clipReportEmptyX11CB(pCtx); - LogFlowFunc(("rc=%Rrc\n", rc)); + LogRelFlowFunc(("rc=%Rrc\n", rc)); } /** Worker function for ClipRequestDataFromX11 which runs on the event @@ -1513,7 +1513,7 @@ static void vboxClipboardReadX11Worker(XtPointer pUserData, { CLIPREADX11CBREQ *pReq = (CLIPREADX11CBREQ *)pUserData; CLIPBACKEND *pCtx = pReq->mCtx; - LogFlowFunc (("pReq->mFormat = %02X\n", pReq->mFormat)); + LogRelFlowFunc (("pReq->mFormat = %02X\n", pReq->mFormat)); int rc = VINF_SUCCESS; /* Do not continue if we already own the clipboard */ @@ -1551,7 +1551,7 @@ static void vboxClipboardReadX11Worker(XtPointer pUserData, NULL, 0); RTMemFree(pReq); } - LogFlowFunc(("status %Rrc\n", rc)); + LogRelFlowFunc(("status %Rrc\n", rc)); } /** diff --git a/src/VBox/HostDrivers/Support/SUPDrv.c b/src/VBox/HostDrivers/Support/SUPDrv.c index e3121357d..1ae7e85a0 100644 --- a/src/VBox/HostDrivers/Support/SUPDrv.c +++ b/src/VBox/HostDrivers/Support/SUPDrv.c @@ -1,4 +1,4 @@ -/* $Revision: 49191 $ */ +/* $Revision: 50636 $ */ /** @file * VBoxDrv - The VirtualBox Support Driver - Common code. */ @@ -53,6 +53,7 @@ # include <iprt/crc32.h> # include <iprt/net.h> # include <iprt/string.h> +# include <iprt/rand.h> #endif /* VBox/x86.h not compatible with the Linux kernel sources */ #ifdef RT_OS_LINUX @@ -467,6 +468,7 @@ static SUPFUNC g_aFunctions[] = */ PFNRT g_apfnVBoxDrvIPRTDeps[] = { + /* VBoxNetFlt */ (PFNRT)RTCrc32, (PFNRT)RTErrConvertFromErrno, (PFNRT)RTNetIPv4IsHdrValid, @@ -477,6 +479,8 @@ PFNRT g_apfnVBoxDrvIPRTDeps[] = (PFNRT)RTUuidFromStr, (PFNRT)RTStrDup, (PFNRT)RTStrFree, + /* VBoxNetAdp */ + (PFNRT)RTRandBytes, NULL }; #endif /* RT_OS_DARWIN || RT_OS_SOLARIS || RT_OS_SOLARIS */ diff --git a/src/VBox/HostDrivers/Support/SUPLib.cpp b/src/VBox/HostDrivers/Support/SUPLib.cpp index fcb3c5d76..d3a48bd50 100644 --- a/src/VBox/HostDrivers/Support/SUPLib.cpp +++ b/src/VBox/HostDrivers/Support/SUPLib.cpp @@ -148,6 +148,18 @@ static int supLoadModule(const char *pszFilename, const char *pszModule, const c static DECLCALLBACK(int) supLoadModuleResolveImport(RTLDRMOD hLdrMod, const char *pszModule, const char *pszSymbol, unsigned uSymbol, RTUINTPTR *pValue, void *pvUser); +/** Touch a range of pages. */ +DECLINLINE(void) supR3TouchPages(void *pv, size_t cPages) +{ + uint32_t volatile *pu32 = (uint32_t volatile *)pv; + while (cPages-- > 0) + { + ASMAtomicCmpXchgU32(pu32, 0, 0); + pu32 += PAGE_SIZE / sizeof(uint32_t); + } +} + + SUPR3DECL(int) SUPR3Install(void) { return suplibOsInstall(); @@ -1059,6 +1071,9 @@ SUPR3DECL(int) SUPR3PageAllocEx(size_t cPages, uint32_t fFlags, void **ppvPages, paPages[iPage].Phys = pReq->u.Out.aPages[iPage]; Assert(!(paPages[iPage].Phys & ~X86_PTE_PAE_PG_MASK)); } +#ifdef RT_OS_DARWIN /* HACK ALERT! */ + supR3TouchPages(pReq->u.Out.pvR3, cPages); +#endif } else if ( rc == VERR_NOT_SUPPORTED && !pR0Ptr) @@ -1244,6 +1259,9 @@ SUPR3DECL(void *) SUPR3ContAlloc(size_t cPages, PRTR0PTR pR0Ptr, PRTHCPHYS pHCPh *pHCPhys = Req.u.Out.HCPhys; if (pR0Ptr) *pR0Ptr = Req.u.Out.pvR0; +#ifdef RT_OS_DARWIN /* HACK ALERT! */ + supR3TouchPages(Req.u.Out.pvR3, cPages); +#endif return Req.u.Out.pvR3; } @@ -1341,6 +1359,9 @@ SUPR3DECL(int) SUPR3LowAlloc(size_t cPages, void **ppvPages, PRTR0PTR ppvPagesR0 Assert(!(paPages[iPage].Phys & ~X86_PTE_PAE_PG_MASK)); Assert(paPages[iPage].Phys <= UINT32_C(0xfffff000)); } +#ifdef RT_OS_DARWIN /* HACK ALERT! */ + supR3TouchPages(pReq->u.Out.pvR3, cPages); +#endif } RTMemTmpFree(pReq); } diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c index abac70316..c637e585c 100644 --- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c +++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c @@ -1,4 +1,4 @@ -/* $Rev: 43287 $ */ +/* $Rev: 50656 $ */ /** @file * VBoxDrv - The VirtualBox Support Driver - Linux specifics. */ @@ -183,8 +183,13 @@ static int VBoxDrvLinuxIOCtlSlow(struct file *pFilp, unsigned int uCmd, unsigne static int VBoxDrvLinuxErr2LinuxErr(int); #ifdef VBOX_WITH_SUSPEND_NOTIFICATION static int VBoxDrvProbe(struct platform_device *pDev); +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) +static int VBoxDrvSuspend(struct device *pDev); +static int VBoxDrvResume(struct device *pDev); +# else static int VBoxDrvSuspend(struct platform_device *pDev, pm_message_t State); static int VBoxDrvResume(struct platform_device *pDev); +# endif static void VBoxDevRelease(struct device *pDev); #endif @@ -216,15 +221,28 @@ static struct miscdevice gMiscDevice = #ifdef VBOX_WITH_SUSPEND_NOTIFICATION +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) +static struct dev_pm_ops gPlatformPMOps = +{ + .suspend = VBoxDrvSuspend, + .resume = VBoxDrvResume, +}; +# endif + static struct platform_driver gPlatformDriver = { .probe = VBoxDrvProbe, +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 30) .suspend = VBoxDrvSuspend, .resume = VBoxDrvResume, +# endif /** @todo .shutdown? */ .driver = { - .name = "vboxdrv" + .name = "vboxdrv", +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) + .pm = &gPlatformPMOps, +# endif } }; @@ -472,6 +490,24 @@ static int __init VBoxDrvLinuxInit(void) /* performance counter generates NMI and is not masked? */ if ((GET_APIC_DELIVERY_MODE(v) == APIC_MODE_NMI) && !(v & APIC_LVT_MASKED)) { +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) && defined(CONFIG_PERF_COUNTERS) + /* 2.6.31+: The performance counter framework will initialize the LVTPC + * vector as NMI. We can't disable the framework but the kernel loader + * script will do 'echo 2 > /proc/sys/kernel/perf_counter_paranoid' + * which hopefilly prevents any usage of hardware performance counters + * and therefore triggering of NMIs. */ + printk(KERN_ERR DEVICE_NAME + ": Warning: 2.6.31+ kernel detected. Most likely the hwardware performance\n" + DEVICE_NAME + ": counter framework which can generate NMIs is active. You have to prevent\n" + DEVICE_NAME + ": the usage of hardware performance counters by\n" + DEVICE_NAME + ": echo 2 > /proc/sys/kernel/perf_counter_paranoid\n"); + /* We can't do more here :-( */ + goto no_error; +# endif + # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) || defined CONFIG_X86_64 printk(KERN_ERR DEVICE_NAME ": NMI watchdog either active or at least initialized. Please disable the NMI\n" @@ -493,6 +529,7 @@ nmi_activated: } # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) printk(KERN_DEBUG DEVICE_NAME ": Successfully done.\n"); +no_error: # endif /* >= 2.6.19 */ #endif /* CONFIG_X86_LOCAL_APIC */ @@ -737,7 +774,11 @@ static int VBoxDrvProbe(struct platform_device *pDev) * @param pDev Pointer to the platform device. * @param State message type, see Documentation/power/devices.txt. */ +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) +static int VBoxDrvSuspend(struct device *pDev) +# else static int VBoxDrvSuspend(struct platform_device *pDev, pm_message_t State) +# endif { RTPowerSignalEvent(RTPOWEREVENT_SUSPEND); return 0; @@ -748,7 +789,11 @@ static int VBoxDrvSuspend(struct platform_device *pDev, pm_message_t State) * * @param pDev Pointer to the platform device. */ +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) +static int VBoxDrvResume(struct device *pDev) +# else static int VBoxDrvResume(struct platform_device *pDev) +# endif { RTPowerSignalEvent(RTPOWEREVENT_RESUME); return 0; diff --git a/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c b/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c index a8fcb26a0..10cb33fcf 100644 --- a/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c +++ b/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c @@ -322,7 +322,10 @@ static int VBoxDrvSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd) /* * Register for suspend/resume notifications */ - rc = ddi_prop_update_string(DDI_DEV_T_ANY, pDip, "pm-hardware-state", "needs-suspend-resume"); + rc = ddi_prop_create(DDI_DEV_T_NONE, pDip, DDI_PROP_CANSLEEP /* kmem alloc can sleep */, + "pm-hardware-state", "needs-suspend-resume", sizeof("needs-suspend-resume")); + if (rc != DDI_PROP_SUCCESS) + LogRel((DEVICE_NAME ":Suspend/Resume notification registeration failed.\n")); /* * Register ourselves as a character device, pseudo-driver @@ -356,6 +359,7 @@ static int VBoxDrvSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd) RTSemFastMutexRelease(g_DevExt.mtxGip); #endif RTPowerSignalEvent(RTPOWEREVENT_RESUME); + LogFlow((DEVICE_NAME ": Awakened from suspend.\n")); return DDI_SUCCESS; } @@ -392,6 +396,7 @@ static int VBoxDrvSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd) ddi_remove_minor_node(pDip, NULL); ddi_soft_state_free(g_pVBoxDrvSolarisState, instance); #endif + ddi_prop_remove_all(pDip); return DDI_SUCCESS; } @@ -405,6 +410,7 @@ static int VBoxDrvSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd) RTSemFastMutexRelease(g_DevExt.mtxGip); #endif RTPowerSignalEvent(RTPOWEREVENT_SUSPEND); + LogFlow((DEVICE_NAME ": Falling to suspend mode.\n")); return DDI_SUCCESS; } diff --git a/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk b/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk index 6765d83e4..9d54a0ff2 100644 --- a/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk +++ b/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk @@ -54,8 +54,6 @@ VBoxNetAdp_SOURCES.linux = \ VBoxNetAdp_SOURCES = #VBoxNetAdp_SOURCES = \ # VBoxNetAdp.c -VBoxNetAdp_LIBS.solaris += \ - $(PATH_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB) VBoxNetAdp_LIBS += \ $(PATH_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB) endif diff --git a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c index 8c4652f33..08a8fd55a 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c +++ b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c @@ -2862,6 +2862,7 @@ static bool vboxNetFltSolarisIsOurMBlk(PVBOXNETFLTINS pThis, vboxnetflt_promisc_ break; } + LogFlow((DEVICE_NAME ":vboxNetFltSolarisIsOurMBlk returns %d.\n", fIsOurPacket)); RTSemFastMutexRelease(pThis->u.s.hFastMtx); return fIsOurPacket; } @@ -2891,9 +2892,39 @@ static int vboxNetFltSolarisRecv(PVBOXNETFLTINS pThis, vboxnetflt_stream_t *pStr } /* + * Paranoia... + */ + if (RT_UNLIKELY(MBLKL(pMsg) < sizeof(RTNETETHERHDR))) + { + size_t cbMsg = msgdsize(pMsg); + if (cbMsg < sizeof(RTNETETHERHDR)) + return VINF_SUCCESS; + + mblk_t *pFullMsg = allocb(cbMsg, BPRI_MED); + if (RT_LIKELY(pFullMsg)) + { + mblk_t *pCur = pMsg; + while (pCur) + { + size_t cbBlock = MBLKL(pCur); + if (cbBlock > 0) + { + bcopy(pCur->b_rptr, pFullMsg->b_wptr, cbBlock); + pFullMsg->b_wptr += cbBlock; + } + pCur = pCur->b_cont; + } + + freemsg(pMsg); + pMsg = pFullMsg; + } + else + return VERR_NO_MEMORY; + } + + /* * Don't loopback packets we transmit to the wire. */ - /** @todo maybe we need not check for loopback for INTNETTRUNKDIR_HOST case? */ if (vboxNetFltSolarisIsOurMBlk(pThis, pPromiscStream, pMsg)) { LogFlow((DEVICE_NAME ":Avoiding packet loopback.\n")); diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFlt-win.c b/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFlt-win.c index 84ccfde7b..1e49ef8b6 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFlt-win.c +++ b/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFlt-win.c @@ -2184,7 +2184,6 @@ DECLHIDDEN(NDIS_STATUS) vboxNetFltWinPtInitBind(PADAPT *ppAdapt, PNDIS_STRING pO int rc; PVBOXNETFLTINS pInstance; USHORT cbAnsiName = pBindToMiniportName->Length;/* the lenght is is bytes ; *2 ;RtlUnicodeStringToAnsiSize(pBindToMiniportName)*/ - char* pAnsiName = alloca(cbAnsiName); CREATE_INSTANCE_CONTEXT Context; RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER; @@ -2197,20 +2196,21 @@ DECLHIDDEN(NDIS_STATUS) vboxNetFltWinPtInitBind(PADAPT *ppAdapt, PNDIS_STRING pO # endif Context.Status = NDIS_STATUS_SUCCESS; - AnsiString.Buffer = pAnsiName; + AnsiString.Buffer = 0; /* will be allocated by RtlUnicodeStringToAnsiString */ AnsiString.Length = 0; AnsiString.MaximumLength = cbAnsiName; Assert(KeGetCurrentIrql() == PASSIVE_LEVEL); - Status = RtlUnicodeStringToAnsiString(&AnsiString, pBindToMiniportName, false); + Status = RtlUnicodeStringToAnsiString(&AnsiString, pBindToMiniportName, true); if(Status != STATUS_SUCCESS) { break; } - rc = vboxNetFltSearchCreateInstance(&g_VBoxNetFltGlobals, pAnsiName, &pInstance, &Context); + rc = vboxNetFltSearchCreateInstance(&g_VBoxNetFltGlobals, AnsiString.Buffer, &pInstance, &Context); + RtlFreeAnsiString(&AnsiString); if(RT_FAILURE(rc)) { Assert(0); diff --git a/src/VBox/HostServices/SharedClipboard/service.cpp b/src/VBox/HostServices/SharedClipboard/service.cpp index 56b51bb99..f8147822e 100644 --- a/src/VBox/HostServices/SharedClipboard/service.cpp +++ b/src/VBox/HostServices/SharedClipboard/service.cpp @@ -177,21 +177,21 @@ static bool vboxSvcClipboardReturnMsg (VBOXCLIPBOARDCLIENTDATA *pClient, VBOXHGC /* Message priority is taken into account. */ if (pClient->fMsgQuit) { - LogFlow(("vboxSvcClipboardReturnMsg: Quit\n")); + LogRelFlow(("vboxSvcClipboardReturnMsg: Quit\n")); VBoxHGCMParmUInt32Set (&paParms[0], VBOX_SHARED_CLIPBOARD_HOST_MSG_QUIT); VBoxHGCMParmUInt32Set (&paParms[1], 0); pClient->fMsgQuit = false; } else if (pClient->fMsgReadData) { - LogFlow(("vboxSvcClipboardReturnMsg: ReadData %02X\n", pClient->u32RequestedFormat)); + LogRelFlow(("vboxSvcClipboardReturnMsg: ReadData %02X\n", pClient->u32RequestedFormat)); VBoxHGCMParmUInt32Set (&paParms[0], VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA); VBoxHGCMParmUInt32Set (&paParms[1], pClient->u32RequestedFormat); pClient->fMsgReadData = false; } else if (pClient->fMsgFormats) { - LogFlow(("vboxSvcClipboardReturnMsg: Formats %02X\n", pClient->u32AvailableFormats)); + LogRelFlow(("vboxSvcClipboardReturnMsg: Formats %02X\n", pClient->u32AvailableFormats)); VBoxHGCMParmUInt32Set (&paParms[0], VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS); VBoxHGCMParmUInt32Set (&paParms[1], pClient->u32AvailableFormats); pClient->fMsgFormats = false; @@ -199,7 +199,7 @@ static bool vboxSvcClipboardReturnMsg (VBOXCLIPBOARDCLIENTDATA *pClient, VBOXHGC else { /* No pending messages. */ - LogFlow(("vboxSvcClipboardReturnMsg: no message\n")); + LogRelFlow(("vboxSvcClipboardReturnMsg: no message\n")); return false; } @@ -215,7 +215,7 @@ void vboxSvcClipboardReportMsg (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Ms { case VBOX_SHARED_CLIPBOARD_HOST_MSG_QUIT: { - LogFlow(("vboxSvcClipboardReportMsg: Quit\n")); + LogRelFlow(("vboxSvcClipboardReportMsg: Quit\n")); pClient->fMsgQuit = true; } break; case VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA: @@ -227,7 +227,7 @@ void vboxSvcClipboardReportMsg (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Ms break; } - LogFlow(("vboxSvcClipboardReportMsg: ReadData %02X\n", u32Formats)); + LogRelFlow(("vboxSvcClipboardReportMsg: ReadData %02X\n", u32Formats)); pClient->u32RequestedFormat = u32Formats; pClient->fMsgReadData = true; } break; @@ -240,14 +240,14 @@ void vboxSvcClipboardReportMsg (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Ms break; } - LogFlow(("vboxSvcClipboardReportMsg: Formats %02X\n", u32Formats)); + LogRelFlow(("vboxSvcClipboardReportMsg: Formats %02X\n", u32Formats)); pClient->u32AvailableFormats = u32Formats; pClient->fMsgFormats = true; } break; default: { /* Invalid message. */ - LogFlow(("vboxSvcClipboardReportMsg: invalid message %d\n", u32Msg)); + LogRelFlow(("vboxSvcClipboardReportMsg: invalid message %d\n", u32Msg)); } break; } @@ -269,7 +269,7 @@ void vboxSvcClipboardReportMsg (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Ms if (fMessageReturned) { - LogFlow(("vboxSvcClipboardReportMsg: CallComplete\n")); + LogRelFlow(("vboxSvcClipboardReportMsg: CallComplete\n")); g_pHelpers->pfnCallComplete (callHandle, VINF_SUCCESS); } } @@ -356,7 +356,7 @@ static DECLCALLBACK(int) svcConnect (void *, uint32_t u32ClientID, void *pvClien g_pClient = pClient; } - Log(("vboxClipboardConnect: rc = %Rrc\n", rc)); + LogRel2(("vboxClipboardConnect: rc = %Rrc\n", rc)); return rc; } @@ -371,8 +371,8 @@ static DECLCALLBACK(void) svcCall (void *, { int rc = VINF_SUCCESS; - Log(("svcCall: u32ClientID = %d, fn = %d, cParms = %d, pparms = %d\n", - u32ClientID, u32Function, cParms, paParms)); + LogRel2(("svcCall: u32ClientID = %d, fn = %d, cParms = %d, pparms = %d\n", + u32ClientID, u32Function, cParms, paParms)); VBOXCLIPBOARDCLIENTDATA *pClient = (VBOXCLIPBOARDCLIENTDATA *)pvClient; @@ -384,7 +384,7 @@ static DECLCALLBACK(void) svcCall (void *, for (i = 0; i < cParms; i++) { /** @todo parameters other than 32 bit */ - Log((" pparms[%d]: type %d value %d\n", i, paParms[i].type, paParms[i].u.uint32)); + LogRel2((" pparms[%d]: type %d value %d\n", i, paParms[i].type, paParms[i].u.uint32)); } #endif @@ -393,7 +393,7 @@ static DECLCALLBACK(void) svcCall (void *, case VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG: { /* The quest requests a host message. */ - Log(("svcCall: VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG\n")); + LogRel2(("svcCall: VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG\n")); if (cParms != VBOX_SHARED_CLIPBOARD_CPARMS_GET_HOST_MSG) { @@ -426,7 +426,7 @@ static DECLCALLBACK(void) svcCall (void *, pClient->async.callHandle = callHandle; pClient->async.paParms = paParms; - Log(("svcCall: async.\n")); + LogRel2(("svcCall: async.\n")); } vboxSvcClipboardUnlock (); @@ -441,7 +441,7 @@ static DECLCALLBACK(void) svcCall (void *, case VBOX_SHARED_CLIPBOARD_FN_FORMATS: { /* The guest reports that some formats are available. */ - Log(("svcCall: VBOX_SHARED_CLIPBOARD_FN_FORMATS\n")); + LogRel2(("svcCall: VBOX_SHARED_CLIPBOARD_FN_FORMATS\n")); if (cParms != VBOX_SHARED_CLIPBOARD_CPARMS_FORMATS) { @@ -486,7 +486,7 @@ static DECLCALLBACK(void) svcCall (void *, case VBOX_SHARED_CLIPBOARD_FN_READ_DATA: { /* The guest wants to read data in the given format. */ - Log(("svcCall: VBOX_SHARED_CLIPBOARD_FN_READ_DATA\n")); + LogRel2(("svcCall: VBOX_SHARED_CLIPBOARD_FN_READ_DATA\n")); if (cParms != VBOX_SHARED_CLIPBOARD_CPARMS_READ_DATA) { @@ -532,7 +532,7 @@ static DECLCALLBACK(void) svcCall (void *, g_fReadingData = true; rc = g_pfnExtension (g_pvExtension, VBOX_CLIPBOARD_EXT_FN_DATA_READ, &parms, sizeof (parms)); - LogFlow(("DATA: g_fDelayedAnnouncement = %d, g_u32DelayedFormats = 0x%x\n", g_fDelayedAnnouncement, g_u32DelayedFormats)); + LogRelFlow(("DATA: g_fDelayedAnnouncement = %d, g_u32DelayedFormats = 0x%x\n", g_fDelayedAnnouncement, g_u32DelayedFormats)); if (g_fDelayedAnnouncement) { vboxSvcClipboardReportMsg (g_pClient, VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS, g_u32DelayedFormats); @@ -582,7 +582,7 @@ static DECLCALLBACK(void) svcCall (void *, case VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA: { /* The guest writes the requested data. */ - Log(("svcCall: VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA\n")); + LogRel2(("svcCall: VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA\n")); if (cParms != VBOX_SHARED_CLIPBOARD_CPARMS_WRITE_DATA) { @@ -640,7 +640,7 @@ static DECLCALLBACK(void) svcCall (void *, } } - LogFlow(("svcCall: rc = %Rrc\n", rc)); + LogRelFlow(("svcCall: rc = %Rrc\n", rc)); if (!fAsynchronousProcessing) { @@ -681,14 +681,14 @@ static DECLCALLBACK(int) svcHostCall (void *, { int rc = VINF_SUCCESS; - Log(("svcHostCall: fn = %d, cParms = %d, pparms = %d\n", + LogRel2(("svcHostCall: fn = %d, cParms = %d, pparms = %d\n", u32Function, cParms, paParms)); switch (u32Function) { case VBOX_SHARED_CLIPBOARD_HOST_FN_SET_MODE: { - Log(("svcCall: VBOX_SHARED_CLIPBOARD_HOST_FN_SET_MODE\n")); + LogRel2(("svcCall: VBOX_SHARED_CLIPBOARD_HOST_FN_SET_MODE\n")); if (cParms != 1) { @@ -714,7 +714,7 @@ static DECLCALLBACK(int) svcHostCall (void *, break; } - LogFlow(("svcHostCall: rc = %Rrc\n", rc)); + LogRelFlow(("svcHostCall: rc = %Rrc\n", rc)); return rc; } @@ -769,7 +769,7 @@ static DECLCALLBACK(int) svcSaveState(void *, uint32_t u32ClientID, void *pvClie * by VMMDev. The service therefore must save state as if there were no * pending request. */ - Log(("svcSaveState: u32ClientID = %d\n", u32ClientID)); + LogRel2(("svcSaveState: u32ClientID = %d\n", u32ClientID)); VBOXCLIPBOARDCLIENTDATA *pClient = (VBOXCLIPBOARDCLIENTDATA *)pvClient; @@ -799,7 +799,7 @@ static DECLCALLBACK(int) svcSaveState(void *, uint32_t u32ClientID, void *pvClie static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM) { - Log(("svcLoadState: u32ClientID = %d\n", u32ClientID)); + LogRel2(("svcLoadState: u32ClientID = %d\n", u32ClientID)); VBOXCLIPBOARDCLIENTDATA *pClient = (VBOXCLIPBOARDCLIENTDATA *)pvClient; @@ -813,7 +813,7 @@ static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClie if (len != sizeof(CLIPSAVEDSTATEDATA)) { - Log(("Client data size mismatch: expected %d, got %d\n", sizeof (CLIPSAVEDSTATEDATA), len)); + LogRel2(("Client data size mismatch: expected %d, got %d\n", sizeof (CLIPSAVEDSTATEDATA), len)); return VERR_SSM_DATA_UNIT_FORMAT_CHANGED; } @@ -824,7 +824,7 @@ static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClie /* Verify the loaded clients data and update the pClient. */ if (pClient->u32ClientID != savedState.u32ClientID) { - Log(("Client ID mismatch: expected %d, got %d\n", pClient->u32ClientID, savedState.u32ClientID)); + LogRel2(("Client ID mismatch: expected %d, got %d\n", pClient->u32ClientID, savedState.u32ClientID)); return VERR_SSM_DATA_UNIT_FORMAT_CHANGED; } @@ -847,7 +847,7 @@ static DECLCALLBACK(int) extCallback (uint32_t u32Function, uint32_t u32Format, { case VBOX_CLIPBOARD_EXT_FN_FORMAT_ANNOUNCE: { - LogFlow(("ANNOUNCE: g_fReadingData = %d\n", g_fReadingData)); + LogRelFlow(("ANNOUNCE: g_fReadingData = %d\n", g_fReadingData)); if (g_fReadingData) { g_fDelayedAnnouncement = true; @@ -874,7 +874,7 @@ static DECLCALLBACK(int) extCallback (uint32_t u32Function, uint32_t u32Format, static DECLCALLBACK(int) svcRegisterExtension(void *, PFNHGCMSVCEXT pfnExtension, void *pvExtension) { - LogFlowFunc(("pfnExtension = %p\n", pfnExtension)); + LogRelFlowFunc(("pfnExtension = %p\n", pfnExtension)); VBOXCLIPBOARDEXTPARMS parms; @@ -907,7 +907,7 @@ extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *pt { int rc = VINF_SUCCESS; - LogFlowFunc(("ptable = %p\n", ptable)); + LogRelFlowFunc(("ptable = %p\n", ptable)); if (!ptable) { @@ -915,7 +915,7 @@ extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *pt } else { - Log(("VBoxHGCMSvcLoad: ptable->cbSize = %d, ptable->u32Version = 0x%08X\n", ptable->cbSize, ptable->u32Version)); + LogRel2(("VBoxHGCMSvcLoad: ptable->cbSize = %d, ptable->u32Version = 0x%08X\n", ptable->cbSize, ptable->u32Version)); if ( ptable->cbSize != sizeof (VBOXHGCMSVCFNTABLE) || ptable->u32Version != VBOX_HGCM_SVC_VERSION) diff --git a/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp b/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp index 22b612cd5..197a57133 100644 --- a/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp +++ b/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp @@ -71,7 +71,7 @@ struct _VBOXCLIPBOARDCONTEXT void ClipReportX11Formats(VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Formats) { - LogFlowFunc(("called. pCtx=%p, u32Formats=%02X\n", pCtx, u32Formats)); + LogRelFlowFunc(("called. pCtx=%p, u32Formats=%02X\n", pCtx, u32Formats)); vboxSvcClipboardReportMsg(pCtx->pClient, VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS, u32Formats); @@ -134,7 +134,7 @@ int vboxClipboardConnect (VBOXCLIPBOARDCLIENTDATA *pClient) RTMemFree(pCtx); LogRel(("Failed to initialise the shared clipboard\n")); } - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); return rc; } @@ -159,7 +159,7 @@ int vboxClipboardSync (VBOXCLIPBOARDCLIENTDATA *pClient) */ void vboxClipboardDisconnect (VBOXCLIPBOARDCLIENTDATA *pClient) { - LogFlow(("vboxClipboardDisconnect\n")); + LogRelFlow(("vboxClipboardDisconnect\n")); LogRel(("Stopping the host clipboard service\n")); VBOXCLIPBOARDCONTEXT *pCtx = pClient->pCtx; @@ -191,7 +191,7 @@ void vboxClipboardDisconnect (VBOXCLIPBOARDCLIENTDATA *pClient) void vboxClipboardFormatAnnounce (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Formats) { - LogFlowFunc(("called. pClient=%p, u32Formats=%02X\n", pClient, + LogRelFlowFunc(("called. pClient=%p, u32Formats=%02X\n", pClient, u32Formats)); ClipAnnounceFormatToX11 (pClient->pCtx->pBackend, u32Formats); } @@ -229,7 +229,7 @@ int vboxClipboardReadData (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Format, void *pv, uint32_t cb, uint32_t *pcbActual) { - LogFlowFunc(("pClient=%p, u32Format=%02X, pv=%p, cb=%u, pcbActual=%p", + LogRelFlowFunc(("pClient=%p, u32Format=%02X, pv=%p, cb=%u, pcbActual=%p", pClient, u32Format, pv, cb, pcbActual)); int rc = VINF_SUCCESS; @@ -245,7 +245,7 @@ int vboxClipboardReadData (VBOXCLIPBOARDCLIENTDATA *pClient, if (RT_SUCCESS(rc)) rc = VINF_HGCM_ASYNC_EXECUTE; } - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); return rc; } @@ -289,7 +289,7 @@ static int clipWaitForDataFromVBox(VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Format) { int rc = VINF_SUCCESS; - LogFlowFunc(("pCtx=%p, pReq=%p, u32Format=%02X\n", pCtx, pReq, u32Format)); + LogRelFlowFunc(("pCtx=%p, pReq=%p, u32Format=%02X\n", pCtx, pReq, u32Format)); /* Request data from VBox */ vboxSvcClipboardReportMsg(pCtx->pClient, VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA, @@ -311,7 +311,7 @@ static int clipWaitForDataFromVBox(VBOXCLIPBOARDCONTEXT *pCtx, RTCritSectLeave(&pCtx->clipboardMutex); if (RT_SUCCESS(rc) && (pReq->pv == NULL)) rc = VERR_NO_DATA; - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); return rc; } @@ -322,7 +322,7 @@ static int clipRequestDataFromVBox(VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Format) { int rc = VINF_SUCCESS; - LogFlowFunc(("pCtx=%p, pReq=%p, u32Format=%02X\n", pCtx, pReq, + LogRelFlowFunc(("pCtx=%p, pReq=%p, u32Format=%02X\n", pCtx, pReq, u32Format)); /* Start by "posting" the request for the next invocation of * vboxClipboardWriteData. */ @@ -339,7 +339,7 @@ static int clipRequestDataFromVBox(VBOXCLIPBOARDCONTEXT *pCtx, RTCritSectLeave(&pCtx->clipboardMutex); if (RT_SUCCESS(rc)) rc = clipWaitForDataFromVBox(pCtx, pReq, u32Format); - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); return rc; } @@ -360,12 +360,12 @@ int ClipRequestDataForX11 (VBOXCLIPBOARDCONTEXT *pCtx, { VBOXCLIPBOARDREQFROMVBOX request = { NULL }; - LogFlowFunc(("pCtx=%p, u32Format=%02X, ppv=%p, pcb=%p\n", pCtx, + LogRelFlowFunc(("pCtx=%p, u32Format=%02X, ppv=%p, pcb=%p\n", pCtx, u32Format, ppv, pcb)); if (pCtx->fShuttingDown) { /* The shared clipboard is disconnecting. */ - LogFunc(("host requested guest clipboard data after guest had disconnected.\n")); + LogRelFunc(("host requested guest clipboard data after guest had disconnected.\n")); return VERR_WRONG_ORDER; } int rc = RTSemEventCreate(&request.finished); @@ -379,9 +379,9 @@ int ClipRequestDataForX11 (VBOXCLIPBOARDCONTEXT *pCtx, *ppv = request.pv; *pcb = request.cb; } - LogFlowFunc(("returning %Rrc\n", rc)); + LogRelFlowFunc(("returning %Rrc\n", rc)); if (RT_SUCCESS(rc)) - LogFlowFunc(("*ppv=%.*ls, *pcb=%u\n", *pcb / 2, *ppv, *pcb)); + LogRelFlowFunc(("*ppv=%.*ls, *pcb=%u\n", *pcb / 2, *ppv, *pcb)); return rc; } @@ -397,7 +397,7 @@ int ClipRequestDataForX11 (VBOXCLIPBOARDCONTEXT *pCtx, void vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, void *pv, uint32_t cb, uint32_t u32Format) { - LogFlowFunc (("called. pClient=%p, pv=%p (%.*ls), cb=%u, u32Format=%02X\n", + LogRelFlowFunc (("called. pClient=%p, pv=%p (%.*ls), cb=%u, u32Format=%02X\n", pClient, pv, cb / 2, pv, cb, u32Format)); VBOXCLIPBOARDCONTEXT *pCtx = pClient->pCtx; diff --git a/src/VBox/HostServices/SharedFolders/service.cpp b/src/VBox/HostServices/SharedFolders/service.cpp index 27aae9c9d..7e27a5700 100644 --- a/src/VBox/HostServices/SharedFolders/service.cpp +++ b/src/VBox/HostServices/SharedFolders/service.cpp @@ -208,7 +208,7 @@ static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClie /* Load the saved mapping description and try to find it in the mappings. */ MAPPING mapping; memset (&mapping, 0, sizeof (mapping)); - + /* restore the folder mapping counter. */ rc = SSMR3GetU32(pSSM, &mapping.cMappings); AssertRCReturn(rc, rc); @@ -314,7 +314,7 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 /* Verify parameters values. */ if ( (fu32Flags & ~SHFL_MF_UTF8) != 0 - || (cbMappings < sizeof (SHFLMAPPING) * cMappings) + || cbMappings / sizeof (SHFLMAPPING) < cMappings ) { rc = VERR_INVALID_PARAMETER; @@ -360,12 +360,9 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 /* Fetch parameters. */ SHFLROOT root = (SHFLROOT)paParms[0].u.uint32; SHFLSTRING *pString = (SHFLSTRING *)paParms[1].u.pointer.addr; - uint32_t cbString = paParms[1].u.pointer.size; /* Verify parameters values. */ - if ( (cbString < sizeof (SHFLSTRING)) - || (cbString < pString->u16Size) - ) + if (!ShflStringIsValid(pString, paParms[1].u.pointer.size)) { rc = VERR_INVALID_PARAMETER; } @@ -411,7 +408,7 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 uint32_t cbParms = paParms[2].u.pointer.size; /* Verify parameters values. */ - if ( (cbPath < sizeof (SHFLSTRING)) + if ( !ShflStringIsValid(pPath, cbPath) || (cbParms != sizeof (SHFLCREATEPARMS)) ) { @@ -513,7 +510,9 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 uint8_t *pBuffer = (uint8_t *)paParms[4].u.pointer.addr; /* Verify parameters values. */ - if (Handle == SHFL_HANDLE_ROOT) + if ( Handle == SHFL_HANDLE_ROOT + || count > paParms[4].u.pointer.size + ) { rc = VERR_INVALID_PARAMETER; } @@ -578,7 +577,9 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 uint8_t *pBuffer = (uint8_t *)paParms[4].u.pointer.addr; /* Verify parameters values. */ - if (Handle == SHFL_HANDLE_ROOT) + if ( Handle == SHFL_HANDLE_ROOT + || count > paParms[4].u.pointer.size + ) { rc = VERR_INVALID_PARAMETER; } @@ -737,6 +738,8 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 /* Verify parameters values. */ if ( (length < sizeof (SHFLDIRINFO)) + || length > paParms[5].u.pointer.size + || !ShflStringIsValidOrNull(pPath, paParms[4].u.pointer.size) ) { rc = VERR_INVALID_PARAMETER; @@ -800,13 +803,21 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 SHFLROOT root = (SHFLROOT)paParms[1].u.uint32; RTUTF16 delimiter = (RTUTF16)paParms[2].u.uint32; - /* Execute the function. */ - rc = vbsfMapFolder (pClient, pszMapName, delimiter, false, &root); - - if (RT_SUCCESS(rc)) + /* Verify parameters values. */ + if (!ShflStringIsValid(pszMapName, paParms[0].u.pointer.size)) { - /* Update parameters.*/ - paParms[1].u.uint32 = root; + rc = VERR_INVALID_PARAMETER; + } + else + { + /* Execute the function. */ + rc = vbsfMapFolder (pClient, pszMapName, delimiter, false, &root); + + if (RT_SUCCESS(rc)) + { + /* Update parameters.*/ + paParms[1].u.uint32 = root; + } } } break; @@ -843,13 +854,22 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 RTUTF16 delimiter = (RTUTF16)paParms[2].u.uint32; bool fCaseSensitive = !!paParms[3].u.uint32; - /* Execute the function. */ - rc = vbsfMapFolder (pClient, pszMapName, delimiter, fCaseSensitive, &root); - - if (RT_SUCCESS(rc)) + /* Verify parameters values. */ + if (!ShflStringIsValid(pszMapName, paParms[0].u.pointer.size)) { - /* Update parameters.*/ - paParms[1].u.uint32 = root; + rc = VERR_INVALID_PARAMETER; + } + else + { + + /* Execute the function. */ + rc = vbsfMapFolder (pClient, pszMapName, delimiter, fCaseSensitive, &root); + + if (RT_SUCCESS(rc)) + { + /* Update parameters.*/ + paParms[1].u.uint32 = root; + } } } LogRel(("SharedFolders host service: map operation result %Rrc.\n", rc)); @@ -921,20 +941,28 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 uint32_t length = paParms[3].u.uint32; uint8_t *pBuffer = (uint8_t *)paParms[4].u.pointer.addr; - /* Execute the function. */ - if (flags & SHFL_INFO_SET) - rc = vbsfSetFSInfo (pClient, root, Handle, flags, &length, pBuffer); - else /* SHFL_INFO_GET */ - rc = vbsfQueryFSInfo (pClient, root, Handle, flags, &length, pBuffer); - - if (RT_SUCCESS(rc)) + /* Verify parameters values. */ + if (length > paParms[4].u.pointer.size) { - /* Update parameters.*/ - paParms[3].u.uint32 = length; + rc = VERR_INVALID_PARAMETER; } else { - paParms[3].u.uint32 = 0; /* nothing read */ + /* Execute the function. */ + if (flags & SHFL_INFO_SET) + rc = vbsfSetFSInfo (pClient, root, Handle, flags, &length, pBuffer); + else /* SHFL_INFO_GET */ + rc = vbsfQueryFSInfo (pClient, root, Handle, flags, &length, pBuffer); + + if (RT_SUCCESS(rc)) + { + /* Update parameters.*/ + paParms[3].u.uint32 = length; + } + else + { + paParms[3].u.uint32 = 0; /* nothing read */ + } } } break; @@ -966,8 +994,7 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 uint32_t flags = paParms[2].u.uint32; /* Verify parameters values. */ - if ( (cbPath < sizeof (SHFLSTRING)) - ) + if (!ShflStringIsValid(pPath, cbPath)) { rc = VERR_INVALID_PARAMETER; } @@ -1008,14 +1035,12 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 /* Fetch parameters. */ SHFLROOT root = (SHFLROOT)paParms[0].u.uint32; SHFLSTRING *pSrc = (SHFLSTRING *)paParms[1].u.pointer.addr; - uint32_t cbSrc = paParms[1].u.pointer.size; SHFLSTRING *pDest = (SHFLSTRING *)paParms[2].u.pointer.addr; - uint32_t cbDest = paParms[2].u.pointer.size; uint32_t flags = paParms[3].u.uint32; /* Verify parameters values. */ - if ( (cbSrc < sizeof (SHFLSTRING)) - || (cbDest < sizeof (SHFLSTRING)) + if ( !ShflStringIsValid(pSrc, paParms[1].u.pointer.size) + || !ShflStringIsValid(pDest, paParms[2].u.pointer.size) ) { rc = VERR_INVALID_PARAMETER; @@ -1155,16 +1180,12 @@ static DECLCALLBACK(int) svcHostCall (void *, uint32_t u32Function, uint32_t cPa { /* Fetch parameters. */ SHFLSTRING *pFolderName = (SHFLSTRING *)paParms[0].u.pointer.addr; - uint32_t cbStringFolder = paParms[0].u.pointer.size; SHFLSTRING *pMapName = (SHFLSTRING *)paParms[1].u.pointer.addr; - uint32_t cbStringMap = paParms[1].u.pointer.size; uint32_t fWritable = paParms[2].u.uint32; /* Verify parameters values. */ - if ( (cbStringFolder < sizeof (SHFLSTRING)) - || (cbStringFolder < pFolderName->u16Size) - || (cbStringMap < sizeof (SHFLSTRING)) - || (cbStringMap < pMapName->u16Size) + if ( !ShflStringIsValid(pFolderName, paParms[0].u.pointer.size) + || !ShflStringIsValid(pMapName, paParms[1].u.pointer.size) ) { rc = VERR_INVALID_PARAMETER; @@ -1204,13 +1225,10 @@ static DECLCALLBACK(int) svcHostCall (void *, uint32_t u32Function, uint32_t cPa else { /* Fetch parameters. */ - SHFLSTRING *pString = (SHFLSTRING *)paParms[0].u.pointer.addr; - uint32_t cbString = paParms[0].u.pointer.size; + SHFLSTRING *pString = (SHFLSTRING *)paParms[0].u.pointer.addr; /* Verify parameters values. */ - if ( (cbString < sizeof (SHFLSTRING)) - || (cbString < pString->u16Size) - ) + if (!ShflStringIsValid(pString, paParms[0].u.pointer.size)) { rc = VERR_INVALID_PARAMETER; } diff --git a/src/VBox/HostServices/SharedFolders/vbsf.cpp b/src/VBox/HostServices/SharedFolders/vbsf.cpp index 3f48e2756..dbbe6845f 100644 --- a/src/VBox/HostServices/SharedFolders/vbsf.cpp +++ b/src/VBox/HostServices/SharedFolders/vbsf.cpp @@ -241,7 +241,7 @@ static int vbsfPathCheck(const char *pUtf8Path, size_t cbPath) return rc; } -static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pPath, +static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, PSHFLSTRING pPath, uint32_t cbPath, char **ppszFullPath, uint32_t *pcbFullPathRoot, bool fWildCard = false) { int rc = VINF_SUCCESS; @@ -264,7 +264,7 @@ static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING char *utf8Root; /* Verify that the path is under the root directory. */ - rc = vbsfPathCheck((char *)&pPath->String.utf8[0], pPath->u16Length); + rc = vbsfPathCheck((const char *)&pPath->String.utf8[0], pPath->u16Length); if (RT_SUCCESS (rc)) { @@ -1444,8 +1444,8 @@ int vbsfFlush(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle) return rc; } -int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLSTRING *pPath, uint32_t flags, uint32_t *pcbBuffer, uint8_t *pBuffer, - uint32_t *pIndex, uint32_t *pcFiles) +int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLSTRING *pPath, uint32_t flags, + uint32_t *pcbBuffer, uint8_t *pBuffer, uint32_t *pIndex, uint32_t *pcFiles) { SHFLFILEHANDLE *pHandle = (SHFLFILEHANDLE *)vbsfQueryHandle(Handle, SHFL_HF_TYPE_DIR); PRTDIRENTRYEX pDirEntry = 0, pDirEntryOrg; diff --git a/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp b/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp index 2d2cf3fac..ac4f78a63 100644 --- a/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp +++ b/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp @@ -130,7 +130,7 @@ static DECLCALLBACK(int) svcConnect (void *, uint32_t u32ClientID, void *pvClien #else g_pFrameBuffer->COMGETTER(WinId)(&g_winId); renderspuSetWindowId((uint32_t)g_winId); - crVBoxServerAddClient(u32ClientID); + rc = crVBoxServerAddClient(u32ClientID); #endif return rc; @@ -221,6 +221,12 @@ static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClie return VINF_SUCCESS; } +static void svcClientVersionUnsupported(uint32_t minor, uint32_t major) +{ + LogRel(("SHARED_CROPENGL: unsupported client version %d.%d\n", minor, major)); + /*todo add warning window*/ +} + static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32_t u32ClientID, void *pvClient, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) { int rc = VINF_SUCCESS; @@ -263,7 +269,13 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 uint32_t cbBuffer = paParms[0].u.pointer.size; /* Execute the function. */ - crVBoxServerClientWrite(u32ClientID, pBuffer, cbBuffer); + rc = crVBoxServerClientWrite(u32ClientID, pBuffer, cbBuffer); + if (!RT_SUCCESS(rc)) + { + Assert(VERR_NOT_SUPPORTED==rc); + svcClientVersionUnsupported(0, 0); + } + } break; } @@ -296,6 +308,9 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 { /* Update parameters.*/ paParms[0].u.pointer.size = cbBuffer; //@todo guest doesn't see this change somehow? + } else if (VERR_NOT_SUPPORTED==rc) + { + svcClientVersionUnsupported(0, 0); } /* Return the required buffer size always */ @@ -331,7 +346,13 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 uint32_t cbWriteback = paParms[1].u.pointer.size; /* Execute the function. */ - crVBoxServerClientWrite(u32ClientID, pBuffer, cbBuffer); + rc = crVBoxServerClientWrite(u32ClientID, pBuffer, cbBuffer); + if (!RT_SUCCESS(rc)) + { + Assert(VERR_NOT_SUPPORTED==rc); + svcClientVersionUnsupported(0, 0); + } + rc = crVBoxServerClientRead(u32ClientID, pWriteback, &cbWriteback); if (RT_SUCCESS(rc)) @@ -345,6 +366,41 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 break; } + case SHCRGL_GUEST_FN_SET_VERSION: + { + Log(("svcCall: SHCRGL_GUEST_FN_SET_VERSION\n")); + + /* Verify parameter count and types. */ + if (cParms != SHCRGL_CPARMS_SET_VERSION) + { + rc = VERR_INVALID_PARAMETER; + } + else + if ( paParms[0].type != VBOX_HGCM_SVC_PARM_32BIT /* vMajor */ + || paParms[1].type != VBOX_HGCM_SVC_PARM_32BIT /* vMinor */ + ) + { + rc = VERR_INVALID_PARAMETER; + } + else + { + /* Fetch parameters. */ + uint32_t vMajor = paParms[0].u.uint32; + uint32_t vMinor = paParms[1].u.uint32; + + /* Execute the function. */ + rc = crVBoxServerClientSetVersion(u32ClientID, vMajor, vMinor); + + if (!RT_SUCCESS(rc)) + { + /*@todo, add warning window*/ + svcClientVersionUnsupported(vMajor, vMinor); + } + } + + break; + } + default: { rc = VERR_NOT_IMPLEMENTED; diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_context.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_context.c index a7267323c..aaf1760b2 100644 --- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_context.c +++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_context.c @@ -143,6 +143,36 @@ crServerDispatchDestroyContext( GLint ctx ) cr_server.curClient->contextList[pos] = 0; break; } + + /*Some application call destroy context not in a thread where it was created...have do deal with it.*/ + if (CR_MAX_CONTEXTS==pos) + { + int32_t client; + + for (client=0; client<cr_server.numClients; ++client) + { + if (cr_server.clients[client]==cr_server.curClient) + continue; + + for (pos = 0; pos < CR_MAX_CONTEXTS; ++pos) + if (cr_server.clients[client]->contextList[pos] == ctx) + { + cr_server.clients[client]->contextList[pos] = 0; + break; + } + + if (pos<CR_MAX_CONTEXTS) + { + if (cr_server.clients[client]->currentCtx == crCtx) + { + cr_server.clients[client]->currentContextNumber = -1; + cr_server.clients[client]->currentCtx = cr_server.DummyContext; + } + break; + } + } + } + CRASSERT(pos<CR_MAX_CONTEXTS); } } diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c index d36acb001..f7b6be15a 100644 --- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c +++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c @@ -318,10 +318,16 @@ GLboolean crVBoxServerInit(void) return GL_TRUE; } -void crVBoxServerAddClient(uint32_t u32ClientID) +int32_t crVBoxServerAddClient(uint32_t u32ClientID) { - CRClient *newClient = (CRClient *) crCalloc(sizeof(CRClient)); - + CRClient *newClient; + + if (cr_server.numClients>=CR_MAX_CLIENTS) + { + return VERR_MAX_THRDS_REACHED; + } + + newClient = (CRClient *) crCalloc(sizeof(CRClient)); crDebug("crServer: AddClient u32ClientID=%d", u32ClientID); newClient->spu_id = 0; @@ -335,6 +341,8 @@ void crVBoxServerAddClient(uint32_t u32ClientID) cr_server.clients[cr_server.numClients++] = newClient; crServerAddToRunQueue(newClient); + + return VINF_SUCCESS; } void crVBoxServerRemoveClient(uint32_t u32ClientID) @@ -362,7 +370,7 @@ void crVBoxServerRemoveClient(uint32_t u32ClientID) crServerDeleteClient(pClient); } -void crVBoxServerClientWrite(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t cbBuffer) +int32_t crVBoxServerClientWrite(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t cbBuffer) { CRClient *pClient; int32_t i; @@ -380,6 +388,8 @@ void crVBoxServerClientWrite(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t cb pClient = cr_server.clients[i]; CRASSERT(pClient); + if (!pClient->conn->vMajor) return VERR_NOT_SUPPORTED; + CRASSERT(pBuffer); /* This should never fire unless we start to multithread */ @@ -435,6 +445,8 @@ void crVBoxServerClientWrite(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t cb crStateResetCurrentPointers(&cr_server.current); CRASSERT(!pClient->conn->allow_redir_ptr || crNetNumMessages(pClient->conn)==0); + + return VINF_SUCCESS; } int32_t crVBoxServerClientRead(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t *pcbBuffer) @@ -455,6 +467,8 @@ int32_t crVBoxServerClientRead(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t pClient = cr_server.clients[i]; CRASSERT(pClient); + if (!pClient->conn->vMajor) return VERR_NOT_SUPPORTED; + if (pClient->conn->cbHostBuffer > *pcbBuffer) { crDebug("crServer: [%lx] ClientRead u32ClientID=%d FAIL, host buffer too small %d of %d", @@ -479,6 +493,33 @@ int32_t crVBoxServerClientRead(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t return VINF_SUCCESS; } +int32_t crVBoxServerClientSetVersion(uint32_t u32ClientID, uint32_t vMajor, uint32_t vMinor) +{ + CRClient *pClient; + int32_t i; + + for (i = 0; i < cr_server.numClients; i++) + { + if (cr_server.clients[i] && cr_server.clients[i]->conn + && cr_server.clients[i]->conn->u32ClientID==u32ClientID) + { + break; + } + } + pClient = cr_server.clients[i]; + CRASSERT(pClient); + + pClient->conn->vMajor = vMajor; + pClient->conn->vMinor = vMinor; + + if (vMajor != CR_PROTOCOL_VERSION_MAJOR + || vMinor != CR_PROTOCOL_VERSION_MINOR) + { + return VERR_NOT_SUPPORTED; + } + else return VINF_SUCCESS; +} + int CRServerMain(int argc, char *argv[]) { diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c index 6e837ab95..277fdc6af 100644 --- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c +++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c @@ -143,19 +143,49 @@ crServerDispatchWindowDestroy( GLint window ) if (cr_server.curClient) { + if (cr_server.curClient->currentMural == mural) + { + cr_server.curClient->currentMural = NULL; + cr_server.curClient->currentWindow = -1; + } + for (pos = 0; pos < CR_MAX_WINDOWS; ++pos) if (cr_server.curClient->windowList[pos] == window) { cr_server.curClient->windowList[pos] = 0; break; } - CRASSERT(pos<CR_MAX_WINDOWS); - if (cr_server.curClient->currentMural == mural) + /*Same as with contexts, some apps destroy it not in a thread where it was created*/ + if (CR_MAX_WINDOWS==pos) { - cr_server.curClient->currentMural = NULL; - cr_server.curClient->currentWindow = -1; + int32_t client; + + for (client=0; client<cr_server.numClients; ++client) + { + if (cr_server.clients[client]==cr_server.curClient) + continue; + + for (pos = 0; pos < CR_MAX_WINDOWS; ++pos) + if (cr_server.clients[client]->windowList[pos] == window) + { + cr_server.clients[client]->windowList[pos] = 0; + break; + } + + if (pos<CR_MAX_WINDOWS) + { + if (cr_server.clients[client]->currentMural == mural) + { + cr_server.clients[client]->currentMural = NULL; + cr_server.clients[client]->currentWindow = -1; + } + break; + } + } } + + CRASSERT(pos<CR_MAX_WINDOWS); } if (cr_server.currentWindow == window) diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_agl.c b/src/VBox/HostServices/SharedOpenGL/render/renderspu_agl.c index fbd7e24b8..bb5aecfe8 100644 --- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_agl.c +++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_agl.c @@ -186,11 +186,12 @@ windowEvtHndlr(EventHandlerCallRef myHandler, EventRef event, void* userData) RTSemFastMutexRequest(render_spu.syncMutex); GLboolean result = render_spu.ws.aglSetCurrentContext(tmpContext); CHECK_AGL_RC (result, "Render SPU (windowEvtHndlr): SetCurrentContext Failed"); - if (result) - { - result = render_spu.ws.aglUpdateContext(tmpContext); - CHECK_AGL_RC (result, "Render SPU (windowEvtHndlr): UpdateContext Failed"); - } + /* Doesn't work with DirectX; Anyway doesn't */ +/* if (result)*/ +/* {*/ +/* result = render_spu.ws.aglUpdateContext(tmpContext);*/ +/* CHECK_AGL_RC (result, "Render SPU (windowEvtHndlr): UpdateContext Failed");*/ +/* }*/ RTSemFastMutexRelease(render_spu.syncMutex); } eventResult = noErr; diff --git a/src/VBox/Installer/linux/vboxdrv.sh.in b/src/VBox/Installer/linux/vboxdrv.sh.in index a5ec9415a..acd2e28ca 100755 --- a/src/VBox/Installer/linux/vboxdrv.sh.in +++ b/src/VBox/Installer/linux/vboxdrv.sh.in @@ -153,6 +153,10 @@ start() if ! rm -f $DEVICE; then failure "Cannot remove $DEVICE" fi + # HACK: disable the hardware performance counter framework + if [ -e /proc/sys/kernel/perf_counter_paranoid ]; then + echo 2 > /proc/sys/kernel/perf_counter_paranoid + fi if ! modprobe vboxdrv > /dev/null 2>&1; then failure "modprobe vboxdrv failed. Please use 'dmesg' to find out why" fi diff --git a/src/VBox/Installer/solaris/Makefile.kmk b/src/VBox/Installer/solaris/Makefile.kmk index 459b72197..08fb3c9ff 100644 --- a/src/VBox/Installer/solaris/Makefile.kmk +++ b/src/VBox/Installer/solaris/Makefile.kmk @@ -35,12 +35,12 @@ VBOX_SOL_INST_DEP_ON_MAKEFILE := $(MAKEFILE_CURRENT) ifdef VBOX_WITH_COMBINED_SOLARIS_PACKAGE ## @todo remove this when tinderclient.pl is updated. VBOX_WITH_COMBINED_PACKAGE := 1 endif -VBOX_PATH_SOL_INST_SRC := $(PATH_SUB_CURRENT) -SOLARIS_DIR_NAME_64 := amd64 -SOLARIS_DIR_NAME_32 := i386 -SOLARIS_INST_OUT_DIR := $(PATH_TARGET)/Installer -SOLARIS_BASEINST_DIR := $(PATH_TARGET)/Installer/BasePkg -SOLARIS_VBOXINST_SUBDIR := /opt/VirtualBox +VBOX_PATH_SOL_INST_SRC := $(PATH_SUB_CURRENT) +SOLARIS_DIR_NAME_64 := amd64 +SOLARIS_DIR_NAME_32 := i386 +SOLARIS_INST_OUT_DIR := $(PATH_TARGET)/Installer +SOLARIS_BASEINST_DIR := $(PATH_TARGET)/Installer/BasePkg +SOLARIS_VBOXINST_SUBDIR := opt/VirtualBox SOLARIS_VBOXINST_DIR := $(SOLARIS_BASEINST_DIR)/$(SOLARIS_VBOXINST_SUBDIR) SOLARIS_VBOXINST_DIR_32 := $(SOLARIS_VBOXINST_DIR)/$(SOLARIS_DIR_NAME_32) SOLARIS_VBOXINST_DIR_64 := $(SOLARIS_VBOXINST_DIR)/$(SOLARIS_DIR_NAME_64) @@ -54,28 +54,28 @@ SOLARIS_USRSHR_PIXMAPS_DIR := $(SOLARIS_USR_DIR)/share/pixmaps SOLARIS_VBOXSMF_DIR := $(SOLARIS_BASEINST_DIR)/var/svc/manifest/application/virtualbox SOLARIS_ETC_DIR := $(SOLARIS_BASEINST_DIR)/etc -SOLARIS_OUT_BIN_64 := $(PATH_OUT_BASE)/solaris.amd64/$(KBUILD_TYPE)/bin -SOLARIS_OUT_BIN_32 := $(PATH_OUT_BASE)/solaris.x86/$(KBUILD_TYPE)/bin -SOLARIS_OUT_BIN := $(PATH_BIN) +SOLARIS_OUT_BIN_64 := $(PATH_OUT_BASE)/solaris.amd64/$(KBUILD_TYPE)/bin +SOLARIS_OUT_BIN_32 := $(PATH_OUT_BASE)/solaris.x86/$(KBUILD_TYPE)/bin +SOLARIS_OUT_BIN := $(PATH_BIN) -SOLARIS_DBG_DIR := $(PATH_TARGET)/Installer/DebugPkg -SOLARIS_DBG_DIR_32 := $(SOLARIS_DBG_DIR)/$(SOLARIS_DIR_NAME_32) -SOLARIS_DBG_DIR_64 := $(SOLARIS_DBG_DIR)/$(SOLARIS_DIR_NAME_64) -SOLARIS_VBI_DIR := $(PATH_TARGET)/Installer/KernelPkg +SOLARIS_DBG_DIR := $(PATH_TARGET)/Installer/DebugPkg +SOLARIS_DBG_DIR_32 := $(SOLARIS_DBG_DIR)/$(SOLARIS_DIR_NAME_32) +SOLARIS_DBG_DIR_64 := $(SOLARIS_DBG_DIR)/$(SOLARIS_DIR_NAME_64) +SOLARIS_VBI_DIR := $(PATH_TARGET)/Installer/KernelPkg ifeq ($(KBUILD_TARGET_ARCH),amd64) SOLARIS_VBOXINST_DIR_ISA := $(SOLARIS_VBOXINST_DIR_64) SOLARIS_DRIVERINST_DIR_ISA := $(SOLARIS_DRIVERINST_DIR_64) - SOLARIS_DBG_DIR_ISA := $(SOLARIS_DBG_DIR_64) - SOL_DBG_OBJCOPY := /usr/sfw/bin/gobjcopy --only-keep-debug + SOLARIS_DBG_DIR_ISA := $(SOLARIS_DBG_DIR_64) + SOL_DBG_OBJCOPY := /usr/sfw/bin/gobjcopy --only-keep-debug SOL64_PKG := 1 else SOLARIS_VBOXINST_DIR_ISA := $(SOLARIS_VBOXINST_DIR_32) SOLARIS_DRIVERINST_DIR_ISA := $(SOLARIS_DRIVERINST_DIR_32) - SOLARIS_DBG_DIR_ISA := $(SOLARIS_DBG_DIR_32) - SOL_DBG_OBJCOPY := $(CP) -p # Solaris ld/gobjcopy(2.15) don't get along on x86, works only on amd64. So just using cp for now. + SOLARIS_DBG_DIR_ISA := $(SOLARIS_DBG_DIR_32) + SOL_DBG_OBJCOPY := $(CP) -p # Solaris ld/gobjcopy(2.15) don't get along on x86, works only on amd64. So just using cp for now. endif -SOL_OBJCOPY := /usr/sfw/bin/gobjcopy --strip-unneeded -R .comment +SOL_OBJCOPY := /usr/sfw/bin/gobjcopy --strip-unneeded -R .comment # Figure out the paths to the two platform specific Qt4 directories @@ -101,7 +101,7 @@ VBIPKG_FILENAME = VirtualBoxKern-$(VBOX_VERSION_STRING)-SunOS-r$(VBOX_SVN_REV) # Targets # PROGRAMS += VBoxZoneAccess VBoxISAExec -INSTALLS += solaris-doc solaris-bin +INSTALLS += solaris-doc solaris-bin solaris-drv-confs BLDDIRS += \ $(SOLARIS_INST_OUT_DIR) \ @@ -123,7 +123,7 @@ BLDDIRS += $(addprefix $(SOLARIS_BASEINST_DIR)/,\ PACKING += $(PATH_BIN)/$(PKG_FILENAME).tar.gz $(PATH_BIN)/$(DBG_ARCHIVE) OTHER_CLEAN += $(addprefix $(SOLARIS_BASEINST_DIR)/,\ - vbox.pkginfo vbox.copyright vbox.space vbox.pkgresponse \ + vbox.pkginfo vbox.copyright vbox.space vbox.depend vbox.pkgresponse \ makepackage.sh prototype postinstall.sh checkinstall.sh preremove.sh) # @@ -153,7 +153,19 @@ solaris-doc_SOURCES = \ solaris-bin_INST = bin/ solaris-bin_MODE = a+rx,u+w solaris-bin_SOURCES = \ - $(if $(VBOX_WITH_PYTHON),$(PATH_ROOT)/src/VBox/Frontends/VBoxShell/vboxshell.py=>vboxshell.py,) + $(if $(VBOX_WITH_PYTHON),$(PATH_ROOT)/src/VBox/Frontends/VBoxShell/vboxshell.py,) \ + $(VBOX_PATH_SOL_INST_SRC)/vboxdrv.sh \ + $(VBOX_PATH_SOL_INST_SRC)/VBox.sh \ + $(VBOX_PATH_SOL_INST_SRC)/ipsinstall.sh \ + $(if $(VBOX_WITH_WEBSERVICES),$(VBOX_PATH_SOL_INST_SRC)/smf-vboxwebsrv.sh,) + +solaris-drv-confs_INST = bin/ +solaris-drv-confs_MODE = a+r,u+w +solaris-drv-confs_SOURCES = \ + $(PATH_ROOT)/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf \ + $(if $(VBOX_WITH_NETFLT),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf) \ + $(if $(VBOX_WITH_NETADP),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf) \ + $(if $(VBOX_WITH_USB),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf) # # Note: Other than the files produced during packing (.pkg, .gzip etc.) all files that @@ -182,6 +194,12 @@ SOLARIS_DRIVER_BINS = \ $(if $(VBOX_WITH_NETADP),vboxnet,) \ $(if $(VBOX_WITH_USB),vboxusbmon,) +SOLARIS_DRIVER_CONFS = \ + vboxdrv.conf \ + $(if $(VBOX_WITH_NETFLT),vboxflt.conf,) \ + $(if $(VBOX_WITH_NETADP),vboxnet.conf,) \ + $(if $(VBOX_WITH_USB),vboxusbmon.conf,) + # Strip these binaries SOLARIS_STRIP_BINS = \ VBoxDD.so \ @@ -240,7 +258,6 @@ SOLARIS_NO_STRIP = \ components/VBoxXPCOMBase.xpt \ components/VirtualBox_XPCOM.xpt \ $(if $(and $(VBOX_LICENSE_FILES),$(VBOX_WITH_QTGUI)),$(VBOX_LICENSE_FILES)) \ - $(if $(VBOX_WITH_PYTHON),vboxshell.py,) SOLARIS_USRBIN_LINKS = \ $(if $(VBOX_WITH_QTGUI),VirtualBox,) \ @@ -248,26 +265,24 @@ SOLARIS_USRBIN_LINKS = \ $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \ VBoxManage +SOLARIS_COMMON_EXES = \ + vboxdrv.sh \ + VBox.sh \ + ipsinstall.sh \ + $(if $(VBOX_WITH_PYTHON),vboxshell.py,) \ + $(if $(VBOX_WITH_WEBSERVICES),smf-vboxwebsrv.sh,) \ + # Things packed explicitly, not from $(PATH_BIN), track these to clean-up properly SOLARIS_EXTRAS = \ $(if $(VBOX_OSE),,LICENSE) \ VBox.png \ autoresponse \ - vboxdrv.conf \ - $(if $(VBOX_WITH_NETFLT),vboxflt.conf,) \ - $(if $(VBOX_WITH_NETADP),vboxnet.conf,) \ - $(if $(VBOX_WITH_NETADP),hostname.vboxnet0,) \ - $(if $(VBOX_WITH_USB),vboxusbmon.conf,) \ - vboxdrv.sh \ - VBox.sh \ - ipsinstall.sh \ $(if $(VBOX_WITH_VBOXSDL),libSDL-1.2.so.0,) \ $(if $(not $(VBOX_WITH_NETFLT))vnic_setup.sh,) \ $(if $(not $(VBOX_WITH_NETFLT))vnic_term.sh,) \ $(if $(VBOX_WITH_QTGUI),virtualbox.desktop,) \ virtualbox-webservice.xml \ virtualbox-zoneaccess.xml \ - smf-vboxwebsrv.sh \ VBoxQtconfig \ VBoxISAExec \ vbox.copyright \ @@ -342,12 +357,14 @@ endif SOLARIS_ARCH_FILES := \ $(SOLARIS_STRIP_EXES) \ $(SOLARIS_DRIVER_BINS) \ + $(SOLARIS_DRIVER_CONFS) \ $(SOLARIS_USRBIN_LINKS) \ $(SOLARIS_STRIP_BINS) \ $(SOLARIS_STRIP_OBJS) \ $(SOLARIS_NO_STRIP) \ $(SOLARIS_EXTRAS) \ $(SOLARIS_QTLIBS) \ + $(SOLARIS_COMMON_EXES) \ $(SOLARIS_COMMON) SOLARIS_DBG_FILES := \ @@ -380,14 +397,15 @@ ifdef VBOX_WITH_COMBINED_PACKAGE $(addprefix $(SOLARIS_VBOXINST_DIR_32)/,$(SOLARIS_NO_STRIP)) \ $(addprefix $(SOLARIS_VBOXINST_DIR_32)/,$(SOLARIS_QTLIBS)) \ $(addprefix $(SOLARIS_VBOXINST_DIR_32)/,$(SOLARIS_STRIP_BIN_32)) \ - $(addprefix $(SOLARIS_OUT_BIN_32)/,VBoxPython.so) \ - $(addprefix $(SOLARIS_OUT_BIN_64)/,VBoxPython.so) + $(wildcard $(addprefix $(SOLARIS_OUT_BIN_32)/,VBoxPython*.so)) \ + $(wildcard $(addprefix $(SOLARIS_OUT_BIN_64)/,VBoxPython*.so)) SOLARIS_DBG_DEPFILES = $(addprefix $(SOLARIS_DBG_DIR_64)/,$(SOLARIS_DBG_FILES)) \ $(addprefix $(SOLARIS_DBG_DIR_32)/,$(SOLARIS_DBG_FILES)) else SOLARIS_ARCH_DEPFILES = $(addprefix $(SOLARIS_VBOXINST_DIR_ISA)/,$(SOLARIS_STRIP_EXES)) \ $(addprefix $(SOLARIS_VBOXINST_DIR_ISA)/,$(SOLARIS_STRIP_BINS)) \ $(addprefix $(SOLARIS_DRIVERINST_DIR_ISA)/,$(SOLARIS_DRIVER_BINS)) \ + $(addprefix $(SOLARIS_DRIVERINST_DIR)/,$(SOLARIS_DRIVER_CONFS)) \ $(ifeq ($(KBUILD_TARGET_ARCH),x86),$(addprefix $(SOLARIS_VBOXINST_DIR_ISA)/,$(SOLARIS_STRIP_BIN_32)),) \ $(ifeq ($(KBUILD_TARGET_ARCH),amd64),$(addprefix $(SOLARIS_VBOXINST_DIR_ISA)/,$(SOLARIS_STRIP_OBJ_64)),) \ $(addprefix $(SOLARIS_VBOXINST_DIR_ISA)/,$(SOLARIS_STRIP_OBJS)) \ @@ -395,8 +413,10 @@ else $(addprefix $(SOLARIS_VBOXINST_DIR_ISA)/,$(SOLARIS_QTLIBS)) SOLARIS_DBG_DEPFILES = $(addprefix $(SOLARIS_DBG_DIR_ISA)/,$(SOLARIS_DBG_FILES)) endif -SOLARIS_ARCH_DEPFILES += $(addprefix $(SOLARIS_VBOXINST_DIR)/,$(SOLARIS_COMMON)) -SOLARIS_ARCH_DEPFILES += $(addprefix $(SOLARIS_USRBIN_DIR)/,$(SOLARIS_USRBIN_LINKS)) +SOLARIS_ARCH_DEPFILES += $(addprefix $(SOLARIS_VBOXINST_DIR)/,$(SOLARIS_COMMON)) \ + $(addprefix $(SOLARIS_DRIVERINST_DIR)/,$(SOLARIS_DRIVER_CONFS)) \ + $(addprefix $(SOLARIS_VBOXINST_DIR)/,$(SOLARIS_COMMON_EXES)) \ + $(addprefix $(SOLARIS_USRBIN_DIR)/,$(SOLARIS_USRBIN_LINKS)) BLDDIRS += $(foreach d,\ additions \ @@ -456,9 +476,8 @@ $(PATH_BIN)/$(PKG_FILENAME).tar.gz: \ $(VBOX_PATH_SOL_INST_SRC)/preremove.sh \ $(VBOX_PATH_SOL_INST_SRC)/vbox.pkginfo \ $(VBOX_PATH_SOL_INST_SRC)/vbox.space \ + $(VBOX_PATH_SOL_INST_SRC)/vbox.depend \ $(VBOX_PATH_SOL_INST_SRC)/vbox.pkgresponse \ - $(VBOX_PATH_SOL_INST_SRC)/VBox.sh \ - $(VBOX_PATH_SOL_INST_SRC)/ipsinstall.sh \ $(VBOX_PATH_SOL_INST_SRC)/virtualbox.desktop \ $(PATH_ROOT)/doc/ReadMe-Solaris.txt \ $(VBOX_PATH_SOL_INST_SRC)/Makefile.kmk \ @@ -466,11 +485,7 @@ $(PATH_BIN)/$(PKG_FILENAME).tar.gz: \ $(if $(VBOX_OSE),,$(VBOX_BRAND_LICENSE_TXT)) \ $(if $(VBOX_OSE),,$(PATH_BIN)/LICENSE) \ $(if $(and $(VBOX_LICENSE_BINS),$(VBOX_WITH_QTGUI)),$(VBOX_LICENSE_BINS),) \ - $(PATH_ROOT)/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf \ - $(if $(VBOX_WITH_NETFLT),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf,) \ - $(if $(VBOX_WITH_NETADP),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf,) \ $(if $(VBOX_WITH_NETADP),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetAdp/solaris/hostname.vboxnet0,) \ - $(if $(VBOX_WITH_USB),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf,) \ $(if $(not $(VBOX_WITH_NETFLT))$(PATH_ROOT)/src/VBox/Devices/Network/solaris/vnicinit_solaris.sh,) \ $(if $(not $(VBOX_WITH_NETFLT))$(PATH_ROOT)/src/VBox/Devices/Network/solaris/vnicterm_solaris.sh,) \ $(addprefix $(PATH_BIN)/,$(filter-out $(SOLARIS_EXTRAS) $(SOLARIS_QTLIBS),$(SOLARIS_ARCH_FILES))) \ @@ -495,11 +510,7 @@ endif $(QUIET)$(MKDIR) -p $(SOLARIS_VBOXSMF_DIR) $(QUIET)$(if $(VBOX_WITH_QTGUI),$(MKDIR) -p $(SOLARIS_USRSHR_APPS_DIR),) $(QUIET)$(MKDIR) -p $(SOLARIS_USRSHR_PIXMAPS_DIR) - $(QUIET)$(INSTALL) -m 0644 $(PATH_ROOT)/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf $(SOLARIS_DRIVERINST_DIR)/vboxdrv.conf - $(QUIET)$(if $(VBOX_WITH_NETFLT),$(INSTALL) -m 0644 $(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf $(SOLARIS_DRIVERINST_DIR)/vboxflt.conf,) - $(QUIET)$(if $(VBOX_WITH_NETADP),$(INSTALL) -m 0644 $(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf $(SOLARIS_DRIVERINST_DIR)/vboxnet.conf,) $(QUIET)$(if $(VBOX_WITH_NETADP),$(INSTALL) -m 0644 $(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetAdp/solaris/hostname.vboxnet0 $(SOLARIS_ETC_DIR)/hostname.vboxnet0,) - $(QUIET)$(if $(VBOX_WITH_USB),$(INSTALL) -m 0644 $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf $(SOLARIS_DRIVERINST_DIR)/vboxusbmon.conf,) $(QUIET)$(if $(VBOX_OSE),,$(INSTALL) -m 0644 $(PATH_BIN)/LICENSE $(SOLARIS_VBOXINST_DIR)/LICENSE) $(QUIET)$(if $(VBOX_OSE),,$(INSTALL) -m 0644 $(PATH_BIN)/LICENSE $(SOLARIS_BASEINST_DIR)/vbox.copyright) ifdef VBOX_WITH_COMBINED_PACKAGE @@ -507,8 +518,8 @@ ifdef VBOX_WITH_COMBINED_PACKAGE $(QUIET)$(if $(VBOX_WITH_VBOXSDL),$(INSTALL) -m 0644 $(PATH_DEVTOOLS)/solaris.amd64/libSDL/v1.2.13/lib/libSDL-1.2.so.0.11.2 $(SOLARIS_VBOXINST_DIR_64)/libSDL-1.2.so.0,) @# @todo -XXX- how to get rid of this manual MKDIR ? $(QUIET)$(MKDIR) -p $(SOLARIS_VBOXINST_DIR)/$(VBOX_SOL_PYTHON_DIR_64) - $(QUIET)$(if $(VBOX_WITH_PYTHON),$(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s) $(SOLARIS_OUT_BIN_32)/VBoxPython.so $(SOLARIS_VBOXINST_DIR)/VBoxPython.so,) - $(QUIET)$(if $(VBOX_WITH_PYTHON),$(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s) $(SOLARIS_OUT_BIN_64)/VBoxPython.so $(SOLARIS_VBOXINST_DIR)/$(VBOX_SOL_PYTHON_DIR_64)/VBoxPython.so,) + $(QUIET)$(if $(VBOX_WITH_PYTHON),$(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s) $(wildcard $(SOLARIS_OUT_BIN_32)/VBoxPython*.so) $(SOLARIS_VBOXINST_DIR)/,) + $(QUIET)$(if $(VBOX_WITH_PYTHON),$(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s) $(wildcard $(SOLARIS_OUT_BIN_64)/VBoxPython*.so) $(SOLARIS_VBOXINST_DIR)/$(VBOX_SOL_PYTHON_DIR_64)/,) $(QUIET)$(if $(VBOX_WITH_QTGUI),$(INSTALL) -m 0755 $(SOLARIS_PATH_QT_32)/bin/qtconfig $(SOLARIS_VBOXINST_DIR_32)/VBoxQtconfig,) $(QUIET)$(if $(VBOX_WITH_QTGUI),$(INSTALL) -m 0755 $(SOLARIS_PATH_QT_64)/bin/qtconfig $(SOLARIS_VBOXINST_DIR_64)/VBoxQtconfig,) $(QUIET)$(INSTALL) -m 0755 $(SOLARIS_OUT_BIN_32)/VBoxISAExec $(SOLARIS_VBOXINST_DIR)/VBoxISAExec @@ -523,7 +534,7 @@ else @# @todo -XXX- how to get rid of this manual MKDIR ? ifdef VBOX_WITH_PYTHON $(QUIET)$(if $(SOL64_PKG),$(MKDIR) -p $(SOLARIS_VBOXINST_DIR)/$(VBOX_SOL_PYTHON_DIR_64),) - $(QUIET)$(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s) $(SOLARIS_OUT_BIN)/VBoxPython.so $(SOLARIS_VBOXINST_DIR)/$(if $(SOL64_PKG),$(VBOX_SOL_PYTHON_DIR_64)/,)VBoxPython.so + $(QUIET)$(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s) $(wildcard $(SOLARIS_OUT_BIN)/VBoxPython*.so) $(SOLARIS_VBOXINST_DIR)/$(if $(SOL64_PKG),$(VBOX_SOL_PYTHON_DIR_64)/,) endif $(QUIET)$(if $(VBOX_WITH_QTGUI),$(INSTALL) -m 0755 $(VBOX_PATH_QT4)/bin/qtconfig $(SOLARIS_VBOXINST_DIR_ISA)/VBoxQtconfig,) $(QUIET)$(INSTALL) -m 0755 $(SOLARIS_OUT_BIN)/VBoxISAExec $(SOLARIS_VBOXINST_DIR)/VBoxISAExec @@ -531,20 +542,17 @@ else $(QUIET)$(if $(VBOX_WITH_QTGUI),$(LN_SYMLINK) -f ../additions $(SOLARIS_VBOXINST_DIR_ISA)/additions,) $(QUIET)$(if $(VBOX_WITH_QTGUI),$(LN_SYMLINK) -f ../VirtualBox.chm $(SOLARIS_VBOXINST_DIR_ISA)/VirtualBox.chm,) endif - $(QUIET)$(if $(VBOX_WITH_QTGUI),$(LN_SYMLINK) -f ../..$(SOLARIS_VBOXINST_SUBDIR)/VBox.sh $(SOLARIS_USRBIN_DIR)/VBoxQtconfig,) + $(QUIET)$(if $(VBOX_WITH_QTGUI),$(LN_SYMLINK) -f ../../$(SOLARIS_VBOXINST_SUBDIR)/VBox.sh $(SOLARIS_USRBIN_DIR)/VBoxQtconfig,) $(QUIET)$(INSTALL) -m 0644 $(VBOX_PATH_SOL_INST_SRC)/virtualbox-zoneaccess.xml $(SOLARIS_VBOXSMF_DIR)/virtualbox-zoneaccess.xml $(QUIET)$(if $(VBOX_WITH_WEBSERVICES),$(INSTALL) -m 0644 $(VBOX_PATH_SOL_INST_SRC)/virtualbox-webservice.xml $(SOLARIS_VBOXSMF_DIR)/virtualbox-webservice.xml,) - $(QUIET)$(if $(VBOX_WITH_WEBSERVICES),$(INSTALL) -m 0755 $(VBOX_PATH_SOL_INST_SRC)/smf-vboxwebsrv.sh $(SOLARIS_VBOXINST_DIR)/smf-vboxwebsrv.sh,) $(QUIET)$(if $(not $(VBOX_WITH_NETFLT))$(INSTALL) -m 0755 $(PATH_ROOT)/src/VBox/Devices/Network/solaris/vnicinit_solaris.sh $(SOLARIS_VBOXINST_DIR)/vnic_setup.sh,) $(QUIET)$(if $(not $(VBOX_WITH_NETFLT))$(INSTALL) -m 0755 $(PATH_ROOT)/src/VBox/Devices/Network/solaris/vnicterm_solaris.sh $(SOLARIS_VBOXINST_DIR)/vnic_term.sh,) $(QUIET)$(SED) \ - -e "s/_HARDENED_/$(if $(VBOX_WITH_HARDENED),hardened,))/" \ + -e "s/_HARDENED_/$(if $(VBOX_WITH_HARDENED),hardened,)/" \ --output $(SOLARIS_VBOXINST_DIR)/vboxdrv.sh.tmp \ - $(VBOX_PATH_SOL_INST_SRC)/vboxdrv.sh - $(QUIET)$(INSTALL) -m 0755 $(SOLARIS_VBOXINST_DIR)/vboxdrv.sh.tmp $(SOLARIS_VBOXINST_DIR)/vboxdrv.sh + $(PATH_BIN)/vboxdrv.sh + $(QUIET)$(INSTALL) -m 0755 $(SOLARIS_VBOXINST_DIR)/vboxdrv.sh.tmp $(SOLARIS_VBOXINST_DIR)/vboxdrv.sh $(QUIET)$(RM) -f $(SOLARIS_VBOXINST_DIR)/vboxdrv.sh.tmp - $(QUIET)$(INSTALL) -m 0755 $(VBOX_PATH_SOL_INST_SRC)/VBox.sh $(SOLARIS_VBOXINST_DIR)/VBox.sh - $(QUIET)$(INSTALL) -m 0755 $(VBOX_PATH_SOL_INST_SRC)/ipsinstall.sh $(SOLARIS_VBOXINST_DIR)/ipsinstall.sh $(QUIET)$(if $(VBOX_WITH_QTGUI),$(INSTALL) -m 0644 $(VBOX_PATH_SOL_INST_SRC)/virtualbox.desktop $(SOLARIS_USRSHR_APPS_DIR)/virtualbox.desktop,) $(QUIET)$(INSTALL) -m 0644 $(SOLARIS_OUT_BIN)/VBox.png $(SOLARIS_USRSHR_PIXMAPS_DIR)/VBox.png $(QUIET)$(INSTALL) -m 0755 $(VBOX_PATH_SOL_INST_SRC)/postinstall.sh $(SOLARIS_BASEINST_DIR)/postinstall.sh @@ -554,6 +562,8 @@ endif $(QUIET)$(INSTALL) -m 0644 $(VBOX_PATH_SOL_INST_SRC)/vbox.pkgresponse $(SOLARIS_VBOXINST_DIR)/autoresponse $(QUIET)$(INSTALL) -m 0644 $(VBOX_PATH_SOL_INST_SRC)/vbox.pkgresponse $(SOLARIS_BASEINST_DIR)/autoresponse $(QUIET)$(INSTALL) -m 0644 $(VBOX_PATH_SOL_INST_SRC)/vbox.space $(SOLARIS_BASEINST_DIR)/vbox.space + @# Warning!! If we add NON-PYTHON dependencies to vbox.depend, remove the VBOX_WITH_PYTHON setting + $(QUIET)$(if $(VBOX_WITH_PYTHON),$(INSTALL) -m 0644 $(VBOX_PATH_SOL_INST_SRC)/vbox.depend $(SOLARIS_BASEINST_DIR)/vbox.depend,) $(QUIET)$(SED) \ -e "s/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g" \ -e "s/@BUILD_TARGET_ARCH@/$(KBUILD_TARGET_ARCH)/g" \ @@ -645,6 +655,18 @@ $(addprefix $(SOLARIS_VBOXINST_DIR)/,$(SOLARIS_COMMON)): \ $(SOLARIS_VBOXINST_DIR)/% : $(PATH_BIN)/% | $$(dir $$@) $(INSTALL) -m 0644 $< $@ +# Driver configuration files +$(addprefix $(SOLARIS_DRIVERINST_DIR)/,$(SOLARIS_DRIVER_CONFS)): \ + $(SOLARIS_DRIVERINST_DIR)/% : $(PATH_BIN)/% | $$(dir $$@) + $(INSTALL) -m 0644 $< $@ + +# Common executables +$(addprefix $(SOLARIS_VBOXINST_DIR)/,$(SOLARIS_COMMON_EXES)): \ + $(SOLARIS_VBOXINST_DIR)/% : $(PATH_BIN)/% | $$(dir $$@) + $(INSTALL) -m 0755 $< $@ + + + # # Common (relative symlinks to /opt/VirtualBox/ from /usr/bin/) # Some symlinks are created manually in the prepackage steps above (eg. VBoxQtconfig) @@ -652,7 +674,7 @@ $(addprefix $(SOLARIS_VBOXINST_DIR)/,$(SOLARIS_COMMON)): \ # $(addprefix $(SOLARIS_USRBIN_DIR)/,$(SOLARIS_USRBIN_LINKS)): \ $(SOLARIS_USRBIN_DIR)/% : % | $$(dir $$@) - $(LN_SYMLINK) -f ../..$(SOLARIS_VBOXINST_SUBDIR)/VBox.sh $@ + $(LN_SYMLINK) -f ../../$(SOLARIS_VBOXINST_SUBDIR)/VBox.sh $@ # diff --git a/src/VBox/Installer/solaris/ipsinstall.sh b/src/VBox/Installer/solaris/ipsinstall.sh index 982bad6a6..4e5f4639d 100755 --- a/src/VBox/Installer/solaris/ipsinstall.sh +++ b/src/VBox/Installer/solaris/ipsinstall.sh @@ -50,6 +50,19 @@ check_zone() fi } +install_python_bindings() +{ + PYTHONBIN=$1 + if test -x "$PYTHONBIN"; then + VBOX_INSTALL_PATH=/opt/VirtualBox + export VBOX_INSTALL_PATH + cd /opt/VirtualBox/sdk/installer + $PYTHONBIN ./vboxapisetup.py install > /dev/null + return 0 + fi + return 1 +} + check_root check_zone @@ -167,14 +180,32 @@ rc3=0 if test -f "/opt/VirtualBox/sdk/installer/vboxapisetup.py" || test -h "/opt/VirtualBox/sdk/installer/vboxapisetup.py"; then PYTHONBIN=`which python` if test -f "$PYTHONBIN" || test -h "$PYTHONBIN"; then - echo "Installing python bindings..." + echo "Installing Python bindings..." - VBOX_INSTALL_PATH=/opt/VirtualBox - export VBOX_INSTALL_PATH - cd /opt/VirtualBox/sdk/installer - $PYTHONBIN ./vboxapisetup.py install > /dev/null - rc3=$? - echo "Done." + INSTALLEDIT=1 + PYTHONBIN=`which python2.4` + install_python_bindings "$PYTHONBIN" + if test "$?" -eq 0; then + INSTALLEDIT=0 + fi + PYTHONBIN=`which python2.5` + install_python_bindings "$PYTHONBIN" + if test "$?" -eq 0; then + INSTALLEDIT=0 + fi + PYTHONBIN=`which python2.6` + install_python_bindings "$PYTHONBIN" + if test "$?" -eq 0; then + INSTALLEDIT=0 + fi + + # remove files installed by Python build + rm -rf /opt/VirtualBox/sdk/installer/build + + if test "$INSTALLEDIT" -ne 0; then + echo "** No suitable Python version found. Requires Python 2.4, 2.5 or 2.6." + fi + rc3=$INSTALLEDIT else echo "** WARNING! Python not found, skipped installed Python bindings." echo " Manually run '/opt/VirtualBox/sdk/installer/vboxapisetup.py install'" diff --git a/src/VBox/Installer/solaris/makepackage.sh b/src/VBox/Installer/solaris/makepackage.sh index 37e5111f1..09d71496d 100755 --- a/src/VBox/Installer/solaris/makepackage.sh +++ b/src/VBox/Installer/solaris/makepackage.sh @@ -105,6 +105,9 @@ echo 'i space=./vbox.space' >> prototype if test -f "./vbox.copyright"; then echo 'i copyright=./vbox.copyright' >> prototype fi +if test -f "./vbox.depend"; then + echo 'i depend=./vbox.depend' >> prototype +fi # Create relative hardlinks cd "$VBOX_INSTALLED_DIR" @@ -130,7 +133,7 @@ fi # Exclude directories to not cause install-time conflicts with existing system directories cd "$PKG_BASE_DIR" -find . ! -type d | $VBOX_GGREP -v -E 'prototype|makepackage.sh|vbox.pkginfo|postinstall.sh|preremove.sh|ReadMe.txt|vbox.space|vbox.copyright|VirtualBoxKern' | pkgproto >> prototype +find . ! -type d | $VBOX_GGREP -v -E 'prototype|makepackage.sh|vbox.pkginfo|postinstall.sh|checkinstall.sh|preremove.sh|ReadMe.txt|vbox.space|vbox.depend|vbox.copyright|VirtualBoxKern' | pkgproto >> prototype # Include only opt/VirtualBox and subdirectories as we want uninstall to clean up directory structure as well find . -type d | $VBOX_GGREP -E 'opt/VirtualBox' | pkgproto >> prototype diff --git a/src/VBox/Installer/solaris/postinstall.sh b/src/VBox/Installer/solaris/postinstall.sh index 21c8ad45d..794ec6b20 100755 --- a/src/VBox/Installer/solaris/postinstall.sh +++ b/src/VBox/Installer/solaris/postinstall.sh @@ -20,6 +20,19 @@ # additional information or have any questions. # +install_python_bindings() +{ + PYTHONBIN=$1 + if test -x "$PYTHONBIN"; then + VBOX_INSTALL_PATH=/opt/VirtualBox + export VBOX_INSTALL_PATH + cd /opt/VirtualBox/sdk/installer + $PYTHONBIN ./vboxapisetup.py install > /dev/null + return 0 + fi + return 1 +} + # Check for xVM/Xen currentisa=`uname -i` if test "$currentisa" = "i86xpv"; then @@ -121,13 +134,29 @@ if test "$currentzone" = "global"; then if test -f "$PYTHONBIN" || test -h "$PYTHONBIN"; then echo "Installing Python bindings..." - VBOX_INSTALL_PATH=/opt/VirtualBox - export VBOX_INSTALL_PATH - cd /opt/VirtualBox/sdk/installer - $PYTHONBIN ./vboxapisetup.py install > /dev/null + INSTALLEDIT=1 + PYTHONBIN=`which python2.4` + install_python_bindings "$PYTHONBIN" + if test "$?" -eq 0; then + INSTALLEDIT=0 + fi + PYTHONBIN=`which python2.5` + install_python_bindings "$PYTHONBIN" + if test "$?" -eq 0; then + INSTALLEDIT=0 + fi + PYTHONBIN=`which python2.6` + install_python_bindings "$PYTHONBIN" + if test "$?" -eq 0; then + INSTALLEDIT=0 + fi # remove files installed by Python build - rm -rf $VBOX_INSTALL_PATH/sdk/installer/build + rm -rf /opt/VirtualBox/sdk/installer/build + + if test "$INSTALLEDIT" -ne 0; then + echo "** No suitable Python version found. Requires Python 2.4, 2.5 or 2.6." + fi else echo "** WARNING! Python not found, skipped installed Python bindings." echo " Manually run '/opt/VirtualBox/sdk/installer/vboxapisetup.py install'" @@ -137,9 +166,11 @@ if test "$currentzone" = "global"; then # Update boot archive BOOTADMBIN=/sbin/bootadm - if test -f "$BOOTADMBIN" || test -h "$BOOTADMBIN"; then + if test -x "$BOOTADMBIN"; then echo "Updating boot archive..." $BOOTADMBIN update-archive > /dev/null + else + echo "## $BOOTADMBIN not found/executable. Skipped explicit boot-archive update." fi fi diff --git a/src/VBox/Installer/solaris/vbox.depend b/src/VBox/Installer/solaris/vbox.depend new file mode 100644 index 000000000..38d3f457d --- /dev/null +++ b/src/VBox/Installer/solaris/vbox.depend @@ -0,0 +1,2 @@ +P SUNWPython The Python interpreter, libraries and utilities +P SUNWPython-devel The Python interpreter, libraries and utilities - development files diff --git a/src/VBox/Installer/solaris/vboxdrv.sh b/src/VBox/Installer/solaris/vboxdrv.sh index 12d3668fc..809273c65 100755 --- a/src/VBox/Installer/solaris/vboxdrv.sh +++ b/src/VBox/Installer/solaris/vboxdrv.sh @@ -279,7 +279,12 @@ start_vboxnet() else # Plumb the interface! /sbin/ifconfig vboxnet0 plumb up - info "VirtualBox NetAdapter kernel module loaded." + if test "$?" -eq 0; then + /sbin/ifconfig vboxnet0 192.168.56.1 netmask 255.255.255.0 up + info "VirtualBox NetAdapter kernel module loaded." + else + warn "VirtualBox NetAdapter kernel module loaded BUT failed to plumb interface." + fi fi fi } diff --git a/src/VBox/Main/VFSExplorerImpl.cpp b/src/VBox/Main/VFSExplorerImpl.cpp index f69ef49ff..ca8e3eeaa 100644 --- a/src/VBox/Main/VFSExplorerImpl.cpp +++ b/src/VBox/Main/VFSExplorerImpl.cpp @@ -345,7 +345,7 @@ HRESULT VFSExplorer::deleteFS(TaskVFSExplorer *aTask) HRESULT rc = S_OK; - float fPercentStep = 100.0 / aTask->filenames.size(); + float fPercentStep = 100.0f / aTask->filenames.size(); try { char szPath[RTPATH_MAX]; @@ -469,7 +469,7 @@ HRESULT VFSExplorer::deleteS3(TaskVFSExplorer *aTask) HRESULT rc = S_OK; RTS3 hS3 = NULL; - float fPercentStep = 100.0 / aTask->filenames.size(); + float fPercentStep = 100.0f / aTask->filenames.size(); try { int vrc = RTS3Create(&hS3, m->strUsername.c_str(), m->strPassword.c_str(), m->strHostname.c_str(), "virtualbox-agent/"VBOX_VERSION_STRING); @@ -605,7 +605,6 @@ STDMETHODIMP VFSExplorer::EntryList(ComSafeArrayOut(BSTR, aNames), ComSafeArrayO STDMETHODIMP VFSExplorer::Exists(ComSafeArrayIn(IN_BSTR, aNames), ComSafeArrayOut(BSTR, aExists)) { CheckComArgSafeArrayNotNull(aNames); - CheckComArgSafeArrayNotNull(aExists); AutoCaller autoCaller(this); CheckComRCReturnRC(autoCaller.rc()); diff --git a/src/VBox/Main/generic/NetIf-generic.cpp b/src/VBox/Main/generic/NetIf-generic.cpp index a0c31be16..b5d77256a 100644 --- a/src/VBox/Main/generic/NetIf-generic.cpp +++ b/src/VBox/Main/generic/NetIf-generic.cpp @@ -190,7 +190,8 @@ int NetIfCreateHostOnlyNetworkInterface (VirtualBox *pVBox, IHostNetworkInterfac ComObjPtr <HostNetworkInterface> iface; iface.createObject(); iface->init(IfName, HostNetworkInterfaceType_HostOnly, pInfo); - iface.queryInterfaceTo (aHostNetworkInterface); + iface->setVirtualBox(pVBox); + iface.queryInterfaceTo(aHostNetworkInterface); } RTMemFree(pInfo); } diff --git a/src/VBox/Main/glue/vboxapi.py b/src/VBox/Main/glue/vboxapi.py index 2592b6c8a..3a3fb7950 100644 --- a/src/VBox/Main/glue/vboxapi.py +++ b/src/VBox/Main/glue/vboxapi.py @@ -24,7 +24,7 @@ if VboxBinDir is None: VboxBinDir = "%VBOX_INSTALL_PATH%" if VboxSdkDir is None: - VboxSdkDir = VboxBinDir+"/sdk" + VboxSdkDir = os.path.join(VboxBinDir,"sdk") os.environ["VBOX_PROGRAM_PATH"] = VboxBinDir os.environ["VBOX_SDK_PATH"] = VboxSdkDir @@ -80,8 +80,13 @@ class PerfCollector: 'values': collected data 'values_as_string': pre-processed values ready for 'print' statement """ - (values, names_out, objects_out, units, scales, sequence_numbers, - indices, lengths) = self.collector.queryMetricsData(names, objects) + # Get around the problem with input arrays returned in output parameters (see #3953). + if sys.platform == 'win32': + (values, names, objects, names_out, objects_out, units, scales, sequence_numbers, + indices, lengths) = self.collector.queryMetricsData(names, objects) + else: + (values, names_out, objects_out, units, scales, sequence_numbers, + indices, lengths) = self.collector.queryMetricsData(names, objects) out = [] for i in xrange(0, len(names_out)): scale = int(scales[i]) @@ -99,6 +104,33 @@ class PerfCollector: }) return out +def ComifyName(name): + return name[0].capitalize()+name[1:] + +_COMForward = { 'getattr' : None, + 'setattr' : None} + +def CustomGetAttr(self, attr): + # fastpath + if self.__class__.__dict__.get(attr) != None: + return self.__class__.__dict__.get(attr) + + # try case-insensitivity workaround for class attributes (COM methods) + for k in self.__class__.__dict__.keys(): + if k.lower() == attr.lower(): + self.__class__.__dict__[attr] = self.__class__.__dict__[k] + return getattr(self, k) + try: + return _COMForward['getattr'](self,ComifyName(attr)) + except AttributeError: + return _COMForward['getattr'](self,attr) + +def CustomSetAttr(self, attr, value): + try: + return _COMForward['setattr'](self, ComifyName(attr), value) + except AttributeError: + return _COMForward['setattr'](self, attr, value) + class PlatformMSCOM: # Class to fake access to constants in style of foo.bar.boo class ConstantFake: @@ -162,10 +194,10 @@ class PlatformMSCOM: VBOX_TLB_LCID = 0 VBOX_TLB_MAJOR = 1 VBOX_TLB_MINOR = 0 - + def __init__(self, params): from win32com import universal - from win32com.client import gencache, DispatchWithEvents, Dispatch + from win32com.client import gencache, DispatchBaseClass from win32com.client import constants, getevents import win32com import pythoncom @@ -178,7 +210,12 @@ class PlatformMSCOM: handle = DuplicateHandle(pid, GetCurrentThread(), pid, 0, 0, DUPLICATE_SAME_ACCESS) self.handles = [] self.handles.append(handle) - + _COMForward['getattr'] = DispatchBaseClass.__dict__['__getattr__'] + DispatchBaseClass.__dict__['__getattr__'] = CustomGetAttr + _COMForward['setattr'] = DispatchBaseClass.__dict__['__setattr__'] + DispatchBaseClass.__dict__['__setattr__'] = CustomSetAttr + win32com.client.gencache.EnsureDispatch('VirtualBox.Session') + win32com.client.gencache.EnsureDispatch('VirtualBox.VirtualBox') def getSessionObject(self, vbox): import win32com @@ -236,7 +273,7 @@ class PlatformMSCOM: # looks them up on Windows for m in dir(impl): if m.startswith("on"): - str += " "+m[0].capitalize()+m[1:]+"=BaseClass."+m+"\n" + str += " "+ComifyName(m)+"=BaseClass."+m+"\n" str += " def __init__(self): BaseClass.__init__(self, arg)\n" #str += "win32com.server.register.UseCommandLine("+iface+"Impl)\n" @@ -277,8 +314,7 @@ class PlatformMSCOM: pass def getPerfCollector(self, vbox): - # MS COM cannot invoke performance collector methods yet - return None + return PerfCollector(vbox) class PlatformXPCOM: @@ -307,7 +343,7 @@ class PlatformXPCOM: return False def getArray(self, obj, field): - return obj.__getattr__('get'+field.capitalize())() + return obj.__getattr__('get'+ComifyName(field))() def initPerThread(self): pass @@ -341,10 +377,12 @@ class PlatformXPCOM: class PlatformWEBSERVICE: def __init__(self, params): - sys.path.append(VboxSdkDir+'/bindings/webservice/python/lib') + sys.path.append(os.path.join(VboxSdkDir,'bindings', 'webservice', 'python', 'lib')) + # not really needed, but just fail early if misconfigured import VirtualBox_services import VirtualBox_wrappers from VirtualBox_wrappers import IWebsessionManager2 + if params is not None: self.user = params.get("user", "") self.password = params.get("password", "") @@ -353,13 +391,38 @@ class PlatformWEBSERVICE: self.user = "" self.password = "" self.url = None - self.wsmgr = IWebsessionManager2(self.url) + self.vbox = None - def getSessionObject(self, vbox): + def getSessionObject(self, vbox): return self.wsmgr.getSessionObject(vbox) def getVirtualBox(self): + return self.connect(self.url, self.user, self.password) + + def connect(self, url, user, passwd): + if self.vbox is not None: + self.disconnect() + from VirtualBox_wrappers import IWebsessionManager2 + if url is None: + url = "" + self.url = url + if user is None: + user = "" + self.user = user + if passwd is None: + passwd = "" + self.password = passwd + self.wsmgr = IWebsessionManager2(self.url) self.vbox = self.wsmgr.logon(self.user, self.password) + if not self.vbox.handle: + raise Exception("cannot connect to '"+self.url+"' as '"+self.user+"'") + return self.vbox + + def disconnect(self): + if self.vbox is not None and self.wsmgr is not None: + self.wsmgr.logoff(self.vbox) + self.vbox = None + self.wsmgr = None def getConstants(self): return None @@ -388,11 +451,9 @@ class PlatformWEBSERVICE: def deinit(self): try: - if self.vbox is not None: - self.wsmg.logoff(self.vbox) - self.vbox = None + disconnect() except: - pass + pass def getPerfCollector(self, vbox): return PerfCollector(vbox) @@ -411,18 +472,28 @@ class VirtualBoxManager: style = "MSCOM" else: style = "XPCOM" + + exec "self.platform = Platform"+style+"(platparams)" + + self.constants = VirtualBoxReflectionInfo() + self.type = self.platform.getType() + self.remote = self.platform.getRemote() + self.style = style + self.mgr = SessionManager(self) + try: - exec "self.platform = Platform"+style+"(platparams)" self.vbox = self.platform.getVirtualBox() - self.mgr = SessionManager(self) - self.constants = VirtualBoxReflectionInfo() - self.type = self.platform.getType() - self.remote = self.platform.getRemote() - self.style = style + except NameError,ne: + print "Installation problem: check that appropriate libs in place" + traceback.print_exc() + raise ne except Exception,e: print "init exception: ",e traceback.print_exc() - raise e + if self.remote: + self.vbox = None + else: + raise e def getArray(self, obj, field): return self.platform.getArray(obj, field) @@ -462,4 +533,4 @@ class VirtualBoxManager: return self.platform.waitForEvents(timeout) def getPerfCollector(self, vbox): - return self.platform.getPerfCollector(vbox) + return PerfCollector(vbox) diff --git a/src/VBox/Main/idl/VirtualBox.xidl b/src/VBox/Main/idl/VirtualBox.xidl index cf5595325..01b3de166 100644 --- a/src/VBox/Main/idl/VirtualBox.xidl +++ b/src/VBox/Main/idl/VirtualBox.xidl @@ -887,7 +887,7 @@ name="IVirtualBoxErrorInfo" extends="$errorinfo" uuid="bcae7fc3-3fd0-4bac-923c-ec1596c7bc83" supportsErrorInfo="no" - wsmap="suppress" + wsmap="managed" > <desc> The IVirtualBoxErrorInfo interface represents extended error information. diff --git a/src/VBox/Main/include/ApplianceImpl.h b/src/VBox/Main/include/ApplianceImpl.h index 19d3ecb93..b257ecf06 100644 --- a/src/VBox/Main/include/ApplianceImpl.h +++ b/src/VBox/Main/include/ApplianceImpl.h @@ -151,6 +151,7 @@ public: BEGIN_COM_MAP(VirtualSystemDescription) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY(IVirtualSystemDescription) + COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() NS_DECL_ISUPPORTS diff --git a/src/VBox/Main/include/MachineImpl.h b/src/VBox/Main/include/MachineImpl.h index fa074bc04..fdbe3c4ff 100644 --- a/src/VBox/Main/include/MachineImpl.h +++ b/src/VBox/Main/include/MachineImpl.h @@ -885,6 +885,7 @@ public: DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(SessionMachine) + COM_INTERFACE_ENTRY2(IDispatch, IMachine) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY(IMachine) COM_INTERFACE_ENTRY(IInternalMachineControl) @@ -1059,6 +1060,7 @@ public: DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(SnapshotMachine) + COM_INTERFACE_ENTRY2(IDispatch, IMachine) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY(IMachine) END_COM_MAP() diff --git a/src/VBox/Main/linux/HostHardwareLinux.cpp b/src/VBox/Main/linux/HostHardwareLinux.cpp index 20c777b3f..0530c2c5f 100644 --- a/src/VBox/Main/linux/HostHardwareLinux.cpp +++ b/src/VBox/Main/linux/HostHardwareLinux.cpp @@ -125,19 +125,20 @@ int VBoxMainDriveInfo::updateDVDs () { mDVDList.clear (); #if defined(RT_OS_LINUX) + /* Always allow the user to override our auto-detection using an + * environment variable. */ + if (RT_SUCCESS (rc) && (!success || testing())) + rc = getDriveInfoFromEnv ("VBOX_CDROM", &mDVDList, true /* isDVD */, + &success); #ifdef VBOX_WITH_DBUS if (RT_SUCCESS (rc) && RT_SUCCESS(VBoxLoadDBusLib()) && (!success || testing())) rc = getDriveInfoFromHal(&mDVDList, true /* isDVD */, &success); #endif /* VBOX_WITH_DBUS defined */ - // On Linux without hal, the situation is much more complex. We will take a - // heuristical approach and also allow the user to specify a list of host - // CDROMs using an environment variable. - // The general strategy is to try some known device names and see of they - // exist. At last, we'll enumerate the /etc/fstab file (luckily there's an - // API to parse it) for CDROM devices. Ok, let's start! - if (RT_SUCCESS (rc) && (!success || testing())) - rc = getDriveInfoFromEnv ("VBOX_CDROM", &mDVDList, true /* isDVD */, - &success); + /* On Linux without hal, the situation is much more complex. We will + * take a heuristical approach. The general strategy is to try some + * known device names and see of they exist. Failing that, we + * enumerate the /etc/fstab file (luckily there's an API to parse it) + * for CDROM devices. Ok, let's start! */ if (RT_SUCCESS (rc) && (!success || testing())) { // this is a good guess usually @@ -177,19 +178,19 @@ int VBoxMainDriveInfo::updateFloppies () { mFloppyList.clear (); #if defined(RT_OS_LINUX) + if (RT_SUCCESS (rc) && (!success || testing())) + rc = getDriveInfoFromEnv ("VBOX_FLOPPY", &mFloppyList, false /* isDVD */, + &success); #ifdef VBOX_WITH_DBUS if ( RT_SUCCESS (rc) && RT_SUCCESS(VBoxLoadDBusLib()) && (!success || testing())) rc = getDriveInfoFromHal(&mFloppyList, false /* isDVD */, &success); #endif /* VBOX_WITH_DBUS defined */ - // As with the CDROMs, on Linux we have to take a multi-level approach - // involving parsing the mount tables. As this is not bulletproof, we'll - // give the user the chance to override the detection by an environment - // variable and skip the detection. - if (RT_SUCCESS (rc) && (!success || testing())) - rc = getDriveInfoFromEnv ("VBOX_FLOPPY", &mFloppyList, false /* isDVD */, - &success); + /* As with the CDROMs, on Linux we have to take a multi-level approach + * involving parsing the mount tables. As this is not bulletproof, we + * give the user the chance to override the detection using an + * environment variable, skiping the detection. */ if (RT_SUCCESS (rc) && (!success || testing())) { @@ -1135,6 +1136,10 @@ int getDriveInfoFromHal(DriveInfoList *pList, bool isDVD, bool *pfSuccess) } if (dbusError.HasName (DBUS_ERROR_NO_MEMORY)) rc = VERR_NO_MEMORY; + /* If we found nothing something may have gone wrong with hal, so + * report failure to fall back to other methods. */ + if (pList->size() == 0) + halSuccess = false; if (pfSuccess != NULL) *pfSuccess = halSuccess; LogFlow (("rc=%Rrc, halSuccess=%d\n", rc, halSuccess)); diff --git a/src/VBox/Main/webservice/glue-jaxws.xsl b/src/VBox/Main/webservice/glue-jaxws.xsl index 174b84753..d7098c324 100644 --- a/src/VBox/Main/webservice/glue-jaxws.xsl +++ b/src/VBox/Main/webservice/glue-jaxws.xsl @@ -210,16 +210,6 @@ <xsl:param name="idltype"/> <xsl:param name="safearray"/> <xsl:choose> - <xsl:when test="$idltype='uuid'"> - <xsl:choose> - <xsl:when test="$safearray"> - <xsl:value-of select="concat('Helper.uuidWrap(',$value,')')" /> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat('UUID.fromString(',$value,')')" /> - </xsl:otherwise> - </xsl:choose> - </xsl:when> <xsl:when test="//collection[@name=$idltype]"> <xsl:variable name="elemtype"> <xsl:call-template name="typeIdl2Glue"> @@ -304,9 +294,6 @@ </xsl:otherwise> </xsl:choose> </xsl:when> - <xsl:when test="$paramtype='uuid'"> - <xsl:value-of select="concat($paramname, '.toString()')" /> - </xsl:when> <xsl:otherwise> <xsl:value-of select="$paramname" /> </xsl:otherwise> @@ -441,14 +428,6 @@ class Helper { } } - public static List<UUID> uuidWrap(List<String> uuidVals) { - List<UUID> ret = new ArrayList<UUID>(uuidVals.size()); - for (String uuid : uuidVals) { - ret.add(UUID.fromString(uuid)); - } - return ret; - } - public static <T extends IUnknown> List<String> unwrap(List<T> thisPtrs) { if (thisPtrs==null) return Collections.emptyList(); @@ -814,7 +793,7 @@ public class IWebsessionManager { <xsl:variable name="extends" select="//interface[@name=$ifname]/@extends" /> <xsl:choose> - <xsl:when test="($extends = '$unknown') or ($extends = '$dispatched')"> + <xsl:when test="($extends = '$unknown') or ($extends = '$dispatched') or ($extends = '$errorinfo')"> <xsl:value-of select="concat('public class ', $ifname, ' extends IUnknown { ')" /> </xsl:when> <xsl:when test="//interface[@name=$extends]"> diff --git a/src/VBox/Main/webservice/vboxweb.h b/src/VBox/Main/webservice/vboxweb.h index b971d2d10..2378f8a51 100644 --- a/src/VBox/Main/webservice/vboxweb.h +++ b/src/VBox/Main/webservice/vboxweb.h @@ -225,6 +225,12 @@ int findComPtrFromId(struct soap *soap, RaiseSoapInvalidObjectFault(soap, id); else { + if (fNullAllowed && pRef == NULL) + { + pComPtr.setNull(); + return 0; + } + // pRef->getComPtr returns a ComPtr<IUnknown>; by casting it to // ComPtr<T>, we implicitly do a queryInterface() call if (pComPtr = pRef->getComPtr()) diff --git a/src/VBox/Main/webservice/websrv-python.xsl b/src/VBox/Main/webservice/websrv-python.xsl index f23009ca7..454b97057 100644 --- a/src/VBox/Main/webservice/websrv-python.xsl +++ b/src/VBox/Main/webservice/websrv-python.xsl @@ -52,8 +52,8 @@ <xsl:when test="$type='unsigned short'">UnsignedShort</xsl:when> <xsl:when test="$type='unsigned long long'">UnsignedLong</xsl:when> <xsl:when test="$type='result'">UnsignedInt</xsl:when> - <xsl:when test="$type='uuid'">UUID</xsl:when> <xsl:when test="$type='$unknown'">IUnknown</xsl:when> + <xsl:when test="$type='$dispatched'">IUnknown</xsl:when> <xsl:otherwise><xsl:value-of select="$type" /></xsl:otherwise> </xsl:choose> </xsl:template> @@ -64,7 +64,7 @@ <xsl:param name="type" /> <xsl:param name="value" /> <xsl:param name="safearray" /> - + <xsl:call-template name="emitConvertedType"> <xsl:with-param name="ifname" select="$ifname" /> <xsl:with-param name="methodname" select="$methodname" /> @@ -97,7 +97,7 @@ <xsl:with-param name="type" select="$attrtype" /> <xsl:with-param name="value" select="concat('val.','_returnval')" /> <xsl:with-param name="safearray" select="@safearray"/> - </xsl:call-template> + </xsl:call-template> </xsl:template> <xsl:template name="emitSetAttribute"> @@ -113,7 +113,7 @@ req._<xsl:value-of select="$attrname"/> = value else: req._<xsl:value-of select="$attrname"/> = value.handle - self.mgr.getPort().<xsl:value-of select="$ifname"/>_<xsl:value-of select="$fname"/>(req) + self.mgr.getPort().<xsl:value-of select="$ifname"/>_<xsl:value-of select="$fname"/>(req) </xsl:template> <xsl:template name="collection"> @@ -135,15 +135,38 @@ class <xsl:value-of select="$cname"/>: def __getitem__(self, index): return <xsl:value-of select="$ename"/>(self.mgr, self.array._array[index]) - + +</xsl:template> + + +<xsl:template name="computeExtends"> + <xsl:param name="base" /> + + <xsl:choose> + <xsl:when test="($base = '$unknown') or ($base = '$dispatched')"> + <xsl:value-of select="'IUnknown'"/> + </xsl:when> + <xsl:when test="($base = '$errorinfo') "> + <xsl:value-of select="'IUnknown'"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$base"/> + </xsl:otherwise> + </xsl:choose> </xsl:template> <xsl:template name="interface"> + <xsl:variable name="base"> + <xsl:call-template name="computeExtends"> + <xsl:with-param name="base" select="@extends" /> + </xsl:call-template> + </xsl:variable> <xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable> -class <xsl:value-of select="$ifname"/>: + +class <xsl:value-of select="$ifname"/>(<xsl:value-of select="$base" />): def __init__(self, mgr, handle, isarray = False): self.mgr = mgr - if handle is None or handle == "": + if handle is None: raise Exception("bad handle: "+str(handle)) self.handle = handle self.isarray = isarray @@ -152,11 +175,11 @@ class <xsl:value-of select="$ifname"/>: mgr.register(handle) def __del__(self): - mgr.unregister(self.handle) + mgr.unregister(self.handle) --> def releaseRemote(self): try: - req=IManagedObjectRef_releaseRequestMsg() + req=IManagedObjectRef_releaseRequestMsg() req._this=handle self.mgr.getPort().IManagedObjectRef_release(req) except: @@ -168,7 +191,7 @@ class <xsl:value-of select="$ifname"/>: raise TypeError, "iteration over non-sequence" def __size(self): - if self.isarray: + if self.isarray: return self.handle.__size() raise TypeError, "iteration over non-sequence" @@ -180,20 +203,23 @@ class <xsl:value-of select="$ifname"/>: def __getitem__(self, index): if self.isarray: return <xsl:value-of select="$ifname" />(self.mgr, self.handle[index]) - raise TypeError, "iteration over non-sequence" + raise TypeError, "iteration over non-sequence" def __str__(self): return self.handle - + def isValid(self): return self.handle != None and self.handle != '' def __getattr__(self,name): hndl = <xsl:value-of select="$ifname" />._Attrs_.get(name, None) - if (hndl != None and hndl[0] != None): - return hndl[0](self) + if hndl != None: + if hndl[0] != None: + return hndl[0](self) + else: + raise AttributeError else: - raise AttributeError + return <xsl:value-of select="$base" />.__getattr__(self, name) def __setattr__(self, name, val): hndl = <xsl:value-of select="$ifname" />._Attrs_.get(name, None) @@ -271,19 +297,50 @@ class <xsl:value-of select="$ifname"/>: <xsl:template name="interfacestruct"> <xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable> class <xsl:value-of select="$ifname"/>: - def __init__(self, mgr, handle):<xsl:for-each select="attribute"> + def __init__(self, mgr, handle, isarray = False): self.mgr = mgr - self.<xsl:value-of select="@name"/> = handle._<xsl:value-of select="@name"/> + self.isarray = isarray + if isarray: + self.handle = handle + else: +<xsl:for-each select="attribute"> + self.<xsl:value-of select="@name"/> = <xsl:call-template name="emitConvertedType"> + <xsl:with-param name="ifname" select="$ifname" /> + <xsl:with-param name="methodname" select="''" /> + <xsl:with-param name="type" select="@type" /> + </xsl:call-template>(self.mgr, handle._<xsl:value-of select="@name"/>) </xsl:for-each> + pass <!-- also do getters/setters --> <xsl:for-each select="attribute"> def <xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="@name"/></xsl:call-template>(self): return self.<xsl:value-of select="@name"/> - + def <xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="@name"/></xsl:call-template>(self): raise Error, 'setters not supported' </xsl:for-each> + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return <xsl:value-of select="$ifname" />(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + </xsl:template> <xsl:template name="genreq"> @@ -293,7 +350,7 @@ class <xsl:value-of select="$ifname"/>: req._<xsl:value-of select="@name" />=_arg_<xsl:value-of select="@name" /> </xsl:for-each> val=self.mgr.getPort().<xsl:value-of select="../@name"/>_<xsl:value-of select="@name"/>(req) - <!-- return needs to be the first one --> + <!-- return needs to be the first one --> return <xsl:for-each select="param[@dir='return']"> <xsl:call-template name="emitOutParam"> <xsl:with-param name="ifname" select="../@name" /> @@ -301,7 +358,7 @@ class <xsl:value-of select="$ifname"/>: <xsl:with-param name="type" select="@type" /> <xsl:with-param name="value" select="concat('val.','_returnval')" /> <xsl:with-param name="safearray" select="@safearray"/> - </xsl:call-template> + </xsl:call-template> <xsl:if test="../param[@dir='out']"> <xsl:text>, </xsl:text> </xsl:if> @@ -321,7 +378,7 @@ class <xsl:value-of select="$ifname"/>: <xsl:text> </xsl:text> </xsl:template> -<xsl:template name="method" > +<xsl:template name="method" > def <xsl:value-of select="@name"/><xsl:text>(self</xsl:text> <xsl:for-each select="param[@dir='in']"> <xsl:text>, </xsl:text> @@ -339,7 +396,7 @@ class <xsl:value-of select="$ifname"/>: <xsl:otherwise> <xsl:value-of select="@name"/> </xsl:otherwise> - </xsl:choose> + </xsl:choose> </xsl:template> <xsl:template name="enum"> @@ -421,28 +478,28 @@ class ManagedManager: c = c - 1 if c == 0: try: - req=IManagedObjectRef_releaseRequestMsg() + req=IManagedObjectRef_releaseRequestMsg() req._this=handle self.mgr.getPort().IManagedObjectRef_release(req) except: pass - finally: - self.map[handle] = -1 + self.map[handle] = -1 else: self.map[handle] = c - + class String: def __init__(self, mgr, handle, isarray = False): self.handle = handle + self.mgr = mgr self.isarray = isarray - + def __next(self): if self.isarray: return self.handle.__next() raise TypeError, "iteration over non-sequence" def __size(self): - if self.isarray: + if self.isarray: return self.handle.__size() raise TypeError, "iteration over non-sequence" @@ -453,11 +510,11 @@ class String: def __getitem__(self, index): if self.isarray: - return String(self.handle[index]) - raise TypeError, "iteration over non-sequence" + return String(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" def __str__(self): - return self.handle + return str(self.handle) def __eq__(self,other): if self.isarray: @@ -470,67 +527,30 @@ class String: def __ne__(self,other): if self.isarray: - return not isinstance(other,String) or self.handle == other.handle + return not isinstance(other,String) or self.handle == other.handle if isinstance(other,String): return self.handle != other.handle if isinstance(other,basestring): return self.handle != other return True + def __add__(self,other): + return str(self.handle)+str(other) -class UUID: - def __init__(self, mgr, handle, isarray = False): - self.handle = handle - self.isarray = isarray - - def __next(self): - if self.isarray: - return self.handle.__next() - raise TypeError, "iteration over non-sequence" - - def __size(self): - if self.isarray: - return self.handle.__size() - raise TypeError, "iteration over non-sequence" - - def __len__(self): - if self.isarray: - return self.handle.__len__() - raise TypeError, "iteration over non-sequence" - - def __getitem__(self, index): - if self.isarray: - return UUID(self.handle[index]) - raise TypeError, "iteration over non-sequence" - - def __str__(self): - return self.handle - - def __eq__(self,other): - if self.isarray: - return isinstance(other,UUID) and self.handle == other.handle - if isinstance(other,UUID): - return self.handle == other.handle - if isinstance(other,basestring): - return self.handle == other - return False - - def __ne__(self,other): - if self.isarray: - return not isinstance(other,UUID) or self.handle == other.handle - if isinstance(other,UUID): - return self.handle != other.handle - if isinstance(other,basestring): - return self.handle != other - return True class Boolean: def __init__(self, mgr, handle, isarray = False): self.handle = handle + if self.handle == "false": + self.handle = None + self.mgr = mgr self.isarray = isarray - + def __str__(self): - return "true" if self.handle else "false" + if self.handle: + return "true" + else: + return "false" def __eq__(self,other): if isinstance(other,Bool): @@ -546,24 +566,66 @@ class Boolean: return self.handle != other return True + def __int__(self): + if self.handle: + return 1 + else: + return 0 + + def __long__(self): + if self.handle: + return 1 + else: + return 0 + + def __nonzero__(self): + if self.handle: + return True + else: + return False + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return Boolean(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + class UnsignedInt: def __init__(self, mgr, handle, isarray = False): self.handle = handle + self.mgr = mgr self.isarray = isarray - + def __str__(self): return str(self.handle) def __int__(self): return int(self.handle) + def __long__(self): + return long(self.handle) + def __next(self): if self.isarray: return self.handle.__next() raise TypeError, "iteration over non-sequence" def __size(self): - if self.isarray: + if self.isarray: return self.handle.__size() raise TypeError, "iteration over non-sequence" @@ -574,13 +636,14 @@ class UnsignedInt: def __getitem__(self, index): if self.isarray: - return UnsignedInt(self.handle[index]) - raise TypeError, "iteration over non-sequence" + return UnsignedInt(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + - class Int: def __init__(self, mgr, handle, isarray = False): self.handle = handle + self.mgr = mgr self.isarray = isarray def __next(self): @@ -589,7 +652,7 @@ class Int: raise TypeError, "iteration over non-sequence" def __size(self): - if self.isarray: + if self.isarray: return self.handle.__size() raise TypeError, "iteration over non-sequence" @@ -600,76 +663,227 @@ class Int: def __getitem__(self, index): if self.isarray: - return Int(self.handle[index]) - raise TypeError, "iteration over non-sequence" - + return Int(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + def __str__(self): return str(self.handle) - + def __int__(self): return int(self.handle) + def __long__(self): + return long(self.handle) + class UnsignedShort: def __init__(self, mgr, handle, isarray = False): self.handle = handle + self.mgr = mgr self.isarray = isarray - + def __str__(self): return str(self.handle) def __int__(self): return int(self.handle) + def __long__(self): + return long(self.handle) + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return UnsignedShort(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + class Short: def __init__(self, mgr, handle, isarray = False): self.handle = handle - + self.mgr = mgr + self.isarray = isarray + def __str__(self): return str(self.handle) - + def __int__(self): return int(self.handle) + def __long__(self): + return long(self.handle) + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return Short(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + class UnsignedLong: def __init__(self, mgr, handle, isarray = False): self.handle = handle - + self.mgr = mgr + self.isarray = isarray + def __str__(self): return str(self.handle) def __int__(self): return int(self.handle) + def __long__(self): + return long(self.handle) + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return UnsignedLong(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + class Long: def __init__(self, mgr, handle, isarray = False): self.handle = handle - + self.mgr = mgr + self.isarray = isarray + def __str__(self): return str(self.handle) def __int__(self): return int(self.handle) + def __long__(self): + return int(self.handle) + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return Long(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + class Double: def __init__(self, mgr, handle, isarray = False): self.handle = handle - + self.mgr = mgr + self.isarray = isarray + def __str__(self): return str(self.handle) def __int__(self): return int(self.handle) + def __float__(self): + return float(self.handle) + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return Double(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" + class Float: def __init__(self, mgr, handle, isarray = False): self.handle = handle - + self.mgr = mgr + self.isarray = isarray + def __str__(self): return str(self.handle) def __int__(self): return int(self.handle) + def __float__(self): + return float(self.handle) + + def __next(self): + if self.isarray: + return self.handle.__next() + raise TypeError, "iteration over non-sequence" + + def __size(self): + if self.isarray: + return self.handle.__size() + raise TypeError, "iteration over non-sequence" + + def __len__(self): + if self.isarray: + return self.handle.__len__() + raise TypeError, "iteration over non-sequence" + + def __getitem__(self, index): + if self.isarray: + return Float(self.mgr, self.handle[index]) + raise TypeError, "iteration over non-sequence" class IUnknown: def __init__(self, mgr, handle, isarray = False): @@ -677,13 +891,19 @@ class IUnknown: self.mgr = mgr self.isarray = isarray + def __nonzero__(self): + if self.handle != "": + return True + else: + return False + def __next(self): if self.isarray: return self.handle.__next() raise TypeError, "iteration over non-sequence" def __size(self): - if self.isarray: + if self.isarray: return self.handle.__size() raise TypeError, "iteration over non-sequence" @@ -695,11 +915,18 @@ class IUnknown: def __getitem__(self, index): if self.isarray: return IUnknown(self.mgr, self.handle[index]) - raise TypeError, "iteration over non-sequence" - + raise TypeError, "iteration over non-sequence" + def __str__(self): return str(self.handle) + def __getattr__(self,attr): + if self.__class__.__dict__.get(attr) != None: + return self.__class__.__dict__.get(attr) + if self.__dict__.get(attr) != None: + return self.__dict__.get(attr) + raise AttributeError + </xsl:text> <xsl:for-each select="//interface[@wsmap='managed' or @wsmap='global']"> <xsl:call-template name="interface"/> @@ -728,4 +955,4 @@ class IWebsessionManager2(IWebsessionManager): </xsl:template> -</xsl:stylesheet> +</xsl:stylesheet> diff --git a/src/VBox/Main/webservice/websrv-shared.inc.xsl b/src/VBox/Main/webservice/websrv-shared.inc.xsl index 4c13a6cd1..67c1400dc 100644 --- a/src/VBox/Main/webservice/websrv-shared.inc.xsl +++ b/src/VBox/Main/webservice/websrv-shared.inc.xsl @@ -170,7 +170,7 @@ <type idlname="double" xmlname="double" cname="double" gluename="" javaname="Double" /> <type idlname="float" xmlname="float" cname="float" gluename="" javaname="Float" /> <type idlname="wstring" xmlname="string" cname="std::string" gluename="" javaname="String" /> - <type idlname="uuid" xmlname="string" cname="std::string" gluename="" javaname="UUID" /> + <type idlname="uuid" xmlname="string" cname="std::string" gluename="" javaname="String" /> <type idlname="result" xmlname="unsignedInt" cname="unsigned int" gluename="HRESULT" javaname="Long" /> </xsl:variable> diff --git a/src/VBox/Runtime/r3/dir.cpp b/src/VBox/Runtime/r3/dir.cpp index 893a6f4fb..de7227b63 100644 --- a/src/VBox/Runtime/r3/dir.cpp +++ b/src/VBox/Runtime/r3/dir.cpp @@ -700,9 +700,15 @@ RTDECL(int) RTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER en /* * Find the last component, i.e. where the filter criteria starts and the dir name ends. */ - const char *pszFilter = enmFilter != RTDIRFILTER_NONE - ? RTPathFilename(pszPath) - : NULL; + const char *pszFilter; + if (enmFilter == RTDIRFILTER_NONE) + pszFilter = NULL; + else + { + pszFilter = RTPathFilename(pszPath); + if (!pszFilter) /* trailing slash => directory to read => no filter. */ + enmFilter = RTDIRFILTER_NONE; + } /* * Call worker common with RTDirOpen which will verify the path, allocate @@ -771,7 +777,7 @@ RTDECL(int) RTDirRemoveRecursive(const char *pszPath) rc = VINF_SUCCESS; RTDirClose(pDir); - rc = RTDirRemove(szAbsPath); + rc = RTDirRemove(szAbsPath); } LogFlow(("RTDirRemoveRecursive(%p:{%s}): returns %Rrc\n", pszPath, pszPath, rc)); diff --git a/src/VBox/VMM/MMHyper.cpp b/src/VBox/VMM/MMHyper.cpp index ba4f523ab..293b43957 100644 --- a/src/VBox/VMM/MMHyper.cpp +++ b/src/VBox/VMM/MMHyper.cpp @@ -874,7 +874,35 @@ static int mmR3HyperHeapMap(PVM pVM, PMMHYPERHEAP pHeap, PRTGCPTR ppHeapGC) */ VMMR3DECL(int) MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, unsigned uAlignment, MMTAG enmTag, void **ppv) { + return MMR3HyperAllocOnceNoRelEx(pVM, cb, uAlignment, enmTag, 0/*fFlags*/, ppv); +} + + +/** + * Allocates memory in the Hypervisor (GC VMM) area which never will + * be freed and doesn't have any offset based relation to other heap blocks. + * + * The latter means that two blocks allocated by this API will not have the + * same relative position to each other in GC and HC. In short, never use + * this API for allocating nodes for an offset based AVL tree! + * + * The returned memory is of course zeroed. + * + * @returns VBox status code. + * @param pVM The VM to operate on. + * @param cb Number of bytes to allocate. + * @param uAlignment Required memory alignment in bytes. + * Values are 0,8,16,32 and PAGE_SIZE. + * 0 -> default alignment, i.e. 8 bytes. + * @param enmTag The statistics tag. + * @param fFlags Flags, see MMHYPER_AONR_FLAGS_KERNEL_MAPPING. + * @param ppv Where to store the address to the allocated memory. + * @remark This is assumed not to be used at times when serialization is required. + */ +VMMR3DECL(int) MMR3HyperAllocOnceNoRelEx(PVM pVM, size_t cb, unsigned uAlignment, MMTAG enmTag, uint32_t fFlags, void **ppv) +{ AssertMsg(cb >= 8, ("Hey! Do you really mean to allocate less than 8 bytes?! cb=%d\n", cb)); + Assert(!(fFlags & ~(MMHYPER_AONR_FLAGS_KERNEL_MAPPING))); /* * Choose between allocating a new chunk of HMA memory @@ -883,9 +911,13 @@ VMMR3DECL(int) MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, unsigned uAlignment, */ if ( ( cb < _64K && ( uAlignment != PAGE_SIZE - || cb < 48*_1K)) - || VMR3GetState(pVM) != VMSTATE_CREATING) + || cb < 48*_1K) + && !(fFlags & MMHYPER_AONR_FLAGS_KERNEL_MAPPING) + ) + || VMR3GetState(pVM) != VMSTATE_CREATING + ) { + Assert(!(fFlags & MMHYPER_AONR_FLAGS_KERNEL_MAPPING)); int rc = MMHyperAlloc(pVM, cb, uAlignment, enmTag, ppv); if ( rc != VERR_MM_HYPER_NO_MEMORY || cb <= 8*_1K) @@ -896,6 +928,14 @@ VMMR3DECL(int) MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, unsigned uAlignment, } } +#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE + /* + * Set MMHYPER_AONR_FLAGS_KERNEL_MAPPING if we're in going to execute in ring-0. + */ + if (VMMIsHwVirtExtForced(pVM)) + fFlags |= MMHYPER_AONR_FLAGS_KERNEL_MAPPING; +#endif + /* * Validate alignment. */ @@ -926,20 +966,17 @@ VMMR3DECL(int) MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, unsigned uAlignment, int rc = SUPR3PageAllocEx(cPages, 0 /*fFlags*/, &pvPages, -#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE - VMMIsHwVirtExtForced(pVM) ? &pvR0 : NULL, -#else - NULL, -#endif + fFlags & MMHYPER_AONR_FLAGS_KERNEL_MAPPING ? &pvR0 : NULL, paPages); if (RT_SUCCESS(rc)) { + if (!(fFlags & MMHYPER_AONR_FLAGS_KERNEL_MAPPING)) #ifdef VBOX_WITH_2X_4GB_ADDR_SPACE - if (!VMMIsHwVirtExtForced(pVM)) pvR0 = NIL_RTR0PTR; #else - pvR0 = (uintptr_t)pvPages; + pvR0 = (RTR0PTR)pvPages; #endif + memset(pvPages, 0, cbAligned); RTGCPTR GCPtr; diff --git a/src/VBox/VMM/Makefile.kmk b/src/VBox/VMM/Makefile.kmk index fd376a6cc..2fcdee58f 100644 --- a/src/VBox/VMM/Makefile.kmk +++ b/src/VBox/VMM/Makefile.kmk @@ -54,6 +54,7 @@ endif ifdef VBOX_WITH_PDM_ASYNC_COMPLETION VMMR3_DEFS += VBOX_WITH_PDM_ASYNC_COMPLETION endif +VMMR3_DEFS.darwin = VMM_R0_SWITCH_STACK VMMR3_DEFS.darwin.x86 = \ VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R3 \ VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R3 @@ -303,6 +304,7 @@ ifdef VBOX_WITH_VMI VMMGC_DEFS += VBOX_WITH_VMI endif ifeq ($(KBUILD_TARGET_ARCH),x86) + VMMGC_DEFS.darwin = VMM_R0_SWITCH_STACK VMMGC_DEFS.darwin = \ VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_RC \ VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_RC @@ -413,6 +415,7 @@ endif ifdef VBOX_WITH_MULTI_CORE VMMR0_DEFS += VBOX_WITH_MULTI_CORE endif +VMMR0_DEFS.darwin = VMM_R0_SWITCH_STACK VMMR0_DEFS.darwin.x86 = \ VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0 \ VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 diff --git a/src/VBox/VMM/TM.cpp b/src/VBox/VMM/TM.cpp index d2ec13429..1961a9911 100644 --- a/src/VBox/VMM/TM.cpp +++ b/src/VBox/VMM/TM.cpp @@ -325,11 +325,7 @@ VMMR3DECL(int) TMR3Init(PVM pVM) if (rc == VERR_CFGM_VALUE_NOT_FOUND) { if (!pVM->tm.s.fTSCUseRealTSC) - { - /* @todo simple case for guest SMP; always emulate RDTSC */ - if (pVM->cCPUs == 1) - pVM->tm.s.fMaybeUseOffsettedHostTSC = tmR3HasFixedTSC(pVM); - } + pVM->tm.s.fMaybeUseOffsettedHostTSC = tmR3HasFixedTSC(pVM); else pVM->tm.s.fMaybeUseOffsettedHostTSC = true; } @@ -2012,9 +2008,11 @@ static void tmR3TimerQueueRunVirtualSync(PVM pVM) /* * Process the expired timers moving the clock along as we progress. */ +#ifdef DEBUG_bird #ifdef VBOX_STRICT uint64_t u64Prev = u64Now; NOREF(u64Prev); #endif +#endif while (pNext && pNext->u64Expire <= u64Max) { PTMTIMER pTimer = pNext; @@ -2043,10 +2041,12 @@ static void tmR3TimerQueueRunVirtualSync(PVM pVM) pTimer->offPrev = 0; /* advance the clock - don't permit timers to be out of order or armed in the 'past'. */ +#ifdef DEBUG_bird #ifdef VBOX_STRICT AssertMsg(pTimer->u64Expire >= u64Prev, ("%'RU64 < %'RU64 %s\n", pTimer->u64Expire, u64Prev, pTimer->pszDesc)); u64Prev = pTimer->u64Expire; #endif +#endif ASMAtomicWriteU64(&pVM->tm.s.u64VirtualSync, pTimer->u64Expire); ASMAtomicWriteBool(&pVM->tm.s.fVirtualSyncTicking, false); diff --git a/src/VBox/VMM/VMM.cpp b/src/VBox/VMM/VMM.cpp index 43a870e94..a057ab8b2 100644 --- a/src/VBox/VMM/VMM.cpp +++ b/src/VBox/VMM/VMM.cpp @@ -240,16 +240,22 @@ VMMR3DECL(int) VMMR3Init(PVM pVM) static int vmmR3InitStacks(PVM pVM) { int rc = VINF_SUCCESS; +#ifdef VMM_R0_SWITCH_STACK + uint32_t fFlags = MMHYPER_AONR_FLAGS_KERNEL_MAPPING; +#else + uint32_t fFlags = 0; +#endif for (VMCPUID idCpu = 0; idCpu < pVM->cCPUs; idCpu++) { PVMCPU pVCpu = &pVM->aCpus[idCpu]; #ifdef VBOX_STRICT_VMM_STACK - rc = MMR3HyperAllocOnceNoRel(pVM, PAGE_SIZE + VMM_STACK_SIZE + PAGE_SIZE, PAGE_SIZE, MM_TAG_VMM, (void **)&pVCpu->vmm.s.pbEMTStackR3); + rc = MMR3HyperAllocOnceNoRelEx(pVM, PAGE_SIZE + VMM_STACK_SIZE + PAGE_SIZE, #else - rc = MMR3HyperAllocOnceNoRel(pVM, VMM_STACK_SIZE, PAGE_SIZE, MM_TAG_VMM, (void **)&pVCpu->vmm.s.pbEMTStackR3); + rc = MMR3HyperAllocOnceNoRelEx(pVM, VMM_STACK_SIZE, #endif + PAGE_SIZE, MM_TAG_VMM, fFlags, (void **)&pVCpu->vmm.s.pbEMTStackR3); if (RT_SUCCESS(rc)) { #ifdef VBOX_STRICT_VMM_STACK @@ -298,12 +304,13 @@ static int vmmR3InitLoggers(PVM pVM) pVM->vmm.s.pRCLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCLoggerR3); # ifdef VBOX_WITH_R0_LOGGING - for (unsigned i = 0; i < pVM->cCPUs; i++) + for (VMCPUID i = 0; i < pVM->cCPUs; i++) { PVMCPU pVCpu = &pVM->aCpus[i]; - rc = MMR3HyperAllocOnceNoRel(pVM, RT_OFFSETOF(VMMR0LOGGER, Logger.afGroups[pLogger->cGroups]), - 0, MM_TAG_VMM, (void **)&pVCpu->vmm.s.pR0LoggerR3); + rc = MMR3HyperAllocOnceNoRelEx(pVM, RT_OFFSETOF(VMMR0LOGGER, Logger.afGroups[pLogger->cGroups]), + 0, MM_TAG_VMM, MMHYPER_AONR_FLAGS_KERNEL_MAPPING, + (void **)&pVCpu->vmm.s.pR0LoggerR3); if (RT_FAILURE(rc)) return rc; pVCpu->vmm.s.pR0LoggerR3->pVM = pVM->pVMR0; diff --git a/src/VBox/VMM/VMMAll/PGMAllBth.h b/src/VBox/VMM/VMMAll/PGMAllBth.h index 002ae157d..0ee860d7b 100644 --- a/src/VBox/VMM/VMMAll/PGMAllBth.h +++ b/src/VBox/VMM/VMMAll/PGMAllBth.h @@ -4416,7 +4416,8 @@ PGM_BTH_DECL(int, MapCR3)(PVMCPU pVCpu, RTGCPHYS GCPhysCR3) # endif /* Clean up the old CR3 root. */ - if (pOldShwPageCR3) + if ( pOldShwPageCR3 + && pOldShwPageCR3 != pNewShwPageCR3 /* @todo can happen due to incorrect syncing between REM & PGM; find the real cause */) { Assert(pOldShwPageCR3->enmKind != PGMPOOLKIND_FREE); # ifndef PGM_WITHOUT_MAPPINGS diff --git a/src/VBox/VMM/VMMAll/REMAll.cpp b/src/VBox/VMM/VMMAll/REMAll.cpp index 81c2d86b2..28a1a9665 100644 --- a/src/VBox/VMM/VMMAll/REMAll.cpp +++ b/src/VBox/VMM/VMMAll/REMAll.cpp @@ -213,7 +213,7 @@ VMMDECL(void) REMNotifyHandlerPhysicalFlushIfAlmostFull(PVM pVM, PVMCPU pVCpu) Assert(pVM->cCPUs == 1); /* - * Less than 10 items means we should flush. + * Less than 20 items means we should flush. */ uint32_t cFree = 0; for (uint32_t idx = pVM->rem.s.idxFreeList; @@ -221,7 +221,7 @@ VMMDECL(void) REMNotifyHandlerPhysicalFlushIfAlmostFull(PVM pVM, PVMCPU pVCpu) idx = pVM->rem.s.aHandlerNotifications[idx].idxNext) { Assert(idx < RT_ELEMENTS(pVM->rem.s.aHandlerNotifications)); - if (++cFree > 10) + if (++cFree > 20) return; } diff --git a/src/VBox/VMM/VMMR0/CPUMR0.cpp b/src/VBox/VMM/VMMR0/CPUMR0.cpp index 26a658053..fbbf60ff6 100644 --- a/src/VBox/VMM/VMMR0/CPUMR0.cpp +++ b/src/VBox/VMM/VMMR0/CPUMR0.cpp @@ -60,24 +60,34 @@ VMMR0DECL(int) CPUMR0Init(PVM pVM) } /* - * Check for sysenter if it's used. + * Check for sysenter and syscall usage. */ if (ASMHasCpuId()) { + /* + * SYSENTER/SYSEXIT + * + * Intel docs claim you should test both the flag and family, model & + * stepping because some Pentium Pro CPUs have the SEP cpuid flag set, + * but don't support it. AMD CPUs may support this feature in legacy + * mode, they've banned it from long mode. Since we switch to 32-bit + * mode when entering raw-mode context the feature would become + * accessible again on AMD CPUs, so we have to check regardless of + * host bitness. + */ uint32_t u32CpuVersion; uint32_t u32Dummy; - uint32_t u32Features; - ASMCpuId(1, &u32CpuVersion, &u32Dummy, &u32Dummy, &u32Features); + uint32_t fFeatures; + ASMCpuId(1, &u32CpuVersion, &u32Dummy, &u32Dummy, &fFeatures); uint32_t u32Family = u32CpuVersion >> 8; uint32_t u32Model = (u32CpuVersion >> 4) & 0xF; uint32_t u32Stepping = u32CpuVersion & 0xF; - - /* - * Intel docs claim you should test both the flag and family, model & stepping. - * Some Pentium Pro cpus have the SEP cpuid flag set, but don't support it. - */ - if ( (u32Features & X86_CPUID_FEATURE_EDX_SEP) - && !(u32Family == 6 && u32Model < 3 && u32Stepping < 3)) + if ( (fFeatures & X86_CPUID_FEATURE_EDX_SEP) + && ( u32Family != 6 /* (> pentium pro) */ + || u32Model >= 3 + || u32Stepping >= 3 + || !ASMIsIntelCpu()) + ) { /* * Read the MSR and see if it's in use or not. @@ -85,14 +95,44 @@ VMMR0DECL(int) CPUMR0Init(PVM pVM) uint32_t u32 = ASMRdMsr_Low(MSR_IA32_SYSENTER_CS); if (u32) { - for (unsigned i=0;i<pVM->cCPUs;i++) - pVM->aCpus[i].cpum.s.fUseFlags |= CPUM_USE_SYSENTER; - + pVM->cpum.s.fHostUseFlags |= CPUM_USE_SYSENTER; Log(("CPUMR0Init: host uses sysenter cs=%08x%08x\n", ASMRdMsr_High(MSR_IA32_SYSENTER_CS), u32)); } } - /** @todo check for AMD and syscall!!!!!! */ + /* + * SYSCALL/SYSRET + * + * This feature is indicated by the SEP bit returned in EDX by CPUID + * function 0x80000001. Intel CPUs only supports this feature in + * long mode. Since we're not running 64-bit guests in raw-mode there + * are no issues with 32-bit intel hosts. + */ + uint32_t cExt = 0; + ASMCpuId(0x80000000, &cExt, &u32Dummy, &u32Dummy, &u32Dummy); + if ( cExt >= 0x80000001 + && cExt <= 0x8000ffff) + { + uint32_t fExtFeaturesEDX = ASMCpuId_EDX(0x80000001); + if (fExtFeaturesEDX & X86_CPUID_AMD_FEATURE_EDX_SEP) + { +#ifdef RT_ARCH_X86 +# ifdef VBOX_WITH_HYBRID_32BIT_KERNEL + if (fExtFeaturesEDX & X86_CPUID_AMD_FEATURE_EDX_LONG_MODE) +# else + if (!ASMIsIntelCpu()) +# endif +#endif + { + uint64_t fEfer = ASMRdMsr(MSR_K6_EFER); + if (fEfer & MSR_K6_EFER_SCE) + { + pVM->cpum.s.fHostUseFlags |= CPUM_USE_SYSCALL; + Log(("CPUMR0Init: host uses syscall\n")); + } + } + } + } } diff --git a/src/VBox/VMM/VMMR0/HWACCMR0A.asm b/src/VBox/VMM/VMMR0/HWACCMR0A.asm index acbd67f27..55f521d08 100644 --- a/src/VBox/VMM/VMMR0/HWACCMR0A.asm +++ b/src/VBox/VMM/VMMR0/HWACCMR0A.asm @@ -923,11 +923,7 @@ BEGINPROC SVMR0InvlpgA mov rax, rdi mov rcx, rsi %else - ; from http://www.cs.cmu.edu/~fp/courses/15213-s06/misc/asm64-handout.pdf: - ; ``Perhaps unexpectedly, instructions that move or generate 32-bit register - ; values also set the upper 32 bits of the register to zero. Consequently - ; there is no need for an instruction movzlq.'' - mov eax, ecx + mov rax, rcx mov rcx, rdx %endif %else diff --git a/src/VBox/VMM/VMMR0/HWSVMR0.cpp b/src/VBox/VMM/VMMR0/HWSVMR0.cpp index 1eecf9870..950327df1 100644 --- a/src/VBox/VMM/VMMR0/HWSVMR0.cpp +++ b/src/VBox/VMM/VMMR0/HWSVMR0.cpp @@ -54,6 +54,7 @@ *******************************************************************************/ static int svmR0InterpretInvpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t uASID); static int svmR0ReplaceTprInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx); +static void svmR0SetMSRPermission(PVM pVM, unsigned ulMSR, bool fRead, bool fWrite); /******************************************************************************* * Global Variables * @@ -361,11 +362,76 @@ VMMR0DECL(int) SVMR0SetupVM(PVM pVM) /** Setup the PAT msr (nested paging only) */ pVMCB->guest.u64GPAT = 0x0007040600070406ULL; } + /* The following MSRs are saved automatically by vmload/vmsave, so we allow the guest + * to modify them directly. + */ + svmR0SetMSRPermission(pVM, MSR_K8_LSTAR, true, true); + svmR0SetMSRPermission(pVM, MSR_K8_CSTAR, true, true); + svmR0SetMSRPermission(pVM, MSR_K6_STAR, true, true); + svmR0SetMSRPermission(pVM, MSR_K8_SF_MASK, true, true); + svmR0SetMSRPermission(pVM, MSR_K8_FS_BASE, true, true); + svmR0SetMSRPermission(pVM, MSR_K8_GS_BASE, true, true); + svmR0SetMSRPermission(pVM, MSR_K8_KERNEL_GS_BASE, true, true); + svmR0SetMSRPermission(pVM, MSR_IA32_SYSENTER_CS, true, true); + svmR0SetMSRPermission(pVM, MSR_IA32_SYSENTER_ESP, true, true); + svmR0SetMSRPermission(pVM, MSR_IA32_SYSENTER_EIP, true, true); return rc; } /** + * Sets the permission bits for the specified MSR + * + * @param pVM The VM to operate on. + * @param ulMSR MSR value + * @param fRead Reading allowed/disallowed + * @param fWrite Writing allowed/disallowed + */ +static void svmR0SetMSRPermission(PVM pVM, unsigned ulMSR, bool fRead, bool fWrite) +{ + unsigned ulBit; + uint8_t *pMSRBitmap = (uint8_t *)pVM->hwaccm.s.svm.pMSRBitmap; + + if (ulMSR <= 0x00001FFF) + { + /* Pentium-compatible MSRs */ + ulBit = ulMSR * 2; + } + else + if ( ulMSR >= 0xC0000000 + && ulMSR <= 0xC0001FFF) + { + /* AMD Sixth Generation x86 Processor MSRs and SYSCALL */ + ulBit = (ulMSR - 0xC0000000) * 2; + pMSRBitmap += 0x800; + } + else + if ( ulMSR >= 0xC0010000 + && ulMSR <= 0xC0011FFF) + { + /* AMD Seventh and Eighth Generation Processor MSRs */ + ulBit = (ulMSR - 0xC0001000) * 2; + pMSRBitmap += 0x1000; + } + else + { + AssertFailed(); + return; + } + Assert(ulBit < 16 * 1024 - 1); + if (fRead) + ASMBitClear(pMSRBitmap, ulBit); + else + ASMBitSet(pMSRBitmap, ulBit); + + if (fWrite) + ASMBitClear(pMSRBitmap, ulBit + 1); + else + ASMBitSet(pMSRBitmap, ulBit + 1); +} + + +/** * Injects an event (trap or external interrupt) * * @param pVCpu The VMCPU to operate on. @@ -1294,7 +1360,15 @@ ResumeExecution: /* eax is saved/restore across the vmrun instruction */ pCtx->rax = pVMCB->guest.u64RAX; + /* Save all the MSRs that can be changed by the guest without causing a world switch. (fs & gs base are saved with SVM_READ_SELREG) */ + pCtx->msrSTAR = pVMCB->guest.u64STAR; /* legacy syscall eip, cs & ss */ + pCtx->msrLSTAR = pVMCB->guest.u64LSTAR; /* 64 bits mode syscall rip */ + pCtx->msrCSTAR = pVMCB->guest.u64CSTAR; /* compatibility mode syscall rip */ + pCtx->msrSFMASK = pVMCB->guest.u64SFMASK; /* syscall flag mask */ pCtx->msrKERNELGSBASE = pVMCB->guest.u64KernelGSBase; /* swapgs exchange value */ + pCtx->SysEnter.cs = pVMCB->guest.u64SysEnterCS; + pCtx->SysEnter.eip = pVMCB->guest.u64SysEnterEIP; + pCtx->SysEnter.esp = pVMCB->guest.u64SysEnterESP; /* Can be updated behind our back in the nested paging case. */ pCtx->cr2 = pVMCB->guest.u64CR2; @@ -1307,13 +1381,6 @@ ResumeExecution: SVM_READ_SELREG(FS, fs); SVM_READ_SELREG(GS, gs); - /* - * System MSRs - */ - pCtx->SysEnter.cs = pVMCB->guest.u64SysEnterCS; - pCtx->SysEnter.eip = pVMCB->guest.u64SysEnterEIP; - pCtx->SysEnter.esp = pVMCB->guest.u64SysEnterESP; - /* Remaining guest CPU context: TR, IDTR, GDTR, LDTR; must sync everything otherwise we can get out of sync when jumping to ring 3. */ SVM_READ_SELREG(LDTR, ldtr); SVM_READ_SELREG(TR, tr); @@ -2728,7 +2795,7 @@ static int svmR0InterpretInvpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, ui */ VMMR0DECL(int) SVMR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt) { - bool fFlushPending = pVM->hwaccm.s.svm.fAlwaysFlushTLB | pVCpu->hwaccm.s.fForceTLBFlush; + bool fFlushPending = pVM->hwaccm.s.svm.fAlwaysFlushTLB | VMCPU_FF_ISSET(pVCpu, VMCPU_FF_TLB_FLUSH); /* Skip it if a TLB flush is already pending. */ if (!fFlushPending) @@ -2739,14 +2806,13 @@ VMMR0DECL(int) SVMR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt) AssertReturn(pVM, VERR_INVALID_PARAMETER); Assert(pVM->hwaccm.s.svm.fSupported); - /* @todo SMP */ - pVMCB = (SVM_VMCB *)pVM->aCpus[0].hwaccm.s.svm.pVMCB; + pVMCB = (SVM_VMCB *)pVCpu->hwaccm.s.svm.pVMCB; AssertMsgReturn(pVMCB, ("Invalid pVMCB\n"), VERR_EM_INTERNAL_ERROR); #if HC_ARCH_BITS == 32 /* If we get a flush in 64 bits guest mode, then force a full TLB flush. Invlpga takes only 32 bits addresses. */ if (CPUMIsGuestInLongMode(pVCpu)) - pVCpu->hwaccm.s.fForceTLBFlush = true; + VMCPU_FF_SET(pVCpu, VMCPU_FF_TLB_FLUSH); else #endif SVMR0InvlpgA(GCVirt, pVMCB->ctrl.TLBCtrl.n.u32ASID); @@ -2768,7 +2834,7 @@ VMMR0DECL(int) SVMR0InvalidatePhysPage(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys) { Assert(pVM->hwaccm.s.fNestedPaging); /* invlpga only invalidates TLB entries for guest virtual addresses; we have no choice but to force a TLB flush here. */ - pVCpu->hwaccm.s.fForceTLBFlush = true; + VMCPU_FF_SET(pVCpu, VMCPU_FF_TLB_FLUSH); STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatFlushTLBInvlpga); return VINF_SUCCESS; } diff --git a/src/VBox/VMM/VMMR0/HWVMXR0.cpp b/src/VBox/VMM/VMMR0/HWVMXR0.cpp index 60f85de3f..f72f4508a 100644 --- a/src/VBox/VMM/VMMR0/HWVMXR0.cpp +++ b/src/VBox/VMM/VMMR0/HWVMXR0.cpp @@ -1509,12 +1509,17 @@ VMMR0DECL(int) VMXR0LoadGuestState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx) val &= ~X86_CR4_PAE; } + /* Turn off VME if we're in emulated real mode. */ + if (CPUMIsGuestInRealModeEx(pCtx)) + val &= ~X86_CR4_VME; + rc |= VMXWriteVMCS64(VMX_VMCS64_GUEST_CR4, val); Log2(("Guest CR4 %08x\n", val)); /* CR4 flags owned by the host; if the guests attempts to change them, then * the VM will exit. */ val = 0 + | X86_CR4_VME | X86_CR4_PAE | X86_CR4_PGE | X86_CR4_PSE @@ -2724,6 +2729,10 @@ ResumeExecution: case OP_STI: pCtx->eflags.Bits.u1IF = 1; + EMSetInhibitInterruptsPC(pVCpu, pCtx->rip + pDis->opsize); + Assert(VMCPU_FF_ISSET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)); + rc = VMXWriteVMCS(VMX_VMCS32_GUEST_INTERRUPTIBILITY_STATE, VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE_BLOCK_STI); + AssertRC(rc); STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitSti); break; @@ -3858,7 +3867,7 @@ static void vmxR0FlushVPID(PVM pVM, PVMCPU pVCpu, VMX_FLUSH enmFlush, RTGCPTR GC if ( CPUMIsGuestInLongMode(pVCpu) && !VMX_IS_64BIT_HOST_MODE()) { - pVCpu->hwaccm.s.fForceTLBFlush = true; + VMCPU_FF_SET(pVCpu, VMCPU_FF_TLB_FLUSH); } else #endif @@ -3884,7 +3893,7 @@ static void vmxR0FlushVPID(PVM pVM, PVMCPU pVCpu, VMX_FLUSH enmFlush, RTGCPTR GC */ VMMR0DECL(int) VMXR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt) { - bool fFlushPending = pVCpu->hwaccm.s.fForceTLBFlush; + bool fFlushPending = VMCPU_FF_ISSET(pVCpu, VMCPU_FF_TLB_FLUSH); Log2(("VMXR0InvalidatePage %RGv\n", GCVirt)); @@ -3914,7 +3923,7 @@ VMMR0DECL(int) VMXR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt) */ VMMR0DECL(int) VMXR0InvalidatePhysPage(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys) { - bool fFlushPending = pVCpu->hwaccm.s.fForceTLBFlush; + bool fFlushPending = VMCPU_FF_ISSET(pVCpu, VMCPU_FF_TLB_FLUSH); Assert(pVM->hwaccm.s.fNestedPaging); diff --git a/src/VBox/VMM/VMMSwitcher.cpp b/src/VBox/VMM/VMMSwitcher.cpp index 7e7cc9fb9..1a1b231df 100644 --- a/src/VBox/VMM/VMMSwitcher.cpp +++ b/src/VBox/VMM/VMMSwitcher.cpp @@ -557,13 +557,13 @@ static void vmmR3SwitcherGenericRelocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR } /* - * Insert relative jump to specified target it SYSENTER isn't used by the host. + * Insert relative jump to specified target it SYSCALL isn't used by the host. */ case FIX_NO_SYSCALL_JMP: { uint32_t offTrg = *u.pu32++; Assert(offTrg < pSwitcher->cbCode); - if (!CPUMIsHostUsingSysEnter(pVM)) + if (!CPUMIsHostUsingSysCall(pVM)) { *uSrc.pu8++ = 0xe9; /* jmp rel32 */ *uSrc.pu32++ = offTrg - (offSrc + 5); diff --git a/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac b/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac index 4d721fbea..31deb20e1 100644 --- a/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac +++ b/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac @@ -199,7 +199,7 @@ BITS 64 ALIGNCODE(16) BEGINPROC vmmR0HostToGuestAsm ;; Store the offset from CPUM to CPUMCPU in r8 - mov r8, [rdx + CPUM.ulOffCPUMCPU] + mov r8d, [rdx + CPUM.ulOffCPUMCPU] ;; ;; Save CPU host context @@ -255,13 +255,13 @@ BEGINPROC vmmR0HostToGuestAsm FIXUP FIX_NO_SYSENTER_JMP, 0, htg_no_sysenter - NAME(Start) ; this will insert a jmp htg_no_sysenter if host doesn't use sysenter. ; save MSR_IA32_SYSENTER_CS register. - mov ecx, MSR_IA32_SYSENTER_CS mov rbx, rdx ; save edx + mov ecx, MSR_IA32_SYSENTER_CS rdmsr ; edx:eax <- MSR[ecx] - mov [rbx + r8 + CPUMCPU.Host.SysEnter.cs], rax - mov [rbx + r8 + CPUMCPU.Host.SysEnter.cs + 4], rdx - xor rax, rax ; load 0:0 to cause #GP upon sysenter - xor rdx, rdx + mov [rbx + r8 + CPUMCPU.Host.SysEnter.cs], eax + mov [rbx + r8 + CPUMCPU.Host.SysEnter.cs + 4], edx + xor eax, eax ; load 0:0 to cause #GP upon sysenter + xor edx, edx wrmsr mov rdx, rbx ; restore edx jmp short htg_no_sysenter @@ -513,7 +513,7 @@ htg_debug_regs_guest_no: mov eax, [edx + CPUMCPU.Hyper.eip] ; callees expect CPUM ptr CPUM_FROM_CPUMCPU(edx) - + %ifdef VBOX_WITH_STATISTICS FIXUP FIX_GC_VM_OFF, 1, VM.StatSwitcherToGC mov edx, 0ffffffffh @@ -946,7 +946,7 @@ GLOBALNAME HCExitTarget ; Load CPUM pointer into edx mov rdx, [NAME(pCpumHC) wrt rip] ; Load the CPUMCPU offset. - mov r8, [rdx + CPUM.ulOffCPUMCPU] + mov r8d, [rdx + CPUM.ulOffCPUMCPU] ; activate host gdt and idt lgdt [rdx + r8 + CPUMCPU.Host.gdtr] @@ -990,10 +990,10 @@ GLOBALNAME HCExitTarget FIXUP FIX_NO_SYSENTER_JMP, 0, gth_sysenter_no - NAME(Start) ; this will insert a jmp gth_sysenter_no if host doesn't use sysenter. ; restore MSR_IA32_SYSENTER_CS register. + mov rbx, rdx ; save edx mov ecx, MSR_IA32_SYSENTER_CS - mov eax, [rdx + r8 + CPUMCPU.Host.SysEnter.cs] - mov ebx, [rdx + r8 + CPUMCPU.Host.SysEnter.cs + 4] - mov rbx, rdx ; save/load edx + mov eax, [rbx + r8 + CPUMCPU.Host.SysEnter.cs] + mov edx, [rbx + r8 + CPUMCPU.Host.SysEnter.cs + 4] wrmsr ; MSR[ecx] <- edx:eax mov rdx, rbx ; restore edx jmp short gth_sysenter_no diff --git a/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac b/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac index 4505db638..3729c30fc 100644 --- a/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac +++ b/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac @@ -156,6 +156,19 @@ BEGINPROC vmmR0HostToGuestAsm ALIGNCODE(16) htg_no_sysenter: + FIXUP FIX_NO_SYSCALL_JMP, 0, htg_no_syscall - NAME(Start) ; this will insert a jmp htg_no_syscall if host doesn't use syscall. + ; clear MSR_K6_EFER_SCE. + mov ebx, edx ; save edx + mov ecx, MSR_K6_EFER + rdmsr ; edx:eax <- MSR[ecx] + and eax, ~MSR_K6_EFER_SCE + wrmsr + mov edx, ebx ; restore edx + jmp short htg_no_syscall + +ALIGNCODE(16) +htg_no_syscall: + ;; handle use flags. mov esi, [edx + CPUMCPU.fUseFlags] ; esi == use flags. and esi, ~CPUM_USED_FPU ; Clear CPUM_USED_* flags. ;;@todo FPU check can be optimized to use cr0 flags! @@ -215,7 +228,7 @@ htg_debug_regs_no: ; Store the hypervisor cr3 for later loading mov ebp, [edx + CPUMCPU.Hyper.cr3] - + ;; ;; Load Intermediate memory context. ;; @@ -380,7 +393,7 @@ htg_debug_regs_guest_no: mov eax, [edx + CPUMCPU.Hyper.eip] ; callees expect CPUM ptr CPUM_FROM_CPUMCPU(edx) - + %ifdef VBOX_WITH_STATISTICS FIXUP FIX_GC_VM_OFF, 1, VM.StatSwitcherToGC mov edx, 0ffffffffh @@ -419,7 +432,7 @@ htg_debug_regs_guest: mov [edx + CPUMCPU.Host.dr2], ecx mov eax, dr3 mov [edx + CPUMCPU.Host.dr3], eax - + ; load hyper DR0-7 mov ebx, [edx + CPUMCPU.Hyper.dr] mov dr0, ebx @@ -863,7 +876,18 @@ GLOBALNAME HCExitTarget ALIGNCODE(16) gth_sysenter_no: - ;; @todo AMD syscall + FIXUP FIX_NO_SYSCALL_JMP, 0, gth_syscall_no - NAME(Start) ; this will insert a jmp gth_syscall_no if host doesn't use syscall. + ; set MSR_K6_EFER_SCE. + mov ebx, edx ; save edx + mov ecx, MSR_K6_EFER + rdmsr + or eax, MSR_K6_EFER_SCE + wrmsr + mov edx, ebx ; restore edx + jmp short gth_syscall_no + +ALIGNCODE(16) +gth_syscall_no: ; Restore FPU if guest has used it. ; Using fxrstor should ensure that we're not causing unwanted exception on the host. diff --git a/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.cpp b/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.cpp index 8f3572d37..6b2baa7ec 100644 --- a/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.cpp +++ b/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.cpp @@ -195,6 +195,14 @@ struct DConnectInvokeReply : DConnectOp //----------------------------------------------------------------------------- +struct DConAddrPlusPtr +{ + DConAddr addr; + void *p; +}; + +//----------------------------------------------------------------------------- + ipcDConnectService *ipcDConnectService::mInstance = nsnull; //----------------------------------------------------------------------------- @@ -532,9 +540,9 @@ DeserializeParam(ipcMessageReader &reader, const nsXPTType &t, nsXPTCVariant &v) case nsXPTType::T_INTERFACE: case nsXPTType::T_INTERFACE_IS: { - reader.GetBytes(&v.val.p, sizeof(void *)); + reader.GetBytes(&v.val.u64, sizeof(DConAddr)); // stub creation will be handled outside this routine. we only - // deserialize the DConAddr into v.val.p temporarily. + // deserialize the DConAddr into v.val.u64 temporarily. } break; @@ -767,10 +775,12 @@ DeserializeResult(ipcMessageReader &reader, const nsXPTType &t, nsXPTCMiniVarian case nsXPTType::T_INTERFACE_IS: { // stub creation will be handled outside this routine. we only - // deserialize the DConAddr into v.val.p temporarily. - void *ptr; - reader.GetBytes(&ptr, sizeof(void *)); - *((void **) v.val.p) = ptr; + // deserialize the DConAddr and the original value of v.val.p + // into v.val.p temporarily. needs temporary memory alloc. + DConAddrPlusPtr *buf = (DConAddrPlusPtr *) nsMemory::Alloc(sizeof(DConAddrPlusPtr)); + reader.GetBytes(&buf->addr, sizeof(DConAddr)); + buf->p = v.val.p; + v.val.p = buf; } break; @@ -938,8 +948,6 @@ GetTypeSize(const nsXPTType &type, PRUint32 &size, PRBool &isSimple) case nsXPTType::T_IID: /* fall through */ case nsXPTType::T_CHAR_STR: /* fall through */ case nsXPTType::T_WCHAR_STR: /* fall through */ - case nsXPTType::T_INTERFACE: /* fall through */ - case nsXPTType::T_INTERFACE_IS: /* fall through */ case nsXPTType::T_ASTRING: /* fall through */ case nsXPTType::T_DOMSTRING: /* fall through */ case nsXPTType::T_UTF8STRING: /* fall through */ @@ -947,6 +955,11 @@ GetTypeSize(const nsXPTType &type, PRUint32 &size, PRBool &isSimple) size = sizeof(void *); isSimple = PR_FALSE; break; + case nsXPTType::T_INTERFACE: /* fall through */ + case nsXPTType::T_INTERFACE_IS: /* fall through */ + size = sizeof(DConAddr); + isSimple = PR_FALSE; + break; default: LOG(("unexpected parameter type: %d\n", type.TagPart())); return NS_ERROR_UNEXPECTED; @@ -1096,7 +1109,7 @@ DeserializeArrayParam(ipcDConnectService *dConnect, if (NS_SUCCEEDED(rv) && elemType.IsInterfacePointer()) { // grab the DConAddr value temporarily stored in the param - PtrBits bits = (PtrBits) v.val.p; + PtrBits bits = v.val.u64; // DeserializeInterfaceParamBits needs IID only if it's a remote object nsID iid; @@ -1524,7 +1537,8 @@ ipcDConnectService::SerializeInterfaceParam(ipcMessageWriter &writer, if (!obj) { // write null address - writer.PutBytes(&obj, sizeof(obj)); + DConAddr nullobj = 0; + writer.PutBytes(&nullobj, sizeof(nullobj)); } else { @@ -1532,7 +1546,7 @@ ipcDConnectService::SerializeInterfaceParam(ipcMessageWriter &writer, nsresult rv = obj->QueryInterface(kDConnectStubID, (void **) &stub); if (NS_SUCCEEDED(rv) && (stub->PeerID() == peer)) { - void *p = stub->Instance(); + DConAddr p = stub->Instance(); writer.PutBytes(&p, sizeof(p)); } else @@ -1581,7 +1595,7 @@ ipcDConnectService::SerializeInterfaceParam(ipcMessageWriter &writer, // send address of the instance wrapper, and set the low bit to indicate // to the remote party that this is a remote instance wrapper. - PtrBits bits = ((PtrBits) wrapper) | PTRBITS_REMOTE_BIT; + PtrBits bits = ((PtrBits)(uintptr_t) wrapper) | PTRBITS_REMOTE_BIT; writer.PutBytes(&bits, sizeof(bits)); } NS_IF_RELEASE(stub); @@ -1849,7 +1863,7 @@ ipcDConnectService::SerializeException(ipcMessageWriter &writer, if (NS_SUCCEEDED(rv) && (stub->Stub()->PeerID() == peer)) { // send the wrapper instance back to the peer - void *p = stub->Stub()->Instance(); + DConAddr p = stub->Stub()->Instance(); writer.PutBytes(&p, sizeof(p)); } else @@ -1899,7 +1913,7 @@ ipcDConnectService::SerializeException(ipcMessageWriter &writer, // send address of the instance wrapper, and set the low bit to indicate // to the remote party that this is a remote instance wrapper. - PtrBits bits = ((PtrBits) wrapper) | PTRBITS_REMOTE_BIT; + PtrBits bits = ((PtrBits)(uintptr_t) wrapper) | PTRBITS_REMOTE_BIT; writer.PutBytes(&bits, sizeof(bits)); // we want to cache fields to minimize the number of IPC calls when @@ -1986,13 +2000,11 @@ ipcDConnectService::DeserializeException(ipcMessageReader &reader, nsresult rv; PRUint32 len; - void *instance = 0; - reader.GetBytes(&instance, sizeof(void *)); + PtrBits bits = 0; + reader.GetBytes(&bits, sizeof(DConAddr)); if (reader.HasError()) return NS_ERROR_INVALID_ARG; - PtrBits bits = (PtrBits) (instance); - if (bits & PTRBITS_REMOTE_BIT) { // pointer is a peer-side exception instance wrapper, @@ -2095,7 +2107,7 @@ DConnectStub::~DConnectStub() #ifdef IPC_LOGGING const char *name; mIInfo->GetNameShared(&name); - LOG(("{%p} DConnectStub::<dtor>(): peer=%d instance=%p {%s}\n", + LOG(("{%p} DConnectStub::<dtor>(): peer=%d instance=0x%Lx {%s}\n", this, mPeerID, mInstance, name)); #endif @@ -2292,7 +2304,7 @@ DConnectStub::QueryInterface(const nsID &aIID, void **aInstancePtr) dConnect->GetInterfaceInfo(aIID, getter_AddRefs(iinfoQ)); iinfoQ->GetNameShared(&nameQ); LOG(("calling QueryInterface {%s} on peer object " - "(stub=%p, instance=%p {%s})\n", + "(stub=%p, instance=0x%Lx {%s})\n", nameQ, this, mInstance, name)); } #endif @@ -2367,7 +2379,7 @@ DConnectStub::CallMethod(PRUint16 aMethodIndex, PRUint8 i, paramCount = aInfo->GetParamCount(); - LOG((" instance=%p\n", mInstance)); + LOG((" instance=0x%Lx\n", mInstance)); LOG((" name=%s\n", aInfo->GetName())); LOG((" param-count=%u\n", (PRUint32) paramCount)); @@ -2513,13 +2525,15 @@ DConnectStub::CallMethod(PRUint16 aMethodIndex, const nsXPTParamInfo ¶mInfo = aInfo->GetParam(i); if (aParams[i].val.p && (paramInfo.IsOut() || paramInfo.IsRetval())) { - void **pptr = (void **) aParams[i].val.p; const nsXPTType &type = paramInfo.GetType(); if (type.IsInterfacePointer()) { - // grab the DConAddr value temporarily stored in the param - PtrBits bits = (PtrBits) *pptr; - *pptr = nsnull; + // grab the DConAddr value temporarily stored in the param, restore + // the pointer and free the temporarily allocated memory. + DConAddrPlusPtr *dptr = (DConAddrPlusPtr *)aParams[i].val.p; + PtrBits bits = dptr->addr; + aParams[i].val.p = dptr->p; + nsMemory::Free((void *)dptr); // DeserializeInterfaceParamBits needs IID only if it's a remote object nsID iid; @@ -2532,7 +2546,7 @@ DConnectStub::CallMethod(PRUint16 aMethodIndex, nsISupports *obj = nsnull; rv = dConnect->DeserializeInterfaceParamBits(bits, mPeerID, iid, obj); if (NS_SUCCEEDED(rv)) - *pptr = obj; + *(void **)aParams[i].val.p = obj; } } else if (type.IsArray()) @@ -2542,7 +2556,7 @@ DConnectStub::CallMethod(PRUint16 aMethodIndex, aMethodIndex, *aInfo, aParams, PR_FALSE, paramInfo, PR_TRUE, array); if (NS_SUCCEEDED(rv)) - *pptr = array; + *(void **)aParams[i].val.p = array; } } } @@ -2594,7 +2608,7 @@ public: const DConnectSetupReply *reply = (const DConnectSetupReply *) op; - LOG(("got SETUP_REPLY: status=%x instance=%p\n", reply->status, reply->instance)); + LOG(("got SETUP_REPLY: status=%x instance=0x%Lx\n", reply->status, reply->instance)); mStatus = reply->status; @@ -3121,7 +3135,7 @@ ipcDConnectService::StoreStub(DConnectStub *stub) nsCOMPtr<nsIInterfaceInfo> iinfo; stub->GetInterfaceInfo(getter_AddRefs(iinfo)); iinfo->GetNameShared(&name); - LOG(("ipcDConnectService::StoreStub(): stub=%p instance=%p {%s}\n", + LOG(("ipcDConnectService::StoreStub(): stub=%p instance=0x%Lx {%s}\n", stub, stub->Instance(), name)); #endif @@ -3137,7 +3151,7 @@ ipcDConnectService::DeleteStub(DConnectStub *stub) nsCOMPtr<nsIInterfaceInfo> iinfo; stub->GetInterfaceInfo(getter_AddRefs(iinfo)); iinfo->GetNameShared(&name); - LOG(("ipcDConnectService::DeleteStub(): stub=%p instance=%p {%s}\n", + LOG(("ipcDConnectService::DeleteStub(): stub=%p instance=0x%Lx {%s}\n", stub, stub->Instance(), name)); #endif @@ -3472,17 +3486,18 @@ ipcDConnectService::OnSetup(PRUint32 peer, const DConnectSetup *setup, PRUint32 case DCON_OP_SETUP_QUERY_INTERFACE: { const DConnectSetupQueryInterface *setupQI = (const DConnectSetupQueryInterface *) setup; + DConnectInstance *QIinstance = (DConnectInstance *)setupQI->instance; // make sure we've been sent a valid wrapper - if (!CheckInstanceAndAddRef(setupQI->instance, peer)) + if (!CheckInstanceAndAddRef(QIinstance, peer)) { NS_NOTREACHED("instance wrapper not found"); rv = NS_ERROR_INVALID_ARG; } else { - rv = setupQI->instance->RealInstance()->QueryInterface(setupQI->iid, (void **) &instance); - setupQI->instance->Release(); + rv = QIinstance->RealInstance()->QueryInterface(setupQI->iid, (void **) &instance); + QIinstance->Release(); } break; } @@ -3587,7 +3602,7 @@ ipcDConnectService::OnSetup(PRUint32 peer, const DConnectSetup *setup, PRUint32 msg.opcode_minor = 0; msg.flags = 0; msg.request_index = setup->request_index; - msg.instance = wrapper; + msg.instance = (DConAddr)(uintptr_t)wrapper; msg.status = rv; if (got_exception) @@ -3619,10 +3634,10 @@ ipcDConnectService::OnSetup(PRUint32 peer, const DConnectSetup *setup, PRUint32 void ipcDConnectService::OnRelease(PRUint32 peer, const DConnectRelease *release) { - LOG(("ipcDConnectService::OnRelease [peer=%u instance=%p]\n", + LOG(("ipcDConnectService::OnRelease [peer=%u instance=0x%Lx]\n", peer, release->instance)); - DConnectInstance *wrapper = release->instance; + DConnectInstance *wrapper = (DConnectInstance *)release->instance; nsAutoLock lock (mLock); @@ -3654,10 +3669,10 @@ ipcDConnectService::OnRelease(PRUint32 peer, const DConnectRelease *release) void ipcDConnectService::OnInvoke(PRUint32 peer, const DConnectInvoke *invoke, PRUint32 opLen) { - LOG(("ipcDConnectService::OnInvoke [peer=%u instance=%p method=%u]\n", + LOG(("ipcDConnectService::OnInvoke [peer=%u instance=0x%Lx method=%u]\n", peer, invoke->instance, invoke->method_index)); - DConnectInstance *wrapper = invoke->instance; + DConnectInstance *wrapper = (DConnectInstance *)invoke->instance; ipcMessageReader reader((const PRUint8 *) (invoke + 1), opLen - sizeof(*invoke)); @@ -3730,7 +3745,7 @@ ipcDConnectService::OnInvoke(PRUint32 peer, const DConnectInvoke *invoke, PRUint if (type.IsInterfacePointer()) { // grab the DConAddr value temporarily stored in the param - PtrBits bits = (PtrBits) params[i].val.p; + PtrBits bits = (PtrBits)(uintptr_t) params[i].val.p; // DeserializeInterfaceParamBits needs IID only if it's a remote object nsID iid; diff --git a/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.h b/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.h index 8301a282e..aa2bb67f7 100644 --- a/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.h +++ b/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.h @@ -143,7 +143,7 @@ public: } }; -typedef class DConnectInstance* DConAddr; +typedef PRUint64 DConAddr; // a key class used to identify DConnectStub objects stored in a hash table // by a composite of peer ID and DConAddr @@ -187,7 +187,7 @@ private: // used elsewhere like nsAtomTable to safely represent the integral value // of an address. -typedef unsigned long PtrBits; +typedef PRUint64 PtrBits; // bit flag that defines if a PtrBits value represents a remote object #define PTRBITS_REMOTE_BIT 0x1 diff --git a/src/libs/xpcom18a4/nsprpub/pr/include/prtypes.h b/src/libs/xpcom18a4/nsprpub/pr/include/prtypes.h index 0627f2b90..32218fd4f 100644 --- a/src/libs/xpcom18a4/nsprpub/pr/include/prtypes.h +++ b/src/libs/xpcom18a4/nsprpub/pr/include/prtypes.h @@ -59,6 +59,7 @@ #endif #include <stddef.h> +#include <stdint.h> /*********************************************************************** ** MACROS: PR_EXTERN diff --git a/src/libs/xpcom18a4/xpcom/base/nscore.h b/src/libs/xpcom18a4/xpcom/base/nscore.h index 48e12531d..be5c3d655 100644 --- a/src/libs/xpcom18a4/xpcom/base/nscore.h +++ b/src/libs/xpcom18a4/xpcom/base/nscore.h @@ -430,12 +430,18 @@ typedef PRUint32 nsresult; */ #endif +#ifndef VBOX /* * Use these macros to do 64bit safe pointer conversions. */ #define NS_PTR_TO_INT32(x) ((char *)(x) - (char *)0) #define NS_INT32_TO_PTR(x) ((void *)((char *)0 + (x))) +#else /* VBOX */ +// This stuff is (contrary to the comment) totally 64bit unsafe, so strip +// it down to only do one direction, which is used by the hashing code. +#define NS_PTR_TO_INT32(x) ((PRInt32)((char *)(x) - (char *)0)) +#endif /* VBOX */ /* * These macros allow you to give a hint to the compiler about branch diff --git a/src/libs/xpcom18a4/xpcom/ds/nsCheapSets.h b/src/libs/xpcom18a4/xpcom/ds/nsCheapSets.h index e51f146ab..79209ea85 100644 --- a/src/libs/xpcom18a4/xpcom/ds/nsCheapSets.h +++ b/src/libs/xpcom18a4/xpcom/ds/nsCheapSets.h @@ -82,7 +82,7 @@ public: } private: - typedef unsigned long PtrBits; + typedef PRUint64 PtrBits; /** Get the hash pointer (or null if we're not a hash) */ nsStringHashSet* GetHash() @@ -155,7 +155,7 @@ public: } private: - typedef unsigned long PtrBits; + typedef PRUint64 PtrBits; /** Get the hash pointer (or null if we're not a hash) */ nsInt32HashSet* GetHash() diff --git a/src/libs/xpcom18a4/xpcom/ds/nsVoidArray.h b/src/libs/xpcom18a4/xpcom/ds/nsVoidArray.h index 90a6260c7..24cf68d7b 100644 --- a/src/libs/xpcom18a4/xpcom/ds/nsVoidArray.h +++ b/src/libs/xpcom18a4/xpcom/ds/nsVoidArray.h @@ -375,7 +375,7 @@ public: PRBool EnumerateBackwards(nsVoidArrayEnumFunc aFunc, void* aData); private: - typedef unsigned long PtrBits; + typedef PRUint64 PtrBits; PRBool HasSingleChild() const { diff --git a/src/libs/xpcom18a4/xpcom/io/nsFastLoadService.cpp b/src/libs/xpcom18a4/xpcom/io/nsFastLoadService.cpp index 8176c8970..54892866d 100644 --- a/src/libs/xpcom18a4/xpcom/io/nsFastLoadService.cpp +++ b/src/libs/xpcom18a4/xpcom/io/nsFastLoadService.cpp @@ -394,7 +394,11 @@ nsFastLoadService::ComputeChecksum(nsIFile* aFile, if (NS_FAILED(rv)) return rv; +#ifndef VBOX mChecksumTable.Put(&key, NS_INT32_TO_PTR(checksum)); +#else /* VBOX */ + mChecksumTable.Put(&key, (void *)checksum); +#endif /* VBOX */ *aChecksum = checksum; return NS_OK; } @@ -417,7 +421,11 @@ nsFastLoadService::CacheChecksum(nsIFile* aFile, nsIObjectOutputStream *aStream) return rv; nsCStringKey key(path); +#ifndef VBOX mChecksumTable.Put(&key, NS_INT32_TO_PTR(checksum)); +#else /* VBOX */ + mChecksumTable.Put(&key, (void *)checksum); +#endif /* VBOX */ return NS_OK; } diff --git a/src/recompiler/qemu-lock.h b/src/recompiler/qemu-lock.h index 774b7a596..671ef2794 100644 --- a/src/recompiler/qemu-lock.h +++ b/src/recompiler/qemu-lock.h @@ -74,8 +74,7 @@ DECLINLINE(void) resetlock (spinlock_t *p) #ifdef VBOX DECLINLINE(int) testandset (int *p) { - - return ASMAtomicCmpXchgU32((uint32_t volatile *)p, 1, 0); + return ASMAtomicCmpXchgU32((volatile uint32_t *)p, 1, 0) ? 0 : 1; } #elif defined(__powerpc__) static inline int testandset (int *p) |