Fix level names when language is set to auto-detect
[supertux.git] / src / lisp / parser.cpp
index 53f6469..2a09de8 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "lisp/lisp.hpp"
 #include "lisp/parser.hpp"
+#include "util/gettext.hpp"
 #include "util/obstackpp.hpp"
 #include "physfs/ifile_stream.hpp"
 #include "physfs/ifile_streambuf.hpp"
@@ -42,8 +43,15 @@ Parser::Parser(bool translate) :
   if(translate) {
     dictionary_manager = new tinygettext::DictionaryManager();
     dictionary_manager->set_charset("UTF-8");
-    if (g_config && (g_config->locale != ""))
-      dictionary_manager->set_language(tinygettext::Language::from_name(g_config->locale));
+    if (g_config) {
+      if (g_config->locale != "") {
+        dictionary_manager->set_language(tinygettext::Language::from_name(g_config->locale));
+      }
+      else if(g_dictionary_manager && g_dictionary_manager->get_language()) {
+        // Language set to auto-detect?
+        dictionary_manager->set_language(g_dictionary_manager->get_language());
+      }
+    }
   }
 
   obstack_init(&obst);
@@ -68,19 +76,19 @@ static std::string dirname(const std::string& filename)
 }
 
 const Lisp*
-Parser::parse(const std::string& filename)
+Parser::parse(const std::string& filename_)
 {
-  IFileStreambuf ins(filename);
+  IFileStreambuf ins(filename_);
   std::istream in(&ins);
 
   if(!in.good()) {
     std::stringstream msg;
-    msg << "Parser problem: Couldn't open file '" << filename << "'.";
+    msg << "Parser problem: Couldn't open file '" << filename_ << "'.";
     throw std::runtime_error(msg.str());
   }
 
   if(dictionary_manager) {
-    std::string rel_dir = dirname (filename);
+    std::string rel_dir = dirname (filename_);
     for(char** i = searchpath; *i != NULL; i++)
     {
       std::string abs_dir = std::string (*i) + PHYSFS_getDirSeparator () + rel_dir;
@@ -89,7 +97,7 @@ Parser::parse(const std::string& filename)
     dictionary = & (dictionary_manager->get_dictionary());
   }
 
-  return parse(in, filename);
+  return parse(in, filename_);
 }
 
 const Lisp*