- char * old = strdup(setlocale(LC_ALL, 0));
- char * n = setlocale(LC_ALL, lang_.c_str());
+ //string oldMSG = setlocale(LC_MESSAGES, NULL);
+ // In this order, see support/filetools.C:
+ string lang = getEnv("LC_ALL");
+ if (lang.empty()) {
+ lang = getEnv("LC_MESSAGES");
+ if (lang.empty()) {
+ lang = getEnv("LANG");
+ if (lang.empty())
+ lang = "C";
+ }
+ }
+
+ char const * lc_msgs = setlocale(LC_MESSAGES, lang_.c_str());
+#ifndef _WIN32
+ if (!lc_msgs)
+ lyxerr << "Locale " << lang_ << " could not be set" << std::endl;
+#endif
+ // CTYPE controls what getmessage thinks what encoding the po file uses
+ char const * lc_ctype = setlocale(LC_CTYPE, NULL);
+ string oldCTYPE = lc_ctype ? lc_ctype : "";
+
+ setlocale(LC_CTYPE, lang_.c_str());
+ errno = 0;
+ char const * c = bindtextdomain(PACKAGE, package().locale_dir().c_str());
+ int e = errno;
+ if (e) {
+ lyxerr[Debug::DEBUG]
+ << BOOST_CURRENT_FUNCTION << '\n'
+ << "Error code: " << errno << '\n'
+ << "Lang, mess: " << lang_ << " " << m << '\n'
+ << "Directory : " << package().locale_dir() << '\n'
+ << "Rtn value : " << c << std::endl;
+ }
+ textdomain(PACKAGE);