2009-03-02 13 views
6

कहां अनुवाद कर सकता हूं मैं जापानी में एमएफसी ऐप को स्थानीयकृत कर रहा हूं, और संसाधन सही काम कर रहे हैं।मैं एमएफसी संदेश बॉक्स

मेरी वर्तमान समस्या यह है कि, जब मैं AfxMessageBox या MessageBox का उपयोग करता हूं, तो संवाद शीर्षक और बटन संदेश अंग्रेजी में आते हैं, और मुझे इसे बदलने के लिए कहीं भी नहीं मिला है।

मुझे कुछ भी उपयोगी एमएसडीएन या Google नहीं मिला है।

तो,

इस काम करता है? क्या विंडोज़ जापानी, अरबी और रूसी में "ठीक" या "हां/नहीं" बटन के साथ आते हैं?

यदि नहीं, तो मैं इन्हें बदलने के लिए क्या निर्दिष्ट करूं?

संपादित करें: मैं MessageBoxEx के साथ गया, एक रैपर वर्ग लिखकर इसे AfxMessageBox के रूप में उपयोग करने के लिए सुविधाजनक बनाने के लिए। ऐसा लगता है कि MB_OK अंग्रेजी और जापानी दोनों में "ठीक" के रूप में आता है, लेकिन MB_YESNO जैसे अन्य बटन विकल्प का अनुवाद कुछ ऐसा है जो मुझे लगता है कि सही जापानी है। यह अनुवाद करने के लिए एक काफी छोटा एप्लीकेशन था, और हम बड़े लोगों के लिए स्वचालित कुछ उपयोग करना चाहेंगे।

उत्तर

5

MessageBoxEx का उपयोग करें और WORD wLanguageId फ़ील्ड निर्दिष्ट करें।

wLanguageId [में] पाठ संदेश बॉक्स बटन (रों) में दिखाया गया है के लिए भाषा का निर्दिष्ट करता है। शून्य (0) का मान निर्दिष्ट करना डिफ़ॉल्ट सिस्टम भाषा में टेक्स्ट प्रदर्शित करने का संकेत देता है। यदि यह पैरामीटर MAKELANGID (LANG_NEUTRAL, SUBLANG_NEUTRAL) है, तो मौजूदा भाषा कॉलिंग थ्रेड से जुड़े का उपयोग किया जाता है।

वर्तमान भाषा के अलावा अन्य भाषा निर्दिष्ट करने के लिए, MAKELANGID मैक्रो का उपयोग करें पैरामीटर बनाने के लिए। अधिक जानकारी के लिए, MAKELANGID देखें।

MAKELANGID पर अधिक जानकारी यहां मिल सकती है।


यदि यह आपके लिए अच्छा काम नहीं करता है, तो विकल्प आपके स्वयं के संवाद बॉक्स को बनाना होगा।

+0

** MessageBoxEx ** वर्तमान में लैंग तर्क को अनदेखा करता है। तो बेहतर नहीं है कि ** संदेशबॉक्स ** और आपके पास अभी भी स्थानीयकरण समस्या है ... एमएसडीएन से: * बटन सिस्टम उपयोगकर्ता इंटरफ़ेस की भाषा में हैं। वर्तमान में संदेशबॉक्सएक्स और संदेशबॉक्स उसी तरह काम करते हैं। * – gavenkoa

2

शीर्षक एक स्ट्रिंग है जिसे आप निर्दिष्ट करते हैं, इसलिए आपको इसका अनुवाद करने में सक्षम होना चाहिए। AfxMessageBox() में, शीर्षक एप्लिकेशन का नाम है (AfxGetAppName() आईआईआरसी)।

बटन के संबंध में, पाठ ओएस का हिस्सा है और इसका अनुवाद नहीं किया जा सकता है।

संदेशबॉक्स एक्स (ब्रायन द्वारा उल्लिखित) भाषा समर्थन के संबंध में कभी भी अच्छा काम नहीं किया। एक दशक पहले से This MS KB article का कहना है कि भाषा आईडी को विंडोज 2000 द्वारा सही ढंग से समर्थित किया जाएगा। लेकिन यह स्पष्ट रूप से इसे कभी नहीं बनाया गया।

तो आप भाग्य से बहुत अधिक हैं। आपका एकमात्र समाधान तीसरे पक्ष के कार्यान्वयन का उपयोग करना होगा जैसे उत्कृष्ट XMessageBox और अपनी स्ट्रिंग तालिका के माध्यम से अनुवाद प्रदान करें।

ध्यान दें कि appTranslator की शब्दावली में 25 भाषाओं में हां, नहीं, रद्द, ... जैसे शब्द शामिल हैं और स्वचालित रूप से उनका अनुवाद करेंगे।

+0

FWIW, MessageBoxEx ने मेरे मामले में अच्छी तरह से चाल की है। –

+0

हैलो डेविड, मैंने MessageBoxEx की कोशिश की लेकिन यह मेरे लिए काम नहीं करता है। क्या इसे काम करने के लिए मुझे कुछ अतिरिक्त "भाषा पैक" चाहिए? –

1

अपनी खुद की L10N मैक्रो/समारोह बनाएं और इस कोड का उपयोग करें: जैसा कि मैंने लिखा था कि पहले MessageBoxEx वर्तमान में लैंग आर्ग उपेक्षा

 
static LRESULT __stdcall ChangeCaptions(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if (nCode == HCBT_ACTIVATE) { 
     SetWindowText(GetDlgItem((HWND) wParam, IDOK), L10N(GUI_OK_MSG)); 
     SetWindowText(GetDlgItem((HWND) wParam, IDCANCEL), L10N(GUI_CANCEL_MSG)); 
     SetWindowText(GetDlgItem((HWND) wParam, IDYES), L10N(GUI_YES_MSG)); 
     SetWindowText(GetDlgItem((HWND) wParam, IDNO), L10N(GUI_NO_MSG)); 
    } 
    return 0; 
} 

int addon_gui_messagebox(HWND parentHWnd, HINSTANCE hInstance, void *text, void *caption, int type) 
{ 
    int ret; 
    hook = SetWindowsHookEx(WH_CBT, ChangeCaptions, hInstance, GetCurrentThreadId()); 
    ret = MessageBox(parentHWnd, text, caption, type); 
    UnhookWindowsHookEx(hook); 
    return ret; 
} 

संबंधित मुद्दे