]> Dogcows Code - chaz/tint2/commitdiff
Localize launcher tooltips
authorThierry Lorthiois <lorthiois@bbsoft.fr>
Wed, 14 Mar 2012 05:06:15 +0000 (05:06 +0000)
committerThierry Lorthiois <lorthiois@bbsoft.fr>
Wed, 14 Mar 2012 05:06:15 +0000 (05:06 +0000)
src/launcher/launcher.c

index 6915d05b00cd7d445177e827a50c79e9a236b824..2d1f8e84f1d3703902b71eb0adb2539675cc5dfe 100644 (file)
@@ -24,6 +24,7 @@
 #include <unistd.h>
 #include <signal.h>
 #include <stdlib.h>
+#include <glib/gi18n.h>
 
 #include "window.h"
 #include "server.h"
@@ -422,13 +423,13 @@ void expand_exec(DesktopEntry *entry, const char *path)
        }
 }
 
-//TODO Use UTF8 when parsing the file
 int launcher_read_desktop_file(const char *path, DesktopEntry *entry)
 {
        FILE *fp;
        char *line = NULL;
        size_t line_size;
        char *key, *value;
+       int i;
 
        entry->name = entry->icon = entry->exec = NULL;
 
@@ -437,6 +438,20 @@ int launcher_read_desktop_file(const char *path, DesktopEntry *entry)
                return 0;
        }
 
+       gchar **languages = (gchar **)g_get_language_names();
+       // lang_index is the index of the language for the best Name key in the language vector
+       // lang_index_default is a constant that encodes the Name key without a language
+       int lang_index, lang_index_default;
+#define LANG_DBG 0
+       if (LANG_DBG) printf("Languages:");
+       for (i = 0; languages[i]; i++) {
+               if (LANG_DBG) printf(" %s", languages[i]);
+       }
+       if (LANG_DBG) printf("\n");
+       lang_index_default = i;
+       // we currently do not know about any Name key at all, so use an invalid index
+       lang_index = lang_index_default + 1;
+
        int inside_desktop_entry = 0;
        while (getline(&line, &line_size, fp) >= 0) {
                int len = strlen(line);
@@ -447,8 +462,22 @@ int launcher_read_desktop_file(const char *path, DesktopEntry *entry)
                        inside_desktop_entry = (strcmp(line, "[Desktop Entry]") == 0);
                }
                if (inside_desktop_entry && parse_dektop_line(line, &key, &value)) {
-                       if (!entry->name && strcmp(key, "Name") == 0) {
-                               entry->name = strdup(value);
+                       if (strstr(key, "Name") == key) {
+                               if (strcmp(key, "Name") == 0 && lang_index > lang_index_default) {
+                                       entry->name = strdup(value);
+                                       lang_index = lang_index_default;
+                               } else {
+                                       for (i = 0; languages[i] && i < lang_index; i++) {
+                                               gchar *localized_key = g_strdup_printf("Name[%s]", languages[i]);
+                                               if (strcmp(key, localized_key) == 0) {
+                                                       if (entry->name)
+                                                               free(entry->name);
+                                                       entry->name = strdup(value);
+                                                       lang_index = i;
+                                               }
+                                               g_free(localized_key);
+                                       }
+                               }
                        } else if (!entry->exec && strcmp(key, "Exec") == 0) {
                                entry->exec = strdup(value);
                        } else if (!entry->icon && strcmp(key, "Icon") == 0) {
This page took 0.020347 seconds and 4 git commands to generate.