Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37876869
en ru br
Репозитории ALT
S:0.7.6-alt4
5.1: 0.7.2-alt3
4.1: 0.7.2-alt1
4.0: 0.7.0-alt0.1cvs20060721
3.0: 0.6.0-alt6
www.altlinux.org/Changes

Группа :: Игры/Аркады
Пакет: pingus

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: pingus-20060721-gettext.patch
Скачать


--- 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 <config.h>
+#ifdef HAVE_GETTEXT
+#include <libintl.h>
+#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; i<strlen(buf); i++)
+        buf[i] = toupper(buf[i]);
+      strcat(font_encoding_locale, "_");
+      strcat(font_encoding_locale, buf);
+    }
+#endif
     if(language == "cs" || language == "sr")
     {
+#ifdef HAVE_GETTEXT
+      strcat(font_encoding_locale, ".ISO-8859-2");
+#else
       dictionary_manager.set_charset("ISO-8859-2");
+#endif
       Pingus::Fonts::encoding = "ISO-8859-2";
     }
     else if(language == "tr")
     {
+#ifdef HAVE_GETTEXT
+      strcat(font_encoding_locale, ".ISO-8859-9");
+#else
       dictionary_manager.set_charset("ISO-8859-9");
+#endif
       Pingus::Fonts::encoding = "ISO-8859-9";
     }
     else
     {
+#ifdef HAVE_GETTEXT
+      strcat(font_encoding_locale, ".ISO-8859-1");
+#else
       dictionary_manager.set_charset("ISO-8859-1");
+#endif
       Pingus::Fonts::encoding = "ISO-8859-1";
     }
   }
@@ -643,10 +682,10 @@
 #endif
 
 #ifdef HAVE_GETTEXT
-  std::cout << _("getext support:               ok") << std::endl;
+  std::cout << _("gettext support:              ok") << std::endl;
   std::cout << _("gettext language:        english") << std::endl;
 #else
-  std::cout << "getext support: missing (only support for english will be available)" << std::endl;
+  std::cout << "getext support: missing, using tinygettext" << std::endl;
 #endif
 
   if (sound_enabled)
@@ -798,6 +837,9 @@
       check_args(argc, argv);
 
       print_greeting_message();
+#ifdef HAVE_GETTEXT
+      setlocale(LC_ALL, font_encoding_locale);
+#endif
 
       init_clanlib();
       init_pingus();
--- pingus-20060721/src/file_dialog_item.cxx.gettext	2006-07-19 16:00:35.000000000 +0200
+++ pingus-20060721/src/file_dialog_item.cxx	2006-07-21 12:36:49.000000000 +0200
@@ -94,7 +94,7 @@
 							reader.read_string("levelname",   file_item.friendly_name);
 							reader.read_string("difficulty",  file_info);
 							file_item.is_accessible = true;
-							file_item.friendly_name = _(file_item.friendly_name);
+							file_item.friendly_name = _(file_item.friendly_name.c_str());
 							file_info = _("Difficulty: ") + file_info;
 							Savegame* sg = SavegameManager::instance()->get(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<int>(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 <set>
 #include <string>
 
+#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 <errno.h>
 #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;
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin