--- gtk/gtkcalendar.c
+++ gtk/gtkcalendar.c
@@ -565,8 +565,9 @@
   time_t tmp_time;
   GtkCalendarPrivate *priv;
   gchar *year_before;
-  gchar *week_start;
-  
+  gchar *week_start, week_startsub = 1;
+  guint week_origin;
+
   priv = calendar->priv = G_TYPE_INSTANCE_GET_PRIVATE (calendar,
 						       GTK_TYPE_CALENDAR,
 						       GtkCalendarPrivate);
@@ -652,7 +653,15 @@
 
 #ifdef HAVE__NL_TIME_FIRST_WEEKDAY
   week_start = nl_langinfo (_NL_TIME_FIRST_WEEKDAY);
-  priv->week_start = (*((unsigned char *) week_start) - 1) % 7;
+  week_origin = GPOINTER_TO_INT (nl_langinfo (_NL_TIME_WEEK_1STDAY));
+  if (week_origin == 19971130)
+    week_startsub = 0;
+  else if (week_origin == 19971201)
+    week_startsub = 1;
+  else
+    g_warning ("Unknown value of _NL_TIME_WEEK_1STDAY.\n");
+
+  priv->week_start = (*((unsigned char *) week_start) - week_startsub) % 7;
 #else
   /* Translate to calendar:week_start:0 if you want Sunday to be the
    * first day of the week to calendar:week_start:1 if you want Monday
