[gnome-calendar] event-editor/schedule-section: Fix localization mix



commit ad7ff65a4d74a9e7e251ec7e1a8c2e81d80de0fc
Author: Björn Daase <bjoern daase net>
Date:   Thu Feb 3 22:46:31 2022 +0100

    event-editor/schedule-section: Fix localization mix
    
    The gcal_util_translate_time_string function is a plain copy of
    gnome-shells shell_util_translate_time_string solving the same problem.
    
    Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/581

 src/gui/event-editor/gcal-schedule-section.c |  4 ++--
 src/utils/gcal-utils.c                       | 35 ++++++++++++++++++++++++++++
 src/utils/gcal-utils.h                       |  2 ++
 3 files changed, 39 insertions(+), 2 deletions(-)
---
diff --git a/src/gui/event-editor/gcal-schedule-section.c b/src/gui/event-editor/gcal-schedule-section.c
index 4a20eb2c..7f13d9a7 100644
--- a/src/gui/event-editor/gcal-schedule-section.c
+++ b/src/gui/event-editor/gcal-schedule-section.c
@@ -235,7 +235,7 @@ format_datetime_for_display (GDateTime      *date,
     {
     case -7 ... -2:
       /* Translators: %A is the weekday name (e.g. Sunday, Monday, etc) */
-      formatted_date = g_date_time_format (local_dt, _("Last %A"));
+      formatted_date = g_date_time_format (local_dt, gcal_util_translate_time_string (_("Last %A")));
       break;
 
     case -1:
@@ -252,7 +252,7 @@ format_datetime_for_display (GDateTime      *date,
 
     case 2 ... 7:
       /* Translators: %A is the weekday name (e.g. Sunday, Monday, etc) */
-      formatted_date = g_date_time_format (local_dt, _("This %A"));
+      formatted_date = g_date_time_format (local_dt, gcal_util_translate_time_string (_("This %A")));
       break;
 
     default:
diff --git a/src/utils/gcal-utils.c b/src/utils/gcal-utils.c
index 1b253dcf..044a0158 100644
--- a/src/utils/gcal-utils.c
+++ b/src/utils/gcal-utils.c
@@ -1325,3 +1325,38 @@ gcal_utils_ask_recurrence_modification_type (GtkWidget                 *parent,
 
   gtk_window_present (GTK_WINDOW (dialog));
 }
+
+/**
+ * gcal_util_translate_time_string:
+ * @str: String to translate
+ *
+ * Translate @str according to the locale defined by LC_TIME; unlike
+ * dcgettext(), the translations is still taken from the LC_MESSAGES
+ * catalogue and not the LC_TIME one.
+ *
+ * Returns: the translated string
+ */
+const gchar *
+gcal_util_translate_time_string (const gchar *str)
+{
+  const gchar *locale = g_getenv ("LC_TIME");
+  const gchar *res;
+  gchar *sep;
+  locale_t old_loc;
+  locale_t loc = (locale_t) 0;
+
+  if (locale)
+    loc = newlocale (LC_MESSAGES_MASK, locale, (locale_t) 0);
+
+  old_loc = uselocale (loc);
+
+  sep = strchr (str, '\004');
+  res = g_dpgettext (NULL, str, sep ? sep - str + 1 : 0);
+
+  uselocale (old_loc);
+
+  if (loc != (locale_t) 0)
+    freelocale (loc);
+
+  return res;
+}
diff --git a/src/utils/gcal-utils.h b/src/utils/gcal-utils.h
index 42931afc..11392be1 100644
--- a/src/utils/gcal-utils.h
+++ b/src/utils/gcal-utils.h
@@ -135,4 +135,6 @@ void                 gcal_utils_ask_recurrence_modification_type (GtkWidget
                                                                   GcalAskRecurrenceCallback  callback,
                                                                   gpointer                   user_data);
 
+const gchar *        gcal_util_translate_time_string             (const gchar          *str);
+
 #endif /* __GCAL_UTILS_H__ */


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