[geocode-glib] reverse: Derive address format from locale



commit 029c421d32647e4ab6fbbfa669947c24a27e69fe
Author: Marcus Lundblad <ml update uu se>
Date:   Sun Mar 9 19:20:54 2014 +0100

    reverse: Derive address format from locale
    
    Determine address format using nl_langinfo.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=725591

 geocode-glib/geocode-reverse.c |   30 ++++++++++++++++++++++++++++--
 1 files changed, 28 insertions(+), 2 deletions(-)
---
diff --git a/geocode-glib/geocode-reverse.c b/geocode-glib/geocode-reverse.c
index ea372bf..7f1af53 100644
--- a/geocode-glib/geocode-reverse.c
+++ b/geocode-glib/geocode-reverse.c
@@ -27,6 +27,8 @@
 #include <json-glib/json-glib.h>
 #include <libsoup/soup.h>
 #include <config.h>
+#include <langinfo.h>
+#include <glib/gprintf.h>
 #include <glib/gi18n-lib.h>
 #include <geocode-glib/geocode-glib.h>
 #include <geocode-glib/geocode-error.h>
@@ -114,6 +116,28 @@ geocode_reverse_new_for_location (GeocodeLocation *location)
        return object;
 }
 
+static gboolean
+is_number_after_street (void)
+{
+#ifdef HAVE_NL_LANGINFO
+  gchar *addr_format;
+  gchar *s;
+  gchar *h;
+
+  addr_format = nl_langinfo (_NL_ADDRESS_POSTAL_FMT);
+  s = g_strstr_len (addr_format, -1, "%s");
+  h = g_strstr_len (addr_format, -1, "%h");
+
+  if (s != NULL && h != NULL) {
+    return h > s;
+  } else {
+    return FALSE;
+  }
+#else
+  return FALSE;
+#endif
+}
+
 void
 _geocode_read_nominatim_attributes (JsonReader *reader,
                                     GHashTable *ht)
@@ -153,8 +177,10 @@ _geocode_read_nominatim_attributes (JsonReader *reader,
                                 else
                                         house_number = value;
                         } else if (house_number != NULL && g_strcmp0 (members[i], "road") == 0) {
-                                /* Translators comment: number + street (e.g 221 Baker Street) */
-                                char *name = g_strdup_printf (_("%s %s"), house_number, value);
+                               gboolean number_after = is_number_after_street ();
+                               char *name = g_strdup_printf ("%s %s",
+                                                             number_after? value : house_number,
+                                                             number_after? house_number : value);
                                 g_hash_table_insert (ht, g_strdup ("name"), name);
                         }
                 } else if (g_strcmp0 (members[i], "boundingbox") == 0) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]