docs for SetThreadUILanguage
表示:
Windows XP:应用程序只能将此参数设置为0.此 设置使函数选择最佳支持的语言 控制台显示。有关详细信息,请参阅“备注”部分。
它后来继续(相当隐藏在段落的中间):
(...)Windows XP不支持线程用户界面的概念 语言与线程区域设置分开。因此,此功能会发生变化 Windows XP上的线程区域设置。 (...)
事实上这似乎就是发生了什么,也就是说,在Windows XP上调用SetThreadUILanguage
似乎相当于调用SetThreadLocale
,而在Vista +上它似乎与调用基本相同SetThreadPreferredUILanguages
(根本不在XP上提供)。
文档对我来说很明显,所以我的基本问题可能是:我是否应该在Windows XP上调用SetThreadUILanguage
来更改(首选)用户界面,并在Windows上正确记录,并在Windows上7,我应该完全调用这个函数,还是应该调用SetThreadPreferredUILanguages
?
答案 0 :(得分:4)
我知道这是一个老线程,但我很好奇你是否找到了解决方案?我正在处理同样的问题,我对微软的文档感到非常困惑。这是我到目前为止所学到的:
1 SetThreadLocale
几乎没用。我真的不确定它到底做了什么。 MSDN page here首先声明:
SetThreadLocale会影响使用LANGUAGE选择资源 声明。该语句影响CreateDialog等函数, DialogBox,LoadMenu,LoadString和FindResource。它设置代码 CP_THREAD_ACP隐含的页面,但不影响FindResourceEx。
行。我得到这个部分。但它有这个“宝石”:
Windows Vista及更高版本:请勿使用SetThreadLocale选择用户 界面语言。
现在它是纯粹的微软:)那么上面段落中的所有羞辱是什么?
2 SetThreadUILanguage
仅适用于Vista及更高版本的操作系统。在XP上它几乎没有什么,所以除非你想错过仍然坚持使用XP的大量用户,否则这个API现在也没用。 (它似乎只在Vista和后来的操作系统上完成了这项工作。)
3 SetThreadPreferredUILanguages
仅适用于Vista和更高版本的操作系统,所以我们回到缺乏XP支持。根据我的理解,如果你在资源中包含一堆语言,请说出这三种语言:美国英语,法语,德语。当资源加载器加载它时,例如,在瑞士,一个愚蠢的微软加载器将默认选择美国英语。所以这个API告诉它使用什么语言。 (我知道,完全多余,但是,嘿,记住,我们正在与微软打交道。)
我似乎无法解决的问题是如何在XP中定义UI语言。可以将FindResourceEx
用于字符串和对话框(使用CreateDialogIndirect
),但文件打开/保存对话框或GetOpenFileName
和属性表或CPropertySheet
呢?
所以我很好奇你是怎么处理它的?