¿Cómo obtengo un soporte de unicode completo que incluye caracteres chinos en controles VCL o controles comunes de Windows en XP como está en Win7?

StackOverflow https://stackoverflow.com/questions/5395742

Pregunta

Tengo una aplicación que he estado probando para soporte de internacionalización.

Existe, por ejemplo, un control TEDIT estándar, con font.name = 'arial'.

En Windows 7, parece tomar automáticamente los glifos para los caracteres CJK, de Arial Unicode MS, o en otro lugar, para editar controles comunes, si la fuente que se asigna a ese control, no contiene un cierto carácter internacional.

En Windows XP, parece que los caracteres chinos aparecen como cajas, incluso cuando se instala Arial Unicode MS MS, a menos que cambie el nombre de fuente en el formulario Delphi, a Arial Unicode MS.

¿Es esto algo que todos encuentran con soporte de fuentes internacionales en Windows XP? ¿Los controles comunes de Windows se comportan de manera diferente? El comportamiento que veo en Windows 7 es ciertamente más amigable que el comportamiento que veo en Windows XP.

Esta diferencia de comportamiento no está limitada solo para los controles comunes de Windows. Parece que incluso Internet Explorer y MS Explorer Shell tienen problemas para hacer pruebas como la imagen aquí:enter image description here

  1. ¿Qué hace la gente al respecto?

  2. ¿Cuál es el comportamiento de la plataforma esperado en Windows XP? ¿Tiene que buscar qué idioma quiere usar el usuario y buscar una fuente para que lo usen, que admite ese idioma? Supongo que Arial Unicode MS podría ser un buen incumplimiento, ya que tiene casi todos los lenguajes unicode que existe.

ACTUALIZACIÓN: Parece que el "soporte de idioma suplementario" de Microsoft se refiere a la característica "Windows no muestra mis caracteres Unicode como cajas" de Windows.

¿Fue útil?

Solución

Vista y Windows 7 incluyen soporte para idiomas de Asia Oriental fuera de la caja. Para habilitarlo en Windows XP, vaya al panel de control, abra Configuración regional y de idioma diálogo, cambie a la Lengua pestaña y verificar Instalar archivos para idiomas del este de Asia por debajo Soporte de idiomas suplementarios.

Puede detectar si se han instalado usando ISVALIDLanguageGroup revisando uno de los idiomas relevantes con el LGRIP_INSTALLED bandera:

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top