1. 多 国 语 言 编 程 之 资 源 转 换 问 题
不 同 国 家 的 人 使 用 着 不 同 语 言 的 操 作 系 统。 在Microsoft Windows 下, 语 言 用 代 码 页 来 识 别, 不 同 语 言 用 不 同 代 码 页 来 表 示, 如" 简 体 中 文" 用 代 码 页936 表 示, 而" 美 国 英 语" 则 用 代 码 页1252 表 示。
在 用Visual C + + 开 发 应 用 程 序 时, 与 语 种 相 关 信 息 一 般 存 储 在 资 源 文 件( *.RC 文 件) 中, 因 此, 要 编 制 不 同 语 种 应 用 程 序( 如 中 文 应 用 程 序、 英 文 应 用 程 序), 实 质 上 是 要 求 编 写 出 不 同 语 种 的 资 源 文 件。 在 实 际 编 程 中, 我 们 可 将 不 同 语 种 的 资 源 文 件 编 译 成 相 应 的 动 态 连 接 库。 这 样, 在 使 用 时, 可 根 据 操 作 系 统 所 使 用 代 码 页 异 同, 选 用 由 相 应 语 种 的 资 源 文 件 编 译 而 成 的 动 态 连 接 库, 即 可 使 应 用 程 序 正 常 运 行。 这 就 是 所 谓 的 多 国 语 言 编 程 问 题。
在 开 发 中 文 应 用 程 序 时, 常 要 求 应 用 程 序 在 中 文 操 作 系 统 和 英 文 操 作 系 统 + 外 挂 汉 字 平 台 这 两 种 环 境 中 都 能 正 常 运 行。 但 由 于 工 作 环 境 不 同, 往 往 导 致 同 一 应 用 程 序, 在 某 种 环 境 下 能 正 常 工 作, 在 另 一 种 环 境 下 则 不 能 正 常 工 作。 如 中 文 版 的Microsoft Word 软 件, 在 中 文 操 作 系 统 下 能 正 常 运 行, 但 在 英 文 操 作 系 统 + 外 挂 汉 字 平 台 这 种 环 境 下, 显 示 的 就 是 一 堆 乱 码。
要 解 决 这 一 问 题, 需 为 不 同 语 种 操 作 系 统 编 制 不 同 语 种 资 源 文 件, 实 际 上 这 也 是 多 国 语 言 编 程 问 题。 所 不 同 的 是, 由 于 此 时 所 显 示 信 息 并 不 需 随 语 种 而 变( 无 论 在 哪 种 环 境 下 都 只 显 示 中 文 信 息), 因 此, 编 制 多 个 语 种 资 源 文 件 可 以 有 很 简 单 的 方 法, 此 即 本 文 所 要 讨 论 的 资 源 转 换 问 题。 该 问 题 可 简 单 地 描 述 为: 如 果 已 有 了 某 一 语 种 的 资 源 文 件, 在 资 源 内 容 不 变 的 情 况 下, 如 何 将 其 转 换 为 另 一 语 种 的 资 源 文 件。 例 如, 已 有 了 简 体 中 文( 代 码 页 为936) 的 资 源 文 件, 在 资 源 内 容 不 变 的 情 况 下, 如 何 将 其 转 换 为 美 国 英 语( 代 码 页 为1252) 的 资 源 文 件。
2. 如 何 进 行 资 源 转 换
下 面 以 将 资 源 文 件 从 代 码 页936( 简 体 中 文) 转 换 到 代 码 页1252( 美 国 英 语) 为 例 进 行 说 明。
容 易 想 到 但 会 带 来 灾 难 性 后 果 的 方 法 是, 直 接 修 改 资 源 属 性。 这 种 方 法 过 程 是 将Visual C + + 的Workspace 窗 口 切 换 到Resource View, 选 中 某 项 资 源, 单 击 右 键, 从 弹 出 菜 单 中 选 择"Properties" 命 令, 此 时 系 统 将 会 弹 出 一 对 话 框。 在 弹 出 的 对 话 框 中, 修 改Language 项 的 值, 将 其 由" 简 体 中 文" 改 为" 美 国 英 语"。 如 此 对Resource View 中 其 他 各 项 资 源 进 行 修 改, 将 所 有 资 源 项 的Language 属 性 都 改 为" 美 国 英 语"。 但 是, 经 此 种 修 改 后, 再 打 开 资 源, 会 发 现 资 源 里 的 内 容 变 成 了 一 堆 不 可 读 的 乱 码。 更 致 命 的 是, 即 使 将 资 源 的Language 项 的 属 性 重 新 设 为" 简 体 中 文", 资 源 内 容 仍 是 不 可 读 的 一 堆 乱 码。 也 就 是 说, 我 们 根 本 无 法 恢 复 资 源 原 来 内 容。 因 此, 如 果 在 修 改 前 没 有 将 资 源 备 份, 此 种 修 改 带 来 的 后 果 将 是 灾 难 性 的。
正 确 的 方 法 是, 以 某 文 本 编 辑 器( 如EDIT、NOTEPAD) 打 开 资 源 文 件, 在 其 中 查 找 词"LANGUAGE", 找 到 后 可 看 到 如 下 内 容:
////////////////////////////////////////////// // Chinese (P. R. C.) resources #if !defined(AFX_RESOURCE_DLL) || defined (AFX_TARG_CHS) #ifdef _WIN32 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #pragma code_page(936) #endif //_WIN32这 段 代 码 表 示 当 前 使 用 的 代 码 页 为936, 所 代 表 的 语 种 为 简 体 中 文。 将 以 上 代 码 段 用 如 下 代 码 段 替 换
////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined (AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32以 上 代 码 说 明 资 源 使 用 代 码 页 为1252, 所 代 表 语 种 为 美 国 英 语。
经 过 上 面 简 单 修 改, 即 可 将 代 码 页 为936 资 源 文 件 转 换 为 代 码 页 为1252 的 资 源 文 件, 而 资 源 内 容 不 变。