2012-10-03 35 views
6

Tôi cố gắng để sử dụng nhắn định dạng để có được tiếng Anh chỉ có giá trịLàm thế nào để sử dụng FormatMessage C++ để nhận chỉ những thông điệp tiếng Anh

MSDN quy định cụ thể như sau

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

Đối với tham số dwLanguageId,

Số nhận dạng ngôn ngữ cho thư được yêu cầu. Tham số này bị bỏ qua nếu dwFlags bao gồm FORMAT_MESSAGE_FROM_STRING.

Nếu bạn vượt qua LANGID cụ thể trong tham số này, FormatMessage sẽ trả về một thông báo cho LANGID đó. Nếu chức năng không thể tìm thấy một thông báo cho LANGID đó, nó sẽ đặt Last-Error thành ERROR_RESOURCE_LANG_NOT_FOUND. Nếu bạn vượt qua trong zero, FormatMessage tìm kiếm một thông điệp cho LANGIDs theo thứ tự sau:

  1. Ngôn ngữ trung tính
  2. Chủ đề LANGID, dựa trên giá trị locale của chủ đề
  3. tài khoản mặc định LANGID, dựa trên mặc định của người dùng giá trị locale
  4. hệ thống mặc định LANGID, dựa trên giá trị mặc định miền địa phương hệ thống
  5. tiếng Anh-Mỹ

Nếu Format Thư không tìm thấy thư cho bất kỳ LANGID nào trước đó, nó sẽ trả về bất kỳ chuỗi thông điệp ngôn ngữ nào hiện diện. Nếu không thành công, nó sẽ trả về ERROR_RESOURCE_LANG_NOT_FOUND.

Điều này có nghĩa là, nếu vượt qua giá trị 5, nó sẽ trả về tin nhắn bằng tiếng Anh?

Bạn có thể làm rõ điều này không?

+0

Đây là một trong những nơi tôi thực sự muốn tôi có thể truyền một upvote đặc biệt cho việc chỉnh sửa. Được thực hiện tốt nhất @RobKennedy! –

+0

Không quan tâm, tại sao bạn chỉ muốn tiếng anh? Chắc chắn một người dùng sẽ có thể đọc bằng ngôn ngữ riêng của họ nếu tin nhắn có sẵn? – Deanna

+0

đúng, nhưng ứng dụng hiển thị tất cả các tin nhắn bằng tiếng Anh nhưng thông báo hệ thống được hiển thị ở dạng gốc ... làm cho nó phù hợp –

Trả lời

8

Số 5 trong tài liệu cho biết tiếng Anh Mỹ là ngôn ngữ thứ năm FormatMessage sẽ cố gắng sử dụng khi bạn chuyển số không làm giá trị tham số, sau khi đã thử và thất bại bốn tùy chọn trước đó. Điều đó không liên quan gì khi chuyển giá trị 5 cho tham số chức năng đó.

Để yêu cầu thông báo bằng tiếng Anh, hãy chuyển giá trị LANGID cho tiếng Anh Mỹ mà bạn có thể nhận được với MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US). Các liên kết tài liệu FormatMessage đến documentation on language identifiers, liên kết đến một trang của language identifier constants and strings.

+0

(bình luận muộn, tôi biết ..) Bạn có biết nếu các thông báo lỗi ngôn ngữ tiếng Anh được đảm bảo có sẵn trên các hệ thống được bản địa hóa không? – peterchen

+0

Không có ý tưởng, @Peter. Đặt câu hỏi trên Stack Overflow. –

Các vấn đề liên quan