我有一个应用程序,我一直在测试国际化支持。
例如,有一个标准的TEdit控件,其中font.Name ='Arial'。
在Windows 7上,如果分配给该控件的字体不包含某个国际字符,它似乎会自动从Arial Unicode MS或其他地方获取CJK字符的字形,以用于EDIT公共控件。
在Windows XP上,即使安装了Arial Unicode MS字体,似乎中文字符显示为方框,除非我将delphi格式的字体名称更改为Arial Unicode MS。
这是每个人在Windows XP上遇到国际字体支持的东西吗? Windows常用控件的行为有何不同?我在Windows 7上看到的行为肯定比我在Windows XP上看到的行为更友好。
此行为差异不仅限于Windows公共控件。它似乎 即使是Internet Explorer和MS Explorer shell也会出现如下图所示的测试问题:
人们对此有何看法?
Windows XP上的预期平台行为是什么?您是否必须找到用户想要使用的语言,然后找一个要使用的字体,支持该语言?我猜Arial Unicode MS可能是一个很好的默认设置,因为它几乎拥有所有的unicode语言。
更新:看起来微软的术语“补充语言支持”是指Windows的“窗口不显示我的unicode字符作为框”功能。
答案 0 :(得分:6)
Vista和Windows 7包括对开箱即用的东亚语言的支持。要在Windows XP上启用它,请进入控制面板,打开区域和语言选项对话框,切换到语言标签,然后选中安装东亚语言文件 补充语言支持。
您可以通过使用LGRIP_INSTALLED
标记检查其中一种相关语言来检测是否已使用IsValidLanguageGroup安装它们:uses
Windows;
type
LGRPID = DWORD;
const
LGRPID_INSTALLED = $00000001; // installed language group ids
LGRPID_SUPPORTED = $00000002; // supported language group ids
LGRPID_WESTERN_EUROPE = $0001; // Western Europe & U.S.
LGRPID_CENTRAL_EUROPE = $0002; // Central Europe
LGRPID_BALTIC = $0003; // Baltic
LGRPID_GREEK = $0004; // Greek
LGRPID_CYRILLIC = $0005; // Cyrillic
LGRPID_TURKISH = $0006; // Turkish
LGRPID_JAPANESE = $0007; // Japanese
LGRPID_KOREAN = $0008; // Korean
LGRPID_TRADITIONAL_CHINESE = $0009; // Traditional Chinese
LGRPID_SIMPLIFIED_CHINESE = $000a; // Simplified Chinese
LGRPID_THAI = $000b; // Thai
LGRPID_HEBREW = $000c; // Hebrew
LGRPID_ARABIC = $000d; // Arabic
LGRPID_VIETNAMESE = $000e; // Vietnamese
LGRPID_INDIC = $000f; // Indic
LGRPID_GEORGIAN = $0010; // Georgian
LGRPID_ARMENIAN = $0011; // Armenian
function IsValidLanguageGroup(LanguageGroup: LGRPID; dwFlags: DWORD): BOOL; stdcall;
external kernel32;
function IsCJKInstalled: Boolean;
begin
Result := IsValidLanguageGroup(LGRPID_SIMPLIFIED_CHINESE, LGRPID_INSTALLED);
end;