【问题标题】:Is it possible to set the language or locale of a Windows program at runtime?是否可以在运行时设置 Windows 程序的语言或区域设置?
【发布时间】:2011-10-15 00:16:15
【问题描述】:

我们有一些现有的软件(C++ Windows 应用程序)已将其资源翻译成多种语言供各种客户使用。应用程序从 Windows 语言环境中选择语言环境并以适当的语言运行。

根据最近的订单,我们将资源翻译成德语,但我们刚刚发现客户正在以英语安装 Windows,但希望我们的软件仍以德语运行。显然,PC 上运行的其余软件尚未全球化,只有德语。

在 Windows 中是否有任何方法可以覆盖区域设置,以便软件相信它在德国安装的 Windows 上运行?我们现在没有时间对软件进行更改以覆盖区域设置,并且无论如何都不愿意为这个客户分叉应用程序。

有什么建议吗?

【问题讨论】:

    标签: windows runtime locale


    【解决方案1】:

    我不知道任何不涉及更改程序的直接方法,但我可以提供一种解决方法:

    在运行您的应用的计算机上,创建另一个用户,并将该用户的区域设置为德语。然后,让您的程序使用该用户的凭据运行(使用 runas 或 psexec)。然后程序将在德语环境下运行,而用户将继续在英语环境中工作。但是,如果用户尝试保存或打开文件,这会很烦人 - 桌面和文档文件夹将是德国用户的文件夹,而不是英文用户的文件夹。

    【讨论】:

    • 客户对此改变了主意,因此我们最终不必执行此操作,但此解决方法看起来不错。
    【解决方案2】:

    是的,您可以使用 WinMain 中的 Win32 调用 SetThreadLocale 或应用程序的任何入口点。任何子线程都将继承父语言环境。详情在这里:

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd374051%28v=vs.85%29.aspx

    【讨论】:

    • 该文档说“不要使用 SetThreadLocale 选择用户界面语言。”
    • 感谢您的建议,但不幸的是,这将涉及对构成这套应用程序的大约 40 个程序进行(和测试)更改,没有时间,正如我所说,我们正在不愿意只为这个客户分叉代码库。
    • 明白。祝你好运解决这个问题:)
    猜你喜欢
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多