2 // Copyright (C) 2004 Tobas Glaesser <tobi.web@gmx.de>
3 // Copyright (C) 2006 Matthias Braun <matze@braunis.de>
5 // This program is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #include "supertux/menu/language_menu.hpp"
21 #include <findlocale.h>
23 #include "gui/menu_item.hpp"
24 #include "gui/menu_manager.hpp"
25 #include "supertux/gameconfig.hpp"
26 #include "supertux/globals.hpp"
29 MNID_LANGUAGE_AUTO_DETECT = 0,
30 MNID_LANGUAGE_ENGLISH = 1,
31 MNID_LANGUAGE_NEXT = 10
34 LanguageMenu::LanguageMenu()
36 add_label(_("Language"));
38 add_entry(MNID_LANGUAGE_AUTO_DETECT, _("<auto-detect>"));
39 add_entry(MNID_LANGUAGE_ENGLISH, "English");
41 int mnid = MNID_LANGUAGE_NEXT;
42 std::set<tinygettext::Language> languages = dictionary_manager->get_languages();
43 for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++)
45 add_entry(mnid++, i->get_name());
53 LanguageMenu::menu_action(MenuItem* item)
55 if (item->id == MNID_LANGUAGE_AUTO_DETECT) // auto detect
58 FL_FindLocale(&locale);
59 tinygettext::Language language = tinygettext::Language::from_spec( locale->lang?locale->lang:"", locale->country?locale->country:"", locale->variant?locale->variant:"");
60 FL_FreeLocale(&locale);
62 dictionary_manager->set_language(language); // set currently detected language
63 g_config->locale = ""; // do auto detect every time on startup
65 MenuManager::instance().pop_current();
67 else if (item->id == MNID_LANGUAGE_ENGLISH) // english
69 g_config->locale = "en";
70 dictionary_manager->set_language(tinygettext::Language::from_name(g_config->locale));
72 MenuManager::instance().pop_current();
76 int mnid = MNID_LANGUAGE_NEXT;
77 std::set<tinygettext::Language> languages = dictionary_manager->get_languages();
79 for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++)
81 if (item->id == mnid++)
83 g_config->locale = i->str();
84 dictionary_manager->set_language(*i);
86 MenuManager::instance().pop_current();