g_date_time_format: honour T_FMT_AMPM for '%r'
authorRyan Lortie <desrt@desrt.ca>
Sun, 4 Sep 2011 22:01:55 +0000 (18:01 -0400)
committerRyan Lortie <desrt@desrt.ca>
Mon, 5 Sep 2011 03:55:58 +0000 (23:55 -0400)
We had the 12 hour time format hard-coded to "%02d:%02d:%02d %s" but it
actually changes depending on the locale.  Just with the other formats,
use nl_langinfo() if we have it, otherwise fall back on gettext().

configure.ac
glib/gdatetime.c

index 061964e..1f5493d 100644 (file)
@@ -1323,8 +1323,10 @@ AC_CACHE_CHECK([for nl_langinfo (PM_STR)],glib_cv_langinfo_time,[
         AC_TRY_COMPILE([#include <langinfo.h>],
                 [char *str;
                  str = nl_langinfo (PM_STR);
+                 str = nl_langinfo (D_T_FMT);
                  str = nl_langinfo (D_FMT);
                  str = nl_langinfo (T_FMT);
+                 str = nl_langinfo (T_FMT_AMPM);
                  str = nl_langinfo (MON_1);
                  str = nl_langinfo (ABMON_12);
                  str = nl_langinfo (DAY_1);
index f3dbba5..c3dd6b7 100644 (file)
@@ -175,6 +175,8 @@ static const guint16 days_in_year[2][13] =
 #define PREFERRED_DATE_TIME_FMT nl_langinfo (D_T_FMT)
 #define PREFERRED_DATE_FMT nl_langinfo (D_FMT)
 #define PREFERRED_TIME_FMT nl_langinfo (T_FMT)
+#define PREFERRED_TIME_FMT nl_langinfo (T_FMT)
+#define PREFERRED_12HR_TIME_FMT nl_langinfo (T_FMT_AMPM)
 
 static const gint weekday_item[2][7] =
 {
@@ -210,6 +212,8 @@ static const gint month_item[2][12] =
 /* Translators: this is the preferred format for expressing the time */
 #define PREFERRED_TIME_FMT C_("GDateTime", "%H:%M:%S")
 
+/* Translators: this is the preferred format for expressing 12 hour time */
+#define PREFERRED_12HR_TIME_FMT C_("GDateTime", "%I:%M:%S %p")
 
 #define WEEKDAY_ABBR(d)       (get_weekday_name_abbr (g_date_time_get_day_of_week (d)))
 #define WEEKDAY_FULL(d)       (get_weekday_name (g_date_time_get_day_of_week (d)))
@@ -2535,16 +2539,9 @@ g_date_time_format (GDateTime   *datetime,
                   break;
                 case 'r':
                   {
-                    gint hour = g_date_time_get_hour (datetime) % 12;
-                    if (hour == 0)
-                      hour = 12;
-                    ampm = g_utf8_strup (GET_AMPM (datetime), -1);
-                    g_string_append_printf (outstr, "%02d:%02d:%02d %s",
-                                            hour,
-                                            g_date_time_get_minute (datetime),
-                                            g_date_time_get_second (datetime),
-                                            ampm);
-                    g_free (ampm);
+                    tmp = g_date_time_format (datetime, PREFERRED_12HR_TIME_FMT);
+                    g_string_append (outstr, tmp);
+                    g_free (tmp);
                   }
                   break;
                 case 'R':