簡體   English   中英

非 unicode 程序和注冊表設置的語言

[英]Language for non-unicode programs and registry settings

Windows XP 在控制面板/區域和語言設置中有一個“非 Unicode 程序的當前語言”選項。

可以使用它來獲取非 unicode 程序以響應所選語言。

但是,有些程序不響應此設置,而是需要更改注冊表才能工作。 注冊表更改將當前語言重定向到另一種語言。

為什么有些程序響應第一種方法(控制面板)而其他程序響應第二種方法(注冊表)。 代碼的根本區別是什么? 我可以在任何一種應用程序中找到哪些調用/編譯選項?

如果我必須將一種類型的應用程序(響應注冊表設置的應用程序)轉換為使用控制面板設置的程序 - 需要更改哪些代碼?

謝謝。

您提到的注冊表項除了 map 一些代碼頁到 CP1251(西里爾文)之外什么都不做,有效地強制 CP1251 在整個系統中使用。 所以實際上你提到的程序有一些硬編碼的信息。

不幸的是,您沒有向我們提供有關您真正面臨的挑戰的太多信息,因此我假設您需要正確顯示 1) 本地化 UI 或 2) 您希望允許輸入西里爾字符。

簡單說一下存在的問題:

  1. 如果您無法正確顯示本地化文本並且應用程序是使用 MFC 編寫的,則可能是對話框的字體設置不正確(對於 MS Shell Dlg 或 MS ZEA89B68C34CE4A63C0F77E17413lgC6)。

  2. 在后一種情況下,也可能在第一種情況下,應用程序假定英語-美國是您應使用的語言,系統的語言應為美國英語,有效地將區域設置設置為 1033,將默認代碼頁設置為 CP1252。 它可能在某處被硬編碼。 在這種情況下,您需要修改源代碼(前提是您可以訪問它),以便這些屬性來自操作系統設置。

要檢測應該使用的語言:

LCID currentLocale = GetUserDefaultLCID();

並檢測當前(所謂的 ANSI)代碼頁:

UINT currentCodePage = GetACP();

您可以要求注冊表在值更改時通知您,但您的程序必須正在運行。

控制面板包含啟動以進行更改的程序(通常是下面的注冊表更新)。 當這些特殊程序運行時,它們可以觸發任何類型的更新程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM