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 的 資 源 文 件, 而 資 源 內 容 不 變。