--- i18n.c	2007/08/12 12:15:29	1.308
+++ i18n.c	2007/08/19 13:20:52
@@ -23,6 +23,7 @@
 #include <ctype.h>
 #include <libintl.h>
 #include <locale.h>
+#include <unistd.h>
 #include "tools.h"
 
 // TRANSLATORS: The name of the language, as written natively
@@ -101,9 +103,13 @@
   if (Locales.Size() > 0) {
      dsyslog("found %d locales in %s", Locales.Size(), I18nLocaleDir);
      char *OldLocale = strdup(setlocale(LC_MESSAGES, NULL));
+     setlocale(LC_MESSAGES, "");
      for (int i = 0; i < Locales.Size(); i++) {
-         if (i < I18N_MAX_LANGUAGES - 1) {
-            if (setlocale(LC_MESSAGES, Locales[i])) {
+         cString FileName = cString::sprintf("%s/%s/LC_MESSAGES/vdr.mo", I18nLocaleDir, Locales[i]);
+         if (access(FileName, F_OK) == 0) { // found a locale with VDR texts
+            if (i < I18N_MAX_LANGUAGES - 1) {
+               setenv("LANGUAGE", Locales[i], 1);
+               textdomain("vdr");
                if (strstr(OldLocale, Locales[i]) == OldLocale)
                   CurrentLanguage = LanguageLocales.Size();
                LanguageLocales.Append(strdup(Locales[i]));
@@ -117,11 +123,13 @@
                    }
                LanguageCodes.Append(strdup(Code));
                }
+            else {
+               esyslog("ERROR: too many locales - increase I18N_MAX_LANGUAGES!");
+               break;
+               }
             }
-         else
-            esyslog("ERROR: too many locales - increase I18N_MAX_LANGUAGES!");
          }
-     setlocale(LC_MESSAGES, OldLocale);
+     setenv("LANGUAGE", LanguageLocales[CurrentLanguage], 1);
      free(OldLocale);
      }
   // Prepare any known language codes for which there was no locale:
