3

国際化サポートをテストしているアプリケーションがあります。

たとえば、font.Name = 'Arial' の標準 TEdit コントロールがあります。

Windows 7 では、そのコントロールに割り当てられているフォントに特定の国際文字が含まれていない場合、EDIT 共通コントロールのために、Arial Unicode MS または他の場所から CJK 文字のグリフを自動的に取得するようです。

Windows XP では、Arial Unicode MS フォントがインストールされていても、デルフィ形式のフォント名を Arial Unicode MS に変更しない限り、漢字がボックスとして表示されるようです。

これは、Windows XP でインターナショナル フォントをサポートしていると誰もが遭遇することですか? Windows コモン コントロールの動作は異なりますか? Windows 7 で見られる動作は、Windows XP で見られる動作よりも確かに使いやすいです。

この動作の違いは、Windows コモン コントロールだけに限定されるものではありません。Internet Explorer と MS Explorer シェルでさえ、次の図のようなテストを行う際に問題があるようです。 ここに画像の説明を入力

  1. 人々はこれについて何をしますか?

  2. Windows XP で予想されるプラットフォームの動作は何ですか? ユーザーが使用したい言語を見つけ、その言語をサポートするフォントを見つけて使用する必要がありますか? Arial Unicode MS は、存在するほぼすべての Unicode 言語を備えているため、デフォルトとして適していると思います。

更新: Microsoft の用語「追加言語サポート」は、Windows の「Unicode 文字がボックスとして表示されない」機能を指しているようです。

4

1 に答える 1

6

Vista and Windows 7 include support for East Asian languages out of the box. To enable it on Windows XP go into the Control Panel, open Regional and Language Options dialog, switch to the Languages tab, and check Install files for East Asian languages under Supplemental language support.

You can detect whether they've been installed using IsValidLanguageGroup by checking for one of the relevant languages with the LGRIP_INSTALLED flag:

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;
于 2011-03-22T18:45:28.060 に答える