我需要以某种方式“国际化”用VB6编写的应用程序。这个I18n只针对少数国家和用户都知道,例如,他们应该使用美国小数点分隔符(。)而不是逗号(,)。日期也是一个很大的常见问题。
如果使用.NET,我的方法是在应用程序启动到en-US时设置主线程的CultureInfo。但是,在VB6中,我无法做到这一点(据我所知)。
之前有人遇到过这个问题吗?解决它的最佳方法是什么?最简单的方法,从我的POV,将覆盖我的应用程序进程的用户区域设置,但我不知道如何在VB6中这样做...
致以最诚挚的问候,
朱波罗卡
CNC中 我现在想要的是一种覆盖用户定义的区域设置的方法,仅用于我的过程
-edit2- 我尝试了这个但它不起作用(我的设置在pt-PT,十进制分隔符是逗号,我期望得到一个点(en-US)):
Private Sub Form_Load()
SetAmerican
Dim caralho As Double
caralho = 1.23
MsgBox (caralho)
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
答案 0 :(得分:0)
我们不得不为巴西的VB6应用做一些本地化。我发现测试的最简单方法是进入(Windows 7)
Control Panel->Clock, Language, and Region->Change the date,time, or number format
并更改格式。完成此操作后,数字和日期格式也相应更改,我输入的本地化信息显示在编码的位置。
注意:在Windows XP上,它是Control Panel->Regional and Language Options
答案 1 :(得分:0)
我今天遇到了这个问题(第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