peiyongz 2002/11/04 14:24:43 Modified: c/src/xercesc/util/MsgLoaders/ICU ICUMsgLoader.cpp Log: Locale setting for message loader Revision Changes Path 1.6 +48 -25 xml-xerces/c/src/xercesc/util/MsgLoaders/ICU/ICUMsgLoader.cpp Index: ICUMsgLoader.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/MsgLoaders/ICU/ICUMsgLoader.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ICUMsgLoader.cpp 4 Nov 2002 15:10:40 -0000 1.5 +++ ICUMsgLoader.cpp 4 Nov 2002 22:24:43 -0000 1.6 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2002/11/04 22:24:43 peiyongz + * Locale setting for message loader + * * Revision 1.5 2002/11/04 15:10:40 tng * C++ Namespace Support. * @@ -112,6 +115,7 @@ #include <xercesc/util/XMLMsgLoader.hpp> #include <xercesc/util/XMLString.hpp> #include <xercesc/util/XMLUniDefs.hpp> +#include <xercesc/util/Janitor.hpp> #include "ICUMsgLoader.hpp" #include "string.h" @@ -131,7 +135,9 @@ :fLocaleBundle(0) ,fDomainBundle(0) { - // validation on msgDomain + /*** + Validate msgDomain + ***/ if (!XMLString::equals(msgDomain, XMLUni::fgXMLErrDomain) && !XMLString::equals(msgDomain, XMLUni::fgExceptDomain) && !XMLString::equals(msgDomain, XMLUni::fgValidityDomain) ) @@ -139,37 +145,54 @@ XMLPlatformUtils::panic(XMLPlatformUtils::Panic_UnknownMsgDomain); } - char tempBuf[1024]; - memset(tempBuf, 0, sizeof tempBuf); - char *location = getenv("XERCESC_RESBUND_PKG_PATH"); + /*** + Resolve domainName + ***/ + int index = XMLString::lastIndexOf(msgDomain, chForwardSlash); + char* domainName = XMLString::transcode(&(msgDomain[index + 1])); + ArrayJanitor<char> jan1(domainName); - if (location) - strcpy(tempBuf, location); - - strcat(tempBuf, U_FILE_SEP_STRING); - strcat(tempBuf, "XercescErrMsg"); + /*** + Resolve location + REVISIT: another approach would be: through some system API + which returns the directory of the XercescLib and + that directory would be used to locate the + resource bundle + ***/ + char locationBuf[1024]; + memset(locationBuf, 0, sizeof locationBuf); + char *nlsHome = getenv("XERCESC_NLS_HOME"); + + if (nlsHome) + { + strcpy(locationBuf, nlsHome); + strcat(locationBuf, U_FILE_SEP_STRING); + } + + strcat(locationBuf, "XercescErrMsg"); + + /*** + Open the locale-specific resource bundle + ***/ UErrorCode err = U_ZERO_ERROR; - fLocaleBundle = ures_open(tempBuf, getenv("XERCESC_RESBUND_PKG_LOCALE"), &err); + fLocaleBundle = ures_open(locationBuf, XMLMsgLoader::getLocale(), &err); if (!U_SUCCESS(err) || fLocaleBundle == NULL) { - XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain); + XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain); } - /*** - get the resource bundle for the domain - strip off path information, if any - ***/ - int index = XMLString::lastIndexOf(msgDomain, chForwardSlash); - char *domainName = XMLString::transcode(&(msgDomain[index + 1])); - err = U_ZERO_ERROR; - fDomainBundle = ures_getByKey(fLocaleBundle, domainName, NULL, &err); - delete [] domainName; - - if (!U_SUCCESS(err) || fDomainBundle == NULL) - { - XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain); - } + /*** + Open the domain specific resource bundle within + the locale-specific resource bundle + ***/ + err = U_ZERO_ERROR; + fDomainBundle = ures_getByKey(fLocaleBundle, domainName, NULL, &err); + + if (!U_SUCCESS(err) || fDomainBundle == NULL) + { + XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain); + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]