2012-10-03 13 views
6

Próbuję użyć wiadomość formatu do uzyskania tylko w języku angielskim ceniJak korzystać FormatMessage C++ do uzyskania tylko w języku angielskim wiadomości

MSDN określa następujące

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 
); 

parametru dwLanguageId,

Identyfikator języka dla żądanej wiadomości. Ten parametr jest ignorowany, jeśli dwFlags zawiera FORMAT_MESSAGE_FROM_STRING.

Jeśli w tym parametrze zostanie przekazany określony LANGID, funkcja FormatMessage zwróci komunikat tylko dla tego LANGID. Jeśli funkcja nie może znaleźć komunikatu dla tego LANGID, ustawia Last Error na ERROR_RESOURCE_LANG_NOT_FOUND. Jeśli przejdzie w zero, FormatMessage wygląda na wiadomość o LANGIDs w następującej kolejności:

  1. języka neutralnego
  2. langId nicią, na podstawie wartości locale wątku domyślnego langId
  3. użytkownika, w oparciu o domyślne użytkownika wartość locale
  4. domyślny system LANGID, na podstawie domyślnego systemu wartości locale
  5. US English

Jeśli format Komunikat nie lokalizuje komunikatu dla żadnego z poprzedzających identyfikatorów LANGID, zwraca ciąg znaków dowolnego języka, który jest obecny. Jeśli to się nie powiedzie, zwraca ERROR_RESOURCE_LANG_NOT_FOUND.

Czy to oznacza, że ​​jeśli ma wartość równą 5, zwróci wiadomości w języku angielskim?

Czy możesz to wyjaśnić?

+0

To jest jeden z nich, w którym naprawdę chciałabym móc zająć się specjalnie przygotowaniem do montażu. Ładnie zrobione @RobKennedy! –

+0

Ciekawe, dlaczego chcesz po prostu angielski? Z pewnością użytkownik powinien być w stanie czytać w ich własnym języku, jeśli wiadomość jest dostępna? – Deanna

+0

to prawda, ale aplikacja wyświetla wszystkie komunikaty w języku angielskim, ale komunikaty systemowe są wyświetlane w języku natywnym ... dzięki czemu jest spójny –

Odpowiedz

8

Liczba 5 w dokumentacji wskazuje, że angielski angielski jest piątym językiem, który FormatMessage będzie próbował użyć, gdy jako wartość parametru zostanie podane zero, po tym, jak wypróbowano i nie powiodły się poprzednie cztery opcje. To nie ma nic wspólnego z przekazaniem wartości 5 dla tego parametru funkcji.

Aby zażądać wiadomości w języku angielskim, należy podać wartość LANGID dla języka angielskiego USA, którą można uzyskać pod numerem MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US). Dokumentacja FormatMessage zawiera linki do strony documentation on language identifiers, która z kolei prowadzi do strony z language identifier constants and strings.

+0

(późny komentarz, wiem ..) Czy wiesz, czy jest to gwarantowane komunikaty o błędach w języku angielskim są dostępne w zlokalizowanych systemach? – peterchen

+0

Nie mam pojęcia, @Peter. Zadaj pytanie na Stack Overflow. –