Index: misc.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/misc.c,v
retrieving revision 1.7
diff -u -r1.7 misc.c
--- misc.c	11 Feb 2006 19:14:49 -0000	1.7
+++ misc.c	27 Feb 2006 06:33:03 -0000
@@ -100,47 +100,35 @@
 {
 	time_t difference = end - start;
 	char *str;
-	
-	if (difference < 60) {/* Can't be zero */ 
-		str = g_strdup_printf (_("(%d seconds)"), difference);
-	} else if (difference > 60 && difference < 3600) { /* It will be x minutes y seconds*/
-		int minutes, seconds;
-		minutes = difference / 60;
-		seconds = difference % 60;
-		if (seconds)
-		/* TRANSLATORS: here, "second" is the time division (like "minute"), not the ordinal number (like "third") */
-			str = g_strdup_printf (_("(%d %s %d %s)"), minutes, ngettext(_("minute"), _("minutes"), minutes), seconds, ngettext(_("second"), _("seconds"), seconds));
-		else 
-			str = g_strdup_printf (_("(%d %s)"), minutes, ngettext(_("minute"), _("minutes"), minutes));
-	} else {
-		guint hours, minutes, seconds;
-		char *s_hours = NULL, *s_minutes = NULL, *s_seconds = NULL;
-		
-		hours = difference / 3600;
-		minutes = (difference % 3600)/60;
-		seconds = difference % 60;
+	int   hours, minutes;
+	char *times[4];
+	char *joined;
+	int   i;
 
+        i = 0;
+	if (difference >= 3600) {
+		hours = difference / 3600;
+		difference %= 3600;
 
-		if (seconds)
-			s_seconds = g_strdup_printf (ngettext(_(" %u second"), _(" %u seconds"), seconds), seconds);	
-		if (minutes)
-			s_minutes = g_strdup_printf (ngettext(_(" %u minute"), _(" %u minutes"), minutes), minutes);
-		if (hours)
-			s_hours = g_strdup_printf (ngettext(_("%u hour"),_("%u hours"), hours), hours);
-
-		if (s_minutes && s_seconds)
-			str = g_strconcat ("(", s_hours, s_minutes, s_seconds, ")", NULL);
-		else if (s_minutes)
-			str = g_strconcat ("(", s_hours, s_minutes, ")", NULL);
-		else if (s_seconds)
-			str = g_strconcat ("(", s_hours, s_seconds, ")", NULL);
-		else 
-			str = g_strconcat ("(", s_hours, ")", NULL);
+		times[i++] = g_strdup_printf (ngettext("%d hour", "%d hours", hours), hours);
+	}
+	if (difference >= 60) {
+		minutes = difference / 60;
+		difference %= 60;
 
-		g_free (s_hours);
-		g_free (s_minutes);
-		g_free (s_seconds);
+		times[i++] = g_strdup_printf (ngettext("%d minute", "%d minutes", minutes), minutes);
 	}
+	if (i == 0 || difference != 0) {
+	/* TRANSLATORS: here, "second" is the time division (like "minute"), not the ordinal number (like "third") */
+		times[i++] = g_strdup_printf (ngettext("%d second", "%d seconds", difference), (int)difference);
+	}
+
+	times[i] = NULL;
+	joined = g_strjoinv (" ", times);
+	str = g_strconcat ("(", joined, ")", NULL);
+	while (i > 0)
+		g_free (times[--i]);
+	g_free (joined);
 
 	return g_strchug(str);
 }
Index: alarm-notify/util.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/alarm-notify/util.c,v
retrieving revision 1.7
diff -u -r1.7 util.c
--- alarm-notify/util.c	11 Feb 2006 19:14:49 -0000	1.7
+++ alarm-notify/util.c	27 Feb 2006 06:33:03 -0000
@@ -53,47 +53,35 @@
 {
 	time_t difference = end - start;
 	char *str;
+	int   hours, minutes;
+	char *times[4];
+	char *joined;
+	int   i;
 
-	if (difference < 60) {/* Can't be zero */
-		str = g_strdup_printf (_("(%ld seconds)"), difference);
-	} else if (difference > 60 && difference < 3600) { /* It will be x minutes y seconds*/
-		int minutes, seconds;
-		minutes = difference / 60;
-		seconds = difference % 60;
-		if (seconds)
-		/* TRANSLATORS: here, "second" is the time division (like "minute"), not the ordinal number (like "third") */
-			str = g_strdup_printf (_("(%d %s %d %s)"), minutes, ngettext(_("minute"), _("minutes"), minutes), seconds, ngettext(_("second"), _("seconds"), seconds));
-		else
-			str = g_strdup_printf (_("(%d %s)"), minutes, ngettext(_("minute"), _("minutes"), minutes));
-	} else {
-		guint hours, minutes, seconds;
-		char *s_hours = NULL, *s_minutes = NULL, *s_seconds = NULL;
-		
+        i = 0;
+	if (difference >= 3600) {
 		hours = difference / 3600;
-		minutes = (difference % 3600)/60;
-		seconds = difference % 60;
-
-		
-		if (seconds)
-			s_seconds = g_strdup_printf (ngettext(_(" %u second"), _(" %u seconds"), seconds), seconds);
-		if (minutes)
-			s_minutes = g_strdup_printf (ngettext(_(" %u minute"), _(" %u minutes"), minutes), minutes);
-		if (hours)
-			s_hours = g_strdup_printf (ngettext(_("%u hour"),_("%u hours"), hours), hours);
+		difference %= 3600;
 
-		if (s_minutes && s_seconds)
-                        str = g_strconcat ("(", s_hours, s_minutes, s_seconds, ")", NULL);
-		else if (s_minutes)
-			str = g_strconcat ("(", s_hours, s_minutes, ")", NULL);
-		else if (s_seconds)
-			str = g_strconcat ("(", s_hours, s_seconds, ")", NULL);
-		else
-			str = g_strconcat ("(", s_hours, ")", NULL);
+		times[i++] = g_strdup_printf (ngettext("%d hour", "%d hours", hours), hours);
+	}
+	if (difference >= 60) {
+		minutes = difference / 60;
+		difference %= 60;
 
-		g_free (s_hours);
-		g_free (s_minutes);
-		g_free (s_seconds);
+		times[i++] = g_strdup_printf (ngettext("%d minute", "%d minutes", minutes), minutes);
+	}
+	if (i == 0 || difference != 0) {
+	/* TRANSLATORS: here, "second" is the time division (like "minute"), not the ordinal number (like "third") */
+		times[i++] = g_strdup_printf (ngettext("%d second", "%d seconds", difference), (int)difference);
 	}
+
+	times[i] = NULL;
+	joined = g_strjoinv (" ", times);
+	str = g_strconcat ("(", joined, ")", NULL);
+	while (i > 0)
+		g_free (times[--i]);
+	g_free (joined);
 
 	return g_strchug(str);
 }
Index: dialogs/recurrence-page.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/dialogs/recurrence-page.c,v
retrieving revision 1.77
diff -u -r1.77 recurrence-page.c
--- dialogs/recurrence-page.c	12 Feb 2006 21:53:32 -0000	1.77
+++ dialogs/recurrence-page.c	27 Feb 2006 06:33:09 -0000
@@ -989,28 +989,28 @@
 		 * (dropdown menu options are in [square brackets]). This means that after 'first', either the string 'day' or 
 		 * the name of a week day (like 'Monday' or 'Friday') always follow.
 		 */
-		N_("first"),
+		N_("ordinal|first"),
 		/* TRANSLATORS: here, "second" is the ordinal number (like "third"), not the time division (like "minute")
 		 * Entire string is for example: This appointment recurs/Every [x] month(s) on the [second] [Monday] [forever]'
 		 * (dropdown menu options are in [square brackets]). This means that after 'second', either the string 'day' or 
 		 * the name of a week day (like 'Monday' or 'Friday') always follow.
 		 */
-		N_("second"),
+		N_("ordinal|second"),
 		/* TRANSLATORS: Entire string is for example: This appointment recurs/Every [x] month(s) on the [third] [Monday] [forever]'
 		 * (dropdown menu options are in [square brackets]). This means that after 'third', either the string 'day' or 
 		 * the name of a week day (like 'Monday' or 'Friday') always follow.
 		 */
-		N_("third"),
+		N_("ordinal|third"),
 		/* TRANSLATORS: Entire string is for example: This appointment recurs/Every [x] month(s) on the [fourth] [Monday] [forever]'
 		 * (dropdown menu options are in [square brackets]). This means that after 'fourth', either the string 'day' or 
 		 * the name of a week day (like 'Monday' or 'Friday') always follow.
 		 */
-		N_("fourth"),
+		N_("ordinal|fourth"),
 		/* TRANSLATORS: Entire string is for example: This appointment recurs/Every [x] month(s) on the [last] [Monday] [forever]'
 		 * (dropdown menu options are in [square brackets]). This means that after 'last', either the string 'day' or 
 		 * the name of a week day (like 'Monday' or 'Friday') always follow.
 		 */
-		N_("last")
+		N_("ordinal|last")
 	};
 
 	GtkWidget *menu, *submenu, *item, *submenu_item;
@@ -1021,7 +1021,7 @@
 
 	/* Relation */
 	for (i = 0; i < sizeof (options) / sizeof (options[0]); i++) {
-		item = gtk_menu_item_new_with_label (_(options[i]));
+		item = gtk_menu_item_new_with_label (Q_(options[i]));
 		gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
 		gtk_widget_show (item);
 	}
