- if (m.empty())
- return docstring();
-
- // Look for the translated string in the cache.
- TranslationCache::iterator it = cache_.find(m);
- if (it != cache_.end())
- return it->second;
- // The string was not found, use gettext to generate it:
-
- // In this order, see support/filetools.cpp:
- string lang = getEnv("LC_ALL");
- if (lang.empty()) {
- lang = getEnv("LC_MESSAGES");
- if (lang.empty()) {
- lang = getEnv("LANG");
- if (lang.empty())
- lang = "C";
- }
- }
-#ifdef HAVE_LC_MESSAGES
- char const * lc_msgs = setlocale(LC_MESSAGES, lang_.c_str());
-#endif
- // setlocale fails (returns NULL) if the corresponding locale
- // is not installed.
- // On windows (mingw and cygwin) it always returns NULL.
- // Since this method gets called for every translatable
- // buffer string like e.g. "Figure:" we warn only once.
-#if !defined(_WIN32) && !defined(__CYGWIN__)
- if (!warned_ && !lc_msgs) {
- warned_ = true;
- lyxerr << "Locale " << lang_ << " could not be set" << 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());