diff options
-rw-r--r-- | calendar/ChangeLog | 7 | ||||
-rw-r--r-- | calendar/gui/calendar-config.c | 8 | ||||
-rw-r--r-- | calendar/gui/e-itip-control.c | 17 | ||||
-rw-r--r-- | calendar/gui/e-timezone-entry.c | 42 |
4 files changed, 59 insertions, 15 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 3b856c3df5..3ed9734e9e 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,10 @@ +2002-01-11 Damon Chaplin <damon@ximian.com> + + * gui/e-timezone-entry.c: + * gui/e-itip-control.c (write_label_piece): + * gui/calendar-config.c (on_timezone_set): translate timezone names + when displayed. Fixes bug #6544. + 2002-01-03 JP Rosevear <jpr@ximian.com> * gui/tasks-control.c (tasks_control_complete_cmd): new verb diff --git a/calendar/gui/calendar-config.c b/calendar/gui/calendar-config.c index e0313fe3a7..80f7f856d8 100644 --- a/calendar/gui/calendar-config.c +++ b/calendar/gui/calendar-config.c @@ -1000,11 +1000,15 @@ on_timezone_set (GnomeDialog *dialog, ETimezoneDialog *etd) { char *display_name; + icaltimezone *zone; e_timezone_dialog_get_timezone (etd, &display_name); - if (display_name && display_name[0]) { - calendar_config_set_timezone (display_name); + /* We know it can only be a builtin timezone, since there is no way + to set it to anything else. */ + zone = e_timezone_dialog_get_builtin_timezone (display_name); + if (zone) { + calendar_config_set_timezone (icaltimezone_get_location (zone)); calendar_config_write (); update_all_config_settings (); diff --git a/calendar/gui/e-itip-control.c b/calendar/gui/e-itip-control.c index bb935ea396..66abdb89be 100644 --- a/calendar/gui/e-itip-control.c +++ b/calendar/gui/e-itip-control.c @@ -489,11 +489,22 @@ write_label_piece (EItipControl *itip, CalComponentDateTime *dt, /* Output timezone after time, e.g. " America/New_York". */ if (zone) { + /* Note that this returns UTF-8, since all iCalendar data is + UTF-8. But it probably is not translated. */ display_name = icaltimezone_get_display_name (zone); - /* These are ASCII strings, so should be OK as UTF-8.*/ - if (display_name) { + if (display_name && *display_name) { strcat (buffer, " "); - strcat (buffer, display_name); + + /* We check if it is one of our builtin timezone names, + in which case we call gettext to translate it, and + we need to convert to UTF-8. If it isn't a builtin + timezone name, we use it as-is, as it is already + UTF-8. */ + if (icaltimezone_get_builtin_timezone (display_name)) { + strcat (buffer, U_(display_name)); + } else { + strcat (buffer, display_name); + } } } diff --git a/calendar/gui/e-timezone-entry.c b/calendar/gui/e-timezone-entry.c index eb8ebe8df4..84c512b574 100644 --- a/calendar/gui/e-timezone-entry.c +++ b/calendar/gui/e-timezone-entry.c @@ -34,6 +34,7 @@ #include <gtk/gtkentry.h> #include <gtk/gtksignal.h> #include <gnome.h> +#include <gal/widgets/e-unicode.h> #include <widgets/e-timezone-dialog/e-timezone-dialog.h> #include "e-timezone-entry.h" @@ -77,7 +78,8 @@ static void on_entry_changed (GtkEntry *entry, static void on_button_clicked (GtkWidget *widget, ETimezoneEntry *tentry); -static char* e_timezone_entry_get_display_name (icaltimezone *zone); +static char* e_timezone_entry_get_display_name (ETimezoneEntry *tentry, + icaltimezone *zone); static void e_timezone_entry_set_entry_visibility (ETimezoneEntry *tentry); @@ -287,9 +289,7 @@ e_timezone_entry_get_timezone (ETimezoneEntry *tentry) builtin timezone or 'local time' (i.e. no timezone). */ display_name = gtk_entry_get_text (GTK_ENTRY (priv->entry)); - if (display_name && display_name[0]) - return icaltimezone_get_builtin_timezone (display_name); - return NULL; + return e_timezone_dialog_get_builtin_timezone (display_name); } @@ -298,6 +298,7 @@ e_timezone_entry_set_timezone (ETimezoneEntry *tentry, icaltimezone *zone) { ETimezoneEntryPrivate *priv; + gchar *display_name; g_return_if_fail (E_IS_TIMEZONE_ENTRY (tentry)); @@ -306,20 +307,41 @@ e_timezone_entry_set_timezone (ETimezoneEntry *tentry, priv->zone = zone; priv->changed = FALSE; + display_name = e_timezone_entry_get_display_name (tentry, zone); gtk_entry_set_text (GTK_ENTRY (priv->entry), - zone ? e_timezone_entry_get_display_name (zone) : ""); + display_name ? display_name : ""); + g_free (display_name); e_timezone_entry_set_entry_visibility (tentry); } -/* Returns the timezone name to display to the user. . We prefer to use the - Olson city name, but fall back on the TZNAME, or finally the TZID. We don't - want to use "" as it may be wrongly interpreted as a 'local time'. */ +/* Returns the timezone name to display to the user, in the locale's encoding. + We prefer to use the Olson city name, but fall back on the TZNAME, or + finally the TZID. We don't want to use "" as it may be wrongly interpreted + as a 'local time'. If zone is NULL, NULL is returned. The returned string + should be freed. */ static char* -e_timezone_entry_get_display_name (icaltimezone *zone) +e_timezone_entry_get_display_name (ETimezoneEntry *tentry, + icaltimezone *zone) { - return icaltimezone_get_display_name (zone); + char *display_name; + + if (!zone) + return NULL; + + /* Get the UTF-8 display name from the icaltimezone. */ + display_name = icaltimezone_get_display_name (zone); + + /* We check if it is one of our builtin timezone names, in which case + we call gettext to translate it. If it isn't a builtin timezone + name, we need to convert it to the GTK+ encoding. */ + if (icaltimezone_get_builtin_timezone (display_name)) { + return g_strdup (_(display_name)); + } else { + return e_utf8_to_gtk_string (GTK_WIDGET (tentry), + display_name); + } } |