【问题标题】:How to custom set regional settings for a single application?如何为单个应用程序自定义设置区域设置?
【发布时间】:2012-01-18 10:09:31
【问题描述】:

我需要以某种方式“国际化”用 VB6 编写的应用程序。此 I18n 仅适用于少数国家,用户知道,例如,他们应该使用美国小数分隔符 . 而不是逗号 ,。日期也是一个很常见的问题。

如果使用 .NET,我的方法是在应用程序启动到 en-US 时设置主线程的 CultureInfo。但是,在 VB6 中,我无法做到这一点(据我所知)。

以前有人遇到过这个问题吗?解决它的最佳方法是什么?从我的 POV 来看,最简单的方法是覆盖我的应用程序进程的用户区域设置,但我不知道如何在 VB6 中做到这一点......

编辑:此时我想要一种方法来覆盖我的用户定义的区域设置,仅用于我的流程

编辑#2:我试过了,但没用(我的设置是 pt-PT,小数点分隔符是逗号,我希望得到一个点(英文)):

Private Sub Form_Load()
    SetAmerican

    Dim test As Double
    test = 1.23
    MsgBox (test)

    Unload Me
End Sub

Declare Function SetThreadLocale Lib "kernel32" (ByVal Locale As Long) As Long
Public Const LANG_EN_US = 1033

Public Sub SetAmerican()
    Call SetThreadLocale(LANG_EN_US)
End Sub

【问题讨论】:

  • 查看here helps中是否有任何内容
  • @MarkJ 似乎对我不起作用 :(
  • @Żubrówka 你是什么意思没有工作?你能展示一些代码或记录什么不起作用吗?
  • 哦,“一种由我覆盖用户定义的区域设置的方法,仅用于我的过程”与“在 VB6 中处理区域设置的最佳方法”完全相反。最好的方法是尊重并接受用户的区域设置。

标签: .net vb6 internationalization


【解决方案1】:

我今天遇到了这个问题(第 3 方程序错误),这就是我修复的方法: 就在我运行我的程序之前,我在HKCU\Control Panel\International 处设置了十进制和千位符号。

启动此程序后,返回原始设置是安全的(我不必等待它完成,这需要几分钟)。

您甚至可以包装在一个批处理文件中,例如:

@echo off
reg add "HKCU\Control Panel\International" /t REG_SZ /v sDecimal  /d . /f
reg add "HKCU\Control Panel\International" /t REG_SZ /v sThousand /d , /f

start PrograminhaMaroto.exe    
ping 127.0.0.1 /n 2 > NULL

reg add "HKCU\Control Panel\International" /t REG_SZ /v sDecimal  /d , /f
reg add "HKCU\Control Panel\International" /t REG_SZ /v sThousand /d . /f

【讨论】:

    【解决方案2】:

    我们必须为巴西的 VB6 应用程序做一些本地化。我发现测试的最简单方法是进入(Windows 7) Control Panel->Clock, Language, and Region->Change the date,time, or number format

    并更改格式。完成此操作后,数字和日期格式会相应更改,并且我输入的本地化信息会显示在编码位置。

    注意:在 Windows XP 上,它是 Control Panel->Regional and Language Options

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2013-08-25
      • 2011-11-28
      • 1970-01-01
      • 2011-10-27
      • 2011-02-06
      相关资源
      最近更新 更多