我的 Delphi (XE 10) 程序使用非 unicode(单字节)遗留 Firebird 数据库(字符集 NONE),因此其数据(从数据库中读取或保存到数据库中)取决于非 unicode 程序的 windows 区域设置。根据此 Windows 设置,相同的数据库字符可以在程序中显示为 \u0101(正确)或 \u0432(不正确)。IBX 用作数据库访问技术。
我的程序仅适用于非 unicode 程序的特定本地,并且客户端可以接受。问题是 -无论 Windows 设置如何,如何让程序感受特定的预定义语言环境?
我想我应该用SetThreadLocale
这个。但是在哪里打这个电话?在主窗体的初始化部分调用这个函数是否足够,或者我应该在项目源文件(应用程序被初始化的地方)调用它,或者我应该在每个模块的初始化部分调用它?
由于评论,我知道GetThreadLocale 返回的值与 GetUserDefaultLCID 不同? 我现在看到我应该多写一点代码:
SetThreadLocale(my_preferred_locale_id);
SysLocale.DefaultLCID := my_preferred_locale_id;
GetFormatSettings;
但主要问题仍然存在 - 将这段代码放在哪里 - 我应该把它放在多个地方。我有 WebSnap 应用程序,我想它可以在引擎盖下进行自动和复杂的胎面管理。代码应该去哪里?
没有什么帮助:
- 将 lc_ctype=WIN1257 添加到 TIBDatabase.Params
- 设置 SetThreadLocale... 这里、那里和任何地方
- 设置项目选项 - 版本信息 - 语言 - 区域设置 ID
https://github.com/xupefei/Locale-Emulator Locale Emulator 是唯一可以解决问题的工具,但为什么 Delphi 不允许在没有外部工具的情况下执行此操作?