patches/GConf-03-g11n-locale-alias.diff
author dcarbery
Fri, 24 Nov 2006 16:37:59 +0000
branch217update
changeset 19096 d542fc2c823e
parent 5518 235b0b4aa324
permissions -rw-r--r--
Merged trunk changes r9797:9829 into 217update branch.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5518
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     1
diff -ur GConf-2.6.1/gconf/gconf-locale.c GConf-2.6.1.hacked/gconf/gconf-locale.c
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     2
--- GConf-2.6.1/gconf/gconf-locale.c.orig	2004-08-02 13:19:41.166861000 -0700
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     3
+++ GConf-2.6.1/gconf/gconf-locale.c	2004-08-02 13:20:49.947469000 -0700
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     4
@@ -22,6 +22,7 @@
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     5
 #include <sys/time.h>
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     6
 #include <time.h>
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     7
 #include <string.h>
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     8
+#include <stdio.h>
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
     9
 
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    10
 static void
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    11
 gconf_locale_cache_add (GConfLocaleCache* cache,
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    12
@@ -189,7 +190,66 @@
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    13
  * Big mess o' cut-and-pasted code
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    14
  */
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    15
 
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    16
-/* --------------------------------------------------------------- */
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    17
+static GHashTable *alias_table = NULL;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    18
+
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    19
+/*read an alias file for the locales*/
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    20
+static void
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    21
+read_aliases (char *file)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    22
+{
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    23
+  FILE *fp;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    24
+  char buf[256];
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    25
+  if (!alias_table)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    26
+    alias_table = g_hash_table_new (g_str_hash, g_str_equal);
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    27
+  fp = fopen (file,"r");
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    28
+  if (!fp)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    29
+    return;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    30
+  while (fgets (buf,256,fp))
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    31
+    {
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    32
+      char *p;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    33
+      g_strstrip(buf);
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    34
+      if (buf[0]=='#' || buf[0]=='\0')
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    35
+        continue;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    36
+      p = strtok (buf,"\t ");
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    37
+      if (!p)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    38
+	continue;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    39
+      p = strtok (NULL,"\t ");
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    40
+      if(!p)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    41
+	continue;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    42
+      if (!g_hash_table_lookup (alias_table, buf))
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    43
+	g_hash_table_insert (alias_table, g_strdup(buf), g_strdup(p));
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    44
+    }
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    45
+  fclose (fp);
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    46
+}
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    47
+
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    48
+/*return the un-aliased language as a newly allocated string*/
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    49
+static char *
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    50
+unalias_lang (char *lang)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    51
+{
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    52
+  char *p;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    53
+  int i;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    54
+  if (!alias_table)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    55
+    {
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    56
+      read_aliases ("/usr/share/locale/locale.alias");
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    57
+      read_aliases ("/usr/local/share/locale/locale.alias");
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    58
+      read_aliases ("/usr/lib/X11/locale/locale.alias");
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    59
+      read_aliases ("/usr/openwin/lib/locale/locale.alias");
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    60
+    }
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    61
+  i = 0;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    62
+  while ((p=g_hash_table_lookup(alias_table,lang)) && strcmp(p, lang))
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    63
+    {
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    64
+      lang = p;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    65
+      if (i++ == 30)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    66
+        {
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    67
+          static gboolean said_before = FALSE;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    68
+	  if (!said_before)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    69
+            g_warning (_("Too many alias levels for a locale, "
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    70
+			 "may indicate a loop"));
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    71
+	  said_before = TRUE;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    72
+	  return lang;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    73
+	}
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    74
+    }
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    75
+  return lang;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    76
+}
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    77
 
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    78
 /* Mask for components of locale spec. The ordering here is from
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    79
  * least significant to most significant
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    80
@@ -360,6 +420,8 @@
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    81
           category_memory[0]= '\0'; 
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    82
           category_memory++;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    83
           
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    84
+	  cp = unalias_lang (cp); /* add locale alias support */
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    85
+
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    86
           if (strcmp (cp, "C") == 0)
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    87
             c_locale_defined= TRUE;
235b0b4aa324 merged the gnome-2-10 branch to HEAD
laca
parents:
diff changeset
    88