Как получить полную поддержку юникода, включая китайские символы в элементах управления VCL или общих элементах управления Windows в XP, как в Win7 - PullRequest
3 голосов
/ 22 марта 2011

У меня есть приложение, которое я тестировал для поддержки интернационализации.

Существует, например, стандартный элемент управления TEdit со шрифтом font.Name = 'Arial'.

В Windows 7 кажется, что он автоматически получает глифы для символов CJK, из Arial Unicode MS или где-то еще, для общих элементов управления EDIT, если шрифт, назначенный этому элементу управления, не содержит определенного международного символа.

В Windows XP китайские иероглифы отображаются в виде блоков, даже если установлен шрифт Arial Unicode MS, если я не изменю имя шрифта в форме delphi на Arial Unicode MS.

Это то, что каждый сталкивается с международной поддержкой шрифтов в Windows XP? Общие элементы управления Windows ведут себя по-другому? Поведение, которое я вижу в Windows 7, безусловно, более дружелюбное, чем поведение, которое я вижу в Windows XP.

Эта разница в поведении не ограничивается только общими элементами управления Windows. Похоже на то даже Internet Explorer и оболочка MS Explorer испытывают проблемы при выполнении тестов, подобных рисунку здесь: enter image description here

  1. Что люди делают с этим?

  2. Каково ожидаемое поведение платформы в Windows XP? Нужно ли вам найти язык, который пользователь хочет использовать, и найти шрифт для него, который поддерживает этот язык? Я предполагаю, что Arial Unicode MS может быть хорошим значением по умолчанию, так как он имеет почти все существующие языки Unicode.

Обновление. Похоже, что термин Microsoft «дополнительная языковая поддержка» относится к функции «Windows не отображает мои символы Юникода в виде блоков» в Windows.

1 Ответ

6 голосов
/ 22 марта 2011

Vista и Windows 7 включают поддержку восточноазиатских языков из коробки.Чтобы включить его в Windows XP, откройте панель управления, откройте диалоговое окно Язык и региональные параметры , перейдите на вкладку Языки и установите флажок Установить файлы для восточноазиатских языков * 1006.* в Дополнительная языковая поддержка .

Вы можете определить, были ли они установлены с помощью IsValidLanguageGroup , проверив один из соответствующих языков с флагом LGRIP_INSTALLED:

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;
...