--- pingus-20060721/src/gettext.h.gettext 2006-07-19 16:00:35.000000000 +0200 +++ pingus-20060721/src/gettext.h 2006-07-21 12:36:49.000000000 +0200 @@ -19,7 +19,11 @@ #ifndef HEADER_GETTEXT_HXX #define HEADER_GETTEXT_HXX - +#include +#ifdef HAVE_GETTEXT +#include +#define _(String) gettext(String) +#else #include "tinygettext/tinygettext.hxx" namespace Pingus { @@ -28,5 +32,5 @@ #define _(String) ::Pingus::dictionary_manager.get_dictionary().translate(String).c_str() #define N_(id, id2, num) ::Pingus::dictionary_manager.get_dictionary().translate(id, di2, num).c_str() - +#endif /* HAVE_GETTEXT */ #endif /* HEADER_GETTEXT_HXX */ --- pingus-20060721/src/pingus_main.cxx.gettext 2006-07-19 16:00:35.000000000 +0200 +++ pingus-20060721/src/pingus_main.cxx 2006-07-21 15:02:37.000000000 +0200 @@ -127,6 +127,7 @@ editor(false), refresh_rate(60) { + font_encoding_locale[0] = 0; } PingusMain::~PingusMain() @@ -585,9 +586,14 @@ exit(EXIT_FAILURE); } +#ifdef HAVE_GETTEXT + textdomain("pingus"); + setlocale(LC_ALL, ""); +#else dictionary_manager.add_directory(path_manager.complete("po/")); // Language is automatically picked from env variable // dictionary_manager.set_language("de"); +#endif const char* lang = getenv("LC_ALL"); if(!lang) lang = getenv("LC_MESSAGES"); @@ -596,19 +602,52 @@ { std::string language(lang); language.resize(2); +#ifdef HAVE_GETTEXT + char *p; + strcpy(font_encoding_locale, lang); + /* remove encoding if any */ + if ((p = strchr(font_encoding_locale, '.'))) + *p = 0; + /* remove modifier if any */ + if ((p = strchr(font_encoding_locale, '@'))) + *p = 0; + /* Add a territory if none is present */ + if (!strchr(font_encoding_locale, '_')) + { + unsigned int i; + char buf[16]; + strcpy(buf, font_encoding_locale); + for (i=0; iget(file_item.friendly_name); if (sg) @@ -133,8 +133,8 @@ status = _("Finished!"); file_item.is_finished = true; } - file_item.friendly_name = _(file_item.friendly_name); - file_info = _(file_info); + file_item.friendly_name = _(file_item.friendly_name.c_str()); + file_info = _(file_info.c_str()); } // Have to limit the size of the printed name --- pingus-20060721/src/gettext.cxx.gettext 2006-07-19 16:00:35.000000000 +0200 +++ pingus-20060721/src/gettext.cxx 2006-07-21 12:36:49.000000000 +0200 @@ -18,9 +18,9 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "gettext.h" - +#ifndef HAVE_GETTEXT namespace Pingus { TinyGetText::DictionaryManager dictionary_manager; } - +#endif /* EOF */ --- pingus-20060721/src/result_screen.cxx.gettext 2006-07-19 16:00:35.000000000 +0200 +++ pingus-20060721/src/result_screen.cxx 2006-07-21 14:39:16.000000000 +0200 @@ -177,7 +177,7 @@ gc.print_center(Fonts::chalk_large, gc.get_width()/2, (float)CL_Display::get_height()/2 - 200, - _(result.plf.get_levelname())); + _(result.plf.get_levelname().c_str())); if (result.success()) { --- pingus-20060721/src/theme.cxx.gettext 2006-07-19 16:00:35.000000000 +0200 +++ pingus-20060721/src/theme.cxx 2006-07-21 12:36:49.000000000 +0200 @@ -56,15 +56,15 @@ if (verbose) std::cout << "Theme: loading: " << filename << std::endl; plt.parse(filename); - title_name = _(plt.get_name()); + title_name = _(plt.get_name().c_str()); level_filenames = plt.get_levels(); load_levels(); - if (_(plt.get_description()) != "-") + if (_(plt.get_description().c_str()) != "-") { description.set_font(font); - description.set_text(_(plt.get_description()), 350); + description.set_text(_(plt.get_description().c_str()), 350); has_description = true; } else @@ -327,7 +327,7 @@ try { XMLPingusLevel plf(filename, filename); - levelnames.push_back(_(plf.get_levelname())); + levelnames.push_back(_(plf.get_levelname().c_str())); } catch (PingusError& err) { --- pingus-20060721/src/worldmap/level_dot.cxx.gettext 2006-07-19 16:00:32.000000000 +0200 +++ pingus-20060721/src/worldmap/level_dot.cxx 2006-07-21 12:36:49.000000000 +0200 @@ -131,7 +131,7 @@ if (accessible()) { - int length = Fonts::pingus_small.bounding_rect(0, 0, _(get_plf().get_levelname())).get_width() / 2; + int length = Fonts::pingus_small.bounding_rect(0, 0, _(get_plf().get_levelname().c_str())).get_width() / 2; int realpos = static_cast(gc.world_to_screen(Vector(pos.x, pos.y, 0)).x); if (realpos - length < 0) pos_correction = realpos - length; @@ -141,7 +141,7 @@ gc.print_center(Fonts::pingus_small, pos.x - (float)pos_correction, pos.y - 40, - _(get_plf().get_levelname()), + _(get_plf().get_levelname().c_str()), 10000); } else --- pingus-20060721/src/worldmap/worldmap.cxx.gettext 2006-07-19 16:00:32.000000000 +0200 +++ pingus-20060721/src/worldmap/worldmap.cxx 2006-07-21 12:36:49.000000000 +0200 @@ -195,7 +195,7 @@ gc.print_center(Fonts::chalk_small, display_gc->get_width ()/2, display_gc->get_height() - 20, - _(leveldot->get_plf().get_levelname())); + _(leveldot->get_plf().get_levelname().c_str())); } else --- pingus-20060721/src/worldmap/worldmap_story.cxx.gettext 2006-07-19 16:00:32.000000000 +0200 +++ pingus-20060721/src/worldmap/worldmap_story.cxx 2006-07-21 12:36:49.000000000 +0200 @@ -40,7 +40,7 @@ WorldMapStory::WorldMapStory(const FileReader &reader) { reader.read_string("title", title); - title = _(title); + title = _(title.c_str()); reader.read_string("music", music); FileReader all_pages = reader.read_section("pages"); @@ -58,7 +58,7 @@ i->read_desc("surface", desc); i->read_string("text", text); // Translate the text and break it up. - text = StringFormat::break_line(_(text), 570, Fonts::chalk_normal); + text = StringFormat::break_line(_(text.c_str()), 570, Fonts::chalk_normal); pages.push_back(StoryPage(desc, text, page_name)); } std::stable_sort(pages.begin(), pages.end(), &StoryPageCompare); --- pingus-20060721/src/tinygettext/tinygettext.hxx.gettext 2006-07-19 16:00:34.000000000 +0200 +++ pingus-20060721/src/tinygettext/tinygettext.hxx 2006-07-21 12:36:49.000000000 +0200 @@ -25,6 +25,7 @@ #include #include +#ifndef HAVE_GETTEXT namespace TinyGetText { typedef int (*PluralFunc)(int n); @@ -149,6 +150,7 @@ } // namespace TinyGetText +#endif /* HAVE_GETTEXT */ #endif /* EOF */ --- pingus-20060721/src/tinygettext/tinygettext.cxx.gettext 2006-07-19 16:00:34.000000000 +0200 +++ pingus-20060721/src/tinygettext/tinygettext.cxx 2006-07-21 12:36:49.000000000 +0200 @@ -32,6 +32,7 @@ #include #include "tinygettext.hxx" +#ifndef HAVE_GETTEXT //#define TRANSLATION_DEBUG namespace TinyGetText { @@ -789,4 +790,7 @@ } // namespace TinyGetText +#endif /* HAVE_GETTEXT */ + + /* EOF */ --- pingus-20060721/src/pingus_main.hxx.gettext 2006-07-21 14:56:52.000000000 +0200 +++ pingus-20060721/src/pingus_main.hxx 2006-07-21 14:56:52.000000000 +0200 @@ -54,6 +54,14 @@ CL_Slot on_button_release_slot; CL_Slot on_exit_press_slot; +#ifdef HAVE_GETTEXT + /* We need to set a modified local with the correct encoding for our fonts + but only after printing oru welcome header to stdout in the default + encoding. This is used to store the modified local, which gets build in + init_path_finder() but doesn't get used until print_greeting_message() + is done */ + char font_encoding_locale[32]; +#endif public: PingusMain(); virtual ~PingusMain(); --- pingus-20060721/src/start_screen.cxx.gettext 2006-07-19 16:00:35.000000000 +0200 +++ pingus-20060721/src/start_screen.cxx 2006-07-21 12:36:49.000000000 +0200 @@ -157,7 +157,7 @@ gc.print_center(Fonts::chalk_large, gc.get_width()/2, (float)CL_Display::get_height()/2 - 200, - _(plf.get_levelname())); + _(plf.get_levelname().c_str())); gc.print_left(Fonts::chalk_normal, (float)CL_Display::get_width()/2 - 290, @@ -191,7 +191,7 @@ if (description != "") return description; - description = _(plf.get_description()); + description = _(plf.get_description().c_str()); if (description == "") return description;