]> git.lyx.org Git - lyx.git/blobdiff - src/messages.C
Fix bug 2485 and crash on middle mouse paste on math
[lyx.git] / src / messages.C
index 3baa83c3e451be4f77df6adc984b33d213e6f47a..6afef3c0d94ca9ec1b52157ab9ba42ab2485add3 100644 (file)
@@ -97,7 +97,7 @@ public:
                string::size_type i = lang_.find(".");
                lang_ = lang_.substr(0, i);
                lyxerr[Debug::DEBUG] << BOOST_CURRENT_FUNCTION
-                                     << ": language(" << lang_ << ")" << std::endl;
+                                    << ": language(" << lang_ << ")" << std::endl;
        }
 
        ~Pimpl() {}
@@ -107,7 +107,6 @@ public:
                if (m.empty())
                        return m;
 
-               //string oldMSG = setlocale(LC_MESSAGES, NULL);
                // In this order, see support/filetools.C:
                string lang = getEnv("LC_ALL");
                if (lang.empty()) {
@@ -118,11 +117,19 @@ public:
                                        lang = "C";
                        }
                }
-               
+
                char const * lc_msgs = setlocale(LC_MESSAGES, lang_.c_str());
+               // setlocale fails (returns NULL) if the corresponding locale
+               // is not installed.
+               // On windows (mingw) it always returns NULL.
+               // Since this method gets called for every translatable
+               // buffer string like e.g. "Figure:" we warn only once.
 #ifndef _WIN32
-               if (!lc_msgs)
+               static bool warned = false;
+               if (!warned && !lc_msgs) {
+                       warned = true;
                        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);
@@ -134,11 +141,11 @@ public:
                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;
+                               << 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);
                const char* msg = gettext(m.c_str());