Wine-devel
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2021
- 81 participants
- 772 discussions
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/mfplay/player.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c
index 6f8d4942a0b..12ea653b97d 100644
--- a/dlls/mfplay/player.c
+++ b/dlls/mfplay/player.c
@@ -53,6 +53,12 @@ static void platform_shutdown(void)
MFShutdown();
}
+static inline const char *debugstr_normalized_rect(const MFVideoNormalizedRect *rect)
+{
+ if (!rect) return "(null)";
+ return wine_dbg_sprintf("(%.8e,%.8e)-(%.8e,%.8e)", rect->left, rect->top, rect->right, rect->bottom);
+}
+
struct media_item
{
IMFPMediaItem IMFPMediaItem_iface;
@@ -1437,7 +1443,7 @@ static HRESULT WINAPI media_player_SetVideoSourceRect(IMFPMediaPlayer *iface,
RECT dst_rect;
HRESULT hr;
- TRACE("%p, %p.\n", iface, rect);
+ TRACE("%p, %s.\n", iface, debugstr_normalized_rect(rect));
if (!GetClientRect(player->output_window, &dst_rect))
hr = HRESULT_FROM_WIN32(GetLastError());
--
2.33.0
1
0
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
Zooming should be handled by the mixer.
dlls/evr/presenter.c | 17 +----------------
1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c
index bf0f89df0eb..b8b18638185 100644
--- a/dlls/evr/presenter.c
+++ b/dlls/evr/presenter.c
@@ -460,21 +460,6 @@ static HRESULT video_presenter_get_sample_surface(IMFSample *sample, IDirect3DSu
return hr;
}
-static void scale_rect(RECT *rect, unsigned int width, unsigned int height, const MFVideoNormalizedRect *scale)
-{
- if (rect->left == 0.0f && rect->top == 0.0f && rect->right == 1.0f && rect->bottom == 1.0f)
- {
- SetRect(rect, 0, 0, width, height);
- }
- else
- {
- rect->left = width * scale->left;
- rect->right = width * scale->right;
- rect->top = height * scale->top;
- rect->bottom = height * scale->bottom;
- }
-}
-
static void video_presenter_sample_present(struct video_presenter *presenter, IMFSample *sample)
{
IDirect3DSurface9 *surface, *backbuffer;
@@ -503,7 +488,7 @@ static void video_presenter_sample_present(struct video_presenter *presenter, IM
IDirect3DDevice9_StretchRect(device, surface, NULL, backbuffer, NULL, D3DTEXF_POINT);
IDirect3DSurface9_GetDesc(surface, &desc);
- scale_rect(&src, desc.Width, desc.Height, &presenter->src_rect);
+ SetRect(&src, 0, 0, desc.Width, desc.Height);
IDirect3DSurface9_GetDesc(backbuffer, &desc);
SetRect(&dst, 0, 0, desc.Width, desc.Height);
--
2.33.0
1
1
26 Oct '21
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43546
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48377
Signed-off-by: Piotr Caban <piotr(a)codeweavers.com>
---
dlls/vcomp/main.c | 52 ++++++++++++
dlls/vcomp/tests/vcomp.c | 154 ++++++++++++++++++++++++++++++++++++
dlls/vcomp/vcomp.spec | 2 +-
dlls/vcomp100/vcomp100.spec | 2 +-
dlls/vcomp110/vcomp110.spec | 2 +-
dlls/vcomp120/vcomp120.spec | 2 +-
dlls/vcomp140/vcomp140.spec | 2 +-
dlls/vcomp90/vcomp90.spec | 2 +-
8 files changed, 212 insertions(+), 6 deletions(-)
1
0
26 Oct '21
Signed-off-by: Piotr Caban <piotr(a)codeweavers.com>
---
dlls/vcomp/main.c | 73 +++++++++++
dlls/vcomp/tests/vcomp.c | 254 ++++++++++++++++++++++++++++++++++++
dlls/vcomp/vcomp.spec | 2 +-
dlls/vcomp100/vcomp100.spec | 2 +-
dlls/vcomp110/vcomp110.spec | 2 +-
dlls/vcomp120/vcomp120.spec | 2 +-
dlls/vcomp140/vcomp140.spec | 2 +-
dlls/vcomp90/vcomp90.spec | 2 +-
8 files changed, 333 insertions(+), 6 deletions(-)
1
0
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/winepulse.drv/pulse.c | 380 ++++++++++++++++++-------------------
1 file changed, 190 insertions(+), 190 deletions(-)
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c
index 98b4a1ec964..590122cc7b1 100644
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -270,6 +270,196 @@ static void pulse_started_callback(pa_stream *s, void *userdata)
TRACE("%p: (Re)started playing\n", userdata);
}
+static void silence_buffer(pa_sample_format_t format, BYTE *buffer, UINT32 bytes)
+{
+ memset(buffer, format == PA_SAMPLE_U8 ? 0x80 : 0, bytes);
+}
+
+static int write_buffer(const struct pulse_stream *stream, BYTE *buffer, UINT32 bytes)
+{
+ const float *vol = stream->vol;
+ UINT32 i, channels, mute = 0;
+ BOOL adjust = FALSE;
+ BYTE *end;
+
+ if (!bytes) return 0;
+
+ /* Adjust the buffer based on the volume for each channel */
+ channels = stream->ss.channels;
+ for (i = 0; i < channels; i++)
+ {
+ adjust |= vol[i] != 1.0f;
+ if (vol[i] == 0.0f)
+ mute++;
+ }
+ if (mute == channels)
+ {
+ silence_buffer(stream->ss.format, buffer, bytes);
+ goto write;
+ }
+ if (!adjust) goto write;
+
+ end = buffer + bytes;
+ switch (stream->ss.format)
+ {
+#ifndef WORDS_BIGENDIAN
+#define PROCESS_BUFFER(type) do \
+{ \
+ type *p = (type*)buffer; \
+ do \
+ { \
+ for (i = 0; i < channels; i++) \
+ p[i] = p[i] * vol[i]; \
+ p += i; \
+ } while ((BYTE*)p != end); \
+} while (0)
+ case PA_SAMPLE_S16LE:
+ PROCESS_BUFFER(INT16);
+ break;
+ case PA_SAMPLE_S32LE:
+ PROCESS_BUFFER(INT32);
+ break;
+ case PA_SAMPLE_FLOAT32LE:
+ PROCESS_BUFFER(float);
+ break;
+#undef PROCESS_BUFFER
+ case PA_SAMPLE_S24_32LE:
+ {
+ UINT32 *p = (UINT32*)buffer;
+ do
+ {
+ for (i = 0; i < channels; i++)
+ {
+ p[i] = (INT32)((INT32)(p[i] << 8) * vol[i]);
+ p[i] >>= 8;
+ }
+ p += i;
+ } while ((BYTE*)p != end);
+ break;
+ }
+ case PA_SAMPLE_S24LE:
+ {
+ /* do it 12 bytes at a time until it is no longer possible */
+ UINT32 *q = (UINT32*)buffer;
+ BYTE *p;
+
+ i = 0;
+ while (end - (BYTE*)q >= 12)
+ {
+ UINT32 v[4], k;
+ v[0] = q[0] << 8;
+ v[1] = q[1] << 16 | (q[0] >> 16 & ~0xff);
+ v[2] = q[2] << 24 | (q[1] >> 8 & ~0xff);
+ v[3] = q[2] & ~0xff;
+ for (k = 0; k < 4; k++)
+ {
+ v[k] = (INT32)((INT32)v[k] * vol[i]);
+ if (++i == channels) i = 0;
+ }
+ *q++ = v[0] >> 8 | (v[1] & ~0xff) << 16;
+ *q++ = v[1] >> 16 | (v[2] & ~0xff) << 8;
+ *q++ = v[2] >> 24 | (v[3] & ~0xff);
+ }
+ p = (BYTE*)q;
+ while (p != end)
+ {
+ UINT32 v = (INT32)((INT32)(p[0] << 8 | p[1] << 16 | p[2] << 24) * vol[i]);
+ *p++ = v >> 8 & 0xff;
+ *p++ = v >> 16 & 0xff;
+ *p++ = v >> 24;
+ if (++i == channels) i = 0;
+ }
+ break;
+ }
+#endif
+ case PA_SAMPLE_U8:
+ {
+ UINT8 *p = (UINT8*)buffer;
+ do
+ {
+ for (i = 0; i < channels; i++)
+ p[i] = (int)((p[i] - 128) * vol[i]) + 128;
+ p += i;
+ } while ((BYTE*)p != end);
+ break;
+ }
+ case PA_SAMPLE_ALAW:
+ {
+ UINT8 *p = (UINT8*)buffer;
+ do
+ {
+ for (i = 0; i < channels; i++)
+ p[i] = mult_alaw_sample(p[i], vol[i]);
+ p += i;
+ } while ((BYTE*)p != end);
+ break;
+ }
+ case PA_SAMPLE_ULAW:
+ {
+ UINT8 *p = (UINT8*)buffer;
+ do
+ {
+ for (i = 0; i < channels; i++)
+ p[i] = mult_ulaw_sample(p[i], vol[i]);
+ p += i;
+ } while ((BYTE*)p != end);
+ break;
+ }
+ default:
+ TRACE("Unhandled format %i, not adjusting volume.\n", stream->ss.format);
+ break;
+ }
+
+write:
+ return pa_stream_write(stream->stream, buffer, bytes, NULL, 0, PA_SEEK_RELATIVE);
+}
+
+static void pulse_write(struct pulse_stream *stream)
+{
+ /* write as much data to PA as we can */
+ UINT32 to_write;
+ BYTE *buf = stream->local_buffer + stream->pa_offs_bytes;
+ UINT32 bytes = pa_stream_writable_size(stream->stream);
+
+ if (stream->just_underran)
+ {
+ /* prebuffer with silence if needed */
+ if(stream->pa_held_bytes < bytes){
+ to_write = bytes - stream->pa_held_bytes;
+ TRACE("prebuffering %u frames of silence\n",
+ (int)(to_write / pa_frame_size(&stream->ss)));
+ buf = calloc(1, to_write);
+ pa_stream_write(stream->stream, buf, to_write, NULL, 0, PA_SEEK_RELATIVE);
+ free(buf);
+ }
+
+ stream->just_underran = FALSE;
+ }
+
+ buf = stream->local_buffer + stream->pa_offs_bytes;
+ TRACE("held: %lu, avail: %u\n", stream->pa_held_bytes, bytes);
+ bytes = min(stream->pa_held_bytes, bytes);
+
+ if (stream->pa_offs_bytes + bytes > stream->real_bufsize_bytes)
+ {
+ to_write = stream->real_bufsize_bytes - stream->pa_offs_bytes;
+ TRACE("writing small chunk of %u bytes\n", to_write);
+ write_buffer(stream, buf, to_write);
+ stream->pa_held_bytes -= to_write;
+ to_write = bytes - to_write;
+ stream->pa_offs_bytes = 0;
+ buf = stream->local_buffer;
+ }
+ else
+ to_write = bytes;
+
+ TRACE("writing main chunk of %u bytes\n", to_write);
+ write_buffer(stream, buf, to_write);
+ stream->pa_offs_bytes += to_write;
+ stream->pa_offs_bytes %= stream->real_bufsize_bytes;
+ stream->pa_held_bytes -= to_write;
+}
+
static void pulse_op_cb(pa_stream *s, int success, void *user)
{
TRACE("Success: %i\n", success);
@@ -277,11 +467,6 @@ static void pulse_op_cb(pa_stream *s, int success, void *user)
pulse_broadcast();
}
-static void silence_buffer(pa_sample_format_t format, BYTE *buffer, UINT32 bytes)
-{
- memset(buffer, format == PA_SAMPLE_U8 ? 0x80 : 0, bytes);
-}
-
static BOOL pulse_stream_valid(struct pulse_stream *stream)
{
return pa_stream_get_state(stream->stream) == PA_STREAM_READY;
@@ -958,191 +1143,6 @@ static NTSTATUS pulse_release_stream(void *args)
return STATUS_SUCCESS;
}
-static int write_buffer(const struct pulse_stream *stream, BYTE *buffer, UINT32 bytes)
-{
- const float *vol = stream->vol;
- UINT32 i, channels, mute = 0;
- BOOL adjust = FALSE;
- BYTE *end;
-
- if (!bytes) return 0;
-
- /* Adjust the buffer based on the volume for each channel */
- channels = stream->ss.channels;
- for (i = 0; i < channels; i++)
- {
- adjust |= vol[i] != 1.0f;
- if (vol[i] == 0.0f)
- mute++;
- }
- if (mute == channels)
- {
- silence_buffer(stream->ss.format, buffer, bytes);
- goto write;
- }
- if (!adjust) goto write;
-
- end = buffer + bytes;
- switch (stream->ss.format)
- {
-#ifndef WORDS_BIGENDIAN
-#define PROCESS_BUFFER(type) do \
-{ \
- type *p = (type*)buffer; \
- do \
- { \
- for (i = 0; i < channels; i++) \
- p[i] = p[i] * vol[i]; \
- p += i; \
- } while ((BYTE*)p != end); \
-} while (0)
- case PA_SAMPLE_S16LE:
- PROCESS_BUFFER(INT16);
- break;
- case PA_SAMPLE_S32LE:
- PROCESS_BUFFER(INT32);
- break;
- case PA_SAMPLE_FLOAT32LE:
- PROCESS_BUFFER(float);
- break;
-#undef PROCESS_BUFFER
- case PA_SAMPLE_S24_32LE:
- {
- UINT32 *p = (UINT32*)buffer;
- do
- {
- for (i = 0; i < channels; i++)
- {
- p[i] = (INT32)((INT32)(p[i] << 8) * vol[i]);
- p[i] >>= 8;
- }
- p += i;
- } while ((BYTE*)p != end);
- break;
- }
- case PA_SAMPLE_S24LE:
- {
- /* do it 12 bytes at a time until it is no longer possible */
- UINT32 *q = (UINT32*)buffer;
- BYTE *p;
-
- i = 0;
- while (end - (BYTE*)q >= 12)
- {
- UINT32 v[4], k;
- v[0] = q[0] << 8;
- v[1] = q[1] << 16 | (q[0] >> 16 & ~0xff);
- v[2] = q[2] << 24 | (q[1] >> 8 & ~0xff);
- v[3] = q[2] & ~0xff;
- for (k = 0; k < 4; k++)
- {
- v[k] = (INT32)((INT32)v[k] * vol[i]);
- if (++i == channels) i = 0;
- }
- *q++ = v[0] >> 8 | (v[1] & ~0xff) << 16;
- *q++ = v[1] >> 16 | (v[2] & ~0xff) << 8;
- *q++ = v[2] >> 24 | (v[3] & ~0xff);
- }
- p = (BYTE*)q;
- while (p != end)
- {
- UINT32 v = (INT32)((INT32)(p[0] << 8 | p[1] << 16 | p[2] << 24) * vol[i]);
- *p++ = v >> 8 & 0xff;
- *p++ = v >> 16 & 0xff;
- *p++ = v >> 24;
- if (++i == channels) i = 0;
- }
- break;
- }
-#endif
- case PA_SAMPLE_U8:
- {
- UINT8 *p = (UINT8*)buffer;
- do
- {
- for (i = 0; i < channels; i++)
- p[i] = (int)((p[i] - 128) * vol[i]) + 128;
- p += i;
- } while ((BYTE*)p != end);
- break;
- }
- case PA_SAMPLE_ALAW:
- {
- UINT8 *p = (UINT8*)buffer;
- do
- {
- for (i = 0; i < channels; i++)
- p[i] = mult_alaw_sample(p[i], vol[i]);
- p += i;
- } while ((BYTE*)p != end);
- break;
- }
- case PA_SAMPLE_ULAW:
- {
- UINT8 *p = (UINT8*)buffer;
- do
- {
- for (i = 0; i < channels; i++)
- p[i] = mult_ulaw_sample(p[i], vol[i]);
- p += i;
- } while ((BYTE*)p != end);
- break;
- }
- default:
- TRACE("Unhandled format %i, not adjusting volume.\n", stream->ss.format);
- break;
- }
-
-write:
- return pa_stream_write(stream->stream, buffer, bytes, NULL, 0, PA_SEEK_RELATIVE);
-}
-
-static void pulse_write(struct pulse_stream *stream)
-{
- /* write as much data to PA as we can */
- UINT32 to_write;
- BYTE *buf = stream->local_buffer + stream->pa_offs_bytes;
- UINT32 bytes = pa_stream_writable_size(stream->stream);
-
- if (stream->just_underran)
- {
- /* prebuffer with silence if needed */
- if(stream->pa_held_bytes < bytes){
- to_write = bytes - stream->pa_held_bytes;
- TRACE("prebuffering %u frames of silence\n",
- (int)(to_write / pa_frame_size(&stream->ss)));
- buf = calloc(1, to_write);
- pa_stream_write(stream->stream, buf, to_write, NULL, 0, PA_SEEK_RELATIVE);
- free(buf);
- }
-
- stream->just_underran = FALSE;
- }
-
- buf = stream->local_buffer + stream->pa_offs_bytes;
- TRACE("held: %lu, avail: %u\n", stream->pa_held_bytes, bytes);
- bytes = min(stream->pa_held_bytes, bytes);
-
- if (stream->pa_offs_bytes + bytes > stream->real_bufsize_bytes)
- {
- to_write = stream->real_bufsize_bytes - stream->pa_offs_bytes;
- TRACE("writing small chunk of %u bytes\n", to_write);
- write_buffer(stream, buf, to_write);
- stream->pa_held_bytes -= to_write;
- to_write = bytes - to_write;
- stream->pa_offs_bytes = 0;
- buf = stream->local_buffer;
- }
- else
- to_write = bytes;
-
- TRACE("writing main chunk of %u bytes\n", to_write);
- write_buffer(stream, buf, to_write);
- stream->pa_offs_bytes += to_write;
- stream->pa_offs_bytes %= stream->real_bufsize_bytes;
- stream->pa_held_bytes -= to_write;
-}
-
static void pulse_read(struct pulse_stream *stream)
{
size_t bytes = pa_stream_readable_size(stream->stream);
--
2.33.0
1
2
Signed-off-by: Chilung Chan <eason066(a)gmail.com>
---
v3: Applied suggestions from review for v2.
po/zh_TW.po | 1288 ++++++++++++++++++++++++---------------------------
1 file changed, 603 insertions(+), 685 deletions(-)
diff --git a/po/zh_TW.po b/po/zh_TW.po
index a8312e8bcec..cd87da7bbf1 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -5,9 +5,9 @@ msgstr ""
"Project-Id-Version: Wine\n"
"Report-Msgid-Bugs-To: https://bugs.winehq.org\n"
"POT-Creation-Date: N/A\n"
-"PO-Revision-Date: 2012-07-28 00:06+0800\n"
-"Last-Translator: Wei-Lun Chao <bluebat(a)member.fsf.org>\n"
-"Language-Team: Chinese (traditional) <zh-l10n(a)linux.org.tw>\n"
+"PO-Revision-Date: 2021-10-23 18:45+0800\n"
+"Last-Translator: Chilung Chan <eason066(a)gmail.com>\n"
+"Language-Team: Chinese (Taiwan)\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,36 +20,30 @@ msgid "Security"
msgstr "安全性"
#: dlls/aclui/aclui.rc:32
-#, fuzzy
-#| msgid "&User name:"
msgid "&Group or user names:"
-msgstr "使用者名稱(&U):"
+msgstr "群組或使用者名稱(&G):"
#: dlls/aclui/aclui.rc:38
-#, fuzzy
-#| msgid "Yellow"
msgid "Allow"
-msgstr "黃色"
+msgstr "允許"
#: dlls/aclui/aclui.rc:39
msgid "Deny"
-msgstr ""
+msgstr "拒絕"
#: dlls/aclui/aclui.rc:47
-#, fuzzy
-#| msgid "Access denied.\n"
msgid "Permissions for %1"
-msgstr "存取被拒。\n"
+msgstr "%1 的權限"
#: dlls/appwiz.cpl/appwiz.rc:58
msgid "Install/Uninstall"
-msgstr "安裝/移除"
+msgstr "安裝/解除安裝"
#: dlls/appwiz.cpl/appwiz.rc:61
msgid ""
"To install a new program from a floppy disk, CD-ROM drive, or your hard "
"drive, click Install."
-msgstr "要從軟碟、光碟或硬碟安裝新程式,請按「安裝」。"
+msgstr "要從軟碟、光碟或硬碟安裝新程式,請按 [安裝]。"
#: dlls/appwiz.cpl/appwiz.rc:62
msgid "&Install..."
@@ -61,8 +55,8 @@ msgid ""
"to modify its installed components, select it from the list and click Modify/"
"Remove."
msgstr ""
-"下列軟體可以自動解除安裝。 從清單中選取它並按下「新增/移除」,可以移除程式或"
-"者調整已安裝元件。"
+"下列軟體可以自動解除安裝。要移除程式或者調整已安裝元件,請從清單中選取程式"
+"並按下 [修改/移除]。"
#: dlls/appwiz.cpl/appwiz.rc:67
msgid "&Support Information"
@@ -123,39 +117,39 @@ msgstr "確定"
#: dlls/appwiz.cpl/appwiz.rc:79
msgid "The following information can be used to get technical support for %s:"
-msgstr "%s 技術支援資訊:"
+msgstr "以下資訊可協助取得 %s 的技術支援:"
#: dlls/appwiz.cpl/appwiz.rc:80
msgid "Publisher:"
-msgstr "生產商:"
+msgstr "發行者:"
#: dlls/appwiz.cpl/appwiz.rc:81 programs/winefile/winefile.rc:165
msgid "Version:"
-msgstr "版本:"
+msgstr "版本:"
#: dlls/appwiz.cpl/appwiz.rc:82
msgid "Contact:"
-msgstr "聯絡人:"
+msgstr "聯絡人:"
#: dlls/appwiz.cpl/appwiz.rc:83
msgid "Support Information:"
-msgstr "支援資訊:"
+msgstr "支援資訊:"
#: dlls/appwiz.cpl/appwiz.rc:84
msgid "Support Telephone:"
-msgstr "支援電話:"
+msgstr "支援電話:"
#: dlls/appwiz.cpl/appwiz.rc:85
msgid "Readme:"
-msgstr "產品說明:"
+msgstr "產品說明:"
#: dlls/appwiz.cpl/appwiz.rc:86
msgid "Product Updates:"
-msgstr "產品更新:"
+msgstr "產品更新:"
#: dlls/appwiz.cpl/appwiz.rc:87
msgid "Comments:"
-msgstr "備註:"
+msgstr "備註:"
#: dlls/appwiz.cpl/appwiz.rc:100
msgid "Wine Gecko Installer"
@@ -174,8 +168,8 @@ msgstr ""
"Wine 需要安裝 Gecko 套件才能正確顯示嵌在應用程式中的 HTML 網頁。Wine 可以自動"
"幫您下載並安裝 Gecko。\n"
"\n"
-"備註:建議您使用發行版所附的套件。詳情請見 <a href=\"https://wiki.winehq.org/"
-"Gecko\">https://wiki.winehq.org/Gecko</a>"
+"備註: 建議您使用發行版所附的套件。詳情請見 <a href=\"https://wiki.winehq.org/"
+"Gecko\">https://wiki.winehq.org/Gecko</a>。"
#: dlls/appwiz.cpl/appwiz.rc:109 dlls/appwiz.cpl/appwiz.rc:124
msgid "&Install"
@@ -241,8 +235,8 @@ msgstr ""
"Wine 需要安裝 wine-mono 套件才能正確執行 .NET 應用程式。Wine 可以自動幫您下載"
"並安裝它。\n"
"\n"
-"備註:建議您使用發行版所附的套件。詳情請見 <a href=\"https://wiki.winehq.org/"
-"Mono\">https://wiki.winehq.org/Mono</a>"
+"備註: 建議您使用發行版所附的套件。詳情請見 <a href=\"https://wiki.winehq.org/"
+"Mono\">https://wiki.winehq.org/Mono</a>。"
#: dlls/appwiz.cpl/appwiz.rc:31
msgid "Add/Remove Programs"
@@ -263,7 +257,7 @@ msgstr "應用程式"
msgid ""
"Unable to execute the uninstaller, '%s'. Do you want to remove the uninstall "
"entry for this program from the registry?"
-msgstr "無法執行移除程式 %s。 您想將這個移除程式從註冊表中刪除嗎?"
+msgstr "無法執行移除程式「%s」。您想將這個移除程式從註冊表中移除嗎?"
#: dlls/appwiz.cpl/appwiz.rc:36
msgid "Not specified"
@@ -277,7 +271,7 @@ msgstr "名稱"
#: dlls/appwiz.cpl/appwiz.rc:39
msgid "Publisher"
-msgstr "生產商"
+msgstr "發行者"
#: dlls/appwiz.cpl/appwiz.rc:40 dlls/cryptui/cryptui.rc:54
msgid "Version"
@@ -323,7 +317,7 @@ msgstr "壓縮選項"
#: dlls/avifil32/avifil32.rc:45
msgid "&Choose a stream:"
-msgstr "選擇來源(&C):"
+msgstr "選擇來源(&C):"
#: dlls/avifil32/avifil32.rc:48 programs/wordpad/wordpad.rc:76
msgid "&Options..."
@@ -331,7 +325,7 @@ msgstr "選項(&O)..."
#: dlls/avifil32/avifil32.rc:49
msgid "&Interleave every"
-msgstr "交錯(&I)"
+msgstr "交錯(&I): 每隔"
#: dlls/avifil32/avifil32.rc:51 dlls/msvfw32/msvfw32.rc:51
msgid "frames"
@@ -339,11 +333,11 @@ msgstr "影格數"
#: dlls/avifil32/avifil32.rc:52
msgid "Current format:"
-msgstr "目前格式:"
+msgstr "目前格式:"
#: dlls/avifil32/avifil32.rc:30
msgid "Waveform: %s"
-msgstr "波形:%s"
+msgstr "波形: %s"
#: dlls/avifil32/avifil32.rc:31
msgid "Waveform"
@@ -363,7 +357,7 @@ msgstr "音訊"
#: dlls/avifil32/avifil32.rc:36
msgid "Wine AVI-default-filehandler"
-msgstr "Wine AVI-預設處理器"
+msgstr "Wine AVI 預設處理器"
#: dlls/avifil32/avifil32.rc:37
msgid "uncompressed"
@@ -375,29 +369,27 @@ msgstr "正在取消..."
#: dlls/browseui/browseui.rc:29
msgid "%1!u! %2 remaining"
-msgstr ""
+msgstr "剩餘 %1!u! %2"
#: dlls/browseui/browseui.rc:30
msgid "%1!u! %2 and %3!u! %4 remaining"
-msgstr ""
+msgstr "剩餘 %1!u! %2 %3!u! %4"
#: dlls/browseui/browseui.rc:31
-#, fuzzy
-#| msgid "&Seconds"
msgid "seconds"
-msgstr "秒(&S)"
+msgstr "秒"
#: dlls/browseui/browseui.rc:32
msgid "minutes"
-msgstr ""
+msgstr "分"
#: dlls/browseui/browseui.rc:33
msgid "hours"
-msgstr ""
+msgstr "小時"
#: dlls/comctl32/comctl32.rc:68 programs/winefile/winefile.rc:156
msgid "Properties for %s"
-msgstr "屬性 %s"
+msgstr "%s 的內容"
#: dlls/comctl32/comctl32.rc:73 dlls/comdlg32/comdlg32.rc:265
msgid "&Apply"
@@ -438,7 +430,7 @@ msgstr "關閉(&C)"
#: dlls/comctl32/comctl32.rc:101
msgid "R&eset"
-msgstr "重置(&e)"
+msgstr "重置(&E)"
#: dlls/comctl32/comctl32.rc:102 dlls/comdlg32/comdlg32.rc:173
#: dlls/comdlg32/comdlg32.rc:195 dlls/comdlg32/comdlg32.rc:266
@@ -458,7 +450,7 @@ msgstr "重置(&e)"
#: programs/winemine/winemine.rc:53 programs/winhlp32/winhlp32.rc:57
#: programs/wordpad/wordpad.rc:102
msgid "&Help"
-msgstr "求助(&H)"
+msgstr "說明(&H)"
#: dlls/comctl32/comctl32.rc:103
msgid "Move &Up"
@@ -470,7 +462,7 @@ msgstr "下移(&D)"
#: dlls/comctl32/comctl32.rc:105
msgid "A&vailable buttons:"
-msgstr "可用工具列按鈕(&V):"
+msgstr "可用工具列按鈕(&V):"
#: dlls/comctl32/comctl32.rc:107
msgid "&Add ->"
@@ -482,7 +474,7 @@ msgstr "<- 移除(&R)"
#: dlls/comctl32/comctl32.rc:109
msgid "&Toolbar buttons:"
-msgstr "目前工具列按鈕(&T):"
+msgstr "目前工具列按鈕(&T):"
#: dlls/comctl32/comctl32.rc:42
msgid "Separator"
@@ -508,16 +500,12 @@ msgid "&Retry"
msgstr "重試(&R)"
#: dlls/comctl32/comctl32.rc:62
-#, fuzzy
-#| msgid "Hide &Tabs"
msgid "Hide details"
-msgstr "隱藏分頁(&T)"
+msgstr "隱藏詳細資訊"
#: dlls/comctl32/comctl32.rc:63
-#, fuzzy
-#| msgid "Details"
msgid "See details"
-msgstr "詳細資料"
+msgstr "顯示詳細資訊"
#: dlls/comctl32/comctl32.rc:31 dlls/cryptui/cryptui.rc:235
#: programs/regedit/regedit.rc:286 programs/taskmgr/taskmgr.rc:434
@@ -528,7 +516,7 @@ msgstr "關閉"
#: dlls/comctl32/comctl32.rc:36
msgid "Today:"
-msgstr "今天:"
+msgstr "今天:"
#: dlls/comctl32/comctl32.rc:37
msgid "Go to today"
@@ -543,19 +531,19 @@ msgstr "開啟"
#: dlls/comdlg32/comdlg32.rc:161 dlls/comdlg32/comdlg32.rc:183
msgid "File &Name:"
-msgstr "檔案名稱(&N):"
+msgstr "檔案名稱(&N):"
#: dlls/comdlg32/comdlg32.rc:164 dlls/comdlg32/comdlg32.rc:186
msgid "&Directories:"
-msgstr "目錄(&D):"
+msgstr "目錄(&D):"
#: dlls/comdlg32/comdlg32.rc:167 dlls/comdlg32/comdlg32.rc:189
msgid "List Files of &Type:"
-msgstr "檔案類型(&T):"
+msgstr "檔案類型(&T):"
#: dlls/comdlg32/comdlg32.rc:169 dlls/comdlg32/comdlg32.rc:191
msgid "Dri&ves:"
-msgstr "磁碟機(&V):"
+msgstr "磁碟機(&V):"
#: dlls/comdlg32/comdlg32.rc:174 dlls/comdlg32/comdlg32.rc:196
#: dlls/shell32/shell32.rc:368 dlls/shell32/shell32.rc:405
@@ -579,7 +567,7 @@ msgstr "列印"
#: dlls/comdlg32/comdlg32.rc:205
msgid "Printer:"
-msgstr "印表機:"
+msgstr "印表機:"
#: dlls/comdlg32/comdlg32.rc:207 dlls/comdlg32/comdlg32.rc:375
msgid "Print range"
@@ -604,15 +592,15 @@ msgstr "設定(&S)"
#: dlls/comdlg32/comdlg32.rc:214
msgid "&From:"
-msgstr "從(&F):"
+msgstr "從(&F):"
#: dlls/comdlg32/comdlg32.rc:215
msgid "&To:"
-msgstr "到(&T):"
+msgstr "到(&T):"
#: dlls/comdlg32/comdlg32.rc:216 dlls/wineps.drv/wineps.rc:42
msgid "Print &Quality:"
-msgstr "列印品質(&Q):"
+msgstr "列印品質(&Q):"
#: dlls/comdlg32/comdlg32.rc:218
msgid "Print to Fi&le"
@@ -641,7 +629,7 @@ msgstr "[無]"
#: dlls/comdlg32/comdlg32.rc:231
msgid "Specific &Printer"
-msgstr "特定的印表機(&P)"
+msgstr "指定的印表機(&P)"
#: dlls/comdlg32/comdlg32.rc:236 dlls/comdlg32/comdlg32.rc:419
#: dlls/comdlg32/comdlg32.rc:443 dlls/wineps.drv/wineps.rc:34
@@ -676,16 +664,16 @@ msgstr "字型"
#: dlls/comdlg32/comdlg32.rc:254
msgid "&Font:"
-msgstr "字型(&F):"
+msgstr "字型(&F):"
#: dlls/comdlg32/comdlg32.rc:257
msgid "Font St&yle:"
-msgstr "字型樣式(&Y):"
+msgstr "字型樣式(&Y):"
#: dlls/comdlg32/comdlg32.rc:260 dlls/comdlg32/comdlg32.rc:439
#: programs/winecfg/winecfg.rc:292
msgid "&Size:"
-msgstr "大小(&S):"
+msgstr "大小(&S):"
#: dlls/comdlg32/comdlg32.rc:267
msgid "Effects"
@@ -701,7 +689,7 @@ msgstr "底線(&U)"
#: dlls/comdlg32/comdlg32.rc:270 programs/winecfg/winecfg.rc:290
msgid "&Color:"
-msgstr "配色(&C):"
+msgstr "色彩(&C):"
#: dlls/comdlg32/comdlg32.rc:273
msgid "Sample"
@@ -709,7 +697,7 @@ msgstr "範例"
#: dlls/comdlg32/comdlg32.rc:275
msgid "Scr&ipt:"
-msgstr "腳本(&I):"
+msgstr "指令碼(&I):"
#: dlls/comdlg32/comdlg32.rc:283 dlls/comdlg32/comdlg32.rc:288
msgid "Color"
@@ -717,56 +705,54 @@ msgstr "色彩"
#: dlls/comdlg32/comdlg32.rc:286
msgid "&Basic Colors:"
-msgstr "基本色彩(&B):"
+msgstr "基本色彩(&B):"
#: dlls/comdlg32/comdlg32.rc:287
msgid "&Custom Colors:"
-msgstr "自定色彩(&C):"
+msgstr "自訂色彩(&C):"
#: dlls/comdlg32/comdlg32.rc:289
msgid "|S&olid"
-msgstr ""
+msgstr "|純色(&O)"
#: dlls/comdlg32/comdlg32.rc:290
msgid "&Red:"
-msgstr "紅(&R):"
+msgstr "紅(&R):"
#: dlls/comdlg32/comdlg32.rc:292
msgid "&Green:"
-msgstr "綠(&G):"
+msgstr "綠(&G):"
#: dlls/comdlg32/comdlg32.rc:294
msgid "&Blue:"
-msgstr "藍(&B):"
+msgstr "藍(&B):"
#: dlls/comdlg32/comdlg32.rc:296
msgid "&Hue:"
-msgstr "色調(&H):"
+msgstr "色調(&H):"
#: dlls/comdlg32/comdlg32.rc:298
msgctxt "Saturation"
msgid "&Sat:"
-msgstr "飽和度(&S):"
+msgstr "飽和度(&S):"
#: dlls/comdlg32/comdlg32.rc:300
msgctxt "Luminance"
msgid "&Lum:"
-msgstr "亮度(&L):"
+msgstr "亮度(&L):"
#: dlls/comdlg32/comdlg32.rc:310
msgid "&Add to Custom Colors"
-msgstr "新增自定色彩(&A)"
+msgstr "新增自訂色彩(&A)"
#: dlls/comdlg32/comdlg32.rc:311
msgid "&Define Custom Colors >>"
-msgstr "定義自定色彩(&D) >>"
+msgstr "定義自訂色彩(&D) >>"
#: dlls/comdlg32/comdlg32.rc:312
-#, fuzzy
-#| msgid "&No"
msgctxt "Solid"
msgid "&o"
-msgstr "否(&N)"
+msgstr "&o"
#: dlls/comdlg32/comdlg32.rc:318 programs/regedit/regedit.rc:275
#: programs/regedit/regedit.rc:285
@@ -775,7 +761,7 @@ msgstr "搜尋"
#: dlls/comdlg32/comdlg32.rc:321 dlls/comdlg32/comdlg32.rc:340
msgid "Fi&nd What:"
-msgstr "搜尋目標(&N):"
+msgstr "搜尋目標(&N):"
#: dlls/comdlg32/comdlg32.rc:323 dlls/comdlg32/comdlg32.rc:344
msgid "Match &Whole Word Only"
@@ -807,7 +793,7 @@ msgstr "取代"
#: dlls/comdlg32/comdlg32.rc:342
msgid "Re&place With:"
-msgstr "取代為(&P):"
+msgstr "取代為(&P):"
#: dlls/comdlg32/comdlg32.rc:348
msgid "&Replace"
@@ -822,7 +808,7 @@ msgstr "取代全部(&A)"
#: dlls/shell32/shell32.rc:108 programs/clock/clock.rc:31
#: programs/conhost/conhost.rc:34
msgid "&Properties"
-msgstr "屬性(&P)"
+msgstr "內容(&P)"
#: dlls/comdlg32/comdlg32.rc:364
msgid "Print to fi&le"
@@ -831,23 +817,23 @@ msgstr "列印至檔案(&L)"
#: dlls/comdlg32/comdlg32.rc:365 dlls/comdlg32/comdlg32.rc:401
#: dlls/msacm32/msacm32.rc:34 programs/winefile/winefile.rc:137
msgid "&Name:"
-msgstr "名稱(&N):"
+msgstr "名稱(&N):"
#: dlls/comdlg32/comdlg32.rc:366 dlls/comdlg32/comdlg32.rc:404
msgid "Status:"
-msgstr "狀態:"
+msgstr "狀態:"
#: dlls/comdlg32/comdlg32.rc:368 dlls/comdlg32/comdlg32.rc:406
msgid "Type:"
-msgstr "類型:"
+msgstr "類型:"
#: dlls/comdlg32/comdlg32.rc:370 dlls/comdlg32/comdlg32.rc:408
msgid "Where:"
-msgstr "位置:"
+msgstr "位置:"
#: dlls/comdlg32/comdlg32.rc:372 dlls/comdlg32/comdlg32.rc:410
msgid "Comment:"
-msgstr "備註:"
+msgstr "備註:"
#: dlls/comdlg32/comdlg32.rc:377
msgid "Pa&ges"
@@ -859,11 +845,11 @@ msgstr "選擇(&S)"
#: dlls/comdlg32/comdlg32.rc:381
msgid "&from:"
-msgstr "從(&F):"
+msgstr "從(&F):"
#: dlls/comdlg32/comdlg32.rc:382
msgid "&to:"
-msgstr "到(&T):"
+msgstr "到(&T):"
#: dlls/comdlg32/comdlg32.rc:384
msgid "Copies"
@@ -871,7 +857,7 @@ msgstr "份數"
#: dlls/comdlg32/comdlg32.rc:385
msgid "Number of &copies:"
-msgstr "份數(&C):"
+msgstr "份數(&C):"
#: dlls/comdlg32/comdlg32.rc:387
msgid "C&ollate"
@@ -879,11 +865,11 @@ msgstr "自動分頁(&O)"
#: dlls/comdlg32/comdlg32.rc:414 programs/winecfg/winecfg.rc:298
msgid "Si&ze:"
-msgstr "大小(&Z):"
+msgstr "大小(&Z):"
#: dlls/comdlg32/comdlg32.rc:416
msgid "&Source:"
-msgstr "來源(&S):"
+msgstr "來源(&S):"
#: dlls/comdlg32/comdlg32.rc:421
msgid "P&ortrait"
@@ -899,7 +885,7 @@ msgstr "設定頁面"
#: dlls/comdlg32/comdlg32.rc:441
msgid "&Tray:"
-msgstr "進紙匣(&T):"
+msgstr "進紙匣(&T):"
#: dlls/comdlg32/comdlg32.rc:444 dlls/wineps.drv/wineps.rc:35
msgid "&Portrait"
@@ -907,19 +893,19 @@ msgstr "縱向(&P)"
#: dlls/comdlg32/comdlg32.rc:447
msgid "L&eft:"
-msgstr "左(&E):"
+msgstr "左(&E):"
#: dlls/comdlg32/comdlg32.rc:449 programs/notepad/notepad.rc:112
msgid "&Right:"
-msgstr "右(&R):"
+msgstr "右(&R):"
#: dlls/comdlg32/comdlg32.rc:451
msgid "T&op:"
-msgstr "上(&O):"
+msgstr "上(&O):"
#: dlls/comdlg32/comdlg32.rc:453 programs/notepad/notepad.rc:114
msgid "&Bottom:"
-msgstr "下(&B):"
+msgstr "下(&B):"
#: dlls/comdlg32/comdlg32.rc:457
msgid "P&rinter..."
@@ -927,19 +913,19 @@ msgstr "印表機(&R)..."
#: dlls/comdlg32/comdlg32.rc:465 dlls/comdlg32/comdlg32.rc:490
msgid "Look &in:"
-msgstr "搜尋位置(&I):"
+msgstr "搜尋位置(&I):"
#: dlls/comdlg32/comdlg32.rc:471 dlls/comdlg32/comdlg32.rc:497
msgid "File &name:"
-msgstr "檔案名稱(&N):"
+msgstr "檔案名稱(&N):"
#: dlls/comdlg32/comdlg32.rc:475 dlls/comdlg32/comdlg32.rc:501
msgid "Files of &type:"
-msgstr "檔案類型(&T):"
+msgstr "檔案類型(&T):"
#: dlls/comdlg32/comdlg32.rc:478 dlls/comdlg32/comdlg32.rc:504
msgid "Open as &read-only"
-msgstr "開啟成唯讀(&R)"
+msgstr "以唯讀方式開啟(&R)"
#: dlls/comdlg32/comdlg32.rc:480 dlls/comdlg32/comdlg32.rc:506
#: dlls/comdlg32/comdlg32.rc:524 dlls/shdoclc/shdoclc.rc:127
@@ -949,11 +935,11 @@ msgstr "開啟(&O)"
#: dlls/comdlg32/comdlg32.rc:517
msgid "File name:"
-msgstr "檔案名稱:"
+msgstr "檔案名稱:"
#: dlls/comdlg32/comdlg32.rc:520
msgid "Files of type:"
-msgstr "檔案類型:"
+msgstr "檔案類型:"
#: dlls/comdlg32/comdlg32.rc:33 dlls/vbscript/vbscript.rc:35
msgid "File not found"
@@ -961,7 +947,7 @@ msgstr "找不到檔案"
#: dlls/comdlg32/comdlg32.rc:34
msgid "Please verify that the correct file name was given"
-msgstr "請檢查是否給予正確的檔案名稱。"
+msgstr "請檢查是否給予正確的檔案名稱"
#: dlls/comdlg32/comdlg32.rc:35
msgid ""
@@ -969,7 +955,7 @@ msgid ""
"Do you want to create file?"
msgstr ""
"找不到檔案\n"
-"是否建立新檔案?"
+"是否建立新檔案?"
#: dlls/comdlg32/comdlg32.rc:36
msgid ""
@@ -977,23 +963,23 @@ msgid ""
"Do you want to replace it?"
msgstr ""
"檔案已經存在。\n"
-"要取代嗎?"
+"您要取代它嗎?"
#: dlls/comdlg32/comdlg32.rc:37
msgid "Invalid character(s) in path"
-msgstr "檔案名稱中存在無效的字元"
+msgstr "路徑中存在無效的字元"
#: dlls/comdlg32/comdlg32.rc:38
msgid ""
"A filename cannot contain any of the following characters:\n"
" / : < > |"
msgstr ""
-"檔案名中不能包含任何一下字元:\n"
+"檔案名稱中不能包含以下任何一個字元:\n"
" / : < > |"
#: dlls/comdlg32/comdlg32.rc:39
msgid "Path does not exist"
-msgstr "資料夾不存在"
+msgstr "路徑不存在"
#: dlls/comdlg32/comdlg32.rc:40
msgid "File does not exist"
@@ -1001,7 +987,7 @@ msgstr "檔案不存在"
#: dlls/comdlg32/comdlg32.rc:41
msgid "The selection contains a non-folder object"
-msgstr ""
+msgstr "已選項目包含非資料夾物件"
#: dlls/comdlg32/comdlg32.rc:46
msgid "Up One Level"
@@ -1106,7 +1092,7 @@ msgstr "白色"
#: dlls/comdlg32/comdlg32.rc:57
msgid "Unreadable Entry"
-msgstr "數值不可讀"
+msgstr "無法讀取的數值"
#: dlls/comdlg32/comdlg32.rc:59
msgid ""
@@ -1114,19 +1100,19 @@ msgid ""
"Please enter a value between %1!d! and %2!d!."
msgstr ""
"輸入值不在頁數範圍內。\n"
-"請輸入一個 %1!d! 和 %2!d! 之間的值。"
+"請輸入一個介於 %1!d! 和 %2!d! 之間的值。"
#: dlls/comdlg32/comdlg32.rc:61
msgid "The 'from' entry cannot exceed the 'to' entry."
-msgstr "起始值不能大於終點值。"
+msgstr "「從」項的值不能大於「到」項的值。"
#: dlls/comdlg32/comdlg32.rc:63
msgid ""
"Margins overlap or fall outside Paper boundaries.\n"
"Please reenter margins."
msgstr ""
-"邊緣空白重疊或落於邊界外,\n"
-"請重新輸入邊緣空白。"
+"頁面邊距重疊或落於邊界外。\n"
+"請重新輸入頁面邊距。"
#: dlls/comdlg32/comdlg32.rc:65
msgid "The 'Number of copies' field cannot be empty."
@@ -1137,8 +1123,8 @@ msgid ""
"This large number of copies is not supported by your printer.\n"
"Please enter a value between 1 and %d."
msgstr ""
-"您的印表機不支持這麼大的份數。\n"
-"請輸入一個 1 和 %d 之間的數。"
+"您的印表機不支援列印這麼大的份數。\n"
+"請輸入一個介於 1 和 %d 之間的數值。"
#: dlls/comdlg32/comdlg32.rc:68
msgid "A printer error occurred."
@@ -1162,19 +1148,19 @@ msgstr "發生錯誤。"
#: dlls/comdlg32/comdlg32.rc:73
msgid "Unknown printer driver."
-msgstr "找不到印表機驅動程式。"
+msgstr "不明的印表機驅動程式。"
#: dlls/comdlg32/comdlg32.rc:76
msgid ""
"Before you can perform printer-related tasks such as page setup or printing "
"a document, you need to install a printer. Please install one and retry."
msgstr ""
-"在使用與印表機有關功能(版面設定, 列印檔案)之前, 您必須先安裝印表機。請安裝一"
-"個印表機後再試。"
+"您必須先安裝印表機才能使用與印表機有關的功能 (如: 版面設定,列印檔案)。"
+"請安裝印表機後再試一次。"
#: dlls/comdlg32/comdlg32.rc:142
msgid "Select a font size between %1!d! and %2!d! points."
-msgstr "選取介於 %1!d! 和 %2!d! 點的字型尺寸。"
+msgstr "選取介於 %1!d! 和 %2!d! 點之間的字型大小。"
#: dlls/comdlg32/comdlg32.rc:143 dlls/ieframe/ieframe.rc:35
msgid "&Save"
@@ -1182,7 +1168,7 @@ msgstr "儲存(&S)"
#: dlls/comdlg32/comdlg32.rc:144
msgid "Save &in:"
-msgstr "儲存至(&I):"
+msgstr "儲存至(&I):"
#: dlls/comdlg32/comdlg32.rc:145
msgid "Save"
@@ -1193,14 +1179,12 @@ msgid "Open File"
msgstr "開啟檔案"
#: dlls/comdlg32/comdlg32.rc:148
-#, fuzzy
-#| msgid "New Folder"
msgid "Select Folder"
-msgstr "新資料夾"
+msgstr "選擇資料夾"
#: dlls/comdlg32/comdlg32.rc:149
msgid "Font size has to be a number."
-msgstr ""
+msgstr "字型大小必須是數字。"
#: dlls/comdlg32/comdlg32.rc:84 programs/oleview/oleview.rc:98
msgid "Ready"
@@ -1208,107 +1192,107 @@ msgstr "待命"
#: dlls/comdlg32/comdlg32.rc:85
msgid "Paused; "
-msgstr "暫停;"
+msgstr "暫停; "
#: dlls/comdlg32/comdlg32.rc:86
msgid "Error; "
-msgstr "錯誤;"
+msgstr "錯誤; "
#: dlls/comdlg32/comdlg32.rc:87
msgid "Pending deletion; "
-msgstr "等待刪除;"
+msgstr "刪除擱置中; "
#: dlls/comdlg32/comdlg32.rc:88
msgid "Paper jam; "
-msgstr "卡紙;"
+msgstr "卡紙; "
#: dlls/comdlg32/comdlg32.rc:89
msgid "Out of paper; "
-msgstr "無紙;"
+msgstr "無紙; "
#: dlls/comdlg32/comdlg32.rc:90
msgid "Feed paper manual; "
-msgstr "手動進紙;"
+msgstr "手動進紙; "
#: dlls/comdlg32/comdlg32.rc:91
msgid "Paper problem; "
-msgstr "紙張問題;"
+msgstr "紙張問題; "
#: dlls/comdlg32/comdlg32.rc:92
msgid "Printer offline; "
-msgstr "印表機離線;"
+msgstr "印表機離線; "
#: dlls/comdlg32/comdlg32.rc:93
msgid "I/O Active; "
-msgstr "I/O 活動;"
+msgstr "I/O 活動; "
#: dlls/comdlg32/comdlg32.rc:94
msgid "Busy; "
-msgstr "忙碌中;"
+msgstr "忙碌中; "
#: dlls/comdlg32/comdlg32.rc:95
msgid "Printing; "
-msgstr "正在列印;"
+msgstr "正在列印; "
#: dlls/comdlg32/comdlg32.rc:96
msgid "Output tray is full; "
-msgstr "出紙匣已滿;"
+msgstr "出紙匣已滿; "
#: dlls/comdlg32/comdlg32.rc:97
msgid "Not available; "
-msgstr "不可用;"
+msgstr "不可用; "
#: dlls/comdlg32/comdlg32.rc:98
msgid "Waiting; "
-msgstr "等待;"
+msgstr "正在等待; "
#: dlls/comdlg32/comdlg32.rc:99
msgid "Processing; "
-msgstr "正在處理;"
+msgstr "正在處理; "
#: dlls/comdlg32/comdlg32.rc:100
msgid "Initializing; "
-msgstr "正在初始化;"
+msgstr "正在初始化; "
#: dlls/comdlg32/comdlg32.rc:101
msgid "Warming up; "
-msgstr "預熱中;"
+msgstr "預熱中; "
#: dlls/comdlg32/comdlg32.rc:102
msgid "Toner low; "
-msgstr "墨水量低;"
+msgstr "墨水量低; "
#: dlls/comdlg32/comdlg32.rc:103
msgid "No toner; "
-msgstr "墨水用盡;"
+msgstr "墨水用盡; "
#: dlls/comdlg32/comdlg32.rc:104
msgid "Page punt; "
-msgstr "頁處理記憶體超支;"
+msgstr "頁處理記憶體超支; "
#: dlls/comdlg32/comdlg32.rc:105
msgid "Interrupted by user; "
-msgstr "已被使用者中斷;"
+msgstr "被使用者中斷; "
#: dlls/comdlg32/comdlg32.rc:106
msgid "Out of memory; "
-msgstr "記憶體不足;"
+msgstr "記憶體不足; "
#: dlls/comdlg32/comdlg32.rc:107
msgid "The printer door is open; "
-msgstr "印表機蓋是打開的;"
+msgstr "印表機蓋已打開; "
#: dlls/comdlg32/comdlg32.rc:108
msgid "Print server unknown; "
-msgstr "找不到列印伺服器;"
+msgstr "不明的列印伺服器; "
#: dlls/comdlg32/comdlg32.rc:109
msgid "Power save mode; "
-msgstr "省電狀態;"
+msgstr "省電模式; "
#: dlls/comdlg32/comdlg32.rc:78
msgid "Default Printer; "
-msgstr "預設印表機;"
+msgstr "預設印表機; "
#: dlls/comdlg32/comdlg32.rc:79
msgid "There are %d documents in the queue"
@@ -1316,11 +1300,11 @@ msgstr "有 %d 個文件正在等待列印"
#: dlls/comdlg32/comdlg32.rc:80
msgid "Margins [inches]"
-msgstr "邊緣空白 [英寸]"
+msgstr "頁面邊距 [英寸]"
#: dlls/comdlg32/comdlg32.rc:81
msgid "Margins [mm]"
-msgstr "邊緣空白 [毫米]"
+msgstr "頁面邊距 [毫米]"
#: dlls/comdlg32/comdlg32.rc:82 dlls/sane.ds/sane.rc:33
msgctxt "unit: millimeters"
@@ -1329,12 +1313,12 @@ msgstr "毫米"
#: dlls/credui/credui.rc:45
msgid "&User name:"
-msgstr "使用者名稱(&U):"
+msgstr "使用者名稱(&U):"
#: dlls/credui/credui.rc:48 dlls/cryptui/cryptui.rc:402
#: dlls/oledb32/version.rc:81
msgid "&Password:"
-msgstr "密碼(&P):"
+msgstr "密碼(&P):"
#: dlls/credui/credui.rc:50
msgid "&Remember my password"
@@ -1346,7 +1330,7 @@ msgstr "連接到 %s"
#: dlls/credui/credui.rc:31
msgid "Connecting to %s"
-msgstr "正在連接到 %s"
+msgstr "正在連線到 %s"
#: dlls/credui/credui.rc:32
msgid "Logon unsuccessful"
@@ -1357,8 +1341,8 @@ msgid ""
"Make sure that your user name\n"
"and password are correct."
msgstr ""
-"請確認您輸入的使用者名稱和密碼\n"
-"是否正確。"
+"請確認您輸入的使用者名稱\n"
+"和密碼是否正確。"
#: dlls/credui/credui.rc:35
msgid ""
@@ -1369,8 +1353,7 @@ msgid ""
msgstr ""
"開啟大寫鎖定可能導致您輸入錯誤的密碼。\n"
"\n"
-"請在輸入密碼前按下 Caps Lock 鍵,解除\n"
-"大寫鎖定。"
+"您可以按下 Caps Lock 鍵以解除大寫鎖定,然後再輸入密碼。"
#: dlls/credui/credui.rc:34
msgid "Caps Lock is On"
@@ -1378,7 +1361,7 @@ msgstr "大寫鎖定已開啟"
#: dlls/crypt32/crypt32.rc:30
msgid "Authority Key Identifier"
-msgstr "授權金鑰識別碼"
+msgstr "授權單位金鑰識別元"
#: dlls/crypt32/crypt32.rc:31
msgid "Key Attributes"
@@ -1394,7 +1377,7 @@ msgstr "主體替代名稱"
#: dlls/crypt32/crypt32.rc:34
msgid "Issuer Alternative Name"
-msgstr "發證者替代名稱"
+msgstr "簽發者替代名稱"
#: dlls/crypt32/crypt32.rc:35
msgid "Basic Constraints"
@@ -1406,7 +1389,7 @@ msgstr "金鑰用法"
#: dlls/crypt32/crypt32.rc:37
msgid "Certificate Policies"
-msgstr "憑證策略"
+msgstr "憑證原則"
#: dlls/crypt32/crypt32.rc:38
msgid "Subject Key Identifier"
@@ -1418,7 +1401,7 @@ msgstr "CRL 原因編碼"
#: dlls/crypt32/crypt32.rc:40
msgid "CRL Distribution Points"
-msgstr "CRL 發布點"
+msgstr "CRL 發佈點"
#: dlls/crypt32/crypt32.rc:41
msgid "Enhanced Key Usage"
@@ -1438,7 +1421,7 @@ msgstr "下一個更新位置"
#: dlls/crypt32/crypt32.rc:45
msgid "Yes or No Trust"
-msgstr "是或否信賴"
+msgstr "信任或不信任"
#: dlls/crypt32/crypt32.rc:46
msgid "Email Address"
@@ -1446,7 +1429,7 @@ msgstr "電子郵件地址"
#: dlls/crypt32/crypt32.rc:47
msgid "Unstructured Name"
-msgstr "無結構的名稱"
+msgstr "非結構化名稱"
#: dlls/crypt32/crypt32.rc:48
msgid "Content Type"
@@ -1462,7 +1445,7 @@ msgstr "簽署時間"
#: dlls/crypt32/crypt32.rc:51
msgid "Counter Sign"
-msgstr "計數器符號"
+msgstr "副署"
#: dlls/crypt32/crypt32.rc:52
msgid "Challenge Password"
@@ -1470,7 +1453,7 @@ msgstr "挑戰密碼"
#: dlls/crypt32/crypt32.rc:53
msgid "Unstructured Address"
-msgstr "無結構的位址"
+msgstr "非結構化位址"
#: dlls/crypt32/crypt32.rc:54
msgid "S/MIME Capabilities"
@@ -1478,7 +1461,7 @@ msgstr "S/MIME 能力"
#: dlls/crypt32/crypt32.rc:55
msgid "Prefer Signed Data"
-msgstr "偏好已簽署資料"
+msgstr "已簽署資料優先"
#: dlls/crypt32/crypt32.rc:56 dlls/cryptdlg/cryptdlg.rc:34
msgctxt "Certification Practice Statement"
@@ -1495,7 +1478,7 @@ msgstr "線上憑證狀態協定"
#: dlls/crypt32/crypt32.rc:59
msgid "Certification Authority Issuer"
-msgstr "憑證授權發證者"
+msgstr "憑證授權單位簽發者"
#: dlls/crypt32/crypt32.rc:60
msgid "Certification Template Name"
@@ -1511,27 +1494,27 @@ msgstr "憑證複本"
#: dlls/crypt32/crypt32.rc:63
msgid "Netscape Cert Type"
-msgstr "Netscape 憑證型態"
+msgstr "Netscape 憑證類型"
#: dlls/crypt32/crypt32.rc:64
msgid "Netscape Base URL"
-msgstr "Netscape 基準網址"
+msgstr "Netscape 基本網址"
#: dlls/crypt32/crypt32.rc:65
msgid "Netscape Revocation URL"
-msgstr "Netscape 廢止網址"
+msgstr "Netscape 撤銷網址"
#: dlls/crypt32/crypt32.rc:66
msgid "Netscape CA Revocation URL"
-msgstr "Netscape CA 廢止網址"
+msgstr "Netscape CA 撤銷網址"
#: dlls/crypt32/crypt32.rc:67
msgid "Netscape Cert Renewal URL"
-msgstr "Netscape 憑證重申網址"
+msgstr "Netscape 憑證更新網址"
#: dlls/crypt32/crypt32.rc:68
msgid "Netscape CA Policy URL"
-msgstr "Netscape CA 策略網址"
+msgstr "Netscape CA 原則網址"
#: dlls/crypt32/crypt32.rc:69
msgid "Netscape SSL ServerName"
@@ -1583,7 +1566,7 @@ msgstr "姓氏"
#: dlls/crypt32/crypt32.rc:81
msgid "Domain Component"
-msgstr "區域部分"
+msgstr "網域元件"
#: dlls/crypt32/crypt32.rc:82
msgid "Street Address"
@@ -1591,7 +1574,7 @@ msgstr "街道地址"
#: dlls/crypt32/crypt32.rc:83
msgid "Serial Number"
-msgstr "門牌號碼"
+msgstr "序號"
#: dlls/crypt32/crypt32.rc:84
msgid "CA Version"
@@ -1603,7 +1586,7 @@ msgstr "交叉 CA 版本"
#: dlls/crypt32/crypt32.rc:86
msgid "Serialized Signature Serial Number"
-msgstr "序列化的簽名序號"
+msgstr "序列化簽章序號"
#: dlls/crypt32/crypt32.rc:87
msgid "Principal Name"
@@ -1615,7 +1598,7 @@ msgstr "Windows 產品更新"
#: dlls/crypt32/crypt32.rc:89
msgid "Enrollment Name Value Pair"
-msgstr "註冊名稱值對"
+msgstr "註冊名稱值配對"
#: dlls/crypt32/crypt32.rc:90
msgid "OS Version"
@@ -1627,7 +1610,7 @@ msgstr "註冊 CSP"
#: dlls/crypt32/crypt32.rc:92
msgid "CRL Number"
-msgstr "CRL 數字"
+msgstr "CRL 號碼"
#: dlls/crypt32/crypt32.rc:93
msgid "Delta CRL Indicator"
@@ -1635,7 +1618,7 @@ msgstr "Delta CRL 指示器"
#: dlls/crypt32/crypt32.rc:94
msgid "Issuing Distribution Point"
-msgstr "議題發布點"
+msgstr "發行發佈點"
#: dlls/crypt32/crypt32.rc:95
msgid "Freshest CRL"
@@ -1647,27 +1630,27 @@ msgstr "名稱條件約束"
#: dlls/crypt32/crypt32.rc:97
msgid "Policy Mappings"
-msgstr "策略映射"
+msgstr "原則對應"
#: dlls/crypt32/crypt32.rc:98
msgid "Policy Constraints"
-msgstr "策略條件約束"
+msgstr "原則條件約束"
#: dlls/crypt32/crypt32.rc:99
msgid "Cross-Certificate Distribution Points"
-msgstr "交叉憑證發布點"
+msgstr "交叉憑證發佈點"
#: dlls/crypt32/crypt32.rc:100
msgid "Application Policies"
-msgstr "應用程式策略"
+msgstr "應用程式原則"
#: dlls/crypt32/crypt32.rc:101
msgid "Application Policy Mappings"
-msgstr "應用程式策略映射"
+msgstr "應用程式原則對應"
#: dlls/crypt32/crypt32.rc:102
msgid "Application Policy Constraints"
-msgstr "應用程式策略條件約束"
+msgstr "應用程式原則條件約束"
#: dlls/crypt32/crypt32.rc:103
msgid "CMC Data"
@@ -1723,11 +1706,11 @@ msgstr "前一個 CA 憑證雜湊"
#: dlls/crypt32/crypt32.rc:116
msgid "Virtual Base CRL Number"
-msgstr "虛擬基底 CRL 數字"
+msgstr "虛擬基本 CRL 數目"
#: dlls/crypt32/crypt32.rc:117
msgid "Next CRL Publish"
-msgstr "下一個 CRL 發布"
+msgstr "下一個 CRL 發佈"
#: dlls/crypt32/crypt32.rc:118
msgid "CA Encryption Certificate"
@@ -1751,27 +1734,27 @@ msgstr "虛設簽署人"
#: dlls/crypt32/crypt32.rc:123
msgid "Encrypted Private Key"
-msgstr "加密的私鑰"
+msgstr "已加密的私鑰"
#: dlls/crypt32/crypt32.rc:124
msgid "Published CRL Locations"
-msgstr "發布的 CRL 位置"
+msgstr "已發行的 CRL 位置"
#: dlls/crypt32/crypt32.rc:125
msgid "Enforce Certificate Chain Policy"
-msgstr "強制憑證鏈策略"
+msgstr "強制憑證鏈結原則"
#: dlls/crypt32/crypt32.rc:126
msgid "Transaction Id"
-msgstr "異動作業識別號"
+msgstr "異動作業識別碼"
#: dlls/crypt32/crypt32.rc:127
msgid "Sender Nonce"
-msgstr "當前傳送者"
+msgstr "發送者的一次性隨機數"
#: dlls/crypt32/crypt32.rc:128
msgid "Recipient Nonce"
-msgstr "當前收件者"
+msgstr "收件者的一次性隨機數"
#: dlls/crypt32/crypt32.rc:129
msgid "Reg Info"
@@ -1779,11 +1762,11 @@ msgstr "註冊資訊"
#: dlls/crypt32/crypt32.rc:130
msgid "Get Certificate"
-msgstr "提取憑證"
+msgstr "取得憑證"
#: dlls/crypt32/crypt32.rc:131
msgid "Get CRL"
-msgstr "提取 CRL"
+msgstr "取得 CRL"
#: dlls/crypt32/crypt32.rc:132
msgid "Revoke Request"
@@ -1791,11 +1774,11 @@ msgstr "取消要求"
#: dlls/crypt32/crypt32.rc:133
msgid "Query Pending"
-msgstr "查詢擱置"
+msgstr "查詢擱置中"
#: dlls/crypt32/crypt32.rc:134 dlls/cryptui/cryptui.rc:95
msgid "Certificate Trust List"
-msgstr "憑證信賴清單"
+msgstr "憑證信任清單"
#: dlls/crypt32/crypt32.rc:135
msgid "Archived Key Certificate Hash"
@@ -1803,11 +1786,11 @@ msgstr "封存的金鑰憑證雜湊"
#: dlls/crypt32/crypt32.rc:136
msgid "Private Key Usage Period"
-msgstr "私鑰使用週期"
+msgstr "私鑰使用期限"
#: dlls/crypt32/crypt32.rc:137
msgid "Client Information"
-msgstr "客戶端資訊"
+msgstr "用戶端資訊"
#: dlls/crypt32/crypt32.rc:138
msgid "Server Authentication"
@@ -1815,7 +1798,7 @@ msgstr "伺服器認證"
#: dlls/crypt32/crypt32.rc:139
msgid "Client Authentication"
-msgstr "客戶端認證"
+msgstr "用戶端認證"
#: dlls/crypt32/crypt32.rc:140
msgid "Code Signing"
@@ -1831,7 +1814,7 @@ msgstr "時間戳記"
#: dlls/crypt32/crypt32.rc:143
msgid "Microsoft Trust List Signing"
-msgstr "Microsoft 信賴清單簽署"
+msgstr "Microsoft 信任清單簽署"
#: dlls/crypt32/crypt32.rc:144
msgid "Microsoft Time Stamping"
@@ -1843,7 +1826,7 @@ msgstr "IP 安全終端系統"
#: dlls/crypt32/crypt32.rc:146
msgid "IP security tunnel termination"
-msgstr "IP 安全遂道終端"
+msgstr "IP 安全隧道終端"
#: dlls/crypt32/crypt32.rc:147
msgid "IP security user"
@@ -1855,19 +1838,19 @@ msgstr "加密檔案系統"
#: dlls/crypt32/crypt32.rc:149 dlls/cryptui/cryptui.rc:133
msgid "Windows Hardware Driver Verification"
-msgstr "Windows 硬體驅動程式查核"
+msgstr "Windows 硬體驅動程式驗證"
#: dlls/crypt32/crypt32.rc:150 dlls/cryptui/cryptui.rc:134
msgid "Windows System Component Verification"
-msgstr "Windows 系統成分查核"
+msgstr "Windows 系統元件驗證"
#: dlls/crypt32/crypt32.rc:151 dlls/cryptui/cryptui.rc:135
msgid "OEM Windows System Component Verification"
-msgstr "OEM Windows 系統成分查核"
+msgstr "OEM Windows 系統元件驗證"
#: dlls/crypt32/crypt32.rc:152 dlls/cryptui/cryptui.rc:136
msgid "Embedded Windows System Component Verification"
-msgstr "嵌入式 Windows 系統成分查核"
+msgstr "嵌入式 Windows 系統元件驗證"
#: dlls/crypt32/crypt32.rc:153 dlls/cryptui/cryptui.rc:143
msgid "Key Pack Licenses"
@@ -1875,11 +1858,11 @@ msgstr "金鑰包裝授權"
#: dlls/crypt32/crypt32.rc:154 dlls/cryptui/cryptui.rc:144
msgid "License Server Verification"
-msgstr "授權伺服器查核"
+msgstr "授權伺服器驗證"
#: dlls/crypt32/crypt32.rc:155 dlls/cryptui/cryptui.rc:146
msgid "Smart Card Logon"
-msgstr "智慧卡登錄"
+msgstr "智慧卡登入"
#: dlls/crypt32/crypt32.rc:156 dlls/cryptui/cryptui.rc:142
msgid "Digital Rights"
@@ -1887,7 +1870,7 @@ msgstr "數位權限"
#: dlls/crypt32/crypt32.rc:157 dlls/cryptui/cryptui.rc:138
msgid "Qualified Subordination"
-msgstr "合格的隸屬"
+msgstr "合格的分類"
#: dlls/crypt32/crypt32.rc:158 dlls/cryptui/cryptui.rc:139
msgid "Key Recovery"
@@ -1911,7 +1894,7 @@ msgstr "根清單簽署人"
#: dlls/crypt32/crypt32.rc:163
msgid "All application policies"
-msgstr "所有應用程式策略"
+msgstr "所有應用程式原則"
#: dlls/crypt32/crypt32.rc:164 dlls/cryptui/cryptui.rc:149
msgid "Directory Service Email Replication"
@@ -1919,19 +1902,19 @@ msgstr "目錄服務電子郵件複寫"
#: dlls/crypt32/crypt32.rc:165 dlls/cryptui/cryptui.rc:145
msgid "Certificate Request Agent"
-msgstr "憑證請求代理程式"
+msgstr "憑證要求代理"
#: dlls/crypt32/crypt32.rc:166 dlls/cryptui/cryptui.rc:141
msgid "Lifetime Signing"
-msgstr "生命期簽署"
+msgstr "永久簽署"
#: dlls/crypt32/crypt32.rc:167
msgid "All issuance policies"
-msgstr "所有發布策略"
+msgstr "所有發佈原則"
#: dlls/crypt32/crypt32.rc:172
msgid "Trusted Root Certification Authorities"
-msgstr "信賴的根憑證授權者"
+msgstr "信任的根憑證授權單位"
#: dlls/crypt32/crypt32.rc:173
msgid "Personal"
@@ -1939,7 +1922,7 @@ msgstr "個人的"
#: dlls/crypt32/crypt32.rc:174
msgid "Intermediate Certification Authorities"
-msgstr "中介憑證授權者"
+msgstr "中介憑證授權單位"
#: dlls/crypt32/crypt32.rc:175
msgid "Other People"
@@ -1947,11 +1930,11 @@ msgstr "其他人"
#: dlls/crypt32/crypt32.rc:176
msgid "Trusted Publishers"
-msgstr "信賴的發行者"
+msgstr "信任的發行者"
#: dlls/crypt32/crypt32.rc:177
msgid "Untrusted Certificates"
-msgstr "不可信的憑證"
+msgstr "不信任的憑證"
#: dlls/crypt32/crypt32.rc:182
msgid "KeyID="
@@ -1959,7 +1942,7 @@ msgstr "KeyID="
#: dlls/crypt32/crypt32.rc:183
msgid "Certificate Issuer"
-msgstr "憑證發證者"
+msgstr "憑證簽發者"
#: dlls/crypt32/crypt32.rc:184
msgid "Certificate Serial Number="
@@ -1995,11 +1978,11 @@ msgstr "遮罩="
#: dlls/crypt32/crypt32.rc:192
msgid "Registered ID="
-msgstr "已註冊的識別號="
+msgstr "已註冊的識別碼="
#: dlls/crypt32/crypt32.rc:193
msgid "Unknown Key Usage"
-msgstr "不明金鑰用法"
+msgstr "不明的金鑰使用方法"
#: dlls/crypt32/crypt32.rc:194
msgid "Subject Type="
@@ -2025,7 +2008,7 @@ msgstr "無"
#: dlls/crypt32/crypt32.rc:199
msgid "Information Not Available"
-msgstr "資訊無法使用"
+msgstr "沒有可用資訊"
#: dlls/crypt32/crypt32.rc:200
msgid "Authority Info Access"
@@ -2042,23 +2025,23 @@ msgstr "OCSP"
#: dlls/crypt32/crypt32.rc:203
msgid "CA Issuers"
-msgstr "CA 發證者"
+msgstr "CA 簽發者"
#: dlls/crypt32/crypt32.rc:204
msgid "Unknown Access Method"
-msgstr "不明存取方法"
+msgstr "不明的存取方法"
#: dlls/crypt32/crypt32.rc:205
msgid "Alternative Name"
-msgstr "另類名稱"
+msgstr "替代名稱"
#: dlls/crypt32/crypt32.rc:206
msgid "CRL Distribution Point"
-msgstr "CRL 發布點"
+msgstr "CRL 發佈點"
#: dlls/crypt32/crypt32.rc:207
msgid "Distribution Point Name"
-msgstr "發布點名稱"
+msgstr "發佈點名稱"
#: dlls/crypt32/crypt32.rc:208
msgid "Full Name"
@@ -2074,19 +2057,19 @@ msgstr "CRL 原因="
#: dlls/crypt32/crypt32.rc:211
msgid "CRL Issuer"
-msgstr "CRL 發證者"
+msgstr "CRL 簽發者"
#: dlls/crypt32/crypt32.rc:212
msgid "Key Compromise"
-msgstr "金鑰折衷"
+msgstr "金鑰洩露"
#: dlls/crypt32/crypt32.rc:213
msgid "CA Compromise"
-msgstr "CA 折衷"
+msgstr "CA 洩露"
#: dlls/crypt32/crypt32.rc:214
msgid "Affiliation Changed"
-msgstr "會籍變更"
+msgstr "聯盟已變更"
#: dlls/crypt32/crypt32.rc:215
msgid "Superseded"
@@ -2094,11 +2077,11 @@ msgstr "已取代"
#: dlls/crypt32/crypt32.rc:216
msgid "Operation Ceased"
-msgstr "作業終了"
+msgstr "作業已停止"
#: dlls/crypt32/crypt32.rc:217
msgid "Certificate Hold"
-msgstr "憑證暫停"
+msgstr "持有的憑證"
#: dlls/crypt32/crypt32.rc:218
msgid "Financial Information="
@@ -2110,11 +2093,11 @@ msgstr "可用"
#: dlls/crypt32/crypt32.rc:220
msgid "Not Available"
-msgstr "無法使用"
+msgstr "不可用"
#: dlls/crypt32/crypt32.rc:221
msgid "Meets Criteria="
-msgstr "會面準則="
+msgstr "符合準則="
#: dlls/crypt32/crypt32.rc:222 dlls/cryptui/cryptui.rc:166
#: dlls/oleaut32/oleaut32.rc:32 dlls/wininet/wininet.rc:94
@@ -2130,7 +2113,7 @@ msgstr "否"
#: dlls/crypt32/crypt32.rc:224
msgid "Digital Signature"
-msgstr "數位簽名"
+msgstr "數位簽章"
#: dlls/crypt32/crypt32.rc:225
msgid "Non-Repudiation"
@@ -2142,11 +2125,11 @@ msgstr "金鑰編密"
#: dlls/crypt32/crypt32.rc:227
msgid "Data Encipherment"
-msgstr "資料加密"
+msgstr "資料編密"
#: dlls/crypt32/crypt32.rc:228
msgid "Key Agreement"
-msgstr "金鑰協定"
+msgstr "金鑰合約"
#: dlls/crypt32/crypt32.rc:229
msgid "Certificate Signing"
@@ -2170,7 +2153,7 @@ msgstr "只解開密文"
#: dlls/crypt32/crypt32.rc:234
msgid "SSL Client Authentication"
-msgstr "SSL 客戶端認證"
+msgstr "SSL 用戶端認證"
#: dlls/crypt32/crypt32.rc:235
msgid "SSL Server Authentication"
@@ -2182,7 +2165,7 @@ msgstr "S/MIME"
#: dlls/crypt32/crypt32.rc:237
msgid "Signature"
-msgstr "簽名"
+msgstr "簽章"
#: dlls/crypt32/crypt32.rc:238
msgid "SSL CA"
@@ -2194,23 +2177,23 @@ msgstr "S/MIME CA"
#: dlls/crypt32/crypt32.rc:240
msgid "Signature CA"
-msgstr "簽名 CA"
+msgstr "簽章 CA"
#: dlls/cryptdlg/cryptdlg.rc:30
msgid "Certificate Policy"
-msgstr "憑證策略"
+msgstr "憑證原則"
#: dlls/cryptdlg/cryptdlg.rc:31
msgid "Policy Identifier: "
-msgstr "策略識別碼:"
+msgstr "原則識別碼: "
#: dlls/cryptdlg/cryptdlg.rc:32
msgid "Policy Qualifier Info"
-msgstr "策略限定元資訊"
+msgstr "原則限定元資訊"
#: dlls/cryptdlg/cryptdlg.rc:33
msgid "Policy Qualifier Id="
-msgstr "策略限定元識別號="
+msgstr "原則限定元識別碼="
#: dlls/cryptdlg/cryptdlg.rc:36
msgid "Qualifier"
@@ -2244,15 +2227,15 @@ msgstr "安裝憑證(&I)..."
#: dlls/cryptui/cryptui.rc:197
msgid "Issuer &Statement"
-msgstr "發證者敘述(&S)"
+msgstr "簽發者敘述(&S)"
#: dlls/cryptui/cryptui.rc:205
msgid "&Show:"
-msgstr "顯示(&S):"
+msgstr "顯示(&S):"
#: dlls/cryptui/cryptui.rc:210
msgid "&Edit Properties..."
-msgstr "編輯屬性(&E)..."
+msgstr "編輯內容(&E)..."
#: dlls/cryptui/cryptui.rc:211
msgid "&Copy to File..."
@@ -2272,7 +2255,7 @@ msgstr "檢視憑證(&V)"
#: dlls/cryptui/cryptui.rc:223
msgid "Certificate &status:"
-msgstr "憑證狀態(&S):"
+msgstr "憑證狀態(&S):"
#: dlls/cryptui/cryptui.rc:229
msgid "Disclaimer"
@@ -2284,12 +2267,12 @@ msgstr "更多資訊(&I)"
#: dlls/cryptui/cryptui.rc:244
msgid "&Friendly name:"
-msgstr "易記名稱(&F):"
+msgstr "易記名稱(&F):"
#: dlls/cryptui/cryptui.rc:246 programs/progman/progman.rc:154
#: programs/progman/progman.rc:170
msgid "&Description:"
-msgstr "描述(&D):"
+msgstr "描述(&D):"
#: dlls/cryptui/cryptui.rc:248
msgid "Certificate purposes"
@@ -2305,32 +2288,32 @@ msgstr "停用這個憑證的全部目的(&I)"
#: dlls/cryptui/cryptui.rc:253
msgid "Enable &only the following purposes for this certificate:"
-msgstr "只有啟用這個憑證的下列目的(&O):"
+msgstr "只啟用這個憑證的下列目的(&O):"
#: dlls/cryptui/cryptui.rc:258
msgid "Add &Purpose..."
-msgstr "加入目的(&P)..."
+msgstr "新增目的(&P)..."
#: dlls/cryptui/cryptui.rc:262
msgid "Add Purpose"
-msgstr "加入目的"
+msgstr "新增目的"
#: dlls/cryptui/cryptui.rc:265
msgid ""
"Add the object identifier (OID) for the certificate purpose you wish to add:"
-msgstr "加入您所希望的憑證目的物件識別符號 (OID):"
+msgstr "新增您希望加入的憑證目的的物件識別碼 (OID):"
#: dlls/cryptui/cryptui.rc:273 dlls/cryptui/cryptui.rc:69
msgid "Select Certificate Store"
-msgstr "選取憑證儲存處"
+msgstr "選取憑證存放區"
#: dlls/cryptui/cryptui.rc:276
msgid "Select the certificate store you want to use:"
-msgstr "選取您要使用的憑證儲存處:"
+msgstr "選取您要使用的憑證存放區:"
#: dlls/cryptui/cryptui.rc:279
msgid "&Show physical stores"
-msgstr "顯示實體儲存(&S)"
+msgstr "顯示實體存放區(&S)"
#: dlls/cryptui/cryptui.rc:285 dlls/cryptui/cryptui.rc:296
#: dlls/cryptui/cryptui.rc:313 dlls/cryptui/cryptui.rc:327
@@ -2354,16 +2337,16 @@ msgid ""
"\n"
"To continue, click Next."
msgstr ""
-"這個精靈協助您從檔案匯入憑證、憑證撤銷清單以及憑證信賴清單到憑證儲存處。\n"
+"這個精靈協助您從檔案匯入憑證、憑證撤銷清單以及憑證信任清單到憑證存放區。\n"
"\n"
-"憑證可用於識別您或您正在通訊的電腦。 它也可以用於認證以及對訊息簽署。 憑證儲"
-"存處收藏了憑證、憑證撤銷清單以及憑證信賴清單。\n"
+"憑證可用於識別您或您用以通訊的電腦。它也可以用於認證以及簽署訊息。"
+"憑證存放區收藏了憑證、憑證撤銷清單以及憑證信任清單。\n"
"\n"
-"要繼續,請按下一步。"
+"請按 [下一步] 繼續。"
#: dlls/cryptui/cryptui.rc:299 dlls/cryptui/cryptui.rc:435
msgid "&File name:"
-msgstr "檔案名稱(&F):"
+msgstr "檔案名稱(&F):"
#: dlls/cryptui/cryptui.rc:301 dlls/cryptui/cryptui.rc:323
#: dlls/cryptui/cryptui.rc:437 programs/winecfg/winecfg.rc:311
@@ -2375,7 +2358,7 @@ msgid ""
"Note: The following file formats may contain more than one certificate, "
"certificate revocation list, or certificate trust list:"
msgstr ""
-"註記:下列檔案格式也許會包含超過一個的憑證、憑證撤銷清單或憑證信賴清單:"
+"註記: 下列檔案格式也許會包含超過一個的憑證、憑證撤銷清單或憑證信任清單:"
#: dlls/cryptui/cryptui.rc:304
msgid "Cryptographic Message Syntax Standard/PKCS #7 Messages (*.p7b)"
@@ -2388,21 +2371,21 @@ msgstr "個人資訊交換/PKCS #12 (*.pfx; *.p12)"
#: dlls/cryptui/cryptui.rc:308 dlls/cryptui/cryptui.rc:81
#: dlls/cryptui/cryptui.rc:162
msgid "Microsoft Serialized Certificate Store (*.sst)"
-msgstr "Microsoft 序列化憑證儲存處 (*.sst)"
+msgstr "Microsoft 序列化憑證存放區 (*.sst)"
#: dlls/cryptui/cryptui.rc:316
msgid ""
"Wine can automatically select the certificate store, or you can specify a "
"location for the certificates."
-msgstr "Wine 可以自動選取憑證儲存處,或者您可以指定用於憑證的位置。"
+msgstr "Wine 可以自動選取憑證存放區,或者您可以指定用於憑證的位置。"
#: dlls/cryptui/cryptui.rc:318
msgid "&Automatically select certificate store"
-msgstr "自動選取憑證儲存處(&A)"
+msgstr "自動選取憑證存放區(&A)"
#: dlls/cryptui/cryptui.rc:320
msgid "&Place all certificates in the following store:"
-msgstr "將所有憑證放置於下列儲存(&P):"
+msgstr "將所有憑證放置於下列存放區(&P):"
#: dlls/cryptui/cryptui.rc:330
msgid "Completing the Certificate Import Wizard"
@@ -2410,11 +2393,11 @@ msgstr "正在完成憑證匯入精靈"
#: dlls/cryptui/cryptui.rc:332
msgid "You have successfully completed the Certificate Import Wizard."
-msgstr "您已經成功地完成憑證匯入精靈。"
+msgstr "您已經成功完成憑證匯入精靈。"
#: dlls/cryptui/cryptui.rc:334 dlls/cryptui/cryptui.rc:448
msgid "You have specified the following settings:"
-msgstr "您已指定下列設定值:"
+msgstr "您已指定下列設定值:"
#: dlls/cryptui/cryptui.rc:342 dlls/cryptui/cryptui.rc:122
#: dlls/inetcpl.cpl/inetcpl.rc:111
@@ -2423,7 +2406,7 @@ msgstr "憑證"
#: dlls/cryptui/cryptui.rc:345
msgid "I&ntended purpose:"
-msgstr "預定目的(&N):"
+msgstr "預定目的(&N):"
#: dlls/cryptui/cryptui.rc:349
msgid "&Import..."
@@ -2462,11 +2445,11 @@ msgstr "憑證目的"
#: dlls/cryptui/cryptui.rc:364
msgid ""
"Select one or more purposes to be listed when Advanced Purposes is selected."
-msgstr "當進階目的已選時選取一或多個要列出的目的。"
+msgstr "選取一個或多個在進階目的已選取時要列出的目的。"
#: dlls/cryptui/cryptui.rc:366
msgid "&Certificate purposes:"
-msgstr "憑證目的(&C):"
+msgstr "憑證目的(&C):"
#: dlls/cryptui/cryptui.rc:375 dlls/cryptui/cryptui.rc:386
#: dlls/cryptui/cryptui.rc:399 dlls/cryptui/cryptui.rc:409
@@ -2491,12 +2474,12 @@ msgid ""
"\n"
"To continue, click Next."
msgstr ""
-"這個精靈協助您從憑證儲存處匯出憑證、憑證撤銷清單以及憑證信賴清單到檔案。\n"
+"這個精靈協助您從憑證存放區匯出憑證、憑證撤銷清單以及憑證信任清單到檔案。\n"
"\n"
-"憑證可用於識別您或您用以通訊的電腦。它也可以被用於認證以及簽署訊息。 憑證儲存"
-"處收藏了憑證、憑證撤銷清單以及憑證信賴清單。\n"
+"憑證可用於識別您或您用以通訊的電腦。它也可以用於認證以及簽署訊息。"
+"憑證存放區收藏了憑證、憑證撤銷清單以及憑證信任清單。\n"
"\n"
-"要繼續請按下一步。"
+"請按 [下一步] 繼續。"
#: dlls/cryptui/cryptui.rc:389
msgid ""
@@ -2506,23 +2489,23 @@ msgstr "如果您選擇要匯出私鑰,將於後續頁面向您提示要求密
#: dlls/cryptui/cryptui.rc:390
msgid "Do you wish to export the private key?"
-msgstr "您要匯出私鑰嗎?"
+msgstr "您要匯出私鑰嗎?"
#: dlls/cryptui/cryptui.rc:391
msgid "&Yes, export the private key"
-msgstr "是(&Y),匯出私鑰。"
+msgstr "是,匯出私鑰(&Y)"
#: dlls/cryptui/cryptui.rc:393
msgid "N&o, do not export the private key"
-msgstr "否(&N),不要匯出私鑰。"
+msgstr "否,不要匯出私鑰(&O)"
#: dlls/cryptui/cryptui.rc:404
msgid "&Confirm password:"
-msgstr "確認密碼(&C):"
+msgstr "確認密碼(&C):"
#: dlls/cryptui/cryptui.rc:412
msgid "Select the format you want to use:"
-msgstr "請選擇您要使用的格式:"
+msgstr "請選擇您要使用的格式:"
#: dlls/cryptui/cryptui.rc:413
msgid "&DER-encoded X.509 (*.cer)"
@@ -2530,7 +2513,7 @@ msgstr "&DER-encoded X.509 (*.cer)"
#: dlls/cryptui/cryptui.rc:415
msgid "Ba&se64-encoded X.509 (*.cer):"
-msgstr "Ba&se64-encoded X.509 (*.cer):"
+msgstr "Ba&se64-encoded X.509 (*.cer):"
#: dlls/cryptui/cryptui.rc:417
msgid "&Cryptographic Message Syntax Standard/PKCS #7 Message (*.p7b)"
@@ -2562,19 +2545,15 @@ msgstr "正在完成憑證匯出精靈"
#: dlls/cryptui/cryptui.rc:446
msgid "You have successfully completed the Certificate Export Wizard."
-msgstr "您已經成功地完成憑證匯出精靈"
+msgstr "您已經成功完成憑證匯出精靈。"
#: dlls/cryptui/cryptui.rc:456 dlls/cryptui/cryptui.rc:179
-#, fuzzy
-#| msgid "Select Certificate Store"
msgid "Select Certificate"
-msgstr "選取憑證儲存處"
+msgstr "選取憑證"
#: dlls/cryptui/cryptui.rc:459
-#, fuzzy
-#| msgid "Select the certificate store you want to use:"
msgid "Select a certificate you want to use"
-msgstr "選取您要使用的憑證儲存處:"
+msgstr "選取您要使用的憑證"
#: dlls/cryptui/cryptui.rc:30 dlls/cryptui/cryptui.rc:93
msgid "Certificate"
@@ -2588,21 +2567,23 @@ msgstr "憑證資訊"
msgid ""
"This certificate has an invalid signature. The certificate may have been "
"altered or corrupted."
-msgstr "這個憑證的簽名無效。憑證也許已被改變或已損壞。"
+msgstr "這個憑證的簽章無效。憑證可能已被更改或損壞。"
#: dlls/cryptui/cryptui.rc:33
msgid ""
"This root certificate is not trusted. To trust it, add it to your system's "
"trusted root certificate store."
-msgstr "這個根憑證未被信賴。要信賴它,就將它加入您系統的信賴根憑證儲存處。"
+msgstr ""
+"這個根憑證不受信任。如果您要信任它,請將這個憑證加入到系統的"
+"受信任的根憑證存放區。"
#: dlls/cryptui/cryptui.rc:34
msgid "This certificate could not be validated to a trusted root certificate."
-msgstr "這個憑證無法被驗證為信賴的根憑證。"
+msgstr "這個憑證無法被驗證為信任的根憑證。"
#: dlls/cryptui/cryptui.rc:35
msgid "This certificate's issuer could not be found."
-msgstr "找不到這個憑證的發證者。"
+msgstr "找不到這個憑證的簽發者。"
#: dlls/cryptui/cryptui.rc:36
msgid "All the intended purposes of this certificate could not be verified."
@@ -2610,15 +2591,15 @@ msgstr "這個憑證的所有預定目的都無法被驗證。"
#: dlls/cryptui/cryptui.rc:37
msgid "This certificate is intended for the following purposes:"
-msgstr "這個憑證是適用於下列目的:"
+msgstr "這個憑證適用於下列目的:"
#: dlls/cryptui/cryptui.rc:38
msgid "Issued to: "
-msgstr "發證對象:"
+msgstr "發證給:"
#: dlls/cryptui/cryptui.rc:39
msgid "Issued by: "
-msgstr "發證來源:"
+msgstr "簽發者:"
#: dlls/cryptui/cryptui.rc:40
msgid "Valid from "
@@ -2630,7 +2611,7 @@ msgstr " 到 "
#: dlls/cryptui/cryptui.rc:42
msgid "This certificate has an invalid signature."
-msgstr "這個憑證的簽名無效。"
+msgstr "這個憑證的簽章無效。"
#: dlls/cryptui/cryptui.rc:43
msgid "This certificate has expired or is not yet valid."
@@ -2638,11 +2619,11 @@ msgstr "這個憑證已過期或尚未生效。"
#: dlls/cryptui/cryptui.rc:44
msgid "This certificate's validity period exceeds that of its issuer."
-msgstr "這個憑證的有效期限超過它的發證者。"
+msgstr "這個憑證的有效期限超過簽發者的有效期限。"
#: dlls/cryptui/cryptui.rc:45
msgid "This certificate was revoked by its issuer."
-msgstr "這個憑證已被它的發證者取消。"
+msgstr "這個憑證已被其簽發者撤銷。"
#: dlls/cryptui/cryptui.rc:46
msgid "This certificate is OK."
@@ -2667,15 +2648,15 @@ msgstr "只有版本 1 欄位"
#: dlls/cryptui/cryptui.rc:51
msgid "Extensions Only"
-msgstr "只有進階屬性"
+msgstr "只有延伸"
#: dlls/cryptui/cryptui.rc:52
msgid "Critical Extensions Only"
-msgstr "只有關鍵進階屬性"
+msgstr "只有關鍵延伸"
#: dlls/cryptui/cryptui.rc:53
msgid "Properties Only"
-msgstr "只有屬性"
+msgstr "只有內容"
#: dlls/cryptui/cryptui.rc:55
msgid "Serial number"
@@ -2724,11 +2705,11 @@ msgstr "描述"
#: dlls/cryptui/cryptui.rc:66
msgid "Certificate Properties"
-msgstr "憑證屬性"
+msgstr "憑證內容"
#: dlls/cryptui/cryptui.rc:67
msgid "Please enter an OID in the form 1.2.3.4"
-msgstr "請以 1.2.3.4 的形式輸入 OID"
+msgstr "請以 1.2.3.4 的格式輸入 OID"
#: dlls/cryptui/cryptui.rc:68
msgid "The OID you entered already exists."
@@ -2736,13 +2717,13 @@ msgstr "您輸入的 OID 已經存在。"
#: dlls/cryptui/cryptui.rc:70
msgid "Please select a certificate store."
-msgstr "請選取憑證儲存處。"
+msgstr "請選取憑證存放區。"
#: dlls/cryptui/cryptui.rc:72
msgid ""
"The file contains objects that do not match the given criteria. Please "
"select another file."
-msgstr "檔案含有不匹配給定準則的物件。請選取另一個檔案。"
+msgstr "檔案含有不符合指定條件的物件。請選取另一個檔案。"
#: dlls/cryptui/cryptui.rc:73
msgid "File to Import"
@@ -2754,13 +2735,13 @@ msgstr "指定您要匯入的檔案。"
#: dlls/cryptui/cryptui.rc:75 dlls/cryptui/cryptui.rc:98
msgid "Certificate Store"
-msgstr "憑證儲存處"
+msgstr "憑證存放區"
#: dlls/cryptui/cryptui.rc:76
msgid ""
"Certificate stores are collections of certificates, certificate revocation "
"lists, and certificate trust lists."
-msgstr "憑證儲存處收藏了憑證、憑證撤銷清單以及憑證信賴清單。"
+msgstr "憑證存放區收藏了憑證、憑證撤銷清單以及憑證信任清單。"
#: dlls/cryptui/cryptui.rc:77
msgid "X.509 Certificate (*.cer; *.crt)"
@@ -2776,7 +2757,7 @@ msgstr "憑證撤銷清單 (*.crl)"
#: dlls/cryptui/cryptui.rc:80 dlls/cryptui/cryptui.rc:159
msgid "Certificate Trust List (*.stl)"
-msgstr "憑證信賴清單 (*.stl)"
+msgstr "憑證信任清單 (*.stl)"
#: dlls/cryptui/cryptui.rc:82
msgid "CMS/PKCS #7 Messages (*.spc; *.p7b)"
@@ -2800,11 +2781,11 @@ msgstr "由程式所決定"
#: dlls/cryptui/cryptui.rc:88
msgid "Please select a store"
-msgstr "請選取儲存處"
+msgstr "請選取存放區"
#: dlls/cryptui/cryptui.rc:89
msgid "Certificate Store Selected"
-msgstr "憑證儲存處已選"
+msgstr "已選取憑證存放區"
#: dlls/cryptui/cryptui.rc:90
msgid "Automatically determined by the program"
@@ -2832,7 +2813,7 @@ msgstr "個人資訊交換"
#: dlls/cryptui/cryptui.rc:99
msgid "The import was successful."
-msgstr "已成功匯入。"
+msgstr "匯入成功。"
#: dlls/cryptui/cryptui.rc:100
msgid "The import failed."
@@ -2848,15 +2829,15 @@ msgstr "<進階目的>"
#: dlls/cryptui/cryptui.rc:104
msgid "Issued To"
-msgstr "發證對象"
+msgstr "發證給"
#: dlls/cryptui/cryptui.rc:105
msgid "Issued By"
-msgstr "發證來源"
+msgstr "簽發者"
#: dlls/cryptui/cryptui.rc:106 dlls/wininet/wininet.rc:36
msgid "Expiration Date"
-msgstr "過期日期"
+msgstr "到期日期"
#: dlls/cryptui/cryptui.rc:107
msgid "Friendly Name"
@@ -2873,7 +2854,7 @@ msgid ""
"Are you sure you want to remove this certificate?"
msgstr ""
"您將不能再以這個憑證解密訊息,或用它簽署訊息。\n"
-"確定要移除這個憑證?"
+"確定要移除這個憑證?"
#: dlls/cryptui/cryptui.rc:111
msgid ""
@@ -2882,7 +2863,7 @@ msgid ""
"Are you sure you want to remove these certificates?"
msgstr ""
"您將不能再以這些憑證解密訊息,或用它們簽署訊息。\n"
-"確定要移除這些憑證?"
+"確定要移除這些憑證?"
#: dlls/cryptui/cryptui.rc:112
msgid ""
@@ -2891,21 +2872,16 @@ msgid ""
"Are you sure you want to remove this certificate?"
msgstr ""
"您將不能再以這個憑證加密訊息,或驗證以它簽署的訊息。\n"
-"確定要移除這個憑證?"
+"確定要移除這個憑證?"
#: dlls/cryptui/cryptui.rc:113
-#, fuzzy
-#| msgid ""
-#| "You will no longer be able to encrypt messages with these certificates, "
-#| "or verify messages signed with it.\n"
-#| "Are you sure you want to remove these certificates?"
msgid ""
"You will no longer be able to encrypt messages with these certificates, or "
"verify messages signed with them.\n"
"Are you sure you want to remove these certificates?"
msgstr ""
"您將不能再以這些憑證加密訊息,或驗證以它們簽署的訊息。\n"
-"確定要移除這些憑證?"
+"確定要移除這些憑證?"
#: dlls/cryptui/cryptui.rc:114
msgid ""
@@ -2913,8 +2889,8 @@ msgid ""
"trusted.\n"
"Are you sure you want to remove this certificate?"
msgstr ""
-"由這個憑證授權者所發的憑證將不再被信賴。\n"
-"確定要移除這個憑證?"
+"由這個憑證授權單位所發的憑證將不再被信任。\n"
+"確定要移除這個憑證?"
#: dlls/cryptui/cryptui.rc:115
msgid ""
@@ -2922,8 +2898,8 @@ msgid ""
"trusted.\n"
"Are you sure you want to remove these certificates?"
msgstr ""
-"由這些憑證授權者所發的憑證將不再被信賴。\n"
-"確定要移除這些憑證?"
+"由這些憑證授權單位所發的憑證將不再被信任。\n"
+"確定要移除這些憑證?"
#: dlls/cryptui/cryptui.rc:116
msgid ""
@@ -2931,8 +2907,8 @@ msgid ""
"certification authorities it issued, will no longer be trusted.\n"
"Are you sure you want to remove this trusted root certificate?"
msgstr ""
-"由這個憑證授權者所發的憑證,或是任何由它發證的憑證授權者,將不再被信賴。\n"
-"確定要移除這個信賴的根憑證?"
+"由這個憑證授權單位所發的憑證或憑證授權單位將不再被信任。\n"
+"確定要移除這個信任的根憑證?"
#: dlls/cryptui/cryptui.rc:117
msgid ""
@@ -2940,36 +2916,36 @@ msgid ""
"certification authorities they issued, will no longer be trusted.\n"
"Are you sure you want to remove these trusted root certificates?"
msgstr ""
-"由這些憑證授權者所發的憑證,或是任何由它們發證的憑證授權者,將不再被信賴。\n"
-"確定要移除這些信賴的根憑證?"
+"由這些憑證授權單位所發的憑證或憑證授權單位將不再被信任。\n"
+"確定要移除這些信任的根憑證?"
#: dlls/cryptui/cryptui.rc:118
msgid ""
"Software signed by this publisher will no longer be trusted.\n"
"Are you sure you want to remove this certificate?"
msgstr ""
-"由這個發行者簽署的軟體將不再被信賴。\n"
-"確定要移除這個憑證?"
+"由這個發行者簽署的軟體將將不再被信任。\n"
+"確定要移除這個憑證?"
#: dlls/cryptui/cryptui.rc:119
msgid ""
"Software signed by these publishers will no longer be trusted.\n"
"Are you sure you want to remove these certificates?"
msgstr ""
-"由這些發行者簽署的軟體將不再被信賴。\n"
-"確定要移除這些憑證?"
+"由這些發行者簽署的軟體將不再被信任。\n"
+"確定要移除這些憑證?"
#: dlls/cryptui/cryptui.rc:120
msgid "Are you sure you want to remove this certificate?"
-msgstr "確定要移除這個憑證?"
+msgstr "確定要移除這個憑證?"
#: dlls/cryptui/cryptui.rc:121
msgid "Are you sure you want to remove these certificates?"
-msgstr "確定要移除這些憑證?"
+msgstr "確定要移除這些憑證?"
#: dlls/cryptui/cryptui.rc:124
msgid "Ensures the identity of a remote computer"
-msgstr "確保遠端電腦的身分"
+msgstr "確認遠端電腦的身分"
#: dlls/cryptui/cryptui.rc:125
msgid "Proves your identity to a remote computer"
@@ -2980,8 +2956,8 @@ msgid ""
"Ensures software came from software publisher\n"
"Protects software from alteration after publication"
msgstr ""
-"請確認軟體是來自軟體發行者\n"
-"保護軟體以避免發行之後的變更"
+"確認軟體是來自軟體發行者\n"
+"確保軟體在發行之後未被修改"
#: dlls/cryptui/cryptui.rc:127
msgid "Protects e-mail messages"
@@ -2997,15 +2973,15 @@ msgstr "允許以目前的時間簽署資料"
#: dlls/cryptui/cryptui.rc:130
msgid "Allows you to digitally sign a certificate trust list"
-msgstr "允許您數位簽署憑證信賴清單"
+msgstr "允許您數位簽署憑證信任清單"
#: dlls/cryptui/cryptui.rc:131
msgid "Allows data on disk to be encrypted"
-msgstr "允許磁碟上的資料被加密"
+msgstr "允許加密磁碟上的資料"
#: dlls/cryptui/cryptui.rc:147
msgid "Private Key Archival"
-msgstr "私鑰檔案的"
+msgstr "私鑰檔案封存"
#: dlls/cryptui/cryptui.rc:151
msgid "Export Format"
@@ -3017,7 +2993,7 @@ msgstr "選擇將用來儲存內容的格式。"
#: dlls/cryptui/cryptui.rc:153
msgid "Export Filename"
-msgstr "匯出檔名"
+msgstr "匯出檔案名稱"
#: dlls/cryptui/cryptui.rc:154
msgid "Specify the name of the file in which the content will be saved."
@@ -3025,7 +3001,7 @@ msgstr "指定將會儲存內容的檔案名稱。"
#: dlls/cryptui/cryptui.rc:155
msgid "The specified file already exists. Do you want to replace it?"
-msgstr "檔案已經存在。您要取代嗎?"
+msgstr "檔案已經存在。您要取代它嗎?"
#: dlls/cryptui/cryptui.rc:156
msgid "DER-Encoded Binary X.509 (*.cer)"
@@ -3057,7 +3033,7 @@ msgstr "匯出密鑰"
#: dlls/cryptui/cryptui.rc:168
msgid "The export was successful."
-msgstr "已成功匯出。"
+msgstr "匯出成功。"
#: dlls/cryptui/cryptui.rc:169
msgid "The export failed."
@@ -3079,35 +3055,31 @@ msgstr "輸入密碼"
#: dlls/cryptui/cryptui.rc:173
msgid "You may password-protect a private key."
-msgstr "您可以以密碼保護私鑰。"
+msgstr "您可以使用密碼來保護私鑰。"
#: dlls/cryptui/cryptui.rc:174
msgid "The passwords do not match."
-msgstr "密碼不匹配。"
+msgstr "密碼不相符。"
#: dlls/cryptui/cryptui.rc:175
msgid "Note: The private key for this certificate could not be opened."
-msgstr "註記:用於這個憑證的私鑰無法開啟。"
+msgstr "註記: 用於這個憑證的私鑰無法開啟。"
#: dlls/cryptui/cryptui.rc:176
msgid "Note: The private key for this certificate is not exportable."
-msgstr "註記:用於這個憑證的私鑰不可匯出。"
+msgstr "註記: 用於這個憑證的私鑰不可匯出。"
#: dlls/cryptui/cryptui.rc:177
-#, fuzzy
-#| msgid "I&ntended purpose:"
msgid "Intended Use"
-msgstr "預定目的(&N):"
+msgstr "預定目的"
#: dlls/cryptui/cryptui.rc:178 dlls/shell32/shell32.rc:150
msgid "Location"
msgstr "位置"
#: dlls/cryptui/cryptui.rc:180
-#, fuzzy
-#| msgid "Select Certificate Store"
msgid "Select a certificate"
-msgstr "選取憑證儲存處"
+msgstr "選取憑證"
#: dlls/cryptui/cryptui.rc:181 programs/winefile/winefile.rc:101
#: programs/winhlp32/winhlp32.rc:110 programs/winhlp32/winhlp32.rc:85
@@ -3120,11 +3092,11 @@ msgstr "裝置設定"
#: dlls/dinput/dinput.rc:39
msgid "Reset"
-msgstr "重置"
+msgstr "重設"
#: dlls/dinput/dinput.rc:42
msgid "Player"
-msgstr "玩家"
+msgstr "播放器"
#: dlls/dinput/dinput.rc:43 programs/winecfg/winecfg.rc:88
msgid "Device"
@@ -3136,7 +3108,7 @@ msgstr "動作"
#: dlls/dinput/dinput.rc:45
msgid "Mapping"
-msgstr "映射"
+msgstr "對應"
#: dlls/dinput/dinput.rc:47
msgid "Show Assigned First"
@@ -3188,7 +3160,7 @@ msgstr "阿拉伯語"
#: dlls/gdi32/gdi32.rc:35
msgid "Baltic"
-msgstr "波羅的海語"
+msgstr "波羅的海語言"
#: dlls/gdi32/gdi32.rc:36
msgid "Vietnamese"
@@ -3204,19 +3176,19 @@ msgstr "日語"
#: dlls/gdi32/gdi32.rc:39
msgid "CHINESE_GB2312"
-msgstr "簡化字漢語"
+msgstr "中文 (GB2312)"
#: dlls/gdi32/gdi32.rc:40
msgid "Hangul"
-msgstr "韓語諺文"
+msgstr "韓語"
#: dlls/gdi32/gdi32.rc:41
msgid "CHINESE_BIG5"
-msgstr "傳統字漢語"
+msgstr "中文 (BIG5)"
#: dlls/gdi32/gdi32.rc:42
msgid "Hangul(Johab)"
-msgstr "韓語諺文(組合型)"
+msgstr "韓語 (Johab)"
#: dlls/gdi32/gdi32.rc:43
msgid "Symbol"
@@ -3237,7 +3209,7 @@ msgstr "照相機中的檔案"
#: dlls/gphoto2.ds/gphoto2.rc:34
msgid "Import Selected"
-msgstr "匯入選擇的檔案"
+msgstr "匯入已選取檔案"
#: dlls/gphoto2.ds/gphoto2.rc:35
msgid "Preview"
@@ -3265,7 +3237,7 @@ msgstr "正在傳輸... 請稍候"
#: dlls/gphoto2.ds/gphoto2.rc:51
msgid "Connecting to camera"
-msgstr "連接照相機"
+msgstr "正在連接照相機"
#: dlls/gphoto2.ds/gphoto2.rc:55
msgid "Connecting to camera... Please Wait"
@@ -3278,11 +3250,11 @@ msgstr "同步(&Y)"
#: dlls/hhctrl.ocx/hhctrl.rc:60 dlls/hhctrl.ocx/hhctrl.rc:73
#: dlls/shdoclc/shdoclc.rc:41 programs/winhlp32/winhlp32.rc:89
msgid "&Back"
-msgstr "返回(&B)"
+msgstr "上一頁(&B)"
#: dlls/hhctrl.ocx/hhctrl.rc:61 dlls/hhctrl.ocx/hhctrl.rc:74
msgid "&Forward"
-msgstr "向前"
+msgstr "下一頁(&F)"
#: dlls/hhctrl.ocx/hhctrl.rc:62
msgctxt "table of contents"
@@ -3314,10 +3286,8 @@ msgid "&View Source"
msgstr "檢視原始碼(&V)"
#: dlls/hhctrl.ocx/hhctrl.rc:83
-#, fuzzy
-#| msgid "Properties"
msgid "Proper&ties"
-msgstr "屬性"
+msgstr "內容(&T)"
#: dlls/hhctrl.ocx/hhctrl.rc:87 dlls/shdoclc/shdoclc.rc:79
#: dlls/shdoclc/shdoclc.rc:93 dlls/shdoclc/shdoclc.rc:117
@@ -3388,7 +3358,7 @@ msgstr "重新整理"
#: dlls/hhctrl.ocx/hhctrl.rc:46 dlls/ieframe/ieframe.rc:66
msgid "Back"
-msgstr "返回"
+msgstr "上一頁"
#: dlls/hhctrl.ocx/hhctrl.rc:47
msgctxt "table of contents"
@@ -3406,7 +3376,7 @@ msgstr "選項"
#: dlls/hhctrl.ocx/hhctrl.rc:51 dlls/ieframe/ieframe.rc:67
msgid "Forward"
-msgstr "向前"
+msgstr "下一頁"
#: dlls/iccvid/iccvid.rc:28 dlls/iccvid/iccvid.rc:29
msgid "Cinepak Video codec"
@@ -3438,7 +3408,7 @@ msgstr "開啟(&O)..."
#: dlls/ieframe/ieframe.rc:36 programs/notepad/notepad.rc:33
#: programs/wordpad/wordpad.rc:34
msgid "Save &as..."
-msgstr "另存為(&A)..."
+msgstr "另存新檔(&A)..."
#: dlls/ieframe/ieframe.rc:38
msgid "Print &format..."
@@ -3478,7 +3448,7 @@ msgstr "關於 Internet Explorer(&A)"
#: dlls/ieframe/ieframe.rc:90
msgid "Open URL"
-msgstr "開啟連結(&O)"
+msgstr "開啟連結"
#: dlls/ieframe/ieframe.rc:93
msgid "Specify the URL you wish to open in Internet Explorer"
@@ -3486,7 +3456,7 @@ msgstr "指定您希望在 Internet Explorer 中開啟的網址"
#: dlls/ieframe/ieframe.rc:94
msgid "Open:"
-msgstr "開啟:"
+msgstr "開啟:"
#: dlls/ieframe/ieframe.rc:70
msgctxt "home page"
@@ -3539,11 +3509,11 @@ msgstr "空白頁面(&B)"
#: dlls/inetcpl.cpl/inetcpl.rc:56
msgid "Browsing history"
-msgstr "瀏覽歷程"
+msgstr "瀏覽歷程記錄"
#: dlls/inetcpl.cpl/inetcpl.rc:57
msgid "You can delete cached pages, cookies and other data."
-msgstr "您可以刪除網頁快取、訊餅和其他資料。"
+msgstr "您可以刪除網頁快取、Cookie 以及其他資料。"
#: dlls/inetcpl.cpl/inetcpl.rc:59
msgid "Delete &files..."
@@ -3555,7 +3525,7 @@ msgstr "設定(&S)..."
#: dlls/inetcpl.cpl/inetcpl.rc:68
msgid "Delete browsing history"
-msgstr "刪除瀏覽歷程"
+msgstr "刪除瀏覽歷程記錄"
#: dlls/inetcpl.cpl/inetcpl.rc:71
msgid ""
@@ -3571,7 +3541,7 @@ msgid ""
"Files saved on your computer by websites, which store things like user "
"preferences and login information."
msgstr ""
-"訊餅\n"
+"Cookies\n"
"由網站儲存於您電腦的檔案,其存有諸如使用者偏好設定和登入資訊。"
#: dlls/inetcpl.cpl/inetcpl.rc:75
@@ -3579,7 +3549,7 @@ msgid ""
"History\n"
"List of websites you have accessed."
msgstr ""
-"歷程\n"
+"歷程記錄\n"
"您曾存取過的網站清單。"
#: dlls/inetcpl.cpl/inetcpl.rc:77
@@ -3606,7 +3576,7 @@ msgstr "刪除"
msgid ""
"Certificates are used for your personal identification and to identify "
"certificate authorities and publishers."
-msgstr "憑證是做為您的個人識別,以及識別憑證授權機構和發行者。"
+msgstr "憑證是用於您的個人識別,以及識別憑證授權單位和發行者。"
#: dlls/inetcpl.cpl/inetcpl.rc:114
msgid "Certificates..."
@@ -3617,46 +3587,36 @@ msgid "Publishers..."
msgstr "發行者..."
#: dlls/inetcpl.cpl/inetcpl.rc:123
-#, fuzzy
-#| msgid "LAN Connection"
msgid "Connections"
-msgstr "區域網路連線"
+msgstr "連線"
#: dlls/inetcpl.cpl/inetcpl.rc:125
-#, fuzzy
-#| msgid "Wine configuration"
msgid "Automatic configuration"
-msgstr "Wine 設定"
+msgstr "自動設定"
#: dlls/inetcpl.cpl/inetcpl.rc:126
msgid "Use Web Proxy Auto-Discovery (WPAD)"
-msgstr ""
+msgstr "使用 Web Proxy Auto-Discovery (WPAD)"
#: dlls/inetcpl.cpl/inetcpl.rc:127
msgid "Use Proxy Auto-Config (PAC) script"
-msgstr ""
+msgstr "使用 Proxy Auto-Config (PAC) 指令碼"
#: dlls/inetcpl.cpl/inetcpl.rc:128 dlls/inetcpl.cpl/inetcpl.rc:132
-#, fuzzy
-#| msgid "Address"
msgid "Address:"
-msgstr "位址"
+msgstr "位址:"
#: dlls/inetcpl.cpl/inetcpl.rc:130
-#, fuzzy
-#| msgid "&Local server"
msgid "Proxy server"
-msgstr "本機伺服器(&L)"
+msgstr "代理伺服器"
#: dlls/inetcpl.cpl/inetcpl.rc:131
msgid "Use a proxy server"
-msgstr ""
+msgstr "使用代理伺服器"
#: dlls/inetcpl.cpl/inetcpl.rc:134
-#, fuzzy
-#| msgid "No Ports"
msgid "Port:"
-msgstr "無連接埠"
+msgstr "連接埠:"
#: dlls/inetcpl.cpl/inetcpl.rc:31
msgid "Internet Settings"
@@ -3668,7 +3628,7 @@ msgstr "設定 Wine 網際網路瀏覽器和相關的設定。"
#: dlls/inetcpl.cpl/inetcpl.rc:33
msgid "Security settings for zone: "
-msgstr "區域的安全設定:"
+msgstr "此區域的安全設定:"
#: dlls/inetcpl.cpl/inetcpl.rc:34
msgid "Custom"
@@ -3680,7 +3640,7 @@ msgstr "非常低"
#: dlls/inetcpl.cpl/inetcpl.rc:36 dlls/wininet/wininet.rc:42
msgid "Low"
-msgstr "慢"
+msgstr "低"
#: dlls/inetcpl.cpl/inetcpl.rc:37
msgid "Medium"
@@ -3688,7 +3648,7 @@ msgstr "中"
#: dlls/inetcpl.cpl/inetcpl.rc:38
msgid "Increased"
-msgstr "已增加"
+msgstr "稍高"
#: dlls/inetcpl.cpl/inetcpl.rc:39 dlls/wininet/wininet.rc:41
msgid "High"
@@ -3703,30 +3663,24 @@ msgid "&Disable"
msgstr "停用(&D)"
#: dlls/joy.cpl/joy.rc:41
-#, fuzzy
-#| msgid "Reset"
msgid "&Reset"
-msgstr "重置"
+msgstr "重設(&R)"
#: dlls/joy.cpl/joy.rc:42
msgid "&Enable"
msgstr "啟用(&E)"
#: dlls/joy.cpl/joy.rc:43
-#, fuzzy
-#| msgid "Edit Override"
msgid "&Override"
-msgstr "編輯覆載設定"
+msgstr "覆寫(&O)"
#: dlls/joy.cpl/joy.rc:44
msgid "Connected"
-msgstr "已連線"
+msgstr "已連接"
#: dlls/joy.cpl/joy.rc:46
-#, fuzzy
-#| msgid "Voice input device:"
msgid "Connected (xinput device)"
-msgstr "語音輸入裝置:"
+msgstr "已連接 (xinput 裝置)"
#: dlls/joy.cpl/joy.rc:48
msgid "Disabled"
@@ -3736,7 +3690,7 @@ msgstr "已停用"
msgid ""
"After disabling or enabling a device, the connected joysticks won't be "
"updated here until you restart this applet."
-msgstr "停用或啟用裝置之後,已連線的搖桿將無法更新,直到您重新啟動這個小程式。"
+msgstr "停用或啟用裝置之後,已連接的搖桿將無法更新,直到您重新啟動這個程式。"
#: dlls/joy.cpl/joy.rc:55
msgid "Test Joystick"
@@ -3759,8 +3713,8 @@ msgid ""
"Press any button in the controller to activate the chosen effect. The effect "
"direction can be changed with the controller axis."
msgstr ""
-"請按下控制器中的任何按鈕以啟用所選的效果。效果的方向可以利用控制器的軸向來變"
-"更。"
+"請按下控制器中的任何按鈕以啟用所選的效果。"
+"效果的方向可以利用控制器的軸向來變更。"
#: dlls/joy.cpl/joy.rc:31
msgid "Game Controllers"
@@ -3768,7 +3722,7 @@ msgstr "遊戲控制器"
#: dlls/joy.cpl/joy.rc:32
msgid "Test and configure game controllers."
-msgstr ""
+msgstr "測試和設定遊戲控制器。"
#: dlls/jscript/jscript.rc:28
msgid "Error converting object to primitive type"
@@ -3783,10 +3737,8 @@ msgid "Subscript out of range"
msgstr "註標超出範圍"
#: dlls/jscript/jscript.rc:31
-#, fuzzy
-#| msgid "Out of paper; "
msgid "Out of stack space"
-msgstr "無紙;"
+msgstr "堆疊空間不足"
#: dlls/jscript/jscript.rc:32
msgid "Object required"
@@ -3802,7 +3754,7 @@ msgstr "物件不支援這個屬性或方法"
#: dlls/jscript/jscript.rc:35 dlls/vbscript/vbscript.rc:50
msgid "Object doesn't support this action"
-msgstr "物件不支援此動作"
+msgstr "物件不支援這個動作"
#: dlls/jscript/jscript.rc:36
msgid "Argument not optional"
@@ -3814,27 +3766,23 @@ msgstr "語法錯誤"
#: dlls/jscript/jscript.rc:38
msgid "Expected ';'"
-msgstr "預期為 ;"
+msgstr "預期為 ';'"
#: dlls/jscript/jscript.rc:39
msgid "Expected '('"
-msgstr "預期為 ("
+msgstr "預期為 '('"
#: dlls/jscript/jscript.rc:40
msgid "Expected ')'"
-msgstr "預期為 )"
+msgstr "預期為 ')'"
#: dlls/jscript/jscript.rc:41
-#, fuzzy
-#| msgid "Subject Key Identifier"
msgid "Expected identifier"
-msgstr "主體金鑰識別碼"
+msgstr "預期為識別碼"
#: dlls/jscript/jscript.rc:42
-#, fuzzy
-#| msgid "Expected ';'"
msgid "Expected '='"
-msgstr "預期為 ;"
+msgstr "預期為 '='"
#: dlls/jscript/jscript.rc:43
msgid "Invalid character"
@@ -3846,15 +3794,15 @@ msgstr "未終結的字串常數"
#: dlls/jscript/jscript.rc:45
msgid "'return' statement outside of function"
-msgstr "return 敘述位於函式之外"
+msgstr "'return' 敘述位於函式之外"
#: dlls/jscript/jscript.rc:46
msgid "Can't have 'break' outside of loop"
-msgstr "在迴圈之外不可有 break"
+msgstr "在迴圈之外不可有 'break'"
#: dlls/jscript/jscript.rc:47
msgid "Can't have 'continue' outside of loop"
-msgstr "在迴圈之外不可有 continue"
+msgstr "在迴圈之外不可有 'continue'"
#: dlls/jscript/jscript.rc:48
msgid "Label redefined"
@@ -3865,38 +3813,32 @@ msgid "Label not found"
msgstr "找不到標貼"
#: dlls/jscript/jscript.rc:50
-#, fuzzy
-#| msgid "Expected ';'"
msgid "Expected '@end'"
-msgstr "預期為 ;"
+msgstr "預期為 '@end'"
#: dlls/jscript/jscript.rc:51
msgid "Conditional compilation is turned off"
-msgstr "條件編譯已被關閉"
+msgstr "條件編譯已關閉"
#: dlls/jscript/jscript.rc:52
-#, fuzzy
-#| msgid "Expected ';'"
msgid "Expected '@'"
-msgstr "預期為 ;"
+msgstr "預期為 '@'"
#: dlls/jscript/jscript.rc:80
msgid "Microsoft JScript compilation error"
-msgstr ""
+msgstr "Microsoft JScript 編譯錯誤"
#: dlls/jscript/jscript.rc:81
msgid "Microsoft JScript runtime error"
-msgstr ""
+msgstr "Microsoft JScript 執行期錯誤"
#: dlls/jscript/jscript.rc:82 dlls/vbscript/vbscript.rc:64
-#, fuzzy
-#| msgid "Unknown error"
msgid "Unknown runtime error"
-msgstr "未知錯誤"
+msgstr "不明執行期錯誤"
#: dlls/jscript/jscript.rc:55
msgid "Number expected"
-msgstr "預期為編號"
+msgstr "預期為數字"
#: dlls/jscript/jscript.rc:53
msgid "Function expected"
@@ -3904,7 +3846,7 @@ msgstr "預期為函式"
#: dlls/jscript/jscript.rc:54
msgid "'[object]' is not a date object"
-msgstr "[object] 並非日期物件"
+msgstr "'[object]' 並非日期物件"
#: dlls/jscript/jscript.rc:56
msgid "Object expected"
@@ -3916,11 +3858,11 @@ msgstr "不合法的指派"
#: dlls/jscript/jscript.rc:58
msgid "'|' is undefined"
-msgstr "| 未定義"
+msgstr "'|' 未定義"
#: dlls/jscript/jscript.rc:59
msgid "Boolean object expected"
-msgstr "預期為布林物件"
+msgstr "預期為布林值物件"
#: dlls/jscript/jscript.rc:60
msgid "Cannot delete '|'"
@@ -3935,16 +3877,12 @@ msgid "JScript object expected"
msgstr "預期為 JScript 物件"
#: dlls/jscript/jscript.rc:63
-#, fuzzy
-#| msgid "Array object expected"
msgid "Enumerator object expected"
-msgstr "預期為陣列物件"
+msgstr "預期為列舉器物件"
#: dlls/jscript/jscript.rc:64
-#, fuzzy
-#| msgid "Boolean object expected"
msgid "Regular Expression object expected"
-msgstr "預期為布林物件"
+msgstr "預期為正規表示式"
#: dlls/jscript/jscript.rc:65
msgid "Syntax error in regular expression"
@@ -3952,7 +3890,7 @@ msgstr "正規表示式語法發生錯誤"
#: dlls/jscript/jscript.rc:66
msgid "Exception thrown and not caught"
-msgstr ""
+msgstr "發生異常且未被捕捉"
#: dlls/jscript/jscript.rc:68
msgid "URI to be encoded contains invalid characters"
@@ -3982,33 +3920,31 @@ msgstr "預期為陣列物件"
msgid ""
"'writable' attribute on the property descriptor cannot be set to 'true' on "
"this object"
-msgstr ""
+msgstr "無法在這個物件更改屬性描述符中的 'writable' 屬性為 'true'"
#: dlls/jscript/jscript.rc:74
msgid "Cannot define property '|': object is not extensible"
-msgstr ""
+msgstr "無法定義屬性 '|': 物件不能擴展"
#: dlls/jscript/jscript.rc:75
msgid "Cannot redefine non-configurable property '|'"
-msgstr ""
+msgstr "無法重新定義不可設定的屬性 '|'"
#: dlls/jscript/jscript.rc:76
msgid "Cannot modify non-writable property '|'"
-msgstr ""
+msgstr "無法修改不可寫入的屬性 '|'"
#: dlls/jscript/jscript.rc:77
-#, fuzzy
-#| msgid "'[object]' is not a date object"
msgid "'this' is not a Map object"
-msgstr "[object] 並非日期物件"
+msgstr "'this' 不是 Map 物件"
#: dlls/jscript/jscript.rc:78
msgid "Property cannot have both accessors and a value"
-msgstr ""
+msgstr "屬性不可同時有存取子和值"
#: include/wine/wine_common_ver.rc:129
msgid "Wine kernel DLL"
-msgstr ""
+msgstr "Wine 核心 DLL"
#: include/wine/wine_common_ver.rc:134 dlls/winemac.drv/winemac.rc:32
#: programs/wineboot/wineboot.rc:42 programs/winecfg/winecfg.rc:137
@@ -4041,7 +3977,7 @@ msgstr "存取被拒。\n"
#: dlls/kernel32/winerror.mc:58
msgid "Invalid handle.\n"
-msgstr "無效的控柄。\n"
+msgstr "無效的控制代碼。\n"
#: dlls/kernel32/winerror.mc:63
msgid "Memory trashed.\n"
@@ -4057,11 +3993,11 @@ msgstr "無效的區塊。\n"
#: dlls/kernel32/winerror.mc:78
msgid "Bad environment.\n"
-msgstr "不當的環境。\n"
+msgstr "不良的環境。\n"
#: dlls/kernel32/winerror.mc:83
msgid "Bad format.\n"
-msgstr "不當的格式。\n"
+msgstr "錯誤的格式。\n"
#: dlls/kernel32/winerror.mc:88
msgid "Invalid access.\n"
@@ -4081,7 +4017,7 @@ msgstr "無效的儲存裝置。\n"
#: dlls/kernel32/winerror.mc:108
msgid "Can't delete current directory.\n"
-msgstr "無法刪除現行目錄。\n"
+msgstr "無法刪除目前的目錄。\n"
#: dlls/kernel32/winerror.mc:113
msgid "Not same device.\n"
@@ -4089,15 +4025,15 @@ msgstr "並非相同裝置。\n"
#: dlls/kernel32/winerror.mc:118
msgid "No more files.\n"
-msgstr "沒有檔案了。\n"
+msgstr "沒有更多檔案。\n"
#: dlls/kernel32/winerror.mc:123
msgid "Write protected.\n"
-msgstr "防止寫入的。\n"
+msgstr "已設定寫入保護。\n"
#: dlls/kernel32/winerror.mc:128
msgid "Bad unit.\n"
-msgstr "不當的單位。\n"
+msgstr "錯誤的單位。\n"
#: dlls/kernel32/winerror.mc:133
msgid "Not ready.\n"
@@ -4105,7 +4041,7 @@ msgstr "未就緒。\n"
#: dlls/kernel32/winerror.mc:138
msgid "Bad command.\n"
-msgstr "不當的命令。\n"
+msgstr "錯誤的命令。\n"
#: dlls/kernel32/winerror.mc:143
msgid "CRC error.\n"
@@ -4113,7 +4049,7 @@ msgstr "循環冗餘檢查錯誤。\n"
#: dlls/kernel32/winerror.mc:148
msgid "Bad length.\n"
-msgstr "不當長度。\n"
+msgstr "長度錯誤。\n"
#: dlls/kernel32/winerror.mc:153 dlls/kernel32/winerror.mc:528
msgid "Seek error.\n"
@@ -4181,7 +4117,7 @@ msgstr "重複的網路名稱。\n"
#: dlls/kernel32/winerror.mc:233
msgid "Bad network path.\n"
-msgstr "不當的網路路徑。\n"
+msgstr "錯誤的網路路徑。\n"
#: dlls/kernel32/winerror.mc:238
msgid "Network busy.\n"
@@ -4197,11 +4133,11 @@ msgstr "太多命令。\n"
#: dlls/kernel32/winerror.mc:253
msgid "Adapter hardware error.\n"
-msgstr "調適器硬體錯誤。\n"
+msgstr "介面卡硬體錯誤。\n"
#: dlls/kernel32/winerror.mc:258
msgid "Bad network response.\n"
-msgstr "不當的網路回應。\n"
+msgstr "不良的網路回應。\n"
#: dlls/kernel32/winerror.mc:263
msgid "Unexpected network error.\n"
@@ -4209,7 +4145,7 @@ msgstr "未預期的網路錯誤。\n"
#: dlls/kernel32/winerror.mc:268
msgid "Bad remote adapter.\n"
-msgstr "不當的遠端調適器。\n"
+msgstr "不良的遠端介面卡。\n"
#: dlls/kernel32/winerror.mc:273
msgid "Print queue full.\n"
@@ -4233,11 +4169,11 @@ msgstr "存取網路被拒絕。\n"
#: dlls/kernel32/winerror.mc:298
msgid "Bad device type.\n"
-msgstr "不當的裝置類型。\n"
+msgstr "錯誤的裝置類型。\n"
#: dlls/kernel32/winerror.mc:303
msgid "Bad network name.\n"
-msgstr "不當的網路名稱。\n"
+msgstr "錯誤的網路名稱。\n"
#: dlls/kernel32/winerror.mc:308
msgid "Too many network names.\n"
@@ -4245,7 +4181,7 @@ msgstr "太多網路名稱。\n"
#: dlls/kernel32/winerror.mc:313
msgid "Too many network sessions.\n"
-msgstr "太多網路執行期間。\n"
+msgstr "太多網路工作階段。\n"
#: dlls/kernel32/winerror.mc:318
msgid "Sharing paused.\n"
@@ -4293,23 +4229,23 @@ msgstr "網路寫入錯誤。\n"
#: dlls/kernel32/winerror.mc:373
msgid "No process slots.\n"
-msgstr "沒有行程插槽。\n"
+msgstr "沒有線程插槽。\n"
#: dlls/kernel32/winerror.mc:378
msgid "Too many semaphores.\n"
-msgstr "太多號誌。\n"
+msgstr "太多旗號。\n"
#: dlls/kernel32/winerror.mc:383
msgid "Exclusive semaphore already owned.\n"
-msgstr "已擁有互斥號誌。\n"
+msgstr "已擁有專屬旗號。\n"
#: dlls/kernel32/winerror.mc:388
msgid "Semaphore is set.\n"
-msgstr "已設定號誌。\n"
+msgstr "已設定旗號。\n"
#: dlls/kernel32/winerror.mc:393
msgid "Too many semaphore requests.\n"
-msgstr "太多號誌要求。\n"
+msgstr "太多旗號要求。\n"
#: dlls/kernel32/winerror.mc:398
msgid "Invalid at interrupt time.\n"
@@ -4317,11 +4253,11 @@ msgstr "於插斷時間無效。\n"
#: dlls/kernel32/winerror.mc:403
msgid "Semaphore owner died.\n"
-msgstr "號誌擁有者已死。\n"
+msgstr "旗號擁有者已終止。\n"
#: dlls/kernel32/winerror.mc:408
msgid "Semaphore user limit.\n"
-msgstr "號誌使用者限制。\n"
+msgstr "旗號使用者限制。\n"
#: dlls/kernel32/winerror.mc:413
msgid "Insert disk for drive %1.\n"
@@ -4329,7 +4265,7 @@ msgstr "插入磁碟於儲存裝置 %1。\n"
#: dlls/kernel32/winerror.mc:418
msgid "Drive locked.\n"
-msgstr "已鎖定儲存裝置。\n"
+msgstr "儲存裝置已鎖定。\n"
#: dlls/kernel32/winerror.mc:423
msgid "Broken pipe.\n"
@@ -4345,11 +4281,11 @@ msgstr "緩衝區溢位。\n"
#: dlls/kernel32/winerror.mc:443
msgid "No more search handles.\n"
-msgstr "沒有搜尋控柄了。\n"
+msgstr "沒有更多搜尋控制代碼。\n"
#: dlls/kernel32/winerror.mc:448
msgid "Invalid target handle.\n"
-msgstr "無效的目標控柄。\n"
+msgstr "無效的目標控制代碼。\n"
#: dlls/kernel32/winerror.mc:453
msgid "Invalid IOCTL.\n"
@@ -4369,7 +4305,7 @@ msgstr "呼叫尚未實作。\n"
#: dlls/kernel32/winerror.mc:473
msgid "Semaphore timeout.\n"
-msgstr "號誌逾時。\n"
+msgstr "旗號逾時。\n"
#: dlls/kernel32/winerror.mc:478
msgid "Insufficient buffer.\n"
@@ -4385,7 +4321,7 @@ msgstr "無效的層級。\n"
#: dlls/kernel32/winerror.mc:493
msgid "No volume label.\n"
-msgstr "沒有卷冊標貼。\n"
+msgstr "沒有磁碟區標籤。\n"
#: dlls/kernel32/winerror.mc:498
msgid "Module not found.\n"
@@ -4405,7 +4341,7 @@ msgstr "子行程還未完成。\n"
#: dlls/kernel32/winerror.mc:518
msgid "Invalid use of direct access handle.\n"
-msgstr "直接存取控柄的使用無效。\n"
+msgstr "直接存取控制代碼的使用無效。\n"
#: dlls/kernel32/winerror.mc:523
msgid "Negative seek.\n"
@@ -4433,19 +4369,19 @@ msgstr "儲存裝置未被 SUBST。\n"
#: dlls/kernel32/winerror.mc:558
msgid "Attempt to JOIN onto a JOINed drive.\n"
-msgstr "試圖 JOIN 到已被 JOIN 的儲存裝置。\n"
+msgstr "嘗試 JOIN 到已被 JOIN 的儲存裝置。\n"
#: dlls/kernel32/winerror.mc:563
msgid "Attempt to SUBST onto a SUBSTed drive.\n"
-msgstr "試圖 SUBST 到已被 SUBST 的儲存裝置。\n"
+msgstr "嘗試 SUBST 到已被 SUBST 的儲存裝置。\n"
#: dlls/kernel32/winerror.mc:568
msgid "Attempt to JOIN to a SUBSTed drive.\n"
-msgstr "試圖 JOIN 到已被 SUBST 的儲存裝置。\n"
+msgstr "嘗試 JOIN 到已被 SUBST 的儲存裝置。\n"
#: dlls/kernel32/winerror.mc:573
msgid "Attempt to SUBST to a JOINed drive.\n"
-msgstr "試圖 SUBST 到已被 JOIN 的儲存裝置。\n"
+msgstr "嘗試 SUBST 到已被 JOIN 的儲存裝置。\n"
#: dlls/kernel32/winerror.mc:578
msgid "Drive is busy.\n"
@@ -4489,7 +4425,7 @@ msgstr "用於 DosMuxSemWait 的事件計數不正確。\n"
#: dlls/kernel32/winerror.mc:628
msgid "Too many waiters for DosMuxSemWait.\n"
-msgstr "太多 DosMuxSemWait 的等待者。\n"
+msgstr "太多 DosMuxSemWait 的等待項。\n"
#: dlls/kernel32/winerror.mc:633
msgid "DosSemMuxWait list invalid.\n"
@@ -4497,11 +4433,11 @@ msgstr "DosSemMuxWait 清單無效。\n"
#: dlls/kernel32/winerror.mc:638
msgid "Volume label too long.\n"
-msgstr "卷冊標貼太長。\n"
+msgstr "磁碟區標籤太長。\n"
#: dlls/kernel32/winerror.mc:643
msgid "Too many TCBs.\n"
-msgstr "太多 TCBs。\n"
+msgstr "太多 TCB。\n"
#: dlls/kernel32/winerror.mc:648
msgid "Signal refused.\n"
@@ -4517,11 +4453,11 @@ msgstr "無法鎖定資料段。\n"
#: dlls/kernel32/winerror.mc:663
msgid "Bad thread ID address.\n"
-msgstr "不當的執行緒識別號位址。\n"
+msgstr "錯誤的執行緒識別碼位址。\n"
#: dlls/kernel32/winerror.mc:668
msgid "Bad arguments to DosExecPgm.\n"
-msgstr "不當的 DosExecPgm 引數。\n"
+msgstr "錯誤的 DosExecPgm 引數。\n"
#: dlls/kernel32/winerror.mc:673
msgid "Path is invalid.\n"
@@ -4569,7 +4505,7 @@ msgstr "無效的旗標號碼。\n"
#: dlls/kernel32/winerror.mc:728
msgid "Semaphore name not found.\n"
-msgstr "找不到號誌名稱。\n"
+msgstr "找不到旗號名稱。\n"
#: dlls/kernel32/winerror.mc:733
msgid "Invalid starting code segment for %1.\n"
@@ -4593,7 +4529,7 @@ msgstr "EXE %1 被標記為無效。\n"
#: dlls/kernel32/winerror.mc:758
msgid "Bad EXE format for %1.\n"
-msgstr "%1 的不當 EXE 格式。\n"
+msgstr "%1 是錯誤的 EXE 格式。\n"
#: dlls/kernel32/winerror.mc:763
msgid "Iterated data exceeds 64k in %1.\n"
@@ -4673,19 +4609,19 @@ msgstr "不允許巢狀 LoadModule 呼叫。\n"
#: dlls/kernel32/winerror.mc:858
msgid "Machine type mismatch.\n"
-msgstr "機器型態不匹配。\n"
+msgstr "機器類型不相符。\n"
#: dlls/kernel32/winerror.mc:863
msgid "Bad pipe.\n"
-msgstr "不當的管線。\n"
+msgstr "錯誤的管線。\n"
#: dlls/kernel32/winerror.mc:868
msgid "Pipe busy.\n"
-msgstr "管線忙碌。\n"
+msgstr "管線忙碌中。\n"
#: dlls/kernel32/winerror.mc:873
msgid "Pipe closed.\n"
-msgstr "管線關閉。\n"
+msgstr "管線已關閉。\n"
#: dlls/kernel32/winerror.mc:878
msgid "Pipe not connected.\n"
@@ -4693,11 +4629,11 @@ msgstr "管線未連接。\n"
#: dlls/kernel32/winerror.mc:883
msgid "More data available.\n"
-msgstr "更多資料可用。\n"
+msgstr "有更多可用資料。\n"
#: dlls/kernel32/winerror.mc:888
msgid "Session canceled.\n"
-msgstr "已取消工作階段。\n"
+msgstr "工作階段已取消。\n"
#: dlls/kernel32/winerror.mc:893
msgid "Invalid extended attribute name.\n"
@@ -4733,7 +4669,7 @@ msgstr "進階屬性表格已滿。\n"
#: dlls/kernel32/winerror.mc:933
msgid "Invalid extended attribute handle.\n"
-msgstr "無效的進階屬性控柄。\n"
+msgstr "無效的進階屬性控制代碼。\n"
#: dlls/kernel32/winerror.mc:938
msgid "Extended attributes not supported.\n"
@@ -4745,7 +4681,7 @@ msgstr "Mutex 非由呼叫者所擁有。\n"
#: dlls/kernel32/winerror.mc:948
msgid "Too many posts to semaphore.\n"
-msgstr "號誌太多貼文。\n"
+msgstr "旗號太多貼文。\n"
#: dlls/kernel32/winerror.mc:953
msgid "Read/WriteProcessMemory partially completed.\n"
@@ -4753,7 +4689,7 @@ msgstr "讀取/寫入行程記憶體已部分完成。\n"
#: dlls/kernel32/winerror.mc:958
msgid "The oplock wasn't granted.\n"
-msgstr "未被授與 oplock。\n"
+msgstr "未授權 oplock。\n"
#: dlls/kernel32/winerror.mc:963
msgid "Invalid oplock message received.\n"
@@ -4821,7 +4757,7 @@ msgstr "無效的旗標。\n"
#: dlls/kernel32/winerror.mc:1043
msgid "Unrecognized volume.\n"
-msgstr "無法辨識的卷冊。\n"
+msgstr "無法辨識的磁碟區。\n"
#: dlls/kernel32/winerror.mc:1048
msgid "File invalid.\n"
@@ -4833,7 +4769,7 @@ msgstr "無法全螢幕運行。\n"
#: dlls/kernel32/winerror.mc:1058
msgid "Nonexistent token.\n"
-msgstr "不存在的字組。\n"
+msgstr "不存在的權杖。\n"
#: dlls/kernel32/winerror.mc:1063
msgid "Registry corrupt.\n"
@@ -4885,7 +4821,7 @@ msgstr "註冊表索引鍵有子項。\n"
#: dlls/kernel32/winerror.mc:1123
msgid "Subkey must be volatile.\n"
-msgstr "子項必須是易變的。\n"
+msgstr "子項必須是可變的。\n"
#: dlls/kernel32/winerror.mc:1128
msgid "Notify change request in progress.\n"
@@ -4937,7 +4873,7 @@ msgstr "服務無法接受控制訊息。\n"
#: dlls/kernel32/winerror.mc:1188
msgid "Service not active.\n"
-msgstr "服務現未啟用。\n"
+msgstr "服務尚未啟用。\n"
#: dlls/kernel32/winerror.mc:1193
msgid "Service controller connect failed.\n"
@@ -4985,7 +4921,7 @@ msgstr "服務已存在。\n"
#: dlls/kernel32/winerror.mc:1248
msgid "System running last-known-good config.\n"
-msgstr "系統執行最後已知正常的組配。\n"
+msgstr "系統執行最近已知正常的組配。\n"
#: dlls/kernel32/winerror.mc:1253
msgid "Service dependency deleted.\n"
@@ -4993,11 +4929,11 @@ msgstr "服務相依性已刪除。\n"
#: dlls/kernel32/winerror.mc:1258
msgid "Boot already accepted as last-good config.\n"
-msgstr "開機已被接受為最後正常的組配。\n"
+msgstr "開機已接受為上次正常的組配。\n"
#: dlls/kernel32/winerror.mc:1263
msgid "Service not started since last boot.\n"
-msgstr "服務自從最後一次開機即無法啟動。\n"
+msgstr "服務自上次開機之後尚未啟動。\n"
#: dlls/kernel32/winerror.mc:1268
msgid "Duplicate service name.\n"
@@ -5013,11 +4949,11 @@ msgstr "無法偵測到驅動程式的失敗。\n"
#: dlls/kernel32/winerror.mc:1283
msgid "Process abort cannot be detected.\n"
-msgstr "無法偵測到行程中止。\n"
+msgstr "無法偵測到處理程序中止。\n"
#: dlls/kernel32/winerror.mc:1288
msgid "No recovery program for service.\n"
-msgstr "沒有復原程式用於服務。\n"
+msgstr "服務沒有復原程式。\n"
#: dlls/kernel32/winerror.mc:1293
msgid "Service not implemented by exe.\n"
@@ -5053,7 +4989,7 @@ msgstr "無效的區塊長度。\n"
#: dlls/kernel32/winerror.mc:1333
msgid "Device not partitioned.\n"
-msgstr "裝置未設分割區。\n"
+msgstr "裝置未設定分割區。\n"
#: dlls/kernel32/winerror.mc:1338
msgid "Unable to lock media.\n"
@@ -5080,8 +5016,6 @@ msgid "No Unicode translation.\n"
msgstr "沒有萬國碼轉譯。\n"
#: dlls/kernel32/winerror.mc:1368
-#, fuzzy
-#| msgid "DLL init failed.\n"
msgid "DLL initialization failed.\n"
msgstr "動態連結函式庫初始失敗。\n"
@@ -5115,7 +5049,7 @@ msgstr "序列 I/O 計數器逾時。\n"
#: dlls/kernel32/winerror.mc:1408
msgid "Floppy ID address mark not found.\n"
-msgstr "找不到軟碟識別號位址標記。\n"
+msgstr "找不到軟碟識別碼位址標記。\n"
#: dlls/kernel32/winerror.mc:1413
msgid "Floppy reports wrong cylinder.\n"
@@ -5123,7 +5057,7 @@ msgstr "軟碟回報錯誤的磁柱。\n"
#: dlls/kernel32/winerror.mc:1418
msgid "Unknown floppy error.\n"
-msgstr "未知的軟碟錯誤。\n"
+msgstr "不明的軟碟錯誤。\n"
#: dlls/kernel32/winerror.mc:1423
msgid "Floppy registers inconsistent.\n"
@@ -5167,7 +5101,7 @@ msgstr "設定電源狀態失敗。\n"
#: dlls/kernel32/winerror.mc:1473
msgid "Too many links.\n"
-msgstr "太多鏈結。\n"
+msgstr "太多連結。\n"
#: dlls/kernel32/winerror.mc:1478
msgid "Newer Windows version needed.\n"
@@ -5203,7 +5137,7 @@ msgstr "找不到 DLL 檔。\n"
#: dlls/kernel32/winerror.mc:1518
msgid "Out of user handles.\n"
-msgstr "超出使用者控柄。\n"
+msgstr "超出使用者控制代碼。\n"
#: dlls/kernel32/winerror.mc:1523
msgid "Message can only be used in synchronous calls.\n"
@@ -5231,7 +5165,7 @@ msgstr "裝置需要重新初始化。\n"
#: dlls/kernel32/winerror.mc:1553
msgid "The device requires cleaning.\n"
-msgstr "裝置需要清潔。\n"
+msgstr "裝置需要清理。\n"
#: dlls/kernel32/winerror.mc:1558
msgid "The device door is open.\n"
@@ -5259,11 +5193,11 @@ msgstr "找不到點。\n"
#: dlls/kernel32/winerror.mc:1588
msgid "No running tracking service.\n"
-msgstr "沒在執行追蹤服務。\n"
+msgstr "沒有執行中的追蹤服務。\n"
#: dlls/kernel32/winerror.mc:1593
msgid "No such volume ID.\n"
-msgstr "沒有此類卷冊識別號。\n"
+msgstr "沒有此類磁碟區識別碼。\n"
#: dlls/kernel32/winerror.mc:1598
msgid "Unable to remove the file to be replaced.\n"
@@ -5283,11 +5217,11 @@ msgstr "正在刪除日誌。\n"
#: dlls/kernel32/winerror.mc:1618
msgid "The journal is not active.\n"
-msgstr "日誌現未啟用。\n"
+msgstr "日誌尚未啟用。\n"
#: dlls/kernel32/winerror.mc:1623
msgid "Potential matching file found.\n"
-msgstr "找到可能的匹配檔案。\n"
+msgstr "找到可能的相符檔案。\n"
#: dlls/kernel32/winerror.mc:1628
msgid "The journal entry was deleted.\n"
@@ -5299,7 +5233,7 @@ msgstr "無效的裝置名稱。\n"
#: dlls/kernel32/winerror.mc:1638
msgid "Connection unavailable.\n"
-msgstr "連接不得使用。\n"
+msgstr "連接無法使用。\n"
#: dlls/kernel32/winerror.mc:1643
msgid "Device already remembered.\n"
@@ -5307,7 +5241,7 @@ msgstr "裝置已被記住。\n"
#: dlls/kernel32/winerror.mc:1648
msgid "No network or bad path.\n"
-msgstr "沒有網路或不當的路徑。\n"
+msgstr "沒有網路或錯誤的路徑。\n"
#: dlls/kernel32/winerror.mc:1653
msgid "Invalid network provider name.\n"
@@ -5315,11 +5249,11 @@ msgstr "無效的網路提供者名稱。\n"
#: dlls/kernel32/winerror.mc:1658
msgid "Cannot open network connection profile.\n"
-msgstr "無法開啟網路連線側寫檔。\n"
+msgstr "無法開啟網路連線設定檔。\n"
#: dlls/kernel32/winerror.mc:1663
msgid "Corrupt network connection profile.\n"
-msgstr "損壞的網路連線側寫檔。\n"
+msgstr "損壞的網路連線設定檔。\n"
#: dlls/kernel32/winerror.mc:1668
msgid "Not a container.\n"
@@ -5327,7 +5261,7 @@ msgstr "不是一個容器。\n"
#: dlls/kernel32/winerror.mc:1673
msgid "Extended error.\n"
-msgstr "進階錯誤。\n"
+msgstr "延伸錯誤。\n"
#: dlls/kernel32/winerror.mc:1678
msgid "Invalid group name.\n"
@@ -5367,11 +5301,11 @@ msgstr "無效的訊息目的地。\n"
#: dlls/kernel32/winerror.mc:1728
msgid "Session credential conflict.\n"
-msgstr "作業階段憑據發生衝突。\n"
+msgstr "工作階段憑據發生衝突。\n"
#: dlls/kernel32/winerror.mc:1733
msgid "Remote session limit exceeded.\n"
-msgstr "已超出遠端作業階段限制。\n"
+msgstr "已超出遠端工作階段限制。\n"
#: dlls/kernel32/winerror.mc:1738
msgid "Duplicate domain or workgroup name.\n"
@@ -5395,7 +5329,7 @@ msgstr "連線被拒。\n"
#: dlls/kernel32/winerror.mc:1763
msgid "Connection gracefully closed.\n"
-msgstr "已平順關閉連接。\n"
+msgstr "已順利關閉連線。\n"
#: dlls/kernel32/winerror.mc:1768
msgid "Address already associated with transport endpoint.\n"
@@ -5411,23 +5345,23 @@ msgstr "連線無效。\n"
#: dlls/kernel32/winerror.mc:1783
msgid "Connection is active.\n"
-msgstr "連接現正使用。\n"
+msgstr "連線現正使用。\n"
#: dlls/kernel32/winerror.mc:1788
msgid "Network unreachable.\n"
-msgstr "無法連線網路。\n"
+msgstr "網路無法連線。\n"
#: dlls/kernel32/winerror.mc:1793
msgid "Host unreachable.\n"
-msgstr "無法連線主機。\n"
+msgstr "主機無法連線。\n"
#: dlls/kernel32/winerror.mc:1798
msgid "Protocol unreachable.\n"
-msgstr "無法連線協定。\n"
+msgstr "協定無法連線。\n"
#: dlls/kernel32/winerror.mc:1803
msgid "Port unreachable.\n"
-msgstr "無法連線通訊埠。\n"
+msgstr "通訊埠無法連線。\n"
#: dlls/kernel32/winerror.mc:1808
msgid "Request aborted.\n"
@@ -5435,7 +5369,7 @@ msgstr "已放棄要求。\n"
#: dlls/kernel32/winerror.mc:1813
msgid "Connection aborted.\n"
-msgstr "已放棄連接。\n"
+msgstr "已放棄連線。\n"
#: dlls/kernel32/winerror.mc:1818
msgid "Please retry operation.\n"
@@ -5471,7 +5405,7 @@ msgstr "使用者未被認證。\n"
#: dlls/kernel32/winerror.mc:1858
msgid "User not logged on.\n"
-msgstr "使用者未被記錄。\n"
+msgstr "使用者未登入。\n"
#: dlls/kernel32/winerror.mc:1863
msgid "Continue work in progress.\n"
@@ -5503,7 +5437,7 @@ msgstr "即使沒有變更任何東西時也進行作業。\n"
#: dlls/kernel32/winerror.mc:1898
msgid "The user profile is invalid.\n"
-msgstr "使用者側寫檔無效。\n"
+msgstr "使用者設定檔無效。\n"
#: dlls/kernel32/winerror.mc:1903
msgid "Not supported on Small Business Server.\n"
@@ -5515,7 +5449,7 @@ msgstr "並非所有權限都被指派。\n"
#: dlls/kernel32/winerror.mc:1913
msgid "Some security IDs not mapped.\n"
-msgstr "某些安全識別號未對應。\n"
+msgstr "某些安全識別碼未對應。\n"
#: dlls/kernel32/winerror.mc:1918
msgid "No quotas for account.\n"
@@ -5547,7 +5481,7 @@ msgstr "無效的主要群組。\n"
#: dlls/kernel32/winerror.mc:1953
msgid "No impersonation token.\n"
-msgstr "沒有假冒字組。\n"
+msgstr "沒有模擬權杖。\n"
#: dlls/kernel32/winerror.mc:1958
msgid "Can't disable mandatory group.\n"
@@ -5555,11 +5489,11 @@ msgstr "無法停用必要群組。\n"
#: dlls/kernel32/winerror.mc:1963
msgid "No logon servers available.\n"
-msgstr "沒有可用的登錄伺服器。\n"
+msgstr "沒有可用的登入伺服器。\n"
#: dlls/kernel32/winerror.mc:1968
msgid "No such logon session.\n"
-msgstr "沒有此類登錄作業階段。\n"
+msgstr "沒有此類登入工作階段。\n"
#: dlls/kernel32/winerror.mc:1973
msgid "No such privilege.\n"
@@ -5623,7 +5557,7 @@ msgstr "帳號限制。\n"
#: dlls/kernel32/winerror.mc:2048
msgid "Invalid logon hours.\n"
-msgstr "無效的登錄時數。\n"
+msgstr "無效的登入時數。\n"
#: dlls/kernel32/winerror.mc:2053
msgid "Invalid workstation.\n"
@@ -5639,7 +5573,7 @@ msgstr "帳號已停用。\n"
#: dlls/kernel32/winerror.mc:2068
msgid "No security ID mapped.\n"
-msgstr "沒有對應的安全識別號。\n"
+msgstr "沒有對應的安全識別碼。\n"
#: dlls/kernel32/winerror.mc:2073
msgid "Too many LUIDs requested.\n"
@@ -5667,7 +5601,7 @@ msgstr "無效的安全描述元。\n"
#: dlls/kernel32/winerror.mc:2103
msgid "Bad inherited ACL.\n"
-msgstr "不當繼承的 ACL。\n"
+msgstr "錯誤繼承的 ACL。\n"
#: dlls/kernel32/winerror.mc:2108
msgid "Server disabled.\n"
@@ -5679,7 +5613,7 @@ msgstr "伺服器未停用。\n"
#: dlls/kernel32/winerror.mc:2118
msgid "Invalid ID authority.\n"
-msgstr "無效的識別號授權。\n"
+msgstr "無效的識別碼授權。\n"
#: dlls/kernel32/winerror.mc:2123
msgid "Allotted space exceeded.\n"
@@ -5691,19 +5625,19 @@ msgstr "無效的群組屬性。\n"
#: dlls/kernel32/winerror.mc:2133
msgid "Bad impersonation level.\n"
-msgstr "不當的假冒等級。\n"
+msgstr "錯誤的模擬等級。\n"
#: dlls/kernel32/winerror.mc:2138
msgid "Can't open anonymous security token.\n"
-msgstr "無法開啟匿名安全性代表字組。\n"
+msgstr "無法開啟匿名的安全權杖。\n"
#: dlls/kernel32/winerror.mc:2143
msgid "Bad validation class.\n"
-msgstr "不當的驗證類別。\n"
+msgstr "錯誤的驗證類別。\n"
#: dlls/kernel32/winerror.mc:2148
msgid "Bad token type.\n"
-msgstr "不當的字組型態。\n"
+msgstr "錯誤的權杖類型。\n"
#: dlls/kernel32/winerror.mc:2153
msgid "No security on object.\n"
@@ -5751,15 +5685,15 @@ msgstr "通用存取類型未對應。\n"
#: dlls/kernel32/winerror.mc:2208
msgid "Bad descriptor format.\n"
-msgstr "不當的描述元格式。\n"
+msgstr "錯誤的描述元格式。\n"
#: dlls/kernel32/winerror.mc:2213
msgid "Not a logon process.\n"
-msgstr "不是個登錄行程。\n"
+msgstr "不是登入工作階段。\n"
#: dlls/kernel32/winerror.mc:2218
msgid "Logon session ID exists.\n"
-msgstr "登錄期間識別碼已存在。\n"
+msgstr "登入工作階段識別碼已存在。\n"
#: dlls/kernel32/winerror.mc:2223
msgid "Unknown authentication package.\n"
@@ -5767,19 +5701,19 @@ msgstr "不明認證套件。\n"
#: dlls/kernel32/winerror.mc:2228
msgid "Bad logon session state.\n"
-msgstr "不當的登錄作業階段狀態。\n"
+msgstr "錯誤的登入工作階段狀態。\n"
#: dlls/kernel32/winerror.mc:2233
msgid "Logon session ID collision.\n"
-msgstr "登錄期間識別碼產生碰撞。\n"
+msgstr "登入工作階段識別碼發生衝突。\n"
#: dlls/kernel32/winerror.mc:2238
msgid "Invalid logon type.\n"
-msgstr "無效的登錄型態。\n"
+msgstr "無效的登入類型。\n"
#: dlls/kernel32/winerror.mc:2243
msgid "Cannot impersonate.\n"
-msgstr "無法假冒。\n"
+msgstr "無法模擬。\n"
#: dlls/kernel32/winerror.mc:2248
msgid "Invalid transaction state.\n"
@@ -5807,7 +5741,7 @@ msgstr "其為使用者的主要群組。\n"
#: dlls/kernel32/winerror.mc:2278
msgid "Token already in use.\n"
-msgstr "字組已使用中。\n"
+msgstr "權杖已在使用中。\n"
#: dlls/kernel32/winerror.mc:2283
msgid "No such local group.\n"
@@ -5827,7 +5761,7 @@ msgstr "本地群組已存在。\n"
#: dlls/kernel32/winerror.mc:2303 dlls/kernel32/winerror.mc:2328
msgid "Logon type not granted.\n"
-msgstr "登錄型態未授與。\n"
+msgstr "登錄類型未授與。\n"
#: dlls/kernel32/winerror.mc:2308
msgid "Too many secrets.\n"
@@ -5843,7 +5777,7 @@ msgstr "內部安全資料庫錯誤。\n"
#: dlls/kernel32/winerror.mc:2323
msgid "Too many context IDs.\n"
-msgstr "太多文脈識別號。\n"
+msgstr "太多內容識別碼。\n"
#: dlls/kernel32/winerror.mc:2333
msgid "Cross-encrypted NT password required.\n"
@@ -5867,7 +5801,7 @@ msgstr "必須輸入交叉加密過的本機密碼。\n"
#: dlls/kernel32/winerror.mc:2358
msgid "No inheritable components.\n"
-msgstr "沒有可繼承的成分。\n"
+msgstr "沒有可繼承的元件。\n"
#: dlls/kernel32/winerror.mc:2363
msgid "File or directory corrupt.\n"
@@ -5879,7 +5813,7 @@ msgstr "磁碟已損壞。\n"
#: dlls/kernel32/winerror.mc:2373
msgid "No user session key.\n"
-msgstr "沒有使用者作業階段金鑰。\n"
+msgstr "沒有使用者工作階段金鑰。\n"
#: dlls/kernel32/winerror.mc:2378
msgid "License quota exceeded.\n"
@@ -5895,31 +5829,31 @@ msgstr "相互認證失敗。\n"
#: dlls/kernel32/winerror.mc:2393
msgid "Time skew between client and server.\n"
-msgstr "客戶端與伺服端的時間偏斜。\n"
+msgstr "用戶端與伺服器的時間存在偏移。\n"
#: dlls/kernel32/winerror.mc:2398
msgid "Invalid window handle.\n"
-msgstr "無效的視窗控柄。\n"
+msgstr "無效的視窗控制代碼。\n"
#: dlls/kernel32/winerror.mc:2403
msgid "Invalid menu handle.\n"
-msgstr "無效的選單控柄。\n"
+msgstr "無效的選單控制代碼。\n"
#: dlls/kernel32/winerror.mc:2408
msgid "Invalid cursor handle.\n"
-msgstr "無效的游標控柄。\n"
+msgstr "無效的游標控制代碼。\n"
#: dlls/kernel32/winerror.mc:2413
msgid "Invalid accelerator table handle.\n"
-msgstr "無效的加速功能表格控柄。\n"
+msgstr "無效的加速功能表格控制代碼。\n"
#: dlls/kernel32/winerror.mc:2418
msgid "Invalid hook handle.\n"
-msgstr "無效的攔截控柄。\n"
+msgstr "無效的勾點控制代碼。\n"
#: dlls/kernel32/winerror.mc:2423
msgid "Invalid DWP handle.\n"
-msgstr "無效的 DWP 控柄。\n"
+msgstr "無效的 DWP 控制代碼。\n"
#: dlls/kernel32/winerror.mc:2428
msgid "Can't create top-level child window.\n"
@@ -5935,7 +5869,7 @@ msgstr "視窗由另外的執行緒所擁有。\n"
#: dlls/kernel32/winerror.mc:2443
msgid "Hotkey already registered.\n"
-msgstr "熱鍵已被註冊。\n"
+msgstr "快捷鍵已被註冊。\n"
#: dlls/kernel32/winerror.mc:2448
msgid "Class already exists.\n"
@@ -5955,7 +5889,7 @@ msgstr "無效的索引。\n"
#: dlls/kernel32/winerror.mc:2468
msgid "Invalid icon handle.\n"
-msgstr "無效的圖示控柄。\n"
+msgstr "無效的圖示控制代碼。\n"
#: dlls/kernel32/winerror.mc:2473
msgid "Private dialog index.\n"
@@ -5963,11 +5897,11 @@ msgstr "私人的對話框索引。\n"
#: dlls/kernel32/winerror.mc:2478
msgid "List box ID not found.\n"
-msgstr "找不到清單方塊識別號。\n"
+msgstr "找不到清單方塊識別碼。\n"
#: dlls/kernel32/winerror.mc:2483
msgid "No wildcard characters.\n"
-msgstr "沒有萬用字元字元。\n"
+msgstr "沒有萬用字元。\n"
#: dlls/kernel32/winerror.mc:2488
msgid "Clipboard not open.\n"
@@ -5975,7 +5909,7 @@ msgstr "未開啟剪貼簿。\n"
#: dlls/kernel32/winerror.mc:2493
msgid "Hotkey not registered.\n"
-msgstr "快速鍵未註冊。\n"
+msgstr "快捷鍵未註冊。\n"
#: dlls/kernel32/winerror.mc:2498
msgid "Not a dialog window.\n"
@@ -5983,7 +5917,7 @@ msgstr "不是個對話框視窗。\n"
#: dlls/kernel32/winerror.mc:2503
msgid "Control ID not found.\n"
-msgstr "找不到控制識別號。\n"
+msgstr "找不到控制識別碼。\n"
#: dlls/kernel32/winerror.mc:2508
msgid "Invalid combo box message.\n"
@@ -6003,7 +5937,7 @@ msgstr "找不到 DC。\n"
#: dlls/kernel32/winerror.mc:2528
msgid "Invalid hook filter.\n"
-msgstr "無效的攔截篩選器。\n"
+msgstr "無效的勾點篩選器。\n"
#: dlls/kernel32/winerror.mc:2533
msgid "Invalid filter procedure.\n"
@@ -6011,19 +5945,19 @@ msgstr "無效的篩選器程序。\n"
#: dlls/kernel32/winerror.mc:2538
msgid "Hook procedure needs module handle.\n"
-msgstr "攔截程序需要模組控柄。\n"
+msgstr "勾點程序需要模組控制代碼。\n"
#: dlls/kernel32/winerror.mc:2543
msgid "Global-only hook procedure.\n"
-msgstr "僅限全域的攔截程序。\n"
+msgstr "只限全域的勾點程序。\n"
#: dlls/kernel32/winerror.mc:2548
msgid "Journal hook already set.\n"
-msgstr "已經設定日誌攔截。\n"
+msgstr "已經設定日誌勾點。\n"
#: dlls/kernel32/winerror.mc:2553
msgid "Hook procedure not installed.\n"
-msgstr "尚未安裝攔截程序。\n"
+msgstr "尚未安裝勾點程序。\n"
#: dlls/kernel32/winerror.mc:2558
msgid "Invalid list box message.\n"
@@ -6039,7 +5973,7 @@ msgstr "這個清單方塊沒有定位停駐點。\n"
#: dlls/kernel32/winerror.mc:2573
msgid "Can't destroy object owned by another thread.\n"
-msgstr "無法銷毀由另外執行緒所擁有的物件。\n"
+msgstr "無法銷毀由其他執行緒所擁有的物件。\n"
#: dlls/kernel32/winerror.mc:2578
msgid "Child window menus not allowed.\n"
@@ -6063,7 +5997,7 @@ msgstr "螢幕已鎖定。\n"
#: dlls/kernel32/winerror.mc:2603
msgid "Window handles have different parents.\n"
-msgstr "視窗控柄有不同的上層。\n"
+msgstr "視窗控制代碼有不同的父系。\n"
#: dlls/kernel32/winerror.mc:2608
msgid "Not a child window.\n"
@@ -6075,7 +6009,7 @@ msgstr "數字格式無效。\n"
#: dlls/kernel32/winerror.mc:2618
msgid "Invalid thread ID.\n"
-msgstr "無效的執行緒識別號。\n"
+msgstr "無效的執行緒識別碼。\n"
#: dlls/kernel32/winerror.mc:2623
msgid "Not an MDI child window.\n"
@@ -6107,7 +6041,7 @@ msgstr "沒有非置換頁的系統資源。\n"
#: dlls/kernel32/winerror.mc:2658
msgid "No paged system resources.\n"
-msgstr "非置換頁的系統資源。\n"
+msgstr "沒有置換頁的系統資源。\n"
#: dlls/kernel32/winerror.mc:2663
msgid "No working set quota.\n"
@@ -6127,11 +6061,11 @@ msgstr "找不到選單項目。\n"
#: dlls/kernel32/winerror.mc:2683
msgid "Invalid keyboard handle.\n"
-msgstr "無效的鍵盤控柄。\n"
+msgstr "無效的鍵盤控制代碼。\n"
#: dlls/kernel32/winerror.mc:2688
msgid "Hook type not allowed.\n"
-msgstr "不允許攔截型態。\n"
+msgstr "不允許的勾點類型。\n"
#: dlls/kernel32/winerror.mc:2693
msgid "Interactive window station required.\n"
@@ -6143,7 +6077,7 @@ msgstr "逾時。\n"
#: dlls/kernel32/winerror.mc:2703
msgid "Invalid monitor handle.\n"
-msgstr "無效的監視器控柄。\n"
+msgstr "無效的監視器控制代碼。\n"
#: dlls/kernel32/winerror.mc:2708
msgid "Event log file corrupt.\n"
@@ -6171,11 +6105,11 @@ msgstr "使用者已放棄安裝。\n"
#: dlls/kernel32/winerror.mc:2738
msgid "Installation failure.\n"
-msgstr "安裝已失敗。\n"
+msgstr "安裝失敗。\n"
#: dlls/kernel32/winerror.mc:2743
msgid "Installation suspended.\n"
-msgstr "安裝已懸置。\n"
+msgstr "安裝暫停。\n"
#: dlls/kernel32/winerror.mc:2748
msgid "Unknown product.\n"
@@ -6183,19 +6117,19 @@ msgstr "不明產品。\n"
#: dlls/kernel32/winerror.mc:2753
msgid "Unknown feature.\n"
-msgstr "不明特徵。\n"
+msgstr "不明功能。\n"
#: dlls/kernel32/winerror.mc:2758
msgid "Unknown component.\n"
-msgstr "未知的元件。\n"
+msgstr "不明元件。\n"
#: dlls/kernel32/winerror.mc:2763
msgid "Unknown property.\n"
-msgstr "未知的屬性。\n"
+msgstr "不明屬性。\n"
#: dlls/kernel32/winerror.mc:2768
msgid "Invalid handle state.\n"
-msgstr "無效的控柄狀態。\n"
+msgstr "無效的控制代碼狀態。\n"
#: dlls/kernel32/winerror.mc:2773
msgid "Bad configuration.\n"
@@ -6251,7 +6185,7 @@ msgstr "開啟安裝記錄檔時失敗。\n"
#: dlls/kernel32/winerror.mc:2838
msgid "Installation language not supported.\n"
-msgstr "不受支援的安裝語言。\n"
+msgstr "不支援的安裝語言。\n"
#: dlls/kernel32/winerror.mc:2843
msgid "Installation transform failed to apply.\n"
@@ -6275,11 +6209,11 @@ msgstr "無效的表格。\n"
#: dlls/kernel32/winerror.mc:2868
msgid "Data type mismatch.\n"
-msgstr "資料類型不匹配。\n"
+msgstr "資料類型不相符。\n"
#: dlls/kernel32/winerror.mc:2873 dlls/kernel32/winerror.mc:3083
msgid "Unsupported type.\n"
-msgstr "不受支援的型態。\n"
+msgstr "不支援的類型。\n"
#: dlls/kernel32/winerror.mc:2878
msgid "Creation failed.\n"
@@ -6291,7 +6225,7 @@ msgstr "無法寫入暫存資料夾。\n"
#: dlls/kernel32/winerror.mc:2888
msgid "Installation platform not supported.\n"
-msgstr "不受支援的安裝平臺。\n"
+msgstr "不支援的安裝平臺。\n"
#: dlls/kernel32/winerror.mc:2893
msgid "Installer not used.\n"
@@ -6307,7 +6241,7 @@ msgstr "無效的更新套件。\n"
#: dlls/kernel32/winerror.mc:2908
msgid "Unsupported patch package.\n"
-msgstr "不受支援的修補程式套件。\n"
+msgstr "不支援的修補程式套件。\n"
#: dlls/kernel32/winerror.mc:2913
msgid "Another version is installed.\n"
@@ -6351,7 +6285,7 @@ msgstr "無效的字串 UUID。\n"
#: dlls/kernel32/winerror.mc:2963
msgid "Invalid endpoint format.\n"
-msgstr "無效的終點格式。\n"
+msgstr "無效的端點格式。\n"
#: dlls/kernel32/winerror.mc:2968
msgid "Invalid network address.\n"
@@ -6359,7 +6293,7 @@ msgstr "無效的網路位址。\n"
#: dlls/kernel32/winerror.mc:2973
msgid "No endpoint found.\n"
-msgstr "找不到任何終點。\n"
+msgstr "找不到任何端點。\n"
#: dlls/kernel32/winerror.mc:2978
msgid "Invalid timeout value.\n"
@@ -6391,11 +6325,11 @@ msgstr "RPC 伺服器未傾聽。\n"
#: dlls/kernel32/winerror.mc:3013
msgid "Unknown manager type.\n"
-msgstr "不明管理員型態。\n"
+msgstr "不明管理員類型。\n"
#: dlls/kernel32/winerror.mc:3018
msgid "Unknown interface.\n"
-msgstr "未知的介面。\n"
+msgstr "不明的介面。\n"
#: dlls/kernel32/winerror.mc:3023
msgid "No bindings.\n"
@@ -6407,7 +6341,7 @@ msgstr "沒有協定序列。\n"
#: dlls/kernel32/winerror.mc:3033
msgid "Can't create endpoint.\n"
-msgstr "無法建立終點。\n"
+msgstr "無法建立端點。\n"
#: dlls/kernel32/winerror.mc:3038
msgid "Out of resources.\n"
@@ -6415,7 +6349,7 @@ msgstr "資源不足。\n"
#: dlls/kernel32/winerror.mc:3043
msgid "RPC server unavailable.\n"
-msgstr "RPC 伺服器不得使用。\n"
+msgstr "RPC 伺服器不可用。\n"
#: dlls/kernel32/winerror.mc:3048
msgid "RPC server too busy.\n"
@@ -6427,7 +6361,7 @@ msgstr "無效的網路選項。\n"
#: dlls/kernel32/winerror.mc:3058
msgid "No RPC call active.\n"
-msgstr "沒有現用的 RPC 呼叫。\n"
+msgstr "沒有可用的 RPC 呼叫。\n"
#: dlls/kernel32/winerror.mc:3063
msgid "RPC call failed.\n"
@@ -6443,7 +6377,7 @@ msgstr "RPC 協定發生錯誤。\n"
#: dlls/kernel32/winerror.mc:3078
msgid "Unsupported transfer syntax.\n"
-msgstr "不受支援的轉送語法。\n"
+msgstr "不支援的轉送語法。\n"
#: dlls/kernel32/winerror.mc:3088
msgid "Invalid tag.\n"
@@ -6463,7 +6397,7 @@ msgstr "無效的名稱語法。\n"
#: dlls/kernel32/winerror.mc:3108
msgid "Unsupported name syntax.\n"
-msgstr "不受支援的名稱語法。\n"
+msgstr "不支援的名稱語法。\n"
#: dlls/kernel32/winerror.mc:3113
msgid "No network address.\n"
@@ -6471,7 +6405,7 @@ msgstr "沒有網路位址。\n"
#: dlls/kernel32/winerror.mc:3118
msgid "Duplicate endpoint.\n"
-msgstr "重複的終點。\n"
+msgstr "重複的端點。\n"
#: dlls/kernel32/winerror.mc:3123
msgid "Unknown authentication type.\n"
@@ -6479,7 +6413,7 @@ msgstr "不明認證類型。\n"
#: dlls/kernel32/winerror.mc:3128
msgid "Maximum calls too low.\n"
-msgstr "太低的呼叫數最大值。\n"
+msgstr "呼叫數的最大值太低。\n"
#: dlls/kernel32/winerror.mc:3133
msgid "String too long.\n"
@@ -6523,7 +6457,7 @@ msgstr "無法進行作業。\n"
#: dlls/kernel32/winerror.mc:3183
msgid "Endpoints not registered.\n"
-msgstr "終點未註冊。\n"
+msgstr "端點未註冊。\n"
#: dlls/kernel32/winerror.mc:3188
msgid "Nothing to export.\n"
@@ -6543,7 +6477,7 @@ msgstr "已無更多成員。\n"
#: dlls/kernel32/winerror.mc:3208
msgid "Not all objects unexported.\n"
-msgstr "並非所有物件被取消匯出。\n"
+msgstr "並非所有物件未被匯出。\n"
#: dlls/kernel32/winerror.mc:3213
msgid "Interface not found.\n"
@@ -6559,7 +6493,7 @@ msgstr "找不到條目。\n"
#: dlls/kernel32/winerror.mc:3228
msgid "Name service unavailable.\n"
-msgstr "名稱服務不得使用。\n"
+msgstr "名稱服務不可用。\n"
#: dlls/kernel32/winerror.mc:3233
msgid "Invalid network address family.\n"
@@ -6571,7 +6505,7 @@ msgstr "操作不受支援。\n"
#: dlls/kernel32/winerror.mc:3243
msgid "No security context available.\n"
-msgstr "沒有可用安全文脈。\n"
+msgstr "沒有可用的安全內容。\n"
#: dlls/kernel32/winerror.mc:3248
msgid "RPCInternal error.\n"
@@ -6611,23 +6545,23 @@ msgstr "字元翻譯表格檔案太小。\n"
#: dlls/kernel32/winerror.mc:3293
msgid "Null context handle.\n"
-msgstr "空值文脈控柄。\n"
+msgstr "內容控制代碼為空值。\n"
#: dlls/kernel32/winerror.mc:3298
msgid "Context handle damaged.\n"
-msgstr "文脈控柄受損害。\n"
+msgstr "內容控制代碼已損壞。\n"
#: dlls/kernel32/winerror.mc:3303
msgid "Binding handle mismatch.\n"
-msgstr "繫結控柄不匹配。\n"
+msgstr "繫結控制代碼不相符。\n"
#: dlls/kernel32/winerror.mc:3308
msgid "Cannot get call handle.\n"
-msgstr "無法提取呼叫控柄。\n"
+msgstr "無法提取呼叫控制代碼。\n"
#: dlls/kernel32/winerror.mc:3313
msgid "Null reference pointer.\n"
-msgstr "空值參考指標。\n"
+msgstr "參考指標為空值。\n"
#: dlls/kernel32/winerror.mc:3318
msgid "Enumeration value out of range.\n"
@@ -6639,7 +6573,7 @@ msgstr "位元組數量太小。\n"
#: dlls/kernel32/winerror.mc:3328
msgid "Bad stub data.\n"
-msgstr "不當的殘餘資料。\n"
+msgstr "損壞的虛設常式資料。\n"
#: dlls/kernel32/winerror.mc:3333
msgid "Invalid user buffer.\n"
@@ -6667,15 +6601,15 @@ msgstr "信賴的關聯性失敗。\n"
#: dlls/kernel32/winerror.mc:3363
msgid "Trust logon failure.\n"
-msgstr "信賴登錄失敗。\n"
+msgstr "信賴登入失敗。\n"
#: dlls/kernel32/winerror.mc:3368
msgid "RPC call already in progress.\n"
-msgstr "RPC 呼叫已正進行。\n"
+msgstr "RPC 呼叫已在進行。\n"
#: dlls/kernel32/winerror.mc:3373
msgid "NETLOGON is not started.\n"
-msgstr "NETLOGON 未被啟始。\n"
+msgstr "NETLOGON 未被啟動。\n"
#: dlls/kernel32/winerror.mc:3378
msgid "Account expired.\n"
@@ -6683,7 +6617,7 @@ msgstr "帳號已過期。\n"
#: dlls/kernel32/winerror.mc:3383
msgid "Redirector has open handles.\n"
-msgstr "重導器已開啟控柄。\n"
+msgstr "重導器已開啟控制代碼。\n"
#: dlls/kernel32/winerror.mc:3388
msgid "Printer driver already installed.\n"
@@ -6695,7 +6629,7 @@ msgstr "不明通訊埠。\n"
#: dlls/kernel32/winerror.mc:3398
msgid "Unknown printer driver.\n"
-msgstr "未知的印表機驅動程式。\n"
+msgstr "不明印表機驅動程式。\n"
#: dlls/kernel32/winerror.mc:3403
msgid "Unknown print processor.\n"
@@ -6735,15 +6669,15 @@ msgstr "已無更多繫結。\n"
#: dlls/kernel32/winerror.mc:3448
msgid "Can't log on with inter-domain trust account.\n"
-msgstr "無法以網域間信賴帳號登錄。\n"
+msgstr "無法以網域間信任帳號登入。\n"
#: dlls/kernel32/winerror.mc:3453
msgid "Can't log on with workstation trust account.\n"
-msgstr "無法以工作站信賴帳號登錄。\n"
+msgstr "無法以工作站信任帳號登入。\n"
#: dlls/kernel32/winerror.mc:3458
msgid "Can't log on with server trust account.\n"
-msgstr "無法以伺服器信賴帳號登錄。\n"
+msgstr "無法以伺服器信任帳號登入。\n"
#: dlls/kernel32/winerror.mc:3463
msgid "Domain trust information inconsistent.\n"
@@ -6751,7 +6685,7 @@ msgstr "網域信賴資訊不一致。\n"
#: dlls/kernel32/winerror.mc:3468
msgid "Server has open handles.\n"
-msgstr "伺服器已開啟控柄。\n"
+msgstr "伺服器已開啟控制代碼。\n"
#: dlls/kernel32/winerror.mc:3473
msgid "Resource data not found.\n"
@@ -6791,7 +6725,7 @@ msgstr "RPC 指令失敗。\n"
#: dlls/kernel32/winerror.mc:3518
msgid "Unsupported authorization level.\n"
-msgstr "不受支援的授權等級。\n"
+msgstr "不支援的授權等級。\n"
#: dlls/kernel32/winerror.mc:3523
msgid "No principal name registered.\n"
@@ -6815,7 +6749,7 @@ msgstr "執行緒未取消。\n"
#: dlls/kernel32/winerror.mc:3548
msgid "Invalid handle operation.\n"
-msgstr "無效的控柄作業。\n"
+msgstr "無效的控制代碼作業。\n"
#: dlls/kernel32/winerror.mc:3553
msgid "Wrong serializing package version.\n"
@@ -6843,7 +6777,7 @@ msgstr "找不到群組成員。\n"
#: dlls/kernel32/winerror.mc:3583
msgid "Can't create endpoint mapper DB.\n"
-msgstr "無法建立終點映射器資料庫。\n"
+msgstr "無法建立端點對應器資料庫。\n"
#: dlls/kernel32/winerror.mc:3588
msgid "Invalid object.\n"
@@ -6863,7 +6797,7 @@ msgstr "無效的表單大小。\n"
#: dlls/kernel32/winerror.mc:3608
msgid "Already awaiting printer handle.\n"
-msgstr "已經在等待印表機控柄。\n"
+msgstr "已經在等待印表機控制代碼。\n"
#: dlls/kernel32/winerror.mc:3613
msgid "Printer deleted.\n"
@@ -6903,7 +6837,7 @@ msgstr "不完整的 RPC 發送。\n"
#: dlls/kernel32/winerror.mc:3658
msgid "Invalid asynchronous RPC handle.\n"
-msgstr "無效的非同步 RPC 控柄。\n"
+msgstr "無效的非同步 RPC 控制代碼。\n"
#: dlls/kernel32/winerror.mc:3663
msgid "Invalid asynchronous RPC call.\n"
@@ -6935,7 +6869,7 @@ msgstr "無法解析檔名。\n"
#: dlls/kernel32/winerror.mc:3698
msgid "RPC entry type mismatch.\n"
-msgstr "RPC 條目型態不匹配。\n"
+msgstr "RPC 條目類型不匹配。\n"
#: dlls/kernel32/winerror.mc:3703
msgid "Not all objects could be exported.\n"
@@ -6947,15 +6881,15 @@ msgstr "無法匯出介面。\n"
#: dlls/kernel32/winerror.mc:3713
msgid "The profile could not be added.\n"
-msgstr "無法加入側寫檔。\n"
+msgstr "無法加入設定檔。\n"
#: dlls/kernel32/winerror.mc:3718
msgid "The profile element could not be added.\n"
-msgstr "無法加入側寫檔元件。\n"
+msgstr "無法加入設定檔元件。\n"
#: dlls/kernel32/winerror.mc:3723
msgid "The profile element could not be removed.\n"
-msgstr "無法移除側寫檔元件。\n"
+msgstr "無法移除設定檔元件。\n"
#: dlls/kernel32/winerror.mc:3728
msgid "The group element could not be added.\n"
@@ -6970,57 +6904,41 @@ msgid "The username could not be found.\n"
msgstr "無法找到使用者名稱。\n"
#: dlls/kernel32/winerror.mc:3743
-#, fuzzy
-#| msgid "The site does not exist.\n"
msgid "This network connection does not exist.\n"
-msgstr "站臺不存在。\n"
+msgstr "這個網路連線不存在。\n"
#: dlls/kernel32/winerror.mc:3748
-#, fuzzy
-#| msgid "Connection refused.\n"
msgid "Connection reset by peer.\n"
-msgstr "連線被拒。\n"
+msgstr "連線被同儕節點重設。\n"
#: dlls/kernel32/winerror.mc:3767
-#, fuzzy
-#| msgid "Not implemented"
msgid "Not implemented.\n"
-msgstr "未實作"
+msgstr "未實作。\n"
#: dlls/kernel32/winerror.mc:3788
-#, fuzzy
-#| msgid "RPC call failed.\n"
msgid "Call failed.\n"
-msgstr "RPC 呼叫失敗。\n"
+msgstr "呼叫失敗。\n"
#: dlls/kernel32/winerror.mc:3760
-#, fuzzy
-#| msgid "Message 0x%1 not found in file %2.\n"
msgid "No Signature found in file.\n"
-msgstr "在檔案 %2 中找不到訊息 0x%1。\n"
+msgstr "無法在檔案中找到簽章。\n"
#: dlls/kernel32/winerror.mc:3774
-#, fuzzy
-#| msgid "Invalid level.\n"
msgid "Invalid call.\n"
-msgstr "無效的層級。\n"
+msgstr "無效的呼叫。\n"
#: dlls/kernel32/winerror.mc:3781
-#, fuzzy
-#| msgid "Help not available."
msgid "Resource is not currently available.\n"
-msgstr "沒有可用的說明資訊。"
+msgstr "資源目前不可用。\n"
#: dlls/light.msstyles/light.rc:30 dlls/light.msstyles/light.rc:37
-#, fuzzy
-#| msgid "Class Name:"
msgid "Classic Blue"
-msgstr "類別名稱:"
+msgstr "經典藍"
#: dlls/light.msstyles/light.rc:43 dlls/light.msstyles/light.rc:49
#: programs/winhlp32/winhlp32.rc:53 programs/winhlp32/winhlp32.rc:73
msgid "Normal"
-msgstr "中"
+msgstr "標準"
#: dlls/localspl/localspl.rc:37
#, fuzzy
--
2.33.0.windows.2
2
1
26 Oct '21
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winspool.drv/cups.c | 97 +++++++++++++++++++++++++++++++++
dlls/winspool.drv/info.c | 108 +++++--------------------------------
dlls/winspool.drv/wspool.h | 7 +++
3 files changed, 117 insertions(+), 95 deletions(-)
diff --git a/dlls/winspool.drv/cups.c b/dlls/winspool.drv/cups.c
index 2ce5f43fa8f..ae771eba46c 100644
--- a/dlls/winspool.drv/cups.c
+++ b/dlls/winspool.drv/cups.c
@@ -32,6 +32,62 @@
#include <cups/ppd.h>
#endif
+#ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
+#define GetCurrentProcess GetCurrentProcess_Mac
+#define GetCurrentThread GetCurrentThread_Mac
+#define LoadResource LoadResource_Mac
+#define AnimatePalette AnimatePalette_Mac
+#define EqualRgn EqualRgn_Mac
+#define FillRgn FillRgn_Mac
+#define FrameRgn FrameRgn_Mac
+#define GetPixel GetPixel_Mac
+#define InvertRgn InvertRgn_Mac
+#define LineTo LineTo_Mac
+#define OffsetRgn OffsetRgn_Mac
+#define PaintRgn PaintRgn_Mac
+#define Polygon Polygon_Mac
+#define ResizePalette ResizePalette_Mac
+#define SetRectRgn SetRectRgn_Mac
+#define EqualRect EqualRect_Mac
+#define FillRect FillRect_Mac
+#define FrameRect FrameRect_Mac
+#define GetCursor GetCursor_Mac
+#define InvertRect InvertRect_Mac
+#define OffsetRect OffsetRect_Mac
+#define PtInRect PtInRect_Mac
+#define SetCursor SetCursor_Mac
+#define SetRect SetRect_Mac
+#define ShowCursor ShowCursor_Mac
+#define UnionRect UnionRect_Mac
+#include <ApplicationServices/ApplicationServices.h>
+#undef GetCurrentProcess
+#undef GetCurrentThread
+#undef LoadResource
+#undef AnimatePalette
+#undef EqualRgn
+#undef FillRgn
+#undef FrameRgn
+#undef GetPixel
+#undef InvertRgn
+#undef LineTo
+#undef OffsetRgn
+#undef PaintRgn
+#undef Polygon
+#undef ResizePalette
+#undef SetRectRgn
+#undef EqualRect
+#undef FillRect
+#undef FrameRect
+#undef GetCursor
+#undef InvertRect
+#undef OffsetRect
+#undef PtInRect
+#undef SetCursor
+#undef SetRect
+#undef ShowCursor
+#undef UnionRect
+#endif
+
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -341,3 +397,44 @@ NTSTATUS unix_get_ppd( void *args )
free( unix_ppd );
return status;
}
+
+NTSTATUS unix_get_default_page_size( void *args )
+{
+#ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
+ struct get_default_page_size_params *params = args;
+ NTSTATUS status = STATUS_UNSUCCESSFUL;
+ PMPrintSession session = NULL;
+ PMPageFormat format = NULL;
+ CFStringRef paper_name;
+ PMPaper paper;
+ CFRange range;
+ int size;
+
+ if (PMCreateSession( &session )) goto end;
+ if (PMCreatePageFormat( &format )) goto end;
+ if (PMSessionDefaultPageFormat( session, format )) goto end;
+ if (PMGetPageFormatPaper( format, &paper )) goto end;
+ if (PMPaperGetPPDPaperName( paper, &paper_name )) goto end;
+
+ range.location = 0;
+ range.length = CFStringGetLength( paper_name );
+ size = (range.length + 1) * sizeof(WCHAR);
+
+ if (params->name_size >= size)
+ {
+ CFStringGetCharacters( paper_name, range, (UniChar*)params->name );
+ params->name[range.length] = 0;
+ status = STATUS_SUCCESS;
+ }
+ else
+ status = STATUS_BUFFER_OVERFLOW;
+ params->name_size = size;
+
+end:
+ if (format) PMRelease( format );
+ if (session) PMRelease( session );
+ return status;
+#else
+ return STATUS_NOT_IMPLEMENTED;
+#endif
+}
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 5deab0083d3..a8b0a0365ae 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -48,62 +48,6 @@
# include <cups/ppd.h>
#endif
-#ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
-#define GetCurrentProcess GetCurrentProcess_Mac
-#define GetCurrentThread GetCurrentThread_Mac
-#define LoadResource LoadResource_Mac
-#define AnimatePalette AnimatePalette_Mac
-#define EqualRgn EqualRgn_Mac
-#define FillRgn FillRgn_Mac
-#define FrameRgn FrameRgn_Mac
-#define GetPixel GetPixel_Mac
-#define InvertRgn InvertRgn_Mac
-#define LineTo LineTo_Mac
-#define OffsetRgn OffsetRgn_Mac
-#define PaintRgn PaintRgn_Mac
-#define Polygon Polygon_Mac
-#define ResizePalette ResizePalette_Mac
-#define SetRectRgn SetRectRgn_Mac
-#define EqualRect EqualRect_Mac
-#define FillRect FillRect_Mac
-#define FrameRect FrameRect_Mac
-#define GetCursor GetCursor_Mac
-#define InvertRect InvertRect_Mac
-#define OffsetRect OffsetRect_Mac
-#define PtInRect PtInRect_Mac
-#define SetCursor SetCursor_Mac
-#define SetRect SetRect_Mac
-#define ShowCursor ShowCursor_Mac
-#define UnionRect UnionRect_Mac
-#include <ApplicationServices/ApplicationServices.h>
-#undef GetCurrentProcess
-#undef GetCurrentThread
-#undef LoadResource
-#undef AnimatePalette
-#undef EqualRgn
-#undef FillRgn
-#undef FrameRgn
-#undef GetPixel
-#undef InvertRgn
-#undef LineTo
-#undef OffsetRgn
-#undef PaintRgn
-#undef Polygon
-#undef ResizePalette
-#undef SetRectRgn
-#undef EqualRect
-#undef FillRect
-#undef FrameRect
-#undef GetCursor
-#undef InvertRect
-#undef OffsetRect
-#undef PtInRect
-#undef SetCursor
-#undef SetRect
-#undef ShowCursor
-#undef UnionRect
-#endif
-
#define NONAMELESSSTRUCT
#define NONAMELESSUNION
@@ -987,46 +931,20 @@ end:
static void set_ppd_overrides( HANDLE printer )
{
- WCHAR *wstr = NULL;
- int size = 0;
-#ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
- OSStatus status;
- PMPrintSession session = NULL;
- PMPageFormat format = NULL;
- PMPaper paper;
- CFStringRef paper_name;
- CFRange range;
-
- status = PMCreateSession( &session );
- if (status) goto end;
-
- status = PMCreatePageFormat( &format );
- if (status) goto end;
-
- status = PMSessionDefaultPageFormat( session, format );
- if (status) goto end;
-
- status = PMGetPageFormatPaper( format, &paper );
- if (status) goto end;
-
- status = PMPaperGetPPDPaperName( paper, &paper_name );
- if (status) goto end;
-
- range.location = 0;
- range.length = CFStringGetLength( paper_name );
- size = (range.length + 1) * sizeof(WCHAR);
-
- wstr = HeapAlloc( GetProcessHeap(), 0, size );
- CFStringGetCharacters( paper_name, range, (UniChar*)wstr );
- wstr[range.length] = 0;
-
-end:
- if (format) PMRelease( format );
- if (session) PMRelease( session );
-#endif
+ WCHAR buffer[256];
+ struct get_default_page_size_params params = { .name = buffer, .name_size = sizeof(buffer) };
+ NTSTATUS status;
- SetPrinterDataExW( printer, PPD_Overrides, DefaultPageSize, REG_SZ, (BYTE*)wstr, size );
- HeapFree( GetProcessHeap(), 0, wstr );
+ while (1)
+ {
+ status = UNIX_CALL( get_default_page_size, ¶ms );
+ if (status != STATUS_BUFFER_OVERFLOW) break;
+ if (params.name != buffer) heap_free( params.name );
+ params.name = heap_alloc( params.name_size );
+ if (!params.name) break;
+ }
+ if (!status) SetPrinterDataExW( printer, PPD_Overrides, DefaultPageSize, REG_SZ, (BYTE*)params.name, params.name_size );
+ if (params.name != buffer) heap_free( params.name );
}
static BOOL update_driver( HANDLE printer )
diff --git a/dlls/winspool.drv/wspool.h b/dlls/winspool.drv/wspool.h
index e66e08bfee0..578ed39733d 100644
--- a/dlls/winspool.drv/wspool.h
+++ b/dlls/winspool.drv/wspool.h
@@ -52,6 +52,12 @@ struct enum_printers_params
unsigned int num;
};
+struct get_default_page_size_params
+{
+ WCHAR *name;
+ unsigned int name_size;
+};
+
struct get_ppd_params
{
const WCHAR *printer; /* set to NULL to unlink */
@@ -62,4 +68,5 @@ struct get_ppd_params
NTSTATUS unix_process_attach( void * ) DECLSPEC_HIDDEN;
NTSTATUS unix_enum_printers( void * ) DECLSPEC_HIDDEN;
+NTSTATUS unix_get_default_page_size( void * ) DECLSPEC_HIDDEN;
NTSTATUS unix_get_ppd( void * ) DECLSPEC_HIDDEN;
--
2.23.0
1
0
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winspool.drv/cups.c | 125 +++++++++++++++++++++++++++++++++++++
dlls/winspool.drv/info.c | 107 +++----------------------------
dlls/winspool.drv/wspool.h | 7 +++
3 files changed, 142 insertions(+), 97 deletions(-)
diff --git a/dlls/winspool.drv/cups.c b/dlls/winspool.drv/cups.c
index 7aeb68d4f8d..2ce5f43fa8f 100644
--- a/dlls/winspool.drv/cups.c
+++ b/dlls/winspool.drv/cups.c
@@ -22,6 +22,9 @@
#include <stdarg.h>
#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
#ifdef HAVE_CUPS_CUPS_H
#include <cups/cups.h>
#endif
@@ -56,6 +59,11 @@ static DWORD ntdll_umbstowcs( const char *src, DWORD srclen, WCHAR *dst, DWORD d
{
return MultiByteToWideChar( CP_UNIXCP, 0, src, srclen, dst, dstlen );
}
+static int ntdll_wcstoumbs( const WCHAR *src, DWORD srclen, char *dst, DWORD dstlen, BOOL strict )
+{
+ /* FIXME: strict */
+ return WideCharToMultiByte( CP_UNIXCP, 0, src, srclen, dst, dstlen, NULL, NULL );
+}
#ifdef SONAME_LIBCUPS
@@ -111,6 +119,56 @@ NTSTATUS unix_process_attach( void *arg )
#endif /* SONAME_LIBCUPS */
}
+static BOOL copy_file( const char *src, const char *dst )
+{
+ int fds[2] = { -1, -1 }, num;
+ char buf[1024];
+ BOOL ret = FALSE;
+
+ fds[0] = open( src, O_RDONLY );
+ fds[1] = open( dst, O_CREAT | O_TRUNC | O_WRONLY, 0666 );
+ if (fds[0] == -1 || fds[1] == -1) goto fail;
+
+ while ((num = read( fds[0], buf, sizeof(buf) )) != 0)
+ {
+ if (num == -1) goto fail;
+ if (write( fds[1], buf, num ) != num) goto fail;
+ }
+ ret = TRUE;
+
+fail:
+ if (fds[1] != -1) close( fds[1] );
+ if (fds[0] != -1) close( fds[0] );
+ return ret;
+}
+
+static char *get_unix_file_name( LPCWSTR path )
+{
+ UNICODE_STRING nt_name;
+ OBJECT_ATTRIBUTES attr;
+ NTSTATUS status;
+ ULONG size = 256;
+ char *buffer;
+
+ nt_name.Buffer = (WCHAR *)path;
+ nt_name.MaximumLength = nt_name.Length = lstrlenW( path ) * sizeof(WCHAR);
+ InitializeObjectAttributes( &attr, &nt_name, 0, 0, NULL );
+ for (;;)
+ {
+ if (!(buffer = malloc( size ))) return NULL;
+ status = wine_nt_to_unix_file_name( &attr, buffer, &size, FILE_OPEN_IF );
+ if (status != STATUS_BUFFER_TOO_SMALL) break;
+ free( buffer );
+ }
+ if (status && status != STATUS_NO_SUCH_FILE)
+ {
+ free( buffer );
+ return NULL;
+ }
+ return buffer;
+}
+
+
#ifdef SONAME_LIBCUPS
static WCHAR *cups_get_optionW( const char *opt_name, int num_options, cups_option_t *options )
{
@@ -145,6 +203,32 @@ static BOOL cups_is_scanner( cups_dest_t *dest )
{
return cups_get_printer_type( dest ) & 0x2000000 /* CUPS_PRINTER_SCANNER */;
}
+
+static http_status_t cupsGetPPD3_wrapper( http_t *http, const char *name, time_t *modtime,
+ char *buffer, size_t bufsize )
+{
+ const char *ppd;
+
+ if (pcupsGetPPD3) return pcupsGetPPD3( http, name, modtime, buffer, bufsize );
+ if (!pcupsGetPPD) return HTTP_NOT_FOUND;
+
+ TRACE( "No cupsGetPPD3 implementation, so calling cupsGetPPD\n" );
+
+ *modtime = 0;
+ ppd = pcupsGetPPD( name );
+
+ TRACE( "cupsGetPPD returns %s\n", debugstr_a(ppd) );
+
+ if (!ppd) return HTTP_NOT_FOUND;
+
+ if (rename( ppd, buffer ) == -1)
+ {
+ BOOL res = copy_file( ppd, buffer );
+ unlink( ppd );
+ if (!res) return HTTP_NOT_FOUND;
+ }
+ return HTTP_OK;
+}
#endif /* SONAME_LIBCUPS */
NTSTATUS unix_enum_printers( void *args )
@@ -216,3 +300,44 @@ NTSTATUS unix_enum_printers( void *args )
return STATUS_NOT_SUPPORTED;
#endif /* SONAME_LIBCUPS */
}
+
+NTSTATUS unix_get_ppd( void *args )
+{
+ struct get_ppd_params *params = args;
+ char *unix_ppd = get_unix_file_name( params->ppd );
+ NTSTATUS status = STATUS_SUCCESS;
+
+ TRACE( "(%s, %s)\n", debugstr_w( params->printer ), debugstr_w( params->ppd ) );
+
+ if (!unix_ppd) return STATUS_NO_SUCH_FILE;
+
+ if (!params->printer) /* unlink */
+ {
+ unlink( unix_ppd );
+ }
+ else
+ {
+#ifdef SONAME_LIBCUPS
+ http_status_t http_status;
+ time_t modtime = 0;
+ char *printer_name;
+ int len;
+
+ len = strlenW( params->printer );
+ printer_name = malloc( len * 3 + 1 );
+ ntdll_wcstoumbs( params->printer, len + 1, printer_name, len * 3 + 1, FALSE );
+
+ http_status = cupsGetPPD3_wrapper( 0, printer_name, &modtime, unix_ppd, strlen( unix_ppd ) + 1 );
+ if (http_status != HTTP_OK)
+ {
+ unlink( unix_ppd );
+ status = STATUS_DEVICE_UNREACHABLE;
+ }
+ free( printer_name );
+#else
+ status = STATUS_NOT_SUPPORTED;
+#endif
+ }
+ free( unix_ppd );
+ return status;
+}
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index a3fcb32641a..5deab0083d3 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -752,29 +752,6 @@ static DWORD WINSPOOL_GetOpenedPrinterRegKey(HANDLE hPrinter, HKEY *phkey)
return open_printer_reg_key( name, phkey );
}
-static BOOL copy_file( const char *src, const char *dst )
-{
- int fds[2] = {-1, -1}, num;
- char buf[1024];
- BOOL ret = FALSE;
-
- fds[0] = open( src, O_RDONLY );
- fds[1] = open( dst, O_CREAT | O_TRUNC | O_WRONLY, 0666 );
- if (fds[0] == -1 || fds[1] == -1) goto fail;
-
- while ((num = read( fds[0], buf, sizeof(buf) )) != 0)
- {
- if (num == -1) goto fail;
- if (write( fds[1], buf, num ) != num) goto fail;
- }
- ret = TRUE;
-
-fail:
- if (fds[1] != -1) close( fds[1] );
- if (fds[0] != -1) close( fds[0] );
- return ret;
-}
-
static BOOL get_internal_fallback_ppd( const WCHAR *ppd )
{
static const WCHAR typeW[] = {'P','P','D','F','I','L','E',0};
@@ -817,31 +794,22 @@ static WCHAR *get_ppd_filename( const WCHAR *dir, const WCHAR *file_name )
return ppd;
}
-static char *get_dest_name( const WCHAR *printer )
-{
- int len = WideCharToMultiByte( CP_UNIXCP, 0, printer, -1, NULL, 0, NULL, NULL );
- char *dest = heap_alloc( len );
-
- if (dest) WideCharToMultiByte( CP_UNIXCP, 0, printer, -1, dest, len, NULL, NULL );
- return dest;
-}
-
-static BOOL get_cups_ppd( const char *printer_name, const WCHAR *ppd );
-static void unlink_ppd( const WCHAR *ppd );
-
static BOOL add_printer_driver( const WCHAR *name, const WCHAR *ppd_dir )
{
WCHAR *ppd = get_ppd_filename( ppd_dir, name );
- char *dest_name;
+ struct get_ppd_params ppd_params;
+ UNICODE_STRING nt_ppd;
DRIVER_INFO_3W di3;
unsigned int i;
BOOL res = FALSE;
if (!ppd) return FALSE;
- dest_name = get_dest_name( name );
- if (!dest_name) goto end;
+ RtlInitUnicodeString( &nt_ppd, NULL );
+ if (!RtlDosPathNameToNtPathName_U( ppd, &nt_ppd, NULL, NULL )) goto end;
- res = get_cups_ppd( dest_name, ppd ) || get_internal_fallback_ppd( ppd );
+ ppd_params.printer = name;
+ ppd_params.ppd = nt_ppd.Buffer;
+ res = !UNIX_CALL( get_ppd, &ppd_params ) || get_internal_fallback_ppd( ppd );
if (!res) goto end;
memset( &di3, 0, sizeof(DRIVER_INFO_3W) );
@@ -872,10 +840,11 @@ static BOOL add_printer_driver( const WCHAR *name, const WCHAR *ppd_dir )
}
res = TRUE;
}
- unlink_ppd( ppd );
+ ppd_params.printer = NULL; /* unlink the ppd */
+ UNIX_CALL( get_ppd, &ppd_params );
end:
- heap_free( dest_name );
+ RtlFreeUnicodeString( &nt_ppd );
heap_free( ppd );
return res;
}
@@ -904,13 +873,6 @@ static WCHAR *get_ppd_dir( void )
return dir;
}
-static void unlink_ppd( const WCHAR *ppd )
-{
- char *unix_name = wine_get_unix_file_name( ppd );
- unlink( unix_name );
- HeapFree( GetProcessHeap(), 0, unix_name );
-}
-
#ifdef SONAME_LIBCUPS
extern void *libcups_handle;
@@ -932,56 +894,7 @@ extern void *libcups_handle;
CUPS_FUNCS;
#undef DO_FUNC
extern cups_dest_t * (*pcupsGetNamedDest)(http_t *, const char *, const char *);
-extern const char * (*pcupsGetPPD)(const char *);
-extern http_status_t (*pcupsGetPPD3)(http_t *, const char *, time_t *, char *, size_t);
extern const char * (*pcupsLastErrorString)(void);
-
-static http_status_t cupsGetPPD3_wrapper( http_t *http, const char *name,
- time_t *modtime, char *buffer,
- size_t bufsize )
-{
- const char *ppd;
-
- if (pcupsGetPPD3) return pcupsGetPPD3( http, name, modtime, buffer, bufsize );
-
- if (!pcupsGetPPD) return HTTP_NOT_FOUND;
-
- TRACE( "No cupsGetPPD3 implementation, so calling cupsGetPPD\n" );
-
- *modtime = 0;
- ppd = pcupsGetPPD( name );
-
- TRACE( "cupsGetPPD returns %s\n", debugstr_a(ppd) );
-
- if (!ppd) return HTTP_NOT_FOUND;
-
- if (rename( ppd, buffer ) == -1)
- {
- BOOL res = copy_file( ppd, buffer );
- unlink( ppd );
- if (!res) return HTTP_NOT_FOUND;
- }
- return HTTP_OK;
-}
-
-static BOOL get_cups_ppd( const char *printer_name, const WCHAR *ppd )
-{
- time_t modtime = 0;
- http_status_t http_status;
- char *unix_name = wine_get_unix_file_name( ppd );
-
- TRACE( "(%s, %s)\n", debugstr_a(printer_name), debugstr_w(ppd) );
-
- if (!unix_name) return FALSE;
-
- http_status = cupsGetPPD3_wrapper( 0, printer_name, &modtime,
- unix_name, strlen( unix_name ) + 1 );
-
- if (http_status != HTTP_OK) unlink( unix_name );
- HeapFree( GetProcessHeap(), 0, unix_name );
-
- return http_status == HTTP_OK;
-}
#endif
static BOOL init_unix_printers( void )
diff --git a/dlls/winspool.drv/wspool.h b/dlls/winspool.drv/wspool.h
index 5a1f1038995..e66e08bfee0 100644
--- a/dlls/winspool.drv/wspool.h
+++ b/dlls/winspool.drv/wspool.h
@@ -52,7 +52,14 @@ struct enum_printers_params
unsigned int num;
};
+struct get_ppd_params
+{
+ const WCHAR *printer; /* set to NULL to unlink */
+ const WCHAR *ppd;
+};
+
#define UNIX_CALL( func, params ) unix_ ## func( params )
NTSTATUS unix_process_attach( void * ) DECLSPEC_HIDDEN;
NTSTATUS unix_enum_printers( void * ) DECLSPEC_HIDDEN;
+NTSTATUS unix_get_ppd( void * ) DECLSPEC_HIDDEN;
--
2.23.0
1
0
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winspool.drv/cups.c | 117 +++++++++++++++++++++++++++++
dlls/winspool.drv/info.c | 148 +++++++++++++------------------------
dlls/winspool.drv/wspool.h | 16 ++++
3 files changed, 185 insertions(+), 96 deletions(-)
diff --git a/dlls/winspool.drv/cups.c b/dlls/winspool.drv/cups.c
index 207c95c568a..7aeb68d4f8d 100644
--- a/dlls/winspool.drv/cups.c
+++ b/dlls/winspool.drv/cups.c
@@ -41,11 +41,22 @@
#include "winspool.h"
#include "ddk/winsplp.h"
#include "wine/debug.h"
+#include "wine/unicode.h"
#include "wspool.h"
WINE_DEFAULT_DEBUG_CHANNEL(winspool);
+/* Temporary helpers until switch to unixlib */
+#include "winnls.h"
+#include "wine/heap.h"
+#define malloc( sz ) heap_alloc( sz )
+#define free( ptr ) heap_free( ptr )
+static DWORD ntdll_umbstowcs( const char *src, DWORD srclen, WCHAR *dst, DWORD dstlen )
+{
+ return MultiByteToWideChar( CP_UNIXCP, 0, src, srclen, dst, dstlen );
+}
+
#ifdef SONAME_LIBCUPS
void *libcups_handle = NULL;
@@ -99,3 +110,109 @@ NTSTATUS unix_process_attach( void *arg )
return STATUS_NOT_SUPPORTED;
#endif /* SONAME_LIBCUPS */
}
+
+#ifdef SONAME_LIBCUPS
+static WCHAR *cups_get_optionW( const char *opt_name, int num_options, cups_option_t *options )
+{
+ const char *value;
+ WCHAR *ret;
+ int len;
+
+ value = pcupsGetOption( opt_name, num_options, options );
+ if (!value) return NULL;
+
+ len = strlen( value ) + 1;
+ ret = malloc( len * sizeof(WCHAR) );
+ if (ret) ntdll_umbstowcs( value, len, ret, len );
+
+ return ret;
+}
+
+static cups_ptype_t cups_get_printer_type( const cups_dest_t *dest )
+{
+ const char *value;
+ cups_ptype_t ret;
+ char *end;
+
+ value = pcupsGetOption( "printer-type", dest->num_options, dest->options );
+ if (!value) return 0;
+ ret = (cups_ptype_t)strtoul( value, &end, 10 );
+ if (*end) ret = 0;
+ return ret;
+}
+
+static BOOL cups_is_scanner( cups_dest_t *dest )
+{
+ return cups_get_printer_type( dest ) & 0x2000000 /* CUPS_PRINTER_SCANNER */;
+}
+#endif /* SONAME_LIBCUPS */
+
+NTSTATUS unix_enum_printers( void *args )
+{
+ struct enum_printers_params *params = args;
+#ifdef SONAME_LIBCUPS
+ unsigned int num, i, name_len, comment_len, location_len, needed;
+ WCHAR *comment, *location, *ptr;
+ struct printer_info *info;
+ cups_dest_t *dests;
+
+ params->num = 0;
+ if (!pcupsGetDests) return STATUS_NOT_SUPPORTED;
+
+ num = pcupsGetDests( &dests );
+
+ for (i = 0; i < num; i++)
+ {
+ if (cups_is_scanner( dests + i ))
+ {
+ TRACE( "Printer %d: %s - skipping scanner\n", i, debugstr_a( dests[i].name ) );
+ continue;
+ }
+ TRACE( "Printer %d: %s\n", i, debugstr_a( dests[i].name ) );
+ params->num++;
+ }
+
+ needed = sizeof( *info ) * params->num;
+ info = params->printers;
+ ptr = (WCHAR *)(info + params->num);
+
+ for (i = 0; i < num; i++)
+ {
+ if (cups_is_scanner( dests + i )) continue;
+
+ comment = cups_get_optionW( "printer-info", dests[i].num_options, dests[i].options );
+ location = cups_get_optionW( "printer-location", dests[i].num_options, dests[i].options );
+
+ name_len = strlen( dests[i].name ) + 1;
+ comment_len = comment ? strlenW( comment ) + 1 : 0;
+ location_len = location ? strlenW( location ) + 1 : 0;
+ needed += (name_len + comment_len + location_len) * sizeof(WCHAR);
+
+ if (needed <= params->size)
+ {
+ info->name = ptr;
+ ntdll_umbstowcs( dests[i].name, name_len, info->name, name_len );
+ info->comment = comment ? ptr + name_len : NULL;
+ memcpy( info->comment, comment, comment_len * sizeof(WCHAR) );
+ info->location = location ? ptr + name_len + comment_len : NULL;
+ memcpy( info->location, location, location_len * sizeof(WCHAR) );
+ info->is_default = dests[i].is_default;
+ info++;
+ ptr += name_len + comment_len + location_len;
+ }
+ free( comment );
+ free( location );
+ }
+ pcupsFreeDests( num, dests );
+
+ if (needed > params->size)
+ {
+ params->size = needed;
+ return STATUS_BUFFER_OVERFLOW;
+ }
+ return STATUS_SUCCESS;
+#else
+ params->num = 0;
+ return STATUS_NOT_SUPPORTED;
+#endif /* SONAME_LIBCUPS */
+}
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 9d2af8cec94..a3fcb32641a 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -107,6 +107,8 @@
#define NONAMELESSSTRUCT
#define NONAMELESSUNION
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
@@ -917,7 +919,6 @@ extern void *libcups_handle;
DO_FUNC(cupsAddOption); \
DO_FUNC(cupsFreeDests); \
DO_FUNC(cupsFreeOptions); \
- DO_FUNC(cupsGetDests); \
DO_FUNC(cupsGetOption); \
DO_FUNC(cupsParseOptions); \
DO_FUNC(cupsPrintFile)
@@ -981,137 +982,96 @@ static BOOL get_cups_ppd( const char *printer_name, const WCHAR *ppd )
return http_status == HTTP_OK;
}
+#endif
-static WCHAR *get_cups_option( const char *name, int num_options, cups_option_t *options )
-{
- const char *value;
- WCHAR *ret;
- int len;
-
- value = pcupsGetOption( name, num_options, options );
- if (!value) return NULL;
-
- len = MultiByteToWideChar( CP_UNIXCP, 0, value, -1, NULL, 0 );
- ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
- if (ret) MultiByteToWideChar( CP_UNIXCP, 0, value, -1, ret, len );
-
- return ret;
-}
-
-static cups_ptype_t get_cups_printer_type( const cups_dest_t *dest )
+static BOOL init_unix_printers( void )
{
- WCHAR *type = get_cups_option( "printer-type", dest->num_options, dest->options ), *end;
- cups_ptype_t ret = 0;
+ WCHAR *port, *ppd_dir = NULL, *default_printer = NULL;
+ struct enum_printers_params enum_params;
+ HKEY printer_key, printers_key;
+ HANDLE added_printer;
+ PRINTER_INFO_2W pi2;
+ NTSTATUS status;
+ int i;
- if (type && *type)
+ if (RegCreateKeyW( HKEY_LOCAL_MACHINE, PrintersW, &printers_key ) != ERROR_SUCCESS)
{
- ret = (cups_ptype_t)strtoulW( type, &end, 10 );
- if (*end) ret = 0;
- }
- HeapFree( GetProcessHeap(), 0, type );
- return ret;
-}
-
-static BOOL CUPS_LoadPrinters(void)
-{
- int i, nrofdests;
- BOOL hadprinter = FALSE, haddefault = FALSE;
- cups_dest_t *dests;
- PRINTER_INFO_2W pi2;
- WCHAR *port, *ppd_dir = NULL;
- HKEY hkeyPrinter, hkeyPrinters;
- WCHAR nameW[MAX_PATH];
- HANDLE added_printer;
- cups_ptype_t printer_type;
-
- if (!libcups_handle) return FALSE;
-
- if(RegCreateKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters) !=
- ERROR_SUCCESS) {
- ERR("Can't create Printers key\n");
- return FALSE;
+ ERR( "Can't create Printers key\n" );
+ return FALSE;
}
- nrofdests = pcupsGetDests(&dests);
- TRACE("Found %d CUPS %s:\n", nrofdests, (nrofdests == 1) ? "printer" : "printers");
- for (i=0;i<nrofdests;i++) {
- MultiByteToWideChar(CP_UNIXCP, 0, dests[i].name, -1, nameW, ARRAY_SIZE(nameW));
- printer_type = get_cups_printer_type( dests + i );
-
- TRACE( "Printer %d: %s. printer_type %x\n", i, debugstr_w(nameW), printer_type );
+ enum_params.size = 10000;
+ enum_params.printers = NULL;
+ do
+ {
+ enum_params.size *= 2;
+ heap_free( enum_params.printers );
+ enum_params.printers = heap_alloc( enum_params.size );
+ status = UNIX_CALL( enum_printers, &enum_params );
+ } while (status == STATUS_BUFFER_OVERFLOW);
+ if (status) goto end;
- if (printer_type & 0x2000000 /* CUPS_PRINTER_SCANNER */)
- {
- TRACE( "skipping scanner-only device\n" );
- continue;
- }
+ TRACE( "Found %d CUPS %s:\n", enum_params.num, (enum_params.num == 1) ? "printer" : "printers" );
+ for (i = 0; i < enum_params.num; i++)
+ {
+ struct printer_info *printer = enum_params.printers + i;
- if (RegOpenKeyW( hkeyPrinters, nameW, &hkeyPrinter ) == ERROR_SUCCESS)
+ if (RegOpenKeyW( printers_key, printer->name, &printer_key ) == ERROR_SUCCESS)
{
- DWORD status = get_dword_from_reg( hkeyPrinter, StatusW );
+ DWORD status = get_dword_from_reg( printer_key, StatusW );
/* Printer already in registry, delete the tag added in WINSPOOL_LoadSystemPrinters
and continue */
TRACE("Printer already exists\n");
- RegDeleteValueW(hkeyPrinter, May_Delete_Value);
+ RegDeleteValueW( printer_key, May_Delete_Value );
/* flag that the PPD file should be checked for an update */
- set_reg_DWORD( hkeyPrinter, StatusW, status | PRINTER_STATUS_DRIVER_UPDATE_NEEDED );
- RegCloseKey(hkeyPrinter);
+ set_reg_DWORD( printer_key, StatusW, status | PRINTER_STATUS_DRIVER_UPDATE_NEEDED );
+ RegCloseKey( printer_key );
}
else
{
if (!ppd_dir && !(ppd_dir = get_ppd_dir())) break;
- if (!add_printer_driver( nameW, ppd_dir )) continue;
+ if (!add_printer_driver( printer->name, ppd_dir )) continue;
- port = heap_alloc( sizeof(CUPS_Port) + lstrlenW( nameW ) * sizeof(WCHAR) );
+ port = heap_alloc( sizeof(CUPS_Port) + lstrlenW( printer->name ) * sizeof(WCHAR) );
lstrcpyW( port, CUPS_Port );
- lstrcatW( port, nameW );
+ lstrcatW( port, printer->name );
- memset(&pi2, 0, sizeof(PRINTER_INFO_2W));
- pi2.pPrinterName = nameW;
+ memset( &pi2, 0, sizeof(PRINTER_INFO_2W) );
+ pi2.pPrinterName = printer->name;
pi2.pDatatype = rawW;
pi2.pPrintProcessor = WinPrintW;
- pi2.pDriverName = nameW;
- pi2.pComment = get_cups_option( "printer-info", dests[i].num_options, dests[i].options );
- pi2.pLocation = get_cups_option( "printer-location", dests[i].num_options, dests[i].options );
+ pi2.pDriverName = printer->name;
+ pi2.pComment = printer->comment;
+ pi2.pLocation = printer->location;
pi2.pPortName = port;
pi2.pParameters = emptyStringW;
pi2.pShareName = emptyStringW;
pi2.pSepFile = emptyStringW;
- added_printer = AddPrinterW( NULL, 2, (LPBYTE)&pi2 );
+ added_printer = AddPrinterW( NULL, 2, (BYTE *)&pi2 );
if (added_printer) ClosePrinter( added_printer );
else if (GetLastError() != ERROR_PRINTER_ALREADY_EXISTS)
- ERR( "printer '%s' not added by AddPrinter (error %d)\n", debugstr_w(nameW), GetLastError() );
+ ERR( "printer '%s' not added by AddPrinter (error %d)\n", debugstr_w( printer->name ), GetLastError() );
heap_free( port );
- HeapFree( GetProcessHeap(), 0, pi2.pComment );
- HeapFree( GetProcessHeap(), 0, pi2.pLocation );
- }
-
- hadprinter = TRUE;
- if (dests[i].is_default) {
- SetDefaultPrinterW(nameW);
- haddefault = TRUE;
}
+ if (printer->is_default) default_printer = printer->name;
}
+ if (!default_printer && enum_params.num) default_printer = enum_params.printers[0].name;
+ if (default_printer) SetDefaultPrinterW( default_printer );
+
if (ppd_dir)
{
RemoveDirectoryW( ppd_dir );
- HeapFree( GetProcessHeap(), 0, ppd_dir );
+ heap_free( ppd_dir );
}
-
- if (hadprinter && !haddefault) {
- MultiByteToWideChar(CP_UNIXCP, 0, dests[0].name, -1, nameW, ARRAY_SIZE(nameW));
- SetDefaultPrinterW(nameW);
- }
- pcupsFreeDests(nrofdests, dests);
- RegCloseKey(hkeyPrinters);
+end:
+ heap_free( enum_params.printers );
+ RegCloseKey( printers_key );
return TRUE;
}
-#endif
-
static void set_ppd_overrides( HANDLE printer )
{
WCHAR *wstr = NULL;
@@ -1493,11 +1453,7 @@ void WINSPOOL_LoadSystemPrinters(void)
}
old_printer_check( FALSE );
-
-#ifdef SONAME_LIBCUPS
- CUPS_LoadPrinters();
-#endif
-
+ init_unix_printers();
old_printer_check( TRUE );
ReleaseMutex( init_mutex );
diff --git a/dlls/winspool.drv/wspool.h b/dlls/winspool.drv/wspool.h
index bca4a5ea02d..5a1f1038995 100644
--- a/dlls/winspool.drv/wspool.h
+++ b/dlls/winspool.drv/wspool.h
@@ -37,6 +37,22 @@ extern void WINSPOOL_LoadSystemPrinters(void) DECLSPEC_HIDDEN;
#define FILENAME_DIALOG 100
#define EDITBOX 201
+struct printer_info
+{
+ WCHAR *name;
+ WCHAR *comment;
+ WCHAR *location;
+ BOOL is_default;
+};
+
+struct enum_printers_params
+{
+ struct printer_info *printers;
+ unsigned int size;
+ unsigned int num;
+};
+
#define UNIX_CALL( func, params ) unix_ ## func( params )
NTSTATUS unix_process_attach( void * ) DECLSPEC_HIDDEN;
+NTSTATUS unix_enum_printers( void * ) DECLSPEC_HIDDEN;
--
2.23.0
1
0
[PATCH 3/6] winspool: Call the ppd retrieval function from add_printer_driver().
by Huw Davies 26 Oct '21
by Huw Davies 26 Oct '21
26 Oct '21
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winspool.drv/info.c | 197 +++++++++++++++------------------------
1 file changed, 77 insertions(+), 120 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index badde6ea5ae..9d2af8cec94 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -750,43 +750,6 @@ static DWORD WINSPOOL_GetOpenedPrinterRegKey(HANDLE hPrinter, HKEY *phkey)
return open_printer_reg_key( name, phkey );
}
-static BOOL add_printer_driver(const WCHAR *name, WCHAR *ppd)
-{
- DRIVER_INFO_3W di3;
- unsigned int i;
- BOOL res;
-
- ZeroMemory(&di3, sizeof(DRIVER_INFO_3W));
- di3.cVersion = 3;
- di3.pName = (WCHAR*)name;
- di3.pDriverPath = driver_nt;
- di3.pDataFile = ppd;
- di3.pConfigFile = driver_nt;
- di3.pDefaultDataType = rawW;
-
- for (i = 0; i < ARRAY_SIZE(all_printenv); i++)
- {
- di3.pEnvironment = (WCHAR *) all_printenv[i]->envname;
- if (all_printenv[i]->envname == envname_win40W)
- {
- /* We use wineps16.drv as driver for 16 bit */
- di3.pDriverPath = driver_9x;
- di3.pConfigFile = driver_9x;
- }
- res = AddPrinterDriverExW( NULL, 3, (LPBYTE)&di3, APD_COPY_NEW_FILES | APD_COPY_FROM_DIRECTORY );
- TRACE("got %d and %d for %s (%s)\n", res, GetLastError(), debugstr_w(name), debugstr_w(di3.pEnvironment));
-
- if (!res && (GetLastError() != ERROR_PRINTER_DRIVER_ALREADY_INSTALLED))
- {
- ERR("failed with %u for %s (%s) %s\n", GetLastError(), debugstr_w(name),
- debugstr_w(di3.pEnvironment), debugstr_w(di3.pDriverPath));
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
static BOOL copy_file( const char *src, const char *dst )
{
int fds[2] = {-1, -1}, num;
@@ -852,6 +815,69 @@ static WCHAR *get_ppd_filename( const WCHAR *dir, const WCHAR *file_name )
return ppd;
}
+static char *get_dest_name( const WCHAR *printer )
+{
+ int len = WideCharToMultiByte( CP_UNIXCP, 0, printer, -1, NULL, 0, NULL, NULL );
+ char *dest = heap_alloc( len );
+
+ if (dest) WideCharToMultiByte( CP_UNIXCP, 0, printer, -1, dest, len, NULL, NULL );
+ return dest;
+}
+
+static BOOL get_cups_ppd( const char *printer_name, const WCHAR *ppd );
+static void unlink_ppd( const WCHAR *ppd );
+
+static BOOL add_printer_driver( const WCHAR *name, const WCHAR *ppd_dir )
+{
+ WCHAR *ppd = get_ppd_filename( ppd_dir, name );
+ char *dest_name;
+ DRIVER_INFO_3W di3;
+ unsigned int i;
+ BOOL res = FALSE;
+
+ if (!ppd) return FALSE;
+ dest_name = get_dest_name( name );
+ if (!dest_name) goto end;
+
+ res = get_cups_ppd( dest_name, ppd ) || get_internal_fallback_ppd( ppd );
+ if (!res) goto end;
+
+ memset( &di3, 0, sizeof(DRIVER_INFO_3W) );
+ di3.cVersion = 3;
+ di3.pName = (WCHAR *)name;
+ di3.pDriverPath = driver_nt;
+ di3.pDataFile = ppd;
+ di3.pConfigFile = driver_nt;
+ di3.pDefaultDataType = rawW;
+
+ for (i = 0; i < ARRAY_SIZE(all_printenv); i++)
+ {
+ di3.pEnvironment = (WCHAR *)all_printenv[i]->envname;
+ if (all_printenv[i]->envname == envname_win40W)
+ {
+ /* We use wineps16.drv as driver for 16 bit */
+ di3.pDriverPath = driver_9x;
+ di3.pConfigFile = driver_9x;
+ }
+ res = AddPrinterDriverExW( NULL, 3, (BYTE *)&di3, APD_COPY_NEW_FILES | APD_COPY_FROM_DIRECTORY );
+ TRACE( "got %d and %d for %s (%s)\n", res, GetLastError(), debugstr_w( name ), debugstr_w( di3.pEnvironment ) );
+
+ if (!res && (GetLastError() != ERROR_PRINTER_DRIVER_ALREADY_INSTALLED))
+ {
+ ERR( "failed with %u for %s (%s) %s\n", GetLastError(), debugstr_w( name ),
+ debugstr_w( di3.pEnvironment ), debugstr_w( di3.pDriverPath ) );
+ break;
+ }
+ res = TRUE;
+ }
+ unlink_ppd( ppd );
+
+end:
+ heap_free( dest_name );
+ heap_free( ppd );
+ return res;
+}
+
static WCHAR *get_ppd_dir( void )
{
static const WCHAR wine_ppds[] = {'w','i','n','e','_','p','p','d','s','\\',0};
@@ -953,11 +979,7 @@ static BOOL get_cups_ppd( const char *printer_name, const WCHAR *ppd )
if (http_status != HTTP_OK) unlink( unix_name );
HeapFree( GetProcessHeap(), 0, unix_name );
- if (http_status == HTTP_OK) return TRUE;
-
- TRACE( "failed to get ppd for printer %s from cups (status %d), calling fallback\n",
- debugstr_a(printer_name), http_status );
- return get_internal_fallback_ppd( ppd );
+ return http_status == HTTP_OK;
}
static WCHAR *get_cups_option( const char *name, int num_options, cups_option_t *options )
@@ -996,7 +1018,7 @@ static BOOL CUPS_LoadPrinters(void)
BOOL hadprinter = FALSE, haddefault = FALSE;
cups_dest_t *dests;
PRINTER_INFO_2W pi2;
- WCHAR *port, *ppd_dir = NULL, *ppd;
+ WCHAR *port, *ppd_dir = NULL;
HKEY hkeyPrinter, hkeyPrinters;
WCHAR nameW[MAX_PATH];
HANDLE added_printer;
@@ -1024,7 +1046,8 @@ static BOOL CUPS_LoadPrinters(void)
continue;
}
- if(RegOpenKeyW(hkeyPrinters, nameW, &hkeyPrinter) == ERROR_SUCCESS) {
+ if (RegOpenKeyW( hkeyPrinters, nameW, &hkeyPrinter ) == ERROR_SUCCESS)
+ {
DWORD status = get_dword_from_reg( hkeyPrinter, StatusW );
/* Printer already in registry, delete the tag added in WINSPOOL_LoadSystemPrinters
and continue */
@@ -1033,19 +1056,11 @@ static BOOL CUPS_LoadPrinters(void)
/* flag that the PPD file should be checked for an update */
set_reg_DWORD( hkeyPrinter, StatusW, status | PRINTER_STATUS_DRIVER_UPDATE_NEEDED );
RegCloseKey(hkeyPrinter);
- } else {
- BOOL added_driver = FALSE;
-
+ }
+ else
+ {
if (!ppd_dir && !(ppd_dir = get_ppd_dir())) break;
-
- ppd = get_ppd_filename( ppd_dir, nameW );
- if (get_cups_ppd( dests[i].name, ppd ))
- {
- added_driver = add_printer_driver( nameW, ppd );
- unlink_ppd( ppd );
- }
- HeapFree( GetProcessHeap(), 0, ppd );
- if (!added_driver) continue;
+ if (!add_printer_driver( nameW, ppd_dir )) continue;
port = heap_alloc( sizeof(CUPS_Port) + lstrlenW( nameW ) * sizeof(WCHAR) );
lstrcpyW( port, CUPS_Port );
@@ -1097,43 +1112,6 @@ static BOOL CUPS_LoadPrinters(void)
#endif
-static char *get_queue_name( HANDLE printer, BOOL *cups )
-{
- WCHAR *port, *name = NULL;
- DWORD err, needed, type;
- char *ret = NULL;
- HKEY key;
-
- *cups = FALSE;
-
- err = WINSPOOL_GetOpenedPrinterRegKey( printer, &key );
- if (err) return NULL;
- err = RegQueryValueExW( key, PortW, 0, &type, NULL, &needed );
- if (err) goto end;
- port = HeapAlloc( GetProcessHeap(), 0, needed );
- if (!port) goto end;
- RegQueryValueExW( key, PortW, 0, &type, (BYTE*)port, &needed );
-
- if (!strncmpW( port, CUPS_Port, ARRAY_SIZE( CUPS_Port ) -1 ))
- {
- name = port + ARRAY_SIZE( CUPS_Port ) - 1;
- *cups = TRUE;
- }
- else if (!strncmpW( port, LPR_Port, ARRAY_SIZE( LPR_Port ) -1 ))
- name = port + ARRAY_SIZE( LPR_Port ) - 1;
- if (name)
- {
- needed = WideCharToMultiByte( CP_UNIXCP, 0, name, -1, NULL, 0, NULL, NULL );
- ret = HeapAlloc( GetProcessHeap(), 0, needed );
- if(ret) WideCharToMultiByte( CP_UNIXCP, 0, name, -1, ret, needed, NULL, NULL );
- }
- HeapFree( GetProcessHeap(), 0, port );
-end:
- RegCloseKey( key );
- return ret;
-}
-
-
static void set_ppd_overrides( HANDLE printer )
{
WCHAR *wstr = NULL;
@@ -1180,38 +1158,17 @@ end:
static BOOL update_driver( HANDLE printer )
{
- BOOL ret, is_cups;
+ BOOL ret;
const WCHAR *name = get_opened_printer_name( printer );
- WCHAR *ppd_dir, *ppd;
- char *queue_name;
+ WCHAR *ppd_dir;
if (!name) return FALSE;
- queue_name = get_queue_name( printer, &is_cups );
- if (!queue_name) return FALSE;
-
- if (!(ppd_dir = get_ppd_dir()))
- {
- HeapFree( GetProcessHeap(), 0, queue_name );
- return FALSE;
- }
- ppd = get_ppd_filename( ppd_dir, name );
+ if (!(ppd_dir = get_ppd_dir())) return FALSE;
-#ifdef SONAME_LIBCUPS
- if (is_cups)
- ret = get_cups_ppd( queue_name, ppd );
- else
-#endif
- ret = get_internal_fallback_ppd( ppd );
+ TRACE( "updating driver %s\n", debugstr_w( name ) );
+ ret = add_printer_driver( name, ppd_dir );
- if (ret)
- {
- TRACE( "updating driver %s\n", debugstr_w( name ) );
- ret = add_printer_driver( name, ppd );
- unlink_ppd( ppd );
- }
- HeapFree( GetProcessHeap(), 0, ppd_dir );
- HeapFree( GetProcessHeap(), 0, ppd );
- HeapFree( GetProcessHeap(), 0, queue_name );
+ heap_free( ppd_dir );
set_ppd_overrides( printer );
--
2.23.0
1
0