* read text domain from the .desktop file (if available)
authormishas <mikhail.sobolev@gmail.com>
Wed, 21 Mar 2007 20:19:10 +0000 (20:19 +0000)
committermishas <mikhail.sobolev@gmail.com>
Wed, 21 Mar 2007 20:19:10 +0000 (20:19 +0000)
 * perform translation for name and comment according to locale

git-svn-id: file:///svnroot/simple-launcher/trunk@100 3ba93dab-e023-0410-b42a-de7732cf370a

launcher-item.cc
launcher-item.h

index 999da20..ee230f2 100644 (file)
@@ -17,6 +17,8 @@
 
 #include <string>
 
+#include <libintl.h>
+
 #include <glib/gmem.h>
 #include <glib/gkeyfile.h>
 
@@ -29,7 +31,10 @@ static const char *DESKTOP_ENTRY_GROUP = "Desktop Entry",
                   *DESKTOP_ENTRY_ICON_FIELD = "Icon",
                   *DESKTOP_ENTRY_NAME_FIELD = "Name",
                   *DESKTOP_ENTRY_COMMENT_FIELD = "Comment",
-                  *DESKTOP_ENTRY_SERVICE_FIELD = "X-Osso-Service";
+                  *DESKTOP_ENTRY_SERVICE_FIELD = "X-Osso-Service",
+                  *DESKTOP_ENTRY_TEXT_DOMAIN = "X-Text-Domain";
+
+static const char *DEFAULT_TEXT_DOMAIN = "osso-applet-tasknavigator";
 
 class GKeyFileWrapper {
 public:
@@ -90,6 +95,14 @@ LauncherItem::LauncherItem(): myEnabled(false) {
 LauncherItem::~LauncherItem() {
 }
 
+std::string LauncherItem::translateString(const std::string& what) const {
+  if (what.empty()) {
+    return what;
+  } else {
+    return dgettext(myTextDomain.empty() ? DEFAULT_TEXT_DOMAIN : myTextDomain.c_str(), what.c_str());
+  }
+}
+
 bool LauncherItem::load(const std::string& filename) {
   GKeyFileWrapper key_file;
 
@@ -108,6 +121,7 @@ bool LauncherItem::load(const std::string& filename) {
     myComment = key_file.getLocaleString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_COMMENT_FIELD);
     myIcon = key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_ICON_FIELD);
     myService = key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_SERVICE_FIELD);
+    myTextDomain = key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_TEXT_DOMAIN);
 
     break;
   }
index 3b4065e..ec53bb9 100644 (file)
@@ -36,8 +36,8 @@ public:
   GdkPixbuf *getIcon(int icon_size) const;
 
   const std::string& getFileName() const { return myFileName; }
-  const std::string& getName() const { return myName; }
-  const std::string& getComment() const { return myComment; }
+  std::string getName(bool translate = true) const { return translate ? translateString(myName) : myName; }
+  std::string getComment(bool translate = true) const { return translate ? translateString(myComment) : myComment; }
   const std::string& getService() const { return myService; }
 
   bool isEnabled(void) const { return myEnabled; }
@@ -53,10 +53,12 @@ public:
   }
 
 private:
+  std::string translateString(const std::string& what) const;
+
   bool checkSanity(void) { return !(myName.empty() || myIcon.empty() || myService.empty()); }
 
 private:
-  std::string myFileName, myName, myComment, myIcon, myService;
+  std::string myFileName, myName, myComment, myIcon, myService, myTextDomain;
   bool myEnabled;
 
   static GtkIconTheme *ourTheme;