[Pkg-virtualbox-commits] [virtualbox] 01/05: New upstream version 5.2.6-dfsg
Gianfranco Costamagna
locutusofborg at moszumanska.debian.org
Tue Jan 16 21:35:58 UTC 2018
This is an automated email from the git hooks/post-receive script.
locutusofborg pushed a commit to branch master
in repository virtualbox.
commit 8268d6d01c371a9b868440e772331f771c16edc2
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date: Tue Jan 16 22:25:40 2018 +0100
New upstream version 5.2.6-dfsg
---
Config.kmk | 19 +-
Version.kmk | 2 +-
configure | 29 +-
doc/manual/user_ChangeLogImpl.xml | 160 +-
include/VBox/settings.h | 2 +
include/VBox/vmm/cpum.h | 26 +-
include/VBox/vmm/cpum.mac | 12 +-
include/VBox/vmm/cpumctx.h | 26 +-
include/VBox/vmm/pdmaudioifs.h | 5 +-
include/iprt/x86.h | 60 +
include/iprt/x86.mac | 11 +
src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp | 2 +
src/VBox/Additions/common/crOpenGL/entrypoints.pyc | Bin 5904 -> 5904 bytes
src/VBox/Additions/linux/installer/vboxadd.sh | 59 +-
src/VBox/Devices/Audio/DevHDA.cpp | 231 +-
src/VBox/Devices/Audio/DevHDA.h | 6 +-
src/VBox/Devices/Audio/DevHDACommon.cpp | 86 +-
src/VBox/Devices/Audio/DevHDACommon.h | 4 +
src/VBox/Devices/Audio/DrvAudioCommon.cpp | 2 +
src/VBox/Devices/Audio/DrvHostCoreAudio.cpp | 13 +-
src/VBox/Devices/Audio/DrvHostDSound.cpp | 37 +-
src/VBox/Devices/Audio/DrvHostValidationKit.cpp | 79 +-
src/VBox/Devices/Audio/HDACodec.cpp | 10 +-
src/VBox/Devices/Audio/HDACodec.h | 2 +-
src/VBox/Devices/Audio/HDAStream.cpp | 318 +-
src/VBox/Devices/Audio/HDAStream.h | 12 +-
src/VBox/Devices/Audio/HDAStreamMap.cpp | 2 +-
src/VBox/Devices/Audio/HDAStreamPeriod.cpp | 2 +-
.../Devices/Audio/VBoxMMNotificationClient.cpp | 60 +-
.../Graphics/BIOS/VBoxVgaBiosAlternative286.asm | 6 +-
.../Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum | 2 +-
.../Graphics/BIOS/VBoxVgaBiosAlternative386.asm | 6 +-
.../Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum | 2 +-
.../Graphics/BIOS/VBoxVgaBiosAlternative8086.asm | 6 +-
.../BIOS/VBoxVgaBiosAlternative8086.md5sum | 2 +-
src/VBox/Devices/Graphics/DevVGA_VBVA.cpp | 15 +-
src/VBox/Devices/Graphics/DevVGA_VDMA.cpp | 60 +-
src/VBox/Devices/Makefile.kmk | 15 +-
.../Devices/PC/BIOS/VBoxBiosAlternative286.asm | 4 +-
.../Devices/PC/BIOS/VBoxBiosAlternative286.md5sum | 2 +-
.../Devices/PC/BIOS/VBoxBiosAlternative386.asm | 4 +-
.../Devices/PC/BIOS/VBoxBiosAlternative386.md5sum | 2 +-
.../Devices/PC/BIOS/VBoxBiosAlternative8086.asm | 4 +-
.../Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum | 2 +-
src/VBox/Devices/VMMDev/VMMDev.cpp | 24 +-
src/VBox/Devices/testcase/Makefile.kmk | 3 +
src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp | 2 +
.../Frontends/VBoxManage/VBoxManageModifyVM.cpp | 12 +
src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts | 30 +-
src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts | 2 +-
src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts | 837 +-
.../Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts | 26 +-
src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts | 32 +-
.../Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts | 94 +-
.../Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts | 6 +-
src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts | 10033 +++++++------------
.../VirtualBox/src/UITakeSnapshotDialog.cpp | 22 +-
.../VirtualBox/src/extensions/QIArrowSplitter.cpp | 7 +-
.../VirtualBox/src/extensions/QIMessageBox.cpp | 6 +-
.../src/hostnetwork/UIHostNetworkManager.cpp | 3 +-
.../VirtualBox/src/medium/UIMediumManager.cpp | 3 +-
.../VirtualBox/src/runtime/UIIndicatorsPool.cpp | 7 +-
.../src/runtime/UIStatusBarEditorWindow.cpp | 7 +-
.../VirtualBox/src/runtime/UIVMCloseDialog.cpp | 64 +-
.../VirtualBox/src/selector/UISnapshotPane.cpp | 3 +-
.../settings/machine/UIMachineSettingsStorage.cpp | 3 +-
.../settings/machine/UIMachineSettingsSystem.cpp | 3 +-
.../VirtualBox/src/widgets/UIFilmContainer.cpp | 7 +-
.../VirtualBox/src/widgets/UIHostComboEditor.cpp | 7 +-
.../VirtualBox/src/widgets/UIHotKeyEditor.cpp | 7 +-
.../VirtualBox/src/widgets/UIMiniToolBar.cpp | 1 +
.../src/widgets/UIPortForwardingTable.cpp | 3 +-
src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc | Bin 23671 -> 23671 bytes
.../GuestHost/OpenGL/packer/pack_currenttypes.pyc | Bin 2110 -> 2110 bytes
.../GuestHost/OpenGL/state_tracker/convert.pyc | Bin 2087 -> 2087 bytes
.../OpenGL/state_tracker/get_components.pyc | Bin 5791 -> 5791 bytes
.../GuestHost/OpenGL/state_tracker/state_pixel.c | 10 +-
src/VBox/HostServices/SharedClipboard/x11-stub.cpp | 10 +-
.../SharedOpenGL/crserverlib/get_sizes.pyc | Bin 17777 -> 17777 bytes
.../SharedOpenGL/crserverlib/server_glsl.c | 11 +-
.../SharedOpenGL/crserverlib/server_lists.c | 6 +
.../SharedOpenGL/crserverlib/server_texture.c | 10 +-
.../SharedOpenGL/unpacker/unpack_stipple.c | 20 +-
.../SharedOpenGL/unpacker/unpack_texture.c | 10 +-
src/VBox/Installer/win/NLS/zh_TW.wxl | 288 +-
src/VBox/Main/idl/VirtualBox.xidl | 16 +
src/VBox/Main/include/MachineImpl.h | 2 +
src/VBox/Main/src-all/Global.cpp | 24 +-
src/VBox/Main/src-client/BusAssignmentManager.cpp | 129 +-
src/VBox/Main/src-client/ConsoleImpl2.cpp | 77 +-
src/VBox/Main/src-client/HGCM.cpp | 37 +-
src/VBox/Main/src-client/VMMDevInterface.cpp | 8 +-
src/VBox/Main/src-server/MachineImpl.cpp | 26 +
src/VBox/Main/xml/Settings.cpp | 22 +-
src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c | 19 +-
src/VBox/VMM/VMMR0/HMR0A.asm | 93 +
src/VBox/VMM/VMMR0/HMVMXR0.cpp | 2 +
src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp | 180 +-
src/VBox/VMM/VMMR3/HM.cpp | 34 +
src/VBox/VMM/VMMR3/PGMMap.cpp | 8 +-
src/VBox/VMM/VMMR3/PGMPhys.cpp | 6 +-
src/VBox/VMM/include/CPUMInternal.mac | 22 +-
src/VBox/VMM/include/HMInternal.h | 19 +-
src/libs/xpcom18a4/python/Makefile.kmk | 35 +-
src/libs/xpcom18a4/python/src/VariantUtils.cpp | 6 +-
105 files changed, 5678 insertions(+), 8115 deletions(-)
diff --git a/Config.kmk b/Config.kmk
index aa8f2cc..d029f75 100644
--- a/Config.kmk
+++ b/Config.kmk
@@ -18,6 +18,7 @@
# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
#
+
# Marker.
VBOX_ROOT_CONFIG_KMK_INCLUDED = 1
@@ -439,6 +440,8 @@ VBOX_WITH_NAT_SERVICE = 1
VBOX_WITH_E1000 = 1
# Enable the Virtio feature.
VBOX_WITH_VIRTIO = 1
+# HDA emulation is Intel HDA by default.
+VBOX_WITH_INTEL_HDA = 1
ifn1of ($(KBUILD_TARGET), win darwin)
# Enable OSS audio support.
VBOX_WITH_AUDIO_OSS = 1
@@ -670,12 +673,14 @@ if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 linux.x86
VBOX_WITH_VIDEOREC = 1
# Enable VPX (VP8 / VP9 codec), used for video capturing.
VBOX_WITH_LIBVPX = 1
- # Enables audio support for VM video capturing.
- VBOX_WITH_AUDIO_VIDEOREC = 1
- # Enables libopus (Opus), used for encoding audio into VM video capturing files.
- VBOX_WITH_LIBOPUS = 1
- # Enable SEE (+ AVX) optimizations for Opus.
- VBOX_WITH_OPUS_SSE = 1
+ if !defined(VBOX_OSE)
+ # Enables audio support for VM video capturing.
+ VBOX_WITH_AUDIO_VIDEOREC = 1
+ # Enables libopus (Opus), used for encoding audio into VM video capturing files.
+ VBOX_WITH_LIBOPUS = 1
+ # Enable SEE (+ AVX) optimizations for Opus.
+ VBOX_WITH_OPUS_SSE = 1
+ endif
endif
# Enable shared folders
VBOX_WITH_SHARED_FOLDERS = 1
@@ -7092,7 +7097,7 @@ endif
SVN ?= svn$(HOSTSUFF_EXE)
VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
ifndef VBOX_SVN_REV
- VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 119758 $ )
+ VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 120293 $ )
VBOX_SVN_DEP := $(firstword $(wildcard $(PATH_ROOT)/.svn/wc.db $(abspath $(PATH_ROOT)/../.svn/wc.db) $(abspath $(PATH_ROOT)/../../.svn/wc.db) $(PATH_ROOT)/.svn/entries))
ifeq ($(which $(SVN)),)
VBOX_SVN_DEP :=
diff --git a/Version.kmk b/Version.kmk
index 0c07562..e9b2d23 100644
--- a/Version.kmk
+++ b/Version.kmk
@@ -25,7 +25,7 @@ VBOX_VERSION_MINOR = 2
# 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 = 4
+VBOX_VERSION_BUILD = 6
# This can be overridden in LocalConfig.kmk or elsewhere.
# For the convention, see checks near the end of Config.kmk.
VBOX_BUILD_PUBLISHER =
diff --git a/configure b/configure
index bd177bf..ca59623 100755
--- a/configure
+++ b/configure
@@ -1766,31 +1766,7 @@ EOF
fail
else
if test_execute; then
- cat > $ODIR.tmp_src.c << EOF
-#include <linux/version.h>
-int printf(const char *format, ...);
-int main(void)
-{
- return LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0) ? 1 : 0;
-}
-EOF
- echo "compiling the following source file:" >> $LOG
- cat $ODIR.tmp_src.c >> $LOG
- echo "using the following command line:" >> $LOG
- echo "$CC -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.c -nostdinc -I$LINUX/include " \
- "-I$LINUX/include/generated/uapi" >> $LOG
- $CC -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.c -nostdinc -I$LINUX/include \
- -I$LINUX/include/generated/uapi >> $LOG 2>&1
- if [ $? -eq 0 ]; then
- $ODIR.tmp_out
- if [ $? -ne 0 ]; then
- cnf_append "VBOX_WITH_VBOXDRV" ""
- cnf_append "VBOX_WITH_ADDITION_DRIVERS" ""
- echo "Detected Linux >= 4.8 -- disabling compiling of Linux kernel modules."
- else
- cnf_append "VBOX_LINUX_SRC" "`cd $LINUX ; pwd`"
- fi
- fi
+ cnf_append "VBOX_LINUX_SRC" "`cd $LINUX ; pwd`"
fi
fi
}
@@ -2822,8 +2798,7 @@ if [ "$OS" = "linux" ]; then
check_linux
else
cnf_append "VBOX_LINUX_SRC" ""
- cnf_append "VBOX_WITH_VBOXDRV" ""
- cnf_append "VBOX_WITH_ADDITION_DRIVERS" ""
+ cnf_append "VBOX_WITHOUT_LINUX_TEST_BUILDS" "1"
fi
if [ $ONLY_ADDITIONS -eq 0 ]; then
if [ $WITH_ALSA -eq 1 ]; then
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
index ebf6ef4..6edfaa2 100644
--- a/doc/manual/user_ChangeLogImpl.xml
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -3,6 +3,50 @@
<chapter> <!-- HACK ALERT! Seems we must have a single top level element for xi:include to work.
So, we use chapter and xpointer="xpointer(/chapter/)" with xi:include. -->
+ <sect1>
+ <title>Version 5.2.6 (2018-01-15)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>GUI: fixed occasional screen corruption when host screen resolution
+ is changed</para>
+ </listitem>
+
+ <listitem>
+ <para>User interface: increase proposed disk size when creating new VMs
+ for Windows 7 and newer</para>
+ </listitem>
+
+ <listitem>
+ <para>User interface: various improvements for high resolution
+ screens</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: Fixed problems using 256MB VRAM in raw-mode VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: implemented support for audio playback and recording for
+ macOS guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: further timing improvements for Windows 10 guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed problem accessing mini-toolbar under
+ XFCE (bug #17280, contributed by Dusan Gallo)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
<sect1>
<title>Version 5.2.4 (2017-12-19)</title>
@@ -12,6 +56,11 @@
<itemizedlist>
<listitem>
+ <para>User interface: Adjusting desktop file for X11 window managers
+ (bug #17312)</para>
+ </listitem>
+
+ <listitem>
<para>User interface: various high resolution display adjustments</para>
</listitem>
@@ -373,117 +422,6 @@
<para>OVF: when importing an appliance with XHCI controller, don't
add an OHCI controller</para>
</listitem>
-
- <listitem>
- <para>Mac OS X hosts: fixed a GUI crash if Spotlight is used from
- file dialogs (5.1.20 regression; bugs #16935, #16953)</para>
- </listitem>
-
- <listitem>
- <para>Linux hosts: fixed creating fixed sized VDI images
- (bug #17010)</para>
- </listitem>
-
- <listitem>
- <para>Linux hosts / guests: fixes for Linux 4.4 of openSUSE Leap 42.3
- (bug #16966)</para>
- </listitem>
-
- <listitem>
- <para>Bridged networking: align outgoing packet at word boundary,
- preventing Windows host crash in MsLbfoProvider</para>
- </listitem>
-
- <listitem>
- <para>Linux Additions: kernel drm driver support for custom EL7
- Linux 3.10 kernel</para>
- </listitem>
-
- <listitem>
- <para>Solaris Additions: hide an informational message on the bootup
- console</para>
- </listitem>
-
- </itemizedlist>
- </sect1>
- <sect1>
- <title>Version 5.1.30 (2017-10-16)</title>
-
- <para>This is a maintenance release. The following items were fixed and/or
- added:</para>
-
- <itemizedlist>
-
- <listitem>
- <para>GUI: translation updates</para>
- </listitem>
-
- <listitem>
- <para>GUI: Fixed double mouse cursor when using mouse integration
- without Guest Additions, actually a Qt 5.6 bug fixed with QT 5.6.3
- (Mac OS X hosts only; bug #15610)</para>
- </listitem>
-
- <listitem>
- <para>Solaris hosts: allow increasing MTU size for host-only adapter to
- 9706 bytes to support jumbo frames</para>
- </listitem>
-
- <listitem>
- <para>Linux hosts: glibc 2.26 compile fix</para>
- </listitem>
-
- <listitem>
- <para>Windows Additions: 3D related crash fix (bugs #17082, #17092)</para>
- </listitem>
-
- </itemizedlist>
- </sect1>
-
- <sect1>
- <title>Version 5.1.28 (2017-09-13)</title>
-
- <para>This is a maintenance release. The following items were fixed and/or
- added:</para>
-
- <itemizedlist>
-
- <listitem>
- <para>GUI: mouse events did not reach host windows behind the transparent
- VM window (Mac OS X hosts only; bug #16246)</para>
- </listitem>
-
- <listitem>
- <para>Audio: fixed accidental crashes when using the AC'97 sound
- emulation (bug #16959)</para>
- </listitem>
-
- <listitem>
- <para>Audio: fixed crash when default input or output devices have changed
- (bugs #16968, #16969, #17004)</para>
- </listitem>
- <listitem>
- <para>Audio: fixed recording when using the ALSA backend</para>
- </listitem>
-
- <listitem>
- <para>Audio: fixed handle leak when using the OSS backend</para>
- </listitem>
-
- <listitem>
- <para>E1000: fixed a crash related to VLAN traffic over internal
- network (5.1.26 regression; bug #16960)</para>
- </listitem>
-
- <listitem>
- <para>NAT: apply <emphasis>--natbindip1</emphasis> to TCP connections
- (bug #16478)</para>
- </listitem>
-
- <listitem>
- <para>OVF: when importing an appliance with XHCI controller, don't
- add an OHCI controller</para>
- </listitem>
<listitem>
<para>Mac OS X hosts: fixed a GUI crash if Spotlight is used from
file dialogs (5.1.20 regression; bugs #16935, #16953)</para>
diff --git a/include/VBox/settings.h b/include/VBox/settings.h
index 3651839..35d0c87 100644
--- a/include/VBox/settings.h
+++ b/include/VBox/settings.h
@@ -904,6 +904,8 @@ struct Hardware
fPAE,
fAPIC, // requires settings version 1.16 (VirtualBox 5.1)
fX2APIC; // requires settings version 1.16 (VirtualBox 5.1)
+ bool fIBPBOnVMExit; //< added out of cycle, after 1.16 was out.
+ bool fIBPBOnVMEntry; //< added out of cycle, after 1.16 was out.
typedef enum LongModeType { LongMode_Enabled, LongMode_Disabled, LongMode_Legacy } LongModeType;
LongModeType enmLongMode;
uint32_t cCPUs;
diff --git a/include/VBox/vmm/cpum.h b/include/VBox/vmm/cpum.h
index 63fac33..f80dd28 100644
--- a/include/VBox/vmm/cpum.h
+++ b/include/VBox/vmm/cpum.h
@@ -136,7 +136,11 @@ typedef enum CPUMMICROARCH
kCpumMicroarch_Intel_Core7_Haswell,
kCpumMicroarch_Intel_Core7_Broadwell,
kCpumMicroarch_Intel_Core7_Skylake,
- kCpumMicroarch_Intel_Core7_Cannonlake,
+ kCpumMicroarch_Intel_Core7_KabyLake,
+ kCpumMicroarch_Intel_Core7_CoffeeLake,
+ kCpumMicroarch_Intel_Core7_CannonLake,
+ kCpumMicroarch_Intel_Core7_IceLake,
+ kCpumMicroarch_Intel_Core7_TigerLake,
kCpumMicroarch_Intel_Core7_End,
kCpumMicroarch_Intel_Atom_First,
@@ -146,9 +150,19 @@ typedef enum CPUMMICROARCH
kCpumMicroarch_Intel_Atom_Silvermont, /**< 22nm */
kCpumMicroarch_Intel_Atom_Airmount, /**< 14nm */
kCpumMicroarch_Intel_Atom_Goldmont, /**< 14nm */
+ kCpumMicroarch_Intel_Atom_GoldmontPlus, /**< 14nm */
kCpumMicroarch_Intel_Atom_Unknown,
kCpumMicroarch_Intel_Atom_End,
+
+ kCpumMicroarch_Intel_Phi_First,
+ kCpumMicroarch_Intel_Phi_KnightsFerry = kCpumMicroarch_Intel_Phi_First,
+ kCpumMicroarch_Intel_Phi_KnightsCorner,
+ kCpumMicroarch_Intel_Phi_KnightsLanding,
+ kCpumMicroarch_Intel_Phi_KnightsHill,
+ kCpumMicroarch_Intel_Phi_KnightsMill,
+ kCpumMicroarch_Intel_Phi_End,
+
kCpumMicroarch_Intel_P6_Core_Atom_End,
kCpumMicroarch_Intel_NB_First,
@@ -1011,6 +1025,14 @@ typedef struct CPUMFEATURES
uint32_t fClFlush : 1;
/** Supports CLFLUSHOPT. */
uint32_t fClFlushOpt : 1;
+ /** Supports IA32_PRED_CMD.IBPB. */
+ uint32_t fIbpb : 1;
+ /** Supports IA32_SPEC_CTRL.IBRS. */
+ uint32_t fIbrs : 1;
+ /** Supports IA32_SPEC_CTRL.STIBP. */
+ uint32_t fStibp : 1;
+ /** Supports IA32_ARCH_CAP. */
+ uint32_t fArchCap : 1;
/** Supports AMD 3DNow instructions. */
uint32_t f3DNow : 1;
@@ -1044,7 +1066,7 @@ typedef struct CPUMFEATURES
uint32_t fVmx : 1;
/** Alignment padding / reserved for future use. */
- uint32_t fPadding : 23;
+ uint32_t fPadding : 19;
/** SVM: Supports Nested-paging. */
uint32_t fSvmNestedPaging : 1;
diff --git a/include/VBox/vmm/cpum.mac b/include/VBox/vmm/cpum.mac
index 0496314..e68d38f 100644
--- a/include/VBox/vmm/cpum.mac
+++ b/include/VBox/vmm/cpum.mac
@@ -146,6 +146,7 @@ endstruc
%define XSTATE_SIZE 8192
+;; Note! Updates here must be reflected in CPUMInternal.mac too!
struc CPUMCTX
.eax resq 1
.ecx resq 1
@@ -249,14 +250,13 @@ struc CPUMCTX
.aXcr resq 2
.fXStateMask resq 1
.pXStateR0 RTR0PTR_RES 1
+ alignb 8
.pXStateR3 RTR3PTR_RES 1
+ alignb 8
.pXStateRC RTRCPTR_RES 1
.aoffXState resw 64
-%if HC_ARCH_BITS == 64
- .abPadding resb 4
-%else
- .abPadding resb 12
-%endif
+ .fWorldSwitcher resd 1
+ alignb 8
.hwvirt.svm.uMsrHSavePa resq 1
.hwvirt.svm.GCPhysVmcb resq 1
.hwvirt.svm.pVmcbR0 RTR0PTR_RES 1
@@ -283,6 +283,8 @@ struc CPUMCTX
alignb 64
endstruc
+%define CPUMCTX_WSF_IBPB_EXIT RT_BIT_32(0)
+%define CPUMCTX_WSF_IBPB_ENTRY RT_BIT_32(1)
%define CPUMSELREG_FLAGS_VALID 0x0001
%define CPUMSELREG_FLAGS_STALE 0x0002
diff --git a/include/VBox/vmm/cpumctx.h b/include/VBox/vmm/cpumctx.h
index 86948ce..61d2394 100644
--- a/include/VBox/vmm/cpumctx.h
+++ b/include/VBox/vmm/cpumctx.h
@@ -457,15 +457,21 @@ typedef struct CPUMCTX
/** Pointer to the FPU/SSE/AVX/XXXX state ring-0 mapping. */
R0PTRTYPE(PX86XSAVEAREA) pXStateR0;
+#if HC_ARCH_BITS == 32
+ uint32_t uXStateR0Padding;
+#endif
/** Pointer to the FPU/SSE/AVX/XXXX state ring-3 mapping. */
R3PTRTYPE(PX86XSAVEAREA) pXStateR3;
+#if HC_ARCH_BITS == 32
+ uint32_t uXStateR3Padding;
+#endif
/** Pointer to the FPU/SSE/AVX/XXXX state raw-mode mapping. */
RCPTRTYPE(PX86XSAVEAREA) pXStateRC;
/** State component offsets into pXState, UINT16_MAX if not present. */
uint16_t aoffXState[64];
- /** 724 - Size padding. */
- uint8_t abPadding[HC_ARCH_BITS == 64 ? 4 : 12];
+ /** 0x2d4 - World switcher flags, CPUMCTX_WSF_XXX. */
+ uint32_t fWorldSwitcher;
/** 728 - Hardware virtualization state. */
struct
@@ -578,9 +584,9 @@ AssertCompileMemberOffset(CPUMCTX, msrKERNELGSBASE, 536);
AssertCompileMemberOffset(CPUMCTX, aXcr, 552);
AssertCompileMemberOffset(CPUMCTX, fXStateMask, 568);
AssertCompileMemberOffset(CPUMCTX, pXStateR0, 576);
-AssertCompileMemberOffset(CPUMCTX, pXStateR3, HC_ARCH_BITS == 64 ? 584 : 580);
-AssertCompileMemberOffset(CPUMCTX, pXStateRC, HC_ARCH_BITS == 64 ? 592 : 584);
-AssertCompileMemberOffset(CPUMCTX, aoffXState, HC_ARCH_BITS == 64 ? 596 : 588);
+AssertCompileMemberOffset(CPUMCTX, pXStateR3, 584);
+AssertCompileMemberOffset(CPUMCTX, pXStateRC, 592);
+AssertCompileMemberOffset(CPUMCTX, aoffXState, 596);
AssertCompileMemberOffset(CPUMCTX, hwvirt, 728);
AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.uMsrHSavePa, 728);
AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.GCPhysVmcb, 736);
@@ -736,6 +742,16 @@ AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(s,n.) gs, CPUMC
#endif /* !VBOX_FOR_DTRACE_LIB */
+
+/** @name CPUMCTX_WSF_XXX
+ * @{ */
+/** Touch IA32_PRED_CMD.IBPB on VM exit. */
+#define CPUMCTX_WSF_IBPB_EXIT RT_BIT_32(0)
+/** Touch IA32_PRED_CMD.IBPB on VM entry. */
+#define CPUMCTX_WSF_IBPB_ENTRY RT_BIT_32(1)
+/** @} */
+
+
/**
* Additional guest MSRs (i.e. not part of the CPU context structure).
*
diff --git a/include/VBox/vmm/pdmaudioifs.h b/include/VBox/vmm/pdmaudioifs.h
index 953dd47..5850137 100644
--- a/include/VBox/vmm/pdmaudioifs.h
+++ b/include/VBox/vmm/pdmaudioifs.h
@@ -493,9 +493,8 @@ typedef struct PDMAUDIOPCMPROPS
/** Calculates the cShift value of given sample bits and audio channels.
* Note: Does only support mono/stereo channels for now. */
#define PDMAUDIOPCMPROPS_MAKE_SHIFT_PARMS(cBits, cChannels) ((cChannels == 2) + (cBits / 16))
-/** Calculates the cShift value of a PDMAUDIOPCMPROPS structure.
- * Note: Does only support mono/stereo channels for now. */
-#define PDMAUDIOPCMPROPS_MAKE_SHIFT(pProps) PDMAUDIOPCMPROPS_MAKE_SHIFT_PARMS((pProps)->cChannels == 2) + (pProps)->cBits / 16)
+/** Calculates the cShift value of a PDMAUDIOPCMPROPS structure. */
+#define PDMAUDIOPCMPROPS_MAKE_SHIFT(pProps) PDMAUDIOPCMPROPS_MAKE_SHIFT_PARMS((pProps)->cBits, (pProps)->cChannels)
/** Converts (audio) frames to bytes.
* Needs the cShift value set correctly, using PDMAUDIOPCMPROPS_MAKE_SHIFT. */
#define PDMAUDIOPCMPROPS_F2B(pProps, frames) ((frames) << (pProps)->cShift)
diff --git a/include/iprt/x86.h b/include/iprt/x86.h
index 0d89b63..8e00242 100644
--- a/include/iprt/x86.h
+++ b/include/iprt/x86.h
@@ -597,6 +597,28 @@ typedef const X86CPUIDFEATEDX *PCX86CPUIDFEATEDX;
/** ECX Bit 0 - PREFETCHWT1 - Supports the PREFETCHWT1 instruction. */
#define X86_CPUID_STEXT_FEATURE_ECX_PREFETCHWT1 RT_BIT_32(0)
+/** ECX Bit 2 - UIMP - Supports user mode instruction prevention. */
+#define X86_CPUID_STEXT_FEATURE_ECX_UMIP RT_BIT_32(2)
+/** ECX Bit 3 - PKU - Supports protection keys for user-mode pages. */
+#define X86_CPUID_STEXT_FEATURE_ECX_PKU RT_BIT_32(3)
+/** ECX Bit 4 - OSPKE - Protection keys for user mode pages enabled. */
+#define X86_CPUID_STEXT_FEATURE_ECX_OSPKE RT_BIT_32(4)
+/** ECX Bits 17-21 - MAWAU - Value used by BNDLDX and BNDSTX. */
+#define X86_CPUID_STEXT_FEATURE_ECX_MAWAU UINT32_C(0x003e0000)
+/** ECX Bit 22 - RDPID - Support pread process ID. */
+#define X86_CPUID_STEXT_FEATURE_ECX_RDPID RT_BIT_32(2)
+/** ECX Bit 30 - SGX_LC - Supports SGX launch configuration. */
+#define X86_CPUID_STEXT_FEATURE_ECX_SGX_LC RT_BIT_32(30)
+
+/** EDX Bit 26 - IBRS & IBPB - Supports the IBRS flag in IA32_SPEC_CTRL and
+ * IBPB command in IA32_PRED_CMD. */
+#define X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB RT_BIT_32(26)
+/** EDX Bit 27 - IBRS & IBPB - Supports the STIBP flag in IA32_SPEC_CTRL. */
+#define X86_CPUID_STEXT_FEATURE_EDX_STIBP RT_BIT_32(27)
+
+/** EDX Bit 29 - ARCHCAP - Supports the IA32_ARCH_CAP MSR. */
+#define X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP RT_BIT_32(29)
+
/** @} */
@@ -741,6 +763,22 @@ typedef const X86CPUIDFEATEDX *PCX86CPUIDFEATEDX;
/** @} */
+/** @name CPUID AMD extended feature extensions ID (EBX).
+ * CPUID query with EAX=0x80000008.
+ * @{
+ */
+/** Bit 0 - CLZERO - Clear zero instruction. */
+#define X86_CPUID_AMD_EFEID_EBX_CLZERO RT_BIT_32(0)
+/** Bit 1 - IRPerf - Instructions retired count support. */
+#define X86_CPUID_AMD_EFEID_EBX_IRPERF RT_BIT_32(1)
+/** Bit 2 - XSaveErPtr - Always XSAVE* and XRSTR* error pointers. */
+#define X86_CPUID_AMD_EFEID_EBX_XSAVE_ER_PTR RT_BIT_32(2)
+/* AMD pipeline length: 9 feature bits ;-) */
+/** Bit 12 - IBPB - Supports the IBPB command in IA32_PRED_CMD. */
+#define X86_CPUID_AMD_EFEID_EBX_IBPB RT_BIT_32(12)
+/** @} */
+
+
/** @name CPUID AMD SVM Feature information.
* CPUID query with EAX=0x8000000a.
* @{
@@ -1113,6 +1151,20 @@ AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00040000)) == 0);
/** Per-processor TSC adjust MSR. */
#define MSR_IA32_TSC_ADJUST 0x3B
+/** Spectre control register.
+ * Logical processor scope. Reset value 0, unaffected by SIPI & INIT. */
+#define MSR_IA32_SPEC_CTRL 0x48
+/** IBRS - Indirect branch restricted speculation. */
+#define MSR_IA32_SPEC_CTRL_F_IBRS RT_BIT_32(0)
+/** STIBP - Single thread indirect branch predictors. */
+#define MSR_IA32_SPEC_CTRL_F_STIBP RT_BIT_32(1)
+
+/** Prediction command register.
+ * Write only, logical processor scope, no state since write only. */
+#define MSR_IA32_PRED_CMD 0x49
+/** IBPB - Indirect branch prediction barrie when written as 1. */
+#define MSR_IA32_PRED_CMD_F_IBPB RT_BIT_32(0)
+
/** BIOS update trigger (microcode update). */
#define MSR_IA32_BIOS_UPDT_TRIG 0x79
@@ -1148,6 +1200,14 @@ AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00040000)) == 0);
/** MTRR Capabilities. */
#define MSR_IA32_MTRR_CAP 0xFE
+/** Architecture capabilities (bugfixes).
+ * @note May move */
+#define MSR_IA32_ARCH_CAP UINT32_C(0x10a)
+/** CPU is no subject to spectre problems. */
+#define MSR_IA32_ARCH_CAP_F_SPECTRE_FIX RT_BIT_32(0)
+/** CPU has better IBRS and you can leave it on all the time. */
+#define MSR_IA32_ARCH_CAP_F_BETTER_IBRS RT_BIT_32(1)
+
/** Cache control/info. */
#define MSR_BBL_CR_CTL3 UINT32_C(0x11e)
diff --git a/include/iprt/x86.mac b/include/iprt/x86.mac
index 245a558..d52ea11 100644
--- a/include/iprt/x86.mac
+++ b/include/iprt/x86.mac
@@ -176,6 +176,9 @@
%define X86_CPUID_STEXT_FEATURE_EBX_AVX512CD RT_BIT_32(28)
%define X86_CPUID_STEXT_FEATURE_EBX_SHA RT_BIT_32(29)
%define X86_CPUID_STEXT_FEATURE_ECX_PREFETCHWT1 RT_BIT_32(0)
+%define X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB RT_BIT_32(26)
+%define X86_CPUID_STEXT_FEATURE_EDX_STIBP RT_BIT_32(27)
+%define X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP RT_BIT_32(29)
%define X86_CPUID_EXT_FEATURE_ECX_LAHF_SAHF RT_BIT_32(0)
%define X86_CPUID_EXT_FEATURE_EDX_SYSCALL RT_BIT_32(11)
%define X86_CPUID_EXT_FEATURE_EDX_NX RT_BIT_32(20)
@@ -379,6 +382,11 @@
%define MSR_IA32_FEATURE_CONTROL_SMX_VMXON RT_BIT_32(1)
%define MSR_IA32_FEATURE_CONTROL_VMXON RT_BIT_32(2)
%define MSR_IA32_TSC_ADJUST 0x3B
+%define MSR_IA32_SPEC_CTRL 0x48
+%define MSR_IA32_SPEC_CTRL_F_IBRS RT_BIT_32(0)
+%define MSR_IA32_SPEC_CTRL_F_STIBP RT_BIT_32(1)
+%define MSR_IA32_PRED_CMD 0x49
+%define MSR_IA32_PRED_CMD_F_IBPB RT_BIT_32(0)
%define MSR_IA32_BIOS_UPDT_TRIG 0x79
%define MSR_IA32_BIOS_SIGN_ID 0x8B
%define MSR_IA32_SMM_MONITOR_CTL 0x9B
@@ -392,6 +400,9 @@
%define MSR_IA32_MPERF 0xE7
%define MSR_IA32_APERF 0xE8
%define MSR_IA32_MTRR_CAP 0xFE
+%define MSR_IA32_ARCH_CAP 0x10a
+%define MSR_IA32_ARCH_CAP_F_SPECTRE_FIX RT_BIT_32(0)
+%define MSR_IA32_ARCH_CAP_F_BETTER_IBRS RT_BIT_32(1)
%define MSR_BBL_CR_CTL3 0x11e
%ifndef MSR_IA32_SYSENTER_CS
%define MSR_IA32_SYSENTER_CS 0x174
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
index 73b7362..1b8b5e2 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
@@ -2057,6 +2057,8 @@ static int vgdrvCheckIfVmmReqIsAllowed(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSI
return VINF_SUCCESS;
break;
case kLevel_TrustedUsers:
+ if (pSession->fUserSession)
+ break;
case kLevel_AllUsers:
return VINF_SUCCESS;
}
diff --git a/src/VBox/Additions/common/crOpenGL/entrypoints.pyc b/src/VBox/Additions/common/crOpenGL/entrypoints.pyc
index bc9a489..45a998e 100644
Binary files a/src/VBox/Additions/common/crOpenGL/entrypoints.pyc and b/src/VBox/Additions/common/crOpenGL/entrypoints.pyc differ
diff --git a/src/VBox/Additions/linux/installer/vboxadd.sh b/src/VBox/Additions/linux/installer/vboxadd.sh
index 29a5372..3d4a6d1 100755
--- a/src/VBox/Additions/linux/installer/vboxadd.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd.sh
@@ -1,7 +1,7 @@
#! /bin/sh
# $Id: vboxadd.sh $
## @file
-# Linux Additions kernel module init script ($Revision: 118913 $)
+# Linux Additions kernel module init script ($Revision: 120119 $)
#
#
@@ -128,11 +128,12 @@ log()
echo "${1}" >> "${LOG}"
}
-dev=/dev/vboxguest
-userdev=/dev/vboxuser
+dev=vboxguest
+userdev=vboxuser
config=/var/lib/VBoxGuestAdditions/config
owner=vboxadd
group=1
+usergroup=vboxadd
if test -r $config; then
. $config
@@ -164,7 +165,7 @@ running_vboxvideo()
do_vboxguest_non_udev()
{
- if [ ! -c $dev ]; then
+ if [ ! -c /dev/$dev ]; then
maj=`sed -n 's;\([0-9]\+\) vboxguest;\1;p' /proc/devices`
if [ ! -z "$maj" ]; then
min=0
@@ -179,32 +180,32 @@ do_vboxguest_non_udev()
fail "Cannot locate the VirtualBox device"
}
- mknod -m 0664 $dev c $maj $min || {
+ mknod -m 0660 /dev/$dev c $maj $min || {
rmmod vboxguest 2>/dev/null
- fail "Cannot create device $dev with major $maj and minor $min"
+ fail "Cannot create device /dev/$dev with major $maj and minor $min"
}
fi
- chown $owner:$group $dev 2>/dev/null || {
- rm -f $dev 2>/dev/null
- rm -f $userdev 2>/dev/null
+ chown $owner:$group /dev/$dev 2>/dev/null || {
+ rm -f /dev/$dev 2>/dev/null
+ rm -f /dev/$userdev 2>/dev/null
rmmod vboxguest 2>/dev/null
- fail "Cannot change owner $owner:$group for device $dev"
+ fail "Cannot change owner $owner:$group for device /dev/$dev"
}
- if [ ! -c $userdev ]; then
+ if [ ! -c /dev/$userdev ]; then
maj=10
min=`sed -n 's;\([0-9]\+\) vboxuser;\1;p' /proc/misc`
if [ ! -z "$min" ]; then
- mknod -m 0666 $userdev c $maj $min || {
- rm -f $dev 2>/dev/null
+ mknod -m 0660 /dev/$userdev c $maj $min || {
+ rm -f /dev/$dev 2>/dev/null
rmmod vboxguest 2>/dev/null
- fail "Cannot create device $userdev with major $maj and minor $min"
+ fail "Cannot create device /dev/$userdev with major $maj and minor $min"
}
- chown $owner:$group $userdev 2>/dev/null || {
- rm -f $dev 2>/dev/null
- rm -f $userdev 2>/dev/null
+ chown $owner:$usergroup /dev/$userdev 2>/dev/null || {
+ rm -f /dev/$dev 2>/dev/null
+ rm -f /dev/$userdev 2>/dev/null
rmmod vboxguest 2>/dev/null
- fail "Cannot change owner $owner:$group for device $userdev"
+ fail "Cannot change owner $owner:$usergroup for device /dev/$userdev"
}
fi
fi
@@ -220,12 +221,12 @@ start()
ps -A -o comm | grep -q '/*udevd$' 2>/dev/null ||
no_udev=1
running_vboxguest || {
- rm -f $dev || {
- fail "Cannot remove $dev"
+ rm -f /dev/$dev || {
+ fail "Cannot remove /dev/$dev"
}
- rm -f $userdev || {
- fail "Cannot remove $userdev"
+ rm -f /dev/$userdev || {
+ fail "Cannot remove /dev/$userdev"
}
$MODPROBE vboxguest >/dev/null 2>&1 || {
@@ -369,10 +370,14 @@ create_vbox_user()
log "Creating user for the Guest Additions."
# This is the LSB version of useradd and should work on recent
# distributions
- useradd -d /var/run/vboxadd -g 1 -r -s /bin/false vboxadd >/dev/null 2>&1
+ useradd -d /var/run/"${owner}" -g 1 -r -s /bin/false "${owner}" >/dev/null 2>&1
# And for the others, we choose a UID ourselves
- useradd -d /var/run/vboxadd -g 1 -u 501 -o -s /bin/false vboxadd >/dev/null 2>&1
-
+ useradd -d /var/run/"${owner}" -g 1 -u 501 -o -s /bin/false "${owner}" >/dev/null 2>&1
+ # And create the group for the user device:
+ groupadd "${usergroup}"
+ # VBoxClient needs to be setgid.
+ chown :"${usergroup}" "${INSTALL_DIR}/bin/VBoxClient"
+ chmod g+s "${INSTALL_DIR}/bin/VBoxClient"
}
create_udev_rule()
@@ -399,8 +404,8 @@ create_udev_rule()
fi
fi
## @todo 60-vboxadd.rules -> 60-vboxguest.rules ?
- echo "KERNEL=${udev_fix}\"vboxguest\", NAME=\"vboxguest\", OWNER=\"vboxadd\", MODE=\"0660\"" > /etc/udev/rules.d/60-vboxadd.rules
- echo "KERNEL=${udev_fix}\"vboxuser\", NAME=\"vboxuser\", OWNER=\"vboxadd\", MODE=\"0666\"" >> /etc/udev/rules.d/60-vboxadd.rules
+ echo "KERNEL=${udev_fix}\"vboxguest\", NAME=\"${dev}\", OWNER=\"${owner}\", MODE=\"0660\"" > /etc/udev/rules.d/60-vboxadd.rules
+ echo "KERNEL=${udev_fix}\"vboxuser\", NAME=\"${userdev}\", OWNER=\"${owner}\", GROUP=\"${usergroup}\", MODE=\"0660\"" >> /etc/udev/rules.d/60-vboxadd.rules
fi
}
diff --git a/src/VBox/Devices/Audio/DevHDA.cpp b/src/VBox/Devices/Audio/DevHDA.cpp
index 70c6e2e..8dac716 100644
--- a/src/VBox/Devices/Audio/DevHDA.cpp
+++ b/src/VBox/Devices/Audio/DevHDA.cpp
@@ -65,7 +65,6 @@
* Defined Constants And Macros *
*********************************************************************************************************************************/
//#define HDA_AS_PCI_EXPRESS
-#define VBOX_WITH_INTEL_HDA
/* Installs a DMA access handler (via PGM callback) to monitor
* HDA's DMA operations, that is, writing / reading audio stream data.
@@ -1071,13 +1070,16 @@ static int hdaRegReadLPIB(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
uint64_t hdaWalClkGetMax(PHDASTATE pThis)
{
const uint64_t u64WalClkCur = ASMAtomicReadU64(&pThis->u64WalClk);
- const uint64_t u64FrontAbsWalClk = hdaStreamPeriodGetAbsElapsedWalClk(&hdaGetStreamFromSink(pThis, &pThis->SinkFront)->State.Period);
+ const uint64_t u64FrontAbsWalClk = pThis->SinkFront.pStream
+ ? hdaStreamPeriodGetAbsElapsedWalClk(&pThis->SinkFront.pStream->State.Period) : 0;
#ifdef VBOX_WITH_AUDIO_HDA_51_SURROUND
# error "Implement me!"
#endif
- const uint64_t u64LineInAbsWalClk = hdaStreamPeriodGetAbsElapsedWalClk(&hdaGetStreamFromSink(pThis, &pThis->SinkLineIn)->State.Period);
+ const uint64_t u64LineInAbsWalClk = pThis->SinkLineIn.pStream
+ ? hdaStreamPeriodGetAbsElapsedWalClk(&pThis->SinkLineIn.pStream->State.Period) : 0;
#ifdef VBOX_WITH_HDA_MIC_IN
- const uint64_t u64MicInAbsWalClk = hdaStreamPeriodGetAbsElapsedWalClk(&hdaGetStreamFromSink(pThis, &pThis->SinkMicIn)->State.Period);
+ const uint64_t u64MicInAbsWalClk = pThis->SinkMicIn.pStream
+ ? hdaStreamPeriodGetAbsElapsedWalClk(&pThis->SinkMicIn.pStream->State.Period) : 0;
#endif
uint64_t u64WalClkNew = RT_MAX(u64WalClkCur, u64FrontAbsWalClk);
@@ -1375,6 +1377,9 @@ static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
hdaStreamAsyncIOLock(pStream);
hdaStreamAsyncIOEnable(pStream, false /* fEnable */);
# endif
+ /* Make sure to remove the run bit before doing the actual stream reset. */
+ HDA_STREAM_REG(pThis, CTL, uSD) &= ~HDA_SDCTL_RUN;
+
hdaStreamReset(pThis, pStream, pStream->u8SD);
# ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO
@@ -1444,11 +1449,11 @@ static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
}
}
- DEVHDA_UNLOCK_BOTH(pThis);
-
int rc2 = hdaRegWriteU24(pThis, iReg, u32Value);
AssertRC(rc2);
+ DEVHDA_UNLOCK_BOTH(pThis);
+
return VINF_SUCCESS; /* Always return success to the MMIO handler. */
#else /* !IN_RING3 */
RT_NOREF_PV(pThis); RT_NOREF_PV(iReg); RT_NOREF_PV(u32Value);
@@ -1471,6 +1476,8 @@ static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
return hdaRegWriteU16(pThis, iReg, u32Value);
}
+ hdaStreamLock(pStream);
+
uint32_t v = HDA_REG_IND(pThis, iReg);
/* Clear (zero) FIFOE, DESE and BCIS bits when writing 1 to it (6.2.33). */
@@ -1478,9 +1485,9 @@ static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
/* Some guests tend to write SDnSTS even if the stream is not running.
* So make sure to check if the RUN bit is set first. */
- const bool fInRun = RT_BOOL(HDA_STREAM_REG(pThis, CTL, pStream->u8SD) & HDA_SDCTL_RUN);
+ const bool fRunning = pStream->State.fRunning;
- Log3Func(("[SD%RU8] fRun=%RTbool %R[sdsts]\n", pStream->u8SD, fInRun, v));
+ Log3Func(("[SD%RU8] fRunning=%RTbool %R[sdsts]\n", pStream->u8SD, fRunning, v));
PHDASTREAMPERIOD pPeriod = &pStream->State.Period;
@@ -1500,7 +1507,7 @@ static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
hdaStreamPeriodEnd(pPeriod);
- if (fInRun)
+ if (fRunning)
hdaStreamPeriodBegin(pPeriod, hdaWalClkGetCurrent(pThis) /* Use current wall clock time */);
}
@@ -1522,36 +1529,49 @@ static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
#endif
uint64_t cTicksToNext = pStream->State.cTransferTicks;
+ if (cTicksToNext) /* Only do any calculations if the stream currently is set up for transfers. */
+ {
+ Log3Func(("[SD%RU8] cTicksElapsed=%RU64, cTicksTransferred=%RU64, cTicksToNext=%RU64\n",
+ pStream->u8SD, cTicksElapsed, cTicksTransferred, cTicksToNext));
- Log3Func(("[SD%RU8] cTicksElapsed=%RU64, cTicksTransferred=%RU64, cTicksToNext=%RU64\n",
- pStream->u8SD, cTicksElapsed, cTicksTransferred, cTicksToNext));
+ Log3Func(("[SD%RU8] cbTransferProcessed=%RU32, cbTransferChunk=%RU32, cbTransferSize=%RU32\n",
+ pStream->u8SD, pStream->State.cbTransferProcessed, pStream->State.cbTransferChunk, pStream->State.cbTransferSize));
- Log3Func(("[SD%RU8] cbTransferProcessed=%RU32, cbTransferChunk=%RU32, cbTransferSize=%RU32\n",
- pStream->u8SD, pStream->State.cbTransferProcessed, pStream->State.cbTransferChunk, pStream->State.cbTransferSize));
+ if (cTicksElapsed <= cTicksToNext)
+ {
+ cTicksToNext = cTicksToNext - cTicksElapsed;
+ }
+ else /* Catch up. */
+ {
+ Log3Func(("[SD%RU8] Warning: Lagging behind (%RU64 ticks elapsed, maximum allowed is %RU64)\n",
+ pStream->u8SD, cTicksElapsed, cTicksToNext));
- if (cTicksElapsed <= cTicksToNext)
- {
- cTicksToNext = cTicksToNext - cTicksElapsed;
- }
- else /* Catch up. */
- {
- Log3Func(("[SD%RU8] Warning: Lagging behind (%RU64 ticks elapsed, maximum allowed is %RU64)\n",
- pStream->u8SD, cTicksElapsed, cTicksToNext));
+ LogRelMax2(64, ("HDA: Stream #%RU8 interrupt lagging behind (expected %uus, got %uus), trying to catch up ...\n",
+ pStream->u8SD,
+ (TMTimerGetFreq(pThis->pTimer) / pThis->u16TimerHz) / 1000, (tsNow - pStream->State.tsTransferLast) / 1000));
- LogRelMax2(64, ("HDA: Stream #%RU8 interrupt lagging behind (expected %uus, got %uus), trying to catch up ...\n",
- pStream->u8SD,
- (TMTimerGetFreq(pThis->pTimer) / pThis->u16TimerHz) / 1000, (tsNow - pStream->State.tsTransferLast) / 1000));
+ cTicksToNext = 0;
+ }
- cTicksToNext = 0;
- }
+ Log3Func(("[SD%RU8] -> cTicksToNext=%RU64\n", pStream->u8SD, cTicksToNext));
+
+ /* Reset processed data counter. */
+ pStream->State.cbTransferProcessed = 0;
+ pStream->State.tsTransferNext = tsNow + cTicksToNext;
- Log3Func(("[SD%RU8] -> cTicksToNext=%RU64\n", pStream->u8SD, cTicksToNext));
+ /* Only re-arm the timer if there were pending transfer interrupts left
+ * -- it could happen that we land in here if a guest writes to SDnSTS
+ * unconditionally. */
+ if (pStream->State.cTransferPendingInterrupts)
+ {
+ pStream->State.cTransferPendingInterrupts--;
- /* Reset processed data counter. */
- pStream->State.cbTransferProcessed = 0;
+ /* Re-arm the timer. */
+ hdaTimerSet(pThis, tsNow + cTicksToNext, false /* fForce */);
+ }
+ }
- /* Re-arm the timer. */
- hdaTimerSet(pThis, tsNow + cTicksToNext, false /* fForce */);
+ hdaStreamUnlock(pStream);
DEVHDA_UNLOCK_BOTH(pThis);
return VINF_SUCCESS;
@@ -1815,7 +1835,7 @@ static int hdaAddStreamOut(PHDASTATE pThis, PPDMAUDIOSTREAMCFG pCfg)
if (rc == VERR_NOT_SUPPORTED)
{
- LogRel2(("HDA: Unsupported channel count (%RU8), falling back to stereo channels\n", pCfg->Props.cChannels));
+ LogRel2(("HDA: Warning: Unsupported channel count (%RU8), falling back to stereo channels (2)\n", pCfg->Props.cChannels));
/* Fall back to 2 channels (see below in fUseFront block). */
rc = VINF_SUCCESS;
@@ -2268,44 +2288,6 @@ static int hdaRegWriteRIRBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
}
#ifdef IN_RING3
-
-#ifdef LOG_ENABLED
-static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BDLBase, uint16_t cBDLE)
-{
- LogFlowFunc(("BDLEs @ 0x%x (%RU16):\n", u64BDLBase, cBDLE));
- if (!u64BDLBase)
- return;
-
- uint32_t cbBDLE = 0;
- for (uint16_t i = 0; i < cBDLE; i++)
- {
- HDABDLEDESC bd;
- PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), u64BDLBase + i * sizeof(HDABDLEDESC), &bd, sizeof(bd));
-
- LogFunc(("\t#%03d BDLE(adr:0x%llx, size:%RU32, ioc:%RTbool)\n",
- i, bd.u64BufAdr, bd.u32BufSize, bd.fFlags & HDA_BDLE_FLAG_IOC));
-
- cbBDLE += bd.u32BufSize;
- }
-
- LogFlowFunc(("Total: %RU32 bytes\n", cbBDLE));
-
- if (!pThis->u64DPBase) /* No DMA base given? Bail out. */
- return;
-
- LogFlowFunc(("DMA counters:\n"));
-
- for (int i = 0; i < cBDLE; i++)
- {
- uint32_t uDMACnt;
- PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), (pThis->u64DPBase & DPBASE_ADDR_MASK) + (i * 2 * sizeof(uint32_t)),
- &uDMACnt, sizeof(uDMACnt));
-
- LogFlowFunc(("\t#%03d DMA @ 0x%x\n", i , uDMACnt));
- }
-}
-#endif /* LOG_ENABLED */
-
/**
* Retrieves a corresponding sink for a given mixer control.
* Returns NULL if no sink is found.
@@ -2512,7 +2494,7 @@ static DECLCALLBACK(int) hdaMixerAddStream(PHDASTATE pThis, PDMAUDIOMIXERCTL enm
rc = hdaMixerAddDrvStreams(pThis, pSink->pMixSink, pCfg);
AssertPtr(pSink->pMixSink);
- LogFlowFunc(("Sink=%s, enmMixerCtl=%d\n", pSink->pMixSink->pszName, enmMixerCtl));
+ LogFlowFunc(("Sink=%s, Mixer control=%s\n", pSink->pMixSink->pszName, DrvAudioHlpAudMixerCtlToStr(enmMixerCtl)));
}
else
rc = VERR_NOT_FOUND;
@@ -2595,12 +2577,13 @@ static DECLCALLBACK(int) hdaMixerRemoveStream(PHDASTATE pThis, PDMAUDIOMIXERCTL
else
rc = VERR_NOT_FOUND;
- LogFlowFunc(("enmMixerCtl=%d, rc=%Rrc\n", enmMixerCtl, rc));
+ LogFunc(("Mixer control=%s, rc=%Rrc\n", DrvAudioHlpAudMixerCtlToStr(enmMixerCtl), rc));
return rc;
}
/**
- * Sets a SDn stream number and channel to a particular mixer control.
+ * Controls an input / output converter widget, that is, which converter is connected
+ * to which stream (and channel).
*
* @returns IPRT status code.
* @param pThis HDA State.
@@ -2610,13 +2593,13 @@ static DECLCALLBACK(int) hdaMixerRemoveStream(PHDASTATE pThis, PDMAUDIOMIXERCTL
*
* @remarks Can be called as a callback by the HDA codec.
*/
-static DECLCALLBACK(int) hdaMixerSetStream(PHDASTATE pThis, PDMAUDIOMIXERCTL enmMixerCtl, uint8_t uSD, uint8_t uChannel)
+static DECLCALLBACK(int) hdaMixerControl(PHDASTATE pThis, PDMAUDIOMIXERCTL enmMixerCtl, uint8_t uSD, uint8_t uChannel)
{
- LogFlowFunc(("enmMixerCtl=%RU32, uSD=%RU8, uChannel=%RU8\n", enmMixerCtl, uSD, uChannel));
+ LogFunc(("enmMixerCtl=%s, uSD=%RU8, uChannel=%RU8\n", DrvAudioHlpAudMixerCtlToStr(enmMixerCtl), uSD, uChannel));
if (uSD == 0) /* Stream number 0 is reserved. */
{
- LogFlowFunc(("Invalid SDn (%RU8) number for mixer control %d, ignoring\n", uSD, enmMixerCtl));
+ Log2Func(("Invalid SDn (%RU8) number for mixer control '%s', ignoring\n", uSD, DrvAudioHlpAudMixerCtlToStr(enmMixerCtl)));
return VINF_SUCCESS;
}
/* uChannel is optional. */
@@ -2625,45 +2608,86 @@ static DECLCALLBACK(int) hdaMixerSetStream(PHDASTATE pThis, PDMAUDIOMIXERCTL enm
Assert(uSD);
uSD--;
- int rc;
+#ifndef VBOX_WITH_AUDIO_HDA_MIC_IN
+ /* Only SDI0 (Line-In) is supported. */
+ if ( hdaGetDirFromSD(uSD) == PDMAUDIODIR_IN
+ && uSD >= 1)
+ {
+ LogRel2(("HDA: Dedicated Mic-In support not imlpemented / built-in (stream #%RU8), using Line-In (stream #0) instead\n", uSD));
+ uSD = 0;
+ }
+#endif
+
+ int rc = VINF_SUCCESS;
PHDAMIXERSINK pSink = hdaMixerControlToSink(pThis, enmMixerCtl);
if (pSink)
{
+ AssertPtr(pSink->pMixSink);
+
+ /* If this an output stream, determine the correct SD#. */
if ( (uSD < HDA_MAX_SDI)
&& AudioMixerSinkGetDir(pSink->pMixSink) == AUDMIXSINKDIR_OUTPUT)
{
uSD += HDA_MAX_SDI;
}
- LogFlowFunc(("%s: Setting to stream ID=%RU8, channel=%RU8, enmMixerCtl=%RU32\n",
- pSink->pMixSink->pszName, uSD, uChannel, enmMixerCtl));
+ /* Detach the existing stream from the sink. */
+ if ( pSink->pStream
+ && ( pSink->pStream->u8SD != uSD
+ || pSink->pStream->u8Channel != uChannel)
+ )
+ {
+ LogFunc(("Sink '%s' was assigned to stream #%RU8 (channel %RU8) before\n",
+ pSink->pMixSink->pszName, pSink->pStream->u8SD, pSink->pStream->u8Channel));
- Assert(uSD < HDA_MAX_STREAMS);
+ hdaStreamLock(pSink->pStream);
- PHDASTREAM pStream = hdaGetStreamFromSD(pThis, uSD);
- if (pStream)
- {
- hdaStreamLock(pStream);
+ /* Only disable the stream if the stream descriptor # has changed. */
+ if (pSink->pStream->u8SD != uSD)
+ hdaStreamEnable(pSink->pStream, false);
- pSink->uSD = uSD;
- pSink->uChannel = uChannel;
- pStream->pMixSink = pSink;
+ pSink->pStream->pMixSink = NULL;
- hdaStreamUnlock(pStream);
+ hdaStreamUnlock(pSink->pStream);
- rc = VINF_SUCCESS;
+ pSink->pStream = NULL;
}
- else
+
+ Assert(uSD < HDA_MAX_STREAMS);
+
+ /* Attach the new stream to the sink.
+ * Enabling the stream will be done by the gust via a separate SDnCTL call then. */
+ if (pSink->pStream == NULL)
{
- LogRel(("HDA: Guest wanted to assign invalid stream ID=%RU8 (channel %RU8) to mixer control %RU32, skipping\n",
- uSD, uChannel, enmMixerCtl));
- rc = VERR_INVALID_PARAMETER;
+ LogRel2(("HDA: Setting sink '%s' to stream #%RU8 (channel %RU8), mixer control=%s\n",
+ pSink->pMixSink->pszName, uSD, uChannel, DrvAudioHlpAudMixerCtlToStr(enmMixerCtl)));
+
+ PHDASTREAM pStream = hdaGetStreamFromSD(pThis, uSD);
+ if (pStream)
+ {
+ hdaStreamLock(pStream);
+
+ pSink->pStream = pStream;
+
+ pStream->u8Channel = uChannel;
+ pStream->pMixSink = pSink;
+
+ hdaStreamUnlock(pStream);
+
+ rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_NOT_IMPLEMENTED;
}
}
else
rc = VERR_NOT_FOUND;
+ if (RT_FAILURE(rc))
+ LogRel(("HDA: Converter control for stream #%RU8 (channel %RU8) / mixer control '%s' failed with %Rrc, skipping\n",
+ uSD, uChannel, DrvAudioHlpAudMixerCtlToStr(enmMixerCtl), rc));
+
LogFlowFuncLeaveRC(rc);
return rc;
}
@@ -2921,17 +2945,22 @@ static void hdaGCTLReset(PHDASTATE pThis)
/*
* Stop any audio currently playing and/or recording.
*/
+ pThis->SinkFront.pStream = NULL;
if (pThis->SinkFront.pMixSink)
AudioMixerSinkReset(pThis->SinkFront.pMixSink);
# ifdef VBOX_WITH_AUDIO_HDA_MIC_IN
+ pThis->SinkMicIn.pStream = NULL;
if (pThis->SinkMicIn.pMixSink)
AudioMixerSinkReset(pThis->SinkMicIn.pMixSink);
# endif
+ pThis->SinkLineIn.pStream = NULL;
if (pThis->SinkLineIn.pMixSink)
AudioMixerSinkReset(pThis->SinkLineIn.pMixSink);
# ifdef VBOX_WITH_AUDIO_HDA_51_SURROUND
+ pThis->SinkCenterLFE = NULL;
if (pThis->SinkCenterLFE.pMixSink)
AudioMixerSinkReset(pThis->SinkCenterLFE.pMixSink);
+ pThis->SinkRear.pStream = NULL;
if (pThis->SinkRear.pMixSink)
AudioMixerSinkReset(pThis->SinkRear.pMixSink);
# endif
@@ -2945,7 +2974,7 @@ static void hdaGCTLReset(PHDASTATE pThis)
pThis->pCodec->pfnReset(pThis->pCodec);
}
- /*
+ /*
* Set some sensible defaults for which HDA sinks
* are connected to which stream number.
*
@@ -2953,14 +2982,14 @@ static void hdaGCTLReset(PHDASTATE pThis)
* These stream numbers can be changed by the guest dynamically lateron.
*/
#ifdef VBOX_WITH_AUDIO_HDA_MIC_IN
- hdaMixerSetStream(pThis, PDMAUDIOMIXERCTL_MIC_IN , 1 /* SD0 */, 0 /* Channel */);
+ hdaMixerControl(pThis, PDMAUDIOMIXERCTL_MIC_IN , 1 /* SD0 */, 0 /* Channel */);
#endif
- hdaMixerSetStream(pThis, PDMAUDIOMIXERCTL_LINE_IN , 1 /* SD0 */, 0 /* Channel */);
+ hdaMixerControl(pThis, PDMAUDIOMIXERCTL_LINE_IN , 1 /* SD0 */, 0 /* Channel */);
- hdaMixerSetStream(pThis, PDMAUDIOMIXERCTL_FRONT , 5 /* SD4 */, 0 /* Channel */);
+ hdaMixerControl(pThis, PDMAUDIOMIXERCTL_FRONT , 5 /* SD4 */, 0 /* Channel */);
#ifdef VBOX_WITH_AUDIO_HDA_51_SURROUND
- hdaMixerSetStream(pThis, PDMAUDIOMIXERCTL_CENTER_LFE, 5 /* SD4 */, 0 /* Channel */);
- hdaMixerSetStream(pThis, PDMAUDIOMIXERCTL_REAR , 5 /* SD4 */, 0 /* Channel */);
+ hdaMixerControl(pThis, PDMAUDIOMIXERCTL_CENTER_LFE, 5 /* SD4 */, 0 /* Channel */);
+ hdaMixerControl(pThis, PDMAUDIOMIXERCTL_REAR , 5 /* SD4 */, 0 /* Channel */);
#endif
pThis->cbCorbBuf = HDA_CORB_SIZE * sizeof(uint32_t);
@@ -3668,7 +3697,7 @@ static int hdaLoadExecLegacy(PHDASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion
break;
default:
- LogRel(("HDA: Unsupported / too new saved state version (%RU32)\n", uVersion));
+ LogRel(("HDA: Warning: Unsupported / too new saved state version (%RU32)\n", uVersion));
return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
}
@@ -5022,7 +5051,7 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
/* Set codec callbacks to this controller. */
pThis->pCodec->pfnCbMixerAddStream = hdaMixerAddStream;
pThis->pCodec->pfnCbMixerRemoveStream = hdaMixerRemoveStream;
- pThis->pCodec->pfnCbMixerSetStream = hdaMixerSetStream;
+ pThis->pCodec->pfnCbMixerControl = hdaMixerControl;
pThis->pCodec->pfnCbMixerSetVolume = hdaMixerSetVolume;
pThis->pCodec->pHDAState = pThis; /* Assign HDA controller state to codec. */
diff --git a/src/VBox/Devices/Audio/DevHDA.h b/src/VBox/Devices/Audio/DevHDA.h
index 3068107..5fdb659 100644
--- a/src/VBox/Devices/Audio/DevHDA.h
+++ b/src/VBox/Devices/Audio/DevHDA.h
@@ -55,11 +55,7 @@
*/
typedef struct HDAMIXERSINK
{
- /** SDn ID this sink is assigned to. 0 if not assigned. */
- uint8_t uSD;
- /** Channel ID of SDn ID. Only valid if SDn ID is valid. */
- uint8_t uChannel;
- uint8_t Padding[3];
+ R3PTRTYPE(PHDASTREAM) pStream;
/** Pointer to the actual audio mixer sink. */
R3PTRTYPE(PAUDMIXSINK) pMixSink;
} HDAMIXERSINK, *PHDAMIXERSINK;
diff --git a/src/VBox/Devices/Audio/DevHDACommon.cpp b/src/VBox/Devices/Audio/DevHDACommon.cpp
index 3d49d4a..49edc44 100644
--- a/src/VBox/Devices/Audio/DevHDACommon.cpp
+++ b/src/VBox/Devices/Audio/DevHDACommon.cpp
@@ -186,6 +186,48 @@ bool hdaWalClkSet(PHDASTATE pThis, uint64_t u64WalClk, bool fForce)
}
/**
+ * Returns the default (mixer) sink from a given SD#.
+ * Returns NULL if no sink is found.
+ *
+ * @return PHDAMIXERSINK
+ * @param pThis HDA state.
+ * @param uSD SD# to return mixer sink for.
+ * NULL if not found / handled.
+ */
+PHDAMIXERSINK hdaGetDefaultSink(PHDASTATE pThis, uint8_t uSD)
+{
+ if (hdaGetDirFromSD(uSD) == PDMAUDIODIR_IN)
+ {
+ const uint8_t uFirstSDI = 0;
+
+ if (uSD == uFirstSDI) /* First SDI. */
+ return &pThis->SinkLineIn;
+#ifdef VBOX_WITH_AUDIO_HDA_MIC_IN
+ else if (uSD == uFirstSDI + 1)
+ return &pThis->SinkMicIn;
+#else
+ else /* If we don't have a dedicated Mic-In sink, use the always present Line-In sink. */
+ return &pThis->SinkLineIn;
+#endif
+ }
+ else
+ {
+ const uint8_t uFirstSDO = HDA_MAX_SDI;
+
+ if (uSD == uFirstSDO)
+ return &pThis->SinkFront;
+#ifdef VBOX_WITH_AUDIO_HDA_51_SURROUND
+ else if (uSD == uFirstSDO + 1)
+ return &pThis->SinkCenterLFE;
+ else if (uSD == uFirstSDO + 2)
+ return &pThis->SinkRear;
+#endif
+ }
+
+ return NULL;
+}
+
+/**
* Returns the audio direction of a specified stream descriptor.
*
* The register layout specifies that input streams (SDI) come first,
@@ -237,7 +279,7 @@ PHDASTREAM hdaGetStreamFromSink(PHDASTATE pThis, PHDAMIXERSINK pSink)
AssertPtrReturn(pSink, NULL);
/** @todo Do something with the channel mapping here? */
- return hdaGetStreamFromSD(pThis, pSink->uSD);
+ return pSink->pStream;
}
/**
@@ -361,7 +403,7 @@ int hdaDMAWrite(PHDASTATE pThis, PHDASTREAM pStream, const void *pvBuf, uint32_t
/* Sanity checks. */
Assert(cbChunk <= pBDLE->Desc.u32BufSize - pBDLE->State.u32BufOff);
- Assert(cbChunk % HDA_FRAME_SIZE == 0);
+ Assert(cbChunk % pStream->State.cbFrameSize == 0);
Assert((cbChunk >> 1) >= 1);
if (pStream->Dbg.Runtime.fEnabled)
@@ -522,6 +564,43 @@ int hdaSDFMTToPCMProps(uint32_t u32SDFMT, PPDMAUDIOPCMPROPS pProps)
}
#ifdef IN_RING3
+# ifdef LOG_ENABLED
+void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BDLBase, uint16_t cBDLE)
+{
+ LogFlowFunc(("BDLEs @ 0x%x (%RU16):\n", u64BDLBase, cBDLE));
+ if (!u64BDLBase)
+ return;
+
+ uint32_t cbBDLE = 0;
+ for (uint16_t i = 0; i < cBDLE; i++)
+ {
+ HDABDLEDESC bd;
+ PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), u64BDLBase + i * sizeof(HDABDLEDESC), &bd, sizeof(bd));
+
+ LogFunc(("\t#%03d BDLE(adr:0x%llx, size:%RU32, ioc:%RTbool)\n",
+ i, bd.u64BufAdr, bd.u32BufSize, bd.fFlags & HDA_BDLE_FLAG_IOC));
+
+ cbBDLE += bd.u32BufSize;
+ }
+
+ LogFlowFunc(("Total: %RU32 bytes\n", cbBDLE));
+
+ if (!pThis->u64DPBase) /* No DMA base given? Bail out. */
+ return;
+
+ LogFlowFunc(("DMA counters:\n"));
+
+ for (int i = 0; i < cBDLE; i++)
+ {
+ uint32_t uDMACnt;
+ PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), (pThis->u64DPBase & DPBASE_ADDR_MASK) + (i * 2 * sizeof(uint32_t)),
+ &uDMACnt, sizeof(uDMACnt));
+
+ LogFlowFunc(("\t#%03d DMA @ 0x%x\n", i , uDMACnt));
+ }
+}
+# endif /* LOG_ENABLED */
+
/**
* Fetches a Bundle Descriptor List Entry (BDLE) from the DMA engine.
*
@@ -621,9 +700,6 @@ bool hdaTimerSet(PHDASTATE pThis, uint64_t tsExpire, bool fForce)
{
PHDASTREAM pStream = &pThis->aStreams[i];
- if (!(HDA_STREAM_REG(pThis, CTL, pStream->u8SD) & HDA_SDCTL_RUN))
- continue;
-
if (hdaStreamTransferIsScheduled(pStream))
tsExpireMin = RT_MIN(tsExpireMin, hdaStreamTransferGetNext(pStream));
}
diff --git a/src/VBox/Devices/Audio/DevHDACommon.h b/src/VBox/Devices/Audio/DevHDACommon.h
index 76c69e2..633c891 100644
--- a/src/VBox/Devices/Audio/DevHDACommon.h
+++ b/src/VBox/Devices/Audio/DevHDACommon.h
@@ -577,6 +577,7 @@ typedef struct HDABDLE
/** @name Object lookup functions.
* @{
*/
+PHDAMIXERSINK hdaGetDefaultSink(PHDASTATE pThis, uint8_t uSD);
PDMAUDIODIR hdaGetDirFromSD(uint8_t uSD);
PHDASTREAM hdaGetStreamFromSD(PHDASTATE pThis, uint8_t uSD);
PHDASTREAM hdaGetStreamFromSink(PHDASTATE pThis, PHDAMIXERSINK pSink);
@@ -621,6 +622,9 @@ int hdaSDFMTToPCMProps(uint32_t u32SDFMT, PPDMAUDIOPCMPROPS pProps);
* @{
*/
#ifdef IN_RING3
+# ifdef LOG_ENABLED
+void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BDLBase, uint16_t cBDLE);
+# endif
int hdaBDLEFetch(PHDASTATE pThis, PHDABDLE pBDLE, uint64_t u64BaseDMA, uint16_t u16Entry);
bool hdaBDLEIsComplete(PHDABDLE pBDLE);
bool hdaBDLENeedsInterrupt(PHDABDLE pBDLE);
diff --git a/src/VBox/Devices/Audio/DrvAudioCommon.cpp b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
index ddb3a3b..9917a01 100644
--- a/src/VBox/Devices/Audio/DrvAudioCommon.cpp
+++ b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
@@ -1451,6 +1451,8 @@ int DrvAudioHlpFileWrite(PPDMAUDIOFILE pFile, const void *pvBuf, size_t cbBuf, u
if (!cbBuf)
return VINF_SUCCESS;
+ AssertReturn(RTFileIsValid(pFile->hFile), VERR_WRONG_ORDER);
+
int rc;
if (pFile->enmType == PDMAUDIOFILETYPE_RAW)
diff --git a/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp b/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
index c654efd..d0dd4bc 100644
--- a/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
@@ -38,6 +38,13 @@
#include <AudioToolbox/AudioConverter.h>
#include <AudioToolbox/AudioToolbox.h>
+
+/* Audio Queue buffer configuration. */
+#define AQ_BUF_COUNT 32 /* Number of buffers. */
+#define AQ_BUF_SIZE 512 /* Size of each buffer in bytes. */
+#define AQ_BUF_TOTAL (AQ_BUF_COUNT * AQ_BUF_SIZE)
+#define AQ_BUF_SAMPLES (AQ_BUF_TOTAL / 4) /* Hardcoded 4 bytes per sample! */
+
/* Enables utilizing the Core Audio converter unit for converting
* input / output from/to our requested formats. That might be more
* performant than using our own routines later down the road. */
@@ -371,7 +378,7 @@ typedef struct COREAUDIOSTREAM
/** The actual audio queue being used. */
AudioQueueRef audioQueue;
/** The audio buffers which are used with the above audio queue. */
- AudioQueueBufferRef audioBuffer[3];
+ AudioQueueBufferRef audioBuffer[AQ_BUF_COUNT];
/** The acquired (final) audio format for this stream. */
AudioStreamBasicDescription asbdStream;
/** The audio unit for this stream. */
@@ -1295,7 +1302,7 @@ static DECLCALLBACK(int) coreAudioQueueThread(RTTHREAD hThreadSelf, void *pvUser
if (err != noErr)
return VERR_GENERAL_FAILURE; /** @todo Fudge! */
- const size_t cbBufSize = _4K; /** @todo Make this configurable! */
+ const size_t cbBufSize = AQ_BUF_SIZE; /** @todo Make this configurable! */
/*
* Allocate audio buffers.
@@ -2320,7 +2327,7 @@ static DECLCALLBACK(int) drvHostCoreAudioStreamCreate(PPDMIHOSTAUDIO pInterface,
rc = coreAudioStreamInitQueue(pCAStream, pCfgReq, pCfgAcq);
if (RT_SUCCESS(rc))
{
- pCfgAcq->cFrameBufferHint = _4K; /** @todo Make this configurable. */
+ pCfgAcq->cFrameBufferHint = AQ_BUF_SAMPLES; /** @todo Make this configurable. */
}
if (RT_SUCCESS(rc))
{
diff --git a/src/VBox/Devices/Audio/DrvHostDSound.cpp b/src/VBox/Devices/Audio/DrvHostDSound.cpp
index 9fa00fc..0d67df6 100644
--- a/src/VBox/Devices/Audio/DrvHostDSound.cpp
+++ b/src/VBox/Devices/Audio/DrvHostDSound.cpp
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2006-2017 Oracle Corporation
+ * Copyright (C) 2006-2018 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -25,6 +25,7 @@
#include <dsound.h>
#include <iprt/alloc.h>
+#include <iprt/system.h>
#include <iprt/uuid.h>
#include "DrvAudio.h"
@@ -2640,19 +2641,35 @@ static DECLCALLBACK(int) drvHostDSoundConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pC
int rc = VINF_SUCCESS;
#ifdef VBOX_WITH_AUDIO_MMNOTIFICATION_CLIENT
- try
- {
- pThis->m_pNotificationClient = new VBoxMMNotificationClient();
+ bool fUseNotificationClient = false;
- HRESULT hr = pThis->m_pNotificationClient->Initialize();
- if (FAILED(hr))
- rc = VERR_AUDIO_BACKEND_INIT_FAILED;
+ char szOSVersion[32];
+ rc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szOSVersion, sizeof(szOSVersion));
+ if (RT_SUCCESS(rc))
+ {
+ /* IMMNotificationClient is available starting at Windows Vista. */
+ if (RTStrVersionCompare(szOSVersion, "6.0") >= 0)
+ fUseNotificationClient = true;
}
- catch (std::bad_alloc &ex)
+
+ if (fUseNotificationClient)
{
- NOREF(ex);
- rc = VERR_NO_MEMORY;
+ try
+ {
+ pThis->m_pNotificationClient = new VBoxMMNotificationClient();
+
+ HRESULT hr = pThis->m_pNotificationClient->Initialize();
+ if (FAILED(hr))
+ rc = VERR_AUDIO_BACKEND_INIT_FAILED;
+ }
+ catch (std::bad_alloc &ex)
+ {
+ NOREF(ex);
+ rc = VERR_NO_MEMORY;
+ }
}
+
+ LogRel2(("DSound: Notification client is %s\n", fUseNotificationClient ? "enabled" : "disabled"));
#endif
if (RT_SUCCESS(rc))
diff --git a/src/VBox/Devices/Audio/DrvHostValidationKit.cpp b/src/VBox/Devices/Audio/DrvHostValidationKit.cpp
index 28adeb9..8316694 100644
--- a/src/VBox/Devices/Audio/DrvHostValidationKit.cpp
+++ b/src/VBox/Devices/Audio/DrvHostValidationKit.cpp
@@ -35,7 +35,7 @@ typedef struct VAKITAUDIOSTREAM
/** The stream's acquired configuration. */
PPDMAUDIOSTREAMCFG pCfg;
/** Audio file to dump output to or read input from. */
- PDMAUDIOFILE File;
+ PPDMAUDIOFILE pFile;
/** Text file to store timing of audio buffers submittions**/
RTFILE hFileTiming;
/** Timestamp of the first play or record request**/
@@ -161,36 +161,30 @@ static int debugCreateStreamOut(PDRVHOSTVAKITAUDIO pDrv, PVAKITAUDIOSTREAM pStre
if (RT_SUCCESS(rc))
{
- char szFile[RTPATH_MAX];
- rc = DrvAudioHlpGetFileName(szFile, RT_ELEMENTS(szFile), szTemp, NULL, PDMAUDIOFILETYPE_WAV);
+ char szFile[RTPATH_MAX + 1];
+
+ rc = DrvAudioHlpGetFileName(szFile, RT_ELEMENTS(szFile), szTemp, "VaKit",
+ 0 /* Instance */, PDMAUDIOFILETYPE_WAV, PDMAUDIOFILENAME_FLAG_NONE);
if (RT_SUCCESS(rc))
{
- LogFlowFunc(("%s\n", szFile));
- rc = DrvAudioHlpFileOpen(&pStreamDbg->File, PDMAUDIOFILETYPE_WAV, szFile,
- RTFILE_O_WRITE | RTFILE_O_DENY_WRITE | RTFILE_O_CREATE_REPLACE,
- &pCfgReq->Props, PDMAUDIOFILE_FLAG_NONE);
- if (RT_FAILURE(rc))
- LogRel(("VaKitAudio: Creating output file '%s' failed with %Rrc\n", szFile, rc));
-
- RTStrCat(szFile, sizeof(szFile), ".timing");
- rc = RTFileOpen(&pStreamDbg->hFileTiming, szFile, RTFILE_O_WRITE | RTFILE_O_DENY_WRITE | RTFILE_O_CREATE_REPLACE);
-
- if (RT_FAILURE(rc))
- {
- LogRel(("VaKitAudio: Creating output file '%s' failed with %Rrc\n", szFile, rc));
- }
- else
- {
- size_t cch;
- char szTimingInfo[128];
- cch = RTStrPrintf(szTimingInfo, sizeof(szTimingInfo), "# %dHz %dch %dbps\n",
- pCfgReq->Props.uHz, pCfgReq->Props.cChannels, pCfgReq->Props.cBits);
-
- RTFileWrite(pStreamDbg->hFileTiming, szTimingInfo, cch, NULL);
- }
+ rc = DrvAudioHlpFileCreate(PDMAUDIOFILETYPE_WAV, szFile, PDMAUDIOFILE_FLAG_NONE, &pStreamDbg->pFile);
+ if (RT_SUCCESS(rc))
+ rc = DrvAudioHlpFileOpen(pStreamDbg->pFile, PDMAUDIOFILE_DEFAULT_OPEN_FLAGS, &pCfgReq->Props);
+ }
+
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VaKitAudio: Creating output file '%s' failed with %Rrc\n", szFile, rc));
}
else
- LogRel(("VaKitAudio: Unable to build file name for temp dir '%s': %Rrc\n", szTemp, rc));
+ {
+ size_t cch;
+ char szTimingInfo[128];
+ cch = RTStrPrintf(szTimingInfo, sizeof(szTimingInfo), "# %dHz %dch %dbps\n",
+ pCfgReq->Props.uHz, pCfgReq->Props.cChannels, pCfgReq->Props.cBits);
+
+ RTFileWrite(pStreamDbg->hFileTiming, szTimingInfo, cch, NULL);
+ }
}
else
LogRel(("VaKitAudio: Unable to retrieve temp dir: %Rrc\n", rc));
@@ -276,7 +270,7 @@ static DECLCALLBACK(int) drvHostVaKitAudioStreamPlay(PPDMIHOSTAUDIO pInterface,
/* Remember when samples were consumed. */
// pStreamDbg->Out.tsLastPlayed = PDMDrvHlpTMGetVirtualTime(pDrv->pDrvIns);;
- int rc2 = DrvAudioHlpFileWrite(&pStreamDbg->File, pvBuf, cxBuf, 0 /* fFlags */);
+ int rc2 = DrvAudioHlpFileWrite(pStreamDbg->pFile, pvBuf, cxBuf, 0 /* fFlags */);
if (RT_FAILURE(rc2))
LogRel(("DebugAudio: Writing output failed with %Rrc\n", rc2));
@@ -320,32 +314,17 @@ static int debugDestroyStreamOut(PDRVHOSTVAKITAUDIO pDrv, PVAKITAUDIOSTREAM pStr
pStreamDbg->Out.pu8PlayBuffer = NULL;
}
- size_t cbDataSize = DrvAudioHlpFileGetDataSize(&pStreamDbg->File);
-
- int rc = DrvAudioHlpFileClose(&pStreamDbg->File);
- RTFileClose(pStreamDbg->hFileTiming);
-
- if (RT_SUCCESS(rc))
+ if (pStreamDbg->pFile)
{
- /* Delete the file again if nothing but the header was written to it. */
- bool fDeleteEmptyFiles = true; /** @todo Make deletion configurable? */
-
- if ( !cbDataSize
- && fDeleteEmptyFiles)
- {
- char szFile[RTPATH_MAX];
-
- RTStrCopy(szFile, sizeof(szFile), pStreamDbg->File.szName);
- RTFileDelete(szFile);
+ size_t cbDataSize = DrvAudioHlpFileGetDataSize(pStreamDbg->pFile);
+ if (cbDataSize)
+ LogRel(("VaKitAudio: Created output file '%s' (%zu bytes)\n", pStreamDbg->pFile->szName, cbDataSize));
- RTStrCat(szFile, sizeof(szFile), ".timing");
- RTFileDelete(szFile);
- }
- else
- LogRel(("VaKitAudio: Created output file '%s' (%zu bytes)\n", pStreamDbg->File.szName, cbDataSize));
+ DrvAudioHlpFileDestroy(pStreamDbg->pFile);
+ pStreamDbg->pFile = NULL;
}
- return rc;
+ return VINF_SUCCESS;
}
diff --git a/src/VBox/Devices/Audio/HDACodec.cpp b/src/VBox/Devices/Audio/HDACodec.cpp
index 6d58579..8a0cc8b 100644
--- a/src/VBox/Devices/Audio/HDACodec.cpp
+++ b/src/VBox/Devices/Audio/HDACodec.cpp
@@ -2407,17 +2407,17 @@ static DECLCALLBACK(int) vrbProcSetStreamId(PHDACODEC pThis, uint32_t cmd, uint6
/** @todo Check if non-interleaved streams need a different channel / SDn? */
/* Propagate to the controller. */
- pThis->pfnCbMixerSetStream(pThis->pHDAState, PDMAUDIOMIXERCTL_FRONT, uSD, uChannel);
+ pThis->pfnCbMixerControl(pThis->pHDAState, PDMAUDIOMIXERCTL_FRONT, uSD, uChannel);
#ifdef VBOX_WITH_AUDIO_HDA_51_SURROUND
- pThis->pfnCbMixerSetStream(pThis->pHDAState, PDMAUDIOMIXERCTL_CENTER_LFE, uSD, uChannel);
- pThis->pfnCbMixerSetStream(pThis->pHDAState, PDMAUDIOMIXERCTL_REAR, uSD, uChannel);
+ pThis->pfnCbMixerControl(pThis->pHDAState, PDMAUDIOMIXERCTL_CENTER_LFE, uSD, uChannel);
+ pThis->pfnCbMixerControl(pThis->pHDAState, PDMAUDIOMIXERCTL_REAR, uSD, uChannel);
#endif
}
else if (enmDir == PDMAUDIODIR_IN)
{
- pThis->pfnCbMixerSetStream(pThis->pHDAState, PDMAUDIOMIXERCTL_LINE_IN, uSD, uChannel);
+ pThis->pfnCbMixerControl(pThis->pHDAState, PDMAUDIOMIXERCTL_LINE_IN, uSD, uChannel);
#ifdef VBOX_WITH_AUDIO_HDA_MIC_IN
- pThis->pfnCbMixerSetStream(pThis->pHDAState, PDMAUDIOMIXERCTL_MIC_IN, uSD, uChannel);
+ pThis->pfnCbMixerControl(pThis->pHDAState, PDMAUDIOMIXERCTL_MIC_IN, uSD, uChannel);
#endif
}
}
diff --git a/src/VBox/Devices/Audio/HDACodec.h b/src/VBox/Devices/Audio/HDACodec.h
index ad51415..177d16e 100644
--- a/src/VBox/Devices/Audio/HDACodec.h
+++ b/src/VBox/Devices/Audio/HDACodec.h
@@ -105,7 +105,7 @@ typedef struct HDACODEC
/** Callbacks to the HDA controller, mostly used for multiplexing to the various host backends. */
DECLR3CALLBACKMEMBER(int, pfnCbMixerAddStream, (PHDASTATE pThis, PDMAUDIOMIXERCTL enmMixerCtl, PPDMAUDIOSTREAMCFG pCfg));
DECLR3CALLBACKMEMBER(int, pfnCbMixerRemoveStream, (PHDASTATE pThis, PDMAUDIOMIXERCTL enmMixerCtl));
- DECLR3CALLBACKMEMBER(int, pfnCbMixerSetStream, (PHDASTATE pThis, PDMAUDIOMIXERCTL enmMixerCtl, uint8_t uSD, uint8_t uChannel));
+ DECLR3CALLBACKMEMBER(int, pfnCbMixerControl, (PHDASTATE pThis, PDMAUDIOMIXERCTL enmMixerCtl, uint8_t uSD, uint8_t uChannel));
DECLR3CALLBACKMEMBER(int, pfnCbMixerSetVolume, (PHDASTATE pThis, PDMAUDIOMIXERCTL enmMixerCtl, PPDMAUDIOVOLUME pVol));
/** These callbacks are set by codec implementation to answer debugger requests. */
diff --git a/src/VBox/Devices/Audio/HDAStream.cpp b/src/VBox/Devices/Audio/HDAStream.cpp
index 67fa0e6..b490360 100644
--- a/src/VBox/Devices/Audio/HDAStream.cpp
+++ b/src/VBox/Devices/Audio/HDAStream.cpp
@@ -54,6 +54,7 @@ int hdaStreamCreate(PHDASTREAM pStream, PHDASTATE pThis, uint8_t u8SD)
pStream->pHDAState = pThis;
pStream->State.fInReset = false;
+ pStream->State.fRunning = false;
#ifdef HDA_USE_DMA_ACCESS_HANDLER
RTListInit(&pStream->State.lstDMAHandlers);
#endif
@@ -79,7 +80,7 @@ int hdaStreamCreate(PHDASTREAM pStream, PHDASTATE pThis, uint8_t u8SD)
{
char szFile[64];
- if (pStream->State.Cfg.enmDir == PDMAUDIODIR_IN)
+ if (hdaGetDirFromSD(pStream->u8SD) == PDMAUDIODIR_IN)
RTStrPrintf(szFile, sizeof(szFile), "hdaStreamWriteSD%RU8", pStream->u8SD);
else
RTStrPrintf(szFile, sizeof(szFile), "hdaStreamReadSD%RU8", pStream->u8SD);
@@ -91,7 +92,7 @@ int hdaStreamCreate(PHDASTREAM pStream, PHDASTATE pThis, uint8_t u8SD)
rc2 = DrvAudioHlpFileCreate(PDMAUDIOFILETYPE_WAV, szPath, PDMAUDIOFILE_FLAG_NONE, &pStream->Dbg.Runtime.pFileStream);
AssertRC(rc2);
- if (pStream->State.Cfg.enmDir == PDMAUDIODIR_IN)
+ if (hdaGetDirFromSD(pStream->u8SD) == PDMAUDIODIR_IN)
RTStrPrintf(szFile, sizeof(szFile), "hdaDMAWriteSD%RU8", pStream->u8SD);
else
RTStrPrintf(szFile, sizeof(szFile), "hdaDMAReadSD%RU8", pStream->u8SD);
@@ -180,9 +181,6 @@ int hdaStreamInit(PHDASTREAM pStream, uint8_t uSD)
pStream->u32CBL = HDA_STREAM_REG(pThis, CBL, pStream->u8SD);
pStream->u16FIFOS = HDA_STREAM_REG(pThis, FIFOS, pStream->u8SD) + 1;
- /* Make sure to also update the stream's DMA counter (based on its current LPIB value). */
- hdaStreamSetPosition(pStream, HDA_STREAM_REG(pThis, LPIB, pStream->u8SD));
-
PPDMAUDIOSTREAMCFG pCfg = &pStream->State.Cfg;
int rc = hdaSDFMTToPCMProps(HDA_STREAM_REG(pThis, FMT, uSD), &pCfg->Props);
@@ -218,6 +216,9 @@ int hdaStreamInit(PHDASTREAM pStream, uint8_t uSD)
break;
}
+ /* Set the stream's frame size. */
+ pStream->State.cbFrameSize = pCfg->Props.cChannels * (pCfg->Props.cBits / 8 /* To bytes */);
+
/*
* Initialize the stream mapping in any case, regardless if
* we support surround audio or not. This is needed to handle
@@ -229,8 +230,9 @@ int hdaStreamInit(PHDASTREAM pStream, uint8_t uSD)
rc = hdaStreamMapInit(&pStream->State.Mapping, &pCfg->Props);
AssertRCReturn(rc, rc);
- LogFunc(("[SD%RU8] DMA @ 0x%x (%RU32 bytes), LVI=%RU16, FIFOS=%RU16, rc=%Rrc\n",
- pStream->u8SD, pStream->u64BDLBase, pStream->u32CBL, pStream->u16LVI, pStream->u16FIFOS, rc));
+ LogFunc(("[SD%RU8] DMA @ 0x%x (%RU32 bytes), LVI=%RU16, FIFOS=%RU16, Hz=%RU32, rc=%Rrc\n",
+ pStream->u8SD, pStream->u64BDLBase, pStream->u32CBL, pStream->u16LVI, pStream->u16FIFOS,
+ pStream->State.Cfg.Props.uHz, rc));
if ( pStream->u32CBL
&& pStream->u16LVI)
@@ -240,91 +242,128 @@ int hdaStreamInit(PHDASTREAM pStream, uint8_t uSD)
LogRel(("HDA: Device timer (%RU32) does not fit to stream #RU8 timing (%RU32)\n",
pThis->u16TimerHz, pStream->State.Cfg.Props.uHz));
+ /* Figure out how many transfer fragments we're going to use for this stream. */
/** @todo Use a more dynamic fragment size? */
- uint8_t cFragments = pStream->u16LVI;
+ Assert(pStream->u16LVI <= UINT8_MAX - 1);
+ uint8_t cFragments = pStream->u16LVI + 1;
if (cFragments <= 1)
cFragments = 2; /* At least two fragments (BDLEs) must be present. */
- /* Calculate the fragment size the guest OS expects interrupt delivery at. */
- pStream->State.cbTransferSize = pStream->u32CBL / cFragments;
- Assert(pStream->State.cbTransferSize);
- Assert(pStream->State.cbTransferSize % HDA_FRAME_SIZE == 0);
-
- /* Calculate the bytes we need to transfer to / from the stream's DMA per iteration.
- * This is bound to the device's Hz rate and thus to the (virtual) timing the device expects. */
- pStream->State.cbTransferChunk = (pStream->State.Cfg.Props.uHz / pThis->u16TimerHz) * HDA_FRAME_SIZE;
- Assert(pStream->State.cbTransferChunk);
- Assert(pStream->State.cbTransferChunk % HDA_FRAME_SIZE == 0);
-
- /* Make sure that the transfer chunk does not exceed the overall transfer size. */
- if (pStream->State.cbTransferChunk > pStream->State.cbTransferSize)
- pStream->State.cbTransferChunk = pStream->State.cbTransferSize;
-
- pStream->State.cbTransferProcessed = 0;
- pStream->State.cTransferPendingInterrupts = 0;
-
- const uint64_t cTicksPerHz = TMTimerGetFreq(pThis->pTimer) / pThis->u16TimerHz;
-
- /* Calculate the timer ticks per byte for this stream. */
- pStream->State.cTicksPerByte = cTicksPerHz / pStream->State.cbTransferChunk;
- Assert(pStream->State.cTicksPerByte);
-
- /* Calculate timer ticks per transfer. */
- pStream->State.cTransferTicks = pStream->State.cbTransferChunk * pStream->State.cTicksPerByte;
-
- /* Initialize the transfer timestamps. */
- pStream->State.tsTransferLast = 0;
- pStream->State.tsTransferNext = 0;
-
- LogFunc(("[SD%RU8] Timer %uHz (%RU64 ticks per Hz), ticks per byte: %RU64 (%RU64 bytes per iteration = %RU64 ticks)," \
- " transfer size = %RU64\n",
- pStream->u8SD, pThis->u16TimerHz, cTicksPerHz, pStream->State.cTicksPerByte,
- pStream->State.cbTransferChunk, pStream->State.cTransferTicks, pStream->State.cbTransferSize));
/*
* Handle the stream's position adjustment.
*/
uint32_t cfPosAdjust = 0;
+ LogFunc(("[SD%RU8] fPosAdjustEnabled=%RTbool, cPosAdjustFrames=%RU16\n",
+ pStream->u8SD, pThis->fPosAdjustEnabled, pThis->cPosAdjustFrames));
+
if (pThis->fPosAdjustEnabled) /* Is the position adjustment enabled at all? */
{
+ HDABDLE BDLE;
+ RT_ZERO(BDLE);
+
+ Assert(pStream->u64BDLBase);
+
+ int rc2 = hdaBDLEFetch(pThis, &BDLE, pStream->u64BDLBase, 0 /* Entry */);
+ AssertRC(rc2);
+
+ Assert(BDLE.Desc.u32BufSize % pStream->State.cbFrameSize == 0);
+
/* If no custom set position adjustment is set, apply some
* simple heuristics to detect the appropriate position adjustment. */
- if ( pStream->u64BDLBase
- && !pThis->cPosAdjustFrames)
+ if ( !pThis->cPosAdjustFrames
+ /* Position adjustmenet buffer *must* have the IOC bit set! */
+ && hdaBDLENeedsInterrupt(&BDLE))
{
- HDABDLE BDLE;
- int rc2 = hdaBDLEFetch(pThis, &BDLE, pStream->u64BDLBase, 0 /* Entry */);
- AssertRC(rc2);
-
/** @todo Implement / use a (dynamic) table once this gets more complicated. */
-
#ifdef VBOX_WITH_INTEL_HDA
/* Intel ICH / PCH: 1 frame. */
- if (BDLE.Desc.u32BufSize == 1 * HDA_FRAME_SIZE)
+ if (BDLE.Desc.u32BufSize == 1 * pStream->State.cbFrameSize)
{
cfPosAdjust = 1;
}
/* Intel Baytrail / Braswell: 32 frames. */
- else if (BDLE.Desc.u32BufSize == 32 * HDA_FRAME_SIZE)
+ else if (BDLE.Desc.u32BufSize == 32 * pStream->State.cbFrameSize)
{
cfPosAdjust = 32;
}
- else
#endif
- cfPosAdjust = pThis->cPosAdjustFrames;
}
else /* Go with the set default. */
cfPosAdjust = pThis->cPosAdjustFrames;
if (cfPosAdjust)
{
+ /* Also adjust the number of fragments, as the position adjustment buffer
+ * does not count as an own fragment as such.
+ *
+ * This e.g. can happen on (newer) Ubuntu guests which use
+ * 4 (IOC) + 4408 (IOC) + 4408 (IOC) + 4408 (IOC) + 4404 (= 17632) bytes,
+ * where the first buffer (4) is used as position adjustment.
+ *
+ * Only skip a fragment if the whole buffer fragment is used for
+ * position adjustment.
+ */
+ if ( (cfPosAdjust * pStream->State.cbFrameSize) == BDLE.Desc.u32BufSize
+ && cFragments)
+ {
+ cFragments--;
+ }
+
/* Initialize position adjustment counter. */
pStream->State.cPosAdjustFramesLeft = cfPosAdjust;
LogRel2(("HDA: Position adjustment for stream #%RU8 active (%RU32 frames)\n", pStream->u8SD, cfPosAdjust));
}
}
- LogFunc(("[SD%RU8] cfPosAdjust=%RU32\n", pStream->u8SD, cfPosAdjust));
+ LogFunc(("[SD%RU8] cfPosAdjust=%RU32, cFragments=%RU8\n", pStream->u8SD, cfPosAdjust, cFragments));
+
+ /*
+ * Set up data transfer transfer stuff.
+ */
+
+ /* Calculate the fragment size the guest OS expects interrupt delivery at. */
+ pStream->State.cbTransferSize = pStream->u32CBL / cFragments;
+ Assert(pStream->State.cbTransferSize);
+ Assert(pStream->State.cbTransferSize % pStream->State.cbFrameSize == 0);
+
+ /* Calculate the bytes we need to transfer to / from the stream's DMA per iteration.
+ * This is bound to the device's Hz rate and thus to the (virtual) timing the device expects. */
+ pStream->State.cbTransferChunk = (pStream->State.Cfg.Props.uHz / pThis->u16TimerHz) * pStream->State.cbFrameSize;
+ Assert(pStream->State.cbTransferChunk);
+ Assert(pStream->State.cbTransferChunk % pStream->State.cbFrameSize == 0);
+
+ /* Make sure that the transfer chunk does not exceed the overall transfer size. */
+ if (pStream->State.cbTransferChunk > pStream->State.cbTransferSize)
+ pStream->State.cbTransferChunk = pStream->State.cbTransferSize;
+
+ pStream->State.cbTransferProcessed = 0;
+ pStream->State.cTransferPendingInterrupts = 0;
+
+ const uint64_t cTicksPerHz = TMTimerGetFreq(pThis->pTimer) / pThis->u16TimerHz;
+
+ /* Calculate the timer ticks per byte for this stream. */
+ pStream->State.cTicksPerByte = cTicksPerHz / pStream->State.cbTransferChunk;
+ Assert(pStream->State.cTicksPerByte);
+
+ /* Calculate timer ticks per transfer. */
+ pStream->State.cTransferTicks = pStream->State.cbTransferChunk * pStream->State.cTicksPerByte;
+
+ /* Initialize the transfer timestamps. */
+ pStream->State.tsTransferLast = 0;
+ pStream->State.tsTransferNext = 0;
+
+ LogFunc(("[SD%RU8] Timer %uHz (%RU64 ticks per Hz), cTicksPerByte=%RU64, cbTransferChunk=%RU32, cTransferTicks=%RU64, " \
+ "cbTransferSize=%RU32\n",
+ pStream->u8SD, pThis->u16TimerHz, cTicksPerHz, pStream->State.cTicksPerByte,
+ pStream->State.cbTransferChunk, pStream->State.cTransferTicks, pStream->State.cbTransferSize));
+
+ /* Make sure to also update the stream's DMA counter (based on its current LPIB value). */
+ hdaStreamSetPosition(pStream, HDA_STREAM_REG(pThis, LPIB, pStream->u8SD));
+
+#ifdef LOG_ENABLED
+ hdaBDLEDumpAll(pThis, pStream->u64BDLBase, pStream->u16LVI + 1);
+#endif
}
return rc;
@@ -344,8 +383,7 @@ void hdaStreamReset(PHDASTATE pThis, PHDASTREAM pStream, uint8_t uSD)
AssertReturnVoid(uSD < HDA_MAX_STREAMS);
# ifdef VBOX_STRICT
- AssertReleaseMsg(!RT_BOOL(HDA_STREAM_REG(pThis, CTL, uSD) & HDA_SDCTL_RUN),
- ("[SD%RU8] Cannot reset stream while in running state\n", uSD));
+ AssertReleaseMsg(!pStream->State.fRunning, ("[SD%RU8] Cannot reset stream while in running state\n", uSD));
# endif
LogFunc(("[SD%RU8]: Reset\n", uSD));
@@ -378,6 +416,9 @@ void hdaStreamReset(PHDASTATE pThis, PHDASTREAM pStream, uint8_t uSD)
hdaStreamUnregisterDMAHandlers(pThis, pStream);
#endif
+ /* Assign the default mixer sink to the stream. */
+ pStream->pMixSink = hdaGetDefaultSink(pThis, uSD);
+
pStream->State.tsTransferLast = 0;
pStream->State.tsTransferNext = 0;
@@ -432,20 +473,26 @@ int hdaStreamEnable(PHDASTREAM pStream, bool fEnable)
int rc = VINF_SUCCESS;
- if (pStream->pMixSink) /* Stream attached to a sink? */
+ if (!pStream->pMixSink) /* Stream attached to a sink? */
{
- AUDMIXSINKCMD enmCmd = fEnable
- ? AUDMIXSINKCMD_ENABLE : AUDMIXSINKCMD_DISABLE;
+ AssertMsgFailed(("Stream #%RU8 not has no mixer sink attached\n", pStream->u8SD));
+ return VERR_WRONG_ORDER;
+ }
- /* First, enable or disable the stream and the stream's sink, if any. */
- if (pStream->pMixSink->pMixSink)
- rc = AudioMixerSinkCtl(pStream->pMixSink->pMixSink, enmCmd);
+ AUDMIXSINKCMD enmCmd = fEnable
+ ? AUDMIXSINKCMD_ENABLE : AUDMIXSINKCMD_DISABLE;
- if ( RT_SUCCESS(rc)
- && pStream->Dbg.Runtime.fEnabled)
+ /* First, enable or disable the stream and the stream's sink, if any. */
+ if (pStream->pMixSink->pMixSink)
+ rc = AudioMixerSinkCtl(pStream->pMixSink->pMixSink, enmCmd);
+
+ if ( RT_SUCCESS(rc)
+ && pStream->Dbg.Runtime.fEnabled)
+ {
+ Assert(DrvAudioHlpPCMPropsAreValid(&pStream->State.Cfg.Props));
+
+ if (fEnable)
{
- if (fEnable)
- {
int rc2 = DrvAudioHlpFileOpen(pStream->Dbg.Runtime.pFileStream, PDMAUDIOFILE_DEFAULT_OPEN_FLAGS,
&pStream->State.Cfg.Props);
AssertRC(rc2);
@@ -453,18 +500,22 @@ int hdaStreamEnable(PHDASTREAM pStream, bool fEnable)
rc2 = DrvAudioHlpFileOpen(pStream->Dbg.Runtime.pFileDMA, PDMAUDIOFILE_DEFAULT_OPEN_FLAGS,
&pStream->State.Cfg.Props);
AssertRC(rc2);
- }
- else
- {
+ }
+ else
+ {
int rc2 = DrvAudioHlpFileClose(pStream->Dbg.Runtime.pFileStream);
AssertRC(rc2);
rc2 = DrvAudioHlpFileClose(pStream->Dbg.Runtime.pFileDMA);
AssertRC(rc2);
- }
}
}
+ if (RT_SUCCESS(rc))
+ {
+ pStream->State.fRunning = fEnable;
+ }
+
LogFunc(("[SD%RU8] rc=%Rrc\n", pStream->u8SD, rc));
return rc;
}
@@ -485,7 +536,7 @@ void hdaStreamSetPosition(PHDASTREAM pStream, uint32_t u32LPIB)
{
AssertPtrReturnVoid(pStream);
- Assert(u32LPIB % HDA_FRAME_SIZE == 0);
+ Assert(u32LPIB % pStream->State.cbFrameSize == 0);
Log3Func(("[SD%RU8] LPIB=%RU32 (DMA Position Buffer Enabled: %RTbool)\n",
pStream->u8SD, u32LPIB, pStream->pHDAState->fDMAPosition));
@@ -537,18 +588,25 @@ uint32_t hdaStreamGetFree(PHDASTREAM pStream)
/**
* Returns whether a next transfer for a given stream is scheduled or not.
+ * This takes pending stream interrupts into account as well as the next scheduled
+ * transfer timestamp.
*
* @returns True if a next transfer is scheduled, false if not.
* @param pStream HDA stream to retrieve schedule status for.
*/
bool hdaStreamTransferIsScheduled(PHDASTREAM pStream)
{
- AssertPtrReturn(pStream, false);
+ if (!pStream)
+ return false;
+
AssertPtrReturn(pStream->pHDAState, false);
- const bool fScheduled = pStream->State.tsTransferNext > TMTimerGet(pStream->pHDAState->pTimer);
+ const bool fScheduled = pStream->State.fRunning
+ && ( pStream->State.cTransferPendingInterrupts
+ || pStream->State.tsTransferNext > TMTimerGet(pStream->pHDAState->pTimer));
- Log3Func(("[SD%RU8] %RU64 -> %RTbool\n", pStream->u8SD, pStream->State.tsTransferNext, fScheduled));
+ Log3Func(("[SD%RU8] tsTransferNext=%RU64, cTransferPendingInterrupts=%RU8 -> %RTbool\n",
+ pStream->u8SD, pStream->State.tsTransferNext, pStream->State.cTransferPendingInterrupts, fScheduled));
return fScheduled;
}
@@ -725,15 +783,15 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
AssertPtr(pThis);
PHDASTREAMPERIOD pPeriod = &pStream->State.Period;
- int rc = hdaStreamPeriodLock(pPeriod);
- AssertRC(rc);
+ if (!hdaStreamPeriodLock(pPeriod))
+ return VERR_ACCESS_DENIED;
bool fProceed = true;
/* Stream not running? */
- if (!(HDA_STREAM_REG(pThis, CTL, pStream->u8SD) & HDA_SDCTL_RUN))
+ if (!pStream->State.fRunning)
{
- Log3Func(("[SD%RU8] RUN bit not set\n", pStream->u8SD));
+ Log3Func(("[SD%RU8] Not running\n", pStream->u8SD));
fProceed = false;
}
else if (HDA_STREAM_REG(pThis, STS, pStream->u8SD) & HDA_SDSTS_BCIS)
@@ -771,6 +829,8 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
/* State sanity checks. */
Assert(ASMAtomicReadBool(&pStream->State.fInReset) == false);
+ int rc = VINF_SUCCESS;
+
/* Fetch first / next BDL entry. */
PHDABDLE pBDLE = &pStream->State.BDLE;
if (hdaBDLEIsComplete(pBDLE))
@@ -781,14 +841,27 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
uint32_t cbToProcess = RT_MIN(pStream->State.cbTransferSize - pStream->State.cbTransferProcessed,
pStream->State.cbTransferChunk);
- uint32_t cbProcessed = 0;
- uint32_t cbLeft = cbToProcess;
- Assert(cbLeft % HDA_FRAME_SIZE == 0);
+
+ Log3Func(("[SD%RU8] cbToProcess=%RU32, cbToProcessMax=%RU32\n", pStream->u8SD, cbToProcess, cbToProcessMax));
if (cbToProcess > cbToProcessMax)
- LogRel2(("HDA: More data to process\n"));
+ {
+ if (pStream->State.Cfg.enmDir == PDMAUDIODIR_IN)
+ LogRelMax2(64, ("HDA: Warning: FIFO underflow for stream #%RU8 (still %RU32 bytes needed)\n",
+ pStream->u8SD, cbToProcess - cbToProcessMax));
+ else
+ LogRelMax2(64, ("HDA: Warning: FIFO overflow for stream #%RU8 (%RU32 bytes outstanding)\n",
+ pStream->u8SD, cbToProcess - cbToProcessMax));
+
+ LogFunc(("[SD%RU8] Warning: Limiting transfer (cbToProcess=%RU32, cbToProcessMax=%RU32)\n",
+ pStream->u8SD, cbToProcess, cbToProcessMax));
- Log3Func(("[SD%RU8] cbToProcess=%RU32\n", pStream->u8SD, cbToProcess));
+ /* Never process more than a stream currently can handle. */
+ cbToProcess = cbToProcessMax;
+ }
+
+ uint32_t cbProcessed = 0;
+ uint32_t cbLeft = cbToProcess;
uint8_t abChunk[HDA_FIFO_MAX + 1];
while (cbLeft)
@@ -802,7 +875,7 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
/* If there are position adjustment frames left to be processed,
* make sure that we process them first as a whole. */
if (pStream->State.cPosAdjustFramesLeft)
- cbChunk = RT_MIN(cbChunk, uint32_t(pStream->State.cPosAdjustFramesLeft * HDA_FRAME_SIZE));
+ cbChunk = RT_MIN(cbChunk, uint32_t(pStream->State.cPosAdjustFramesLeft * pStream->State.cbFrameSize));
Log3Func(("[SD%RU8] cbChunk=%RU32, cPosAdjustFramesLeft=%RU16\n",
pStream->u8SD, cbChunk, pStream->State.cPosAdjustFramesLeft));
@@ -820,6 +893,8 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
uint32_t cbDMAWritten = 0;
uint32_t cbDMAToWrite = cbChunk;
+ /** @todo Do we need interleaving streams support here as well?
+ * Never saw anything else besides mono/stereo mics (yet). */
while (cbDMAToWrite)
{
void *pvBuf; size_t cbBuf;
@@ -875,19 +950,35 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
rc = VERR_BUFFER_OVERFLOW;
}
+#ifndef VBOX_WITH_HDA_AUDIO_INTERLEAVING_STREAMS_SUPPORT
+ /**
+ * The following code extracts the required audio stream (channel) data
+ * of non-interleaved *and* interleaved audio streams.
+ *
+ * We by default only support 2 channels with 16-bit samples (HDA_FRAME_SIZE),
+ * but an HDA audio stream can have interleaved audio data of multiple audio
+ * channels in such a single stream ("AA,AA,AA vs. AA,BB,AA,BB").
+ *
+ * So take this into account by just handling the first channel in such a stream ("A")
+ * and just discard the other channel's data.
+ */
while (cbDMALeft)
{
void *pvBuf; size_t cbBuf;
- RTCircBufAcquireWriteBlock(pCircBuf, cbDMALeft, &pvBuf, &cbBuf);
+ RTCircBufAcquireWriteBlock(pCircBuf, HDA_FRAME_SIZE, &pvBuf, &cbBuf);
if (cbBuf)
memcpy(pvBuf, abChunk + cbDMAWritten, cbBuf);
RTCircBufReleaseWriteBlock(pCircBuf, cbBuf);
- cbDMALeft -= (uint32_t)cbBuf;
- cbDMAWritten += (uint32_t)cbBuf;
+ cbDMALeft -= (uint32_t)pStream->State.cbFrameSize;
+ cbDMAWritten += (uint32_t)pStream->State.cbFrameSize;
}
+#else
+ /** @todo This needs making use of HDAStreamMap + HDAStreamChannel. */
+# error "Implement reading interleaving streams support here."
+#endif
}
else
LogRel(("HDA: Reading from stream #%RU8 DMA failed with %Rrc\n", pStream->u8SD, rc));
@@ -900,7 +991,7 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
if (cbDMA)
{
- Assert(cbDMA % HDA_FRAME_SIZE == 0);
+ Assert(cbDMA % pStream->State.cbFrameSize == 0);
/* We always increment the position of DMA buffer counter because we're always reading
* into an intermediate buffer. */
@@ -967,7 +1058,7 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
}
/* Do the position adjustment accounting. */
- pStream->State.cPosAdjustFramesLeft -= RT_MIN(pStream->State.cPosAdjustFramesLeft, cbDMA / HDA_FRAME_SIZE);
+ pStream->State.cPosAdjustFramesLeft -= RT_MIN(pStream->State.cPosAdjustFramesLeft, cbDMA / pStream->State.cbFrameSize);
if (RT_FAILURE(rc))
break;
@@ -977,7 +1068,7 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
pStream->u8SD, cbToProcess, cbProcessed, cbLeft, pBDLE, rc));
/* Sanity. */
- Assert(cbProcessed % HDA_FRAME_SIZE == 0);
+ Assert(cbProcessed % pStream->State.cbFrameSize == 0);
Assert(cbProcessed == cbToProcess);
Assert(cbLeft == 0);
@@ -985,7 +1076,7 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
* adjustment anymore. */
if (pStream->State.cPosAdjustFramesLeft == 0)
{
- hdaStreamPeriodInc(pPeriod, RT_MIN(cbProcessed / HDA_FRAME_SIZE, hdaStreamPeriodGetRemainingFrames(pPeriod)));
+ hdaStreamPeriodInc(pPeriod, RT_MIN(cbProcessed / pStream->State.cbFrameSize, hdaStreamPeriodGetRemainingFrames(pPeriod)));
pStream->State.cbTransferProcessed += cbProcessed;
}
@@ -1014,7 +1105,7 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
*/
const bool fWalClkSet = hdaWalClkSet(pThis,
hdaWalClkGetCurrent(pThis)
- + hdaStreamPeriodFramesToWalClk(pPeriod, pStream->State.cbTransferProcessed / HDA_FRAME_SIZE),
+ + hdaStreamPeriodFramesToWalClk(pPeriod, pStream->State.cbTransferProcessed / pStream->State.cbFrameSize),
false /* fForce */);
RT_NOREF(fWalClkSet);
}
@@ -1044,7 +1135,6 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
#else
hdaProcessInterrupt(pThis, __FUNCTION__);
#endif
- pStream->State.cTransferPendingInterrupts--;
}
else /* Transfer still in-flight -- schedule the next timing slot. */
{
@@ -1059,6 +1149,16 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
}
tsTransferNext = tsNow + (cbTransferNext * pStream->State.cTicksPerByte);
+
+ /**
+ * If the current transfer is complete, reset our counter.
+ *
+ * This can happen for examlpe if the guest OS (like macOS) sets up
+ * big BDLEs without IOC bits set (but for the last one) and the
+ * transfer is complete before we reach such a BDL entry.
+ */
+ if (fTransferComplete)
+ pStream->State.cbTransferProcessed = 0;
}
/* If we need to do another transfer, (re-)arm the device timer. */
@@ -1077,7 +1177,7 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
pStream->State.tsTransferLast = tsNow;
- Log3Func(("[SD%RU8] cbTransferLeft=%RU32 -- %RU64/%RU64\n",
+ Log3Func(("[SD%RU8] cbTransferLeft=%RU32 -- %RU32/%RU32\n",
pStream->u8SD, cbTransferLeft, pStream->State.cbTransferProcessed, pStream->State.cbTransferSize));
Log3Func(("[SD%RU8] fTransferComplete=%RTbool, cTransferPendingInterrupts=%RU8\n",
pStream->u8SD, fTransferComplete, pStream->State.cTransferPendingInterrupts));
@@ -1102,6 +1202,9 @@ int hdaStreamTransfer(PHDASTREAM pStream, uint32_t cbToProcessMax)
*/
void hdaStreamUpdate(PHDASTREAM pStream, bool fInTimer)
{
+ if (!pStream)
+ return;
+
PAUDMIXSINK pSink = NULL;
if ( pStream->pMixSink
&& pStream->pMixSink->pMixSink)
@@ -1177,7 +1280,15 @@ void hdaStreamUpdate(PHDASTREAM pStream, bool fInTimer)
/* Is the sink ready to be read (host input data) from? If so, by how much? */
uint32_t cbReadable = AudioMixerSinkGetReadable(pSink);
- Log3Func(("[SD%RU8] cbReadable=%RU32\n", pStream->u8SD, cbReadable));
+ /* How much (guest input) data is available for writing at the moment for the HDA stream? */
+ const uint32_t cbFree = hdaStreamGetFree(pStream);
+
+ Log3Func(("[SD%RU8] cbReadable=%RU32, cbFree=%RU32\n", pStream->u8SD, cbReadable, cbFree));
+
+ /* Do not write more than the sink can hold at the moment.
+ * The host sets the overall pace. */
+ if (cbReadable > cbFree)
+ cbReadable = cbFree;
if (cbReadable)
{
@@ -1189,10 +1300,23 @@ void hdaStreamUpdate(PHDASTREAM pStream, bool fInTimer)
abFIFO, RT_MIN(cbReadable, (uint32_t)sizeof(abFIFO)), &cbRead);
AssertRCBreak(rc2);
+ if (!cbRead)
+ {
+ AssertMsgFailed(("Nothing read from sink, even if %RU32 bytes were (still) announced\n", cbReadable));
+ break;
+ }
+
/* Write (guest input) data to the stream which was read from stream's sink before. */
- rc2 = hdaStreamWrite(pStream, abFIFO, cbRead, NULL /* pcbWritten */);
+ uint32_t cbWritten;
+ rc2 = hdaStreamWrite(pStream, abFIFO, cbRead, &cbWritten);
AssertRCBreak(rc2);
+ if (!cbWritten)
+ {
+ AssertFailed(); /* Should never happen, as we know how much we can write. */
+ break;
+ }
+
Assert(cbReadable >= cbRead);
cbReadable -= cbRead;
}
diff --git a/src/VBox/Devices/Audio/HDAStream.h b/src/VBox/Devices/Audio/HDAStream.h
index 2f0115a..76a19d6 100644
--- a/src/VBox/Devices/Audio/HDAStream.h
+++ b/src/VBox/Devices/Audio/HDAStream.h
@@ -117,8 +117,10 @@ typedef struct HDASTREAMSTATE
/** Flag indicating whether this stream currently is
* in reset mode and therefore not acccessible by the guest. */
volatile bool fInReset;
+ /** Flag indicating if the stream is in running state or not. */
+ volatile bool fRunning;
/** Unused, padding. */
- uint32_t Padding0;
+ uint8_t Padding0[3];
/** Critical section to serialize access. */
RTCRITSECT CritSect;
#ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO
@@ -147,7 +149,8 @@ typedef struct HDASTREAMSTATE
/** How many interrupts are pending due to
* BDLE interrupt-on-completion (IOC) bits set. */
uint8_t cTransferPendingInterrupts;
- uint8_t Padding1[4];
+ /** The stream's current audio frame size (in bytes). */
+ uint32_t cbFrameSize;
/** How many audio data frames are left to be processed
* for the position adjustment handling.
*
@@ -189,7 +192,10 @@ typedef struct HDASTREAM
{
/** Stream descriptor number (SDn). */
uint8_t u8SD;
- uint8_t Padding0[7];
+ /** Current channel index.
+ * For a stereo stream, this is u8Channel + 1. */
+ uint8_t u8Channel;
+ uint8_t Padding0[6];
/** DMA base address (SDnBDPU - SDnBDPL). */
uint64_t u64BDLBase;
/** Cyclic Buffer Length (SDnCBL).
diff --git a/src/VBox/Devices/Audio/HDAStreamMap.cpp b/src/VBox/Devices/Audio/HDAStreamMap.cpp
index da3d5db..2c72991 100644
--- a/src/VBox/Devices/Audio/HDAStreamMap.cpp
+++ b/src/VBox/Devices/Audio/HDAStreamMap.cpp
@@ -63,7 +63,7 @@ int hdaStreamMapInit(PHDASTREAMMAPPING pMapping, PPDMAUDIOPCMPROPS pProps)
for (uint8_t i = 0; i < pProps->cChannels; i++)
{
pChan->uChannel = i;
- pChan->cbStep = (pProps->cBits / 2);
+ pChan->cbStep = (pProps->cBits / 8);
pChan->cbFrame = pChan->cbStep * pProps->cChannels;
pChan->cbFirst = i * pChan->cbStep;
pChan->cbOff = pChan->cbFirst;
diff --git a/src/VBox/Devices/Audio/HDAStreamPeriod.cpp b/src/VBox/Devices/Audio/HDAStreamPeriod.cpp
index 5a8e313..84fe360 100644
--- a/src/VBox/Devices/Audio/HDAStreamPeriod.cpp
+++ b/src/VBox/Devices/Audio/HDAStreamPeriod.cpp
@@ -100,7 +100,7 @@ int hdaStreamPeriodInit(PHDASTREAMPERIOD pPeriod,
* Windows guests (Win10 AU):
* 3584 bytes (CBL) / 4 (frame size) = 896 frames / 2 (LVI) = 448 frames per period
*/
- unsigned cTotalPeriods = u16LVI;
+ unsigned cTotalPeriods = u16LVI + 1;
if (cTotalPeriods <= 1)
cTotalPeriods = 2; /* At least two periods *must* be present (LVI >= 1). */
diff --git a/src/VBox/Devices/Audio/VBoxMMNotificationClient.cpp b/src/VBox/Devices/Audio/VBoxMMNotificationClient.cpp
index 63b9b72..3335b1a 100644
--- a/src/VBox/Devices/Audio/VBoxMMNotificationClient.cpp
+++ b/src/VBox/Devices/Audio/VBoxMMNotificationClient.cpp
@@ -5,7 +5,7 @@
*/
/*
- * Copyright (C) 2017 Oracle Corporation
+ * Copyright (C) 2017-2018 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -42,6 +42,9 @@ VBoxMMNotificationClient::~VBoxMMNotificationClient(void)
{
}
+/**
+ * Uninitializes the mulitmedia notification client implementation.
+ */
void VBoxMMNotificationClient::Dispose(void)
{
DetachFromEndpoint();
@@ -54,6 +57,11 @@ void VBoxMMNotificationClient::Dispose(void)
}
}
+/**
+ * Initializes the mulitmedia notification client implementation.
+ *
+ * @return HRESULT
+ */
HRESULT VBoxMMNotificationClient::Initialize(void)
{
HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), 0, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator),
@@ -63,6 +71,8 @@ HRESULT VBoxMMNotificationClient::Initialize(void)
hr = m_pEnum->RegisterEndpointNotificationCallback(this);
if (SUCCEEDED(hr))
{
+ m_fRegisteredClient = true;
+
hr = AttachToDefaultEndpoint();
}
}
@@ -71,6 +81,13 @@ HRESULT VBoxMMNotificationClient::Initialize(void)
return hr;
}
+/**
+ * Registration callback implementation for storing our (required) contexts.
+ *
+ * @return IPRT status code.
+ * @param pDrvIns Driver instance to register the notification client to.
+ * @param pfnCallback Audio callback to call by the notification client in case of new events.
+ */
int VBoxMMNotificationClient::RegisterCallback(PPDMDRVINS pDrvIns, PFNPDMHOSTAUDIOCALLBACK pfnCallback)
{
this->m_pDrvIns = pDrvIns;
@@ -79,22 +96,42 @@ int VBoxMMNotificationClient::RegisterCallback(PPDMDRVINS pDrvIns, PFNPDMHOSTAUD
return VINF_SUCCESS;
}
+/**
+ * Unregistration callback implementation for cleaning up our mess when we're done handling
+ * with notifications.
+ */
void VBoxMMNotificationClient::UnregisterCallback(void)
{
this->m_pDrvIns = NULL;
this->m_pfnCallback = NULL;
}
+/**
+ * Stub being called when attaching to the default audio endpoint.
+ * Does nothing at the moment.
+ */
HRESULT VBoxMMNotificationClient::AttachToDefaultEndpoint(void)
{
return S_OK;
}
+/**
+ * Stub being called when detaching from the default audio endpoint.
+ * Does nothing at the moment.
+ */
void VBoxMMNotificationClient::DetachFromEndpoint(void)
{
}
+/**
+ * Handler implementation which is called when an audio device state
+ * has been changed.
+ *
+ * @return HRESULT
+ * @param pwstrDeviceId Device ID the state is announced for.
+ * @param dwNewState New state the device is now in.
+ */
STDMETHODIMP VBoxMMNotificationClient::OnDeviceStateChanged(LPCWSTR pwstrDeviceId, DWORD dwNewState)
{
char *pszState = "unknown";
@@ -130,6 +167,12 @@ STDMETHODIMP VBoxMMNotificationClient::OnDeviceStateChanged(LPCWSTR pwstrDeviceI
return S_OK;
}
+/**
+ * Handler implementation which is called when a new audio device has been added.
+ *
+ * @return HRESULT
+ * @param pwstrDeviceId Device ID which has been added.
+ */
STDMETHODIMP VBoxMMNotificationClient::OnDeviceAdded(LPCWSTR pwstrDeviceId)
{
RT_NOREF(pwstrDeviceId);
@@ -137,6 +180,12 @@ STDMETHODIMP VBoxMMNotificationClient::OnDeviceAdded(LPCWSTR pwstrDeviceId)
return S_OK;
}
+/**
+ * Handler implementation which is called when an audio device has been removed.
+ *
+ * @return HRESULT
+ * @param pwstrDeviceId Device ID which has been removed.
+ */
STDMETHODIMP VBoxMMNotificationClient::OnDeviceRemoved(LPCWSTR pwstrDeviceId)
{
RT_NOREF(pwstrDeviceId);
@@ -144,6 +193,15 @@ STDMETHODIMP VBoxMMNotificationClient::OnDeviceRemoved(LPCWSTR pwstrDeviceId)
return S_OK;
}
+/**
+ * Handler implementation which is called when the device audio device has been
+ * changed.
+ *
+ * @return HRESULT
+ * @param eFlow Flow direction of the new default device.
+ * @param eRole Role of the new default device.
+ * @param pwstrDefaultDeviceId ID of the new default device.
+ */
STDMETHODIMP VBoxMMNotificationClient::OnDefaultDeviceChanged(EDataFlow eFlow, ERole eRole, LPCWSTR pwstrDefaultDeviceId)
{
RT_NOREF(eFlow, eRole, pwstrDefaultDeviceId);
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
index a368ebc..d69b550 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
@@ -7395,7 +7395,7 @@ vesa_pm_end: ; 0xc4514 LB 0x1
section _DATA progbits vstart=0x4600 align=1 ; size=0x3726 class=DATA group=DGROUP
_msg_vga_init: ; 0xc4600 LB 0x2e
- db 'Oracle VM VirtualBox Version 5.2.4 VGA BIOS', 00dh, 00ah, 000h
+ db 'Oracle VM VirtualBox Version 5.2.6 VGA BIOS', 00dh, 00ah, 000h
_vga_modes: ; 0xc462e LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
@@ -8292,7 +8292,7 @@ _vbebios_vendor_name: ; 0xc7c7b LB 0x13
_vbebios_product_name: ; 0xc7c8e LB 0x21
db 'Oracle VM VirtualBox VBE Adapter', 000h
_vbebios_product_revision: ; 0xc7caf LB 0x23
- db 'Oracle VM VirtualBox Version 5.2.4', 000h
+ db 'Oracle VM VirtualBox Version 5.2.6', 000h
_vbebios_info_string: ; 0xc7cd2 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
_no_vbebios_info_string: ; 0xc7cfd LB 0x29
@@ -8348,4 +8348,4 @@ section CONST2 progbits vstart=0x7d26 align=1 ; size=0x0 class=DATA group=DGROUP
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f4h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
index 2e6db6a..4fb8f10 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
@@ -1 +1 @@
-0c7b34d9ae7de4eec867b5fb6bf8fcb8 *VBoxVgaBios286.rom
+61e8dfab18a45ee8cad8ed3f36a9d589 *VBoxVgaBios286.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
index 3d875bf..76e6c86 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
@@ -6867,7 +6867,7 @@ vesa_pm_end: ; 0xc4514 LB 0x1
section _DATA progbits vstart=0x4600 align=1 ; size=0x3726 class=DATA group=DGROUP
_msg_vga_init: ; 0xc4600 LB 0x2e
- db 'Oracle VM VirtualBox Version 5.2.4 VGA BIOS', 00dh, 00ah, 000h
+ db 'Oracle VM VirtualBox Version 5.2.6 VGA BIOS', 00dh, 00ah, 000h
_vga_modes: ; 0xc462e LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
@@ -7764,7 +7764,7 @@ _vbebios_vendor_name: ; 0xc7c7b LB 0x13
_vbebios_product_name: ; 0xc7c8e LB 0x21
db 'Oracle VM VirtualBox VBE Adapter', 000h
_vbebios_product_revision: ; 0xc7caf LB 0x23
- db 'Oracle VM VirtualBox Version 5.2.4', 000h
+ db 'Oracle VM VirtualBox Version 5.2.6', 000h
_vbebios_info_string: ; 0xc7cd2 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
_no_vbebios_info_string: ; 0xc7cfd LB 0x29
@@ -7820,4 +7820,4 @@ section CONST2 progbits vstart=0x7d26 align=1 ; size=0x0 class=DATA group=DGROUP
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 06dh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 069h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
index 2c6f2ed..bd79cd9 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
@@ -1 +1 @@
-f49e4a20056fe0d6fde5b047a81304c7 *VBoxVgaBios386.rom
+924ad92970806a9f9de054559d0f84e3 *VBoxVgaBios386.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
index db833e7..c4fe355 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
@@ -7514,7 +7514,7 @@ vesa_pm_end: ; 0xc4514 LB 0x1
section _DATA progbits vstart=0x4600 align=1 ; size=0x3726 class=DATA group=DGROUP
_msg_vga_init: ; 0xc4600 LB 0x2e
- db 'Oracle VM VirtualBox Version 5.2.4 VGA BIOS', 00dh, 00ah, 000h
+ db 'Oracle VM VirtualBox Version 5.2.6 VGA BIOS', 00dh, 00ah, 000h
_vga_modes: ; 0xc462e LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
@@ -8411,7 +8411,7 @@ _vbebios_vendor_name: ; 0xc7c7b LB 0x13
_vbebios_product_name: ; 0xc7c8e LB 0x21
db 'Oracle VM VirtualBox VBE Adapter', 000h
_vbebios_product_revision: ; 0xc7caf LB 0x23
- db 'Oracle VM VirtualBox Version 5.2.4', 000h
+ db 'Oracle VM VirtualBox Version 5.2.6', 000h
_vbebios_info_string: ; 0xc7cd2 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
_no_vbebios_info_string: ; 0xc7cfd LB 0x29
@@ -8467,4 +8467,4 @@ section CONST2 progbits vstart=0x7d26 align=1 ; size=0x0 class=DATA group=DGROUP
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 058h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
index a39afa5..75a7662 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
@@ -1 +1 @@
-d6d1139ff4c4f2d11a8ac13decdfe052 *VBoxVgaBios8086.rom
+d73c0230d0134906efe4364eb031e0d2 *VBoxVgaBios8086.rom
diff --git a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
index 7212fd8..836fecf 100644
--- a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
@@ -2964,19 +2964,20 @@ int VBVAInit (PVGASTATE pVGAState)
}
-void VBVADestroy (PVGASTATE pVGAState)
+void VBVADestroy(PVGASTATE pVGAState)
{
- VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pVGAState->pHGSMI);
-
- if (pCtx)
+ PHGSMIINSTANCE pHgsmi = pVGAState->pHGSMI;
+ if (pHgsmi)
{
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pHgsmi);
pCtx->mouseShapeInfo.fSet = false;
RTMemFree(pCtx->mouseShapeInfo.pu8Shape);
pCtx->mouseShapeInfo.pu8Shape = NULL;
pCtx->mouseShapeInfo.cbAllocated = 0;
pCtx->mouseShapeInfo.cbShape = 0;
- }
- HGSMIDestroy (pVGAState->pHGSMI);
- pVGAState->pHGSMI = NULL;
+ HGSMIDestroy(pHgsmi);
+ pVGAState->pHGSMI = NULL;
+ }
}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
index 85485be..a5769cd 100644
--- a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
@@ -2168,7 +2168,7 @@ static int vboxVDMACrCtlHgsmiSetup(struct VBOXVDMAHOST *pVdma)
return rc;
}
-static int vboxVDMACmdExecBpbTransfer(PVBOXVDMAHOST pVdma, const PVBOXVDMACMD_DMA_BPB_TRANSFER pTransfer, uint32_t cbBuffer);
+static int vboxVDMACmdExecBpbTransfer(PVBOXVDMAHOST pVdma, VBOXVDMACMD_DMA_BPB_TRANSFER const *pTransfer, uint32_t cbBuffer);
/* check if this is external cmd to be passed to chromium backend */
static int vboxVDMACmdCheckCrCmd(struct VBOXVDMAHOST *pVdma, PVBOXVDMACBUF_DR pCmdDr, uint32_t cbCmdDr)
@@ -2293,27 +2293,40 @@ int vboxVDMACrHgsmiControlCompleteAsync(PPDMIDISPLAYVBVACALLBACKS pInterface, PV
return VINF_SUCCESS;
}
-static int vboxVDMACmdExecBltPerform(PVBOXVDMAHOST pVdma, uint8_t *pvDstSurf, const uint8_t *pvSrcSurf,
+static int vboxVDMACmdExecBltPerform(PVBOXVDMAHOST pVdma, const VBOXVIDEOOFFSET offDst, const VBOXVIDEOOFFSET offSrc,
const PVBOXVDMA_SURF_DESC pDstDesc, const PVBOXVDMA_SURF_DESC pSrcDesc,
const VBOXVDMA_RECTL * pDstRectl, const VBOXVDMA_RECTL * pSrcRectl)
{
- RT_NOREF(pVdma);
/* we do not support color conversion */
Assert(pDstDesc->format == pSrcDesc->format);
/* we do not support stretching */
Assert(pDstRectl->height == pSrcRectl->height);
Assert(pDstRectl->width == pSrcRectl->width);
+
if (pDstDesc->format != pSrcDesc->format)
return VERR_INVALID_FUNCTION;
+
+ uint8_t *pvRam = pVdma->pVGAState->vram_ptrR3;
+ uint32_t cbVRamSize = pVdma->pVGAState->vram_size;
+ uint8_t *pvDstSurf = pvRam + offDst;
+ uint8_t *pvSrcSurf = pvRam + offSrc;
+
if (pDstDesc->width == pDstRectl->width
&& pSrcDesc->width == pSrcRectl->width
- && pSrcDesc->width == pDstDesc->width)
+ && pSrcDesc->width == pDstDesc->width
+ && pSrcDesc->pitch == pDstDesc->pitch)
{
Assert(!pDstRectl->left);
Assert(!pSrcRectl->left);
uint32_t cbOff = pDstDesc->pitch * pDstRectl->top;
uint32_t cbSize = pDstDesc->pitch * pDstRectl->height;
- memcpy(pvDstSurf + cbOff, pvSrcSurf + cbOff, cbSize);
+
+ if ( cbSize <= cbVRamSize
+ && (uintptr_t)(pvDstSurf + cbOff) - (uintptr_t)pvRam <= cbVRamSize - cbSize
+ && (uintptr_t)(pvSrcSurf + cbOff) - (uintptr_t)pvRam <= cbVRamSize - cbSize)
+ memcpy(pvDstSurf + cbOff, pvSrcSurf + cbOff, cbSize);
+ else
+ return VERR_INVALID_PARAMETER;
}
else
{
@@ -2339,7 +2352,12 @@ static int vboxVDMACmdExecBltPerform(PVBOXVDMAHOST pVdma, uint8_t *pvDstSurf, co
for (uint32_t i = 0; ; ++i)
{
- memcpy (pvDstStart, pvSrcStart, cbDstLine);
+ if ( cbDstLine <= cbVRamSize
+ && (uintptr_t)pvDstStart - (uintptr_t)pvRam <= cbVRamSize - cbDstLine
+ && (uintptr_t)pvSrcStart - (uintptr_t)pvRam <= cbVRamSize - cbDstLine)
+ memcpy(pvDstStart, pvSrcStart, cbDstLine);
+ else
+ return VERR_INVALID_PARAMETER;
if (i == pDstRectl->height)
break;
pvDstStart += cbDstSkip;
@@ -2396,7 +2414,6 @@ static int vboxVDMACmdExecBlt(PVBOXVDMAHOST pVdma, const PVBOXVDMACMD_DMA_PRESEN
return VERR_INVALID_FUNCTION;
Assert(pBlt->cDstSubRects);
- uint8_t * pvRam = pVdma->pVGAState->vram_ptrR3;
VBOXVDMA_RECTL updateRectl = {0, 0, 0, 0};
if (pBlt->cDstSubRects)
@@ -2425,7 +2442,7 @@ static int vboxVDMACmdExecBlt(PVBOXVDMAHOST pVdma, const PVBOXVDMACMD_DMA_PRESEN
pSrcRectl = &srcRectl;
}
- int rc = vboxVDMACmdExecBltPerform(pVdma, pvRam + pBlt->offDst, pvRam + pBlt->offSrc,
+ int rc = vboxVDMACmdExecBltPerform(pVdma, pBlt->offDst, pBlt->offSrc,
&pBlt->dstDesc, &pBlt->srcDesc,
pDstRectl,
pSrcRectl);
@@ -2438,7 +2455,7 @@ static int vboxVDMACmdExecBlt(PVBOXVDMAHOST pVdma, const PVBOXVDMACMD_DMA_PRESEN
}
else
{
- int rc = vboxVDMACmdExecBltPerform(pVdma, pvRam + pBlt->offDst, pvRam + pBlt->offSrc,
+ int rc = vboxVDMACmdExecBltPerform(pVdma, pBlt->offDst, pBlt->offSrc,
&pBlt->dstDesc, &pBlt->srcDesc,
&pBlt->dstRectl,
&pBlt->srcRectl);
@@ -2452,10 +2469,12 @@ static int vboxVDMACmdExecBlt(PVBOXVDMAHOST pVdma, const PVBOXVDMACMD_DMA_PRESEN
return cbBlt;
}
-static int vboxVDMACmdExecBpbTransfer(PVBOXVDMAHOST pVdma, const PVBOXVDMACMD_DMA_BPB_TRANSFER pTransfer, uint32_t cbBuffer)
+static int vboxVDMACmdExecBpbTransfer(PVBOXVDMAHOST pVdma, VBOXVDMACMD_DMA_BPB_TRANSFER const *pTransfer, uint32_t cbBuffer)
{
- if (cbBuffer < sizeof (*pTransfer))
+ if (cbBuffer < sizeof(*pTransfer))
return VERR_INVALID_PARAMETER;
+ VBOXVDMACMD_DMA_BPB_TRANSFER const TransferSafeCopy = *pTransfer;
+ pTransfer = &TransferSafeCopy;
PVGASTATE pVGAState = pVdma->pVGAState;
uint8_t * pvRam = pVGAState->vram_ptrR3;
@@ -2469,6 +2488,25 @@ static int vboxVDMACmdExecBpbTransfer(PVBOXVDMAHOST pVdma, const PVBOXVDMACMD_DM
uint32_t cbTransfered = 0;
bool bSrcLocked = false;
bool bDstLocked = false;
+
+ if (pTransfer->fFlags & VBOXVDMACMD_DMA_BPB_TRANSFER_F_SRC_VRAMOFFSET)
+ {
+ if (RT_LIKELY( pTransfer->cbTransferSize <= pVGAState->vram_size
+ && pTransfer->Src.offVramBuf <= pVGAState->vram_size - pTransfer->cbTransferSize))
+ { /* likely */ }
+ else
+ return VERR_INVALID_PARAMETER;
+ }
+
+ if (pTransfer->fFlags & VBOXVDMACMD_DMA_BPB_TRANSFER_F_DST_VRAMOFFSET)
+ {
+ if (RT_LIKELY( pTransfer->cbTransferSize <= pVGAState->vram_size
+ && pTransfer->Dst.offVramBuf <= pVGAState->vram_size - pTransfer->cbTransferSize))
+ { /* likely */ }
+ else
+ return VERR_INVALID_PARAMETER;
+ }
+
do
{
uint32_t cbSubTransfer = cbTransfer;
diff --git a/src/VBox/Devices/Makefile.kmk b/src/VBox/Devices/Makefile.kmk
index 0262a4f..78b7137 100644
--- a/src/VBox/Devices/Makefile.kmk
+++ b/src/VBox/Devices/Makefile.kmk
@@ -578,6 +578,11 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file.
#VBoxDD_DEFS += VBOX_WITH_AUDIO_AC97_ONETIME_INIT
#VBoxDD_DEFS += VBOX_WITH_AUDIO_HDA_ONETIME_INIT
+ VBoxDD_DEFS += \
+ $(if $(VBOX_WITH_HP_HDA),VBOX_WITH_HP_HDA,) \
+ $(if $(VBOX_WITH_INTEL_HDA),VBOX_WITH_INTEL_HDA,) \
+ $(if $(VBOX_WITH_NVIDIA_HDA),VBOX_WITH_NVIDIA_HDA,)
+
#
# Enables asynchronous audio data handling
# to speed up the actual DMA data routines and keeping up
@@ -956,6 +961,11 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file.
Audio/DevHDA.cpp \
Audio/DevHDACommon.cpp
+ VBoxDDRC_DEFS += \
+ $(if $(VBOX_WITH_HP_HDA),VBOX_WITH_HP_HDA,) \
+ $(if $(VBOX_WITH_INTEL_HDA),VBOX_WITH_INTEL_HDA,) \
+ $(if $(VBOX_WITH_NVIDIA_HDA),VBOX_WITH_NVIDIA_HDA,)
+
ifdef VBOX_WITH_E1000
VBoxDDRC_DEFS += VBOX_WITH_E1000
VBoxDDRC_SOURCES += \
@@ -1126,7 +1136,10 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file.
$(if $(VBOX_WITH_VDMA),VBOX_WITH_VDMA,) \
$(if $(VBOX_WITH_CRHGSMI),VBOX_WITH_CRHGSMI,) \
$(if $(VBOXWDDM_WITH_VBVA),VBOXWDDM_WITH_VBVA,) \
- $(if $(VBOX_VDMA_WITH_WATCHDOG),VBOX_VDMA_WITH_WATCHDOG,)
+ $(if $(VBOX_VDMA_WITH_WATCHDOG),VBOX_VDMA_WITH_WATCHDOG,) \
+ $(if $(VBOX_WITH_HP_HDA),VBOX_WITH_HP_HDA,) \
+ $(if $(VBOX_WITH_INTEL_HDA),VBOX_WITH_INTEL_HDA,) \
+ $(if $(VBOX_WITH_NVIDIA_HDA),VBOX_WITH_NVIDIA_HDA,)
ifdef VBOX_WITH_E1000
VBoxDDR0_DEFS += VBOX_WITH_E1000
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm
index ad4cf79..be92738 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm
@@ -1172,7 +1172,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcde class=DATA group=DGROUP
section CONST2 progbits vstart=0xd8e align=1 ; size=0x3fa class=DATA group=DGROUP
_bios_cvs_version_string: ; 0xf0d8e LB 0x12
- db 'VirtualBox 5.2.4', 000h, 000h
+ db 'VirtualBox 5.2.6', 000h, 000h
_bios_prefix_string: ; 0xf0da0 LB 0x8
db 'BIOS: ', 000h, 000h
_isotag: ; 0xf0da8 LB 0x6
@@ -17873,4 +17873,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
db 'XM'
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0
- db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 0dfh
+ db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 0ddh
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum
index 95640cf..6d8ae4d 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum
@@ -1 +1 @@
-8557df9ac70db63a31d484fb3df58f5f *VBoxPcBios286.rom
+6f42b2c17eb6b184081991fbfb780cca *VBoxPcBios286.rom
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm
index 63b8fe7..95b0be5 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm
@@ -1136,7 +1136,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcf0 class=DATA group=DGROUP
section CONST2 progbits vstart=0xda0 align=1 ; size=0x3fa class=DATA group=DGROUP
_bios_cvs_version_string: ; 0xf0da0 LB 0x12
- db 'VirtualBox 5.2.4', 000h, 000h
+ db 'VirtualBox 5.2.6', 000h, 000h
_bios_prefix_string: ; 0xf0db2 LB 0x8
db 'BIOS: ', 000h, 000h
_isotag: ; 0xf0dba LB 0x6
@@ -17367,4 +17367,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
db 'XM'
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0
- db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 00ah
+ db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 008h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum
index 5137fa3..49fdca3 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum
@@ -1 +1 @@
-06158dec218592a330940d18297f3fef *VBoxPcBios386.rom
+d624fd8162ff1a3e893807aecb4e8ba7 *VBoxPcBios386.rom
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm
index 691902b..ad5b8cb 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm
@@ -1172,7 +1172,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcde class=DATA group=DGROUP
section CONST2 progbits vstart=0xd8e align=1 ; size=0x3fa class=DATA group=DGROUP
_bios_cvs_version_string: ; 0xf0d8e LB 0x12
- db 'VirtualBox 5.2.4', 000h, 000h
+ db 'VirtualBox 5.2.6', 000h, 000h
_bios_prefix_string: ; 0xf0da0 LB 0x8
db 'BIOS: ', 000h, 000h
_isotag: ; 0xf0da8 LB 0x6
@@ -18294,4 +18294,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
db 'XM'
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0
- db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fbh, 038h
+ db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fbh, 036h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum
index 5ee3bb2..9c298f1 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum
@@ -1 +1 @@
-7a8334c6ccb6240d6ce6088907947b15 *VBoxPcBios8086.rom
+a2a6934aac6689d28da376126c8eaa01 *VBoxPcBios8086.rom
diff --git a/src/VBox/Devices/VMMDev/VMMDev.cpp b/src/VBox/Devices/VMMDev/VMMDev.cpp
index bcc2aec..21eec79 100644
--- a/src/VBox/Devices/VMMDev/VMMDev.cpp
+++ b/src/VBox/Devices/VMMDev/VMMDev.cpp
@@ -3369,6 +3369,12 @@ static DECLCALLBACK(int) vmmdevIPort_SetCredentials(PPDMIVMMDEVPORT pInterface,
{
PVMMDEV pThis = RT_FROM_MEMBER(pInterface, VMMDEV, IPort);
AssertReturn(fFlags & (VMMDEV_SETCREDENTIALS_GUESTLOGON | VMMDEV_SETCREDENTIALS_JUDGE), VERR_INVALID_PARAMETER);
+ size_t const cchUsername = strlen(pszUsername);
+ AssertReturn(cchUsername < VMMDEV_CREDENTIALS_SZ_SIZE, VERR_BUFFER_OVERFLOW);
+ size_t const cchPassword = strlen(pszPassword);
+ AssertReturn(cchPassword < VMMDEV_CREDENTIALS_SZ_SIZE, VERR_BUFFER_OVERFLOW);
+ size_t const cchDomain = strlen(pszDomain);
+ AssertReturn(cchDomain < VMMDEV_CREDENTIALS_SZ_SIZE, VERR_BUFFER_OVERFLOW);
PDMCritSectEnter(&pThis->CritSect, VERR_IGNORED);
@@ -3378,9 +3384,12 @@ static DECLCALLBACK(int) vmmdevIPort_SetCredentials(PPDMIVMMDEVPORT pInterface,
if (fFlags & VMMDEV_SETCREDENTIALS_GUESTLOGON)
{
/* memorize the data */
- strcpy(pThis->pCredentials->Logon.szUserName, pszUsername);
- strcpy(pThis->pCredentials->Logon.szPassword, pszPassword);
- strcpy(pThis->pCredentials->Logon.szDomain, pszDomain);
+ memcpy(pThis->pCredentials->Logon.szUserName, pszUsername, cchUsername);
+ pThis->pCredentials->Logon.szUserName[cchUsername] = '\0';
+ memcpy(pThis->pCredentials->Logon.szPassword, pszPassword, cchPassword);
+ pThis->pCredentials->Logon.szPassword[cchPassword] = '\0';
+ memcpy(pThis->pCredentials->Logon.szDomain, pszDomain, cchDomain);
+ pThis->pCredentials->Logon.szDomain[cchDomain] = '\0';
pThis->pCredentials->Logon.fAllowInteractiveLogon = !(fFlags & VMMDEV_SETCREDENTIALS_NOLOCALLOGON);
}
/*
@@ -3389,9 +3398,12 @@ static DECLCALLBACK(int) vmmdevIPort_SetCredentials(PPDMIVMMDEVPORT pInterface,
else
{
/* memorize the data */
- strcpy(pThis->pCredentials->Judge.szUserName, pszUsername);
- strcpy(pThis->pCredentials->Judge.szPassword, pszPassword);
- strcpy(pThis->pCredentials->Judge.szDomain, pszDomain);
+ memcpy(pThis->pCredentials->Judge.szUserName, pszUsername, cchUsername);
+ pThis->pCredentials->Judge.szUserName[cchUsername] = '\0';
+ memcpy(pThis->pCredentials->Judge.szPassword, pszPassword, cchPassword);
+ pThis->pCredentials->Judge.szPassword[cchPassword] = '\0';
+ memcpy(pThis->pCredentials->Judge.szDomain, pszDomain, cchDomain);
+ pThis->pCredentials->Judge.szDomain[cchDomain] = '\0';
VMMDevNotifyGuest(pThis, VMMDEV_EVENT_JUDGE_CREDENTIALS);
}
diff --git a/src/VBox/Devices/testcase/Makefile.kmk b/src/VBox/Devices/testcase/Makefile.kmk
index cb7b5f6..3e3a51c 100644
--- a/src/VBox/Devices/testcase/Makefile.kmk
+++ b/src/VBox/Devices/testcase/Makefile.kmk
@@ -33,6 +33,9 @@ VBOX_DEVICES_TESTS_FEATURES = \
$(if $(VBOX_WITH_E1000),VBOX_WITH_E1000,) \
$(if $(VBOX_WITH_EHCI_IMPL),VBOX_WITH_EHCI_IMPL,) \
$(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \
+ $(if $(VBOX_WITH_HP_HDA),VBOX_WITH_HP_HDA,) \
+ $(if $(VBOX_WITH_INTEL_HDA),VBOX_WITH_INTEL_HDA,) \
+ $(if $(VBOX_WITH_NVIDIA_HDA),VBOX_WITH_NVIDIA_HDA,) \
$(if $(VBOX_WITH_LSILOGIC),VBOX_WITH_LSILOGIC,) \
$(if $(VBOX_WITH_NVME_IMPL),VBOX_WITH_NVME_IMPL,) \
$(if $(VBOX_WITH_PCI_PASSTHROUGH_IMPL),VBOX_WITH_PCI_PASSTHROUGH_IMPL,) \
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
index 0171bc4..11c9de7 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
@@ -511,6 +511,8 @@ void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
" [--vtxux on|off]\n"
" [--pae on|off]\n"
" [--longmode on|off]\n"
+ " [--ibpb-on-vm-exit on|off]\n"
+ " [--ibpb-on-vm-entry on|off]\n"
" [--cpu-profile \"host|Intel 80[86|286|386]\"]\n"
" [--cpuid-portability-level <0..3>\n"
" [--cpuid-set <leaf[:subleaf]> <eax> <ebx> <ecx> <edx>]\n"
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
index 57c7ba2..6dd1b76 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
@@ -74,6 +74,8 @@ enum
MODIFYVM_LARGEPAGES,
MODIFYVM_VTXVPID,
MODIFYVM_VTXUX,
+ MODIFYVM_IBPB_ON_VM_EXIT,
+ MODIFYVM_IBPB_ON_VM_ENTRY,
MODIFYVM_CPUS,
MODIFYVM_CPUHOTPLUG,
MODIFYVM_CPU_PROFILE,
@@ -254,6 +256,8 @@ static const RTGETOPTDEF g_aModifyVMOptions[] =
{ "--largepages", MODIFYVM_LARGEPAGES, RTGETOPT_REQ_BOOL_ONOFF },
{ "--vtxvpid", MODIFYVM_VTXVPID, RTGETOPT_REQ_BOOL_ONOFF },
{ "--vtxux", MODIFYVM_VTXUX, RTGETOPT_REQ_BOOL_ONOFF },
+ { "--ibpb-on-vm-exit", MODIFYVM_IBPB_ON_VM_EXIT, RTGETOPT_REQ_BOOL_ONOFF },
+ { "--ibpb-on-vm-entry", MODIFYVM_IBPB_ON_VM_ENTRY, RTGETOPT_REQ_BOOL_ONOFF },
{ "--cpuid-set", MODIFYVM_SETCPUID, RTGETOPT_REQ_UINT32_OPTIONAL_PAIR | RTGETOPT_FLAG_HEX },
{ "--cpuid-remove", MODIFYVM_DELCPUID, RTGETOPT_REQ_UINT32_OPTIONAL_PAIR | RTGETOPT_FLAG_HEX },
{ "--cpuidset", MODIFYVM_SETCPUID_OLD, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_HEX },
@@ -792,6 +796,14 @@ RTEXITCODE handleModifyVM(HandlerArg *a)
break;
}
+ case MODIFYVM_IBPB_ON_VM_EXIT:
+ CHECK_ERROR(sessionMachine, SetCPUProperty(CPUPropertyType_IBPBOnVMExit, ValueUnion.f));
+ break;
+
+ case MODIFYVM_IBPB_ON_VM_ENTRY:
+ CHECK_ERROR(sessionMachine, SetCPUProperty(CPUPropertyType_IBPBOnVMEntry, ValueUnion.f));
+ break;
+
case MODIFYVM_CPUS:
{
CHECK_ERROR(sessionMachine, COMSETTER(CPUCount)(ValueUnion.u32));
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
index 41cde38..114dab8 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
@@ -37,7 +37,7 @@
<context>
<name>QApplication</name>
<message>
- <location filename="../src/main.cpp" line="+450"/>
+ <location filename="../src/main.cpp" line="+446"/>
<source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source>
<translation>Exekutagarria <b>%1</b> behar du Qt %2.x, aurkituta Qt %3.</translation>
</message>
@@ -57,7 +57,7 @@
<translation><html><b>%1 (rc=%2)</b><br/><br/></translation>
</message>
<message>
- <location line="-540"/>
+ <location line="-536"/>
<source>Please try reinstalling VirtualBox.</source>
<translation>Mesedez ezarri berriro VirtualBox.</translation>
</message>
@@ -77,7 +77,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+445"/>
+ <location line="+441"/>
<source>VirtualBox - Runtime Error</source>
<translation>VirtualBox - Jarduera Akatsa</translation>
</message>
@@ -97,7 +97,7 @@
<translation>Kernel gidagailua ez dago eskuragarri</translation>
</message>
<message>
- <location line="-471"/>
+ <location line="-467"/>
<source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
<translation>VirtualBox kernel moduloak ez datoz bat VirtualBox-en bertsio honekin. VirtualBox-en ezarpenak dirudienez ez da ongi egin. Mesedez saiatu osorik kentzen eta VirtualBox berriro ezartzen.</translation>
</message>
@@ -139,7 +139,7 @@
<translation type="vanished">&Hurrengoa</translation>
</message>
<message>
- <location filename="../src/extensions/QIArrowSplitter.cpp" line="+337"/>
+ <location filename="../src/extensions/QIArrowSplitter.cpp" line="+341"/>
<source>&Details</source>
<translation type="unfinished">&Xehetasunak</translation>
</message>
@@ -171,7 +171,7 @@
<context>
<name>QIMessageBox</name>
<message>
- <location filename="../src/extensions/QIMessageBox.cpp" line="+299"/>
+ <location filename="../src/extensions/QIMessageBox.cpp" line="+300"/>
<location filename="../src/globals/UIMessageCenter.cpp" line="+1887"/>
<location filename="../src/widgets/UIPopupPaneButtonPane.cpp" line="+180"/>
<source>OK</source>
@@ -4582,7 +4582,7 @@
</message>
<message>
<location line="+15"/>
- <location line="+486"/>
+ <location line="+490"/>
<source>None</source>
<translation>Ezer ez</translation>
</message>
@@ -5116,7 +5116,7 @@
</message>
<message>
<location filename="../src/widgets/UIHostComboEditor.cpp" line="-397"/>
- <location filename="../src/widgets/UIHotKeyEditor.cpp" line="+178"/>
+ <location filename="../src/widgets/UIHotKeyEditor.cpp" line="+183"/>
<source>Unset shortcut</source>
<translation>Desezarri lastertekla</translation>
</message>
@@ -6460,7 +6460,7 @@
<translation>&Ahalbidetu Elkarketa Anitz</translation>
</message>
<message>
- <location filename="../src/widgets/UIFilmContainer.cpp" line="+147"/>
+ <location filename="../src/widgets/UIFilmContainer.cpp" line="+152"/>
<source>Screen %1</source>
<translation>%1 Ikusleihoa</translation>
</message>
@@ -11186,7 +11186,7 @@
<translation>Gonbidatu Ataka</translation>
</message>
<message>
- <location line="+421"/>
+ <location line="+423"/>
<source>Contains a list of port forwarding rules.</source>
<translation>Berbidalketa ataka arauen zerrenda bat du.</translation>
</message>
@@ -11292,7 +11292,7 @@
<translation>Erakutsi Egoerabarra</translation>
</message>
<message>
- <location line="+379"/>
+ <location line="+373"/>
<source>Select a virtual machine file</source>
<translation>Hautatu makina birtual agiria</translation>
</message>
@@ -11341,7 +11341,7 @@
<translation type="obsolete"><b>%1</b> orrialdean, %2</translation>
</message>
<message>
- <location filename="../src/settings/UISettingsDialog.cpp" line="+340"/>
+ <location filename="../src/settings/UISettingsDialog.cpp" line="+339"/>
<source>Invalid settings detected</source>
<translation>Ezarpen baliogabea atzeman da</translation>
</message>
@@ -11789,7 +11789,7 @@
<translation><nobr><b>Klikatu</b> adierazle egona aldatzeko.</nobr><br><nobr><b>Arrastatu-eta-&Askatu</b> adierazlearen kokapena aldatzeko.</nobr></translation>
</message>
<message>
- <location line="+370"/>
+ <location line="+374"/>
<source>Close</source>
<translation>Itxi</translation>
</message>
@@ -11802,7 +11802,7 @@
<context>
<name>UITakeSnapshotDialog</name>
<message>
- <location filename="../src/UITakeSnapshotDialog.cpp" line="+82"/>
+ <location filename="../src/UITakeSnapshotDialog.cpp" line="+83"/>
<source>Take Snapshot of Virtual Machine</source>
<translation type="unfinished">Hartu Makina Birtualaren Berehalako bat</translation>
</message>
@@ -11983,7 +11983,7 @@
<context>
<name>UIVMCloseDialog</name>
<message>
- <location filename="../src/runtime/UIVMCloseDialog.cpp" line="+410"/>
+ <location filename="../src/runtime/UIVMCloseDialog.cpp" line="+425"/>
<source>Close Virtual Machine</source>
<translation>Itxi Makina Birtuala</translation>
</message>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
index a9dfb32..ffd3bd3 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
@@ -12954,7 +12954,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Le modifiche che vuoi apportare richiedono che questo disco sia rilasciato dalla macchina alla quale è collegato.</p><p>Sei sicuro di voler rilasciare il file immagine del disco <nobr><b>%1</b></nobr>?</p><p>Ciò lo scollegherà dalle seguenti macchine virtuali: <b>%2</b>.</p></translation>
</message>
</context>
<context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
index 50bbac1..ec7ba71 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
@@ -11,7 +11,7 @@
<message>
<source>--</source>
<comment>Native language country name (empty if this language is for all countries)</comment>
- <translation></translation>
+ <translation>日本</translation>
</message>
<message>
<source>English</source>
@@ -21,7 +21,7 @@
<message>
<source>--</source>
<comment>Language country name, in English (empty if native country name is empty)</comment>
- <translation></translation>
+ <translation>Japan</translation>
</message>
<message>
<source>Oracle Corporation</source>
@@ -344,7 +344,7 @@
<message>
<source>%1, %2: %3, %4: %5, %6: %7</source>
<comment>col.1 text, col.2 name: col.2 text, col.3 name: col.3 text, col.4 name: col.4 text</comment>
- <translation type="unfinished"></translation>
+ <translation>%1, %2: %3, %4: %5, %6: %7</translation>
</message>
</context>
<context>
@@ -1618,95 +1618,95 @@
</message>
<message>
<source>&Host Network Manager...</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークマネージャー(&H)...</translation>
</message>
<message>
<source>Display the Host Network Manager window</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークマネージャーのウィンドウを表示</translation>
</message>
<message>
<source>&Machine Tools</source>
- <translation type="unfinished"></translation>
+ <translation>マシンツール(&M)</translation>
</message>
<message>
<source>Switch to machine tools</source>
- <translation type="unfinished"></translation>
+ <translation>マシンツールに切り替え</translation>
</message>
<message>
<source>&Machine Tools Menu</source>
- <translation type="unfinished"></translation>
+ <translation>マシンツールのメニュー(&M)</translation>
</message>
<message>
<source>Open the machine tools menu</source>
- <translation type="unfinished"></translation>
+ <translation>マシンツールのメニューを開く</translation>
</message>
<message>
<source>&Details</source>
- <translation type="unfinished">詳細(&D)</translation>
+ <translation>詳細(&D)</translation>
</message>
<message>
<source>Open the machine details pane</source>
- <translation type="unfinished"></translation>
+ <translation>マシン詳細ペインを開く</translation>
</message>
<message>
<source>&Snapshots</source>
- <translation type="unfinished">スナップショット(&S)</translation>
+ <translation>スナップショット(&S)</translation>
</message>
<message>
<source>Open the machine snapshots pane</source>
- <translation type="unfinished"></translation>
+ <translation>マシンスナップショットペインを開く</translation>
</message>
<message>
<source>&Global Tools</source>
- <translation type="unfinished"></translation>
+ <translation>グローバルツール(&G)</translation>
</message>
<message>
<source>Switch to global tools</source>
- <translation type="unfinished"></translation>
+ <translation>グローバルツールに切り替え</translation>
</message>
<message>
<source>&Global Tools Menu</source>
- <translation type="unfinished"></translation>
+ <translation>グローバルツールのメニュー(&G)</translation>
</message>
<message>
<source>Open the global tools menu</source>
- <translation type="unfinished"></translation>
+ <translation>グローバルツールのメニューを開く</translation>
</message>
<message>
<source>&Virtual Media Manager</source>
- <translation type="unfinished"></translation>
+ <translation>仮想メディアマネージャー(&V)</translation>
</message>
<message>
<source>Open the Virtual Media Manager</source>
- <translation type="unfinished"></translation>
+ <translation>仮想メディアマネージャーを開く</translation>
</message>
<message>
<source>&Host Network Manager</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークマネージャー(&H)</translation>
</message>
<message>
<source>Open the Host Network Manager</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークマネージャーを開く</translation>
</message>
<message>
<source>&Audio</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオ(&A)</translation>
</message>
<message>
<source>Audio Output</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオ出力</translation>
</message>
<message>
<source>Enable audio output</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオ出力を有効化</translation>
</message>
<message>
<source>Audio Input</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオ入力</translation>
</message>
<message>
<source>Enable audio input</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオ入力を有効化</translation>
</message>
</context>
<context>
@@ -1916,7 +1916,7 @@
</message>
<message>
<source>Detailed list of all components of all virtual machines of the current appliance</source>
- <translation type="unfinished"></translation>
+ <translation>現在のアプライアンスのすべての仮想マシンのすべてのコンポーネントの詳細リスト</translation>
</message>
</context>
<context>
@@ -1935,12 +1935,12 @@
<message>
<source>%1</source>
<comment>col.1 text</comment>
- <translation type="unfinished">%1</translation>
+ <translation>%1</translation>
</message>
<message>
<source>%1: %2</source>
<comment>col.1 text: col.2 text</comment>
- <translation type="unfinished">%1: %2</translation>
+ <translation>%1: %2</translation>
</message>
</context>
<context>
@@ -2612,7 +2612,7 @@
</message>
<message>
<source>Verifying %1...</source>
- <translation type="unfinished"></translation>
+ <translation>%1 を検証中...</translation>
</message>
</context>
<context>
@@ -2701,27 +2701,27 @@
<message>
<source>Result Code: </source>
<comment>error info</comment>
- <translation type="unfinished">終了コード : </translation>
+ <translation>終了コード : </translation>
</message>
<message>
<source>Component: </source>
<comment>error info</comment>
- <translation type="unfinished">コンポーネント: </translation>
+ <translation>コンポーネント: </translation>
</message>
<message>
<source>Interface: </source>
<comment>error info</comment>
- <translation type="unfinished">インターフェース: </translation>
+ <translation>インターフェース: </translation>
</message>
<message>
<source>Callee: </source>
<comment>error info</comment>
- <translation type="unfinished">呼び出し先: </translation>
+ <translation>呼び出し先: </translation>
</message>
<message>
<source>Callee RC: </source>
<comment>error info</comment>
- <translation type="unfinished">呼び出し先 RC: </translation>
+ <translation>呼び出し先 RC: </translation>
</message>
</context>
<context>
@@ -3062,12 +3062,12 @@ p, li { white-space: pre-wrap; }
<message>
<source>%1, %2: %3, %4</source>
<comment>col.2 text, col.3 name: col.3 text, col.1 name</comment>
- <translation type="unfinished"></translation>
+ <translation>%1, %2: %3, %4</translation>
</message>
<message>
<source>%1, %2: %3</source>
<comment>col.2 text, col.3 name: col.3 text</comment>
- <translation type="unfinished"></translation>
+ <translation>%1, %2: %3</translation>
</message>
</context>
<context>
@@ -3400,14 +3400,14 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Virtual Machine group</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシングループ</translation>
</message>
</context>
<context>
<name>UIGChooserItemMachine</name>
<message>
<source>Virtual Machine</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン</translation>
</message>
</context>
<context>
@@ -3421,7 +3421,7 @@ p, li { white-space: pre-wrap; }
<name>UIGChooserView</name>
<message>
<source>Contains a tree of Virtual Machines and their groups</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシンとそのグループのツリーを含む</translation>
</message>
</context>
<context>
@@ -3623,7 +3623,7 @@ p, li { white-space: pre-wrap; }
<message>
<source>Generic Driver, '%1'</source>
<comment>details (network)</comment>
- <translation>汎用ドライバー, '%1' </translation>
+ <translation>汎用ドライバー, '%1'</translation>
</message>
<message>
<source>Generic Driver, '%1' { %2 }</source>
@@ -3683,7 +3683,7 @@ p, li { white-space: pre-wrap; }
<message>
<source>%1 (%2 active)</source>
<comment>details (usb)</comment>
- <translation>%1 (%2 アクティブ)</translation>
+ <translation>%1 (%2 有効)</translation>
</message>
<message>
<source>Disabled</source>
@@ -3813,57 +3813,57 @@ p, li { white-space: pre-wrap; }
<message>
<source>Chipset Type</source>
<comment>details (system)</comment>
- <translation type="unfinished"></translation>
+ <translation>チップセットのタイプ</translation>
</message>
<message>
<source>Enabled</source>
<comment>details (system/EFI)</comment>
- <translation type="unfinished">有効</translation>
+ <translation>有効</translation>
</message>
<message>
<source>EFI</source>
<comment>details (system)</comment>
- <translation type="unfinished"></translation>
+ <translation>EFI</translation>
</message>
<message>
<source>Disabled</source>
<comment>details (system/EFI)</comment>
- <translation type="unfinished">無効</translation>
+ <translation>無効</translation>
</message>
<message>
<source>Disabled</source>
<comment>details (display/Unscaled HiDPI Video Output)</comment>
- <translation type="unfinished">無効</translation>
+ <translation>無効</translation>
</message>
<message>
<source>Audio Output</source>
<comment>details (audio)</comment>
- <translation type="unfinished"></translation>
+ <translation>オーディオ出力</translation>
</message>
<message>
<source>Enabled</source>
<comment>details (audio/output)</comment>
- <translation type="unfinished">有効</translation>
+ <translation>有効</translation>
</message>
<message>
<source>Disabled</source>
<comment>details (audio/output)</comment>
- <translation type="unfinished">無効</translation>
+ <translation>無効</translation>
</message>
<message>
<source>Audio Input</source>
<comment>details (audio)</comment>
- <translation type="unfinished"></translation>
+ <translation>オーディオ入力</translation>
</message>
<message>
<source>Enabled</source>
<comment>details (audio/input)</comment>
- <translation type="unfinished">有効</translation>
+ <translation>有効</translation>
</message>
<message>
<source>Disabled</source>
<comment>details (audio/input)</comment>
- <translation type="unfinished">無効</translation>
+ <translation>無効</translation>
</message>
</context>
<context>
@@ -3871,14 +3871,14 @@ p, li { white-space: pre-wrap; }
<message>
<source>%1 details</source>
<comment>like 'General details' or 'Storage details'</comment>
- <translation type="unfinished"></translation>
+ <translation>%1 の詳細</translation>
</message>
</context>
<context>
<name>UIGDetailsSet</name>
<message>
<source>Contains the details of virtual machine '%1'</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン '%1' の詳細を含む</translation>
</message>
</context>
<context>
@@ -4083,7 +4083,7 @@ p, li { white-space: pre-wrap; }
<name>UIGDetailsView</name>
<message>
<source>Contains a list of Virtual Machine details</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシンの詳細のリストを含む</translation>
</message>
</context>
<context>
@@ -4425,7 +4425,7 @@ p, li { white-space: pre-wrap; }
<message>
<source> (built-in)</source>
<comment>Language</comment>
- <translation>(内蔵)</translation>
+ <translation> (内蔵)</translation>
</message>
<message>
<source><unavailable></source>
@@ -5260,7 +5260,7 @@ p, li { white-space: pre-wrap; }
<message>
<source>%1: %2</source>
<comment>'key: value', like 'Name: MyVM'</comment>
- <translation type="unfinished">%1: %2</translation>
+ <translation>%1: %2</translation>
</message>
</context>
<context>
@@ -5342,170 +5342,170 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Left %1</source>
- <translation type="unfinished"></translation>
+ <translation>左 %1</translation>
</message>
<message>
<source>Right %1</source>
- <translation type="unfinished"></translation>
+ <translation>右 %1</translation>
</message>
</context>
<context>
<name>UIHostNetworkDetailsWidget</name>
<message>
<source>&Adapter</source>
- <translation type="unfinished">アダプター(&A)</translation>
+ <translation>アダプター(&A)</translation>
</message>
<message>
<source>&DHCP Server</source>
- <translation type="unfinished">DHCP サーバー(&D)</translation>
+ <translation>DHCP サーバー(&D)</translation>
</message>
<message>
<source>Configure Adapter &Automatically</source>
- <translation type="unfinished"></translation>
+ <translation>アダプターを自動で設定(&A)</translation>
</message>
<message>
<source>Configure Adapter &Manually</source>
- <translation type="unfinished"></translation>
+ <translation>アダプターを手動で設定(&M)</translation>
</message>
<message>
<source>&IPv4 Address:</source>
- <translation type="unfinished">IPv4 アドレス(&I):</translation>
+ <translation>&IPv4 アドレス:</translation>
</message>
<message>
<source>Holds the host IPv4 address for this adapter.</source>
- <translation type="unfinished">このアダプターのホスト IPv4 アドレスを指定します。</translation>
+ <translation>このアダプターのホスト IPv4 アドレスを指定します。</translation>
</message>
<message>
<source>IPv4 Network &Mask:</source>
- <translation type="unfinished">IPv4 ネットマスク(&M):</translation>
+ <translation>IPv4 ネットマスク(&M):</translation>
</message>
<message>
<source>Holds the host IPv4 network mask for this adapter.</source>
- <translation type="unfinished">このアダプターのホスト IPv4 ネットマスクを指定します。</translation>
+ <translation>このアダプターのホスト IPv4 ネットマスクを指定します。</translation>
</message>
<message>
<source>I&Pv6 Address:</source>
- <translation type="unfinished"></translation>
+ <translation>I&Pv6アドレス:</translation>
</message>
<message>
<source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
- <translation type="unfinished">IPv6がサポートされるとき、このアダプターのホスト IPv6 アドレスを指定します。</translation>
+ <translation>IPv6がサポートされるとき、このアダプターのホスト IPv6 アドレスを指定します。</translation>
</message>
<message>
<source>IPv6 Prefix &Length:</source>
- <translation type="unfinished">IPv6 ネットマスク長(&L):</translation>
+ <translation>IPv6 ネットマスク長(&L):</translation>
</message>
<message>
<source>Holds the host IPv6 prefix length for this adapter if IPv6 is supported.</source>
- <translation type="unfinished">IPv6がサポートされるとき、このアダプターのホスト IPv6 ネットマスクのプレフィックス長を指定します。</translation>
+ <translation>IPv6がサポートされるとき、このアダプターのホスト IPv6 ネットマスクのプレフィックス長を指定します。</translation>
</message>
<message>
<source>Reset</source>
- <translation type="unfinished">リセット</translation>
+ <translation>リセット</translation>
</message>
<message>
<source>Apply</source>
- <translation type="unfinished"></translation>
+ <translation>適用</translation>
</message>
<message>
<source>Reset changes in current interface details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のインターフェース詳細の変更をリセット</translation>
</message>
<message>
<source>Apply changes in current interface details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のインターフェース詳細の変更を適用</translation>
</message>
<message>
<source>Reset Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更をリセット(%1)</translation>
</message>
<message>
<source>Apply Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更を適用 (%1)</translation>
</message>
<message>
<source>&Enable Server</source>
- <translation type="unfinished">サーバーを有効化(&E)</translation>
+ <translation>サーバーを有効化(&E)</translation>
</message>
<message>
<source>When checked, the DHCP Server will be enabled for this network on machine start-up.</source>
- <translation type="unfinished">仮想マシンの起動時にこのネットワークのDHCPサーバーが有効になります。</translation>
+ <translation>仮想マシンの起動時にこのネットワークのDHCPサーバーが有効になります。</translation>
</message>
<message>
<source>Server Add&ress:</source>
- <translation type="unfinished">サーバー アドレス(&R):</translation>
+ <translation>サーバー アドレス(&R):</translation>
</message>
<message>
<source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
- <translation type="unfinished">ホストオンリーアダプターにDHCP サーバーによって割り当てられるIPアドレスを指定します。</translation>
+ <translation>ホストオンリーアダプターにDHCP サーバーによって割り当てられるIPアドレスを指定します。</translation>
</message>
<message>
<source>Server &Mask:</source>
- <translation type="unfinished">サーバー マスク(&M):</translation>
+ <translation>サーバー マスク(&M):</translation>
</message>
<message>
<source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーアダプターにDHCP サーバーによって割り当てられるネットマスクを指定します。</translation>
</message>
<message>
<source>&Lower Address Bound:</source>
- <translation type="unfinished">アドレス下限(&L):</translation>
+ <translation>アドレス下限(&L):</translation>
</message>
<message>
<source>Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーアダプターにDHCP サーバーによって割り当てられるアドレスの下限値を指定します。</translation>
</message>
<message>
<source>&Upper Address Bound:</source>
- <translation type="unfinished">アドレス上限(&U):</translation>
+ <translation>アドレス上限(&U):</translation>
</message>
<message>
<source>Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーアダプターにDHCP サーバーによって割り当てられるアドレスの上限値を指定します。</translation>
</message>
<message>
<source>Reset changes in current DHCP server details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のDHCPサーバー詳細の変更をリセット</translation>
</message>
<message>
<source>Apply changes in current DHCP server details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のDHCPサーバー詳細の変更を適用</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> is set to obtain the address automatically but the corresponding DHCP server is not enabled.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> はアドレスを自動的に取得するように設定されていますが、該当のDHCPサーバーは有効になっていません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv4 address.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいIPv4アドレスではありません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv4 network mask.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいIPv4ネットワークマスクではありません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv6 address.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいIPv6アドレスではありません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv6 prefix length.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいIPv6ネットワークマスクプレフィックス長ではありません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server address.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいDHCPサーバーアドレスではありません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server mask.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいDHCPサーバーマスクではありません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server lower address bound.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいDHCPサーバーのアドレス下限にありません。</translation>
</message>
<message>
<source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server upper address bound.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストインターフェース <nobr><b>%1</b></nobr> は正しいDHCPサーバーのアドレス上限にありません。</translation>
</message>
</context>
<context>
@@ -5513,191 +5513,191 @@ p, li { white-space: pre-wrap; }
<message>
<source>Enable</source>
<comment>DHCP Server</comment>
- <translation type="unfinished">有効</translation>
+ <translation>有効</translation>
</message>
<message>
<source>Adapter</source>
- <translation type="unfinished">アダプター</translation>
+ <translation>アダプター</translation>
</message>
<message>
<source>Automatically configured</source>
<comment>interface</comment>
- <translation type="unfinished">自動構成</translation>
+ <translation>自動構成</translation>
</message>
<message>
<source>Manually configured</source>
<comment>interface</comment>
- <translation type="unfinished">手動構成</translation>
+ <translation>手動構成</translation>
</message>
<message>
<source>IPv4 Address</source>
- <translation type="unfinished">IPv4 アドレス</translation>
+ <translation>IPv4 アドレス</translation>
</message>
<message>
<source>Not set</source>
<comment>address</comment>
- <translation type="unfinished">未設定</translation>
+ <translation>未設定</translation>
</message>
<message>
<source>IPv4 Network Mask</source>
- <translation type="unfinished">IPv4 ネットマスク</translation>
+ <translation>IPv4 ネットマスク</translation>
</message>
<message>
<source>Not set</source>
<comment>mask</comment>
- <translation type="unfinished">未設定</translation>
+ <translation>未設定</translation>
</message>
<message>
<source>IPv6 Address</source>
- <translation type="unfinished">IPv6 アドレス</translation>
+ <translation>IPv6 アドレス</translation>
</message>
<message>
<source>IPv6 Prefix Length</source>
- <translation type="unfinished">IPv6 ネットマスク</translation>
+ <translation>IPv6 ネットマスク</translation>
</message>
<message>
<source>Not set</source>
<comment>length</comment>
- <translation type="unfinished">未設定</translation>
+ <translation>未設定</translation>
</message>
<message>
<source>DHCP Server</source>
- <translation type="unfinished">DHCP サーバー</translation>
+ <translation>DHCP サーバー</translation>
</message>
<message>
<source>Enabled</source>
<comment>server</comment>
- <translation type="unfinished">有効</translation>
+ <translation>有効</translation>
</message>
<message>
<source>Disabled</source>
<comment>server</comment>
- <translation type="unfinished">無効</translation>
+ <translation>無効</translation>
</message>
<message>
<source>Address</source>
- <translation type="unfinished">アドレス</translation>
+ <translation>アドレス</translation>
</message>
<message>
<source>Network Mask</source>
- <translation type="unfinished">ネットマスク</translation>
+ <translation>ネットマスク</translation>
</message>
<message>
<source>Lower Bound</source>
- <translation type="unfinished">下限</translation>
+ <translation>下限</translation>
</message>
<message>
<source>Not set</source>
<comment>bound</comment>
- <translation type="unfinished">未設定</translation>
+ <translation>未設定</translation>
</message>
<message>
<source>Upper Bound</source>
- <translation type="unfinished">上限</translation>
+ <translation>上限</translation>
</message>
<message>
<source>&Network</source>
- <translation type="unfinished">ネットワーク(&N)</translation>
+ <translation>ネットワーク(&N)</translation>
</message>
<message>
<source>&Create</source>
- <translation type="unfinished">作成(&C)</translation>
+ <translation>作成(&C)</translation>
</message>
<message>
<source>Create Host-only Network (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーネットワークを作成 (%1)</translation>
</message>
<message>
<source>Create new host-only network</source>
- <translation type="unfinished"></translation>
+ <translation>新しいホストオンリーネットワークを作成</translation>
</message>
<message>
<source>&Remove...</source>
- <translation type="unfinished">除去(&R)...</translation>
+ <translation>除去(&R)...</translation>
</message>
<message>
<source>Remove Host-only Network (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーネットワークを除去 (%1)</translation>
</message>
<message>
<source>Remove selected host-only network</source>
- <translation type="unfinished"></translation>
+ <translation>選択したホストオンリーネットワークを除去します</translation>
</message>
<message>
<source>&Properties...</source>
- <translation type="unfinished"></translation>
+ <translation>プロパティ(&P)...</translation>
</message>
<message>
<source>Open Host-only Network Properties (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーネットワークのプロパティを開く (%1)</translation>
</message>
<message>
<source>Open pane with selected host-only network properties</source>
- <translation type="unfinished"></translation>
+ <translation>選択したホストオンリーネットワークのプロパティをペインで開く</translation>
</message>
<message>
<source>&Refresh...</source>
- <translation type="unfinished"></translation>
+ <translation>最新の情報に更新(&R)...</translation>
</message>
<message>
<source>Refresh Host-only Networks (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーネットワークを最新の状態に更新 (%1)</translation>
</message>
<message>
<source>Refresh the list of host-only networks</source>
- <translation type="unfinished"></translation>
+ <translation>ホストオンリーネットワークのリストを最新の状態に更新する</translation>
</message>
<message>
<source>Name</source>
- <translation type="unfinished">名前</translation>
+ <translation>名前</translation>
</message>
<message>
<source>IPv4 Address/Mask</source>
- <translation type="unfinished"></translation>
+ <translation>IPv4 アドレス/マスク</translation>
</message>
<message>
<source>IPv6 Address/Mask</source>
- <translation type="unfinished"></translation>
+ <translation>IPv6 アドレス/マスク</translation>
</message>
<message>
<source>Host Network Manager</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークマネージャー</translation>
</message>
<message>
<source>Reset</source>
- <translation type="unfinished">リセット</translation>
+ <translation>リセット</translation>
</message>
<message>
<source>Apply</source>
- <translation type="unfinished"></translation>
+ <translation>適用</translation>
</message>
<message>
<source>Close</source>
- <translation type="unfinished">閉じる</translation>
+ <translation>閉じる</translation>
</message>
<message>
<source>Reset changes in current host network details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のホストネットワーク詳細の変更をリセット</translation>
</message>
<message>
<source>Apply changes in current host network details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のホストネットワーク詳細の変更を適用</translation>
</message>
<message>
<source>Close dialog without saving</source>
- <translation type="unfinished"></translation>
+ <translation>保存しないでダイアログを閉じる</translation>
</message>
<message>
<source>Reset Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更をリセット (%1)</translation>
</message>
<message>
<source>Apply Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更を適用 (%1)</translation>
</message>
<message>
<source>Close Window (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ウィンドウを閉じる (%1)</translation>
</message>
</context>
<context>
@@ -5708,11 +5708,11 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Adding network...</source>
- <translation type="unfinished"></translation>
+ <translation>ネットワークの追加...</translation>
</message>
<message>
<source>Removing network...</source>
- <translation type="unfinished"></translation>
+ <translation>ネットワークの削除...</translation>
</message>
</context>
<context>
@@ -6184,112 +6184,112 @@ p, li { white-space: pre-wrap; }
<message>
<source>Adapter %1 (%2)</source>
<comment>Network tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>アダプター %1 (%2)</translation>
</message>
<message>
<source>IP</source>
<comment>Network tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>IP</translation>
</message>
<message>
<source>Cable</source>
<comment>Network tooltip</comment>
- <translation type="unfinished">ケーブル</translation>
+ <translation>ケーブル</translation>
</message>
<message>
<source>Connected</source>
<comment>cable (Network tooltip)</comment>
- <translation type="unfinished">接続</translation>
+ <translation>接続</translation>
</message>
<message>
<source>Disconnected</source>
<comment>cable (Network tooltip)</comment>
- <translation type="unfinished">切断</translation>
+ <translation>切断</translation>
</message>
<message>
<source>No USB devices attached</source>
<comment>USB tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>USBデバイス未割り当て</translation>
</message>
<message>
<source>No shared folders</source>
<comment>Shared folders tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>共有フォルダーなし</translation>
</message>
<message>
<source>Video memory</source>
<comment>Display tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>ビデオメモリー</translation>
</message>
<message>
<source>Screens</source>
<comment>Display tooltip</comment>
- <translation type="unfinished">スクリーン</translation>
+ <translation>スクリーン</translation>
</message>
<message>
<source>3D acceleration</source>
<comment>Display tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>3D アクセラレーション</translation>
</message>
<message>
<source>Video capture disabled</source>
<comment>Video capture tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>ビデオキャプチャー無効</translation>
</message>
<message>
<source>Video capture file</source>
<comment>Video capture tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>ビデオキャプチャーしたファイル</translation>
</message>
<message>
<source>Indicates whether the host mouse pointer is captured by the guest OS:%1</source>
<comment>Mouse tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>ホストのマウスポインターをゲストOS (%1) でキャプチャーしているかどうかを示します</translation>
</message>
<message>
<source>pointer is not captured</source>
<comment>Mouse tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>ポインターがキャプチャーされていません</translation>
</message>
<message>
<source>pointer is captured</source>
<comment>Mouse tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>ポインターがキャプチャーされています</translation>
</message>
<message>
<source>mouse integration (MI) is On</source>
<comment>Mouse tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>マウス統合 (MI) が有効です</translation>
</message>
<message>
<source>MI is Off, pointer is captured</source>
<comment>Mouse tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>MIがオンです。ポインターはキャプチャーされています</translation>
</message>
<message>
<source>MI is Off, pointer is not captured</source>
<comment>Mouse tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>MIがオフです。ポインターはキャプチャーされていません</translation>
</message>
<message>
<source>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source>
<comment>Mouse tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>マウス統合機能はインストールしたゲストOSにGuest Additionsが必要です。</translation>
</message>
<message>
<source>Indicates whether the host keyboard is captured by the guest OS:%1</source>
<comment>Keyboard tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>ホストのキーボードをゲストOS (%1) でキャプチャーしているかどうかを示します</translation>
</message>
<message>
<source>keyboard is not captured</source>
<comment>Keyboard tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>キーボードがキャプチャーされていません</translation>
</message>
<message>
<source>keyboard is captured</source>
<comment>Keyboard tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation>キーボードがギャプチャーされています</translation>
</message>
</context>
<context>
@@ -6595,7 +6595,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Requests</source>
- <translation type="unfinished"></translation>
+ <translation>リクエスト</translation>
</message>
</context>
<context>
@@ -6726,7 +6726,7 @@ p, li { white-space: pre-wrap; }
<message>
<source>%1 (%2 active)</source>
<comment>details report (USB)</comment>
- <translation>%1 (%2 アクティブ)</translation>
+ <translation>%1 (%2 有効)</translation>
</message>
</context>
<context>
@@ -6734,12 +6734,12 @@ p, li { white-space: pre-wrap; }
<message>
<source>%1, %2</source>
<comment>col.2 text, col.1 name</comment>
- <translation type="unfinished">%1: %2 {1,?}</translation>
+ <translation>%1: %2</translation>
</message>
<message>
<source>%1</source>
<comment>col.2 text</comment>
- <translation type="unfinished">%1</translation>
+ <translation>%1</translation>
</message>
</context>
<context>
@@ -6860,23 +6860,23 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Extended Features:</source>
- <translation type="unfinished">拡張機能:</translation>
+ <translation>拡張機能:</translation>
</message>
<message>
<source>When checked, output to the virtual audio device will reach the host. Otherwise the guest is muted.</source>
- <translation type="unfinished"></translation>
+ <translation>仮想オーディオデバイスの出力をホストに届けます。そうでなければゲストは無音です。</translation>
</message>
<message>
<source>Enable Audio &Output</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオ出力を有効化(&O)</translation>
</message>
<message>
<source>When checked, the guest will be able to capture audio input from the host. Otherwise the guest will capture only silence.</source>
- <translation type="unfinished"></translation>
+ <translation>ゲストはホストからのオーディオ入力をキャプチャします。そうでなければゲストは無音をキャプチャします。</translation>
</message>
<message>
<source>Enable Audio &Input</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオ入力を有効化(&I)</translation>
</message>
</context>
<context>
@@ -7270,11 +7270,11 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>When checked, VirtualBox will record the audio stream to video file as well.</source>
- <translation type="unfinished"></translation>
+ <translation>チェックを入れると、VirtualBoxはオーディオストリームもビデオファイルの記録します。</translation>
</message>
<message>
<source>&Record Audio</source>
- <translation type="unfinished"></translation>
+ <translation>オーディオを保存(&R)</translation>
</message>
</context>
<context>
@@ -7577,7 +7577,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>You are trying to encrypt this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site.</source>
- <translation>この仮想マシンを暗号化しようとしています。しかし、これには<i>%1</i> のインストールが必要です。VirtualBoxダウンロードサイトから拡張パックをインストールしてください。 </translation>
+ <translation>この仮想マシンを暗号化しようとしています。しかし、これには<i>%1</i> のインストールが必要です。VirtualBoxダウンロードサイトから拡張パックをインストールしてください。</translation>
</message>
<message>
<source>Encryption cipher type not specified.</source>
@@ -8259,11 +8259,11 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source> Machine Folders</source>
- <translation>共有フォルダー</translation>
+ <translation> 共有フォルダー</translation>
</message>
<message>
<source> Transient Folders</source>
- <translation>一時的な共有フォルダー</translation>
+ <translation> 一時的な共有フォルダー</translation>
</message>
<message>
<source>Full</source>
@@ -8339,7 +8339,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Shared &Folders</source>
- <translation type="unfinished">共有フォルダー(&F)</translation>
+ <translation>共有フォルダー(&F)</translation>
</message>
</context>
<context>
@@ -8668,7 +8668,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>No hard disk is selected for <i>%1</i>.</source>
- <translation> <i>%1</i>のためのハードディスクが選択されていません。</translation>
+ <translation><i>%1</i>のためのハードディスクが選択されていません。</translation>
</message>
<message>
<source>no name specified for controller at position <b>%1</b>.</source>
@@ -9144,7 +9144,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>&Storage Devices</source>
- <translation type="unfinished"></translation>
+ <translation>ストレージデバイス(&S)</translation>
</message>
</context>
<context>
@@ -9462,19 +9462,19 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed to support a chipset of type ICH9. It will be enabled automatically if you confirm your changes.</source>
- <translation type="unfinished"></translation>
+ <translation>I/O APIC機能はシステムページのマザーボードセクションで有効になっていません。チップセットのタイプをICH9にするなら必須です。変更を確認すると自動的に有効になります。</translation>
</message>
<message>
<source>The USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB pointing device. It will be enabled automatically if you confirm your changes.</source>
- <translation type="unfinished"></translation>
+ <translation>USBコントローラーエミュレーションがUSBのページで有効になっていません。USBポインティングデバイスのエミュレーションを使用するのに必要です。変更を確認すると自動的に有効になります。</translation>
</message>
<message>
<source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed to support more than one virtual processor. It will be enabled automatically if you confirm your changes.</source>
- <translation type="unfinished"></translation>
+ <translation>I/O APIC機能はシステムページのマザーボードセクションで有効になっていません。仮想プロセッサーを1つ以上にするのなら必須です。変更を確認すると自動的に有効になります。</translation>
</message>
<message>
<source>The hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed to support more than one virtual processor. It will be enabled automatically if you confirm your changes.</source>
- <translation type="unfinished"></translation>
+ <translation>ハードウェア仮想化がシステムページのアクセラレーションセクションで有効になっていません。仮想プロセッサーを1つ以上にするのなら必須です。変更を確認すると自動的に有効になります。</translation>
</message>
</context>
<context>
@@ -9835,7 +9835,7 @@ p, li { white-space: pre-wrap; }
<name>UIMachineWindow</name>
<message>
<source> EXPERIMENTAL build %1r%2 - %3</source>
- <translation>試験的ビルド %1r%2 - %3</translation>
+ <translation> 試験的ビルド %1r%2 - %3</translation>
</message>
</context>
<context>
@@ -9849,103 +9849,103 @@ p, li { white-space: pre-wrap; }
<name>UIMediumDetailsWidget</name>
<message>
<source>&Attributes</source>
- <translation type="unfinished"></translation>
+ <translation>属性(&A)</translation>
</message>
<message>
<source>&Information</source>
- <translation type="unfinished"></translation>
+ <translation>情報(&I)</translation>
</message>
<message>
<source>&Type:</source>
- <translation type="unfinished">タイプ(&T):</translation>
+ <translation>タイプ(&T):</translation>
</message>
<message>
<source>&Location:</source>
- <translation type="unfinished"></translation>
+ <translation>場所(&L):</translation>
</message>
<message>
<source>&Description:</source>
- <translation type="unfinished">説明(&D):</translation>
+ <translation>説明(&D):</translation>
</message>
<message>
<source>&Size:</source>
- <translation type="unfinished"></translation>
+ <translation>サイズ(&S):</translation>
</message>
<message>
<source>Holds the type of this medium.</source>
- <translation type="unfinished"></translation>
+ <translation>このメディアのタイプを指定します。</translation>
</message>
<message>
<source>Holds the location of this medium.</source>
- <translation type="unfinished"></translation>
+ <translation>このメディアの場所を指定します。</translation>
</message>
<message>
<source>Holds the description of this medium.</source>
- <translation type="unfinished"></translation>
+ <translation>このメディアの説明を指定します。</translation>
</message>
<message>
<source>Holds the size of this medium.</source>
- <translation type="unfinished"></translation>
+ <translation>このメディアのサイズを指定します。</translation>
</message>
<message>
<source>Reset</source>
- <translation type="unfinished">リセット</translation>
+ <translation>リセット</translation>
</message>
<message>
<source>Apply</source>
- <translation type="unfinished"></translation>
+ <translation>適用</translation>
</message>
<message>
<source>Reset changes in current medium details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のメディアの説明の変更をリセットします</translation>
</message>
<message>
<source>Apply changes in current medium details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のメディアの説明の変更を適用します</translation>
</message>
<message>
<source>Reset Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更をリセット(%1)</translation>
</message>
<message>
<source>Apply Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更の適用 (%1)</translation>
</message>
<message>
<source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
- <translation type="unfinished"></translation>
+ <translation><b>%1</b>から<b>%2</b>へのメディアサイズの縮小は現在サポートしていません。</translation>
</message>
<message>
<source>Choose Medium Location</source>
- <translation type="unfinished"></translation>
+ <translation>メディアの場所を選択</translation>
</message>
<message>
<source>Location can not be empty.</source>
- <translation type="unfinished"></translation>
+ <translation>場所は空にできません。</translation>
</message>
<message>
<source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
- <translation type="unfinished">このタイプのメディアは直接あるいは間接的に割り当てられます。スナップショットでは保持されます。</translation>
+ <translation>このタイプのメディアは直接あるいは間接的に割り当てられます。スナップショットでは保持されます。</translation>
</message>
<message>
<source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
- <translation type="unfinished">このタイプのメディアは間接的に割り当てられます。変更は次に仮想マシンが起動するときには消去しています。</translation>
+ <translation>このタイプのメディアは間接的に割り当てられます。変更は次に仮想マシンが起動するときには消去しています。</translation>
</message>
<message>
<source>This type of medium is attached directly, ignored when taking snapshots.</source>
- <translation type="unfinished">このタイプのメディアは直接割り当てられます。スナップショットでは無視されます。</translation>
+ <translation>このタイプのメディアは直接割り当てられます。スナップショットでは無視されます。</translation>
</message>
<message>
<source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
- <translation type="unfinished">このタイプのメディアは直接割り当てられます。いくつかのマシンから同時利用できます。</translation>
+ <translation>このタイプのメディアは直接割り当てられます。いくつかのマシンから同時利用できます。</translation>
</message>
<message>
<source>This type of medium is attached directly, and can be used by several machines.</source>
- <translation type="unfinished">このタイプのメディアは直接割り当てられます。いくつかのマシンから使用されることもあります。</translation>
+ <translation>このタイプのメディアは直接割り当てられます。いくつかのマシンから使用されることもあります。</translation>
</message>
<message>
<source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
- <translation type="unfinished">このタイプのメディアは間接的に割り当てられます。一つのベースとなるメディアを元に独自の変更を加えた上で、いくつかのVMから使用されています。</translation>
+ <translation>このタイプのメディアは間接的に割り当てられます。一つのベースとなるメディアを元に独自の変更を加えた上で、いくつかのVMから使用されています。</translation>
</message>
</context>
<context>
@@ -9981,199 +9981,199 @@ p, li { white-space: pre-wrap; }
<message>
<source>%1, %2: %3, %4: %5</source>
<comment>col.1 text, col.2 name: col.2 text, col.3 name: col.3 text</comment>
- <translation type="unfinished"></translation>
+ <translation>%1, %2: %3, %4: %5</translation>
</message>
<message>
<source>Format:</source>
- <translation type="unfinished">フォーマット:</translation>
+ <translation>フォーマット:</translation>
</message>
<message>
<source>Storage details:</source>
- <translation type="unfinished">ストレージの詳細:</translation>
+ <translation>ストレージの詳細:</translation>
</message>
<message>
<source>Attached to:</source>
- <translation type="unfinished">割り当て:</translation>
+ <translation>割り当て:</translation>
</message>
<message>
<source>Encrypted with key:</source>
- <translation type="unfinished">暗号化の鍵:</translation>
+ <translation>暗号化の鍵:</translation>
</message>
<message>
<source>UUID:</source>
- <translation type="unfinished">UUID:</translation>
+ <translation>UUID:</translation>
</message>
<message>
<source><i>Not Attached</i></source>
- <translation type="unfinished"><i>未割り当て</i></translation>
+ <translation><i>未割り当て</i></translation>
</message>
<message>
<source><i>Not Encrypted</i></source>
- <translation type="unfinished"><i>暗号化なし</i></translation>
+ <translation><i>暗号化なし</i></translation>
</message>
<message>
<source>--</source>
<comment>no info</comment>
- <translation type="unfinished">--</translation>
+ <translation>--</translation>
</message>
<message>
<source>&Medium</source>
- <translation type="unfinished"></translation>
+ <translation>メディア(&M)</translation>
</message>
<message>
<source>&Copy...</source>
- <translation type="unfinished">コピー(&C)...</translation>
+ <translation>コピー(&C)...</translation>
</message>
<message>
<source>Copy selected disk image file</source>
- <translation type="unfinished"></translation>
+ <translation>選択したディスクイメージファイルをコピー</translation>
</message>
<message>
<source>&Remove...</source>
- <translation type="unfinished">除去(&R)...</translation>
+ <translation>除去(&R)...</translation>
</message>
<message>
<source>Remove selected disk image file</source>
- <translation type="unfinished"></translation>
+ <translation>選択したディスクイメージファイルを除去</translation>
</message>
<message>
<source>Re&lease...</source>
- <translation type="unfinished"></translation>
+ <translation>解放(&L)...</translation>
</message>
<message>
<source>Release selected disk image file by detaching it from machines</source>
- <translation type="unfinished"></translation>
+ <translation>選択したメディアを仮想マシンから割り当て解除して解放する</translation>
</message>
<message>
<source>&Properties...</source>
- <translation type="unfinished"></translation>
+ <translation>プロパティ(&P)...</translation>
</message>
<message>
<source>Open pane with selected disk image file properties</source>
- <translation type="unfinished"></translation>
+ <translation>選択したディスクイメージファイルのプロパティをペインで開く</translation>
</message>
<message>
<source>Re&fresh</source>
- <translation type="unfinished">最新の情報に更新(&F)</translation>
+ <translation>最新の情報に更新(&F)</translation>
</message>
<message>
<source>Refresh the list of disk image files</source>
- <translation type="unfinished">メディアリストを最新の情報に更新</translation>
+ <translation>メディアリストを最新の情報に更新</translation>
</message>
<message>
<source>Name</source>
- <translation type="unfinished">名前</translation>
+ <translation>名前</translation>
</message>
<message>
<source>Virtual Size</source>
- <translation type="unfinished">仮想的なサイズ</translation>
+ <translation>仮想的なサイズ</translation>
</message>
<message>
<source>Actual Size</source>
- <translation type="unfinished">実際のサイズ</translation>
+ <translation>実際のサイズ</translation>
</message>
<message>
<source>Size</source>
- <translation type="unfinished">サイズ</translation>
+ <translation>サイズ</translation>
</message>
<message>
<source>Checking accessibility</source>
- <translation type="unfinished">アクセス可否を確認</translation>
+ <translation>アクセス可否を確認</translation>
</message>
<message>
<source>Moving medium...</source>
- <translation type="unfinished"></translation>
+ <translation>メディアを移動中...</translation>
</message>
<message>
<source>Virtual Media Manager</source>
- <translation type="unfinished">仮想メディアマネージャー</translation>
+ <translation>仮想メディアマネージャー</translation>
</message>
<message>
<source>Reset</source>
- <translation type="unfinished">リセット</translation>
+ <translation>リセット</translation>
</message>
<message>
<source>Apply</source>
- <translation type="unfinished"></translation>
+ <translation>適用</translation>
</message>
<message>
<source>Close</source>
- <translation type="unfinished">閉じる</translation>
+ <translation>閉じる</translation>
</message>
<message>
<source>Reset changes in current medium details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のメディアの説明の変更をリセットします</translation>
</message>
<message>
<source>Apply changes in current medium details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のメディアの説明の変更を適用します</translation>
</message>
<message>
<source>Close dialog without saving</source>
- <translation type="unfinished"></translation>
+ <translation>保存しないでダイアログを閉じる</translation>
</message>
<message>
<source>Reset Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更をリセット (%1)</translation>
</message>
<message>
<source>Apply Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更を適用 (%1)</translation>
</message>
<message>
<source>Close Window (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ウィンドウを閉じる (%1)</translation>
</message>
<message>
<source>Copy Disk Image File (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージファイル ( %1) をコピー</translation>
</message>
<message>
<source>Remove Disk Image File (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージファイルを除去 (%1)</translation>
</message>
<message>
<source>Release Disk Image File (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージファイルを解放 (%1)</translation>
</message>
<message>
<source>Open Disk Image File Properties (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージファイルのプロパティを開く (%1)</translation>
</message>
<message>
<source>Refresh Disk Image Files (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージファイルを最新の情報に更新 (%1)</translation>
</message>
<message>
<source>Current extension (*.%1)</source>
- <translation type="unfinished"></translation>
+ <translation>現在の拡張機能 (*.%1)</translation>
</message>
<message>
<source>Choose the location of this medium</source>
- <translation type="unfinished"></translation>
+ <translation>このメディアの場所を選択</translation>
</message>
<message>
<source>&Move...</source>
- <translation type="unfinished"></translation>
+ <translation>移動(&M)...</translation>
</message>
<message>
<source>Move Disk Image File (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージファイル (%1) を移動</translation>
</message>
<message>
<source>Move selected disk image file</source>
- <translation type="unfinished"></translation>
+ <translation>選択したディスクイメージファイルを移動</translation>
</message>
</context>
<context>
<name>UIMediumSizeEditor</name>
<message>
<source>Holds the size of this medium.</source>
- <translation type="unfinished"></translation>
+ <translation>このメディアのサイズを指定します。</translation>
</message>
<message>
<source><nobr>%1 (%2 B)</nobr></source>
- <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
+ <translation><nobr>%1 (%2 B)</nobr></translation>
</message>
</context>
<context>
@@ -10239,11 +10239,12 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Toggle menu %1</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>要確認</translatorcomment>
+ <translation>トグルメニュー %1</translation>
</message>
<message>
<source>Popup menu %1</source>
- <translation type="unfinished"></translation>
+ <translation>ポップアップメニュー %1</translation>
</message>
</context>
<context>
@@ -10643,7 +10644,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Failed to create DHCP server.</source>
- <translation type="vanished">DHCPサーバーの作成しに失敗しました。</translation>
+ <translation type="vanished">DHCPサーバーの作成に失敗しました。</translation>
</message>
<message>
<source>Failed to remove DHCP server for network interface <b>%1</b>.</source>
@@ -10651,7 +10652,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Failed to create the host network interface.</source>
- <translation type="vanished">ホストネットワークインターフェースの作成しに失敗しました。</translation>
+ <translation type="vanished">ホストネットワークインターフェースの作成に失敗しました。</translation>
</message>
<message>
<source>Create &new disk</source>
@@ -10775,7 +10776,7 @@ p, li { white-space: pre-wrap; }
<message>
<source>Severity: </source>
<comment>runtime error info</comment>
- <translation>重要度:</translation>
+ <translation>重要度: </translation>
</message>
<message>
<source><p>A fatal error has occurred during virtual machine execution! The virtual machine will be powered off. Please copy the following error message using the clipboard to help diagnose the problem:</p></source>
@@ -12169,140 +12170,140 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source><p>Failed to acquire the VirtualBox COM object.</p><p>The application will now terminate.</p></source>
- <translation><p>VirtualBox COMオブジェクトの作成に失敗しました。</p><p>アプリケーションを終了します。</p></translation>
+ <translation><p>VirtualBox COMオブジェクトの確保に失敗しました。</p><p>アプリケーションを終了します。</p></translation>
</message>
<message>
<source>Delete</source>
<comment>extension pack</comment>
- <translation type="unfinished">削除</translation>
+ <translation>削除</translation>
</message>
<message>
<source>Do you want to delete the downloaded file <nobr><b>%1</b></nobr>?</source>
- <translation type="unfinished"></translation>
+ <translation>ダウンロードしたファイル <nobr><b>%1</b></nobr> を本当に削除しますか?</translation>
</message>
<message>
<source>Do you want to delete following list of files <nobr><b>%1</b></nobr>?</source>
- <translation type="unfinished"></translation>
+ <translation>次のリストのファイル <nobr><b>%1</b></nobr> を本当に削除しますか?</translation>
</message>
<message>
<source><p>The reason for this error are most likely wrong permissions of the IPC daemon socket due to an installation problem. Please check the permissions of <font color=blue>'/tmp'</font> and <font color=blue>'/tmp/.vbox-*-ipc/'</font></p></source>
- <translation type="unfinished"></translation>
+ <translation><p>このエラーが表示される主な理由として、インストールの問題によりIPCデーモンソケットのパーミッションが誤っていることが考えられます。<font color=blue>'/tmp'</font> と <font color=blue>'/tmp/.vbox-*-ipc/'</font>のパーミッションを確認してください。</p></translation>
</message>
<message>
<source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>, </nobr>but the SHA-256 checksum verification failed.</p><p>Please do the download, installation and verification manually.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>VirtualBox Guest Additions</b> ディスクイメージを<nobr><a href="%1">%1</a></nobr>からダウンロードし、<nobr><b>%2</b>に保存しました</nobr>が、SHA256チェックサムの照合に失敗しました。</p><p>ダウンロードとインストールと認証を手動で行ってください。</p></translation>
</message>
<message>
<source><p>The <b><nobr>%1</nobr></b> has been successfully downloaded from <nobr><a href="%2">%2</a></nobr> and saved locally as <nobr><b>%3</b>, </nobr>but the SHA-256 checksum verification failed.</p><p>Please do the download, installation and verification manually.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>%1</b> を <nobr><a href="%2">%2</a></nobr>からダウンロードし、<nobr><b>%3</b>に保存しました</nobr>が、SHA256チェックサムの照合に失敗しました。</p><p>ダウンロードとインストールと認証を手動で行ってください。</p></translation>
</message>
<message>
<source><p>You are about to start all of the following virtual machines:</p><p><b>%1</b></p><p>This could take some time and consume a lot of host system resources. Do you wish to proceed?</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>次の仮想マシンを開始しようとしています:</p><p><b>%1</b></p><p>これは時間がかかり、ホストのシステムリソースを大量に消費するでしょう。本当に継続しますか?</p></translation>
</message>
<message>
<source>Can't find snapshot with ID=<b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation><b>%1</b> というIDのスナップショットが見つかりません。</translation>
</message>
<message>
<source>Can't acquire snapshot attributes.</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットの属性を確保できません。</translation>
</message>
<message>
<source>Failed to move the storage unit of the disk image <b>%1</b> to <b>%2</b>.</source>
- <translation type="unfinished"></translation>
+ <translation><b>%1</b> から <b>%2</b>への、ディスクイメージのストレージユニットの移動に失敗しました。</translation>
</message>
<message>
<source><p>Error changing the description of the disk image <b>%1</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>ディスクイメージ <b>%1</b> の説明の変更に失敗しました。</p></translation>
</message>
<message>
<source>Failed to resize the storage unit of the hard disk <b>%1</b> from <b>%2</b> to <b>%3</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>ストレージユニットのハードディスク <b>%1</b> の <b>%2</b> から <b>%3</b>へのリサイズに失敗しました。</translation>
</message>
<message>
<source>Failed to acquire host network interfaces.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークインターフェースの確保に失敗しました。</translation>
</message>
<message>
<source>Unable to find the host network interface <b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークインターフェース <b>%1</b> が見つかりません。</translation>
</message>
<message>
<source>Failed to create a host network interface.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークインターフェースの作成に失敗しました。</translation>
</message>
<message>
<source>Failed to acquire host network interface parameter.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークインターフェースのパラメーターの確保に失敗しました。</translation>
</message>
<message>
<source>Failed to save host network interface parameter.</source>
- <translation type="unfinished"></translation>
+ <translation>ホストネットワークインターフェースのパラメーターの保存に失敗しました。</translation>
</message>
<message>
<source>Failed to create a DHCP server for the network interface <b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>ネットワークインターフェース <b>%1</b> のDHCPサーバーの作成に失敗しました。</translation>
</message>
<message>
<source>Failed to remove the DHCP server for the network interface <b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>ネットワークインターフェース <b>%1</b> のDHCPサーバーの除去に失敗しました。</translation>
</message>
<message>
<source>Failed to acquire DHCP server parameter.</source>
- <translation type="unfinished"></translation>
+ <translation>DHCPサーバーのパラメーターの作成に失敗しました。</translation>
</message>
<message>
<source>Failed to save DHCP server parameter.</source>
- <translation type="unfinished"></translation>
+ <translation>DHCPサーバーのパラメーターの保存に失敗しました。</translation>
</message>
<message>
<source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name: </b></td><td>%1< [...]
- <translation type="unfinished"><p>VirtualBox 機能拡張パッケージをインストールします。機能拡張パッケージはVirtualBoxに機能を追加しますが、コンピューターに危害を与えるようなシステムレベルのソフトウェアを含んでいる可能性があります。信頼できる発行元から機能拡張パッケージを入手した場合に限り、以下の内容を確認して、処理を続行してください。</p><p><table cellpadding=0 cellspacing=0><tr><td><b>名前: </b></td><td>%1</td></tr><tr><td><b>バージョン: </b></td><td>%2</td></tr><tr [...]
+ <translation><p>VirtualBox 機能拡張パッケージをインストールします。機能拡張パッケージはVirtualBoxに機能を追加しますが、コンピューターに危害を与えるようなシステムレベルのソフトウェアを含んでいる可能性があります。信頼できる発行元から機能拡張パッケージを入手した場合に限り、以下の内容を確認して、処理を続行してください。</p><p><table cellpadding=0 cellspacing=5><tr><td><b>名前: </b></td><td>%1</td></tr><tr><td><b>バージョン: </b></td><td>%2</td></tr><tr><td>< [...]
</message>
<message>
<source><p>An older version of the extension pack is already installed, would you like to upgrade? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name: </b></td><td>%2</td></tr><tr><td><b>New Version: </b></td><td>%3</td></tr><tr><td><b>Current Version: </b></td& [...]
- <translation type="unfinished"><p>古いバージョンの機能拡張パッケージがインストールされています。アップグレードしますか?<p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>名前: </b></td><td>%2</td></tr><tr><td><b>バージョン: </b></td><td>%3</td></tr><tr><td><b>現在のバージョン: </b></td><td>%4</td></tr> [...]
+ <translation><p>古いバージョンの機能拡張パッケージがインストールされています。アップグレードしますか?<p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>名前: </b></td><td>%2</td></tr><tr><td><b>バージョン: </b></td><td>%3</td></tr><tr><td><b>現在のバージョン: </b></td><td>%4</td></tr><tr><td&g [...]
</message>
<message>
<source><p>An newer version of the extension pack is already installed, would you like to downgrade? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name: </b></td><td>%2</td></tr><tr><td><b>New Version: </b></td><td>%3</td></tr><tr><td><b>Current Version: </b></t [...]
- <translation type="unfinished"><p>新しいバージョンの機能拡張パッケージがインストールされています。ダウングレードしますか?<p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>名前: </b></td><td>%2</td></tr><tr><td><b>バージョン: </b></td><td>%3</td></tr><tr><td><b>現在のバージョン: </b></td><td>%4</td></tr> [...]
+ <translation><p>新しいバージョンの機能拡張パッケージがインストールされています。ダウングレードしますか?<p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>名前: </b></td><td>%2</td></tr><tr><td><b>バージョン: </b></td><td>%3</td></tr><tr><td><b>現在のバージョン: </b></td><td>%4</td></tr><tr><td& [...]
</message>
<message>
<source><p>The extension pack is already installed with the same version, would you like reinstall it? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name: </b></td><td>%2</td></tr><tr><td><b>Version: </b></td><td>%3</td></tr><tr><td><b>Description: </b></td>& [...]
- <translation type="unfinished"><p>同じバージョンの機能拡張パッケージがインストールされています。再インストールしますか?<p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>名前: </b></td><td>%2</td></tr><tr><td><b>バージョン: </b></td><td>%3</td></tr><tr><td><b>説明: </b></td><td>%4</td></tr></t [...]
+ <translation><p>同じバージョンの機能拡張パッケージがインストールされています。再インストールしますか?<p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>名前: </b></td><td>%2</td></tr><tr><td><b>バージョン: </b></td><td>%3</td></tr><tr><td><b>説明: </b></td><td>%4</td></tr></table></p> [...]
</message>
<message>
<source>Failed to enable the audio adapter output for the virtual machine <b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン <b>%1</b> のオーディオアダプター出力の有効化に失敗しました。</translation>
</message>
<message>
<source>Failed to disable the audio adapter output for the virtual machine <b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン <b>%1</b> のオーディオアダプター出力の無効化に失敗しました。</translation>
</message>
<message>
<source>Failed to enable the audio adapter input for the virtual machine <b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン <b>%1</b> のオーディオアダプター入力の有効化に失敗しました。</translation>
</message>
<message>
<source>Failed to disable the audio adapter input for the virtual machine <b>%1</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン <b>%1</b> のオーディオアダプター入力の無効化に失敗しました。</translation>
</message>
<message>
<source><p>Could not insert the <b>%1</b> disk image file into the virtual machine <b>%2</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>仮想マシン<b>"%1"</b>に光学ドライブがないため、<b>%2</b>のディスクイメージを仮想マシンに挿入できません。 仮想マシン設定ウィンドウのストレージページでドライブを追加してください。</p></translation>
</message>
<message>
<source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン<b>"%2"</b>のスナップショット<b>"%1"</b>の変更に失敗しました。</translation>
</message>
<message>
<source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
- <translation type="unfinished"></translation>
+ <translation>仮想ディスクイメージストレージ<nobr><b>"%1"</b>の作成に失敗しました。</nobr></translation>
</message>
<message>
<source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>リクエストされたこの変更は仮想マシンにアタッチされているディスクを除去する必要があります。</p><p>本当にディスクイメージ <nobr><b>%1</b></nobr> の除去を行いますか?</p><p>次の仮想マシン <b>%2</b> からデタッチを行います。</p></translation>
</message>
</context>
<context>
@@ -13241,11 +13242,11 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<name>UIPopupPane</name>
<message>
<source><p><b>Details:</b></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>詳細:</b></translation>
</message>
<message>
<source><p><b>Details:</b> (%1 of %2)</source>
- <translation type="unfinished"></translation>
+ <translation><p><b>詳細:</b> (%1 の %2)</translation>
</message>
</context>
<context>
@@ -13419,15 +13420,15 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<name>UIScreenshotViewer</name>
<message>
<source>Screenshot of %1 (%2)</source>
- <translation type="unfinished">%1(%2)のスクリーンショット</translation>
+ <translation>%1(%2)のスクリーンショット</translation>
</message>
<message>
<source>Click to view non-scaled screenshot.</source>
- <translation type="unfinished">クリックして実寸のスクリーンショットを表示します。</translation>
+ <translation>クリックして実寸のスクリーンショットを表示します。</translation>
</message>
<message>
<source>Click to view scaled screenshot.</source>
- <translation type="unfinished">クリックしてスクリーンショットを表示します。</translation>
+ <translation>クリックしてスクリーンショットを表示します。</translation>
</message>
</context>
<context>
@@ -13463,7 +13464,7 @@ step and attach hard disks later using the VM Settings dialog.</p></source
</message>
<message>
<source>Show Toolbar Text</source>
- <translation type="unfinished"></translation>
+ <translation>ツールバーテキストを表示</translation>
</message>
</context>
<context>
@@ -13482,7 +13483,7 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<message>
<source>%1 status-bar indicator</source>
<comment>like 'hard-disk status-bar indicator'</comment>
- <translation type="unfinished"></translation>
+ <translation>%1 ステータスバーインジケーター</translation>
</message>
</context>
<context>
@@ -13564,7 +13565,7 @@ step and attach hard disks later using the VM Settings dialog.</p></source
</message>
<message>
<source>Allows to navigate through Global Property categories</source>
- <translation type="unfinished"></translation>
+ <translation>全体のプロパティのカテゴリー間の操作を許可する</translation>
</message>
</context>
<context>
@@ -13651,7 +13652,8 @@ step and attach hard disks later using the VM Settings dialog.</p></source
</message>
<message>
<source>Allows to navigate through VM Settings categories</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>要確認</translatorcomment>
+ <translation>VM設定カテゴリ間の操作を許可する</translation>
</message>
</context>
<context>
@@ -13669,79 +13671,79 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<name>UISnapshotDetailsWidget</name>
<message>
<source>&Attributes</source>
- <translation type="unfinished"></translation>
+ <translation>属性(&A)</translation>
</message>
<message>
<source>&Information</source>
- <translation type="unfinished"></translation>
+ <translation>情報(&I)</translation>
</message>
<message>
<source>&Name:</source>
- <translation type="unfinished">名前(&N):</translation>
+ <translation>名前(&N):</translation>
</message>
<message>
<source>&Description:</source>
- <translation type="unfinished">説明(&D):</translation>
+ <translation>説明(&D):</translation>
</message>
<message>
<source>Holds the snapshot name.</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットの名前を指定します。</translation>
</message>
<message>
<source>Holds the snapshot description.</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットの説明を指定します。</translation>
</message>
<message>
<source>Apply</source>
- <translation type="unfinished"></translation>
+ <translation>適用</translation>
</message>
<message>
<source>Reset</source>
- <translation type="unfinished">リセット</translation>
+ <translation>リセット</translation>
</message>
<message>
<source>Apply changes in current snapshot details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のスナップショット詳細の変更を適用</translation>
</message>
<message>
<source>Reset changes in current snapshot details</source>
- <translation type="unfinished"></translation>
+ <translation>現在のスナップショット詳細の変更をリセット</translation>
</message>
<message>
<source>Apply Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更を適用 (%1)</translation>
</message>
<message>
<source>Reset Changes (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>変更をリセット(%1)</translation>
</message>
<message>
<source>Click to enlarge the screenshot.</source>
- <translation type="unfinished">クリックしてスクリーンショットを拡大します。</translation>
+ <translation>クリックしてスクリーンショットを拡大します。</translation>
</message>
<message>
<source>Snapshot name is empty</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットの名前が空白です</translation>
</message>
<message>
<source>Enter a name for the new snapshot...</source>
- <translation type="unfinished"></translation>
+ <translation>新しいスナップショットの名前を入力...</translation>
</message>
<message>
<source>Enter a name for this snapshot...</source>
- <translation type="unfinished"></translation>
+ <translation>このスナップショットの名前を入力...</translation>
</message>
<message>
<source>Take</source>
- <translation type="unfinished"></translation>
+ <translation>作成</translation>
</message>
<message>
<source>Take snapshot on the basis of current machine state</source>
- <translation type="unfinished"></translation>
+ <translation>現在のマシンの状態に基づいてスナップショットを作成</translation>
</message>
<message>
<source>Take Snapshot (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットを作成 (%1)</translation>
</message>
</context>
<context>
@@ -13749,133 +13751,133 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<message>
<source>Current State (changed)</source>
<comment>Current State (Modified)</comment>
- <translation type="unfinished">最新の状態(変更)</translation>
+ <translation>最新の状態(変更)</translation>
</message>
<message>
<source>Current State</source>
<comment>Current State (Unmodified)</comment>
- <translation type="unfinished">最新の状態</translation>
+ <translation>最新の状態</translation>
</message>
<message>
<source>The current state differs from the state stored in the current snapshot</source>
- <translation type="unfinished">最新の状態は最新のスナップショットに保存されている状態と異なります</translation>
+ <translation>最新の状態は最新のスナップショットに保存されている状態と異なります</translation>
</message>
<message>
<source>The current state is identical to the state stored in the current snapshot</source>
- <translation type="unfinished">最新の状態は最新のスナップショットに保存されている状態と同じです</translation>
+ <translation>最新の状態は最新のスナップショットに保存されている状態と同じです</translation>
</message>
<message>
<source>%1 (%2 ago)</source>
<comment>date time (how long ago)</comment>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2 前)</translation>
</message>
<message>
<source>%1 since %2</source>
<comment>Current State (time or date + time)</comment>
- <translation type="unfinished">%2からの状態 %1</translation>
+ <translation>%2からの状態 %1</translation>
</message>
<message>
<source>current</source>
<comment>snapshot</comment>
- <translation type="unfinished"></translation>
+ <translation>現在</translation>
</message>
<message>
<source>online</source>
<comment>snapshot</comment>
- <translation type="unfinished"></translation>
+ <translation>オンライン</translation>
</message>
<message>
<source>offline</source>
<comment>snapshot</comment>
- <translation type="unfinished"></translation>
+ <translation>オフライン</translation>
</message>
<message>
<source>Taken at %1</source>
<comment>Snapshot (time)</comment>
- <translation type="unfinished">作成時刻 %1</translation>
+ <translation>作成時刻 %1</translation>
</message>
<message>
<source>Taken on %1</source>
<comment>Snapshot (date + time)</comment>
- <translation type="unfinished">作成日時 %1</translation>
+ <translation>作成日時 %1</translation>
</message>
<message>
<source>Contains the snapshot tree of the current virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>現在の仮想マシンのスナップショットツリーを含む</translation>
</message>
<message>
<source>&Take...</source>
- <translation type="unfinished"></translation>
+ <translation>作成(&T)...</translation>
</message>
<message>
<source>&Delete</source>
- <translation type="unfinished">削除(&D)</translation>
+ <translation>削除(&D)</translation>
</message>
<message>
<source>&Restore</source>
- <translation type="unfinished"></translation>
+ <translation>復元(&R)</translation>
</message>
<message>
<source>&Properties...</source>
- <translation type="unfinished"></translation>
+ <translation>プロパティ(&P)...</translation>
</message>
<message>
<source>&Clone...</source>
- <translation type="unfinished">クローン(&C)...</translation>
+ <translation>クローン(&C)...</translation>
</message>
<message>
<source>Take Snapshot (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットを作成 (%1)</translation>
</message>
<message>
<source>Delete Snapshot (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットを削除 (%1)</translation>
</message>
<message>
<source>Restore Snapshot (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットをリストア (%1)</translation>
</message>
<message>
<source>Open Snapshot Properties (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>スナップショットのプロパティを開く (%1)</translation>
</message>
<message>
<source>Clone Virtual Machine (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシンをクローン (%1)</translation>
</message>
<message>
<source>Take a snapshot of the current virtual machine state</source>
- <translation type="unfinished">現在の仮想マシンの状態のスナップショットを作成</translation>
+ <translation>現在の仮想マシンの状態のスナップショットを作成</translation>
</message>
<message>
<source>Delete selected snapshot of the virtual machine</source>
- <translation type="unfinished">選択した仮想マシンのスナップショットを削除</translation>
+ <translation>選択した仮想マシンのスナップショットを削除</translation>
</message>
<message>
<source>Restore selected snapshot of the virtual machine</source>
- <translation type="unfinished">選択した仮想マシンのスナップショットに復元</translation>
+ <translation>選択した仮想マシンのスナップショットに復元</translation>
</message>
<message>
<source>Open pane with the selected snapshot properties</source>
- <translation type="unfinished"></translation>
+ <translation>選択したスナップショットのプロパティのペインを開く</translation>
</message>
<message>
<source>Clone selected virtual machine</source>
- <translation type="unfinished">選択した仮想マシンをクローン</translation>
+ <translation>選択した仮想マシンをクローン</translation>
</message>
<message>
<source>Name</source>
<comment>snapshot</comment>
- <translation type="unfinished">名前</translation>
+ <translation>名前</translation>
</message>
<message>
<source>Taken</source>
<comment>snapshot</comment>
- <translation type="unfinished"></translation>
+ <translation>作成</translation>
</message>
<message>
<source>Snapshot %1</source>
- <translation type="unfinished">スナップショット %1</translation>
+ <translation>スナップショット %1</translation>
</message>
</context>
<context>
@@ -13904,25 +13906,25 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<name>UITakeSnapshotDialog</name>
<message>
<source>Take Snapshot of Virtual Machine</source>
- <translation type="unfinished">仮想マシンのスナップショット作成</translation>
+ <translation>仮想マシンのスナップショット作成</translation>
</message>
<message>
<source>Snapshot &Name</source>
- <translation type="unfinished">スナップショットの名前(&N)</translation>
+ <translation>スナップショットの名前(&N)</translation>
</message>
<message>
<source>Snapshot &Description</source>
- <translation type="unfinished">スナップショットの説明(&D)</translation>
+ <translation>スナップショットの説明(&D)</translation>
</message>
<message numerus="yes">
<source>Warning: You are taking a snapshot of a running machine which has %n immutable image(s) attached to it. As long as you are working from this snapshot the immutable image(s) will not be reset to avoid loss of data.</source>
- <translation type="unfinished">
+ <translation>
<numerusform>警告:%n 個の変更不可の仮想ディスクを割り当てた仮想マシンのスナップショットを作成しています。データ喪失を避けるため、このスナップショットから起動する限り、仮想ディスクはリセットされません。</numerusform>
</translation>
</message>
<message>
<source>Snapshot %1</source>
- <translation type="unfinished">スナップショット %1</translation>
+ <translation>スナップショット %1</translation>
</message>
</context>
<context>
@@ -13952,34 +13954,34 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<name>UIToolsPaneGlobal</name>
<message>
<source><h3>Welcome to VirtualBox!</h3><p>This window represents a set of global tools which are currently opened (or can be opened). They are not related to any particular machine but to the complete VM collection. For a list of currently available tools check the corresponding menu at the right side of the main tool bar located at the top of the window. This list will be extended with new tools in future releases.</p><p>You can press the <b>% [...]
- <translation type="unfinished"></translation>
+ <translation><h3>ようこそVirtualBoxへ!</h3><p>このウィンドウには現在開いている(あるいは開くことができる)グローバルツールが表示されます。それらは特定のマシンに関連するものではなく、VM全部に関連するものです。現在設定できるツールの一覧に関しては、このウィンドウ上部の右側にあるメインツールバーに同様のメニューがあることを確認してください。このリストは将来のリリースで拡張する予定です。</p><p><b>%1</b>キーでヘルプを表示できます。または最新情報とニュースを取得するため <a href=http://www.virtualbox.org>www.virtualbox.org</a> をご覧ください。</p></translation>
</message>
<message>
<source>Tool to observe virtual storage media. Reflects all the chains of <u>virtual disks</u> you have registered (per each storage type) within your virtual machines and allows for media operations like <u>copy</u>, <u>remove</u>, <u>release</u> (detach it from VMs where it is currently attached to) and observe their properties. Allows to <u>edit</u> medium attributes like <u>type</u>, <u>location/nam [...]
- <translation type="unfinished"></translation>
+ <translation>仮想ストレージメディアを表示するツールです。仮想マシン内の(ストレージタイプごとに)登録した<u>仮想ディスク</u>の接続を示し、また<u>コピー</u>、<u>除去</u>、<u>開放</u>(現在アタッチしているものをVMからデタッチする)などのメディアの操作ができ、それらのプロパティを表示します。<u>タイプ</u>、<u>場所/名前</u>、<u>説明</u>と<u>サイズ</u>(ダイナミックストレージのみ)などのメディアの属性も<u>編集</u>できます。</translation>
</message>
<message>
<source>Tool to control host-only network interfaces. Reflects <u>host-only networks</u>, their DHCP servers and allows for operations on the networks like possibility to <u>create</u>, <u>remove</u> and observe their properties. Allows to <u>edit</u> various <u>attributes</u> for host-only interface and corresponding DHCP server.</source>
- <translation type="unfinished"></translation>
+ <translation><u>ホストオンリーネットワーク</u>のインターフェースを管理するツールです。ホストオンリーネットワーク、動作させるDHCPサーバー、<u>作成</u>、<u>削除</u>などのネットワークの操作とそのプロパティを表示します。ホストオンリーインターフェースのさまざまな<u>属性</u>と、動作させるDHCPサーバーを<u>編集</u>できます。</translation>
</message>
</context>
<context>
<name>UIToolsPaneMachine</name>
<message>
<source><h3>Welcome to VirtualBox!</h3><p>The left part of this window lists all virtual machines and virtual machine groups on your computer. The list is empty now because you haven't created any virtual machines yet.</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 v [...]
- <translation type="unfinished"></translation>
+ <translation><h3>ようこそVirtualBoxへ!</h3><p>このウィンドウの左側にはコンピューター上のすべての仮想マシンと仮想マシンのグループがリスト表示されます。しかしまだ仮想マシンが作成されていないため、リストは空です。</p><p>新規仮想マシンを作成するにはウィンドウ上部にあるメインツールバーの<b>[新規]</b>ボタンをクリックしてください。</p><p><b>%1</b>キーでヘルプを表示できます。または最新情報とニュースを取得するため <a href=http://www.virtualbox.org>www.virtualbox.org</a> をご覧ください。</p></translation>
</message>
<message>
<source><h3>Welcome to VirtualBox!</h3><p>The left part of this window lists all virtual machines and virtual machine groups on your computer.</p><p>The right part of this window represents a set of tools which are currently opened (or can be opened) for the currently chosen machine. For a list of currently available tools check the corresponding menu at the right side of the main tool bar located at the top of the window. This list will be extended [...]
- <translation type="unfinished"></translation>
+ <translation><h3>ようこそ VirtualBox へ!</h3><p>このウィンドウの左側には、このコンピューターにあるすべての仮想マシンと仮想マシンのグループがリストされています。</p><p>このウィンドウの右側には現在選択されているマシンの、現在開いている(あるいは開くことができる)ツールのセットを表示しています。現在設定できるツールの一覧に関しては、このウィンドウ上部の右側にあるメインツールバーに同様のメニューがあることを確認してください。このリストは将来のリリースで拡張する予定です。</p><p><b>%1</b>キーでヘルプを表示できます。または最新情報とニュースを取得するため <a href=http://www.virtualbox.org>www.virtualbox.org</a> をご覧ください。</p></translation>
</message>
<message>
<source>Tool to observe virtual machine (VM) details. Reflects groups of <u>properties</u> for the currently chosen VM and allows basic operations on certain properties (like the machine storage devices).</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン(VM)の詳細を表示するツールです。現在選択しているVMの<u>プロパティ</u>のグループと、いくつかのプロパティの基本的な操作(マシンのストレージデバイスなど)を反映しています。</translation>
</message>
<message>
<source>Tool to control virtual machine (VM) snapshots. Reflects <u>snapshots</u> created for the currently selected VM and allows snapshot operations like <u>create</u>, <u>remove</u>, <u>restore</u> (make current) and observe their properties. Allows to <u>edit</u> snapshot attributes like <u>name</u> and <u>description</u>.</source>
- <translation type="unfinished"></translation>
+ <translation>仮想マシン(VM)のスナップショットを管理するツールです。現在選択しているVMの<u>スナップショット</u>を作成し、<u>作成</u>、<u>削除</u>、(現在の状態に)<u>リストア</u>などのスナップショットの操作ができ、それらのプロパティを表示します。また、<u>名前</u>や<u>説明</u>のようなスナップショットの属性の<u>編集</u>もできます。</translation>
</message>
</context>
<context>
@@ -13987,12 +13989,12 @@ step and attach hard disks later using the VM Settings dialog.</p></source
<message>
<source>%1, Active</source>
<comment>col.1 text, col.1 state</comment>
- <translation type="unfinished"></translation>
+ <translation>%1, 有効</translation>
</message>
<message>
<source>%1</source>
<comment>col.1 text</comment>
- <translation type="unfinished">%1</translation>
+ <translation>%1</translation>
</message>
</context>
<context>
@@ -14714,76 +14716,76 @@ step and attach hard disks later using the VM Settings dialog.</p></source
</message>
<message>
<source>Copy Virtual Disk Image</source>
- <translation type="unfinished"></translation>
+ <translation>仮想ディスクイメージのコピー</translation>
</message>
<message>
<source>Disk image to copy</source>
- <translation type="unfinished"></translation>
+ <translation>コピーするディスクイメージ</translation>
</message>
<message>
<source><p>Please select the virtual disk image file that you would like to copy if it is not already selected. You can either choose one from the list or use the folder icon beside the list to select one.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>選択していない場合、コピーしたい仮想ディスクイメージのファイルを選択してください。リストから選択するか、リストの横にあるフォルダーアイコンからも選択できます。</p></translation>
</message>
<message>
<source>Choose a virtual disk image file to copy...</source>
- <translation type="unfinished"></translation>
+ <translation>コピーする仮想ディスクイメージのファイルを選択...</translation>
</message>
<message>
<source>Disk image file type</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージのファイルタイプ</translation>
</message>
<message>
<source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
- <translation type="unfinished"></translation>
+ <translation>新しい仮想ディスクイメージで使用したいファイルのタイプを選択してください。もしほかの仮想ソフトウェアで使用する必要がなければ、設定はそのままにしておいてください。</translation>
</message>
<message>
<source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
- <translation type="unfinished"></translation>
+ <translation>新しい仮想ディスクイメージファイルは使用したぶんだけ大きくなるか(可変サイズ)、または最大サイズで作成するか(固定サイズ)を選択してください。</translation>
</message>
<message>
<source><p>A <b>dynamically allocated</b> disk image file will only use space on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), although it will not shrink again automatically when space on it is freed.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>可変サイズ</b>のディスクイメージファイルは使用した分だけ(<b>固定サイズ</b>を上限として)物理ハードディスクの領域を消費しますが、スペースを開放しても自動的に縮小はしません。</p></translation>
</message>
<message>
<source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>固定サイズ</b>のディスクイメージファイルはシステムによっては作成に時間がかかるかもしれませんが、使用すると高速です</p></translation>
</message>
<message>
<source><p>You can also choose to <b>split</b> the disk image file into several files of up to two gigabytes each. This is mainly useful if you wish to store the virtual machine on removable USB devices or old systems, some of which cannot handle very large files.</source>
- <translation type="unfinished"></translation>
+ <translation><p>ディスクイメージファイルを2GBごとに<b>分割</b>することもできます。仮想マシンをリムーバブルUSBデバイスに作成したい場合や、非常に大きなファイルを扱うことができない古いシステムで便利でしょう。</translation>
</message>
<message>
<source>Please choose a location for new virtual disk image file</source>
- <translation type="unfinished"></translation>
+ <translation>新しい仮想ディスクイメージファイルの場所を選択</translation>
</message>
<message>
<source>New disk image to create</source>
- <translation type="unfinished"></translation>
+ <translation>作成する新しいディスクイメージ</translation>
</message>
<message>
<source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
- <translation type="unfinished"></translation>
+ <translation>新しい仮想ディスクイメージファイルの名前を下のボックスに入力するか、フォルダーアイコンをクリックしてファイルを作成する別のフォルダーを選択してください。</translation>
</message>
<message>
<source>Choose a location for new virtual disk image file...</source>
- <translation type="unfinished"></translation>
+ <translation>新しい仮想ディスクイメージファイルの場所を選択...</translation>
</message>
<message>
<source>%1_copy</source>
<comment>copied virtual disk image name</comment>
- <translation type="unfinished">%1_コピー</translation>
+ <translation>%1_コピー</translation>
</message>
<message>
<source>Disk image to ©</source>
- <translation type="unfinished"></translation>
+ <translation>コピーするディスクイメージ(&C)</translation>
</message>
<message>
<source>&New disk image to create</source>
- <translation type="unfinished"></translation>
+ <translation>作成するディスクイメージ(&N)</translation>
</message>
<message>
<source>Disk image file &type</source>
- <translation type="unfinished"></translation>
+ <translation>ディスクイメージのファイルタイプ(&T)</translation>
</message>
</context>
<context>
@@ -14993,11 +14995,11 @@ step and attach hard disks later using the VM Settings dialog.</p></source
</message>
<message>
<source>Open Virtualization Format Archive (%1)</source>
- <translation>Open Virtualization Format Archive (%1)</translation>
+ <translation>Virtualization Format Archive (%1) を開く</translation>
</message>
<message>
<source>Open Virtualization Format (%1)</source>
- <translation>Open Virtualization Format (%1)</translation>
+ <translation>Virtualization Format (%1) を開く</translation>
</message>
<message>
<source>F&ormat:</source>
@@ -15057,31 +15059,31 @@ step and attach hard disks later using the VM Settings dialog.</p></source
</message>
<message>
<source>Oracle Public Cloud Format Archive (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>Oracle Public Cloud フォーマットアーカイブ (%1)</translation>
</message>
<message>
<source>Open Virtualization Format 0.9</source>
- <translation type="unfinished"></translation>
+ <translation>Virtualization Format 0.9 を開く</translation>
</message>
<message>
<source>Open Virtualization Format 1.0</source>
- <translation type="unfinished"></translation>
+ <translation>Virtualization Format 1.0 を開く</translation>
</message>
<message>
<source>Open Virtualization Format 2.0</source>
- <translation type="unfinished"></translation>
+ <translation>Virtualization Format 2.0 を開く</translation>
</message>
<message>
<source>Oracle Public Cloud Format 1.0</source>
- <translation type="unfinished"></translation>
+ <translation>Oracle Public Cloud Format 1.0</translation>
</message>
<message>
<source>Write in new OVF 2.0 format.</source>
- <translation type="unfinished"></translation>
+ <translation>新しいOVF 2.0フォーマットで書き出します。</translation>
</message>
<message>
<source>Write in Oracle Public Cloud 1.0 format.</source>
- <translation type="unfinished"></translation>
+ <translation>Oracle Public Cloud 1.0 フォーマットで書き出します。</translation>
</message>
</context>
<context>
@@ -15104,7 +15106,7 @@ step and attach hard disks later using the VM Settings dialog.</p></source
</message>
<message>
<source><p>Please choose a filename to export the virtual appliance to.</p><p>The <b>Open Virtualization Format</b> supports only <b>ovf</b> or <b>ova</b> extensions. <br>If you use the <b>ovf</b> extension, several files will be written separately.<br>If you use the <b>ova</b> extension, all the files will be combined into one Open Virtualization Format archive.</p><p>The <b& [...]
- <translation type="unfinished"></translation>
+ <translation><p>エクスポートする仮想アプライアンスのファイル名を選択してください。</p><p><b>Open Virtualization Format</b> がサポートしているのは拡張子 <b>ovf</b> または <b>ova</b> だけです。<br>拡張子 <b>ovf</b> にすると、いくつかのファイルが分割して書き込まれます。<br>拡張子 <b>ova</b> にすると、全てのファイルが一つのOpen Virtualization Formatアーカイブに結合されます。</p><p><b>Oracle Public Cloud Format</b> がサポートしているのは拡張子 <b>tar.gz</b> だけです。<br>それぞれの仮想ディスクファイルが分 [...]
</message>
</context>
<context>
@@ -17891,7 +17893,7 @@ Version %1</source>
<message>
<source>Taking Live Snapshot</source>
<comment>MachineState</comment>
- <translation>スナップショットの作成中</translation>
+ <translation>スナップショットを作成中</translation>
</message>
<message>
<source>Teleporting Paused VM</source>
@@ -18580,7 +18582,7 @@ Version %1</source>
<message>
<source>Taking Online Snapshot</source>
<comment>MachineState</comment>
- <translation>オンラインスナップショットの作成中</translation>
+ <translation>オンラインスナップショットを作成中</translation>
</message>
<message>
<source>KVM</source>
@@ -18761,67 +18763,68 @@ Version %1</source>
<message>
<source>Hard Disks</source>
<comment>IndicatorType</comment>
- <translation type="unfinished">ハードディスク</translation>
+ <translation>ハードディスク</translation>
</message>
<message>
<source>Optical Disks</source>
<comment>IndicatorType</comment>
- <translation type="unfinished"></translation>
+ <translation>光学ディスク</translation>
</message>
<message>
<source>Floppy Disks</source>
<comment>IndicatorType</comment>
- <translation type="unfinished"></translation>
+ <translation>フロッピーディスク</translation>
</message>
<message>
<source>Network</source>
<comment>IndicatorType</comment>
- <translation type="unfinished">ネットワーク</translation>
+ <translation>ネットワーク</translation>
</message>
<message>
<source>USB</source>
<comment>IndicatorType</comment>
- <translation type="unfinished">USB</translation>
+ <translation>USB</translation>
</message>
<message>
<source>Shared Folders</source>
<comment>IndicatorType</comment>
- <translation type="unfinished">共有フォルダー</translation>
+ <translation>共有フォルダー</translation>
</message>
<message>
<source>Display</source>
<comment>IndicatorType</comment>
- <translation type="unfinished">ディスプレイ</translation>
+ <translatorcomment>表示?</translatorcomment>
+ <translation>ディスプレイ</translation>
</message>
<message>
<source>Video Capture</source>
<comment>IndicatorType</comment>
- <translation type="unfinished">ビデオキャプチャー</translation>
+ <translation>ビデオキャプチャー</translation>
</message>
<message>
<source>Features</source>
<comment>IndicatorType</comment>
- <translation type="unfinished"></translation>
+ <translation>機能</translation>
</message>
<message>
<source>Mouse</source>
<comment>IndicatorType</comment>
- <translation type="unfinished"></translation>
+ <translation>マウス</translation>
</message>
<message>
<source>Keyboard</source>
<comment>IndicatorType</comment>
- <translation type="unfinished"></translation>
+ <translation>キーボード</translation>
</message>
<message>
<source>Differencing</source>
<comment>MediumType</comment>
- <translation type="unfinished">差分</translation>
+ <translation>差分</translation>
</message>
<message>
<source>Audio</source>
<comment>IndicatorType</comment>
- <translation type="unfinished">オーディオ</translation>
+ <translation>オーディオ</translation>
</message>
</context>
<context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
index b02b742..03fcc6a 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
@@ -5984,7 +5984,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Remove selected host-only network</source>
- <translation>Remover rede exclusiva de hospedeiro selecionada.</translation>
+ <translation>Remover rede exclusiva de hospedeiro selecionada</translation>
</message>
<message>
<source>&Properties...</source>
@@ -18900,43 +18900,43 @@ Versão %1</translation>
<message numerus="yes">
<source>%n year(s)</source>
<translation>
- <numerusform>%n ano(s)</numerusform>
- <numerusform></numerusform>
+ <numerusform>%n ano</numerusform>
+ <numerusform>%n anos</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
<translation>
- <numerusform>%n mes(es)</numerusform>
- <numerusform></numerusform>
+ <numerusform>%n mês</numerusform>
+ <numerusform>%n meses</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%n day(s)</source>
<translation>
- <numerusform>%n dia(s)</numerusform>
- <numerusform></numerusform>
+ <numerusform>%n dia</numerusform>
+ <numerusform>%n dias</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%n hour(s)</source>
<translation>
- <numerusform>%n hora(s)</numerusform>
- <numerusform></numerusform>
+ <numerusform>%n hora</numerusform>
+ <numerusform>%n horas</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%n minute(s)</source>
<translation>
- <numerusform>%n minuto(s)</numerusform>
- <numerusform></numerusform>
+ <numerusform>%n minuto</numerusform>
+ <numerusform>%n minutos</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%n second(s)</source>
<translation>
- <numerusform>%n segundo(s)</numerusform>
- <numerusform></numerusform>
+ <numerusform>%n segundo</numerusform>
+ <numerusform>%n segundos</numerusform>
</translation>
</message>
<message>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
index 92fd45c..c353576 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
@@ -37,7 +37,7 @@
<context>
<name>QApplication</name>
<message>
- <location filename="../src/main.cpp" line="+450"/>
+ <location filename="../src/main.cpp" line="+446"/>
<source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source>
<translation>Izvedljiva datoteka <b>%1</b> zahteva Qt %2.x, najden Qt %3.</translation>
</message>
@@ -57,7 +57,7 @@
<translation><html><b>%1 (rc=%2)</b><br/><br/></translation>
</message>
<message>
- <location line="-540"/>
+ <location line="-536"/>
<source>Please try reinstalling VirtualBox.</source>
<translation>Poizkusite ponovno namestiti VirtualBox.</translation>
</message>
@@ -67,7 +67,7 @@
<translation>Prepričajte se, da je bil modul jedra uspešno naložen.</translation>
</message>
<message>
- <location line="+436"/>
+ <location line="+432"/>
<source>VirtualBox - Runtime Error</source>
<translation>VirtualBox - napaka izvajanja</translation>
</message>
@@ -87,7 +87,7 @@
<translation>Gonilnik jedra ni dostopen</translation>
</message>
<message>
- <location line="-471"/>
+ <location line="-467"/>
<source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
<translation>Moduli jedra VirtualBox se ne ujemajo s to različico VirtualBoxa.Namestitev VirtualBoxa očitno ni bila uspešna. Poizkusite ga popolnoma odstraniti in ponovno namestiti.</translation>
</message>
@@ -135,7 +135,7 @@
<translation type="vanished">&Naprej</translation>
</message>
<message>
- <location filename="../src/extensions/QIArrowSplitter.cpp" line="+337"/>
+ <location filename="../src/extensions/QIArrowSplitter.cpp" line="+341"/>
<source>&Details</source>
<translation>&Podrobnosti</translation>
</message>
@@ -167,7 +167,7 @@
<context>
<name>QIMessageBox</name>
<message>
- <location filename="../src/extensions/QIMessageBox.cpp" line="+299"/>
+ <location filename="../src/extensions/QIMessageBox.cpp" line="+300"/>
<location filename="../src/globals/UIMessageCenter.cpp" line="+1887"/>
<location filename="../src/widgets/UIPopupPaneButtonPane.cpp" line="+180"/>
<source>OK</source>
@@ -3632,7 +3632,7 @@
</message>
<message>
<location line="+15"/>
- <location line="+486"/>
+ <location line="+490"/>
<source>None</source>
<translation>Brez</translation>
</message>
@@ -4101,7 +4101,7 @@
<context>
<name>UIHotKeyEditor</name>
<message>
- <location filename="../src/widgets/UIHotKeyEditor.cpp" line="+177"/>
+ <location filename="../src/widgets/UIHotKeyEditor.cpp" line="+182"/>
<source>Reset shortcut to default</source>
<translation>Ponastavi bližnjico na privzeto</translation>
</message>
@@ -5198,7 +5198,7 @@
<translation>kb/s</translation>
</message>
<message>
- <location filename="../src/widgets/UIFilmContainer.cpp" line="+147"/>
+ <location filename="../src/widgets/UIFilmContainer.cpp" line="+152"/>
<source>Screen %1</source>
<translation>Zaslon %1</translation>
</message>
@@ -9266,7 +9266,7 @@
<translation>Vrata gosta</translation>
</message>
<message>
- <location line="+421"/>
+ <location line="+423"/>
<source>Contains a list of port forwarding rules.</source>
<translation>Vsebuje seznam pravil posredovanja vrat.</translation>
</message>
@@ -9372,7 +9372,7 @@
<translation>Prikaži vrstico stanja</translation>
</message>
<message>
- <location line="+379"/>
+ <location line="+373"/>
<source>Select a virtual machine file</source>
<translation>Izberite datoteko navideznega računalnika</translation>
</message>
@@ -9417,7 +9417,7 @@
<translation><i>Izberite kategorijo nastavitev s seznama na levi in premaknite miško nad predmet nastavitev, da dobite več podatkov.</i></translation>
</message>
<message>
- <location filename="../src/settings/UISettingsDialog.cpp" line="+340"/>
+ <location filename="../src/settings/UISettingsDialog.cpp" line="+339"/>
<source>Invalid settings detected</source>
<translation>Zaznane neveljavne nastavitve</translation>
</message>
@@ -9848,7 +9848,7 @@
<context>
<name>UIStatusBarEditorWidget</name>
<message>
- <location filename="../src/runtime/UIStatusBarEditorWindow.cpp" line="+607"/>
+ <location filename="../src/runtime/UIStatusBarEditorWindow.cpp" line="+611"/>
<source>Close</source>
<translation>Zapri</translation>
</message>
@@ -9858,7 +9858,7 @@
<translation>Omogoči vrstico stanja</translation>
</message>
<message>
- <location line="-373"/>
+ <location line="-377"/>
<source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
<translation><nobr><b>&Kliknite</b>, da preklopite prisotnost kazalnika.</nobr><br><nobr><b>Povlecite in spustite</b>, da spremenite položaj kazalnika.</nobr></translation>
</message>
@@ -9866,7 +9866,7 @@
<context>
<name>UITakeSnapshotDialog</name>
<message>
- <location filename="../src/UITakeSnapshotDialog.cpp" line="+82"/>
+ <location filename="../src/UITakeSnapshotDialog.cpp" line="+83"/>
<source>Take Snapshot of Virtual Machine</source>
<translation>Zajemi ponetek stanja navideznega računalnika</translation>
</message>
@@ -10049,7 +10049,7 @@
<context>
<name>UIVMCloseDialog</name>
<message>
- <location filename="../src/runtime/UIVMCloseDialog.cpp" line="+410"/>
+ <location filename="../src/runtime/UIVMCloseDialog.cpp" line="+425"/>
<source>Close Virtual Machine</source>
<translation>Zapri navidezni računalnik</translation>
</message>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
index 90a4a39..4fd8737 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
@@ -2611,27 +2611,27 @@
<message>
<source>Result Code: </source>
<comment>error info</comment>
- <translation type="unfinished">返回 代码:</translation>
+ <translation>返回 代码: </translation>
</message>
<message>
<source>Component: </source>
<comment>error info</comment>
- <translation type="unfinished">组件:</translation>
+ <translation>组件: </translation>
</message>
<message>
<source>Interface: </source>
<comment>error info</comment>
- <translation type="unfinished">界面:</translation>
+ <translation>界面: </translation>
</message>
<message>
<source>Callee: </source>
<comment>error info</comment>
- <translation type="unfinished">被召者:</translation>
+ <translation>被召者: </translation>
</message>
<message>
<source>Callee RC: </source>
<comment>error info</comment>
- <translation type="unfinished">被召者 RC:</translation>
+ <translation>被召者 RC: </translation>
</message>
</context>
<context>
@@ -5212,11 +5212,11 @@
</message>
<message>
<source>Adding network...</source>
- <translation type="unfinished"></translation>
+ <translation>正在添加网络...</translation>
</message>
<message>
<source>Removing network...</source>
- <translation type="unfinished"></translation>
+ <translation>正在移除网络...</translation>
</message>
</context>
<context>
@@ -6628,11 +6628,11 @@
</message>
<message>
<source>When checked, VirtualBox will record the audio stream to video file as well.</source>
- <translation type="unfinished"></translation>
+ <translation>选中时,将虚拟机音频录制到视频文件中。</translation>
</message>
<message>
<source>&Record Audio</source>
- <translation type="unfinished"></translation>
+ <translation>录音(&R)</translation>
</message>
</context>
<context>
@@ -8709,35 +8709,35 @@
</message>
<message>
<source>Choose Medium Location</source>
- <translation type="unfinished"></translation>
+ <translation>选择介质位置</translation>
</message>
<message>
<source>Location can not be empty.</source>
- <translation type="unfinished"></translation>
+ <translation>路径不能为空.</translation>
</message>
<message>
<source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
- <translation type="unfinished">这种介质是直接或间接分配的,生成快照时保存状态。</translation>
+ <translation>这种介质是直接或间接分配的,生成快照时保存状态。</translation>
</message>
<message>
<source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
- <translation type="unfinished">这种介质为间接分配, 其所做修改在虚拟机下次启动时清除。</translation>
+ <translation>这种介质为间接分配, 其所做修改在虚拟机下次启动时清除。</translation>
</message>
<message>
<source>This type of medium is attached directly, ignored when taking snapshots.</source>
- <translation type="unfinished">该介质是直接分配的,生成快照时忽略。</translation>
+ <translation>该介质是直接分配的,生成快照时忽略。</translation>
</message>
<message>
<source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
- <translation type="unfinished">该介质是直接分配的,允许多个虚拟机同步访问。</translation>
+ <translation>该介质是直接分配的,允许多个虚拟机同步访问。</translation>
</message>
<message>
<source>This type of medium is attached directly, and can be used by several machines.</source>
- <translation type="unfinished">该介质是直接分配的,允许多个虚拟机访问。</translation>
+ <translation>该介质是直接分配的,允许多个虚拟机访问。</translation>
</message>
<message>
<source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
- <translation type="unfinished">该介质是间接分配的, 多个虚拟机可共用一个基础介质,每个虚拟机各自存储一个差分介质。</translation>
+ <translation>该介质是间接分配的, 多个虚拟机可共用一个基础介质,每个虚拟机各自存储一个差分介质。</translation>
</message>
</context>
<context>
@@ -8918,43 +8918,43 @@
</message>
<message>
<source>Copy Disk Image File (%1)</source>
- <translation type="unfinished">复制虚拟磁盘文件 (%1)</translation>
+ <translation>复制虚拟磁盘文件 (%1)</translation>
</message>
<message>
<source>Remove Disk Image File (%1)</source>
- <translation type="unfinished">移除虚拟磁盘文件 (%1)</translation>
+ <translation>移除虚拟磁盘文件 (%1)</translation>
</message>
<message>
<source>Release Disk Image File (%1)</source>
- <translation type="unfinished">释放虚拟磁盘文件 (%1)</translation>
+ <translation>释放虚拟磁盘文件 (%1)</translation>
</message>
<message>
<source>Open Disk Image File Properties (%1)</source>
- <translation type="unfinished">查看虚拟介质文件属性 (%1)</translation>
+ <translation>查看虚拟磁盘文件属性 (%1)</translation>
</message>
<message>
<source>Refresh Disk Image Files (%1)</source>
- <translation type="unfinished">刷新虚拟存储介质列表 (%1)</translation>
+ <translation>刷新虚拟磁盘文件列表 (%1)</translation>
</message>
<message>
<source>Current extension (*.%1)</source>
- <translation type="unfinished"></translation>
+ <translation>当前扩展名 (*.%1)</translation>
</message>
<message>
<source>Choose the location of this medium</source>
- <translation type="unfinished"></translation>
+ <translation>选择介质位置</translation>
</message>
<message>
<source>&Move...</source>
- <translation type="unfinished"></translation>
+ <translation>移动(&M)...</translation>
</message>
<message>
<source>Move Disk Image File (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>移动虚拟磁盘文件 (%1)</translation>
</message>
<message>
<source>Move selected disk image file</source>
- <translation type="unfinished"></translation>
+ <translation>移动选中的虚拟磁盘文件</translation>
</message>
</context>
<context>
@@ -10753,11 +10753,11 @@
</message>
<message>
<source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
- <translation type="unfinished"></translation>
+ <translation>创建虚拟磁盘文件 <nobr><b>%1</b> 失败.</nobr></translation>
</message>
<message>
<source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>此修改需要将磁盘从关联的虚拟电脑中解除关联.</p><p>确定要释放磁盘文件 <nobr><b>%1</b></nobr>?</p><p>将与如下虚拟电脑解除关联: <b>%2</b>.</p></translation>
</message>
</context>
<context>
@@ -12591,76 +12591,76 @@
</message>
<message>
<source>Copy Virtual Disk Image</source>
- <translation type="unfinished"></translation>
+ <translation>复制虚拟磁盘</translation>
</message>
<message>
<source>Disk image to copy</source>
- <translation type="unfinished"></translation>
+ <translation>要复制的虚拟磁盘</translation>
</message>
<message>
<source><p>Please select the virtual disk image file that you would like to copy if it is not already selected. You can either choose one from the list or use the folder icon beside the list to select one.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>请选择要复制的虚拟磁盘。您可以从列表中选择一个,或使用列表旁边的文件夹图标来选择一个虚拟磁盘文件。</p></translation>
</message>
<message>
<source>Choose a virtual disk image file to copy...</source>
- <translation type="unfinished"></translation>
+ <translation>选择一个虚拟磁盘...</translation>
</message>
<message>
<source>Disk image file type</source>
- <translation type="unfinished"></translation>
+ <translation>虚拟磁盘文件类型</translation>
</message>
<message>
<source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
- <translation type="unfinished"></translation>
+ <translation>请选择您想要用于新建虚拟磁盘的文件类型。如果您不需要其他虚拟化软件使用它,您可以让此设置保持不更改状态。</translation>
</message>
<message>
<source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
- <translation type="unfinished"></translation>
+ <translation>请选择新建虚拟磁盘文件是应该为其使用而分配(动态分配),还是应该创建完全分配(固定分配)。</translation>
</message>
<message>
<source><p>A <b>dynamically allocated</b> disk image file will only use space on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), although it will not shrink again automatically when space on it is freed.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>动态分配</b>的虚拟磁盘只是逐渐占用物理硬盘的空间 (直至达到 <b>分配的大小</b>), 不过当其内部空间不用时不会自动缩减占用的物理硬盘空间。</p></translation>
</message>
<message>
<source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>固定大小</b>的虚拟磁盘文件可能在某些系统中要花很长时间来创建,但它往往使用起来较快。</p></translation>
</message>
<message>
<source><p>You can also choose to <b>split</b> the disk image file into several files of up to two gigabytes each. This is mainly useful if you wish to store the virtual machine on removable USB devices or old systems, some of which cannot handle very large files.</source>
- <translation type="unfinished"></translation>
+ <translation><p>也可以选择将虚拟磁盘<b>分割</b>为 2GB 以下大小的几个文件。如果想要在可移动 USB 设备或旧系统中存储虚拟机,这会很有用,因为它们不能处理非常大型的文件。</translation>
</message>
<message>
<source>Please choose a location for new virtual disk image file</source>
- <translation type="unfinished"></translation>
+ <translation>请选择虚拟磁盘文件保存的位置</translation>
</message>
<message>
<source>New disk image to create</source>
- <translation type="unfinished"></translation>
+ <translation>要创建的新虚拟磁盘</translation>
</message>
<message>
<source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
- <translation type="unfinished"></translation>
+ <translation>请在下面的框中键入新建虚拟硬盘文件的名称,或单击文件夹图标来选择创建文件要保存到的文件夹。</translation>
</message>
<message>
<source>Choose a location for new virtual disk image file...</source>
- <translation type="unfinished"></translation>
+ <translation>选择虚拟硬盘文件保存的位置...</translation>
</message>
<message>
<source>%1_copy</source>
<comment>copied virtual disk image name</comment>
- <translation type="unfinished">%1_副本</translation>
+ <translation>%1_副本</translation>
</message>
<message>
<source>Disk image to ©</source>
- <translation type="unfinished"></translation>
+ <translation>要复制的硬盘(&C)</translation>
</message>
<message>
<source>&New disk image to create</source>
- <translation type="unfinished"></translation>
+ <translation>要创建的新虚拟硬盘(&N)</translation>
</message>
<message>
<source>Disk image file &type</source>
- <translation type="unfinished"></translation>
+ <translation>虚拟硬盘文件类型(&T)</translation>
</message>
</context>
<context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
index 99dee83..48b4613 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
@@ -6239,7 +6239,7 @@
</message>
<message>
<source>The current port forwarding rules are not valid. Rule names should be unique.</source>
- <translation>目前連接埠轉送規則無效。規則名稱應該唯一。</translation>
+ <translation>目前連接埠轉送規則無效。 規則名稱應該唯一。</translation>
</message>
<message>
<source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
@@ -6436,7 +6436,7 @@
</message>
<message>
<source>Unable to find the host network interface <b>%1</b>.</source>
- <translation>找不到主機網路介面 <b>%1</b>.</translation>
+ <translation>找不到主機網路介面 <b>%1</b>。</translation>
</message>
<message>
<source>Failed to create a host network interface.</source>
@@ -6512,7 +6512,7 @@
</message>
<message>
<source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>您請求的變更需要從其附加的電腦中釋放這個磁碟。</p><p>您確定要釋放磁碟映像檔 <nobr><b>%1</b></nobr> 嗎?</p><p>這將從以下虛擬電腦中取消連接: <b>%2</b>。</p></translation>
</message>
</context>
<context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts
index deca763..2e684e8 100644
--- a/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts
@@ -1,26 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.1" language="zh_TW">
-<context>
- <name>AudioOutput</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="vanished"><html>音效播放裝置 <b>%1</b> 未能運作。<br/>改用預設裝置 <b>%2</b>。</html></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="vanished"><html>音效播放裝置 <b>%1</b> 已可使用,因為有較高優先權,因此將切換到該裝置。</html></translation>
- </message>
- <message>
- <source>Revert back to device '%1'</source>
- <translation type="vanished">回復到裝置 %1</translation>
- </message>
-</context>
+<TS version="2.0" language="zh_TW">
<context>
<name>CloseButton</name>
<message>
<source>Close Tab</source>
- <translation>關閉分頁</translation>
+ <translation>關閉索引標籤</translation>
</message>
</context>
<context>
@@ -31,7 +16,7 @@
</message>
<message>
<source>Hide %1</source>
- <translation>隱藏%1</translation>
+ <translation>隱藏 %1</translation>
</message>
<message>
<source>Hide Others</source>
@@ -39,15 +24,15 @@
</message>
<message>
<source>Show All</source>
- <translation>顯示全部</translation>
+ <translation>全部顯示</translation>
</message>
<message>
<source>Preferences...</source>
- <translation>偏好設定⋯</translation>
+ <translation>喜好設定...</translation>
</message>
<message>
<source>Quit %1</source>
- <translation>結束 %1</translation>
+ <translation>離開 %1</translation>
</message>
<message>
<source>About %1</source>
@@ -55,9857 +40,6575 @@
</message>
</context>
<context>
- <name>PPDOptionsModel</name>
+ <name>QAbstractSocket</name>
<message>
- <source>Name</source>
- <translation type="obsolete">名稱</translation>
+ <source>Host not found</source>
+ <translation>找不到主機</translation>
</message>
<message>
- <source>Value</source>
- <translation type="obsolete">值</translation>
+ <source>Connection refused</source>
+ <translation>拒絕連線</translation>
</message>
-</context>
-<context>
- <name>Phonon::</name>
<message>
- <source>Notifications</source>
- <translation type="vanished">通知</translation>
+ <source>Socket operation timed out</source>
+ <translation>通訊端操作逾時</translation>
</message>
<message>
- <source>Music</source>
- <translation type="vanished">音樂</translation>
+ <source>Socket is not connected</source>
+ <translation>通訊端未連接</translation>
</message>
<message>
- <source>Video</source>
- <translation type="vanished">影像</translation>
+ <source>Operation on socket is not supported</source>
+ <translation>通訊端操作不支援</translation>
</message>
<message>
- <source>Communication</source>
- <translation type="vanished">通訊</translation>
+ <source>Connection timed out</source>
+ <translation>連線逾時</translation>
</message>
<message>
- <source>Games</source>
- <translation type="vanished">遊戲</translation>
+ <source>Trying to connect while connection is in progress</source>
+ <translation>連線進行中時嘗試連線</translation>
</message>
<message>
- <source>Accessibility</source>
- <translation type="vanished">輔助裝置</translation>
+ <source>Network unreachable</source>
+ <translation>網路不可連接</translation>
</message>
</context>
<context>
- <name>Phonon::Gstreamer::Backend</name>
+ <name>QAbstractSpinBox</name>
+ <message>
+ <source>&Step up</source>
+ <translation>上一步(&S)</translation>
+ </message>
<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="vanished">警告:您可能沒有安裝 gstreamer0.10-plugins-good。
- 有些影像的功能將被關閉。</translation>
+ <source>Step &down</source>
+ <translation>下一步(&D)</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="vanished">警告:您可能沒有安裝 GStreamer 外掛程式。 所有音效與影像支援將被關閉。</translation>
+ <source>&Select All</source>
+ <translation>全選(&S)</translation>
</message>
</context>
<context>
- <name>Phonon::Gstreamer::MediaObject</name>
+ <name>QAccessibleActionInterface</name>
<message>
- <source>Cannot start playback.
-
-Check your Gstreamer installation and make sure you
-have libgstreamer-plugins-base installed.</source>
- <translation type="vanished">無法開始播放。
-
-請檢查您的 Gstreamer 安裝,並確定您有安裝
-libgstreamer-plugins-base 套件。</translation>
+ <source>Press</source>
+ <translation>按下</translation>
</message>
<message>
- <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
- <translation type="vanished">找不到需要的編解碼器。您需要安裝以下的套件來播放此內容:%0</translation>
+ <source>Increase</source>
+ <translation>增加</translation>
</message>
<message>
- <source>Could not open media source.</source>
- <translation type="vanished">無法開啟媒體來源。</translation>
+ <source>Decrease</source>
+ <translation>減少</translation>
</message>
<message>
- <source>Invalid source type.</source>
- <translation type="vanished">不合法的來源型態。</translation>
+ <source>ShowMenu</source>
+ <translation>ShowMenu</translation>
</message>
<message>
- <source>Could not locate media source.</source>
- <translation type="vanished">無法定位媒體來源。</translation>
+ <source>SetFocus</source>
+ <translation>SetFocus</translation>
</message>
<message>
- <source>Could not open audio device. The device is already in use.</source>
- <translation type="vanished">無法開啟音效裝置。裝置已在使用中。</translation>
+ <source>Toggle</source>
+ <translation>切換</translation>
</message>
<message>
- <source>Could not decode media source.</source>
- <translation type="vanished">無法解碼媒體來源。</translation>
+ <source>Scroll Left</source>
+ <translation>向左捲動</translation>
</message>
-</context>
-<context>
- <name>Phonon::VolumeSlider</name>
<message>
- <source>Volume: %1%</source>
- <translation type="vanished">音量:%1%</translation>
+ <source>Scroll Right</source>
+ <translation>向右捲動</translation>
</message>
<message>
- <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
- <translation type="vanished">使用此滑動器來調整音量。最左邊的位置為 0%,最右邊的為 %1%。</translation>
+ <source>Scroll Up</source>
+ <translation>向上捲動</translation>
</message>
-</context>
-<context>
- <name>Q3Accel</name>
<message>
- <source>%1, %2 not defined</source>
- <translation type="vanished">%1,%2 未定義</translation>
+ <source>Scroll Down</source>
+ <translation>向下捲動</translation>
</message>
<message>
- <source>Ambiguous %1 not handled</source>
- <translation type="vanished">不明確的 %1 尚未處理</translation>
+ <source>Previous Page</source>
+ <translation>上一頁</translation>
</message>
-</context>
-<context>
- <name>Q3DataTable</name>
<message>
- <source>True</source>
- <translation type="vanished">真</translation>
+ <source>Next Page</source>
+ <translation>下一頁</translation>
</message>
<message>
- <source>False</source>
- <translation type="vanished">假</translation>
+ <source>Triggers the action</source>
+ <translation>觸發器動作</translation>
</message>
<message>
- <source>Insert</source>
- <translation type="vanished">插入</translation>
+ <source>Increase the value</source>
+ <translation>增加值</translation>
</message>
<message>
- <source>Update</source>
- <translation type="vanished">更新</translation>
+ <source>Decrease the value</source>
+ <translation>減少值</translation>
</message>
<message>
- <source>Delete</source>
- <translation type="vanished">刪除</translation>
+ <source>Shows the menu</source>
+ <translation>顯示功能表</translation>
</message>
-</context>
-<context>
- <name>Q3FileDialog</name>
<message>
- <source>Copy or Move a File</source>
- <translation type="vanished">複製或移動檔案</translation>
+ <source>Sets the focus</source>
+ <translation>設定焦點</translation>
</message>
<message>
- <source>Read: %1</source>
- <translation type="vanished">讀取:%1</translation>
+ <source>Toggles the state</source>
+ <translation>切換狀態</translation>
</message>
<message>
- <source>Write: %1</source>
- <translation type="vanished">寫入:%1</translation>
+ <source>Scrolls to the left</source>
+ <translation>向左捲動</translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="vanished">取消</translation>
+ <source>Scrolls to the right</source>
+ <translation>向右捲動</translation>
</message>
<message>
- <source>All Files (*)</source>
- <translation type="vanished">所有檔案 (*)</translation>
+ <source>Scrolls up</source>
+ <translation>向上捲動</translation>
</message>
<message>
- <source>Name</source>
- <translation type="vanished">名稱</translation>
+ <source>Scrolls down</source>
+ <translation>向下捲動</translation>
</message>
<message>
- <source>Size</source>
- <translation type="vanished">大小</translation>
+ <source>Goes back a page</source>
+ <translation>返回上頁</translation>
</message>
<message>
- <source>Type</source>
- <translation type="vanished">型態</translation>
+ <source>Goes to the next page</source>
+ <translation>移至下頁</translation>
</message>
+</context>
+<context>
+ <name>QAndroidPlatformTheme</name>
<message>
- <source>Date</source>
- <translation type="vanished">日期</translation>
+ <source>Yes</source>
+ <translation>是</translation>
</message>
<message>
- <source>Attributes</source>
- <translation type="vanished">屬性</translation>
+ <source>Yes to All</source>
+ <translation>全部皆是</translation>
</message>
<message>
- <source>&OK</source>
- <translation type="vanished">確定(&O)</translation>
+ <source>No</source>
+ <translation>否</translation>
</message>
<message>
- <source>Look &in:</source>
- <translation type="vanished">尋找於(&I):</translation>
+ <source>No to All</source>
+ <translation>全部皆否</translation>
</message>
+</context>
+<context>
+ <name>QApplication</name>
<message>
- <source>File &name:</source>
- <translation type="vanished">檔名(&N):</translation>
+ <source>Executable '%1' requires Qt %2, found Qt %3.</source>
+ <translation>執行檔「%1」需要 Qt %2, 但找到 Qt %3。</translation>
</message>
<message>
- <source>File &type:</source>
- <translation type="vanished">檔案型態(&T):</translation>
+ <source>Incompatible Qt Library Error</source>
+ <translation>不相容的 Qt 程式庫錯誤</translation>
</message>
+</context>
+<context>
+ <name>QCocoaMenuItem</name>
<message>
- <source>Back</source>
- <translation type="vanished">返回</translation>
+ <source>About Qt</source>
+ <translation>關於 Qt</translation>
</message>
<message>
- <source>One directory up</source>
- <translation type="vanished">往上一層目錄</translation>
+ <source>About</source>
+ <translation>關於</translation>
</message>
<message>
- <source>Create New Folder</source>
- <translation type="vanished">建立新資料夾</translation>
+ <source>Config</source>
+ <translation>組態</translation>
</message>
<message>
- <source>List View</source>
- <translation type="vanished">列表檢視</translation>
+ <source>Preference</source>
+ <translation>喜好設定</translation>
</message>
<message>
- <source>Detail View</source>
- <translation type="vanished">詳細檢視</translation>
+ <source>Options</source>
+ <translation>選項</translation>
</message>
<message>
- <source>Preview File Info</source>
- <translation type="vanished">預覽檔案資訊</translation>
+ <source>Setting</source>
+ <translation>設定</translation>
</message>
<message>
- <source>Preview File Contents</source>
- <translation type="vanished">預覽檔案內容</translation>
+ <source>Setup</source>
+ <translation>設定</translation>
</message>
<message>
- <source>Read-write</source>
- <translation type="vanished">可讀寫</translation>
+ <source>Quit</source>
+ <translation>離開</translation>
</message>
<message>
- <source>Read-only</source>
- <translation type="vanished">唯讀</translation>
+ <source>Exit</source>
+ <translation>結束</translation>
</message>
<message>
- <source>Write-only</source>
- <translation type="vanished">唯寫</translation>
+ <source>Cut</source>
+ <translation>剪下</translation>
</message>
<message>
- <source>Inaccessible</source>
- <translation type="vanished">無法存取</translation>
+ <source>Copy</source>
+ <translation>複製</translation>
</message>
<message>
- <source>Symlink to File</source>
- <translation type="vanished">到檔案的符號連結</translation>
+ <source>Paste</source>
+ <translation>貼上</translation>
</message>
<message>
- <source>Symlink to Directory</source>
- <translation type="vanished">到目錄的符號連結</translation>
+ <source>Select All</source>
+ <translation>全選</translation>
</message>
+</context>
+<context>
+ <name>QCocoaTheme</name>
<message>
- <source>Symlink to Special</source>
- <translation type="vanished">到特殊節點的符號連結</translation>
+ <source>Don't Save</source>
+ <translation>不儲存</translation>
</message>
+</context>
+<context>
+ <name>QColorDialog</name>
<message>
- <source>File</source>
- <translation type="vanished">檔案</translation>
+ <source>Hu&e:</source>
+ <translation>Hu&e:</translation>
</message>
<message>
- <source>Dir</source>
- <translation type="vanished">目錄</translation>
+ <source>&Sat:</source>
+ <translation>&Sat:</translation>
</message>
<message>
- <source>Special</source>
- <translation type="vanished">特殊節點</translation>
+ <source>&Val:</source>
+ <translation>&Val:</translation>
</message>
<message>
- <source>Open</source>
- <translation type="vanished">開啟</translation>
+ <source>&Red:</source>
+ <translation>紅色(&R):</translation>
</message>
<message>
- <source>Save As</source>
- <translation type="vanished">另存新檔</translation>
+ <source>&Green:</source>
+ <translation>綠色(&G):</translation>
</message>
<message>
- <source>&Open</source>
- <translation type="vanished">開啟(&O)</translation>
+ <source>Bl&ue:</source>
+ <translation>藍色(&U):</translation>
</message>
<message>
- <source>&Save</source>
- <translation type="vanished">儲存(&S)</translation>
+ <source>A&lpha channel:</source>
+ <translation>Alpha 色板(&L):</translation>
</message>
<message>
- <source>&Rename</source>
- <translation type="vanished">重新命名(&R)</translation>
+ <source>&Basic colors</source>
+ <translation>基本色彩(&B)</translation>
</message>
<message>
- <source>&Delete</source>
- <translation type="vanished">刪除(&D)</translation>
+ <source>&Custom colors</source>
+ <translation>自訂色彩(&C)</translation>
</message>
<message>
- <source>R&eload</source>
- <translation type="vanished">重新載入(&E)</translation>
+ <source>&Add to Custom Colors</source>
+ <translation>加入到自訂色彩(&A)</translation>
</message>
<message>
- <source>Sort by &Name</source>
- <translation type="vanished">依名稱排序(&N)</translation>
+ <source>&HTML:</source>
+ <translation>&HTML:</translation>
</message>
<message>
- <source>Sort by &Size</source>
- <translation type="vanished">依大小排序(&S)</translation>
+ <source>Cursor at %1, %2
+Press ESC to cancel</source>
+ <translation>游標在 %1, %2
+按下 ESC 來取消</translation>
</message>
<message>
- <source>Sort by &Date</source>
- <translation type="vanished">依日期排序(&D)</translation>
+ <source>Select Color</source>
+ <translation>選取色彩</translation>
</message>
<message>
- <source>&Unsorted</source>
- <translation type="vanished">未排序(&U)</translation>
+ <source>&Pick Screen Color</source>
+ <translation>選擇螢幕色彩(&P)</translation>
</message>
+</context>
+<context>
+ <name>QComboBox</name>
<message>
- <source>Sort</source>
- <translation type="vanished">排序</translation>
+ <source>False</source>
+ <translation>否</translation>
</message>
<message>
- <source>Show &hidden files</source>
- <translation type="vanished">顯示隱藏檔(&H)</translation>
+ <source>True</source>
+ <translation>是</translation>
</message>
<message>
- <source>the file</source>
- <translation type="vanished">此檔案</translation>
+ <source>Open the combo box selection popup</source>
+ <translation>開啟組合方塊選取快顯</translation>
</message>
+</context>
+<context>
+ <name>QCommandLineParser</name>
<message>
- <source>the directory</source>
- <translation type="vanished">此目錄</translation>
+ <source>Displays version information.</source>
+ <translation>顯示版本資訊。</translation>
</message>
<message>
- <source>the symlink</source>
- <translation type="vanished">此符號連結</translation>
+ <source>Displays this help.</source>
+ <translation>顯示這個說明。</translation>
</message>
<message>
- <source>Delete %1</source>
- <translation type="vanished">刪除 %1</translation>
+ <source>Unknown option '%1'.</source>
+ <translation>未知選項「%1」。</translation>
</message>
<message>
- <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source>
- <translation type="vanished"><qt>您確定要刪除 %1 "%2" 嗎?</qt></translation>
+ <source>Unknown options: %1.</source>
+ <translation>未知選項: %1。</translation>
</message>
<message>
- <source>&Yes</source>
- <translation type="vanished">是(&Y)</translation>
+ <source>Missing value after '%1'.</source>
+ <translation>「%1」之後缺少值。</translation>
</message>
<message>
- <source>&No</source>
- <translation type="vanished">否(&N)</translation>
+ <source>Unexpected value after '%1'.</source>
+ <translation>「%1」之後未預期的值。</translation>
</message>
<message>
- <source>New Folder 1</source>
- <translation type="vanished">新資料夾 1</translation>
+ <source>[options]</source>
+ <translation>[選項]</translation>
</message>
<message>
- <source>New Folder</source>
- <translation type="vanished">新資料夾</translation>
+ <source>Usage: %1</source>
+ <translation>用法: %1</translation>
</message>
<message>
- <source>New Folder %1</source>
- <translation type="vanished">新資料夾 %1</translation>
+ <source>Options:</source>
+ <translation>選項:</translation>
</message>
<message>
- <source>Find Directory</source>
- <translation type="vanished">尋找目錄</translation>
+ <source>Arguments:</source>
+ <translation>參數:</translation>
</message>
+</context>
+<context>
+ <name>QCoreApplication</name>
<message>
- <source>Directories</source>
- <translation type="vanished">目錄</translation>
+ <source>%1: key is empty</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 空的金鑰</translation>
</message>
<message>
- <source>Directory:</source>
- <translation type="vanished">目錄:</translation>
+ <source>%1: unable to make key</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 無法產生金鑰</translation>
</message>
<message>
- <source>Error</source>
- <translation type="vanished">錯誤</translation>
+ <source>%1: ftok failed</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: ftok 失敗</translation>
</message>
+</context>
+<context>
+ <name>QCupsJobWidget</name>
<message>
- <source>%1
-File not found.
-Check path and filename.</source>
- <translation type="vanished">%1
-找不到檔案。
-請檢查路徑與檔名。</translation>
+ <source>Job</source>
+ <translation>工作</translation>
</message>
<message>
- <source>All Files (*.*)</source>
- <translation type="vanished">所有檔案 (*.*)</translation>
+ <source>Job Control</source>
+ <translation>工作控制</translation>
</message>
<message>
- <source>Open </source>
- <translation type="vanished">開啟 </translation>
+ <source>Scheduled printing:</source>
+ <translation>排程列印:</translation>
</message>
<message>
- <source>Select a Directory</source>
- <translation type="vanished">請選擇一個目錄</translation>
+ <source>Billing information:</source>
+ <translation>帳單資訊:</translation>
</message>
-</context>
-<context>
- <name>Q3LocalFs</name>
<message>
- <source>Could not read directory
-%1</source>
- <translation type="vanished">無法讀取目錄
-%1</translation>
+ <source>Job priority:</source>
+ <translation>工作優先順序:</translation>
</message>
<message>
- <source>Could not create directory
-%1</source>
- <translation type="vanished">無法建立目錄
-%1</translation>
+ <source>Banner Pages</source>
+ <translation>橫幅頁</translation>
</message>
<message>
- <source>Could not remove file or directory
-%1</source>
- <translation type="vanished">無法移除目錄
-%1</translation>
+ <source>End:</source>
+ <comment>Banner page at end</comment>
+ <translation>結束:</translation>
</message>
<message>
- <source>Could not rename
-%1
-to
-%2</source>
- <translation type="vanished">無法將
-%1
-重新命名為
-%2</translation>
+ <source>Start:</source>
+ <comment>Banner page at start</comment>
+ <translation>啟動:</translation>
</message>
<message>
- <source>Could not open
-%1</source>
- <translation type="vanished">無法開啟
-%1</translation>
+ <source>Print Immediately</source>
+ <translation>立即列印</translation>
</message>
<message>
- <source>Could not write
-%1</source>
- <translation type="vanished">無法寫入
-%1</translation>
+ <source>Hold Indefinitely</source>
+ <translation>無限期保持</translation>
</message>
-</context>
-<context>
- <name>Q3MainWindow</name>
<message>
- <source>Line up</source>
- <translation type="vanished">排列</translation>
+ <source>Day (06:00 to 17:59)</source>
+ <translation>白天 (06:00 到 17:59)</translation>
</message>
<message>
- <source>Customize...</source>
- <translation type="vanished">自訂...</translation>
+ <source>Night (18:00 to 05:59)</source>
+ <translation>晚上 (18:00 到 05:59)</translation>
</message>
-</context>
-<context>
- <name>Q3NetworkProtocol</name>
<message>
- <source>Operation stopped by the user</source>
- <translation type="vanished">使用者已中止操作</translation>
+ <source>Second Shift (16:00 to 23:59)</source>
+ <translation>第二班 (16:00 到 23:59)</translation>
</message>
-</context>
-<context>
- <name>Q3ProgressDialog</name>
<message>
- <source>Cancel</source>
- <translation type="vanished">取消</translation>
+ <source>Third Shift (00:00 to 07:59)</source>
+ <translation>第三班 (00:00 到 07:59)</translation>
</message>
-</context>
-<context>
- <name>Q3TabDialog</name>
<message>
- <source>OK</source>
- <translation type="vanished">確定</translation>
+ <source>Weekend (Saturday to Sunday)</source>
+ <translation>週末 (週六到週日)</translation>
</message>
<message>
- <source>Apply</source>
- <translation type="vanished">套用</translation>
+ <source>Specific Time</source>
+ <translation>特定時間</translation>
</message>
<message>
- <source>Help</source>
- <translation type="vanished">說明</translation>
+ <source>None</source>
+ <comment>CUPS Banner page</comment>
+ <translation>無</translation>
</message>
<message>
- <source>Defaults</source>
- <translation type="vanished">預設</translation>
+ <source>Standard</source>
+ <comment>CUPS Banner page</comment>
+ <translation>標準</translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="vanished">取消</translation>
+ <source>Unclassified</source>
+ <comment>CUPS Banner page</comment>
+ <translation>未分類</translation>
</message>
-</context>
-<context>
- <name>Q3TextEdit</name>
<message>
- <source>&Undo</source>
- <translation type="vanished">復原(&U)</translation>
+ <source>Confidential</source>
+ <comment>CUPS Banner page</comment>
+ <translation>機密</translation>
</message>
<message>
- <source>&Redo</source>
- <translation type="vanished">重做(&R)</translation>
+ <source>Classified</source>
+ <comment>CUPS Banner page</comment>
+ <translation>分類</translation>
</message>
<message>
- <source>Cu&t</source>
- <translation type="vanished">剪下(&T)</translation>
+ <source>Secret</source>
+ <comment>CUPS Banner page</comment>
+ <translation>秘密</translation>
</message>
<message>
- <source>&Copy</source>
- <translation type="vanished">複製(&C)</translation>
+ <source>Top Secret</source>
+ <comment>CUPS Banner page</comment>
+ <translation>最高秘密</translation>
</message>
+</context>
+<context>
+ <name>QDB2Driver</name>
<message>
- <source>&Paste</source>
- <translation type="vanished">貼上(&P)</translation>
+ <source>Unable to connect</source>
+ <translation>無法連接</translation>
</message>
<message>
- <source>Clear</source>
- <translation type="vanished">清除</translation>
+ <source>Unable to commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>Select All</source>
- <translation type="vanished">全部選擇</translation>
- </message>
-</context>
-<context>
- <name>Q3TitleBar</name>
- <message>
- <source>System</source>
- <translation type="vanished">系統</translation>
- </message>
- <message>
- <source>Restore up</source>
- <translation type="vanished">向上恢復</translation>
- </message>
- <message>
- <source>Minimize</source>
- <translation type="vanished">最小化</translation>
- </message>
- <message>
- <source>Restore down</source>
- <translation type="vanished">向下恢復</translation>
- </message>
- <message>
- <source>Maximize</source>
- <translation type="vanished">最大化</translation>
- </message>
- <message>
- <source>Close</source>
- <translation type="vanished">關閉</translation>
- </message>
- <message>
- <source>Contains commands to manipulate the window</source>
- <translation type="vanished">包含要操作此視窗的指令</translation>
+ <source>Unable to rollback transaction</source>
+ <translation>無法回復異動</translation>
</message>
<message>
- <source>Puts a minimized back to normal</source>
- <translation type="vanished">將最小化視窗放回原大小</translation>
+ <source>Unable to set autocommit</source>
+ <translation>無法設定自動認可</translation>
</message>
+</context>
+<context>
+ <name>QDB2Result</name>
<message>
- <source>Moves the window out of the way</source>
- <translation type="vanished">把視窗移開</translation>
+ <source>Unable to execute statement</source>
+ <translation>無法執行陳述式</translation>
</message>
<message>
- <source>Puts a maximized window back to normal</source>
- <translation type="vanished">將最大化視窗放回原大小</translation>
+ <source>Unable to prepare statement</source>
+ <translation>無法準備陳述式</translation>
</message>
<message>
- <source>Makes the window full screen</source>
- <translation type="vanished">將視窗放大到全畫面</translation>
+ <source>Unable to bind variable</source>
+ <translation>無法繫結變數</translation>
</message>
<message>
- <source>Closes the window</source>
- <translation type="vanished">關閉視窗</translation>
+ <source>Unable to fetch record %1</source>
+ <translation>無法提取紀錄 %1</translation>
</message>
<message>
- <source>Displays the name of the window and contains controls to manipulate it</source>
- <translation type="vanished">顯示視窗名稱,並包含操作它的控制元件</translation>
+ <source>Unable to fetch next</source>
+ <translation>無法提取下一個</translation>
</message>
<message>
- <source>Holds the name of the window and contains controls to manipulate it</source>
- <translation type="vanished">保留視窗的名稱並包含對其進行操作的控制項</translation>
+ <source>Unable to fetch first</source>
+ <translation>無法提取第一個</translation>
</message>
</context>
<context>
- <name>Q3ToolBar</name>
+ <name>QDBusTrayIcon</name>
<message>
- <source>More...</source>
- <translation type="vanished">更多...</translation>
+ <source>OK</source>
+ <translation>確定</translation>
</message>
</context>
<context>
- <name>Q3UrlOperator</name>
- <message>
- <source>The protocol `%1' is not supported</source>
- <translation type="vanished">協定 %1 未支援</translation>
- </message>
- <message>
- <source>The protocol `%1' does not support listing directories</source>
- <translation type="vanished">協定 %1 未支援列出目錄</translation>
- </message>
- <message>
- <source>The protocol `%1' does not support creating new directories</source>
- <translation type="vanished">協定 %1 未支援建立新目錄</translation>
- </message>
- <message>
- <source>The protocol `%1' does not support removing files or directories</source>
- <translation type="vanished">協定 %1 未支援移除檔案或目錄</translation>
- </message>
- <message>
- <source>The protocol `%1' does not support renaming files or directories</source>
- <translation type="vanished">協定 %1 未支援重新命名檔案或目錄</translation>
- </message>
+ <name>QDateTimeParser</name>
<message>
- <source>The protocol `%1' does not support getting files</source>
- <translation type="vanished">協定 %1 未支援取得檔案</translation>
+ <source>AM</source>
+ <translation>AM</translation>
</message>
<message>
- <source>The protocol `%1' does not support putting files</source>
- <translation type="vanished">協定 %1 未支援寫入檔案</translation>
+ <source>am</source>
+ <translation>am</translation>
</message>
<message>
- <source>The protocol `%1' does not support copying or moving files or directories</source>
- <translation type="vanished">協定 %1 未支援複製或移動檔案或目錄</translation>
+ <source>PM</source>
+ <translation>PM</translation>
</message>
<message>
- <source>(unknown)</source>
- <translation type="vanished">(未知)</translation>
+ <source>pm</source>
+ <translation>pm</translation>
</message>
</context>
<context>
- <name>Q3Wizard</name>
- <message>
- <source>&Cancel</source>
- <translation type="vanished">取消(&C)</translation>
- </message>
- <message>
- <source>< &Back</source>
- <translation type="vanished"><返回(&B)</translation>
- </message>
- <message>
- <source>&Next ></source>
- <translation type="vanished">下一個(&N)></translation>
- </message>
- <message>
- <source>&Finish</source>
- <translation type="vanished">完成(&F)</translation>
- </message>
+ <name>QDialog</name>
<message>
- <source>&Help</source>
- <translation type="vanished">說明(&H)</translation>
+ <source>What's This?</source>
+ <translation>這是?</translation>
</message>
</context>
<context>
- <name>QAbstractSocket</name>
- <message>
- <source>Operation on socket is not supported</source>
- <translation>Socket 的操作未被支援</translation>
- </message>
- <message>
- <source>Host not found</source>
- <translation>找不到主機</translation>
- </message>
+ <name>QDialogButtonBox</name>
<message>
- <source>Connection refused</source>
- <translation>連線被拒</translation>
+ <source>OK</source>
+ <translation>確定</translation>
</message>
+</context>
+<context>
+ <name>QDirModel</name>
<message>
- <source>Connection timed out</source>
- <translation>連線逾時</translation>
+ <source>Name</source>
+ <translation>名稱</translation>
</message>
<message>
- <source>Socket operation timed out</source>
- <translation>Socket 操作逾時</translation>
+ <source>Size</source>
+ <translation>大小</translation>
</message>
<message>
- <source>Socket is not connected</source>
- <translation>Socket 未連線</translation>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>種類</translation>
</message>
<message>
- <source>Network unreachable</source>
- <translation>無法使用網路</translation>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>類型</translation>
</message>
<message>
- <source>Trying to connect while connection is in progress</source>
- <translation type="unfinished"></translation>
+ <source>Date Modified</source>
+ <translation>修改日期</translation>
</message>
</context>
<context>
- <name>QAbstractSpinBox</name>
- <message>
- <source>&Step up</source>
- <translation>單步向上(&S)</translation>
- </message>
- <message>
- <source>Step &down</source>
- <translation>單步向下(&D)</translation>
- </message>
+ <name>QDnsLookup</name>
<message>
- <source>&Select All</source>
- <translation>全部選擇(&S)</translation>
+ <source>Operation cancelled</source>
+ <translation>操作取消</translation>
</message>
</context>
<context>
- <name>QAccessibleActionInterface</name>
+ <name>QDnsLookupRunnable</name>
<message>
- <source>Press</source>
- <translation type="unfinished">按下</translation>
+ <source>IPv6 addresses for nameservers are currently not supported</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Increase</source>
+ <source>Invalid domain name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decrease</source>
+ <source>Not yet supported on Android</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ShowMenu</source>
+ <source>Resolver functions not found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>SetFocus</source>
+ <source>Resolver initialization failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle</source>
- <translation type="unfinished">切換</translation>
+ <source>Server could not process query</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Scroll Left</source>
- <translation type="unfinished">往左捲軸</translation>
+ <source>Server failure</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Scroll Right</source>
- <translation type="unfinished">往右捲軸</translation>
+ <source>Non existent domain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Scroll Up</source>
+ <source>Server refused to answer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Scroll Down</source>
+ <source>Invalid reply received</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous Page</source>
+ <source>Could not expand domain name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next Page</source>
+ <source>Invalid IPv4 address record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Triggers the action</source>
+ <source>Invalid IPv6 address record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Increase the value</source>
+ <source>Invalid canonical name record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decrease the value</source>
+ <source>Invalid name server record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Shows the menu</source>
+ <source>Invalid pointer record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sets the focus</source>
+ <source>Invalid mail exchange record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggles the state</source>
+ <source>Invalid service record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Scrolls to the left</source>
+ <source>Invalid text record</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Scrolls to the right</source>
+ <source>Resolver library can't be loaded: No runtime library loading support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Scrolls up</source>
+ <source>No hostname given</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Scrolls down</source>
- <translation type="unfinished"></translation>
+ <source>Invalid hostname</source>
+ <translation>主機名稱無效</translation>
</message>
<message>
- <source>Goes back a page</source>
+ <source>Host %1 could not be found.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Goes to the next page</source>
- <translation type="unfinished"></translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
</context>
<context>
- <name>QAndroidPlatformTheme</name>
+ <name>QDockWidget</name>
<message>
- <source>Yes</source>
- <translation type="unfinished">是</translation>
+ <source>Close</source>
+ <extracomment>Accessible name for button closing a dock widget</extracomment>
+ <translation>關閉</translation>
</message>
<message>
- <source>Yes to All</source>
- <translation type="unfinished"></translation>
+ <source>Float</source>
+ <extracomment>Accessible name for button undocking a dock widget (floating state)</extracomment>
+ <translation>浮動</translation>
</message>
<message>
- <source>No</source>
- <translation type="unfinished">否</translation>
+ <source>Undocks and re-attaches the dock widget</source>
+ <translation>取消停駐並重新附加停駐小工具</translation>
</message>
<message>
- <source>No to All</source>
- <translation type="unfinished"></translation>
+ <source>Closes the dock widget</source>
+ <translation>關閉停駐小工具</translation>
</message>
</context>
<context>
- <name>QApplication</name>
+ <name>QErrorMessage</name>
<message>
- <source>Activate</source>
- <translation type="vanished">啟動</translation>
+ <source>Debug Message:</source>
+ <translation>除錯訊息:</translation>
</message>
<message>
- <source>Executable '%1' requires Qt %2, found Qt %3.</source>
- <translation>執行檔 %1 需要 Qt %2,但只找到 Qt %3。</translation>
+ <source>Warning:</source>
+ <translation>警告:</translation>
</message>
<message>
- <source>Incompatible Qt Library Error</source>
- <translation>Qt 函式庫不相容的錯誤</translation>
+ <source>Fatal Error:</source>
+ <translation>嚴重錯誤:</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 type="vanished">QT_LAYOUT_DIRECTION</translation>
+ <source>&Show this message again</source>
+ <translation>再次顯示這個訊息(&S)</translation>
</message>
<message>
- <source>Activates the program's main window</source>
- <translation type="vanished">啟動程式的主視窗</translation>
+ <source>&OK</source>
+ <translation>確定(&O)</translation>
</message>
</context>
<context>
- <name>QAxSelect</name>
+ <name>QFile</name>
<message>
- <source>Select ActiveX Control</source>
- <translation type="vanished">選擇 ActiveX 控制</translation>
+ <source>Destination file is the same file.</source>
+ <translation>目的地檔案是相同檔案。</translation>
</message>
<message>
- <source>OK</source>
- <translation type="vanished">確定</translation>
+ <source>Source file does not exist.</source>
+ <translation>來源檔案不存在。</translation>
</message>
<message>
- <source>&Cancel</source>
- <translation type="vanished">取消(&C)</translation>
+ <source>Destination file exists</source>
+ <translation>目的地檔案存在</translation>
</message>
<message>
- <source>COM &Object:</source>
- <translation type="vanished">COM 物件(&O)</translation>
+ <source>Error while renaming.</source>
+ <translation>重新命名時錯誤。</translation>
</message>
-</context>
-<context>
- <name>QCheckBox</name>
<message>
- <source>Uncheck</source>
- <translation type="vanished">取消勾選</translation>
+ <source>Unable to restore from %1: %2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Check</source>
- <translation type="vanished">勾選</translation>
+ <source>Will not rename sequential file using block copy</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle</source>
- <translation type="vanished">切換</translation>
+ <source>Cannot remove source file</source>
+ <translation>無法移除來源檔案</translation>
</message>
-</context>
-<context>
- <name>QCocoaMenuItem</name>
<message>
- <source>About Qt</source>
- <translation type="unfinished">關於 Qt</translation>
+ <source>Cannot open %1 for input</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>About</source>
- <translation type="unfinished">關於</translation>
+ <source>Cannot open for output</source>
+ <translation>無法開啟輸出</translation>
</message>
<message>
- <source>Config</source>
- <translation type="unfinished">設定</translation>
+ <source>Failure to write block</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Preference</source>
- <translation type="unfinished">喜好設定</translation>
+ <source>Cannot create %1 for output</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QFileDevice</name>
<message>
- <source>Options</source>
- <translation type="unfinished">選項</translation>
+ <source>No file engine available or engine does not support UnMapExtension</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QFileDialog</name>
<message>
- <source>Setting</source>
- <translation type="unfinished">設定</translation>
+ <source>All Files (*)</source>
+ <translation>所有檔案 (*)</translation>
</message>
<message>
- <source>Setup</source>
- <translation type="unfinished">設定</translation>
+ <source>Directories</source>
+ <translation>目錄</translation>
</message>
<message>
- <source>Quit</source>
- <translation type="unfinished">離開</translation>
+ <source>&Open</source>
+ <translation>開啟(&O)</translation>
</message>
<message>
- <source>Exit</source>
- <translation type="unfinished">離開</translation>
+ <source>&Save</source>
+ <translation>儲存(&S)</translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">剪下</translation>
+ <source>Open</source>
+ <translation>開啟</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">複製</translation>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>%1 已經存在。
+您要取代它嗎?</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">貼上</translation>
+ <source>%1
+File not found.
+Please verify the correct file name was given.</source>
+ <translation>%1
+檔案找不到。
+請確認給予正確的檔案名稱。</translation>
</message>
<message>
- <source>Select All</source>
- <translation type="unfinished">全部選擇</translation>
- </message>
-</context>
-<context>
- <name>QCocoaTheme</name>
- <message>
- <source>Don't Save</source>
- <translation type="unfinished">不要儲存</translation>
- </message>
-</context>
-<context>
- <name>QColorDialog</name>
- <message>
- <source>Hu&e:</source>
- <translation>色調(&E):</translation>
- </message>
- <message>
- <source>&Sat:</source>
- <translation>飽和度(&S):</translation>
- </message>
- <message>
- <source>&Val:</source>
- <translation>亮度(&V):</translation>
- </message>
- <message>
- <source>&Red:</source>
- <translation>紅(&R):</translation>
- </message>
- <message>
- <source>&Green:</source>
- <translation>綠(&G):</translation>
- </message>
- <message>
- <source>Bl&ue:</source>
- <translation>藍(&U):</translation>
- </message>
- <message>
- <source>A&lpha channel:</source>
- <translation>Alpha 色頻(&L):</translation>
- </message>
- <message>
- <source>Select Color</source>
- <translation>選擇顏色</translation>
- </message>
- <message>
- <source>&Basic colors</source>
- <translation>基本顏色(&B)</translation>
- </message>
- <message>
- <source>&Custom colors</source>
- <translation>自訂顏色(&C)</translation>
- </message>
- <message>
- <source>&Add to Custom Colors</source>
- <translation>新增到自訂顏色(&A)</translation>
- </message>
- <message>
- <source>Select color</source>
- <translation type="obsolete">選擇顏色</translation>
- </message>
- <message>
- <source>&Define Custom Colors >></source>
- <translation type="obsolete">定義自訂顏色(&D)>></translation>
- </message>
- <message>
- <source>OK</source>
- <translation type="obsolete">確定</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="obsolete">取消</translation>
- </message>
- <message>
- <source>&HTML:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Cursor at %1, %2
-Press ESC to cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>&Pick Screen Color</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QComboBox</name>
- <message>
- <source>Open</source>
- <translation type="vanished">開啟</translation>
- </message>
- <message>
- <source>False</source>
- <translation>假</translation>
- </message>
- <message>
- <source>True</source>
- <translation>真</translation>
- </message>
- <message>
- <source>Close</source>
- <translation type="vanished">關閉</translation>
- </message>
- <message>
- <source>Open the combo box selection popup</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QCommandLineParser</name>
- <message>
- <source>Displays version information.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Displays this help.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unknown option '%1'.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unknown options: %1.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Missing value after '%1'.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unexpected value after '%1'.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>[options]</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Usage: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Options:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Arguments:</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QCoreApplication</name>
- <message>
- <source>%1: permission denied</source>
- <comment>QSystemSemaphore</comment>
- <translation type="obsolete">%1:存取被拒</translation>
- </message>
- <message>
- <source>%1: already exists</source>
- <comment>QSystemSemaphore</comment>
- <translation type="obsolete">%1:已存在</translation>
- </message>
- <message>
- <source>%1: doesn't exists</source>
- <comment>QSystemSemaphore</comment>
- <translation type="obsolete">%1:不存在</translation>
- </message>
- <message>
- <source>%1: out of resources</source>
- <comment>QSystemSemaphore</comment>
- <translation type="obsolete">%1:資源不足</translation>
- </message>
- <message>
- <source>%1: unknown error %2</source>
- <comment>QSystemSemaphore</comment>
- <translation type="obsolete">%1:未知的錯誤 %2</translation>
- </message>
- <message>
- <source>%1: key is empty</source>
- <comment>QSystemSemaphore</comment>
- <translation>%1:鍵值是空的</translation>
- </message>
- <message>
- <source>%1: unable to make key</source>
- <comment>QSystemSemaphore</comment>
- <translation>%1:無法產生鍵值</translation>
- </message>
- <message>
- <source>%1: ftok failed</source>
- <comment>QSystemSemaphore</comment>
- <translation>%1:ftok 失敗</translation>
- </message>
-</context>
-<context>
- <name>QCupsJobWidget</name>
- <message>
- <source>Job</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Job Control</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Scheduled printing:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Billing information:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Job priority:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Banner Pages</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>End:</source>
- <comment>Banner page at end</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Start:</source>
- <comment>Banner page at start</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Print Immediately</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Hold Indefinitely</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Day (06:00 to 17:59)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Night (18:00 to 05:59)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Second Shift (16:00 to 23:59)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Third Shift (00:00 to 07:59)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Weekend (Saturday to Sunday)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Specific Time</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>None</source>
- <comment>CUPS Banner page</comment>
- <translation type="unfinished">無</translation>
- </message>
- <message>
- <source>Standard</source>
- <comment>CUPS Banner page</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unclassified</source>
- <comment>CUPS Banner page</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Confidential</source>
- <comment>CUPS Banner page</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Classified</source>
- <comment>CUPS Banner page</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Secret</source>
- <comment>CUPS Banner page</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Top Secret</source>
- <comment>CUPS Banner page</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QDB2Driver</name>
- <message>
- <source>Unable to connect</source>
- <translation>無法連接</translation>
- </message>
- <message>
- <source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
- </message>
- <message>
- <source>Unable to rollback transaction</source>
- <translation>無法反轉事務</translation>
- </message>
- <message>
- <source>Unable to set autocommit</source>
- <translation>無法設定自動提交</translation>
- </message>
-</context>
-<context>
- <name>QDB2Result</name>
- <message>
- <source>Unable to execute statement</source>
- <translation>無法執行敘述</translation>
- </message>
- <message>
- <source>Unable to prepare statement</source>
- <translation>無法準備敘述</translation>
- </message>
- <message>
- <source>Unable to bind variable</source>
- <translation>無法結合變數</translation>
- </message>
- <message>
- <source>Unable to fetch record %1</source>
- <translation>無法抓取紀錄 %1</translation>
- </message>
- <message>
- <source>Unable to fetch next</source>
- <translation>無法抓取下一筆</translation>
- </message>
- <message>
- <source>Unable to fetch first</source>
- <translation>無法抓取第一筆</translation>
- </message>
-</context>
-<context>
- <name>QDBusTrayIcon</name>
- <message>
- <source>OK</source>
- <translation type="unfinished">確定</translation>
- </message>
-</context>
-<context>
- <name>QDateTimeEdit</name>
- <message>
- <source>AM</source>
- <translation type="vanished">AM</translation>
- </message>
- <message>
- <source>am</source>
- <translation type="vanished">am</translation>
- </message>
- <message>
- <source>PM</source>
- <translation type="vanished">PM</translation>
- </message>
- <message>
- <source>pm</source>
- <translation type="vanished">pm</translation>
- </message>
-</context>
-<context>
- <name>QDateTimeParser</name>
- <message>
- <source>AM</source>
- <translation type="unfinished">AM</translation>
- </message>
- <message>
- <source>am</source>
- <translation type="unfinished">am</translation>
- </message>
- <message>
- <source>PM</source>
- <translation type="unfinished">PM</translation>
- </message>
- <message>
- <source>pm</source>
- <translation type="unfinished">pm</translation>
- </message>
-</context>
-<context>
- <name>QDial</name>
- <message>
- <source>QDial</source>
- <translation type="vanished">QDial</translation>
- </message>
- <message>
- <source>SpeedoMeter</source>
- <translation type="vanished">SpeedoMeter</translation>
- </message>
- <message>
- <source>SliderHandle</source>
- <translation type="vanished">SliderHandle</translation>
- </message>
-</context>
-<context>
- <name>QDialog</name>
- <message>
- <source>What's This?</source>
- <translation>這是什麼?</translation>
- </message>
- <message>
- <source>Done</source>
- <translation type="vanished">完成</translation>
- </message>
-</context>
-<context>
- <name>QDialogButtonBox</name>
- <message>
- <source>OK</source>
- <translation>確定</translation>
- </message>
- <message>
- <source>Save</source>
- <translation type="vanished">儲存</translation>
- </message>
- <message>
- <source>&Save</source>
- <translation type="vanished">儲存(&S)</translation>
- </message>
- <message>
- <source>Open</source>
- <translation type="vanished">開啟</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="vanished">取消</translation>
- </message>
- <message>
- <source>&Cancel</source>
- <translation type="vanished">取消(&C)</translation>
- </message>
- <message>
- <source>Close</source>
- <translation type="vanished">關閉</translation>
- </message>
- <message>
- <source>&Close</source>
- <translation type="vanished">關閉(&C)</translation>
- </message>
- <message>
- <source>Apply</source>
- <translation type="vanished">套用</translation>
- </message>
- <message>
- <source>Reset</source>
- <translation type="vanished">重置</translation>
- </message>
- <message>
- <source>Help</source>
- <translation type="vanished">說明</translation>
- </message>
- <message>
- <source>Don't Save</source>
- <translation type="vanished">不要儲存</translation>
- </message>
- <message>
- <source>Discard</source>
- <translation type="vanished">丟棄</translation>
- </message>
- <message>
- <source>&Yes</source>
- <translation type="vanished">是(&Y)</translation>
- </message>
- <message>
- <source>Yes to &All</source>
- <translation type="vanished">全部回答是(&A)</translation>
- </message>
- <message>
- <source>&No</source>
- <translation type="vanished">否(&N)</translation>
- </message>
- <message>
- <source>N&o to All</source>
- <translation type="vanished">全部回答否(&O)</translation>
- </message>
- <message>
- <source>Save All</source>
- <translation type="vanished">全部儲存</translation>
- </message>
- <message>
- <source>Abort</source>
- <translation type="vanished">中止</translation>
- </message>
- <message>
- <source>Retry</source>
- <translation type="vanished">重試</translation>
- </message>
- <message>
- <source>Ignore</source>
- <translation type="vanished">忽略</translation>
- </message>
- <message>
- <source>Restore Defaults</source>
- <translation type="vanished">回復預設值</translation>
- </message>
- <message>
- <source>Close without Saving</source>
- <translation type="vanished">關閉而不儲存</translation>
- </message>
- <message>
- <source>&OK</source>
- <translation type="vanished">確定(&O)</translation>
- </message>
-</context>
-<context>
- <name>QDirModel</name>
- <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>
-</context>
-<context>
- <name>QDnsLookup</name>
- <message>
- <source>Operation cancelled</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QDnsLookupRunnable</name>
- <message>
- <source>IPv6 addresses for nameservers are currently not supported</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid domain name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Not yet supported on Android</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Resolver functions not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Resolver initialization failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Server could not process query</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Server failure</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Non existent domain</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Server refused to answer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid reply received</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not expand domain name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid IPv4 address record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid IPv6 address record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid canonical name record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid name server record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid pointer record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid mail exchange record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid service record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid text record</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Resolver library can't be loaded: No runtime library loading support</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No hostname given</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Invalid hostname</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Host %1 could not be found.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished">未知的錯誤</translation>
- </message>
-</context>
-<context>
- <name>QDockWidget</name>
- <message>
- <source>Close</source>
- <extracomment>Accessible name for button closing a dock widget</extracomment>
- <translation>關閉</translation>
- </message>
- <message>
- <source>Dock</source>
- <translation type="vanished">嵌入</translation>
- </message>
- <message>
- <source>Float</source>
- <extracomment>Accessible name for button undocking a dock widget (floating state)</extracomment>
- <translation>飄浮</translation>
- </message>
- <message>
- <source>Undocks and re-attaches the dock widget</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Closes the dock widget</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QDoubleSpinBox</name>
- <message>
- <source>More</source>
- <translation type="vanished">更多</translation>
- </message>
- <message>
- <source>Less</source>
- <translation type="vanished">較少</translation>
- </message>
-</context>
-<context>
- <name>QErrorMessage</name>
- <message>
- <source>Debug Message:</source>
- <translation>除錯訊息:</translation>
- </message>
- <message>
- <source>Warning:</source>
- <translation>警告:</translation>
- </message>
- <message>
- <source>Fatal Error:</source>
- <translation>嚴重錯誤:</translation>
- </message>
- <message>
- <source>&Show this message again</source>
- <translation>再度顯示此訊息(&S)</translation>
- </message>
- <message>
- <source>&OK</source>
- <translation>確定(&O)</translation>
- </message>
-</context>
-<context>
- <name>QFile</name>
- <message>
- <source>Destination file exists</source>
- <translation>目標檔已存在</translation>
- </message>
- <message>
- <source>Cannot remove source file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Cannot open %1 for input</source>
- <translation>無法開啟 %1 以輸入</translation>
- </message>
- <message>
- <source>Cannot open for output</source>
- <translation>無法開啟 %1 以輸出</translation>
- </message>
- <message>
- <source>Failure to write block</source>
- <translation>寫入區塊時失敗</translation>
- </message>
- <message>
- <source>Cannot create %1 for output</source>
- <translation>無法建立 %1 以輸出</translation>
- </message>
- <message>
- <source>Destination file is the same file.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Source file does not exist.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error while renaming.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unable to restore from %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Will not rename sequential file using block copy</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QFileDevice</name>
- <message>
- <source>No file engine available or engine does not support UnMapExtension</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>All Files (*)</source>
- <translation>所有檔案 (*)</translation>
- </message>
- <message>
- <source>Directories</source>
- <translation>目錄</translation>
- </message>
- <message>
- <source>&Open</source>
- <translation>開啟(&O)</translation>
- </message>
- <message>
- <source>&Save</source>
- <translation>儲存(&S)</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>開啟</translation>
- </message>
- <message>
- <source>%1 already exists.
-Do you want to replace it?</source>
- <translation>%1 已存在
-您要取代它嗎?</translation>
- </message>
- <message>
- <source>%1
-File not found.
-Please verify the correct file name was given.</source>
- <translation>%1
-找不到檔案。
-請檢查檔名是否正確。</translation>
- </message>
- <message>
- <source>My Computer</source>
- <translation>我的電腦</translation>
- </message>
- <message>
- <source>&Rename</source>
- <translation>重新命名(&R)</translation>
- </message>
- <message>
- <source>&Delete</source>
- <translation>刪除(&D)</translation>
- </message>
- <message>
- <source>Show &hidden files</source>
- <translation>顯示隱藏檔(&H)</translation>
- </message>
- <message>
- <source>Back</source>
- <translation>返回</translation>
- </message>
- <message>
- <source>Parent Directory</source>
- <translation>父目錄</translation>
- </message>
- <message>
- <source>List View</source>
- <translation>列表檢視</translation>
- </message>
- <message>
- <source>Detail View</source>
- <translation>詳細檢視</translation>
- </message>
- <message>
- <source>Files of type:</source>
- <translation>檔案型態:</translation>
- </message>
- <message>
- <source>Directory:</source>
- <translation>目錄:</translation>
- </message>
- <message>
- <source>%1
-Directory not found.
-Please verify the correct directory name was given.</source>
- <translation>%1
-找不到目錄。
-請檢查目錄名稱是否正確。</translation>
- </message>
- <message>
- <source>'%1' is write protected.
-Do you want to delete it anyway?</source>
- <translation>%1 有寫入保護。
-您確定要刪除它嗎?</translation>
- </message>
- <message>
- <source>Are sure you want to delete '%1'?</source>
- <translation type="vanished">您確定要刪除 %1 嗎?</translation>
- </message>
- <message>
- <source>Could not delete directory.</source>
- <translation>無法刪除目錄。</translation>
- </message>
- <message>
- <source>Recent Places</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>新增資料夾(&N)</translation>
- </message>
- <message>
- <source>&Choose</source>
- <translation>選擇(&C)</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>移除</translation>
- </message>
- <message>
- <source>File &name:</source>
- <translation>檔名(&N):</translation>
- </message>
- <message>
- <source>Look in:</source>
- <translation>尋找於:</translation>
- </message>
- <message>
- <source>Create New Folder</source>
- <translation>建立新資料夾</translation>
- </message>
- <message>
- <source>
-File not found.
-Please verify the correct file name was given</source>
- <translation type="obsolete">
-檔案找不到。
-請檢查檔名是否正確。</translation>
- </message>
- <message>
- <source>All Files (*.*)</source>
- <translation type="vanished">所有檔案 (*.*)</translation>
- </message>
- <message>
- <source>Go back</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Alt+Left</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Go forward</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Alt+Right</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Go to the parent directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Alt+Up</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Create a New Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Change to list view mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Change to detail view mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Sidebar</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>List of places and bookmarks</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>All files (*)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished">刪除</translation>
- </message>
- <message>
- <source>Are you sure you want to delete '%1'?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 File</source>
- <extracomment>%1 is a file name suffix, for example txt</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>File Folder</source>
- <comment>Match Windows Explorer</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Folder</source>
- <comment>All other platforms</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Alias</source>
- <comment>OS X Finder</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Shortcut</source>
- <comment>All other platforms</comment>
- <translation type="unfinished"></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>
- </message>
- <message>
- <source>Computer</source>
- <translation>電腦</translation>
- </message>
- <message>
- <source>%1 TB</source>
- <translation>%1 TB</translation>
- </message>
- <message>
- <source>%1 GB</source>
- <translation>%1 GB</translation>
- </message>
- <message>
- <source>%1 MB</source>
- <translation>%1 MB</translation>
- </message>
- <message>
- <source>%1 KB</source>
- <translation>%1 KB</translation>
- </message>
- <message>
- <source>%1 bytes</source>
- <translation>%1 位元組</translation>
- </message>
- <message>
- <source>%1 byte(s)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QFontDatabase</name>
- <message>
- <source>Normal</source>
- <translation type="vanished">正常</translation>
- </message>
- <message>
- <source>Bold</source>
- <translation>粗體</translation>
- </message>
- <message>
- <source>Demi Bold</source>
- <translation>半粗體</translation>
- </message>
- <message>
- <source>Black</source>
- <translation>黑體</translation>
- </message>
- <message>
- <source>Demi</source>
- <extracomment>The word for "Demi" as in "Demi Bold" used as a pattern for string searches</extracomment>
- <translation>半體</translation>
- </message>
- <message>
- <source>Light</source>
- <translation>輕體</translation>
- </message>
- <message>
- <source>Italic</source>
- <translation>斜體</translation>
- </message>
- <message>
- <source>Oblique</source>
- <translation>傾斜體</translation>
- </message>
- <message>
- <source>Any</source>
- <translation>任何</translation>
- </message>
- <message>
- <source>Latin</source>
- <translation>拉丁</translation>
- </message>
- <message>
- <source>Greek</source>
- <translation>希臘</translation>
- </message>
- <message>
- <source>Cyrillic</source>
- <translation>斯拉夫</translation>
- </message>
- <message>
- <source>Armenian</source>
- <translation>亞美尼亞</translation>
- </message>
- <message>
- <source>Hebrew</source>
- <translation>希伯來</translation>
- </message>
- <message>
- <source>Arabic</source>
- <translation>阿拉伯</translation>
- </message>
- <message>
- <source>Syriac</source>
- <translation>敘利亞</translation>
- </message>
- <message>
- <source>Thaana</source>
- <translation>Thaana</translation>
- </message>
- <message>
- <source>Devanagari</source>
- <translation>Devanagari</translation>
- </message>
- <message>
- <source>Bengali</source>
- <translation>孟加拉</translation>
- </message>
- <message>
- <source>Gurmukhi</source>
- <translation>Gurmukhi</translation>
- </message>
- <message>
- <source>Gujarati</source>
- <translation>Gujarati</translation>
- </message>
- <message>
- <source>Oriya</source>
- <translation>Oriya</translation>
- </message>
- <message>
- <source>Tamil</source>
- <translation>坦米爾</translation>
- </message>
- <message>
- <source>Telugu</source>
- <translation>Telugu</translation>
- </message>
- <message>
- <source>Kannada</source>
- <translation>坎達那</translation>
- </message>
- <message>
- <source>Malayalam</source>
- <translation>馬來語</translation>
- </message>
- <message>
- <source>Sinhala</source>
- <translation>錫蘭</translation>
- </message>
- <message>
- <source>Thai</source>
- <translation>泰語</translation>
- </message>
- <message>
- <source>Lao</source>
- <translation>寮國</translation>
- </message>
- <message>
- <source>Tibetan</source>
- <translation>西藏</translation>
- </message>
- <message>
- <source>Myanmar</source>
- <translation>緬甸</translation>
- </message>
- <message>
- <source>Georgian</source>
- <translation>喬治亞</translation>
- </message>
- <message>
- <source>Khmer</source>
- <translation>高棉</translation>
- </message>
- <message>
- <source>Simplified Chinese</source>
- <translation>簡體中文</translation>
- </message>
- <message>
- <source>Traditional Chinese</source>
- <translation>繁體中文</translation>
- </message>
- <message>
- <source>Japanese</source>
- <translation>日語</translation>
- </message>
- <message>
- <source>Korean</source>
- <translation>韓語</translation>
- </message>
- <message>
- <source>Vietnamese</source>
- <translation>越南</translation>
- </message>
- <message>
- <source>Symbol</source>
- <translation>符號</translation>
- </message>
- <message>
- <source>Ogham</source>
- <translation>歐甘</translation>
- </message>
- <message>
- <source>Runic</source>
- <translation>盧恩</translation>
- </message>
- <message>
- <source>Normal</source>
- <comment>The Normal or Regular font weight</comment>
- <translation type="unfinished">正常</translation>
- </message>
- <message>
- <source>Medium</source>
- <comment>The Medium font weight</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Thin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Extra Light</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Extra Bold</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Extra</source>
- <extracomment>The word for "Extra" as in "Extra Bold, Extra Thin" used as a pattern for string searches</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>N'Ko</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QFontDialog</name>
- <message>
- <source>&Font</source>
- <translation>字型(&F)</translation>
- </message>
- <message>
- <source>Font st&yle</source>
- <translation>字型樣式(&Y)</translation>
- </message>
- <message>
- <source>&Size</source>
- <translation>大小(&S)</translation>
- </message>
- <message>
- <source>Effects</source>
- <translation>效果</translation>
- </message>
- <message>
- <source>Stri&keout</source>
- <translation>刪除線(&K)</translation>
- </message>
- <message>
- <source>&Underline</source>
- <translation>底線(&U)</translation>
- </message>
- <message>
- <source>Sample</source>
- <translation>範例</translation>
- </message>
- <message>
- <source>Wr&iting System</source>
- <translation>寫入系統(&I)</translation>
- </message>
- <message>
- <source>Select Font</source>
- <translation>選擇字型</translation>
- </message>
-</context>
-<context>
- <name>QFtp</name>
- <message>
- <source>Not connected</source>
- <translation>未連線</translation>
- </message>
- <message>
- <source>Host %1 not found</source>
- <translation>找不到主機 %1</translation>
- </message>
- <message>
- <source>Connection refused to host %1</source>
- <translation>連線到主機 %1 被拒</translation>
- </message>
- <message>
- <source>Connection timed out to host %1</source>
- <translation>連線到主機 %1 逾時</translation>
- </message>
- <message>
- <source>Connected to host %1</source>
- <translation>已連接到主機 %1</translation>
- </message>
- <message>
- <source>Connection refused for data connection</source>
- <translation type="vanished">資料連線被拒</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
- </message>
- <message>
- <source>Connecting to host failed:
-%1</source>
- <translation>連線到主機失敗:
-%1</translation>
- </message>
- <message>
- <source>Login failed:
-%1</source>
- <translation>登入失敗:
-%1</translation>
- </message>
- <message>
- <source>Listing directory failed:
-%1</source>
- <translation>列出目錄時失敗:
-%1</translation>
- </message>
- <message>
- <source>Changing directory failed:
-%1</source>
- <translation>變更目錄時失敗:
-%1</translation>
- </message>
- <message>
- <source>Downloading file failed:
-%1</source>
- <translation>下載檔案時失敗:
-%1</translation>
- </message>
- <message>
- <source>Uploading file failed:
-%1</source>
- <translation>上傳檔案時失敗:
-%1</translation>
- </message>
- <message>
- <source>Removing file failed:
-%1</source>
- <translation>移除檔案時失敗:
-%1</translation>
- </message>
- <message>
- <source>Creating directory failed:
-%1</source>
- <translation>建立目錄時失敗:
-%1</translation>
- </message>
- <message>
- <source>Removing directory failed:
-%1</source>
- <translation>移除目錄時失敗:
-%1</translation>
- </message>
- <message>
- <source>Connection closed</source>
- <translation>連線已關閉</translation>
- </message>
- <message>
- <source>Host %1 found</source>
- <translation type="vanished">找到主機 %1</translation>
- </message>
- <message>
- <source>Connection to %1 closed</source>
- <translation type="vanished">到 %1 的連線已關閉</translation>
- </message>
- <message>
- <source>Host found</source>
- <translation type="vanished">找到主機</translation>
- </message>
- <message>
- <source>Connected to host</source>
- <translation type="vanished">已連線到主機</translation>
- </message>
- <message>
- <source>Data Connection refused</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QGnomeTheme</name>
- <message>
- <source>&OK</source>
- <translation type="unfinished">確定(&O)</translation>
- </message>
- <message>
- <source>&Save</source>
- <translation type="unfinished">儲存(&S)</translation>
- </message>
- <message>
- <source>&Cancel</source>
- <translation type="unfinished">取消(&C)</translation>
- </message>
- <message>
- <source>&Close</source>
- <translation type="unfinished">關閉(&C)</translation>
- </message>
- <message>
- <source>Close without Saving</source>
- <translation type="unfinished">關閉而不儲存</translation>
- </message>
-</context>
-<context>
- <name>QGuiApplication</name>
- <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>LTR</translation>
- </message>
-</context>
-<context>
- <name>QHostInfo</name>
- <message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
- </message>
- <message>
- <source>No host name given</source>
- <translation type="unfinished">未指定主機</translation>
- </message>
-</context>
-<context>
- <name>QHostInfoAgent</name>
- <message>
- <source>Host not found</source>
- <translation>找不到主機</translation>
- </message>
- <message>
- <source>Unknown address type</source>
- <translation>未知的位址型態</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
- </message>
- <message>
- <source>No host name given</source>
- <translation type="unfinished">未指定主機</translation>
- </message>
- <message>
- <source>Invalid hostname</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unknown error (%1)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QHttp</name>
- <message>
- <source>Unknown error</source>
- <translation type="vanished">未知的錯誤</translation>
- </message>
- <message>
- <source>Request aborted</source>
- <translation type="vanished">要求中止</translation>
- </message>
- <message>
- <source>No server set to connect to</source>
- <translation type="vanished">沒有設定要連線到哪個伺服器</translation>
- </message>
- <message>
- <source>Wrong content length</source>
- <translation type="vanished">錯誤的內容長度</translation>
- </message>
- <message>
- <source>Server closed connection unexpectedly</source>
- <translation type="vanished">伺服器無預警關閉連線</translation>
- </message>
- <message>
- <source>Error writing response to device</source>
- <translation type="vanished">寫入回應到裝置時發生錯誤</translation>
- </message>
- <message>
- <source>Connection refused</source>
- <translation>連線被拒</translation>
- </message>
- <message>
- <source>Host %1 not found</source>
- <translation>找不到主機 %1</translation>
- </message>
- <message>
- <source>HTTP request failed</source>
- <translation type="vanished">HTTP 要求失敗</translation>
- </message>
- <message>
- <source>Invalid HTTP response header</source>
- <translation type="vanished">不合法的 HTTP 回覆標頭</translation>
- </message>
- <message>
- <source>Invalid HTTP chunked body</source>
- <translation type="vanished">不合法的 HTTP 區塊主體</translation>
- </message>
- <message>
- <source>Host %1 found</source>
- <translation type="vanished">找到主機 %1</translation>
- </message>
- <message>
- <source>Connected to host %1</source>
- <translation type="vanished">已連接到主機 %1</translation>
- </message>
- <message>
- <source>Connection to %1 closed</source>
- <translation type="vanished">到 %1 的連線已關閉</translation>
- </message>
- <message>
- <source>Host found</source>
- <translation type="vanished">找到主機</translation>
- </message>
- <message>
- <source>Connected to host</source>
- <translation type="vanished">已連線到主機</translation>
- </message>
- <message>
- <source>Connection closed</source>
- <translation>連線已關閉</translation>
- </message>
- <message>
- <source>Proxy authentication required</source>
- <translation type="vanished">代理伺服器需要認證</translation>
- </message>
- <message>
- <source>Authentication required</source>
- <translation type="vanished">需要認證</translation>
- </message>
- <message>
- <source>Connection refused (or timed out)</source>
- <translation type="vanished">連線被拒(或連線逾時)</translation>
- </message>
- <message>
- <source>Proxy requires authentication</source>
- <translation>代理伺服器需要認證</translation>
- </message>
- <message>
- <source>Host requires authentication</source>
- <translation>主機需要認證</translation>
- </message>
- <message>
- <source>Data corrupted</source>
- <translation>資料已損毀</translation>
- </message>
- <message>
- <source>Unknown protocol specified</source>
- <translation>指定了未知的協定</translation>
- </message>
- <message>
- <source>SSL handshake failed</source>
- <translation>SSL 溝通失敗</translation>
- </message>
- <message>
- <source>HTTPS connection requested but SSL support not compiled in</source>
- <translation type="vanished">HTTPS 連線需要的 SSL 支援並未編譯進來</translation>
- </message>
- <message>
- <source>Too many redirects</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Insecure redirect</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QHttpSocketEngine</name>
- <message>
- <source>Authentication required</source>
- <translation>需要認證</translation>
- </message>
- <message>
- <source>Did not receive HTTP response from proxy</source>
- <translation>未從代理伺服器接收到 HTTP 回應</translation>
- </message>
- <message>
- <source>Error parsing authentication request from proxy</source>
- <translation>剖析從代理伺服器傳來的認證要求時發生錯誤</translation>
- </message>
- <message>
- <source>Proxy denied connection</source>
- <translation>代理伺服器拒絕連線</translation>
- </message>
- <message>
- <source>Error communicating with HTTP proxy</source>
- <translation>與 HTTP 代理伺服器聯繫時發生錯誤</translation>
- </message>
- <message>
- <source>Proxy server not found</source>
- <translation>找不到代理伺服器</translation>
- </message>
- <message>
- <source>Proxy connection refused</source>
- <translation>代理伺服器連線被拒</translation>
- </message>
- <message>
- <source>Proxy server connection timed out</source>
- <translation>代理伺服器連線逾時</translation>
- </message>
- <message>
- <source>Proxy connection closed prematurely</source>
- <translation>代理伺服器連線已不正常關閉</translation>
- </message>
-</context>
-<context>
- <name>QIBaseDriver</name>
- <message>
- <source>Error opening database</source>
- <translation>開啟資料庫發生錯誤</translation>
- </message>
- <message>
- <source>Could not start transaction</source>
- <translation>無法開始事務</translation>
- </message>
- <message>
- <source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
- </message>
- <message>
- <source>Unable to rollback transaction</source>
- <translation>無法反轉事務</translation>
- </message>
-</context>
-<context>
- <name>QIBaseResult</name>
- <message>
- <source>Unable to create BLOB</source>
- <translation>無法建立 BLOB</translation>
- </message>
- <message>
- <source>Unable to write BLOB</source>
- <translation>無法寫入 BLOB</translation>
- </message>
- <message>
- <source>Unable to open BLOB</source>
- <translation>無法開啟 BLOB</translation>
- </message>
- <message>
- <source>Unable to read BLOB</source>
- <translation>無法讀取 BLOB</translation>
- </message>
- <message>
- <source>Could not find array</source>
- <translation>找不到陣列</translation>
- </message>
- <message>
- <source>Could not get array data</source>
- <translation>無法取得陣列資料</translation>
- </message>
- <message>
- <source>Could not get query info</source>
- <translation>無法取得查詢資訊</translation>
- </message>
- <message>
- <source>Could not start transaction</source>
- <translation>無法開始事務</translation>
- </message>
- <message>
- <source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
- </message>
- <message>
- <source>Could not allocate statement</source>
- <translation>無法配置敘述</translation>
- </message>
- <message>
- <source>Could not prepare statement</source>
- <translation>無法準備敘述</translation>
- </message>
- <message>
- <source>Could not describe input statement</source>
- <translation>無法描述輸入敘述</translation>
- </message>
- <message>
- <source>Could not describe statement</source>
- <translation>無法描述敘述</translation>
- </message>
- <message>
- <source>Unable to close statement</source>
- <translation>無法關閉敘述</translation>
- </message>
- <message>
- <source>Unable to execute query</source>
- <translation>無法執行查詢</translation>
- </message>
- <message>
- <source>Could not fetch next item</source>
- <translation>無法抓取下一個項目</translation>
- </message>
- <message>
- <source>Could not get statement info</source>
- <translation>無法取得敘述資訊</translation>
- </message>
-</context>
-<context>
- <name>QIODevice</name>
- <message>
- <source>Permission denied</source>
- <translation>權限不足</translation>
- </message>
- <message>
- <source>Too many open files</source>
- <translation>開啟過多檔案</translation>
- </message>
- <message>
- <source>No such file or directory</source>
- <translation>找不到該檔案或目錄</translation>
- </message>
- <message>
- <source>No space left on device</source>
- <translation>裝置上已無空間</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
- </message>
- <message>
- <source>file to open is a directory</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QImageReader</name>
- <message>
- <source>Invalid device</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>File not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unsupported image format</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unable to read image data</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished">未知的錯誤</translation>
- </message>
-</context>
-<context>
- <name>QImageWriter</name>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished">未知的錯誤</translation>
- </message>
- <message>
- <source>Device is not set</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Device not writable</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unsupported image format</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QInputContext</name>
- <message>
- <source>XIM</source>
- <translation type="vanished">XIM</translation>
- </message>
- <message>
- <source>XIM input method</source>
- <translation type="vanished">XIM 輸入法</translation>
- </message>
- <message>
- <source>Windows input method</source>
- <translation type="vanished">Windows 輸入法</translation>
- </message>
- <message>
- <source>Mac OS X input method</source>
- <translation type="vanished">Mac OS X 輸入法</translation>
- </message>
-</context>
-<context>
- <name>QInputDialog</name>
- <message>
- <source>Enter a value:</source>
- <translation>請輸入值:</translation>
- </message>
-</context>
-<context>
- <name>QJsonParseError</name>
- <message>
- <source>no error occurred</source>
- <translation type="unfinished">沒有發生錯誤</translation>
- </message>
- <message>
- <source>unterminated object</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>missing name separator</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>unterminated array</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>missing value separator</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>illegal value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>invalid termination by number</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>illegal number</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>invalid escape sequence</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>invalid UTF8 string</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>unterminated string</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>object is missing after a comma</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>too deeply nested document</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>too large document</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>garbage at the end of the document</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QKeySequenceEdit</name>
- <message>
- <source>Press shortcut</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1, ...</source>
- <extracomment>This text is an "unfinished" shortcut, expands like "Ctrl+A, ..."</extracomment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QLibrary</name>
- <message>
- <source>QLibrary::load_sys: Cannot load %1 (%2)</source>
- <translation type="obsolete">QLibrary::load_sys: 無法載入 %1 (%2)</translation>
- </message>
- <message>
- <source>QLibrary::unload_sys: Cannot unload %1 (%2)</source>
- <translation type="obsolete">QLibrary::unload_sys: 無法卸載 %1 (%2)</translation>
- </message>
- <message>
- <source>QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3)</source>
- <translation type="obsolete">QLibrary::resolve_sys: 符號 "%1" 未定義於 %2 (%3)</translation>
- </message>
- <message>
- <source>Could not mmap '%1': %2</source>
- <translation type="vanished">無法 mmap '%1':%2</translation>
- </message>
- <message>
- <source>Plugin verification data mismatch in '%1'</source>
- <translation type="vanished">在 %1 中的外掛程式確認資料不符合</translation>
- </message>
- <message>
- <source>Could not unmap '%1': %2</source>
- <translation type="vanished">無法 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>
- </message>
- <message>
- <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source>
- <translation type="vanished">外掛程式 %1 使用不相容的 Qt 函式庫。預期建構鑰 %2,卻得到 %3</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
- </message>
- <message>
- <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>
- </message>
- <message>
- <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
- <translation>外掛程式 %1 使用不相容的 Qt 函式庫。(不能將除錯與釋出版的函式庫混在一起。)</translation>
- </message>
- <message>
- <source>Cannot load library %1: %2</source>
- <translation>無法載入函式庫 %1:%2</translation>
- </message>
- <message>
- <source>Cannot unload library %1: %2</source>
- <translation>無法卸載函式庫 %1:%2</translation>
- </message>
- <message>
- <source>Cannot resolve symbol "%1" in %2: %3</source>
- <translation>無法反解 %2 內的符號 %1:%3</translation>
- </message>
- <message>
- <source>'%1' is not an ELF object (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>'%1' is not an ELF object</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>'%1' is an invalid ELF object (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Failed to extract plugin meta data from '%1'</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>'%1' is not a valid Mach-O binary (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>file is corrupt</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>file too small</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>no suitable architecture in fat binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>invalid magic %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>wrong architecture</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>not a dynamic library</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>'%1' is not a Qt plugin</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QLineEdit</name>
- <message>
- <source>&Undo</source>
- <translation>復原(&U)</translation>
- </message>
- <message>
- <source>&Redo</source>
- <translation>重做(&R)</translation>
- </message>
- <message>
- <source>Cu&t</source>
- <translation>剪下(&T)</translation>
- </message>
- <message>
- <source>&Copy</source>
- <translation>複製(&C)</translation>
- </message>
- <message>
- <source>&Paste</source>
- <translation>貼上(&P)</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>刪除</translation>
- </message>
- <message>
- <source>Select All</source>
- <translation>全部選擇</translation>
- </message>
-</context>
-<context>
- <name>QLocalServer</name>
- <message>
- <source>%1: Name error</source>
- <translation>%1:名稱錯誤</translation>
- </message>
- <message>
- <source>%1: Permission denied</source>
- <translation>%1:存取被拒</translation>
- </message>
- <message>
- <source>%1: Address in use</source>
- <translation>%1:位址使用中</translation>
- </message>
- <message>
- <source>%1: Unknown error %2</source>
- <translation>%1:未知的錯誤 %2</translation>
- </message>
-</context>
-<context>
- <name>QLocalSocket</name>
- <message>
- <source>%1: Connection refused</source>
- <translation>%1:連線被拒</translation>
- </message>
- <message>
- <source>%1: Remote closed</source>
- <translation>%1:遠端已關閉</translation>
- </message>
- <message>
- <source>%1: Invalid name</source>
- <translation>%1:不合法的名稱</translation>
- </message>
- <message>
- <source>%1: Socket access error</source>
- <translation>%1:Socket 位址錯誤</translation>
- </message>
- <message>
- <source>%1: Socket resource error</source>
- <translation>%1:Socket 資源錯誤</translation>
- </message>
- <message>
- <source>%1: Socket operation timed out</source>
- <translation>%1:Socket 操作逾時</translation>
- </message>
- <message>
- <source>%1: Datagram too large</source>
- <translation>%1:資料包過大</translation>
- </message>
- <message>
- <source>%1: Connection error</source>
- <translation>%1:連線錯誤</translation>
- </message>
- <message>
- <source>%1: The socket operation is not supported</source>
- <translation>%1:socket 操作未支援</translation>
- </message>
- <message>
- <source>%1: Unknown error</source>
- <translation>%1:未知的錯誤</translation>
- </message>
- <message>
- <source>%1: Unknown error %2</source>
- <translation>%1:未知的錯誤 %2</translation>
- </message>
- <message>
- <source>%1: Operation not permitted when socket is in this state</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Trying to connect while connection is in progress</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1: Access denied</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QMYSQLDriver</name>
- <message>
- <source>Unable to open database '</source>
- <translation type="vanished">無法開啟資料庫</translation>
- </message>
- <message>
- <source>Unable to connect</source>
- <translation>無法連線</translation>
- </message>
- <message>
- <source>Unable to begin transaction</source>
- <translation>無法開始事務</translation>
- </message>
- <message>
- <source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
- </message>
- <message>
- <source>Unable to rollback transaction</source>
- <translation>無法反轉事務</translation>
- </message>
- <message>
- <source>Unable to allocate a MYSQL object</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unable to open database '%1'</source>
- <translation type="unfinished"></translation>
- </message>
-</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>
- </message>
- <message>
- <source>Unable to reset statement</source>
- <translation>無法重置敘述</translation>
- </message>
- <message>
- <source>Unable to bind value</source>
- <translation>無法結合數值</translation>
- </message>
- <message>
- <source>Unable to execute statement</source>
- <translation>無法執行敘述</translation>
- </message>
- <message>
- <source>Unable to bind outvalues</source>
- <translation>無法結合輸出值</translation>
- </message>
- <message>
- <source>Unable to store statement results</source>
- <translation>無法儲存敘述結果</translation>
- </message>
- <message>
- <source>Unable to execute next query</source>
- <translation>無法執行下一個查詢</translation>
- </message>
- <message>
- <source>Unable to store next result</source>
- <translation>無法儲存下一個結果</translation>
- </message>
-</context>
-<context>
- <name>QMdiArea</name>
- <message>
- <source>(Untitled)</source>
- <translation>(未命名)</translation>
- </message>
-</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>
- </message>
- <message>
- <source>&Restore</source>
- <translation>回復(&R)</translation>
- </message>
- <message>
- <source>&Move</source>
- <translation>移動(&M)</translation>
- </message>
- <message>
- <source>&Size</source>
- <translation>大小(&S)</translation>
- </message>
- <message>
- <source>Mi&nimize</source>
- <translation>最小化(&N)</translation>
- </message>
- <message>
- <source>Ma&ximize</source>
- <translation>最大化(&X)</translation>
- </message>
- <message>
- <source>Stay on &Top</source>
- <translation>留在頂端(&T)</translation>
- </message>
- <message>
- <source>&Close</source>
- <translation>關閉(&C)</translation>
- </message>
- <message>
- <source>- [%1]</source>
- <translation>- [%1]</translation>
- </message>
- <message>
- <source>Maximize</source>
- <translation>最大化</translation>
- </message>
- <message>
- <source>Unshade</source>
- <translation>取消遮蔽</translation>
- </message>
- <message>
- <source>Shade</source>
- <translation>遮蔽</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation>回復</translation>
- </message>
- <message>
- <source>Help</source>
- <translation>說明</translation>
- </message>
- <message>
- <source>Menu</source>
- <translation>選單</translation>
- </message>
-</context>
-<context>
- <name>QMenu</name>
- <message>
- <source>Close</source>
- <translation type="vanished">關閉</translation>
- </message>
- <message>
- <source>Open</source>
- <translation type="vanished">開啟</translation>
- </message>
- <message>
- <source>Execute</source>
- <translation type="vanished">執行</translation>
- </message>
-</context>
-<context>
- <name>QMenuBar</name>
- <message>
- <source>About</source>
- <translation type="obsolete">關於</translation>
- </message>
- <message>
- <source>Config</source>
- <translation type="obsolete">設定</translation>
- </message>
- <message>
- <source>Preference</source>
- <translation type="obsolete">喜好設定</translation>
- </message>
- <message>
- <source>Options</source>
- <translation type="obsolete">選項</translation>
- </message>
- <message>
- <source>Setting</source>
- <translation type="obsolete">設定</translation>
- </message>
- <message>
- <source>Setup</source>
- <translation type="obsolete">設定</translation>
- </message>
- <message>
- <source>Quit</source>
- <translation type="obsolete">離開</translation>
- </message>
- <message>
- <source>Exit</source>
- <translation type="obsolete">離開</translation>
- </message>
- <message>
- <source>About %1</source>
- <translation type="obsolete">關於 %1</translation>
- </message>
- <message>
- <source>About Qt</source>
- <translation type="obsolete">關於 Qt</translation>
- </message>
- <message>
- <source>Preferences</source>
- <translation type="obsolete">喜好設定</translation>
- </message>
- <message>
- <source>Quit %1</source>
- <translation type="obsolete">離開 %1</translation>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Help</source>
- <translation>說明</translation>
- </message>
- <message>
- <source>OK</source>
- <translation>確定</translation>
- </message>
- <message>
- <source>About Qt</source>
- <translation>關於 Qt</translation>
- </message>
- <message>
- <source><p>This program uses Qt version %1.</p></source>
- <translation type="obsolete"><p> 這個程式使用 Qt 版本 %1</p></translation>
- </message>
- <message>
- <source>Show Details...</source>
- <translation>顯示詳情...</translation>
- </message>
- <message>
- <source>Hide Details...</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 type="vanished"><p>這個程式使用 Qt Open Source Edition 版本 %1 。</p><p>Qt Open Source Edition 是供開發的開放原始程式碼應用程式。 開發專有的 (封閉原始碼) 應用程式您需要商業 Qt 授權。</p><p>有關 Qt 授權的概述請參閱 <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> 。</p></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 Windows, Mac OS 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/&l [...]
- <translation type="vanished"><h3>關於 Qt</h3>%1<p>Qt 是 C++ 工具集作為跨平台的應用程式開發。</p><p>Qt 提供單一來源可攜性,橫跨 MS Windows, Mac OS X, Linux, 和所有各種商業 Unix 變種。 以嵌入式 Linux 的 Qt 與 Windows CE 的 Qt , Qt 也可用於可攜式裝置。</p><p>Qt 是 Nokia 的產品。 更多資訊請參閱 <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> 。</p></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 Windows, Mac OS 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://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source>
- <translation type="obsolete"><h3>關於 Qt</h3>%1<p>Qt 為一個跨平台的 C++ 開發工具。</p><p>Qt 提供各平台相容機制,只要寫一份程式碼,就可以在 MS Windows、Mac OS X、Linux 與各主要的商業 Unix 平台上編譯。Qt 也可以用 Qtopia Core 用於嵌入式系統。</p><p>Qt 為 Trolltech 的產品。詳情請參考 <a href="http://qt.nokia.com/">qt.nokia.com</a>。</p></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 Windows, Mac OS 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://qt.nokia.com/">qt.nokia.com</a> for more [...]
- <translation type="obsolete"><h3>關於 Qt</h3>%1<p>Qt 為一個跨平台的 C++ 開發工具。</p><p>Qt 提供各平台相容機制,只要寫一份程式碼,就可以在 MS Windows、Mac OS X、Linux 與各主要的商業 Unix 平台上編譯。Qt 也有用於嵌入式 Linux 與 Windows CE 的版本。</p><p>Qt 為 Nokia 的產品。詳情請參考 <a href="http://qt.nokia.com/">qt.nokia.com</a>。</p></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://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p></source>
- <translation type="obsolete"><p>這個程式使用了 Qt 開放源碼版本 %1。</p><p>Qt 開放源碼版本是專門為了開發開放源碼應用程式使用的版本。若是您要開發專利私有(封閉)軟體,您需要 Qt 的商業授權。</p><p>Qt 的授權概要請參考 <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a>。</p></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 Windows, Mac OS X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt Embedded.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source>
- <translation type="obsolete"><h3>關於 Qt</h3>%1<p>Qt 為一個跨平台的 C++ 開發工具。</p><p>Qt 提供各平台相容機制,只要寫一份程式碼,就可以在 MS Windows、Mac OS X、Linux 與各主要的商業 Unix 平台上編譯。Qt 也可以用 Qtopia Core 用於嵌入式系統。</p><p>Qt 為 Trolltech 的產品。詳情請參考 <a href="http://qt.nokia.com/">qt.nokia.com</a>。</p></translation>
- </message>
- <message>
- <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across all major desktop operating systems. It is also available for embedded Linux and other embedded and mobile operating systems.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate [...]
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QMultiInputContext</name>
- <message>
- <source>Select IM</source>
- <translation type="vanished">選擇輸入法</translation>
- </message>
-</context>
-<context>
- <name>QMultiInputContextPlugin</name>
- <message>
- <source>Multiple input method switcher</source>
- <translation type="vanished">多重輸入法切換器</translation>
- </message>
- <message>
- <source>Multiple input method switcher that uses the context menu of the text widgets</source>
- <translation type="vanished">使用文字元件中的內文選單的多重輸入法切換器</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>
- </message>
- <message>
- <source>Out of resources</source>
- <translation>資源不足</translation>
- </message>
- <message>
- <source>Unsupported socket operation</source>
- <translation>未支援的 socket 操作</translation>
- </message>
- <message>
- <source>Protocol type not supported</source>
- <translation>協定型態未支援</translation>
- </message>
- <message>
- <source>Invalid socket descriptor</source>
- <translation>不合法的 socket 描述子</translation>
- </message>
- <message>
- <source>Network unreachable</source>
- <translation>無法使用網路</translation>
- </message>
- <message>
- <source>Permission denied</source>
- <translation>權限不足</translation>
- </message>
- <message>
- <source>Connection timed out</source>
- <translation>連線逾時</translation>
- </message>
- <message>
- <source>Connection refused</source>
- <translation>連線被拒</translation>
- </message>
- <message>
- <source>The bound address is already in use</source>
- <translation>結合的位址已經在使用中</translation>
- </message>
- <message>
- <source>The address is not available</source>
- <translation>無法取得位址</translation>
- </message>
- <message>
- <source>The address is protected</source>
- <translation>此位址已被保護</translation>
- </message>
- <message>
- <source>Unable to send a message</source>
- <translation>無法送出訊息</translation>
- </message>
- <message>
- <source>Unable to receive a message</source>
- <translation>無法接收訊息</translation>
- </message>
- <message>
- <source>Unable to write</source>
- <translation>無法寫入</translation>
- </message>
- <message>
- <source>Network error</source>
- <translation>網路錯誤</translation>
- </message>
- <message>
- <source>Another socket is already listening on the same port</source>
- <translation>另一個 socket 已經在監聽同一個連接埠</translation>
- </message>
- <message>
- <source>Unable to initialize non-blocking socket</source>
- <translation>無法初始化非阻擋性 socket</translation>
- </message>
- <message>
- <source>Unable to initialize broadcast socket</source>
- <translation>無法初始化廣播 socket</translation>
- </message>
- <message>
- <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
- <translation>試圖在沒有 IPv6 支援的平台上使用 IPv6 socket</translation>
- </message>
- <message>
- <source>Host unreachable</source>
- <translation>無法連線到主機</translation>
- </message>
- <message>
- <source>Datagram was too large to send</source>
- <translation>資料過大無法送出</translation>
- </message>
- <message>
- <source>Operation on non-socket</source>
- <translation>對非 socket 操作</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
- </message>
- <message>
- <source>The proxy type is invalid for this operation</source>
- <translation>代理伺服器型態無法支援此操作</translation>
- </message>
- <message>
- <source>Temporary error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Network dropped connection on reset</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Connection reset by peer</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QNetworkAccessCacheBackend</name>
- <message>
- <source>Error opening %1</source>
- <translation>開啟 %1 發生錯誤</translation>
- </message>
-</context>
-<context>
- <name>QNetworkAccessDataBackend</name>
- <message>
- <source>Invalid URI: %1</source>
- <translation type="unfinished">不合法的網址:%1</translation>
- </message>
-</context>
-<context>
- <name>QNetworkAccessDebugPipeBackend</name>
- <message>
- <source>Write error writing to %1: %2</source>
- <translation type="unfinished">寫入 %1 時發生錯誤:%2</translation>
- </message>
- <message>
- <source>Socket error on %1: %2</source>
- <translation type="unfinished">%1 上發生 socket 錯誤:%2</translation>
- </message>
- <message>
- <source>Remote host closed the connection prematurely on %1</source>
- <translation type="unfinished">於 %1 上遠端主機關閉了不正常的連線</translation>
- </message>
-</context>
-<context>
- <name>QNetworkAccessFileBackend</name>
- <message>
- <source>Request for opening non-local file %1</source>
- <translation>要求開啟非本地端檔案 %1</translation>
- </message>
- <message>
- <source>Error opening %1: %2</source>
- <translation>開啟 %1 發生錯誤:%2</translation>
- </message>
- <message>
- <source>Write error writing to %1: %2</source>
- <translation>寫入 %1 時發生錯誤:%2</translation>
- </message>
- <message>
- <source>Cannot open %1: Path is a directory</source>
- <translation>無法開啟 %1:此路徑是一個目錄</translation>
- </message>
- <message>
- <source>Read error reading from %1: %2</source>
- <translation>從 %1 讀取錯誤:%2</translation>
- </message>
-</context>
-<context>
- <name>QNetworkAccessFtpBackend</name>
- <message>
- <source>Cannot open %1: is a directory</source>
- <translation>無法開啟 %1:是一個目錄</translation>
- </message>
- <message>
- <source>Logging in to %1 failed: authentication required</source>
- <translation>登入 %1 失敗:需要認證</translation>
- </message>
- <message>
- <source>Error while downloading %1: %2</source>
- <translation>下載 %1 時發生錯誤:%2</translation>
- </message>
- <message>
- <source>Error while uploading %1: %2</source>
- <translation>上傳 %1 時發生錯誤:%2</translation>
- </message>
- <message>
- <source>No suitable proxy found</source>
- <translation>找不到合適的代理伺服器</translation>
- </message>
-</context>
-<context>
- <name>QNetworkAccessHttpBackend</name>
- <message>
- <source>No suitable proxy found</source>
- <translation type="vanished">找不到合適的代理伺服器</translation>
- </message>
-</context>
-<context>
- <name>QNetworkAccessManager</name>
- <message>
- <source>Network access is disabled.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QNetworkReply</name>
- <message>
- <source>Error downloading %1 - server replied: %2</source>
- <translation type="vanished">下載 %1 時發生錯誤─伺服器回應:%2</translation>
- </message>
- <message>
- <source>Protocol "%1" is unknown</source>
- <translation>未知的協定 %1</translation>
- </message>
- <message>
- <source>Error transferring %1 - server replied: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Background request not allowed.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Network session error.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>backend start error.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Temporary network failure.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QNetworkReplyHttpImpl</name>
- <message>
- <source>Operation canceled</source>
- <translation type="unfinished">取消操作</translation>
- </message>
- <message>
- <source>No suitable proxy found</source>
- <translation type="unfinished">找不到合適的代理伺服器</translation>
- </message>
-</context>
-<context>
- <name>QNetworkReplyImpl</name>
- <message>
- <source>Operation canceled</source>
- <translation>取消操作</translation>
- </message>
-</context>
-<context>
- <name>QNetworkSession</name>
- <message>
- <source>Invalid configuration.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QNetworkSessionPrivateImpl</name>
- <message>
- <source>Unknown session error.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The session was aborted by the user or system.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The requested operation is not supported by the system.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The specified configuration cannot be used.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Roaming was aborted or is not possible.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QOCIDriver</name>
- <message>
- <source>Unable to logon</source>
- <translation>無法登入</translation>
- </message>
- <message>
- <source>Unable to initialize</source>
- <comment>QOCIDriver</comment>
- <translation>無法初始化</translation>
- </message>
- <message>
- <source>Unable to begin transaction</source>
- <translation>無法開始事務</translation>
- </message>
- <message>
- <source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
- </message>
- <message>
- <source>Unable to rollback transaction</source>
- <translation>無法反轉事務</translation>
- </message>
-</context>
-<context>
- <name>QOCIResult</name>
- <message>
- <source>Unable to bind column for batch execute</source>
- <translation>無法結合欄位以做批次執行</translation>
- </message>
- <message>
- <source>Unable to execute batch statement</source>
- <translation>無法執行批次敘述</translation>
- </message>
- <message>
- <source>Unable to goto next</source>
- <translation>無法跳到下一個</translation>
- </message>
- <message>
- <source>Unable to alloc statement</source>
- <translation>無法配置敘述</translation>
- </message>
- <message>
- <source>Unable to prepare statement</source>
- <translation>無法準備敘述</translation>
- </message>
- <message>
- <source>Unable to bind value</source>
- <translation>無法結合數值</translation>
- </message>
- <message>
- <source>Unable to execute select statement</source>
- <translation type="obsolete">無法執行選取的敘述</translation>
- </message>
- <message>
- <source>Unable to execute statement</source>
- <translation>無法執行敘述</translation>
- </message>
- <message>
- <source>Unable to get statement type</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QODBCDriver</name>
- <message>
- <source>Unable to connect</source>
- <translation>無法連接</translation>
- </message>
- <message>
- <source>Unable to connect - Driver doesn't support all needed functionality</source>
- <translation type="vanished">無法連接─驅動程式無法支援所有需要的功能</translation>
- </message>
- <message>
- <source>Unable to disable autocommit</source>
- <translation>無法關閉自動提交功能</translation>
- </message>
- <message>
- <source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
- </message>
- <message>
- <source>Unable to rollback transaction</source>
- <translation>無法反轉事務</translation>
- </message>
- <message>
- <source>Unable to enable autocommit</source>
- <translation>無法開啟自動提交功能</translation>
- </message>
- <message>
- <source>Unable to connect - Driver doesn't support all functionality required</source>
- <translation type="unfinished"></translation>
- </message>
-</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: 無法設定 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>
- </message>
- <message>
- <source>Unable to fetch last</source>
- <translation>無法抓取最後一筆</translation>
- </message>
- <message>
- <source>Unable to fetch</source>
- <translation>無法抓取</translation>
- </message>
- <message>
- <source>Unable to fetch first</source>
- <translation>無法抓取第一筆</translation>
- </message>
- <message>
- <source>Unable to fetch previous</source>
- <translation>無法抓取前一筆</translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Operation not supported on %1</source>
- <translation type="vanished">在 %1 上不支援此操作</translation>
- </message>
- <message>
- <source>Invalid URI: %1</source>
- <translation type="vanished">不合法的網址:%1</translation>
- </message>
- <message>
- <source>Write error writing to %1: %2</source>
- <translation type="vanished">寫入 %1 時發生錯誤:%2</translation>
- </message>
- <message>
- <source>Read error reading from %1: %2</source>
- <translation type="vanished">從 %1 讀取錯誤:%2</translation>
- </message>
- <message>
- <source>Socket error on %1: %2</source>
- <translation type="vanished">%1 上發生 socket 錯誤:%2</translation>
- </message>
- <message>
- <source>Remote host closed the connection prematurely on %1</source>
- <translation type="vanished">於 %1 上遠端主機關閉了不正常的連線</translation>
- </message>
- <message>
- <source>Protocol error: packet of size 0 received</source>
- <translation type="vanished">協定錯誤:接收到大小為 0 的封包</translation>
- </message>
- <message>
- <source>Home</source>
- <translation type="vanished">首頁</translation>
- </message>
- <message>
- <source>No host name given</source>
- <translation type="vanished">未指定主機</translation>
- </message>
-</context>
-<context>
- <name>QPPDOptionsModel</name>
- <message>
- <source>Name</source>
- <translation type="vanished">名稱</translation>
- </message>
- <message>
- <source>Value</source>
- <translation type="vanished">值</translation>
- </message>
-</context>
-<context>
- <name>QPSQLDriver</name>
- <message>
- <source>Unable to connect</source>
- <translation>無法連線</translation>
- </message>
- <message>
- <source>Could not begin transaction</source>
- <translation>無法開始事務</translation>
- </message>
- <message>
- <source>Could not commit transaction</source>
- <translation>無法提交事務</translation>
- </message>
- <message>
- <source>Could not rollback transaction</source>
- <translation>無法反轉事務</translation>
- </message>
- <message>
- <source>Unable to subscribe</source>
- <translation>無法訂閱</translation>
- </message>
- <message>
- <source>Unable to unsubscribe</source>
- <translation>無法取消訂閱</translation>
- </message>
-</context>
-<context>
- <name>QPSQLResult</name>
- <message>
- <source>Unable to create query</source>
- <translation>無法建立查詢</translation>
- </message>
- <message>
- <source>Unable to prepare statement</source>
- <translation>無法準備敘述</translation>
- </message>
-</context>
-<context>
- <name>QPageSetupWidget</name>
- <message>
- <source>Centimeters (cm)</source>
- <translation type="vanished">公分</translation>
- </message>
- <message>
- <source>Millimeters (mm)</source>
- <translation>公厘</translation>
- </message>
- <message>
- <source>Inches (in)</source>
- <translation>英吋</translation>
- </message>
- <message>
- <source>Points (pt)</source>
- <translation>點</translation>
- </message>
- <message>
- <source>Form</source>
- <translation>表單</translation>
- </message>
- <message>
- <source>Paper</source>
- <translation>紙張</translation>
- </message>
- <message>
- <source>Page size:</source>
- <translation>紙張大小:</translation>
- </message>
- <message>
- <source>Width:</source>
- <translation>寬度:</translation>
- </message>
- <message>
- <source>Height:</source>
- <translation>高度:</translation>
- </message>
- <message>
- <source>Paper source:</source>
- <translation>紙張來源:</translation>
- </message>
- <message>
- <source>Orientation</source>
- <translation>方向</translation>
- </message>
- <message>
- <source>Portrait</source>
- <translation>縱向</translation>
- </message>
- <message>
- <source>Landscape</source>
- <translation>橫向</translation>
- </message>
- <message>
- <source>Reverse landscape</source>
- <translation>反序橫向</translation>
- </message>
- <message>
- <source>Reverse portrait</source>
- <translation>反序縱向</translation>
- </message>
- <message>
- <source>Margins</source>
- <translation>邊緣</translation>
+ <source>My Computer</source>
+ <translation>我的電腦</translation>
</message>
<message>
- <source>top margin</source>
- <translation>上緣</translation>
- </message>
- <message>
- <source>left margin</source>
- <translation>左緣</translation>
- </message>
- <message>
- <source>right margin</source>
- <translation>右緣</translation>
- </message>
- <message>
- <source>bottom margin</source>
- <translation>下緣</translation>
- </message>
- <message>
- <source>Page Layout</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Page order:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Pages per sheet:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Pica (P̸)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Didot (DD)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Cicero (CC)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Custom</source>
- <translation type="unfinished">自訂</translation>
- </message>
- <message>
- <source>mm</source>
- <extracomment>Unit 'Millimeter'</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>pt</source>
- <extracomment>Unit 'Points'</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>in</source>
- <extracomment>Unit 'Inch'</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>P̸</source>
- <extracomment>Unit 'Pica'</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>DD</source>
- <extracomment>Unit 'Didot'</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>CC</source>
- <extracomment>Unit 'Cicero'</extracomment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QPageSize</name>
- <message>
- <source>Custom (%1mm x %2mm)</source>
- <extracomment>Custom size name in millimeters</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Custom (%1pt x %2pt)</source>
- <extracomment>Custom size name in points</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Custom (%1in x %2in)</source>
- <extracomment>Custom size name in inches</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Custom (%1pc x %2pc)</source>
- <extracomment>Custom size name in picas</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Custom (%1DD x %2DD)</source>
- <extracomment>Custom size name in didots</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Custom (%1CC x %2CC)</source>
- <extracomment>Custom size name in ciceros</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 x %2 in</source>
- <extracomment>Page size in 'Inch'.</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>A0</source>
- <translation type="unfinished">A0</translation>
- </message>
- <message>
- <source>A1</source>
- <translation type="unfinished">A1</translation>
- </message>
- <message>
- <source>A2</source>
- <translation type="unfinished">A2</translation>
- </message>
- <message>
- <source>A3</source>
- <translation type="unfinished">A3</translation>
- </message>
- <message>
- <source>A4</source>
- <translation type="unfinished">A4</translation>
- </message>
- <message>
- <source>A5</source>
- <translation type="unfinished">A5</translation>
- </message>
- <message>
- <source>A6</source>
- <translation type="unfinished">A6</translation>
- </message>
- <message>
- <source>A7</source>
- <translation type="unfinished">A7</translation>
- </message>
- <message>
- <source>A8</source>
- <translation type="unfinished">A8</translation>
- </message>
- <message>
- <source>A9</source>
- <translation type="unfinished">A9</translation>
- </message>
- <message>
- <source>A10</source>
- <translation type="unfinished">A10</translation>
- </message>
- <message>
- <source>B0</source>
- <translation type="unfinished">B0</translation>
- </message>
- <message>
- <source>B1</source>
- <translation type="unfinished">B1</translation>
- </message>
- <message>
- <source>B2</source>
- <translation type="unfinished">B2</translation>
- </message>
- <message>
- <source>B3</source>
- <translation type="unfinished">B3</translation>
- </message>
- <message>
- <source>B4</source>
- <translation type="unfinished">B4</translation>
- </message>
- <message>
- <source>B5</source>
- <translation type="unfinished">B5</translation>
- </message>
- <message>
- <source>B6</source>
- <translation type="unfinished">B6</translation>
- </message>
- <message>
- <source>B7</source>
- <translation type="unfinished">B7</translation>
- </message>
- <message>
- <source>B8</source>
- <translation type="unfinished">B8</translation>
- </message>
- <message>
- <source>B9</source>
- <translation type="unfinished">B9</translation>
- </message>
- <message>
- <source>B10</source>
- <translation type="unfinished">B10</translation>
- </message>
- <message>
- <source>Executive (7.5 x 10 in)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Executive (7.25 x 10.5 in)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Folio (8.27 x 13 in)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Legal</source>
- <translation type="unfinished">Legal</translation>
- </message>
- <message>
- <source>Letter / ANSI A</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tabloid / ANSI B</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Ledger / ANSI B</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Custom</source>
- <translation type="unfinished">自訂</translation>
- </message>
- <message>
- <source>A3 Extra</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>A4 Extra</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>A4 Plus</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>A4 Small</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>A5 Extra</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>B5 Extra</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>JIS B0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>JIS B1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>JIS B2</source>
- <translation type="unfinished"></translation>
+ <source>&Rename</source>
+ <translation>重新命名(&R)</translation>
</message>
<message>
- <source>JIS B3</source>
- <translation type="unfinished"></translation>
+ <source>&Delete</source>
+ <translation>刪除(&D)</translation>
</message>
<message>
- <source>JIS B4</source>
- <translation type="unfinished"></translation>
+ <source>Show &hidden files</source>
+ <translation>顯示隱藏檔(&H)</translation>
</message>
<message>
- <source>JIS B5</source>
- <translation type="unfinished"></translation>
+ <source>Back</source>
+ <translation>上一步</translation>
</message>
<message>
- <source>JIS B6</source>
- <translation type="unfinished"></translation>
+ <source>Parent Directory</source>
+ <translation>父層目錄</translation>
</message>
- <message>
- <source>JIS B7</source>
- <translation type="unfinished"></translation>
+ <message>
+ <source>List View</source>
+ <translation>清單檢視</translation>
</message>
<message>
- <source>JIS B8</source>
- <translation type="unfinished"></translation>
+ <source>Detail View</source>
+ <translation>詳細檢視</translation>
</message>
<message>
- <source>JIS B9</source>
- <translation type="unfinished"></translation>
+ <source>Files of type:</source>
+ <translation>檔案類型:</translation>
</message>
<message>
- <source>JIS B10</source>
- <translation type="unfinished"></translation>
+ <source>Directory:</source>
+ <translation>目錄:</translation>
</message>
<message>
- <source>ANSI C</source>
- <translation type="unfinished"></translation>
+ <source>%1
+Directory not found.
+Please verify the correct directory name was given.</source>
+ <translation>%1
+目錄找不到。
+請確認給予正確的目錄名稱。</translation>
</message>
<message>
- <source>ANSI D</source>
- <translation type="unfinished"></translation>
+ <source>'%1' is write protected.
+Do you want to delete it anyway?</source>
+ <translation>「%1」有寫入保護。
+您仍然要刪除嗎?</translation>
</message>
<message>
- <source>ANSI E</source>
- <translation type="unfinished"></translation>
+ <source>Could not delete directory.</source>
+ <translation>無法刪除目錄。</translation>
</message>
<message>
- <source>Legal Extra</source>
- <translation type="unfinished"></translation>
+ <source>Save As</source>
+ <translation>另存新檔</translation>
</message>
<message>
- <source>Letter Extra</source>
- <translation type="unfinished"></translation>
+ <source>Drive</source>
+ <translation>磁碟機</translation>
</message>
<message>
- <source>Letter Plus</source>
- <translation type="unfinished"></translation>
+ <source>File</source>
+ <translation>檔案</translation>
</message>
<message>
- <source>Letter Small</source>
- <translation type="unfinished"></translation>
+ <source>Unknown</source>
+ <translation>未知</translation>
</message>
<message>
- <source>Tabloid Extra</source>
- <translation type="unfinished"></translation>
+ <source>Find Directory</source>
+ <translation>尋找目錄</translation>
</message>
<message>
- <source>Architect A</source>
- <translation type="unfinished"></translation>
+ <source>Show </source>
+ <translation>顯示 </translation>
</message>
<message>
- <source>Architect B</source>
- <translation type="unfinished"></translation>
+ <source>Forward</source>
+ <translation>下一步</translation>
</message>
<message>
- <source>Architect C</source>
- <translation type="unfinished"></translation>
+ <source>New Folder</source>
+ <translation>新資料夾</translation>
</message>
<message>
- <source>Architect D</source>
- <translation type="unfinished"></translation>
+ <source>&New Folder</source>
+ <translation>新資料夾(&N)</translation>
</message>
<message>
- <source>Architect E</source>
- <translation type="unfinished"></translation>
+ <source>&Choose</source>
+ <translation>選擇(&C)</translation>
</message>
<message>
- <source>Note</source>
- <translation type="unfinished"></translation>
+ <source>Remove</source>
+ <translation>移除</translation>
</message>
<message>
- <source>Quarto</source>
- <translation type="unfinished"></translation>
+ <source>File &name:</source>
+ <translation>檔案名稱(&N):</translation>
</message>
<message>
- <source>Statement</source>
- <translation type="unfinished"></translation>
+ <source>Look in:</source>
+ <translation>尋找:</translation>
</message>
<message>
- <source>Super A</source>
- <translation type="unfinished"></translation>
+ <source>Create New Folder</source>
+ <translation>建立新資料夾</translation>
</message>
<message>
- <source>Super B</source>
- <translation type="unfinished"></translation>
+ <source>Go back</source>
+ <translation>上一步</translation>
</message>
<message>
- <source>Postcard</source>
- <translation type="unfinished"></translation>
+ <source>Alt+Left</source>
+ <translation>Alt+Left</translation>
</message>
<message>
- <source>Double Postcard</source>
- <translation type="unfinished"></translation>
+ <source>Go forward</source>
+ <translation>下一頁</translation>
</message>
<message>
- <source>PRC 16K</source>
- <translation type="unfinished"></translation>
+ <source>Alt+Right</source>
+ <translation>Alt+Right</translation>
</message>
<message>
- <source>PRC 32K</source>
- <translation type="unfinished"></translation>
+ <source>Go to the parent directory</source>
+ <translation>移至上層目錄</translation>
</message>
<message>
- <source>PRC 32K Big</source>
- <translation type="unfinished"></translation>
+ <source>Alt+Up</source>
+ <translation>Alt+Up</translation>
</message>
<message>
- <source>Fan-fold US (14.875 x 11 in)</source>
- <translation type="unfinished"></translation>
+ <source>Create a New Folder</source>
+ <translation>建立新資料夾</translation>
</message>
<message>
- <source>Fan-fold German (8.5 x 12 in)</source>
- <translation type="unfinished"></translation>
+ <source>Change to list view mode</source>
+ <translation>變更清單檢視模式</translation>
</message>
<message>
- <source>Fan-fold German Legal (8.5 x 13 in)</source>
- <translation type="unfinished"></translation>
+ <source>Change to detail view mode</source>
+ <translation>變更詳細資料檢視模式</translation>
</message>
<message>
- <source>Envelope B4</source>
- <translation type="unfinished"></translation>
+ <source>Sidebar</source>
+ <translation>側邊列</translation>
</message>
<message>
- <source>Envelope B5</source>
- <translation type="unfinished"></translation>
+ <source>List of places and bookmarks</source>
+ <translation>位置和書籤清單</translation>
</message>
<message>
- <source>Envelope B6</source>
- <translation type="unfinished"></translation>
+ <source>Files</source>
+ <translation>檔案</translation>
</message>
<message>
- <source>Envelope C0</source>
- <translation type="unfinished"></translation>
+ <source>All files (*)</source>
+ <translation>所有檔案 (*)</translation>
</message>
<message>
- <source>Envelope C1</source>
- <translation type="unfinished"></translation>
+ <source>Delete</source>
+ <translation>刪除</translation>
</message>
<message>
- <source>Envelope C2</source>
- <translation type="unfinished"></translation>
+ <source>Are you sure you want to delete '%1'?</source>
+ <translation>您確定要刪除「%1」嗎?</translation>
</message>
<message>
- <source>Envelope C3</source>
- <translation type="unfinished"></translation>
+ <source>Recent Places</source>
+ <translation>最近位置</translation>
</message>
<message>
- <source>Envelope C4</source>
- <translation type="unfinished"></translation>
+ <source>%1 File</source>
+ <extracomment>%1 is a file name suffix, for example txt</extracomment>
+ <translation>%1 檔案</translation>
</message>
<message>
- <source>Envelope C5</source>
- <translation type="unfinished"></translation>
+ <source>File Folder</source>
+ <comment>Match Windows Explorer</comment>
+ <translation>檔案資料夾</translation>
</message>
<message>
- <source>Envelope C6</source>
- <translation type="unfinished"></translation>
+ <source>Folder</source>
+ <comment>All other platforms</comment>
+ <translation>資料夾</translation>
</message>
<message>
- <source>Envelope C65</source>
- <translation type="unfinished"></translation>
+ <source>Alias</source>
+ <comment>OS X Finder</comment>
+ <translation>別名</translation>
</message>
<message>
- <source>Envelope C7</source>
- <translation type="unfinished"></translation>
+ <source>Shortcut</source>
+ <comment>All other platforms</comment>
+ <translation>快速鍵</translation>
</message>
+</context>
+<context>
+ <name>QFileSystemModel</name>
<message>
- <source>Envelope DL</source>
- <translation type="unfinished"></translation>
+ <source>Invalid filename</source>
+ <translation>無效的檔案名稱</translation>
</message>
<message>
- <source>Envelope US 9</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>Envelope US 10</source>
- <translation type="unfinished"></translation>
+ <source>Name</source>
+ <translation>名稱</translation>
</message>
<message>
- <source>Envelope US 11</source>
- <translation type="unfinished"></translation>
+ <source>Size</source>
+ <translation>大小</translation>
</message>
<message>
- <source>Envelope US 12</source>
- <translation type="unfinished"></translation>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>種類</translation>
</message>
<message>
- <source>Envelope US 14</source>
- <translation type="unfinished"></translation>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>類型</translation>
</message>
<message>
- <source>Envelope Monarch</source>
- <translation type="unfinished"></translation>
+ <source>Date Modified</source>
+ <translation>修改日期</translation>
</message>
<message>
- <source>Envelope Personal</source>
- <translation type="unfinished"></translation>
+ <source>My Computer</source>
+ <translation>我的電腦</translation>
</message>
<message>
- <source>Envelope Chou 3</source>
- <translation type="unfinished"></translation>
+ <source>Computer</source>
+ <translation>電腦</translation>
</message>
<message>
- <source>Envelope Chou 4</source>
- <translation type="unfinished"></translation>
+ <source>%1 TB</source>
+ <translation>%1 TB</translation>
</message>
<message>
- <source>Envelope Invite</source>
- <translation type="unfinished"></translation>
+ <source>%1 GB</source>
+ <translation>%1 GB</translation>
</message>
<message>
- <source>Envelope Italian</source>
- <translation type="unfinished"></translation>
+ <source>%1 MB</source>
+ <translation>%1 MB</translation>
</message>
<message>
- <source>Envelope Kaku 2</source>
- <translation type="unfinished"></translation>
+ <source>%1 KB</source>
+ <translation>%1 KB</translation>
</message>
<message>
- <source>Envelope Kaku 3</source>
- <translation type="unfinished"></translation>
+ <source>%1 bytes</source>
+ <translation>%1 bytes</translation>
</message>
<message>
- <source>Envelope PRC 1</source>
- <translation type="unfinished"></translation>
+ <source>%1 byte(s)</source>
+ <translation>%1 byte(s)</translation>
</message>
+</context>
+<context>
+ <name>QFontDatabase</name>
<message>
- <source>Envelope PRC 2</source>
- <translation type="unfinished"></translation>
+ <source>Bold</source>
+ <translation>粗體</translation>
</message>
<message>
- <source>Envelope PRC 3</source>
- <translation type="unfinished"></translation>
+ <source>Demi Bold</source>
+ <translation>Demi Bold</translation>
</message>
<message>
- <source>Envelope PRC 4</source>
- <translation type="unfinished"></translation>
+ <source>Black</source>
+ <translation>黑色</translation>
</message>
<message>
- <source>Envelope PRC 5</source>
- <translation type="unfinished"></translation>
+ <source>Demi</source>
+ <extracomment>The word for "Demi" as in "Demi Bold" used as a pattern for string searches</extracomment>
+ <translation>Demi</translation>
</message>
<message>
- <source>Envelope PRC 6</source>
- <translation type="unfinished"></translation>
+ <source>Light</source>
+ <translation>亮</translation>
</message>
<message>
- <source>Envelope PRC 7</source>
- <translation type="unfinished"></translation>
+ <source>Italic</source>
+ <translation>斜體</translation>
</message>
<message>
- <source>Envelope PRC 8</source>
- <translation type="unfinished"></translation>
+ <source>Oblique</source>
+ <translation>傾斜</translation>
</message>
<message>
- <source>Envelope PRC 9</source>
- <translation type="unfinished"></translation>
+ <source>Any</source>
+ <translation>任何</translation>
</message>
<message>
- <source>Envelope PRC 10</source>
- <translation type="unfinished"></translation>
+ <source>Latin</source>
+ <translation>拉丁語</translation>
</message>
<message>
- <source>Envelope You 4</source>
- <translation type="unfinished"></translation>
+ <source>Greek</source>
+ <translation>希臘</translation>
</message>
-</context>
-<context>
- <name>QPlatformTheme</name>
<message>
- <source>OK</source>
- <translation type="unfinished">確定</translation>
+ <source>Cyrillic</source>
+ <translation>西瑞爾語</translation>
</message>
<message>
- <source>Save</source>
- <translation type="unfinished">儲存</translation>
+ <source>Armenian</source>
+ <translation>美國</translation>
</message>
<message>
- <source>Save All</source>
- <translation type="unfinished">全部儲存</translation>
+ <source>Hebrew</source>
+ <translation>希伯來語</translation>
</message>
<message>
- <source>Open</source>
- <translation type="unfinished">開啟</translation>
+ <source>Arabic</source>
+ <translation>阿拉伯語</translation>
</message>
<message>
- <source>&Yes</source>
- <translation type="unfinished">是(&Y)</translation>
+ <source>Syriac</source>
+ <translation>敘利亞文</translation>
</message>
<message>
- <source>Yes to &All</source>
- <translation type="unfinished">全部回答是(&A)</translation>
+ <source>Thaana</source>
+ <translation>塔安娜語</translation>
</message>
<message>
- <source>&No</source>
- <translation type="unfinished">否(&N)</translation>
+ <source>Devanagari</source>
+ <translation>梵文</translation>
</message>
<message>
- <source>N&o to All</source>
- <translation type="unfinished">全部回答否(&O)</translation>
+ <source>Bengali</source>
+ <translation>孟加拉語</translation>
</message>
<message>
- <source>Abort</source>
- <translation type="unfinished">中止</translation>
+ <source>Gurmukhi</source>
+ <translation>果魯穆奇語</translation>
</message>
<message>
- <source>Retry</source>
- <translation type="unfinished">重試</translation>
+ <source>Gujarati</source>
+ <translation>古吉拉特語</translation>
</message>
<message>
- <source>Ignore</source>
- <translation type="unfinished">忽略</translation>
+ <source>Oriya</source>
+ <translation>奧里亞語</translation>
</message>
<message>
- <source>Close</source>
- <translation type="unfinished">關閉</translation>
+ <source>Tamil</source>
+ <translation>泰米爾語</translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="unfinished">取消</translation>
+ <source>Telugu</source>
+ <translation>泰盧固語</translation>
</message>
<message>
- <source>Discard</source>
- <translation type="unfinished">丟棄</translation>
+ <source>Kannada</source>
+ <translation>卡納塔克語</translation>
</message>
<message>
- <source>Help</source>
- <translation type="unfinished">說明</translation>
+ <source>Malayalam</source>
+ <translation>馬拉雅拉姆語</translation>
</message>
<message>
- <source>Apply</source>
- <translation type="unfinished">套用</translation>
+ <source>Sinhala</source>
+ <translation>僧伽羅文</translation>
</message>
<message>
- <source>Reset</source>
- <translation type="unfinished">重置</translation>
+ <source>Thai</source>
+ <translation>泰國</translation>
</message>
<message>
- <source>Restore Defaults</source>
- <translation type="unfinished">回復預設值</translation>
+ <source>Lao</source>
+ <translation>老撾</translation>
</message>
-</context>
-<context>
- <name>QPluginLoader</name>
<message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
+ <source>Tibetan</source>
+ <translation>西藏</translation>
</message>
<message>
- <source>The plugin was not loaded.</source>
- <translation>外掛程式未載入。</translation>
+ <source>Myanmar</source>
+ <translation>緬甸</translation>
</message>
-</context>
-<context>
- <name>QPrintDialog</name>
<message>
- <source>locally connected</source>
- <translation type="vanished">本地連接</translation>
+ <source>Georgian</source>
+ <translation>格魯吉亞語</translation>
</message>
<message>
- <source>Aliases: %1</source>
- <translation type="vanished">別名:%1</translation>
+ <source>Khmer</source>
+ <translation>高棉語</translation>
</message>
<message>
- <source>unknown</source>
- <translation type="vanished">未知</translation>
+ <source>Simplified Chinese</source>
+ <translation>簡體中文</translation>
</message>
<message>
- <source>Print To File ...</source>
- <translation>列印到檔案...</translation>
+ <source>Traditional Chinese</source>
+ <translation>正體中文</translation>
</message>
<message>
- <source>File %1 is not writable.
-Please choose a different file name.</source>
- <translation>檔案 %1 無法寫入。
-請選擇其它檔名。</translation>
+ <source>Japanese</source>
+ <translation>日語</translation>
</message>
<message>
- <source>%1 already exists.
-Do you want to overwrite it?</source>
- <translation>%1 已存在。
-您要覆寫它嗎?</translation>
+ <source>Korean</source>
+ <translation>韓文</translation>
</message>
<message>
- <source>%1 is a directory.
-Please choose a different file name.</source>
- <translation>%1 是一個目錄。
-請選擇其他檔名。</translation>
+ <source>Vietnamese</source>
+ <translation>越南語</translation>
</message>
<message>
- <source>A0</source>
- <translation type="vanished">A0</translation>
+ <source>Symbol</source>
+ <translation>Symbol</translation>
</message>
<message>
- <source>A1</source>
- <translation type="vanished">A1</translation>
+ <source>Ogham</source>
+ <translation>歐甘語</translation>
</message>
<message>
- <source>A2</source>
- <translation type="vanished">A2</translation>
+ <source>Runic</source>
+ <translation>古代北歐文</translation>
</message>
<message>
- <source>A3</source>
- <translation type="vanished">A3</translation>
+ <source>Normal</source>
+ <comment>The Normal or Regular font weight</comment>
+ <translation>標準</translation>
</message>
<message>
- <source>A4</source>
- <translation type="vanished">A4</translation>
+ <source>Medium</source>
+ <comment>The Medium font weight</comment>
+ <translation>中</translation>
</message>
<message>
- <source>A5</source>
- <translation type="vanished">A5</translation>
+ <source>Thin</source>
+ <translation>Thin</translation>
</message>
<message>
- <source>A6</source>
- <translation type="vanished">A6</translation>
+ <source>Extra Light</source>
+ <translation>特細</translation>
</message>
<message>
- <source>A7</source>
- <translation type="vanished">A7</translation>
+ <source>Extra Bold</source>
+ <translation>特粗</translation>
</message>
<message>
- <source>A8</source>
- <translation type="vanished">A8</translation>
+ <source>Extra</source>
+ <extracomment>The word for "Extra" as in "Extra Bold, Extra Thin" used as a pattern for string searches</extracomment>
+ <translation>額外</translation>
</message>
<message>
- <source>A9</source>
- <translation type="vanished">A9</translation>
+ <source>N'Ko</source>
+ <translation>N'Ko</translation>
</message>
+</context>
+<context>
+ <name>QFontDialog</name>
<message>
- <source>B0</source>
- <translation type="vanished">B0</translation>
+ <source>&Font</source>
+ <translation>字型(&F)</translation>
</message>
<message>
- <source>B1</source>
- <translation type="vanished">B1</translation>
+ <source>Font st&yle</source>
+ <translation>字型樣式(&Y)</translation>
</message>
<message>
- <source>B2</source>
- <translation type="vanished">B2</translation>
+ <source>&Size</source>
+ <translation>大小(&S)</translation>
</message>
<message>
- <source>B3</source>
- <translation type="vanished">B3</translation>
+ <source>Effects</source>
+ <translation>效果</translation>
</message>
<message>
- <source>B4</source>
- <translation type="vanished">B4</translation>
+ <source>Stri&keout</source>
+ <translation>刪除線(&K)</translation>
</message>
<message>
- <source>B5</source>
- <translation type="vanished">B5</translation>
+ <source>&Underline</source>
+ <translation>底線(&U)</translation>
</message>
<message>
- <source>B6</source>
- <translation type="vanished">B6</translation>
+ <source>Sample</source>
+ <translation>範例</translation>
</message>
<message>
- <source>B7</source>
- <translation type="vanished">B7</translation>
+ <source>Wr&iting System</source>
+ <translation>正在寫入系統(&I)</translation>
</message>
<message>
- <source>B8</source>
- <translation type="vanished">B8</translation>
+ <source>Select Font</source>
+ <translation>選取字型</translation>
</message>
+</context>
+<context>
+ <name>QFtp</name>
<message>
- <source>B9</source>
- <translation type="vanished">B9</translation>
+ <source>Not connected</source>
+ <translation>未連接</translation>
</message>
<message>
- <source>B10</source>
- <translation type="vanished">B10</translation>
+ <source>Host %1 not found</source>
+ <translation>找不到主機 %1</translation>
</message>
<message>
- <source>C5E</source>
- <translation type="vanished">C5E</translation>
+ <source>Connection refused to host %1</source>
+ <translation>拒絕連線到主機 %1</translation>
</message>
<message>
- <source>DLE</source>
- <translation type="vanished">DLE</translation>
+ <source>Connected to host %1</source>
+ <translation>已連接到主機 %1</translation>
</message>
<message>
- <source>Executive</source>
- <translation type="vanished">Executive</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>Folio</source>
- <translation type="vanished">Folio</translation>
+ <source>Connecting to host failed:
+%1</source>
+ <translation>連接到主機失敗:
+%1</translation>
</message>
<message>
- <source>Ledger</source>
- <translation type="vanished">Ledger</translation>
+ <source>Login failed:
+%1</source>
+ <translation>登入失敗:
+%1</translation>
</message>
<message>
- <source>Legal</source>
- <translation type="vanished">Legal</translation>
+ <source>Listing directory failed:
+%1</source>
+ <translation>列出目錄失敗:
+%1</translation>
</message>
<message>
- <source>Letter</source>
- <translation type="vanished">Letter</translation>
+ <source>Changing directory failed:
+%1</source>
+ <translation>清除目錄失敗:
+%1</translation>
</message>
<message>
- <source>Tabloid</source>
- <translation type="vanished">Tabloid</translation>
+ <source>Downloading file failed:
+%1</source>
+ <translation>下載檔案失敗:
+%1</translation>
</message>
<message>
- <source>US Common #10 Envelope</source>
- <translation type="vanished">US Common #10 Envelope</translation>
+ <source>Uploading file failed:
+%1</source>
+ <translation>上傳檔案失敗:
+%1</translation>
</message>
<message>
- <source>Custom</source>
- <translation type="vanished">自訂</translation>
+ <source>Removing file failed:
+%1</source>
+ <translation>移除檔案失敗:
+%1</translation>
</message>
<message>
- <source>&Options >></source>
- <translation>操作 (&O) >></translation>
+ <source>Creating directory failed:
+%1</source>
+ <translation>建立目錄失敗:
+%1</translation>
</message>
<message>
- <source>&Print</source>
- <translation>列印(&P)</translation>
+ <source>Removing directory failed:
+%1</source>
+ <translation>移除目錄失敗:
+%1</translation>
</message>
<message>
- <source>&Options <<</source>
- <translation>操作 (&O) <<</translation>
+ <source>Connection closed</source>
+ <translation>已關閉連線</translation>
</message>
<message>
- <source>Print to File (PDF)</source>
- <translation>列印到檔案(PDF)</translation>
+ <source>Connection timed out to host %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Print to File (Postscript)</source>
- <translation type="vanished">列印到檔案(Postscript)</translation>
+ <source>Data Connection refused</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QGnomeTheme</name>
<message>
- <source>Local file</source>
- <translation>本地端檔案</translation>
+ <source>&OK</source>
+ <translation>確定(&O)</translation>
</message>
<message>
- <source>Write %1 file</source>
- <translation type="vanished">寫入 %1 檔案</translation>
+ <source>&Save</source>
+ <translation>儲存(&S)</translation>
</message>
<message>
- <source>Portrait</source>
- <translation type="obsolete">縱向</translation>
+ <source>&Cancel</source>
+ <translation>取消(&C)</translation>
</message>
<message>
- <source>Landscape</source>
- <translation type="obsolete">橫向</translation>
+ <source>&Close</source>
+ <translation>關閉(&C)</translation>
</message>
<message>
- <source>File exists</source>
- <translation type="vanished">檔案已存在</translation>
+ <source>Close without Saving</source>
+ <translation>關閉不儲存</translation>
</message>
+</context>
+<context>
+ <name>QGuiApplication</name>
<message>
- <source><qt>Do you want to overwrite it?</qt></source>
- <translation type="vanished"><qt>您要覆寫它嗎?</qt></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>
+</context>
+<context>
+ <name>QHostInfo</name>
<message>
- <source>A0 (841 x 1189 mm)</source>
- <translation type="vanished">A0 (841 x 1189 mm)</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>A1 (594 x 841 mm)</source>
- <translation type="vanished">A1 (594 x 841 mm)</translation>
+ <source>No host name given</source>
+ <translation>未給予主機名稱</translation>
</message>
+</context>
+<context>
+ <name>QHostInfoAgent</name>
<message>
- <source>A2 (420 x 594 mm)</source>
- <translation type="vanished">A2 (420 x 594 mm)</translation>
+ <source>Host not found</source>
+ <translation>找不到主機</translation>
</message>
<message>
- <source>A3 (297 x 420 mm)</source>
- <translation type="vanished">A3 (297 x 420 mm)</translation>
+ <source>Unknown address type</source>
+ <translation>未知位址類型</translation>
</message>
<message>
- <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source>
- <translation type="vanished">A4 (210 x 297 mm, 8.26 x 11.7 英吋)</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>A5 (148 x 210 mm)</source>
- <translation type="vanished">A5 (148 x 210 mm)</translation>
+ <source>No host name given</source>
+ <translation>未給予主機名稱</translation>
</message>
<message>
- <source>A6 (105 x 148 mm)</source>
- <translation type="vanished">A6 (105 x 148 mm)</translation>
+ <source>Invalid hostname</source>
+ <translation>主機名稱無效</translation>
</message>
<message>
- <source>A7 (74 x 105 mm)</source>
- <translation type="vanished">A7 (74 x 105 mm)</translation>
+ <source>Unknown error (%1)</source>
+ <translation>未知錯誤 (%1)</translation>
</message>
+</context>
+<context>
+ <name>QHttp</name>
<message>
- <source>A8 (52 x 74 mm)</source>
- <translation type="vanished">A8 (52 x 74 mm)</translation>
+ <source>Connection refused</source>
+ <translation>拒絕連線</translation>
</message>
<message>
- <source>A9 (37 x 52 mm)</source>
- <translation type="vanished">A9 (37 x 52 mm)</translation>
+ <source>Host %1 not found</source>
+ <translation>找不到主機 %1</translation>
</message>
<message>
- <source>B0 (1000 x 1414 mm)</source>
- <translation type="vanished">B0 (1000 x 1414 mm)</translation>
+ <source>Connection closed</source>
+ <translation>已關閉連線</translation>
</message>
<message>
- <source>B1 (707 x 1000 mm)</source>
- <translation type="vanished">B1 (707 x 1000 mm)</translation>
+ <source>Proxy requires authentication</source>
+ <translation>Proxy 需要驗證</translation>
</message>
<message>
- <source>B2 (500 x 707 mm)</source>
- <translation type="vanished">B2 (500 x 707 mm)</translation>
+ <source>Host requires authentication</source>
+ <translation>主機需要驗證</translation>
</message>
<message>
- <source>B3 (353 x 500 mm)</source>
- <translation type="vanished">B3 (353 x 500 mm)</translation>
+ <source>Data corrupted</source>
+ <translation>資料已損毀</translation>
</message>
<message>
- <source>B4 (250 x 353 mm)</source>
- <translation type="vanished">B4 (250 x 353 mm)</translation>
+ <source>Unknown protocol specified</source>
+ <translation>指定未知的協定</translation>
</message>
<message>
- <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source>
- <translation type="vanished">B5 (176 x 250 mm, 6.93 x 9.84 英吋)</translation>
+ <source>SSL handshake failed</source>
+ <translation>SSL 交握失敗</translation>
</message>
<message>
- <source>B6 (125 x 176 mm)</source>
- <translation type="vanished">B6 (125 x 176 mm)</translation>
+ <source>Too many redirects</source>
+ <translation>太多重新導向</translation>
</message>
<message>
- <source>B7 (88 x 125 mm)</source>
- <translation type="vanished">B7 (88 x 125 mm)</translation>
+ <source>Insecure redirect</source>
+ <translation>不安全重新導向</translation>
</message>
+</context>
+<context>
+ <name>QHttpSocketEngine</name>
<message>
- <source>B8 (62 x 88 mm)</source>
- <translation type="vanished">B8 (62 x 88 mm)</translation>
+ <source>Authentication required</source>
+ <translation>需要驗證</translation>
</message>
<message>
- <source>B9 (44 x 62 mm)</source>
- <translation type="vanished">B9 (44 x 62 mm)</translation>
+ <source>Did not receive HTTP response from proxy</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>B10 (31 x 44 mm)</source>
- <translation type="vanished">B10 (31 x 44 mm)</translation>
+ <source>Error parsing authentication request from proxy</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>C5E (163 x 229 mm)</source>
- <translation type="vanished">C5E (163 x 229 mm)</translation>
+ <source>Proxy denied connection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DLE (110 x 220 mm)</source>
- <translation type="vanished">DLE (110 x 220 mm)</translation>
+ <source>Error communicating with HTTP proxy</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source>
- <translation type="vanished">Executive (7.5 x 10 英吋, 191 x 254 mm)</translation>
+ <source>Proxy server not found</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Folio (210 x 330 mm)</source>
- <translation type="vanished">對開 (210 x 330 mm)</translation>
+ <source>Proxy connection refused</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ledger (432 x 279 mm)</source>
- <translation type="vanished">Ledger (432 x 279 mm)</translation>
+ <source>Proxy server connection timed out</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source>
- <translation type="vanished">Legal (8.5 x 14 英吋, 216 x 356 mm)</translation>
+ <source>Proxy connection closed prematurely</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QIBaseDriver</name>
<message>
- <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source>
- <translation type="vanished">Letter (8.5 x 11 英吋, 216 x 279 mm)</translation>
+ <source>Error opening database</source>
+ <translation>開啟資料庫錯誤</translation>
</message>
<message>
- <source>Tabloid (279 x 432 mm)</source>
- <translation type="vanished">Tabloid (279 x 432 mm)</translation>
+ <source>Could not start transaction</source>
+ <translation>不能啟動異動</translation>
</message>
<message>
- <source>US Common #10 Envelope (105 x 241 mm)</source>
- <translation type="vanished">US 常用 10 號信封 (105x241 mm)</translation>
+ <source>Unable to commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>Print all</source>
- <translation type="vanished">全部列印</translation>
+ <source>Unable to rollback transaction</source>
+ <translation>無法回復異動</translation>
</message>
+</context>
+<context>
+ <name>QIBaseResult</name>
<message>
- <source>Print selection</source>
- <translation type="vanished">列印選擇區</translation>
+ <source>Unable to create BLOB</source>
+ <translation>無法建立 BLOB</translation>
</message>
<message>
- <source>Print range</source>
- <translation type="vanished">列印範圍</translation>
+ <source>Unable to write BLOB</source>
+ <translation>無法寫入 BLOB</translation>
</message>
<message>
- <source>The 'From' value cannot be greater than the 'To' value.</source>
- <translation>起始數值不能大於結束數值</translation>
+ <source>Unable to open BLOB</source>
+ <translation>無法開啟 BLOB</translation>
</message>
<message>
- <source>OK</source>
- <translation>確定</translation>
+ <source>Unable to read BLOB</source>
+ <translation>無法讀取 BLOB</translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="obsolete">取消</translation>
+ <source>Could not find array</source>
+ <translation>找不到矩陣</translation>
</message>
<message>
- <source>Page size:</source>
- <translation type="obsolete">紙張大小:</translation>
+ <source>Could not get array data</source>
+ <translation>找不到矩陣資料</translation>
</message>
<message>
- <source>Orientation:</source>
- <translation type="obsolete">方向:</translation>
+ <source>Could not get query info</source>
+ <translation>無法取得查詢資訊</translation>
</message>
<message>
- <source>Paper source:</source>
- <translation type="obsolete">紙張來源:</translation>
+ <source>Could not start transaction</source>
+ <translation>不能啟動異動</translation>
</message>
<message>
- <source>Print</source>
- <translation>列印</translation>
+ <source>Unable to commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>File</source>
- <translation type="obsolete">檔案</translation>
+ <source>Could not allocate statement</source>
+ <translation>不能分配陳述式</translation>
</message>
<message>
- <source>Printer</source>
- <translation type="obsolete">印表機</translation>
+ <source>Could not prepare statement</source>
+ <translation>無法準備陳述式</translation>
</message>
<message>
- <source>Print dialog</source>
- <translation type="obsolete">列印對話框</translation>
+ <source>Could not describe input statement</source>
+ <translation>無法宣告輸入陳述式</translation>
</message>
<message>
- <source>Paper format</source>
- <translation type="obsolete">紙張格式</translation>
+ <source>Could not describe statement</source>
+ <translation>無法宣告陳述式</translation>
</message>
<message>
- <source>Size:</source>
- <translation type="obsolete">大小:</translation>
+ <source>Unable to close statement</source>
+ <translation>無法關閉陳述式</translation>
</message>
<message>
- <source>Properties</source>
- <translation type="obsolete">內容</translation>
+ <source>Unable to execute query</source>
+ <translation>無法執行查詢</translation>
</message>
<message>
- <source>Printer info:</source>
- <translation type="obsolete">印表機資訊:</translation>
+ <source>Could not fetch next item</source>
+ <translation>無法提取下一個項目</translation>
</message>
<message>
- <source>Browse</source>
- <translation type="obsolete">瀏覽</translation>
+ <source>Could not get statement info</source>
+ <translation>無法取得陳述式資訊</translation>
</message>
+</context>
+<context>
+ <name>QIODevice</name>
<message>
- <source>Print to file</source>
- <translation type="obsolete">列印到檔案</translation>
+ <source>Permission denied</source>
+ <translation>權限拒絕</translation>
</message>
<message>
- <source>Pages from</source>
- <translation type="obsolete">指定頁面:從</translation>
+ <source>Too many open files</source>
+ <translation>開啟太多檔案</translation>
</message>
<message>
- <source>to</source>
- <translation type="obsolete">到</translation>
+ <source>No such file or directory</source>
+ <translation>沒有檔案或目錄</translation>
</message>
<message>
- <source>Selection</source>
- <translation type="obsolete">選擇區</translation>
+ <source>No space left on device</source>
+ <translation>裝置中沒有剩餘空間</translation>
</message>
<message>
- <source>Copies</source>
- <translation type="obsolete">份數</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>Number of copies:</source>
- <translation type="obsolete">列印份數:</translation>
+ <source>file to open is a directory</source>
+ <translation>開啟的檔案為目錄</translation>
</message>
+</context>
+<context>
+ <name>QImageReader</name>
<message>
- <source>Collate</source>
- <translation type="obsolete">校對</translation>
+ <source>Invalid device</source>
+ <translation>裝置無效</translation>
</message>
<message>
- <source>Print last page first</source>
- <translation type="obsolete">從最後一頁印起</translation>
+ <source>File not found</source>
+ <translation>找不到檔案</translation>
</message>
<message>
- <source>Other</source>
- <translation type="obsolete">其他</translation>
+ <source>Unsupported image format</source>
+ <translation>不支援的映像格式</translation>
</message>
<message>
- <source>Print in color if available</source>
- <translation type="obsolete">可以的話用彩色列印</translation>
+ <source>Unable to read image data</source>
+ <translation>無法讀取映像資料</translation>
</message>
<message>
- <source>Double side printing</source>
- <translation type="obsolete">雙面列印</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
+</context>
+<context>
+ <name>QImageWriter</name>
<message>
- <source>Left to Right, Top to Bottom</source>
- <translation type="unfinished"></translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>Left to Right, Bottom to Top</source>
- <translation type="unfinished"></translation>
+ <source>Device is not set</source>
+ <translation>裝置未設定</translation>
</message>
<message>
- <source>Right to Left, Bottom to Top</source>
- <translation type="unfinished"></translation>
+ <source>Device not writable</source>
+ <translation>裝置不可寫</translation>
</message>
<message>
- <source>Right to Left, Top to Bottom</source>
- <translation type="unfinished"></translation>
+ <source>Unsupported image format</source>
+ <translation>不支援的映像格式</translation>
</message>
+</context>
+<context>
+ <name>QInputDialog</name>
<message>
- <source>Bottom to Top, Left to Right</source>
- <translation type="unfinished"></translation>
+ <source>Enter a value:</source>
+ <translation>輸入值:</translation>
</message>
+</context>
+<context>
+ <name>QJsonParseError</name>
<message>
- <source>Bottom to Top, Right to Left</source>
- <translation type="unfinished"></translation>
+ <source>no error occurred</source>
+ <translation>未發生錯誤</translation>
</message>
<message>
- <source>Top to Bottom, Left to Right</source>
+ <source>unterminated object</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Top to Bottom, Right to Left</source>
+ <source>missing name separator</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>1 (1x1)</source>
+ <source>unterminated array</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>2 (2x1)</source>
+ <source>missing value separator</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>4 (2x2)</source>
+ <source>illegal value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>6 (2x3)</source>
+ <source>invalid termination by number</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>9 (3x3)</source>
+ <source>illegal number</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>16 (4x4)</source>
+ <source>invalid escape sequence</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>All Pages</source>
- <translation type="unfinished"></translation>
+ <source>invalid UTF8 string</source>
+ <translation>無效的 UTF8 字串</translation>
</message>
<message>
- <source>Odd Pages</source>
+ <source>unterminated string</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Even Pages</source>
+ <source>object is missing after a comma</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Write PDF file</source>
+ <source>too deeply nested document</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Options 'Pages Per Sheet' and 'Page Set' cannot be used together.
-Please turn one of those options off.</source>
+ <source>too large document</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Automatic</source>
+ <source>garbage at the end of the document</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>QPrintPreviewDialog</name>
- <message>
- <source>Page Setup</source>
- <translation>頁面設定</translation>
- </message>
- <message>
- <source>Print Preview</source>
- <translation>列印預覽</translation>
- </message>
- <message>
- <source>Next page</source>
- <translation>下一頁</translation>
- </message>
- <message>
- <source>Previous page</source>
- <translation>前一頁</translation>
- </message>
- <message>
- <source>First page</source>
- <translation>第一頁</translation>
- </message>
- <message>
- <source>Last page</source>
- <translation>最後一頁</translation>
- </message>
- <message>
- <source>Fit width</source>
- <translation>符合寬度</translation>
- </message>
+ <name>QKeySequenceEdit</name>
<message>
- <source>Fit page</source>
- <translation>符合頁面</translation>
+ <source>Press shortcut</source>
+ <translation>按下快速鍵</translation>
</message>
<message>
- <source>Zoom in</source>
- <translation>放大</translation>
+ <source>%1, ...</source>
+ <extracomment>This text is an "unfinished" shortcut, expands like "Ctrl+A, ..."</extracomment>
+ <translation>%1, ...</translation>
</message>
+</context>
+<context>
+ <name>QLibrary</name>
<message>
- <source>Zoom out</source>
- <translation>縮小</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>Portrait</source>
- <translation>縱向</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>Landscape</source>
- <translation>橫向</translation>
+ <source>The shared library was not found.</source>
+ <translation>找不到共用的程式庫。</translation>
</message>
<message>
- <source>Show single page</source>
- <translation>顯示單一頁面</translation>
+ <source>The file '%1' is not a valid Qt plugin.</source>
+ <translation>檔案「%1」不是有效的 Qt 外掛。</translation>
</message>
<message>
- <source>Show facing pages</source>
- <translation>顯示封面</translation>
+ <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
+ <translation>外掛「%1」使用不相容的 Qt 程式庫。 (無法混合 debug 與 release 程式庫。)</translation>
</message>
<message>
- <source>Show overview of all pages</source>
- <translation>顯示所有頁面預覽</translation>
+ <source>'%1' is not an ELF object (%2)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Print</source>
- <translation>列印</translation>
+ <source>'%1' is not an ELF object</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Page setup</source>
- <translation>列印設定</translation>
+ <source>'%1' is an invalid ELF object (%2)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Close</source>
- <translation type="vanished">關閉</translation>
+ <source>Failed to extract plugin meta data from '%1'</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Export to PDF</source>
- <translation>匯出到 PDF 檔</translation>
+ <source>Cannot load library %1: %2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Export to PostScript</source>
- <translation type="vanished">匯出到 PostScript 檔</translation>
+ <source>Cannot unload library %1: %2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1%</source>
- <translation>%1%</translation>
+ <source>Cannot resolve symbol "%1" in %2: %3</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QPrintPropertiesDialog</name>
<message>
- <source>PPD Properties</source>
- <translation type="obsolete">PPD 內容</translation>
+ <source>'%1' is not a valid Mach-O binary (%2)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Save</source>
- <translation type="obsolete">儲存</translation>
+ <source>file is corrupt</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>OK</source>
- <translation type="obsolete">確定</translation>
+ <source>file too small</source>
+ <translation>檔案太小</translation>
</message>
<message>
- <source>Printer Properties</source>
+ <source>no suitable architecture in fat binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Job Options</source>
+ <source>invalid magic %1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QPrintPropertiesWidget</name>
<message>
- <source>Form</source>
- <translation>表單</translation>
+ <source>wrong architecture</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Page</source>
- <translation>頁面</translation>
+ <source>not a dynamic library</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Advanced</source>
- <translation type="vanished">進階</translation>
+ <source>'%1' is not a Qt plugin</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>QPrintSettingsOutput</name>
- <message>
- <source>Form</source>
- <translation>表單</translation>
- </message>
- <message>
- <source>Copies</source>
- <translation>份數</translation>
- </message>
- <message>
- <source>Print range</source>
- <translation>列印範圍</translation>
- </message>
- <message>
- <source>Print all</source>
- <translation>全部列印</translation>
- </message>
- <message>
- <source>Pages from</source>
- <translation>指定頁面:從</translation>
- </message>
- <message>
- <source>to</source>
- <translation>到</translation>
- </message>
- <message>
- <source>Selection</source>
- <translation>選擇區</translation>
- </message>
- <message>
- <source>Output Settings</source>
- <translation>輸出設定</translation>
- </message>
- <message>
- <source>Copies:</source>
- <translation>份數:</translation>
- </message>
- <message>
- <source>Collate</source>
- <translation>校對</translation>
- </message>
+ <name>QLineEdit</name>
<message>
- <source>Reverse</source>
- <translation>反向</translation>
+ <source>&Undo</source>
+ <translation>復原(&U)</translation>
</message>
<message>
- <source>Options</source>
- <translation>選項</translation>
+ <source>&Redo</source>
+ <translation>重作(&R)</translation>
</message>
<message>
- <source>Color Mode</source>
- <translation>顏色模式</translation>
+ <source>Cu&t</source>
+ <translation>剪下(&T)</translation>
</message>
<message>
- <source>Color</source>
- <translation>顏色</translation>
+ <source>&Copy</source>
+ <translation>複製(&C)</translation>
</message>
<message>
- <source>Grayscale</source>
- <translation>灰階</translation>
+ <source>&Paste</source>
+ <translation>貼上(&P)</translation>
</message>
<message>
- <source>Duplex Printing</source>
- <translation>雙工列印</translation>
+ <source>Delete</source>
+ <translation>刪除</translation>
</message>
<message>
- <source>None</source>
- <translation>無</translation>
+ <source>Select All</source>
+ <translation>全選</translation>
</message>
+</context>
+<context>
+ <name>QLocalServer</name>
<message>
- <source>Long side</source>
- <translation>長邊</translation>
+ <source>%1: Name error</source>
+ <translation>%1: 名稱錯誤</translation>
</message>
<message>
- <source>Short side</source>
- <translation>短邊</translation>
+ <source>%1: Permission denied</source>
+ <translation>%1: 權限拒絕</translation>
</message>
<message>
- <source>Current Page</source>
- <translation type="unfinished"></translation>
+ <source>%1: Address in use</source>
+ <translation>%1: 位址使用中</translation>
</message>
<message>
- <source>Page Set:</source>
- <translation type="unfinished"></translation>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: 未知錯誤 %2</translation>
</message>
</context>
<context>
- <name>QPrintWidget</name>
+ <name>QLocalSocket</name>
<message>
- <source>Form</source>
- <translation>表單</translation>
+ <source>%1: Connection refused</source>
+ <translation>%1: 拒絕連線</translation>
</message>
<message>
- <source>Printer</source>
- <translation>印表機</translation>
+ <source>%1: Remote closed</source>
+ <translation>%1: 遠端已關閉</translation>
</message>
<message>
- <source>&Name:</source>
- <translation>名稱(&N):</translation>
+ <source>%1: Invalid name</source>
+ <translation>%1: 無效的名稱</translation>
</message>
<message>
- <source>P&roperties</source>
- <translation>屬性(&R)</translation>
+ <source>%1: Socket access error</source>
+ <translation>%1: 通訊端存取錯誤</translation>
</message>
<message>
- <source>Location:</source>
- <translation>位置:</translation>
+ <source>%1: Socket resource error</source>
+ <translation>%1: 通訊端資源錯誤</translation>
</message>
<message>
- <source>Preview</source>
- <translation>預覽</translation>
+ <source>%1: Socket operation timed out</source>
+ <translation>%1: 通訊端操作逾時</translation>
</message>
<message>
- <source>Type:</source>
- <translation>型態:</translation>
+ <source>%1: Datagram too large</source>
+ <translation>%1: 資料包太大</translation>
</message>
<message>
- <source>Output &file:</source>
- <translation>輸出檔案(&F):</translation>
+ <source>%1: Connection error</source>
+ <translation>%1: 連線錯誤</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
+ <source>%1: The socket operation is not supported</source>
+ <translation>%1: 不支援通訊端操作</translation>
</message>
-</context>
-<context>
- <name>QProcess</name>
<message>
- <source>Could not open input redirection for reading</source>
- <translation>無法開啟輸入導向以讀取</translation>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: 未知錯誤 %2</translation>
</message>
<message>
- <source>Could not open output redirection for writing</source>
- <translation>無法開啟輸出導向以寫入</translation>
+ <source>%1: Operation not permitted when socket is in this state</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Resource error (fork failure): %1</source>
- <translation>資源錯誤(fork 失敗):%1</translation>
+ <source>%1: Unknown error</source>
+ <translation>%1: 未知錯誤</translation>
</message>
<message>
- <source>Process operation timed out</source>
- <translation>行程操作逾時</translation>
+ <source>Trying to connect while connection is in progress</source>
+ <translation>連線進行中時嘗試連線</translation>
</message>
<message>
- <source>Error reading from process</source>
- <translation>從行程讀取時發生錯誤</translation>
+ <source>%1: Access denied</source>
+ <translation>%1: 拒絕存取</translation>
</message>
+</context>
+<context>
+ <name>QMYSQLDriver</name>
<message>
- <source>Error writing to process</source>
- <translation>寫入行程時發生錯誤</translation>
+ <source>Unable to connect</source>
+ <translation>無法連接</translation>
</message>
<message>
- <source>Process crashed</source>
- <translation>行程已崩潰</translation>
+ <source>Unable to begin transaction</source>
+ <translation>無法開始異動</translation>
</message>
<message>
- <source>No program defined</source>
- <translation type="unfinished"></translation>
+ <source>Unable to commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>Process failed to start</source>
- <translation>啟動行程失敗</translation>
+ <source>Unable to rollback transaction</source>
+ <translation>無法回復異動</translation>
</message>
<message>
- <source>Process failed to start: %1</source>
- <translation type="unfinished"></translation>
+ <source>Unable to allocate a MYSQL object</source>
+ <translation>無法配置 MYSQL 物件</translation>
</message>
-</context>
-<context>
- <name>QProgressDialog</name>
<message>
- <source>Cancel</source>
- <translation>取消</translation>
+ <source>Unable to open database '%1'</source>
+ <translation>無法開啟資料庫「%1」</translation>
</message>
</context>
<context>
- <name>QPushButton</name>
+ <name>QMYSQLResult</name>
<message>
- <source>Open</source>
- <translation type="vanished">開啟</translation>
+ <source>Unable to fetch data</source>
+ <translation>無法提取資料</translation>
</message>
-</context>
-<context>
- <name>QQnxFileDialogHelper</name>
<message>
- <source>All files (*.*)</source>
- <translation type="unfinished"></translation>
+ <source>Unable to execute query</source>
+ <translation>無法執行查詢</translation>
</message>
-</context>
-<context>
- <name>QQnxFilePicker</name>
<message>
- <source>Pick a file</source>
- <translation type="unfinished"></translation>
+ <source>Unable to store result</source>
+ <translation>無法儲存結果</translation>
</message>
-</context>
-<context>
- <name>QRadioButton</name>
<message>
- <source>Check</source>
- <translation type="vanished">勾選</translation>
+ <source>Unable to prepare statement</source>
+ <translation>無法準備陳述式</translation>
</message>
-</context>
-<context>
- <name>QRegExp</name>
<message>
- <source>no error occurred</source>
- <translation>沒有發生錯誤</translation>
+ <source>Unable to reset statement</source>
+ <translation>無法重設陳述式</translation>
</message>
<message>
- <source>disabled feature used</source>
- <translation>使用已關閉的功能</translation>
+ <source>Unable to bind value</source>
+ <translation>無法繫結值</translation>
</message>
<message>
- <source>bad char class syntax</source>
- <translation>錯誤的字元類別語法</translation>
+ <source>Unable to execute statement</source>
+ <translation>無法執行陳述式</translation>
</message>
<message>
- <source>bad lookahead syntax</source>
- <translation>錯誤的 lookahead 語法</translation>
+ <source>Unable to bind outvalues</source>
+ <translation>無法繫結外部值</translation>
</message>
<message>
- <source>bad repetition syntax</source>
- <translation>錯誤的重覆語法</translation>
+ <source>Unable to store statement results</source>
+ <translation>無法儲存陳述式結果</translation>
</message>
<message>
- <source>invalid octal value</source>
- <translation>不合法的八進位值</translation>
+ <source>Unable to execute next query</source>
+ <translation>無法執行下一個查詢</translation>
</message>
<message>
- <source>missing left delim</source>
- <translation>少了左方的區隔符</translation>
+ <source>Unable to store next result</source>
+ <translation>無法儲存下一個結果</translation>
</message>
+</context>
+<context>
+ <name>QMdiArea</name>
<message>
- <source>unexpected end</source>
- <translation>未預期遇到結尾</translation>
+ <source>(Untitled)</source>
+ <translation>(未命名)</translation>
</message>
+</context>
+<context>
+ <name>QMdiSubWindow</name>
<message>
- <source>met internal limit</source>
- <translation>遇到內部限制</translation>
+ <source>%1 - [%2]</source>
+ <translation>%1 - [%2]</translation>
</message>
<message>
- <source>lookbehinds not supported, see QTBUG-2371</source>
- <translation type="unfinished"></translation>
+ <source>Close</source>
+ <translation>關閉</translation>
</message>
<message>
- <source>invalid interval</source>
- <translation type="unfinished"></translation>
+ <source>Minimize</source>
+ <translation>最小化</translation>
</message>
<message>
- <source>invalid category</source>
- <translation type="unfinished"></translation>
+ <source>Restore Down</source>
+ <translation>向下還原</translation>
</message>
-</context>
-<context>
- <name>QRegularExpression</name>
<message>
- <source>no error</source>
- <translation type="unfinished"></translation>
+ <source>&Restore</source>
+ <translation>還原(&R)</translation>
</message>
<message>
- <source>\ at end of pattern</source>
- <translation type="unfinished"></translation>
+ <source>&Move</source>
+ <translation>移動(&M)</translation>
</message>
<message>
- <source>\c at end of pattern</source>
- <translation type="unfinished"></translation>
+ <source>&Size</source>
+ <translation>大小(&S)</translation>
</message>
<message>
- <source>unrecognized character follows \</source>
- <translation type="unfinished"></translation>
+ <source>Mi&nimize</source>
+ <translation>最小化(&N)</translation>
</message>
<message>
- <source>numbers out of order in {} quantifier</source>
- <translation type="unfinished"></translation>
+ <source>Ma&ximize</source>
+ <translation>最大化(&X)</translation>
</message>
<message>
- <source>number too big in {} quantifier</source>
- <translation type="unfinished"></translation>
+ <source>Stay on &Top</source>
+ <translation>最上層顯示(&T)</translation>
</message>
<message>
- <source>missing terminating ] for character class</source>
- <translation type="unfinished"></translation>
+ <source>&Close</source>
+ <translation>關閉(&C)</translation>
</message>
<message>
- <source>invalid escape sequence in character class</source>
- <translation type="unfinished"></translation>
+ <source>- [%1]</source>
+ <translation>- [%1]</translation>
</message>
<message>
- <source>range out of order in character class</source>
- <translation type="unfinished"></translation>
+ <source>Maximize</source>
+ <translation>最大化</translation>
</message>
<message>
- <source>nothing to repeat</source>
- <translation type="unfinished"></translation>
+ <source>Unshade</source>
+ <translation>無陰影</translation>
</message>
<message>
- <source>internal error: unexpected repeat</source>
- <translation type="unfinished"></translation>
+ <source>Shade</source>
+ <translation>陰影</translation>
</message>
<message>
- <source>unrecognized character after (? or (?-</source>
- <translation type="unfinished"></translation>
+ <source>Restore</source>
+ <translation>還原</translation>
</message>
<message>
- <source>POSIX named classes are supported only within a class</source>
- <translation type="unfinished"></translation>
+ <source>Help</source>
+ <translation>說明</translation>
</message>
<message>
- <source>missing )</source>
- <translation type="unfinished"></translation>
+ <source>Menu</source>
+ <translation>功能表</translation>
+ </message>
+</context>
+<context>
+ <name>QMessageBox</name>
+ <message>
+ <source>Help</source>
+ <translation>說明</translation>
</message>
<message>
- <source>reference to non-existent subpattern</source>
- <translation type="unfinished"></translation>
+ <source>OK</source>
+ <translation>確定</translation>
</message>
<message>
- <source>erroffset passed as NULL</source>
- <translation type="unfinished"></translation>
+ <source>About Qt</source>
+ <translation>關於 Qt</translation>
</message>
<message>
- <source>unknown option bit(s) set</source>
- <translation type="unfinished"></translation>
+ <source>Show Details...</source>
+ <translation>顯示詳細資料...</translation>
</message>
<message>
- <source>missing ) after comment</source>
- <translation type="unfinished"></translation>
+ <source>Hide Details...</source>
+ <translation>隱藏詳細資料...</translation>
</message>
<message>
- <source>regular expression is too large</source>
- <translation type="unfinished"></translation>
+ <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source>
+ <translation><h3>關於 Qt</h3><p>這個程式使用 Qt 版本 %1。</p></translation>
</message>
<message>
- <source>failed to get memory</source>
+ <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across all major desktop operating systems. It is also available for embedded Linux and other embedded and mobile operating systems.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate [...]
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNativeSocketEngine</name>
<message>
- <source>unmatched parentheses</source>
- <translation type="unfinished"></translation>
+ <source>The remote host closed the connection</source>
+ <translation>遠端主機關閉連線</translation>
</message>
<message>
- <source>internal error: code overflow</source>
- <translation type="unfinished"></translation>
+ <source>Network operation timed out</source>
+ <translation>網路操作逾時</translation>
</message>
<message>
- <source>unrecognized character after (?<</source>
- <translation type="unfinished"></translation>
+ <source>Out of resources</source>
+ <translation>資源不足</translation>
</message>
<message>
- <source>lookbehind assertion is not fixed length</source>
- <translation type="unfinished"></translation>
+ <source>Unsupported socket operation</source>
+ <translation>不支援的通訊端操作</translation>
</message>
<message>
- <source>malformed number or name after (?(</source>
- <translation type="unfinished"></translation>
+ <source>Protocol type not supported</source>
+ <translation>協定類型不支援</translation>
</message>
<message>
- <source>conditional group contains more than two branches</source>
- <translation type="unfinished"></translation>
+ <source>Invalid socket descriptor</source>
+ <translation>無效的通訊端描述字元</translation>
</message>
<message>
- <source>assertion expected after (?(</source>
- <translation type="unfinished"></translation>
+ <source>Network unreachable</source>
+ <translation>網路不可連接</translation>
</message>
<message>
- <source>(?R or (?[+-]digits must be followed by )</source>
- <translation type="unfinished"></translation>
+ <source>Permission denied</source>
+ <translation>權限拒絕</translation>
</message>
<message>
- <source>unknown POSIX class name</source>
- <translation type="unfinished"></translation>
+ <source>Connection timed out</source>
+ <translation>連線逾時</translation>
</message>
<message>
- <source>POSIX collating elements are not supported</source>
- <translation type="unfinished"></translation>
+ <source>Connection refused</source>
+ <translation>拒絕連線</translation>
+ </message>
+ <message>
+ <source>The bound address is already in use</source>
+ <translation>繫結位址已經使用中</translation>
+ </message>
+ <message>
+ <source>The address is not available</source>
+ <translation>位址不可用</translation>
</message>
<message>
- <source>this version of PCRE is not compiled with PCRE_UTF8 support</source>
- <translation type="unfinished"></translation>
+ <source>The address is protected</source>
+ <translation>位址受到保護</translation>
</message>
<message>
- <source>character value in \x{...} sequence is too large</source>
- <translation type="unfinished"></translation>
+ <source>Unable to send a message</source>
+ <translation>無法傳送訊息</translation>
</message>
<message>
- <source>invalid condition (?(0)</source>
- <translation type="unfinished"></translation>
+ <source>Unable to receive a message</source>
+ <translation>無法接收訊息</translation>
</message>
<message>
- <source>\C not allowed in lookbehind assertion</source>
- <translation type="unfinished"></translation>
+ <source>Unable to write</source>
+ <translation>無法寫入</translation>
</message>
<message>
- <source>PCRE does not support \L, \l, \N{name}, \U, or \u</source>
- <translation type="unfinished"></translation>
+ <source>Network error</source>
+ <translation>網路錯誤</translation>
</message>
<message>
- <source>number after (?C is > 255</source>
- <translation type="unfinished"></translation>
+ <source>Another socket is already listening on the same port</source>
+ <translation>另一通訊端已經接聽相同的連接埠</translation>
</message>
<message>
- <source>closing ) for (?C expected</source>
- <translation type="unfinished"></translation>
+ <source>Unable to initialize non-blocking socket</source>
+ <translation>無法初始化非封鎖性通訊端</translation>
</message>
<message>
- <source>recursive call could loop indefinitely</source>
- <translation type="unfinished"></translation>
+ <source>Unable to initialize broadcast socket</source>
+ <translation>無法初始化廣播通訊端</translation>
</message>
<message>
- <source>unrecognized character after (?P</source>
- <translation type="unfinished"></translation>
+ <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
+ <translation>嘗試在與沒有 IPv 6 支援的平臺上使用 IPv 6 通訊端</translation>
</message>
<message>
- <source>syntax error in subpattern name (missing terminator)</source>
- <translation type="unfinished"></translation>
+ <source>Host unreachable</source>
+ <translation>主機不可連線</translation>
</message>
<message>
- <source>two named subpatterns have the same name</source>
- <translation type="unfinished"></translation>
+ <source>Datagram was too large to send</source>
+ <translation>傳送的資料包太大</translation>
</message>
<message>
- <source>invalid UTF-8 string</source>
- <translation type="unfinished"></translation>
+ <source>Operation on non-socket</source>
+ <translation>在非通訊端操作</translation>
</message>
<message>
- <source>support for \P, \p, and \X has not been compiled</source>
- <translation type="unfinished"></translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>malformed \P or \p sequence</source>
- <translation type="unfinished"></translation>
+ <source>The proxy type is invalid for this operation</source>
+ <translation>這個操作的 Proxy 類型無效</translation>
</message>
<message>
- <source>unknown property name after \P or \p</source>
+ <source>Temporary error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>subpattern name is too long (maximum 32 characters)</source>
+ <source>Network dropped connection on reset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>too many named subpatterns (maximum 10000)</source>
+ <source>Connection reset by peer</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNetworkAccessCacheBackend</name>
<message>
- <source>octal value is greater than \377 (not in UTF-8 mode)</source>
+ <source>Error opening %1</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNetworkAccessDataBackend</name>
<message>
- <source>internal error: overran compiling workspace</source>
- <translation type="unfinished"></translation>
+ <source>Invalid URI: %1</source>
+ <translation>無效的 URI: %1</translation>
</message>
+</context>
+<context>
+ <name>QNetworkAccessDebugPipeBackend</name>
<message>
- <source>internal error: previously-checked referenced subpattern not found</source>
- <translation type="unfinished"></translation>
+ <source>Write error writing to %1: %2</source>
+ <translation>寫入 %1 錯誤: %2</translation>
</message>
<message>
- <source>DEFINE group contains more than one branch</source>
- <translation type="unfinished"></translation>
+ <source>Socket error on %1: %2</source>
+ <translation>%1 通訊端錯誤: %2</translation>
</message>
<message>
- <source>repeating a DEFINE group is not allowed</source>
- <translation type="unfinished"></translation>
+ <source>Remote host closed the connection prematurely on %1</source>
+ <translation>遠端主機已永久關閉連線於 %1</translation>
</message>
+</context>
+<context>
+ <name>QNetworkAccessFileBackend</name>
<message>
- <source>inconsistent NEWLINE options</source>
- <translation type="unfinished"></translation>
+ <source>Request for opening non-local file %1</source>
+ <translation>開啟非本機檔案 %1 的要求</translation>
</message>
<message>
- <source>\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number</source>
- <translation type="unfinished"></translation>
+ <source>Error opening %1: %2</source>
+ <translation>開啟 %1 錯誤: %2</translation>
</message>
<message>
- <source>a numbered reference must not be zero</source>
- <translation type="unfinished"></translation>
+ <source>Write error writing to %1: %2</source>
+ <translation>寫入 %1 錯誤: %2</translation>
</message>
<message>
- <source>an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT)</source>
- <translation type="unfinished"></translation>
+ <source>Cannot open %1: Path is a directory</source>
+ <translation>無法開啟 %1: 路徑是一個目錄</translation>
</message>
<message>
- <source>(*VERB) not recognized</source>
- <translation type="unfinished"></translation>
+ <source>Read error reading from %1: %2</source>
+ <translation>讀取 %1 錯誤: %2</translation>
</message>
+</context>
+<context>
+ <name>QNetworkAccessFtpBackend</name>
<message>
- <source>number is too big</source>
- <translation type="unfinished"></translation>
+ <source>Cannot open %1: is a directory</source>
+ <translation>無法開啟 %1: 是一個目錄</translation>
</message>
<message>
- <source>subpattern name expected</source>
- <translation type="unfinished"></translation>
+ <source>Logging in to %1 failed: authentication required</source>
+ <translation>登入 %1 失敗: 需要驗證</translation>
</message>
<message>
- <source>digit expected after (?+</source>
- <translation type="unfinished"></translation>
+ <source>Error while downloading %1: %2</source>
+ <translation>下載 %1 時錯誤: %2</translation>
</message>
<message>
- <source>] is an invalid data character in JavaScript compatibility mode</source>
- <translation type="unfinished"></translation>
+ <source>Error while uploading %1: %2</source>
+ <translation>上傳 %1 時錯誤: %2</translation>
</message>
<message>
- <source>different names for subpatterns of the same number are not allowed</source>
+ <source>No suitable proxy found</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNetworkAccessManager</name>
<message>
- <source>(*MARK) must have an argument</source>
+ <source>Network access is disabled.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNetworkReply</name>
<message>
- <source>this version of PCRE is not compiled with PCRE_UCP support</source>
- <translation type="unfinished"></translation>
+ <source>Protocol "%1" is unknown</source>
+ <translation>協定 "%1" 未知</translation>
</message>
<message>
- <source>\c must be followed by an ASCII character</source>
+ <source>Error transferring %1 - server replied: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>\k is not followed by a braced, angle-bracketed, or quoted name</source>
+ <source>Background request not allowed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>internal error: unknown opcode in find_fixedlength()</source>
+ <source>Network session error.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>\N is not supported in a class</source>
+ <source>backend start error.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>too many forward references</source>
+ <source>Temporary network failure.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNetworkReplyHttpImpl</name>
<message>
- <source>disallowed Unicode code point (>= 0xd800 && <= 0xdfff)</source>
- <translation type="unfinished"></translation>
+ <source>Operation canceled</source>
+ <translation>取消操作</translation>
</message>
<message>
- <source>invalid UTF-16 string</source>
+ <source>No suitable proxy found</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNetworkReplyImpl</name>
<message>
- <source>name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)</source>
- <translation type="unfinished"></translation>
+ <source>Operation canceled</source>
+ <translation>取消操作</translation>
</message>
+</context>
+<context>
+ <name>QNetworkSession</name>
<message>
- <source>character value in \u.... sequence is too large</source>
+ <source>Invalid configuration.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QNetworkSessionPrivateImpl</name>
<message>
- <source>invalid UTF-32 string</source>
+ <source>Unknown session error.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>setting UTF is disabled by the application</source>
+ <source>The session was aborted by the user or system.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>non-hex character in \x{} (closing brace missing?)</source>
+ <source>The requested operation is not supported by the system.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>non-octal character in \o{} (closing brace missing?)</source>
+ <source>The specified configuration cannot be used.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>missing opening brace after \o</source>
+ <source>Roaming was aborted or is not possible.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QOCIDriver</name>
<message>
- <source>parentheses are too deeply nested</source>
- <translation type="unfinished"></translation>
+ <source>Unable to logon</source>
+ <translation>無法登入</translation>
</message>
<message>
- <source>invalid range in character class</source>
- <translation type="unfinished"></translation>
+ <source>Unable to initialize</source>
+ <comment>QOCIDriver</comment>
+ <translation>無法初始化</translation>
</message>
<message>
- <source>group name must start with a non-digit</source>
- <translation type="unfinished"></translation>
+ <source>Unable to begin transaction</source>
+ <translation>無法開始異動</translation>
</message>
<message>
- <source>parentheses are too deeply nested (stack check)</source>
- <translation type="unfinished"></translation>
+ <source>Unable to commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>digits missing in \x{} or \o{}</source>
- <translation type="unfinished"></translation>
+ <source>Unable to rollback transaction</source>
+ <translation>無法回復異動</translation>
</message>
</context>
<context>
- <name>QSQLite2Driver</name>
+ <name>QOCIResult</name>
<message>
- <source>Error to open database</source>
- <translation type="vanished">開啟資料庫時發生錯誤</translation>
+ <source>Unable to bind column for batch execute</source>
+ <translation>無法繫結批次執行的欄</translation>
</message>
<message>
- <source>Unable to begin transaction</source>
- <translation>無法開始事務</translation>
+ <source>Unable to execute batch statement</source>
+ <translation>無法執行批次處理陳述式</translation>
</message>
<message>
- <source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
+ <source>Unable to goto next</source>
+ <translation>無法前往下一個</translation>
</message>
<message>
- <source>Unable to rollback Transaction</source>
- <translation type="vanished">無法反轉事務</translation>
+ <source>Unable to alloc statement</source>
+ <translation>無法配置陳述式</translation>
</message>
<message>
- <source>Error opening database</source>
- <translation type="unfinished">開啟資料庫發生錯誤</translation>
+ <source>Unable to prepare statement</source>
+ <translation>無法準備陳述式</translation>
</message>
<message>
- <source>Unable to rollback transaction</source>
- <translation type="unfinished">無法反轉事務</translation>
+ <source>Unable to bind value</source>
+ <translation>無法繫結值</translation>
</message>
-</context>
-<context>
- <name>QSQLite2Result</name>
<message>
- <source>Unable to fetch results</source>
- <translation>無法抓取結果</translation>
+ <source>Unable to execute statement</source>
+ <translation>無法執行陳述式</translation>
</message>
<message>
- <source>Unable to execute statement</source>
- <translation>無法執行敘述</translation>
+ <source>Unable to get statement type</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>QSQLiteDriver</name>
- <message>
- <source>Error opening database</source>
- <translation>開啟資料庫發生錯誤</translation>
- </message>
+ <name>QODBCDriver</name>
<message>
- <source>Error closing database</source>
- <translation>關閉資料庫發生錯誤</translation>
+ <source>Unable to connect</source>
+ <translation>無法連接</translation>
</message>
<message>
- <source>Unable to begin transaction</source>
- <translation>無法開始事務</translation>
+ <source>Unable to disable autocommit</source>
+ <translation>無法停用自動認可</translation>
</message>
<message>
<source>Unable to commit transaction</source>
- <translation>無法提交事務</translation>
+ <translation>無法提交異動</translation>
</message>
<message>
<source>Unable to rollback transaction</source>
- <translation>無法反轉事務</translation>
+ <translation>無法回復異動</translation>
+ </message>
+ <message>
+ <source>Unable to enable autocommit</source>
+ <translation>無法啟用自動認可</translation>
</message>
<message>
- <source>Unable to roll back transaction</source>
- <translation type="obsolete">無法反轉事務</translation>
+ <source>Unable to connect - Driver doesn't support all functionality required</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>QSQLiteResult</name>
+ <name>QODBCResult</name>
<message>
- <source>Unable to fetch row</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: 無法重設「SQL_CURSOR_STATIC」為陳述式屬性。 請檢查 ODBC 驅動程式組態</translation>
</message>
<message>
<source>Unable to execute statement</source>
- <translation>無法執行敘述</translation>
- </message>
- <message>
- <source>Unable to reset statement</source>
- <translation>無法重置敘述</translation>
+ <translation>無法執行陳述式</translation>
</message>
<message>
- <source>Unable to bind parameters</source>
- <translation>無法結合參數</translation>
+ <source>Unable to fetch next</source>
+ <translation>無法提取下一個</translation>
</message>
<message>
- <source>Parameter count mismatch</source>
- <translation>參數數量不符合</translation>
+ <source>Unable to prepare statement</source>
+ <translation>無法準備陳述式</translation>
</message>
<message>
- <source>No query</source>
- <translation>沒有查詢</translation>
+ <source>Unable to bind variable</source>
+ <translation>無法繫結變數</translation>
</message>
<message>
- <source>Unable to execute multiple statements at a time</source>
- <translation type="unfinished"></translation>
+ <source>Unable to fetch last</source>
+ <translation>無法提取最後一個</translation>
</message>
-</context>
-<context>
- <name>QSaveFile</name>
<message>
- <source>Existing file %1 is not writable</source>
- <translation type="unfinished"></translation>
+ <source>Unable to fetch</source>
+ <translation>無法提取</translation>
</message>
<message>
- <source>Filename refers to a directory</source>
- <translation type="unfinished"></translation>
+ <source>Unable to fetch first</source>
+ <translation>無法提取第一個</translation>
</message>
<message>
- <source>Writing canceled by application</source>
- <translation type="unfinished"></translation>
+ <source>Unable to fetch previous</source>
+ <translation>無法提取上一個</translation>
</message>
</context>
<context>
- <name>QScrollBar</name>
+ <name>QPSQLDriver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>無法連接</translation>
+ </message>
<message>
- <source>Scroll here</source>
- <translation>在此捲軸</translation>
+ <source>Could not begin transaction</source>
+ <translation>無法開始異動</translation>
</message>
<message>
- <source>Left edge</source>
- <translation>左邊緣</translation>
+ <source>Could not commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>Top</source>
- <translation>頂端</translation>
+ <source>Could not rollback transaction</source>
+ <translation>無法回復異動</translation>
</message>
<message>
- <source>Right edge</source>
- <translation>右邊緣</translation>
+ <source>Unable to subscribe</source>
+ <translation>無法訂閱</translation>
</message>
<message>
- <source>Bottom</source>
- <translation>底端</translation>
+ <source>Unable to unsubscribe</source>
+ <translation>無法取消訂閱</translation>
</message>
+</context>
+<context>
+ <name>QPSQLResult</name>
<message>
- <source>Page left</source>
- <translation>頁面左方</translation>
+ <source>Unable to create query</source>
+ <translation>無法建立查詢</translation>
</message>
<message>
- <source>Page up</source>
- <translation>頁面上方</translation>
+ <source>Unable to prepare statement</source>
+ <translation>無法準備陳述式</translation>
</message>
+</context>
+<context>
+ <name>QPageSetupWidget</name>
<message>
- <source>Page right</source>
- <translation>頁面右方</translation>
+ <source>Millimeters (mm)</source>
+ <translation>公釐 (mm)</translation>
</message>
<message>
- <source>Page down</source>
- <translation>頁面下方</translation>
+ <source>Inches (in)</source>
+ <translation>英吋 (in)</translation>
</message>
<message>
- <source>Scroll left</source>
- <translation>往左捲軸</translation>
+ <source>Points (pt)</source>
+ <translation>點 (pt)</translation>
</message>
<message>
- <source>Scroll up</source>
- <translation>往上捲軸</translation>
+ <source>Form</source>
+ <translation>表單</translation>
</message>
<message>
- <source>Scroll right</source>
- <translation>往右捲軸</translation>
+ <source>Paper</source>
+ <translation>紙張</translation>
</message>
<message>
- <source>Scroll down</source>
- <translation>往下捲軸</translation>
+ <source>Page size:</source>
+ <translation>頁面大小:</translation>
</message>
<message>
- <source>Line up</source>
- <translation type="vanished">對上排列</translation>
+ <source>Width:</source>
+ <translation>寬度:</translation>
</message>
<message>
- <source>Position</source>
- <translation type="vanished">位置</translation>
+ <source>Height:</source>
+ <translation>高度:</translation>
</message>
<message>
- <source>Line down</source>
- <translation type="vanished">對下排列</translation>
+ <source>Paper source:</source>
+ <translation>紙張來源:</translation>
</message>
-</context>
-<context>
- <name>QSharedMemory</name>
<message>
- <source>%1: unable to set key on lock</source>
- <translation>%1:無法設定鍵值</translation>
+ <source>Orientation</source>
+ <translation>橫向</translation>
</message>
<message>
- <source>%1: create size is less then 0</source>
- <translation>%1:建立大小小於 0</translation>
+ <source>Portrait</source>
+ <translation>橫向</translation>
</message>
<message>
- <source>%1: unable to lock</source>
- <translation>%1:無法鎖定</translation>
+ <source>Landscape</source>
+ <translation>直向</translation>
</message>
<message>
- <source>%1: unable to unlock</source>
- <translation>%1:無法解除鎖定</translation>
+ <source>Reverse landscape</source>
+ <translation>翻轉橫向</translation>
</message>
<message>
- <source>%1: permission denied</source>
- <translation>%1:存取被拒</translation>
+ <source>Reverse portrait</source>
+ <translation>翻轉直向</translation>
</message>
<message>
- <source>%1: already exists</source>
- <translation>%1:已存在</translation>
+ <source>Margins</source>
+ <translation>邊界</translation>
</message>
<message>
- <source>%1: doesn't exists</source>
- <translation type="vanished">%1:不存在</translation>
+ <source>top margin</source>
+ <translation>上邊界</translation>
</message>
<message>
- <source>%1: out of resources</source>
- <translation>%1:資源不足</translation>
+ <source>left margin</source>
+ <translation>左邊界</translation>
</message>
<message>
- <source>%1: unknown error %2</source>
- <translation>%1:未知的錯誤 %2</translation>
+ <source>right margin</source>
+ <translation>右邊界</translation>
</message>
<message>
- <source>%1: key is empty</source>
- <translation>%1:鍵值是空的</translation>
+ <source>bottom margin</source>
+ <translation>按鈕邊界</translation>
</message>
<message>
- <source>%1: unix key file doesn't exists</source>
- <translation type="vanished">%1:unix 鍵值檔不存在</translation>
+ <source>Page Layout</source>
+ <translation>頁面配置</translation>
</message>
<message>
- <source>%1: ftok failed</source>
- <translation>%1:ftok 失敗</translation>
+ <source>Page order:</source>
+ <translation>頁面順序:</translation>
</message>
<message>
- <source>%1: unable to make key</source>
- <translation>%1:無法產生鍵值</translation>
+ <source>Pages per sheet:</source>
+ <translation>每張頁數:</translation>
</message>
<message>
- <source>%1: system-imposed size restrictions</source>
- <translation>%1:系統大小限制</translation>
+ <source>Pica (P̸)</source>
+ <translation>Pica (P̸)</translation>
</message>
<message>
- <source>%1: not attached</source>
- <translation>%1:未附加</translation>
+ <source>Didot (DD)</source>
+ <translation>Didot (DD)</translation>
</message>
<message>
- <source>%1: invalid size</source>
- <translation>%1:不合法的大小</translation>
+ <source>Cicero (CC)</source>
+ <translation>Cicero (CC)</translation>
</message>
<message>
- <source>%1: key error</source>
- <translation>%1:鍵值錯誤</translation>
+ <source>Custom</source>
+ <translation>自訂</translation>
</message>
<message>
- <source>%1: size query failed</source>
- <translation>%1:大小查詢失敗</translation>
+ <source>mm</source>
+ <extracomment>Unit 'Millimeter'</extracomment>
+ <translation>mm</translation>
</message>
<message>
- <source>%1: bad name</source>
- <translation type="unfinished"></translation>
+ <source>pt</source>
+ <extracomment>Unit 'Points'</extracomment>
+ <translation>pt</translation>
</message>
<message>
- <source>%1: UNIX key file doesn't exist</source>
- <translation type="unfinished"></translation>
+ <source>in</source>
+ <extracomment>Unit 'Inch'</extracomment>
+ <translation>in</translation>
</message>
<message>
- <source>%1: doesn't exist</source>
- <translation type="unfinished"></translation>
+ <source>P̸</source>
+ <extracomment>Unit 'Pica'</extracomment>
+ <translation>P̸</translation>
</message>
-</context>
-<context>
- <name>QShortcut</name>
<message>
- <source>Space</source>
- <extracomment>This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment>
- <translation>空白鍵</translation>
+ <source>DD</source>
+ <extracomment>Unit 'Didot'</extracomment>
+ <translation>DD</translation>
</message>
<message>
- <source>Esc</source>
- <translation>Esc</translation>
+ <source>CC</source>
+ <extracomment>Unit 'Cicero'</extracomment>
+ <translation>CC</translation>
</message>
+</context>
+<context>
+ <name>QPageSize</name>
<message>
- <source>Tab</source>
- <translation>Tab</translation>
+ <source>Custom (%1mm x %2mm)</source>
+ <extracomment>Custom size name in millimeters</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Backtab</source>
- <translation>Backtab</translation>
+ <source>Custom (%1pt x %2pt)</source>
+ <extracomment>Custom size name in points</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Backspace</source>
- <translation>Backspace</translation>
+ <source>Custom (%1in x %2in)</source>
+ <extracomment>Custom size name in inches</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Return</source>
- <translation>Return</translation>
+ <source>Custom (%1pc x %2pc)</source>
+ <extracomment>Custom size name in picas</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Enter</source>
- <translation>Enter</translation>
+ <source>Custom (%1DD x %2DD)</source>
+ <extracomment>Custom size name in didots</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ins</source>
- <translation>Ins</translation>
+ <source>Custom (%1CC x %2CC)</source>
+ <extracomment>Custom size name in ciceros</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Del</source>
- <translation>Del</translation>
+ <source>%1 x %2 in</source>
+ <extracomment>Page size in 'Inch'.</extracomment>
+ <translation>%1 x %2 in</translation>
</message>
<message>
- <source>Pause</source>
- <translation>Pause</translation>
+ <source>A0</source>
+ <translation>A0</translation>
</message>
<message>
- <source>Print</source>
- <translation>Print</translation>
+ <source>A1</source>
+ <translation>A1</translation>
</message>
<message>
- <source>SysReq</source>
- <translation>SysReq</translation>
+ <source>A2</source>
+ <translation>A2</translation>
</message>
<message>
- <source>Home</source>
- <translation>Home</translation>
+ <source>A3</source>
+ <translation>A3</translation>
</message>
<message>
- <source>End</source>
- <translation>End</translation>
+ <source>A4</source>
+ <translation>A4</translation>
</message>
<message>
- <source>Left</source>
- <translation>左鍵</translation>
+ <source>A5</source>
+ <translation>A5</translation>
</message>
<message>
- <source>Up</source>
- <translation>上鍵</translation>
+ <source>A6</source>
+ <translation>A6</translation>
</message>
<message>
- <source>Right</source>
- <translation>右鍵</translation>
+ <source>A7</source>
+ <translation>A7</translation>
</message>
<message>
- <source>Down</source>
- <translation>下鍵</translation>
+ <source>A8</source>
+ <translation>A8</translation>
</message>
<message>
- <source>PgUp</source>
- <translation>PgUp</translation>
+ <source>A9</source>
+ <translation>A9</translation>
</message>
<message>
- <source>PgDown</source>
- <translation>PgDown</translation>
+ <source>A10</source>
+ <translation>A10</translation>
</message>
<message>
- <source>CapsLock</source>
- <translation>大寫鎖定</translation>
+ <source>B0</source>
+ <translation>B0</translation>
</message>
<message>
- <source>NumLock</source>
- <translation>數字鎖定</translation>
+ <source>B1</source>
+ <translation>B1</translation>
</message>
<message>
- <source>ScrollLock</source>
- <translation>捲軸鎖定</translation>
+ <source>B2</source>
+ <translation>B2</translation>
</message>
<message>
- <source>Menu</source>
- <translation>選單</translation>
+ <source>B3</source>
+ <translation>B3</translation>
</message>
<message>
- <source>Help</source>
- <translation>說明</translation>
+ <source>B4</source>
+ <translation>B4</translation>
</message>
<message>
- <source>Back</source>
- <translation>返回</translation>
+ <source>B5</source>
+ <translation>B5</translation>
</message>
<message>
- <source>Forward</source>
- <translation>往前</translation>
+ <source>B6</source>
+ <translation>B6</translation>
</message>
<message>
- <source>Stop</source>
- <translation>停止</translation>
+ <source>B7</source>
+ <translation>B7</translation>
</message>
<message>
- <source>Refresh</source>
- <translation>刷新</translation>
+ <source>B8</source>
+ <translation>B8</translation>
</message>
<message>
- <source>Volume Down</source>
- <translation>音量降低</translation>
+ <source>B9</source>
+ <translation>B9</translation>
</message>
<message>
- <source>Volume Mute</source>
- <translation>靜音</translation>
+ <source>B10</source>
+ <translation>B10</translation>
</message>
<message>
- <source>Volume Up</source>
- <translation>音量提高</translation>
+ <source>Executive (7.5 x 10 in)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Bass Boost</source>
- <translation>重低音</translation>
+ <source>Executive (7.25 x 10.5 in)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Bass Up</source>
- <translation>Bass Up</translation>
+ <source>Folio (8.27 x 13 in)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Bass Down</source>
- <translation>Bass Down</translation>
+ <source>Legal</source>
+ <translation>Legal</translation>
</message>
<message>
- <source>Treble Up</source>
- <translation>Treble Up</translation>
+ <source>Letter / ANSI A</source>
+ <translation>Letter / ANSI A</translation>
</message>
<message>
- <source>Treble Down</source>
- <translation>Treble Down</translation>
+ <source>Tabloid / ANSI B</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Media Play</source>
- <translation>媒體播放</translation>
+ <source>Ledger / ANSI B</source>
+ <translation>Ledger / ANSI B</translation>
</message>
<message>
- <source>Media Stop</source>
- <translation>媒體停止</translation>
+ <source>Custom</source>
+ <translation>自訂</translation>
</message>
<message>
- <source>Media Previous</source>
- <translation>媒體前一首</translation>
+ <source>A3 Extra</source>
+ <translation>A3 Extra</translation>
</message>
<message>
- <source>Media Next</source>
- <translation>媒體下一首</translation>
+ <source>A4 Extra</source>
+ <translation>A4 Extra</translation>
</message>
<message>
- <source>Media Record</source>
- <translation>媒體錄音</translation>
+ <source>A4 Plus</source>
+ <translation>A4 Plus</translation>
</message>
<message>
- <source>Favorites</source>
- <translation>我的最愛</translation>
+ <source>A4 Small</source>
+ <translation>A4 Small</translation>
</message>
<message>
- <source>Search</source>
- <translation>搜尋</translation>
+ <source>A5 Extra</source>
+ <translation>A5 Extra</translation>
</message>
<message>
- <source>Standby</source>
- <translation>待命</translation>
+ <source>B5 Extra</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open URL</source>
- <translation>開啟網址</translation>
+ <source>JIS B0</source>
+ <translation>JIS B0</translation>
</message>
<message>
- <source>Launch Mail</source>
- <translation>啟動郵件程式</translation>
+ <source>JIS B1</source>
+ <translation>JIS B1</translation>
</message>
<message>
- <source>Launch Media</source>
- <translation>啟動媒體程式</translation>
+ <source>JIS B2</source>
+ <translation>JIS B2</translation>
</message>
<message>
- <source>Launch (0)</source>
- <translation>啟動(0)</translation>
+ <source>JIS B3</source>
+ <translation>JIS B3</translation>
</message>
<message>
- <source>Launch (1)</source>
- <translation>啟動(1)</translation>
+ <source>JIS B4</source>
+ <translation>JIS B4</translation>
</message>
<message>
- <source>Launch (2)</source>
- <translation>啟動(2)</translation>
+ <source>JIS B5</source>
+ <translation>JIS B5</translation>
</message>
<message>
- <source>Launch (3)</source>
- <translation>啟動(3)</translation>
+ <source>JIS B6</source>
+ <translation>JIS B6</translation>
</message>
<message>
- <source>Launch (4)</source>
- <translation>啟動(4)</translation>
+ <source>JIS B7</source>
+ <translation>JIS B7</translation>
</message>
<message>
- <source>Launch (5)</source>
- <translation>啟動(5)</translation>
+ <source>JIS B8</source>
+ <translation>JIS B8</translation>
</message>
<message>
- <source>Launch (6)</source>
- <translation>啟動(6)</translation>
+ <source>JIS B9</source>
+ <translation>JIS B9</translation>
</message>
<message>
- <source>Launch (7)</source>
- <translation>啟動(7)</translation>
+ <source>JIS B10</source>
+ <translation>JIS B10</translation>
</message>
<message>
- <source>Launch (8)</source>
- <translation>啟動(8)</translation>
+ <source>ANSI C</source>
+ <translation>ANSI C</translation>
</message>
<message>
- <source>Launch (9)</source>
- <translation>啟動(9)</translation>
+ <source>ANSI D</source>
+ <translation>ANSI D</translation>
</message>
<message>
- <source>Launch (A)</source>
- <translation>啟動(A)</translation>
+ <source>ANSI E</source>
+ <translation>ANSI E</translation>
</message>
<message>
- <source>Launch (B)</source>
- <translation>啟動(B)</translation>
+ <source>Legal Extra</source>
+ <translation>Legal Extra</translation>
</message>
<message>
- <source>Launch (C)</source>
- <translation>啟動(C)</translation>
+ <source>Letter Extra</source>
+ <translation>Letter Extra</translation>
</message>
<message>
- <source>Launch (D)</source>
- <translation>啟動(D)</translation>
+ <source>Letter Plus</source>
+ <translation>Letter Plus</translation>
</message>
<message>
- <source>Launch (E)</source>
- <translation>啟動(E)</translation>
+ <source>Letter Small</source>
+ <translation>Letter Small</translation>
</message>
<message>
- <source>Launch (F)</source>
- <translation>啟動(F)</translation>
+ <source>Tabloid Extra</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Print Screen</source>
- <translation>列印螢幕</translation>
+ <source>Architect A</source>
+ <translation>Architect A</translation>
</message>
<message>
- <source>Page Up</source>
- <translation>往上一頁</translation>
+ <source>Architect B</source>
+ <translation>Architect B</translation>
</message>
<message>
- <source>Page Down</source>
- <translation>往下一頁</translation>
+ <source>Architect C</source>
+ <translation>Architect C</translation>
</message>
<message>
- <source>Caps Lock</source>
- <translation>大寫鎖定</translation>
+ <source>Architect D</source>
+ <translation>Architect D</translation>
</message>
<message>
- <source>Num Lock</source>
- <translation>數字鎖定</translation>
+ <source>Architect E</source>
+ <translation>Architect E</translation>
</message>
<message>
- <source>Number Lock</source>
- <translation>數字鎖定</translation>
+ <source>Note</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Scroll Lock</source>
- <translation>捲軸鎖定</translation>
+ <source>Quarto</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Insert</source>
- <translation>插入</translation>
+ <source>Statement</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Delete</source>
- <translation>刪除</translation>
+ <source>Super A</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Escape</source>
- <translation>Escape</translation>
+ <source>Super B</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>System Request</source>
- <translation>系統要求 SysRq</translation>
+ <source>Postcard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select</source>
- <translation>選擇</translation>
+ <source>Double Postcard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
- <translation>是</translation>
+ <source>PRC 16K</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
- <translation>否</translation>
+ <source>PRC 32K</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Context1</source>
- <translation>內文1</translation>
+ <source>PRC 32K Big</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Context2</source>
- <translation>內文2</translation>
+ <source>Fan-fold US (14.875 x 11 in)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Context3</source>
- <translation>內文3</translation>
+ <source>Fan-fold German (8.5 x 12 in)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Context4</source>
- <translation>內文4</translation>
+ <source>Fan-fold German Legal (8.5 x 13 in)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Call</source>
- <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment>
- <translation>呼叫</translation>
+ <source>Envelope B4</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Hangup</source>
- <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment>
- <translation>掛斷</translation>
+ <source>Envelope B5</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Flip</source>
- <translation>反轉</translation>
+ <source>Envelope B6</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl</source>
- <translation>Ctrl</translation>
+ <source>Envelope C0</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Shift</source>
- <translation>Shift</translation>
+ <source>Envelope C1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Alt</source>
- <translation>Alt</translation>
+ <source>Envelope C2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Meta</source>
- <translation>Meta</translation>
+ <source>Envelope C3</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>+</source>
- <translation>+</translation>
+ <source>Envelope C4</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>F%1</source>
- <translation>F%1</translation>
+ <source>Envelope C5</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Home Page</source>
- <translation>首頁</translation>
+ <source>Envelope C6</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Media Pause</source>
- <extracomment>Media player pause button</extracomment>
+ <source>Envelope C65</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle Media Play/Pause</source>
- <extracomment>Media player button to toggle between playing and paused</extracomment>
+ <source>Envelope C7</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Monitor Brightness Up</source>
+ <source>Envelope DL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Monitor Brightness Down</source>
+ <source>Envelope US 9</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Keyboard Light On/Off</source>
+ <source>Envelope US 10</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Keyboard Brightness Up</source>
+ <source>Envelope US 11</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Keyboard Brightness Down</source>
+ <source>Envelope US 12</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Power Off</source>
+ <source>Envelope US 14</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wake Up</source>
+ <source>Envelope Monarch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eject</source>
+ <source>Envelope Personal</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Screensaver</source>
+ <source>Envelope Chou 3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>WWW</source>
+ <source>Envelope Chou 4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sleep</source>
+ <source>Envelope Invite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LightBulb</source>
+ <source>Envelope Italian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Shop</source>
+ <source>Envelope Kaku 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>History</source>
+ <source>Envelope Kaku 3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add Favorite</source>
+ <source>Envelope PRC 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hot Links</source>
+ <source>Envelope PRC 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Adjust Brightness</source>
+ <source>Envelope PRC 3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Finance</source>
+ <source>Envelope PRC 4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Community</source>
+ <source>Envelope PRC 5</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Media Rewind</source>
+ <source>Envelope PRC 6</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Back Forward</source>
+ <source>Envelope PRC 7</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Application Left</source>
+ <source>Envelope PRC 8</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Application Right</source>
+ <source>Envelope PRC 9</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Book</source>
+ <source>Envelope PRC 10</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>CD</source>
+ <source>Envelope You 4</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QPlatformTheme</name>
<message>
- <source>Calculator</source>
- <translation type="unfinished"></translation>
+ <source>OK</source>
+ <translation>確定</translation>
</message>
<message>
- <source>Clear</source>
- <translation type="unfinished">清除</translation>
+ <source>Save</source>
+ <translation>儲存</translation>
</message>
<message>
- <source>Clear Grab</source>
- <translation type="unfinished"></translation>
+ <source>Save All</source>
+ <translation>全部儲存</translation>
</message>
<message>
- <source>Close</source>
- <translation type="unfinished">關閉</translation>
+ <source>Open</source>
+ <translation>開啟</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">複製</translation>
+ <source>&Yes</source>
+ <translation>是(&Y)</translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">剪下</translation>
+ <source>Yes to &All</source>
+ <translation>全部皆是(&A)</translation>
</message>
<message>
- <source>Display</source>
- <translation type="unfinished"></translation>
+ <source>&No</source>
+ <translation>否(&N)</translation>
</message>
<message>
- <source>DOS</source>
- <translation type="unfinished"></translation>
+ <source>N&o to All</source>
+ <translation>全部皆否(&O)</translation>
</message>
<message>
- <source>Documents</source>
- <translation type="unfinished"></translation>
+ <source>Abort</source>
+ <translation>中止</translation>
</message>
<message>
- <source>Spreadsheet</source>
- <translation type="unfinished"></translation>
+ <source>Retry</source>
+ <translation>重試</translation>
</message>
<message>
- <source>Browser</source>
- <translation type="unfinished"></translation>
+ <source>Ignore</source>
+ <translation>忽略</translation>
</message>
<message>
- <source>Game</source>
- <translation type="unfinished"></translation>
+ <source>Close</source>
+ <translation>關閉</translation>
</message>
<message>
- <source>Go</source>
- <translation type="unfinished"></translation>
+ <source>Cancel</source>
+ <translation>取消</translation>
</message>
<message>
- <source>iTouch</source>
- <translation type="unfinished"></translation>
+ <source>Discard</source>
+ <translation>捨棄</translation>
</message>
<message>
- <source>Logoff</source>
- <translation type="unfinished"></translation>
+ <source>Help</source>
+ <translation>說明</translation>
</message>
<message>
- <source>Market</source>
- <translation type="unfinished"></translation>
+ <source>Apply</source>
+ <translation>套用</translation>
</message>
<message>
- <source>Meeting</source>
- <translation type="unfinished"></translation>
+ <source>Reset</source>
+ <translation>重設</translation>
</message>
<message>
- <source>Keyboard Menu</source>
- <translation type="unfinished"></translation>
+ <source>Restore Defaults</source>
+ <translation>還原預設值</translation>
+ </message>
+</context>
+<context>
+ <name>QPluginLoader</name>
+ <message>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>Menu PB</source>
- <translation type="unfinished"></translation>
+ <source>The plugin was not loaded.</source>
+ <translation>外掛未載入。</translation>
</message>
+</context>
+<context>
+ <name>QPrintDialog</name>
<message>
- <source>My Sites</source>
- <translation type="unfinished"></translation>
+ <source>Print To File ...</source>
+ <translation>列印到檔案 ...</translation>
</message>
<message>
- <source>News</source>
- <translation type="unfinished"></translation>
+ <source>File %1 is not writable.
+Please choose a different file name.</source>
+ <translation>不可寫入檔案 %1 。
+請選擇不同的檔案名稱。</translation>
</message>
<message>
- <source>Home Office</source>
- <translation type="unfinished"></translation>
+ <source>%1 already exists.
+Do you want to overwrite it?</source>
+ <translation>%1 已經存在。
+您要覆寫它嗎?</translation>
</message>
<message>
- <source>Option</source>
- <translation type="unfinished"></translation>
+ <source>%1 is a directory.
+Please choose a different file name.</source>
+ <translation>%1 是一個目錄。
+請選擇不同的檔案名稱。</translation>
+ </message>
+ <message>
+ <source>&Options >></source>
+ <translation>選項(&O) >></translation>
+ </message>
+ <message>
+ <source>&Print</source>
+ <translation>列印(&P)</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">貼上</translation>
+ <source>&Options <<</source>
+ <translation>選項(&O) <<</translation>
</message>
<message>
- <source>Phone</source>
- <translation type="unfinished"></translation>
+ <source>Print to File (PDF)</source>
+ <translation>列印到檔案 (PDF)</translation>
</message>
<message>
- <source>Reply</source>
- <translation type="unfinished"></translation>
+ <source>Local file</source>
+ <translation>本機檔案</translation>
</message>
<message>
- <source>Reload</source>
- <translation type="unfinished">重新載入</translation>
+ <source>Print</source>
+ <translation>列印</translation>
</message>
<message>
- <source>Rotate Windows</source>
- <translation type="unfinished"></translation>
+ <source>Left to Right, Top to Bottom</source>
+ <translation>由左到右,由上到下</translation>
</message>
<message>
- <source>Rotation PB</source>
- <translation type="unfinished"></translation>
+ <source>Left to Right, Bottom to Top</source>
+ <translation>由左到右,由下到上</translation>
</message>
<message>
- <source>Rotation KB</source>
- <translation type="unfinished"></translation>
+ <source>Right to Left, Bottom to Top</source>
+ <translation>由右到左,由下到上</translation>
</message>
<message>
- <source>Save</source>
- <translation type="unfinished">儲存</translation>
+ <source>Right to Left, Top to Bottom</source>
+ <translation>由右到左,由上到下</translation>
</message>
<message>
- <source>Send</source>
+ <source>Bottom to Top, Left to Right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Spellchecker</source>
+ <source>Bottom to Top, Right to Left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Split Screen</source>
- <translation type="unfinished"></translation>
+ <source>Top to Bottom, Left to Right</source>
+ <translation>由上到下,由左到右</translation>
</message>
<message>
- <source>Support</source>
- <translation type="unfinished"></translation>
+ <source>Top to Bottom, Right to Left</source>
+ <translation>由上到下,由右到左</translation>
</message>
<message>
- <source>Task Panel</source>
- <translation type="unfinished"></translation>
+ <source>1 (1x1)</source>
+ <translation>1 (1x1)</translation>
</message>
<message>
- <source>Terminal</source>
- <translation type="unfinished"></translation>
+ <source>2 (2x1)</source>
+ <translation>2 (2x1)</translation>
</message>
<message>
- <source>Tools</source>
- <translation type="unfinished"></translation>
+ <source>4 (2x2)</source>
+ <translation>4 (2x2)</translation>
</message>
<message>
- <source>Travel</source>
- <translation type="unfinished"></translation>
+ <source>6 (2x3)</source>
+ <translation>6 (2x3)</translation>
</message>
<message>
- <source>Video</source>
- <translation type="unfinished">影像</translation>
+ <source>9 (3x3)</source>
+ <translation>9 (3x3)</translation>
</message>
<message>
- <source>Word Processor</source>
- <translation type="unfinished"></translation>
+ <source>16 (4x4)</source>
+ <translation>16 (4x4)</translation>
</message>
<message>
- <source>XFer</source>
+ <source>All Pages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Zoom In</source>
- <translation type="unfinished"></translation>
+ <source>Odd Pages</source>
+ <translation>奇數頁</translation>
</message>
<message>
- <source>Zoom Out</source>
- <translation type="unfinished"></translation>
+ <source>Even Pages</source>
+ <translation>偶數頁</translation>
</message>
<message>
- <source>Away</source>
- <translation type="unfinished"></translation>
+ <source>Write PDF file</source>
+ <translation>寫入 PDF 檔案</translation>
</message>
<message>
- <source>Messenger</source>
+ <source>Options 'Pages Per Sheet' and 'Page Set' cannot be used together.
+Please turn one of those options off.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>WebCam</source>
+ <source>The 'From' value cannot be greater than the 'To' value.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mail Forward</source>
- <translation type="unfinished"></translation>
+ <source>OK</source>
+ <translation>確定</translation>
</message>
<message>
- <source>Pictures</source>
- <translation type="unfinished"></translation>
+ <source>Automatic</source>
+ <translation>自動</translation>
</message>
+</context>
+<context>
+ <name>QPrintPreviewDialog</name>
<message>
- <source>Music</source>
- <translation type="unfinished">音樂</translation>
+ <source>Page Setup</source>
+ <translation>頁面設定</translation>
</message>
<message>
- <source>Battery</source>
- <translation type="unfinished"></translation>
+ <source>Print Preview</source>
+ <translation>預覽列印</translation>
</message>
<message>
- <source>Bluetooth</source>
- <translation type="unfinished"></translation>
+ <source>Next page</source>
+ <translation>下一頁</translation>
</message>
<message>
- <source>Wireless</source>
- <translation type="unfinished"></translation>
+ <source>Previous page</source>
+ <translation>上一頁</translation>
</message>
<message>
- <source>Ultra Wide Band</source>
- <translation type="unfinished"></translation>
+ <source>First page</source>
+ <translation>第一頁</translation>
</message>
<message>
- <source>Media Fast Forward</source>
- <translation type="unfinished"></translation>
+ <source>Last page</source>
+ <translation>最後一頁</translation>
</message>
<message>
- <source>Audio Repeat</source>
- <translation type="unfinished"></translation>
+ <source>Fit width</source>
+ <translation>符合寬度</translation>
</message>
<message>
- <source>Audio Random Play</source>
- <translation type="unfinished"></translation>
+ <source>Fit page</source>
+ <translation>符合頁面</translation>
</message>
<message>
- <source>Subtitle</source>
- <translation type="unfinished"></translation>
+ <source>Zoom in</source>
+ <translation>放大</translation>
</message>
<message>
- <source>Audio Cycle Track</source>
- <translation type="unfinished"></translation>
+ <source>Zoom out</source>
+ <translation>縮小</translation>
</message>
<message>
- <source>Time</source>
- <translation type="unfinished"></translation>
+ <source>Portrait</source>
+ <translation>橫向</translation>
</message>
<message>
- <source>Hibernate</source>
- <translation type="unfinished"></translation>
+ <source>Landscape</source>
+ <translation>直向</translation>
</message>
<message>
- <source>View</source>
- <translation type="unfinished"></translation>
+ <source>Show single page</source>
+ <translation>顯示單頁</translation>
</message>
<message>
- <source>Top Menu</source>
- <translation type="unfinished"></translation>
+ <source>Show facing pages</source>
+ <translation>顯示對頁</translation>
</message>
<message>
- <source>Power Down</source>
- <translation type="unfinished"></translation>
+ <source>Show overview of all pages</source>
+ <translation>顯示全頁的概觀</translation>
</message>
<message>
- <source>Suspend</source>
- <translation type="unfinished"></translation>
+ <source>Print</source>
+ <translation>列印</translation>
</message>
<message>
- <source>Microphone Mute</source>
- <translation type="unfinished"></translation>
+ <source>Page setup</source>
+ <translation>頁面設定</translation>
</message>
<message>
- <source>Red</source>
- <translation type="unfinished"></translation>
+ <source>%1%</source>
+ <translation>%1%</translation>
</message>
<message>
- <source>Green</source>
- <translation type="unfinished"></translation>
+ <source>Export to PDF</source>
+ <translation>匯出到 PDF</translation>
</message>
+</context>
+<context>
+ <name>QPrintPropertiesDialog</name>
<message>
- <source>Yellow</source>
- <translation type="unfinished"></translation>
+ <source>Printer Properties</source>
+ <translation>印表機內容</translation>
</message>
<message>
- <source>Blue</source>
- <translation type="unfinished"></translation>
+ <source>Job Options</source>
+ <translation>工作選項</translation>
</message>
+</context>
+<context>
+ <name>QPrintPropertiesWidget</name>
<message>
- <source>Channel Up</source>
- <translation type="unfinished"></translation>
+ <source>Form</source>
+ <translation>表單</translation>
</message>
<message>
- <source>Channel Down</source>
- <translation type="unfinished"></translation>
+ <source>Page</source>
+ <translation>頁面</translation>
</message>
+</context>
+<context>
+ <name>QPrintSettingsOutput</name>
<message>
- <source>Guide</source>
- <translation type="unfinished"></translation>
+ <source>Form</source>
+ <translation>表單</translation>
</message>
<message>
- <source>Info</source>
- <translation type="unfinished"></translation>
+ <source>Copies</source>
+ <translation>份數</translation>
</message>
<message>
- <source>Settings</source>
- <translation type="unfinished"></translation>
+ <source>Print range</source>
+ <translation>列印範圍</translation>
</message>
<message>
- <source>Microphone Volume Up</source>
- <translation type="unfinished"></translation>
+ <source>Print all</source>
+ <translation>列印全部</translation>
</message>
<message>
- <source>Microphone Volume Down</source>
- <translation type="unfinished"></translation>
+ <source>Pages from</source>
+ <translation>頁面從</translation>
</message>
<message>
- <source>New</source>
- <translation type="unfinished"></translation>
+ <source>to</source>
+ <translation>到</translation>
</message>
<message>
- <source>Open</source>
- <translation type="unfinished">開啟</translation>
+ <source>Selection</source>
+ <translation>選取</translation>
</message>
<message>
- <source>Find</source>
- <translation type="unfinished"></translation>
+ <source>Output Settings</source>
+ <translation>輸出設定值</translation>
</message>
<message>
- <source>Undo</source>
- <translation type="unfinished">復原</translation>
+ <source>Copies:</source>
+ <translation>份數:</translation>
</message>
<message>
- <source>Redo</source>
- <translation type="unfinished">重做</translation>
+ <source>Collate</source>
+ <translation>自動分頁</translation>
</message>
<message>
- <source>Toggle Call/Hangup</source>
- <extracomment>Button that will hang up if we're in call, or make a call if we're not.</extracomment>
- <translation type="unfinished"></translation>
+ <source>Reverse</source>
+ <translation>反向</translation>
</message>
<message>
- <source>Voice Dial</source>
- <extracomment>Button to trigger voice dialing</extracomment>
- <translation type="unfinished"></translation>
+ <source>Options</source>
+ <translation>選項</translation>
</message>
<message>
- <source>Last Number Redial</source>
- <extracomment>Button to redial the last number called</extracomment>
- <translation type="unfinished"></translation>
+ <source>Color Mode</source>
+ <translation>彩色模式</translation>
</message>
<message>
- <source>Camera Shutter</source>
- <extracomment>Button to trigger the camera shutter (take a picture)</extracomment>
- <translation type="unfinished"></translation>
+ <source>Color</source>
+ <translation>色彩</translation>
</message>
<message>
- <source>Camera Focus</source>
- <extracomment>Button to focus the camera</extracomment>
- <translation type="unfinished"></translation>
+ <source>Grayscale</source>
+ <translation>灰階</translation>
</message>
<message>
- <source>Kanji</source>
- <translation type="unfinished"></translation>
+ <source>Duplex Printing</source>
+ <translation>雙面列印</translation>
</message>
<message>
- <source>Muhenkan</source>
- <translation type="unfinished"></translation>
+ <source>None</source>
+ <translation>無</translation>
</message>
<message>
- <source>Henkan</source>
- <translation type="unfinished"></translation>
+ <source>Long side</source>
+ <translation>長邊</translation>
</message>
<message>
- <source>Romaji</source>
- <translation type="unfinished"></translation>
+ <source>Short side</source>
+ <translation>短邊</translation>
</message>
<message>
- <source>Hiragana</source>
- <translation type="unfinished"></translation>
+ <source>Current Page</source>
+ <translation>目前頁面</translation>
</message>
<message>
- <source>Katakana</source>
- <translation type="unfinished"></translation>
+ <source>Page Set:</source>
+ <translation>頁面設定:</translation>
</message>
+</context>
+<context>
+ <name>QPrintWidget</name>
<message>
- <source>Hiragana Katakana</source>
- <translation type="unfinished"></translation>
+ <source>Form</source>
+ <translation>表單</translation>
</message>
<message>
- <source>Zenkaku</source>
- <translation type="unfinished"></translation>
+ <source>Printer</source>
+ <translation>印表機</translation>
</message>
<message>
- <source>Hankaku</source>
- <translation type="unfinished"></translation>
+ <source>&Name:</source>
+ <translation>名稱(&N):</translation>
</message>
<message>
- <source>Zenkaku Hankaku</source>
- <translation type="unfinished"></translation>
+ <source>P&roperties</source>
+ <translation>內容(&R)</translation>
</message>
<message>
- <source>Touroku</source>
- <translation type="unfinished"></translation>
+ <source>Location:</source>
+ <translation>位置:</translation>
</message>
<message>
- <source>Massyo</source>
- <translation type="unfinished"></translation>
+ <source>Preview</source>
+ <translation>預覽</translation>
</message>
<message>
- <source>Kana Lock</source>
- <translation type="unfinished"></translation>
+ <source>Type:</source>
+ <translation>類型:</translation>
</message>
<message>
- <source>Kana Shift</source>
- <translation type="unfinished"></translation>
+ <source>Output &file:</source>
+ <translation>輸出檔案(&F):</translation>
</message>
<message>
- <source>Eisu Shift</source>
- <translation type="unfinished"></translation>
+ <source>...</source>
+ <translation>...</translation>
</message>
+</context>
+<context>
+ <name>QProcess</name>
<message>
- <source>Eisu toggle</source>
+ <source>Process failed to start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Code input</source>
+ <source>Process crashed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Multiple Candidate</source>
+ <source>Process operation timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous Candidate</source>
+ <source>Error reading from process</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hangul</source>
+ <source>Error writing to process</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hangul Start</source>
+ <source>No program defined</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hangul End</source>
+ <source>Could not open input redirection for reading</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hangul Hanja</source>
+ <source>Resource error (fork failure): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hangul Jamo</source>
+ <source>Could not open output redirection for writing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hangul Romaja</source>
+ <source>Process failed to start: %1</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QProgressDialog</name>
<message>
- <source>Hangul Jeonja</source>
- <translation type="unfinished"></translation>
+ <source>Cancel</source>
+ <translation>取消</translation>
</message>
+</context>
+<context>
+ <name>QQnxFileDialogHelper</name>
<message>
- <source>Hangul Banja</source>
- <translation type="unfinished"></translation>
+ <source>All files (*.*)</source>
+ <translation>所有檔案 (*.*)</translation>
</message>
+</context>
+<context>
+ <name>QQnxFilePicker</name>
<message>
- <source>Hangul PreHanja</source>
+ <source>Pick a file</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QRegExp</name>
<message>
- <source>Hangul PostHanja</source>
- <translation type="unfinished"></translation>
+ <source>no error occurred</source>
+ <translation>未發生錯誤</translation>
</message>
<message>
- <source>Hangul Special</source>
- <translation type="unfinished"></translation>
+ <source>disabled feature used</source>
+ <translation>使用停用的功能</translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="unfinished">取消</translation>
+ <source>bad char class syntax</source>
+ <translation>不良的 char 類別語法</translation>
</message>
<message>
- <source>Printer</source>
- <translation type="unfinished">印表機</translation>
+ <source>bad lookahead syntax</source>
+ <translation>不良的 lookahead 語法</translation>
</message>
<message>
- <source>Execute</source>
- <translation type="unfinished">執行</translation>
+ <source>bad repetition syntax</source>
+ <translation>不良的 repetition 語法</translation>
</message>
<message>
- <source>Play</source>
- <translation type="unfinished"></translation>
+ <source>invalid octal value</source>
+ <translation>八進制值無效</translation>
</message>
<message>
- <source>Zoom</source>
- <translation type="unfinished"></translation>
+ <source>missing left delim</source>
+ <translation>缺少左側 delim</translation>
</message>
<message>
- <source>Exit</source>
- <translation type="unfinished">離開</translation>
+ <source>unexpected end</source>
+ <translation>未預期的結束</translation>
</message>
<message>
- <source>Touchpad Toggle</source>
- <translation type="unfinished"></translation>
+ <source>met internal limit</source>
+ <translation>達到內部限制</translation>
</message>
<message>
- <source>Touchpad On</source>
+ <source>lookbehinds not supported, see QTBUG-2371</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Touchpad Off</source>
+ <source>invalid interval</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Num</source>
+ <source>invalid category</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>QSlider</name>
- <message>
- <source>Page left</source>
- <translation type="vanished">頁面左方</translation>
- </message>
- <message>
- <source>Page up</source>
- <translation type="vanished">頁面上方</translation>
- </message>
- <message>
- <source>Position</source>
- <translation type="vanished">位置</translation>
- </message>
+ <name>QRegularExpression</name>
<message>
- <source>Page right</source>
- <translation type="vanished">頁面右方</translation>
+ <source>no error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Page down</source>
- <translation type="vanished">頁面下方</translation>
+ <source>\ at end of pattern</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QSocks5SocketEngine</name>
<message>
- <source>Socks5 timeout error connecting to socks server</source>
- <translation type="obsolete">連接到 socks 伺服器時發生 socks5 逾時錯誤</translation>
+ <source>\c at end of pattern</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Network operation timed out</source>
- <translation>網路操作逾時</translation>
+ <source>unrecognized character follows \</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Connection to proxy refused</source>
- <translation>代理伺服器連線被拒</translation>
+ <source>numbers out of order in {} quantifier</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Connection to proxy closed prematurely</source>
- <translation>代理伺服器連線已不正常關閉</translation>
+ <source>number too big in {} quantifier</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Proxy host not found</source>
- <translation>找不到代理伺服器</translation>
+ <source>missing terminating ] for character class</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Connection to proxy timed out</source>
- <translation>代理伺服器連線逾時</translation>
+ <source>invalid escape sequence in character class</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Proxy authentication failed</source>
- <translation>代理伺服器認證失敗</translation>
+ <source>range out of order in character class</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Proxy authentication failed: %1</source>
- <translation>代理伺服器認證失敗:%1</translation>
+ <source>nothing to repeat</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SOCKS version 5 protocol error</source>
- <translation>SOCKS 5 的協定錯誤</translation>
+ <source>internal error: unexpected repeat</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>General SOCKSv5 server failure</source>
- <translation>一般的 SOCKSv5 伺服器錯誤</translation>
+ <source>unrecognized character after (? or (?-</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Connection not allowed by SOCKSv5 server</source>
- <translation>連線未被 SOCKSv5 伺服器允許</translation>
+ <source>POSIX named classes are supported only within a class</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>TTL expired</source>
- <translation>TTL 逾時</translation>
+ <source>missing )</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SOCKSv5 command not supported</source>
- <translation>SOCKSv5 指令未被支援</translation>
+ <source>reference to non-existent subpattern</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Address type not supported</source>
- <translation>位址型態未被支援</translation>
+ <source>erroffset passed as NULL</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unknown SOCKSv5 proxy error code 0x%1</source>
- <translation>未知的 SOCKSv5 代理伺服器錯誤代碼 0x%1</translation>
+ <source>unknown option bit(s) set</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QSpiAccessibleBridge</name>
<message>
- <source>invalid role</source>
- <extracomment>Role of an accessible object - the object is in an invalid state or could not be constructed</extracomment>
+ <source>missing ) after comment</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>title bar</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>regular expression is too large</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>menu bar</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>failed to get memory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>scroll bar</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>unmatched parentheses</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>grip</source>
- <extracomment>Role of an accessible object - the grip is usually used for resizing another object</extracomment>
+ <source>internal error: code overflow</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>sound</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>unrecognized character after (?<</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>cursor</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>lookbehind assertion is not fixed length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>text caret</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>malformed number or name after (?(</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>alert message</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>conditional group contains more than two branches</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>frame</source>
- <extracomment>Role of an accessible object: a window with frame and title
-----------
-Role of an accessible object</extracomment>
+ <source>assertion expected after (?(</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>filler</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>(?R or (?[+-]digits must be followed by )</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>popup menu</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>unknown POSIX class name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>menu item</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>POSIX collating elements are not supported</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>tool tip</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>this version of PCRE is not compiled with PCRE_UTF8 support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>application</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>character value in \x{...} sequence is too large</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>document</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>invalid condition (?(0)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>panel</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>\C not allowed in lookbehind assertion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>chart</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>PCRE does not support \L, \l, \N{name}, \U, or \u</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>dialog</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>number after (?C is > 255</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>separator</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>closing ) for (?C expected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>tool bar</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>recursive call could loop indefinitely</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>status bar</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>unrecognized character after (?P</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>table</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>syntax error in subpattern name (missing terminator)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>column header</source>
- <extracomment>Role of an accessible object - part of a table</extracomment>
+ <source>two named subpatterns have the same name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>row header</source>
- <extracomment>Role of an accessible object - part of a table</extracomment>
- <translation type="unfinished"></translation>
+ <source>invalid UTF-8 string</source>
+ <translation>無效的 UTF-8 字串</translation>
</message>
<message>
- <source>column</source>
- <extracomment>Role of an accessible object - part of a table</extracomment>
+ <source>support for \P, \p, and \X has not been compiled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>row</source>
- <extracomment>Role of an accessible object - part of a table</extracomment>
+ <source>malformed \P or \p sequence</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>cell</source>
- <extracomment>Role of an accessible object - part of a table</extracomment>
+ <source>unknown property name after \P or \p</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>link</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>subpattern name is too long (maximum 32 characters)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>help balloon</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>too many named subpatterns (maximum 10000)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>assistant</source>
- <extracomment>Role of an accessible object - a helper dialog</extracomment>
+ <source>octal value is greater than \377 (not in UTF-8 mode)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>list</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>internal error: overran compiling workspace</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>list item</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>internal error: previously-checked referenced subpattern not found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>tree</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>DEFINE group contains more than one branch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>tree item</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>repeating a DEFINE group is not allowed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>page tab</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>inconsistent NEWLINE options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>property page</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>indicator</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>a numbered reference must not be zero</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>graphic</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>label</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>(*VERB) not recognized</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>text</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>number is too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>push button</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>subpattern name expected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>check box</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>digit expected after (?+</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>radio button</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>] is an invalid data character in JavaScript compatibility mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>combo box</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>different names for subpatterns of the same number are not allowed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>progress bar</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>(*MARK) must have an argument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>dial</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>this version of PCRE is not compiled with PCRE_UCP support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>hotkey field</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>\c must be followed by an ASCII character</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>slider</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>\k is not followed by a braced, angle-bracketed, or quoted name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>spin box</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>internal error: unknown opcode in find_fixedlength()</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>canvas</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>\N is not supported in a class</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>animation</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>too many forward references</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>equation</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>disallowed Unicode code point (>= 0xd800 && <= 0xdfff)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>button with drop down</source>
- <extracomment>Role of an accessible object</extracomment>
- <translation type="unfinished"></translation>
+ <source>invalid UTF-16 string</source>
+ <translation>無效的 UTF-16 字串</translation>
</message>
<message>
- <source>button menu</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>button with drop down grid</source>
- <extracomment>Role of an accessible object - a button that expands a grid.</extracomment>
+ <source>character value in \u.... sequence is too large</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>space</source>
- <extracomment>Role of an accessible object - blank space between other objects.</extracomment>
- <translation type="unfinished"></translation>
+ <source>invalid UTF-32 string</source>
+ <translation>無效的 UTF-32 字串</translation>
</message>
<message>
- <source>page tab list</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>setting UTF is disabled by the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>clock</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>non-hex character in \x{} (closing brace missing?)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>splitter</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>non-octal character in \o{} (closing brace missing?)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>layered pane</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>missing opening brace after \o</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>web document</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>parentheses are too deeply nested</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>paragraph</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>invalid range in character class</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>section</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>group name must start with a non-digit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>color chooser</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>parentheses are too deeply nested (stack check)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>footer</source>
- <extracomment>Role of an accessible object</extracomment>
+ <source>digits missing in \x{} or \o{}</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QSQLite2Driver</name>
<message>
- <source>form</source>
- <extracomment>Role of an accessible object</extracomment>
- <translation type="unfinished"></translation>
+ <source>Unable to begin transaction</source>
+ <translation>無法開始異動</translation>
</message>
<message>
- <source>heading</source>
- <extracomment>Role of an accessible object</extracomment>
- <translation type="unfinished"></translation>
+ <source>Unable to commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>note</source>
- <extracomment>Role of an accessible object</extracomment>
- <translation type="unfinished"></translation>
+ <source>Error opening database</source>
+ <translation>開啟資料庫錯誤</translation>
</message>
<message>
- <source>complementary content</source>
- <extracomment>Role of an accessible object</extracomment>
- <translation type="unfinished"></translation>
+ <source>Unable to rollback transaction</source>
+ <translation>無法回復異動</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLite2Result</name>
+ <message>
+ <source>Unable to fetch results</source>
+ <translation>無法提取結果</translation>
</message>
<message>
- <source>unknown</source>
- <extracomment>Role of an accessible object</extracomment>
- <translation type="unfinished">未知</translation>
+ <source>Unable to execute statement</source>
+ <translation>無法執行陳述式</translation>
</message>
</context>
<context>
- <name>QSpinBox</name>
+ <name>QSQLiteDriver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>開啟資料庫錯誤</translation>
+ </message>
+ <message>
+ <source>Error closing database</source>
+ <translation>關閉資料庫錯誤</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>無法開始異動</translation>
+ </message>
<message>
- <source>More</source>
- <translation type="vanished">更多</translation>
+ <source>Unable to commit transaction</source>
+ <translation>無法提交異動</translation>
</message>
<message>
- <source>Less</source>
- <translation type="vanished">較少</translation>
+ <source>Unable to rollback transaction</source>
+ <translation>無法回復異動</translation>
</message>
</context>
<context>
- <name>QSql</name>
+ <name>QSQLiteResult</name>
<message>
- <source>Delete</source>
- <translation type="vanished">刪除</translation>
+ <source>Unable to fetch row</source>
+ <translation>無法提取列</translation>
</message>
<message>
- <source>Delete this record?</source>
- <translation type="vanished">要刪除這筆紀錄嗎?</translation>
+ <source>Unable to execute statement</source>
+ <translation>無法執行陳述式</translation>
</message>
<message>
- <source>Yes</source>
- <translation type="vanished">是</translation>
+ <source>Unable to reset statement</source>
+ <translation>無法重設陳述式</translation>
</message>
<message>
- <source>No</source>
- <translation type="vanished">否</translation>
+ <source>Unable to bind parameters</source>
+ <translation>無法繫結參數</translation>
</message>
<message>
- <source>Insert</source>
- <translation type="vanished">插入</translation>
+ <source>Parameter count mismatch</source>
+ <translation>參數計數不相符</translation>
</message>
<message>
- <source>Update</source>
- <translation type="vanished">更新</translation>
+ <source>No query</source>
+ <translation>沒有查詢</translation>
</message>
<message>
- <source>Save edits?</source>
- <translation type="vanished">要儲存編輯過的內容嗎?</translation>
+ <source>Unable to execute multiple statements at a time</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QSaveFile</name>
<message>
- <source>Cancel</source>
- <translation type="vanished">取消</translation>
+ <source>Existing file %1 is not writable</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Confirm</source>
- <translation type="vanished">確認</translation>
+ <source>Filename refers to a directory</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel your edits?</source>
- <translation type="vanished">要取消編輯嗎?</translation>
+ <source>Writing canceled by application</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>QSslSocket</name>
+ <name>QScrollBar</name>
<message>
- <source>Unable to write data: %1</source>
- <translation>無法寫入資料:%1</translation>
+ <source>Scroll here</source>
+ <translation>在此捲動</translation>
</message>
<message>
- <source>Error while reading: %1</source>
- <translation>讀取時發生錯誤:%1</translation>
+ <source>Left edge</source>
+ <translation>左邊緣</translation>
</message>
<message>
- <source>Error during SSL handshake: %1</source>
- <translation>SSL 同步時發生錯誤:%1</translation>
+ <source>Top</source>
+ <translation>上方</translation>
</message>
<message>
- <source>Error creating SSL context (%1)</source>
- <translation>建立 SSL 內文時發生錯誤(%1)</translation>
+ <source>Right edge</source>
+ <translation>右邊緣</translation>
</message>
<message>
- <source>Invalid or empty cipher list (%1)</source>
- <translation>不合法或空白的加密清單(%1)</translation>
+ <source>Bottom</source>
+ <translation>下方</translation>
</message>
<message>
- <source>Error creating SSL session, %1</source>
- <translation>建立 SSL 工作階段時發生錯誤:%1</translation>
+ <source>Page left</source>
+ <translation>左頁</translation>
</message>
<message>
- <source>Error creating SSL session: %1</source>
- <translation>建立 SSL 工作階段時發生錯誤:%1</translation>
+ <source>Page up</source>
+ <translation>上一頁</translation>
</message>
<message>
- <source>Cannot provide a certificate with no key, %1</source>
- <translation>沒有金鑰無法提供憑證:%1</translation>
+ <source>Page right</source>
+ <translation>右頁</translation>
</message>
<message>
- <source>Error loading local certificate, %1</source>
- <translation>載入本地憑證時發生錯誤:%1</translation>
+ <source>Page down</source>
+ <translation>下一頁</translation>
</message>
<message>
- <source>Error loading private key, %1</source>
- <translation>載入私鑰時發生錯誤:%1</translation>
+ <source>Scroll left</source>
+ <translation>向左捲動</translation>
</message>
<message>
- <source>Private key does not certificate public key, %1</source>
- <translation type="vanished">私密金鑰無法認證公開金鑰,%1</translation>
+ <source>Scroll up</source>
+ <translation>向上捲動</translation>
</message>
<message>
- <source>Private key do not certificate public key, %1</source>
- <translation type="obsolete">私鑰與公鑰不符:%1</translation>
+ <source>Scroll right</source>
+ <translation>向右捲動</translation>
</message>
<message>
- <source>Error when setting the elliptic curves (%1)</source>
- <translation type="unfinished"></translation>
+ <source>Scroll down</source>
+ <translation>向下捲動</translation>
</message>
+</context>
+<context>
+ <name>QSharedMemory</name>
<message>
- <source>unsupported protocol</source>
- <translation type="unfinished"></translation>
+ <source>%1: unable to set key on lock</source>
+ <translation>%1: 無法在鎖定時設定金鑰</translation>
</message>
<message>
- <source>Private key does not certify public key, %1</source>
- <translation type="unfinished"></translation>
+ <source>%1: create size is less then 0</source>
+ <translation>%1: 建立大小小於 0</translation>
</message>
<message>
- <source>OpenSSL version too old, need at least v1.0.2</source>
- <translation type="unfinished"></translation>
+ <source>%1: unable to lock</source>
+ <translation>%1: 無法鎖定</translation>
</message>
<message>
- <source>No error</source>
- <translation type="unfinished"></translation>
+ <source>%1: unable to unlock</source>
+ <translation>%1: 無法解鎖</translation>
</message>
<message>
- <source>The issuer certificate could not be found</source>
- <translation type="unfinished"></translation>
+ <source>%1: permission denied</source>
+ <translation>%1: 權限拒絕</translation>
</message>
<message>
- <source>The certificate signature could not be decrypted</source>
- <translation type="unfinished"></translation>
+ <source>%1: already exists</source>
+ <translation>%1: 已經存在</translation>
</message>
<message>
- <source>The public key in the certificate could not be read</source>
- <translation type="unfinished"></translation>
+ <source>%1: out of resources</source>
+ <translation>%1: 資源不足</translation>
</message>
<message>
- <source>The signature of the certificate is invalid</source>
- <translation type="unfinished"></translation>
+ <source>%1: unknown error %2</source>
+ <translation>%1: 未知錯誤 %2</translation>
</message>
<message>
- <source>The certificate is not yet valid</source>
- <translation type="unfinished"></translation>
+ <source>%1: key is empty</source>
+ <translation>%1: 空的金鑰</translation>
</message>
<message>
- <source>The certificate has expired</source>
+ <source>%1: ftok failed</source>
+ <translation>%1: ftok 失敗</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <translation>%1: 無法產生金鑰</translation>
+ </message>
+ <message>
+ <source>%1: system-imposed size restrictions</source>
+ <translation>%1: 系統佔用大小限制</translation>
+ </message>
+ <message>
+ <source>%1: not attached</source>
+ <translation>%1: 未附加</translation>
+ </message>
+ <message>
+ <source>%1: bad name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The certificate's notBefore field contains an invalid time</source>
+ <source>%1: UNIX key file doesn't exist</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The certificate's notAfter field contains an invalid time</source>
+ <source>%1: doesn't exist</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The certificate is self-signed, and untrusted</source>
+ <source>%1: invalid size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
+ <source>%1: key error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The issuer certificate of a locally looked up certificate could not be found</source>
+ <source>%1: size query failed</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QShortcut</name>
<message>
- <source>No certificates could be verified</source>
- <translation type="unfinished"></translation>
+ <source>Space</source>
+ <extracomment>This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment>
+ <translation>空格</translation>
</message>
<message>
- <source>One of the CA certificates is invalid</source>
- <translation type="unfinished"></translation>
+ <source>Esc</source>
+ <translation>Esc</translation>
</message>
<message>
- <source>The basicConstraints path length parameter has been exceeded</source>
- <translation type="unfinished"></translation>
+ <source>Tab</source>
+ <translation>Tab</translation>
</message>
<message>
- <source>The supplied certificate is unsuitable for this purpose</source>
- <translation type="unfinished"></translation>
+ <source>Backtab</source>
+ <translation>Backtab</translation>
</message>
<message>
- <source>The root CA certificate is not trusted for this purpose</source>
- <translation type="unfinished"></translation>
+ <source>Backspace</source>
+ <translation>Backspace</translation>
</message>
<message>
- <source>The root CA certificate is marked to reject the specified purpose</source>
- <translation type="unfinished"></translation>
+ <source>Return</source>
+ <translation>Enter</translation>
</message>
<message>
- <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
- <translation type="unfinished"></translation>
+ <source>Enter</source>
+ <translation>Enter</translation>
</message>
<message>
- <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source>
- <translation type="unfinished"></translation>
+ <source>Ins</source>
+ <translation>Ins</translation>
</message>
<message>
- <source>The peer did not present any certificate</source>
- <translation type="unfinished"></translation>
+ <source>Del</source>
+ <translation>Del</translation>
</message>
<message>
- <source>The host name did not match any of the valid hosts for this certificate</source>
- <translation type="unfinished"></translation>
+ <source>Pause</source>
+ <translation>Pause</translation>
</message>
<message>
- <source>The peer certificate is blacklisted</source>
- <translation type="unfinished"></translation>
+ <source>Print</source>
+ <translation>列印</translation>
</message>
<message>
- <source>Unknown error</source>
- <translation type="unfinished">未知的錯誤</translation>
+ <source>SysReq</source>
+ <translation>SysReq</translation>
</message>
<message>
- <source>The TLS/SSL connection has been closed</source>
- <translation type="unfinished"></translation>
+ <source>Home</source>
+ <translation>首頁</translation>
</message>
<message>
- <source>Unable to init SSL Context: %1</source>
- <translation type="unfinished"></translation>
+ <source>End</source>
+ <translation>End</translation>
</message>
<message>
- <source>Unable to decrypt data: %1</source>
- <translation type="unfinished"></translation>
+ <source>Left</source>
+ <translation>←</translation>
</message>
-</context>
-<context>
- <name>QStandardPaths</name>
<message>
- <source>Desktop</source>
- <translation type="unfinished"></translation>
+ <source>Up</source>
+ <translation>↑</translation>
</message>
<message>
- <source>Documents</source>
- <translation type="unfinished"></translation>
+ <source>Right</source>
+ <translation>→</translation>
</message>
<message>
- <source>Fonts</source>
- <translation type="unfinished">字型</translation>
+ <source>Down</source>
+ <translation>↓</translation>
</message>
<message>
- <source>Applications</source>
- <translation type="unfinished"></translation>
+ <source>PgUp</source>
+ <translation>PgUp</translation>
</message>
<message>
- <source>Music</source>
- <translation type="unfinished">音樂</translation>
+ <source>PgDown</source>
+ <translation>PgDown</translation>
</message>
<message>
- <source>Movies</source>
- <translation type="unfinished"></translation>
+ <source>CapsLock</source>
+ <translation>大寫鎖定</translation>
</message>
<message>
- <source>Pictures</source>
- <translation type="unfinished"></translation>
+ <source>NumLock</source>
+ <translation>數字鎖</translation>
</message>
<message>
- <source>Temporary Directory</source>
- <translation type="unfinished"></translation>
+ <source>ScrollLock</source>
+ <translation>ScrollLock</translation>
</message>
<message>
- <source>Home</source>
- <translation type="unfinished"></translation>
+ <source>Menu</source>
+ <translation>功能表</translation>
</message>
<message>
- <source>Cache</source>
- <translation type="unfinished"></translation>
+ <source>Help</source>
+ <translation>說明</translation>
</message>
<message>
- <source>Shared Data</source>
- <translation type="unfinished"></translation>
+ <source>Back</source>
+ <translation>上一步</translation>
</message>
<message>
- <source>Runtime</source>
- <translation type="unfinished"></translation>
+ <source>Forward</source>
+ <translation>下一步</translation>
</message>
<message>
- <source>Configuration</source>
- <translation type="unfinished"></translation>
+ <source>Stop</source>
+ <translation>停止</translation>
</message>
<message>
- <source>Shared Configuration</source>
- <translation type="unfinished"></translation>
+ <source>Refresh</source>
+ <translation>重新整理</translation>
</message>
<message>
- <source>Shared Cache</source>
- <translation type="unfinished"></translation>
+ <source>Volume Down</source>
+ <translation>降低音量</translation>
</message>
<message>
- <source>Download</source>
- <translation type="unfinished"></translation>
+ <source>Volume Mute</source>
+ <translation>靜音</translation>
</message>
<message>
- <source>Application Data</source>
- <translation type="unfinished"></translation>
+ <source>Volume Up</source>
+ <translation>提高音量</translation>
</message>
<message>
- <source>Application Configuration</source>
- <translation type="unfinished"></translation>
+ <source>Bass Boost</source>
+ <translation>低音增強</translation>
</message>
-</context>
-<context>
- <name>QStateMachine</name>
<message>
- <source>Missing initial state in compound state '%1'</source>
- <translation type="unfinished"></translation>
+ <source>Bass Up</source>
+ <translation>增加低音</translation>
</message>
<message>
- <source>Missing default state in history state '%1'</source>
- <translation type="unfinished"></translation>
+ <source>Bass Down</source>
+ <translation>降低低音</translation>
</message>
<message>
- <source>No common ancestor for targets and source of transition from state '%1'</source>
- <translation type="unfinished"></translation>
+ <source>Treble Up</source>
+ <translation>增加高音</translation>
</message>
<message>
- <source>Unknown error</source>
- <translation type="unfinished">未知的錯誤</translation>
+ <source>Treble Down</source>
+ <translation>降低高音</translation>
</message>
-</context>
-<context>
- <name>QSystemSemaphore</name>
<message>
- <source>%1: permission denied</source>
- <translation>%1:存取被拒</translation>
+ <source>Media Play</source>
+ <translation>播放媒體</translation>
</message>
<message>
- <source>%1: already exists</source>
- <translation>%1:已存在</translation>
+ <source>Media Stop</source>
+ <translation>停止媒體</translation>
</message>
<message>
- <source>%1: does not exist</source>
- <translation>%1:不存在</translation>
+ <source>Media Previous</source>
+ <translation>上一個媒體</translation>
</message>
<message>
- <source>%1: out of resources</source>
- <translation>%1:資源不足</translation>
+ <source>Media Next</source>
+ <translation>下一個媒體</translation>
</message>
<message>
- <source>%1: unknown error %2</source>
- <translation>%1:未知的錯誤 %2</translation>
+ <source>Media Record</source>
+ <translation>媒體錄製</translation>
</message>
-</context>
-<context>
- <name>QTDSDriver</name>
<message>
- <source>Unable to open connection</source>
- <translation>無法開啟連線</translation>
+ <source>Favorites</source>
+ <translation>最愛</translation>
</message>
<message>
- <source>Unable to use database</source>
- <translation>無法使用資料庫</translation>
+ <source>Search</source>
+ <translation>搜尋</translation>
</message>
-</context>
-<context>
- <name>QTabBar</name>
<message>
- <source>Scroll Left</source>
- <translation>往左捲軸</translation>
+ <source>Standby</source>
+ <translation>待命</translation>
</message>
<message>
- <source>Scroll Right</source>
- <translation>往右捲軸</translation>
+ <source>Open URL</source>
+ <translation>開啟 URL</translation>
</message>
-</context>
-<context>
- <name>QTcpServer</name>
<message>
- <source>Socket operation unsupported</source>
- <translation type="obsolete">未支援的 socket 操作</translation>
+ <source>Launch Mail</source>
+ <translation>啟動郵件</translation>
</message>
<message>
- <source>Operation on socket is not supported</source>
- <translation>Socket 的操作未被支援</translation>
+ <source>Launch Media</source>
+ <translation>啟動媒體</translation>
</message>
-</context>
-<context>
- <name>QTextControl</name>
<message>
- <source>&Undo</source>
- <translation type="vanished">復原(&U)</translation>
+ <source>Launch (0)</source>
+ <translation>啟動 (0)</translation>
</message>
<message>
- <source>&Redo</source>
- <translation type="vanished">重做(&R)</translation>
+ <source>Launch (1)</source>
+ <translation>啟動 (1)</translation>
</message>
<message>
- <source>Cu&t</source>
- <translation type="vanished">剪下(&T)</translation>
+ <source>Launch (2)</source>
+ <translation>啟動 (2)</translation>
</message>
<message>
- <source>&Copy</source>
- <translation type="vanished">複製(&C)</translation>
+ <source>Launch (3)</source>
+ <translation>啟動 (3)</translation>
</message>
<message>
- <source>Copy &Link Location</source>
- <translation type="vanished">複製連結位址(&L)</translation>
+ <source>Launch (4)</source>
+ <translation>啟動 (4)</translation>
</message>
<message>
- <source>&Paste</source>
- <translation type="vanished">貼上(&P)</translation>
+ <source>Launch (5)</source>
+ <translation>啟動 (5)</translation>
</message>
<message>
- <source>Delete</source>
- <translation type="vanished">刪除</translation>
+ <source>Launch (6)</source>
+ <translation>啟動 (6)</translation>
</message>
<message>
- <source>Select All</source>
- <translation type="vanished">全部選擇</translation>
+ <source>Launch (7)</source>
+ <translation>啟動 (7)</translation>
</message>
-</context>
-<context>
- <name>QToolButton</name>
<message>
- <source>Press</source>
- <translation type="vanished">按下</translation>
+ <source>Launch (8)</source>
+ <translation>啟動 (8)</translation>
</message>
<message>
- <source>Open</source>
- <translation type="vanished">開啟</translation>
+ <source>Launch (9)</source>
+ <translation>啟動 (9)</translation>
</message>
-</context>
-<context>
- <name>QUdpSocket</name>
<message>
- <source>This platform does not support IPv6</source>
- <translation type="vanished">此平台不支援 IPv6</translation>
+ <source>Launch (A)</source>
+ <translation>啟動 (A)</translation>
</message>
-</context>
-<context>
- <name>QUndoGroup</name>
<message>
- <source>Undo</source>
- <translation type="vanished">復原</translation>
+ <source>Launch (B)</source>
+ <translation>啟動 (B)</translation>
</message>
<message>
- <source>Redo</source>
- <translation type="vanished">重做</translation>
+ <source>Launch (C)</source>
+ <translation>啟動 (C)</translation>
</message>
<message>
- <source>Undo %1</source>
- <translation type="unfinished"></translation>
+ <source>Launch (D)</source>
+ <translation>啟動 (D)</translation>
</message>
<message>
- <source>Undo</source>
- <comment>Default text for undo action</comment>
- <translation type="unfinished">復原</translation>
+ <source>Launch (E)</source>
+ <translation>啟動 (E)</translation>
</message>
<message>
- <source>Redo %1</source>
- <translation type="unfinished"></translation>
+ <source>Launch (F)</source>
+ <translation>啟動 (F)</translation>
</message>
<message>
- <source>Redo</source>
- <comment>Default text for redo action</comment>
- <translation type="unfinished">重做</translation>
+ <source>Print Screen</source>
+ <translation>Print Screen</translation>
</message>
-</context>
-<context>
- <name>QUndoModel</name>
<message>
- <source><empty></source>
- <translation><空白></translation>
+ <source>Page Up</source>
+ <translation>上一頁</translation>
</message>
-</context>
-<context>
- <name>QUndoStack</name>
<message>
- <source>Undo</source>
- <translation type="vanished">復原</translation>
+ <source>Page Down</source>
+ <translation>下一頁</translation>
</message>
<message>
- <source>Redo</source>
- <translation type="vanished">重做</translation>
+ <source>Caps Lock</source>
+ <translation>大寫鎖定</translation>
</message>
<message>
- <source>Undo %1</source>
- <translation type="unfinished"></translation>
+ <source>Num Lock</source>
+ <translation>數字鎖</translation>
</message>
<message>
- <source>Undo</source>
- <comment>Default text for undo action</comment>
- <translation type="unfinished">復原</translation>
+ <source>Number Lock</source>
+ <translation>數字鎖</translation>
</message>
<message>
- <source>Redo %1</source>
- <translation type="unfinished"></translation>
+ <source>Scroll Lock</source>
+ <translation>Scroll Lock</translation>
</message>
<message>
- <source>Redo</source>
- <comment>Default text for redo action</comment>
- <translation type="unfinished">重做</translation>
+ <source>Insert</source>
+ <translation>插入</translation>
</message>
-</context>
-<context>
- <name>QUnicodeControlCharacterMenu</name>
<message>
- <source>LRM Left-to-right mark</source>
- <translation>LRM 左到右標記</translation>
+ <source>Delete</source>
+ <translation>刪除</translation>
</message>
<message>
- <source>RLM Right-to-left mark</source>
- <translation>RLM 右到左標記</translation>
+ <source>Escape</source>
+ <translation>Escape</translation>
</message>
<message>
- <source>ZWJ Zero width joiner</source>
- <translation>ZWJ 零寬度連接器</translation>
+ <source>System Request</source>
+ <translation>系統需求</translation>
</message>
<message>
- <source>ZWNJ Zero width non-joiner</source>
- <translation>ZWNJ 零寬度非連接器</translation>
+ <source>Select</source>
+ <translation>選取</translation>
</message>
<message>
- <source>ZWSP Zero width space</source>
- <translation>ZWSP 零寬度空白</translation>
+ <source>Yes</source>
+ <translation>是</translation>
</message>
<message>
- <source>LRE Start of left-to-right embedding</source>
- <translation>LRE 左到右嵌入起點</translation>
+ <source>No</source>
+ <translation>否</translation>
</message>
<message>
- <source>RLE Start of right-to-left embedding</source>
- <translation>RLE 右到左嵌入起點</translation>
+ <source>Context1</source>
+ <translation>Context1</translation>
</message>
<message>
- <source>LRO Start of left-to-right override</source>
- <translation>LRO 左到右覆寫起點</translation>
+ <source>Context2</source>
+ <translation>Context2</translation>
</message>
<message>
- <source>RLO Start of right-to-left override</source>
- <translation>RLO 右到左覆寫起點</translation>
+ <source>Context3</source>
+ <translation>Context3</translation>
</message>
<message>
- <source>PDF Pop directional formatting</source>
- <translation>PDF 彈出方向格式</translation>
+ <source>Context4</source>
+ <translation>Context4</translation>
</message>
<message>
- <source>Insert Unicode control character</source>
- <translation>插入萬國碼控制字元</translation>
+ <source>Call</source>
+ <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment>
+ <translation>呼叫</translation>
</message>
<message>
- <source>LRI Left-to-right isolate</source>
- <translation type="unfinished"></translation>
+ <source>Hangup</source>
+ <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment>
+ <translation>掛斷</translation>
</message>
<message>
- <source>RLI Right-to-left isolate</source>
- <translation type="unfinished"></translation>
+ <source>Flip</source>
+ <translation>翻轉</translation>
</message>
<message>
- <source>FSI First strong isolate</source>
- <translation type="unfinished"></translation>
+ <source>Ctrl</source>
+ <translation>Ctrl</translation>
</message>
<message>
- <source>PDI Pop directional isolate</source>
- <translation type="unfinished"></translation>
+ <source>Shift</source>
+ <translation>Shift</translation>
</message>
-</context>
-<context>
- <name>QWebFrame</name>
<message>
- <source>Request cancelled</source>
- <translation type="vanished">請求已取消</translation>
+ <source>Alt</source>
+ <translation>Alt</translation>
</message>
<message>
- <source>Request blocked</source>
- <translation type="vanished">請求已被阻擋</translation>
+ <source>Meta</source>
+ <translation>Meta</translation>
</message>
<message>
- <source>Cannot show URL</source>
- <translation type="vanished">無法顯示網址</translation>
+ <source>+</source>
+ <translation>+</translation>
</message>
<message>
- <source>Frame load interruped by policy change</source>
- <translation type="vanished">影像載入因政策變更而中斷</translation>
+ <source>F%1</source>
+ <translation>F%1</translation>
</message>
<message>
- <source>Cannot show mimetype</source>
- <translation type="vanished">無法顯示 MIME 型態</translation>
+ <source>Home Page</source>
+ <translation>首頁</translation>
</message>
<message>
- <source>File does not exist</source>
- <translation type="vanished">檔案不存在</translation>
+ <source>Media Pause</source>
+ <extracomment>Media player pause button</extracomment>
+ <translation>媒體暫停</translation>
</message>
-</context>
-<context>
- <name>QWebPage</name>
<message>
- <source>Bad HTTP request</source>
- <translation type="vanished">不良的 HTTP 請求</translation>
+ <source>Toggle Media Play/Pause</source>
+ <extracomment>Media player button to toggle between playing and paused</extracomment>
+ <translation>切換媒體播放/暫停</translation>
</message>
<message>
- <source>Submit</source>
- <comment>default label for Submit buttons in forms on web pages</comment>
- <translation type="vanished">提交</translation>
+ <source>Monitor Brightness Up</source>
+ <translation>螢幕亮度增加</translation>
</message>
<message>
- <source>Submit</source>
- <comment>Submit (input element) alt text for <input> elements with no alt, title, or value</comment>
- <translation type="vanished">提交</translation>
+ <source>Monitor Brightness Down</source>
+ <translation>螢幕亮度降低</translation>
</message>
<message>
- <source>Reset</source>
- <comment>default label for Reset buttons in forms on web pages</comment>
- <translation type="vanished">重置</translation>
+ <source>Keyboard Light On/Off</source>
+ <translation>鍵盤燈開啟/關閉</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="vanished">這是可搜尋的索引。請輸入關鍵字: </translation>
+ <source>Keyboard Brightness Up</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Choose File</source>
- <comment>title for file button used in HTML forms</comment>
- <translation type="vanished">選擇檔案</translation>
+ <source>Keyboard Brightness Down</source>
+ <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="vanished">未選取任何檔案</translation>
+ <source>Power Off</source>
+ <translation>關機</translation>
</message>
<message>
- <source>Open in New Window</source>
- <comment>Open in New Window context menu item</comment>
- <translation type="vanished">在新視窗開啟</translation>
+ <source>Wake Up</source>
+ <translation>喚醒</translation>
</message>
<message>
- <source>Save Link...</source>
- <comment>Download Linked File context menu item</comment>
- <translation type="vanished">儲存連結...</translation>
+ <source>Eject</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Copy Link</source>
- <comment>Copy Link context menu item</comment>
- <translation type="vanished">複製連結</translation>
+ <source>Screensaver</source>
+ <translation>螢幕保護程式</translation>
</message>
<message>
- <source>Open Image</source>
- <comment>Open Image in New Window context menu item</comment>
- <translation type="vanished">開啟影像</translation>
+ <source>WWW</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Save Image</source>
- <comment>Download Image context menu item</comment>
- <translation type="vanished">儲存影像</translation>
+ <source>Sleep</source>
+ <translation>睡眠</translation>
</message>
<message>
- <source>Copy Image</source>
- <comment>Copy Link context menu item</comment>
- <translation type="vanished">複製影像</translation>
+ <source>LightBulb</source>
+ <translation>LightBulb</translation>
</message>
<message>
- <source>Open Frame</source>
- <comment>Open Frame in New Window context menu item</comment>
- <translation type="vanished">開啟框架</translation>
+ <source>Shop</source>
+ <translation>商店</translation>
</message>
<message>
- <source>Copy</source>
- <comment>Copy context menu item</comment>
- <translation type="vanished">複製</translation>
+ <source>History</source>
+ <translation>歷程記錄</translation>
</message>
<message>
- <source>Go Back</source>
- <comment>Back context menu item</comment>
- <translation type="vanished">往回</translation>
+ <source>Add Favorite</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Go Forward</source>
- <comment>Forward context menu item</comment>
- <translation type="vanished">往前</translation>
+ <source>Hot Links</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Stop</source>
- <comment>Stop context menu item</comment>
- <translation type="vanished">停止</translation>
+ <source>Adjust Brightness</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Reload</source>
- <comment>Reload context menu item</comment>
- <translation type="vanished">重新載入</translation>
+ <source>Finance</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cut</source>
- <comment>Cut context menu item</comment>
- <translation type="vanished">剪下</translation>
+ <source>Community</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Paste</source>
- <comment>Paste context menu item</comment>
- <translation type="vanished">貼上</translation>
+ <source>Media Rewind</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No Guesses Found</source>
- <comment>No Guesses Found context menu item</comment>
- <translation type="vanished">找不到可能的內容</translation>
+ <source>Back Forward</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ignore</source>
- <comment>Ignore Spelling context menu item</comment>
- <translation type="vanished">忽略</translation>
+ <source>Application Left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Add To Dictionary</source>
- <comment>Learn Spelling context menu item</comment>
- <translation type="vanished">新增到字典</translation>
+ <source>Application Right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Search The Web</source>
- <comment>Search The Web context menu item</comment>
- <translation type="vanished">搜尋站台</translation>
+ <source>Book</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Look Up In Dictionary</source>
- <comment>Look Up in Dictionary context menu item</comment>
- <translation type="vanished">在字典裡搜尋</translation>
+ <source>CD</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Link</source>
- <comment>Open Link context menu item</comment>
- <translation type="vanished">開啟連結</translation>
+ <source>Calculator</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ignore</source>
- <comment>Ignore Grammar context menu item</comment>
- <translation type="vanished">忽略</translation>
+ <source>Clear</source>
+ <translation>清除</translation>
</message>
<message>
- <source>Spelling</source>
- <comment>Spelling and Grammar context sub-menu item</comment>
- <translation type="vanished">拼字</translation>
+ <source>Clear Grab</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Show Spelling and Grammar</source>
- <comment>menu item title</comment>
- <translation type="vanished">顯示拼字與文法</translation>
+ <source>Close</source>
+ <translation>關閉</translation>
</message>
<message>
- <source>Hide Spelling and Grammar</source>
- <comment>menu item title</comment>
- <translation type="vanished">隱藏拼字與文法</translation>
+ <source>Copy</source>
+ <translation>複製</translation>
</message>
<message>
- <source>Check Spelling</source>
- <comment>Check spelling context menu item</comment>
- <translation type="vanished">檢查拼字</translation>
+ <source>Cut</source>
+ <translation>剪下</translation>
</message>
<message>
- <source>Check Spelling While Typing</source>
- <comment>Check spelling while typing context menu item</comment>
- <translation type="vanished">打字時立即檢查拼字</translation>
+ <source>Display</source>
+ <translation>顯示</translation>
</message>
<message>
- <source>Check Grammar With Spelling</source>
- <comment>Check grammar with spelling context menu item</comment>
- <translation type="vanished">檢查拼字與文法</translation>
+ <source>DOS</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Fonts</source>
- <comment>Font context sub-menu item</comment>
- <translation type="vanished">字型</translation>
+ <source>Documents</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Bold</source>
- <comment>Bold context menu item</comment>
- <translation type="vanished">粗體</translation>
+ <source>Spreadsheet</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Italic</source>
- <comment>Italic context menu item</comment>
- <translation type="vanished">斜體</translation>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Underline</source>
- <comment>Underline context menu item</comment>
- <translation type="vanished">底線</translation>
+ <source>Game</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Outline</source>
- <comment>Outline context menu item</comment>
- <translation type="vanished">外框線</translation>
+ <source>Go</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Direction</source>
- <comment>Writing direction context sub-menu item</comment>
- <translation type="vanished">方向</translation>
+ <source>iTouch</source>
+ <translation>iTouch</translation>
</message>
<message>
- <source>Text Direction</source>
- <comment>Text direction context sub-menu item</comment>
- <translation type="vanished">文字方向</translation>
+ <source>Logoff</source>
+ <translation>登出</translation>
</message>
<message>
- <source>Default</source>
- <comment>Default writing direction context menu item</comment>
- <translation type="vanished">預設</translation>
+ <source>Market</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LTR</source>
- <comment>Left to Right context menu item</comment>
- <translation type="vanished">左到右</translation>
+ <source>Meeting</source>
+ <translation>會議</translation>
</message>
<message>
- <source>RTL</source>
- <comment>Right to Left context menu item</comment>
- <translation type="vanished">右到左</translation>
+ <source>Keyboard Menu</source>
+ <translation>鍵盤功能表</translation>
</message>
<message>
- <source>Inspect</source>
- <comment>Inspect Element context menu item</comment>
- <translation type="vanished">查驗</translation>
+ <source>Menu PB</source>
+ <translation>功能表 PB</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="vanished">沒有最近的搜尋</translation>
+ <source>My Sites</source>
+ <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="vanished">最近的搜尋</translation>
+ <source>News</source>
+ <translation>新增</translation>
</message>
<message>
- <source>Clear recent searches</source>
- <comment>menu item in Recent Searches menu that empties menu's contents</comment>
- <translation type="vanished">清除最近的搜尋</translation>
+ <source>Home Office</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unknown</source>
- <comment>Unknown filesize FTP directory listing item</comment>
- <translation type="vanished">未知</translation>
+ <source>Option</source>
+ <translation>選項</translation>
</message>
<message>
- <source>%1 (%2x%3 pixels)</source>
- <comment>Title string for images</comment>
- <translation type="vanished">%1(%2x%3 像素)</translation>
+ <source>Paste</source>
+ <translation>貼上</translation>
</message>
<message>
- <source>Web Inspector - %2</source>
- <translation type="vanished">網站查驗器─%2</translation>
+ <source>Phone</source>
+ <translation>電話</translation>
</message>
<message>
- <source>Scroll here</source>
- <translation type="vanished">在此捲軸</translation>
+ <source>Reply</source>
+ <translation>回覆</translation>
</message>
<message>
- <source>Left edge</source>
- <translation type="vanished">左邊緣</translation>
+ <source>Reload</source>
+ <translation>重新載入</translation>
</message>
<message>
- <source>Top</source>
- <translation type="vanished">頂端</translation>
+ <source>Rotate Windows</source>
+ <translation>旋轉視窗</translation>
</message>
<message>
- <source>Right edge</source>
- <translation type="vanished">右邊緣</translation>
+ <source>Rotation PB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Bottom</source>
- <translation type="vanished">底端</translation>
+ <source>Rotation KB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Page left</source>
- <translation type="vanished">頁面左方</translation>
+ <source>Save</source>
+ <translation>儲存</translation>
</message>
<message>
- <source>Page up</source>
- <translation type="vanished">頁面上方</translation>
+ <source>Send</source>
+ <translation>傳送</translation>
</message>
<message>
- <source>Page right</source>
- <translation type="vanished">頁面右方</translation>
+ <source>Spellchecker</source>
+ <translation>拼字檢查</translation>
</message>
<message>
- <source>Page down</source>
- <translation type="vanished">頁面下方</translation>
+ <source>Split Screen</source>
+ <translation>分割畫面</translation>
</message>
<message>
- <source>Scroll left</source>
- <translation type="vanished">往左捲軸</translation>
+ <source>Support</source>
+ <translation>技術支援</translation>
</message>
<message>
- <source>Scroll up</source>
- <translation type="vanished">往上捲軸</translation>
+ <source>Task Panel</source>
+ <translation>工作面板</translation>
</message>
<message>
- <source>Scroll right</source>
- <translation type="vanished">往右捲軸</translation>
+ <source>Terminal</source>
+ <translation>終端</translation>
</message>
<message>
- <source>Scroll down</source>
- <translation type="vanished">往下捲軸</translation>
+ <source>Tools</source>
+ <translation>工具</translation>
</message>
- <message numerus="yes">
- <source>%n file(s)</source>
- <comment>number of chosen file</comment>
- <translation type="vanished">
- <numerusform>%n 個檔案</numerusform>
- </translation>
+ <message>
+ <source>Travel</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>JavaScript Alert - %1</source>
- <translation type="vanished">JavaScript 警告 ─ %1</translation>
+ <source>Video</source>
+ <translation>視訊</translation>
</message>
<message>
- <source>JavaScript Confirm - %1</source>
- <translation type="vanished">JavaScript 確認 ─ %1</translation>
+ <source>Word Processor</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>JavaScript Prompt - %1</source>
- <translation type="vanished">JavaScript 提示 ─ %1</translation>
+ <source>XFer</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move the cursor to the next character</source>
- <translation type="vanished">移動游標到下一個字元</translation>
+ <source>Zoom In</source>
+ <translation>放大</translation>
</message>
<message>
- <source>Move the cursor to the previous character</source>
- <translation type="vanished">移動游標到前一個字元</translation>
+ <source>Zoom Out</source>
+ <translation>縮小</translation>
</message>
<message>
- <source>Move the cursor to the next word</source>
- <translation type="vanished">移動游標到下一個單字</translation>
+ <source>Away</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move the cursor to the previous word</source>
- <translation type="vanished">移動游標到前一個單字</translation>
+ <source>Messenger</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move the cursor to the next line</source>
- <translation type="vanished">移動游標到下一行</translation>
+ <source>WebCam</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move the cursor to the previous line</source>
- <translation type="vanished">移動游標到前一行</translation>
+ <source>Mail Forward</source>
+ <translation>郵件轉寄</translation>
</message>
<message>
- <source>Move the cursor to the start of the line</source>
- <translation type="vanished">移動游標到這一行的起頭</translation>
+ <source>Pictures</source>
+ <translation>照片</translation>
</message>
<message>
- <source>Move the cursor to the end of the line</source>
- <translation type="vanished">移動游標到這一行的結尾</translation>
+ <source>Music</source>
+ <translation>音樂</translation>
</message>
<message>
- <source>Move the cursor to the start of the block</source>
- <translation type="vanished">移動游標到這一個區塊的起頭</translation>
+ <source>Battery</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move the cursor to the end of the block</source>
- <translation type="vanished">移動游標到這一個區塊的結尾</translation>
+ <source>Bluetooth</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move the cursor to the start of the document</source>
- <translation type="vanished">移動游標到這一個文件的起頭</translation>
+ <source>Wireless</source>
+ <translation>無線</translation>
</message>
<message>
- <source>Move the cursor to the end of the document</source>
- <translation type="vanished">移動游標到這一個文件的結尾</translation>
+ <source>Ultra Wide Band</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select to the next character</source>
- <translation type="vanished">選擇到下一個字元</translation>
+ <source>Media Fast Forward</source>
+ <translation>媒體快轉</translation>
</message>
<message>
- <source>Select to the previous character</source>
- <translation type="vanished">選擇到前一個字元</translation>
+ <source>Audio Repeat</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select to the next word</source>
- <translation type="vanished">選擇到下一個單字</translation>
+ <source>Audio Random Play</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select to the previous word</source>
- <translation type="vanished">選擇到前一個單字</translation>
+ <source>Subtitle</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select to the next line</source>
- <translation type="vanished">選擇到下一行</translation>
+ <source>Audio Cycle Track</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select to the previous line</source>
- <translation type="vanished">選擇到前一行</translation>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select to the start of the line</source>
- <translation type="vanished">選擇到這一行的起頭</translation>
+ <source>Hibernate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select to the end of the line</source>
- <translation type="vanished">選擇到這一行的結尾</translation>
+ <source>View</source>
+ <translation>檢視</translation>
</message>
<message>
- <source>Select to the start of the block</source>
- <translation type="vanished">選擇到這一個區塊的起頭</translation>
+ <source>Top Menu</source>
+ <translation>上功能表</translation>
</message>
<message>
- <source>Select to the end of the block</source>
- <translation type="vanished">選擇到這一個區塊的結尾</translation>
+ <source>Power Down</source>
+ <translation>電源關閉</translation>
</message>
<message>
- <source>Select to the start of the document</source>
- <translation type="vanished">選擇到這一個文件的起頭</translation>
+ <source>Suspend</source>
+ <translation>暫停</translation>
</message>
<message>
- <source>Select to the end of the document</source>
- <translation type="vanished">選擇到這一個文件的結尾</translation>
+ <source>Microphone Mute</source>
+ <translation>麥克風靜音</translation>
</message>
<message>
- <source>Delete to the start of the word</source>
- <translation type="vanished">刪除到此單字的起頭</translation>
+ <source>Red</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Delete to the end of the word</source>
- <translation type="vanished">刪除到此單字的結尾</translation>
+ <source>Green</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWhatsThisAction</name>
<message>
- <source>What's This?</source>
- <translation>這是什麼?</translation>
+ <source>Yellow</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidget</name>
<message>
- <source>*</source>
- <translation>+</translation>
+ <source>Blue</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidgetTextControl</name>
<message>
- <source>&Undo</source>
- <translation type="unfinished">復原(&U)</translation>
+ <source>Channel Up</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Redo</source>
- <translation type="unfinished">重做(&R)</translation>
+ <source>Channel Down</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cu&t</source>
- <translation type="unfinished">剪下(&T)</translation>
+ <source>Guide</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Copy</source>
- <translation type="unfinished">複製(&C)</translation>
+ <source>Info</source>
+ <translation>資訊</translation>
</message>
<message>
- <source>Copy &Link Location</source>
- <translation type="unfinished">複製連結位址(&L)</translation>
+ <source>Settings</source>
+ <translation>設定</translation>
</message>
<message>
- <source>&Paste</source>
- <translation type="unfinished">貼上(&P)</translation>
+ <source>Microphone Volume Up</source>
+ <translation>麥克風提高音量</translation>
</message>
<message>
- <source>Delete</source>
- <translation type="unfinished">刪除</translation>
+ <source>Microphone Volume Down</source>
+ <translation>麥克風降低音量</translation>
</message>
<message>
- <source>Select All</source>
- <translation type="unfinished">全部選擇</translation>
+ <source>New</source>
+ <translation>新增</translation>
</message>
-</context>
-<context>
- <name>QWindowsDirect2DIntegration</name>
<message>
- <source>Qt cannot load the direct2d platform plugin because the Direct2D version on this system is too old. The minimum system requirement for this platform plugin is Windows 7 SP1 with Platform Update.
-
-The minimum Direct2D version required is %1.%2.%3.%4. The Direct2D version on this system is %5.%6.%7.%8.</source>
- <translation type="unfinished"></translation>
+ <source>Open</source>
+ <translation>開啟</translation>
</message>
<message>
- <source>Cannot load direct2d platform plugin</source>
+ <source>Find</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWizard</name>
- <message>
- <source>Go Back</source>
- <translation>往回</translation>
- </message>
<message>
- <source>Continue</source>
- <translation>繼續</translation>
+ <source>Undo</source>
+ <translation>復原</translation>
</message>
<message>
- <source>Commit</source>
- <translation>提交</translation>
+ <source>Redo</source>
+ <translation>重作</translation>
</message>
<message>
- <source>Done</source>
- <translation>完成</translation>
+ <source>Toggle Call/Hangup</source>
+ <extracomment>Button that will hang up if we're in call, or make a call if we're not.</extracomment>
+ <translation>切換撥號/掛斷</translation>
</message>
<message>
- <source>Quit</source>
- <translation type="obsolete">離開</translation>
+ <source>Voice Dial</source>
+ <extracomment>Button to trigger voice dialing</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Help</source>
- <translation>說明</translation>
+ <source>Last Number Redial</source>
+ <extracomment>Button to redial the last number called</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>< &Back</source>
- <translation><返回(&B)</translation>
+ <source>Camera Shutter</source>
+ <extracomment>Button to trigger the camera shutter (take a picture)</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Finish</source>
- <translation>完成(&F)</translation>
+ <source>Camera Focus</source>
+ <extracomment>Button to focus the camera</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
- <translation>取消</translation>
+ <source>Kanji</source>
+ <translation>Kanji</translation>
</message>
<message>
- <source>&Help</source>
- <translation>說明(&H)</translation>
+ <source>Muhenkan</source>
+ <translation>Muhenkan</translation>
</message>
<message>
- <source>&Next</source>
- <translation>下一個(&N)</translation>
+ <source>Henkan</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Next ></source>
- <translation>下一個(&N)></translation>
+ <source>Romaji</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWorkspace</name>
<message>
- <source>&Restore</source>
- <translation type="vanished">回復(&R)</translation>
+ <source>Hiragana</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Move</source>
- <translation type="vanished">移動(&M)</translation>
+ <source>Katakana</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Size</source>
- <translation type="vanished">大小(&S)</translation>
+ <source>Hiragana Katakana</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mi&nimize</source>
- <translation type="vanished">最小化(&N)</translation>
+ <source>Zenkaku</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ma&ximize</source>
- <translation type="vanished">最大化(&X)</translation>
+ <source>Hankaku</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Close</source>
- <translation type="vanished">關閉(&C)</translation>
+ <source>Zenkaku Hankaku</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Stay on &Top</source>
- <translation type="vanished">留在頂端(&T)</translation>
+ <source>Touroku</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sh&ade</source>
- <translation type="vanished">遮蔽(&A)</translation>
+ <source>Massyo</source>
+ <translation>Massyo</translation>
</message>
<message>
- <source>%1 - [%2]</source>
- <translation type="vanished">%1 - [%2]</translation>
+ <source>Kana Lock</source>
+ <translation>Kana Lock</translation>
</message>
<message>
- <source>Minimize</source>
- <translation type="vanished">最小化</translation>
+ <source>Kana Shift</source>
+ <translation>Kana Shift</translation>
</message>
<message>
- <source>Restore Down</source>
- <translation type="vanished">向下恢復</translation>
+ <source>Eisu Shift</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Close</source>
- <translation type="vanished">關閉</translation>
+ <source>Eisu toggle</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Unshade</source>
- <translation type="vanished">取消遮蔽(&U)</translation>
+ <source>Code input</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QXml</name>
<message>
- <source>no error occurred</source>
- <translation>沒有發生錯誤</translation>
+ <source>Multiple Candidate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>error triggered by consumer</source>
- <translation>用戶觸發的錯誤</translation>
+ <source>Previous Candidate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>unexpected end of file</source>
- <translation>未預期遇到檔案結尾</translation>
+ <source>Hangul</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>more than one document type definition</source>
- <translation>定義了一個以上的文件型態</translation>
+ <source>Hangul Start</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>error occurred while parsing element</source>
- <translation>剖析元素時發生錯誤</translation>
+ <source>Hangul End</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>tag mismatch</source>
- <translation>標籤不對稱</translation>
+ <source>Hangul Hanja</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>error occurred while parsing content</source>
- <translation>剖析內容時發生錯誤</translation>
+ <source>Hangul Jamo</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>unexpected character</source>
- <translation>非預期的字元</translation>
+ <source>Hangul Romaja</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>invalid name for processing instruction</source>
- <translation>處理指令時的不合法名稱</translation>
+ <source>Hangul Jeonja</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>version expected while reading the XML declaration</source>
- <translation>讀取 XML 宣告時應有版本號</translation>
+ <source>Hangul Banja</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>wrong value for standalone declaration</source>
- <translation>獨立宣告時的值錯誤</translation>
+ <source>Hangul PreHanja</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
- <translation>讀取 XML 宣告時應有編碼宣告或獨立宣告</translation>
+ <source>Hangul PostHanja</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>standalone declaration expected while reading the XML declaration</source>
- <translation>讀取 XML 宣告時應有讀立宣告</translation>
+ <source>Hangul Special</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>error occurred while parsing document type definition</source>
- <translation>剖析文件型態定義時發生錯誤</translation>
+ <source>Cancel</source>
+ <translation>取消</translation>
</message>
<message>
- <source>letter is expected</source>
- <translation>預期應為字母</translation>
+ <source>Printer</source>
+ <translation>印表機</translation>
</message>
<message>
- <source>error occurred while parsing comment</source>
- <translation>剖析註解時發生錯誤</translation>
+ <source>Execute</source>
+ <translation>執行</translation>
</message>
<message>
- <source>error occurred while parsing reference</source>
- <translation>剖析參考時發生錯誤</translation>
+ <source>Play</source>
+ <translation>播放</translation>
</message>
<message>
- <source>internal general entity reference not allowed in DTD</source>
- <translation>在 DTD 中不允許內部產生的實體參考</translation>
+ <source>Zoom</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>external parsed general entity reference not allowed in attribute value</source>
- <translation>在屬性值中不允許使用外部剖析的實體參考</translation>
+ <source>Exit</source>
+ <translation>結束</translation>
</message>
<message>
- <source>external parsed general entity reference not allowed in DTD</source>
- <translation>在 DTD 中不允許使用外部剖析的實體參考</translation>
+ <source>Touchpad Toggle</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>unparsed entity reference in wrong context</source>
- <translation>在錯誤的內文中有未剖析的實體參考</translation>
+ <source>Touchpad On</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>recursive entities</source>
- <translation>遞迴的實體</translation>
+ <source>Touchpad Off</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>error in the text declaration of an external entity</source>
- <translation>在外部實體中的文字宣告有錯誤</translation>
+ <source>Num</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>QXmlStream</name>
+ <name>QSocks5SocketEngine</name>
<message>
- <source>Extra content at end of document.</source>
- <translation>文件尾端有多餘的內容。</translation>
+ <source>Network operation timed out</source>
+ <translation>網路操作逾時</translation>
</message>
<message>
- <source>Invalid entity value.</source>
- <translation>不合法的實體值</translation>
+ <source>Connection to proxy refused</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Invalid XML character.</source>
- <translation>不合法的 XML 字元。</translation>
+ <source>Connection to proxy closed prematurely</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sequence ']]>' not allowed in content.</source>
- <translation>在內文中不允許有序列 "]]>"。</translation>
+ <source>Proxy host not found</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Namespace prefix '%1' not declared</source>
- <translation>命名空間的前置字串 %1 未宣告</translation>
+ <source>Connection to proxy timed out</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attribute redefined.</source>
- <translation type="vanished">屬性重定義。</translation>
+ <source>Proxy authentication failed</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unexpected character '%1' in public id literal.</source>
- <translation>在公開代碼字元中遇到非預期的字元 %1。</translation>
+ <source>Proxy authentication failed: %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Invalid XML version string.</source>
- <translation>不合法的 XML 版本字串。</translation>
+ <source>SOCKS version 5 protocol error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unsupported XML version.</source>
- <translation>未支援的 XML 版本。</translation>
+ <source>General SOCKSv5 server failure</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is an invalid encoding name.</source>
- <translation>%1 為不合法的編碼名稱。</translation>
+ <source>Connection not allowed by SOCKSv5 server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Encoding %1 is unsupported</source>
- <translation>編碼 %1 不支援。</translation>
+ <source>TTL expired</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Standalone accepts only yes or no.</source>
- <translation>獨立實體只接受 yes 或 no。</translation>
+ <source>SOCKSv5 command not supported</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Invalid attribute in XML declaration.</source>
- <translation>XML 宣告中有不合法的屬性。</translation>
+ <source>Address type not supported</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Premature end of document.</source>
- <translation>文件結尾不正確。</translation>
+ <source>Unknown SOCKSv5 proxy error code 0x%1</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QSpiAccessibleBridge</name>
<message>
- <source>Invalid document.</source>
- <translation>不合法的文件。</translation>
+ <source>invalid role</source>
+ <extracomment>Role of an accessible object - the object is in an invalid state or could not be constructed</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Expected </source>
- <translation>預期應為 </translation>
+ <source>title bar</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>標題列</translation>
</message>
<message>
- <source>, but got '</source>
- <translation>,但是看到的是 </translation>
+ <source>menu bar</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unexpected '</source>
- <translation>非預期</translation>
+ <source>scroll bar</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>捲軸</translation>
</message>
<message>
- <source>Expected character data.</source>
- <translation>預期的字元資料。</translation>
+ <source>grip</source>
+ <extracomment>Role of an accessible object - the grip is usually used for resizing another object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Recursive entity detected.</source>
- <translation>偵測到遞迴實體。</translation>
+ <source>sound</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>聲音</translation>
</message>
<message>
- <source>Start tag expected.</source>
- <translation>預期應有開始標籤。</translation>
+ <source>cursor</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>XML declaration not at start of document.</source>
- <translation>XML 宣告沒有在文件開始處。</translation>
+ <source>text caret</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>NDATA in parameter entity declaration.</source>
- <translation>在參數實體宣告有 NDATA。</translation>
+ <source>alert message</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is an invalid processing instruction name.</source>
- <translation>%1 是不合法的處理指令名稱。</translation>
+ <source>frame</source>
+ <extracomment>Role of an accessible object: a window with frame and title
+----------
+Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>filler</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Invalid processing instruction name.</source>
- <translation>不合法的處理指令名稱。</translation>
+ <source>popup menu</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>快顯功能表</translation>
</message>
<message>
- <source>Illegal namespace declaration.</source>
- <translation>不合法的命名空間宣告。</translation>
+ <source>menu item</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Invalid XML name.</source>
- <translation>不合法的 XML 名稱。</translation>
+ <source>tool tip</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Opening and ending tag mismatch.</source>
- <translation>開啟與結束的標籤不對稱。</translation>
+ <source>application</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Reference to unparsed entity '%1'.</source>
- <translation>參考到未剖析的實體 %1。</translation>
+ <source>document</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Entity '%1' not declared.</source>
- <translation>實體 %1 未宣告。</translation>
+ <source>panel</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>面板</translation>
</message>
<message>
- <source>Reference to external entity '%1' in attribute value.</source>
- <translation>在屬性值中參考到外部實體 %1。</translation>
+ <source>chart</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Invalid character reference.</source>
- <translation>不合法的字元參考。</translation>
+ <source>dialog</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Encountered incorrectly encoded content.</source>
- <translation>遇到不正確的編碼內容。</translation>
+ <source>separator</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The standalone pseudo attribute must appear after the encoding.</source>
- <translation>獨立的虛擬屬性必須在編碼之後出現。</translation>
+ <source>tool bar</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is an invalid PUBLIC identifier.</source>
- <translation>%1 為不合法的 PUBLIC 識別子。</translation>
+ <source>status bar</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>狀態列</translation>
</message>
<message>
- <source>Invalid XML encoding name.</source>
- <translation type="obsolete">不合法的 XML 編碼名稱。</translation>
+ <source>table</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>表格</translation>
</message>
<message>
- <source>Attribute '%1' redefined.</source>
+ <source>column header</source>
+ <extracomment>Role of an accessible object - part of a table</extracomment>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QtXmlPatterns</name>
<message>
- <source>An %1-attribute with value %2 has already been declared.</source>
- <translation type="vanished">已宣告屬性 %1 的值為 %2。</translation>
+ <source>row header</source>
+ <extracomment>Role of an accessible object - part of a table</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>An %1-attribute must have a valid %2 as value, which %3 isn't.</source>
- <translation type="vanished">屬性 %1 必須以合法的 %2 為值,而 %3 是不合法的。</translation>
+ <source>column</source>
+ <extracomment>Role of an accessible object - part of a table</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Network timeout.</source>
- <translation type="vanished">網路逾時。</translation>
+ <source>row</source>
+ <extracomment>Role of an accessible object - part of a table</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Element %1 can't be serialized because it appears outside the document element.</source>
- <translation type="vanished">元素 %1 無法序列化,因為似乎是在文件元素之外。</translation>
+ <source>cell</source>
+ <extracomment>Role of an accessible object - part of a table</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Year %1 is invalid because it begins with %2.</source>
- <translation type="vanished">年份 %1 不合法,因為是從 %2 開始的。</translation>
+ <source>link</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Day %1 is outside the range %2..%3.</source>
- <translation type="vanished">日期 %1 已超出 %2 到 %3 的範圍。</translation>
+ <source>help balloon</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Month %1 is outside the range %2..%3.</source>
- <translation type="vanished">月份 %1 已超出 %2 到 %3 的範圍。</translation>
+ <source>assistant</source>
+ <extracomment>Role of an accessible object - a helper dialog</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Overflow: Can't represent date %1.</source>
- <translation type="vanished">溢位:無法表示日期 %1。</translation>
+ <source>list</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>清單</translation>
</message>
<message>
- <source>Day %1 is invalid for month %2.</source>
- <translation type="vanished">月份 %2 中沒有日期 %1。</translation>
+ <source>list item</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">時間 24:%1:%2.%3 不合法。小時為 24 則分、秒與毫秒都必須是 0。
-</translation>
+ <source>tree</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Time %1:%2:%3.%4 is invalid.</source>
- <translation type="vanished">時間 %1:%2:%3.%4 不合法。</translation>
+ <source>tree item</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Overflow: Date can't be represented.</source>
- <translation type="vanished">溢位:無法表示日期。</translation>
+ <source>page tab</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>At least one component must be present.</source>
- <translation type="vanished">必須表達至少一個組件。</translation>
+ <source>property page</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>內容頁</translation>
</message>
<message>
- <source>At least one time component must appear after the %1-delimiter.</source>
- <translation type="vanished">在分隔符 %1 後必須至少有一個時間組件。</translation>
+ <source>indicator</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No operand in an integer division, %1, can be %2.</source>
- <translation type="vanished">整數除法沒有運作對象,%1,可以是 %2</translation>
+ <source>graphic</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The first operand in an integer division, %1, cannot be infinity (%2).</source>
- <translation type="vanished">整數除法的第一個運算對象 %1 不能是無限大(%2)。</translation>
+ <source>label</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>標籤</translation>
</message>
<message>
- <source>The second operand in a division, %1, cannot be zero (%2).</source>
- <translation type="vanished">整數除法的第二個運算對象 %1 不能是零(%2)。</translation>
+ <source>text</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>文字</translation>
</message>
<message>
- <source>%1 is not a valid value of type %2.</source>
- <translation type="vanished">%1 不是合法的 %2 型態的值。</translation>
+ <source>push button</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>When casting to %1 from %2, the source value cannot be %3.</source>
- <translation type="vanished">從 %2 轉換型態為 %1 的時候,來源數值不能是 %3。</translation>
+ <source>check box</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Integer division (%1) by zero (%2) is undefined.</source>
- <translation type="vanished">整數除法 %1 除以零(%2)的行為未定義。</translation>
+ <source>radio button</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Division (%1) by zero (%2) is undefined.</source>
- <translation type="vanished">除法 %1 除以零(%2)的行為未定義。</translation>
+ <source>combo box</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulus division (%1) by zero (%2) is undefined.</source>
- <translation type="vanished">餘數除法 %1 除以零(%2)的行為未定義。</translation>
+ <source>progress bar</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>進度列</translation>
</message>
<message>
- <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
- <translation type="vanished">將型態 %1 除以 %2(非數值)是不允許的。</translation>
+ <source>dial</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">將型態 %1 除以 %2 或 %3(正或負零)是不允許的。</translation>
+ <source>hotkey field</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">將型態 %1 乘以 %2 或 %3(正或負無限大)是不允許的。</translation>
+ <source>slider</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>A value of type %1 cannot have an Effective Boolean Value.</source>
- <translation type="vanished">型態 %1 不能有實際布林值。</translation>
+ <source>spin box</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">實際布林值(Effective Boolean)無法用在兩個或兩個以上的原數值(atomic value)的計算。</translation>
+ <source>canvas</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Value %1 of type %2 exceeds maximum (%3).</source>
- <translation type="vanished">型態 %2 的數值 %1 已超過最大值(%3)。</translation>
+ <source>animation</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Value %1 of type %2 is below minimum (%3).</source>
- <translation type="vanished">型態 %2 的數值 %1 已低過最小值(%3)。</translation>
+ <source>equation</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">型態 %1 的值必須包含偶數個數字。數值 %2 未符合此條件。</translation>
+ <source>button with drop down</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is not valid as a value of type %2.</source>
- <translation type="vanished">%1 不是合法的 %2 型態的值。</translation>
+ <source>button menu</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Operator %1 cannot be used on type %2.</source>
- <translation type="vanished">操作元 %1 不能用於型態 %2。</translation>
+ <source>button with drop down grid</source>
+ <extracomment>Role of an accessible object - a button that expands a grid.</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source>
- <translation type="vanished">操作元 %1 不能用於型態 %2 與 %3 的原數值。</translation>
+ <source>space</source>
+ <extracomment>Role of an accessible object - blank space between other objects.</extracomment>
+ <translation>空格</translation>
</message>
<message>
- <source>The namespace URI in the name for a computed attribute cannot be %1.</source>
- <translation type="vanished">在已計算屬性的名稱的命名空間網址不能是 %1。</translation>
+ <source>page tab list</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">在已計算屬性的名稱不能同時有命名空間網址 %1 與本地端名稱 %2。</translation>
+ <source>clock</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Type error in cast, expected %1, received %2.</source>
- <translation type="vanished">轉換型態錯誤,應為 %1 但接收到 %2。</translation>
+ <source>splitter</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">轉換為型態 %1 或其衍生型態時,來源數值必須是相同型態,或者是字串。型態 %2 是不被允許的。</translation>
+ <source>layered pane</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No casting is possible with %1 as the target type.</source>
- <translation type="vanished">不能轉換到 %1 型態。</translation>
+ <source>web document</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>web 文件</translation>
</message>
<message>
- <source>It is not possible to cast from %1 to %2.</source>
- <translation type="vanished">不能從 %1 轉換到 %2。</translation>
+ <source>paragraph</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>段落</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="vanished">無法轉換到 %1 因為它是一個抽象型態,不能被實體化。</translation>
+ <source>section</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>It's not possible to cast the value %1 of type %2 to %3</source>
- <translation type="vanished">無法轉換型態 %2 的數值 %1 到 %3</translation>
+ <source>color chooser</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failure when casting from %1 to %2: %3</source>
- <translation type="vanished">從 %1 轉換到 %2 時失敗:%3</translation>
+ <source>footer</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>A comment cannot contain %1</source>
- <translation type="vanished">註解不能包含 %1</translation>
+ <source>form</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>表單</translation>
</message>
<message>
- <source>A comment cannot end with a %1.</source>
- <translation type="vanished">註解不能以 %1 做結尾</translation>
+ <source>heading</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No comparisons can be done involving the type %1.</source>
- <translation type="vanished">包含型態 %1 時不能做比較。</translation>
+ <source>note</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Operator %1 is not available between atomic values of type %2 and %3.</source>
- <translation type="vanished">操作元 %1 不能用於型態 %2 與 %3 的原數值。</translation>
+ <source>complementary content</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <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="vanished">屬性點不能做為文件點的子節點。因此,屬性 %1 的位置不合適。</translation>
+ <source>unknown</source>
+ <extracomment>Role of an accessible object</extracomment>
+ <translation>未知</translation>
</message>
+</context>
+<context>
+ <name>QSslSocket</name>
<message>
- <source>A library module cannot be evaluated directly. It must be imported from a main module.</source>
- <translation type="vanished">不能直接計算函式模組。必須要從主模組匯入。</translation>
+ <source>Unable to write data: %1</source>
+ <translation>無法寫入資料: %1</translation>
</message>
<message>
- <source>No template by name %1 exists.</source>
- <translation type="vanished">沒有名為 %1 的樣本存在。</translation>
+ <source>Error while reading: %1</source>
+ <translation>讀取時錯誤: %1</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="vanished">型態 %1 的值不能是謂詞(predicate)。謂詞必須是數值型態,或是實際布林值。</translation>
+ <source>Error during SSL handshake: %1</source>
+ <translation>SSL 交握期間錯誤: %1</translation>
</message>
<message>
- <source>A positional predicate must evaluate to a single numeric value.</source>
- <translation type="vanished">位置謂詞必須能計算出單一的數值。</translation>
+ <source>Error creating SSL context (%1)</source>
+ <translation>建立 SSL 內容 (%1) 錯誤</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="vanished">處理指令的目標名稱不能是任何大小寫組合的 %1。因此,%2 是不合法的值。</translation>
+ <source>Invalid or empty cipher list (%1)</source>
+ <translation>無效或空的密碼清單 (%1)</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="vanished">%1 不是一個合法的處理指令的目標名稱。必須是 %2 的值,例如 %3。</translation>
+ <source>Error creating SSL session, %1</source>
+ <translation>建立 SSL 工作階段錯誤, %1</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="vanished">路徑的最後一步必須是節點或原值,而不能在兩者之間。</translation>
+ <source>Error creating SSL session: %1</source>
+ <translation>建立 SSL 工作階段錯誤: %1</translation>
</message>
<message>
- <source>The data of a processing instruction cannot contain the string %1</source>
- <translation type="vanished">處理指令的資料不能包含字串 %1</translation>
+ <source>Cannot provide a certificate with no key, %1</source>
+ <translation>無法提供沒有金鑰的憑證, %1</translation>
</message>
<message>
- <source>No namespace binding exists for the prefix %1</source>
- <translation type="vanished">前置字串 %1 沒有結合命名空間</translation>
+ <source>Error loading local certificate, %1</source>
+ <translation>載入本機憑證錯誤, %1</translation>
</message>
<message>
- <source>No namespace binding exists for the prefix %1 in %2</source>
- <translation type="vanished">在 %2 的前置字串 %1 沒有結合命名空間</translation>
+ <source>Error loading private key, %1</source>
+ <translation>載入私人金鑰錯誤, %1</translation>
</message>
<message>
- <source>%1 is an invalid %2</source>
- <translation type="vanished">%1 是不合法的 %2</translation>
+ <source>Error when setting the elliptic curves (%1)</source>
+ <translation type="unfinished"></translation>
</message>
- <message numerus="yes">
- <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
- <translation type="vanished">
- <numerusform>%1 最多只能有 %n 個參數,因此 %2 是不合法的。</numerusform>
- </translation>
+ <message>
+ <source>unsupported protocol</source>
+ <translation type="unfinished"></translation>
</message>
- <message numerus="yes">
- <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
- <translation type="vanished">
- <numerusform>%1 至少需要 %n 個參數,因此 %2 是不合法的。</numerusform>
- </translation>
+ <message>
+ <source>Private key does not certify public key, %1</source>
+ <translation type="unfinished"></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="vanished">呼叫 %1 的第一個參數不能是 %2 型態。必須是數值型態,xs.yearMonthDuration 或 xs.dayTimeDuration。</translation>
+ <source>OpenSSL version too old, need at least v1.0.2</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="vanished">呼叫 %1 的第一個參數不能是 %2 型態。必須是 %3、%4 或 %5 型態。</translation>
+ <source>No error</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="vanished">呼叫 %1 的第二個參數不能是 %2 型態。必須是 %3、%4 或 %5 型態。</translation>
+ <source>The issuer certificate could not be found</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is not a valid XML 1.0 character.</source>
- <translation type="vanished">%1 不是合法的 XML 1.0 字元。</translation>
+ <source>The certificate signature could not be decrypted</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The first argument to %1 cannot be of type %2.</source>
- <translation type="vanished">呼叫 %1 的第一個參數不能是 %2 型態。</translation>
+ <source>The public key in the certificate could not be read</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="vanished">如果兩個值都有區域位移,則必須是相同的區域位移。%1 與 %2 並不相同。</translation>
+ <source>The signature of the certificate is invalid</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 was called.</source>
- <translation type="vanished">%1 已被呼叫。</translation>
+ <source>The certificate is not yet valid</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="vanished">%1 後面必須跟著 %2 或 %3,而非取代字串的結尾。</translation>
+ <source>The certificate has expired</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="vanished">在取代字串中,在未脫逸的情形下 %1 必須至少跟著一位數字。</translation>
+ <source>The certificate's notBefore field contains an invalid time</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="vanished">在取代字串中,%1 只能用於自身或 %2 的脫逸,而非 %3。</translation>
+ <source>The certificate's notAfter field contains an invalid time</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 matches newline characters</source>
- <translation type="vanished">%1 符合了換行字元</translation>
+ <source>The certificate is self-signed, and untrusted</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 and %2 match the start and end of a line.</source>
- <translation type="vanished">%1 與 %2 符合了一行的開始與結尾。</translation>
+ <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Matches are case insensitive</source>
- <translation type="vanished">比對為區分大小寫</translation>
+ <source>The issuer certificate of a locally looked up certificate could not be found</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Whitespace characters are removed, except when they appear in character classes</source>
- <translation type="vanished">空白字元已移除,除非它們出現在字元類別</translation>
+ <source>No certificates could be verified</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is an invalid regular expression pattern: %2</source>
- <translation type="vanished">%1 是不合法的正規表示式樣式:%2</translation>
+ <source>One of the CA certificates is invalid</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
- <translation type="vanished">%1 是正規表示式中不合法的旗標。合法的旗標有:</translation>
+ <source>The basicConstraints path length parameter has been exceeded</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="vanished">如果第一個參數是空序列,或是長度為 0 的字串(沒有命名空間),則無法指定前置字串。但是您指定了 %1。</translation>
+ <source>The supplied certificate is unsuitable for this purpose</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>It will not be possible to retrieve %1.</source>
- <translation type="vanished">無法取得 %1。</translation>
+ <source>The root CA certificate is not trusted for this purpose</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="vanished">函式 %1 的第二個參數的根節點必須是文件節點。%2 不是文件節點。</translation>
+ <source>The root CA certificate is marked to reject the specified purpose</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The default collection is undefined</source>
- <translation type="vanished">預設的收藏未定義</translation>
+ <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 cannot be retrieved</source>
- <translation type="vanished">%1 無法取得</translation>
+ <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</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="vanished">未支援常態化表單 %1。支援的表單有 %2、%3、%4、%5,以及無(也就是空字串,未常態化)。</translation>
+ <source>The peer did not present any certificate</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="vanished">區域位移必須是在 %1 到 %2 範圍之內。%3 已超出範圍。</translation>
+ <source>The host name did not match any of the valid hosts for this certificate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is not a whole number of minutes.</source>
- <translation type="vanished">%1 不是分鐘的數值。</translation>
+ <source>The peer certificate is blacklisted</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Required cardinality is %1; got cardinality %2.</source>
- <translation type="vanished">需要的基數為 %1;得到的是 %2。</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
<message>
- <source>The item %1 did not match the required type %2.</source>
- <translation type="vanished">項目 %1 未符合需要的型態 %2。</translation>
+ <source>The TLS/SSL connection has been closed</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is an unknown schema type.</source>
- <translation type="vanished">%1 是未知的機制型態。</translation>
+ <source>Unable to init SSL Context: %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Only one %1 declaration can occur in the query prolog.</source>
- <translation type="vanished">只有一個 %1 宣告可以在查詢中。</translation>
+ <source>Unable to decrypt data: %1</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QStandardPaths</name>
<message>
- <source>The initialization of variable %1 depends on itself</source>
- <translation type="vanished">變數 %1 的初始化與自身相依。</translation>
+ <source>Desktop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No variable by name %1 exists</source>
- <translation type="vanished">沒有名為 %1 的變數存在</translation>
+ <source>Documents</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The variable %1 is unused</source>
- <translation type="vanished">變數 %1 未使用</translation>
+ <source>Fonts</source>
+ <translation>字型</translation>
</message>
<message>
- <source>A construct was encountered which only is allowed in XQuery.</source>
- <translation type="vanished">遇到了建構,實際上只能允許在 XQuery 內。</translation>
+ <source>Applications</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>A template by name %1 has already been declared.</source>
- <translation type="vanished">名為 %1 的屬性已被宣告。</translation>
+ <source>Music</source>
+ <translation>音樂</translation>
</message>
<message>
- <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
- <translation type="vanished">版本 %1 未支援。支援的 XQuery 版本為 1.0。</translation>
+ <source>Movies</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="vanished">編碼 %1 不合法。必須只能包含拉丁字元,不含空白,並且要符合正規表示式 %2。</translation>
+ <source>Pictures</source>
+ <translation>照片</translation>
</message>
<message>
- <source>No function with signature %1 is available</source>
- <translation type="vanished">沒有簽章為 %1 的函式可使用</translation>
+ <source>Temporary Directory</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>A default namespace declaration must occur before function, variable, and option declarations.</source>
- <translation type="vanished">預設的命名空間宣告必須在函式、變數與選項宣告之前。</translation>
+ <source>Home</source>
+ <translation>首頁</translation>
</message>
<message>
- <source>Namespace declarations must occur before function, variable, and option declarations.</source>
- <translation type="vanished">命名空間宣告必須在函式、變數與選項宣告之前。</translation>
+ <source>Cache</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Module imports must occur before function, variable, and option declarations.</source>
- <translation type="vanished">模組匯入必須在函式、變數與選項宣告之前。</translation>
+ <source>Shared Data</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The keyword %1 cannot occur with any other mode name.</source>
- <translation type="vanished">關鍵字 %1 不能與任何其它模式名稱一起存在。</translation>
+ <source>Runtime</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The value of attribute %1 must of type %2, which %3 isn't.</source>
- <translation type="vanished">屬性 %1 的值必須為型態 %2,但 %3 不是。</translation>
+ <source>Configuration</source>
+ <translation>組態</translation>
</message>
<message>
- <source>It is not possible to redeclare prefix %1.</source>
- <translation type="vanished">無法重宣告前置字串 %1。</translation>
+ <source>Shared Configuration</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source>
- <translation type="vanished">前置字串 %1 不能被結合。預設它已與命名空間 %2 結合。</translation>
+ <source>Shared Cache</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>A variable by name %1 has already been declared.</source>
- <translation type="vanished">名為 %1 的變數已被宣告。</translation>
+ <source>Download</source>
+ <translation>下載</translation>
</message>
<message>
- <source>A stylesheet function must have a prefixed name.</source>
- <translation type="vanished">樣式表函式必須有前置名稱。</translation>
+ <source>Application Data</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
- <translation type="vanished">當函式 %1 用於樣式比對時,參數必須是變數參考或字串。</translation>
+ <source>Application Configuration</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QStateMachine</name>
<message>
- <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
- <translation type="vanished">在 XSL-T 樣式內,函式 %1 的第一個參數必須是字串,以便用於比對。</translation>
+ <source>Missing initial state in compound state '%1'</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
- <translation type="vanished">在 XSL-T 樣式內,函式 %1 的第一個參數必須是文字或變數參考,以便用於比對。</translation>
+ <source>Missing default state in history state '%1'</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
- <translation type="vanished">在 XSL-T 樣式內,函式 %1 的不能有第三個參數。</translation>
+ <source>No common ancestor for targets and source of transition from state '%1'</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source>
- <translation type="vanished">在 XSL-T 樣式內,只有函式 %1,%2 可以用於比對。%3 不行。</translation>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
</message>
+</context>
+<context>
+ <name>QSystemSemaphore</name>
<message>
- <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source>
- <translation type="vanished">在 XSL-T 樣式內,不能用 %1 軸,只能用 %2 或 %3。</translation>
+ <source>%1: permission denied</source>
+ <translation>%1: 權限拒絕</translation>
</message>
<message>
- <source>%1 is an invalid template mode name.</source>
- <translation type="vanished">%1 不是合法的樣本模式名稱。</translation>
+ <source>%1: already exists</source>
+ <translation>%1: 已經存在</translation>
</message>
<message>
- <source>Each name of a template parameter must be unique; %1 is duplicated.</source>
- <translation type="vanished">每個樣本參數的名稱必須唯一;%1 已經被使用。</translation>
+ <source>%1: does not exist</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 is not a valid name for a processing-instruction.</source>
- <translation type="vanished">%1 不是處理指令的合法名稱。</translation>
+ <source>%1: out of resources</source>
+ <translation>%1: 資源不足</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="obsolete">只有前置字串 %1 可以被宣告與命名空間 %2 結合。它預設已經與前置字串 %1 結合。</translation>
+ <source>%1: unknown error %2</source>
+ <translation>%1: 未知錯誤 %2</translation>
</message>
+</context>
+<context>
+ <name>QTDSDriver</name>
<message>
- <source>Prefix %1 is already declared in the prolog.</source>
- <translation type="vanished">前置字串 %1 已在 prolog 中宣告。</translation>
+ <source>Unable to open connection</source>
+ <translation>無法開啟連線</translation>
</message>
<message>
- <source>The name of an option must have a prefix. There is no default namespace for options.</source>
- <translation type="vanished">選項名稱必須有前置字串。沒有選項的預設命名空間。</translation>
+ <source>Unable to use database</source>
+ <translation>無法使用資料庫</translation>
</message>
+</context>
+<context>
+ <name>QTabBar</name>
<message>
- <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source>
- <translation type="vanished">機制匯入功能未支援,因此有 %1 個宣告無法達成。</translation>
+ <source>Scroll Left</source>
+ <translation>向左捲動</translation>
</message>
<message>
- <source>The target namespace of a %1 cannot be empty.</source>
- <translation type="vanished">%1 的目標命名空間不能是空的。</translation>
+ <source>Scroll Right</source>
+ <translation>向右捲動</translation>
</message>
+</context>
+<context>
+ <name>QTcpServer</name>
<message>
- <source>The module import feature is not supported</source>
- <translation type="vanished">模組匯入功能未支援。</translation>
+ <source>Operation on socket is not supported</source>
+ <translation>通訊端操作不支援</translation>
</message>
+</context>
+<context>
+ <name>QUndoGroup</name>
<message>
- <source>A variable by name %1 has already been declared in the prolog.</source>
- <translation type="obsolete">名稱為 %1 的變數已經在 prolog 中宣告。</translation>
+ <source>Undo %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No value is available for the external variable by name %1.</source>
- <translation type="vanished">名為 %1 的外部變數沒有可用的值。</translation>
+ <source>Undo</source>
+ <comment>Default text for undo action</comment>
+ <translation>復原</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="vanished">命名空間 %1 已被保留,因此使用者定義函式不能使用它。請試試預定義前置字串 %2。</translation>
+ <source>Redo %1</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="vanished">在函式模組中的使用者定義函式的命名空間必須與模組的命名空間相同。也就是,應該為 %1 而不是 %2。</translation>
+ <source>Redo</source>
+ <comment>Default text for redo action</comment>
+ <translation>重作</translation>
</message>
+</context>
+<context>
+ <name>QUndoModel</name>
<message>
- <source>A function already exists with the signature %1.</source>
- <translation type="vanished">已經有簽章為 %1 的函式存在。</translation>
+ <source><empty></source>
+ <translation><空></translation>
</message>
+</context>
+<context>
+ <name>QUndoStack</name>
<message>
- <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source>
- <translation type="vanished">未支援外部函式。所有支援的含式可以直接使用而不需要先宣告為外部函式。</translation>
+ <source>Undo %1</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="vanished">名稱為 %1 的參數已被宣告。每個參數名稱必須唯一。</translation>
+ <source>Undo</source>
+ <comment>Default text for undo action</comment>
+ <translation>復原</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="vanished">與 for 敘述結合的變數名稱必須與位置變數不同。因此,有兩個名為 %1 的變數衝突了。</translation>
+ <source>Redo %1</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="vanished">未支援機制確認功能。%1 敘述無法使用。</translation>
+ <source>Redo</source>
+ <comment>Default text for redo action</comment>
+ <translation>重作</translation>
</message>
+</context>
+<context>
+ <name>QUnicodeControlCharacterMenu</name>
<message>
- <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source>
- <translation type="vanished">未支援 pragma 敘述。因次,必須有預設的敘述。</translation>
+ <source>LRM Left-to-right mark</source>
+ <translation>LRM 從左到右標記</translation>
</message>
<message>
- <source>The %1-axis is unsupported in XQuery</source>
- <translation type="vanished">XQuery 中未支援 %1 軸</translation>
+ <source>RLM Right-to-left mark</source>
+ <translation>RLM 從右到左標記</translation>
</message>
<message>
- <source>%1 is not a valid numeric literal.</source>
- <translation type="vanished">%1 不是合法的數值。</translation>
+ <source>ZWJ Zero width joiner</source>
+ <translation>ZWJ 無寬度分字符</translation>
</message>
<message>
- <source>No function by name %1 is available.</source>
- <translation type="vanished">沒有名為 %1 的函式。</translation>
+ <source>ZWNJ Zero width non-joiner</source>
+ <translation>ZWNJ 無寬度分字符</translation>
</message>
<message>
- <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
- <translation type="vanished">要與前置字串 %1 結合的命名空間網址不能是空字串。</translation>
+ <source>ZWSP Zero width space</source>
+ <translation>ZWSP 無寬度空格</translation>
</message>
<message>
- <source>%1 is an invalid namespace URI.</source>
- <translation type="vanished">%1 是不合法的命名空間網址。</translation>
+ <source>LRE Start of left-to-right embedding</source>
+ <translation>LRE 開始的從左到右嵌入</translation>
</message>
<message>
- <source>It is not possible to bind to the prefix %1</source>
- <translation type="vanished">無法與前置字串 %1 結合。</translation>
+ <source>RLE Start of right-to-left embedding</source>
+ <translation>RLE 開始的從右到左嵌入</translation>
</message>
<message>
- <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
- <translation type="vanished">命名空間 %1 只能與 %2 結合(也就是說,要預先定義)。</translation>
+ <source>LRO Start of left-to-right override</source>
+ <translation>LRO 開始的從左到右覆寫</translation>
</message>
<message>
- <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
- <translation type="vanished">前置字串 %1 只能與 %2 結合(也就是說,要預先定義)。</translation>
+ <source>RLO Start of right-to-left override</source>
+ <translation>RLO 開始的從右到左重疊</translation>
</message>
<message>
- <source>Two namespace declaration attributes have the same name: %1.</source>
- <translation type="vanished">有兩個命名空間宣告的屬性有相同的名稱:%1</translation>
+ <source>PDF Pop directional formatting</source>
+ <translation>PDF 流行雙向格式</translation>
</message>
<message>
- <source>The namespace URI must be a constant and cannot use enclosed expressions.</source>
- <translation type="vanished">命名空間網址必須是常數,並且不能使用封閉敘述。</translation>
+ <source>Insert Unicode control character</source>
+ <translation>插入 Unicode 控制字元</translation>
</message>
<message>
- <source>An attribute by name %1 has already appeared on this element.</source>
- <translation type="vanished">名為 %1 的屬性已出現在此元素。</translation>
+ <source>LRI Left-to-right isolate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
- <translation type="vanished">直接元素建構器沒有完整產生。%1 以 %2 結束。</translation>
+ <source>RLI Right-to-left isolate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The name %1 does not refer to any schema type.</source>
- <translation type="vanished">名稱 %1 未指向任何機制型態。</translation>
+ <source>FSI First strong isolate</source>
+ <translation type="unfinished"></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="vanished">%1 是複數型態,無法轉換成複數型態。然而,轉換為原型態,如 %2 是可行的。</translation>
+ <source>PDI Pop directional isolate</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QWhatsThisAction</name>
<message>
- <source>%1 is not an atomic type. Casting is only possible to atomic types.</source>
- <translation type="vanished">%1 不是一個原型態。只能轉換為原型態。</translation>
+ <source>What's This?</source>
+ <translation>這是?</translation>
</message>
+</context>
+<context>
+ <name>QWidget</name>
<message>
- <source>%1 is not a valid name for a processing-instruction. Therefore this name test will never match.</source>
- <translation type="obsolete">%1 不是一個合法的處理指令的名稱。因此名稱測試永遠不會成功。</translation>
+ <source>*</source>
+ <translation>*</translation>
</message>
+</context>
+<context>
+ <name>QWidgetTextControl</name>
<message>
- <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source>
- <translation type="vanished">%1 不是範圍內屬性宣告。注意機制匯入功能未支援。</translation>
+ <source>&Undo</source>
+ <translation>復原(&U)</translation>
</message>
<message>
- <source>The name of an extension expression must be in a namespace.</source>
- <translation type="vanished">延伸敘述的名稱必須在命名空間內。</translation>
+ <source>&Redo</source>
+ <translation>重作(&R)</translation>
</message>
<message>
- <source>empty</source>
- <translation type="vanished">空白</translation>
+ <source>Cu&t</source>
+ <translation>剪下(&T)</translation>
</message>
<message>
- <source>zero or one</source>
- <translation type="vanished">0 或 1 個</translation>
+ <source>&Copy</source>
+ <translation>複製(&C)</translation>
</message>
<message>
- <source>exactly one</source>
- <translation type="vanished">剛好一個</translation>
+ <source>Copy &Link Location</source>
+ <translation>複製連結位置(&L)</translation>
</message>
<message>
- <source>one or more</source>
- <translation type="vanished">一個以上</translation>
+ <source>&Paste</source>
+ <translation>貼上(&P)</translation>
</message>
<message>
- <source>zero or more</source>
- <translation type="vanished">0 個以上</translation>
+ <source>Delete</source>
+ <translation>刪除</translation>
</message>
<message>
- <source>Required type is %1, but %2 was found.</source>
- <translation type="vanished">需要的型態為 %1,但找到 %2。</translation>
+ <source>Select All</source>
+ <translation>全選</translation>
</message>
+</context>
+<context>
+ <name>QWindowsDirect2DIntegration</name>
<message>
- <source>Promoting %1 to %2 may cause loss of precision.</source>
- <translation type="vanished">將 %1 抬升為 %2 可能會失去精確度。</translation>
+ <source>Qt cannot load the direct2d platform plugin because the Direct2D version on this system is too old. The minimum system requirement for this platform plugin is Windows 7 SP1 with Platform Update.
+
+The minimum Direct2D version required is %1.%2.%3.%4. The Direct2D version on this system is %5.%6.%7.%8.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The focus is undefined.</source>
- <translation type="vanished">焦點未定義。</translation>
+ <source>Cannot load direct2d platform plugin</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QWizard</name>
<message>
- <source>It's not possible to add attributes after any other kind of node.</source>
- <translation type="vanished">不能在任何其它種類的節點後面加入屬性。</translation>
+ <source>Go Back</source>
+ <translation>上一步</translation>
</message>
<message>
- <source>An attribute by name %1 has already been created.</source>
- <translation type="vanished">名為 %1 的屬性已被建立。</translation>
+ <source>Continue</source>
+ <translation>繼續</translation>
</message>
<message>
- <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
- <translation type="vanished">只支援 Unicode Codepoint Collation(%1)。%2 未支援。;</translation>
+ <source>Commit</source>
+ <translation>認可</translation>
</message>
<message>
- <source>Attribute %1 can't be serialized because it appears at the top level.</source>
- <translation type="vanished">屬性元素 %1 無法序列化,因為似乎是在頂層。</translation>
+ <source>Done</source>
+ <translation>完成</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="vanished">使用者定義函式的命名空間不能為空白(請試著用預先定義的前置字串 %1)</translation>
+ <source>Help</source>
+ <translation>說明</translation>
</message>
<message>
- <source>Attribute element %1 can't be serialized because it appears at the top level.</source>
- <translation type="obsolete">屬性元素 %1 無法序列化,因為似乎是在頂層。</translation>
+ <source>< &Back</source>
+ <translation>< 上一步(&B)</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="obsolete">使用者定義的函式的命名空間不能是空的(請試試使用預定義前置字串 %1)</translation>
+ <source>&Finish</source>
+ <translation>完成(&F)</translation>
</message>
<message>
- <source>%1 is an unsupported encoding.</source>
- <translation type="vanished">%1 是個未被支援的編碼。</translation>
+ <source>Cancel</source>
+ <translation>取消</translation>
</message>
<message>
- <source>%1 contains octets which are disallowed in the requested encoding %2.</source>
- <translation type="vanished">%1 包含了在要求的編碼 %2 內不允許的八進位值。</translation>
+ <source>&Help</source>
+ <translation>說明(&H)</translation>
</message>
<message>
- <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source>
- <translation type="vanished">在 %2 內的代碼點 %1(編碼 %3)是一個不合法的 XML 字元。</translation>
+ <source>&Next</source>
+ <translation>下一步(&N)</translation>
</message>
<message>
- <source>Ambiguous rule match.</source>
- <translation type="vanished">不明確的規則符合。</translation>
+ <source>&Next ></source>
+ <translation>下一步(&N) ></translation>
</message>
+</context>
+<context>
+ <name>QXml</name>
<message>
- <source>In a namespace constructor, the value for a namespace value cannot be an empty string.</source>
- <translation type="obsolete">在命名空間建構子中,命名空間的值不能是空字串。</translation>
+ <source>no error occurred</source>
+ <translation>未發生錯誤</translation>
</message>
<message>
- <source>The prefix must be a valid %1, which %2 is not.</source>
- <translation type="vanished">前置字串必須是合法的 %1,但 %2 不是。</translation>
+ <source>error triggered by consumer</source>
+ <translation>由消費者觸發的錯誤</translation>
</message>
<message>
- <source>The prefix %1 cannot be bound.</source>
- <translation type="vanished">前置字串 %1 不能被結合。</translation>
+ <source>unexpected end of file</source>
+ <translation>未預期的檔案結尾</translation>
</message>
<message>
- <source>Only the prefix %1 can be bound to %2 and vice versa.</source>
- <translation type="vanished">只有前置字串 %1 能與 %2 結合。反之亦然。</translation>
+ <source>more than one document type definition</source>
+ <translation>多個文件類型定義</translation>
</message>
<message>
- <source>Circularity detected</source>
- <translation type="vanished">偵測到環狀</translation>
+ <source>error occurred while parsing element</source>
+ <translation>在解析元素時發生錯誤</translation>
</message>
<message>
- <source>The parameter %1 is passed, but no corresponding %2 exists.</source>
- <translation type="vanished">參數 %1 已傳送,但找不到相關的 %2。</translation>
+ <source>tag mismatch</source>
+ <translation>標籤不相符</translation>
</message>
<message>
- <source>The parameter %1 is required, but no corresponding %2 is supplied.</source>
- <translation type="vanished">需要參數 %1,但是沒有提供相關的 %2。</translation>
+ <source>error occurred while parsing content</source>
+ <translation>在解析內容時發生錯誤</translation>
</message>
<message>
- <source>The URI cannot have a fragment</source>
- <translation type="vanished">URI 不能有片段。</translation>
+ <source>unexpected character</source>
+ <translation>未預期的字元</translation>
</message>
<message>
- <source>Element %1 is not allowed at this location.</source>
- <translation type="vanished">元素 %1 不能在此位置。</translation>
+ <source>invalid name for processing instruction</source>
+ <translation>處理指示的名稱無效</translation>
</message>
<message>
- <source>Text nodes are not allowed at this location.</source>
- <translation type="vanished">文字節點不能在此位置。</translation>
+ <source>version expected while reading the XML declaration</source>
+ <translation>在讀取 XML 宣告時預期的版本</translation>
</message>
<message>
- <source>Parse error: %1</source>
- <translation type="vanished">剖析錯誤:%1</translation>
+ <source>wrong value for standalone declaration</source>
+ <translation>單獨宣告的值錯誤</translation>
</message>
<message>
- <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.</source>
- <translation type="vanished">XLS-T 版本屬性的值必須是型態 %1 的值,而 %2 不是。</translation>
+ <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
+ <translation>編碼宣告或讀取 XML 宣告時預期的獨立宣告</translation>
</message>
<message>
- <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source>
- <translation type="vanished">使用 2.0 處理器執行 XSL-T 1.0 樣式表中。</translation>
+ <source>standalone declaration expected while reading the XML declaration</source>
+ <translation>讀取 XML 宣告時預期的獨立宣告</translation>
</message>
<message>
- <source>Unknown XSL-T attribute %1.</source>
- <translation type="vanished">未知的 XSL-T 屬性 %1。</translation>
+ <source>error occurred while parsing document type definition</source>
+ <translation>在解析文件類型定義時發生錯誤</translation>
</message>
<message>
- <source>Attribute %1 and %2 are mutually exclusive.</source>
- <translation type="vanished">屬性 %1 與 %2 彼此互斥。</translation>
+ <source>letter is expected</source>
+ <translation>預期字母</translation>
</message>
<message>
- <source>In a simplified stylesheet module, attribute %1 must be present.</source>
- <translation type="vanished">在簡化的樣式表模組中,屬性 %1 必須存在。</translation>
+ <source>error occurred while parsing comment</source>
+ <translation>在解析提交時發生錯誤</translation>
</message>
<message>
- <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
- <translation type="vanished">若元素 %1 沒有屬性 %2,則也不能有屬性 %3 或 %4。</translation>
+ <source>error occurred while parsing reference</source>
+ <translation>在解析參照時發生錯誤</translation>
</message>
<message>
- <source>Element %1 must have at least one of the attributes %2 or %3.</source>
- <translation type="vanished">元素 %1 必須至少有屬性 %2 或 %3 其中一個。</translation>
+ <source>internal general entity reference not allowed in DTD</source>
+ <translation>在 DTD 中不允許內部一般實體參照</translation>
</message>
<message>
- <source>At least one mode must be specified in the %1-attribute on element %2.</source>
- <translation type="vanished">在元素 %2 的 %1 屬性中至少要指定一個模式。</translation>
+ <source>external parsed general entity reference not allowed in attribute value</source>
+ <translation>外部解析一般實體參照在屬性值不允許</translation>
</message>
<message>
- <source>Element %1 must come last.</source>
- <translation type="vanished">元素 %1 必須最後出現。</translation>
+ <source>external parsed general entity reference not allowed in DTD</source>
+ <translation>外部解析一般實體參照在 DTD 不允許</translation>
</message>
<message>
- <source>At least one %1-element must occur before %2.</source>
- <translation type="vanished">至少一個元素 %1 要出現在 %2 之前。</translation>
+ <source>unparsed entity reference in wrong context</source>
+ <translation>錯誤內容中的未分析實體參照</translation>
</message>
<message>
- <source>Only one %1-element can appear.</source>
- <translation type="vanished">只能出現一個元素 %1。</translation>
+ <source>recursive entities</source>
+ <translation>遞迴實體</translation>
</message>
<message>
- <source>At least one %1-element must occur inside %2.</source>
- <translation type="vanished">至少一個元素 %1 要出現在 %2 之內。</translation>
+ <source>error in the text declaration of an external entity</source>
+ <translation>外部實體的文字宣告錯誤</translation>
</message>
+</context>
+<context>
+ <name>QXmlStream</name>
<message>
- <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
- <translation type="vanished">當屬性 %1 出現在 %2 內時,不能使用序列建構子。</translation>
+ <source>Extra content at end of document.</source>
+ <translation>文件結尾的額外內容。</translation>
</message>
<message>
- <source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
- <translation type="vanished">元素 %1 必須至少有一個屬性 %2 或一個序列建構子。</translation>
+ <source>Invalid entity value.</source>
+ <translation>無效的實體值。</translation>
</message>
<message>
- <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
- <translation type="vanished">當需要參數時,不能透過屬性 %1 或序列建構子提供預設值。</translation>
+ <source>Invalid XML character.</source>
+ <translation>無效的 XML 字元。</translation>
</message>
<message>
- <source>Element %1 cannot have children.</source>
- <translation type="vanished">元素 %1 不能有子元素。</translation>
+ <source>Sequence ']]>' not allowed in content.</source>
+ <translation>內容中不允許序列 ']]>'。</translation>
</message>
<message>
- <source>Element %1 cannot have a sequence constructor.</source>
- <translation type="vanished">元素 %1不能有序列建構子。</translation>
+ <source>Namespace prefix '%1' not declared</source>
+ <translation>命名空間字首「%1」未宣告</translation>
</message>
<message>
- <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
- <translation type="vanished">屬性 %1 不能出現在 %2,因為它是 %3 的子元素。</translation>
+ <source>Unexpected character '%1' in public id literal.</source>
+ <translation>未預期的字元 「%1」於公共 ID 常值。</translation>
</message>
<message>
- <source>A parameter in a function cannot be declared to be a tunnel.</source>
- <translation type="vanished">函式內的參數不能被宣告為通道(tunnel)。</translation>
+ <source>Invalid XML version string.</source>
+ <translation>無效的 XML 版本字串。</translation>
</message>
<message>
- <source>This processor is not Schema-aware and therefore %1 cannot be used.</source>
- <translation type="vanished">此處理器不是 Schema-aware,因此不能使用 %1。</translation>
+ <source>Unsupported XML version.</source>
+ <translation>未支援的 XML 版本。</translation>
</message>
<message>
- <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn't.</source>
- <translation type="vanished">頂層樣式表元素必須是非空白的命名空間,而 %1 不是。</translation>
+ <source>%1 is an invalid encoding name.</source>
+ <translation>%1 是無效的編碼名稱。</translation>
</message>
<message>
- <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
- <translation type="vanished">元素 %2 內屬性 %1 的值必須是 %3 或 %4,而不是 %5。</translation>
+ <source>Encoding %1 is unsupported</source>
+ <translation>不支援編碼 %1</translation>
</message>
<message>
- <source>Attribute %1 cannot have the value %2.</source>
- <translation type="vanished">屬性 %1 的值不能為 %2。</translation>
+ <source>Standalone accepts only yes or no.</source>
+ <translation>只單獨接受 是 或 否 。</translation>
</message>
<message>
- <source>The attribute %1 can only appear on the first %2 element.</source>
- <translation type="vanished">屬性 %1 只能出現在前 %2 個元素內。</translation>
+ <source>Invalid attribute in XML declaration.</source>
+ <translation>XML 宣告無效的屬性。</translation>
</message>
<message>
- <source>At least one %1 element must appear as child of %2.</source>
- <translation type="vanished">%2 必須至少有一個子元素 %1。</translation>
+ <source>Premature end of document.</source>
+ <translation>文件過早結束。</translation>
</message>
<message>
- <source>Attribute %1 cannot appear on the element %2. Only the standard attributes can appear.</source>
- <translation type="vanished">屬性 %1 不能出現在元素 %2。只能有標準屬性。</translation>
+ <source>Invalid document.</source>
+ <translation>無效的文件。</translation>
</message>
<message>
- <source>Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes.</source>
- <translation type="vanished">屬性 %1 不能出現在元素 %2。只能有 %3 以及標準屬性。</translation>
+ <source>Expected </source>
+ <translation>預期的 </translation>
</message>
<message>
- <source>Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes.</source>
- <translation type="vanished">屬性 %1 不能出現在元素 %2。只能有 %3,%4 以及標準屬性。</translation>
+ <source>, but got '</source>
+ <translation>,但取得 '</translation>
</message>
<message>
- <source>Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes.</source>
- <translation type="vanished">屬性 %1 不能出現在元素 %2。只能有 %3 以及標準屬性。</translation>
+ <source>Unexpected '</source>
+ <translation>未預期的 '</translation>
</message>
<message>
- <source>XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is.</source>
- <translation type="vanished">XSL-T 元素內的 XSL-T 屬性必須放在空(null)的命名空間,而不是像 %1 在 XSL-T 命名空間。</translation>
+ <source>Expected character data.</source>
+ <translation>預期的字元資料。</translation>
</message>
<message>
- <source>The attribute %1 must appear on element %2.</source>
- <translation type="vanished">屬性 %1 必須在元素 %2 內出現。</translation>
+ <source>Recursive entity detected.</source>
+ <translation>偵測到遞迴實體。</translation>
</message>
<message>
- <source>The element with local name %1 does not exist in XSL-T.</source>
- <translation type="vanished">有本地名稱 %1 的元素在 XSL-T 內不存在。</translation>
+ <source>Start tag expected.</source>
+ <translation>啟動預期的標記。</translation>
</message>
-</context>
-<context>
- <name>VolumeSlider</name>
<message>
- <source>Muted</source>
- <translation type="vanished">靜音</translation>
+ <source>XML declaration not at start of document.</source>
+ <translation>XML 宣告不在文件的開始。</translation>
</message>
<message>
- <source>Volume: %1%</source>
- <translation type="vanished">音量:%1%</translation>
+ <source>NDATA in parameter entity declaration.</source>
+ <translation>在參數實體宣告中的 NDATA。</translation>
</message>
-</context>
-<context>
- <name>WebCore::PlatformScrollbar</name>
<message>
- <source>Scroll here</source>
- <translation type="obsolete">在此捲軸</translation>
+ <source>%1 is an invalid processing instruction name.</source>
+ <translation>%1 是無效的處理指示名稱。</translation>
</message>
<message>
- <source>Left edge</source>
- <translation type="obsolete">左邊緣</translation>
+ <source>Invalid processing instruction name.</source>
+ <translation>處理指示名稱無效。</translation>
</message>
<message>
- <source>Top</source>
- <translation type="obsolete">頂端</translation>
+ <source>Illegal namespace declaration.</source>
+ <translation>非法命名空間宣告。</translation>
</message>
<message>
- <source>Right edge</source>
- <translation type="obsolete">右邊緣</translation>
+ <source>Invalid XML name.</source>
+ <translation>無效的 XML 名稱。</translation>
</message>
<message>
- <source>Bottom</source>
- <translation type="obsolete">底端</translation>
+ <source>Opening and ending tag mismatch.</source>
+ <translation>開啟和結束標記不相符。</translation>
</message>
<message>
- <source>Page left</source>
- <translation type="obsolete">頁面左方</translation>
+ <source>Reference to unparsed entity '%1'.</source>
+ <translation>參照未分析的項目「%1」。</translation>
</message>
<message>
- <source>Page up</source>
- <translation type="obsolete">頁面上方</translation>
+ <source>Entity '%1' not declared.</source>
+ <translation>實體「%1」未宣告。</translation>
</message>
<message>
- <source>Page right</source>
- <translation type="obsolete">頁面右方</translation>
+ <source>Reference to external entity '%1' in attribute value.</source>
+ <translation>參照到屬性值中的外部項目「%1」。</translation>
</message>
<message>
- <source>Page down</source>
- <translation type="obsolete">頁面下方</translation>
+ <source>Invalid character reference.</source>
+ <translation>無效的字元參照。</translation>
</message>
<message>
- <source>Scroll left</source>
- <translation type="obsolete">往左捲軸</translation>
+ <source>Encountered incorrectly encoded content.</source>
+ <translation>遭遇不正確的編碼內容。</translation>
</message>
<message>
- <source>Scroll up</source>
- <translation type="obsolete">往上捲軸</translation>
+ <source>The standalone pseudo attribute must appear after the encoding.</source>
+ <translation>單獨 pseudo 屬性必須出現在編碼之後。</translation>
</message>
<message>
- <source>Scroll right</source>
- <translation type="obsolete">往右捲軸</translation>
+ <source>%1 is an invalid PUBLIC identifier.</source>
+ <translation>%1 是無效的公共識別字。</translation>
</message>
<message>
- <source>Scroll down</source>
- <translation type="obsolete">往下捲軸</translation>
+ <source>Attribute '%1' redefined.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
</TS>
diff --git a/src/VBox/Frontends/VirtualBox/src/UITakeSnapshotDialog.cpp b/src/VBox/Frontends/VirtualBox/src/UITakeSnapshotDialog.cpp
index f4157cc..d437151 100644
--- a/src/VBox/Frontends/VirtualBox/src/UITakeSnapshotDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/UITakeSnapshotDialog.cpp
@@ -101,8 +101,12 @@ void UITakeSnapshotDialog::prepare()
AssertPtrReturnVoid(pLayout);
{
/* Configure layout: */
- const int iS0 = qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) * 2;
- pLayout->setSpacing(iS0);
+#ifdef VBOX_WS_MAC
+ pLayout->setSpacing(20);
+ pLayout->setContentsMargins(40, 20, 40, 20);
+#else
+ pLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) * 2);
+#endif
/* Create sub-layout: */
QVBoxLayout *pSubLayout1 = new QVBoxLayout;
@@ -131,8 +135,11 @@ void UITakeSnapshotDialog::prepare()
AssertPtrReturnVoid(pSubLayout2);
{
/* Configure layout: */
- const int iS2 = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- pSubLayout2->setSpacing(iS2);
+#ifdef VBOX_WS_MAC
+ pSubLayout2->setSpacing(5);
+#else
+ pSubLayout2->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
/* Create name label: */
m_pLabelName = new QLabel;
@@ -164,8 +171,11 @@ void UITakeSnapshotDialog::prepare()
AssertPtrReturnVoid(pSubLayout3);
{
/* Configure layout: */
- const int iS3 = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- pSubLayout3->setSpacing(iS3);
+#ifdef VBOX_WS_MAC
+ pSubLayout3->setSpacing(5);
+#else
+ pSubLayout3->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
/* Create description label: */
m_pLabelDescription = new QLabel;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp
index 0168add..29748d5 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp
@@ -235,8 +235,11 @@ void QIArrowSplitter::prepare()
{
/* Configure main-layout: */
m_pMainLayout->setContentsMargins(0, 0, 0, 0);
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- m_pMainLayout->setSpacing(iS);
+#ifdef VBOX_WS_MAC
+ m_pMainLayout->setSpacing(5);
+#else
+ m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
/* Create button-layout: */
QHBoxLayout *pButtonLayout = new QHBoxLayout;
AssertPtrReturnVoid(pButtonLayout);
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp
index a999ffb..3a95a82 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp
@@ -171,9 +171,11 @@ void QIMessageBox::prepare()
{
/* Configure main-layout: */
#ifdef VBOX_WS_MAC
- pMainLayout->setContentsMargins(40, 11, 40, 11);
+ pMainLayout->setContentsMargins(40, 20, 40, 20);
pMainLayout->setSpacing(15);
-#endif /* VBOX_WS_MAC */
+#else
+ pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) * 2);
+#endif
/* Create top-layout: */
QHBoxLayout *pTopLayout = new QHBoxLayout;
AssertPtrReturnVoid(pTopLayout);
diff --git a/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp b/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
index 07f04a4..dd4b73c 100644
--- a/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
@@ -814,8 +814,7 @@ void UIHostNetworkManagerWidget::prepareWidgets()
#ifdef VBOX_WS_MAC
layout()->setSpacing(10);
#else
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- layout()->setSpacing(iS);
+ layout()->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
#endif
/* Prepare toolbar: */
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
index 999fbaf..2caf3da 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
@@ -1521,8 +1521,7 @@ void UIMediumManagerWidget::prepareWidgets()
#ifdef VBOX_WS_MAC
layout()->setSpacing(10);
#else
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- layout()->setSpacing(iS);
+ layout()->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
#endif
/* Prepare toolbar: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp
index d378797..a761c12 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp
@@ -1285,8 +1285,11 @@ void UIIndicatorsPool::prepareContents()
{
/* Configure main-layout: */
m_pMainLayout->setContentsMargins(0, 0, 0, 0);
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2;
- m_pMainLayout->setSpacing(iS);
+#ifdef VBOX_WS_MAC
+ m_pMainLayout->setSpacing(5);
+#else
+ m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2);
+#endif
/* Update pool: */
updatePool();
}
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp
index ca6e86c..ad984c7 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp
@@ -544,8 +544,11 @@ void UIStatusBarEditorWidget::prepare()
{
/* Configure button-layout: */
m_pButtonLayout->setContentsMargins(0, 0, 0, 0);
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2;
- m_pButtonLayout->setSpacing(iS);
+#ifdef VBOX_WS_MAC
+ m_pButtonLayout->setSpacing(5);
+#else
+ m_pButtonLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2);
+#endif
/* Add button-layout into main-layout: */
m_pMainLayout->addLayout(m_pButtonLayout);
}
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp
index 128f3f1..502bfe3 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp
@@ -173,9 +173,24 @@ void UIVMCloseDialog::prepare()
/* Prepare 'main' layout: */
QVBoxLayout *pMainLayout = new QVBoxLayout(this);
{
+ /* Configure layout: */
+#ifdef VBOX_WS_MAC
+ pMainLayout->setContentsMargins(40, 20, 40, 20);
+ pMainLayout->setSpacing(15);
+#else
+ pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) * 2);
+#endif
+
/* Prepare 'top' layout: */
QHBoxLayout *pTopLayout = new QHBoxLayout;
{
+ /* Configure layout: */
+#ifdef VBOX_WS_MAC
+ pTopLayout->setSpacing(20);
+#else
+ pTopLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) * 2);
+#endif
+
/* Prepare 'top-left' layout: */
QVBoxLayout *pTopLeftLayout = new QVBoxLayout;
{
@@ -188,8 +203,8 @@ void UIVMCloseDialog::prepare()
const QIcon icon = UIIconPool::iconSet(":/os_unknown.png");
m_pIcon->setPixmap(icon.pixmap(iIconMetric, iIconMetric));
}
- /* Configure layout: */
- pTopLeftLayout->setContentsMargins(0, 0, 0, 0);
+
+ /* Add into layout: */
pTopLeftLayout->addWidget(m_pIcon);
pTopLeftLayout->addStretch();
}
@@ -197,10 +212,11 @@ void UIVMCloseDialog::prepare()
QVBoxLayout *pTopRightLayout = new QVBoxLayout;
{
/* Configure layout: */
- // WORKAROUND:
- // Why do we need it? It should be the default one, but it's not..
- const int iS1 = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing);
- pTopRightLayout->setSpacing(iS1);
+#ifdef VBOX_WS_MAC
+ pTopRightLayout->setSpacing(10);
+#else
+ pTopRightLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing));
+#endif
/* Prepare 'text' label: */
m_pLabel = new QLabel(this);
@@ -208,10 +224,11 @@ void UIVMCloseDialog::prepare()
QGridLayout *pChoiceLayout = new QGridLayout;
{
/* Configure layout: */
- // WORKAROUND:
- // Why do we need it? It should be the default one, but it's not..
- const int iS2 = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing);
- pChoiceLayout->setSpacing(iS2);
+#ifdef VBOX_WS_MAC
+ pChoiceLayout->setSpacing(10);
+#else
+ pChoiceLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing));
+#endif
/* Prepare icon metric: */
const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
@@ -277,11 +294,8 @@ void UIVMCloseDialog::prepare()
}
/* Prepare 'discard' check-box: */
m_pDiscardCheckBox = new QCheckBox(this);
- /* Configure layout: */
-#ifdef VBOX_WS_MAC
- pChoiceLayout->setSpacing(15);
-#endif
- pChoiceLayout->setContentsMargins(0, 0, 0, 0);
+
+ /* Add into layout: */
pChoiceLayout->addWidget(m_pDetachIcon, 0, 0);
pChoiceLayout->addWidget(m_pDetachRadio, 0, 1);
pChoiceLayout->addWidget(m_pSaveIcon, 1, 0);
@@ -292,21 +306,17 @@ void UIVMCloseDialog::prepare()
pChoiceLayout->addWidget(m_pPowerOffRadio, 3, 1);
pChoiceLayout->addWidget(m_pDiscardCheckBox, 4, 1);
}
- /* Configure layout: */
-#ifdef VBOX_WS_MAC
- pTopRightLayout->setSpacing(15);
-#endif
- pTopRightLayout->setContentsMargins(0, 0, 0, 0);
+
+ /* Add into layout: */
pTopRightLayout->addWidget(m_pLabel);
pTopRightLayout->addItem(pChoiceLayout);
}
- /* Configure layout: */
- pTopLayout->setContentsMargins(0, 0, 0, 0);
- const int iS3 = qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) * 2;
- pTopLayout->setSpacing(iS3);
+
+ /* Add into layout: */
pTopLayout->addItem(pTopLeftLayout);
pTopLayout->addItem(pTopRightLayout);
}
+
/* Prepare button-box: */
QIDialogButtonBox *pButtonBox = new QIDialogButtonBox(this);
{
@@ -316,10 +326,8 @@ void UIVMCloseDialog::prepare()
connect(pButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
connect(pButtonBox, SIGNAL(helpRequested()), &msgCenter(), SLOT(sltShowHelpHelpDialog()));
}
- /* Configure layout: */
-#ifdef VBOX_WS_MAC
- pMainLayout->setContentsMargins(40, 20, 40, 20);
-#endif /* VBOX_WS_MAC */
+
+ /* Add into layout: */
pMainLayout->addItem(pTopLayout);
pMainLayout->addWidget(pButtonBox);
}
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp
index 1ea6f6e..0a1e5ed 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp
@@ -1241,8 +1241,7 @@ void UISnapshotPane::prepareWidgets()
#ifdef VBOX_WS_MAC
layout()->setSpacing(10);
#else
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- layout()->setSpacing(iS);
+ layout()->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
#endif
/* Prepare toolbar: */
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
index 88d67cc..a5c1f1a 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
@@ -3450,8 +3450,7 @@ void UIMachineSettingsStorage::prepare()
mLtStorage->setContentsMargins(3, 0, 3, 0);
mLtStorage->setSpacing(3);
#else
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 3;
- mLtStorage->setSpacing(iS);
+ mLtStorage->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 3);
#endif
/* Prepare storage tree: */
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
index 66dd310..c0ad0c9 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
@@ -755,8 +755,7 @@ void UIMachineSettingsSystem::prepareTabMotherboard()
m_pLayoutBootOrder->setContentsMargins(3, 3, 3, 3);
m_pLayoutBootOrder->setSpacing(3);
#else
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 3;
- m_pLayoutBootOrder->setSpacing(iS);
+ m_pLayoutBootOrder->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 3);
#endif
/* Boot-order tree-widget created in the .ui file. */
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
index 613cece..5df511f 100755
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
@@ -68,8 +68,11 @@ void UIFilmContainer::setValue(const QVector<BOOL> &value)
{
/* Configure viewport layout: */
pWidgetLayout->setMargin(0);
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2;
- pWidgetLayout->setSpacing(iS);
+#ifdef VBOX_WS_MAC
+ pWidgetLayout->setSpacing(5);
+#else
+ pWidgetLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2);
+#endif
/* Create new widgets according passed vector: */
for (int iScreenIndex = 0; iScreenIndex < value.size(); ++iScreenIndex)
{
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
index ab7f9dc..a7f8c8a 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
@@ -480,8 +480,11 @@ void UIHostComboEditor::prepare()
QHBoxLayout *pLayout = new QHBoxLayout(this);
{
/* Configure layout: */
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- pLayout->setSpacing(iS);
+#ifdef VBOX_WS_MAC
+ pLayout->setSpacing(5);
+#else
+ pLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
pLayout->setContentsMargins(0, 0, 0, 0);
/* Create UIHostComboEditorPrivate instance: */
m_pEditor = new UIHostComboEditorPrivate;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp
index ae397cf..6c5de0c 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp
@@ -123,8 +123,11 @@ UIHotKeyEditor::UIHotKeyEditor(QWidget *pParent)
setFocusProxy(m_pLineEdit);
/* Configure layout: */
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2;
- m_pMainLayout->setSpacing(iS);
+#ifdef VBOX_WS_MAC
+ m_pMainLayout->setSpacing(5);
+#else
+ m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
m_pMainLayout->setContentsMargins(0, 0, 0, 0);
m_pMainLayout->addWidget(m_pLineEdit);
m_pMainLayout->addLayout(m_pButtonLayout);
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIMiniToolBar.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIMiniToolBar.cpp
index 22c7b61..adcbdef 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIMiniToolBar.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIMiniToolBar.cpp
@@ -413,6 +413,7 @@ Qt::WindowFlags UIMiniToolBar::defaultWindowFlags(GeometryType geometryType)
case X11WMType_KWin:
case X11WMType_Metacity:
case X11WMType_Mutter:
+ case X11WMType_Xfwm4:
return geometryType == GeometryType_Full ?
Qt::Tool | Qt::FramelessWindowHint :
Qt::Window | Qt::FramelessWindowHint;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
index 87ad9e7..fb9faea 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
@@ -827,8 +827,7 @@ UIPortForwardingTable::UIPortForwardingTable(const UIPortForwardingDataList &rul
pMainLayout->setContentsMargins(0, 0, 0, 0);
pMainLayout->setSpacing(3);
#else
- const int iS = qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 3;
- pMainLayout->setSpacing(iS);
+ pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 3);
#endif
/* Create table: */
m_pTableView = new UIPortForwardingView;
diff --git a/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc b/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc
index e95a558..63ca64f 100644
Binary files a/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc and b/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc b/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc
index 80e8494..72d6139 100644
Binary files a/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc and b/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc b/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc
index 39b0f5f..6677e09 100644
Binary files a/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc and b/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc b/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc
index 7724543..2053df4 100644
Binary files a/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc and b/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_pixel.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_pixel.c
index 32f87e0..5de54ad 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_pixel.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_pixel.c
@@ -311,11 +311,17 @@ void STATE_APIENTRY crStatePixelMapfv (GLenum map, GLint mapsize, const GLfloat
void STATE_APIENTRY crStatePixelMapuiv (GLenum map, GLint mapsize, const GLuint * values)
{
- GLfloat fvalues[CR_MAX_PIXEL_MAP_TABLE];
- GLint i;
+ if (mapsize < 0 || mapsize > CR_MAX_PIXEL_MAP_TABLE)
+ {
+ crError("crStatePixelMapuiv: parameter 'mapsize' is out of range");
+ return;
+ }
if (!crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB))
{
+ GLfloat fvalues[CR_MAX_PIXEL_MAP_TABLE];
+ GLint i;
+
if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) {
for (i=0;i<mapsize;i++) {
fvalues[i] = (GLfloat) values[i];
diff --git a/src/VBox/HostServices/SharedClipboard/x11-stub.cpp b/src/VBox/HostServices/SharedClipboard/x11-stub.cpp
index d890215..77a3e49 100644
--- a/src/VBox/HostServices/SharedClipboard/x11-stub.cpp
+++ b/src/VBox/HostServices/SharedClipboard/x11-stub.cpp
@@ -55,7 +55,7 @@ void vboxClipboardDestroy (void)
int vboxClipboardConnect (VBOXCLIPBOARDCLIENTDATA *pClient,
bool fHeadless)
{
- NOREF(pClient, fHeadless);
+ RT_NOREF(pClient, fHeadless);
LogFlowFunc(("called, returning VINF_SUCCESS.\n"));
return VINF_SUCCESS;
}
@@ -77,7 +77,7 @@ int vboxClipboardSync (VBOXCLIPBOARDCLIENTDATA * /* pClient */)
*/
void vboxClipboardDisconnect (VBOXCLIPBOARDCLIENTDATA *pClient)
{
- NOREF(pClient);
+ RT_NOREF(pClient);
LogFlowFunc(("called, returning.\n"));
}
@@ -91,7 +91,7 @@ void vboxClipboardDisconnect (VBOXCLIPBOARDCLIENTDATA *pClient)
void vboxClipboardFormatAnnounce (VBOXCLIPBOARDCLIENTDATA *pClient,
uint32_t u32Formats)
{
- NOREF(pClient, u32Formats);
+ RT_NOREF(pClient, u32Formats);
LogFlowFunc(("called, returning.\n"));
}
@@ -107,7 +107,7 @@ void vboxClipboardFormatAnnounce (VBOXCLIPBOARDCLIENTDATA *pClient,
int vboxClipboardReadData (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Format,
void *pv, uint32_t cb, uint32_t *pcbActual)
{
- NOREF(pClient, u32Format, pv, cb);
+ RT_NOREF(pClient, u32Format, pv, cb);
LogFlowFunc(("called, returning VINF_SUCCESS.\n"));
/* No data available. */
*pcbActual = 0;
@@ -125,6 +125,6 @@ int vboxClipboardReadData (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Format,
void vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, void *pv,
uint32_t cb, uint32_t u32Format)
{
- NOREF(pClient, pv, cb, u32Format);
+ RT_NOREF(pClient, pv, cb, u32Format);
LogFlowFunc(("called, returning.\n"));
}
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc b/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc
index d9ab34e..750e26f 100644
Binary files a/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc and b/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc differ
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
index de1277b..955752d 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
@@ -178,8 +178,17 @@ GLuint crServerTranslateProgramID( GLuint id )
void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteProgramsARB(GLsizei n, const GLuint * programs)
{
- GLuint *pLocalProgs = (GLuint *) crAlloc(n * sizeof(GLuint));
+ GLuint *pLocalProgs;
GLint i;
+
+ if (n >= UINT32_MAX / sizeof(GLuint))
+ {
+ crError("crServerDispatchDeleteProgramsARB: parameter 'n' is out of range");
+ return;
+ }
+
+ pLocalProgs = (GLuint *)crAlloc(n * sizeof(GLuint));
+
if (!pLocalProgs) {
crError("crServerDispatchDeleteProgramsARB: out of memory");
return;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c
index a423f21..1438d42 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c
@@ -229,6 +229,12 @@ TranslateListIDs(GLsizei n, GLenum type, const GLvoid *lists, GLuint *newLists)
void SERVER_DISPATCH_APIENTRY
crServerDispatchCallLists( GLsizei n, GLenum type, const GLvoid *lists )
{
+ if (n >= UINT32_MAX / sizeof(GLuint))
+ {
+ crError("crServerDispatchCallLists: parameter 'n' is out of range");
+ return;
+ }
+
#ifndef VBOX_WITH_CR_DISPLAY_LISTS
if (!cr_server.sharedDisplayLists) {
/* need to translate IDs */
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c
index a941583..6a8c973 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c
@@ -199,9 +199,17 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchBindTexture( GLenum target, GLuint
void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteTextures( GLsizei n, const GLuint *textures)
{
- GLuint *newTextures = (GLuint *) crAlloc(n * sizeof(GLuint));
+ GLuint *newTextures;
GLint i;
+ if (n >= UINT32_MAX / sizeof(GLuint))
+ {
+ crError("crServerDispatchDeleteTextures: parameter 'n' is out of range");
+ return;
+ }
+
+ newTextures = (GLuint *)crAlloc(n * sizeof(GLuint));
+
if (!newTextures)
{
crError("crServerDispatchDeleteTextures: out of memory");
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_stipple.c b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_stipple.c
index b6e1e1c..dcc3ab5 100644
--- a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_stipple.c
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_stipple.c
@@ -9,17 +9,19 @@
void crUnpackPolygonStipple( void )
{
int nodata = READ_DATA(0, int);
- GLubyte *mask;
-
- if (nodata)
- mask = (void*) (uintptr_t) READ_DATA(4, GLint);
- else
- mask = DATA_POINTER( 4, GLubyte );
-
- cr_unpackDispatch.PolygonStipple(mask);
if (nodata)
+ {
+ crError("crUnpackPolygonStipple: GL_PIXEL_UNPACK_BUFFER is not supported");
INCR_DATA_PTR(8);
+ }
else
- INCR_DATA_PTR(4 + 32*32/8);
+ {
+ GLubyte *mask;
+
+ mask = DATA_POINTER(4, GLubyte);
+ cr_unpackDispatch.PolygonStipple(mask);
+ // Stipple mask consists of 32 * 32 bits
+ INCR_DATA_PTR(4 + 32 * 32 / 8);
+ }
}
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c
index 16aabc2..d94d1df 100644
--- a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c
@@ -289,9 +289,13 @@ void crUnpackTexGendv( void )
GLdouble params[4];
unsigned int n_param = READ_DATA( 0, int ) - ( sizeof(int) + 8 );
- if ( n_param > sizeof(params) )
- crError( "crUnpackTexGendv: n_param=%d, expected <= %d\n", n_param,
- (unsigned int)sizeof(params) );
+ if (n_param > sizeof(params))
+ {
+ crError("crUnpackTexGendv: n_param=%d, expected <= %d\n", n_param,
+ (unsigned int)sizeof(params));
+ return;
+ }
+
crMemcpy( params, DATA_POINTER( sizeof( int ) + 8, GLdouble ), n_param );
cr_unpackDispatch.TexGendv( coord, pname, params );
diff --git a/src/VBox/Installer/win/NLS/zh_TW.wxl b/src/VBox/Installer/win/NLS/zh_TW.wxl
index aefd522..55a1536 100644
--- a/src/VBox/Installer/win/NLS/zh_TW.wxl
+++ b/src/VBox/Installer/win/NLS/zh_TW.wxl
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="65001" Culture="zh_TW">
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="65001" Culture="zh-TW">
<!--
Language Definition Include for VirtualBox WiX script.
@@ -50,10 +50,10 @@
<String Id="VB_Network">[ProductName] 網路裝置驅動程式針對網路支援。</String>
<String Id="VB_NetFltDriver">[ProductName] 驅動程式針對橋接網路。</String>
<String Id="VB_NetAdpDriver">[ProductName] 虛擬網路介面卡針對「僅限主機」網路。</String>
- <String Id="VB_NetLwfDriver">[ProductName] driver for NDIS6 Bridged Networking.</String>
- <String Id="VB_NetAdp6Driver">[ProductName] virtual network adapter driver for NDIS6 Host-Only Networking.</String>
+ <String Id="VB_NetLwfDriver">[ProductName] 驅動程式針對 NDIS6 橋接網路。</String>
+ <String Id="VB_NetAdp6Driver">[ProductName] 虛擬網路介面卡針對 NDIS6 「僅限主機」網路。</String>
- <String Id="VB_Python">VirtualBox 的 Python 支援。</String>
+ <String Id="VB_Python">VirtualBox 的 Python 支援。</String>
<!---->
@@ -66,7 +66,7 @@
<!---->
- <String Id="CancelDlg_Question">您確定要取消 [ProductName] 安裝嗎?</String>
+ <String Id="CancelDlg_Question">您確定要取消 [ProductName] 安裝嗎?</String>
<!---->
@@ -94,10 +94,10 @@
<!---->
- <String Id="WarnSaveStatesDlg_Header">警告:</String>
+ <String Id="WarnSaveStatesDlg_Header">警告:</String>
<String Id="WarnSaveStatesDlg_Header2">已經的儲存狀態不相容!</String>
<String Id="WarnSaveStatesDlg_Desc">升級 [ProductName] 時,所有來自已經存在機器的儲存狀態不再能動作!安裝後,您必須手動捨棄。</String>
- <String Id="WarnSaveStatesDlg_Proceed">立即進行安裝嗎?</String>
+ <String Id="WarnSaveStatesDlg_Proceed">立即進行安裝嗎?</String>
<!---->
@@ -106,11 +106,11 @@
<!---->
- <String Id="NetCfgLocked">繼續安裝前,必須關閉以下應用程式:"[2]"</String>
+ <String Id="NetCfgLocked">繼續安裝前,必須關閉以下應用程式: "[2]"</String>
<!---->
- <String Id="CustomizeDlg_Location">位置:</String>
+ <String Id="CustomizeDlg_Location">位置:</String>
<String Id="CustomizeDlg_DiskUsage">磁碟使用量(&U)</String>
<String Id="CustomizeDlg_SelFeatures">選取您要安裝功能的方式。</String>
<String Id="CustomizeDlg_IconTree">按一下以下樹狀中圖示以變更安裝功能的方式。</String>
@@ -122,28 +122,28 @@
<!---->
<String Id="Customize2Dlg_Header">自訂</String>
- <String Id="Customize2Dlg_Desc">請選擇以下選項:</String>
- <String Id="Customize2Dlg_CreateStartMenuEntries">Create start menu entries</String>
+ <String Id="Customize2Dlg_Desc">請選擇以下選項:</String>
+ <String Id="Customize2Dlg_CreateStartMenuEntries">建立 [開始] 功能表項目</String>
<String Id="Customize2Dlg_CreateDesktopShortcut">在桌面建立捷徑</String>
<String Id="Customize2Dlg_CreateQuickLaunch">在快速啟動列建立捷徑</String>
- <String Id="Customize2Dlg_RegisterFileExtensions">註冊文件關聯</String>
+ <String Id="Customize2Dlg_RegisterFileExtensions">註冊檔案關聯</String>
<!---->
- <String Id="SelectionNetworkTypeDlg_CommonDescription">Please choose which type of network drivers you will use:</String>
- <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
-This is default for older versions of Windows (pre-Vista).</String>
- <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
-This is default for newer versions of Windows (Vista and newer).</String>
- <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Use NDIS5 network drivers.</String>
- <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Use NDIS6 network drivers.</String>
+ <String Id="SelectionNetworkTypeDlg_CommonDescription">請選擇您將使用的網路驅動程式類型:</String>
+ <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 網路驅動程式。
+這是舊版 Windows 的預設值 (Vista 前)。</String>
+ <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 網路驅動程式。
+這是新版 Windows 的預設值 (Vista 和以上)。</String>
+ <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">使用 NDIS5 網路驅動程式。</String>
+ <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">使用 NDIS6 網路驅動程式。</String>
<!---->
- <String Id="WarnDisconNetIfacesDlg_Title">警告:</String>
+ <String Id="WarnDisconNetIfacesDlg_Title">警告:</String>
<String Id="WarnDisconNetIfacesDlg_Title2">網路介面</String>
<String Id="WarnDisconNetIfacesDlg_Desc">安裝 [ProductName] 網路功能將重設您的網路連線並暫時中斷網路連線。</String>
- <String Id="WarnDisconNetIfacesDlg_Question">立即進行安裝嗎?</String>
+ <String Id="WarnDisconNetIfacesDlg_Question">立即進行安裝嗎?</String>
<!---->
@@ -158,8 +158,8 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="BrowseDlg_ChangeCurFolder">變更目前目的地資料夾</String>
<String Id="BrowseDlg_UpOneLevelTooltip">上一層</String>
<String Id="BrowseDlg_CreateNewFolderTooltip">建立新的資料夾</String>
- <String Id="BrowseDlg_LookIn">瀏覽(&L):</String>
- <String Id="BrowseDlg_FolderName">資料夾名稱(&F):</String>
+ <String Id="BrowseDlg_LookIn">瀏覽(&L):</String>
+ <String Id="BrowseDlg_FolderName">資料夾名稱(&F):</String>
<!---->
@@ -208,12 +208,12 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="MaintenanceTypeDlg_RepairText">修復在最近安裝狀態的錯誤 - 修復缺少或損毀的檔案、捷徑和登錄檔項目。</String>
<String Id="MaintenanceTypeDlg_RepairTooltip">修復安裝</String>
<String Id="MaintenanceTypeDlg_RepairProgress1">正在修復</String>
- <String Id="MaintenanceTypeDlg_RepairProgress2">repairs</String>
+ <String Id="MaintenanceTypeDlg_RepairProgress2">修復</String>
<String Id="MaintenanceTypeDlg_Remove">移除(&R)</String>
<String Id="MaintenanceTypeDlg_RemoveText">從電腦移除 [ProductName]。</String>
<String Id="MaintenanceTypeDlg_RemoveTooltip">移除安裝</String>
<String Id="MaintenanceTypeDlg_RemoveProgress1">正在移除</String>
- <String Id="MaintenanceTypeDlg_RemoveProgress2">removes</String>
+ <String Id="MaintenanceTypeDlg_RemoveProgress2">移除</String>
<!---->
@@ -258,23 +258,23 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="MsiRMFilesInUse_DontUseRM">不要關閉應用程式,將需要重新開機。 (&D)</String>
<!-- The following strings are internally used by WiX and MSI -->
- <String Id="Error0">{{嚴重錯誤:}}</String>
+ <String Id="Error0">{{嚴重錯誤: }}</String>
<String Id="Error1">{{錯誤 [1]。}}</String>
- <String Id="Error2">警告 [1]。</String>
- <String Id="Error3"/>
- <String Id="Error4">資訊 [1]。</String>
- <String Id="Error5">安裝程式安裝這個封裝時發生未預期的錯誤。 這可能表示這個封裝的問題。 錯誤碼 [1]。 {{引數:[2], [3], [4]}}</String>
- <String Id="Error6"/>
- <String Id="Error7">{{磁碟已滿:}}</String>
- <String Id="Error8">動作 [Time]:[1]. [2]</String>
+ <String Id="Error2">警告 [1]。 </String>
+ <String Id="Error3" />
+ <String Id="Error4">資訊 [1]。 </String>
+ <String Id="Error5">安裝程式安裝這個封裝時發生未預期的錯誤。 這可能表示這個封裝的問題。 錯誤碼 [1]。 {{引數: [2], [3], [4]}}</String>
+ <String Id="Error6" />
+ <String Id="Error7">{{磁碟已滿: }}</String>
+ <String Id="Error8">動作 [Time]: [1]. [2]</String>
<String Id="Error9">[ProductName]</String>
<String Id="Error10">{[2]}{, [3]}{, [4]}</String>
- <String Id="Error11">訊息類型:[1], 引數:[2]</String>
- <String Id="Error12">=== 開啟記錄時間:[Date] [Time] ===</String>
- <String Id="Error13">=== 停止記錄時間:[Date] [Time] ===</String>
- <String Id="Error14">動作開始 [Time]:[1]。</String>
- <String Id="Error15">動作結束 [Time]:[1]。 傳回值 [2]。</String>
- <String Id="Error16">剩餘時間:{[1] 分 }{[2] 秒}</String>
+ <String Id="Error11">訊息類型: [1], 引數: [2]</String>
+ <String Id="Error12">=== 開啟記錄時間: [Date] [Time] ===</String>
+ <String Id="Error13">=== 停止記錄時間: [Date] [Time] ===</String>
+ <String Id="Error14">動作開始 [Time]: [1]。</String>
+ <String Id="Error15">動作結束 [Time]: [1]。 傳回值 [2]。</String>
+ <String Id="Error16">剩餘時間: {[1] 分 }{[2] 秒}</String>
<String Id="Error17">記憶體不足,重試之前先關閉其它應用程式。</String>
<String Id="Error18">安裝程式不再有回應。</String>
<String Id="Error19">安裝程式已經永久中止。</String>
@@ -284,48 +284,48 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="Error23">正在準備移除此應用程式的舊版本...</String>
<String Id="Error32">{[ProductName] } 安裝成功完成。</String>
<String Id="Error33">{[ProductName] } 安裝失敗。</String>
- <String Id="Error1101">讀取檔案錯誤:[2]。{{ 系統錯誤 [3]。}} 檢查檔案是否存在,並且可以存取。</String>
+ <String Id="Error1101">讀取檔案錯誤: [2]。{{ 系統錯誤 [3]。}} 檢查檔案是否存在,並且可以存取。</String>
<String Id="Error1301">無法建立目錄 '[2]'。 同名的目錄已經存在。 取消安裝並嘗試安裝到不同位置。</String>
- <String Id="Error1302">請插入磁碟:[2]</String>
- <String Id="Error1303">安裝程式的權限不足,無法存取這個目錄:[2],安裝無法繼續,以系統管理員的身份登入或是連絡您的系統管理員。</String>
- <String Id="Error1304">寫入至檔案時發生錯誤:[2]。請檢查您可以存取那個目錄。</String>
+ <String Id="Error1302">請插入磁碟: [2]</String>
+ <String Id="Error1303">安裝程式的權限不足,無法存取這個目錄: [2],安裝無法繼續,以系統管理員的身份登入或是連絡您的系統管理員。</String>
+ <String Id="Error1304">寫入至檔案時發生錯誤: [2]。請檢查您可以存取那個目錄。</String>
<String Id="Error1305">讀取檔案時發生錯誤:[2]。{{ 系統錯誤 [3]。}} 請檢查檔案是否存在,並且可以存取。</String>
<String Id="Error1306">另一個應用程序獨占存取檔案 '[2]'。 請關閉所有其它應用程式,然後按一下「重試」。</String>
- <String Id="Error1307">磁碟空間不足,無法安裝這個檔案:[2]。釋放一些磁碟空間然後按一下「重試」,或按一下「取消」結束。</String>
- <String Id="Error1308">找不到來源檔案:[2]。 請驗證檔案存在並且您可以存取它。</String>
- <String Id="Error1309">讀取檔案錯誤:[3]。{{ 系統錯誤 [2]。}} 請檢查檔案是否存在,並且可以存取。</String>
- <String Id="Error1310">寫入至檔案時發生錯誤:[3]。{{ 系統錯誤 [2]。}} 請檢查您可以存取那個目錄。</String>
- <String Id="Error1311">找不到來源檔案 {{(cabinet)}}:[2]。 請檢查檔案存在並且可以存取。</String>
+ <String Id="Error1307">磁碟空間不足,無法安裝這個檔案: [2]。釋放一些磁碟空間然後按一下「重試」,或按一下「取消」結束。</String>
+ <String Id="Error1308">找不到來源檔案: [2]。 請驗證檔案存在並且您可以存取它。</String>
+ <String Id="Error1309">讀取檔案錯誤: [3]。{{ 系統錯誤 [2]。}} 請檢查檔案是否存在,並且可以存取。</String>
+ <String Id="Error1310">寫入至檔案時發生錯誤: [3]。{{ 系統錯誤 [2]。}} 請檢查您可以存取那個目錄。</String>
+ <String Id="Error1311">找不到來源檔案 {{(cabinet)}}: [2]。 請檢查檔案存在並且可以存取。</String>
<String Id="Error1312">無法建立目錄 '[2]'。 同名的檔案已經存在。 請重新命名或移除檔案並按一下「重試」,或按一下「取消」結束。</String>
<String Id="Error1313">磁碟區 [2] 目前不可使用。 請選取另一個。</String>
<String Id="Error1314">指定的路徑 '[2]' 不可使用。</String>
- <String Id="Error1315">無法寫入指定的資料夾:[2]。</String>
- <String Id="Error1316">嘗試從檔案讀取時發生網路錯誤:[2]</String>
- <String Id="Error1317">嘗試建立目錄時發生錯誤:[2]</String>
- <String Id="Error1318">嘗試建立目錄時發生網路錯誤:[2]</String>
- <String Id="Error1319">嘗試開啟來源檔案時發生網路錯誤:[2]</String>
- <String Id="Error1320">指定的路徑太長:[2]</String>
- <String Id="Error1321">Installer 的權限不足以修改這個檔案:[2]。</String>
+ <String Id="Error1315">無法寫入指定的資料夾: [2]。</String>
+ <String Id="Error1316">嘗試從檔案讀取時發生網路錯誤: [2]</String>
+ <String Id="Error1317">嘗試建立目錄時發生錯誤: [2]</String>
+ <String Id="Error1318">嘗試建立目錄時發生網路錯誤: [2]</String>
+ <String Id="Error1319">嘗試開啟來源檔案時發生網路錯誤: [2]</String>
+ <String Id="Error1320">指定的路徑太長: [2]</String>
+ <String Id="Error1321">Installer 的權限不足以修改這個檔案: [2]。</String>
<String Id="Error1322">資料夾路徑的部份 '[2]' 無效。其為空或超過系統允許的長度。</String>
<String Id="Error1323">資料夾路徑 '[2]' 包含無效的字在資料夾路徑。</String>
<String Id="Error1324">資料夾路徑 '[2]' 包含無效字元。</String>
<String Id="Error1325">'[2]' 不是有效的短檔名。</String>
- <String Id="Error1326">取得檔案安全性錯誤:[3] GetLastString:[2]</String>
- <String Id="Error1327">無效的磁碟機:[2]</String>
- <String Id="Error1328">套用修正檔到檔案 [2] 錯誤。 可能已由其他主機更新,且這個修正檔不再能修改。 更多資訊請聯絡您的修正檔供應商。 {{系統錯誤:[3]}}</String>
+ <String Id="Error1326">取得檔案安全性錯誤: [3] GetLastString: [2]</String>
+ <String Id="Error1327">無效的磁碟機: [2]</String>
+ <String Id="Error1328">套用修正檔到檔案 [2] 錯誤。 可能已由其他主機更新,且這個修正檔不再能修改。 更多資訊請聯絡您的修正檔供應商。 {{系統錯誤: [3]}}</String>
<String Id="Error1329">無法安裝所需的檔案,因為 cabinet 檔案 [2] 沒有數位簽章。 這表示 cabinet 檔案已經損毀。</String>
<String Id="Error1330">無法安裝所需的檔案,因為 cabinet 檔案 [2] 有無效的數位簽章。 這表示 cabinet 檔案已經損毀。 {{ WinVerifyTrust 返回錯誤 [3]。}}</String>
- <String Id="Error1331">修正複製 [2] 檔案失敗:CRC 錯誤。</String>
- <String Id="Error1332">修正移動 [2] 檔案失敗:CRC 錯誤。</String>
- <String Id="Error1333">修正路徑 [2] 檔案失敗:CRC 錯誤。</String>
+ <String Id="Error1331">修正複製 [2] 檔案失敗: CRC 錯誤。</String>
+ <String Id="Error1332">修正移動 [2] 檔案失敗: CRC 錯誤。</String>
+ <String Id="Error1333">修正路徑 [2] 檔案失敗: CRC 錯誤。</String>
<String Id="Error1334">無法安裝 '[2]' 因為在 cainet 檔案 '[3]' 中找不到檔案。 這表示網路錯誤、從 CD-ROM 讀取錯誤、或此安裝包問題。</String>
<String Id="Error1335">此安裝所需的 cabinet 檔案 '[2]' 已經損毀且無法使用。 這表示網路錯誤、從 CD-ROM 讀取錯誤、或此安裝包問題。</String>
- <String Id="Error1336">完成這個安裝所需的暫存檔案建立錯誤。 {{ 資料夾:[3]。 系統錯誤碼:[2]}}</String>
- <String Id="Error1401">無法建立機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
- <String Id="Error1402">無法開啟機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
- <String Id="Error1403">無法從機碼 [3] 刪除值:[2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
- <String Id="Error1404">無法刪除機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
- <String Id="Error1405">無法從機碼 [3] 讀取值 [2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+ <String Id="Error1336">完成這個安裝所需的暫存檔案建立錯誤。 {{ 資料夾: [3]。 系統錯誤碼: [2]}}</String>
+ <String Id="Error1401">無法建立機碼: [2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。 </String>
+ <String Id="Error1402">無法開啟機碼: [2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。 </String>
+ <String Id="Error1403">無法從機碼 [3] 刪除值:[2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。 </String>
+ <String Id="Error1404">無法刪除機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。 </String>
+ <String Id="Error1405">無法從機碼 [3] 讀取值 [2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。 </String>
<String Id="Error1406">無法寫入值 [2] 至機碼 [3]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
<String Id="Error1407">無法取得機碼 [2] 的值名稱。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
<String Id="Error1408">無法取得機碼 [2] 的子機碼名稱。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
@@ -335,38 +335,38 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="Error1501">存取保全資料時發生錯誤,請確定 Windows Installer 是否正確組態,然後再試一次。</String>
<String Id="Error1502">使用者 '[2]' 先前已經啟動產品 '[3]' 的安裝。 該使用者在可以使用該產品前需要再次執行安裝。您目前的安裝現在將繼續。</String>
<String Id="Error1503">使用者 '[2]' 先前已經啟動產品 '[3]' 的安裝。 該使用者在可以使用該產品前需要再次執行安裝。</String>
- <String Id="Error1601">磁碟空間不足 -- 磁碟區:'[2]',所需空間:[3] KB; 可用空間:[4] KB。 釋放一些磁碟空間並重試。</String>
- <String Id="Error1602">您確定要取消嗎?</String>
- <String Id="Error1603">檔案 [2][3] 正在由 { 以下處理程序:名稱:[4],Id:[5],視窗標題:'[6]'} 使用中。 關閉該應用程式並重試。</String>
+ <String Id="Error1601">磁碟空間不足 -- 磁碟區: '[2]',所需空間: [3] KB; 可用空間: [4] KB。 釋放一些磁碟空間並重試。</String>
+ <String Id="Error1602">您確定要取消嗎?</String>
+ <String Id="Error1603">檔案 [2][3] 正在由 { 以下處理程序: 名稱: [4],Id: [5],視窗標題: '[6]'} 使用中。 關閉該應用程式並重試。</String>
<String Id="Error1604">已經安裝產品 '[2]',此產品防止安裝。 兩個產品不相容。</String>
<String Id="Error1605">磁碟區 '[2]' 沒有足夠的磁碟空間以啟用復原的安裝繼續。 需要 [3] KB,但只有 [4] KB 可以使用。 按一下「忽略」以不儲存復原資訊繼續安裝,按一下「重試」以再次檢查可用空間,或按一下「取消」以離開安裝。</String>
<String Id="Error1606">無法存取網路位置 [2]。</String>
- <String Id="Error1607">繼續安裝前應該關閉以下應用程式:</String>
+ <String Id="Error1607">繼續安裝前應該關閉以下應用程式:</String>
<String Id="Error1608">無法在本機中找到任何先前已安裝的合格版本。</String>
<String Id="Error1609">套用安全性設定時發生錯誤。 [2] 不是有效的使用者或群組。 這會是安裝包的問題或連線到網路上網域控制站的問題。 檢查您的網路連線並按一下「重試」,或「取消」以結束安裝。 {{找不到使用者的 SID,系統錯誤 [3]}}</String>
<String Id="Error1701">金鑰 [2] 是無效的,檢查您輸入的金鑰是否正確。</String>
<String Id="Error1702">要繼續設定 [2] 之前,Installer 必須重新啟動您的系統,按「是」將立即重新啟動;如果您想要稍後手動重新啟動請按「否」。</String>
<String Id="Error1703">您必須重新啟動您的系統,對 [2] 所做的組態變更才會生效,按「是」立即重新啟動;如果您想要稍後手動重新啟動請按「否」。</String>
- <String Id="Error1704">安裝 [2] 目前已經暫停,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
- <String Id="Error1705">另一個安裝這個產品的程式正在進行中,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
+ <String Id="Error1704">安裝 [2] 目前已經暫停,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
+ <String Id="Error1705">另一個安裝這個產品的程式正在進行中,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
<String Id="Error1706">找不到產品 [2] 的安裝包。 嘗試使用安裝包 '[3]' 的有效副本嘗試再次安裝。</String>
<String Id="Error1707">安裝成功完成。</String>
<String Id="Error1708">安裝失敗。</String>
- <String Id="Error1709">產品:[2] -- [3]</String>
- <String Id="Error1710">您可以將電腦還原成先前的狀態或稍後繼續安裝,您希望還原嗎?</String>
+ <String Id="Error1709">產品: [2] -- [3]</String>
+ <String Id="Error1710">您可以將電腦還原成先前的狀態或稍後繼續安裝,您希望還原嗎?</String>
<String Id="Error1711">寫入安裝資訊至磁碟時發生錯誤,確定磁碟的空間足夠,並按「重試」,或按「取消」來結束安裝。</String>
<String Id="Error1712">還原您的電腦成之前的狀態所需的一個或數個檔案找不到。 無法還原。</String>
- <String Id="Error1713">[2] 無法安裝其所需的產品之一。 請聯絡您的技術支援小組。 {{系統字串:[3]。}}</String>
+ <String Id="Error1713">[2] 無法安裝其所需的產品之一。 請聯絡您的技術支援小組。 {{系統字串: [3]。}}</String>
<String Id="Error1714">無法移除 [2] 的舊版本。 請聯絡您的技術支援小組。 {{系統字串 [3]。}}</String>
<String Id="Error1715">已經安裝 [2]</String>
<String Id="Error1716">已經組態 [2]</String>
<String Id="Error1717">已經移除 [2]</String>
<String Id="Error1718">數位簽章原則拒絕檔案 [2] 。</String>
<String Id="Error1719">無法存取 Windows Installer 服務。 如果您正執行在 Windows 安全模式,這將會發生。 請聯絡您的技術支援人員以取得協助。</String>
- <String Id="Error1720">這個 Windows Installer 封裝有問題。 完成這個安裝需要的指令碼無法執行。 聯絡您的支援人員或封裝供應商。 {{自訂動作 [2] 指令碼錯誤 [3],[4]:[5] 行 [6],欄 [7],[8] }}</String>
- <String Id="Error1721">這個 Windows Installer 封裝有問題。 完成這個安裝需要的程式無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置:[3],命令:[4] }}</String>
- <String Id="Error1722">這個 Windows Installer 封裝有問題。 以 setup 部分執行的程式無法如預期完成。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置:[3],命令:[4] }}</String>
- <String Id="Error1723">這個 Windows Installer 封裝有問題。 完成這個安裝需要的 DLL 無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],項目:[3],程式庫:[4] }}</String>
+ <String Id="Error1720">這個 Windows Installer 封裝有問題。 完成這個安裝需要的指令碼無法執行。 聯絡您的支援人員或封裝供應商。 {{自訂動作 [2] 指令碼錯誤 [3],[4]: [5] 行 [6],欄 [7],[8] }}</String>
+ <String Id="Error1721">這個 Windows Installer 封裝有問題。 完成這個安裝需要的程式無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置: [3],命令: [4] }}</String>
+ <String Id="Error1722">這個 Windows Installer 封裝有問題。 以 setup 部分執行的程式無法如預期完成。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置: [3],命令: [4] }}</String>
+ <String Id="Error1723">這個 Windows Installer 封裝有問題。 完成這個安裝需要的 DLL 無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],項目: [3],程式庫: [4] }}</String>
<String Id="Error1724">移除成功完成。</String>
<String Id="Error1725">移除失敗。</String>
<String Id="Error1726">宣告成功完成。</String>
@@ -381,12 +381,12 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="Error1805">資料夾 [2] 不存在,請輸入一個現有的資料夾路徑。</String>
<String Id="Error1806">您的權限不足,無法讀取這個資料夾。</String>
<String Id="Error1807">無法決定合法的目的資料夾。</String>
- <String Id="Error1901">嘗試讀取來源安裝資料庫時發生錯誤:[2]。</String>
- <String Id="Error1902">正在排定重新開機作業:正在更改檔案名稱 [2] 成 [3],必須重新開機才能完成作業。</String>
- <String Id="Error1903">正在排定重新開機作業:正在刪除檔案 [2],必須重新開機才能完成作業。</String>
+ <String Id="Error1901">嘗試讀取來源安裝資料庫時發生錯誤: [2]。</String>
+ <String Id="Error1902">正在排定重新開機作業: 正在更改檔案名稱 [2] 成 [3],必須重新開機才能完成作業。</String>
+ <String Id="Error1903">正在排定重新開機作業: 正在刪除檔案 [2],必須重新開機才能完成作業。</String>
<String Id="Error1904">註冊模組 [2] 失敗。HRESULT [3]。連絡您的支援人員。</String>
<String Id="Error1905">取消註冊模組 [2] 失敗。HRESULT [3]。連絡您的支援人員。</String>
- <String Id="Error1906">無法預存封裝 [2]。錯誤:[3]。請連絡支援人員。</String>
+ <String Id="Error1906">無法預存封裝 [2]。錯誤: [3]。請連絡支援人員。</String>
<String Id="Error1907">無法註冊字型 [2]。 請確認是否有足夠的權限及系統支援。</String>
<String Id="Error1908">無法解除註冊字型 [2]。 請確認您有足夠的權限來移除字型。</String>
<String Id="Error1909">無法建立捷徑 [2]。 請確認目地資料夾是否存在及您的存取權。</String>
@@ -395,84 +395,84 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="Error1912">無法解除註冊檔案 [2] 的 type library。 請連絡系統支援人員。</String>
<String Id="Error1913">無法更新 ini 檔 [2][3]。 請確認檔案是否存在及您的存取權。</String>
<String Id="Error1914">無法預定在重開機時將檔案 [2] 取代 [3]。 請確認您有 [3] 的存取權。</String>
- <String Id="Error1915">移除 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]:[3]。請連絡系統支援人員。</String>
- <String Id="Error1916">安裝 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]:[3]。請連絡系統支援人員。</String>
- <String Id="Error1917">移除 ODBC 驅動程式管理員錯誤:[4],ODBC 錯誤 [2]:[3]。請確認您有足夠權限。</String>
- <String Id="Error1918">安裝 ODBC 驅動程式管理員錯誤:[4],ODBC 錯誤 [2]:[3]。請確認檔案[4]存在並可存取。</String>
- <String Id="Error1919">設定 ODBC 資料來源錯誤:[4],ODBC 錯誤 [2]:[3]。請確認檔案[4]存在並可存取。</String>
+ <String Id="Error1915">移除 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]: [3]。請連絡系統支援人員。</String>
+ <String Id="Error1916">安裝 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]: [3]。請連絡系統支援人員。</String>
+ <String Id="Error1917">移除 ODBC 驅動程式管理員錯誤: [4],ODBC 錯誤 [2]: [3]。請確認您有足夠權限。</String>
+ <String Id="Error1918">安裝 ODBC 驅動程式管理員錯誤: [4],ODBC 錯誤 [2]: [3]。請確認檔案[4]存在並可存取。</String>
+ <String Id="Error1919">設定 ODBC 資料來源錯誤: [4],ODBC 錯誤 [2]: [3]。請確認檔案[4]存在並可存取。</String>
<String Id="Error1920">啟動服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
<String Id="Error1921">停止服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
<String Id="Error1922">刪除服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
<String Id="Error1923">無法安裝服務 '[2]' ([3]) 。 請確認您有足夠的特殊權限以啟動系統服務。</String>
<String Id="Error1924">無法更新環境變數 '[2]'。 請確認您有足夠的特殊權限以修改環境變數。</String>
<String Id="Error1925">您沒有足夠的特殊權限使電腦的所有使用者都完成此安裝。請以系統管理員權限登入,接著再重試此安裝。</String>
- <String Id="Error1926">無法設定檔案 '[3]' 的檔案安全性。 錯誤:[2]。 請確認您有足夠的特殊權限以修改此檔案的安全性權限。</String>
+ <String Id="Error1926">無法設定檔案 '[3]' 的檔案安全性。 錯誤: [2]。 請確認您有足夠的特殊權限以修改此檔案的安全性權限。</String>
<String Id="Error1927">這台電腦並未安裝 Component Services (COM+ 1.0)。這項安裝需要有 Component Services 才能進行。Component Services 包含在 Windows XP 中。</String>
<String Id="Error1928">登錄 COM+ 應用程式時發生錯誤。請聯絡您的支援人員以取得其他資訊。</String>
<String Id="Error1929">解除 COM+ 應用程式登錄時發生錯誤。請聯絡您的支援人員以取得其他資訊。</String>
<String Id="Error1930">無法變更服務 '[2]' ([3]) 的描述。</String>
- <String Id="Error1931">Windows Installer 服務無法更新系統檔案 [2] 因為檔案受 Windows 保護。 您可能需要更新您的作業系統使這個程式正確動作。 {{{封裝版本:[3],受 OS 保護的版本:[4]}}</String>
- <String Id="Error1932">Windows Installer 服務無法更新受保護的 Windows 檔案 [2]。 {{封裝版本:[3],受 OS 保護的版本:[4],SFP 錯誤:[5]}}</String>
- <String Id="Error1933">Windows Installer 服務無法更新一個或數個受保護的 Windows 檔案。 {{SFP 字串:[2]。 受保護的檔案清單:\r\n[3]}}</String>
+ <String Id="Error1931">Windows Installer 服務無法更新系統檔案 [2] 因為檔案受 Windows 保護。 您可能需要更新您的作業系統使這個程式正確動作。 {{{封裝版本: [3],受 OS 保護的版本: [4]}}</String>
+ <String Id="Error1932">Windows Installer 服務無法更新受保護的 Windows 檔案 [2]。 {{封裝版本: [3],受 OS 保護的版本: [4],SFP 錯誤: [5]}}</String>
+ <String Id="Error1933">Windows Installer 服務無法更新一個或數個受保護的 Windows 檔案。 {{SFP 字串: [2]。 受保護的檔案清單: \r\n[3]}}</String>
<String Id="Error1934">電腦的原則停用使用者安裝。</String>
- <String Id="Error1935">組件元件 [2] 的安裝期間發生錯誤。 HRESULT:[3]。 {{組件介面:[4],函數:[5],組件名稱:[6]}}</String>
+ <String Id="Error1935">組件元件 [2] 的安裝期間發生錯誤。 HRESULT: [3]。 {{組件介面: [4],函數: [5],組件名稱: [6]}}</String>
<!-- Own / special errors -->
<String Id="Error25001">需要關閉應用程式 "[2]" 以繼續關閉。</String>
<String Id="ProgressTextInstallValidate">正在驗證安裝</String>
<String Id="ProgressTextInstallFiles">正在複製新檔案</String>
- <String Id="ProgressTextInstallFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+ <String Id="ProgressTextInstallFilesTemplate">檔案: [1], 目錄: [9], 大小: [6]</String>
<String Id="ProgressTextInstallAdminPackage">正在複製網路安裝檔案</String>
- <String Id="ProgressTextInstallAdminPackageTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+ <String Id="ProgressTextInstallAdminPackageTemplate">檔案: [1], 目錄: [9], 大小: [6]</String>
<String Id="ProgressTextFileCost">正在計算空間需求</String>
<String Id="ProgressTextCostInitialize">正在計算空間需求</String>
<String Id="ProgressTextCostFinalize">正在計算空間需求</String>
<String Id="ProgressTextCreateShortcuts">正在建立捷徑</String>
- <String Id="ProgressTextCreateShortcutsTemplate">捷徑:[1]</String>
+ <String Id="ProgressTextCreateShortcutsTemplate">捷徑: [1]</String>
<String Id="ProgressTextPublishComponents">正在發佈合格的元件</String>
- <String Id="ProgressTextPublishComponentsTemplate">元件 ID:[1], 公佈者:[2]</String>
+ <String Id="ProgressTextPublishComponentsTemplate">元件 ID: [1], 公佈者: [2]</String>
<String Id="ProgressTextPublishFeatures">正在發佈產品功能</String>
- <String Id="ProgressTextPublishFeaturesTemplate">功能:[1]</String>
+ <String Id="ProgressTextPublishFeaturesTemplate">功能: [1]</String>
<String Id="ProgressTextPublishProduct">正在發佈產品資訊</String>
<String Id="ProgressTextRegisterClassInfo">正在登錄類別伺服器</String>
- <String Id="ProgressTextRegisterClassInfoTemplate">類別 Id:[1]</String>
+ <String Id="ProgressTextRegisterClassInfoTemplate">類別 Id: [1]</String>
<String Id="ProgressTextRegisterExtensionInfo">正在登錄擴充伺服器</String>
<String Id="ProgressTextRegisterExtensionInfoTemplate">副檔名 [1]</String>
<String Id="ProgressTextRegisterMIMEInfo">正在登錄 MIME 資訊</String>
- <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME 內容類型:[1],副檔名:[2]</String>
+ <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME 內容類型: [1],副檔名: [2]</String>
<String Id="ProgressTextRegisterProgIdInfo">正在登錄程式辨識字元</String>
<String Id="ProgressTextRegisterProgIdInfoTemplate">ProgId: [1]</String>
<String Id="ProgressTextAllocateRegistrySpace">正在配置登錄空間</String>
- <String Id="ProgressTextAllocateRegistrySpaceTemplate">可用空間:[1]</String>
+ <String Id="ProgressTextAllocateRegistrySpaceTemplate">可用空間: [1]</String>
<String Id="ProgressTextAppSearch">正在搜尋已安裝的應用程式</String>
- <String Id="ProgressTextAppSearchTemplate">內容:[1], 簽章:[2]</String>
+ <String Id="ProgressTextAppSearchTemplate">內容: [1], 簽章: [2]</String>
<String Id="ProgressTextBindImage">正在繫結執行檔</String>
- <String Id="ProgressTextBindImageTemplate">檔案:[1]</String>
+ <String Id="ProgressTextBindImageTemplate">檔案: [1]</String>
<String Id="ProgressTextCCPSearch">正在搜尋查詢產品</String>
<String Id="ProgressTextCreateFolders">正在建立資料夾</String>
- <String Id="ProgressTextCreateFoldersTemplate">資料夾:[1]</String>
+ <String Id="ProgressTextCreateFoldersTemplate">資料夾: [1]</String>
<String Id="ProgressTextDeleteServices">正在刪除服務</String>
- <String Id="ProgressTextDeleteServicesTemplate">服務:[1]</String>
+ <String Id="ProgressTextDeleteServicesTemplate">服務: [1]</String>
<String Id="ProgressTextDuplicateFiles">正在建立重複檔案</String>
- <String Id="ProgressTextDuplicateFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+ <String Id="ProgressTextDuplicateFilesTemplate">檔案: [1], 目錄: [9], 大小: [6]</String>
<String Id="ProgressTextFindRelatedProducts">正在搜尋相關的應用程式</String>
- <String Id="ProgressTextFindRelatedProductsTemplate">找到應用程式:[1]</String>
+ <String Id="ProgressTextFindRelatedProductsTemplate">找到應用程式: [1]</String>
<String Id="ProgressTextInstallODBC">正在安裝 ODBC 元件</String>
<String Id="ProgressTextInstallServices">正在安裝新服務</String>
- <String Id="ProgressTextInstallServicesTemplate">服務:[2]</String>
+ <String Id="ProgressTextInstallServicesTemplate">服務: [2]</String>
<String Id="ProgressTextLaunchConditions">正在評估啟動條件</String>
<String Id="ProgressTextMigrateFeatureStates">正在從相關的應用程式遷移功能狀態</String>
- <String Id="ProgressTextMigrateFeatureStatesTemplate">應用程式:[1]</String>
+ <String Id="ProgressTextMigrateFeatureStatesTemplate">應用程式: [1]</String>
<String Id="ProgressTextMoveFiles">正在移動檔案</String>
- <String Id="ProgressTextMoveFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+ <String Id="ProgressTextMoveFilesTemplate">檔案: [1], 目錄: [9], 大小: [6]</String>
<String Id="ProgressTextPatchFiles">正在修補檔案</String>
- <String Id="ProgressTextPatchFilesTemplate">檔案:[1], 目錄:[2], 大小:[3]</String>
+ <String Id="ProgressTextPatchFilesTemplate">檔案: [1], 目錄: [2], 大小: [3]</String>
<String Id="ProgressTextProcessComponents">正在更新元件註冊</String>
<String Id="ProgressTextRegisterComPlus">正在註冊 COM+ 應用程式和元件</String>
- <String Id="ProgressTextRegisterComPlusTemplate">AppId:[1]{{, AppType:[2],使用者:[3],RSN:[4]}}</String>
+ <String Id="ProgressTextRegisterComPlusTemplate">AppId: [1]{{, AppType: [2],使用者: [3],RSN: [4]}}</String>
<String Id="ProgressTextRegisterFonts">正在註冊字型</String>
- <String Id="ProgressTextRegisterFontsTemplate">字型:[1]</String>
+ <String Id="ProgressTextRegisterFontsTemplate">字型: [1]</String>
<String Id="ProgressTextRegisterProduct">正在註冊產品</String>
<String Id="ProgressTextRegisterProductTemplate">[1]</String>
<String Id="ProgressTextRegisterTypeLibraries">正在登錄類別程式庫</String>
@@ -480,71 +480,71 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="ProgressTextRegisterUser">正在登錄使用者</String>
<String Id="ProgressTextRegisterUserTemplate">[1]</String>
<String Id="ProgressTextRemoveDuplicateFiles">正在移除重複的檔案</String>
- <String Id="ProgressTextRemoveDuplicateFilesTemplate">檔案:[1], 目錄:[9]</String>
+ <String Id="ProgressTextRemoveDuplicateFilesTemplate">檔案: [1], 目錄: [9]</String>
<String Id="ProgressTextRemoveEnvironmentStrings">正在更新環境字串</String>
- <String Id="ProgressTextRemoveEnvironmentStringsTemplate">名稱:[1], 數值:[2], 動作:[3]</String>
+ <String Id="ProgressTextRemoveEnvironmentStringsTemplate">名稱: [1], 數值: [2], 動作: [3]</String>
<String Id="ProgressTextRemoveExistingProducts">正在移除應用程式</String>
- <String Id="ProgressTextRemoveExistingProductsTemplate">應用程式:[1], 命令列:[2]</String>
+ <String Id="ProgressTextRemoveExistingProductsTemplate">應用程式: [1], 命令列: [2]</String>
<String Id="ProgressTextRemoveFiles">正在移除檔案</String>
- <String Id="ProgressTextRemoveFilesTemplate">檔案:[1], 目錄:[9]</String>
+ <String Id="ProgressTextRemoveFilesTemplate">檔案: [1], 目錄: [9]</String>
<String Id="ProgressTextRemoveFolders">正在移除資料夾</String>
- <String Id="ProgressTextRemoveFoldersTemplate">資料夾:[1]</String>
+ <String Id="ProgressTextRemoveFoldersTemplate">資料夾: [1]</String>
<String Id="ProgressTextRemoveIniValues">正在移除 INI 檔案項目</String>
- <String Id="ProgressTextRemoveIniValuesTemplate">檔案:[1], 區段:[2], 機碼:[3], 數值:[4]</String>
+ <String Id="ProgressTextRemoveIniValuesTemplate">檔案: [1], 區段: [2], 機碼: [3], 數值: [4]</String>
<String Id="ProgressTextRemoveODBC">正在移除 ODBC 元件</String>
<String Id="ProgressTextRemoveRegistryValues">正在移除系統登錄檔數值</String>
- <String Id="ProgressTextRemoveRegistryValuesTemplate">機碼:[1], 名稱:[2]</String>
+ <String Id="ProgressTextRemoveRegistryValuesTemplate">機碼: [1], 名稱: [2]</String>
<String Id="ProgressTextRemoveShortcuts">正在移除捷徑</String>
- <String Id="ProgressTextRemoveShortcutsTemplate">捷徑:[1]</String>
+ <String Id="ProgressTextRemoveShortcutsTemplate">捷徑: [1]</String>
<String Id="ProgressTextRMCCPSearch">正在搜尋查詢產品</String>
<String Id="ProgressTextSelfRegModules">正在註冊模組</String>
- <String Id="ProgressTextSelfRegModulesTemplate">檔案:[1], 資料夾:[2]</String>
+ <String Id="ProgressTextSelfRegModulesTemplate">檔案: [1], 資料夾: [2]</String>
<String Id="ProgressTextSelfUnregModules">正在解除模組登錄</String>
- <String Id="ProgressTextSelfUnregModulesTemplate">檔案:[1], 資料夾:[2]</String>
+ <String Id="ProgressTextSelfUnregModulesTemplate">檔案: [1], 資料夾: [2]</String>
<String Id="ProgressTextSetODBCFolders">正在初始化 ODBC 目錄</String>
<String Id="ProgressTextStartServices">正在啟動服務</String>
- <String Id="ProgressTextStartServicesTemplate">服務:[1]</String>
+ <String Id="ProgressTextStartServicesTemplate">服務: [1]</String>
<String Id="ProgressTextStopServices">正在停止服務</String>
- <String Id="ProgressTextStopServicesTemplate">服務:[1]</String>
+ <String Id="ProgressTextStopServicesTemplate">服務: [1]</String>
<String Id="ProgressTextUnpublishComponents">正在取消元件公佈</String>
- <String Id="ProgressTextUnpublishComponentsTemplate">元件 ID:[1], 公佈者:[2]</String>
+ <String Id="ProgressTextUnpublishComponentsTemplate">元件 ID: [1], 公佈者: [2]</String>
<String Id="ProgressTextUnpublishFeatures">正在取消功能公佈</String>
- <String Id="ProgressTextUnpublishFeaturesTemplate">功能:[1]</String>
+ <String Id="ProgressTextUnpublishFeaturesTemplate">功能: [1]</String>
<String Id="ProgressTextUnregisterClassInfo">解除類別伺服器登錄</String>
- <String Id="ProgressTextUnregisterClassInfoTemplate">類別 Id:[1]</String>
+ <String Id="ProgressTextUnregisterClassInfoTemplate">類別 Id: [1]</String>
<String Id="ProgressTextUnregisterComPlus">正在解除 COM+ 應用程式和元件登錄</String>
<String Id="ProgressTextUnregisterComPlusTemplate">AppId: [1]{{, AppType: [2]}}</String>
<String Id="ProgressTextUnregisterExtensionInfo">正在解除擴充伺服器登錄</String>
<String Id="ProgressTextUnregisterExtensionInfoTemplate">副檔名 [1]</String>
<String Id="ProgressTextUnregisterFonts">正在解除字型登錄</String>
- <String Id="ProgressTextUnregisterFontsTemplate">字型:[1]</String>
+ <String Id="ProgressTextUnregisterFontsTemplate">字型: [1]</String>
<String Id="ProgressTextUnregisterMIMEInfo">正在解除 MIME 資訊登錄</String>
- <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME 內容類型:[1],副檔名:[2]</String>
+ <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME 內容類型: [1],副檔名: [2]</String>
<String Id="ProgressTextUnregisterProgIdInfo">正在解除程式識別碼登錄</String>
<String Id="ProgressTextUnregisterProgIdInfoTemplate">ProgId: [1]</String>
<String Id="ProgressTextUnregisterTypeLibraries">正在解除類別程式庫登錄</String>
<String Id="ProgressTextUnregisterTypeLibrariesTemplate">LibID: [1]</String>
<String Id="ProgressTextWriteEnvironmentStrings">正在更新環境字串</String>
- <String Id="ProgressTextWriteEnvironmentStringsTemplate">名稱:[1], 數值:[2], 動作:[3]</String>
+ <String Id="ProgressTextWriteEnvironmentStringsTemplate">名稱: [1], 數值: [2], 動作: [3]</String>
<String Id="ProgressTextWriteIniValues">正在寫入 INI 檔案數值</String>
- <String Id="ProgressTextWriteIniValuesTemplate">檔案:[1], 區段:[2], 機碼:[3], 數值:[4]</String>
+ <String Id="ProgressTextWriteIniValuesTemplate">檔案: [1], 區段: [2], 機碼: [3], 數值: [4]</String>
<String Id="ProgressTextWriteRegistryValues">正在寫入系統登錄檔數值</String>
- <String Id="ProgressTextWriteRegistryValuesTemplate">機碼:[1],名稱:[2],值:[3]</String>
+ <String Id="ProgressTextWriteRegistryValuesTemplate">機碼: [1],名稱: [2],值: [3]</String>
<String Id="ProgressTextAdvertise">正在宣告應用程式</String>
- <String Id="ProgressTextGenerateScript">正在產生動作的 script 操作:</String>
+ <String Id="ProgressTextGenerateScript">正在產生動作的 script 操作:</String>
<String Id="ProgressTextGenerateScriptTemplate">[1]</String>
<String Id="ProgressTextInstallSFPCatalogFile">正在安裝系統目錄</String>
- <String Id="ProgressTextInstallSFPCatalogFileTemplate">檔案:[1],依存關係:[2]</String>
+ <String Id="ProgressTextInstallSFPCatalogFileTemplate">檔案: [1],依存關係: [2]</String>
<String Id="ProgressTextMsiPublishAssemblies">正在發佈組件資訊</String>
- <String Id="ProgressTextMsiPublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
+ <String Id="ProgressTextMsiPublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
<String Id="ProgressTextMsiUnpublishAssemblies">正在取消資訊公佈</String>
- <String Id="ProgressTextMsiUnpublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
- <String Id="ProgressTextRollback">回復動作:</String>
+ <String Id="ProgressTextMsiUnpublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
+ <String Id="ProgressTextRollback">回復動作:</String>
<String Id="ProgressTextRollbackTemplate">[1]</String>
<String Id="ProgressTextRollbackCleanup">正在移除備份檔案</String>
- <String Id="ProgressTextRollbackCleanupTemplate">檔案:[1]</String>
+ <String Id="ProgressTextRollbackCleanupTemplate">檔案: [1]</String>
<String Id="ProgressTextUnmoveFiles">正在移除移動的檔案</String>
- <String Id="ProgressTextUnmoveFilesTemplate">檔案:[1], 目錄:[9]</String>
+ <String Id="ProgressTextUnmoveFilesTemplate">檔案: [1], 目錄: [9]</String>
<String Id="ProgressTextUnpublishProduct">正在取消發佈產品資訊</String>
<String Id="UITextbytes">位元組</String>
@@ -584,13 +584,13 @@ This is default for newer versions of Windows (Vista and newer).</String>
<String Id="UITextSelLocalNetwork">這個功能將會從您的本機硬碟中移除,但是仍然可從網路上執行</String>
<String Id="UITextSelNetworkAbsent">這個功能將完整解除安裝,您將不能從網路執行</String>
<String Id="UITextSelNetworkAdvertise">這個功能將會從網路執行變更成視需要進行安裝</String>
- <String Id="UITextSelNetworkLocal">這個功能將會從網路執行變更為安裝在本機硬碟中。</String>
+ <String Id="UITextSelNetworkLocal">這個功能將會從網路執行變更為安裝在本機硬碟中</String>
<String Id="UITextSelNetworkNetwork">這個功能仍將保留成從網路執行</String>
<String Id="UITextSelParentCostNegNeg">這個功能在您的硬碟釋放 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟釋放 [4] 。</String>
<String Id="UITextSelParentCostNegPos">這個功能在您的硬碟釋放 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟需要 [4] 。</String>
<String Id="UITextSelParentCostPosNeg">這個功能在您的硬碟需要 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟釋放 [4] 。</String>
<String Id="UITextSelParentCostPosPos">這個功能在您的硬碟需要 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟需要 [4] 。</String>
- <String Id="UITextTimeRemaining">剩餘時間:{[1] 分 }{[2] 秒}</String>
+ <String Id="UITextTimeRemaining">剩餘時間: {[1] 分 }{[2] 秒}</String>
<String Id="UITextVolumeCostAvailable">可用</String>
<String Id="UITextVolumeCostDifference">差異</String>
<String Id="UITextVolumeCostRequired">需求</String>
diff --git a/src/VBox/Main/idl/VirtualBox.xidl b/src/VBox/Main/idl/VirtualBox.xidl
index 4133b06..bd715d9 100644
--- a/src/VBox/Main/idl/VirtualBox.xidl
+++ b/src/VBox/Main/idl/VirtualBox.xidl
@@ -1003,6 +1003,22 @@
automatically enables the APIC feature when set.
</desc>
</const>
+ <const name="IBPBOnVMExit" value="6">
+ <desc>
+ If set, force an indirect branch prediction barrier on VM exits if the
+ host CPU supports it. This setting will significantly slow down workloads
+ causing many VM exits, so it is only recommended for situation where there
+ real need to be paranoid.
+ </desc>
+ </const>
+ <const name="IBPBOnVMEntry" value="7">
+ <desc>
+ If set, force an indirect branch prediction barrier on VM entry if the
+ host CPU supports it. This setting will significantly slow down workloads
+ causing many VM exits, so it is only recommended for situation where there
+ real need to be paranoid.
+ </desc>
+ </const>
</enum>
diff --git a/src/VBox/Main/include/MachineImpl.h b/src/VBox/Main/include/MachineImpl.h
index ad58478..4b7a488 100644
--- a/src/VBox/Main/include/MachineImpl.h
+++ b/src/VBox/Main/include/MachineImpl.h
@@ -287,6 +287,8 @@ public:
BOOL mTripleFaultReset;
BOOL mAPIC;
BOOL mX2APIC;
+ BOOL mIBPBOnVMExit;
+ BOOL mIBPBOnVMEntry;
ULONG mCPUCount;
BOOL mCPUHotPlugEnabled;
ULONG mCpuExecutionCap;
diff --git a/src/VBox/Main/src-all/Global.cpp b/src/VBox/Main/src-all/Global.cpp
index 522f99f..e8c3048 100644
--- a/src/VBox/Main/src-all/Global.cpp
+++ b/src/VBox/Main/src-all/Global.cpp
@@ -101,62 +101,62 @@ const Global::OSType Global::sOSTypes[] =
{ "Windows", "Microsoft Windows", "Windows2008", "Windows 2008 (32-bit)",
VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET,
- 1024, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 1024, 16, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows2008_64", "Windows 2008 (64-bit)",
VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
- 2048, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 2048, 16, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows7", "Windows 7 (32-bit)",
VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET,
- 1024, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 1024, 16, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows7_64", "Windows 7 (64-bit)",
VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
- 2048, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 2048, 16, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows8", "Windows 8 (32-bit)",
VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE | VBOXOSHINT_USB3,
- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 1024,128, 40 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows8_64", "Windows 8 (64-bit)",
VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_USB3,
- 2048,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 2048,128, 40 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows81", "Windows 8.1 (32-bit)",
VBOXOSTYPE_Win81, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE | VBOXOSHINT_USB3,
- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 1024,128, 40 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows81_64", "Windows 8.1 (64-bit)",
VBOXOSTYPE_Win81_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_USB3,
- 2048,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 2048,128, 40 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows2012_64", "Windows 2012 (64-bit)",
VBOXOSTYPE_Win2k12_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_USB3,
- 2048,128, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 2048,128, 50 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows10", "Windows 10 (32-bit)",
VBOXOSTYPE_Win10, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE | VBOXOSHINT_USB3,
- 1024,128, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 1024,128, 50 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows10_64", "Windows 10 (64-bit)",
VBOXOSTYPE_Win10_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_USB3,
- 2048,128, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 2048,128, 50 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "Windows2016_64", "Windows 2016 (64-bit)",
VBOXOSTYPE_Win2k16_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_USB3,
- 2048,128, 32 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+ 2048,128, 50 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Windows", "Microsoft Windows", "WindowsNT", "Other Windows (32-bit)",
diff --git a/src/VBox/Main/src-client/BusAssignmentManager.cpp b/src/VBox/Main/src-client/BusAssignmentManager.cpp
index 9bede76..4d691cf 100644
--- a/src/VBox/Main/src-client/BusAssignmentManager.cpp
+++ b/src/VBox/Main/src-client/BusAssignmentManager.cpp
@@ -32,7 +32,7 @@
struct DeviceAssignmentRule
{
- const char* pszName;
+ const char *pszName;
int iBus;
int iDevice;
int iFn;
@@ -41,8 +41,8 @@ struct DeviceAssignmentRule
struct DeviceAliasRule
{
- const char* pszDevName;
- const char* pszDevAlias;
+ const char *pszDevName;
+ const char *pszDevAlias;
};
/* Those rules define PCI slots assignment */
@@ -132,16 +132,16 @@ static const DeviceAssignmentRule aIch9Rules[] =
/* to make sure rule never used before rules assigning devices on it */
{"ich9pcibridge", 0, 24, 0, 10},
{"ich9pcibridge", 0, 25, 0, 10},
- {"ich9pcibridge", 1, 24, 0, 9},
- {"ich9pcibridge", 1, 25, 0, 9},
- {"ich9pcibridge", 2, 24, 0, 8},
- {"ich9pcibridge", 2, 25, 0, 8},
- {"ich9pcibridge", 3, 24, 0, 7},
- {"ich9pcibridge", 3, 25, 0, 7},
- {"ich9pcibridge", 4, 24, 0, 6},
- {"ich9pcibridge", 4, 25, 0, 6},
- {"ich9pcibridge", 5, 24, 0, 5},
- {"ich9pcibridge", 5, 25, 0, 5},
+ {"ich9pcibridge", 2, 24, 0, 9}, /* Bridges must be instantiated depth */
+ {"ich9pcibridge", 2, 25, 0, 9}, /* first (assumption in PDM and other */
+ {"ich9pcibridge", 4, 24, 0, 8}, /* places), so make sure that nested */
+ {"ich9pcibridge", 4, 25, 0, 8}, /* bridges are added to the last bridge */
+ {"ich9pcibridge", 6, 24, 0, 7}, /* only, avoiding the need to re-sort */
+ {"ich9pcibridge", 6, 25, 0, 7}, /* everything before starting the VM. */
+ {"ich9pcibridge", 8, 24, 0, 6},
+ {"ich9pcibridge", 8, 25, 0, 6},
+ {"ich9pcibridge", 10, 24, 0, 5},
+ {"ich9pcibridge", 10, 25, 0, 5},
/* Storage controllers */
{"ahci", 1, 0, 0, 0},
@@ -235,13 +235,13 @@ struct BusAssignmentManager::State
char szDevName[32];
PCIBusAddress HostAddress;
- PCIDeviceRecord(const char* pszName, PCIBusAddress aHostAddress)
+ PCIDeviceRecord(const char *pszName, PCIBusAddress aHostAddress)
{
RTStrCopy(this->szDevName, sizeof(szDevName), pszName);
this->HostAddress = aHostAddress;
}
- PCIDeviceRecord(const char* pszName)
+ PCIDeviceRecord(const char *pszName)
{
RTStrCopy(this->szDevName, sizeof(szDevName), pszName);
}
@@ -264,34 +264,48 @@ struct BusAssignmentManager::State
volatile int32_t cRefCnt;
ChipsetType_T mChipsetType;
+ const char * mpszBridgeName;
PCIMap mPCIMap;
ReversePCIMap mReversePCIMap;
State()
- : cRefCnt(1), mChipsetType(ChipsetType_Null)
+ : cRefCnt(1), mChipsetType(ChipsetType_Null), mpszBridgeName("unknownbridge")
{}
~State()
{}
HRESULT init(ChipsetType_T chipsetType);
- HRESULT record(const char* pszName, PCIBusAddress& GuestAddress, PCIBusAddress HostAddress);
- HRESULT autoAssign(const char* pszName, PCIBusAddress& Address);
+ HRESULT record(const char *pszName, PCIBusAddress& GuestAddress, PCIBusAddress HostAddress);
+ HRESULT autoAssign(const char *pszName, PCIBusAddress& Address);
bool checkAvailable(PCIBusAddress& Address);
- bool findPCIAddress(const char* pszDevName, int iInstance, PCIBusAddress& Address);
+ bool findPCIAddress(const char *pszDevName, int iInstance, PCIBusAddress& Address);
- const char* findAlias(const char* pszName);
- void addMatchingRules(const char* pszName, PCIRulesList& aList);
+ const char *findAlias(const char *pszName);
+ void addMatchingRules(const char *pszName, PCIRulesList& aList);
void listAttachedPCIDevices(std::vector<PCIDeviceInfo> &aAttached);
};
HRESULT BusAssignmentManager::State::init(ChipsetType_T chipsetType)
{
mChipsetType = chipsetType;
+ switch (chipsetType)
+ {
+ case ChipsetType_PIIX3:
+ mpszBridgeName = "pcibridge";
+ break;
+ case ChipsetType_ICH9:
+ mpszBridgeName = "ich9pcibridge";
+ break;
+ default:
+ mpszBridgeName = "unknownbridge";
+ AssertFailed();
+ break;
+ }
return S_OK;
}
-HRESULT BusAssignmentManager::State::record(const char* pszName, PCIBusAddress& Address, PCIBusAddress HostAddress)
+HRESULT BusAssignmentManager::State::record(const char *pszName, PCIBusAddress& Address, PCIBusAddress HostAddress)
{
PCIDeviceRecord devRec(pszName, HostAddress);
@@ -311,7 +325,7 @@ HRESULT BusAssignmentManager::State::record(const char* pszName, PCIBusAddress&
return S_OK;
}
-bool BusAssignmentManager::State::findPCIAddress(const char* pszDevName, int iInstance, PCIBusAddress& Address)
+bool BusAssignmentManager::State::findPCIAddress(const char *pszDevName, int iInstance, PCIBusAddress& Address)
{
PCIDeviceRecord devRec(pszDevName);
@@ -326,10 +340,10 @@ bool BusAssignmentManager::State::findPCIAddress(const char* pszDevName, int
return true;
}
-void BusAssignmentManager::State::addMatchingRules(const char* pszName, PCIRulesList& aList)
+void BusAssignmentManager::State::addMatchingRules(const char *pszName, PCIRulesList& aList)
{
size_t iRuleset, iRule;
- const DeviceAssignmentRule* aArrays[2] = {aGenericRules, NULL};
+ const DeviceAssignmentRule *aArrays[2] = {aGenericRules, NULL};
switch (mChipsetType)
{
@@ -340,7 +354,7 @@ void BusAssignmentManager::State::addMatchingRules(const char* pszName, PCIRules
aArrays[1] = aIch9Rules;
break;
default:
- Assert(false);
+ AssertFailed();
break;
}
@@ -357,7 +371,7 @@ void BusAssignmentManager::State::addMatchingRules(const char* pszName, PCIRules
}
}
-const char* BusAssignmentManager::State::findAlias(const char* pszDev)
+const char *BusAssignmentManager::State::findAlias(const char *pszDev)
{
for (size_t iAlias = 0; iAlias < RT_ELEMENTS(aDeviceAliases); iAlias++)
{
@@ -367,17 +381,17 @@ const char* BusAssignmentManager::State::findAlias(const char* pszDev)
return NULL;
}
-static bool RuleComparator(const DeviceAssignmentRule* r1, const DeviceAssignmentRule* r2)
+static bool RuleComparator(const DeviceAssignmentRule *r1, const DeviceAssignmentRule *r2)
{
return (r1->iPriority > r2->iPriority);
}
-HRESULT BusAssignmentManager::State::autoAssign(const char* pszName, PCIBusAddress& Address)
+HRESULT BusAssignmentManager::State::autoAssign(const char *pszName, PCIBusAddress& Address)
{
PCIRulesList matchingRules;
addMatchingRules(pszName, matchingRules);
- const char* pszAlias = findAlias(pszName);
+ const char *pszAlias = findAlias(pszName);
if (pszAlias)
addMatchingRules(pszAlias, matchingRules);
@@ -387,7 +401,7 @@ HRESULT BusAssignmentManager::State::autoAssign(const char* pszName, PCIBusAddre
for (size_t iRule = 0; iRule < matchingRules.size(); iRule++)
{
- const DeviceAssignmentRule* rule = matchingRules[iRule];
+ const DeviceAssignmentRule *rule = matchingRules[iRule];
Address.miBus = rule->iBus;
Address.miDevice = rule->iDevice;
@@ -396,7 +410,7 @@ HRESULT BusAssignmentManager::State::autoAssign(const char* pszName, PCIBusAddre
if (checkAvailable(Address))
return S_OK;
}
- AssertMsgFailed(("All possible candidate positions for %s exhausted\n", pszName));
+ AssertLogRelMsgFailed(("BusAssignmentManager: All possible candidate positions for %s exhausted\n", pszName));
return E_INVALIDARG;
}
@@ -439,9 +453,9 @@ BusAssignmentManager::~BusAssignmentManager()
}
}
-BusAssignmentManager* BusAssignmentManager::createInstance(ChipsetType_T chipsetType)
+BusAssignmentManager *BusAssignmentManager::createInstance(ChipsetType_T chipsetType)
{
- BusAssignmentManager* pInstance = new BusAssignmentManager();
+ BusAssignmentManager *pInstance = new BusAssignmentManager();
pInstance->pState->init(chipsetType);
Assert(pInstance);
return pInstance;
@@ -457,7 +471,7 @@ void BusAssignmentManager::Release()
delete this;
}
-DECLINLINE(HRESULT) InsertConfigInteger(PCFGMNODE pCfg, const char* pszName, uint64_t u64)
+DECLINLINE(HRESULT) InsertConfigInteger(PCFGMNODE pCfg, const char *pszName, uint64_t u64)
{
int vrc = CFGMR3InsertInteger(pCfg, pszName, u64);
if (RT_FAILURE(vrc))
@@ -466,7 +480,17 @@ DECLINLINE(HRESULT) InsertConfigInteger(PCFGMNODE pCfg, const char* pszName, ui
return S_OK;
}
-HRESULT BusAssignmentManager::assignPCIDeviceImpl(const char* pszDevName,
+DECLINLINE(HRESULT) InsertConfigNode(PCFGMNODE pNode, const char *pcszName, PCFGMNODE *ppChild)
+{
+ int vrc = CFGMR3InsertNode(pNode, pcszName, ppChild);
+ if (RT_FAILURE(vrc))
+ return E_INVALIDARG;
+
+ return S_OK;
+}
+
+
+HRESULT BusAssignmentManager::assignPCIDeviceImpl(const char *pszDevName,
PCFGMNODE pCfg,
PCIBusAddress& GuestAddress,
PCIBusAddress HostAddress,
@@ -508,11 +532,42 @@ HRESULT BusAssignmentManager::assignPCIDeviceImpl(const char* pszDevName,
if (FAILED(rc))
return rc;
+ /* Check if the bus is still unknown, i.e. the bridge to it is missing */
+ if ( GuestAddress.miBus > 0
+ && !hasPCIDevice(pState->mpszBridgeName, GuestAddress.miBus - 1))
+ {
+ PCFGMNODE pDevices = CFGMR3GetParent(CFGMR3GetParent(pCfg));
+ AssertLogRelMsgReturn(pDevices, ("BusAssignmentManager: cannot find base device configuration\n"), E_UNEXPECTED);
+ PCFGMNODE pBridges = CFGMR3GetChild(pDevices, "ich9pcibridge");
+ AssertLogRelMsgReturn(pBridges, ("BusAssignmentManager: cannot find bridge configuration base\n"), E_UNEXPECTED);
+
+ /* Device should be on a not yet existing bus, add it automatically */
+ for (int iBridge = 0; iBridge <= GuestAddress.miBus - 1; iBridge++)
+ {
+ if (!hasPCIDevice(pState->mpszBridgeName, iBridge))
+ {
+ PCIBusAddress BridgeGuestAddress;
+ rc = pState->autoAssign(pState->mpszBridgeName, BridgeGuestAddress);
+ if (FAILED(rc))
+ return rc;
+ if (BridgeGuestAddress.miBus > iBridge)
+ AssertLogRelMsgFailedReturn(("BusAssignmentManager: cannot create bridge for bus %i because the possible parent bus positions are exhausted\n", iBridge + 1), E_UNEXPECTED);
+
+ PCFGMNODE pInst;
+ InsertConfigNode(pBridges, Utf8StrFmt("%d", iBridge).c_str(), &pInst);
+ InsertConfigInteger(pInst, "Trusted", 1);
+ rc = assignPCIDevice(pState->mpszBridgeName, pInst);
+ if (FAILED(rc))
+ return rc;
+ }
+ }
+ }
+
return S_OK;
}
-bool BusAssignmentManager::findPCIAddress(const char* pszDevName, int iInstance, PCIBusAddress& Address)
+bool BusAssignmentManager::findPCIAddress(const char *pszDevName, int iInstance, PCIBusAddress& Address)
{
return pState->findPCIAddress(pszDevName, iInstance, Address);
}
diff --git a/src/VBox/Main/src-client/ConsoleImpl2.cpp b/src/VBox/Main/src-client/ConsoleImpl2.cpp
index d3d2ac6..07572b2 100644
--- a/src/VBox/Main/src-client/ConsoleImpl2.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl2.cpp
@@ -557,40 +557,6 @@ HRESULT Console::i_attachRawPCIDevices(PUVM pUVM, BusAssignmentManager *pBusMgr,
s_pszPCIRawExtPackName);
# endif
- PCFGMNODE pBridges = CFGMR3GetChild(pDevices, "ich9pcibridge");
- Assert(pBridges);
-
- /* Find required bridges, and add missing ones */
- for (size_t iDev = 0; iDev < assignments.size(); iDev++)
- {
- ComPtr<IPCIDeviceAttachment> assignment = assignments[iDev];
- LONG guest = 0;
- PCIBusAddress GuestPCIAddress;
-
- hrc = assignment->COMGETTER(GuestAddress)(&guest); H();
- GuestPCIAddress.fromLong(guest);
- Assert(GuestPCIAddress.valid());
-
- if (GuestPCIAddress.miBus > 0)
- {
- int iBridgesMissed = 0;
- int iBase = GuestPCIAddress.miBus - 1;
-
- while (!pBusMgr->hasPCIDevice("ich9pcibridge", iBase) && iBase > 0)
- {
- iBridgesMissed++; iBase--;
- }
- iBase++;
-
- for (int iBridge = 0; iBridge < iBridgesMissed; iBridge++)
- {
- InsertConfigNode(pBridges, Utf8StrFmt("%d", iBase + iBridge).c_str(), &pInst);
- InsertConfigInteger(pInst, "Trusted", 1);
- hrc = pBusMgr->assignPCIDevice("ich9pcibridge", pInst);
- }
- }
- }
-
/* Now actually add devices */
PCFGMNODE pPCIDevs = NULL;
@@ -1184,6 +1150,15 @@ int Console::i_configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_UnrestrictedExecution, &fEnableUX); H();
InsertConfigInteger(pHM, "EnableUX", fEnableUX);
+ /* Indirect branch prediction boundraries. */
+ BOOL fIBPBOnVMExit = false;
+ hrc = pMachine->GetCPUProperty(CPUPropertyType_IBPBOnVMExit, &fIBPBOnVMExit); H();
+ InsertConfigInteger(pHM, "IBPBOnVMExit", fIBPBOnVMExit);
+
+ BOOL fIBPBOnVMEntry = false;
+ hrc = pMachine->GetCPUProperty(CPUPropertyType_IBPBOnVMEntry, &fIBPBOnVMEntry); H();
+ InsertConfigInteger(pHM, "IBPBOnVMEntry", fIBPBOnVMEntry);
+
/* Reset overwrite. */
if (i_isResetTurnedIntoPowerOff())
InsertConfigInteger(pRoot, "PowerOffInsteadOfReset", 1);
@@ -1452,14 +1427,20 @@ int Console::i_configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
switch (chipsetType)
{
default:
- Assert(false);
+ AssertFailed();
RT_FALL_THRU();
case ChipsetType_PIIX3:
+ /* Create the base for adding bridges on demand */
+ InsertConfigNode(pDevices, "pcibridge", NULL);
+
InsertConfigNode(pDevices, "pci", &pDev);
uHbcPCIAddress = (0x0 << 16) | 0;
uIocPCIAddress = (0x1 << 16) | 0; // ISA controller
break;
case ChipsetType_ICH9:
+ /* Create the base for adding bridges on demand */
+ InsertConfigNode(pDevices, "ich9pcibridge", NULL);
+
InsertConfigNode(pDevices, "ich9pci", &pDev);
uHbcPCIAddress = (0x1e << 16) | 0;
uIocPCIAddress = (0x1f << 16) | 0; // LPC controller
@@ -1475,20 +1456,9 @@ int Console::i_configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
InsertConfigInteger(pCfg, "McfgBase", uMcfgBase);
InsertConfigInteger(pCfg, "McfgLength", cbMcfgLength);
-
- /* And register 2 bridges */
- InsertConfigNode(pDevices, "ich9pcibridge", &pDev);
- InsertConfigNode(pDev, "0", &pInst);
- InsertConfigInteger(pInst, "Trusted", 1); /* boolean */
- hrc = pBusMgr->assignPCIDevice("ich9pcibridge", pInst); H();
-
- InsertConfigNode(pDev, "1", &pInst);
- InsertConfigInteger(pInst, "Trusted", 1); /* boolean */
- hrc = pBusMgr->assignPCIDevice("ich9pcibridge", pInst); H();
-
#ifdef VBOX_WITH_PCI_PASSTHROUGH
/* Add PCI passthrough devices */
- hrc = i_attachRawPCIDevices(pUVM, pBusMgr, pDevices); H();
+ hrc = i_attachRawPCIDevices(pUVM, pBusMgr, pDevices); H();
#endif
}
@@ -2374,19 +2344,6 @@ int Console::i_configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
hrc = ctrls[i]->COMGETTER(PortCount)(&cPorts); H();
InsertConfigInteger(pCfg, "NamespacesMax", cPorts);
- /* For ICH9 we need to create a new PCI bridge if there is more than one NVMe instance. */
- if ( ulInstance > 0
- && chipsetType == ChipsetType_ICH9
- && !pBusMgr->hasPCIDevice("ich9pcibridge", 2))
- {
- PCFGMNODE pBridges = CFGMR3GetChild(pDevices, "ich9pcibridge");
- Assert(pBridges);
-
- InsertConfigNode(pBridges, "2", &pInst);
- InsertConfigInteger(pInst, "Trusted", 1);
- hrc = pBusMgr->assignPCIDevice("ich9pcibridge", pInst);
- }
-
/* Attach the status driver */
AssertRelease(cPorts <= cLedSata);
i_attachStatusDriver(pCtlInst, &mapStorageLeds[iLedNvme], 0, cPorts - 1,
diff --git a/src/VBox/Main/src-client/HGCM.cpp b/src/VBox/Main/src-client/HGCM.cpp
index fb0f1f6..11b29ca 100644
--- a/src/VBox/Main/src-client/HGCM.cpp
+++ b/src/VBox/Main/src-client/HGCM.cpp
@@ -104,8 +104,8 @@ class HGCMService
VBOXHGCMSVCFNTABLE m_fntable;
- int m_cClients;
- int m_cClientsAllocated;
+ uint32_t m_cClients;
+ uint32_t m_cClientsAllocated;
uint32_t *m_paClientIds;
@@ -1200,7 +1200,7 @@ void HGCMService::ReleaseService(void)
* a global state to be saved: only per client info is relevant.
* The global state of a service is configured during VM startup.
*/
- int i;
+ uint32_t i;
for (i = 0; i < pSvc->m_cClients; i++)
{
@@ -1375,10 +1375,31 @@ int HGCMService::CreateAndConnectClient(uint32_t *pu32ClientIdOut, uint32_t u32C
/* Add the client Id to the array. */
if (m_cClients == m_cClientsAllocated)
{
- m_paClientIds = (uint32_t *)RTMemRealloc(m_paClientIds, (m_cClientsAllocated + 64) *
- sizeof(m_paClientIds[0]));
- Assert(m_paClientIds);
- m_cClientsAllocated += 64;
+ const uint32_t cDelta = 64;
+
+ /* Guards against integer overflow on 32bit arch and also limits size of m_paClientIds array to 4GB*/
+ if (m_cClientsAllocated < UINT32_MAX / sizeof(m_paClientIds[0]) - cDelta)
+ {
+ uint32_t *paClientIdsNew;
+
+ paClientIdsNew = (uint32_t *)RTMemRealloc(m_paClientIds, (m_cClientsAllocated + cDelta) *
+ sizeof(m_paClientIds[0]));
+ Assert(paClientIdsNew);
+
+ if (paClientIdsNew)
+ {
+ m_paClientIds = paClientIdsNew;
+ m_cClientsAllocated += cDelta;
+ }
+ else
+ {
+ rc = VERR_NO_MEMORY;
+ }
+ }
+ else
+ {
+ rc = VERR_NO_MEMORY;
+ }
}
m_paClientIds[m_cClients] = handle;
@@ -1442,7 +1463,7 @@ int HGCMService::DisconnectClient(uint32_t u32ClientId, bool fFromService)
}
/* Remove the client id from the array in any case, rc does not matter. */
- int i;
+ uint32_t i;
for (i = 0; i < m_cClients; i++)
{
diff --git a/src/VBox/Main/src-client/VMMDevInterface.cpp b/src/VBox/Main/src-client/VMMDevInterface.cpp
index 5d39f98..455f299 100644
--- a/src/VBox/Main/src-client/VMMDevInterface.cpp
+++ b/src/VBox/Main/src-client/VMMDevInterface.cpp
@@ -616,9 +616,15 @@ static DECLCALLBACK(int) iface_hgcmConnect(PPDMIHGCMCONNECTOR pInterface, PVBOXH
return VERR_INVALID_PARAMETER;
}
+ /* Check if service name is a string terminated by zero*/
+ size_t cchInfo = 0;
+ if (RTStrNLenEx(pServiceLocation->u.host.achName, sizeof(pServiceLocation->u.host.achName), &cchInfo) != VINF_SUCCESS)
+ {
+ return VERR_INVALID_PARAMETER;
+ }
+
if (!pDrv->pVMMDev || !pDrv->pVMMDev->hgcmIsActive())
return VERR_INVALID_STATE;
-
return HGCMGuestConnect(pDrv->pHGCMPort, pCmd, pServiceLocation->u.host.achName, pu32ClientID);
}
diff --git a/src/VBox/Main/src-server/MachineImpl.cpp b/src/VBox/Main/src-server/MachineImpl.cpp
index 128a3fb..70cc1ca 100644
--- a/src/VBox/Main/src-server/MachineImpl.cpp
+++ b/src/VBox/Main/src-server/MachineImpl.cpp
@@ -194,6 +194,8 @@ Machine::HWData::HWData()
mTripleFaultReset = false;
mAPIC = true;
mX2APIC = false;
+ mIBPBOnVMExit = false;
+ mIBPBOnVMEntry = false;
mHPETEnabled = false;
mCpuExecutionCap = 100; /* Maximum CPU execution cap by default. */
mCpuIdPortabilityLevel = 0;
@@ -2254,6 +2256,14 @@ HRESULT Machine::getCPUProperty(CPUPropertyType_T aProperty, BOOL *aValue)
*aValue = mHWData->mX2APIC;
break;
+ case CPUPropertyType_IBPBOnVMExit:
+ *aValue = mHWData->mIBPBOnVMExit;
+ break;
+
+ case CPUPropertyType_IBPBOnVMEntry:
+ *aValue = mHWData->mIBPBOnVMEntry;
+ break;
+
default:
return E_INVALIDARG;
}
@@ -2303,6 +2313,18 @@ HRESULT Machine::setCPUProperty(CPUPropertyType_T aProperty, BOOL aValue)
mHWData->mAPIC = !!aValue;
break;
+ case CPUPropertyType_IBPBOnVMExit:
+ i_setModified(IsModified_MachineData);
+ mHWData.backup();
+ mHWData->mIBPBOnVMExit = !!aValue;
+ break;
+
+ case CPUPropertyType_IBPBOnVMEntry:
+ i_setModified(IsModified_MachineData);
+ mHWData.backup();
+ mHWData->mIBPBOnVMEntry = !!aValue;
+ break;
+
default:
return E_INVALIDARG;
}
@@ -8898,6 +8920,8 @@ HRESULT Machine::i_loadHardware(const Guid *puuidRegistry,
mHWData->mTripleFaultReset = data.fTripleFaultReset;
mHWData->mAPIC = data.fAPIC;
mHWData->mX2APIC = data.fX2APIC;
+ mHWData->mIBPBOnVMExit = data.fIBPBOnVMExit;
+ mHWData->mIBPBOnVMEntry = data.fIBPBOnVMEntry;
mHWData->mCPUCount = data.cCPUs;
mHWData->mCPUHotPlugEnabled = data.fCpuHotPlug;
mHWData->mCpuExecutionCap = data.ulCpuExecutionCap;
@@ -10221,6 +10245,8 @@ HRESULT Machine::i_saveHardware(settings::Hardware &data, settings::Debugging *p
data.fTripleFaultReset = !!mHWData->mTripleFaultReset;
data.fAPIC = !!mHWData->mAPIC;
data.fX2APIC = !!mHWData->mX2APIC;
+ data.fIBPBOnVMExit = !!mHWData->mIBPBOnVMExit;
+ data.fIBPBOnVMEntry = !!mHWData->mIBPBOnVMEntry;
data.cCPUs = mHWData->mCPUCount;
data.fCpuHotPlug = !!mHWData->mCPUHotPlugEnabled;
data.ulCpuExecutionCap = mHWData->mCpuExecutionCap;
diff --git a/src/VBox/Main/xml/Settings.cpp b/src/VBox/Main/xml/Settings.cpp
index c327af8..f7d3ce4 100644
--- a/src/VBox/Main/xml/Settings.cpp
+++ b/src/VBox/Main/xml/Settings.cpp
@@ -2777,6 +2777,8 @@ Hardware::Hardware() :
fPAE(false),
fAPIC(true),
fX2APIC(false),
+ fIBPBOnVMExit(false),
+ fIBPBOnVMEntry(false),
enmLongMode(HC_ARCH_BITS == 64 ? Hardware::LongMode_Enabled : Hardware::LongMode_Disabled),
cCPUs(1),
fCpuHotPlug(false),
@@ -2930,6 +2932,8 @@ bool Hardware::operator==(const Hardware& h) const
&& fTripleFaultReset == h.fTripleFaultReset
&& fAPIC == h.fAPIC
&& fX2APIC == h.fX2APIC
+ && fIBPBOnVMExit == h.fIBPBOnVMExit
+ && fIBPBOnVMEntry == h.fIBPBOnVMEntry
&& cCPUs == h.cCPUs
&& fCpuHotPlug == h.fCpuHotPlug
&& ulCpuExecutionCap == h.ulCpuExecutionCap
@@ -3932,6 +3936,12 @@ void MachineConfigFile::readHardware(const xml::ElementNode &elmHardware,
pelmCPUChild->getAttributeValue("enabled", hw.fX2APIC);
if (hw.fX2APIC)
hw.fAPIC = true;
+ pelmCPUChild = pelmHwChild->findChildElement("IBPBOn");
+ if (pelmCPUChild)
+ {
+ pelmCPUChild->getAttributeValue("vmexit", hw.fIBPBOnVMExit);
+ pelmCPUChild->getAttributeValue("vmentry", hw.fIBPBOnVMEntry);
+ }
if ((pelmCPUChild = pelmHwChild->findChildElement("CpuIdTree")))
readCpuIdTree(*pelmCPUChild, hw.llCpuIdLeafs);
@@ -5258,6 +5268,14 @@ void MachineConfigFile::buildHardwareXML(xml::ElementNode &elmParent,
pelmCPU->createChild("PAE")->setAttribute("enabled", hw.fPAE);
if (m->sv >= SettingsVersion_v1_16)
{
+ if (hw.fIBPBOnVMEntry || hw.fIBPBOnVMExit)
+ {
+ xml::ElementNode *pelmChild = pelmCPU->createChild("IBPBOn");
+ if (hw.fIBPBOnVMExit)
+ pelmChild->setAttribute("vmexit", hw.fIBPBOnVMExit);
+ if (hw.fIBPBOnVMEntry)
+ pelmChild->setAttribute("vmentry", hw.fIBPBOnVMEntry);
+ }
}
if (m->sv >= SettingsVersion_v1_14 && hw.enmLongMode != Hardware::LongMode_Legacy)
{
@@ -6929,7 +6947,9 @@ void MachineConfigFile::bumpSettingsVersionIfNeeded()
|| (!hardwareMachine.strCpuProfile.equals("host") && hardwareMachine.strCpuProfile.isNotEmpty())
|| hardwareMachine.biosSettings.apicMode != APICMode_APIC
|| !hardwareMachine.fAPIC
- || hardwareMachine.fX2APIC)
+ || hardwareMachine.fX2APIC
+ || hardwareMachine.fIBPBOnVMExit
+ || hardwareMachine.fIBPBOnVMEntry)
{
m->sv = SettingsVersion_v1_16;
return;
diff --git a/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c b/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c
index 810779a..e000ff5 100644
--- a/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c
+++ b/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2006-2017 Oracle Corporation
+ * Copyright (C) 2006-2018 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -715,6 +715,16 @@ static enum hrtimer_restart rtTimerLinuxHrCallback(struct hrtimer *pHrTimer)
#endif /* RTTIMER_LINUX_WITH_HRTIMER */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+/**
+ * Timer callback function for standard timers.
+ *
+ * @param pLnxTimer Pointer to the Linux timer structure.
+ */
+static void rtTimerLinuxStdCallback(struct timer_list *pLnxTimer)
+{
+ PRTTIMERLNXSUBTIMER pSubTimer = from_timer(pSubTimer, pLnxTimer, u.Std.LnxTimer);
+#else
/**
* Timer callback function for standard timers.
*
@@ -723,6 +733,7 @@ static enum hrtimer_restart rtTimerLinuxHrCallback(struct hrtimer *pHrTimer)
static void rtTimerLinuxStdCallback(unsigned long ulUser)
{
PRTTIMERLNXSUBTIMER pSubTimer = (PRTTIMERLNXSUBTIMER)ulUser;
+#endif
PRTTIMER pTimer = pSubTimer->pParent;
RTTIMERLNX_LOG(("stdcallback %p\n", pTimer));
@@ -1584,13 +1595,17 @@ RTDECL(int) RTTimerCreateEx(PRTTIMER *ppTimer, uint64_t u64NanoInterval, uint32_
else
#endif
{
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+ timer_setup(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer, rtTimerLinuxStdCallback, TIMER_PINNED);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
init_timer_pinned(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
#else
init_timer(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
pTimer->aSubTimers[iCpu].u.Std.LnxTimer.data = (unsigned long)&pTimer->aSubTimers[iCpu];
pTimer->aSubTimers[iCpu].u.Std.LnxTimer.function = rtTimerLinuxStdCallback;
+#endif
pTimer->aSubTimers[iCpu].u.Std.LnxTimer.expires = jiffies;
pTimer->aSubTimers[iCpu].u.Std.u64NextTS = 0;
}
diff --git a/src/VBox/VMM/VMMR0/HMR0A.asm b/src/VBox/VMM/VMMR0/HMR0A.asm
index 234591e..c9bd14c 100644
--- a/src/VBox/VMM/VMMR0/HMR0A.asm
+++ b/src/VBox/VMM/VMMR0/HMR0A.asm
@@ -49,6 +49,20 @@
; Use define because I'm too lazy to convert the struct.
%define XMM_OFF_IN_X86FXSTATE 160
+;; Spectre filler for 32-bit mode.
+; Some user space address that points to a 4MB page boundrary in hope that it
+; will somehow make it less useful.
+%define SPECTRE_FILLER32 0x227fffff
+;; Spectre filler for 64-bit mode.
+; Choosen to be an invalid address (also with 5 level paging).
+%define SPECTRE_FILLER64 0x02204204207fffff
+;; Spectre filler for the current CPU mode.
+%ifdef RT_ARCH_AMD64
+ %define SPECTRE_FILLER SPECTRE_FILLER64
+%else
+ %define SPECTRE_FILLER SPECTRE_FILLER32
+%endif
+
;;
; Determine skipping restoring of GDTR, IDTR, TR across VMX non-root operation
;
@@ -224,6 +238,21 @@
%define MYPOPSEGS MYPOPSEGS32
%endif
+;;
+; Creates an indirect branch prediction barrier on CPUs that need and supports that.
+; @clobbers eax, edx, ecx
+; @param 1 How to address CPUMCTX.
+; @param 2 Which flag to test for (CPUMCTX_WSF_IBPB_ENTRY or CPUMCTX_WSF_IBPB_EXIT)
+%macro INDIRECT_BRANCH_PREDICTION_BARRIER 2
+ test byte [%1 + CPUMCTX.fWorldSwitcher], %2
+ jz %%no_indirect_branch_barrier
+ mov ecx, MSR_IA32_PRED_CMD
+ mov eax, MSR_IA32_PRED_CMD_F_IBPB
+ xor edx, edx
+ wrmsr
+%%no_indirect_branch_barrier:
+%endmacro
+
;*********************************************************************************************************************************
;* External Symbols *
@@ -1184,11 +1213,17 @@ ENDPROC hmR0SVMRunWrapXMM
%endif
mov [ss:xDI + CPUMCTX.eax], eax
+ mov xAX, SPECTRE_FILLER
mov [ss:xDI + CPUMCTX.ebx], ebx
+ mov xBX, xAX
mov [ss:xDI + CPUMCTX.ecx], ecx
+ mov xCX, xAX
mov [ss:xDI + CPUMCTX.edx], edx
+ mov xDX, xAX
mov [ss:xDI + CPUMCTX.esi], esi
+ mov xSI, xAX
mov [ss:xDI + CPUMCTX.ebp], ebp
+ mov xBP, xAX
mov xAX, cr2
mov [ss:xDI + CPUMCTX.cr2], xAX
@@ -1199,6 +1234,9 @@ ENDPROC hmR0SVMRunWrapXMM
pop dword [ss:xDI + CPUMCTX.edi] ; The guest edi we pushed above.
%endif
+ ; Fight spectre.
+ INDIRECT_BRANCH_PREDICTION_BARRIER ss:xDI, CPUMCTX_WSF_IBPB_EXIT
+
%ifndef VMX_SKIP_TR
; Restore TSS selector; must mark it as not busy before using ltr (!)
; ASSUME that this is supposed to be 'BUSY'. (saves 20-30 ticks on the T42p)
@@ -1415,6 +1453,9 @@ ALIGN(16)
; Note: assumes success!
; Don't mess with ESP anymore!!!
+ ; Fight spectre.
+ INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
+
; Load guest general purpose registers.
mov eax, [xSI + CPUMCTX.eax]
mov ebx, [xSI + CPUMCTX.ebx]
@@ -1489,25 +1530,42 @@ ENDPROC VMXR0StartVM32
%endif
mov qword [xDI + CPUMCTX.eax], rax
+ mov rax, SPECTRE_FILLER64
mov qword [xDI + CPUMCTX.ebx], rbx
+ mov rbx, rax
mov qword [xDI + CPUMCTX.ecx], rcx
+ mov rcx, rax
mov qword [xDI + CPUMCTX.edx], rdx
+ mov rdx, rax
mov qword [xDI + CPUMCTX.esi], rsi
+ mov rsi, rax
mov qword [xDI + CPUMCTX.ebp], rbp
+ mov rbp, rax
mov qword [xDI + CPUMCTX.r8], r8
+ mov r8, rax
mov qword [xDI + CPUMCTX.r9], r9
+ mov r9, rax
mov qword [xDI + CPUMCTX.r10], r10
+ mov r10, rax
mov qword [xDI + CPUMCTX.r11], r11
+ mov r11, rax
mov qword [xDI + CPUMCTX.r12], r12
+ mov r12, rax
mov qword [xDI + CPUMCTX.r13], r13
+ mov r13, rax
mov qword [xDI + CPUMCTX.r14], r14
+ mov r14, rax
mov qword [xDI + CPUMCTX.r15], r15
+ mov r15, rax
mov rax, cr2
mov qword [xDI + CPUMCTX.cr2], rax
pop xAX ; The guest rdi we pushed above
mov qword [xDI + CPUMCTX.edi], rax
+ ; Fight spectre.
+ INDIRECT_BRANCH_PREDICTION_BARRIER xDI, CPUMCTX_WSF_IBPB_EXIT
+
%ifndef VMX_SKIP_TR
; Restore TSS selector; must mark it as not busy before using ltr (!)
; ASSUME that this is supposed to be 'BUSY'. (saves 20-30 ticks on the T42p).
@@ -1704,6 +1762,9 @@ ALIGN(16)
; Note: assumes success!
; Don't mess with ESP anymore!!!
+ ; Fight spectre.
+ INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
+
; Load guest general purpose registers.
mov rax, qword [xSI + CPUMCTX.eax]
mov rbx, qword [xSI + CPUMCTX.ebx]
@@ -1832,6 +1893,9 @@ BEGINPROC SVMR0VMRun
push xAX ; save for the vmload after vmrun
vmsave
+ ; Fight spectre.
+ INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
+
; Setup xAX for VMLOAD.
mov xAX, [xBP + xCB * 2 + RTHCPHYS_CB] ; HCPhysVmcb (64 bits physical address; x86: take low dword only)
@@ -1869,11 +1933,20 @@ BEGINPROC SVMR0VMRun
pop xAX
mov [ss:xAX + CPUMCTX.ebx], ebx
+ mov xBX, SPECTRE_FILLER
mov [ss:xAX + CPUMCTX.ecx], ecx
+ mov xCX, xBX
mov [ss:xAX + CPUMCTX.edx], edx
+ mov xDX, xBX
mov [ss:xAX + CPUMCTX.esi], esi
+ mov xSI, xBX
mov [ss:xAX + CPUMCTX.edi], edi
+ mov xDI, xBX
mov [ss:xAX + CPUMCTX.ebp], ebp
+ mov xBP, xBX
+
+ ; Fight spectre. Note! Trashes xAX!
+ INDIRECT_BRANCH_PREDICTION_BARRIER ss:xAX, CPUMCTX_WSF_IBPB_EXIT
; Restore the host xcr0 if necessary.
pop xCX
@@ -1977,6 +2050,9 @@ BEGINPROC SVMR0VMRun64
push rax ; save for the vmload after vmrun
vmsave
+ ; Fight spectre.
+ INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
+
; Setup rax for VMLOAD.
mov rax, [rbp + xCB * 2 + RTHCPHYS_CB] ; HCPhysVmcb (64 bits physical address; take low dword only)
@@ -2021,19 +2097,36 @@ BEGINPROC SVMR0VMRun64
pop rax
mov qword [rax + CPUMCTX.ebx], rbx
+ mov rbx, SPECTRE_FILLER64
mov qword [rax + CPUMCTX.ecx], rcx
+ mov rcx, rbx
mov qword [rax + CPUMCTX.edx], rdx
+ mov rdx, rbx
mov qword [rax + CPUMCTX.esi], rsi
+ mov rsi, rbx
mov qword [rax + CPUMCTX.edi], rdi
+ mov rdi, rbx
mov qword [rax + CPUMCTX.ebp], rbp
+ mov rbp, rbx
mov qword [rax + CPUMCTX.r8], r8
+ mov r8, rbx
mov qword [rax + CPUMCTX.r9], r9
+ mov r9, rbx
mov qword [rax + CPUMCTX.r10], r10
+ mov r10, rbx
mov qword [rax + CPUMCTX.r11], r11
+ mov r11, rbx
mov qword [rax + CPUMCTX.r12], r12
+ mov r12, rbx
mov qword [rax + CPUMCTX.r13], r13
+ mov r13, rbx
mov qword [rax + CPUMCTX.r14], r14
+ mov r14, rbx
mov qword [rax + CPUMCTX.r15], r15
+ mov r15, rbx
+
+ ; Fight spectre. Note! Trashes rax!
+ INDIRECT_BRANCH_PREDICTION_BARRIER rax, CPUMCTX_WSF_IBPB_EXIT
; Restore the host xcr0 if necessary.
pop xCX
diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.cpp b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
index 92cc34b..20810ac 100644
--- a/src/VBox/VMM/VMMR0/HMVMXR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
@@ -12630,6 +12630,8 @@ HMVMX_EXIT_DECL hmR0VmxExitMovCRx(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIEN
STAM_COUNTER_INC(&pVCpu->hm.s.StatExitCRxRead[VMX_EXIT_QUALIFICATION_CRX_REGISTER(uExitQualification)]);
Log4(("CRX CR%d Read access rcStrict=%Rrc\n", VMX_EXIT_QUALIFICATION_CRX_REGISTER(uExitQualification),
VBOXSTRICTRC_VAL(rcStrict)));
+ if (VMX_EXIT_QUALIFICATION_CRX_GENREG(uExitQualification) == X86_GREG_xSP)
+ HMCPU_CF_SET(pVCpu, HM_CHANGED_GUEST_RSP);
break;
}
diff --git a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
index 66d030a..59134ab 100644
--- a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
+++ b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
@@ -140,26 +140,83 @@ static const CPUMMICROARCH g_aenmIntelFamily06[] =
/* [82(0x52)] = */ kCpumMicroarch_Intel_Unknown,
/* [83(0x53)] = */ kCpumMicroarch_Intel_Unknown,
/* [84(0x54)] = */ kCpumMicroarch_Intel_Unknown,
- /* [85(0x55)] = */ kCpumMicroarch_Intel_Core7_Skylake, /* unconfirmed server cpu */
+ /* [85(0x55)] = */ kCpumMicroarch_Intel_Core7_Skylake, /* server cpu */
/* [86(0x56)] = */ kCpumMicroarch_Intel_Core7_Broadwell, /* Xeon D-1540, Broadwell-DE */
- /* [87(0x57)] = */ kCpumMicroarch_Intel_Unknown,
+ /* [87(0x57)] = */ kCpumMicroarch_Intel_Phi_KnightsLanding,
/* [88(0x58)] = */ kCpumMicroarch_Intel_Unknown,
/* [89(0x59)] = */ kCpumMicroarch_Intel_Unknown,
/* [90(0x5a)] = */ kCpumMicroarch_Intel_Atom_Silvermont, /* Moorefield */
/* [91(0x5b)] = */ kCpumMicroarch_Intel_Unknown,
- /* [92(0x5c)] = */ kCpumMicroarch_Intel_Atom_Goldmont, /* unconfirmed */
+ /* [92(0x5c)] = */ kCpumMicroarch_Intel_Atom_Goldmont, /* Apollo Lake */
/* [93(0x5d)] = */ kCpumMicroarch_Intel_Atom_Silvermont, /* x3-C3230 */
/* [94(0x5e)] = */ kCpumMicroarch_Intel_Core7_Skylake, /* i7-6700K */
- /* [95(0x5f)] = */ kCpumMicroarch_Intel_Unknown,
+ /* [95(0x5f)] = */ kCpumMicroarch_Intel_Atom_Goldmont, /* Denverton */
/* [96(0x60)] = */ kCpumMicroarch_Intel_Unknown,
/* [97(0x61)] = */ kCpumMicroarch_Intel_Unknown,
/* [98(0x62)] = */ kCpumMicroarch_Intel_Unknown,
/* [99(0x63)] = */ kCpumMicroarch_Intel_Unknown,
- /* [99(0x64)] = */ kCpumMicroarch_Intel_Unknown,
- /* [99(0x65)] = */ kCpumMicroarch_Intel_Unknown,
- /* [99(0x66)] = */ kCpumMicroarch_Intel_Core7_Cannonlake, /* unconfirmed */
+ /*[100(0x64)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[101(0x65)] = */ kCpumMicroarch_Intel_Atom_Silvermont, /* SoFIA */
+ /*[102(0x66)] = */ kCpumMicroarch_Intel_Core7_CannonLake, /* unconfirmed */
+ /*[103(0x67)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[104(0x68)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[105(0x69)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[106(0x6a)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[107(0x6b)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[108(0x6c)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[109(0x6d)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[110(0x6e)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[111(0x6f)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[112(0x70)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[113(0x71)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[114(0x72)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[115(0x73)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[116(0x74)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[117(0x75)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[118(0x76)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[119(0x77)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[120(0x78)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[121(0x79)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[122(0x7a)] = */ kCpumMicroarch_Intel_Atom_GoldmontPlus,
+ /*[123(0x7b)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[124(0x7c)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[125(0x7d)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[126(0x7e)] = */ kCpumMicroarch_Intel_Core7_IceLake, /* unconfirmed */
+ /*[127(0x7f)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[128(0x80)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[129(0x81)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[130(0x82)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[131(0x83)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[132(0x84)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[133(0x85)] = */ kCpumMicroarch_Intel_Phi_KnightsMill,
+ /*[134(0x86)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[135(0x87)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[136(0x88)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[137(0x89)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[138(0x8a)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[139(0x8b)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[140(0x8c)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[141(0x8d)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[142(0x8e)] = */ kCpumMicroarch_Intel_Core7_KabyLake, /* Stepping 0xA is CoffeeLake, 9 is KabyLake. */
+ /*[143(0x8f)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[144(0x90)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[145(0x91)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[146(0x92)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[147(0x93)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[148(0x94)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[149(0x95)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[150(0x96)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[151(0x97)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[152(0x98)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[153(0x99)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[154(0x9a)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[155(0x9b)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[156(0x9c)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[157(0x9d)] = */ kCpumMicroarch_Intel_Unknown,
+ /*[158(0x9e)] = */ kCpumMicroarch_Intel_Core7_KabyLake, /* Stepping 0xA is CoffeeLake, 9 is KabyLake. */
+ /*[159(0x9f)] = */ kCpumMicroarch_Intel_Unknown,
};
-
+AssertCompile(RT_ELEMENTS(g_aenmIntelFamily06) == 0x9f+1);
/**
@@ -309,7 +366,13 @@ VMMR3DECL(CPUMMICROARCH) CPUMR3CpuIdDetermineMicroarchEx(CPUMCPUVENDOR enmVendor
return kCpumMicroarch_Intel_P5;
case 6:
if (bModel < RT_ELEMENTS(g_aenmIntelFamily06))
- return g_aenmIntelFamily06[bModel];
+ {
+ CPUMMICROARCH enmMicroArch = g_aenmIntelFamily06[bModel];
+ if ( enmMicroArch == kCpumMicroarch_Intel_Core7_KabyLake
+ && bStepping >= 0xa)
+ enmMicroArch = kCpumMicroarch_Intel_Core7_CoffeeLake;
+ return enmMicroArch;
+ }
return kCpumMicroarch_Intel_Atom_Unknown;
case 15:
switch (bModel)
@@ -440,7 +503,11 @@ VMMR3DECL(const char *) CPUMR3MicroarchName(CPUMMICROARCH enmMicroarch)
CASE_RET_STR(kCpumMicroarch_Intel_Core7_Haswell);
CASE_RET_STR(kCpumMicroarch_Intel_Core7_Broadwell);
CASE_RET_STR(kCpumMicroarch_Intel_Core7_Skylake);
- CASE_RET_STR(kCpumMicroarch_Intel_Core7_Cannonlake);
+ CASE_RET_STR(kCpumMicroarch_Intel_Core7_KabyLake);
+ CASE_RET_STR(kCpumMicroarch_Intel_Core7_CoffeeLake);
+ CASE_RET_STR(kCpumMicroarch_Intel_Core7_CannonLake);
+ CASE_RET_STR(kCpumMicroarch_Intel_Core7_IceLake);
+ CASE_RET_STR(kCpumMicroarch_Intel_Core7_TigerLake);
CASE_RET_STR(kCpumMicroarch_Intel_Atom_Bonnell);
CASE_RET_STR(kCpumMicroarch_Intel_Atom_Lincroft);
@@ -448,8 +515,15 @@ VMMR3DECL(const char *) CPUMR3MicroarchName(CPUMMICROARCH enmMicroarch)
CASE_RET_STR(kCpumMicroarch_Intel_Atom_Silvermont);
CASE_RET_STR(kCpumMicroarch_Intel_Atom_Airmount);
CASE_RET_STR(kCpumMicroarch_Intel_Atom_Goldmont);
+ CASE_RET_STR(kCpumMicroarch_Intel_Atom_GoldmontPlus);
CASE_RET_STR(kCpumMicroarch_Intel_Atom_Unknown);
+ CASE_RET_STR(kCpumMicroarch_Intel_Phi_KnightsFerry);
+ CASE_RET_STR(kCpumMicroarch_Intel_Phi_KnightsCorner);
+ CASE_RET_STR(kCpumMicroarch_Intel_Phi_KnightsLanding);
+ CASE_RET_STR(kCpumMicroarch_Intel_Phi_KnightsHill);
+ CASE_RET_STR(kCpumMicroarch_Intel_Phi_KnightsMill);
+
CASE_RET_STR(kCpumMicroarch_Intel_NB_Willamette);
CASE_RET_STR(kCpumMicroarch_Intel_NB_Northwood);
CASE_RET_STR(kCpumMicroarch_Intel_NB_Prescott);
@@ -532,6 +606,7 @@ VMMR3DECL(const char *) CPUMR3MicroarchName(CPUMMICROARCH enmMicroarch)
case kCpumMicroarch_Intel_Core7_End:
case kCpumMicroarch_Intel_Atom_End:
case kCpumMicroarch_Intel_P6_Core_Atom_End:
+ case kCpumMicroarch_Intel_Phi_End:
case kCpumMicroarch_Intel_NB_End:
case kCpumMicroarch_AMD_K7_End:
case kCpumMicroarch_AMD_K8_End:
@@ -1626,9 +1701,9 @@ int cpumR3CpuIdExplodeFeatures(PCCPUMCPUIDLEAF paLeaves, uint32_t cLeaves, PCPUM
pFeatures->uModel,
pFeatures->uStepping);
- PCCPUMCPUIDLEAF pLeaf = cpumR3CpuIdFindLeaf(paLeaves, cLeaves, 0x80000008);
- if (pLeaf)
- pFeatures->cMaxPhysAddrWidth = pLeaf->uEax & 0xff;
+ PCCPUMCPUIDLEAF const pExtLeaf8 = cpumR3CpuIdFindLeaf(paLeaves, cLeaves, 0x80000008);
+ if (pExtLeaf8)
+ pFeatures->cMaxPhysAddrWidth = pExtLeaf8->uEax & 0xff;
else if (pStd1Leaf->uEdx & X86_CPUID_FEATURE_EDX_PSE36)
pFeatures->cMaxPhysAddrWidth = 36;
else
@@ -1667,6 +1742,11 @@ int cpumR3CpuIdExplodeFeatures(PCCPUMCPUIDLEAF paLeaves, uint32_t cLeaves, PCPUM
pFeatures->fAvx2 = RT_BOOL(pSxfLeaf0->uEbx & X86_CPUID_STEXT_FEATURE_EBX_AVX2);
pFeatures->fAvx512Foundation = RT_BOOL(pSxfLeaf0->uEbx & X86_CPUID_STEXT_FEATURE_EBX_AVX512F);
pFeatures->fClFlushOpt = RT_BOOL(pSxfLeaf0->uEbx & X86_CPUID_STEXT_FEATURE_EBX_CLFLUSHOPT);
+
+ pFeatures->fIbpb = RT_BOOL(pSxfLeaf0->uEdx & X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB);
+ pFeatures->fIbrs = pFeatures->fIbpb;
+ pFeatures->fStibp = RT_BOOL(pSxfLeaf0->uEdx & X86_CPUID_STEXT_FEATURE_EDX_STIBP);
+ pFeatures->fArchCap = RT_BOOL(pSxfLeaf0->uEdx & X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP);
}
/* MWAIT/MONITOR leaf. */
@@ -1706,6 +1786,7 @@ int cpumR3CpuIdExplodeFeatures(PCCPUMCPUIDLEAF paLeaves, uint32_t cLeaves, PCPUM
pFeatures->fFxSaveRstor |= RT_BOOL(pExtLeaf->uEdx & X86_CPUID_AMD_FEATURE_EDX_FXSR);
pFeatures->fMmx |= RT_BOOL(pExtLeaf->uEdx & X86_CPUID_AMD_FEATURE_EDX_MMX);
pFeatures->fTsc |= RT_BOOL(pExtLeaf->uEdx & X86_CPUID_AMD_FEATURE_EDX_TSC);
+ pFeatures->fIbpb |= pExtLeaf8 && (pExtLeaf8->uEbx & X86_CPUID_AMD_EFEID_EBX_IBPB);
pFeatures->fAmdMmxExts = RT_BOOL(pExtLeaf->uEdx & X86_CPUID_AMD_FEATURE_EDX_AXMMX);
pFeatures->fXop = RT_BOOL(pExtLeaf->uEcx & X86_CPUID_AMD_FEATURE_ECX_XOP);
pFeatures->fSvm = RT_BOOL(pExtLeaf->uEcx & X86_CPUID_AMD_FEATURE_ECX_SVM);
@@ -2177,7 +2258,7 @@ static int cpumR3CpuIdInstallAndExplodeLeaves(PVM pVM, PCPUM pCpum, PCPUMCPUIDLE
}
/*
- * Configure XSAVE offsets according to the CPUID info.
+ * Configure XSAVE offsets according to the CPUID info and set the feature flags.
*/
memset(&pVM->aCpus[0].cpum.s.Guest.aoffXState[0], 0xff, sizeof(pVM->aCpus[0].cpum.s.Guest.aoffXState));
pVM->aCpus[0].cpum.s.Guest.aoffXState[XSAVE_C_X87_BIT] = 0;
@@ -3036,7 +3117,7 @@ static int cpumR3CpuIdSanitize(PVM pVM, PCPUM pCpum, PCPUMCPUIDCONFIG pConfig)
pCurLeaf->uEcx &= 0
//| X86_CPUID_STEXT_FEATURE_ECX_PREFETCHWT1 - we do not do vector functions yet.
;
- pCurLeaf->uEdx &= 0;
+ pCurLeaf->uEdx &= 0; /** @todo X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB, X86_CPUID_STEXT_FEATURE_EDX_STIBP and X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP */
if (pCpum->u8PortableCpuIdLevel > 0)
{
@@ -3419,7 +3500,7 @@ static int cpumR3CpuIdSanitize(PVM pVM, PCPUM pCpum, PCPUMCPUIDCONFIG pConfig)
while ((pCurLeaf = cpumR3CpuIdGetExactLeaf(pCpum, UINT32_C(0x80000008), uSubLeaf)) != NULL)
{
pCurLeaf->uEax &= UINT32_C(0x0000ffff); /* Virtual & physical address sizes only. */
- pCurLeaf->uEbx = 0; /* reserved */
+ pCurLeaf->uEbx = 0; /* reserved - [12] == IBPB */
pCurLeaf->uEdx = 0; /* reserved */
/* Set APICIdCoreIdSize to zero (use legacy method to determine the number of cores per cpu).
@@ -5894,8 +5975,21 @@ static DBGFREGSUBFIELD const g_aLeaf7Sub0EbxSubFields[] =
static DBGFREGSUBFIELD const g_aLeaf7Sub0EcxSubFields[] =
{
DBGFREGSUBFIELD_RO("PREFETCHWT1\0" "PREFETCHWT1 instruction", 0, 1, 0),
+ DBGFREGSUBFIELD_RO("UMIP\0" "User mode insturction prevention", 2, 1, 0),
DBGFREGSUBFIELD_RO("PKU\0" "Protection Key for Usermode pages", 3, 1, 0),
- DBGFREGSUBFIELD_RO("OSPKU\0" "CR4.PKU mirror", 4, 1, 0),
+ DBGFREGSUBFIELD_RO("OSPKE\0" "CR4.PKU mirror", 4, 1, 0),
+ DBGFREGSUBFIELD_RO("MAWAU\0" "Value used by BNDLDX & BNDSTX", 17, 5, 0),
+ DBGFREGSUBFIELD_RO("RDPID\0" "Read processor ID support", 22, 1, 0),
+ DBGFREGSUBFIELD_RO("SGX_LC\0" "Supports SGX Launch Configuration", 30, 1, 0),
+ DBGFREGSUBFIELD_TERMINATOR()
+};
+
+/** CPUID(7,0).EDX field descriptions. */
+static DBGFREGSUBFIELD const g_aLeaf7Sub0EdxSubFields[] =
+{
+ DBGFREGSUBFIELD_RO("IBRS_IBPB\0" "IA32_SPEC_CTRL.IBRS and IA32_PRED_CMD.IBPB", 26, 1, 0),
+ DBGFREGSUBFIELD_RO("STIBP\0" "Supports IA32_SPEC_CTRL.STIBP", 27, 1, 0),
+ DBGFREGSUBFIELD_RO("ARCHCAP\0" "Supports IA32_ARCH_CAP", 29, 1, 0),
DBGFREGSUBFIELD_TERMINATOR()
};
@@ -5984,6 +6078,16 @@ static DBGFREGSUBFIELD const g_aExtLeaf1EcxSubFields[] =
DBGFREGSUBFIELD_TERMINATOR()
};
+/** CPUID(0x80000008,0).EBX field descriptions. */
+static DBGFREGSUBFIELD const g_aExtLeaf8EbxSubFields[] =
+{
+ DBGFREGSUBFIELD_RO("CLZERO\0" "Clear zero instruction (cacheline)", 0, 1, 0),
+ DBGFREGSUBFIELD_RO("IRPerf\0" "Instructions retired count support", 1, 1, 0),
+ DBGFREGSUBFIELD_RO("XSaveErPtr\0" "Save/restore error pointers (FXSAVE/RSTOR*)", 2, 1, 0),
+ DBGFREGSUBFIELD_RO("IBPB\0" "Supports the IBPB command in IA32_PRED_CMD", 12, 1, 0),
+ DBGFREGSUBFIELD_TERMINATOR()
+};
+
static void cpumR3CpuIdInfoMnemonicListU32(PCDBGFINFOHLP pHlp, uint32_t uVal, PCDBGFREGSUBFIELD pDesc,
const char *pszLeadIn, uint32_t cchWidth)
@@ -6186,14 +6290,14 @@ static void cpumR3CpuIdInfoStdLeaf7Details(PCDBGFINFOHLP pHlp, PCCPUMCPUIDLEAF p
cpumR3CpuIdInfoVerboseCompareListU32(pHlp, pCurLeaf->uEbx, Host.uEbx, g_aLeaf7Sub0EbxSubFields, 56);
cpumR3CpuIdInfoVerboseCompareListU32(pHlp, pCurLeaf->uEcx, Host.uEcx, g_aLeaf7Sub0EcxSubFields, 56);
if (pCurLeaf->uEdx || Host.uEdx)
- pHlp->pfnPrintf(pHlp, "%36 %#x (%#x)\n", "Ext Features EDX:", pCurLeaf->uEdx, Host.uEdx);
+ cpumR3CpuIdInfoVerboseCompareListU32(pHlp, pCurLeaf->uEdx, Host.uEdx, g_aLeaf7Sub0EdxSubFields, 56);
}
else
{
cpumR3CpuIdInfoMnemonicListU32(pHlp, pCurLeaf->uEbx, g_aLeaf7Sub0EbxSubFields, "Ext Features EBX:", 36);
cpumR3CpuIdInfoMnemonicListU32(pHlp, pCurLeaf->uEcx, g_aLeaf7Sub0EcxSubFields, "Ext Features ECX:", 36);
if (pCurLeaf->uEdx)
- pHlp->pfnPrintf(pHlp, "%36 %#x\n", "Ext Features EDX:", pCurLeaf->uEdx);
+ cpumR3CpuIdInfoMnemonicListU32(pHlp, pCurLeaf->uEdx, g_aLeaf7Sub0EdxSubFields, "Ext Features EDX:", 36);
}
break;
@@ -6681,21 +6785,33 @@ DECLCALLBACK(void) cpumR3CpuIdInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszA
}
- if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000008), 0)) != NULL)
+ pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000008), 0);
+ if (pCurLeaf != NULL)
{
- uint32_t uEAX = pCurLeaf->uEax;
- uint32_t uECX = pCurLeaf->uEcx;
+ if (pCurLeaf->uEbx || (Host.uEbx && iVerbosity))
+ {
+ if (iVerbosity < 1)
+ cpumR3CpuIdInfoMnemonicListU32(pHlp, pCurLeaf->uEbx, g_aExtLeaf8EbxSubFields, "Ext Features ext IDs EBX:", 34);
+ else
+ cpumR3CpuIdInfoVerboseCompareListU32(pHlp, pCurLeaf->uEbx, Host.uEbx, g_aExtLeaf8EbxSubFields, 56);
+ }
- pHlp->pfnPrintf(pHlp,
- "Physical Address Width: %d bits\n"
- "Virtual Address Width: %d bits\n"
- "Guest Physical Address Width: %d bits\n",
- (uEAX >> 0) & 0xff,
- (uEAX >> 8) & 0xff,
- (uEAX >> 16) & 0xff);
- pHlp->pfnPrintf(pHlp,
- "Physical Core Count: %d\n",
- ((uECX >> 0) & 0xff) + 1);
+ if (iVerbosity)
+ {
+ uint32_t uEAX = pCurLeaf->uEax;
+ uint32_t uECX = pCurLeaf->uEcx;
+
+ pHlp->pfnPrintf(pHlp,
+ "Physical Address Width: %d bits\n"
+ "Virtual Address Width: %d bits\n"
+ "Guest Physical Address Width: %d bits\n",
+ (uEAX >> 0) & 0xff,
+ (uEAX >> 8) & 0xff,
+ (uEAX >> 16) & 0xff);
+ pHlp->pfnPrintf(pHlp,
+ "Physical Core Count: %d\n",
+ ((uECX >> 0) & 0xff) + 1);
+ }
}
pCurLeaf = pNextLeaf;
diff --git a/src/VBox/VMM/VMMR3/HM.cpp b/src/VBox/VMM/VMMR3/HM.cpp
index 021a369..a940578 100644
--- a/src/VBox/VMM/VMMR3/HM.cpp
+++ b/src/VBox/VMM/VMMR3/HM.cpp
@@ -451,6 +451,8 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM)
"|EnableUX"
"|EnableLargePages"
"|EnableVPID"
+ "|IBPBOnVMExit"
+ "|IBPBOnVMEntry"
"|TPRPatchingEnabled"
"|64bitEnabled"
"|VmxPleGap"
@@ -597,6 +599,16 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM)
rc = CFGMR3QueryBoolDef(pCfgHm, "UseVmxPreemptTimer", &pVM->hm.s.vmx.fUsePreemptTimer, true);
AssertLogRelRCReturn(rc, rc);
+ /** @cfgm{/HM/IBPBOnVMExit, bool}
+ * Costly paranoia setting. */
+ rc = CFGMR3QueryBoolDef(pCfgHm, "IBPBOnVMExit", &pVM->hm.s.fIbpbOnVmExit, false);
+ AssertLogRelRCReturn(rc, rc);
+
+ /** @cfgm{/HM/IBPBOnVMEntry, bool}
+ * Costly paranoia setting. */
+ rc = CFGMR3QueryBoolDef(pCfgHm, "IBPBOnVMEntry", &pVM->hm.s.fIbpbOnVmEntry, false);
+ AssertLogRelRCReturn(rc, rc);
+
/*
* Check if VT-x or AMD-v support according to the users wishes.
*/
@@ -1150,6 +1162,28 @@ static int hmR3InitFinalizeR0(PVM pVM)
}
/*
+ * Sync options.
+ */
+ /** @todo Move this out of of CPUMCTX and into some ring-0 only HM structure.
+ * That will require a little bit of work, of course. */
+ for (VMCPUID iCpu = 0; iCpu < pVM->cCpus; iCpu++)
+ {
+ PVMCPU pVCpu = &pVM->aCpus[iCpu];
+ PCPUMCTX pCpuCtx = CPUMQueryGuestCtxPtr(pVCpu);
+ pCpuCtx->fWorldSwitcher &= ~(CPUMCTX_WSF_IBPB_EXIT | CPUMCTX_WSF_IBPB_ENTRY);
+ if (pVM->cpum.ro.HostFeatures.fIbpb)
+ {
+ if (pVM->hm.s.fIbpbOnVmExit)
+ pCpuCtx->fWorldSwitcher |= CPUMCTX_WSF_IBPB_EXIT;
+ if (pVM->hm.s.fIbpbOnVmEntry)
+ pCpuCtx->fWorldSwitcher |= CPUMCTX_WSF_IBPB_ENTRY;
+ }
+ if (iCpu == 0)
+ LogRel(("HM: fWorldSwitcher=%#x (fIbpbOnVmExit=%d fIbpbOnVmEntry=%d)\n",
+ pCpuCtx->fWorldSwitcher, pVM->hm.s.fIbpbOnVmExit, pVM->hm.s.fIbpbOnVmEntry));
+ }
+
+ /*
* Do the vendor specific initialization .
* .
* Note! We disable release log buffering here since we're doing relatively .
diff --git a/src/VBox/VMM/VMMR3/PGMMap.cpp b/src/VBox/VMM/VMMR3/PGMMap.cpp
index a486933..c5f0e76 100644
--- a/src/VBox/VMM/VMMR3/PGMMap.cpp
+++ b/src/VBox/VMM/VMMR3/PGMMap.cpp
@@ -66,13 +66,11 @@ VMMR3DECL(int) PGMR3MapPT(PVM pVM, RTGCPTR GCPtr, uint32_t cb, uint32_t fFlags,
/*
* Validate input.
+ * Note! The lower limit (1 MB) matches how pgmR3PhysMMIOExCreate works.
*/
Assert(!fFlags || fFlags == PGMR3MAPPT_FLAGS_UNMAPPABLE);
- if (cb < _2M || cb > 64 * _1M)
- {
- AssertMsgFailed(("Serious? cb=%d\n", cb));
- return VERR_INVALID_PARAMETER;
- }
+ AssertMsgReturn(cb >= _1M && cb <= _64M, ("Seriously? cb=%d (%#x)\n", cb, cb), VERR_OUT_OF_RANGE);
+
cb = RT_ALIGN_32(cb, _4M);
RTGCPTR GCPtrLast = GCPtr + cb - 1;
diff --git a/src/VBox/VMM/VMMR3/PGMPhys.cpp b/src/VBox/VMM/VMMR3/PGMPhys.cpp
index 051eb6b..572002d 100644
--- a/src/VBox/VMM/VMMR3/PGMPhys.cpp
+++ b/src/VBox/VMM/VMMR3/PGMPhys.cpp
@@ -2596,7 +2596,7 @@ static int pgmR3PhysMMIOExCreate(PVM pVM, PPDMDEVINS pDevIns, uint32_t iSubDev,
const uint32_t cPagesTrackedByChunk = RT_MIN(cPagesLeft, cPagesPerChunk);
const size_t cbRange = RT_OFFSETOF(PGMREGMMIORANGE, RamRange.aPages[cPagesTrackedByChunk]);
PPGMREGMMIORANGE pNew = NULL;
- if ( cPagesTrackedByChunk > cPagesLeft /**< @todo r=klaus the first part of the condition is guaranteed false due to RT_MIN above */
+ if ( iChunk + 1 < cChunks
|| cbRange >= _1M)
{
/*
@@ -2642,7 +2642,7 @@ static int pgmR3PhysMMIOExCreate(PVM pVM, PPDMDEVINS pDevIns, uint32_t iSubDev,
pNew->RamRange.pSelfRC = NIL_RTRCPTR;
else
{
- RTGCPTR GCPtrChunkMap = pVM->pgm.s.GCPtrPrevRamRangeMapping - cbChunk;
+ RTGCPTR GCPtrChunkMap = pVM->pgm.s.GCPtrPrevRamRangeMapping - RT_ALIGN_Z(cbChunk, _4M);
RTGCPTR const GCPtrChunk = GCPtrChunkMap + PAGE_SIZE;
rc = PGMR3MapPT(pVM, GCPtrChunkMap, (uint32_t)cbChunk, 0 /*fFlags*/, pgmR3PhysMMIOExRangeRelocate, pNew, pszDesc);
if (RT_SUCCESS(rc))
@@ -2650,7 +2650,7 @@ static int pgmR3PhysMMIOExCreate(PVM pVM, PPDMDEVINS pDevIns, uint32_t iSubDev,
pVM->pgm.s.GCPtrPrevRamRangeMapping = GCPtrChunkMap;
RTGCPTR GCPtrPage = GCPtrChunk;
- for (uint32_t iPage = 0; iPage < cPagesTrackedByChunk && RT_SUCCESS(rc); iPage++, GCPtrPage += PAGE_SIZE)
+ for (uint32_t iPage = 0; iPage < cChunkPages && RT_SUCCESS(rc); iPage++, GCPtrPage += PAGE_SIZE)
rc = PGMMap(pVM, GCPtrPage, paChunkPages[iPage].Phys, PAGE_SIZE, 0);
}
if (RT_FAILURE(rc))
diff --git a/src/VBox/VMM/include/CPUMInternal.mac b/src/VBox/VMM/include/CPUMInternal.mac
index be7244d..3c5e20c 100644
--- a/src/VBox/VMM/include/CPUMInternal.mac
+++ b/src/VBox/VMM/include/CPUMInternal.mac
@@ -118,7 +118,7 @@ endstruc
struc CPUMCPU
;
; Guest context state
- ; (Identical to the .Hyper chunk below.)
+ ; (Identical to the .Hyper chunk below and to CPUMCTX in cpum.mac.)
;
.Guest resq 0
.Guest.eax resq 1
@@ -219,17 +219,17 @@ struc CPUMCPU
.Guest.msrSFMASK resb 8
.Guest.msrKERNELGSBASE resb 8
.Guest.uMsrPadding0 resb 8
+ alignb 8
.Guest.aXcr resq 2
.Guest.fXStateMask resq 1
.Guest.pXStateR0 RTR0PTR_RES 1
+ alignb 8
.Guest.pXStateR3 RTR3PTR_RES 1
+ alignb 8
.Guest.pXStateRC RTRCPTR_RES 1
.Guest.aoffXState resw 64
-%if HC_ARCH_BITS == 64
- .Guest.abPadding resb 4
-%else
- .Guest.abPadding resb 12
-%endif
+ .Guest.fWorldSwitcher resd 1
+ alignb 8
.Guest.hwvirt.svm.uMsrHSavePa resq 1
.Guest.hwvirt.svm.GCPhysVmcb resq 1
.Guest.hwvirt.svm.pVmcbR0 RTR0PTR_RES 1
@@ -505,17 +505,17 @@ struc CPUMCPU
.Hyper.msrSFMASK resb 8
.Hyper.msrKERNELGSBASE resb 8
.Hyper.uMsrPadding0 resb 8
+ alignb 8
.Hyper.aXcr resq 2
.Hyper.fXStateMask resq 1
.Hyper.pXStateR0 RTR0PTR_RES 1
+ alignb 8
.Hyper.pXStateR3 RTR3PTR_RES 1
+ alignb 8
.Hyper.pXStateRC RTRCPTR_RES 1
.Hyper.aoffXState resw 64
-%if HC_ARCH_BITS == 64
- .Hyper.abPadding resb 4
-%else
- .Hyper.abPadding resb 12
-%endif
+ .Hyper.fWorldSwitcher resd 1
+ alignb 8
.Hyper.hwvirt.svm.uMsrHSavePa resq 1
.Hyper.hwvirt.svm.GCPhysVmcb resq 1
.Hyper.hwvirt.svm.pVmcbR0 RTR0PTR_RES 1
diff --git a/src/VBox/VMM/include/HMInternal.h b/src/VBox/VMM/include/HMInternal.h
index 2f7c748..c5672e3 100644
--- a/src/VBox/VMM/include/HMInternal.h
+++ b/src/VBox/VMM/include/HMInternal.h
@@ -416,11 +416,12 @@ typedef struct HM
bool fVirtApicRegs;
/** Set if posted interrupt processing is enabled. */
bool fPostedIntrs;
- /** Alignment. */
- bool fAlignment0;
-
- /** Host kernel flags that HM might need to know (SUPKERNELFEATURES_XXX). */
- uint32_t fHostKernelFeatures;
+ /** Set if indirect branch prediction barrier on VM exit. */
+ bool fIbpbOnVmExit;
+ /** Set if indirect branch prediction barrier on VM entry. */
+ bool fIbpbOnVmEntry;
+ /** Explicit padding. */
+ bool afPadding[3];
/** Maximum ASID allowed. */
uint32_t uMaxAsid;
@@ -428,13 +429,15 @@ typedef struct HM
* This number is set much higher when RTThreadPreemptIsPending is reliable. */
uint32_t cMaxResumeLoops;
+ /** Host kernel flags that HM might need to know (SUPKERNELFEATURES_XXX). */
+ uint32_t fHostKernelFeatures;
+
+ /** Size of the guest patch memory block. */
+ uint32_t cbGuestPatchMem;
/** Guest allocated memory for patching purposes. */
RTGCPTR pGuestPatchMem;
/** Current free pointer inside the patch block. */
RTGCPTR pFreeGuestPatchMem;
- /** Size of the guest patch memory block. */
- uint32_t cbGuestPatchMem;
- uint32_t u32Alignment0;
#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS)
/** 32 to 64 bits switcher entrypoint. */
diff --git a/src/libs/xpcom18a4/python/Makefile.kmk b/src/libs/xpcom18a4/python/Makefile.kmk
index c42579e..7637c28 100644
--- a/src/libs/xpcom18a4/python/Makefile.kmk
+++ b/src/libs/xpcom18a4/python/Makefile.kmk
@@ -124,6 +124,10 @@ VBoxPythonBase_LIBS = \
$(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB) \
$(PATH_STAGE_BIN)/VBoxXPCOM$(VBOX_SUFF_DLL)
+# pymalloc abi variant.
+VBoxPythonBase_m_EXTENDS = VBoxPythonBase
+VBoxPythonBase_m_DEFS = MODULE_NAME_SUFFIX=m $(VBoxPythonBase_DEFS)
+
# 32-bit base.
VBoxPythonBase_x86_TEMPLATE = XPCOM-x86
VBoxPythonBase_x86_EXTENDS = VBoxPythonBase
@@ -132,6 +136,10 @@ VBoxPythonBase_x86_LIBS = \
$(PATH_STAGE_LIB)/VBoxCOM-x86$(VBOX_SUFF_LIB) \
$(PATH_STAGE_BIN)/VBoxXPCOM-x86$(VBOX_SUFF_DLL)
+# 32-bit pymalloc abi variant.
+VBoxPythonBase_x86_m_EXTENDS = VBoxPythonBase_x86
+VBoxPythonBase_x86_m_DEFS = MODULE_NAME_SUFFIX=_x86m $(VBoxPythonBase_DEFS)
+
ifdef VBOX_PYTHON26_INC
#
@@ -230,16 +238,17 @@ ifdef VBOX_PYTHON32M_INC
# Python 3.2 version with pymalloc
#
DLLS += VBoxPython3_2m
-VBoxPython3_2m_EXTENDS = VBoxPythonBase
+VBoxPython3_2m_EXTENDS = VBoxPythonBase_m
VBoxPython3_2m_EXTENDS_BY = appending
VBoxPython3_2m_TEMPLATE = XPCOM
VBoxPython3_2m_INCS = $(VBOX_PYTHON32M_INC)
VBoxPython3_2m_LIBS = $(VBOX_PYTHON32M_LIB)
+VBoxPython3_2m_DEFS = MODULE_NAME_SUFFIX
ifdef VBOX_WITH_32_ON_64_MAIN_API
ifdef VBOX_PYTHON32M_LIB_X86
DLLS += VBoxPython3_2m_x86
-VBoxPython3_2m_x86_EXTENDS = VBoxPythonBase_x86
+VBoxPython3_2m_x86_EXTENDS = VBoxPythonBase_x86_m
VBoxPython3_2m_x86_EXTENDS_BY = appending
VBoxPython3_2m_x86_TEMPLATE = XPCOM
VBoxPython3_2m_x86_INCS = $(VBOX_PYTHON32M_INC)
@@ -276,7 +285,7 @@ ifdef VBOX_PYTHON33M_INC
# Python 3.3 version with pymalloc
#
DLLS += VBoxPython3_3m
-VBoxPython3_3m_EXTENDS = VBoxPythonBase
+VBoxPython3_3m_EXTENDS = VBoxPythonBase_m
VBoxPython3_3m_EXTENDS_BY = appending
VBoxPython3_3m_TEMPLATE = XPCOM
VBoxPython3_3m_INCS = $(VBOX_PYTHON33M_INC)
@@ -285,7 +294,7 @@ VBoxPython3_3m_LIBS = $(VBOX_PYTHON33M_LIB)
ifdef VBOX_WITH_32_ON_64_MAIN_API
ifdef VBOX_PYTHON33M_LIB_X86
DLLS += VBoxPython3_3m_x86
-VBoxPython3_3m_x86_EXTENDS = VBoxPythonBase_x86
+VBoxPython3_3m_x86_EXTENDS = VBoxPythonBase_x86_m
VBoxPython3_3m_x86_EXTENDS_BY = appending
VBoxPython3_3m_x86_TEMPLATE = XPCOM
VBoxPython3_3m_x86_INCS = $(VBOX_PYTHON33M_INC)
@@ -322,7 +331,7 @@ ifdef VBOX_PYTHON34M_INC
# Python 3.4 version with pymalloc
#
DLLS += VBoxPython3_4m
-VBoxPython3_4m_EXTENDS = VBoxPythonBase
+VBoxPython3_4m_EXTENDS = VBoxPythonBase_m
VBoxPython3_4m_EXTENDS_BY = appending
VBoxPython3_4m_TEMPLATE = XPCOM
VBoxPython3_4m_INCS = $(VBOX_PYTHON34M_INC)
@@ -331,7 +340,7 @@ VBoxPython3_4m_LIBS = $(VBOX_PYTHON34M_LIB)
ifdef VBOX_WITH_32_ON_64_MAIN_API
ifdef VBOX_PYTHON34M_LIB_X86
DLLS += VBoxPython3_4m_x86
-VBoxPython3_4m_x86_EXTENDS = VBoxPythonBase_x86
+VBoxPython3_4m_x86_EXTENDS = VBoxPythonBase_x86_m
VBoxPython3_4m_x86_EXTENDS_BY = appending
VBoxPython3_4m_x86_TEMPLATE = XPCOM
VBoxPython3_4m_x86_INCS = $(VBOX_PYTHON34M_INC)
@@ -368,7 +377,7 @@ ifdef VBOX_PYTHON35M_INC
# Python 3.5 version with pymalloc
#
DLLS += VBoxPython3_5m
-VBoxPython3_5m_EXTENDS = VBoxPythonBase
+VBoxPython3_5m_EXTENDS = VBoxPythonBase_m
VBoxPython3_5m_EXTENDS_BY = appending
VBoxPython3_5m_TEMPLATE = XPCOM
VBoxPython3_5m_INCS = $(VBOX_PYTHON35M_INC)
@@ -377,7 +386,7 @@ VBoxPython3_5m_LIBS = $(VBOX_PYTHON35M_LIB)
ifdef VBOX_WITH_32_ON_64_MAIN_API
ifdef VBOX_PYTHON35M_LIB_X86
DLLS += VBoxPython3_5m_x86
-VBoxPython3_5m_x86_EXTENDS = VBoxPythonBase_x86
+VBoxPython3_5m_x86_EXTENDS = VBoxPythonBase_x86_m
VBoxPython3_5m_x86_EXTENDS_BY = appending
VBoxPython3_5m_x86_TEMPLATE = XPCOM
VBoxPython3_5m_x86_INCS = $(VBOX_PYTHON35M_INC)
@@ -414,7 +423,7 @@ ifdef VBOX_PYTHON36M_INC
# Python 3.6 version with pymalloc
#
DLLS += VBoxPython3_6m
-VBoxPython3_6m_EXTENDS = VBoxPythonBase
+VBoxPython3_6m_EXTENDS = VBoxPythonBase_m
VBoxPython3_6m_EXTENDS_BY = appending
VBoxPython3_6m_TEMPLATE = XPCOM
VBoxPython3_6m_INCS = $(VBOX_PYTHON36M_INC)
@@ -423,7 +432,7 @@ VBoxPython3_6m_LIBS = $(VBOX_PYTHON36M_LIB)
ifdef VBOX_WITH_32_ON_64_MAIN_API
ifdef VBOX_PYTHON36M_LIB_X86
DLLS += VBoxPython3_6m_x86
-VBoxPython3_6m_x86_EXTENDS = VBoxPythonBase_x86
+VBoxPython3_6m_x86_EXTENDS = VBoxPythonBase_x86_m
VBoxPython3_6m_x86_EXTENDS_BY = appending
VBoxPython3_6m_x86_TEMPLATE = XPCOM
VBoxPython3_6m_x86_INCS = $(VBOX_PYTHON36M_INC)
@@ -460,7 +469,7 @@ ifdef VBOX_PYTHON37M_INC
# Python 3.7 version with pymalloc
#
DLLS += VBoxPython3_7m
-VBoxPython3_7m_EXTENDS = VBoxPythonBase
+VBoxPython3_7m_EXTENDS = VBoxPythonBase_m
VBoxPython3_7m_EXTENDS_BY = appending
VBoxPython3_7m_TEMPLATE = XPCOM
VBoxPython3_7m_INCS = $(VBOX_PYTHON37M_INC)
@@ -469,9 +478,9 @@ VBoxPython3_7m_LIBS = $(VBOX_PYTHON37M_LIB)
ifdef VBOX_WITH_32_ON_64_MAIN_API
ifdef VBOX_PYTHON37M_LIB_X86
DLLS += VBoxPython3_7m_x86
-VBoxPython3_7m_x86_EXTENDS = VBoxPythonBase_x86
+VBoxPython3_7m_x86_EXTENDS = VBoxPythonBase_x86_m
VBoxPython3_7m_x86_EXTENDS_BY = appending
-VBoxPython3_7m_x86_TEMPLATE = XPCOM
+VBoxPython3_7m_x86_TEMPLATE_ = XPCOM
VBoxPython3_7m_x86_INCS = $(VBOX_PYTHON37M_INC)
VBoxPython3_7m_x86_LIBS = $(VBOX_PYTHON37M_LIB_X86)
endif
diff --git a/src/libs/xpcom18a4/python/src/VariantUtils.cpp b/src/libs/xpcom18a4/python/src/VariantUtils.cpp
index 91ff177..125b0db 100644
--- a/src/libs/xpcom18a4/python/src/VariantUtils.cpp
+++ b/src/libs/xpcom18a4/python/src/VariantUtils.cpp
@@ -96,13 +96,13 @@ PyUnicode_AsPRUnichar(PyObject *obj, PRUnichar **dest_out, PRUint32 *size_out)
size = (PyString_GET_SIZE(s) - 2) / sizeof(PRUnichar);
src = PyString_AS_STRING(s) + 2;
#else
- if (!PyBytes_Check(obj))
+ if (!PyBytes_Check(s))
{
PyErr_SetString(PyExc_TypeError, "internal error in PyXPCOM, parameter must be a bytes object");
return -1;
}
- size = (PyBytes_GET_SIZE(obj) - 2) / sizeof(PRUnichar);
- src = PyBytes_AS_STRING(obj) + 2;
+ size = (PyBytes_GET_SIZE(s) - 2) / sizeof(PRUnichar);
+ src = PyBytes_AS_STRING(s) + 2;
#endif
dest = (PRUnichar *)nsMemory::Alloc(sizeof(PRUnichar) * (size + 1));
if (!dest) {
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-virtualbox/virtualbox.git
More information about the Pkg-virtualbox-commits
mailing list