La Web del Programador: Comunidad de Programadores
 
    Pregunta:  28772 - APLICACIóN MULTI-LINGüE
Autor:  Iñigo
Me gustaría saber como se hace una aplicación multi-lingüe utilizando el MFC de Visual C++ 6.0.

La idea es añadir una opción más en el menú principal para que el usuario elija el idioma en el que se han de representar todos los textos de la aplicación (menú y área del usuario).

Supongo que tendrá algo que ver la “String Table” que se crea en “resources”, pero no sé cómo se puede utilizar en ejecución.

Muchas gracias.

  Respuesta:  Ruben Yusta
Efectivamente, con la tabla de strings que hay en recursos lo puedes hacer, solo tendrás que asignar el identificador del boton, del static, etc... al recurso correspondiente de la tabla:

CString auxString;

GetDlgItem( IDOK )->SetWindowText(auxString.LoadString(ID_BOTON_ACEPTAR_ENGLISH));

ó, si han seleccionado español:

GetDlgItem( IDOK )->SetWindowText(auxString.LoadString(ID_BOTON_ACEPTAR_SPANISH));

y en tu tabla de recursos tendrás:
ID_BOTON_ACEPTAR_ENGLISH = Accept

ID_BOTON_ACEPTAR_SPANISH = Aceptar

También puedes asignar con el classwizard variables de tipo CString a cada uno de los controles que contengan texto, así sólo tendrás que poner:
m_szBotonAceptar.LoadString(ID_BOTON_ACEPTAR_SPANISH);

En ambos casos, esta asignación de textos la tendrás que establecer en la función OnInitDialog().

Para los menus, y también en OnInitDialog()., primero debes obtener el menú principal:

CMenu* MenuOpe = GetMenu();

y luego:

MenuOpe->ModifyMenu(0,MF_BYPOSITION | MF_STRING, 0, auxString.LoadString(....));

MenuOpe->ModifyMenu(1,MF_BYPOSITION | MF_STRING, 1, auxString.LoadString(.....));

Si tienes submenus:

CMenu* psubMenu;
psubMenu= MenuOpe->GetSubMenu(0);

psubMenu->ModifyMenu(0,MF_BYCOMMAND | MF_STRING, 0, auxString.LoadString(.....));

psubMenu->ModifyMenu(1,MF_BYCOMMAND | MF_STRING, 1, auxString.LoadString(.....));

Espero no haberte liado demasiado. :)
Suerte!