Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Caracteres chinos en C++ Builder 2006 (https://www.clubdelphi.com/foros/showthread.php?t=83096)

rcuevas 10-05-2013 10:41:09

Caracteres chinos en C++ Builder 2006
 
Buenos días a todos,

Trabajo con una versión de C++ Builder un tanto antiogua. Es del año 2006.
Voy a comenzar una aplicación que va a tener que ser distribuida por todo el mundo, de modo que quiero que sea traducible a una gran cantidad de idiomas.

He creado una formulario base que incorporará lo necesario para que traduzca cualquier elemento visual que caiga sobre ella o sus descendientes. Para hacerlo, en el create del formulario he añadido el siguiente código, que lo que hace es patearse todos los elementos visuales y actuar sobre ellos en función de su clase, modificando los strings necesarios.

Aquí tenéis un ejemplo donde, en el caption de las labels, añado "lb_", y en el caption del título de las columnas de una grid, añado "cl_". La idea es ir añadiendo todos los casos necesarios a medida que avanzo por ellos. A la vez, en vez de añadir un prefijo (que es el ejemplo mostrado), buscaré una traducción concreta en una lista de traducciones que tendré en memoria.

Código:

void __fastcall TFFormBase::FormCreate(TObject *Sender)
{
  TDBGrid* pDBGrid;
  int i, j;

  //Traducción de los componentes visuales
  for (i = 0; i <= this->ComponentCount -1 ; i++) {
    if (this->Components[i]->ClassNameIs("TLabel")){
      ((TLabel*)this->Components[i])->Caption =
        "lb_" + ((TLabel*)this->Components[i])->Caption;
    }
    else if (this->Components[i]->ClassNameIs("TDBGrid")) {
      pDBGrid = (TDBGrid*)(this->Components[i]);
      for (j = 0; j <= pDBGrid->Columns->Count - 1; j++) {
        pDBGrid->Columns->Items[j]->Title->Caption =
          "cl_" + pDBGrid->Columns->Items[j]->Title->Caption;
      }
    }
  }
}

Mi diccionario será una lista donde cada ítem estará identificador por un string (que asignaré en diseño) y tendrá un puntero a sus traducciones. Y muy posiblemente, alguna de sus traducciones tenga símbolos de alfabetos que requieren más de un byte para cada letra, y no sé cómo incorporar esas traducciones al código en C++.

Estoy seguro de que la idea funcionará, pero, a pesar de que ya he estado haciendo pruebas, no sé cómo puedo incorporar en la lista de traducciones símbolos similares al siguiente --> 支庁 <--.

No sé si me he explicado suficientemente bien. Si es necesario detallo todavía más las cosas.
¿Alguien tiene alguna idea?

Muchas gracias por adelantado.

j0seant 10-05-2013 17:07:29

Lo que necesitas es soporte para Unicode, y la VCL de las versiones viejas de C++Builder no lo soportan, necesitaras como mínimo la versión 2009 que es cuando introdujeron soporte para Unicode.

Lo podrás hacer en las versiones viejas, pero con muchos más dolores de cabeza, modificando los componentes (mucho trabajo que no compensa), o instalando algún paquete de componentes, pero siempre con limitaciones, mientras que con las versiones actuales trabajar con cualquier idioma que no use el alfabeto romano es tan simple como hacerlo en español.

rcuevas 11-05-2013 22:03:35

Buenas noches j0seant,

Muchas gracias por tu ayuda.
Puestos a gastar dinero en un componente, lo gasto la ultima versión de Builder C++, que, además del UniCode, algunas otras ventajas y mejoras le habrán incorporado en los ultimos 6 años.
Probaré su$ última versión, y si veo que no me da problemas con otros componentes, pues solicitaré a la empresa que lo compre.

Saludos y muchas gracias.


La franja horaria es GMT +2. Ahora son las 10:33:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi