用于非unicode程序和注册表设置的语言
Language for non-unicode programs and registry settings
Windows XP在控制面板/区域和语言设置中有一个"非unicode程序的当前语言"选项。
可以使用它来让非unicode程序响应所选语言。
然而,有些程序不响应此设置,而是需要更改注册表才能工作。注册表更改将当前语言重定向到另一种语言。
为什么有些程序响应第一种方法(控制面板)而其他程序响应第二种方法(注册表)?代码的根本区别是什么?我可以期望在任何一种应用程序中找到哪些调用/编译选项?
如果我必须将一种类型的应用程序(响应注册表设置的应用程序)转换为使用控制面板设置的程序-需要更改哪些代码?
谢谢。
您提到的注册表项除了将一些代码页映射到CP1251 (Cyrillic)之外没有任何作用,有效地迫使CP1251在整个系统中使用。所以实际上你提到的程序有一些信息是硬编码的。
不幸的是,你没有给我们很多关于你真正的挑战的信息,所以我假设你需要显示1)本地化的UI正确或2)你想允许输入西里尔字符。
让我们简单地谈谈这些问题:
-
如果你只是不能正确显示本地化文本,并且应用程序是使用MFC编写的,则可能是对话框的字体设置不正确(为MS Shell Dlg或MS Shell Dlg 2,无论在这种情况下如何工作)。
-
在后一种情况下(可能也是第一种情况),应用程序假定您将使用英语- us语言,系统的语言应为En-US,从而有效地将Locale设置为1033,并将默认代码页设置为CP1252。它可能被硬编码在某个地方。在这种情况下,您需要修改源代码(如果您可以访问它),以便这些属性来自操作系统设置。
要检测应该使用的语言:
LCID currentLocale = GetUserDefaultLCID();
和检测当前(所谓的ANSI)代码页:
UINT currentCodePage = GetACP();
您可以要求注册表在值更改时通知您,但您的程序必须运行。
控制面板包含启动以进行更改的程序(通常是下面的注册表更新)。当这些特殊程序运行时,它们可以触发任何类型的更新过程。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何将多种语言设置放在单个 .clang 格式文件中
- C++ Cmake没有在Travis CI服务器上设置编译器语言标准
- 我可以强制 QFileDialog 使用系统区域设置而不是系统语言吗?
- 为整个Markdown文档设置默认的PER代码语言
- 在 c++ 中的区域语言设置下获取当前位置值
- Qt 4.7.4 C++ QScrollBar语言 - - 使用 QStyle 设置滑块的大小
- Qt Creator语言 - 设置架构标志
- 手动设置 Visual Studio 2012 C++语言版本
- 设置公共语言运行时支持后,无法在 Visual Studio 2013 中调试C++
- 如何使用德语语言环境在gdb中设置双变量
- 有没有办法在调试中设置断点"at this very moment"?它是关于任何编程语言或IDE的
- c++ MFC - CMapPtrToPtr语言 - 设置和查找
- 用于非unicode程序和注册表设置的语言
- Tesseract设置另一种语言的可变白名单
- 如何使用C++获取当前Windows操作系统版本7及更高版本的当前默认设置语言