diff --git a/js/ui/calendar.js b/js/ui/calendar.js index 77f8b648d..db6cb2c3f 100644 --- a/js/ui/calendar.js +++ b/js/ui/calendar.js @@ -16,6 +16,7 @@ const SHOW_WEEKDATE_KEY = 'show-weekdate'; // alias to prevent xgettext from picking up strings translated in GTK+ const gtk30_ = Gettext_gtk30.gettext; +const NC_ = function(context, str) { return str; }; // in org.gnome.desktop.interface const CLOCK_FORMAT_KEY = 'clock-format'; @@ -792,14 +793,17 @@ const EventsList = new Lang.Class({ let dayBegin = _getBeginningOfDay(day); let dayEnd = _getEndOfDay(day); - let dayString; + let dayFormat; let now = new Date(); if (_sameYear(day, now)) /* Translators: Shown on calendar heading when selected day occurs on current year */ - dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d")); + dayFormat = Shell.util_translate_time_string(NC_("calendar heading", + "%A, %B %d")); else /* Translators: Shown on calendar heading when selected day occurs on different year */ - dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d, %Y")); + dayFormat = Shell.util_translate_time_string(NC_("calendar heading", + "%A, %B %d, %Y")); + let dayString = day.toLocaleFormat(dayFormat); this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true); }, diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js index 0d5fc0ea1..fc535ebde 100644 --- a/js/ui/components/telepathyClient.js +++ b/js/ui/components/telepathyClient.js @@ -36,6 +36,8 @@ const NotificationDirection = { RECEIVED: 'chat-received' }; +const N_ = function(s) { return s; }; + function makeMessageFromTpMessage(tpMessage, direction) { let [text, flags] = tpMessage.to_text(); @@ -950,70 +952,70 @@ const ChatNotification = new Lang.Class({ // Show only the time if date is on today if(daysAgo < 1){ /* Translators: Time in 24h format */ - format = _("%H\u2236%M"); + format = N_("%H\u2236%M"); } // Show the word "Yesterday" and time if date is on yesterday else if(daysAgo <2){ /* Translators: this is the word "Yesterday" followed by a time string in 24h format. i.e. "Yesterday, 14:30" */ // xgettext:no-c-format - format = _("Yesterday, %H\u2236%M"); + format = N_("Yesterday, %H\u2236%M"); } // Show a week day and time if date is in the last week else if (daysAgo < 7) { /* Translators: this is the week day name followed by a time string in 24h format. i.e. "Monday, 14:30" */ // xgettext:no-c-format - format = _("%A, %H\u2236%M"); + format = N_("%A, %H\u2236%M"); } else if (date.getYear() == now.getYear()) { /* Translators: this is the month name and day number followed by a time string in 24h format. i.e. "May 25, 14:30" */ // xgettext:no-c-format - format = _("%B %d, %H\u2236%M"); + format = N_("%B %d, %H\u2236%M"); } else { /* Translators: this is the month name, day number, year number followed by a time string in 24h format. i.e. "May 25 2012, 14:30" */ // xgettext:no-c-format - format = _("%B %d %Y, %H\u2236%M"); + format = N_("%B %d %Y, %H\u2236%M"); } } else { // Show only the time if date is on today if(daysAgo < 1){ /* Translators: Time in 24h format */ - format = _("%l\u2236%M %p"); + format = N_("%l\u2236%M %p"); } // Show the word "Yesterday" and time if date is on yesterday else if(daysAgo <2){ /* Translators: this is the word "Yesterday" followed by a time string in 12h format. i.e. "Yesterday, 2:30 pm" */ // xgettext:no-c-format - format = _("Yesterday, %l\u2236%M %p"); + format = N_("Yesterday, %l\u2236%M %p"); } // Show a week day and time if date is in the last week else if (daysAgo < 7) { /* Translators: this is the week day name followed by a time string in 12h format. i.e. "Monday, 2:30 pm" */ // xgettext:no-c-format - format = _("%A, %l\u2236%M %p"); + format = N_("%A, %l\u2236%M %p"); } else if (date.getYear() == now.getYear()) { /* Translators: this is the month name and day number followed by a time string in 12h format. i.e. "May 25, 2:30 pm" */ // xgettext:no-c-format - format = _("%B %d, %l\u2236%M %p"); + format = N_("%B %d, %l\u2236%M %p"); } else { /* Translators: this is the month name, day number, year number followed by a time string in 12h format. i.e. "May 25 2012, 2:30 pm"*/ // xgettext:no-c-format - format = _("%B %d %Y, %l\u2236%M %p"); + format = N_("%B %d %Y, %l\u2236%M %p"); } } - return date.toLocaleFormat(format); + return date.toLocaleFormat(Shell.util_translate_time_string(format)); }, appendTimestamp: function() { diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js index db8f2a556..79787eb8e 100644 --- a/js/ui/dateMenu.js +++ b/js/ui/dateMenu.js @@ -129,7 +129,7 @@ const DateMenuButton = new Lang.Class({ /* Translators: This is the date format to use when the calendar popup is * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). */ - let dateFormat = _("%A %B %e, %Y"); + let dateFormat = Shell.util_translate_time_string ("%A %B %e, %Y"); this._date.set_label(now.toLocaleFormat(dateFormat)); } })); diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js index 32ef1ca9e..55412155b 100644 --- a/js/ui/screenShield.js +++ b/js/ui/screenShield.js @@ -85,7 +85,8 @@ const Clock = new Lang.Class({ let date = new Date(); /* Translators: This is a time format for a date in long format */ - this._date.text = date.toLocaleFormat(_("%A, %B %d")); + let dateFormat = Shell.util_translate_time_string("%A, %B %d"); + this._date.text = date.toLocaleFormat(dateFormat); }, destroy: function() { diff --git a/src/shell-util.c b/src/shell-util.c index 5ae4fdb3c..c3936c1a8 100644 --- a/src/shell-util.c +++ b/src/shell-util.c @@ -12,6 +12,7 @@ #include #include +#include #ifdef HAVE__NL_TIME_FIRST_WEEKDAY #include #endif @@ -208,6 +209,32 @@ shell_util_get_week_start () return week_start; } +/** + * shell_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 char * +shell_util_translate_time_string (const char *str) +{ + const char *locale = g_getenv ("LC_TIME"); + const char *res; + + if (locale) + setlocale (LC_MESSAGES, locale); + + res = gettext (str); + + setlocale (LC_MESSAGES, ""); + + return res; +} + /** * shell_write_string_to_stream: * @stream: a #GOutputStream diff --git a/src/shell-util.h b/src/shell-util.h index d7ab4fdcf..153278eb2 100644 --- a/src/shell-util.h +++ b/src/shell-util.h @@ -21,6 +21,7 @@ int shell_util_get_week_start (void); char *shell_util_format_date (const char *format, gint64 time_ms); +const char *shell_util_translate_time_string (const char *str); gboolean shell_write_string_to_stream (GOutputStream *stream, const char *str,