繁体   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