// TODO Can we add a feature to the language dialog to restrict the // languages it offers? de en es fr it no pt // static bool _getTranslationCode(FV_View * pView, std::string & langCode) { XAP_Frame * pFrame = static_cast <XAP_Frame *>(pView->getParentData()); UT_return_val_if_fail(pFrame,false); bool bRet = false; pFrame->raise(); XAP_Dialog_Id id = XAP_DIALOG_ID_LANGUAGE; XAP_DialogFactory * pDialogFactory = static_cast<XAP_DialogFactory *>(pFrame->getDialogFactory()); XAP_Dialog_Language * pDialog = static_cast<XAP_Dialog_Language *>(pDialogFactory->requestDialog(id)); UT_return_val_if_fail(pDialog, false); std::string code; PP_PropertyVector props_in; if (pView->getCharFormat(props_in)) { code = PP_getAttribute("lang", props_in); if (code.size() >= 2) { code = code.substr(0, 2); code += '_'; } pDialog->setLanguageProperty(PP_getAttribute("lang", props_in).c_str()); } // run the dialog pDialog->runModal(pFrame); // extract what they did bool bOK = (pDialog->getAnswer() == XAP_Dialog_Language::a_OK); if (bOK) { const gchar * s; if (pDialog->getChangedLangProperty(&s)) { std::string changedLang = s; if (changedLang.size() >= 2) { changedLang = changedLang.substr(0, 2); code += changedLang; langCode = code; bRet = true; // Languages: de en es fr it no pt // English -> XXX if (langCode == "en_de") langCode = "English/German"; else if (langCode == "en_es") langCode = "English/Spanish"; else if (langCode == "en_fr") langCode = "English/French"; else if (langCode == "en_it") langCode = "English/Italian"; // This combo is not supported // else if (langCode == "en_no") // langCode = "English/Norwegian"; else if (langCode == "en_pt") langCode = "English/Portuguese"; // XXX -> English else if (langCode == "de_en") langCode = "German/English"; else if (langCode == "es_en") langCode = "Spanish/English"; else if (langCode == "fr_en") langCode = "French/English"; else if (langCode == "it_en") langCode = "Italian/English"; else if (langCode == "no_en") langCode = "Norwegian/English"; else if (langCode == "pt_en") langCode = "Portuguese/English"; else langCode = "English/German"; // bRet = false; } } } pDialogFactory->releaseDialog(pDialog); return bRet; }
static bool _getTranslationCode (FV_View * pView, UT_String & langCode) { XAP_Frame * pFrame = static_cast<XAP_Frame *> (pView->getParentData()); UT_return_val_if_fail(pFrame,false); bool bRet = false; pFrame->raise(); XAP_Dialog_Id id = XAP_DIALOG_ID_LANGUAGE; XAP_DialogFactory * pDialogFactory = static_cast<XAP_DialogFactory *>(pFrame->getDialogFactory()); XAP_Dialog_Language * pDialog = static_cast<XAP_Dialog_Language *>(pDialogFactory->requestDialog(id)); UT_return_val_if_fail(pDialog,false); UT_String code ("en-US"); const gchar ** props_in = NULL; if (pView->getCharFormat(&props_in)) { const gchar * xml_code = UT_getAttribute("lang", props_in); if ( xml_code ) { code = xml_code ; if ( code.size() >= 2 ) { code = code.substr (0, 2); code += '_'; } } pDialog->setLanguageProperty(UT_getAttribute("lang", props_in)); FREEP(props_in); } // run the dialog pDialog->runModal(pFrame); // extract what they did bool bOK = (pDialog->getAnswer() == XAP_Dialog_Language::a_OK); if (bOK) { const gchar * s; if (pDialog->getChangedLangProperty(&s)) { UT_String changedLang = s; if (changedLang.size() >= 2) { code += changedLang.substr(0, 2); langCode = code; bRet = true; } } } pDialogFactory->releaseDialog(pDialog); return bRet; }