#include "supertux/menu/language_menu.hpp"
extern "C" {
-#include "findlocale.h"
+#include <findlocale.h>
}
#include "gui/menu_item.hpp"
+#include "gui/menu_manager.hpp"
#include "supertux/gameconfig.hpp"
+#include "supertux/globals.hpp"
enum {
MNID_LANGUAGE_AUTO_DETECT = 0,
MNID_LANGUAGE_NEXT = 10
};
-LanguageMenu::LanguageMenu()
+LanguageMenu::LanguageMenu()
{
add_label(_("Language"));
add_hl();
add_entry(MNID_LANGUAGE_ENGLISH, "English");
int mnid = MNID_LANGUAGE_NEXT;
- std::set<tinygettext::Language> languages = dictionary_manager.get_languages();
- for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++)
+ std::set<tinygettext::Language> languages = dictionary_manager->get_languages();
+ for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++)
{
add_entry(mnid++, i->get_name());
}
}
void
-LanguageMenu::menu_action(MenuItem* item)
+LanguageMenu::menu_action(MenuItem* item)
{
if (item->id == MNID_LANGUAGE_AUTO_DETECT) // auto detect
{
FL_Locale *locale;
- FL_FindLocale(&locale, FL_MESSAGES);
- tinygettext::Language language = tinygettext::Language::from_spec(locale->lang, locale->country, locale->variant);
+ FL_FindLocale(&locale);
+ tinygettext::Language language = tinygettext::Language::from_spec( locale->lang?locale->lang:"", locale->country?locale->country:"", locale->variant?locale->variant:"");
FL_FreeLocale(&locale);
- dictionary_manager.set_language(language);
- g_config->locale = language.str();
+ dictionary_manager->set_language(language); // set currently detected language
+ g_config->locale = ""; // do auto detect every time on startup
g_config->save();
- Menu::pop_current();
+ MenuManager::instance().clear_menu_stack();
}
else if (item->id == MNID_LANGUAGE_ENGLISH) // english
{
g_config->locale = "en";
- dictionary_manager.set_language(tinygettext::Language::from_name(g_config->locale));
+ dictionary_manager->set_language(tinygettext::Language::from_name(g_config->locale));
g_config->save();
- Menu::pop_current();
+ MenuManager::instance().clear_menu_stack();
}
else
{
int mnid = MNID_LANGUAGE_NEXT;
- std::set<tinygettext::Language> languages = dictionary_manager.get_languages();
+ std::set<tinygettext::Language> languages = dictionary_manager->get_languages();
- for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++)
+ for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++)
{
- if (item->id == mnid++)
+ if (item->id == mnid++)
{
g_config->locale = i->str();
- dictionary_manager.set_language(*i);
+ dictionary_manager->set_language(*i);
g_config->save();
- Menu::pop_current();
+ MenuManager::instance().clear_menu_stack();
break;
}
}