2012-10-03 59 views
6

Estoy tratando de utilizar mensaje de formato para obtener Inglés únicos valoresCómo utilizar FormatMessage C++ para obtener inglés sólo los mensajes

MSDN especifica lo siguiente

DWORD WINAPI FormatMessage(
    _In_  DWORD dwFlags, 
    _In_opt_ LPCVOID lpSource, 
    _In_  DWORD dwMessageId, 
    _In_  DWORD dwLanguageId, 
    _Out_  LPTSTR lpBuffer, 
    _In_  DWORD nSize, 
    _In_opt_ va_list *Arguments 
); 

Para el parámetro dwLanguageId,

El identificador de idioma para el mensaje solicitado. Este parámetro se ignora si dwFlags incluye FORMAT_MESSAGE_FROM_STRING.

Si pasa un LANGID específico en este parámetro, FormatMessage solo devolverá un mensaje para ese LANGID. Si la función no puede encontrar un mensaje para ese LANGID, establece Last-Error en ERROR_RESOURCE_LANG_NOT_FOUND. Si pasa de cero, FormatMessage busca un mensaje para LANGIDs en el siguiente orden:

  1. Sin idioma
  2. Tema LANGID, con base en el valor de la configuración regional del hilo
  3. usuario por defecto LANGID, basado en defecto del usuario valor local
  4. sistema LANGID defecto, en función del valor regional predeterminada del sistema
  5. de EE.UU. Inglés

Si Formato El mensaje no encuentra un mensaje para ninguno de los LANGID anteriores, devuelve cualquier cadena de mensaje de idioma que esté presente. Si eso falla, devuelve ERROR_RESOURCE_LANG_NOT_FOUND.

¿Esto significa que, si es el valor de aprobación 5, devolverá los mensajes en inglés?

¿Puede aclarar esto?

+0

Este es uno en el que realmente me gustaría poder emitir un voto específico para la edición. Bien hecho @RobKennedy! –

+0

Fuera de interés, ¿por qué quieres solo inglés? ¿Seguramente un usuario debería poder leer en su propio idioma si el mensaje está disponible? – Deanna

+0

es cierto, pero la aplicación muestra todos los mensajes en inglés, pero los mensajes del sistema se muestran en nativo ... haciéndolo consistente –

Respuesta

8

El número 5 en la documentación indica que el inglés de EE. UU. Es el quinto idioma que FormatMessage intentará utilizar cuando pase cero como el valor del parámetro, después de haber intentado y fallado las cuatro opciones anteriores. Eso no tiene nada que ver con pasar el valor 5 para ese parámetro de función.

Para solicitar un mensaje en inglés, ingrese el valor de LANGID para el inglés de EE. UU., Que puede obtener con MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US). La documentación FormatMessage enlaces a documentation on language identifiers, que a su vez vincula a una página de language identifier constants and strings.

+0

(comentario tardío, lo sé ...) ¿Sabes si se garantiza que haya mensajes de error en el idioma inglés disponibles en los sistemas localizados? – peterchen

+0

No tengo idea, @Peter. Haga una pregunta sobre Stack Overflow. –

Cuestiones relacionadas